Name: series-workflowrr9xg Phase: Succeeded StartedAt: 2026-09-11 07:59:34 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[0] Phase: Succeeded StartedAt: 2026-09-11 07:59:34 +0000 UTC FinishedAt: 2026-09-11 08:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:59:34 +0000 UTC FinishedAt: 2026-09-11 08:23:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "SCSI" ], "series_id": "14505dd3-c2d7-4db9-b047-755b4b684877" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_dispatch_rq_list", "scsi_queue_rq", "scsi_cleanup_rq", "scsi_mq_uninit_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCYjMzQ7LAogICAgJiMzNDtzY3NpX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfY2xlYW51cF9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZXF1ZXN0IGRpc3BhdGNoIGVycm9yIGhhbmRsaW5nIGluIGBibGstbXFgIGJ5IGFkZGluZyBhIGNhbGwgdG8gYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KClgIHdoZW4gYHF1ZXVlX3JxKClgIHJldHVybnMgYW4gZXJyb3IsIGFuZCByZW1vdmluZyB0aGUgbWFudWFsIGludm9jYXRpb24gb2YgYHNjc2lfbXFfdW5pbml0X2NtZCgpYCBmcm9tIGBzY3NpX3F1ZXVlX3JxKClgLlxuXG5UaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNsZWFudXAgYW5kIGxpZmVjeWNsZSBwYXRoIG9mIGBzdHJ1Y3QgcmVxdWVzdGAgYW5kIGRyaXZlciBQRFVzIHVwb24gcXVldWUgZmFpbHVyZS4gUG90ZW50aWFsIGlzc3VlcyBpbiB0aGlzIGFyZWEgcmVsYXRlIHRvIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRvdWJsZS1mcmVlaW5nIG9yIHVzZS1hZnRlci1mcmVlIG9mIHNjYXR0ZXJsaXN0cy9jb21tYW5kIGJ1ZmZlcnMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTFiY2I4MjFlOWM2ZWUyMTMzZDA1Y2MyMTM4Y2E3NTkyYTMwNzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MjE6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuY1xuQEAgLTIxMjYsNiAmIzQzOzIxMjYsNyBAQCBib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHRcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuIFx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbiBcdFx0fVxuIFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbkBAIC0xOTYwLDEzICYjNDM7MTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRlbHNlXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcdTAwM2NcdTAwM2MgMTY7XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW5cbi1cdFx0ICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmRcbi1cdFx0ICogYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4tXHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4mIzQzO1x0XHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXG4gXHRcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QmIzM0OywKICAgICYjMzQ7c2NzaV9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX2NsZWFudXBfcnEmIzM0OywKICAgICYjMzQ7c2NzaV9tcV91bmluaXRfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTFiY2I4MjFlOWM2ZWUyMTMzZDA1Y2MyMTM4Y2E3NTkyYTMwNzA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6MjE6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jCmluZGV4IGEyNmExMWM3M2VlM2UuLmViM2E0ODEyMTFkMGIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS5jCkBAIC0yMTI2LDYgJiM0MzsyMTI2LDcgQEAgYm9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCWJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTsKIAkJCWdvdG8gb3V0OwogCQlkZWZhdWx0OgomIzQzOwkJCWJsa19tcV9jbGVhbnVwX3JxKHJxKTsKIAkJCWJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTsKIAkJfQogCX0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggYWYyN2ZkM2RmOGQ0Ni4uMWVhNjViNWViMjVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTE5NjAsMTMgJiM0MzsxOTYwLDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQkJY21kLSZndDtyZXN1bHQgPSBESURfTk9fQ09OTkVDVCAmbHQ7Jmx0OyAxNjsKIAkJZWxzZQogCQkJY21kLSZndDtyZXN1bHQgPSBESURfRVJST1IgJmx0OyZsdDsgMTY7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW4KLQkJICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmQKLQkJICogYWdhaW4uCi0JCSAqLwotCQlpZiAocmVxLSZndDtycV9mbGFncyAmYW1wOyBSUUZfRE9OVFBSRVApCi0JCQlzY3NpX21xX3VuaW5pdF9jbWQoY21kKTsKJiM0MzsJCS8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi8KIAkJc2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NgoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBJIHNlZSBjaGFuZ2VzIGluIGBibG9jay9ibGstbXEuY2Agd2l0aGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgc2NzaV9xdWV1ZV9ycWAgZnVuY3Rpb24uIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KCkluIGBibGstbXEuY2AsIHRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgY2FsbGluZyBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUgY29tbWVudCBpbiBgc2NzaV9saWIuY2Agc3VnZ2VzdHMgd2Ugd2VyZSBwcmV2aW91c2x5IGNhbGxpbmcgc29tZSBjbGVhbiB1cCBvbiBlcnJvciB3aGVuIGEgc3BlY2lmaWMgZmxhZyB3YXMgc2V0IG9uIHRoZSByZXF1ZXN0LiBOb3csIHRoYXQmIzM5O3MgcmVtb3ZlZCBhbmQgYSBjb21tZW50IHNheXMgYmxrLW1xIHdpbGwgaGFuZGxlIGNsZWFudXAuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IGludm9sdmVzIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IGZyZWVpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIG9yIGFzc29jaWF0ZWQgZGF0YSB3aGVuIHJlcXVlc3RzIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IuIFRoZSBjb21tZW50ZWQtb3V0IGNvZGUgaW4gYHNjc2lfbGliLmNgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGlmIHRoZSByZXF1ZXN0IGZhaWxzIChzcGVjaWZpY2FsbHksIGBESURfTk9fQ09OTkVDVGAgb3IgYERJRF9FUlJPUmApLiBJdCBhcHBlYXJzIHRoaXMgcmVzcG9uc2liaWxpdHkgaXMgYmVpbmcgc2hpZnRlZCBpbnRvIHRoZSBibG9jayBsYXllciwgd2hpY2ggd291bGQgbWVhbiBgYmxrX21xX2NsZWFudXBfcnEoKWAgaXMgcHJvYmFibHkgdGhlIG1hZ2ljIGZ1bmN0aW9uLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYGJsa19tcV9jbGVhbnVwX3JxKClgIGZ1bmN0aW9uIGRvZXMgYW5kIHdoYXQgc3BlY2lmaWMgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdW5jdGlvbiBpbiB0aGUgYGJsay1tcS5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHJlcXVlc3Qgd2l0aGluIHRoZSBibG9jayBsYXllci4gU2luY2UgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIGEgU0NTSSBkcml2ZXIsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIHdoZW4gYSBTQ1NJIGNvbW1hbmQgZXJyb3JzIG91dC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjbGVhbnVwIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciByZXNvdXJjZSBsZWFrcy4gVWx0aW1hdGVseSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocywgYW5kIHRoYXQgdGhlIHJlc291cmNlIGNsZWFudXAgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEwMDpcdFx0ICovXG4yMTAxOlx0XHRxdWV1ZWQgPSAwO1xuMjEwMjpcdFx0ZG8ge1xuMjEwMzpcdFx0XHRzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgYmQ7XG4yMTA0Olx0XG4yMTA1Olx0XHRcdHJxID0gbGlzdF9maXJzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0V0FSTl9PTl9PTkNFKGhjdHggIT0gcnEtXHUwMDNlbXFfaGN0eCk7XG4yMTA4Olx0XHRcdHByZXAgPSBibGtfbXFfcHJlcF9kaXNwYXRjaF9ycShycSwgZ2V0X2J1ZGdldCk7XG4yMTA5Olx0XHRcdGlmIChwcmVwICE9IFBSRVBfRElTUEFUQ0hfT0spXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XG4yMTEyOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbjIxMTM6XHRcbjIxMTQ6XHRcdFx0YmQucnEgPSBycTtcbjIxMTU6XHRcdFx0YmQubGFzdCA9IGxpc3RfZW1wdHkobGlzdCk7XG4yMTE2Olx0XG4yMTE3Olx0XHRcdHJldCA9IHEtXHUwMDNlbXFfb3BzLVx1MDAzZXF1ZXVlX3JxKGhjdHgsIFx1MDAyNmJkKTtcbjIxMTg6XHRcdFx0c3dpdGNoIChyZXQpIHtcbjIxMTk6XHRcdFx0Y2FzZSBCTEtfU1RTX09LOlxuMjEyMDpcdFx0XHRcdHF1ZXVlZCYjNDM7JiM0Mzs7XG4yMTIxOlx0XHRcdFx0YnJlYWs7XG4yMTIyOlx0XHRcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcbjIxMjM6XHRcdFx0XHRuZWVkc19yZXNvdXJjZSA9IHRydWU7XG4yMTI0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4yMTI1Olx0XHRcdGNhc2UgQkxLX1NUU19ERVZfUkVTT1VSQ0U6XG4yMTI2Olx0XHRcdFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xuMjEyNzpcdFx0XHRcdGdvdG8gb3V0O1xuMjEyODpcdFx0XHRkZWZhdWx0OlxuMjEyOTpcdFx0XHRcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcbjIxMzA6XHRcdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4yMTMxOlx0XHRcdH1cbjIxMzI6XHRcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcbjIxMzM6XHRvdXQ6XG4yMTM0Olx0XHQvKiBJZiB3ZSBkaWRuJiMzOTt0IGZsdXNoIHRoZSBlbnRpcmUgbGlzdCwgd2UgY291bGQgaGF2ZSB0b2xkIHRoZSBkcml2ZXJcbjIxMzU6XHRcdCAqIHRoZXJlIHdhcyBtb3JlIGNvbWluZywgYnV0IHRoYXQgdHVybmVkIG91dCB0byBiZSBhIGxpZS5cbjIxMzY6XHRcdCAqL1xuMjEzNzpcdFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpIHx8IHJldCAhPSBCTEtfU1RTX09LKVxuMjEzODpcdFx0XHRibGtfbXFfY29tbWl0X3JxcyhoY3R4LCBxdWV1ZWQsIGZhbHNlKTtcbjIxMzk6XHRcbjIxNDA6XHRcdC8qXG4yMTQxOlx0XHQgKiBBbnkgaXRlbXMgdGhhdCBuZWVkIHJlcXVldWluZz8gU3R1ZmYgdGhlbSBpbnRvIGhjdHgtXHUwMDNlZGlzcGF0Y2gsXG4yMTQyOlx0XHQgKiB0aGF0IGlzIHdoZXJlIHdlIHdpbGwgY29udGludWUgb24gbmV4dCBxdWV1ZSBydW4uXG4yMTQzOlx0XHQgKi9cbjIxNDQ6XHRcdGlmICghbGlzdF9lbXB0eShsaXN0KSkge1xuMjE0NTpcdFx0XHRib29sIG5lZWRzX3Jlc3RhcnQ7XG4yMTQ2Olx0XHRcdC8qIEZvciBub24tc2hhcmVkIHRhZ3MsIHRoZSBSRVNUQVJUIGNoZWNrIHdpbGwgc3VmZmljZSAqL1xuMjE0NzpcdFx0XHRib29sIG5vX3RhZyA9IHByZXAgPT0gUFJFUF9ESVNQQVRDSF9OT19UQUcgXHUwMDI2XHUwMDI2XG4yMTQ4Olx0XHRcdFx0KChoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfTVFfRl9UQUdfUVVFVUVfU0hBUkVEKSB8fFxuMjE0OTpcdFx0XHRcdGJsa19tcV9pc19zaGFyZWRfdGFncyhoY3R4LVx1MDAzZWZsYWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk0MDpcdG91dF9kZWNfdGFyZ2V0X2J1c3k6XG4xOTQxOlx0XHRpZiAoc2NzaV90YXJnZXQoc2RldiktXHUwMDNlY2FuX3F1ZXVlIFx1MDAzZSAwKVxuMTk0MjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNnNjc2lfdGFyZ2V0KHNkZXYpLVx1MDAzZXRhcmdldF9idXN5KTtcbjE5NDM6XHRvdXRfcHV0X2J1ZGdldDpcbjE5NDQ6XHRcdHNjc2lfbXFfcHV0X2J1ZGdldChxLCBjbWQtXHUwMDNlYnVkZ2V0X3Rva2VuKTtcbjE5NDU6XHRcdGNtZC1cdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcbjE5NDY6XHRcdHN3aXRjaCAocmV0KSB7XG4xOTQ3Olx0XHRjYXNlIEJMS19TVFNfT0s6XG4xOTQ4Olx0XHRcdGJyZWFrO1xuMTk0OTpcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMTk1MDpcdFx0XHRpZiAoc2NzaV9kZXZpY2VfYmxvY2tlZChzZGV2KSlcbjE5NTE6XHRcdFx0XHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcbjE5NTI6XHRcdFx0YnJlYWs7XG4xOTUzOlx0XHRjYXNlIEJMS19TVFNfQUdBSU46XG4xOTU0Olx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXHUwMDNjXHUwMDNjIDE2O1xuMTk1NTpcdFx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4xOTU2Olx0XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4xOTU3Olx0XHRcdGJyZWFrO1xuMTk1ODpcdFx0ZGVmYXVsdDpcbjE5NTk6XHRcdFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxuMTk2MDpcdFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcdTAwM2NcdTAwM2MgMTY7XG4xOTYxOlx0XHRcdGVsc2VcbjE5NjI6XHRcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFx1MDAzY1x1MDAzYyAxNjtcbjE5NjM6XHRcdFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xuMTk2NDpcdFx0XHRzY3NpX3J1bl9xdWV1ZV9hc3luYyhzZGV2KTtcbjE5NjU6XHRcdFx0YnJlYWs7XG4xOTY2Olx0XHR9XG4xOTY3Olx0XHRyZXR1cm4gcmV0O1xuMTk2ODpcdH1cbjE5Njk6XHRcbjE5NzA6XHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4xOTcxOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXG4xOTcyOlx0e1xuMTk3MzpcdFx0c3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZXQtXHUwMDNlZHJpdmVyX2RhdGE7XG4xOTc0Olx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjE5NzU6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4xOTc2Olx0XHRpbnQgcmV0ID0gMDtcbjE5Nzc6XHRcbjE5Nzg6XHRcdGNtZC1cdTAwM2VzZW5zZV9idWZmZXIgPVxuMTk3OTpcdFx0XHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgYmxrX21xX2NsZWFudXBfcnFgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGJsa19tcV9jbGVhbnVwX3JxYC4gTXkgZmlyc3QgbW92ZT8gRGVmaW5pdGVseSBhIGBncmVwYCBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzLWV5ZSB2aWV3IG9mIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0OyB3aG8gY2FsbHMgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXM/IFRoYXQgZ3JlcCB3aWxsIGJlIG15IGluaXRpYWwgbWFwIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUmIzM5O3MgY2FsbCBncmFwaC4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyBhcmUgbWFuYWdlYWJsZSBhbmQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgaW1wb3J0YW50IHBhcnRzLiBUaGVuLCBJIGNhbiBzdGFydCBmb3JtaW5nIG15IGh5cG90aGVzZXMgYmFzZWQgb24gdGhvc2UgbG9jYXRpb25zLiBUaGUgb2JqZWN0aXZlLCBvZiBjb3Vyc2UsIGlzIHRvIGdyYXNwIHRoZSByb2xlIGFuZCBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfY2xlYW51cF9ycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxuYmxvY2svYmxrLW1xLmMtMjEyOC1cdFx0ZGVmYXVsdDpcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuYmxvY2svYmxrLW1xLmMtMjEzMC1cdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4tLVxuZHJpdmVycy9tZC9kbS1ycS5jPTM2OT1zdGF0aWMgaW50IG1hcF9yZXF1ZXN0KHN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbylcbi0tXG5kcml2ZXJzL21kL2RtLXJxLmMtMzk5LVx0XHRcdGJsa19ycV91bnByZXBfY2xvbmUoY2xvbmUpO1xuZHJpdmVycy9tZC9kbS1ycS5jOjQwMDpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShjbG9uZSk7XG5kcml2ZXJzL21kL2RtLXJxLmMtNDAxLVx0XHRcdHRpby1cdTAwM2V0aS1cdTAwM2V0eXBlLVx1MDAzZXJlbGVhc2VfY2xvbmVfcnEoY2xvbmUsIFx1MDAyNnRpby1cdTAwM2VpbmZvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTEwMjA9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTAzOC1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6MTAzOTpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXImIzM5O3MgTVEgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5jbHVkZS9saW51eC9ibGstbXEuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxMDM5LiBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIGludGVyZXN0aW5nIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIHRoZSBtdWx0aS1xdWV1ZSBibG9jayBsYXllci4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSBzb21lIGtleSBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgcXVldWUgbWFuYWdlbWVudCBvciBJL08gc3VibWlzc2lvbiBwYXRocy4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSwgdGhhdCBhcmVhIHNob3VsZCBob2xkIGVpdGhlciB0aGUgZW5xdWV1ZS9kZXF1ZXVlIGxvZ2ljLCBvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0dXJlcyB0aGF0IHJlcHJlc2VudCB0aGUgcXVldWVzIGFuZCB0aGUgcmVxdWVzdHMgd2l0aGluIHRoZW0uIEl0IGNvdWxkIGFsc28gcG9pbnQgdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBjb21tYW5kIG1lcmdpbmcsIG9yIGhhbmRsaW5nIG9mIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBsaW5lIDEwMzkgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsay1tcS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0I2RlZmluZSBoY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpXHRcdFx0XHRcdFxcXG4xMDM2Olx0XHRmb3IgKChpKSA9IDA7IChpKSBcdTAwM2MgKGhjdHgpLVx1MDAzZW5yX2N0eCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4xMDM3Olx0XHQgICAgICh7IGN0eCA9IChoY3R4KS1cdTAwM2VjdHhzWyhpKV07IDE7IH0pOyAoaSkmIzQzOyYjNDM7KVxuMTAzODpcdFxuMTAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4xMDQwOlx0e1xuMTA0MTpcdFx0aWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpXG4xMDQyOlx0XHRcdHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpO1xuMTA0MzpcdH1cbjEwNDQ6XHRcbjEwNDU6XHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuMTA0NjpcdFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4xMDQ3Olx0XG4xMDQ4Olx0c3RhdGljIGlubGluZSBib29sIHJxX2lzX3N5bmMoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHJldHVybiBvcF9pc19zeW5jKHJxLVx1MDAzZWNtZF9mbGFncyk7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHZvaWQgYmxrX3JxX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7XG4xMDU0Olx0aW50IGJsa19ycV9wcmVwX2Nsb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJlcXVlc3QgKnJxX3NyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJsb2NrIExheWVyJiMzOTtzIFJlcXVlc3QgQ2xlYW51cCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBibG9jayByZXF1ZXN0cyBnZXQgY2xlYW5lZCB1cCB3aXRoaW4gdGhlIGJsay1tcSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBibGtfbXFfY2xlYW51cF9ycWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBOb3csIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGxvb2tzIGZhbWlsaWFyOyBpdCYjMzk7cyBjYWxsaW5nIGBycS0mZ3Q7cS0mZ3Q7bXFfb3BzLSZndDtjbGVhbnVwX3JxKHJxKWAuIFRoZSBjcml0aWNhbCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIHRoaXMgY2hhaW4gb2YgZnVuY3Rpb24gY2FsbHMuIFNvLCB0aGUga2VybmVsJiMzOTtzIGxpa2VseSB1c2luZyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW1wbGVtZW50IHNvbWUgZGV2aWNlIHNwZWNpZmljIGNsZWFuIHVwIGZ1bmN0aW9uYWxpdHkuCgpTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNsZWFudXBfcnFgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIHdhbnQgdG8gZm9jdXMgb24gdG8gc3RhcnQgd2l0aCwgSSBuZWVkIHRvIGtub3cgYWxsIHRoZSBkZXZpY2VzIHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0aGlzLiBJIHdpbGwgZmlyZSB1cCB0aGUgc2VhcmNoIHRvb2xzIGFuZCBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY2xlYW51cF9ycWAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNsZWFudXAgbG9naWMgaXMgaGFwcGVuaW5nIGFuZCB3aGljaCBkcml2ZXJzIGFyZSB1c2luZyBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRpZmZlcmVudCBjbGVhbiB1cCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmNsZWFudXBfcnFcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHNfbm9fY29tbWl0ID0ge1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODMtXHQuZXhpdF9yZXF1ZXN0XHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA4NDpcdC5jbGVhbnVwX3JxXHQ9IHNjc2lfY2xlYW51cF9ycSxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODUtXHQuYnVzeVx0XHQ9IHNjc2lfbXFfbGxkX2J1c3ksXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjExMi1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMTEzOlx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjExNC1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNjc2lfY2xlYW51cF9ycWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzY3NpX2NsZWFudXBfcnFgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dCDigJMgd2hhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvbiBjYWxsPyBJcyBpdCBiZWluZyBjYWxsZWQgYWZ0ZXIgYSBoYXJkd2FyZSByZXNldCwgYW4gSS9PIGVycm9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byByZXF1ZXN0IHF1ZXVlIGNsZWFudXAsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCByZXNvdXJjZXMgdGhpcyByb3V0aW5lIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEFyZSB0aGVyZSBzcGlubG9ja3MgaW52b2x2ZWQ/IFdoYXQmIzM5O3MgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYWRhcHRlciYjMzk7cyBETUEgc3RydWN0dXJlcz8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRhZ2dlZCBxdWV1aW5nLCBzZW5zZSBkYXRhLCBhbmQgcG90ZW50aWFsbHkgZXJyb3IgcmV0cmllcy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBwcm9wZXJseSBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgU0NTSSBlcnJvciBjb2RlcyBhbmQgaG93IGl0IGF2b2lkcyBhbnkgZG91YmxlLWZyZWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBTQ1NJIGxheWVyLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdW5jdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaW50ZXJydXB0LXNhZmUuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX2NsZWFudXBfcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTI4Mz1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2FsbG9jX3JlcXVlc3QpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyODgtICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjg5OnN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjkwLXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4My1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMDg0Olx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4NS1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIFNDU0kgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFNDU0kgbGlicmFyeSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgZmlsZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZyBsb2dpYyB3aXRoaW4gaXQsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAxMjg5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBTQ1NJIGludGVyYWN0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3R1ZmYgdGhlcmUgYWJvdXQgZXJyb3IgcmVjb3ZlcnksIGNvbW1hbmQgcmV0cmllcywgb3IgcGVyaGFwcyBldmVuIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIFNDU0kgZGV2aWNlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdHNjc2lfaW5pdGlhbGl6ZV9ycShycSk7XG4xMjgxOlx0XHRyZXR1cm4gcnE7XG4xMjgyOlx0fVxuMTI4MzpcdEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XG4xMjg0Olx0XG4xMjg1Olx0LypcbjEyODY6XHQgKiBPbmx5IGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzbiYjMzk7dCBjb21wbGV0ZWQgYnkgU0NTSSwgYW5kIG5vdCBmcmVlZCBieVxuMTI4NzpcdCAqIFNDU0lcbjEyODg6XHQgKi9cbjEyODk6XHRzdGF0aWMgdm9pZCBzY3NpX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTI5MDpcdHtcbjEyOTE6XHRcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuMTI5MjpcdFxuMTI5MzpcdFx0Y21kLVx1MDAzZWZsYWdzID0gMDtcbjEyOTQ6XHRcbjEyOTU6XHRcdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG4xMjk2Olx0XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuMTI5NzpcdFx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG4xMjk4Olx0XHR9XG4xMjk5Olx0fVxuMTMwMDpcdFxuMTMwMTpcdC8qIENhbGxlZCBiZWZvcmUgYSByZXF1ZXN0IGlzIHByZXBhcmVkLiBTZWUgYWxzbyBzY3NpX21xX3ByZXBfZm4oKS4gKi9cbjEzMDI6XHR2b2lkIHNjc2lfaW5pdF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpXG4xMzAzOlx0e1xuMTMwNDpcdFx0c3RydWN0IHJlcXVlc3QgKnJxID0gc2NzaV9jbWRfdG9fcnEoY21kKTtcbjEzMDU6XHRcbjEzMDY6XHRcdGlmICghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHJxKSBcdTAwMjZcdTAwMjYgIShjbWQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDTURfSU5JVElBTElaRUQpKSB7XG4xMzA3Olx0XHRcdGNtZC1cdTAwM2VmbGFncyB8PSBTQ01EX0lOSVRJQUxJWkVEO1xuMTMwODpcdFx0XHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xuMTMwOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBpbiBibGstbXEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2NzaV9jbGVhbnVwX3JxYCBpcyBub3cgYmVpbmcgY2FsbGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHNvbWUgaW50ZXJlc3RpbmcgZnV6emluZyBvcHBvcnR1bml0aWVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIFNDU0kgY29tbWFuZCBjbGVhbnVwIGlmIGBSUUZfRE9OVFBSRVBgIGlzIHNldCwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIGBxdWV1ZV9ycWAgZmFpbHMuIFByZXZpb3VzbHksIG1hbnVhbCBjbGVhbnVwIHdhcyBkb25lLCBub3cgaXQmIzM5O3MgaGFuZGxlZCB0aHJvdWdoIGEgbW9yZSBnZW5lcmFsaXplZCBgYmxrX21xX2NsZWFudXBfcnFgLiBUaGlzIGNoYW5nZSBhZmZlY3RzIGFsbCBibG9jayBkcml2ZXJzLCBnaXZlbiB0aGlzIGNoYW5nZS4KCkZpcnN0LCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gQWJzb2x1dGVseS4gQmxvY2sgSS9PIGFuZCBTQ1NJIGFyZSBjb3JlLCBjb3JlLCBjb3JlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBibGstbXEsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBibG9jayBJL08gZGlzcGF0Y2gsIGFuZCB0aGUgU0NTSSBzdWJzeXN0ZW0gaXMgdXNlZCBldmVyeXdoZXJlLCBpbmNsdWRpbmcgUUVNVSwgc3RhbmRhcmQga2VybmVscywgdmlydGlvLXNjc2ksIGFuZCBhbGwgc29ydHMgb2Ygb3RoZXIgZW11bGF0aW9ucywgcGFzcy10aHJvdWdocywgYW5kIG1hc3Mgc3RvcmFnZSBkZXZpY2VzLiBFdmVyeSBibG9jayBJL08gcmVxdWVzdCBnb2VzIHRocm91Z2ggYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHF1ZXVlIGZ1bmN0aW9uIGBzY3NpX3F1ZXVlX3JxYCBpcyBhIGtleSBleGFtcGxlLCBzbyB0aGlzIGlzIGEgaG90IHBhdGguICBXaGVuIGBxdWV1ZV9ycWAgZmFpbHMg4oCTIGBCTEtfU1RTX0lPRVJSYCwgYEJMS19TVFNfVEFSR0VUYCwgZXRjLiDigJMgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCYjMzk7cyBkZWZhdWx0IHBhdGggbm93IGludm9rZXMgYGJsa19tcV9jbGVhbnVwX3JxYCwgd2hpY2ggdGhlbiBjYWxscyBgc2NzaV9jbGVhbnVwX3JxYC4gVGhpcyBjaGFuZ2VzIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIGZvciBob3cgYmxvY2sgZHJpdmVycyByZWFjdCB0byBlcnJvcnMsIHNvIHRoZXJlIGlzIGNsZWFybHkgYSBsYXJnZSBpbXBhY3QuIE1vZGlmaWNhdGlvbiBvZiBgYmxvY2svYmxrLW1xLmNgIGFuZCBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGNvbmZpcm1zIHRoaXMuICBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpOb3csIHRoZSBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHNwZWNpZmljIGFib3V0IHdoYXQgd2UmIzM5O3JlIHRhcmdldGluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYHNjc2lfcXVldWVfcnFgIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCwgYW5kIGBibGtfbXFfY2xlYW51cF9ycWAuIFRoZSBnb2FsIGlzIHRvIGV4YW1pbmUgd2hlcmUgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQuIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGJlIGdvb2QgdGhlcmUuIGBzY3NpX3F1ZXVlX3JxYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBtdXN0IGNoZWNrIGluIHJlbGF0aW9uIHRvIHRoZSBjb21waWxlciBiZWhhdmlvci4gYHNjc2lfY2xlYW51cF9ycWAgaXMgYWxzbyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29tcGlsZXIgaXMgaGFuZGxpbmcgaXQuIFdlIHNob3VsZCBjaGVjayB0aGUgdm1saW51eCBzeW1ib2xzIGZvciB0aGVzZSBmaWxlcywgYW5kIGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4KCkhvd2V2ZXIsIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgaXMgdWJpcXVpdG91czsgaXQmIzM5O3MgdGhlIGNvcmUgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYmxrLW1xISBXZSBtdXN0IGF2b2lkIGxpc3RpbmcgdHJ1bHkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgd291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBXZSYjMzk7cmUgbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLCBsaWtlIGBzY3NpX3F1ZXVlX3JxYCBhbmQgYHNjc2lfY2xlYW51cF9ycWAgYW5kIHdoZXJlIHRob3NlIGFyZSBjYWxsZWQuIFdlIGFyZSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IGRyaXZlcnMvZW50cnlwb2ludHMgdGhhdCBhcmUgU0NTSS1zcGVjaWZpYy4gVGhlIGltcG9ydGFudCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAgYW5kIGBzY3NpX2NsZWFudXBfcnFgLiBXZSBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jYCBmb3Igb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbXFfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzE9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9pbml0X2xpbWl0cyk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDcyLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHNfbm9fY29tbWl0ID0ge1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA3NC1cdC5nZXRfYnVkZ2V0XHQ9IHNjc2lfbXFfZ2V0X2J1ZGdldCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDk0PXN0YXRpYyB2b2lkIHNjc2lfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTAwLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjEwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTAyLVx0LmdldF9idWRnZXRcdD0gc2NzaV9tcV9nZXRfYnVkZ2V0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIxMjI9aW50IHNjc2lfbXFfc2V0dXBfdGFncyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdClcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTM1LVx0aWYgKHNob3N0LVx1MDAzZWhvc3R0LVx1MDAzZWNvbW1pdF9ycXMpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMTM2Olx0XHR0YWdfc2V0LVx1MDAzZW9wcyA9IFx1MDAyNnNjc2lfbXFfb3BzO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzNy1cdGVsc2VcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzg6XHRcdHRhZ19zZXQtXHUwMDNlb3BzID0gXHUwMDI2c2NzaV9tcV9vcHNfbm9fY29tbWl0O1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzOS1cdHRhZ19zZXQtXHUwMDNlbnJfaHdfcXVldWVzID0gc2hvc3QtXHUwMDNlbnJfaHdfcXVldWVzID8gOiAxO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIyMTA9c3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZV9mcm9tX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTMtXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMjE0Olx0aWYgKHEtXHUwMDNlbXFfb3BzID09IFx1MDAyNnNjc2lfbXFfb3BzX25vX2NvbW1pdCB8fFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjIxNTpcdCAgICBxLVx1MDAzZW1xX29wcyA9PSBcdTAwMjZzY3NpX21xX29wcylcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTYtXHRcdHNkZXYgPSBxLVx1MDAzZXF1ZXVlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFNDU0kgUmVxdWVzdCBRdWV1ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgU0NTSSByZXF1ZXN0IHF1ZXVlIHNpdHVhdGlvbi4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgc2NzaV9xdWV1ZV9ycWAgYW5kIGl0cyBzdXJyb3VuZGluZyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGNvbnRleHQgYXJvdW5kIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBob3cgYHNjc2lfcXVldWVfcnFgIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBgc2NzaV9tcV9vcHNgIHN0cnVjdHVyZTsgc2VlbXMgbGlrZSBpdCBpcyBkZWZpbmVkIGFzOiBgLnF1ZXVlX3JxID0gc2NzaV9xdWV1ZV9ycSxgIGFuZCBgLmNsZWFudXBfcnEgPSBzY3NpX2NsZWFudXBfcnEsYAoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSByaWdodCBzZXR0aW5ncyBmb3IgU0NTSSBhbmQgYmxrLW1xLiBibGstbXEgaXMgZGVmaW5pdGVseSBjb3JlIGJsb2NrIGxheWVyIHRlcnJpdG9yeSDigJMgYENPTkZJR19CTE9DS2AgY29uZmlybWVkLiBTQ1NJIHNob3VsZCBiZSBlaXRoZXIgYENPTkZJR19TQ1NJYCBvciBgU0NTSV9NT0RgLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvc2NzaWAgZGlyZWN0b3J5IHRvIGJlIHN1cmUuIFRoaXMgaXMgZnVuZGFtZW50YWw7IEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBrbm93aW5nIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbGliXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvTWFrZWZpbGU9MjQ9Q09OVEVYVF9BTkFMWVNJU19zY3NpX2lvY3RsLm8gOj0geVxuZHJpdmVycy9zY3NpL01ha2VmaWxlOjI1OkNPTlRFWFRfQU5BTFlTSVNfc2NzaV9saWIubyA6PSB5XG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMjYtQ09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYl9kbWEubyA6PSB5XG4tLVxuZHJpdmVycy9zY3NpL01ha2VmaWxlPTE4Mj1zY3NpX21vZC15XHRcdFx0JiM0Mzs9IHNjc2kubyBob3N0cy5vIHNjc2lfaW9jdGwubyBcXFxuZHJpdmVycy9zY3NpL01ha2VmaWxlOjE4MzpcdFx0XHRcdCAgIHNjc2ljYW0ubyBzY3NpX2Vycm9yLm8gc2NzaV9saWIub1xuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE4NC1zY3NpX21vZC0kKENPTkZJR19TQ1NJX0NPTlNUQU5UUykgJiM0Mzs9IGNvbnN0YW50cy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBgc2NzaV9saWIub2AuIEkga25vdyB0aGF0JiMzOTtzIHBhcnQgb2YgYHNjc2lfbW9kYCwgd2hpY2ggZ2V0cyBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19TQ1NJYCBzZXQuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJJiMzOTttIGFsc28gc2VlaW5nIGBibG9jay9ibGstbXEuY2AsIGFuZCB0aGF0JiMzOTtzIGxpbmtlZCB0byBgYmxvY2svTWFrZWZpbGVgLiBUaGUgYGJsay1tcS5jYCBtb2R1bGUgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBTaW5jZSBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUsIGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBgYmxvY2svTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBpbiBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstbXFcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuYmxvY2svTWFrZWZpbGUtOS1cdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG5ibG9jay9NYWtlZmlsZToxMDpcdFx0XHRibGstbWVyZ2UubyBibGstdGltZW91dC5vIGJsay1saWIubyBibGstbXEubyBcXFxuYmxvY2svTWFrZWZpbGUtMTEtXHRcdFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBTQ1NJL0Jsb2NrIExheWVyIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMg4oCTIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTE9DS2AgYW5kIGBDT05GSUdfU0NTSWAgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBibG9jayBsYXllciBhbmQgdGhlIFNDU0kgc3Vic3lzdGVtLCByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGFsd2F5cyBnb29kIHRvIGNvbmZpcm0gdGhlIGJhc2ljcy4KCk5vdywgZm9yIGEgZGVlcGVyIGRpdmUsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byByZXF1ZXN0IGRpc3BhdGNoIGFuZCBjbGVhbnVwLiBJJiMzOTttIHRoaW5raW5nIG9mIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCwgYW5kIGBzY3NpX2NsZWFudXBfcnFgIHNwZWNpZmljYWxseS4gQXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIHN5bWJvbHMgSSBtaWdodCBiZSBtaXNzaW5nPyBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBmb2xsb3cgdXAgb24gdGhpcy4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgc2NzaV9tcV91bmluaXRfY21kYC4gSXMgdGhhdCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBzY3NpX2NsZWFudXBfcnFgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByZWxhdGlvbnNoaXAgdG8gbmFpbCBkb3duIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBjb21tYW5kcyBhcmUgY2xlYW5lZCB1cCB3aGVuIHVzaW5nIG1lc3NhZ2UgcXVldWVzLiBJIHNob3VsZCBjaGVjayBgc2NzaV9tcV91bmluaXRfY21kYCYjMzk7cyBzb3VyY2UgY29kZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChzY3NpX3NlbnNlX2NhY2hlX211dGV4KTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02MS1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjE6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02MjY9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI5LXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2OTY6XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5NS1cdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2Olx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXHRcdHJxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNj0gflJRRl9ET05UUFJFUDtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzQtXHRcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE1NzU6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3Ni1cdFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVx1MDAzZXJlc3VsdCkpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXHRcdGlmIChyZXEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUClcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE5NTY6XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNTQKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCB0aGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhczogdGhlIGNvcmUgYmxvY2sgbGF5ZXImIzM5O3MgZGlzcGF0Y2ggbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgZHVyaW5nIHJlcXVlc3QgZGlzcGF0Y2ggaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHJlcXVlc3QgZXhlY3V0aW9uIGFuZCBjbGVhbnVwIHBhdGgsIHdoaWNoIGlzIGxpbmtlZCB0aHJvdWdoIGBzY3NpX3F1ZXVlX3JxYCBjYWxsaW5nIGBibGtfbXFfY2xlYW51cF9ycWAsIGFuZCB0aGVuIHN1YnNlcXVlbnRseSB0aHJvdWdoIGBzY3NpX2NsZWFudXBfcnFgLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VybmluZyB0aGUgcmVxdWVzdCBjbGVhbnVwIGxpZmVjeWNsZS4gSSBjYW4gaW1tZWRpYXRlbHkgdGVsbCB0aGF0IHRoaXMgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXNlIGNvbXBvbmVudHMgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgZXZlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpGb3IgYHNldC1yZXN1bHRzYCwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBzaW1wbGlmaWVzIFNDU0kgY29tbWFuZCBlcnJvciBjbGVhbnVwIGluIHRoYXQgYHNjc2lfcXVldWVfcnEoKWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsdGVyaW5nIHRoZSByZXF1ZXN0IGxpZmVjeWNsZSBhY3Jvc3MgdGhlIGRpc3BhdGNoIHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciB1bmV4cGVjdGVkIHN0YXRlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAsIGBzY3NpX2NsZWFudXBfcnFgLCBhbmQgYHNjc2lfbXFfdW5pbml0X2NtZGAuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkLiBJJiMzOTtsbCBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgYEJMT0NLYCBhbmQgYFNDU0lgLCB0byBlbnN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhlIGNoYW5nZXMgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4KCkFscmlnaHQsIHRpbWUgdG8gdHJpZ2dlciB0aGF0IHRvb2wgY2FsbCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCYjMzQ7LAogICAgJiMzNDtzY3NpX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfY2xlYW51cF9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlcXVlc3QgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgY29yZSBibG9jayBsYXllciBkaXNwYXRjaCBsb29wIChibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCkgdG8gY2FsbCBibGtfbXFfY2xlYW51cF9ycSgpLCBzaGlmdGluZyBkcml2ZXIgY2xlYW51cCByZXNwb25zaWJpbGl0eSBvdXQgb2Ygc2NzaV9xdWV1ZV9ycSgpIGludG8gdGhlIGdlbmVyaWMgbXEgY2xlYW51cCBoYW5kbGVyIChzY3NpX2NsZWFudXBfcnEpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcmVxdWVzdCBjbGVhbnVwIGxpZmVjeWNsZSBkdXJpbmcgZmFpbGVkIGJsb2NrIGRpc3BhdGNoIGluIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGFuZCBTQ1NJIGxheWVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9kaXNwYXRjaF9ycV9saXN0JiMzNDssCiAgICAmIzM0O3Njc2lfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7c2NzaV9jbGVhbnVwX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfbXFfdW5pbml0X2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVxdWVzdCBkaXNwYXRjaCBlcnJvciBoYW5kbGluZyBpbiBgYmxrLW1xYCBieSBhZGRpbmcgYSBjYWxsIHRvIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCgpYCB3aGVuIGBxdWV1ZV9ycSgpYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgcmVtb3ZpbmcgdGhlIG1hbnVhbCBpbnZvY2F0aW9uIG9mIGBzY3NpX21xX3VuaW5pdF9jbWQoKWAgZnJvbSBgc2NzaV9xdWV1ZV9ycSgpYC5cblxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCBhMjZhMTFjNzNlZTNlLi5lYjNhNDgxMjExZDBiIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMjEyNiw2ICYjNDM7MjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAJCQlibGtfbXFfaGFuZGxlX2Rldl9yZXNvdXJjZShycSwgbGlzdCk7CiAJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKJiM0MzsJCQlibGtfbXFfY2xlYW51cF9ycShycSk7CiAJCQlibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7CiAJCX0KIAl9IHdoaWxlICghbGlzdF9lbXB0eShsaXN0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xOTYwLDEzICYjNDM7MTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAkJCWNtZC0mZ3Q7cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgJmx0OyZsdDsgMTY7CiAJCWVsc2UKIAkJCWNtZC0mZ3Q7cmVzdWx0ID0gRElEX0VSUk9SICZsdDsmbHQ7IDE2OwotCQkvKgotCQkgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuCi0JCSAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kCi0JCSAqIGFnYWluLgotCQkgKi8KLQkJaWYgKHJlcS0mZ3Q7cnFfZmxhZ3MgJmFtcDsgUlFGX0RPTlRQUkVQKQotCQkJc2NzaV9tcV91bmluaXRfY21kKGNtZCk7CiYjNDM7CQkvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovCiAJCXNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpOwogCQlicmVhazsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU4CgkJCQkJCQlvdXRwdXQ6IDEwNQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGVuIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuCgpGaXJzdCwgbGV0JiMzOTtzIGZvY3VzIG9uIGBibG9jay9ibGstbXEuY2AuIFNwZWNpZmljYWxseSwgd2l0aGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIHRoZXJlJiMzOTtzIGEgbmV3IGxpbmUgdGhhdCBjYWxscyBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgYGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KWAgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLiBUaGlzIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJiMzOTtzIGFuIGVycm9yLiBUaGUgZXhpc3RpbmcgY29kZSBlbmRzIGEgcmVxdWVzdCB3aXRoIGBibGtfbXFfZW5kX3JlcXVlc3RgIGJ1dCB0aGlzIG5ldyBhZGRpdGlvbiBpcyBjbGVhbmluZyB1cCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIGRvaW5nLCBhbmQgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgaGFuZGxpbmcuIElzIGl0IGZyZWVpbmcgbWVtb3J5LCByZWxlYXNpbmcgbG9ja3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlIGlzIGtleS4KCk5leHQsIEkmIzM5O2xsIHN3aXRjaCBteSBhdHRlbnRpb24gdG8gYGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2NzaV9xdWV1ZV9ycWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaW5jbHVkZWQgYSBjaGVjayBmb3IgYFJRRl9ET05UUFJFUGAgYW5kIHRoZW4gY2FsbGVkIGBzY3NpX21xX3VuaW5pdF9jbWQoY21kKWAgaWYgdGhpcyBmbGFnIHdhcyBzZXQuIE5vdywgdGhhdCBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlIGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQsIGFuZCBhIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgZXhwbGFpbmluZyB0aGF0IOKAnGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQu4oCdIFRoaXMgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc2hpZnRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciByZXNvdXJjZSBjbGVhbnVwIGZyb20gdGhlIFNDU0kgbGF5ZXIgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byB0aGUgcHJldmlvdXMgb25lIGluIGBibGstbXEuY2AuIFRoZSBgZGVmYXVsdGAgY2FzZSBmcm9tIHRoZSBlYXJsaWVyIGZpbGUgbm93IGluZGljYXRlcyB0aGF0IHRoZSBjbGVhbnVwIGlzIGhhbmRsZWQgYnkgdGhlIGJsb2NrIGxheWVyLgoKTm93LCBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGNoYW5nZXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYGJsa19tcV9jbGVhbnVwX3JxYCBpcyBub3cgaGFuZGxpbmcgd2hhdCBgc2NzaV9tcV91bmluaXRfY21kYCAqdXNlZCogdG8gaGFuZGxlLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGhvdyB0aGVzZSBkaWZmZXJlbnQgbGF5ZXJzIGludGVyYWN0IHdoZW4gYSByZXF1ZXN0IGVuY291bnRlcnMgYW4gZXJyb3IuIFRoZXJlIG1heSBiZSBzb21lIGltcGxpY2l0IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgcmVzb3VyY2Ugb3duZXJzaGlwIG9yIHN0YXRlIHRoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIG1pZ2h0IHNpbXBsaWZ5IHJlc291cmNlIG1hbmFnZW1lbnQgaW4gc29tZSB3YXlzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBpbiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9jbGVhbnVwX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5ibG9jay9ibGstbXEuYy0yMTI4LVx0XHRkZWZhdWx0OlxuYmxvY2svYmxrLW1xLmM6MjEyOTpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG5ibG9jay9ibGstbXEuYy0yMTMwLVx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExNTpcdFx0XHRiZC5sYXN0ID0gbGlzdF9lbXB0eShsaXN0KTtcbjIxMTY6XHRcbjIxMTc6XHRcdFx0cmV0ID0gcS1cdTAwM2VtcV9vcHMtXHUwMDNlcXVldWVfcnEoaGN0eCwgXHUwMDI2YmQpO1xuMjExODpcdFx0XHRzd2l0Y2ggKHJldCkge1xuMjExOTpcdFx0XHRjYXNlIEJMS19TVFNfT0s6XG4yMTIwOlx0XHRcdFx0cXVldWVkJiM0MzsmIzQzOztcbjIxMjE6XHRcdFx0XHRicmVhaztcbjIxMjI6XHRcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMjEyMzpcdFx0XHRcdG5lZWRzX3Jlc291cmNlID0gdHJ1ZTtcbjIxMjQ6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjIxMjU6XHRcdFx0Y2FzZSBCTEtfU1RTX0RFVl9SRVNPVVJDRTpcbjIxMjY6XHRcdFx0XHRibGtfbXFfaGFuZGxlX2Rldl9yZXNvdXJjZShycSwgbGlzdCk7XG4yMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4yMTI4Olx0XHRcdGRlZmF1bHQ6XG4yMTI5Olx0XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuMjEzMDpcdFx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbjIxMzE6XHRcdFx0fVxuMjEzMjpcdFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xuMjEzMzpcdG91dDpcbjIxMzQ6XHRcdC8qIElmIHdlIGRpZG4mIzM5O3QgZmx1c2ggdGhlIGVudGlyZSBsaXN0LCB3ZSBjb3VsZCBoYXZlIHRvbGQgdGhlIGRyaXZlclxuMjEzNTpcdFx0ICogdGhlcmUgd2FzIG1vcmUgY29taW5nLCBidXQgdGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbGllLlxuMjEzNjpcdFx0ICovXG4yMTM3Olx0XHRpZiAoIWxpc3RfZW1wdHkobGlzdCkgfHwgcmV0ICE9IEJMS19TVFNfT0spXG4yMTM4Olx0XHRcdGJsa19tcV9jb21taXRfcnFzKGhjdHgsIHF1ZXVlZCwgZmFsc2UpO1xuMjEzOTpcdFxuMjE0MDpcdFx0LypcbjIxNDE6XHRcdCAqIEFueSBpdGVtcyB0aGF0IG5lZWQgcmVxdWV1aW5nPyBTdHVmZiB0aGVtIGludG8gaGN0eC1cdTAwM2VkaXNwYXRjaCxcbjIxNDI6XHRcdCAqIHRoYXQgaXMgd2hlcmUgd2Ugd2lsbCBjb250aW51ZSBvbiBuZXh0IHF1ZXVlIHJ1bi5cbjIxNDM6XHRcdCAqL1xuMjE0NDpcdFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7XG4yMTQ1Olx0XHRcdGJvb2wgbmVlZHNfcmVzdGFydDtcbjIxNDY6XHRcdFx0LyogRm9yIG5vbi1zaGFyZWQgdGFncywgdGhlIFJFU1RBUlQgY2hlY2sgd2lsbCBzdWZmaWNlICovXG4yMTQ3Olx0XHRcdGJvb2wgbm9fdGFnID0gcHJlcCA9PSBQUkVQX0RJU1BBVENIX05PX1RBRyBcdTAwMjZcdTAwMjZcbjIxNDg6XHRcdFx0XHQoKGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX1RBR19RVUVVRV9TSEFSRUQpIHx8XG4yMTQ5Olx0XHRcdFx0YmxrX21xX2lzX3NoYXJlZF90YWdzKGhjdHgtXHUwMDNlZmxhZ3MpKTtcbjIxNTA6XHRcbjIxNTE6XHRcdFx0LypcbjIxNTI6XHRcdFx0ICogSWYgdGhlIGNhbGxlciBhbGxvY2F0ZWQgYnVkZ2V0cywgZnJlZSB0aGUgYnVkZ2V0cyBvZiB0aGVcbjIxNTM6XHRcdFx0ICogcmVxdWVzdHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBwYXNzZWQgdG8gdGhlIGJsb2NrIGRyaXZlci5cbjIxNTQ6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NDU6XHRcdGNtZC1cdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcbjE5NDY6XHRcdHN3aXRjaCAocmV0KSB7XG4xOTQ3Olx0XHRjYXNlIEJMS19TVFNfT0s6XG4xOTQ4Olx0XHRcdGJyZWFrO1xuMTk0OTpcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMTk1MDpcdFx0XHRpZiAoc2NzaV9kZXZpY2VfYmxvY2tlZChzZGV2KSlcbjE5NTE6XHRcdFx0XHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcbjE5NTI6XHRcdFx0YnJlYWs7XG4xOTUzOlx0XHRjYXNlIEJMS19TVFNfQUdBSU46XG4xOTU0Olx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXHUwMDNjXHUwMDNjIDE2O1xuMTk1NTpcdFx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4xOTU2Olx0XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4xOTU3Olx0XHRcdGJyZWFrO1xuMTk1ODpcdFx0ZGVmYXVsdDpcbjE5NTk6XHRcdFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxuMTk2MDpcdFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcdTAwM2NcdTAwM2MgMTY7XG4xOTYxOlx0XHRcdGVsc2VcbjE5NjI6XHRcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFx1MDAzY1x1MDAzYyAxNjtcbjE5NjM6XHRcdFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xuMTk2NDpcdFx0XHRzY3NpX3J1bl9xdWV1ZV9hc3luYyhzZGV2KTtcbjE5NjU6XHRcdFx0YnJlYWs7XG4xOTY2Olx0XHR9XG4xOTY3Olx0XHRyZXR1cm4gcmV0O1xuMTk2ODpcdH1cbjE5Njk6XHRcbjE5NzA6XHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4xOTcxOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXG4xOTcyOlx0e1xuMTk3MzpcdFx0c3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZXQtXHUwMDNlZHJpdmVyX2RhdGE7XG4xOTc0Olx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjE5NzU6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4xOTc2Olx0XHRpbnQgcmV0ID0gMDtcbjE5Nzc6XHRcbjE5Nzg6XHRcdGNtZC1cdTAwM2VzZW5zZV9idWZmZXIgPVxuMTk3OTpcdFx0XHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcbjE5ODA6XHRcdGlmICghY21kLVx1MDAzZXNlbnNlX2J1ZmZlcilcbjE5ODE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTgyOlx0XG4xOTgzOlx0XHRpZiAoc2NzaV9ob3N0X2dldF9wcm90KHNob3N0KSkge1xuMTk4NDpcdFx0XHRzZyA9ICh2b2lkICopY21kICYjNDM7IHNpemVvZihzdHJ1Y3Qgc2NzaV9jbW5kKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyIENsZWFudXAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBwcmVjaXNlIHJvbGVzIG9mIGBibGtfbXFfY2xlYW51cF9ycWAgYW5kIGBibGtfbXFfZW5kX3JlcXVlc3RgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHBpY2tpbmcgYXBhcnQgdGhlIGNvZGUgb2YgZWFjaCBmdW5jdGlvbiB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgcmVxdWVzdCBjb21wbGV0aW9uIHBhdGgsIGVzcGVjaWFsbHkgZ2l2ZW4gcmVjZW50IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYXJvdW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGdpdmVuIHRoYXQgYGJsay1tcWAmIzM5O3MgYXN5bmNocm9ub3VzIGRlc2lnbiBpbmhlcmVudGx5IHJlcXVpcmVzIGNhcmVmdWwgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gQWxzbywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBwcm9wZXJseSBoYW5kbGluZyBhbGwgY29ybmVyIGNhc2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nLCB0aW1lb3V0cywgYW5kIGRldmljZSBmbHVzaGVzPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gcmVxdWVzdCB0eXBlIChlLmcuLCByZWFkLCB3cml0ZSwgZGlzY2FyZCwgZXRjLikgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgcmVzcG9uc2liaWxpdGllcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zIG9mIGEgbW9kZXJuIGJsb2NrIHF1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfY2xlYW51cF9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxuYmxvY2svYmxrLW1xLmMtMjEyOC1cdFx0ZGVmYXVsdDpcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuYmxvY2svYmxrLW1xLmMtMjEzMC1cdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9jbGVhbnVwX3JxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5ibG9jay9ibGstbXEuYy0yMTI4LVx0XHRkZWZhdWx0OlxuYmxvY2svYmxrLW1xLmM6MjEyOTpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG5ibG9jay9ibGstbXEuYy0yMTMwLVx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbi0tXG5kcml2ZXJzL21kL2RtLXJxLmM9MzY5PXN0YXRpYyBpbnQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvKVxuLS1cbmRyaXZlcnMvbWQvZG0tcnEuYy0zOTktXHRcdFx0YmxrX3JxX3VucHJlcF9jbG9uZShjbG9uZSk7XG5kcml2ZXJzL21kL2RtLXJxLmM6NDAwOlx0XHRcdGJsa19tcV9jbGVhbnVwX3JxKGNsb25lKTtcbmRyaXZlcnMvbWQvZG0tcnEuYy00MDEtXHRcdFx0dGlvLVx1MDAzZXRpLVx1MDAzZXR5cGUtXHUwMDNlcmVsZWFzZV9jbG9uZV9ycShjbG9uZSwgXHUwMDI2dGlvLVx1MDAzZWluZm8pO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9MTAyMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpxdWV1ZV9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDM4LVxuaW5jbHVkZS9saW51eC9ibGstbXEuaDoxMDM5OnN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTEwNDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBibGstbXEgQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYmxvY2sgbXVsdGktcXVldWUgY2xlYW51cCBmdW5jdGlvbiwgYGJsa19tcV9jbGVhbnVwX3JxYCwgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIG5hdmlnYXRlIHRvIGBpbmNsdWRlL2xpbnV4L2Jsay1tcS5oYCDigJMgdGhhdCYjMzk7cyB0aGUgdXN1YWwgc3BvdCBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDM5LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkgcmVjYWxsIGBibGtfbXFfY2xlYW51cF9ycWAgYmVpbmcgZGVmaW5lZCBvciBhdCBsZWFzdCB3aGVyZSBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzIHdpbGwgYmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBibGstbXFgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsay1tcS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0I2RlZmluZSBoY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpXHRcdFx0XHRcdFxcXG4xMDM2Olx0XHRmb3IgKChpKSA9IDA7IChpKSBcdTAwM2MgKGhjdHgpLVx1MDAzZW5yX2N0eCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4xMDM3Olx0XHQgICAgICh7IGN0eCA9IChoY3R4KS1cdTAwM2VjdHhzWyhpKV07IDE7IH0pOyAoaSkmIzQzOyYjNDM7KVxuMTAzODpcdFxuMTAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4xMDQwOlx0e1xuMTA0MTpcdFx0aWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpXG4xMDQyOlx0XHRcdHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpO1xuMTA0MzpcdH1cbjEwNDQ6XHRcbjEwNDU6XHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuMTA0NjpcdFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4xMDQ3Olx0XG4xMDQ4Olx0c3RhdGljIGlubGluZSBib29sIHJxX2lzX3N5bmMoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHJldHVybiBvcF9pc19zeW5jKHJxLVx1MDAzZWNtZF9mbGFncyk7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHZvaWQgYmxrX3JxX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7XG4xMDU0Olx0aW50IGJsa19ycV9wcmVwX2Nsb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJlcXVlc3QgKnJxX3NyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBjbGVhbnVwX3JxYCBpbiB0aGUgU0NTSSBjb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIFNDU0kgY29kZSBhZ2FpbiwgYW5kIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYGNsZWFudXBfcnFgLiBUaGUgbmFtZSBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVxdWVzdCBjbGVhbnVwIGZ1bmN0aW9uLCB3aGljaCwgaW4gdGhlIFNDU0kgd29ybGQsIGNvdWxkIGJlIGNydWNpYWwgZm9yIGVycm9yIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBvciBlbnN1cmluZyBJL08gY29tcGxldGlvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBjbGVhbnVwX3JxYCBpcyBkb2luZyAqd2l0aGluKiB0aGUgU0NTSSByZXF1ZXN0IGNvbnRleHQuIElzIGl0IGNhbGxlZCBvbiBldmVyeSByZXF1ZXN0LCBvbmx5IG9uIGVycm9yIGNvbmRpdGlvbnMsIG9yIGR1cmluZyBzcGVjaWZpYyBwaGFzZXMgb2YgdGhlIHJlcXVlc3QgbGlmZWN5Y2xlPyBXaGF0IHNwZWNpZmljIHJlc291cmNlcyBkb2VzIGl0IGNsZWFuIHVwPyBBcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQ/IEkgbmVlZCB0byBsb29rIGF0IGl0cyBkZWZpbml0aW9uLCBpdHMgY2FsbCBzaXRlcywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB0aGVuIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIFNDU0kgc3RhY2sgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY2xlYW51cF9ycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4My1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMDg0Olx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4NS1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNjc2lfY2xlYW51cF9ycSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgYHNjc2lfY2xlYW51cF9ycWAgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFNDU0kgcmVxdWVzdCBjbGVhbnVwIHdvcmtzIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBvdmVyYWxsIHJlcXVlc3QgbGlmZWN5Y2xlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBrZXkgdG8gdHJ1bHkgZ3Jhc3BpbmcgaG93IFNDU0kgY29tbWFuZHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgd2UmIzM5O2xsIHNlZSBob3cgZXJyb3Igc3RhdHVzZXMgYXJlIHNldCwgcmVzb3VyY2VzIGxpa2UgYnVmZmVycyBvciBETUEgbWFwcGluZ3MgYXJlIHJlbGVhc2VkIGFuZCBob3cgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcyBhcmUgcHV0IGJhY2sgaW4gYSBnb29kIHN0YXRlIGZvciB0aGUgbmV4dCByZXF1ZXN0LiBUaGlzJiMzOTtsbCBwcm9iYWJseSBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRvIHRyYWNrIGRvd24gYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gSS9PIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NzaV9jbGVhbnVwX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjgzPUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI4OC0gKi9cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyODk6c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTAte1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIxMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTItXHQuZXhpdF9yZXF1ZXN0XHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjExMzpcdC5jbGVhbnVwX3JxXHQ9IHNjc2lfY2xlYW51cF9ycSxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTQtXHQuYnVzeVx0XHQ9IHNjc2lfbXFfbGxkX2J1c3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBpbiBgc2NzaV9saWIuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgU0NTSSBzdGFjay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVxdWVzdCBjbGVhbnVwIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgYW5kIHplcm8gaW4gb24gYHNjc2lfY2xlYW51cF9ycWAgYXJvdW5kIGxpbmUgMTI4OS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgY29tcGxldGlvbiBhbmQgcmVzb3VyY2UgcmVsZWFzZSBvZiBhIFNDU0kgcmVxdWVzdCBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLCBob3cgdGhlIHJlcXVlc3QgaXMgdWx0aW1hdGVseSBmcmVlZCBvciByZWN5Y2xlZCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbSwgbGlrZSB0aGUgdHJhbnNwb3J0IGxheWVyIG9yIHRoZSBkZXZpY2UgZHJpdmVyLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI4NTpcdC8qXG4xMjg2Olx0ICogT25seSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpc24mIzM5O3QgY29tcGxldGVkIGJ5IFNDU0ksIGFuZCBub3QgZnJlZWQgYnlcbjEyODc6XHQgKiBTQ1NJXG4xMjg4Olx0ICovXG4xMjg5Olx0c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbjEyOTA6XHR7XG4xMjkxOlx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjEyOTI6XHRcbjEyOTM6XHRcdGNtZC1cdTAwM2VmbGFncyA9IDA7XG4xMjk0Olx0XG4xMjk1Olx0XHRpZiAocnEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUCkge1xuMTI5NjpcdFx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbjEyOTc6XHRcdFx0cnEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2PSB+UlFGX0RPTlRQUkVQO1xuMTI5ODpcdFx0fVxuMTI5OTpcdH1cbjEzMDA6XHRcbjEzMDE6XHQvKiBDYWxsZWQgYmVmb3JlIGEgcmVxdWVzdCBpcyBwcmVwYXJlZC4gU2VlIGFsc28gc2NzaV9tcV9wcmVwX2ZuKCkuICovXG4xMzAyOlx0dm9pZCBzY3NpX2luaXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKVxuMTMwMzpcdHtcbjEzMDQ6XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHNjc2lfY21kX3RvX3JxKGNtZCk7XG4xMzA1Olx0XG4xMzA2Olx0XHRpZiAoIWJsa19ycV9pc19wYXNzdGhyb3VnaChycSkgXHUwMDI2XHUwMDI2ICEoY21kLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ01EX0lOSVRJQUxJWkVEKSkge1xuMTMwNzpcdFx0XHRjbWQtXHUwMDNlZmxhZ3MgfD0gU0NNRF9JTklUSUFMSVpFRDtcbjEzMDg6XHRcdFx0c2NzaV9pbml0aWFsaXplX3JxKHJxKTtcbjEzMDk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNjc2lfbXFfdW5pbml0X2NtZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHNjc2lfbXFfdW5pbml0X2NtZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvciB3aXRoaW4gdGhlIFNDU0kgbWlkbGF5ZXImIzM5O3MgbWVzc2FnZS1xdWV1ZWQgY29tbWFuZCBoYW5kbGluZy4gSSBrbm93IHRoZSBiYXNpYyBwcmluY2lwbGVzLCBvZiBjb3Vyc2Ug4oCTIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGUtYWxsb2NhdGlvbiBvciBjbGVhbnVwIG9mIGEgY29tbWFuZCB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciBuZWVkZWQsIG1heWJlIGFmdGVyIGNvbXBsZXRpb24gb3IgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCdXQgSSB3YW50IHRoZSBzcGVjaWZpY3MuIElzIGl0IGp1c3QgdGhlIGNvbW1hbmQgc3RydWN0IGl0c2VsZiwgb3IgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2Ugc2NhdHRlci1nYXRoZXIgbGlzdHMsIHNlbnNlIGRhdGEsIG9yIGV2ZW4gdGhlIG1lc3NhZ2UgcXVldWUgaXRzZWxmPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmxlIGludGVyYWN0aW9ucyBoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIHZpdGFsIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgdG91Y2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbXFfdW5pbml0X2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChzY3NpX3NlbnNlX2NhY2hlX211dGV4KTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02MS1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjE6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02MjY9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI5LXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2OTY6XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5NS1cdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2Olx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXHRcdHJxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNj0gflJRRl9ET05UUFJFUDtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzQtXHRcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE1NzU6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3Ni1cdFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVx1MDAzZXJlc3VsdCkpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXHRcdGlmIChyZXEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUClcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE5NTY6XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGluY29tcGxldGUgY29udGV4dCB5b3UgcHJvdmlkZWQuIEkmIzM5O20gZ29pbmcgdG8gZmlsbCBpbiB0aGUgYmxhbmtzIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byBzdG9yYWdlIGRyaXZlcnMsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLgoKKipEaXNzZWN0aW5nIHRoZSBgc2NzaV9tcV91bmluaXRfY21kYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzY3NpX21xX3VuaW5pdF9jbWRgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0NTSSAoU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSksIGxpa2VseSBpbiBhIG1vZGVybiBtdWx0aS1xdWV1ZSBlbnZpcm9ubWVudCAoZ2l2ZW4gdGhlICYjMzQ7bXEmIzM0OyBpbiB0aGUgbmFtZSkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBwcm9jZXNzIGJlaGluZCB0aGlzPyYjMzQ7IEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTttIGluZmVycmluZyBpdCBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjbGVhbnVwIG9yIHVuaW5pdGlhbGl6YXRpb24gb2YgYSBjb21tYW5kIHN0cnVjdHVyZSBvciBjb250ZXh0IHJlbGF0ZWQgdG8gU0NTSSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyByZXNvdXJjZXMuCgpJJiMzOTttIHRoaW5raW5nOiBpcyB0aGlzIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBjb21wbGV0ZXMsIGlzIGNhbmNlbGxlZCwgb3Igd2hlbiBhIGRldmljZSBpcyByZW1vdmVkPyBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgbGF0dGVyLiBJZiBpdCYjMzk7cyBhIGNvbW1hbmQgY2xlYW51cCBmdW5jdGlvbiwgZG9lcyBpdCByZXR1cm4gcmVzb3VyY2VzIHRvIHRoZSBmcmVlIHBvb2wsIG51bGxpZnkgcG9pbnRlcnMsIG9yIHBlcmZvcm0gb3RoZXIgY3JpdGljYWwgc3RlcHMgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb3IgZHJpdmVyIGVycm9ycz8KCkkgd2FudCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBXaGF0IGlzIGBzY3NpX21xX3VuaW5pdF9jbWRgIHJlY2VpdmluZyBhcyBhcmd1bWVudHM/IElzIGl0IGFuIGluaXRpYWxpemVkIGNvbW1hbmQgc3RydWN0dXJlPyBBIHBvaW50ZXIgdG8gYSBkZXZpY2U/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGRpY3RhdGUgaG93IEkgaW50ZXJwcmV0IHRoZSBmdW5jdGlvbiYjMzk7cyBhY3Rpb25zLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBvZiB0aGUgY29tbWFuZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQ/IElzIGl0IHNhZmUgdG8gcmVsZWFzZSBsb2NrcyBvciBmcmVlIG1lbW9yeT8KCkkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBxdWV1ZS1iYXNlZCBkcml2ZXJzIGFyZSB3b3JraW5nLiBLbm93aW5nIGl0JiMzOTtzIHVuaW5pdCBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNTpcdH1cbiA2MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2ZyZWVfc2d0YWJsZXMpO1xuIDYyNzpcdFxuIDYyODpcdHN0YXRpYyB2b2lkIHNjc2lfbXFfdW5pbml0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpXG4gNjI5Olx0e1xuIDYzMDpcdFx0c2NzaV9mcmVlX3NndGFibGVzKGNtZCk7XG4gNjMxOlx0XHRzY3NpX3VuaW5pdF9jbWQoY21kKTtcbiA2MzI6XHR9XG4gNjMzOlx0XG4gNjM0Olx0c3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWVfYXN5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuIDYzNTpcdHtcbiA2MzY6XHRcdGlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2Rldi1cdTAwM2Vob3N0KSlcbiA2Mzc6XHRcdFx0cmV0dXJuO1xuIDYzODpcdFxuIDYzOTpcdFx0aWYgKHNjc2lfdGFyZ2V0KHNkZXYpLVx1MDAzZXNpbmdsZV9sdW4gfHxcbiA2NDA6XHRcdCAgICAhbGlzdF9lbXB0eShcdTAwMjZzZGV2LVx1MDAzZWhvc3QtXHUwMDNlc3RhcnZlZF9saXN0KSkge1xuIDY0MTpcdFx0XHRrYmxvY2tkX3NjaGVkdWxlX3dvcmsoXHUwMDI2c2Rldi1cdTAwM2VyZXF1ZXVlX3dvcmspO1xuIDY0MjpcdFx0fSBlbHNlIHtcbiA2NDM6XHRcdFx0LypcbiA2NDQ6XHRcdFx0ICogc21wX21iKCkgcHJlc2VudCBpbiBzYml0bWFwX3F1ZXVlX2NsZWFyKCkgb3IgaW1wbGllZCBpblxuIDY0NTpcdFx0XHQgKiAuZW5kX2lvIGlzIGZvciBvcmRlcmluZyB3cml0aW5nIC5kZXZpY2VfYnVzeSBpblxuIDY0NjpcdFx0XHQgKiBzY3NpX2RldmljZV91bmJ1c3koKSBhbmQgcmVhZGluZyBzZGV2LVx1MDAzZXJlc3RhcnRzLlxuIDY0NzpcdFx0XHQgKi9cbiA2NDg6XHRcdFx0aW50IG9sZCA9IGF0b21pY19yZWFkKFx1MDAyNnNkZXYtXHUwMDNlcmVzdGFydHMpO1xuIDY0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQ0CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDgzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDU0kgUmVxdWVzdCBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIHNoaWZ0IGluIFNDU0kgcmVxdWVzdCBjbGVhbnVwLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBjbGVhbnVwIGNhbGwgZnJvbSB0aGUgZGVmYXVsdCBlcnJvciBwYXRoIGluIGBzY3NpX3F1ZXVlX3JxYCB0byBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUga2V5IGlzIHN0YW5kYXJkaXppbmcgdGhlIGNsZWFudXAgcHJvY2VzcyBhY3Jvc3MgdGhlIGJsay1tcSBzdWJzeXN0ZW0uIEJlZm9yZSwgaWYgYHF1ZXVlX3JxYCBmYWlsZWQsIGBzY3NpX21xX3VuaW5pdF9jbWQoY21kKWAgd2FzIGNhbGxlZCBpbW1lZGlhdGVseSB3aXRoaW4gYHNjc2lfcXVldWVfcnFgLiBOb3csIHRoZSBzeXN0ZW0gcmVsaWVzIG9uIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIGBibGtfbXFfY2xlYW51cF9ycShycSlgIHRvIHRyaWdnZXIgdGhlIGNsZWFudXAgYWZ0ZXIgdGhlIGluaXRpYWwgcmVxdWVzdCBkaXNwYXRjaC4gU3BlY2lmaWNhbGx5LCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKSBpc24mIzM5O3QgYEJMS19TVFNfT0tgLCBgQkxLX1NUU19SRVNPVVJDRWAsIG9yIGBCTEtfU1RTX0RFVl9SRVNPVVJDRWAsIGBibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldClgIGlzIGNhbGxlZC4gSWYgdGhlIGRyaXZlciBkaWRuJiMzOTt0IGNsZWFuIHVwIGl0cyBvd24gcnEsIG9yIGlmIGl0IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBjbGVhbnVwIGNhbGxiYWNrLCBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBjYWxscyBgcnEtJmd0O3EtJmd0O21xX29wcy0mZ3Q7Y2xlYW51cF9ycShycSlgLiBGb3IgU0NTSSwgYHNjc2lfY2xlYW51cF9ycWAgdGhlbiBjYWxscyBgc2NzaV9tcV91bmluaXRfY21kKGNtZClgIGlmIHRoZSBgUlFGX0RPTlRQUkVQYCBmbGFnIGlzIHNldC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHBvdGVudGlhbCByaXNrcyBhbmQgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIE15IHJlYXNvbmluZyByZWxpZXMgb24gdGhlc2UgY3JpdGVyaWE6CgoxLiAgKipVc2VyLXNwYWNlIGRhdGEgZXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGRlY2lzaW9uLW1ha2luZz8gTm8sIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGNoZWNrcyBgaWYgKHJxLSZndDtxLSZndDttcV9vcHMtJmd0O2NsZWFudXBfcnEpYCBiZWZvcmUgY2FsbGluZy4KMy4gICoqVW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXM6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgY291bGQgYmUgYWNjZXNzZWQgbGF0ZXI/IE5vLCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGxpa2Ugc2cgdGFibGVzIGR1cmluZyByZXF1ZXN0IGNvbXBsZXRpb24gb3IgZmFpbHVyZS4KNC4gICoqQnVmZmVyIGFjY2VzcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogRG9lcyB0aGlzIHBhdGNoIHVzZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gcGVyZm9ybSBib3VuZHMgY2hlY2tzIG9yIG90aGVyIGxvZ2ljIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4KCkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2tzIGhlcmUgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhpcyBwYXRjaCBpcyBhYm91dCByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjbGVhbmluZyB1cCByZXNvdXJjZXMsIG5vdCBsZWFraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgY2xlYW51cCBnZXRzIGNhbGxlZCB0d2ljZSBvciBhdCB0aGUgd3JvbmcgdGltZSksIHJlc291cmNlL21lbW9yeSBsZWFrcyAoaWYgdGhlIGNsZWFudXAgZ2V0cyBtaXNzZWQpLCBvciBnZW5lcmFsIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZGVidWdnaW5nIHRvb2xzL21lY2hhbmlzbXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgaGVyZSwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiByZXF1ZXN0IGNsZWFudXAgc3RhbmRhcmRpemF0aW9uIGFuZCB0aGUgcmVsZXZhbnQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYnkgS0FTQU4uCgpUaGUgcmVhc29uaW5nIHJlcXVpcmVtZW50cyBhcmU6CiogICBgTmVlZHNLTVNBTmA6IGZhbHNlCiogICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggY2VudHJhbGl6ZXMgcmVxdWVzdCBjbGVhbnVwIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIGZyb20gYHNjc2lfcXVldWVfcnFgLCBpdCBjb3VsZCBpbnRyb2R1Y2UgcmVxdWVzdCBsaWZlY3ljbGUgaXNzdWVzLCBkb3VibGUgY2xlYW51cC9mcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlc291cmNlIGxlYWtzLCBidXQgdGhlc2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRvcnM7IGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXG5cblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXG5cblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MjcuOTUzMDA5MTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4Njg0OTU5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RcIixcbiAgICBcInNjc2lfcXVldWVfcnFcIixcbiAgICBcInNjc2lfY2xlYW51cF9ycVwiLFxuICAgIFwic2NzaV9tcV91bmluaXRfY21kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZXF1ZXN0IGRpc3BhdGNoIGVycm9yIGhhbmRsaW5nIGluIGBibGstbXFgIGJ5IGFkZGluZyBhIGNhbGwgdG8gYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KClgIHdoZW4gYHF1ZXVlX3JxKClgIHJldHVybnMgYW4gZXJyb3IsIGFuZCByZW1vdmluZyB0aGUgbWFudWFsIGludm9jYXRpb24gb2YgYHNjc2lfbXFfdW5pbml0X2NtZCgpYCBmcm9tIGBzY3NpX3F1ZXVlX3JxKClgLlxcblxcblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjI3Ljk1MzAxNTIxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIwMzIwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODoyMToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jXFxuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstbXEuY1xcbisrKyBiL2Jsb2NrL2Jsay1tcS5jXFxuQEAgLTIxMjYsNiArMjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFxcdFxcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG4gXFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xcbmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xcbkBAIC0xOTYwLDEzICsxOTYwLDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRcXHRcXHRjbWQtXFx1MDAzZXJlc3VsdCA9IERJRF9OT19DT05ORUNUIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFxcdTAwM2NcXHUwMDNjIDE2O1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuXFxuLVxcdFxcdCAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kXFxuLVxcdFxcdCAqIGFnYWluLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuLVxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbitcXHRcXHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXFxuIFxcdFxcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMToyOC41NzQyODc2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQ5NDY5Mzc5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdFwiLFxuICAgIFwic2NzaV9xdWV1ZV9ycVwiLFxuICAgIFwic2NzaV9jbGVhbnVwX3JxXCIsXG4gICAgXCJzY3NpX21xX3VuaW5pdF9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhMWJjYjgyMWU5YzZlZTIxMzNkMDVjYzIxMzhjYTc1OTJhMzA3MDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODoyMToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmNcbmluZGV4IGEyNmExMWM3M2VlM2UuLmViM2E0ODEyMTFkMGIgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEuY1xuKysrIGIvYmxvY2svYmxrLW1xLmNcbkBAIC0yMTI2LDYgKzIxMjYsNyBAQCBib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHRcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG4gXHRcdFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xuIFx0XHR9XG4gXHR9IHdoaWxlICghbGlzdF9lbXB0eShsaXN0KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuaW5kZXggYWYyN2ZkM2RmOGQ0Ni4uMWVhNjViNWViMjVjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuQEAgLTE5NjAsMTMgKzE5NjAsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHNjc2lfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9OT19DT05ORUNUIFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfRVJST1IgXHUwMDNjXHUwMDNjIDE2O1xuLVx0XHQvKlxuLVx0XHQgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuXG4tXHRcdCAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kXG4tXHRcdCAqIGFnYWluLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHJlcS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKVxuLVx0XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuK1x0XHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXG4gXHRcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjI4LjU3NDI4ODk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxNDQ3MzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZmlsZXMgYW5kIGZ1bmN0aW9ucy4gSSBzZWUgY2hhbmdlcyBpbiBgYmxvY2svYmxrLW1xLmNgIHdpdGhpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgIGFuZCBpbiBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIHNwZWNpZmljYWxseSBpbiB0aGUgYHNjc2lfcXVldWVfcnFgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlc2UgY2hhbmdlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbkluIGBibGstbXEuY2AsIHRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgY2FsbGluZyBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUgY29tbWVudCBpbiBgc2NzaV9saWIuY2Agc3VnZ2VzdHMgd2Ugd2VyZSBwcmV2aW91c2x5IGNhbGxpbmcgc29tZSBjbGVhbiB1cCBvbiBlcnJvciB3aGVuIGEgc3BlY2lmaWMgZmxhZyB3YXMgc2V0IG9uIHRoZSByZXF1ZXN0LiBOb3csIHRoYXQncyByZW1vdmVkIGFuZCBhIGNvbW1lbnQgc2F5cyBibGstbXEgd2lsbCBoYW5kbGUgY2xlYW51cC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGludm9sdmVzIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IGZyZWVpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIG9yIGFzc29jaWF0ZWQgZGF0YSB3aGVuIHJlcXVlc3RzIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IuIFRoZSBjb21tZW50ZWQtb3V0IGNvZGUgaW4gYHNjc2lfbGliLmNgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGlmIHRoZSByZXF1ZXN0IGZhaWxzIChzcGVjaWZpY2FsbHksIGBESURfTk9fQ09OTkVDVGAgb3IgYERJRF9FUlJPUmApLiBJdCBhcHBlYXJzIHRoaXMgcmVzcG9uc2liaWxpdHkgaXMgYmVpbmcgc2hpZnRlZCBpbnRvIHRoZSBibG9jayBsYXllciwgd2hpY2ggd291bGQgbWVhbiBgYmxrX21xX2NsZWFudXBfcnEoKWAgaXMgcHJvYmFibHkgdGhlIG1hZ2ljIGZ1bmN0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgYmxrX21xX2NsZWFudXBfcnEoKWAgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVuY3Rpb24gaW4gdGhlIGBibGstbXEuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSByZXF1ZXN0IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBhIFNDU0kgZHJpdmVyLCBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIHdoZW4gYSBTQ1NJIGNvbW1hbmQgZXJyb3JzIG91dC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjbGVhbnVwIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHJlc291cmNlIGxlYWtzLiBVbHRpbWF0ZWx5IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHNhZmUgYW5kIGNvcnJlY3RseSBoYW5kbGVzIGFsbCB0aGUgcG90ZW50aWFsIGVycm9yIHBhdGhzLCBhbmQgdGhhdCB0aGUgcmVzb3VyY2UgY2xlYW51cCBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NiwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjM3LjI4ODc2NTI3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcdCAqL1xcbjIxMDE6XFx0XFx0cXVldWVkID0gMDtcXG4yMTAyOlxcdFxcdGRvIHtcXG4yMTAzOlxcdFxcdFxcdHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSBiZDtcXG4yMTA0OlxcdFxcbjIxMDU6XFx0XFx0XFx0cnEgPSBsaXN0X2ZpcnN0X2VudHJ5KGxpc3QsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpO1xcbjIxMDY6XFx0XFxuMjEwNzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoaGN0eCAhPSBycS1cXHUwMDNlbXFfaGN0eCk7XFxuMjEwODpcXHRcXHRcXHRwcmVwID0gYmxrX21xX3ByZXBfZGlzcGF0Y2hfcnEocnEsIGdldF9idWRnZXQpO1xcbjIxMDk6XFx0XFx0XFx0aWYgKHByZXAgIT0gUFJFUF9ESVNQQVRDSF9PSylcXG4yMTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMTE6XFx0XFxuMjExMjpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG4yMTEzOlxcdFxcbjIxMTQ6XFx0XFx0XFx0YmQucnEgPSBycTtcXG4yMTE1OlxcdFxcdFxcdGJkLmxhc3QgPSBsaXN0X2VtcHR5KGxpc3QpO1xcbjIxMTY6XFx0XFxuMjExNzpcXHRcXHRcXHRyZXQgPSBxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZXF1ZXVlX3JxKGhjdHgsIFxcdTAwMjZiZCk7XFxuMjExODpcXHRcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjIxMTk6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX09LOlxcbjIxMjA6XFx0XFx0XFx0XFx0cXVldWVkKys7XFxuMjEyMTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTIyOlxcdFxcdFxcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcXG4yMTIzOlxcdFxcdFxcdFxcdG5lZWRzX3Jlc291cmNlID0gdHJ1ZTtcXG4yMTI0OlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjIxMjU6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX0RFVl9SRVNPVVJDRTpcXG4yMTI2OlxcdFxcdFxcdFxcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcXG4yMTI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMjg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yMTI5OlxcdFxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG4yMTMwOlxcdFxcdFxcdFxcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcXG4yMTMxOlxcdFxcdFxcdH1cXG4yMTMyOlxcdFxcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG4yMTMzOlxcdG91dDpcXG4yMTM0OlxcdFxcdC8qIElmIHdlIGRpZG4ndCBmbHVzaCB0aGUgZW50aXJlIGxpc3QsIHdlIGNvdWxkIGhhdmUgdG9sZCB0aGUgZHJpdmVyXFxuMjEzNTpcXHRcXHQgKiB0aGVyZSB3YXMgbW9yZSBjb21pbmcsIGJ1dCB0aGF0IHR1cm5lZCBvdXQgdG8gYmUgYSBsaWUuXFxuMjEzNjpcXHRcXHQgKi9cXG4yMTM3OlxcdFxcdGlmICghbGlzdF9lbXB0eShsaXN0KSB8fCByZXQgIT0gQkxLX1NUU19PSylcXG4yMTM4OlxcdFxcdFxcdGJsa19tcV9jb21taXRfcnFzKGhjdHgsIHF1ZXVlZCwgZmFsc2UpO1xcbjIxMzk6XFx0XFxuMjE0MDpcXHRcXHQvKlxcbjIxNDE6XFx0XFx0ICogQW55IGl0ZW1zIHRoYXQgbmVlZCByZXF1ZXVpbmc/IFN0dWZmIHRoZW0gaW50byBoY3R4LVxcdTAwM2VkaXNwYXRjaCxcXG4yMTQyOlxcdFxcdCAqIHRoYXQgaXMgd2hlcmUgd2Ugd2lsbCBjb250aW51ZSBvbiBuZXh0IHF1ZXVlIHJ1bi5cXG4yMTQzOlxcdFxcdCAqL1xcbjIxNDQ6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7XFxuMjE0NTpcXHRcXHRcXHRib29sIG5lZWRzX3Jlc3RhcnQ7XFxuMjE0NjpcXHRcXHRcXHQvKiBGb3Igbm9uLXNoYXJlZCB0YWdzLCB0aGUgUkVTVEFSVCBjaGVjayB3aWxsIHN1ZmZpY2UgKi9cXG4yMTQ3OlxcdFxcdFxcdGJvb2wgbm9fdGFnID0gcHJlcCA9PSBQUkVQX0RJU1BBVENIX05PX1RBRyBcXHUwMDI2XFx1MDAyNlxcbjIxNDg6XFx0XFx0XFx0XFx0KChoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX1RBR19RVUVVRV9TSEFSRUQpIHx8XFxuMjE0OTpcXHRcXHRcXHRcXHRibGtfbXFfaXNfc2hhcmVkX3RhZ3MoaGN0eC1cXHUwMDNlZmxhZ3MpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MzcuMjg5NDk0ODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDA6XFx0b3V0X2RlY190YXJnZXRfYnVzeTpcXG4xOTQxOlxcdFxcdGlmIChzY3NpX3RhcmdldChzZGV2KS1cXHUwMDNlY2FuX3F1ZXVlIFxcdTAwM2UgMClcXG4xOTQyOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNjc2lfdGFyZ2V0KHNkZXYpLVxcdTAwM2V0YXJnZXRfYnVzeSk7XFxuMTk0MzpcXHRvdXRfcHV0X2J1ZGdldDpcXG4xOTQ0OlxcdFxcdHNjc2lfbXFfcHV0X2J1ZGdldChxLCBjbWQtXFx1MDAzZWJ1ZGdldF90b2tlbik7XFxuMTk0NTpcXHRcXHRjbWQtXFx1MDAzZWJ1ZGdldF90b2tlbiA9IC0xO1xcbjE5NDY6XFx0XFx0c3dpdGNoIChyZXQpIHtcXG4xOTQ3OlxcdFxcdGNhc2UgQkxLX1NUU19PSzpcXG4xOTQ4OlxcdFxcdFxcdGJyZWFrO1xcbjE5NDk6XFx0XFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxcbjE5NTA6XFx0XFx0XFx0aWYgKHNjc2lfZGV2aWNlX2Jsb2NrZWQoc2RldikpXFxuMTk1MTpcXHRcXHRcXHRcXHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcXG4xOTUyOlxcdFxcdFxcdGJyZWFrO1xcbjE5NTM6XFx0XFx0Y2FzZSBCTEtfU1RTX0FHQUlOOlxcbjE5NTQ6XFx0XFx0XFx0Y21kLVxcdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXFx1MDAzY1xcdTAwM2MgMTY7XFxuMTk1NTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUClcXG4xOTU2OlxcdFxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbjE5NTc6XFx0XFx0XFx0YnJlYWs7XFxuMTk1ODpcXHRcXHRkZWZhdWx0OlxcbjE5NTk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxcbjE5NjA6XFx0XFx0XFx0XFx0Y21kLVxcdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xOTYxOlxcdFxcdFxcdGVsc2VcXG4xOTYyOlxcdFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFxcdTAwM2NcXHUwMDNjIDE2O1xcbjE5NjM6XFx0XFx0XFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xcbjE5NjQ6XFx0XFx0XFx0c2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7XFxuMTk2NTpcXHRcXHRcXHRicmVhaztcXG4xOTY2OlxcdFxcdH1cXG4xOTY3OlxcdFxcdHJldHVybiByZXQ7XFxuMTk2ODpcXHR9XFxuMTk2OTpcXHRcXG4xOTcwOlxcdHN0YXRpYyBpbnQgc2NzaV9tcV9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4xOTcxOlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBoY3R4X2lkeCwgaW50IG51bWFfbm9kZSlcXG4xOTcyOlxcdHtcXG4xOTczOlxcdFxcdHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2V0LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4xOTc0OlxcdFxcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbjE5NzU6XFx0XFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4xOTc2OlxcdFxcdGludCByZXQgPSAwO1xcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRjbWQtXFx1MDAzZXNlbnNlX2J1ZmZlciA9XFxuMTk3OTpcXHRcXHRcXHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MzcuMjg5NzcwODI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMTQ2MTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBibGtfbXFfY2xlYW51cF9ycWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBibGtfbXFfY2xlYW51cF9ycWAuIE15IGZpcnN0IG1vdmU/IERlZmluaXRlbHkgYSBgZ3JlcGAgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIHdoZXJlIGl0J3MgY2FsbGVkIHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQ7IHdobyBjYWxscyBpdCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcz8gVGhhdCBncmVwIHdpbGwgYmUgbXkgaW5pdGlhbCBtYXAgdG8gZmlndXJlIG91dCB0aGUgY29kZSdzIGNhbGwgZ3JhcGguIEhvcGVmdWxseSwgdGhlIHJlc3VsdHMgYXJlIG1hbmFnZWFibGUgYW5kIHF1aWNrbHkgcG9pbnQgbWUgdG8gdGhlIGltcG9ydGFudCBwYXJ0cy4gVGhlbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBteSBoeXBvdGhlc2VzIGJhc2VkIG9uIHRob3NlIGxvY2F0aW9ucy4gVGhlIG9iamVjdGl2ZSwgb2YgY291cnNlLCBpcyB0byBncmFzcCB0aGUgcm9sZSBhbmQgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjM5LjIxMTIzODM1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwNTg0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9jbGVhbnVwX3JxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTIxMjgtXFx0XFx0ZGVmYXVsdDpcXG5ibG9jay9ibGstbXEuYzoyMTI5OlxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG5ibG9jay9ibGstbXEuYy0yMTMwLVxcdFxcdFxcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcnEuYz0zNjk9c3RhdGljIGludCBtYXBfcmVxdWVzdChzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLXJxLmMtMzk5LVxcdFxcdFxcdGJsa19ycV91bnByZXBfY2xvbmUoY2xvbmUpO1xcbmRyaXZlcnMvbWQvZG0tcnEuYzo0MDA6XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEoY2xvbmUpO1xcbmRyaXZlcnMvbWQvZG0tcnEuYy00MDEtXFx0XFx0XFx0dGlvLVxcdTAwM2V0aS1cXHUwMDNldHlwZS1cXHUwMDNlcmVsZWFzZV9jbG9uZV9ycShjbG9uZSwgXFx1MDAyNnRpby1cXHUwMDNlaW5mbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTEwMjA9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6MTAzOTpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTA0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjQyLjA2MTgyODIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODkzMDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyJ3MgTVEgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGluY2x1ZGUvbGludXgvYmxrLW1xLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTAzOS4gSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIHdpdGggdGhlIG11bHRpLXF1ZXVlIGJsb2NrIGxheWVyLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGVmaW5pdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHRoZSBjb3JlIHF1ZXVlIG1hbmFnZW1lbnQgb3IgSS9PIHN1Ym1pc3Npb24gcGF0aHMuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgYXJlYSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIGVucXVldWUvZGVxdWV1ZSBsb2dpYywgb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIHF1ZXVlcyBhbmQgdGhlIHJlcXVlc3RzIHdpdGhpbiB0aGVtLiBJdCBjb3VsZCBhbHNvIHBvaW50IHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gY29tbWFuZCBtZXJnaW5nLCBvciBoYW5kbGluZyBvZiBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBibG9jayBsYXllci4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBsaW5lIDEwMzkgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0NC4zNTExMzEzMjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGstbXEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM1OlxcdCNkZWZpbmUgaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMDM2OlxcdFxcdGZvciAoKGkpID0gMDsgKGkpIFxcdTAwM2MgKGhjdHgpLVxcdTAwM2Vucl9jdHggXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMTAzNzpcXHRcXHQgICAgICh7IGN0eCA9IChoY3R4KS1cXHUwMDNlY3R4c1soaSldOyAxOyB9KTsgKGkpKyspXFxuMTAzODpcXHRcXG4xMDM5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAocnEtXFx1MDAzZXEtXFx1MDAzZW1xX29wcy1cXHUwMDNlY2xlYW51cF9ycSlcXG4xMDQyOlxcdFxcdFxcdHJxLVxcdTAwM2VxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZWNsZWFudXBfcnEocnEpO1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbjEwNDY6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnFfaXNfc3luYyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0OTpcXHR7XFxuMTA1MDpcXHRcXHRyZXR1cm4gb3BfaXNfc3luYyhycS1cXHUwMDNlY21kX2ZsYWdzKTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTtcXG4xMDU0OlxcdGludCBibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCByZXF1ZXN0ICpycV9zcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjQ0LjM1MTI0MjEzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM3ODMzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCbG9jayBMYXllcidzIFJlcXVlc3QgQ2xlYW51cCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYmxvY2sgcmVxdWVzdHMgZ2V0IGNsZWFuZWQgdXAgd2l0aGluIHRoZSBibGstbXEgZnJhbWV3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gTm93LCB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGxvb2tzIGZhbWlsaWFyOyBpdCdzIGNhbGxpbmcgYHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgdGhpcyBjaGFpbiBvZiBmdW5jdGlvbiBjYWxscy4gU28sIHRoZSBrZXJuZWwncyBsaWtlbHkgdXNpbmcgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGltcGxlbWVudCBzb21lIGRldmljZSBzcGVjaWZpYyBjbGVhbiB1cCBmdW5jdGlvbmFsaXR5LlxuXG5TbywgbGV0J3Mgc3RhcnQgd2l0aCBgY2xlYW51cF9ycWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGZvY3VzIG9uIHRvIHN0YXJ0IHdpdGgsIEkgbmVlZCB0byBrbm93IGFsbCB0aGUgZGV2aWNlcyB0aGF0IGhhdmUgaW1wbGVtZW50ZWQgdGhpcy4gSSB3aWxsIGZpcmUgdXAgdGhlIHNlYXJjaCB0b29scyBhbmQgaHVudCBkb3duIGFsbCBpbnN0YW5jZXMgb2YgYGNsZWFudXBfcnFgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGhhcHBlbmluZyBhbmQgd2hpY2ggZHJpdmVycyBhcmUgdXNpbmcgaXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgY2xlYW4gdXAgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0Ni45ODkwNzkwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTg3MTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmNsZWFudXBfcnFcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0OS43NDA5NjEyNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY1OTAwMzE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2NzaV9jbGVhbnVwX3JxYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzY3NpX2NsZWFudXBfcnFgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0IOKAkyB3aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uIGNhbGw/IElzIGl0IGJlaW5nIGNhbGxlZCBhZnRlciBhIGhhcmR3YXJlIHJlc2V0LCBhbiBJL08gZXJyb3IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gcmVxdWVzdCBxdWV1ZSBjbGVhbnVwLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcmVzb3VyY2VzIHRoaXMgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgc3BpbmxvY2tzIGludm9sdmVkPyBXaGF0J3MgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYWRhcHRlcidzIERNQSBzdHJ1Y3R1cmVzPyBJJ20gaG9waW5nIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0YWdnZWQgcXVldWluZywgc2Vuc2UgZGF0YSwgYW5kIHBvdGVudGlhbGx5IGVycm9yIHJldHJpZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBwcm9wZXJseSBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgU0NTSSBlcnJvciBjb2RlcyBhbmQgaG93IGl0IGF2b2lkcyBhbnkgZG91YmxlLWZyZWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBTQ1NJIGxheWVyLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlIGFuZCBpbnRlcnJ1cHQtc2FmZS4gTGV0J3Mgc2VlIGhvdyBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjUyLjM5OTk2ODE3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTA0MDI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2NsZWFudXBfcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTI4Mz1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2FsbG9jX3JlcXVlc3QpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI4OC0gKi9cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjg5OnN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5MC17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo1NC45MjEwMTYxNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzNDU5Mzk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIFNDU0kgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBTQ1NJIGxpYnJhcnkgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgd2l0aGluIGl0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTI4OS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgU0NTSSBpbnRlcmFjdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3R1ZmYgdGhlcmUgYWJvdXQgZXJyb3IgcmVjb3ZlcnksIGNvbW1hbmQgcmV0cmllcywgb3IgcGVyaGFwcyBldmVuIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIFNDU0kgZGV2aWNlIG1hbmFnZW1lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjU3LjE1NTYxMjc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI4MDpcXHRcXHRcXHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xcbjEyODE6XFx0XFx0cmV0dXJuIHJxO1xcbjEyODI6XFx0fVxcbjEyODM6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9hbGxvY19yZXF1ZXN0KTtcXG4xMjg0OlxcdFxcbjEyODU6XFx0LypcXG4xMjg2OlxcdCAqIE9ubHkgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXNuJ3QgY29tcGxldGVkIGJ5IFNDU0ksIGFuZCBub3QgZnJlZWQgYnlcXG4xMjg3OlxcdCAqIFNDU0lcXG4xMjg4OlxcdCAqL1xcbjEyODk6XFx0c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4xMjkwOlxcdHtcXG4xMjkxOlxcdFxcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbjEyOTI6XFx0XFxuMTI5MzpcXHRcXHRjbWQtXFx1MDAzZWZsYWdzID0gMDtcXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0aWYgKHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUCkge1xcbjEyOTY6XFx0XFx0XFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XFxuMTI5NzpcXHRcXHRcXHRycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNj0gflJRRl9ET05UUFJFUDtcXG4xMjk4OlxcdFxcdH1cXG4xMjk5OlxcdH1cXG4xMzAwOlxcdFxcbjEzMDE6XFx0LyogQ2FsbGVkIGJlZm9yZSBhIHJlcXVlc3QgaXMgcHJlcGFyZWQuIFNlZSBhbHNvIHNjc2lfbXFfcHJlcF9mbigpLiAqL1xcbjEzMDI6XFx0dm9pZCBzY3NpX2luaXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKVxcbjEzMDM6XFx0e1xcbjEzMDQ6XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gc2NzaV9jbWRfdG9fcnEoY21kKTtcXG4xMzA1OlxcdFxcbjEzMDY6XFx0XFx0aWYgKCFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpIFxcdTAwMjZcXHUwMDI2ICEoY21kLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDTURfSU5JVElBTElaRUQpKSB7XFxuMTMwNzpcXHRcXHRcXHRjbWQtXFx1MDAzZWZsYWdzIHw9IFNDTURfSU5JVElBTElaRUQ7XFxuMTMwODpcXHRcXHRcXHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xcbjEzMDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo1Ny4xNTU3NjY4NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMTU2MjA3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogU0NTSSBSZXF1ZXN0IENsZWFudXAgaW4gYmxrLW1xKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBzY3NpX2NsZWFudXBfcnFgIGlzIG5vdyBiZWluZyBjYWxsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgd2l0aGluIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YC4gV2UncmUgZGVhbGluZyB3aXRoIFNDU0kgY29tbWFuZCBjbGVhbnVwIGlmIGBSUUZfRE9OVFBSRVBgIGlzIHNldCwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIGBxdWV1ZV9ycWAgZmFpbHMuIFByZXZpb3VzbHksIG1hbnVhbCBjbGVhbnVwIHdhcyBkb25lLCBub3cgaXQncyBoYW5kbGVkIHRocm91Z2ggYSBtb3JlIGdlbmVyYWxpemVkIGBibGtfbXFfY2xlYW51cF9ycWAuIFRoaXMgY2hhbmdlIGFmZmVjdHMgYWxsIGJsb2NrIGRyaXZlcnMsIGdpdmVuIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGFuZCB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHkuIEJsb2NrIEkvTyBhbmQgU0NTSSBhcmUgY29yZSwgY29yZSwgY29yZS4gV2UncmUgdGFsa2luZyBhYm91dCBibGstbXEsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBibG9jayBJL08gZGlzcGF0Y2gsIGFuZCB0aGUgU0NTSSBzdWJzeXN0ZW0gaXMgdXNlZCBldmVyeXdoZXJlLCBpbmNsdWRpbmcgUUVNVSwgc3RhbmRhcmQga2VybmVscywgdmlydGlvLXNjc2ksIGFuZCBhbGwgc29ydHMgb2Ygb3RoZXIgZW11bGF0aW9ucywgcGFzcy10aHJvdWdocywgYW5kIG1hc3Mgc3RvcmFnZSBkZXZpY2VzLiBFdmVyeSBibG9jayBJL08gcmVxdWVzdCBnb2VzIHRocm91Z2ggYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHF1ZXVlIGZ1bmN0aW9uIGBzY3NpX3F1ZXVlX3JxYCBpcyBhIGtleSBleGFtcGxlLCBzbyB0aGlzIGlzIGEgaG90IHBhdGguICBXaGVuIGBxdWV1ZV9ycWAgZmFpbHMg4oCTIGBCTEtfU1RTX0lPRVJSYCwgYEJMS19TVFNfVEFSR0VUYCwgZXRjLiDigJMgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCdzIGRlZmF1bHQgcGF0aCBub3cgaW52b2tlcyBgYmxrX21xX2NsZWFudXBfcnFgLCB3aGljaCB0aGVuIGNhbGxzIGBzY3NpX2NsZWFudXBfcnFgLiBUaGlzIGNoYW5nZXMgdGhlIGVudGlyZSBsaWZlY3ljbGUgZm9yIGhvdyBibG9jayBkcml2ZXJzIHJlYWN0IHRvIGVycm9ycywgc28gdGhlcmUgaXMgY2xlYXJseSBhIGxhcmdlIGltcGFjdC4gTW9kaWZpY2F0aW9uIG9mIGBibG9jay9ibGstbXEuY2AgYW5kIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgY29uZmlybXMgdGhpcy4gIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCB0aGUgc3ltYm9scy4gV2UgbmVlZCB0byBiZSBzcGVjaWZpYyBhYm91dCB3aGF0IHdlJ3JlIHRhcmdldGluZy4gV2UncmUgbG9va2luZyBhdCBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAgYW5kIGBzY3NpX2NsZWFudXBfcnFgLCBhbmQgYGJsa19tcV9jbGVhbnVwX3JxYC4gVGhlIGdvYWwgaXMgdG8gZXhhbWluZSB3aGVyZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCBpcyBub24tc3RhdGljLCBzbyB3ZSBzaG91bGQgYmUgZ29vZCB0aGVyZS4gYHNjc2lfcXVldWVfcnFgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIHdlIG11c3QgY2hlY2sgaW4gcmVsYXRpb24gdG8gdGhlIGNvbXBpbGVyIGJlaGF2aW9yLiBgc2NzaV9jbGVhbnVwX3JxYCBpcyBhbHNvIHN0YXRpYywgc28gd2UgbmVlZCB0byBzZWUgaG93IHRoZSBjb21waWxlciBpcyBoYW5kbGluZyBpdC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSB2bWxpbnV4IHN5bWJvbHMgZm9yIHRoZXNlIGZpbGVzLCBhbmQgY2hlY2sgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5Ib3dldmVyLCBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgIGlzIHViaXF1aXRvdXM7IGl0J3MgdGhlIGNvcmUgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYmxrLW1xISBXZSBtdXN0IGF2b2lkIGxpc3RpbmcgdHJ1bHkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgd291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBXZSdyZSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMsIGxpa2UgYHNjc2lfcXVldWVfcnFgIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCBhbmQgd2hlcmUgdGhvc2UgYXJlIGNhbGxlZC4gV2UgYXJlIGFsc28gaW50ZXJlc3RlZCBpbiBhbnkgZHJpdmVycy9lbnRyeXBvaW50cyB0aGF0IGFyZSBTQ1NJLXNwZWNpZmljLiBUaGUgaW1wb3J0YW50IG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCBhbmQgYHNjc2lfY2xlYW51cF9ycWAuIFdlIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnlwb2ludHMgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjowNy40NzEzOTA0ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU3MDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX21xX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjA3MT1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2luaXRfbGltaXRzKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDcyLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDc0LVxcdC5nZXRfYnVkZ2V0XFx0PSBzY3NpX21xX2dldF9idWRnZXQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDk0PXN0YXRpYyB2b2lkIHNjc2lfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMDAtXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjEwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEwMi1cXHQuZ2V0X2J1ZGdldFxcdD0gc2NzaV9tcV9nZXRfYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEyMj1pbnQgc2NzaV9tcV9zZXR1cF90YWdzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzNS1cXHRpZiAoc2hvc3QtXFx1MDAzZWhvc3R0LVxcdTAwM2Vjb21taXRfcnFzKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzY6XFx0XFx0dGFnX3NldC1cXHUwMDNlb3BzID0gXFx1MDAyNnNjc2lfbXFfb3BzO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMzctXFx0ZWxzZVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzg6XFx0XFx0dGFnX3NldC1cXHUwMDNlb3BzID0gXFx1MDAyNnNjc2lfbXFfb3BzX25vX2NvbW1pdDtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTM5LVxcdHRhZ19zZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyA9IHNob3N0LVxcdTAwM2Vucl9od19xdWV1ZXMgPyA6IDE7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMjEwPXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2VfZnJvbV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTMtXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjIxNDpcXHRpZiAocS1cXHUwMDNlbXFfb3BzID09IFxcdTAwMjZzY3NpX21xX29wc19ub19jb21taXQgfHxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMjE1OlxcdCAgICBxLVxcdTAwM2VtcV9vcHMgPT0gXFx1MDAyNnNjc2lfbXFfb3BzKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTYtXFx0XFx0c2RldiA9IHEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MDcuNjA3OTcyNjU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzI0NTUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFNDU0kgUmVxdWVzdCBRdWV1ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBTQ1NJIHJlcXVlc3QgcXVldWUgc2l0dWF0aW9uLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYHNjc2lfcXVldWVfcnFgIGFuZCBpdHMgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBjb250ZXh0IGFyb3VuZCB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBob3cgYHNjc2lfcXVldWVfcnFgIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBgc2NzaV9tcV9vcHNgIHN0cnVjdHVyZTsgc2VlbXMgbGlrZSBpdCBpcyBkZWZpbmVkIGFzOiBgLnF1ZXVlX3JxID0gc2NzaV9xdWV1ZV9ycSxgIGFuZCBgLmNsZWFudXBfcnEgPSBzY3NpX2NsZWFudXBfcnEsYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByaWdodCBzZXR0aW5ncyBmb3IgU0NTSSBhbmQgYmxrLW1xLiBibGstbXEgaXMgZGVmaW5pdGVseSBjb3JlIGJsb2NrIGxheWVyIHRlcnJpdG9yeSDigJMgYENPTkZJR19CTE9DS2AgY29uZmlybWVkLiBTQ1NJIHNob3VsZCBiZSBlaXRoZXIgYENPTkZJR19TQ1NJYCBvciBgU0NTSV9NT0RgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIGluIHRoZSBgZHJpdmVycy9zY3NpYCBkaXJlY3RvcnkgdG8gYmUgc3VyZS4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQga25vd2luZyB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxMy4yODA0MzEyODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUzMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2xpYlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL01ha2VmaWxlPTI0PUNPTlRFWFRfQU5BTFlTSVNfc2NzaV9pb2N0bC5vIDo9IHlcXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MjU6Q09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYi5vIDo9IHlcXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMjYtQ09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYl9kbWEubyA6PSB5XFxuLS1cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU9MTgyPXNjc2lfbW9kLXlcXHRcXHRcXHQrPSBzY3NpLm8gaG9zdHMubyBzY3NpX2lvY3RsLm8gXFxcXFxcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxODM6XFx0XFx0XFx0XFx0ICAgc2NzaWNhbS5vIHNjc2lfZXJyb3IubyBzY3NpX2xpYi5vXFxuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE4NC1zY3NpX21vZC0kKENPTkZJR19TQ1NJX0NPTlNUQU5UUykgKz0gY29uc3RhbnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MTMuMzkzOTczOTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NjMxMDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBgc2NzaV9saWIub2AuIEkga25vdyB0aGF0J3MgcGFydCBvZiBgc2NzaV9tb2RgLCB3aGljaCBnZXRzIGNvbXBpbGVkIHdoZW4gd2UgaGF2ZSBgQ09ORklHX1NDU0lgIHNldC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSdtIGFsc28gc2VlaW5nIGBibG9jay9ibGstbXEuY2AsIGFuZCB0aGF0J3MgbGlua2VkIHRvIGBibG9jay9NYWtlZmlsZWAuIFRoZSBgYmxrLW1xLmNgIG1vZHVsZSBpcyBidWlsdCB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIFNpbmNlIEkgbmVlZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxNS45OTAyODkyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1tcVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTA6XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTExLVxcdFxcdFxcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjE2LjA3MjU2Mzc2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQyNTA0NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBTQ1NJL0Jsb2NrIExheWVyIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBvYnZpb3VzIOKAkyBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTE9DS2AgYW5kIGBDT05GSUdfU0NTSWAgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBibG9jayBsYXllciBhbmQgdGhlIFNDU0kgc3Vic3lzdGVtLCByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGFsd2F5cyBnb29kIHRvIGNvbmZpcm0gdGhlIGJhc2ljcy5cblxuTm93LCBmb3IgYSBkZWVwZXIgZGl2ZSwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHJlcXVlc3QgZGlzcGF0Y2ggYW5kIGNsZWFudXAuIEknbSB0aGlua2luZyBvZiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAsIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBzeW1ib2xzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gZm9sbG93IHVwIG9uIHRoaXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgc2NzaV9tcV91bmluaXRfY21kYC4gSXMgdGhhdCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBzY3NpX2NsZWFudXBfcnFgPyBUaGF0J3MgYSBjcnVjaWFsIHJlbGF0aW9uc2hpcCB0byBuYWlsIGRvd24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNvbW1hbmRzIGFyZSBjbGVhbmVkIHVwIHdoZW4gdXNpbmcgbWVzc2FnZSBxdWV1ZXMuIEkgc2hvdWxkIGNoZWNrIGBzY3NpX21xX3VuaW5pdF9jbWRgJ3Mgc291cmNlIGNvZGUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MTguNjE1MDcyOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4NjMwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9tcV91bmluaXRfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc2NzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz01OD1zdGF0aWMgREVGSU5FX01VVEVYKHNjc2lfc2Vuc2VfY2FjaGVfbXV0ZXgpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYwOnN0YXRpYyB2b2lkIHNjc2lfbXFfdW5pbml0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYxLVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTE1PXN0YXRpYyB2b2lkIHNjc2lfbXFfcmVxdWV1ZV9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBsb25nIG1zZWNzKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVxcdFxcdHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2PSB+UlFGX0RPTlRQUkVQO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyMTpcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjItXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTYyNj1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2ZyZWVfc2d0YWJsZXMpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2Mjg6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02Mjkte1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NjY0PXN0YXRpYyBib29sIHNjc2lfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVxcdCAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjY5NjpcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02OTctXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjk1LVxcdGlmIChycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApIHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2OlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3NC1cXHRcXHRXQVJOX09OX09OQ0UoIWJsa19ycV9pc19wYXNzdGhyb3VnaChzY3NpX2NtZF90b19ycShjbWQpKSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTU3NTpcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xNTc2LVxcdFxcdF9fYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCBzY3NpX3Jlc3VsdF90b19ibGtfc3RhdHVzKGNtZC1cXHUwMDNlcmVzdWx0KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xODU0PXN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTk1NjpcXHRcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxOC43NDg5NDQ3NzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNDI1ODE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHRoaXMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiB0aGUgY29yZSBibG9jayBsYXllcidzIGRpc3BhdGNoIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyByZXF1ZXN0IGRpc3BhdGNoIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGFuZCB0aGUgU0NTSSByZXF1ZXN0IGV4ZWN1dGlvbiBhbmQgY2xlYW51cCBwYXRoLCB3aGljaCBpcyBsaW5rZWQgdGhyb3VnaCBgc2NzaV9xdWV1ZV9ycWAgY2FsbGluZyBgYmxrX21xX2NsZWFudXBfcnFgLCBhbmQgdGhlbiBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgc2NzaV9jbGVhbnVwX3JxYC4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlcm5pbmcgdGhlIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUuIEkgY2FuIGltbWVkaWF0ZWx5IHRlbGwgdGhhdCB0aGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgZXNwZWNpYWxseSBzaW5jZSB0aGVzZSBjb21wb25lbnRzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5Gb3IgYHNldC1yZXN1bHRzYCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci1oYW5kbGluZyBwYXRoIGluIHRoZSBibG9jayBsYXllciwgYW5kIHNpbXBsaWZpZXMgU0NTSSBjb21tYW5kIGVycm9yIGNsZWFudXAgaW4gdGhhdCBgc2NzaV9xdWV1ZV9ycSgpYCBmdW5jdGlvbi4gSXQncyBhbHRlcmluZyB0aGUgcmVxdWVzdCBsaWZlY3ljbGUgYWNyb3NzIHRoZSBkaXNwYXRjaCBwcm9jZXNzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciB1bmV4cGVjdGVkIHN0YXRlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCwgYHNjc2lfY2xlYW51cF9ycWAsIGFuZCBgc2NzaV9tcV91bmluaXRfY21kYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQuIEknbGwgaW5jbHVkZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGBCTE9DS2AgYW5kIGBTQ1NJYCwgdG8gZW5zdXJlIHdlJ3JlIHRlc3RpbmcgdGhlIGNoYW5nZXMgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy5cblxuQWxyaWdodCwgdGltZSB0byB0cmlnZ2VyIHRoYXQgdG9vbCBjYWxsIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuMzUzMjA1NTQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MDExNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9kaXNwYXRjaF9ycV9saXN0XCIsXG4gICAgXCJzY3NpX3F1ZXVlX3JxXCIsXG4gICAgXCJzY3NpX2NsZWFudXBfcnFcIixcbiAgICBcInNjc2lfbXFfdW5pbml0X2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdFwiLFxuICAgIFwic2NzaV9xdWV1ZV9ycVwiLFxuICAgIFwic2NzaV9jbGVhbnVwX3JxXCIsXG4gICAgXCJzY3NpX21xX3VuaW5pdF9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoyMy41MjEyMzM4MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTE2NzE2NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuNTIyMzAzOTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTMxMTU2Mzk0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjIxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTIxMjYsNiArMjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gXHRcdFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcbiBcdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG5pbmRleCBhZjI3ZmQzZGY4ZDQ2Li4xZWE2NWI1ZWIyNWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG5AQCAtMTk2MCwxMyArMTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRlbHNlXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcdTAwM2NcdTAwM2MgMTY7XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW5cbi1cdFx0ICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmRcbi1cdFx0ICogYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4tXHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4rXHRcdC8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi9cbiBcdFx0c2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuNTIyMzA3Mjc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjQ0NjE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc28gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHdoYXQncyBjaGFuZ2VkIGFuZCB0aGVuIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbkZpcnN0LCBsZXQncyBmb2N1cyBvbiBgYmxvY2svYmxrLW1xLmNgLiBTcGVjaWZpY2FsbHksIHdpdGhpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCB0aGVyZSdzIGEgbmV3IGxpbmUgdGhhdCBjYWxscyBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgYGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KWAgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLiBUaGlzIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IuIFRoZSBleGlzdGluZyBjb2RlIGVuZHMgYSByZXF1ZXN0IHdpdGggYGJsa19tcV9lbmRfcmVxdWVzdGAgYnV0IHRoaXMgbmV3IGFkZGl0aW9uIGlzIGNsZWFuaW5nIHVwIGZpcnN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBibGtfbXFfY2xlYW51cF9ycWAgaXMgZG9pbmcsIGFuZCB3aGF0IHJlc291cmNlcyBpdCdzIGhhbmRsaW5nLiBJcyBpdCBmcmVlaW5nIG1lbW9yeSwgcmVsZWFzaW5nIGxvY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZSBpcyBrZXkuXG5cbk5leHQsIEknbGwgc3dpdGNoIG15IGF0dGVudGlvbiB0byBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3NpX3F1ZXVlX3JxYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBpbmNsdWRlZCBhIGNoZWNrIGZvciBgUlFGX0RPTlRQUkVQYCBhbmQgdGhlbiBjYWxsZWQgYHNjc2lfbXFfdW5pbml0X2NtZChjbWQpYCBpZiB0aGlzIGZsYWcgd2FzIHNldC4gTm93LCB0aGF0IGVudGlyZSBzZWN0aW9uIG9mIGNvZGUgaGFzIGJlZW4gY29tbWVudGVkIG91dCwgYW5kIGEgY29tbWVudCBoYXMgYmVlbiBhZGRlZCBleHBsYWluaW5nIHRoYXQg4oCcYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZC7igJ0gVGhpcyByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgcmVzb3VyY2UgY2xlYW51cCBmcm9tIHRoZSBTQ1NJIGxheWVyIHRvIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIG9uZSBpbiBgYmxrLW1xLmNgLiBUaGUgYGRlZmF1bHRgIGNhc2UgZnJvbSB0aGUgZWFybGllciBmaWxlIG5vdyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSBibG9jayBsYXllci5cblxuTm93LCBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGNoYW5nZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIG5vdyBoYW5kbGluZyB3aGF0IGBzY3NpX21xX3VuaW5pdF9jbWRgICp1c2VkKiB0byBoYW5kbGUuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgaG93IHRoZXNlIGRpZmZlcmVudCBsYXllcnMgaW50ZXJhY3Qgd2hlbiBhIHJlcXVlc3QgZW5jb3VudGVycyBhbiBlcnJvci4gVGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljaXQgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCByZXNvdXJjZSBvd25lcnNoaXAgb3Igc3RhdGUgdGhhdCBJIG5lZWQgdG8gdmVyaWZ5LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgbWlnaHQgc2ltcGxpZnkgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBzb21lIHdheXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgaW4gdGhlIHByb2Nlc3MuIEknbGwgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTgsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMTg2NzczNTM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzczMTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfY2xlYW51cF9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9MjA4NT1ib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjEyOC1cXHRcXHRkZWZhdWx0OlxcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xcbmJsb2NrL2Jsay1tcS5jLTIxMzAtXFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoyOC4yNzA1MTA1MzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1tcS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTU6XFx0XFx0XFx0YmQubGFzdCA9IGxpc3RfZW1wdHkobGlzdCk7XFxuMjExNjpcXHRcXG4yMTE3OlxcdFxcdFxcdHJldCA9IHEtXFx1MDAzZW1xX29wcy1cXHUwMDNlcXVldWVfcnEoaGN0eCwgXFx1MDAyNmJkKTtcXG4yMTE4OlxcdFxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMjExOTpcXHRcXHRcXHRjYXNlIEJMS19TVFNfT0s6XFxuMjEyMDpcXHRcXHRcXHRcXHRxdWV1ZWQrKztcXG4yMTIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMjI6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxcbjIxMjM6XFx0XFx0XFx0XFx0bmVlZHNfcmVzb3VyY2UgPSB0cnVlO1xcbjIxMjQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMjEyNTpcXHRcXHRcXHRjYXNlIEJMS19TVFNfREVWX1JFU09VUkNFOlxcbjIxMjY6XFx0XFx0XFx0XFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xcbjIxMjc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjEyODpcXHRcXHRcXHRkZWZhdWx0OlxcbjIxMjk6XFx0XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xcbjIxMzA6XFx0XFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcbjIxMzE6XFx0XFx0XFx0fVxcbjIxMzI6XFx0XFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xcbjIxMzM6XFx0b3V0OlxcbjIxMzQ6XFx0XFx0LyogSWYgd2UgZGlkbid0IGZsdXNoIHRoZSBlbnRpcmUgbGlzdCwgd2UgY291bGQgaGF2ZSB0b2xkIHRoZSBkcml2ZXJcXG4yMTM1OlxcdFxcdCAqIHRoZXJlIHdhcyBtb3JlIGNvbWluZywgYnV0IHRoYXQgdHVybmVkIG91dCB0byBiZSBhIGxpZS5cXG4yMTM2OlxcdFxcdCAqL1xcbjIxMzc6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpIHx8IHJldCAhPSBCTEtfU1RTX09LKVxcbjIxMzg6XFx0XFx0XFx0YmxrX21xX2NvbW1pdF9ycXMoaGN0eCwgcXVldWVkLCBmYWxzZSk7XFxuMjEzOTpcXHRcXG4yMTQwOlxcdFxcdC8qXFxuMjE0MTpcXHRcXHQgKiBBbnkgaXRlbXMgdGhhdCBuZWVkIHJlcXVldWluZz8gU3R1ZmYgdGhlbSBpbnRvIGhjdHgtXFx1MDAzZWRpc3BhdGNoLFxcbjIxNDI6XFx0XFx0ICogdGhhdCBpcyB3aGVyZSB3ZSB3aWxsIGNvbnRpbnVlIG9uIG5leHQgcXVldWUgcnVuLlxcbjIxNDM6XFx0XFx0ICovXFxuMjE0NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkobGlzdCkpIHtcXG4yMTQ1OlxcdFxcdFxcdGJvb2wgbmVlZHNfcmVzdGFydDtcXG4yMTQ2OlxcdFxcdFxcdC8qIEZvciBub24tc2hhcmVkIHRhZ3MsIHRoZSBSRVNUQVJUIGNoZWNrIHdpbGwgc3VmZmljZSAqL1xcbjIxNDc6XFx0XFx0XFx0Ym9vbCBub190YWcgPSBwcmVwID09IFBSRVBfRElTUEFUQ0hfTk9fVEFHIFxcdTAwMjZcXHUwMDI2XFxuMjE0ODpcXHRcXHRcXHRcXHQoKGhjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfVEFHX1FVRVVFX1NIQVJFRCkgfHxcXG4yMTQ5OlxcdFxcdFxcdFxcdGJsa19tcV9pc19zaGFyZWRfdGFncyhoY3R4LVxcdTAwM2VmbGFncykpO1xcbjIxNTA6XFx0XFxuMjE1MTpcXHRcXHRcXHQvKlxcbjIxNTI6XFx0XFx0XFx0ICogSWYgdGhlIGNhbGxlciBhbGxvY2F0ZWQgYnVkZ2V0cywgZnJlZSB0aGUgYnVkZ2V0cyBvZiB0aGVcXG4yMTUzOlxcdFxcdFxcdCAqIHJlcXVlc3RzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gcGFzc2VkIHRvIHRoZSBibG9jayBkcml2ZXIuXFxuMjE1NDpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMjcwODQ3MTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDU6XFx0XFx0Y21kLVxcdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcXG4xOTQ2OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTk0NzpcXHRcXHRjYXNlIEJMS19TVFNfT0s6XFxuMTk0ODpcXHRcXHRcXHRicmVhaztcXG4xOTQ5OlxcdFxcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcXG4xOTUwOlxcdFxcdFxcdGlmIChzY3NpX2RldmljZV9ibG9ja2VkKHNkZXYpKVxcbjE5NTE6XFx0XFx0XFx0XFx0cmV0ID0gQkxLX1NUU19ERVZfUkVTT1VSQ0U7XFxuMTk1MjpcXHRcXHRcXHRicmVhaztcXG4xOTUzOlxcdFxcdGNhc2UgQkxLX1NUU19BR0FJTjpcXG4xOTU0OlxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0JVU19CVVNZIFxcdTAwM2NcXHUwMDNjIDE2O1xcbjE5NTU6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuMTk1NjpcXHRcXHRcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG4xOTU3OlxcdFxcdFxcdGJyZWFrO1xcbjE5NTg6XFx0XFx0ZGVmYXVsdDpcXG4xOTU5OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpKSlcXG4xOTYwOlxcdFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXFx1MDAzY1xcdTAwM2MgMTY7XFxuMTk2MTpcXHRcXHRcXHRlbHNlXFxuMTk2MjpcXHRcXHRcXHRcXHRjbWQtXFx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xOTYzOlxcdFxcdFxcdC8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi9cXG4xOTY0OlxcdFxcdFxcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xcbjE5NjU6XFx0XFx0XFx0YnJlYWs7XFxuMTk2NjpcXHRcXHR9XFxuMTk2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE5Njg6XFx0fVxcbjE5Njk6XFx0XFxuMTk3MDpcXHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuMTk3MTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuMTk3MjpcXHR7XFxuMTk3MzpcXHRcXHRzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNldC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMTk3NDpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG4xOTc1OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuMTk3NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0Y21kLVxcdTAwM2VzZW5zZV9idWZmZXIgPVxcbjE5Nzk6XFx0XFx0XFx0a21lbV9jYWNoZV9hbGxvY19ub2RlKHNjc2lfc2Vuc2VfY2FjaGUsIEdGUF9LRVJORUwsIG51bWFfbm9kZSk7XFxuMTk4MDpcXHRcXHRpZiAoIWNtZC1cXHUwMDNlc2Vuc2VfYnVmZmVyKVxcbjE5ODE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTk4MjpcXHRcXG4xOTgzOlxcdFxcdGlmIChzY3NpX2hvc3RfZ2V0X3Byb3Qoc2hvc3QpKSB7XFxuMTk4NDpcXHRcXHRcXHRzZyA9ICh2b2lkICopY21kICsgc2l6ZW9mKHN0cnVjdCBzY3NpX2NtbmQpICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMjcxMDM3MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNzMyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyIENsZWFudXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgcHJlY2lzZSByb2xlcyBvZiBgYmxrX21xX2NsZWFudXBfcnFgIGFuZCBgYmxrX21xX2VuZF9yZXF1ZXN0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHBpY2tpbmcgYXBhcnQgdGhlIGNvZGUgb2YgZWFjaCBmdW5jdGlvbiB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgYmxvY2sgbGF5ZXIncyByZXF1ZXN0IGNvbXBsZXRpb24gcGF0aCwgZXNwZWNpYWxseSBnaXZlbiByZWNlbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBhcm91bmQgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBnaXZlbiB0aGF0IGBibGstbXFgJ3MgYXN5bmNocm9ub3VzIGRlc2lnbiBpbmhlcmVudGx5IHJlcXVpcmVzIGNhcmVmdWwgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gQWxzbywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBwcm9wZXJseSBoYW5kbGluZyBhbGwgY29ybmVyIGNhc2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nLCB0aW1lb3V0cywgYW5kIGRldmljZSBmbHVzaGVzPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gcmVxdWVzdCB0eXBlIChlLmcuLCByZWFkLCB3cml0ZSwgZGlzY2FyZCwgZXRjLikgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgcmVzcG9uc2liaWxpdGllcy4gTGV0J3Mgc2VlIGlmIHRoaXMgbGluZXMgdXAgd2l0aCBteSBleHBlY3RhdGlvbnMgb2YgYSBtb2Rlcm4gYmxvY2sgcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjozMS4xOTgzNjUxODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDA4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9jbGVhbnVwX3JxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0yMTI4LVxcdFxcdGRlZmF1bHQ6XFxuYmxvY2svYmxrLW1xLmM6MjEyOTpcXHRcXHRcXHRibGtfbXFfY2xlYW51cF9ycShycSk7XFxuYmxvY2svYmxrLW1xLmMtMjEzMC1cXHRcXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjMxLjI3MTM3ODk1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NzM3NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfY2xlYW51cF9ycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0yMTI4LVxcdFxcdGRlZmF1bHQ6XFxuYmxvY2svYmxrLW1xLmM6MjEyOTpcXHRcXHRcXHRibGtfbXFfY2xlYW51cF9ycShycSk7XFxuYmxvY2svYmxrLW1xLmMtMjEzMC1cXHRcXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXJxLmM9MzY5PXN0YXRpYyBpbnQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1ycS5jLTM5OS1cXHRcXHRcXHRibGtfcnFfdW5wcmVwX2Nsb25lKGNsb25lKTtcXG5kcml2ZXJzL21kL2RtLXJxLmM6NDAwOlxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKGNsb25lKTtcXG5kcml2ZXJzL21kL2RtLXJxLmMtNDAxLVxcdFxcdFxcdHRpby1cXHUwMDNldGktXFx1MDAzZXR5cGUtXFx1MDAzZXJlbGVhc2VfY2xvbmVfcnEoY2xvbmUsIFxcdTAwMjZ0aW8tXFx1MDAzZWluZm8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaD0xMDIwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa19tcV9od19jdHggKnF1ZXVlX2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTAzOC1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oOjEwMzk6c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTEwNDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjozNC4wMzg3NjQyNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY3OTM4NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBibGstbXEgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGJsb2NrIG11bHRpLXF1ZXVlIGNsZWFudXAgZnVuY3Rpb24sIGBibGtfbXFfY2xlYW51cF9ycWAsIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMsIHNvIGxldCdzIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUuIEknbGwgbmF2aWdhdGUgdG8gYGluY2x1ZGUvbGludXgvYmxrLW1xLmhgIOKAkyB0aGF0J3MgdGhlIHVzdWFsIHNwb3QgZm9yIHRoZSBjb3JlIGRlZmluaXRpb25zLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDM5LCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSByZWNhbGwgYGJsa19tcV9jbGVhbnVwX3JxYCBiZWluZyBkZWZpbmVkIG9yIGF0IGxlYXN0IHdoZXJlIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMgd2lsbCBiZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlcXVlc3QgcXVldWUgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYGJsay1tcWAgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQwLjcxODE1NDIzNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGstbXEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM1OlxcdCNkZWZpbmUgaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMDM2OlxcdFxcdGZvciAoKGkpID0gMDsgKGkpIFxcdTAwM2MgKGhjdHgpLVxcdTAwM2Vucl9jdHggXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMTAzNzpcXHRcXHQgICAgICh7IGN0eCA9IChoY3R4KS1cXHUwMDNlY3R4c1soaSldOyAxOyB9KTsgKGkpKyspXFxuMTAzODpcXHRcXG4xMDM5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAocnEtXFx1MDAzZXEtXFx1MDAzZW1xX29wcy1cXHUwMDNlY2xlYW51cF9ycSlcXG4xMDQyOlxcdFxcdFxcdHJxLVxcdTAwM2VxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZWNsZWFudXBfcnEocnEpO1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbjEwNDY6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnFfaXNfc3luYyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0OTpcXHR7XFxuMTA1MDpcXHRcXHRyZXR1cm4gb3BfaXNfc3luYyhycS1cXHUwMDNlY21kX2ZsYWdzKTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTtcXG4xMDU0OlxcdGludCBibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCByZXF1ZXN0ICpycV9zcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQwLjcxODMxMjY2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMyNTM5OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgY2xlYW51cF9ycWAgaW4gdGhlIFNDU0kgY29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgU0NTSSBjb2RlIGFnYWluLCBhbmQgSSdtIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IHRoZSByb2xlIG9mIGBjbGVhbnVwX3JxYC4gVGhlIG5hbWUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIHJlcXVlc3QgY2xlYW51cCBmdW5jdGlvbiwgd2hpY2gsIGluIHRoZSBTQ1NJIHdvcmxkLCBjb3VsZCBiZSBjcnVjaWFsIGZvciBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgbWFuYWdlbWVudCwgb3IgZW5zdXJpbmcgSS9PIGNvbXBsZXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBgY2xlYW51cF9ycWAgaXMgZG9pbmcgKndpdGhpbiogdGhlIFNDU0kgcmVxdWVzdCBjb250ZXh0LiBJcyBpdCBjYWxsZWQgb24gZXZlcnkgcmVxdWVzdCwgb25seSBvbiBlcnJvciBjb25kaXRpb25zLCBvciBkdXJpbmcgc3BlY2lmaWMgcGhhc2VzIG9mIHRoZSByZXF1ZXN0IGxpZmVjeWNsZT8gV2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgZG9lcyBpdCBjbGVhbiB1cD8gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB0aGVuIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIFNDU0kgc3RhY2sgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NDIuNjUwODU1MzUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUzMTA1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY2xlYW51cF9ycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjo0NS4zMDM5Njk0NDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczODY4MDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc2NzaV9jbGVhbnVwX3JxKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgYHNjc2lfY2xlYW51cF9ycWAgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFNDU0kgcmVxdWVzdCBjbGVhbnVwIHdvcmtzIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgcmVxdWVzdCBsaWZlY3ljbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDsgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byB0cnVseSBncmFzcGluZyBob3cgU0NTSSBjb21tYW5kcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJ2xsIHNlZSBob3cgZXJyb3Igc3RhdHVzZXMgYXJlIHNldCwgcmVzb3VyY2VzIGxpa2UgYnVmZmVycyBvciBETUEgbWFwcGluZ3MgYXJlIHJlbGVhc2VkIGFuZCBob3cgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcyBhcmUgcHV0IGJhY2sgaW4gYSBnb29kIHN0YXRlIGZvciB0aGUgbmV4dCByZXF1ZXN0LiBUaGlzJ2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdG8gdHJhY2sgZG93biBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBJL08gcGF0aC4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjo0OC4wNDI2NTMxMDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUxNTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2NsZWFudXBfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjgzPUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjg4LSAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyODk6c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjkwLXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODMtXFx0LmV4aXRfcmVxdWVzdFxcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA4NDpcXHQuY2xlYW51cF9ycVxcdD0gc2NzaV9jbGVhbnVwX3JxLFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODUtXFx0LmJ1c3lcXHRcXHQ9IHNjc2lfbXFfbGxkX2J1c3ksXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTItXFx0LmV4aXRfcmVxdWVzdFxcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjExMzpcXHQuY2xlYW51cF9ycVxcdD0gc2NzaV9jbGVhbnVwX3JxLFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTQtXFx0LmJ1c3lcXHRcXHQ9IHNjc2lfbXFfbGxkX2J1c3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQ4LjE2MzE3MzU5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzQyMjI3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgU0NTSSBSZXF1ZXN0IENsZWFudXAgaW4gYHNjc2lfbGliLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBTQ1NJIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0IGNsZWFudXAgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGFuZCB6ZXJvIGluIG9uIGBzY3NpX2NsZWFudXBfcnFgIGFyb3VuZCBsaW5lIDEyODkuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBjb21wbGV0aW9uIGFuZCByZXNvdXJjZSByZWxlYXNlIG9mIGEgU0NTSSByZXF1ZXN0IGlzIGxvY2F0ZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgaG93IHRoZSByZXF1ZXN0IGlzIHVsdGltYXRlbHkgZnJlZWQgb3IgcmVjeWNsZWQsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGxpa2UgdGhlIHRyYW5zcG9ydCBsYXllciBvciB0aGUgZGV2aWNlIGRyaXZlci4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NTIuMjM3Mzk5NDQ3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjg1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjg1OlxcdC8qXFxuMTI4NjpcXHQgKiBPbmx5IGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzbid0IGNvbXBsZXRlZCBieSBTQ1NJLCBhbmQgbm90IGZyZWVkIGJ5XFxuMTI4NzpcXHQgKiBTQ1NJXFxuMTI4ODpcXHQgKi9cXG4xMjg5OlxcdHN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTI5MDpcXHR7XFxuMTI5MTpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG4xMjkyOlxcdFxcbjEyOTM6XFx0XFx0Y21kLVxcdTAwM2VmbGFncyA9IDA7XFxuMTI5NDpcXHRcXG4xMjk1OlxcdFxcdGlmIChycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApIHtcXG4xMjk2OlxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbjEyOTc6XFx0XFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHR9XFxuMTMwMDpcXHRcXG4xMzAxOlxcdC8qIENhbGxlZCBiZWZvcmUgYSByZXF1ZXN0IGlzIHByZXBhcmVkLiBTZWUgYWxzbyBzY3NpX21xX3ByZXBfZm4oKS4gKi9cXG4xMzAyOlxcdHZvaWQgc2NzaV9pbml0X2NvbW1hbmQoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG4xMzAzOlxcdHtcXG4xMzA0OlxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHNjc2lfY21kX3RvX3JxKGNtZCk7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdGlmICghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHJxKSBcXHUwMDI2XFx1MDAyNiAhKGNtZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ01EX0lOSVRJQUxJWkVEKSkge1xcbjEzMDc6XFx0XFx0XFx0Y21kLVxcdTAwM2VmbGFncyB8PSBTQ01EX0lOSVRJQUxJWkVEO1xcbjEzMDg6XFx0XFx0XFx0c2NzaV9pbml0aWFsaXplX3JxKHJxKTtcXG4xMzA5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NTIuMjM3NzUzMjQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTIyNzUwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNjc2lfbXFfdW5pbml0X2NtZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBzY3NpX21xX3VuaW5pdF9jbWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSByZXNwb25zaWJsZSBmb3Igd2l0aGluIHRoZSBTQ1NJIG1pZGxheWVyJ3MgbWVzc2FnZS1xdWV1ZWQgY29tbWFuZCBoYW5kbGluZy4gSSBrbm93IHRoZSBiYXNpYyBwcmluY2lwbGVzLCBvZiBjb3Vyc2Ug4oCTIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBkZS1hbGxvY2F0aW9uIG9yIGNsZWFudXAgb2YgYSBjb21tYW5kIHdoZW4gaXQncyBubyBsb25nZXIgbmVlZGVkLCBtYXliZSBhZnRlciBjb21wbGV0aW9uIG9yIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQnV0IEkgd2FudCB0aGUgc3BlY2lmaWNzLiBJcyBpdCBqdXN0IHRoZSBjb21tYW5kIHN0cnVjdCBpdHNlbGYsIG9yIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhc3NvY2lhdGVkIHJlc291cmNlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzLCBzZW5zZSBkYXRhLCBvciBldmVuIHRoZSBtZXNzYWdlIHF1ZXVlIGl0c2VsZj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgaGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyB2aXRhbCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgdG91Y2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjU4LjMzMDAzMjEyM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MDk4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjc2lfbXFfdW5pbml0X2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoc2NzaV9zZW5zZV9jYWNoZV9tdXRleCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNTktXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjEtXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjAtXFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTIxOlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyMi1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NjI2PUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZnJlZV9zZ3RhYmxlcyk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI3LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02OTUtXFx0ICovXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6Njk2OlxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTEyODk9c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTUtXFx0aWYgKHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUCkge1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyOTY6XFx0XFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5Ny1cXHRcXHRycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNj0gflJRRl9ET05UUFJFUDtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE1Njc9c3RhdGljIHZvaWQgc2NzaV9jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xNTc0LVxcdFxcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxNTc1OlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzYtXFx0XFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVxcdTAwM2VyZXN1bHQpKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTk1NS1cXHRcXHRpZiAocmVxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUClcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTU2OlxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjU4LjQ2OTEzNzUwNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwNjk1MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIHdoYXQgSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgaW5jb21wbGV0ZSBjb250ZXh0IHlvdSBwcm92aWRlZC4gSSdtIGdvaW5nIHRvIGZpbGwgaW4gdGhlIGJsYW5rcyBhc3N1bWluZyB0aGlzIHJlbGF0ZXMgdG8gc3RvcmFnZSBkcml2ZXJzLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZS5cblxuKipEaXNzZWN0aW5nIHRoZSBgc2NzaV9tcV91bmluaXRfY21kYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2NzaV9tcV91bmluaXRfY21kYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggU0NTSSAoU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSksIGxpa2VseSBpbiBhIG1vZGVybiBtdWx0aS1xdWV1ZSBlbnZpcm9ubWVudCAoZ2l2ZW4gdGhlIFwibXFcIiBpbiB0aGUgbmFtZSkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHByb2Nlc3MgYmVoaW5kIHRoaXM/XCIgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEknbSBpbmZlcnJpbmcgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgY2xlYW51cCBvciB1bmluaXRpYWxpemF0aW9uIG9mIGEgY29tbWFuZCBzdHJ1Y3R1cmUgb3IgY29udGV4dCByZWxhdGVkIHRvIFNDU0kgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyByZXNvdXJjZXMuXG5cbkknbSB0aGlua2luZzogaXMgdGhpcyBjYWxsZWQgd2hlbiBhIGNvbW1hbmQgY29tcGxldGVzLCBpcyBjYW5jZWxsZWQsIG9yIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZD8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyB0aGUgbGF0dGVyLiBJZiBpdCdzIGEgY29tbWFuZCBjbGVhbnVwIGZ1bmN0aW9uLCBkb2VzIGl0IHJldHVybiByZXNvdXJjZXMgdG8gdGhlIGZyZWUgcG9vbCwgbnVsbGlmeSBwb2ludGVycywgb3IgcGVyZm9ybSBvdGhlciBjcml0aWNhbCBzdGVwcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvciBkcml2ZXIgZXJyb3JzP1xuXG5JIHdhbnQgdG8ga25vdyB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBXaGF0IGlzIGBzY3NpX21xX3VuaW5pdF9jbWRgIHJlY2VpdmluZyBhcyBhcmd1bWVudHM/IElzIGl0IGFuIGluaXRpYWxpemVkIGNvbW1hbmQgc3RydWN0dXJlPyBBIHBvaW50ZXIgdG8gYSBkZXZpY2U/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGRpY3RhdGUgaG93IEkgaW50ZXJwcmV0IHRoZSBmdW5jdGlvbidzIGFjdGlvbnMuIFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIGNvbW1hbmQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkPyBJcyBpdCBzYWZlIHRvIHJlbGVhc2UgbG9ja3Mgb3IgZnJlZSBtZW1vcnk/XG5cbkknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHF1ZXVlLWJhc2VkIGRyaXZlcnMgYXJlIHdvcmtpbmcuIEtub3dpbmcgaXQncyB1bmluaXQgZnVuY3Rpb24gYW5kIGFzc29jaWF0ZWQgbG9ja2luZyBtZWNoYW5pc21zIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MDkuMDc2MDkwNDkyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjU6XFx0fVxcbiA2MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG4gNjI5OlxcdHtcXG4gNjMwOlxcdFxcdHNjc2lfZnJlZV9zZ3RhYmxlcyhjbWQpO1xcbiA2MzE6XFx0XFx0c2NzaV91bmluaXRfY21kKGNtZCk7XFxuIDYzMjpcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdHN0YXRpYyB2b2lkIHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4gNjM1OlxcdHtcXG4gNjM2OlxcdFxcdGlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2Rldi1cXHUwMDNlaG9zdCkpXFxuIDYzNzpcXHRcXHRcXHRyZXR1cm47XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGlmIChzY3NpX3RhcmdldChzZGV2KS1cXHUwMDNlc2luZ2xlX2x1biB8fFxcbiA2NDA6XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZzZGV2LVxcdTAwM2Vob3N0LVxcdTAwM2VzdGFydmVkX2xpc3QpKSB7XFxuIDY0MTpcXHRcXHRcXHRrYmxvY2tkX3NjaGVkdWxlX3dvcmsoXFx1MDAyNnNkZXYtXFx1MDAzZXJlcXVldWVfd29yayk7XFxuIDY0MjpcXHRcXHR9IGVsc2Uge1xcbiA2NDM6XFx0XFx0XFx0LypcXG4gNjQ0OlxcdFxcdFxcdCAqIHNtcF9tYigpIHByZXNlbnQgaW4gc2JpdG1hcF9xdWV1ZV9jbGVhcigpIG9yIGltcGxpZWQgaW5cXG4gNjQ1OlxcdFxcdFxcdCAqIC5lbmRfaW8gaXMgZm9yIG9yZGVyaW5nIHdyaXRpbmcgLmRldmljZV9idXN5IGluXFxuIDY0NjpcXHRcXHRcXHQgKiBzY3NpX2RldmljZV91bmJ1c3koKSBhbmQgcmVhZGluZyBzZGV2LVxcdTAwM2VyZXN0YXJ0cy5cXG4gNjQ3OlxcdFxcdFxcdCAqL1xcbiA2NDg6XFx0XFx0XFx0aW50IG9sZCA9IGF0b21pY19yZWFkKFxcdTAwMjZzZGV2LVxcdTAwM2VyZXN0YXJ0cyk7XFxuIDY0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MDkuMDc2MzUyNjgyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1NjE1NTczMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgc2hpZnQgaW4gU0NTSSByZXF1ZXN0IGNsZWFudXAuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGNsZWFudXAgY2FsbCBmcm9tIHRoZSBkZWZhdWx0IGVycm9yIHBhdGggaW4gYHNjc2lfcXVldWVfcnFgIHRvIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAuIFRoZSBrZXkgaXMgc3RhbmRhcmRpemluZyB0aGUgY2xlYW51cCBwcm9jZXNzIGFjcm9zcyB0aGUgYmxrLW1xIHN1YnN5c3RlbS4gQmVmb3JlLCBpZiBgcXVldWVfcnFgIGZhaWxlZCwgYHNjc2lfbXFfdW5pbml0X2NtZChjbWQpYCB3YXMgY2FsbGVkIGltbWVkaWF0ZWx5IHdpdGhpbiBgc2NzaV9xdWV1ZV9ycWAuIE5vdywgdGhlIHN5c3RlbSByZWxpZXMgb24gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCBhbmQgYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgdG8gdHJpZ2dlciB0aGUgY2xlYW51cCBhZnRlciB0aGUgaW5pdGlhbCByZXF1ZXN0IGRpc3BhdGNoLiBTcGVjaWZpY2FsbHksIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIHdoZW4gdGhlIHJldHVybiB2YWx1ZSAoYHJldGApIGlzbid0IGBCTEtfU1RTX09LYCwgYEJMS19TVFNfUkVTT1VSQ0VgLCBvciBgQkxLX1NUU19ERVZfUkVTT1VSQ0VgLCBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpcyBjYWxsZWQuIElmIHRoZSBkcml2ZXIgZGlkbid0IGNsZWFuIHVwIGl0cyBvd24gcnEsIG9yIGlmIGl0IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBjbGVhbnVwIGNhbGxiYWNrLCBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBjYWxscyBgcnEtXHUwMDNlcS1cdTAwM2VtcV9vcHMtXHUwMDNlY2xlYW51cF9ycShycSlgLiBGb3IgU0NTSSwgYHNjc2lfY2xlYW51cF9ycWAgdGhlbiBjYWxscyBgc2NzaV9tcV91bmluaXRfY21kKGNtZClgIGlmIHRoZSBgUlFGX0RPTlRQUkVQYCBmbGFnIGlzIHNldC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIE15IHJlYXNvbmluZyByZWxpZXMgb24gdGhlc2UgY3JpdGVyaWE6XG5cbjEuICAqKlVzZXItc3BhY2UgZGF0YSBleHBvc3VyZToqKiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBOby5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGRlY2lzaW9uLW1ha2luZz8gTm8sIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGNoZWNrcyBgaWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpYCBiZWZvcmUgY2FsbGluZy5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzOioqIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIGFjY2Vzc2VkIGxhdGVyPyBObywgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIHRoZSBmcmVlaW5nIG9mIHJlc291cmNlcyBsaWtlIHNnIHRhYmxlcyBkdXJpbmcgcmVxdWVzdCBjb21wbGV0aW9uIG9yIGZhaWx1cmUuXG40LiAgKipCdWZmZXIgYWNjZXNzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggdXNlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byBwZXJmb3JtIGJvdW5kcyBjaGVja3Mgb3Igb3RoZXIgbG9naWMgb24gZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgSSBkb24ndCBzZWUgYW55IHJpc2tzIGhlcmUgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhpcyBwYXRjaCBpcyBhYm91dCByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjbGVhbmluZyB1cCByZXNvdXJjZXMsIG5vdCBsZWFraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgY2xlYW51cCBnZXRzIGNhbGxlZCB0d2ljZSBvciBhdCB0aGUgd3JvbmcgdGltZSksIHJlc291cmNlL21lbW9yeSBsZWFrcyAoaWYgdGhlIGNsZWFudXAgZ2V0cyBtaXNzZWQpLCBvciBnZW5lcmFsIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZGVidWdnaW5nIHRvb2xzL21lY2hhbmlzbXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgaGVyZSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHJlcXVlc3QgY2xlYW51cCBzdGFuZGFyZGl6YXRpb24gYW5kIHRoZSByZWxldmFudCBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBLQVNBTi5cblxuVGhlIHJlYXNvbmluZyByZXF1aXJlbWVudHMgYXJlOlxuKiAgIGBOZWVkc0tNU0FOYDogZmFsc2VcbiogICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggY2VudHJhbGl6ZXMgcmVxdWVzdCBjbGVhbnVwIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIGZyb20gYHNjc2lfcXVldWVfcnFgLCBpdCBjb3VsZCBpbnRyb2R1Y2UgcmVxdWVzdCBsaWZlY3ljbGUgaXNzdWVzLCBkb3VibGUgY2xlYW51cC9mcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlc291cmNlIGxlYWtzLCBidXQgdGhlc2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRvcnM7IGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDQsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MTYuNjM3OTEzMTVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVxdWVzdCBkaXNwYXRjaCBlcnJvciBoYW5kbGluZyBpbiBgYmxrLW1xYCBieSBhZGRpbmcgYSBjYWxsIHRvIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCgpYCB3aGVuIGBxdWV1ZV9ycSgpYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgcmVtb3ZpbmcgdGhlIG1hbnVhbCBpbnZvY2F0aW9uIG9mIGBzY3NpX21xX3VuaW5pdF9jbWQoKWAgZnJvbSBgc2NzaV9xdWV1ZV9ycSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNsZWFudXAgYW5kIGxpZmVjeWNsZSBwYXRoIG9mIGBzdHJ1Y3QgcmVxdWVzdGAgYW5kIGRyaXZlciBQRFVzIHVwb24gcXVldWUgZmFpbHVyZS4gUG90ZW50aWFsIGlzc3VlcyBpbiB0aGlzIGFyZWEgcmVsYXRlIHRvIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRvdWJsZS1mcmVlaW5nIG9yIHVzZS1hZnRlci1mcmVlIG9mIHNjYXR0ZXJsaXN0cy9jb21tYW5kIGJ1ZmZlcnMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrr9xg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:59:34 +0000 UTC FinishedAt: 2026-09-11 08:23:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "SCSI" ], "series_id": "14505dd3-c2d7-4db9-b047-755b4b684877" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_dispatch_rq_list", "scsi_queue_rq", "scsi_cleanup_rq", "scsi_mq_uninit_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCYjMzQ7LAogICAgJiMzNDtzY3NpX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfY2xlYW51cF9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZXF1ZXN0IGRpc3BhdGNoIGVycm9yIGhhbmRsaW5nIGluIGBibGstbXFgIGJ5IGFkZGluZyBhIGNhbGwgdG8gYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KClgIHdoZW4gYHF1ZXVlX3JxKClgIHJldHVybnMgYW4gZXJyb3IsIGFuZCByZW1vdmluZyB0aGUgbWFudWFsIGludm9jYXRpb24gb2YgYHNjc2lfbXFfdW5pbml0X2NtZCgpYCBmcm9tIGBzY3NpX3F1ZXVlX3JxKClgLlxuXG5UaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNsZWFudXAgYW5kIGxpZmVjeWNsZSBwYXRoIG9mIGBzdHJ1Y3QgcmVxdWVzdGAgYW5kIGRyaXZlciBQRFVzIHVwb24gcXVldWUgZmFpbHVyZS4gUG90ZW50aWFsIGlzc3VlcyBpbiB0aGlzIGFyZWEgcmVsYXRlIHRvIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRvdWJsZS1mcmVlaW5nIG9yIHVzZS1hZnRlci1mcmVlIG9mIHNjYXR0ZXJsaXN0cy9jb21tYW5kIGJ1ZmZlcnMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTFiY2I4MjFlOWM2ZWUyMTMzZDA1Y2MyMTM4Y2E3NTkyYTMwNzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MjE6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuY1xuQEAgLTIxMjYsNiAmIzQzOzIxMjYsNyBAQCBib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHRcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuIFx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbiBcdFx0fVxuIFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbkBAIC0xOTYwLDEzICYjNDM7MTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRlbHNlXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcdTAwM2NcdTAwM2MgMTY7XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW5cbi1cdFx0ICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmRcbi1cdFx0ICogYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4tXHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4mIzQzO1x0XHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXG4gXHRcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QmIzM0OywKICAgICYjMzQ7c2NzaV9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX2NsZWFudXBfcnEmIzM0OywKICAgICYjMzQ7c2NzaV9tcV91bmluaXRfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTFiY2I4MjFlOWM2ZWUyMTMzZDA1Y2MyMTM4Y2E3NTkyYTMwNzA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6MjE6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jCmluZGV4IGEyNmExMWM3M2VlM2UuLmViM2E0ODEyMTFkMGIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS5jCkBAIC0yMTI2LDYgJiM0MzsyMTI2LDcgQEAgYm9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCWJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTsKIAkJCWdvdG8gb3V0OwogCQlkZWZhdWx0OgomIzQzOwkJCWJsa19tcV9jbGVhbnVwX3JxKHJxKTsKIAkJCWJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTsKIAkJfQogCX0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggYWYyN2ZkM2RmOGQ0Ni4uMWVhNjViNWViMjVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTE5NjAsMTMgJiM0MzsxOTYwLDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQkJY21kLSZndDtyZXN1bHQgPSBESURfTk9fQ09OTkVDVCAmbHQ7Jmx0OyAxNjsKIAkJZWxzZQogCQkJY21kLSZndDtyZXN1bHQgPSBESURfRVJST1IgJmx0OyZsdDsgMTY7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW4KLQkJICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmQKLQkJICogYWdhaW4uCi0JCSAqLwotCQlpZiAocmVxLSZndDtycV9mbGFncyAmYW1wOyBSUUZfRE9OVFBSRVApCi0JCQlzY3NpX21xX3VuaW5pdF9jbWQoY21kKTsKJiM0MzsJCS8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi8KIAkJc2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NgoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBJIHNlZSBjaGFuZ2VzIGluIGBibG9jay9ibGstbXEuY2Agd2l0aGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgc2NzaV9xdWV1ZV9ycWAgZnVuY3Rpb24uIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KCkluIGBibGstbXEuY2AsIHRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgY2FsbGluZyBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUgY29tbWVudCBpbiBgc2NzaV9saWIuY2Agc3VnZ2VzdHMgd2Ugd2VyZSBwcmV2aW91c2x5IGNhbGxpbmcgc29tZSBjbGVhbiB1cCBvbiBlcnJvciB3aGVuIGEgc3BlY2lmaWMgZmxhZyB3YXMgc2V0IG9uIHRoZSByZXF1ZXN0LiBOb3csIHRoYXQmIzM5O3MgcmVtb3ZlZCBhbmQgYSBjb21tZW50IHNheXMgYmxrLW1xIHdpbGwgaGFuZGxlIGNsZWFudXAuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IGludm9sdmVzIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IGZyZWVpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIG9yIGFzc29jaWF0ZWQgZGF0YSB3aGVuIHJlcXVlc3RzIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IuIFRoZSBjb21tZW50ZWQtb3V0IGNvZGUgaW4gYHNjc2lfbGliLmNgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGlmIHRoZSByZXF1ZXN0IGZhaWxzIChzcGVjaWZpY2FsbHksIGBESURfTk9fQ09OTkVDVGAgb3IgYERJRF9FUlJPUmApLiBJdCBhcHBlYXJzIHRoaXMgcmVzcG9uc2liaWxpdHkgaXMgYmVpbmcgc2hpZnRlZCBpbnRvIHRoZSBibG9jayBsYXllciwgd2hpY2ggd291bGQgbWVhbiBgYmxrX21xX2NsZWFudXBfcnEoKWAgaXMgcHJvYmFibHkgdGhlIG1hZ2ljIGZ1bmN0aW9uLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYGJsa19tcV9jbGVhbnVwX3JxKClgIGZ1bmN0aW9uIGRvZXMgYW5kIHdoYXQgc3BlY2lmaWMgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdW5jdGlvbiBpbiB0aGUgYGJsay1tcS5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHJlcXVlc3Qgd2l0aGluIHRoZSBibG9jayBsYXllci4gU2luY2UgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIGEgU0NTSSBkcml2ZXIsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIHdoZW4gYSBTQ1NJIGNvbW1hbmQgZXJyb3JzIG91dC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjbGVhbnVwIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciByZXNvdXJjZSBsZWFrcy4gVWx0aW1hdGVseSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocywgYW5kIHRoYXQgdGhlIHJlc291cmNlIGNsZWFudXAgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEwMDpcdFx0ICovXG4yMTAxOlx0XHRxdWV1ZWQgPSAwO1xuMjEwMjpcdFx0ZG8ge1xuMjEwMzpcdFx0XHRzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgYmQ7XG4yMTA0Olx0XG4yMTA1Olx0XHRcdHJxID0gbGlzdF9maXJzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0V0FSTl9PTl9PTkNFKGhjdHggIT0gcnEtXHUwMDNlbXFfaGN0eCk7XG4yMTA4Olx0XHRcdHByZXAgPSBibGtfbXFfcHJlcF9kaXNwYXRjaF9ycShycSwgZ2V0X2J1ZGdldCk7XG4yMTA5Olx0XHRcdGlmIChwcmVwICE9IFBSRVBfRElTUEFUQ0hfT0spXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XG4yMTEyOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbjIxMTM6XHRcbjIxMTQ6XHRcdFx0YmQucnEgPSBycTtcbjIxMTU6XHRcdFx0YmQubGFzdCA9IGxpc3RfZW1wdHkobGlzdCk7XG4yMTE2Olx0XG4yMTE3Olx0XHRcdHJldCA9IHEtXHUwMDNlbXFfb3BzLVx1MDAzZXF1ZXVlX3JxKGhjdHgsIFx1MDAyNmJkKTtcbjIxMTg6XHRcdFx0c3dpdGNoIChyZXQpIHtcbjIxMTk6XHRcdFx0Y2FzZSBCTEtfU1RTX09LOlxuMjEyMDpcdFx0XHRcdHF1ZXVlZCYjNDM7JiM0Mzs7XG4yMTIxOlx0XHRcdFx0YnJlYWs7XG4yMTIyOlx0XHRcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcbjIxMjM6XHRcdFx0XHRuZWVkc19yZXNvdXJjZSA9IHRydWU7XG4yMTI0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4yMTI1Olx0XHRcdGNhc2UgQkxLX1NUU19ERVZfUkVTT1VSQ0U6XG4yMTI2Olx0XHRcdFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xuMjEyNzpcdFx0XHRcdGdvdG8gb3V0O1xuMjEyODpcdFx0XHRkZWZhdWx0OlxuMjEyOTpcdFx0XHRcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcbjIxMzA6XHRcdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4yMTMxOlx0XHRcdH1cbjIxMzI6XHRcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcbjIxMzM6XHRvdXQ6XG4yMTM0Olx0XHQvKiBJZiB3ZSBkaWRuJiMzOTt0IGZsdXNoIHRoZSBlbnRpcmUgbGlzdCwgd2UgY291bGQgaGF2ZSB0b2xkIHRoZSBkcml2ZXJcbjIxMzU6XHRcdCAqIHRoZXJlIHdhcyBtb3JlIGNvbWluZywgYnV0IHRoYXQgdHVybmVkIG91dCB0byBiZSBhIGxpZS5cbjIxMzY6XHRcdCAqL1xuMjEzNzpcdFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpIHx8IHJldCAhPSBCTEtfU1RTX09LKVxuMjEzODpcdFx0XHRibGtfbXFfY29tbWl0X3JxcyhoY3R4LCBxdWV1ZWQsIGZhbHNlKTtcbjIxMzk6XHRcbjIxNDA6XHRcdC8qXG4yMTQxOlx0XHQgKiBBbnkgaXRlbXMgdGhhdCBuZWVkIHJlcXVldWluZz8gU3R1ZmYgdGhlbSBpbnRvIGhjdHgtXHUwMDNlZGlzcGF0Y2gsXG4yMTQyOlx0XHQgKiB0aGF0IGlzIHdoZXJlIHdlIHdpbGwgY29udGludWUgb24gbmV4dCBxdWV1ZSBydW4uXG4yMTQzOlx0XHQgKi9cbjIxNDQ6XHRcdGlmICghbGlzdF9lbXB0eShsaXN0KSkge1xuMjE0NTpcdFx0XHRib29sIG5lZWRzX3Jlc3RhcnQ7XG4yMTQ2Olx0XHRcdC8qIEZvciBub24tc2hhcmVkIHRhZ3MsIHRoZSBSRVNUQVJUIGNoZWNrIHdpbGwgc3VmZmljZSAqL1xuMjE0NzpcdFx0XHRib29sIG5vX3RhZyA9IHByZXAgPT0gUFJFUF9ESVNQQVRDSF9OT19UQUcgXHUwMDI2XHUwMDI2XG4yMTQ4Olx0XHRcdFx0KChoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfTVFfRl9UQUdfUVVFVUVfU0hBUkVEKSB8fFxuMjE0OTpcdFx0XHRcdGJsa19tcV9pc19zaGFyZWRfdGFncyhoY3R4LVx1MDAzZWZsYWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk0MDpcdG91dF9kZWNfdGFyZ2V0X2J1c3k6XG4xOTQxOlx0XHRpZiAoc2NzaV90YXJnZXQoc2RldiktXHUwMDNlY2FuX3F1ZXVlIFx1MDAzZSAwKVxuMTk0MjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNnNjc2lfdGFyZ2V0KHNkZXYpLVx1MDAzZXRhcmdldF9idXN5KTtcbjE5NDM6XHRvdXRfcHV0X2J1ZGdldDpcbjE5NDQ6XHRcdHNjc2lfbXFfcHV0X2J1ZGdldChxLCBjbWQtXHUwMDNlYnVkZ2V0X3Rva2VuKTtcbjE5NDU6XHRcdGNtZC1cdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcbjE5NDY6XHRcdHN3aXRjaCAocmV0KSB7XG4xOTQ3Olx0XHRjYXNlIEJMS19TVFNfT0s6XG4xOTQ4Olx0XHRcdGJyZWFrO1xuMTk0OTpcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMTk1MDpcdFx0XHRpZiAoc2NzaV9kZXZpY2VfYmxvY2tlZChzZGV2KSlcbjE5NTE6XHRcdFx0XHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcbjE5NTI6XHRcdFx0YnJlYWs7XG4xOTUzOlx0XHRjYXNlIEJMS19TVFNfQUdBSU46XG4xOTU0Olx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXHUwMDNjXHUwMDNjIDE2O1xuMTk1NTpcdFx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4xOTU2Olx0XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4xOTU3Olx0XHRcdGJyZWFrO1xuMTk1ODpcdFx0ZGVmYXVsdDpcbjE5NTk6XHRcdFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxuMTk2MDpcdFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcdTAwM2NcdTAwM2MgMTY7XG4xOTYxOlx0XHRcdGVsc2VcbjE5NjI6XHRcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFx1MDAzY1x1MDAzYyAxNjtcbjE5NjM6XHRcdFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xuMTk2NDpcdFx0XHRzY3NpX3J1bl9xdWV1ZV9hc3luYyhzZGV2KTtcbjE5NjU6XHRcdFx0YnJlYWs7XG4xOTY2Olx0XHR9XG4xOTY3Olx0XHRyZXR1cm4gcmV0O1xuMTk2ODpcdH1cbjE5Njk6XHRcbjE5NzA6XHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4xOTcxOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXG4xOTcyOlx0e1xuMTk3MzpcdFx0c3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZXQtXHUwMDNlZHJpdmVyX2RhdGE7XG4xOTc0Olx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjE5NzU6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4xOTc2Olx0XHRpbnQgcmV0ID0gMDtcbjE5Nzc6XHRcbjE5Nzg6XHRcdGNtZC1cdTAwM2VzZW5zZV9idWZmZXIgPVxuMTk3OTpcdFx0XHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgYmxrX21xX2NsZWFudXBfcnFgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGJsa19tcV9jbGVhbnVwX3JxYC4gTXkgZmlyc3QgbW92ZT8gRGVmaW5pdGVseSBhIGBncmVwYCBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzLWV5ZSB2aWV3IG9mIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0OyB3aG8gY2FsbHMgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXM/IFRoYXQgZ3JlcCB3aWxsIGJlIG15IGluaXRpYWwgbWFwIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUmIzM5O3MgY2FsbCBncmFwaC4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyBhcmUgbWFuYWdlYWJsZSBhbmQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgaW1wb3J0YW50IHBhcnRzLiBUaGVuLCBJIGNhbiBzdGFydCBmb3JtaW5nIG15IGh5cG90aGVzZXMgYmFzZWQgb24gdGhvc2UgbG9jYXRpb25zLiBUaGUgb2JqZWN0aXZlLCBvZiBjb3Vyc2UsIGlzIHRvIGdyYXNwIHRoZSByb2xlIGFuZCBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfY2xlYW51cF9ycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxuYmxvY2svYmxrLW1xLmMtMjEyOC1cdFx0ZGVmYXVsdDpcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuYmxvY2svYmxrLW1xLmMtMjEzMC1cdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4tLVxuZHJpdmVycy9tZC9kbS1ycS5jPTM2OT1zdGF0aWMgaW50IG1hcF9yZXF1ZXN0KHN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbylcbi0tXG5kcml2ZXJzL21kL2RtLXJxLmMtMzk5LVx0XHRcdGJsa19ycV91bnByZXBfY2xvbmUoY2xvbmUpO1xuZHJpdmVycy9tZC9kbS1ycS5jOjQwMDpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShjbG9uZSk7XG5kcml2ZXJzL21kL2RtLXJxLmMtNDAxLVx0XHRcdHRpby1cdTAwM2V0aS1cdTAwM2V0eXBlLVx1MDAzZXJlbGVhc2VfY2xvbmVfcnEoY2xvbmUsIFx1MDAyNnRpby1cdTAwM2VpbmZvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTEwMjA9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTAzOC1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6MTAzOTpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXImIzM5O3MgTVEgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5jbHVkZS9saW51eC9ibGstbXEuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxMDM5LiBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIGludGVyZXN0aW5nIHN0dWZmIGlzIGhhcHBlbmluZyB3aXRoIHRoZSBtdWx0aS1xdWV1ZSBibG9jayBsYXllci4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSBzb21lIGtleSBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgcXVldWUgbWFuYWdlbWVudCBvciBJL08gc3VibWlzc2lvbiBwYXRocy4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSwgdGhhdCBhcmVhIHNob3VsZCBob2xkIGVpdGhlciB0aGUgZW5xdWV1ZS9kZXF1ZXVlIGxvZ2ljLCBvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0dXJlcyB0aGF0IHJlcHJlc2VudCB0aGUgcXVldWVzIGFuZCB0aGUgcmVxdWVzdHMgd2l0aGluIHRoZW0uIEl0IGNvdWxkIGFsc28gcG9pbnQgdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBjb21tYW5kIG1lcmdpbmcsIG9yIGhhbmRsaW5nIG9mIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBsaW5lIDEwMzkgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsay1tcS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0I2RlZmluZSBoY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpXHRcdFx0XHRcdFxcXG4xMDM2Olx0XHRmb3IgKChpKSA9IDA7IChpKSBcdTAwM2MgKGhjdHgpLVx1MDAzZW5yX2N0eCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4xMDM3Olx0XHQgICAgICh7IGN0eCA9IChoY3R4KS1cdTAwM2VjdHhzWyhpKV07IDE7IH0pOyAoaSkmIzQzOyYjNDM7KVxuMTAzODpcdFxuMTAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4xMDQwOlx0e1xuMTA0MTpcdFx0aWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpXG4xMDQyOlx0XHRcdHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpO1xuMTA0MzpcdH1cbjEwNDQ6XHRcbjEwNDU6XHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuMTA0NjpcdFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4xMDQ3Olx0XG4xMDQ4Olx0c3RhdGljIGlubGluZSBib29sIHJxX2lzX3N5bmMoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHJldHVybiBvcF9pc19zeW5jKHJxLVx1MDAzZWNtZF9mbGFncyk7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHZvaWQgYmxrX3JxX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7XG4xMDU0Olx0aW50IGJsa19ycV9wcmVwX2Nsb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJlcXVlc3QgKnJxX3NyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJsb2NrIExheWVyJiMzOTtzIFJlcXVlc3QgQ2xlYW51cCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBibG9jayByZXF1ZXN0cyBnZXQgY2xlYW5lZCB1cCB3aXRoaW4gdGhlIGJsay1tcSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBibGtfbXFfY2xlYW51cF9ycWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBOb3csIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGxvb2tzIGZhbWlsaWFyOyBpdCYjMzk7cyBjYWxsaW5nIGBycS0mZ3Q7cS0mZ3Q7bXFfb3BzLSZndDtjbGVhbnVwX3JxKHJxKWAuIFRoZSBjcml0aWNhbCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIHRoaXMgY2hhaW4gb2YgZnVuY3Rpb24gY2FsbHMuIFNvLCB0aGUga2VybmVsJiMzOTtzIGxpa2VseSB1c2luZyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW1wbGVtZW50IHNvbWUgZGV2aWNlIHNwZWNpZmljIGNsZWFuIHVwIGZ1bmN0aW9uYWxpdHkuCgpTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNsZWFudXBfcnFgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIHdhbnQgdG8gZm9jdXMgb24gdG8gc3RhcnQgd2l0aCwgSSBuZWVkIHRvIGtub3cgYWxsIHRoZSBkZXZpY2VzIHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0aGlzLiBJIHdpbGwgZmlyZSB1cCB0aGUgc2VhcmNoIHRvb2xzIGFuZCBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY2xlYW51cF9ycWAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNsZWFudXAgbG9naWMgaXMgaGFwcGVuaW5nIGFuZCB3aGljaCBkcml2ZXJzIGFyZSB1c2luZyBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRpZmZlcmVudCBjbGVhbiB1cCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmNsZWFudXBfcnFcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHNfbm9fY29tbWl0ID0ge1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODMtXHQuZXhpdF9yZXF1ZXN0XHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA4NDpcdC5jbGVhbnVwX3JxXHQ9IHNjc2lfY2xlYW51cF9ycSxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODUtXHQuYnVzeVx0XHQ9IHNjc2lfbXFfbGxkX2J1c3ksXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjExMi1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMTEzOlx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjExNC1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNjc2lfY2xlYW51cF9ycWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzY3NpX2NsZWFudXBfcnFgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dCDigJMgd2hhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvbiBjYWxsPyBJcyBpdCBiZWluZyBjYWxsZWQgYWZ0ZXIgYSBoYXJkd2FyZSByZXNldCwgYW4gSS9PIGVycm9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byByZXF1ZXN0IHF1ZXVlIGNsZWFudXAsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCByZXNvdXJjZXMgdGhpcyByb3V0aW5lIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEFyZSB0aGVyZSBzcGlubG9ja3MgaW52b2x2ZWQ/IFdoYXQmIzM5O3MgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYWRhcHRlciYjMzk7cyBETUEgc3RydWN0dXJlcz8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRhZ2dlZCBxdWV1aW5nLCBzZW5zZSBkYXRhLCBhbmQgcG90ZW50aWFsbHkgZXJyb3IgcmV0cmllcy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBwcm9wZXJseSBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgU0NTSSBlcnJvciBjb2RlcyBhbmQgaG93IGl0IGF2b2lkcyBhbnkgZG91YmxlLWZyZWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBTQ1NJIGxheWVyLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdW5jdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaW50ZXJydXB0LXNhZmUuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX2NsZWFudXBfcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTI4Mz1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2FsbG9jX3JlcXVlc3QpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyODgtICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjg5OnN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjkwLXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4My1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMDg0Olx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4NS1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIFNDU0kgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFNDU0kgbGlicmFyeSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgZmlsZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZyBsb2dpYyB3aXRoaW4gaXQsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAxMjg5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBTQ1NJIGludGVyYWN0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3R1ZmYgdGhlcmUgYWJvdXQgZXJyb3IgcmVjb3ZlcnksIGNvbW1hbmQgcmV0cmllcywgb3IgcGVyaGFwcyBldmVuIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIFNDU0kgZGV2aWNlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdHNjc2lfaW5pdGlhbGl6ZV9ycShycSk7XG4xMjgxOlx0XHRyZXR1cm4gcnE7XG4xMjgyOlx0fVxuMTI4MzpcdEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XG4xMjg0Olx0XG4xMjg1Olx0LypcbjEyODY6XHQgKiBPbmx5IGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzbiYjMzk7dCBjb21wbGV0ZWQgYnkgU0NTSSwgYW5kIG5vdCBmcmVlZCBieVxuMTI4NzpcdCAqIFNDU0lcbjEyODg6XHQgKi9cbjEyODk6XHRzdGF0aWMgdm9pZCBzY3NpX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTI5MDpcdHtcbjEyOTE6XHRcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuMTI5MjpcdFxuMTI5MzpcdFx0Y21kLVx1MDAzZWZsYWdzID0gMDtcbjEyOTQ6XHRcbjEyOTU6XHRcdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG4xMjk2Olx0XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuMTI5NzpcdFx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG4xMjk4Olx0XHR9XG4xMjk5Olx0fVxuMTMwMDpcdFxuMTMwMTpcdC8qIENhbGxlZCBiZWZvcmUgYSByZXF1ZXN0IGlzIHByZXBhcmVkLiBTZWUgYWxzbyBzY3NpX21xX3ByZXBfZm4oKS4gKi9cbjEzMDI6XHR2b2lkIHNjc2lfaW5pdF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpXG4xMzAzOlx0e1xuMTMwNDpcdFx0c3RydWN0IHJlcXVlc3QgKnJxID0gc2NzaV9jbWRfdG9fcnEoY21kKTtcbjEzMDU6XHRcbjEzMDY6XHRcdGlmICghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHJxKSBcdTAwMjZcdTAwMjYgIShjbWQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDTURfSU5JVElBTElaRUQpKSB7XG4xMzA3Olx0XHRcdGNtZC1cdTAwM2VmbGFncyB8PSBTQ01EX0lOSVRJQUxJWkVEO1xuMTMwODpcdFx0XHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xuMTMwOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBpbiBibGstbXEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2NzaV9jbGVhbnVwX3JxYCBpcyBub3cgYmVpbmcgY2FsbGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHNvbWUgaW50ZXJlc3RpbmcgZnV6emluZyBvcHBvcnR1bml0aWVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIFNDU0kgY29tbWFuZCBjbGVhbnVwIGlmIGBSUUZfRE9OVFBSRVBgIGlzIHNldCwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIGBxdWV1ZV9ycWAgZmFpbHMuIFByZXZpb3VzbHksIG1hbnVhbCBjbGVhbnVwIHdhcyBkb25lLCBub3cgaXQmIzM5O3MgaGFuZGxlZCB0aHJvdWdoIGEgbW9yZSBnZW5lcmFsaXplZCBgYmxrX21xX2NsZWFudXBfcnFgLiBUaGlzIGNoYW5nZSBhZmZlY3RzIGFsbCBibG9jayBkcml2ZXJzLCBnaXZlbiB0aGlzIGNoYW5nZS4KCkZpcnN0LCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gQWJzb2x1dGVseS4gQmxvY2sgSS9PIGFuZCBTQ1NJIGFyZSBjb3JlLCBjb3JlLCBjb3JlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBibGstbXEsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBibG9jayBJL08gZGlzcGF0Y2gsIGFuZCB0aGUgU0NTSSBzdWJzeXN0ZW0gaXMgdXNlZCBldmVyeXdoZXJlLCBpbmNsdWRpbmcgUUVNVSwgc3RhbmRhcmQga2VybmVscywgdmlydGlvLXNjc2ksIGFuZCBhbGwgc29ydHMgb2Ygb3RoZXIgZW11bGF0aW9ucywgcGFzcy10aHJvdWdocywgYW5kIG1hc3Mgc3RvcmFnZSBkZXZpY2VzLiBFdmVyeSBibG9jayBJL08gcmVxdWVzdCBnb2VzIHRocm91Z2ggYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHF1ZXVlIGZ1bmN0aW9uIGBzY3NpX3F1ZXVlX3JxYCBpcyBhIGtleSBleGFtcGxlLCBzbyB0aGlzIGlzIGEgaG90IHBhdGguICBXaGVuIGBxdWV1ZV9ycWAgZmFpbHMg4oCTIGBCTEtfU1RTX0lPRVJSYCwgYEJMS19TVFNfVEFSR0VUYCwgZXRjLiDigJMgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCYjMzk7cyBkZWZhdWx0IHBhdGggbm93IGludm9rZXMgYGJsa19tcV9jbGVhbnVwX3JxYCwgd2hpY2ggdGhlbiBjYWxscyBgc2NzaV9jbGVhbnVwX3JxYC4gVGhpcyBjaGFuZ2VzIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIGZvciBob3cgYmxvY2sgZHJpdmVycyByZWFjdCB0byBlcnJvcnMsIHNvIHRoZXJlIGlzIGNsZWFybHkgYSBsYXJnZSBpbXBhY3QuIE1vZGlmaWNhdGlvbiBvZiBgYmxvY2svYmxrLW1xLmNgIGFuZCBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGNvbmZpcm1zIHRoaXMuICBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpOb3csIHRoZSBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHNwZWNpZmljIGFib3V0IHdoYXQgd2UmIzM5O3JlIHRhcmdldGluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYHNjc2lfcXVldWVfcnFgIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCwgYW5kIGBibGtfbXFfY2xlYW51cF9ycWAuIFRoZSBnb2FsIGlzIHRvIGV4YW1pbmUgd2hlcmUgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQuIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGJlIGdvb2QgdGhlcmUuIGBzY3NpX3F1ZXVlX3JxYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBtdXN0IGNoZWNrIGluIHJlbGF0aW9uIHRvIHRoZSBjb21waWxlciBiZWhhdmlvci4gYHNjc2lfY2xlYW51cF9ycWAgaXMgYWxzbyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29tcGlsZXIgaXMgaGFuZGxpbmcgaXQuIFdlIHNob3VsZCBjaGVjayB0aGUgdm1saW51eCBzeW1ib2xzIGZvciB0aGVzZSBmaWxlcywgYW5kIGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4KCkhvd2V2ZXIsIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgaXMgdWJpcXVpdG91czsgaXQmIzM5O3MgdGhlIGNvcmUgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYmxrLW1xISBXZSBtdXN0IGF2b2lkIGxpc3RpbmcgdHJ1bHkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgd291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBXZSYjMzk7cmUgbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLCBsaWtlIGBzY3NpX3F1ZXVlX3JxYCBhbmQgYHNjc2lfY2xlYW51cF9ycWAgYW5kIHdoZXJlIHRob3NlIGFyZSBjYWxsZWQuIFdlIGFyZSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IGRyaXZlcnMvZW50cnlwb2ludHMgdGhhdCBhcmUgU0NTSS1zcGVjaWZpYy4gVGhlIGltcG9ydGFudCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAgYW5kIGBzY3NpX2NsZWFudXBfcnFgLiBXZSBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jYCBmb3Igb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbXFfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzE9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9pbml0X2xpbWl0cyk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDcyLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHNfbm9fY29tbWl0ID0ge1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA3NC1cdC5nZXRfYnVkZ2V0XHQ9IHNjc2lfbXFfZ2V0X2J1ZGdldCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDk0PXN0YXRpYyB2b2lkIHNjc2lfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTAwLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjEwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTAyLVx0LmdldF9idWRnZXRcdD0gc2NzaV9tcV9nZXRfYnVkZ2V0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIxMjI9aW50IHNjc2lfbXFfc2V0dXBfdGFncyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdClcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTM1LVx0aWYgKHNob3N0LVx1MDAzZWhvc3R0LVx1MDAzZWNvbW1pdF9ycXMpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMTM2Olx0XHR0YWdfc2V0LVx1MDAzZW9wcyA9IFx1MDAyNnNjc2lfbXFfb3BzO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzNy1cdGVsc2VcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzg6XHRcdHRhZ19zZXQtXHUwMDNlb3BzID0gXHUwMDI2c2NzaV9tcV9vcHNfbm9fY29tbWl0O1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzOS1cdHRhZ19zZXQtXHUwMDNlbnJfaHdfcXVldWVzID0gc2hvc3QtXHUwMDNlbnJfaHdfcXVldWVzID8gOiAxO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIyMTA9c3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZV9mcm9tX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTMtXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMjE0Olx0aWYgKHEtXHUwMDNlbXFfb3BzID09IFx1MDAyNnNjc2lfbXFfb3BzX25vX2NvbW1pdCB8fFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjIxNTpcdCAgICBxLVx1MDAzZW1xX29wcyA9PSBcdTAwMjZzY3NpX21xX29wcylcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTYtXHRcdHNkZXYgPSBxLVx1MDAzZXF1ZXVlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFNDU0kgUmVxdWVzdCBRdWV1ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgU0NTSSByZXF1ZXN0IHF1ZXVlIHNpdHVhdGlvbi4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgc2NzaV9xdWV1ZV9ycWAgYW5kIGl0cyBzdXJyb3VuZGluZyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGNvbnRleHQgYXJvdW5kIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBob3cgYHNjc2lfcXVldWVfcnFgIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBgc2NzaV9tcV9vcHNgIHN0cnVjdHVyZTsgc2VlbXMgbGlrZSBpdCBpcyBkZWZpbmVkIGFzOiBgLnF1ZXVlX3JxID0gc2NzaV9xdWV1ZV9ycSxgIGFuZCBgLmNsZWFudXBfcnEgPSBzY3NpX2NsZWFudXBfcnEsYAoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSByaWdodCBzZXR0aW5ncyBmb3IgU0NTSSBhbmQgYmxrLW1xLiBibGstbXEgaXMgZGVmaW5pdGVseSBjb3JlIGJsb2NrIGxheWVyIHRlcnJpdG9yeSDigJMgYENPTkZJR19CTE9DS2AgY29uZmlybWVkLiBTQ1NJIHNob3VsZCBiZSBlaXRoZXIgYENPTkZJR19TQ1NJYCBvciBgU0NTSV9NT0RgLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvc2NzaWAgZGlyZWN0b3J5IHRvIGJlIHN1cmUuIFRoaXMgaXMgZnVuZGFtZW50YWw7IEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBrbm93aW5nIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbGliXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvTWFrZWZpbGU9MjQ9Q09OVEVYVF9BTkFMWVNJU19zY3NpX2lvY3RsLm8gOj0geVxuZHJpdmVycy9zY3NpL01ha2VmaWxlOjI1OkNPTlRFWFRfQU5BTFlTSVNfc2NzaV9saWIubyA6PSB5XG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMjYtQ09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYl9kbWEubyA6PSB5XG4tLVxuZHJpdmVycy9zY3NpL01ha2VmaWxlPTE4Mj1zY3NpX21vZC15XHRcdFx0JiM0Mzs9IHNjc2kubyBob3N0cy5vIHNjc2lfaW9jdGwubyBcXFxuZHJpdmVycy9zY3NpL01ha2VmaWxlOjE4MzpcdFx0XHRcdCAgIHNjc2ljYW0ubyBzY3NpX2Vycm9yLm8gc2NzaV9saWIub1xuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE4NC1zY3NpX21vZC0kKENPTkZJR19TQ1NJX0NPTlNUQU5UUykgJiM0Mzs9IGNvbnN0YW50cy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBgc2NzaV9saWIub2AuIEkga25vdyB0aGF0JiMzOTtzIHBhcnQgb2YgYHNjc2lfbW9kYCwgd2hpY2ggZ2V0cyBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19TQ1NJYCBzZXQuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJJiMzOTttIGFsc28gc2VlaW5nIGBibG9jay9ibGstbXEuY2AsIGFuZCB0aGF0JiMzOTtzIGxpbmtlZCB0byBgYmxvY2svTWFrZWZpbGVgLiBUaGUgYGJsay1tcS5jYCBtb2R1bGUgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBTaW5jZSBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUsIGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBgYmxvY2svTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBpbiBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstbXFcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuYmxvY2svTWFrZWZpbGUtOS1cdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG5ibG9jay9NYWtlZmlsZToxMDpcdFx0XHRibGstbWVyZ2UubyBibGstdGltZW91dC5vIGJsay1saWIubyBibGstbXEubyBcXFxuYmxvY2svTWFrZWZpbGUtMTEtXHRcdFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBTQ1NJL0Jsb2NrIExheWVyIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMg4oCTIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTE9DS2AgYW5kIGBDT05GSUdfU0NTSWAgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBibG9jayBsYXllciBhbmQgdGhlIFNDU0kgc3Vic3lzdGVtLCByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGFsd2F5cyBnb29kIHRvIGNvbmZpcm0gdGhlIGJhc2ljcy4KCk5vdywgZm9yIGEgZGVlcGVyIGRpdmUsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byByZXF1ZXN0IGRpc3BhdGNoIGFuZCBjbGVhbnVwLiBJJiMzOTttIHRoaW5raW5nIG9mIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCwgYW5kIGBzY3NpX2NsZWFudXBfcnFgIHNwZWNpZmljYWxseS4gQXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIHN5bWJvbHMgSSBtaWdodCBiZSBtaXNzaW5nPyBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBmb2xsb3cgdXAgb24gdGhpcy4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgc2NzaV9tcV91bmluaXRfY21kYC4gSXMgdGhhdCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBzY3NpX2NsZWFudXBfcnFgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByZWxhdGlvbnNoaXAgdG8gbmFpbCBkb3duIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBjb21tYW5kcyBhcmUgY2xlYW5lZCB1cCB3aGVuIHVzaW5nIG1lc3NhZ2UgcXVldWVzLiBJIHNob3VsZCBjaGVjayBgc2NzaV9tcV91bmluaXRfY21kYCYjMzk7cyBzb3VyY2UgY29kZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChzY3NpX3NlbnNlX2NhY2hlX211dGV4KTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02MS1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjE6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02MjY9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI5LXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2OTY6XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5NS1cdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2Olx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXHRcdHJxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNj0gflJRRl9ET05UUFJFUDtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzQtXHRcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE1NzU6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3Ni1cdFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVx1MDAzZXJlc3VsdCkpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXHRcdGlmIChyZXEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUClcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE5NTY6XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNTQKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCB0aGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhczogdGhlIGNvcmUgYmxvY2sgbGF5ZXImIzM5O3MgZGlzcGF0Y2ggbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgZHVyaW5nIHJlcXVlc3QgZGlzcGF0Y2ggaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHJlcXVlc3QgZXhlY3V0aW9uIGFuZCBjbGVhbnVwIHBhdGgsIHdoaWNoIGlzIGxpbmtlZCB0aHJvdWdoIGBzY3NpX3F1ZXVlX3JxYCBjYWxsaW5nIGBibGtfbXFfY2xlYW51cF9ycWAsIGFuZCB0aGVuIHN1YnNlcXVlbnRseSB0aHJvdWdoIGBzY3NpX2NsZWFudXBfcnFgLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VybmluZyB0aGUgcmVxdWVzdCBjbGVhbnVwIGxpZmVjeWNsZS4gSSBjYW4gaW1tZWRpYXRlbHkgdGVsbCB0aGF0IHRoaXMgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXNlIGNvbXBvbmVudHMgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgZXZlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpGb3IgYHNldC1yZXN1bHRzYCwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBzaW1wbGlmaWVzIFNDU0kgY29tbWFuZCBlcnJvciBjbGVhbnVwIGluIHRoYXQgYHNjc2lfcXVldWVfcnEoKWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsdGVyaW5nIHRoZSByZXF1ZXN0IGxpZmVjeWNsZSBhY3Jvc3MgdGhlIGRpc3BhdGNoIHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciB1bmV4cGVjdGVkIHN0YXRlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAsIGBzY3NpX2NsZWFudXBfcnFgLCBhbmQgYHNjc2lfbXFfdW5pbml0X2NtZGAuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkLiBJJiMzOTtsbCBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgYEJMT0NLYCBhbmQgYFNDU0lgLCB0byBlbnN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhlIGNoYW5nZXMgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4KCkFscmlnaHQsIHRpbWUgdG8gdHJpZ2dlciB0aGF0IHRvb2wgY2FsbCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCYjMzQ7LAogICAgJiMzNDtzY3NpX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfY2xlYW51cF9ycSYjMzQ7LAogICAgJiMzNDtzY3NpX21xX3VuaW5pdF9jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlcXVlc3QgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgY29yZSBibG9jayBsYXllciBkaXNwYXRjaCBsb29wIChibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCkgdG8gY2FsbCBibGtfbXFfY2xlYW51cF9ycSgpLCBzaGlmdGluZyBkcml2ZXIgY2xlYW51cCByZXNwb25zaWJpbGl0eSBvdXQgb2Ygc2NzaV9xdWV1ZV9ycSgpIGludG8gdGhlIGdlbmVyaWMgbXEgY2xlYW51cCBoYW5kbGVyIChzY3NpX2NsZWFudXBfcnEpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcmVxdWVzdCBjbGVhbnVwIGxpZmVjeWNsZSBkdXJpbmcgZmFpbGVkIGJsb2NrIGRpc3BhdGNoIGluIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGFuZCBTQ1NJIGxheWVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9kaXNwYXRjaF9ycV9saXN0JiMzNDssCiAgICAmIzM0O3Njc2lfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7c2NzaV9jbGVhbnVwX3JxJiMzNDssCiAgICAmIzM0O3Njc2lfbXFfdW5pbml0X2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVxdWVzdCBkaXNwYXRjaCBlcnJvciBoYW5kbGluZyBpbiBgYmxrLW1xYCBieSBhZGRpbmcgYSBjYWxsIHRvIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCgpYCB3aGVuIGBxdWV1ZV9ycSgpYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgcmVtb3ZpbmcgdGhlIG1hbnVhbCBpbnZvY2F0aW9uIG9mIGBzY3NpX21xX3VuaW5pdF9jbWQoKWAgZnJvbSBgc2NzaV9xdWV1ZV9ycSgpYC5cblxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCBhMjZhMTFjNzNlZTNlLi5lYjNhNDgxMjExZDBiIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMjEyNiw2ICYjNDM7MjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAJCQlibGtfbXFfaGFuZGxlX2Rldl9yZXNvdXJjZShycSwgbGlzdCk7CiAJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKJiM0MzsJCQlibGtfbXFfY2xlYW51cF9ycShycSk7CiAJCQlibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7CiAJCX0KIAl9IHdoaWxlICghbGlzdF9lbXB0eShsaXN0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xOTYwLDEzICYjNDM7MTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAkJCWNtZC0mZ3Q7cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgJmx0OyZsdDsgMTY7CiAJCWVsc2UKIAkJCWNtZC0mZ3Q7cmVzdWx0ID0gRElEX0VSUk9SICZsdDsmbHQ7IDE2OwotCQkvKgotCQkgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuCi0JCSAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kCi0JCSAqIGFnYWluLgotCQkgKi8KLQkJaWYgKHJlcS0mZ3Q7cnFfZmxhZ3MgJmFtcDsgUlFGX0RPTlRQUkVQKQotCQkJc2NzaV9tcV91bmluaXRfY21kKGNtZCk7CiYjNDM7CQkvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovCiAJCXNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpOwogCQlicmVhazsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU4CgkJCQkJCQlvdXRwdXQ6IDEwNQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGVuIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuCgpGaXJzdCwgbGV0JiMzOTtzIGZvY3VzIG9uIGBibG9jay9ibGstbXEuY2AuIFNwZWNpZmljYWxseSwgd2l0aGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIHRoZXJlJiMzOTtzIGEgbmV3IGxpbmUgdGhhdCBjYWxscyBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgYGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KWAgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLiBUaGlzIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJiMzOTtzIGFuIGVycm9yLiBUaGUgZXhpc3RpbmcgY29kZSBlbmRzIGEgcmVxdWVzdCB3aXRoIGBibGtfbXFfZW5kX3JlcXVlc3RgIGJ1dCB0aGlzIG5ldyBhZGRpdGlvbiBpcyBjbGVhbmluZyB1cCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIGRvaW5nLCBhbmQgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgaGFuZGxpbmcuIElzIGl0IGZyZWVpbmcgbWVtb3J5LCByZWxlYXNpbmcgbG9ja3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlIGlzIGtleS4KCk5leHQsIEkmIzM5O2xsIHN3aXRjaCBteSBhdHRlbnRpb24gdG8gYGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2NzaV9xdWV1ZV9ycWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaW5jbHVkZWQgYSBjaGVjayBmb3IgYFJRRl9ET05UUFJFUGAgYW5kIHRoZW4gY2FsbGVkIGBzY3NpX21xX3VuaW5pdF9jbWQoY21kKWAgaWYgdGhpcyBmbGFnIHdhcyBzZXQuIE5vdywgdGhhdCBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlIGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQsIGFuZCBhIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgZXhwbGFpbmluZyB0aGF0IOKAnGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQu4oCdIFRoaXMgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc2hpZnRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciByZXNvdXJjZSBjbGVhbnVwIGZyb20gdGhlIFNDU0kgbGF5ZXIgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byB0aGUgcHJldmlvdXMgb25lIGluIGBibGstbXEuY2AuIFRoZSBgZGVmYXVsdGAgY2FzZSBmcm9tIHRoZSBlYXJsaWVyIGZpbGUgbm93IGluZGljYXRlcyB0aGF0IHRoZSBjbGVhbnVwIGlzIGhhbmRsZWQgYnkgdGhlIGJsb2NrIGxheWVyLgoKTm93LCBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGNoYW5nZXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYGJsa19tcV9jbGVhbnVwX3JxYCBpcyBub3cgaGFuZGxpbmcgd2hhdCBgc2NzaV9tcV91bmluaXRfY21kYCAqdXNlZCogdG8gaGFuZGxlLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGhvdyB0aGVzZSBkaWZmZXJlbnQgbGF5ZXJzIGludGVyYWN0IHdoZW4gYSByZXF1ZXN0IGVuY291bnRlcnMgYW4gZXJyb3IuIFRoZXJlIG1heSBiZSBzb21lIGltcGxpY2l0IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgcmVzb3VyY2Ugb3duZXJzaGlwIG9yIHN0YXRlIHRoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIG1pZ2h0IHNpbXBsaWZ5IHJlc291cmNlIG1hbmFnZW1lbnQgaW4gc29tZSB3YXlzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBpbiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9jbGVhbnVwX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5ibG9jay9ibGstbXEuYy0yMTI4LVx0XHRkZWZhdWx0OlxuYmxvY2svYmxrLW1xLmM6MjEyOTpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG5ibG9jay9ibGstbXEuYy0yMTMwLVx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExNTpcdFx0XHRiZC5sYXN0ID0gbGlzdF9lbXB0eShsaXN0KTtcbjIxMTY6XHRcbjIxMTc6XHRcdFx0cmV0ID0gcS1cdTAwM2VtcV9vcHMtXHUwMDNlcXVldWVfcnEoaGN0eCwgXHUwMDI2YmQpO1xuMjExODpcdFx0XHRzd2l0Y2ggKHJldCkge1xuMjExOTpcdFx0XHRjYXNlIEJMS19TVFNfT0s6XG4yMTIwOlx0XHRcdFx0cXVldWVkJiM0MzsmIzQzOztcbjIxMjE6XHRcdFx0XHRicmVhaztcbjIxMjI6XHRcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMjEyMzpcdFx0XHRcdG5lZWRzX3Jlc291cmNlID0gdHJ1ZTtcbjIxMjQ6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjIxMjU6XHRcdFx0Y2FzZSBCTEtfU1RTX0RFVl9SRVNPVVJDRTpcbjIxMjY6XHRcdFx0XHRibGtfbXFfaGFuZGxlX2Rldl9yZXNvdXJjZShycSwgbGlzdCk7XG4yMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4yMTI4Olx0XHRcdGRlZmF1bHQ6XG4yMTI5Olx0XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuMjEzMDpcdFx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbjIxMzE6XHRcdFx0fVxuMjEzMjpcdFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xuMjEzMzpcdG91dDpcbjIxMzQ6XHRcdC8qIElmIHdlIGRpZG4mIzM5O3QgZmx1c2ggdGhlIGVudGlyZSBsaXN0LCB3ZSBjb3VsZCBoYXZlIHRvbGQgdGhlIGRyaXZlclxuMjEzNTpcdFx0ICogdGhlcmUgd2FzIG1vcmUgY29taW5nLCBidXQgdGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbGllLlxuMjEzNjpcdFx0ICovXG4yMTM3Olx0XHRpZiAoIWxpc3RfZW1wdHkobGlzdCkgfHwgcmV0ICE9IEJMS19TVFNfT0spXG4yMTM4Olx0XHRcdGJsa19tcV9jb21taXRfcnFzKGhjdHgsIHF1ZXVlZCwgZmFsc2UpO1xuMjEzOTpcdFxuMjE0MDpcdFx0LypcbjIxNDE6XHRcdCAqIEFueSBpdGVtcyB0aGF0IG5lZWQgcmVxdWV1aW5nPyBTdHVmZiB0aGVtIGludG8gaGN0eC1cdTAwM2VkaXNwYXRjaCxcbjIxNDI6XHRcdCAqIHRoYXQgaXMgd2hlcmUgd2Ugd2lsbCBjb250aW51ZSBvbiBuZXh0IHF1ZXVlIHJ1bi5cbjIxNDM6XHRcdCAqL1xuMjE0NDpcdFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7XG4yMTQ1Olx0XHRcdGJvb2wgbmVlZHNfcmVzdGFydDtcbjIxNDY6XHRcdFx0LyogRm9yIG5vbi1zaGFyZWQgdGFncywgdGhlIFJFU1RBUlQgY2hlY2sgd2lsbCBzdWZmaWNlICovXG4yMTQ3Olx0XHRcdGJvb2wgbm9fdGFnID0gcHJlcCA9PSBQUkVQX0RJU1BBVENIX05PX1RBRyBcdTAwMjZcdTAwMjZcbjIxNDg6XHRcdFx0XHQoKGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX1RBR19RVUVVRV9TSEFSRUQpIHx8XG4yMTQ5Olx0XHRcdFx0YmxrX21xX2lzX3NoYXJlZF90YWdzKGhjdHgtXHUwMDNlZmxhZ3MpKTtcbjIxNTA6XHRcbjIxNTE6XHRcdFx0LypcbjIxNTI6XHRcdFx0ICogSWYgdGhlIGNhbGxlciBhbGxvY2F0ZWQgYnVkZ2V0cywgZnJlZSB0aGUgYnVkZ2V0cyBvZiB0aGVcbjIxNTM6XHRcdFx0ICogcmVxdWVzdHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBwYXNzZWQgdG8gdGhlIGJsb2NrIGRyaXZlci5cbjIxNTQ6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NDU6XHRcdGNtZC1cdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcbjE5NDY6XHRcdHN3aXRjaCAocmV0KSB7XG4xOTQ3Olx0XHRjYXNlIEJMS19TVFNfT0s6XG4xOTQ4Olx0XHRcdGJyZWFrO1xuMTk0OTpcdFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxuMTk1MDpcdFx0XHRpZiAoc2NzaV9kZXZpY2VfYmxvY2tlZChzZGV2KSlcbjE5NTE6XHRcdFx0XHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcbjE5NTI6XHRcdFx0YnJlYWs7XG4xOTUzOlx0XHRjYXNlIEJMS19TVFNfQUdBSU46XG4xOTU0Olx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXHUwMDNjXHUwMDNjIDE2O1xuMTk1NTpcdFx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4xOTU2Olx0XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4xOTU3Olx0XHRcdGJyZWFrO1xuMTk1ODpcdFx0ZGVmYXVsdDpcbjE5NTk6XHRcdFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxuMTk2MDpcdFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcdTAwM2NcdTAwM2MgMTY7XG4xOTYxOlx0XHRcdGVsc2VcbjE5NjI6XHRcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFx1MDAzY1x1MDAzYyAxNjtcbjE5NjM6XHRcdFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xuMTk2NDpcdFx0XHRzY3NpX3J1bl9xdWV1ZV9hc3luYyhzZGV2KTtcbjE5NjU6XHRcdFx0YnJlYWs7XG4xOTY2Olx0XHR9XG4xOTY3Olx0XHRyZXR1cm4gcmV0O1xuMTk2ODpcdH1cbjE5Njk6XHRcbjE5NzA6XHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4xOTcxOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXG4xOTcyOlx0e1xuMTk3MzpcdFx0c3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZXQtXHUwMDNlZHJpdmVyX2RhdGE7XG4xOTc0Olx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjE5NzU6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4xOTc2Olx0XHRpbnQgcmV0ID0gMDtcbjE5Nzc6XHRcbjE5Nzg6XHRcdGNtZC1cdTAwM2VzZW5zZV9idWZmZXIgPVxuMTk3OTpcdFx0XHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcbjE5ODA6XHRcdGlmICghY21kLVx1MDAzZXNlbnNlX2J1ZmZlcilcbjE5ODE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTgyOlx0XG4xOTgzOlx0XHRpZiAoc2NzaV9ob3N0X2dldF9wcm90KHNob3N0KSkge1xuMTk4NDpcdFx0XHRzZyA9ICh2b2lkICopY21kICYjNDM7IHNpemVvZihzdHJ1Y3Qgc2NzaV9jbW5kKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyIENsZWFudXAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBwcmVjaXNlIHJvbGVzIG9mIGBibGtfbXFfY2xlYW51cF9ycWAgYW5kIGBibGtfbXFfZW5kX3JlcXVlc3RgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHBpY2tpbmcgYXBhcnQgdGhlIGNvZGUgb2YgZWFjaCBmdW5jdGlvbiB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgcmVxdWVzdCBjb21wbGV0aW9uIHBhdGgsIGVzcGVjaWFsbHkgZ2l2ZW4gcmVjZW50IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYXJvdW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGdpdmVuIHRoYXQgYGJsay1tcWAmIzM5O3MgYXN5bmNocm9ub3VzIGRlc2lnbiBpbmhlcmVudGx5IHJlcXVpcmVzIGNhcmVmdWwgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gQWxzbywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBwcm9wZXJseSBoYW5kbGluZyBhbGwgY29ybmVyIGNhc2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nLCB0aW1lb3V0cywgYW5kIGRldmljZSBmbHVzaGVzPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gcmVxdWVzdCB0eXBlIChlLmcuLCByZWFkLCB3cml0ZSwgZGlzY2FyZCwgZXRjLikgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgcmVzcG9uc2liaWxpdGllcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zIG9mIGEgbW9kZXJuIGJsb2NrIHF1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfY2xlYW51cF9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxuYmxvY2svYmxrLW1xLmMtMjEyOC1cdFx0ZGVmYXVsdDpcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XHRcdFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xuYmxvY2svYmxrLW1xLmMtMjEzMC1cdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9jbGVhbnVwX3JxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5ibG9jay9ibGstbXEuYy0yMTI4LVx0XHRkZWZhdWx0OlxuYmxvY2svYmxrLW1xLmM6MjEyOTpcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG5ibG9jay9ibGstbXEuYy0yMTMwLVx0XHRcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcbi0tXG5kcml2ZXJzL21kL2RtLXJxLmM9MzY5PXN0YXRpYyBpbnQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvKVxuLS1cbmRyaXZlcnMvbWQvZG0tcnEuYy0zOTktXHRcdFx0YmxrX3JxX3VucHJlcF9jbG9uZShjbG9uZSk7XG5kcml2ZXJzL21kL2RtLXJxLmM6NDAwOlx0XHRcdGJsa19tcV9jbGVhbnVwX3JxKGNsb25lKTtcbmRyaXZlcnMvbWQvZG0tcnEuYy00MDEtXHRcdFx0dGlvLVx1MDAzZXRpLVx1MDAzZXR5cGUtXHUwMDNlcmVsZWFzZV9jbG9uZV9ycShjbG9uZSwgXHUwMDI2dGlvLVx1MDAzZWluZm8pO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9MTAyMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpxdWV1ZV9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDM4LVxuaW5jbHVkZS9saW51eC9ibGstbXEuaDoxMDM5OnN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTEwNDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBibGstbXEgQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYmxvY2sgbXVsdGktcXVldWUgY2xlYW51cCBmdW5jdGlvbiwgYGJsa19tcV9jbGVhbnVwX3JxYCwgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIG5hdmlnYXRlIHRvIGBpbmNsdWRlL2xpbnV4L2Jsay1tcS5oYCDigJMgdGhhdCYjMzk7cyB0aGUgdXN1YWwgc3BvdCBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDM5LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkgcmVjYWxsIGBibGtfbXFfY2xlYW51cF9ycWAgYmVpbmcgZGVmaW5lZCBvciBhdCBsZWFzdCB3aGVyZSBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzIHdpbGwgYmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBibGstbXFgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsay1tcS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM1Olx0I2RlZmluZSBoY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpXHRcdFx0XHRcdFxcXG4xMDM2Olx0XHRmb3IgKChpKSA9IDA7IChpKSBcdTAwM2MgKGhjdHgpLVx1MDAzZW5yX2N0eCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4xMDM3Olx0XHQgICAgICh7IGN0eCA9IChoY3R4KS1cdTAwM2VjdHhzWyhpKV07IDE7IH0pOyAoaSkmIzQzOyYjNDM7KVxuMTAzODpcdFxuMTAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4xMDQwOlx0e1xuMTA0MTpcdFx0aWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpXG4xMDQyOlx0XHRcdHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpO1xuMTA0MzpcdH1cbjEwNDQ6XHRcbjEwNDU6XHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuMTA0NjpcdFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4xMDQ3Olx0XG4xMDQ4Olx0c3RhdGljIGlubGluZSBib29sIHJxX2lzX3N5bmMoc3RydWN0IHJlcXVlc3QgKnJxKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHJldHVybiBvcF9pc19zeW5jKHJxLVx1MDAzZWNtZF9mbGFncyk7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHZvaWQgYmxrX3JxX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7XG4xMDU0Olx0aW50IGJsa19ycV9wcmVwX2Nsb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJlcXVlc3QgKnJxX3NyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBjbGVhbnVwX3JxYCBpbiB0aGUgU0NTSSBjb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIFNDU0kgY29kZSBhZ2FpbiwgYW5kIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYGNsZWFudXBfcnFgLiBUaGUgbmFtZSBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVxdWVzdCBjbGVhbnVwIGZ1bmN0aW9uLCB3aGljaCwgaW4gdGhlIFNDU0kgd29ybGQsIGNvdWxkIGJlIGNydWNpYWwgZm9yIGVycm9yIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBvciBlbnN1cmluZyBJL08gY29tcGxldGlvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBjbGVhbnVwX3JxYCBpcyBkb2luZyAqd2l0aGluKiB0aGUgU0NTSSByZXF1ZXN0IGNvbnRleHQuIElzIGl0IGNhbGxlZCBvbiBldmVyeSByZXF1ZXN0LCBvbmx5IG9uIGVycm9yIGNvbmRpdGlvbnMsIG9yIGR1cmluZyBzcGVjaWZpYyBwaGFzZXMgb2YgdGhlIHJlcXVlc3QgbGlmZWN5Y2xlPyBXaGF0IHNwZWNpZmljIHJlc291cmNlcyBkb2VzIGl0IGNsZWFuIHVwPyBBcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQ/IEkgbmVlZCB0byBsb29rIGF0IGl0cyBkZWZpbml0aW9uLCBpdHMgY2FsbCBzaXRlcywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB0aGVuIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIFNDU0kgc3RhY2sgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY2xlYW51cF9ycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4My1cdC5leGl0X3JlcXVlc3RcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMDg0Olx0LmNsZWFudXBfcnFcdD0gc2NzaV9jbGVhbnVwX3JxLFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjA4NS1cdC5idXN5XHRcdD0gc2NzaV9tcV9sbGRfYnVzeSxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNjc2lfY2xlYW51cF9ycSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgYHNjc2lfY2xlYW51cF9ycWAgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFNDU0kgcmVxdWVzdCBjbGVhbnVwIHdvcmtzIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBvdmVyYWxsIHJlcXVlc3QgbGlmZWN5Y2xlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBrZXkgdG8gdHJ1bHkgZ3Jhc3BpbmcgaG93IFNDU0kgY29tbWFuZHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgd2UmIzM5O2xsIHNlZSBob3cgZXJyb3Igc3RhdHVzZXMgYXJlIHNldCwgcmVzb3VyY2VzIGxpa2UgYnVmZmVycyBvciBETUEgbWFwcGluZ3MgYXJlIHJlbGVhc2VkIGFuZCBob3cgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcyBhcmUgcHV0IGJhY2sgaW4gYSBnb29kIHN0YXRlIGZvciB0aGUgbmV4dCByZXF1ZXN0LiBUaGlzJiMzOTtsbCBwcm9iYWJseSBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRvIHRyYWNrIGRvd24gYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gSS9PIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NzaV9jbGVhbnVwX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjgzPUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI4OC0gKi9cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyODk6c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTAte1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVx0LmV4aXRfcmVxdWVzdFx0PSBzY3NpX21xX2V4aXRfcmVxdWVzdCxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XHQuY2xlYW51cF9ycVx0PSBzY3NpX2NsZWFudXBfcnEsXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVx0LmJ1c3lcdFx0PSBzY3NpX21xX2xsZF9idXN5LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIxMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTItXHQuZXhpdF9yZXF1ZXN0XHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjExMzpcdC5jbGVhbnVwX3JxXHQ9IHNjc2lfY2xlYW51cF9ycSxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTQtXHQuYnVzeVx0XHQ9IHNjc2lfbXFfbGxkX2J1c3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBpbiBgc2NzaV9saWIuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgU0NTSSBzdGFjay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVxdWVzdCBjbGVhbnVwIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgYW5kIHplcm8gaW4gb24gYHNjc2lfY2xlYW51cF9ycWAgYXJvdW5kIGxpbmUgMTI4OS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgY29tcGxldGlvbiBhbmQgcmVzb3VyY2UgcmVsZWFzZSBvZiBhIFNDU0kgcmVxdWVzdCBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLCBob3cgdGhlIHJlcXVlc3QgaXMgdWx0aW1hdGVseSBmcmVlZCBvciByZWN5Y2xlZCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbSwgbGlrZSB0aGUgdHJhbnNwb3J0IGxheWVyIG9yIHRoZSBkZXZpY2UgZHJpdmVyLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI4NTpcdC8qXG4xMjg2Olx0ICogT25seSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpc24mIzM5O3QgY29tcGxldGVkIGJ5IFNDU0ksIGFuZCBub3QgZnJlZWQgYnlcbjEyODc6XHQgKiBTQ1NJXG4xMjg4Olx0ICovXG4xMjg5Olx0c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbjEyOTA6XHR7XG4xMjkxOlx0XHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbjEyOTI6XHRcbjEyOTM6XHRcdGNtZC1cdTAwM2VmbGFncyA9IDA7XG4xMjk0Olx0XG4xMjk1Olx0XHRpZiAocnEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUCkge1xuMTI5NjpcdFx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbjEyOTc6XHRcdFx0cnEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2PSB+UlFGX0RPTlRQUkVQO1xuMTI5ODpcdFx0fVxuMTI5OTpcdH1cbjEzMDA6XHRcbjEzMDE6XHQvKiBDYWxsZWQgYmVmb3JlIGEgcmVxdWVzdCBpcyBwcmVwYXJlZC4gU2VlIGFsc28gc2NzaV9tcV9wcmVwX2ZuKCkuICovXG4xMzAyOlx0dm9pZCBzY3NpX2luaXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKVxuMTMwMzpcdHtcbjEzMDQ6XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHNjc2lfY21kX3RvX3JxKGNtZCk7XG4xMzA1Olx0XG4xMzA2Olx0XHRpZiAoIWJsa19ycV9pc19wYXNzdGhyb3VnaChycSkgXHUwMDI2XHUwMDI2ICEoY21kLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ01EX0lOSVRJQUxJWkVEKSkge1xuMTMwNzpcdFx0XHRjbWQtXHUwMDNlZmxhZ3MgfD0gU0NNRF9JTklUSUFMSVpFRDtcbjEzMDg6XHRcdFx0c2NzaV9pbml0aWFsaXplX3JxKHJxKTtcbjEzMDk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNjc2lfbXFfdW5pbml0X2NtZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHNjc2lfbXFfdW5pbml0X2NtZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvciB3aXRoaW4gdGhlIFNDU0kgbWlkbGF5ZXImIzM5O3MgbWVzc2FnZS1xdWV1ZWQgY29tbWFuZCBoYW5kbGluZy4gSSBrbm93IHRoZSBiYXNpYyBwcmluY2lwbGVzLCBvZiBjb3Vyc2Ug4oCTIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGUtYWxsb2NhdGlvbiBvciBjbGVhbnVwIG9mIGEgY29tbWFuZCB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciBuZWVkZWQsIG1heWJlIGFmdGVyIGNvbXBsZXRpb24gb3IgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCdXQgSSB3YW50IHRoZSBzcGVjaWZpY3MuIElzIGl0IGp1c3QgdGhlIGNvbW1hbmQgc3RydWN0IGl0c2VsZiwgb3IgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2Ugc2NhdHRlci1nYXRoZXIgbGlzdHMsIHNlbnNlIGRhdGEsIG9yIGV2ZW4gdGhlIG1lc3NhZ2UgcXVldWUgaXRzZWxmPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmxlIGludGVyYWN0aW9ucyBoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIHZpdGFsIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgdG91Y2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfbXFfdW5pbml0X2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChzY3NpX3NlbnNlX2NhY2hlX211dGV4KTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02MS1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVx0XHRycS1cdTAwM2VycV9mbGFncyBcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjE6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02MjY9RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI5LXtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2OTY6XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5NS1cdGlmIChycS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2Olx0XHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXHRcdHJxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNj0gflJRRl9ET05UUFJFUDtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzQtXHRcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE1NzU6XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3Ni1cdFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVx1MDAzZXJlc3VsdCkpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXHRcdGlmIChyZXEtXHUwMDNlcnFfZmxhZ3MgXHUwMDI2IFJRRl9ET05UUFJFUClcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjE5NTY6XHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGluY29tcGxldGUgY29udGV4dCB5b3UgcHJvdmlkZWQuIEkmIzM5O20gZ29pbmcgdG8gZmlsbCBpbiB0aGUgYmxhbmtzIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byBzdG9yYWdlIGRyaXZlcnMsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLgoKKipEaXNzZWN0aW5nIHRoZSBgc2NzaV9tcV91bmluaXRfY21kYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzY3NpX21xX3VuaW5pdF9jbWRgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0NTSSAoU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSksIGxpa2VseSBpbiBhIG1vZGVybiBtdWx0aS1xdWV1ZSBlbnZpcm9ubWVudCAoZ2l2ZW4gdGhlICYjMzQ7bXEmIzM0OyBpbiB0aGUgbmFtZSkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBwcm9jZXNzIGJlaGluZCB0aGlzPyYjMzQ7IEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTttIGluZmVycmluZyBpdCBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjbGVhbnVwIG9yIHVuaW5pdGlhbGl6YXRpb24gb2YgYSBjb21tYW5kIHN0cnVjdHVyZSBvciBjb250ZXh0IHJlbGF0ZWQgdG8gU0NTSSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyByZXNvdXJjZXMuCgpJJiMzOTttIHRoaW5raW5nOiBpcyB0aGlzIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBjb21wbGV0ZXMsIGlzIGNhbmNlbGxlZCwgb3Igd2hlbiBhIGRldmljZSBpcyByZW1vdmVkPyBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgbGF0dGVyLiBJZiBpdCYjMzk7cyBhIGNvbW1hbmQgY2xlYW51cCBmdW5jdGlvbiwgZG9lcyBpdCByZXR1cm4gcmVzb3VyY2VzIHRvIHRoZSBmcmVlIHBvb2wsIG51bGxpZnkgcG9pbnRlcnMsIG9yIHBlcmZvcm0gb3RoZXIgY3JpdGljYWwgc3RlcHMgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb3IgZHJpdmVyIGVycm9ycz8KCkkgd2FudCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBXaGF0IGlzIGBzY3NpX21xX3VuaW5pdF9jbWRgIHJlY2VpdmluZyBhcyBhcmd1bWVudHM/IElzIGl0IGFuIGluaXRpYWxpemVkIGNvbW1hbmQgc3RydWN0dXJlPyBBIHBvaW50ZXIgdG8gYSBkZXZpY2U/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGRpY3RhdGUgaG93IEkgaW50ZXJwcmV0IHRoZSBmdW5jdGlvbiYjMzk7cyBhY3Rpb25zLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBvZiB0aGUgY29tbWFuZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQ/IElzIGl0IHNhZmUgdG8gcmVsZWFzZSBsb2NrcyBvciBmcmVlIG1lbW9yeT8KCkkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBxdWV1ZS1iYXNlZCBkcml2ZXJzIGFyZSB3b3JraW5nLiBLbm93aW5nIGl0JiMzOTtzIHVuaW5pdCBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNTpcdH1cbiA2MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2ZyZWVfc2d0YWJsZXMpO1xuIDYyNzpcdFxuIDYyODpcdHN0YXRpYyB2b2lkIHNjc2lfbXFfdW5pbml0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpXG4gNjI5Olx0e1xuIDYzMDpcdFx0c2NzaV9mcmVlX3NndGFibGVzKGNtZCk7XG4gNjMxOlx0XHRzY3NpX3VuaW5pdF9jbWQoY21kKTtcbiA2MzI6XHR9XG4gNjMzOlx0XG4gNjM0Olx0c3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWVfYXN5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuIDYzNTpcdHtcbiA2MzY6XHRcdGlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2Rldi1cdTAwM2Vob3N0KSlcbiA2Mzc6XHRcdFx0cmV0dXJuO1xuIDYzODpcdFxuIDYzOTpcdFx0aWYgKHNjc2lfdGFyZ2V0KHNkZXYpLVx1MDAzZXNpbmdsZV9sdW4gfHxcbiA2NDA6XHRcdCAgICAhbGlzdF9lbXB0eShcdTAwMjZzZGV2LVx1MDAzZWhvc3QtXHUwMDNlc3RhcnZlZF9saXN0KSkge1xuIDY0MTpcdFx0XHRrYmxvY2tkX3NjaGVkdWxlX3dvcmsoXHUwMDI2c2Rldi1cdTAwM2VyZXF1ZXVlX3dvcmspO1xuIDY0MjpcdFx0fSBlbHNlIHtcbiA2NDM6XHRcdFx0LypcbiA2NDQ6XHRcdFx0ICogc21wX21iKCkgcHJlc2VudCBpbiBzYml0bWFwX3F1ZXVlX2NsZWFyKCkgb3IgaW1wbGllZCBpblxuIDY0NTpcdFx0XHQgKiAuZW5kX2lvIGlzIGZvciBvcmRlcmluZyB3cml0aW5nIC5kZXZpY2VfYnVzeSBpblxuIDY0NjpcdFx0XHQgKiBzY3NpX2RldmljZV91bmJ1c3koKSBhbmQgcmVhZGluZyBzZGV2LVx1MDAzZXJlc3RhcnRzLlxuIDY0NzpcdFx0XHQgKi9cbiA2NDg6XHRcdFx0aW50IG9sZCA9IGF0b21pY19yZWFkKFx1MDAyNnNkZXYtXHUwMDNlcmVzdGFydHMpO1xuIDY0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQ0CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDgzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDU0kgUmVxdWVzdCBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIHNoaWZ0IGluIFNDU0kgcmVxdWVzdCBjbGVhbnVwLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBjbGVhbnVwIGNhbGwgZnJvbSB0aGUgZGVmYXVsdCBlcnJvciBwYXRoIGluIGBzY3NpX3F1ZXVlX3JxYCB0byBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUga2V5IGlzIHN0YW5kYXJkaXppbmcgdGhlIGNsZWFudXAgcHJvY2VzcyBhY3Jvc3MgdGhlIGJsay1tcSBzdWJzeXN0ZW0uIEJlZm9yZSwgaWYgYHF1ZXVlX3JxYCBmYWlsZWQsIGBzY3NpX21xX3VuaW5pdF9jbWQoY21kKWAgd2FzIGNhbGxlZCBpbW1lZGlhdGVseSB3aXRoaW4gYHNjc2lfcXVldWVfcnFgLiBOb3csIHRoZSBzeXN0ZW0gcmVsaWVzIG9uIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIGBibGtfbXFfY2xlYW51cF9ycShycSlgIHRvIHRyaWdnZXIgdGhlIGNsZWFudXAgYWZ0ZXIgdGhlIGluaXRpYWwgcmVxdWVzdCBkaXNwYXRjaC4gU3BlY2lmaWNhbGx5LCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKSBpc24mIzM5O3QgYEJMS19TVFNfT0tgLCBgQkxLX1NUU19SRVNPVVJDRWAsIG9yIGBCTEtfU1RTX0RFVl9SRVNPVVJDRWAsIGBibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldClgIGlzIGNhbGxlZC4gSWYgdGhlIGRyaXZlciBkaWRuJiMzOTt0IGNsZWFuIHVwIGl0cyBvd24gcnEsIG9yIGlmIGl0IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBjbGVhbnVwIGNhbGxiYWNrLCBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBjYWxscyBgcnEtJmd0O3EtJmd0O21xX29wcy0mZ3Q7Y2xlYW51cF9ycShycSlgLiBGb3IgU0NTSSwgYHNjc2lfY2xlYW51cF9ycWAgdGhlbiBjYWxscyBgc2NzaV9tcV91bmluaXRfY21kKGNtZClgIGlmIHRoZSBgUlFGX0RPTlRQUkVQYCBmbGFnIGlzIHNldC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHBvdGVudGlhbCByaXNrcyBhbmQgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIE15IHJlYXNvbmluZyByZWxpZXMgb24gdGhlc2UgY3JpdGVyaWE6CgoxLiAgKipVc2VyLXNwYWNlIGRhdGEgZXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGRlY2lzaW9uLW1ha2luZz8gTm8sIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGNoZWNrcyBgaWYgKHJxLSZndDtxLSZndDttcV9vcHMtJmd0O2NsZWFudXBfcnEpYCBiZWZvcmUgY2FsbGluZy4KMy4gICoqVW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXM6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgY291bGQgYmUgYWNjZXNzZWQgbGF0ZXI/IE5vLCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGxpa2Ugc2cgdGFibGVzIGR1cmluZyByZXF1ZXN0IGNvbXBsZXRpb24gb3IgZmFpbHVyZS4KNC4gICoqQnVmZmVyIGFjY2VzcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogRG9lcyB0aGlzIHBhdGNoIHVzZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gcGVyZm9ybSBib3VuZHMgY2hlY2tzIG9yIG90aGVyIGxvZ2ljIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4KCkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2tzIGhlcmUgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhpcyBwYXRjaCBpcyBhYm91dCByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjbGVhbmluZyB1cCByZXNvdXJjZXMsIG5vdCBsZWFraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgY2xlYW51cCBnZXRzIGNhbGxlZCB0d2ljZSBvciBhdCB0aGUgd3JvbmcgdGltZSksIHJlc291cmNlL21lbW9yeSBsZWFrcyAoaWYgdGhlIGNsZWFudXAgZ2V0cyBtaXNzZWQpLCBvciBnZW5lcmFsIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZGVidWdnaW5nIHRvb2xzL21lY2hhbmlzbXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgaGVyZSwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiByZXF1ZXN0IGNsZWFudXAgc3RhbmRhcmRpemF0aW9uIGFuZCB0aGUgcmVsZXZhbnQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYnkgS0FTQU4uCgpUaGUgcmVhc29uaW5nIHJlcXVpcmVtZW50cyBhcmU6CiogICBgTmVlZHNLTVNBTmA6IGZhbHNlCiogICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggY2VudHJhbGl6ZXMgcmVxdWVzdCBjbGVhbnVwIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIGZyb20gYHNjc2lfcXVldWVfcnFgLCBpdCBjb3VsZCBpbnRyb2R1Y2UgcmVxdWVzdCBsaWZlY3ljbGUgaXNzdWVzLCBkb3VibGUgY2xlYW51cC9mcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlc291cmNlIGxlYWtzLCBidXQgdGhlc2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRvcnM7IGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXG5cblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXG5cblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MjcuOTUzMDA5MTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4Njg0OTU5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RcIixcbiAgICBcInNjc2lfcXVldWVfcnFcIixcbiAgICBcInNjc2lfY2xlYW51cF9ycVwiLFxuICAgIFwic2NzaV9tcV91bmluaXRfY21kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZXF1ZXN0IGRpc3BhdGNoIGVycm9yIGhhbmRsaW5nIGluIGBibGstbXFgIGJ5IGFkZGluZyBhIGNhbGwgdG8gYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgaW4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KClgIHdoZW4gYHF1ZXVlX3JxKClgIHJldHVybnMgYW4gZXJyb3IsIGFuZCByZW1vdmluZyB0aGUgbWFudWFsIGludm9jYXRpb24gb2YgYHNjc2lfbXFfdW5pbml0X2NtZCgpYCBmcm9tIGBzY3NpX3F1ZXVlX3JxKClgLlxcblxcblRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY2xlYW51cCBhbmQgbGlmZWN5Y2xlIHBhdGggb2YgYHN0cnVjdCByZXF1ZXN0YCBhbmQgZHJpdmVyIFBEVXMgdXBvbiBxdWV1ZSBmYWlsdXJlLiBQb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgYXJlYSByZWxhdGUgdG8gcmVxdWVzdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZG91YmxlLWZyZWVpbmcgb3IgdXNlLWFmdGVyLWZyZWUgb2Ygc2NhdHRlcmxpc3RzL2NvbW1hbmQgYnVmZmVycywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjI3Ljk1MzAxNTIxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIwMzIwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODoyMToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jXFxuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstbXEuY1xcbisrKyBiL2Jsb2NrL2Jsay1tcS5jXFxuQEAgLTIxMjYsNiArMjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFxcdFxcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG4gXFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xcbmluZGV4IGFmMjdmZDNkZjhkNDYuLjFlYTY1YjVlYjI1Y2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xcbkBAIC0xOTYwLDEzICsxOTYwLDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRcXHRcXHRjbWQtXFx1MDAzZXJlc3VsdCA9IERJRF9OT19DT05ORUNUIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFxcdTAwM2NcXHUwMDNjIDE2O1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuXFxuLVxcdFxcdCAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kXFxuLVxcdFxcdCAqIGFnYWluLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuLVxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbitcXHRcXHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXFxuIFxcdFxcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMToyOC41NzQyODc2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQ5NDY5Mzc5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdFwiLFxuICAgIFwic2NzaV9xdWV1ZV9ycVwiLFxuICAgIFwic2NzaV9jbGVhbnVwX3JxXCIsXG4gICAgXCJzY3NpX21xX3VuaW5pdF9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhMWJjYjgyMWU5YzZlZTIxMzNkMDVjYzIxMzhjYTc1OTJhMzA3MDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODoyMToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmNcbmluZGV4IGEyNmExMWM3M2VlM2UuLmViM2E0ODEyMTFkMGIgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEuY1xuKysrIGIvYmxvY2svYmxrLW1xLmNcbkBAIC0yMTI2LDYgKzIxMjYsNyBAQCBib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHRcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRibGtfbXFfY2xlYW51cF9ycShycSk7XG4gXHRcdFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xuIFx0XHR9XG4gXHR9IHdoaWxlICghbGlzdF9lbXB0eShsaXN0KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuaW5kZXggYWYyN2ZkM2RmOGQ0Ni4uMWVhNjViNWViMjVjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuY1xuQEAgLTE5NjAsMTMgKzE5NjAsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHNjc2lfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9OT19DT05ORUNUIFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNtZC1cdTAwM2VyZXN1bHQgPSBESURfRVJST1IgXHUwMDNjXHUwMDNjIDE2O1xuLVx0XHQvKlxuLVx0XHQgKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB3aGVuXG4tXHRcdCAqIHdlIGhpdCBhbiBlcnJvciwgYXMgd2Ugd2lsbCBuZXZlciBzZWUgdGhpcyBjb21tYW5kXG4tXHRcdCAqIGFnYWluLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHJlcS1cdTAwM2VycV9mbGFncyBcdTAwMjYgUlFGX0RPTlRQUkVQKVxuLVx0XHRcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xuK1x0XHQvKiBibGstbXEgd2lsbCBjbGVhbnVwIG91ciByZXNvdXJjZXMgYXMgdGhlIHJxIHdpbGwgZW5kICovXG4gXHRcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjI4LjU3NDI4ODk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxNDQ3MzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZmlsZXMgYW5kIGZ1bmN0aW9ucy4gSSBzZWUgY2hhbmdlcyBpbiBgYmxvY2svYmxrLW1xLmNgIHdpdGhpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgIGFuZCBpbiBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIHNwZWNpZmljYWxseSBpbiB0aGUgYHNjc2lfcXVldWVfcnFgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlc2UgY2hhbmdlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbkluIGBibGstbXEuY2AsIHRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgY2FsbGluZyBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLiBUaGUgY29tbWVudCBpbiBgc2NzaV9saWIuY2Agc3VnZ2VzdHMgd2Ugd2VyZSBwcmV2aW91c2x5IGNhbGxpbmcgc29tZSBjbGVhbiB1cCBvbiBlcnJvciB3aGVuIGEgc3BlY2lmaWMgZmxhZyB3YXMgc2V0IG9uIHRoZSByZXF1ZXN0LiBOb3csIHRoYXQncyByZW1vdmVkIGFuZCBhIGNvbW1lbnQgc2F5cyBibGstbXEgd2lsbCBoYW5kbGUgY2xlYW51cC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGludm9sdmVzIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IGZyZWVpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIG9yIGFzc29jaWF0ZWQgZGF0YSB3aGVuIHJlcXVlc3RzIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IuIFRoZSBjb21tZW50ZWQtb3V0IGNvZGUgaW4gYHNjc2lfbGliLmNgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGlmIHRoZSByZXF1ZXN0IGZhaWxzIChzcGVjaWZpY2FsbHksIGBESURfTk9fQ09OTkVDVGAgb3IgYERJRF9FUlJPUmApLiBJdCBhcHBlYXJzIHRoaXMgcmVzcG9uc2liaWxpdHkgaXMgYmVpbmcgc2hpZnRlZCBpbnRvIHRoZSBibG9jayBsYXllciwgd2hpY2ggd291bGQgbWVhbiBgYmxrX21xX2NsZWFudXBfcnEoKWAgaXMgcHJvYmFibHkgdGhlIG1hZ2ljIGZ1bmN0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgYmxrX21xX2NsZWFudXBfcnEoKWAgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVuY3Rpb24gaW4gdGhlIGBibGstbXEuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSByZXF1ZXN0IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBhIFNDU0kgZHJpdmVyLCBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIHdoZW4gYSBTQ1NJIGNvbW1hbmQgZXJyb3JzIG91dC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjbGVhbnVwIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHJlc291cmNlIGxlYWtzLiBVbHRpbWF0ZWx5IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHNhZmUgYW5kIGNvcnJlY3RseSBoYW5kbGVzIGFsbCB0aGUgcG90ZW50aWFsIGVycm9yIHBhdGhzLCBhbmQgdGhhdCB0aGUgcmVzb3VyY2UgY2xlYW51cCBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NiwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjM3LjI4ODc2NTI3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcdCAqL1xcbjIxMDE6XFx0XFx0cXVldWVkID0gMDtcXG4yMTAyOlxcdFxcdGRvIHtcXG4yMTAzOlxcdFxcdFxcdHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSBiZDtcXG4yMTA0OlxcdFxcbjIxMDU6XFx0XFx0XFx0cnEgPSBsaXN0X2ZpcnN0X2VudHJ5KGxpc3QsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpO1xcbjIxMDY6XFx0XFxuMjEwNzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoaGN0eCAhPSBycS1cXHUwMDNlbXFfaGN0eCk7XFxuMjEwODpcXHRcXHRcXHRwcmVwID0gYmxrX21xX3ByZXBfZGlzcGF0Y2hfcnEocnEsIGdldF9idWRnZXQpO1xcbjIxMDk6XFx0XFx0XFx0aWYgKHByZXAgIT0gUFJFUF9ESVNQQVRDSF9PSylcXG4yMTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMTE6XFx0XFxuMjExMjpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG4yMTEzOlxcdFxcbjIxMTQ6XFx0XFx0XFx0YmQucnEgPSBycTtcXG4yMTE1OlxcdFxcdFxcdGJkLmxhc3QgPSBsaXN0X2VtcHR5KGxpc3QpO1xcbjIxMTY6XFx0XFxuMjExNzpcXHRcXHRcXHRyZXQgPSBxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZXF1ZXVlX3JxKGhjdHgsIFxcdTAwMjZiZCk7XFxuMjExODpcXHRcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjIxMTk6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX09LOlxcbjIxMjA6XFx0XFx0XFx0XFx0cXVldWVkKys7XFxuMjEyMTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTIyOlxcdFxcdFxcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcXG4yMTIzOlxcdFxcdFxcdFxcdG5lZWRzX3Jlc291cmNlID0gdHJ1ZTtcXG4yMTI0OlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjIxMjU6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX0RFVl9SRVNPVVJDRTpcXG4yMTI2OlxcdFxcdFxcdFxcdGJsa19tcV9oYW5kbGVfZGV2X3Jlc291cmNlKHJxLCBsaXN0KTtcXG4yMTI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMjg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yMTI5OlxcdFxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG4yMTMwOlxcdFxcdFxcdFxcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcXG4yMTMxOlxcdFxcdFxcdH1cXG4yMTMyOlxcdFxcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG4yMTMzOlxcdG91dDpcXG4yMTM0OlxcdFxcdC8qIElmIHdlIGRpZG4ndCBmbHVzaCB0aGUgZW50aXJlIGxpc3QsIHdlIGNvdWxkIGhhdmUgdG9sZCB0aGUgZHJpdmVyXFxuMjEzNTpcXHRcXHQgKiB0aGVyZSB3YXMgbW9yZSBjb21pbmcsIGJ1dCB0aGF0IHR1cm5lZCBvdXQgdG8gYmUgYSBsaWUuXFxuMjEzNjpcXHRcXHQgKi9cXG4yMTM3OlxcdFxcdGlmICghbGlzdF9lbXB0eShsaXN0KSB8fCByZXQgIT0gQkxLX1NUU19PSylcXG4yMTM4OlxcdFxcdFxcdGJsa19tcV9jb21taXRfcnFzKGhjdHgsIHF1ZXVlZCwgZmFsc2UpO1xcbjIxMzk6XFx0XFxuMjE0MDpcXHRcXHQvKlxcbjIxNDE6XFx0XFx0ICogQW55IGl0ZW1zIHRoYXQgbmVlZCByZXF1ZXVpbmc/IFN0dWZmIHRoZW0gaW50byBoY3R4LVxcdTAwM2VkaXNwYXRjaCxcXG4yMTQyOlxcdFxcdCAqIHRoYXQgaXMgd2hlcmUgd2Ugd2lsbCBjb250aW51ZSBvbiBuZXh0IHF1ZXVlIHJ1bi5cXG4yMTQzOlxcdFxcdCAqL1xcbjIxNDQ6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7XFxuMjE0NTpcXHRcXHRcXHRib29sIG5lZWRzX3Jlc3RhcnQ7XFxuMjE0NjpcXHRcXHRcXHQvKiBGb3Igbm9uLXNoYXJlZCB0YWdzLCB0aGUgUkVTVEFSVCBjaGVjayB3aWxsIHN1ZmZpY2UgKi9cXG4yMTQ3OlxcdFxcdFxcdGJvb2wgbm9fdGFnID0gcHJlcCA9PSBQUkVQX0RJU1BBVENIX05PX1RBRyBcXHUwMDI2XFx1MDAyNlxcbjIxNDg6XFx0XFx0XFx0XFx0KChoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX1RBR19RVUVVRV9TSEFSRUQpIHx8XFxuMjE0OTpcXHRcXHRcXHRcXHRibGtfbXFfaXNfc2hhcmVkX3RhZ3MoaGN0eC1cXHUwMDNlZmxhZ3MpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MzcuMjg5NDk0ODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDA6XFx0b3V0X2RlY190YXJnZXRfYnVzeTpcXG4xOTQxOlxcdFxcdGlmIChzY3NpX3RhcmdldChzZGV2KS1cXHUwMDNlY2FuX3F1ZXVlIFxcdTAwM2UgMClcXG4xOTQyOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNjc2lfdGFyZ2V0KHNkZXYpLVxcdTAwM2V0YXJnZXRfYnVzeSk7XFxuMTk0MzpcXHRvdXRfcHV0X2J1ZGdldDpcXG4xOTQ0OlxcdFxcdHNjc2lfbXFfcHV0X2J1ZGdldChxLCBjbWQtXFx1MDAzZWJ1ZGdldF90b2tlbik7XFxuMTk0NTpcXHRcXHRjbWQtXFx1MDAzZWJ1ZGdldF90b2tlbiA9IC0xO1xcbjE5NDY6XFx0XFx0c3dpdGNoIChyZXQpIHtcXG4xOTQ3OlxcdFxcdGNhc2UgQkxLX1NUU19PSzpcXG4xOTQ4OlxcdFxcdFxcdGJyZWFrO1xcbjE5NDk6XFx0XFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxcbjE5NTA6XFx0XFx0XFx0aWYgKHNjc2lfZGV2aWNlX2Jsb2NrZWQoc2RldikpXFxuMTk1MTpcXHRcXHRcXHRcXHRyZXQgPSBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcXG4xOTUyOlxcdFxcdFxcdGJyZWFrO1xcbjE5NTM6XFx0XFx0Y2FzZSBCTEtfU1RTX0FHQUlOOlxcbjE5NTQ6XFx0XFx0XFx0Y21kLVxcdTAwM2VyZXN1bHQgPSBESURfQlVTX0JVU1kgXFx1MDAzY1xcdTAwM2MgMTY7XFxuMTk1NTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUClcXG4xOTU2OlxcdFxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbjE5NTc6XFx0XFx0XFx0YnJlYWs7XFxuMTk1ODpcXHRcXHRkZWZhdWx0OlxcbjE5NTk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzY3NpX2RldmljZV9vbmxpbmUoc2RldikpKVxcbjE5NjA6XFx0XFx0XFx0XFx0Y21kLVxcdTAwM2VyZXN1bHQgPSBESURfTk9fQ09OTkVDVCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xOTYxOlxcdFxcdFxcdGVsc2VcXG4xOTYyOlxcdFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0VSUk9SIFxcdTAwM2NcXHUwMDNjIDE2O1xcbjE5NjM6XFx0XFx0XFx0LyogYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZCAqL1xcbjE5NjQ6XFx0XFx0XFx0c2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7XFxuMTk2NTpcXHRcXHRcXHRicmVhaztcXG4xOTY2OlxcdFxcdH1cXG4xOTY3OlxcdFxcdHJldHVybiByZXQ7XFxuMTk2ODpcXHR9XFxuMTk2OTpcXHRcXG4xOTcwOlxcdHN0YXRpYyBpbnQgc2NzaV9tcV9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4xOTcxOlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBoY3R4X2lkeCwgaW50IG51bWFfbm9kZSlcXG4xOTcyOlxcdHtcXG4xOTczOlxcdFxcdHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2V0LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4xOTc0OlxcdFxcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbjE5NzU6XFx0XFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4xOTc2OlxcdFxcdGludCByZXQgPSAwO1xcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRjbWQtXFx1MDAzZXNlbnNlX2J1ZmZlciA9XFxuMTk3OTpcXHRcXHRcXHRrbWVtX2NhY2hlX2FsbG9jX25vZGUoc2NzaV9zZW5zZV9jYWNoZSwgR0ZQX0tFUk5FTCwgbnVtYV9ub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjE6MzcuMjg5NzcwODI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMTQ2MTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBibGtfbXFfY2xlYW51cF9ycWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBibGtfbXFfY2xlYW51cF9ycWAuIE15IGZpcnN0IG1vdmU/IERlZmluaXRlbHkgYSBgZ3JlcGAgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIHdoZXJlIGl0J3MgY2FsbGVkIHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQ7IHdobyBjYWxscyBpdCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcz8gVGhhdCBncmVwIHdpbGwgYmUgbXkgaW5pdGlhbCBtYXAgdG8gZmlndXJlIG91dCB0aGUgY29kZSdzIGNhbGwgZ3JhcGguIEhvcGVmdWxseSwgdGhlIHJlc3VsdHMgYXJlIG1hbmFnZWFibGUgYW5kIHF1aWNrbHkgcG9pbnQgbWUgdG8gdGhlIGltcG9ydGFudCBwYXJ0cy4gVGhlbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBteSBoeXBvdGhlc2VzIGJhc2VkIG9uIHRob3NlIGxvY2F0aW9ucy4gVGhlIG9iamVjdGl2ZSwgb2YgY291cnNlLCBpcyB0byBncmFzcCB0aGUgcm9sZSBhbmQgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjM5LjIxMTIzODM1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwNTg0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9jbGVhbnVwX3JxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTIwODU9Ym9vbCBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTIxMjgtXFx0XFx0ZGVmYXVsdDpcXG5ibG9jay9ibGstbXEuYzoyMTI5OlxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcXG5ibG9jay9ibGstbXEuYy0yMTMwLVxcdFxcdFxcdGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcnEuYz0zNjk9c3RhdGljIGludCBtYXBfcmVxdWVzdChzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLXJxLmMtMzk5LVxcdFxcdFxcdGJsa19ycV91bnByZXBfY2xvbmUoY2xvbmUpO1xcbmRyaXZlcnMvbWQvZG0tcnEuYzo0MDA6XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEoY2xvbmUpO1xcbmRyaXZlcnMvbWQvZG0tcnEuYy00MDEtXFx0XFx0XFx0dGlvLVxcdTAwM2V0aS1cXHUwMDNldHlwZS1cXHUwMDNlcmVsZWFzZV9jbG9uZV9ycShjbG9uZSwgXFx1MDAyNnRpby1cXHUwMDNlaW5mbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTEwMjA9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6MTAzOTpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NsZWFudXBfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTA0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjQyLjA2MTgyODIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODkzMDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyJ3MgTVEgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGluY2x1ZGUvbGludXgvYmxrLW1xLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTAzOS4gSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIHdpdGggdGhlIG11bHRpLXF1ZXVlIGJsb2NrIGxheWVyLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGVmaW5pdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHRoZSBjb3JlIHF1ZXVlIG1hbmFnZW1lbnQgb3IgSS9PIHN1Ym1pc3Npb24gcGF0aHMuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgYXJlYSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIGVucXVldWUvZGVxdWV1ZSBsb2dpYywgb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIHF1ZXVlcyBhbmQgdGhlIHJlcXVlc3RzIHdpdGhpbiB0aGVtLiBJdCBjb3VsZCBhbHNvIHBvaW50IHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gY29tbWFuZCBtZXJnaW5nLCBvciBoYW5kbGluZyBvZiBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBibG9jayBsYXllci4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBsaW5lIDEwMzkgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0NC4zNTExMzEzMjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGstbXEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM1OlxcdCNkZWZpbmUgaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMDM2OlxcdFxcdGZvciAoKGkpID0gMDsgKGkpIFxcdTAwM2MgKGhjdHgpLVxcdTAwM2Vucl9jdHggXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMTAzNzpcXHRcXHQgICAgICh7IGN0eCA9IChoY3R4KS1cXHUwMDNlY3R4c1soaSldOyAxOyB9KTsgKGkpKyspXFxuMTAzODpcXHRcXG4xMDM5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAocnEtXFx1MDAzZXEtXFx1MDAzZW1xX29wcy1cXHUwMDNlY2xlYW51cF9ycSlcXG4xMDQyOlxcdFxcdFxcdHJxLVxcdTAwM2VxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZWNsZWFudXBfcnEocnEpO1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbjEwNDY6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnFfaXNfc3luYyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0OTpcXHR7XFxuMTA1MDpcXHRcXHRyZXR1cm4gb3BfaXNfc3luYyhycS1cXHUwMDNlY21kX2ZsYWdzKTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTtcXG4xMDU0OlxcdGludCBibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCByZXF1ZXN0ICpycV9zcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjQ0LjM1MTI0MjEzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM3ODMzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCbG9jayBMYXllcidzIFJlcXVlc3QgQ2xlYW51cCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYmxvY2sgcmVxdWVzdHMgZ2V0IGNsZWFuZWQgdXAgd2l0aGluIHRoZSBibGstbXEgZnJhbWV3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gTm93LCB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGxvb2tzIGZhbWlsaWFyOyBpdCdzIGNhbGxpbmcgYHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEocnEpYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgdGhpcyBjaGFpbiBvZiBmdW5jdGlvbiBjYWxscy4gU28sIHRoZSBrZXJuZWwncyBsaWtlbHkgdXNpbmcgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGltcGxlbWVudCBzb21lIGRldmljZSBzcGVjaWZpYyBjbGVhbiB1cCBmdW5jdGlvbmFsaXR5LlxuXG5TbywgbGV0J3Mgc3RhcnQgd2l0aCBgY2xlYW51cF9ycWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGZvY3VzIG9uIHRvIHN0YXJ0IHdpdGgsIEkgbmVlZCB0byBrbm93IGFsbCB0aGUgZGV2aWNlcyB0aGF0IGhhdmUgaW1wbGVtZW50ZWQgdGhpcy4gSSB3aWxsIGZpcmUgdXAgdGhlIHNlYXJjaCB0b29scyBhbmQgaHVudCBkb3duIGFsbCBpbnN0YW5jZXMgb2YgYGNsZWFudXBfcnFgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGhhcHBlbmluZyBhbmQgd2hpY2ggZHJpdmVycyBhcmUgdXNpbmcgaXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgY2xlYW4gdXAgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0Ni45ODkwNzkwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTg3MTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmNsZWFudXBfcnFcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo0OS43NDA5NjEyNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY1OTAwMzE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2NzaV9jbGVhbnVwX3JxYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzY3NpX2NsZWFudXBfcnFgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0IOKAkyB3aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uIGNhbGw/IElzIGl0IGJlaW5nIGNhbGxlZCBhZnRlciBhIGhhcmR3YXJlIHJlc2V0LCBhbiBJL08gZXJyb3IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gcmVxdWVzdCBxdWV1ZSBjbGVhbnVwLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcmVzb3VyY2VzIHRoaXMgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgc3BpbmxvY2tzIGludm9sdmVkPyBXaGF0J3MgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYWRhcHRlcidzIERNQSBzdHJ1Y3R1cmVzPyBJJ20gaG9waW5nIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0YWdnZWQgcXVldWluZywgc2Vuc2UgZGF0YSwgYW5kIHBvdGVudGlhbGx5IGVycm9yIHJldHJpZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBwcm9wZXJseSBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgU0NTSSBlcnJvciBjb2RlcyBhbmQgaG93IGl0IGF2b2lkcyBhbnkgZG91YmxlLWZyZWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBTQ1NJIGxheWVyLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlIGFuZCBpbnRlcnJ1cHQtc2FmZS4gTGV0J3Mgc2VlIGhvdyBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjUyLjM5OTk2ODE3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTA0MDI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2NsZWFudXBfcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTI4Mz1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2FsbG9jX3JlcXVlc3QpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI4OC0gKi9cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjg5OnN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5MC17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo1NC45MjEwMTYxNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzNDU5Mzk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIFNDU0kgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBTQ1NJIGxpYnJhcnkgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgd2l0aGluIGl0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTI4OS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgU0NTSSBpbnRlcmFjdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3R1ZmYgdGhlcmUgYWJvdXQgZXJyb3IgcmVjb3ZlcnksIGNvbW1hbmQgcmV0cmllcywgb3IgcGVyaGFwcyBldmVuIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIFNDU0kgZGV2aWNlIG1hbmFnZW1lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIxOjU3LjE1NTYxMjc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI4MDpcXHRcXHRcXHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xcbjEyODE6XFx0XFx0cmV0dXJuIHJxO1xcbjEyODI6XFx0fVxcbjEyODM6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9hbGxvY19yZXF1ZXN0KTtcXG4xMjg0OlxcdFxcbjEyODU6XFx0LypcXG4xMjg2OlxcdCAqIE9ubHkgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXNuJ3QgY29tcGxldGVkIGJ5IFNDU0ksIGFuZCBub3QgZnJlZWQgYnlcXG4xMjg3OlxcdCAqIFNDU0lcXG4xMjg4OlxcdCAqL1xcbjEyODk6XFx0c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4xMjkwOlxcdHtcXG4xMjkxOlxcdFxcdHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbjEyOTI6XFx0XFxuMTI5MzpcXHRcXHRjbWQtXFx1MDAzZWZsYWdzID0gMDtcXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0aWYgKHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUCkge1xcbjEyOTY6XFx0XFx0XFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XFxuMTI5NzpcXHRcXHRcXHRycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNj0gflJRRl9ET05UUFJFUDtcXG4xMjk4OlxcdFxcdH1cXG4xMjk5OlxcdH1cXG4xMzAwOlxcdFxcbjEzMDE6XFx0LyogQ2FsbGVkIGJlZm9yZSBhIHJlcXVlc3QgaXMgcHJlcGFyZWQuIFNlZSBhbHNvIHNjc2lfbXFfcHJlcF9mbigpLiAqL1xcbjEzMDI6XFx0dm9pZCBzY3NpX2luaXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKVxcbjEzMDM6XFx0e1xcbjEzMDQ6XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gc2NzaV9jbWRfdG9fcnEoY21kKTtcXG4xMzA1OlxcdFxcbjEzMDY6XFx0XFx0aWYgKCFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpIFxcdTAwMjZcXHUwMDI2ICEoY21kLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDTURfSU5JVElBTElaRUQpKSB7XFxuMTMwNzpcXHRcXHRcXHRjbWQtXFx1MDAzZWZsYWdzIHw9IFNDTURfSU5JVElBTElaRUQ7XFxuMTMwODpcXHRcXHRcXHRzY3NpX2luaXRpYWxpemVfcnEocnEpO1xcbjEzMDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMTo1Ny4xNTU3NjY4NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMTU2MjA3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogU0NTSSBSZXF1ZXN0IENsZWFudXAgaW4gYmxrLW1xKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBzY3NpX2NsZWFudXBfcnFgIGlzIG5vdyBiZWluZyBjYWxsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgd2l0aGluIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YC4gV2UncmUgZGVhbGluZyB3aXRoIFNDU0kgY29tbWFuZCBjbGVhbnVwIGlmIGBSUUZfRE9OVFBSRVBgIGlzIHNldCwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIGBxdWV1ZV9ycWAgZmFpbHMuIFByZXZpb3VzbHksIG1hbnVhbCBjbGVhbnVwIHdhcyBkb25lLCBub3cgaXQncyBoYW5kbGVkIHRocm91Z2ggYSBtb3JlIGdlbmVyYWxpemVkIGBibGtfbXFfY2xlYW51cF9ycWAuIFRoaXMgY2hhbmdlIGFmZmVjdHMgYWxsIGJsb2NrIGRyaXZlcnMsIGdpdmVuIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGFuZCB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHkuIEJsb2NrIEkvTyBhbmQgU0NTSSBhcmUgY29yZSwgY29yZSwgY29yZS4gV2UncmUgdGFsa2luZyBhYm91dCBibGstbXEsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBibG9jayBJL08gZGlzcGF0Y2gsIGFuZCB0aGUgU0NTSSBzdWJzeXN0ZW0gaXMgdXNlZCBldmVyeXdoZXJlLCBpbmNsdWRpbmcgUUVNVSwgc3RhbmRhcmQga2VybmVscywgdmlydGlvLXNjc2ksIGFuZCBhbGwgc29ydHMgb2Ygb3RoZXIgZW11bGF0aW9ucywgcGFzcy10aHJvdWdocywgYW5kIG1hc3Mgc3RvcmFnZSBkZXZpY2VzLiBFdmVyeSBibG9jayBJL08gcmVxdWVzdCBnb2VzIHRocm91Z2ggYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCwgYW5kIHRoZSBTQ1NJIHF1ZXVlIGZ1bmN0aW9uIGBzY3NpX3F1ZXVlX3JxYCBpcyBhIGtleSBleGFtcGxlLCBzbyB0aGlzIGlzIGEgaG90IHBhdGguICBXaGVuIGBxdWV1ZV9ycWAgZmFpbHMg4oCTIGBCTEtfU1RTX0lPRVJSYCwgYEJMS19TVFNfVEFSR0VUYCwgZXRjLiDigJMgYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCdzIGRlZmF1bHQgcGF0aCBub3cgaW52b2tlcyBgYmxrX21xX2NsZWFudXBfcnFgLCB3aGljaCB0aGVuIGNhbGxzIGBzY3NpX2NsZWFudXBfcnFgLiBUaGlzIGNoYW5nZXMgdGhlIGVudGlyZSBsaWZlY3ljbGUgZm9yIGhvdyBibG9jayBkcml2ZXJzIHJlYWN0IHRvIGVycm9ycywgc28gdGhlcmUgaXMgY2xlYXJseSBhIGxhcmdlIGltcGFjdC4gTW9kaWZpY2F0aW9uIG9mIGBibG9jay9ibGstbXEuY2AgYW5kIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AgY29uZmlybXMgdGhpcy4gIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCB0aGUgc3ltYm9scy4gV2UgbmVlZCB0byBiZSBzcGVjaWZpYyBhYm91dCB3aGF0IHdlJ3JlIHRhcmdldGluZy4gV2UncmUgbG9va2luZyBhdCBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAgYW5kIGBzY3NpX2NsZWFudXBfcnFgLCBhbmQgYGJsa19tcV9jbGVhbnVwX3JxYC4gVGhlIGdvYWwgaXMgdG8gZXhhbWluZSB3aGVyZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCBpcyBub24tc3RhdGljLCBzbyB3ZSBzaG91bGQgYmUgZ29vZCB0aGVyZS4gYHNjc2lfcXVldWVfcnFgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIHdlIG11c3QgY2hlY2sgaW4gcmVsYXRpb24gdG8gdGhlIGNvbXBpbGVyIGJlaGF2aW9yLiBgc2NzaV9jbGVhbnVwX3JxYCBpcyBhbHNvIHN0YXRpYywgc28gd2UgbmVlZCB0byBzZWUgaG93IHRoZSBjb21waWxlciBpcyBoYW5kbGluZyBpdC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSB2bWxpbnV4IHN5bWJvbHMgZm9yIHRoZXNlIGZpbGVzLCBhbmQgY2hlY2sgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5Ib3dldmVyLCBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgIGlzIHViaXF1aXRvdXM7IGl0J3MgdGhlIGNvcmUgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYmxrLW1xISBXZSBtdXN0IGF2b2lkIGxpc3RpbmcgdHJ1bHkgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgd291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBXZSdyZSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMsIGxpa2UgYHNjc2lfcXVldWVfcnFgIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCBhbmQgd2hlcmUgdGhvc2UgYXJlIGNhbGxlZC4gV2UgYXJlIGFsc28gaW50ZXJlc3RlZCBpbiBhbnkgZHJpdmVycy9lbnRyeXBvaW50cyB0aGF0IGFyZSBTQ1NJLXNwZWNpZmljLiBUaGUgaW1wb3J0YW50IG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCBhbmQgYHNjc2lfY2xlYW51cF9ycWAuIFdlIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnlwb2ludHMgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjowNy40NzEzOTA0ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU3MDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX21xX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjA3MT1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2luaXRfbGltaXRzKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDcyLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDc0LVxcdC5nZXRfYnVkZ2V0XFx0PSBzY3NpX21xX2dldF9idWRnZXQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDk0PXN0YXRpYyB2b2lkIHNjc2lfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMDAtXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjEwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEwMi1cXHQuZ2V0X2J1ZGdldFxcdD0gc2NzaV9tcV9nZXRfYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEyMj1pbnQgc2NzaV9tcV9zZXR1cF90YWdzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjEzNS1cXHRpZiAoc2hvc3QtXFx1MDAzZWhvc3R0LVxcdTAwM2Vjb21taXRfcnFzKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzY6XFx0XFx0dGFnX3NldC1cXHUwMDNlb3BzID0gXFx1MDAyNnNjc2lfbXFfb3BzO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMzctXFx0ZWxzZVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMzg6XFx0XFx0dGFnX3NldC1cXHUwMDNlb3BzID0gXFx1MDAyNnNjc2lfbXFfb3BzX25vX2NvbW1pdDtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTM5LVxcdHRhZ19zZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyA9IHNob3N0LVxcdTAwM2Vucl9od19xdWV1ZXMgPyA6IDE7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMjEwPXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2VfZnJvbV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTMtXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjIxNDpcXHRpZiAocS1cXHUwMDNlbXFfb3BzID09IFxcdTAwMjZzY3NpX21xX29wc19ub19jb21taXQgfHxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyMjE1OlxcdCAgICBxLVxcdTAwM2VtcV9vcHMgPT0gXFx1MDAyNnNjc2lfbXFfb3BzKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIyMTYtXFx0XFx0c2RldiA9IHEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MDcuNjA3OTcyNjU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzI0NTUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFNDU0kgUmVxdWVzdCBRdWV1ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBTQ1NJIHJlcXVlc3QgcXVldWUgc2l0dWF0aW9uLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYHNjc2lfcXVldWVfcnFgIGFuZCBpdHMgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBjb250ZXh0IGFyb3VuZCB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBob3cgYHNjc2lfcXVldWVfcnFgIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBgc2NzaV9tcV9vcHNgIHN0cnVjdHVyZTsgc2VlbXMgbGlrZSBpdCBpcyBkZWZpbmVkIGFzOiBgLnF1ZXVlX3JxID0gc2NzaV9xdWV1ZV9ycSxgIGFuZCBgLmNsZWFudXBfcnEgPSBzY3NpX2NsZWFudXBfcnEsYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IG15IGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByaWdodCBzZXR0aW5ncyBmb3IgU0NTSSBhbmQgYmxrLW1xLiBibGstbXEgaXMgZGVmaW5pdGVseSBjb3JlIGJsb2NrIGxheWVyIHRlcnJpdG9yeSDigJMgYENPTkZJR19CTE9DS2AgY29uZmlybWVkLiBTQ1NJIHNob3VsZCBiZSBlaXRoZXIgYENPTkZJR19TQ1NJYCBvciBgU0NTSV9NT0RgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIGluIHRoZSBgZHJpdmVycy9zY3NpYCBkaXJlY3RvcnkgdG8gYmUgc3VyZS4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQga25vd2luZyB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxMy4yODA0MzEyODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUzMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2xpYlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL01ha2VmaWxlPTI0PUNPTlRFWFRfQU5BTFlTSVNfc2NzaV9pb2N0bC5vIDo9IHlcXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MjU6Q09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYi5vIDo9IHlcXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMjYtQ09OVEVYVF9BTkFMWVNJU19zY3NpX2xpYl9kbWEubyA6PSB5XFxuLS1cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU9MTgyPXNjc2lfbW9kLXlcXHRcXHRcXHQrPSBzY3NpLm8gaG9zdHMubyBzY3NpX2lvY3RsLm8gXFxcXFxcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxODM6XFx0XFx0XFx0XFx0ICAgc2NzaWNhbS5vIHNjc2lfZXJyb3IubyBzY3NpX2xpYi5vXFxuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE4NC1zY3NpX21vZC0kKENPTkZJR19TQ1NJX0NPTlNUQU5UUykgKz0gY29uc3RhbnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MTMuMzkzOTczOTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NjMxMDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBgc2NzaV9saWIub2AuIEkga25vdyB0aGF0J3MgcGFydCBvZiBgc2NzaV9tb2RgLCB3aGljaCBnZXRzIGNvbXBpbGVkIHdoZW4gd2UgaGF2ZSBgQ09ORklHX1NDU0lgIHNldC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSdtIGFsc28gc2VlaW5nIGBibG9jay9ibGstbXEuY2AsIGFuZCB0aGF0J3MgbGlua2VkIHRvIGBibG9jay9NYWtlZmlsZWAuIFRoZSBgYmxrLW1xLmNgIG1vZHVsZSBpcyBidWlsdCB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIFNpbmNlIEkgbmVlZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxNS45OTAyODkyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1tcVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTA6XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTExLVxcdFxcdFxcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjE2LjA3MjU2Mzc2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQyNTA0NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBTQ1NJL0Jsb2NrIExheWVyIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBvYnZpb3VzIOKAkyBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTE9DS2AgYW5kIGBDT05GSUdfU0NTSWAgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBibG9jayBsYXllciBhbmQgdGhlIFNDU0kgc3Vic3lzdGVtLCByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGFsd2F5cyBnb29kIHRvIGNvbmZpcm0gdGhlIGJhc2ljcy5cblxuTm93LCBmb3IgYSBkZWVwZXIgZGl2ZSwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHJlcXVlc3QgZGlzcGF0Y2ggYW5kIGNsZWFudXAuIEknbSB0aGlua2luZyBvZiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCBgc2NzaV9xdWV1ZV9ycWAsIGFuZCBgc2NzaV9jbGVhbnVwX3JxYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBzeW1ib2xzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gZm9sbG93IHVwIG9uIHRoaXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgc2NzaV9tcV91bmluaXRfY21kYC4gSXMgdGhhdCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBzY3NpX2NsZWFudXBfcnFgPyBUaGF0J3MgYSBjcnVjaWFsIHJlbGF0aW9uc2hpcCB0byBuYWlsIGRvd24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNvbW1hbmRzIGFyZSBjbGVhbmVkIHVwIHdoZW4gdXNpbmcgbWVzc2FnZSBxdWV1ZXMuIEkgc2hvdWxkIGNoZWNrIGBzY3NpX21xX3VuaW5pdF9jbWRgJ3Mgc291cmNlIGNvZGUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MTguNjE1MDcyOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4NjMwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9tcV91bmluaXRfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc2NzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz01OD1zdGF0aWMgREVGSU5FX01VVEVYKHNjc2lfc2Vuc2VfY2FjaGVfbXV0ZXgpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTU5LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYwOnN0YXRpYyB2b2lkIHNjc2lfbXFfdW5pbml0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYxLVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MTE1PXN0YXRpYyB2b2lkIHNjc2lfbXFfcmVxdWV1ZV9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBsb25nIG1zZWNzKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTIwLVxcdFxcdHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2PSB+UlFGX0RPTlRQUkVQO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyMTpcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjItXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTYyNj1FWFBPUlRfU1lNQk9MX0dQTChzY3NpX2ZyZWVfc2d0YWJsZXMpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyNy1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzo2Mjg6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02Mjkte1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NjY0PXN0YXRpYyBib29sIHNjc2lfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjk1LVxcdCAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjY5NjpcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02OTctXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjg5PXN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjk1LVxcdGlmIChycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApIHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxMjk2OlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTctXFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xNTY3PXN0YXRpYyB2b2lkIHNjc2lfY29tcGxldGUoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTU3NC1cXHRcXHRXQVJOX09OX09OQ0UoIWJsa19ycV9pc19wYXNzdGhyb3VnaChzY3NpX2NtZF90b19ycShjbWQpKSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTU3NTpcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xNTc2LVxcdFxcdF9fYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCBzY3NpX3Jlc3VsdF90b19ibGtfc3RhdHVzKGNtZC1cXHUwMDNlcmVzdWx0KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xODU0PXN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTUtXFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTk1NjpcXHRcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xOTU3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoxOC43NDg5NDQ3NzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNDI1ODE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHRoaXMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiB0aGUgY29yZSBibG9jayBsYXllcidzIGRpc3BhdGNoIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyByZXF1ZXN0IGRpc3BhdGNoIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGFuZCB0aGUgU0NTSSByZXF1ZXN0IGV4ZWN1dGlvbiBhbmQgY2xlYW51cCBwYXRoLCB3aGljaCBpcyBsaW5rZWQgdGhyb3VnaCBgc2NzaV9xdWV1ZV9ycWAgY2FsbGluZyBgYmxrX21xX2NsZWFudXBfcnFgLCBhbmQgdGhlbiBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgc2NzaV9jbGVhbnVwX3JxYC4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlcm5pbmcgdGhlIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUuIEkgY2FuIGltbWVkaWF0ZWx5IHRlbGwgdGhhdCB0aGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgZXNwZWNpYWxseSBzaW5jZSB0aGVzZSBjb21wb25lbnRzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5Gb3IgYHNldC1yZXN1bHRzYCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci1oYW5kbGluZyBwYXRoIGluIHRoZSBibG9jayBsYXllciwgYW5kIHNpbXBsaWZpZXMgU0NTSSBjb21tYW5kIGVycm9yIGNsZWFudXAgaW4gdGhhdCBgc2NzaV9xdWV1ZV9ycSgpYCBmdW5jdGlvbi4gSXQncyBhbHRlcmluZyB0aGUgcmVxdWVzdCBsaWZlY3ljbGUgYWNyb3NzIHRoZSBkaXNwYXRjaCBwcm9jZXNzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciB1bmV4cGVjdGVkIHN0YXRlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIGBzY3NpX3F1ZXVlX3JxYCwgYHNjc2lfY2xlYW51cF9ycWAsIGFuZCBgc2NzaV9tcV91bmluaXRfY21kYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQuIEknbGwgaW5jbHVkZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGBCTE9DS2AgYW5kIGBTQ1NJYCwgdG8gZW5zdXJlIHdlJ3JlIHRlc3RpbmcgdGhlIGNoYW5nZXMgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy5cblxuQWxyaWdodCwgdGltZSB0byB0cmlnZ2VyIHRoYXQgdG9vbCBjYWxsIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuMzUzMjA1NTQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MDExNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9kaXNwYXRjaF9ycV9saXN0XCIsXG4gICAgXCJzY3NpX3F1ZXVlX3JxXCIsXG4gICAgXCJzY3NpX2NsZWFudXBfcnFcIixcbiAgICBcInNjc2lfbXFfdW5pbml0X2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXF1ZXN0IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZGlzcGF0Y2ggbG9vcCAoYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QpIHRvIGNhbGwgYmxrX21xX2NsZWFudXBfcnEoKSwgc2hpZnRpbmcgZHJpdmVyIGNsZWFudXAgcmVzcG9uc2liaWxpdHkgb3V0IG9mIHNjc2lfcXVldWVfcnEoKSBpbnRvIHRoZSBnZW5lcmljIG1xIGNsZWFudXAgaGFuZGxlciAoc2NzaV9jbGVhbnVwX3JxKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHJlcXVlc3QgY2xlYW51cCBsaWZlY3ljbGUgZHVyaW5nIGZhaWxlZCBibG9jayBkaXNwYXRjaCBpbiByZWFjaGFibGUgY29yZSBibG9jayBhbmQgU0NTSSBsYXllcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdFwiLFxuICAgIFwic2NzaV9xdWV1ZV9ycVwiLFxuICAgIFwic2NzaV9jbGVhbnVwX3JxXCIsXG4gICAgXCJzY3NpX21xX3VuaW5pdF9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGRpc3BhdGNoIGxvb3AgKGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KSB0byBjYWxsIGJsa19tcV9jbGVhbnVwX3JxKCksIHNoaWZ0aW5nIGRyaXZlciBjbGVhbnVwIHJlc3BvbnNpYmlsaXR5IG91dCBvZiBzY3NpX3F1ZXVlX3JxKCkgaW50byB0aGUgZ2VuZXJpYyBtcSBjbGVhbnVwIGhhbmRsZXIgKHNjc2lfY2xlYW51cF9ycSkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyByZXF1ZXN0IGNsZWFudXAgbGlmZWN5Y2xlIGR1cmluZyBmYWlsZWQgYmxvY2sgZGlzcGF0Y2ggaW4gcmVhY2hhYmxlIGNvcmUgYmxvY2sgYW5kIFNDU0kgbGF5ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoyMy41MjEyMzM4MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTE2NzE2NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuNTIyMzAzOTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTMxMTU2Mzk0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2ExYmNiODIxZTljNmVlMjEzM2QwNWNjMjEzOGNhNzU5MmEzMDcwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjIxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggYTI2YTExYzczZWUzZS4uZWIzYTQ4MTIxMWQwYiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTIxMjYsNiArMjEyNiw3IEBAIGJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gXHRcdFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdGJsa19tcV9jbGVhbnVwX3JxKHJxKTtcbiBcdFx0XHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG5pbmRleCBhZjI3ZmQzZGY4ZDQ2Li4xZWE2NWI1ZWIyNWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXG5AQCAtMTk2MCwxMyArMTk2MCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc2NzaV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0XHRjbWQtXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRlbHNlXG4gXHRcdFx0Y21kLVx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcdTAwM2NcdTAwM2MgMTY7XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoZW5cbi1cdFx0ICogd2UgaGl0IGFuIGVycm9yLCBhcyB3ZSB3aWxsIG5ldmVyIHNlZSB0aGlzIGNvbW1hbmRcbi1cdFx0ICogYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRpZiAocmVxLVx1MDAzZXJxX2ZsYWdzIFx1MDAyNiBSUUZfRE9OVFBSRVApXG4tXHRcdFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XG4rXHRcdC8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi9cbiBcdFx0c2NzaV9ydW5fcXVldWVfYXN5bmMoc2Rldik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjMuNTIyMzA3Mjc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjQ0NjE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc28gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHdoYXQncyBjaGFuZ2VkIGFuZCB0aGVuIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbkZpcnN0LCBsZXQncyBmb2N1cyBvbiBgYmxvY2svYmxrLW1xLmNgLiBTcGVjaWZpY2FsbHksIHdpdGhpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3RgLCB0aGVyZSdzIGEgbmV3IGxpbmUgdGhhdCBjYWxscyBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBiZWZvcmUgYGJsa19tcV9lbmRfcmVxdWVzdChycSwgcmV0KWAgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLiBUaGlzIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IuIFRoZSBleGlzdGluZyBjb2RlIGVuZHMgYSByZXF1ZXN0IHdpdGggYGJsa19tcV9lbmRfcmVxdWVzdGAgYnV0IHRoaXMgbmV3IGFkZGl0aW9uIGlzIGNsZWFuaW5nIHVwIGZpcnN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBibGtfbXFfY2xlYW51cF9ycWAgaXMgZG9pbmcsIGFuZCB3aGF0IHJlc291cmNlcyBpdCdzIGhhbmRsaW5nLiBJcyBpdCBmcmVlaW5nIG1lbW9yeSwgcmVsZWFzaW5nIGxvY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZSBpcyBrZXkuXG5cbk5leHQsIEknbGwgc3dpdGNoIG15IGF0dGVudGlvbiB0byBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3NpX3F1ZXVlX3JxYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBpbmNsdWRlZCBhIGNoZWNrIGZvciBgUlFGX0RPTlRQUkVQYCBhbmQgdGhlbiBjYWxsZWQgYHNjc2lfbXFfdW5pbml0X2NtZChjbWQpYCBpZiB0aGlzIGZsYWcgd2FzIHNldC4gTm93LCB0aGF0IGVudGlyZSBzZWN0aW9uIG9mIGNvZGUgaGFzIGJlZW4gY29tbWVudGVkIG91dCwgYW5kIGEgY29tbWVudCBoYXMgYmVlbiBhZGRlZCBleHBsYWluaW5nIHRoYXQg4oCcYmxrLW1xIHdpbGwgY2xlYW51cCBvdXIgcmVzb3VyY2VzIGFzIHRoZSBycSB3aWxsIGVuZC7igJ0gVGhpcyByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgcmVzb3VyY2UgY2xlYW51cCBmcm9tIHRoZSBTQ1NJIGxheWVyIHRvIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIG9uZSBpbiBgYmxrLW1xLmNgLiBUaGUgYGRlZmF1bHRgIGNhc2UgZnJvbSB0aGUgZWFybGllciBmaWxlIG5vdyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSBibG9jayBsYXllci5cblxuTm93LCBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGNoYW5nZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBgYmxrX21xX2NsZWFudXBfcnFgIGlzIG5vdyBoYW5kbGluZyB3aGF0IGBzY3NpX21xX3VuaW5pdF9jbWRgICp1c2VkKiB0byBoYW5kbGUuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgaG93IHRoZXNlIGRpZmZlcmVudCBsYXllcnMgaW50ZXJhY3Qgd2hlbiBhIHJlcXVlc3QgZW5jb3VudGVycyBhbiBlcnJvci4gVGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljaXQgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCByZXNvdXJjZSBvd25lcnNoaXAgb3Igc3RhdGUgdGhhdCBJIG5lZWQgdG8gdmVyaWZ5LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgbWlnaHQgc2ltcGxpZnkgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBzb21lIHdheXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgaW4gdGhlIHByb2Nlc3MuIEknbGwgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTgsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMTg2NzczNTM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzczMTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfY2xlYW51cF9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9MjA4NT1ib29sIGJsa19tcV9kaXNwYXRjaF9ycV9saXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjEyOC1cXHRcXHRkZWZhdWx0OlxcbmJsb2NrL2Jsay1tcS5jOjIxMjk6XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xcbmJsb2NrL2Jsay1tcS5jLTIxMzAtXFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjoyOC4yNzA1MTA1MzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1tcS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTU6XFx0XFx0XFx0YmQubGFzdCA9IGxpc3RfZW1wdHkobGlzdCk7XFxuMjExNjpcXHRcXG4yMTE3OlxcdFxcdFxcdHJldCA9IHEtXFx1MDAzZW1xX29wcy1cXHUwMDNlcXVldWVfcnEoaGN0eCwgXFx1MDAyNmJkKTtcXG4yMTE4OlxcdFxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMjExOTpcXHRcXHRcXHRjYXNlIEJMS19TVFNfT0s6XFxuMjEyMDpcXHRcXHRcXHRcXHRxdWV1ZWQrKztcXG4yMTIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMjI6XFx0XFx0XFx0Y2FzZSBCTEtfU1RTX1JFU09VUkNFOlxcbjIxMjM6XFx0XFx0XFx0XFx0bmVlZHNfcmVzb3VyY2UgPSB0cnVlO1xcbjIxMjQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMjEyNTpcXHRcXHRcXHRjYXNlIEJMS19TVFNfREVWX1JFU09VUkNFOlxcbjIxMjY6XFx0XFx0XFx0XFx0YmxrX21xX2hhbmRsZV9kZXZfcmVzb3VyY2UocnEsIGxpc3QpO1xcbjIxMjc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjEyODpcXHRcXHRcXHRkZWZhdWx0OlxcbjIxMjk6XFx0XFx0XFx0XFx0YmxrX21xX2NsZWFudXBfcnEocnEpO1xcbjIxMzA6XFx0XFx0XFx0XFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpO1xcbjIxMzE6XFx0XFx0XFx0fVxcbjIxMzI6XFx0XFx0fSB3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpO1xcbjIxMzM6XFx0b3V0OlxcbjIxMzQ6XFx0XFx0LyogSWYgd2UgZGlkbid0IGZsdXNoIHRoZSBlbnRpcmUgbGlzdCwgd2UgY291bGQgaGF2ZSB0b2xkIHRoZSBkcml2ZXJcXG4yMTM1OlxcdFxcdCAqIHRoZXJlIHdhcyBtb3JlIGNvbWluZywgYnV0IHRoYXQgdHVybmVkIG91dCB0byBiZSBhIGxpZS5cXG4yMTM2OlxcdFxcdCAqL1xcbjIxMzc6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KGxpc3QpIHx8IHJldCAhPSBCTEtfU1RTX09LKVxcbjIxMzg6XFx0XFx0XFx0YmxrX21xX2NvbW1pdF9ycXMoaGN0eCwgcXVldWVkLCBmYWxzZSk7XFxuMjEzOTpcXHRcXG4yMTQwOlxcdFxcdC8qXFxuMjE0MTpcXHRcXHQgKiBBbnkgaXRlbXMgdGhhdCBuZWVkIHJlcXVldWluZz8gU3R1ZmYgdGhlbSBpbnRvIGhjdHgtXFx1MDAzZWRpc3BhdGNoLFxcbjIxNDI6XFx0XFx0ICogdGhhdCBpcyB3aGVyZSB3ZSB3aWxsIGNvbnRpbnVlIG9uIG5leHQgcXVldWUgcnVuLlxcbjIxNDM6XFx0XFx0ICovXFxuMjE0NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkobGlzdCkpIHtcXG4yMTQ1OlxcdFxcdFxcdGJvb2wgbmVlZHNfcmVzdGFydDtcXG4yMTQ2OlxcdFxcdFxcdC8qIEZvciBub24tc2hhcmVkIHRhZ3MsIHRoZSBSRVNUQVJUIGNoZWNrIHdpbGwgc3VmZmljZSAqL1xcbjIxNDc6XFx0XFx0XFx0Ym9vbCBub190YWcgPSBwcmVwID09IFBSRVBfRElTUEFUQ0hfTk9fVEFHIFxcdTAwMjZcXHUwMDI2XFxuMjE0ODpcXHRcXHRcXHRcXHQoKGhjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfVEFHX1FVRVVFX1NIQVJFRCkgfHxcXG4yMTQ5OlxcdFxcdFxcdFxcdGJsa19tcV9pc19zaGFyZWRfdGFncyhoY3R4LVxcdTAwM2VmbGFncykpO1xcbjIxNTA6XFx0XFxuMjE1MTpcXHRcXHRcXHQvKlxcbjIxNTI6XFx0XFx0XFx0ICogSWYgdGhlIGNhbGxlciBhbGxvY2F0ZWQgYnVkZ2V0cywgZnJlZSB0aGUgYnVkZ2V0cyBvZiB0aGVcXG4yMTUzOlxcdFxcdFxcdCAqIHJlcXVlc3RzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gcGFzc2VkIHRvIHRoZSBibG9jayBkcml2ZXIuXFxuMjE1NDpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMjcwODQ3MTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDU6XFx0XFx0Y21kLVxcdTAwM2VidWRnZXRfdG9rZW4gPSAtMTtcXG4xOTQ2OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTk0NzpcXHRcXHRjYXNlIEJMS19TVFNfT0s6XFxuMTk0ODpcXHRcXHRcXHRicmVhaztcXG4xOTQ5OlxcdFxcdGNhc2UgQkxLX1NUU19SRVNPVVJDRTpcXG4xOTUwOlxcdFxcdFxcdGlmIChzY3NpX2RldmljZV9ibG9ja2VkKHNkZXYpKVxcbjE5NTE6XFx0XFx0XFx0XFx0cmV0ID0gQkxLX1NUU19ERVZfUkVTT1VSQ0U7XFxuMTk1MjpcXHRcXHRcXHRicmVhaztcXG4xOTUzOlxcdFxcdGNhc2UgQkxLX1NUU19BR0FJTjpcXG4xOTU0OlxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX0JVU19CVVNZIFxcdTAwM2NcXHUwMDNjIDE2O1xcbjE5NTU6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApXFxuMTk1NjpcXHRcXHRcXHRcXHRzY3NpX21xX3VuaW5pdF9jbWQoY21kKTtcXG4xOTU3OlxcdFxcdFxcdGJyZWFrO1xcbjE5NTg6XFx0XFx0ZGVmYXVsdDpcXG4xOTU5OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpKSlcXG4xOTYwOlxcdFxcdFxcdFxcdGNtZC1cXHUwMDNlcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgXFx1MDAzY1xcdTAwM2MgMTY7XFxuMTk2MTpcXHRcXHRcXHRlbHNlXFxuMTk2MjpcXHRcXHRcXHRcXHRjbWQtXFx1MDAzZXJlc3VsdCA9IERJRF9FUlJPUiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xOTYzOlxcdFxcdFxcdC8qIGJsay1tcSB3aWxsIGNsZWFudXAgb3VyIHJlc291cmNlcyBhcyB0aGUgcnEgd2lsbCBlbmQgKi9cXG4xOTY0OlxcdFxcdFxcdHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHNkZXYpO1xcbjE5NjU6XFx0XFx0XFx0YnJlYWs7XFxuMTk2NjpcXHRcXHR9XFxuMTk2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE5Njg6XFx0fVxcbjE5Njk6XFx0XFxuMTk3MDpcXHRzdGF0aWMgaW50IHNjc2lfbXFfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuMTk3MTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuMTk3MjpcXHR7XFxuMTk3MzpcXHRcXHRzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNldC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMTk3NDpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG4xOTc1OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuMTk3NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0Y21kLVxcdTAwM2VzZW5zZV9idWZmZXIgPVxcbjE5Nzk6XFx0XFx0XFx0a21lbV9jYWNoZV9hbGxvY19ub2RlKHNjc2lfc2Vuc2VfY2FjaGUsIEdGUF9LRVJORUwsIG51bWFfbm9kZSk7XFxuMTk4MDpcXHRcXHRpZiAoIWNtZC1cXHUwMDNlc2Vuc2VfYnVmZmVyKVxcbjE5ODE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTk4MjpcXHRcXG4xOTgzOlxcdFxcdGlmIChzY3NpX2hvc3RfZ2V0X3Byb3Qoc2hvc3QpKSB7XFxuMTk4NDpcXHRcXHRcXHRzZyA9ICh2b2lkICopY21kICsgc2l6ZW9mKHN0cnVjdCBzY3NpX2NtbmQpICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6MjguMjcxMDM3MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNzMyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIExheWVyIENsZWFudXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgcHJlY2lzZSByb2xlcyBvZiBgYmxrX21xX2NsZWFudXBfcnFgIGFuZCBgYmxrX21xX2VuZF9yZXF1ZXN0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHBpY2tpbmcgYXBhcnQgdGhlIGNvZGUgb2YgZWFjaCBmdW5jdGlvbiB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgYmxvY2sgbGF5ZXIncyByZXF1ZXN0IGNvbXBsZXRpb24gcGF0aCwgZXNwZWNpYWxseSBnaXZlbiByZWNlbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBhcm91bmQgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBnaXZlbiB0aGF0IGBibGstbXFgJ3MgYXN5bmNocm9ub3VzIGRlc2lnbiBpbmhlcmVudGx5IHJlcXVpcmVzIGNhcmVmdWwgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gQWxzbywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBwcm9wZXJseSBoYW5kbGluZyBhbGwgY29ybmVyIGNhc2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nLCB0aW1lb3V0cywgYW5kIGRldmljZSBmbHVzaGVzPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gcmVxdWVzdCB0eXBlIChlLmcuLCByZWFkLCB3cml0ZSwgZGlzY2FyZCwgZXRjLikgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgcmVzcG9uc2liaWxpdGllcy4gTGV0J3Mgc2VlIGlmIHRoaXMgbGluZXMgdXAgd2l0aCBteSBleHBlY3RhdGlvbnMgb2YgYSBtb2Rlcm4gYmxvY2sgcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjozMS4xOTgzNjUxODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDA4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9jbGVhbnVwX3JxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0yMTI4LVxcdFxcdGRlZmF1bHQ6XFxuYmxvY2svYmxrLW1xLmM6MjEyOTpcXHRcXHRcXHRibGtfbXFfY2xlYW51cF9ycShycSk7XFxuYmxvY2svYmxrLW1xLmMtMjEzMC1cXHRcXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjMxLjI3MTM3ODk1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NzM3NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfY2xlYW51cF9ycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0yMDg1PWJvb2wgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0yMTI4LVxcdFxcdGRlZmF1bHQ6XFxuYmxvY2svYmxrLW1xLmM6MjEyOTpcXHRcXHRcXHRibGtfbXFfY2xlYW51cF9ycShycSk7XFxuYmxvY2svYmxrLW1xLmMtMjEzMC1cXHRcXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIHJldCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXJxLmM9MzY5PXN0YXRpYyBpbnQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1ycS5jLTM5OS1cXHRcXHRcXHRibGtfcnFfdW5wcmVwX2Nsb25lKGNsb25lKTtcXG5kcml2ZXJzL21kL2RtLXJxLmM6NDAwOlxcdFxcdFxcdGJsa19tcV9jbGVhbnVwX3JxKGNsb25lKTtcXG5kcml2ZXJzL21kL2RtLXJxLmMtNDAxLVxcdFxcdFxcdHRpby1cXHUwMDNldGktXFx1MDAzZXR5cGUtXFx1MDAzZXJlbGVhc2VfY2xvbmVfcnEoY2xvbmUsIFxcdTAwMjZ0aW8tXFx1MDAzZWluZm8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaD0xMDIwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa19tcV9od19jdHggKnF1ZXVlX2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtMTAzOC1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oOjEwMzk6c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTEwNDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjozNC4wMzg3NjQyNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY3OTM4NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBibGstbXEgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGJsb2NrIG11bHRpLXF1ZXVlIGNsZWFudXAgZnVuY3Rpb24sIGBibGtfbXFfY2xlYW51cF9ycWAsIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMsIHNvIGxldCdzIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUuIEknbGwgbmF2aWdhdGUgdG8gYGluY2x1ZGUvbGludXgvYmxrLW1xLmhgIOKAkyB0aGF0J3MgdGhlIHVzdWFsIHNwb3QgZm9yIHRoZSBjb3JlIGRlZmluaXRpb25zLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDM5LCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSByZWNhbGwgYGJsa19tcV9jbGVhbnVwX3JxYCBiZWluZyBkZWZpbmVkIG9yIGF0IGxlYXN0IHdoZXJlIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMgd2lsbCBiZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlcXVlc3QgcXVldWUgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYGJsay1tcWAgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQwLjcxODE1NDIzNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGstbXEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM1OlxcdCNkZWZpbmUgaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMDM2OlxcdFxcdGZvciAoKGkpID0gMDsgKGkpIFxcdTAwM2MgKGhjdHgpLVxcdTAwM2Vucl9jdHggXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMTAzNzpcXHRcXHQgICAgICh7IGN0eCA9IChoY3R4KS1cXHUwMDNlY3R4c1soaSldOyAxOyB9KTsgKGkpKyspXFxuMTAzODpcXHRcXG4xMDM5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAocnEtXFx1MDAzZXEtXFx1MDAzZW1xX29wcy1cXHUwMDNlY2xlYW51cF9ycSlcXG4xMDQyOlxcdFxcdFxcdHJxLVxcdTAwM2VxLVxcdTAwM2VtcV9vcHMtXFx1MDAzZWNsZWFudXBfcnEocnEpO1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHR2b2lkIGJsa19tcV9oY3R4X3NldF9mcV9sb2NrX2NsYXNzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbjEwNDY6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnFfaXNfc3luYyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTA0OTpcXHR7XFxuMTA1MDpcXHRcXHRyZXR1cm4gb3BfaXNfc3luYyhycS1cXHUwMDNlY21kX2ZsYWdzKTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTtcXG4xMDU0OlxcdGludCBibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCByZXF1ZXN0ICpycV9zcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQwLjcxODMxMjY2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMyNTM5OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgY2xlYW51cF9ycWAgaW4gdGhlIFNDU0kgY29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgU0NTSSBjb2RlIGFnYWluLCBhbmQgSSdtIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IHRoZSByb2xlIG9mIGBjbGVhbnVwX3JxYC4gVGhlIG5hbWUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIHJlcXVlc3QgY2xlYW51cCBmdW5jdGlvbiwgd2hpY2gsIGluIHRoZSBTQ1NJIHdvcmxkLCBjb3VsZCBiZSBjcnVjaWFsIGZvciBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgbWFuYWdlbWVudCwgb3IgZW5zdXJpbmcgSS9PIGNvbXBsZXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBgY2xlYW51cF9ycWAgaXMgZG9pbmcgKndpdGhpbiogdGhlIFNDU0kgcmVxdWVzdCBjb250ZXh0LiBJcyBpdCBjYWxsZWQgb24gZXZlcnkgcmVxdWVzdCwgb25seSBvbiBlcnJvciBjb25kaXRpb25zLCBvciBkdXJpbmcgc3BlY2lmaWMgcGhhc2VzIG9mIHRoZSByZXF1ZXN0IGxpZmVjeWNsZT8gV2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgZG9lcyBpdCBjbGVhbiB1cD8gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB0aGVuIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIFNDU0kgc3RhY2sgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NDIuNjUwODU1MzUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUzMTA1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY2xlYW51cF9ycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMDczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wc19ub19jb21taXQgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDgzLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIwODQ6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMDg1LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgc2NzaV9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTEyLVxcdC5leGl0X3JlcXVlc3RcXHQ9IHNjc2lfbXFfZXhpdF9yZXF1ZXN0LFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjIxMTM6XFx0LmNsZWFudXBfcnFcXHQ9IHNjc2lfY2xlYW51cF9ycSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yMTE0LVxcdC5idXN5XFx0XFx0PSBzY3NpX21xX2xsZF9idXN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjo0NS4zMDM5Njk0NDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczODY4MDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc2NzaV9jbGVhbnVwX3JxKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgYHNjc2lfY2xlYW51cF9ycWAgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2NzaV9saWIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFNDU0kgcmVxdWVzdCBjbGVhbnVwIHdvcmtzIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgcmVxdWVzdCBsaWZlY3ljbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDsgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byB0cnVseSBncmFzcGluZyBob3cgU0NTSSBjb21tYW5kcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJ2xsIHNlZSBob3cgZXJyb3Igc3RhdHVzZXMgYXJlIHNldCwgcmVzb3VyY2VzIGxpa2UgYnVmZmVycyBvciBETUEgbWFwcGluZ3MgYXJlIHJlbGVhc2VkIGFuZCBob3cgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcyBhcmUgcHV0IGJhY2sgaW4gYSBnb29kIHN0YXRlIGZvciB0aGUgbmV4dCByZXF1ZXN0LiBUaGlzJ2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdG8gdHJhY2sgZG93biBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBJL08gcGF0aC4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODoyMjo0OC4wNDI2NTMxMDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUxNTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3NpX2NsZWFudXBfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMjgzPUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYWxsb2NfcmVxdWVzdCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjg4LSAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyODk6c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjkwLXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTIwNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHNjc2lfbXFfb3BzX25vX2NvbW1pdCA9IHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODMtXFx0LmV4aXRfcmVxdWVzdFxcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjA4NDpcXHQuY2xlYW51cF9ycVxcdD0gc2NzaV9jbGVhbnVwX3JxLFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIwODUtXFx0LmJ1c3lcXHRcXHQ9IHNjc2lfbXFfbGxkX2J1c3ksXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0yMTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBzY3NpX21xX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTItXFx0LmV4aXRfcmVxdWVzdFxcdD0gc2NzaV9tcV9leGl0X3JlcXVlc3QsXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MjExMzpcXHQuY2xlYW51cF9ycVxcdD0gc2NzaV9jbGVhbnVwX3JxLFxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTIxMTQtXFx0LmJ1c3lcXHRcXHQ9IHNjc2lfbXFfbGxkX2J1c3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjQ4LjE2MzE3MzU5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzQyMjI3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgU0NTSSBSZXF1ZXN0IENsZWFudXAgaW4gYHNjc2lfbGliLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBTQ1NJIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0IGNsZWFudXAgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZHJpdmVycy9zY3NpL3Njc2lfbGliLmNgIGFuZCB6ZXJvIGluIG9uIGBzY3NpX2NsZWFudXBfcnFgIGFyb3VuZCBsaW5lIDEyODkuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBjb21wbGV0aW9uIGFuZCByZXNvdXJjZSByZWxlYXNlIG9mIGEgU0NTSSByZXF1ZXN0IGlzIGxvY2F0ZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgaG93IHRoZSByZXF1ZXN0IGlzIHVsdGltYXRlbHkgZnJlZWQgb3IgcmVjeWNsZWQsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGxpa2UgdGhlIHRyYW5zcG9ydCBsYXllciBvciB0aGUgZGV2aWNlIGRyaXZlci4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NTIuMjM3Mzk5NDQ3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjg1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjg1OlxcdC8qXFxuMTI4NjpcXHQgKiBPbmx5IGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzbid0IGNvbXBsZXRlZCBieSBTQ1NJLCBhbmQgbm90IGZyZWVkIGJ5XFxuMTI4NzpcXHQgKiBTQ1NJXFxuMTI4ODpcXHQgKi9cXG4xMjg5OlxcdHN0YXRpYyB2b2lkIHNjc2lfY2xlYW51cF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuMTI5MDpcXHR7XFxuMTI5MTpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG4xMjkyOlxcdFxcbjEyOTM6XFx0XFx0Y21kLVxcdTAwM2VmbGFncyA9IDA7XFxuMTI5NDpcXHRcXG4xMjk1OlxcdFxcdGlmIChycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNiBSUUZfRE9OVFBSRVApIHtcXG4xMjk2OlxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbjEyOTc6XFx0XFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHR9XFxuMTMwMDpcXHRcXG4xMzAxOlxcdC8qIENhbGxlZCBiZWZvcmUgYSByZXF1ZXN0IGlzIHByZXBhcmVkLiBTZWUgYWxzbyBzY3NpX21xX3ByZXBfZm4oKS4gKi9cXG4xMzAyOlxcdHZvaWQgc2NzaV9pbml0X2NvbW1hbmQoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG4xMzAzOlxcdHtcXG4xMzA0OlxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHNjc2lfY21kX3RvX3JxKGNtZCk7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdGlmICghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHJxKSBcXHUwMDI2XFx1MDAyNiAhKGNtZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ01EX0lOSVRJQUxJWkVEKSkge1xcbjEzMDc6XFx0XFx0XFx0Y21kLVxcdTAwM2VmbGFncyB8PSBTQ01EX0lOSVRJQUxJWkVEO1xcbjEzMDg6XFx0XFx0XFx0c2NzaV9pbml0aWFsaXplX3JxKHJxKTtcXG4xMzA5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjI6NTIuMjM3NzUzMjQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTIyNzUwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNjc2lfbXFfdW5pbml0X2NtZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBzY3NpX21xX3VuaW5pdF9jbWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSByZXNwb25zaWJsZSBmb3Igd2l0aGluIHRoZSBTQ1NJIG1pZGxheWVyJ3MgbWVzc2FnZS1xdWV1ZWQgY29tbWFuZCBoYW5kbGluZy4gSSBrbm93IHRoZSBiYXNpYyBwcmluY2lwbGVzLCBvZiBjb3Vyc2Ug4oCTIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBkZS1hbGxvY2F0aW9uIG9yIGNsZWFudXAgb2YgYSBjb21tYW5kIHdoZW4gaXQncyBubyBsb25nZXIgbmVlZGVkLCBtYXliZSBhZnRlciBjb21wbGV0aW9uIG9yIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQnV0IEkgd2FudCB0aGUgc3BlY2lmaWNzLiBJcyBpdCBqdXN0IHRoZSBjb21tYW5kIHN0cnVjdCBpdHNlbGYsIG9yIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhc3NvY2lhdGVkIHJlc291cmNlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzLCBzZW5zZSBkYXRhLCBvciBldmVuIHRoZSBtZXNzYWdlIHF1ZXVlIGl0c2VsZj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgaGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyB2aXRhbCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgdG91Y2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjU4LjMzMDAzMjEyM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MDk4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjc2lfbXFfdW5pbml0X2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoc2NzaV9zZW5zZV9jYWNoZV9tdXRleCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNTktXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6NjA6c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjEtXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz0xMTU9c3RhdGljIHZvaWQgc2NzaV9tcV9yZXF1ZXVlX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGxvbmcgbXNlY3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xMjAtXFx0XFx0cnEtXFx1MDAzZXJxX2ZsYWdzIFxcdTAwMjY9IH5SUUZfRE9OVFBSRVA7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MTIxOlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyMi1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9NjI2PUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZnJlZV9zZ3RhYmxlcyk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtNjI3LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjYyODpzdGF0aWMgdm9pZCBzY3NpX21xX3VuaW5pdF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYz02NjQ9c3RhdGljIGJvb2wgc2NzaV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBibGtfc3RhdHVzX3QgZXJyb3IsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy02OTUtXFx0ICovXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6Njk2OlxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTY5Ny1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTEyODk9c3RhdGljIHZvaWQgc2NzaV9jbGVhbnVwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTEyOTUtXFx0aWYgKHJxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUCkge1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjEyOTY6XFx0XFx0c2NzaV9tcV91bmluaXRfY21kKGNtZCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTI5Ny1cXHRcXHRycS1cXHUwMDNlcnFfZmxhZ3MgXFx1MDAyNj0gflJRRl9ET05UUFJFUDtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE1Njc9c3RhdGljIHZvaWQgc2NzaV9jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0xNTc0LVxcdFxcdFdBUk5fT05fT05DRSghYmxrX3JxX2lzX3Bhc3N0aHJvdWdoKHNjc2lfY21kX3RvX3JxKGNtZCkpKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxNTc1OlxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE1NzYtXFx0XFx0X19ibGtfbXFfZW5kX3JlcXVlc3QocnEsIHNjc2lfcmVzdWx0X3RvX2Jsa19zdGF0dXMoY21kLVxcdTAwM2VyZXN1bHQpKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTQ9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTk1NS1cXHRcXHRpZiAocmVxLVxcdTAwM2VycV9mbGFncyBcXHUwMDI2IFJRRl9ET05UUFJFUClcXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTU2OlxcdFxcdFxcdHNjc2lfbXFfdW5pbml0X2NtZChjbWQpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5NTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjIyOjU4LjQ2OTEzNzUwNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwNjk1MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIHdoYXQgSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgaW5jb21wbGV0ZSBjb250ZXh0IHlvdSBwcm92aWRlZC4gSSdtIGdvaW5nIHRvIGZpbGwgaW4gdGhlIGJsYW5rcyBhc3N1bWluZyB0aGlzIHJlbGF0ZXMgdG8gc3RvcmFnZSBkcml2ZXJzLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZS5cblxuKipEaXNzZWN0aW5nIHRoZSBgc2NzaV9tcV91bmluaXRfY21kYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2NzaV9tcV91bmluaXRfY21kYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggU0NTSSAoU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSksIGxpa2VseSBpbiBhIG1vZGVybiBtdWx0aS1xdWV1ZSBlbnZpcm9ubWVudCAoZ2l2ZW4gdGhlIFwibXFcIiBpbiB0aGUgbmFtZSkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHByb2Nlc3MgYmVoaW5kIHRoaXM/XCIgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEknbSBpbmZlcnJpbmcgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgY2xlYW51cCBvciB1bmluaXRpYWxpemF0aW9uIG9mIGEgY29tbWFuZCBzdHJ1Y3R1cmUgb3IgY29udGV4dCByZWxhdGVkIHRvIFNDU0kgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyByZXNvdXJjZXMuXG5cbkknbSB0aGlua2luZzogaXMgdGhpcyBjYWxsZWQgd2hlbiBhIGNvbW1hbmQgY29tcGxldGVzLCBpcyBjYW5jZWxsZWQsIG9yIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZD8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyB0aGUgbGF0dGVyLiBJZiBpdCdzIGEgY29tbWFuZCBjbGVhbnVwIGZ1bmN0aW9uLCBkb2VzIGl0IHJldHVybiByZXNvdXJjZXMgdG8gdGhlIGZyZWUgcG9vbCwgbnVsbGlmeSBwb2ludGVycywgb3IgcGVyZm9ybSBvdGhlciBjcml0aWNhbCBzdGVwcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvciBkcml2ZXIgZXJyb3JzP1xuXG5JIHdhbnQgdG8ga25vdyB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBXaGF0IGlzIGBzY3NpX21xX3VuaW5pdF9jbWRgIHJlY2VpdmluZyBhcyBhcmd1bWVudHM/IElzIGl0IGFuIGluaXRpYWxpemVkIGNvbW1hbmQgc3RydWN0dXJlPyBBIHBvaW50ZXIgdG8gYSBkZXZpY2U/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGRpY3RhdGUgaG93IEkgaW50ZXJwcmV0IHRoZSBmdW5jdGlvbidzIGFjdGlvbnMuIFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIGNvbW1hbmQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkPyBJcyBpdCBzYWZlIHRvIHJlbGVhc2UgbG9ja3Mgb3IgZnJlZSBtZW1vcnk/XG5cbkknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHF1ZXVlLWJhc2VkIGRyaXZlcnMgYXJlIHdvcmtpbmcuIEtub3dpbmcgaXQncyB1bmluaXQgZnVuY3Rpb24gYW5kIGFzc29jaWF0ZWQgbG9ja2luZyBtZWNoYW5pc21zIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MDkuMDc2MDkwNDkyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2NzaV9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjU6XFx0fVxcbiA2MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9mcmVlX3NndGFibGVzKTtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0c3RhdGljIHZvaWQgc2NzaV9tcV91bmluaXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZClcXG4gNjI5OlxcdHtcXG4gNjMwOlxcdFxcdHNjc2lfZnJlZV9zZ3RhYmxlcyhjbWQpO1xcbiA2MzE6XFx0XFx0c2NzaV91bmluaXRfY21kKGNtZCk7XFxuIDYzMjpcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdHN0YXRpYyB2b2lkIHNjc2lfcnVuX3F1ZXVlX2FzeW5jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4gNjM1OlxcdHtcXG4gNjM2OlxcdFxcdGlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2Rldi1cXHUwMDNlaG9zdCkpXFxuIDYzNzpcXHRcXHRcXHRyZXR1cm47XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGlmIChzY3NpX3RhcmdldChzZGV2KS1cXHUwMDNlc2luZ2xlX2x1biB8fFxcbiA2NDA6XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZzZGV2LVxcdTAwM2Vob3N0LVxcdTAwM2VzdGFydmVkX2xpc3QpKSB7XFxuIDY0MTpcXHRcXHRcXHRrYmxvY2tkX3NjaGVkdWxlX3dvcmsoXFx1MDAyNnNkZXYtXFx1MDAzZXJlcXVldWVfd29yayk7XFxuIDY0MjpcXHRcXHR9IGVsc2Uge1xcbiA2NDM6XFx0XFx0XFx0LypcXG4gNjQ0OlxcdFxcdFxcdCAqIHNtcF9tYigpIHByZXNlbnQgaW4gc2JpdG1hcF9xdWV1ZV9jbGVhcigpIG9yIGltcGxpZWQgaW5cXG4gNjQ1OlxcdFxcdFxcdCAqIC5lbmRfaW8gaXMgZm9yIG9yZGVyaW5nIHdyaXRpbmcgLmRldmljZV9idXN5IGluXFxuIDY0NjpcXHRcXHRcXHQgKiBzY3NpX2RldmljZV91bmJ1c3koKSBhbmQgcmVhZGluZyBzZGV2LVxcdTAwM2VyZXN0YXJ0cy5cXG4gNjQ3OlxcdFxcdFxcdCAqL1xcbiA2NDg6XFx0XFx0XFx0aW50IG9sZCA9IGF0b21pY19yZWFkKFxcdTAwMjZzZGV2LVxcdTAwM2VyZXN0YXJ0cyk7XFxuIDY0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MDkuMDc2MzUyNjgyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1NjE1NTczMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1NJIFJlcXVlc3QgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgc2hpZnQgaW4gU0NTSSByZXF1ZXN0IGNsZWFudXAuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGNsZWFudXAgY2FsbCBmcm9tIHRoZSBkZWZhdWx0IGVycm9yIHBhdGggaW4gYHNjc2lfcXVldWVfcnFgIHRvIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAuIFRoZSBrZXkgaXMgc3RhbmRhcmRpemluZyB0aGUgY2xlYW51cCBwcm9jZXNzIGFjcm9zcyB0aGUgYmxrLW1xIHN1YnN5c3RlbS4gQmVmb3JlLCBpZiBgcXVldWVfcnFgIGZhaWxlZCwgYHNjc2lfbXFfdW5pbml0X2NtZChjbWQpYCB3YXMgY2FsbGVkIGltbWVkaWF0ZWx5IHdpdGhpbiBgc2NzaV9xdWV1ZV9ycWAuIE5vdywgdGhlIHN5c3RlbSByZWxpZXMgb24gYGJsa19tcV9kaXNwYXRjaF9ycV9saXN0YCBhbmQgYGJsa19tcV9jbGVhbnVwX3JxKHJxKWAgdG8gdHJpZ2dlciB0aGUgY2xlYW51cCBhZnRlciB0aGUgaW5pdGlhbCByZXF1ZXN0IGRpc3BhdGNoLiBTcGVjaWZpY2FsbHksIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAsIHdoZW4gdGhlIHJldHVybiB2YWx1ZSAoYHJldGApIGlzbid0IGBCTEtfU1RTX09LYCwgYEJMS19TVFNfUkVTT1VSQ0VgLCBvciBgQkxLX1NUU19ERVZfUkVTT1VSQ0VgLCBgYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCByZXQpYCBpcyBjYWxsZWQuIElmIHRoZSBkcml2ZXIgZGlkbid0IGNsZWFuIHVwIGl0cyBvd24gcnEsIG9yIGlmIGl0IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBjbGVhbnVwIGNhbGxiYWNrLCBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBjYWxscyBgcnEtXHUwMDNlcS1cdTAwM2VtcV9vcHMtXHUwMDNlY2xlYW51cF9ycShycSlgLiBGb3IgU0NTSSwgYHNjc2lfY2xlYW51cF9ycWAgdGhlbiBjYWxscyBgc2NzaV9tcV91bmluaXRfY21kKGNtZClgIGlmIHRoZSBgUlFGX0RPTlRQUkVQYCBmbGFnIGlzIHNldC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIE15IHJlYXNvbmluZyByZWxpZXMgb24gdGhlc2UgY3JpdGVyaWE6XG5cbjEuICAqKlVzZXItc3BhY2UgZGF0YSBleHBvc3VyZToqKiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBOby5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGRlY2lzaW9uLW1ha2luZz8gTm8sIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGNoZWNrcyBgaWYgKHJxLVx1MDAzZXEtXHUwMDNlbXFfb3BzLVx1MDAzZWNsZWFudXBfcnEpYCBiZWZvcmUgY2FsbGluZy5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzOioqIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIGFjY2Vzc2VkIGxhdGVyPyBObywgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIHRoZSBmcmVlaW5nIG9mIHJlc291cmNlcyBsaWtlIHNnIHRhYmxlcyBkdXJpbmcgcmVxdWVzdCBjb21wbGV0aW9uIG9yIGZhaWx1cmUuXG40LiAgKipCdWZmZXIgYWNjZXNzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoaXMgcGF0Y2ggdXNlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byBwZXJmb3JtIGJvdW5kcyBjaGVja3Mgb3Igb3RoZXIgbG9naWMgb24gZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgSSBkb24ndCBzZWUgYW55IHJpc2tzIGhlcmUgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhpcyBwYXRjaCBpcyBhYm91dCByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjbGVhbmluZyB1cCByZXNvdXJjZXMsIG5vdCBsZWFraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgY2xlYW51cCBnZXRzIGNhbGxlZCB0d2ljZSBvciBhdCB0aGUgd3JvbmcgdGltZSksIHJlc291cmNlL21lbW9yeSBsZWFrcyAoaWYgdGhlIGNsZWFudXAgZ2V0cyBtaXNzZWQpLCBvciBnZW5lcmFsIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZGVidWdnaW5nIHRvb2xzL21lY2hhbmlzbXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgaGVyZSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHJlcXVlc3QgY2xlYW51cCBzdGFuZGFyZGl6YXRpb24gYW5kIHRoZSByZWxldmFudCBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBLQVNBTi5cblxuVGhlIHJlYXNvbmluZyByZXF1aXJlbWVudHMgYXJlOlxuKiAgIGBOZWVkc0tNU0FOYDogZmFsc2VcbiogICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggY2VudHJhbGl6ZXMgcmVxdWVzdCBjbGVhbnVwIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdGAgYW5kIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIGZyb20gYHNjc2lfcXVldWVfcnFgLCBpdCBjb3VsZCBpbnRyb2R1Y2UgcmVxdWVzdCBsaWZlY3ljbGUgaXNzdWVzLCBkb3VibGUgY2xlYW51cC9mcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlc291cmNlIGxlYWtzLCBidXQgdGhlc2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRvcnM7IGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDQsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MjM6MTYuNjM3OTEzMTVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlcXVlc3QgZGlzcGF0Y2ggZXJyb3IgaGFuZGxpbmcgaW4gYGJsay1tcWAgYnkgYWRkaW5nIGEgY2FsbCB0byBgYmxrX21xX2NsZWFudXBfcnEocnEpYCBpbiBgYmxrX21xX2Rpc3BhdGNoX3JxX2xpc3QoKWAgd2hlbiBgcXVldWVfcnEoKWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHJlbW92aW5nIHRoZSBtYW51YWwgaW52b2NhdGlvbiBvZiBgc2NzaV9tcV91bmluaXRfY21kKClgIGZyb20gYHNjc2lfcXVldWVfcnEoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjbGVhbnVwIGFuZCBsaWZlY3ljbGUgcGF0aCBvZiBgc3RydWN0IHJlcXVlc3RgIGFuZCBkcml2ZXIgUERVcyB1cG9uIHF1ZXVlIGZhaWx1cmUuIFBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBhcmVhIHJlbGF0ZSB0byByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkb3VibGUtZnJlZWluZyBvciB1c2UtYWZ0ZXItZnJlZSBvZiBzY2F0dGVybGlzdHMvY29tbWFuZCBidWZmZXJzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVxdWVzdCBkaXNwYXRjaCBlcnJvciBoYW5kbGluZyBpbiBgYmxrLW1xYCBieSBhZGRpbmcgYSBjYWxsIHRvIGBibGtfbXFfY2xlYW51cF9ycShycSlgIGluIGBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCgpYCB3aGVuIGBxdWV1ZV9ycSgpYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgcmVtb3ZpbmcgdGhlIG1hbnVhbCBpbnZvY2F0aW9uIG9mIGBzY3NpX21xX3VuaW5pdF9jbWQoKWAgZnJvbSBgc2NzaV9xdWV1ZV9ycSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNsZWFudXAgYW5kIGxpZmVjeWNsZSBwYXRoIG9mIGBzdHJ1Y3QgcmVxdWVzdGAgYW5kIGRyaXZlciBQRFVzIHVwb24gcXVldWUgZmFpbHVyZS4gUG90ZW50aWFsIGlzc3VlcyBpbiB0aGlzIGFyZWEgcmVsYXRlIHRvIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRvdWJsZS1mcmVlaW5nIG9yIHVzZS1hZnRlci1mcmVlIG9mIHNjYXR0ZXJsaXN0cy9jb21tYW5kIGJ1ZmZlcnMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrr9xg[1] Phase: Succeeded StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 08:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 08:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2] Phase: Succeeded StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 08:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:23:28 +0000 UTC FinishedAt: 2026-09-11 08:23:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2012258222/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:23:38 +0000 UTC FinishedAt: 2026-09-11 08:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:23:38 +0000 UTC FinishedAt: 2026-09-11 08:40:12 +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:*3e4c9656-e942-4b11-8832-855fe2066a9c,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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2012258222/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": "2edd7a27-9cee-4cec-9763-3591936bee03", "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-workflowrr9xg/series-workflowrr9xg-build-action-3640574740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:23:38 +0000 UTC FinishedAt: 2026-09-11 08:40:02 +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:*3e4c9656-e942-4b11-8832-855fe2066a9c,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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2012258222/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": "2edd7a27-9cee-4cec-9763-3591936bee03", "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-workflowrr9xg/series-workflowrr9xg-build-action-3640574740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 08:40:12 +0000 UTC FinishedAt: 2026-09-11 08:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 08:40:12 +0000 UTC FinishedAt: 2026-09-11 08:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 08:40:12 +0000 UTC FinishedAt: 2026-09-11 08:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 08:40:12 +0000 UTC FinishedAt: 2026-09-11 08:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2295323297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 08:40:22 +0000 UTC FinishedAt: 2026-09-11 08:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 08:40:22 +0000 UTC FinishedAt: 2026-09-11 08:42:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2edd7a27-9cee-4cec-9763-3591936bee03,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-workflowrr9xg/series-workflowrr9xg-build-action-3640574740/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-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 08:42:29 +0000 UTC FinishedAt: 2026-09-11 08:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:42:29 +0000 UTC FinishedAt: 2026-09-11 08:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 08:42:29 +0000 UTC FinishedAt: 2026-09-11 09:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 08:42:29 +0000 UTC FinishedAt: 2026-09-11 09:00:53 +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:*3e4c9656-e942-4b11-8832-855fe2066a9c,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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2295323297/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": "3e3b2e52-41f9-4493-b33e-e666bc29badc", "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-workflowrr9xg/series-workflowrr9xg-build-action-4283041197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:42:29 +0000 UTC FinishedAt: 2026-09-11 09:00:42 +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:*3e4c9656-e942-4b11-8832-855fe2066a9c,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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2295323297/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": "3e3b2e52-41f9-4493-b33e-e666bc29badc", "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-workflowrr9xg/series-workflowrr9xg-build-action-4283041197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 09:00:53 +0000 UTC FinishedAt: 2026-09-11 09:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 09:00:53 +0000 UTC FinishedAt: 2026-09-11 09:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 09:00:53 +0000 UTC FinishedAt: 2026-09-11 09:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 09:00:53 +0000 UTC FinishedAt: 2026-09-11 09:02:37 +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:*3e3b2e52-41f9-4493-b33e-e666bc29badc,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-workflowrr9xg/series-workflowrr9xg-build-action-4283041197/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-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"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:*2edd7a27-9cee-4cec-9763-3591936bee03,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e3b2e52-41f9-4493-b33e-e666bc29badc,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-workflowrr9xg/series-workflowrr9xg-build-action-3640574740/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-workflowrr9xg/series-workflowrr9xg-build-action-4283041197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 09:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 09:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2478223158/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 09:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 09:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:02:49 +0000 UTC FinishedAt: 2026-09-11 09:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 09:03:01 +0000 UTC FinishedAt: 2026-09-11 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9xg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_dispatch_rq_list","scsi_queue_rq","scsi_cleanup_rq","scsi_mq_uninit_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","SCSI"],"series_id":"14505dd3-c2d7-4db9-b047-755b4b684877","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 09:03:01 +0000 UTC FinishedAt: 2026-09-11 12:04:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2edd7a27-9cee-4cec-9763-3591936bee03,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e3b2e52-41f9-4493-b33e-e666bc29badc,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-workflowrr9xg/series-workflowrr9xg-build-action-3640574740/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-workflowrr9xg/series-workflowrr9xg-build-action-4283041197/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-workflowrr9xg/series-workflowrr9xg-convert-artifact-2478223158/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,}