Name: series-workflowdzlzw Phase: Succeeded StartedAt: 2026-09-15 07:54:18 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[0] Phase: Succeeded StartedAt: 2026-09-15 07:54:18 +0000 UTC FinishedAt: 2026-09-15 08:16:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 07:54:18 +0000 UTC FinishedAt: 2026-09-15 08:16:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ROUTE_MULTIPATH", "IP_ADVANCED_ROUTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ROUTE_MULTIPATH", "IP_ADVANCED_ROUTER" ], "series_id": "8d50c3cf-7c70-4dbd-964d-41903facb8c9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_select_multipath" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGApLCBhbmQgYWRkcyBgUkVBRF9PTkNFKClgIGFubm90YXRpb25zIGZvciBjb25jdXJyZW50IGFjY2Vzc2VzLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZpYl9zZWxlY3RfbXVsdGlwYXRoIGluIElQdjQgRklCIHJvdXRlIHNlbGVjdGlvbiBsb2dpYywgY2hlY2tpbmcgdGhlIGRldmljZSBhZGRyZXNzIGdlbmVyYXRpb24gSUQgKGRldl9hZGRyX2dlbmlkKSBhbmQgdXNpbmcgUkVBRF9PTkNFIGZvciBjb25jdXJyZW5jeSBzYWZldHkgd2hlbiBtYXRjaGluZyBjYW5kaWRhdGUgbmV4dGhvcHMgd2l0aCBhIGZsb3cgc291cmNlIGFkZHJlc3MuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIG11bHRpcGF0aCByb3V0ZSBzZWxlY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCA3YTM2MmYyZTJjMmJkLi5lMmJmYzExYWVhMDljIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC0yMTg0LDYgJiM0MzsyMTg0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdGJvb2wgdXNlX25laWdoO1xuIFx0aW50IHNjb3JlID0gLTE7XG4gXHRfX2JlMzIgc2FkZHI7XG4mIzQzO1x0aW50IGdlbmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbiBcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbkBAIC0yMTkyLDYgJiM0MzsyMTkzLDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcbiBcdHVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfZmliX211bHRpcGF0aF91c2VfbmVpZ2gpO1xuIFx0c2FkZHIgPSBmbDQgPyBmbDQtXHUwMDNlc2FkZHIgOiAwO1xuJiM0MztcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuIFxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuQEAgLTIyMDQsNyAmIzQzOzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuJiM0MztcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4gXHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4gXHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmaWJfc2VsZWN0X211bHRpcGF0aCBpbiBJUHY0IEZJQiByb3V0ZSBzZWxlY3Rpb24gbG9naWMsIGNoZWNraW5nIHRoZSBkZXZpY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChkZXZfYWRkcl9nZW5pZCkgYW5kIHVzaW5nIFJFQURfT05DRSBmb3IgY29uY3VycmVuY3kgc2FmZXR5IHdoZW4gbWF0Y2hpbmcgY2FuZGlkYXRlIG5leHRob3BzIHdpdGggYSBmbG93IHNvdXJjZSBhZGRyZXNzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA4OjEyOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTIxODQsNiAmIzQzOzIxODQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCWJvb2wgdXNlX25laWdoOwogCWludCBzY29yZSA9IC0xOwogCV9fYmUzMiBzYWRkcjsKJiM0MzsJaW50IGdlbmlkOwogCiAJaWYgKHVubGlrZWx5KHJlcy0mZ3Q7ZmktJmd0O25oKSkgewogCQluZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpOwpAQCAtMjE5Miw2ICYjNDM7MjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAKIAl1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7CiAJc2FkZHIgPSBmbDQgPyBmbDQtJmd0O3NhZGRyIDogMDsKJiM0MzsJZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKCZhbXA7bmV0LSZndDtpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7CiAKIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKIAkJaW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7CkBAIC0yMjA0LDcgJiM0MzsyMjA2LDkgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCwKIAkJICAgICh1c2VfbmVpZ2ggJmFtcDsmYW1wOyAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHNhZGRyICZhbXA7JmFtcDsgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHIgPT0gc2FkZHIpCiYjNDM7CQlpZiAoc2FkZHIgJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpCiAJCQluaF9zY29yZSAmIzQzOz0gMjsKIAkJaWYgKGhhc2ggJmx0Oz0gbmhfdXBwZXJfYm91bmQpCiAJCQluaF9zY29yZSYjNDM7JiM0Mzs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZJQiBTZW1hbnRpY3MgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gRmlyc3QsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkaWZmIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgY2hhbmdlcy4gVGhlbiwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTg0LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmVzaWRlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzbyBJJiMzOTtsbCB3YW50IHRvIHJlYWQgdGhlIGNvZGUgYSBiaXQgYmVmb3JlIGFuZCBhZnRlciB0aGF0IGxpbmUuIFRpbWUgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3Qg4oCTIHRvIG5hdmlnYXRlIHRvIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlLiBHb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4yMTgxOlx0e1xuMjE4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cdTAwM2VmaTtcbjIxODM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVx1MDAzZWZpYl9uZXQ7XG4yMTg0Olx0XHRib29sIHVzZV9uZWlnaDtcbjIxODU6XHRcdGludCBzY29yZSA9IC0xO1xuMjE4NjpcdFx0X19iZTMyIHNhZGRyO1xuMjE4NzpcdFx0aW50IGdlbmlkO1xuMjE4ODpcdFxuMjE4OTpcdFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbjIxOTA6XHRcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbjIxOTE6XHRcdFx0cmV0dXJuO1xuMjE5MjpcdFx0fVxuMjE5MzpcdFxuMjE5NDpcdFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4yMTk1Olx0XHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4yMTk2Olx0XHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcbjIxOTc6XHRcbjIxOTg6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjE5OTpcdFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbjIyMDA6XHRcbjIyMDE6XHRcdFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXG4yMjAyOlx0XHRcdCAqIG1pbnVzIG9uZSB3aGVuIFwmIzM0O2lnbm9yZV9yb3V0ZXNfd2l0aF9saW5rZG93blwmIzM0OyBpcyBzZXQuXG4yMjAzOlx0XHRcdCAqL1xuMjIwNDpcdFx0XHRuaF91cHBlcl9ib3VuZCA9IGF0b21pY19yZWFkKFx1MDAyNm5leHRob3BfbmgtXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcbjIyMDU6XHRcdFx0aWYgKG5oX3VwcGVyX2JvdW5kID09IC0xIHx8XG4yMjA2Olx0XHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuMjIwNzpcdFx0XHRcdGNvbnRpbnVlO1xuMjIwODpcdFxuMjIwOTpcdFx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2XG4yMjEwOlx0XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2XG4yMjExOlx0XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4yMjEyOlx0XHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4yMjEzOlx0XHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4yMjE0Olx0XHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuMjIxNTpcdFx0XHRpZiAoc2NvcmUgXHUwMDNjIG5oX3Njb3JlKSB7XG4yMjE2Olx0XHRcdFx0cmVzLVx1MDAzZW5oX3NlbCA9IG5oc2VsO1xuMjIxNzpcdFx0XHRcdHJlcy1cdTAwM2VuaGMgPSBcdTAwMjZuZXh0aG9wX25oLVx1MDAzZW5oX2NvbW1vbjtcbjIyMTg6XHRcdFx0XHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFx1MDAyNlx1MDAyNiBuaF9zY29yZSA9PSAxKSlcbjIyMTk6XHRcdFx0XHRcdHJldHVybjtcbjIyMjA6XHRcdFx0XHRzY29yZSA9IG5oX3Njb3JlO1xuMjIyMTpcdFx0XHR9XG4yMjIyOlx0XG4yMjIzOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4yMjI0Olx0fVxuMjIyNTpcdCNlbmRpZlxuMjIyNjpcdFxuMjIyNzpcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbjIyMjg6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMjI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGFyb3VuZCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgY29udHJvbGxpbmcgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBSaWdodCwgc28gbGluZSAyMjI1IGhhcyBhbiBgI2VuZGlmYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdyYXBwZWQgaW4gYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgYmFjay4gSSYjMzk7bGwgY2hlY2sgd2hhdCYjMzk7cyBnb2luZyBvbiBmcm9tIGxpbmVzIDIxNTAgdG8gMjE4NS4gSSYjMzk7bSBleHBlY3RpbmcgYW4gYCNpZmRlZmAgb3IgYSBzaW1pbGFyIGRpcmVjdGl2ZSB0byBiZSBndWFyZGluZyB0aGF0IGJsb2NrLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wgdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIG11bHRpLXBhdGggc2VsZWN0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB1bmRlciB3aGljaCBjb25kaXRpb25zIHRoaXMgbG9naWMgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0XHRcdGlmIChsaWtlbHkobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcbjIxNjI6XHRcdFx0XHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cdTAwM2VmaWJfbmhfZGV2LFxuMjE2MzpcdFx0XHRcdFx0XHRcdCAgIChfX2ZvcmNlIHUzMiluaC1cdTAwM2VmaWJfbmhfZ3c0KTtcbjIxNjQ6XHRcdFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4yMTY1Olx0XHRcdFx0IG5oLVx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYpXG4yMTY2Olx0XHRcdFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXHUwMDNlZmliX25oX2RldixcbjIxNjc6XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KTtcbjIxNjg6XHRcdFx0ZWxzZVxuMjE2OTpcdFx0XHRcdG4gPSBOVUxMO1xuMjE3MDpcdFx0XHRpZiAobilcbjIxNzE6XHRcdFx0XHRzdGF0ZSA9IFJFQURfT05DRShuLVx1MDAzZW51ZF9zdGF0ZSk7XG4yMTcyOlx0XG4yMTczOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3NDpcdFx0fVxuMjE3NTpcdFxuMjE3NjpcdFx0cmV0dXJuICEhKHN0YXRlIFx1MDAyNiBOVURfVkFMSUQpO1xuMjE3NzpcdH1cbjIxNzg6XHRcbjIxNzk6XHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuMjE4MDpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuMjE4MTpcdHtcbjIxODI6XHRcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXHUwMDNlZmk7XG4yMTgzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cdTAwM2VmaWJfbmV0O1xuMjE4NDpcdFx0Ym9vbCB1c2VfbmVpZ2g7XG4yMTg1Olx0XHRpbnQgc2NvcmUgPSAtMTtcbjIxODY6XHRcdF9fYmUzMiBzYWRkcjtcbjIxODc6XHRcdGludCBnZW5pZDtcbjIxODg6XHRcbjIxODk6XHRcdGlmICh1bmxpa2VseShyZXMtXHUwMDNlZmktXHUwMDNlbmgpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGEgc3BlY2lmaWMgYCNpZmRlZmAgZGlyZWN0aXZlIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgZmlsZSwgYW5kIEkga25vdyBpdCYjMzk7cyBsb2NhdGVkIHNvbWV3aGVyZSBiZWZvcmUgbGluZXMgMjE3OCBvciAyMTYwLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IGJ5IHNjYW5uaW5nIHRoZSBlYXJsaWVyIGxpbmVzIGluIHRoZSBmaWxlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBvciBjb2RlIGluY2x1c2lvbiBiYXNlZCBvbiBhIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBGaW5kaW5nIHRoZSBwcmVjaXNlIGxvY2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGZyb20gdGhlIHRvcCBhbmQgemVybyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEzMDpcdFx0XHRcdCAgICAhKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSlcbjIxMzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEzMjpcdFx0XHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYgIT0gZGV2IHx8XG4yMTMzOlx0XHRcdFx0ICAgICFfX2luX2Rldl9nZXRfcnRubChkZXYpKVxuMjEzNDpcdFx0XHRcdFx0Y29udGludWU7XG4yMTM1Olx0XHRcdFx0YWxpdmUmIzQzOyYjNDM7O1xuMjEzNjpcdFx0XHRcdG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNj0gfm5oX2ZsYWdzO1xuMjEzNzpcdFx0XHRcdGNhbGxfZmliX25oX25vdGlmaWVycyhuZXh0aG9wX25oLCBGSUJfRVZFTlRfTkhfQUREKTtcbjIxMzg6XHRcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpXG4yMTM5Olx0XG4yMTQwOlx0XHRcdGlmIChhbGl2ZSBcdTAwM2UgMCkge1xuMjE0MTpcdFx0XHRcdGZpLVx1MDAzZWZpYl9mbGFncyBcdTAwMjY9IH5uaF9mbGFncztcbjIxNDI6XHRcdFx0XHRyZXQmIzQzOyYjNDM7O1xuMjE0MzpcdFx0XHR9XG4yMTQ0Olx0XG4yMTQ1Olx0XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xuMjE0NjpcdFx0fVxuMjE0NzpcdFxuMjE0ODpcdFx0cmV0dXJuIHJldDtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbjIxNTI6XHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcbjIxNTM6XHR7XG4yMTU0Olx0XHRpbnQgc3RhdGUgPSBOVURfUkVBQ0hBQkxFO1xuMjE1NTpcdFxuMjE1NjpcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKSB7XG4yMTU3Olx0XHRcdHN0cnVjdCBuZWlnaGJvdXIgKm47XG4yMTU4Olx0XG4yMTU5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxNjA6XHRcbjIxNjE6XHRcdFx0aWYgKGxpa2VseShuaC1cdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxuMjE2MjpcdFx0XHRcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVx1MDAzZWZpYl9uaF9kZXYsXG4yMTYzOlx0XHRcdFx0XHRcdFx0ICAgKF9fZm9yY2UgdTMyKW5oLVx1MDAzZWZpYl9uaF9ndzQpO1xuMjE2NDpcdFx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAqKgoKT2theSwgc28gSSBzZWUgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBvbiBsaW5lIDIxNTEuIFRoYXQmIzM5O3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUsIG1lYW5pbmcgYSBibG9jayBvZiBjb2RlIGlzIG9ubHkgaW5jbHVkZWQgaWYgYSBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGUgb3B0aW9uIGluIHF1ZXN0aW9uIGlzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCBhY3R1YWxseSAqbWVhbnMqLiBXaGF0IGRvZXMgaXQgY29udHJvbD8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdvdWxkIGNob29zZSB0byBlbmFibGU/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgb2YgY29kZSBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgaXQmIzM5O3MgdGllZCB0by4gSSBuZWVkIHRoZSBLY29uZmlnIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kuIExldCYjMzk7cyBnbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGtub3cgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIHRoaXMgZGlyZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03OS1cbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxubmV0L2lwdjQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7SVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBJUHY0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgbGluZSA4MCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgc3BlY2lmaWMsIHByb2JhYmx5IGltcG9ydGFudCwgYXNwZWN0IG9mIElQdjQuIEJhc2VkIG9uIGl0cyBsaWtlbHkgcG9zaXRpb24gaW4gdGhlIGZpbGUsIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsIChsaWtlIHRoZSBjb3JlIHByb3RvY29sIGVuYWJsZS9kaXNhYmxlIG9wdGlvbnMpLCBidXQgbW9yZSBmb2N1c2VkIG9uIGEgcGFydGljdWxhciBmZWF0dXJlLCBzdWJzeXN0ZW0sIG9yIHR1bmFibGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hhdCAqZXhhY3RseSogaXMgYmVpbmcgY29uZmlndXJlZCB0aGVyZT8gSXMgaXQgcmVsYXRlZCB0byByb3V0aW5nLCBjb25uZWN0aW9uIHRyYWNraW5nLCBmaXJld2FsbGluZyAoaXB0YWJsZXMpLCBzb21lIGFkdmFuY2VkIHByb3RvY29sIGV4dGVuc2lvbiwgb3IgbWF5YmUgc29tZSBwZXJmb3JtYW5jZS1yZWxhdGVkIGtub2JzPyBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRpc2N1c3NlZC4gVGhlIGNvbnRleHQgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBpdC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XG4gIDk3Olx0XHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxuICA5ODpcdFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cbiAgOTk6XHRcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUm91dGUgTXVsdGlwYXRoaW5nKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCByZWxpZXMgb24gYENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdW5kZXJzdGFuZCAqd2h5KiBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBhIHByZXJlcXVpc2l0ZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGRvZXMgdGhhdCBvcHRpb24gYnJpbmcgdG8gdGhlIHRhYmxlIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gcm91dGUgbXVsdGlwYXRoaW5nPyBJcyBpdCB0aGUgcG9saWN5IHJvdXRpbmcsIHRoZSBtYXJraW5nIGNhcGFiaWxpdGllcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIG9mIHRob3NlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNC1cbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb21taXQsIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQsIGFuZCB3aHkuIFNpbmNlIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBgZ2l0IGxvZ2AgYXMgYSB0b29sIGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgYXZhaWxhYmxlIGluZm9ybWF0aW9uIGxpa2UgY29tbWl0IG1lc3NhZ2VzIG9yIG90aGVyIHJlc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNvbnRleHQuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gaXMgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSBjYW4gc2VlIHRoZXJlIGlzIGEgY2hhbmdlIHRvIGhvdyB3ZSBzZWxlY3QgdGhlIG5leHQgaG9wIGZvciBhIHJvdXRlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYGdlbmlkYCwgd2hpY2ggaXMgcmVsYXRlZCB0byB0aGUgc291cmNlIElQIGFkZHJlc3MgKGBzYWRkcmApIGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCByb3V0aW5nLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnZW5pZGAgaXMgYXNzaWduZWQgYW5kIGxhdGVyIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjayBhbG9uZyB3aXRoIGBuaF9zYWRkcmAuIFRoZSBjb2RlIG5vdyBjaGVja3Mgbm90IG9ubHkgaWYgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCBtYXRjaGVzIHRoZSBzb3VyY2UgYWRkcmVzcyAoYHNhZGRyYCksIGJ1dCBhbHNvIGlmIHRoZSBgbmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgYSBsb2NhbGx5IHN0b3JlZCBgZ2VuaWRgLiBUaGlzIGltcGxpZXMgdGhhdCBgZ2VuaWRgIG1pZ2h0IGJlIHVzZWQgYXMgYSB2ZXJzaW9uIGlkZW50aWZpZXIsIG9yIHNvbWUgaW5kaWNhdG9yIHRoYXQgY2hlY2tzIHdoZXRoZXIgYHNhZGRyYCBpcyBzdGFsZS4gVGhlIGNvZGUgYWxzbyB1c2VzIHRoZSBgUkVBRF9PTkNFYCBtYWNybywgaW5kaWNhdGluZyB0aGF0IHRoZXNlIHZhcmlhYmxlcyBtaWdodCBiZSBhY2Nlc3NlZCBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgYGdlbmlkYCwgYW5kIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIHRvIGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhpcyBjaGFuZ2UgY29tcGxldGVseS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBuaF9zYWRkcl9nZW5pZGAgYW5kIHRoZSBvdGhlciBmaWVsZHMgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGBnZW5pZGAgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZCwgYW5kIHdoYXQgcHJvYmxlbSBpdCYjMzk7cyB0cnlpbmcgdG8gc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3NhZGRyX2dlbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTEwNz1zdHJ1Y3QgZmliX25oIHtcbi0tXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXHRfX2JlMzJcdFx0XHRuaF9zYWRkcjtcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcdGludFx0XHRcdG5oX3NhZGRyX2dlbmlkO1xuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE2LSNkZWZpbmUgZmliX25oX2ZhbWlseVx0XHRuaF9jb21tb24ubmhjX2ZhbWlseVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNy1cdFdSSVRFX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI4Olx0V1JJVEVfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQzLVx0XHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTM0NDpcdFx0aWYgKFJFQURfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMDktXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlx0XHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRklCIFByZWZpeGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGZpYl9yZXN1bHRfcHJlZnNyY2AuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHJvdWdobHkgbGluZSAxMzMzIOKAkyB0aGF0IHNob3VsZCBwdXQgbWUgaW4gdGhlIHZpY2luaXR5IG9mIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgbGlrZWx5IHVzZWQgYW5kIGhvcGVmdWxseSwgZGVmaW5lZC4gSG9wZWZ1bGx5IHRoZSBjb250ZXh0IHRoZXJlIHdpbGwgaWxsdW1pbmF0ZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XG4xMzIxOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcbjEzMjI6XHRcdFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVx1MDAzZW5oY19kZXYsIDAsIHNjb3BlKTtcbjEzMjM6XHRcbjEzMjQ6XHRcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcbjEzMjU6XHRcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cdTAwM2VmaWJfbmhfZGV2LCBuaC1cdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XG4xMzI2Olx0XG4xMzI3Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XG4xMzI4Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIHNhZGRyO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRfX2JlMzIgZmliX3Jlc3VsdF9wcmVmc3JjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbjEzMzQ6XHR7XG4xMzM1Olx0XHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVx1MDAzZW5oYztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmIChyZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmMpXG4xMzM4Olx0XHRcdHJldHVybiByZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmM7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xuMTM0MTpcdFx0XHRzdHJ1Y3QgZmliX25oICpuaDtcbjEzNDI6XHRcbjEzNDM6XHRcdFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xuMTM0NDpcdFx0XHRpZiAoUkVBRF9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxuMTM0NTpcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuMTM0NjpcdFx0XHRcdHJldHVybiBSRUFEX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIpO1xuMTM0NzpcdFx0fVxuMTM0ODpcdFxuMTM0OTpcdFx0cmV0dXJuIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIobmV0LCBuaGMsIHJlcy1cdTAwM2VmaS1cdTAwM2VmaWJfc2NvcGUpO1xuMTM1MDpcdH1cbjEzNTE6XHRcbjEzNTI6XHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXG4xMzUzOlx0e1xuMTM1NDpcdFx0aWYgKGNmZy1cdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVx1MDAzZWZjX2RzdCB8fFxuMTM1NTpcdFx0ICAgIGZpYl9wcmVmc3JjICE9IGNmZy1cdTAwM2VmY19kc3QpIHtcbjEzNTY6XHRcdFx0dTMyIHRiX2lkID0gY2ZnLVx1MDAzZWZjX3RhYmxlO1xuMTM1NzpcdFx0XHRpbnQgcmM7XG4xMzU4Olx0XG4xMzU5Olx0XHRcdGlmICh0Yl9pZCA9PSBSVF9UQUJMRV9NQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VuZXJhdGlvbiBJRCBDaGVjayBpbiBgZmliX3NlbWFudGljcy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGZpYl9zZW1hbnRpY3MuY2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBnZW5lcmF0aW9uIElEIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSwgYW5kIHRoaXMgZml4IGRpcmVjdGx5IGFkZHJlc3NlcyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gRXNzZW50aWFsbHksIGVhY2ggbmV4dCBob3AgKGBuaGApIGNhY2hlcyBpdHMgc291cmNlIGFkZHJlc3MgKGBuaF9zYWRkcmApIGFuZCBpdHMgYXNzb2NpYXRlZCBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKS4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgaXMgdXBkYXRlZCwgd2hpY2ggaGFwcGVucywgc2F5LCB3aGVuIG5ldHdvcmsgZGV2aWNlIGFkZHJlc3NlcyBhcmUgbW9kaWZpZWQuIFdpdGhvdXQgdGhlIHVwZGF0ZWQgY2hlY2ssIGEgc3RhbGUgYG5oLSZndDtuaF9zYWRkcmAgY291bGQgYmUgdXNlZCB3aXRoIGEgbmV3ZXIgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4KClRoZSBmaXggaXMgY2xldmVyLiBJdCBub3cgY2hlY2tzIGlmIGBuaC0mZ3Q7bmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgdGhlIGN1cnJlbnQgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgKmJlZm9yZSogY29tcGFyaW5nIHRoZSBzb3VyY2UgYWRkcmVzc2VzLiBJZiB0aGV5IG1hdGNoLCBpdCAqdGhlbiogZG9lcyB0aGUgc291cmNlIGFkZHJlc3MgY29tcGFyaXNvbi4gQW5kIG9mIGNvdXJzZSwgdGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBoZXJlIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBkYXRhIHJlYWRzIGFyZSBhdG9taWMgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgb24gdGhlc2UgcG90ZW50aWFsbHkgY29uY3VycmVudGx5LXVwZGF0ZWQgc2hhcmVkIHZhcmlhYmxlcyEgSXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciBkb2VzbiYjMzk7dCBvcHRpbWl6ZSBhd2F5IGEgY3J1Y2lhbCByZWFkIG9yIHJlb3JkZXIgdGhlIHJlYWRzIGluIGEgd2F5IHRoYXQgYnJlYWtzIHRoZSBsb2dpYy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZSBwYXRoLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBkbyBpcyBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXMgdGhpcyBhIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGhpdCBmcmVxdWVudGx5LCBvciBpcyBpdCBtb3JlIG9mIGFuIGVkZ2UgY2FzZT8gV2hlcmUgaXMgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBhY3R1YWxseSBjYWxsZWQgZnJvbT8gVGltZSB0byBnZXQgdGhlIGdyZXBwZXIgb3V0IGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfZmliLmg9NTc0PWludCBmaWJfY2hlY2tfbmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oICpuaCwgdTMyIHRhYmxlLCB1OCBzY29wZSxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3NS1cdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcF9maWIuaDo1NzY6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNTI9c3RhdGljIGJvb2wgZmliX2dvb2RfbmgoY29uc3Qgc3RydWN0IGZpYl9uaCAqbmgpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNzgtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE3OTp2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIyMjc9dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM2LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIyMzc6XHRcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM4LVx0fVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjE5OD1pcF9ta3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjA1LVxubmV0L2lwdjQvcm91dGUuYzoyMjA2Olx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIE5VTEwpO1xubmV0L2lwdjQvcm91dGUuYy0yMjA3LVx0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgfD0gSVBTS0JfTVVMVElQQVRIO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY0IHJvdXRpbmcgY29udGV4dC4gIFRoZSBjb2RlIHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBmaXJzdCwgd2l0aGluIGBmaWJfc2VsZWN0X3BhdGhgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBpdCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBwYXRoIHNlbGVjdGlvbiBwcm9jZXNzLiBTZWNvbmQsIGl0JiMzOTtzIGFsc28gY2FsbGVkIGZyb20gYGlwX21rcm91dGVfaW5wdXRgIGluIGBuZXQvaXB2NC9yb3V0ZS5jYC4gSG1tLCBgaXBfbWtyb3V0ZV9pbnB1dGAgaXMgdXNlZCBmb3IgaW5wdXQgcm91dGUgY3JlYXRpb24sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpHaXZlbiB0aGVzZSB0d28gY2FsbCBzaXRlcywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY2FsbGVycyBvZiBgZmliX3NlbGVjdF9wYXRoYCB0byBnZXQgdGhlIGNvbnRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGEgYnJvYWRlciB2aWV3IGFuZCBoZWxwIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBiZWluZyB1c2VkIGZvciBgZmliX3NlbGVjdF9wYXRoYCB3aGljaCBpbiB0dXJuIHdpbGwgc2hvdyB0aGUgdXNhZ2Ugb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGF0aCBmb3IgaW52ZXN0aWdhdGlvbiByaWdodCBub3csIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBicm9hZGVyIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF9maWIuaD01NzY9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XG5pbmNsdWRlL25ldC9pcF9maWIuaDo1Nzg6dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc5LVx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjM1MT1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDQ1LVx0aWYgKGZpYl9pbmZvX251bV9wYXRoKHJlcy5maSkgXHUwMDNlIDEpXG5uZXQvY29yZS9maWx0ZXIuYzo2NDQ2Olx0XHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcdTAwMjZyZXMsIFx1MDAyNmZsNCwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYy02NDQ3LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMjYtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIyNzp2b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIyOC1cdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYz03NzM9c3RhdGljIHZvaWQgX19pcF9kb19yZWRpcmVjdChzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtODI3LVxubmV0L2lwdjQvcm91dGUuYzo4Mjg6XHRcdFx0XHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcdTAwMjZyZXMsIGZsNCwgc2tiKTtcbm5ldC9pcHY0L3JvdXRlLmMtODI5LVx0XHRcdFx0bmhjID0gRklCX1JFU19OSEMocmVzKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEwNDg9c3RhdGljIHZvaWQgX19pcF9ydF91cGRhdGVfcG10dShzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IGZsb3dpNCAqZmw0LCB1MzIgbXR1KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTA3Ny1cbm5ldC9pcHY0L3JvdXRlLmM6MTA3ODpcdFx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgXHUwMDI2cmVzLCBmbDQsIE5VTEwpO1xubmV0L2lwdjQvcm91dGUuYy0xMDc5LSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNzQxPXN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yODk4LVxubmV0L2lwdjQvcm91dGUuYzoyODk5Olx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgcmVzLCBmbDQsIHNrYik7XG5uZXQvaXB2NC9yb3V0ZS5jLTI5MDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgY29yZSBJUHY0IHJvdXRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICptdWx0aXBhdGgqIHJvdXRlIHNlbGVjdGlvbi4gSSBrbm93IHRoYXQgYGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3VgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAgYm90aCBjYWxsIGludG8gdGhpcyBhcmVhLCBzbyBpdCYjMzk7cyBhIGhvdCBwYXRoLCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwYXRoIGVuYWJsZWQsIHdoaWNoIFN5emthbGxlciBsb3ZlcyB0byBleGVyY2lzZSB0aHJvdWdoIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMgYW5kIHNvY2tldCBjcmVhdGlvbi4gR29vZCwgdGhhdCYjMzk7cyBhbHJlYWR5IGEgc3Ryb25nIGluZGljYXRvci4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGhpdHRpbmcgdXAgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gRmlyc3QsIFNlY3Rpb24gMTogJiMzNDtSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwmIzM0OyByaWdodD8gQW5kIHRoZSBwYXRjaCBpcyBvcGVyYXRpbmcgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgc28gdGhhdCYjMzk7cyBnb29kLiBUaGV5IHNheSBkb24mIzM5O3QgdHJ1c3QgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyAoTkZDSSkgbGFiZWwgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIGJsaW5kbHksIGFuZCB0aGF0JiMzOTtzIHNvbGlkIGFkdmljZS4gQW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgcGF0Y2ggZmFsbHMgcmlnaHQgaW50byB0aGF0LgoKTm93LCBTZWN0aW9uIDIgaXMgdGhlICYjMzQ7d2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2VjdGlvbi4gTm9wZSwgbm90aGluZyBoZXJlIGFwcGxpZXMuIFRoZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGluIGtlcm5lbCwgZXhlY3V0YWJsZSBjb2RlLiBObyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBoZXJlLiBObyB1bnJlYWNoYWJsZSBwYXRocy4KCkZpbmFsbHksIFNlY3Rpb24gMy4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBUaGlzIHBhdGNoICpkb2VzKiB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUhIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIGNvcmUgbmV0d29ya2luZyA9IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEl0JiMzOTtzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAhIE1vZGlmeWluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgaXMuIEFuZCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCAqcm91dGUgc2VsZWN0aW9uIGxvZ2ljKiB3aGljaCBpcyBjb3JlIQoKU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgaG93IGNhbmRpZGF0ZSBuZXh0aG9wcyBhcmUgc2NvcmVkIGluIG11bHRpcGF0aCByb3V0aW5nLiBJdCYjMzk7cyBjb21wYXJpbmcgYG5oX3NhZGRyX2dlbmlkYCB3aXRoIGBuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWRgIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGlzIGlzICpkaXJlY3RseSogYWZmZWN0aW5nIHJvdXRlIHNlbGVjdGlvbi4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYWN0dWFsbHkgY29tcGlsZSBhbmQgcmVhY2ggYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSBjYW4gc2VlIGl0IGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgaWYgdGhlIGZpbGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgaXRzZWxmIGhhcyBvdGhlciBndWFyZHMsIG9yIGlmIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3MgdG8gcmVwcm9kdWNlIGFuZCB0cmlnZ2VyIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfc2VtYW50aWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4tLVxubmV0L2lwdjQvZmliX2xvb2t1cC5oPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBmaWJfYWxpYXNfYWNjZXNzZWQoc3RydWN0IGZpYl9hbGlhcyAqZmEpXG4tLVxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM2LVxubmV0L2lwdjQvZmliX2xvb2t1cC5oOjM3Oi8qIEV4cG9ydGVkIGJ5IGZpYl9zZW1hbnRpY3MuYyAqL1xubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM4LXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBmaWJfc2VtYW50aWNzLm8gYW5kIE11bHRpcGF0aCBSb3V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGZpYl9zZW1hbnRpY3Mub2AgaXMgaW50ZWdyYXRlZC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBidWlsdCBpbnRvIGBvYmoteWAgd2hlbiBJUHY0IGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZSBsaW5lIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBsaW5lIDIxNTE6IGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgLgoKSSYjMzk7bGwgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFNvLCBtdWx0aXBhdGggcm91dGluZyBpcyBlbmFibGVkIHdoZW4gYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgc2V0LgoKTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBJcyBpdCBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgYWdhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNDpcdFxuICAxNTpcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBJZiB5b3UgaW50ZW5kIHRvIHJ1biB5b3VyIExpbnV4IGJveCBtb3N0bHkgYXMgYSByb3V0ZXIsIGkuZS4gYXMgYVxuICAxOTpcdFx0ICBjb21wdXRlciB0aGF0IGZvcndhcmRzIGFuZCByZWRpc3RyaWJ1dGVzIG5ldHdvcmsgcGFja2V0cywgc2F5IFk7IHlvdVxuICAyMDpcdFx0ICB3aWxsIHRoZW4gYmUgcHJlc2VudGVkIHdpdGggc2V2ZXJhbCBvcHRpb25zIHRoYXQgYWxsb3cgbW9yZSBwcmVjaXNlXG4gIDIxOlx0XHQgIGNvbnRyb2wgYWJvdXQgdGhlIHJvdXRpbmcgcHJvY2Vzcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcbiAgMjQ6XHRcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDI1Olx0XHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxuICAyNjpcdFxuICAyNzpcdFx0ICBOb3RlIHRoYXQgeW91ciBib3ggY2FuIG9ubHkgYWN0IGFzIGEgcm91dGVyIGlmIHlvdSBlbmFibGUgSVBcbiAgMjg6XHRcdCAgZm9yd2FyZGluZyBpbiB5b3VyIGtlcm5lbDsgeW91IGNhbiBkbyB0aGF0IGJ5IHNheWluZyBZIHRvIFwmIzM0Oy9wcm9jXG4gIDI5Olx0XHQgIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgYW5kIFwmIzM0O1N5c2N0bCBzdXBwb3J0XCYjMzQ7IGJlbG93IGFuZCBleGVjdXRpbmcgdGhlXG4gIDMwOlx0XHQgIGxpbmVcbiAgMzE6XHRcbiAgMzI6XHRcdCAgZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZFxuICAzMzpcdFxuICAzNDpcdFx0ICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2hcbiAgMzc6XHRcdCAgYXV0b21hdGljYWxseSByZWplY3RzIGluY29taW5nIHBhY2tldHMgaWYgdGhlIHJvdXRpbmcgdGFibGUgZW50cnlcbiAgMzg6XHRcdCAgZm9yIHRoZWlyIHNvdXJjZSBhZGRyZXNzIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGV5JiMzOTtyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE11bHRpcGF0aCBSb3V0aW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplciBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZm9jdXMgb24uCgpGaXJzdCwgSSBjb25maXJtZWQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBJUF9BRFZBTkNFRF9ST1VURVJgIGFuZCBgSVBfUk9VVEVfTVVMVElQQVRIYC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gdGFyZ2V0IHRob3NlIHNldHRpbmdzLgoKTmV4dCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBleHRyYWN0ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgdG8gcHJldmVudCB0aGUgZnV6emVyIGZyb20gZ2V0dGluZyBkaWx1dGVkIGJ5IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cywgYXZvaWRpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBhIG5vbi1zdGF0aWMgQyBmdW5jdGlvbiBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG15IHB1cnBvc2VzLiBJbXBvcnRhbnRseSwgaXQmIzM5O3MgKm5vdCogY2FsbGVkIGluIGV2ZXJ5IHNpbmdsZSByb3V0ZSBsb29rdXAuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIG11bHRpcGF0aCByb3V0aW5nLCBhbmQgdGhpcyBpcyBjcnVjaWFsLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIG11bHRpcGxlIG5leHQgaG9wcyBhcmUgY29uZmlndXJlZCBhbmQgYWN0aXZlLCB3aGljaCBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQuIEkgY2FuIHNlZSB0aGlzIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgKGNhbGxlZCBieSBgZmliX3NlbGVjdF9wYXRoYCB3aGljaCBvbmx5IHVzZXMgdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24gaWYgYSBtdWx0aXBhdGggcm91dGUgaXMgcHJlc2VudCkuCgpJIGNvbnNpZGVyZWQgYGZpYl9zZWxlY3RfcGF0aGAsIGJ1dCB0aGF0JiMzOTtzIGZhciB0b28gZ2VuZXJhbC4gSXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkqIElQdjQgcm91dGUgbG9va3VwLCByZWdhcmRsZXNzIG9mIG11bHRpcGF0aCBjb25maWd1cmF0aW9uLiBUaGF0IHdvdWxkIG1ha2UgaXQgYSBiYWQgY2hvaWNlLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzLgoKVGhlbiwgSSBkb3VibGUtY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgd2VyZSAqYW55KiBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIG9yIGFmZmVjdGVkLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgbmhfc2FkZHJfZ2VuaWRgLiBIb3dldmVyLCBiYXNlZCBvbiB0aGUgYGRpZmZgLCB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllZCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLCBzbyBteSBmb2N1cyBpcyBuYXJyb3dlZCwgYW5kIG15IGZ1enppbmcgZWZmb3J0cyB3aWxsIGJlIGRpcmVjdGVkIHRvd2FyZHMgZXhhY3RseSB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0IG5lZWRzIHRoZSBtb3N0IGF0dGVudGlvbi4KCkkgY29uZmlybWVkIHRoYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbmRlZWQgYSBnbG9iYWwgbm9uLWlubGluZSBmdW5jdGlvbiwgYSB2YWxpZCBzeW1ib2wgaW4gdGhlIGB2bWxpbnV4YCBrZXJuZWwgaW1hZ2UuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSByZS1yZXZpZXdlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBmb3JtYXQsIG1ha2luZyBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgpTbywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJvdXRlIHNlbGVjdGlvbiBsb2dpYyB3aXRoaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gU3BlY2lmaWNhbGx5LCBpdCB2YWxpZGF0ZXMgdGhlIGNhbmRpZGF0ZSBuZXh0aG9wIGFkZHJlc3NlcyBhZ2FpbnN0IGBkZXZfYWRkcl9nZW5pZGAsIHVzaW5nIGBSRUFEX09OQ0VgIGZvciBjb25jdXJyZW50LXNhZmUgYWNjZXNzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgZXNwZWNpYWxseSBmb3IgbXVsdGlwYXRoIGVudmlyb25tZW50cy4gSSBhbSBjb25maWRlbnQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyAoYElQX1JPVVRFX01VTFRJUEFUSGAsIGBJUF9BRFZBTkNFRF9ST1VURVJgKSBhbmQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBhcmUgdGhlIHdheSB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmaWJfc2VsZWN0X211bHRpcGF0aCBpbiBJUHY0IEZJQiByb3V0ZSBzZWxlY3Rpb24gbG9naWMsIGNoZWNraW5nIHRoZSBkZXZpY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChkZXZfYWRkcl9nZW5pZCkgYW5kIHVzaW5nIFJFQURfT05DRSBmb3IgY29uY3VycmVuY3kgc2FmZXR5IHdoZW4gbWF0Y2hpbmcgY2FuZGlkYXRlIG5leHRob3BzIHdpdGggYSBmbG93IHNvdXJjZSBhZGRyZXNzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGApLCBhbmQgYWRkcyBgUkVBRF9PTkNFKClgIGFubm90YXRpb25zIGZvciBjb25jdXJyZW50IGFjY2Vzc2VzLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggN2EzNjJmMmUyYzJiZC4uZTJiZmMxMWFlYTA5YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjE4NCw2ICYjNDM7MjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAJYm9vbCB1c2VfbmVpZ2g7CiAJaW50IHNjb3JlID0gLTE7CiAJX19iZTMyIHNhZGRyOwomIzQzOwlpbnQgZ2VuaWQ7CiAKIAlpZiAodW5saWtlbHkocmVzLSZndDtmaS0mZ3Q7bmgpKSB7CiAJCW5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7CkBAIC0yMTkyLDYgJiM0MzsyMTkzLDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCwKIAogCXVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTsKIAlzYWRkciA9IGZsNCA/IGZsNC0mZ3Q7c2FkZHIgOiAwOwomIzQzOwlnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDsKIAogCWNoYW5nZV9uZXh0aG9wcyhmaSkgewogCQlpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDsKQEAgLTIyMDQsNyAmIzQzOzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCQkgICAgKHVzZV9uZWlnaCAmYW1wOyZhbXA7ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcikKJiM0MzsJCWlmIChzYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcikKIAkJCW5oX3Njb3JlICYjNDM7PSAyOwogCQlpZiAoaGFzaCAmbHQ7PSBuaF91cHBlcl9ib3VuZCkKIAkJCW5oX3Njb3JlJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGFza2VkIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZm9yIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgZGl2ZSByaWdodCBpbiBhbmQgbG9vayBhdCB0aGUgY29kZS4gSSBjYW4gc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhcmlhYmxlLCBgZ2VuaWRgLCBhbmQgcmVmZXJlbmNlcyBgbmhfc2FkZHJfZ2VuaWRgIHdoaWNoIGlzIG5ldyB0byBtZS4KCk15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gbG9naWMsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIHNvdXJjZSBhZGRyZXNzIGFmZmluaXR5LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFpbWluZyB0byBtYWtlIG11bHRpcGF0aCBzZWxlY3Rpb24gbW9yZSByb2J1c3Qgd2hlbiBzb3VyY2UgYWRkcmVzc2VzIGFyZSBpbnZvbHZlZC4gVGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcmAsIGFuZCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGEgZ2VuZXJhdGlvbiBJRCBjaGVjayB0byB0aGUgY29tcGFyaXNvbiwgbGlrZWx5IHRvIGd1YXJkIGFnYWluc3Qgc3RhbGUgcm91dGUgZW50cmllcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIG5ldHdvcmsgY29kZSDigJMgdXNpbmcgZ2VuZXJhdGlvbiBJRHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIG5ldHdvcmsgZGV2aWNlcyBjaGFuZ2UgdGhlaXIgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBzeXN0ZW0gbWlnaHQgdGhpbmsgb2xkIGFkZHJlc3NlcyBhcmUgc3RpbGwgdmFsaWQuIEkgc2VlIHRoYXQgYGdlbmlkYCBpcyBvbmx5IHNldCBpZiBgc2FkZHJgIGlzIG5vdCAwLCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBsb2dpYyBpcyBvbmx5IGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBtYXR0ZXJzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBgbmhfc2FkZHJfZ2VuaWRgIGlzIGFuZCBob3cgaXTigJlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGluaXRpYWxpemVkLCBtb2RpZmllZCwgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUbyBkbyB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBgbmhfc2FkZHJfZ2VuaWRgIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHdpbGwgaGVscCBtZSBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBJUHY0IEZJQiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudCBjYWxsIG9uIHdoZXRoZXIgdGhlIHBhdGNoIGlzIGEgZ29vZCBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3NhZGRyX2dlbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTEwNz1zdHJ1Y3QgZmliX25oIHtcbi0tXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXHRfX2JlMzJcdFx0XHRuaF9zYWRkcjtcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcdGludFx0XHRcdG5oX3NhZGRyX2dlbmlkO1xuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE2LSNkZWZpbmUgZmliX25oX2ZhbWlseVx0XHRuaF9jb21tb24ubmhjX2ZhbWlseVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNy1cdFdSSVRFX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI4Olx0V1JJVEVfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQzLVx0XHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTM0NDpcdFx0aWYgKFJFQURfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMDktXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlx0XHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpczoKCioqRGVsdmluZyBpbnRvIGBmaWJfc2VtYW50aWNzLmNgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBmaWJfc2VtYW50aWNzLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBsaW5lcyAxMzE1LTEzNTAgYW5kIHRoZW4gYWdhaW4gb24gMjE4MC0yMjIwLiBUaW1lIHRvIGdldCB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCBmaXJlZCB1cC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBrZXkgYXJlYXMgcmVsYXRlZCB0by4uLiB3ZWxsLCBJIGhhdmUgYSBodW5jaC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdGhlc2Ugc2VjdGlvbnMgd2lsbCBiZSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBvciBvcHRpbWl6YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2Ugc3BlY2lmaWMgbGluZXMgYXJlIGxvY2F0ZWQsIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGNob2ljZXMsIGVkZ2UgY2FzZSBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGltcGxlbWVudGVkIGluIHRoaXMgY29kZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XHRcdGVyciA9IGZpYl9jaGVja19uaF9ub25ndyhuZXQsIG5oLCBleHRhY2spO1xuMTMxMTpcdFxuMTMxMjpcdFx0cmV0dXJuIGVycjtcbjEzMTM6XHR9XG4xMzE0Olx0XG4xMzE1Olx0X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuMTMxNjpcdFx0XHRcdFx0IHVuc2lnbmVkIGNoYXIgc2NvcGUpXG4xMzE3Olx0e1xuMTMxODpcdFx0c3RydWN0IGZpYl9uaCAqbmg7XG4xMzE5Olx0XHRfX2JlMzIgc2FkZHI7XG4xMzIwOlx0XG4xMzIxOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcbjEzMjI6XHRcdFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVx1MDAzZW5oY19kZXYsIDAsIHNjb3BlKTtcbjEzMjM6XHRcbjEzMjQ6XHRcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcbjEzMjU6XHRcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cdTAwM2VmaWJfbmhfZGV2LCBuaC1cdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XG4xMzI2Olx0XG4xMzI3Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XG4xMzI4Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIHNhZGRyO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRfX2JlMzIgZmliX3Jlc3VsdF9wcmVmc3JjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbjEzMzQ6XHR7XG4xMzM1Olx0XHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVx1MDAzZW5oYztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmIChyZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmMpXG4xMzM4Olx0XHRcdHJldHVybiByZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmM7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xuMTM0MTpcdFx0XHRzdHJ1Y3QgZmliX25oICpuaDtcbjEzNDI6XHRcbjEzNDM6XHRcdFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xuMTM0NDpcdFx0XHRpZiAoUkVBRF9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxuMTM0NTpcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuMTM0NjpcdFx0XHRcdHJldHVybiBSRUFEX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIpO1xuMTM0NzpcdFx0fVxuMTM0ODpcdFxuMTM0OTpcdFx0cmV0dXJuIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIobmV0LCBuaGMsIHJlcy1cdTAwM2VmaS1cdTAwM2VmaWJfc2NvcGUpO1xuMTM1MDpcdH1cbjEzNTE6XHRcbjEzNTI6XHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXG4xMzUzOlx0e1xuMTM1NDpcdFx0aWYgKGNmZy1cdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVx1MDAzZWZjX2RzdCB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCwgZm9jdXNpbmcgb24gd2hhdCBJJiMzOTtkIGJlIHRoaW5raW5nIGlmIEkgd2VyZSBkaWdnaW5nIGludG8gdGhlbS4KCioqQW5hbHl6aW5nIHRoZSBJUHY0IEZJQiBTZW1hbnRpY3MgKExpbmVzIDIxODAtMjIzMCkqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlIOKAkyBsaW5lcyAyMTgwIHRocm91Z2ggMjIzMCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbSBpbW1lZGlhdGVseSBtZW50YWxseSBwYXJzaW5nIHRoaXMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSAoRklCKSB3b3JrcyBpbiB0aGUga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgYSBwcmV0dHkgc3BlY2lmaWMgc2NlbmFyaW8sIGxpa2VseSByZWxhdGVkIHRvIHJvdXRlIGxvb2t1cCBvciByb3V0ZSBtYW5pcHVsYXRpb24sIHByb2JhYmx5IHdpdGggYSBmb2N1cyBvbiBJUHY0LCBnaXZlbiB0aGUgZmlsZSBuYW1lIGFuZCB0aGUgY29udGV4dC4KCkkmIzM5O20gbWVudGFsbHkgY3JlYXRpbmcgYSBoeXBvdGhlc2lzOiBJcyB0aGlzIGFib3V0IHJvdXRlIGNhY2hpbmcsIGhhbmRsaW5nIG9mIG11bHRpcGF0aCByb3V0ZXMsIG9yIHBlcmhhcHMgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgdHlwZSBvZiByb3V0ZSBhdHRyaWJ1dGU/IFBlcmhhcHMgaXTigJlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByb3V0ZSBwcmlvcml0aWVzIG9yIHByZWZlcmVuY2UuIEJhc2VkIG9uIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgY29ubmVjdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgdGhhdCAqZGVmaW5lKiB3aGF0IGEgdmFsaWQgcm91dGUgaXMgYW5kIGhvdyBpdOKAmXMgY2hvc2VuLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLiBUaGUgZ29hbCBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIGNvbmZpcm0gdGhlIGludGVudCBvZiB0aGUgY29kZSwgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgdG8gc2VlIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSByb290IGNhdXNlIGZvciB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBmbG93LiBJIHdpbGwga2VlcCBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIGltcG9ydGFudCB0byByb3V0ZSBsb29rdXBzIGFuZCBtb2RpZmljYXRpb25zLiBJ4oCZbSB0aGlua2luZyBJ4oCZbGwgbG9vayBmb3IgYW55IG9mIHRoZSBzdGFuZGFyZCBGSUIgQVBJIGZ1bmN0aW9ucyBzdWNoIGFzIGBmaWJfbG9va3VwYCwgYGZpYl9hZGRfdGFibGVgLCBgZmliX2RlbF90YWJsZWAsIGV0Yy4sIGluIG9yZGVyIHRvIGFuY2hvciB0aGUgY29kZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGV5IGhhbmRsaW5nIGEgc3BlY2lmaWMgdHlwZSBvZiByb3V0ZT8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggYW5jaWxsYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSByb3V0ZXMsIGxpa2UgbWV0cmljcywgcG9saWN5IHJvdXRpbmcgcnVsZXMsIG9yIG5leHQtaG9wIGluZm9ybWF0aW9uPyBBbHNvLCBJIHdpbGwgcXVpY2tseSBsb29rIGZvciBjb21tZW50cyB0aGF0IHdpbGwgZXhwbGFpbiBhbnkgbm9uLW9idmlvdXMgYXNwZWN0IG9mIHRoZSBjb2RlIHRoYXQgbmVlZHMgZXhwbGFuYXRpb24uCgpJIHdpbGwgYWxzbyBxdWlja2x5IGxvb2sgZm9yIGFueSBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgb3Igb3RoZXIgc2VjdGlvbnMgb2YgY29kZSB0aGF0IG1heSBiZSByZWxldmFudC4gVGhlIGNvZGUgbWF5IHVzZSBhIGhlbHBlciBmdW5jdGlvbiB0byBhc3Npc3Qgd2l0aCBpdHMgam9iLCBvciByZWx5IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgc2VjdGlvbiBtYXkgZGVwZW5kIG9uIG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHNldHRpbmdzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24uCgpNeSBtYWluIGdvYWwgaXMgdG8gc29saWRpZnkgYSBjbGVhciBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgSVB2NCBGSUIuIFRoZW4gSSBjYW4gc3RhcnQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGF0IG1lbnRhbCBtb2RlbCB0aGF0IEkgbWlnaHQgbmVlZCB0byBhY3QgdXBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcbjIxODE6XHR7XG4yMTgyOlx0XHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVx1MDAzZWZpO1xuMjE4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXHUwMDNlZmliX25ldDtcbjIxODQ6XHRcdGJvb2wgdXNlX25laWdoO1xuMjE4NTpcdFx0aW50IHNjb3JlID0gLTE7XG4yMTg2Olx0XHRfX2JlMzIgc2FkZHI7XG4yMTg3Olx0XHRpbnQgZ2VuaWQ7XG4yMTg4Olx0XG4yMTg5Olx0XHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuMjE5MDpcdFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuMjE5MTpcdFx0XHRyZXR1cm47XG4yMTkyOlx0XHR9XG4yMTkzOlx0XG4yMTk0Olx0XHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbjIxOTU6XHRcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbjIxOTY6XHRcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuMjE5NzpcdFxuMjE5ODpcdFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4yMTk5Olx0XHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuMjIwMDpcdFxuMjIwMTpcdFx0XHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcbjIyMDI6XHRcdFx0ICogbWludXMgb25lIHdoZW4gXCYjMzQ7aWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXCYjMzQ7IGlzIHNldC5cbjIyMDM6XHRcdFx0ICovXG4yMjA0Olx0XHRcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQpO1xuMjIwNTpcdFx0XHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcbjIyMDY6XHRcdFx0ICAgICh1c2VfbmVpZ2ggXHUwMDI2XHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXG4yMjA3Olx0XHRcdFx0Y29udGludWU7XG4yMjA4Olx0XG4yMjA5Olx0XHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbjIyMTA6XHRcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbjIyMTE6XHRcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbjIyMTI6XHRcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbjIyMTM6XHRcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbjIyMTQ6XHRcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4yMjE1Olx0XHRcdGlmIChzY29yZSBcdTAwM2Mgbmhfc2NvcmUpIHtcbjIyMTY6XHRcdFx0XHRyZXMtXHUwMDNlbmhfc2VsID0gbmhzZWw7XG4yMjE3Olx0XHRcdFx0cmVzLVx1MDAzZW5oYyA9IFx1MDAyNm5leHRob3BfbmgtXHUwMDNlbmhfY29tbW9uO1xuMjIxODpcdFx0XHRcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXHUwMDI2XHUwMDI2IG5oX3Njb3JlID09IDEpKVxuMjIxOTpcdFx0XHRcdFx0cmV0dXJuO1xuMjIyMDpcdFx0XHRcdHNjb3JlID0gbmhfc2NvcmU7XG4yMjIxOlx0XHRcdH1cbjIyMjI6XHRcbjIyMjM6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbjIyMjQ6XHR9XG4yMjI1Olx0I2VuZGlmXG4yMjI2Olx0XG4yMjI3Olx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuMjIyODpcdFx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIyMjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEdlbmVzaXMgb2YgYHN0cnVjdCBmaWJfbmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgc3RydWN0IGZpYl9uaGAuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgaW5zdGFudGlhdGVkIGFuZCBob3cgaXMgaXRzIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSXMgaXQgYSBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0dXJlPyBJcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXI/IElzIGl0IGVtYmVkZGVkIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmU/IEtub3dpbmcgaXRzIGFsbG9jYXRpb24gbWV0aG9kIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmliIG5leHQgaG9wcyBhcmUgY3JlYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfbmguKmt6YWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBvZiBgZmliX2luZm9gIGFuZCBgZmliX25oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIGluIGBmaWJfc2VtYW50aWNzLmNgIHRoZXNlIHN0cnVjdHVyZXMsIGBzdHJ1Y3QgZmliX2luZm9gIGFuZCBgc3RydWN0IGZpYl9uaGAsIGFyZSBhY3R1YWxseSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGJ1dCB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuIEkga25vdyBJIGNvdWxkIHVzZSBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIHRyeSBhIG1vcmUgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIHRoaW5raW5nIHRoZSBzaW1wbGVzdCBhcHByb2FjaCBmb3IgYSBxdWljayBhbnN3ZXIgaXMgbGlrZWx5IGEgY29kZSBzZWFyY2guIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG9jY3VycmVuY2VzIG9mIGVpdGhlciBzdHJ1Y3R1cmUgbmFtZSBpbiBhbGxvY2F0aW9uIGNvbnRleHRzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZmliX3NlbWFudGljcy5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgbGlmZXRpbWVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdHJ1Y3RzIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2xvb2t1cC5oPTM4PXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XG5uZXQvaXB2NC9maWJfbG9va3VwLmg6Mzk6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3NS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTk0PWludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxubmV0L2lwdjQvZmliX3RyaWUuYzoxMjEyOlx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVx0aWYgKElTX0VSUihmaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipEaXZpbmcgaW50byBJUHY0IEZJQiBTZW1hbnRpY3MqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBob3cgdGhlIElQdjQgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBmaWJfY3JlYXRlX2luZm9gIHdpdGhpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgb3IgYXQgbGVhc3QsIGEgY3JpdGljYWwgcGFydCBvZiBpdCDigJMgaW4gc2V0dGluZyB1cCBGSUIgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIGJldHRlciBncmFzcCBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgbmVlZCwgZS5nLiwgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByb3V0ZSBpbnN0YWxsYXRpb25zLCBob3cgcG9saWNpZXMgYXJlIGFwcGxpZWQsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrc10uIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyBwcm90b2NvbHMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaG93IHJvdXRlIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGUgcm91dGUgc2VsZWN0aW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBIb3BlZnVsbHksIEkmIzM5O2xsIHVuY292ZXIgc29tZSBvZiB0aGUgbnVhbmNlcyBvZiB0aGUgRklCJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGNhbiBjb25maXJtIHRoZSBiZWhhdmlvciBmb3IgW2luc2VydCB5b3VyIHNwZWNpZmljIG5lZWQsIGUuZy4gaG93IG5ldyByb3V0ZXMgYXJlIGNyZWF0ZWQsIHdoYXQgaGFwcGVucyBvbiByb3V0ZSBjb25mbGljdHMgb3Igcm91dGUgY2hhbmdlc10uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzY6XHRzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxuMTM3NzpcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzNzg6XHR7XG4xMzc5Olx0XHRpbnQgZXJyO1xuMTM4MDpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IE5VTEw7XG4xMzgxOlx0XHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBOVUxMO1xuMTM4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpvZmk7XG4xMzgzOlx0XHRpbnQgbmhzID0gMTtcbjEzODQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGNmZy1cdTAwM2VmY19ubGluZm8ubmxfbmV0O1xuMTM4NTpcdFxuMTM4NjpcdFx0QVNTRVJUX1JUTkwoKTtcbjEzODc6XHRcdGlmIChjZmctXHUwMDNlZmNfdHlwZSBcdTAwM2UgUlROX01BWClcbjEzODg6XHRcdFx0Z290byBlcnJfaW52YWw7XG4xMzg5Olx0XG4xMzkwOlx0XHQvKiBGYXN0IGNoZWNrIHRvIGNhdGNoIHRoZSBtb3N0IHdlaXJkIGNhc2VzICovXG4xMzkxOlx0XHRpZiAoZmliX3Byb3BzW2NmZy1cdTAwM2VmY190eXBlXS5zY29wZSBcdTAwM2UgY2ZnLVx1MDAzZWZjX3Njb3BlKSB7XG4xMzkyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBzY29wZVwmIzM0Oyk7XG4xMzkzOlx0XHRcdGdvdG8gZXJyX2ludmFsO1xuMTM5NDpcdFx0fVxuMTM5NTpcdFxuMTM5NjpcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgKFJUTkhfRl9ERUFEIHwgUlROSF9GX0xJTktET1dOKSkge1xuMTM5NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4xMzk4Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgcnRtX2ZsYWdzIC0gY2FuIG5vdCBjb250YWluIERFQUQgb3IgTElOS0RPV05cJiMzNDspO1xuMTM5OTpcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MDA6XHRcdH1cbjE0MDE6XHRcbjE0MDI6XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpIHtcbjE0MDM6XHRcdFx0aWYgKCFjZmctXHUwMDNlZmNfbXgpIHtcbjE0MDQ6XHRcdFx0XHRmaSA9IGZpYl9maW5kX2luZm9fbmgobmV0LCBjZmcpO1xuMTQwNTpcdFx0XHRcdGlmIChmaSkge1xuMTQwNjpcdFx0XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmZpLVx1MDAzZWZpYl90cmVlcmVmKTtcbjE0MDc6XHRcdFx0XHRcdHJldHVybiBmaTtcbjE0MDg6XHRcdFx0XHR9XG4xNDA5Olx0XHRcdH1cbjE0MTA6XHRcbjE0MTE6XHRcdFx0bmggPSBuZXh0aG9wX2ZpbmRfYnlfaWQobmV0LCBjZmctXHUwMDNlZmNfbmhfaWQpO1xuMTQxMjpcdFx0XHRpZiAoIW5oKSB7XG4xNDEzOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXh0aG9wIGlkIGRvZXMgbm90IGV4aXN0XCYjMzQ7KTtcbjE0MTQ6XHRcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MTU6XHRcdFx0fVxuMTQxNjpcdFx0XHRuaHMgPSAwO1xuMTQxNzpcdFx0fVxuMTQxODpcdFxuMTQxOTpcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4xNDIwOlx0XHRpZiAoY2ZnLVx1MDAzZWZjX21wKSB7XG4xNDIxOlx0XHRcdG5ocyA9IGZpYl9jb3VudF9uZXh0aG9wcyhjZmctXHUwMDNlZmNfbXAsIGNmZy1cdTAwM2VmY19tcF9sZW4sIGV4dGFjayk7XG4xNDIyOlx0XHRcdGlmIChuaHMgPT0gMClcbjE0MjM6XHRcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MjQ6XHRcdH1cbjE0MjU6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGZpYl9jcmVhdGVfaW5mb2AgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZpYl9jcmVhdGVfaW5mb2Agc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgYGZpYl9jcmVhdGVfaW5mb2AgbGlrZWx5IGhvbGRzIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGEgbmV3IEZpYmVyIChvciwgaW4gc29tZSBjb250ZXh0cywgYSBGb3J3YXJkIEluZm9ybWF0aW9uIEJhc2UgLSBGSUIgLSBlbnRyeSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlYWNoIGZpZWxkIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQuIFNwZWNpZmljYWxseSwgd2hhdCBwYXJ0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVsb25nIHRvIHRoZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiB0aGF0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYSBmaWJlci4gCgpJcyBpdCB1c2luZyBhIGZpeGVkLXNpemUgYWxsb2NhdGlvbiBzdHJhdGVneSBvciBkeW5hbWljIGFsbG9jYXRpb24gd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmPyBBcmUgdGhlcmUgcG9pbnRlcnMgdG8gb3RoZXIgYWxsb2NhdGVkIG1lbW9yeT8gSWYgc28sIHdoYXQgYXJlIHRoZSBzaXplcyBvZiB0aG9zZSBhc3NvY2lhdGVkIG1lbW9yeSBibG9ja3M/IEFyZSB0aGVyZSBlbWJlZGRlZCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBmaWJfY3JlYXRlX2luZm9gIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yPyBJcyB0aGVyZSBhIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgcmVxdWVzdGVkIHJlc291cmNlcyBleGlzdD8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBvciBpZiB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZyZXF1ZW50bHkgd2l0aGluIGEgaGlnaC10aHJvdWdocHV0IHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBvciwgYXQgYSBtaW5pbXVtLCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcHJvcGVybHkgZGVhbGxvY2F0ZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgdGhlIGJldHRlciBJIGNhbiBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UsIHByZXZlbnQgbWVtb3J5IGlzc3VlcywgYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVuc3VyZSB0aGlzIG9wZXJhdGlvbiBpcyBlZmZpY2llbnQsIHJvYnVzdCwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IsIGV2ZW4gd29yc2UsIHN0YWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI2Olx0XG4xNDI3Olx0XHRmaWJfaW5mb19oYXNoX2dyb3cobmV0KTtcbjE0Mjg6XHRcbjE0Mjk6XHRcdGZpID0ga3phbGxvY19mbGV4KCpmaSwgZmliX25oLCBuaHMpO1xuMTQzMDpcdFx0aWYgKCFmaSkge1xuMTQzMTpcdFx0XHRlcnIgPSAtRU5PQlVGUztcbjE0MzI6XHRcdFx0Z290byBmYWlsdXJlO1xuMTQzMzpcdFx0fVxuMTQzNDpcdFxuMTQzNTpcdFx0ZmktXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbiwgZXh0YWNrKTtcbjE0MzY6XHRcdGlmIChJU19FUlIoZmktXHUwMDNlZmliX21ldHJpY3MpKSB7XG4xNDM3Olx0XHRcdGVyciA9IFBUUl9FUlIoZmktXHUwMDNlZmliX21ldHJpY3MpO1xuMTQzODpcdFx0XHRrZnJlZShmaSk7XG4xNDM5Olx0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4xNDQwOlx0XHR9XG4xNDQxOlx0XG4xNDQyOlx0XHRmaS1cdTAwM2VmaWJfbmV0ID0gbmV0O1xuMTQ0MzpcdFx0ZmktXHUwMDNlZmliX3Byb3RvY29sID0gY2ZnLVx1MDAzZWZjX3Byb3RvY29sO1xuMTQ0NDpcdFx0ZmktXHUwMDNlZmliX3Njb3BlID0gY2ZnLVx1MDAzZWZjX3Njb3BlO1xuMTQ0NTpcdFx0ZmktXHUwMDNlZmliX2ZsYWdzID0gY2ZnLVx1MDAzZWZjX2ZsYWdzO1xuMTQ0NjpcdFx0ZmktXHUwMDNlZmliX3ByaW9yaXR5ID0gY2ZnLVx1MDAzZWZjX3ByaW9yaXR5O1xuMTQ0NzpcdFx0ZmktXHUwMDNlZmliX3ByZWZzcmMgPSBjZmctXHUwMDNlZmNfcHJlZnNyYztcbjE0NDg6XHRcdGZpLVx1MDAzZWZpYl90eXBlID0gY2ZnLVx1MDAzZWZjX3R5cGU7XG4xNDQ5Olx0XHRmaS1cdTAwM2VmaWJfdGJfaWQgPSBjZmctXHUwMDNlZmNfdGFibGU7XG4xNDUwOlx0XG4xNDUxOlx0XHRmaS1cdTAwM2VmaWJfbmhzID0gbmhzO1xuMTQ1MjpcdFx0aWYgKG5oKSB7XG4xNDUzOlx0XHRcdGlmICghbmV4dGhvcF9nZXQobmgpKSB7XG4xNDU0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXh0aG9wIGhhcyBiZWVuIGRlbGV0ZWRcJiMzNDspO1xuMTQ1NTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xNDU2Olx0XHRcdH0gZWxzZSB7XG4xNDU3Olx0XHRcdFx0ZXJyID0gMDtcbjE0NTg6XHRcdFx0XHRmaS1cdTAwM2VuaCA9IG5oO1xuMTQ1OTpcdFx0XHR9XG4xNDYwOlx0XHR9IGVsc2Uge1xuMTQ2MTpcdFx0XHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbjE0NjI6XHRcdFx0XHRuZXh0aG9wX25oLVx1MDAzZW5oX3BhcmVudCA9IGZpO1xuMTQ2MzpcdFx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcbjE0NjQ6XHRcbjE0NjU6XHRcdFx0aWYgKGNmZy1cdTAwM2VmY19tcClcbjE0NjY6XHRcdFx0XHRlcnIgPSBmaWJfZ2V0X25ocyhmaSwgY2ZnLVx1MDAzZWZjX21wLCBjZmctXHUwMDNlZmNfbXBfbGVuLCBjZmcsXG4xNDY3Olx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjE0Njg6XHRcdFx0ZWxzZVxuMTQ2OTpcdFx0XHRcdGVyciA9IGZpYl9uaF9pbml0KG5ldCwgZmktXHUwMDNlZmliX25oLCBjZmcsIDEsIGV4dGFjayk7XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoZXJyICE9IDApXG4xNDczOlx0XHRcdGdvdG8gZmFpbHVyZTtcbjE0NzQ6XHRcbjE0NzU6XHRcdGlmIChmaWJfcHJvcHNbY2ZnLVx1MDAzZWZjX3R5cGVdLmVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRml4IGZvciBNdWx0aXBhdGggUm91dGUgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBmaSA9IGt6YWxsb2NfZmxleCgqZmksIGZpYl9uaCwgbmhzKTtgLCBtZWFuaW5nIGBmaWAgYW5kIGl0cyBmbGV4IGFycmF5IGBmaWJfbmhgIGdldCB6ZXJvLWFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgdGhlcmUmIzM5O3MgYGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZCgmYW1wO25ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO2Ag4oCTIGEgbG9jYWwgYGdlbmlkYCBpbml0aWFsaXplZCBjb25kaXRpb25hbGx5LiBJIGtub3cgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkYCBnZXRzIGluaXRpYWxpemVkIHRvIDAgZHVyaW5nIGFsbG9jYXRpb24gKG9yIHVwZGF0ZWQgYnkgYGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHJgKSwgYW5kIHRoZSBjb2RlIGNvbXBhcmVzIHR3byBpbml0aWFsaXplZCBpbnRlZ2VycyB3aXRoIGBSRUFEX09OQ0UobmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkYCwgYXMgd2VsbCBhcyBjb21wYXJpbmcgYF9fYmUzMmAgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcmAuCgpOb3csIHdoYXQgZXhhY3RseSBkaWQgdGhhdCBwYXRjaCBjaGFuZ2UsIGFuZCAqd2h5Kj8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgbG9va2luZyBiYWNrIGF0IGNvbW1pdCBgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYWAuIEluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCBjYWNoZXMgdGhlIHByZWZlcnJlZCBzb3VyY2UgYWRkcmVzcyBmb3IgYSBwYXJ0aWN1bGFyIG5leHQgaG9wLiBIb3dldmVyLCB0aGUgZ2VuZXJhdGlvbiBJRCwgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAsIGdldHMgYnVtcGVkIGlmIGRldmljZSBhZGRyZXNzZXMgY2hhbmdlLgoKVGhlIHByZXZpb3VzIGNvZGUgaGFkIHRoaXM6IGBpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcilgLiBJdCBkaXJlY3RseSBjb21wYXJlZCB0aGUgc291cmNlIGFkZHJlc3Mgd2l0aG91dCBjaGVja2luZyBpZiB0aGUgY2FjaGVkIGBuaF9zYWRkcmAgd2FzIHN0aWxsIHZhbGlkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGBnZW5pZGAgY2hlY2sgdXNpbmcgYXRvbWljIHJlYWRzLiBTcGVjaWZpY2FsbHksIGl0IGFkZHM6CiAqIGBnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtgIGFuZAogKiBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHJgCgpUaGlzIHByb3RlY3RzIGFnYWluc3QgcG90ZW50aWFsIHN0YWxlIGVudHJpZXMgaW4gdGhlIGNhY2hlLCBhbmQgaXQgdXNlcyBgUkVBRF9PTkNFYCB3aGljaCBpcyBjb3JyZWN0IHNpbmNlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgZ2VuZXJhdGlvbiBJRCBtYXkgYmUgdXBkYXRlZCBjb25jdXJyZW50bHkuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTGV0JiMzOTtzIHNlZToKCjEuICBgZ2VuaWRgIGlzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCB3aGljaCBpcyBpbml0aWFsaXplZCB1bmNvbmRpdGlvbmFsbHkgdG8gYHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMGAuIEdvb2QuIE5vIHdvcnJpZXMgdGhlcmUuCjIuICBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJfZ2VuaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgb24gYWxsb2NhdGlvbiB2aWEgYGt6YWxsb2NfZmxleGAsIG9yIGl0JiMzOTtzIHVwZGF0ZWQgYXRvbWljYWxseSB3aXRoIFdSSVRFXF9PTkNFIGluIGBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyYC4KMy4gIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgaXMgYWxzbyBpbml0aWFsaXplZCB0byAwIG9uIGFsbG9jYXRpb24gYW5kIHVwZGF0ZWQgdXNpbmcgV1JJVEVfT05DRS4KNC4gIE5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KNS4gIFRoZXJlIGFyZSBubyBtZW1vcnkgYnVmZmVycywgcGFja2V0IGJ1ZmZlcnMsIG9yIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIHJlc2l6ZWQuCjYuICBEb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHNraXBzIGluaXRpYWxpemF0aW9uIG9mIGFueXRoaW5nPyBUaGUgYHJlcy0mZ3Q7bmhfc2VsYCBhbmQgYHJlcy0mZ3Q7bmhjYCBhcmUgc2V0IGlmIGBzY29yZSAmbHQ7IG5oX3Njb3JlYC4gSWYgbm8gbmV4dCBob3AgbWF0Y2hlcywgdGhleSBtaWdodCByZW1haW4gaW4gdGhlaXIgcHJldmlvdXMgc3RhdGUgYmVmb3JlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgY2FsbGVkLiBOZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gT3ZlcmFsbCwgaXQgc2VlbXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTU3ND1pbnQgZmliX2NoZWNrX25oKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaCAqbmgsIHUzMiB0YWJsZSwgdTggc2NvcGUsXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzUtXHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvaXBfZmliLmg6NTc2OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzctXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTgwLVx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjI3PXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNi1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjM3Olx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzOC1cdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcdFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGZpYl9zZWxlY3RfcGF0aGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGZpYl9zZWxlY3RfcGF0aGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjI3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBjaGFzaW5nIGRvd24gcGF0aCBzZWxlY3Rpb24gbG9naWMgaW4gdGhlIEZJQi4gSSYjMzk7dmUgZ290IGEgaHVuY2ggc29tZXRoaW5nJiMzOTtzIG9mZiB0aGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuIE5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIHNlbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjc6XHR2b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4yMjI4Olx0XHRcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjIyOTpcdHtcbjIyMzA6XHRcdGlmIChmbDQtXHUwMDNlZmxvd2k0X29pZilcbjIyMzE6XHRcdFx0Z290byBjaGVja19zYWRkcjtcbjIyMzI6XHRcbjIyMzM6XHQjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFxuMjIzNDpcdFx0aWYgKGZpYl9pbmZvX251bV9wYXRoKHJlcy1cdTAwM2VmaSkgXHUwMDNlIDEpIHtcbjIyMzU6XHRcdFx0aW50IGggPSBmaWJfbXVsdGlwYXRoX2hhc2gobmV0LCBmbDQsIHNrYiwgTlVMTCk7XG4yMjM2Olx0XG4yMjM3Olx0XHRcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcbjIyMzg6XHRcdH1cbjIyMzk6XHRcdGVsc2VcbjIyNDA6XHQjZW5kaWZcbjIyNDE6XHRcdGlmICghcmVzLVx1MDAzZXByZWZpeGxlbiBcdTAwMjZcdTAwMjZcbjIyNDI6XHRcdCAgICByZXMtXHUwMDNldGFibGUtXHUwMDNldGJfbnVtX2RlZmF1bHQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2XG4yMjQzOlx0XHQgICAgcmVzLVx1MDAzZXR5cGUgPT0gUlROX1VOSUNBU1QpXG4yMjQ0Olx0XHRcdGZpYl9zZWxlY3RfZGVmYXVsdChmbDQsIHJlcyk7XG4yMjQ1Olx0XG4yMjQ2Olx0Y2hlY2tfc2FkZHI6XG4yMjQ3Olx0XHRpZiAoIWZsNC1cdTAwM2VzYWRkcikge1xuMjI0ODpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbDNtZGV2O1xuMjI0OTpcdFxuMjI1MDpcdFx0XHRsM21kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGZsNC1cdTAwM2VmbG93aTRfbDNtZGV2KTtcbjIyNTE6XHRcbjIyNTI6XHRcdFx0aWYgKCFsM21kZXYgfHxcbjIyNTM6XHRcdFx0ICAgIGwzbWRldl9tYXN0ZXJfZGV2X3JjdShGSUJfUkVTX0RFVigqcmVzKSkgPT0gbDNtZGV2KVxuMjI1NDpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGZpYl9yZXN1bHRfcHJlZnNyYyhuZXQsIHJlcyk7XG4yMjU1Olx0XHRcdGVsc2VcbjIyNTY6XHRcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGwzbWRldiwgMCwgUlRfU0NPUEVfTElOSyk7XG4yMjU3Olx0XHR9XG4yMjU4Olx0fVxuMjI1OTpcdFxuMjI2MDpcdGludCBfX25ldF9pbml0IGZpYjRfc2VtYW50aWNzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuMjI2MTpcdHtcbjIyNjI6XHRcdHVuc2lnbmVkIGludCBoYXNoX2JpdHMgPSA0O1xuMjI2MzpcdFxuMjI2NDpcdFx0bmV0LVx1MDAzZWlwdjQuZmliX2luZm9faGFzaCA9IGZpYl9pbmZvX2hhc2hfYWxsb2MoaGFzaF9iaXRzKTtcbjIyNjU6XHRcdGlmICghbmV0LVx1MDAzZWlwdjQuZmliX2luZm9faGFzaClcbjIyNjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzYyCgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDU3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHN0YW5kYXJkIElQdjQgRklCIHJvdXRlIGxvb2t1cCBsb2dpYy4gVGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBnZW5lcmF0aW9uIElEIGNoZWNrIGFuZCBgUkVBRF9PTkNFYCB3cmFwcGVycyB3aGVuIGNvbXBhcmluZyB0aGUgY2FjaGVkIHNvdXJjZSBhZGRyZXNzIChgbmhfc2FkZHJgKSB3aXRoIHRoZSBmbG93JiMzOTtzIHNvdXJjZSBhZGRyZXNzIChgZmw0LSZndDtzYWRkcmApLiBJdCYjMzk7cyBhbGwgdmVyeSBjb250YWluZWQuCgpUaGVyZSBhcmUgbm8gcmVkIGZsYWdzIGhlcmUsIGFzIGZhciBhcyBJIGNhbiBzZWUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkOgoKKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogQWJzb2x1dGVseSBubyBuZXcgYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucy4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBgZ2VuaWRgIHZhcmlhYmxlIGlzIGEgc3RhY2sgdmFyaWFibGUgYW5kIGlzIGluaXRpYWxpemVkIGF0IGl0cyBkZWNsYXJhdGlvbi4gVGhlIGBuaF9zYWRkcl9nZW5pZGAgZmllbGQgaXMgcHJlLWV4aXN0aW5nIGFuZCBtYW5hZ2VkIGNvcnJlY3RseS4KKiAgICoqVXNlciBTcGFjZSBJbnRlcmFjdGlvbnM6KiogTm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIHNvIG5vIHdvcnJpZXMgYWJvdXQgcGFkZGluZyBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoZXJlLgoqICAgKipCdWZmZXIgSGFuZGxpbmc6KiogTm8gYnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2FsY3VsYXRpb25zIGFyZSBpbnZvbHZlZC4KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIHNheSB0aGF0IEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtNU0FOIGlzIHByaW1hcmlseSB1c2VkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBOb25lIG9mIHRoZXNlIHNjZW5hcmlvcyBhcHBseS4gS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgc2hvdWxkIGJlIGFkZXF1YXRlIGZvciB0ZXN0aW5nIHJvdXRpbmcgYW5kIGNvbmN1cnJlbmN5L2RhdGEgcmFjZSBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gOgoKMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgdG8gVXNlciBTcGFjZToqKiBOb3QgYXBwbGljYWJsZTsgdGhlcmUgYXJlIG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBEZXBlbmRlbmNpZXM6KiogVGhlcmUmIzM5O3Mgbm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgaXNzdWVzLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3RoIGNhbGN1bGF0aW9ucywgb3IgbG9naWMgY2hhbmdlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNyaXRlcmlhIGZvciAqbm90KiBuZWVkaW5nIEtNU0FOOgoKKiAgICoqT3V0LW9mLUJvdW5kcy9VQUYvRGVhZGxvY2tzOioqIFRoZSBjb2RlIGNoYW5nZXMgZG9uJiMzOTt0IHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLgoqICAgKipaZXJvZWQvSW5pdGlhbGl6ZWQgU3RydWN0dXJlczoqKiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoqICAgKipObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBhYm92ZSwgdGhpcyBpcyBhIGNsZWFyLWN1dCBjYXNlLiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cblxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IG11bHRpcGF0aCByb3V0ZSBzZWxlY3Rpb24gaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIHZhbGlkYXRlIHRoZSBuZXh0aG9wIHNvdXJjZSBhZGRyZXNzIGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApIGFnYWluc3QgdGhlIGN1cnJlbnQgbmV0d29yayBuYW1lc3BhY2UgZ2VuZXJhdGlvbiBJRCAoYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXG5cbkFsbCB2YXJpYWJsZXMgYW5kIGZpZWxkcyBpbnZvbHZlZCAoYGdlbmlkYCwgYG5oX3NhZGRyX2dlbmlkYCwgYG5oX3NhZGRyYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQ6IGBnZW5pZGAgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgYHN0cnVjdCBmaWJfbmhgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19mbGV4KClgIGR1cmluZyBGSUIgaW5mbyBjcmVhdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY29weSB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG1hbmlwdWxhdGlvbnMsIG9yIGluZm9sZWFrcy4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGF0YS1yYWNlIGNvbmNlcm5zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuMTc4MDg5MTY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjY5MjYxNTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuMTc4MDk0NjI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcyMDIxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA4OjEyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuQEAgLTIxODQsNiArMjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcdGJvb2wgdXNlX25laWdoO1xcbiBcXHRpbnQgc2NvcmUgPSAtMTtcXG4gXFx0X19iZTMyIHNhZGRyO1xcbitcXHRpbnQgZ2VuaWQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuIFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuQEAgLTIxOTIsNiArMjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcbiBcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuIFxcdHNhZGRyID0gZmw0ID8gZmw0LVxcdTAwM2VzYWRkciA6IDA7XFxuK1xcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7XFxuIFxcbiBcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gXFx0XFx0aW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7XFxuQEAgLTIyMDQsNyArMjIwNiw5IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2IG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxcbitcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuIFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuIFxcdFxcdGlmIChoYXNoIFxcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxcbiBcXHRcXHRcXHRuaF9zY29yZSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMjo1Ni43NDU5ODQxNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODI1MzMyNzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuQEAgLTIxODQsNiArMjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRib29sIHVzZV9uZWlnaDtcbiBcdGludCBzY29yZSA9IC0xO1xuIFx0X19iZTMyIHNhZGRyO1xuK1x0aW50IGdlbmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbiBcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbkBAIC0yMTkyLDYgKzIxOTMsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFxuIFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4gXHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4rXHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcbiBcbiBcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbkBAIC0yMjA0LDcgKzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuK1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgKz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuNzQ1OTg1NjE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ0NDU3NDUwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGSUIgU2VtYW50aWNzIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBGaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgZGlmZiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGNoYW5nZXMuIFRoZW4sIEknbGwgemVybyBpbiBvbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTg0LCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSBhc3N1bWUgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXNpZGVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc28gSSdsbCB3YW50IHRvIHJlYWQgdGhlIGNvZGUgYSBiaXQgYmVmb3JlIGFuZCBhZnRlciB0aGF0IGxpbmUuIFRpbWUgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBxdWlja2VzdCDigJMgdG8gbmF2aWdhdGUgdG8gdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQncyBiZWVuIHR3ZWFrZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6MjEuMTkxNzMzMjY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTgwOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxcbjIxODE6XFx0e1xcbjIxODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cXHUwMDNlZmk7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cXHUwMDNlZmliX25ldDtcXG4yMTg0OlxcdFxcdGJvb2wgdXNlX25laWdoO1xcbjIxODU6XFx0XFx0aW50IHNjb3JlID0gLTE7XFxuMjE4NjpcXHRcXHRfX2JlMzIgc2FkZHI7XFxuMjE4NzpcXHRcXHRpbnQgZ2VuaWQ7XFxuMjE4ODpcXHRcXG4yMTg5OlxcdFxcdGlmICh1bmxpa2VseShyZXMtXFx1MDAzZWZpLVxcdTAwM2VuaCkpIHtcXG4yMTkwOlxcdFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuMjE5MTpcXHRcXHRcXHRyZXR1cm47XFxuMjE5MjpcXHRcXHR9XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdHVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcXG4yMTk1OlxcdFxcdHNhZGRyID0gZmw0ID8gZmw0LVxcdTAwM2VzYWRkciA6IDA7XFxuMjE5NjpcXHRcXHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4yMTk5OlxcdFxcdFxcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xcbjIyMDA6XFx0XFxuMjIwMTpcXHRcXHRcXHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcXG4yMjAyOlxcdFxcdFxcdCAqIG1pbnVzIG9uZSB3aGVuIFxcXCJpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cXFwiIGlzIHNldC5cXG4yMjAzOlxcdFxcdFxcdCAqL1xcbjIyMDQ6XFx0XFx0XFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcXG4yMjA1OlxcdFxcdFxcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxcbjIyMDY6XFx0XFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4yMjA3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMDg6XFx0XFxuMjIwOTpcXHRcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4yMjEwOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFxcdTAwMjZcXHUwMDI2XFxuMjIxMTpcXHRcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcXG4yMjEyOlxcdFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuMjIxMzpcXHRcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4yMjE0OlxcdFxcdFxcdFxcdG5oX3Njb3JlKys7XFxuMjIxNTpcXHRcXHRcXHRpZiAoc2NvcmUgXFx1MDAzYyBuaF9zY29yZSkge1xcbjIyMTY6XFx0XFx0XFx0XFx0cmVzLVxcdTAwM2VuaF9zZWwgPSBuaHNlbDtcXG4yMjE3OlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhjID0gXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZW5oX2NvbW1vbjtcXG4yMjE4OlxcdFxcdFxcdFxcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmhfc2NvcmUgPT0gMSkpXFxuMjIxOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIyMDpcXHRcXHRcXHRcXHRzY29yZSA9IG5oX3Njb3JlO1xcbjIyMjE6XFx0XFx0XFx0fVxcbjIyMjI6XFx0XFxuMjIyMzpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuMjIyNDpcXHR9XFxuMjIyNTpcXHQjZW5kaWZcXG4yMjI2OlxcdFxcbjIyMjc6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjIxLjE5MTg5NTgxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyMjUzNTY5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhcm91bmQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBjb250cm9sbGluZyBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gbG9vayBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFJpZ2h0LCBzbyBsaW5lIDIyMjUgaGFzIGFuIGAjZW5kaWZgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LlxuXG5Pa2F5LCBsZXQncyB0cmFjZSBiYWNrLiBJJ2xsIGNoZWNrIHdoYXQncyBnb2luZyBvbiBmcm9tIGxpbmVzIDIxNTAgdG8gMjE4NS4gSSdtIGV4cGVjdGluZyBhbiBgI2lmZGVmYCBvciBhIHNpbWlsYXIgZGlyZWN0aXZlIHRvIGJlIGd1YXJkaW5nIHRoYXQgYmxvY2suIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCB0aGF0IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgbXVsdGktcGF0aCBzZWxlY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBsb2dpYyBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjI2LjQxNzI1NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRcXG4yMTYxOlxcdFxcdFxcdGlmIChsaWtlbHkobmgtXFx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVCkpXFxuMjE2MjpcXHRcXHRcXHRcXHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cXHUwMDNlZmliX25oX2RldixcXG4yMTYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIChfX2ZvcmNlIHUzMiluaC1cXHUwMDNlZmliX25oX2d3NCk7XFxuMjE2NDpcXHRcXHRcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbjIxNjU6XFx0XFx0XFx0XFx0IG5oLVxcdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjIxNjY6XFx0XFx0XFx0XFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXFx1MDAzZWZpYl9uaF9kZXYsXFxuMjE2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpO1xcbjIxNjg6XFx0XFx0XFx0ZWxzZVxcbjIxNjk6XFx0XFx0XFx0XFx0biA9IE5VTEw7XFxuMjE3MDpcXHRcXHRcXHRpZiAobilcXG4yMTcxOlxcdFxcdFxcdFxcdHN0YXRlID0gUkVBRF9PTkNFKG4tXFx1MDAzZW51ZF9zdGF0ZSk7XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxNzQ6XFx0XFx0fVxcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRyZXR1cm4gISEoc3RhdGUgXFx1MDAyNiBOVURfVkFMSUQpO1xcbjIxNzc6XFx0fVxcbjIxNzg6XFx0XFxuMjE3OTpcXHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxcbjIxODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuMjE4MTpcXHR7XFxuMjE4MjpcXHRcXHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVxcdTAwM2VmaTtcXG4yMTgzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVxcdTAwM2VmaWJfbmV0O1xcbjIxODQ6XFx0XFx0Ym9vbCB1c2VfbmVpZ2g7XFxuMjE4NTpcXHRcXHRpbnQgc2NvcmUgPSAtMTtcXG4yMTg2OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4yMTg3OlxcdFxcdGludCBnZW5pZDtcXG4yMTg4OlxcdFxcbjIxODk6XFx0XFx0aWYgKHVubGlrZWx5KHJlcy1cXHUwMDNlZmktXFx1MDAzZW5oKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzoyNi40MTczODY3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTY0NDQyMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGEgc3BlY2lmaWMgYCNpZmRlZmAgZGlyZWN0aXZlIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgZmlsZSwgYW5kIEkga25vdyBpdCdzIGxvY2F0ZWQgc29tZXdoZXJlIGJlZm9yZSBsaW5lcyAyMTc4IG9yIDIxNjAuIE15IHBsYW4gaXMgdG8gc3RhcnQgYnkgc2Nhbm5pbmcgdGhlIGVhcmxpZXIgbGluZXMgaW4gdGhlIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZGl0aW9uIHRoYXQgdHJpZ2dlcnMgY2VydGFpbiBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgaW5jbHVzaW9uIGJhc2VkIG9uIGEgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIEZpbmRpbmcgdGhlIHByZWNpc2UgbG9jYXRpb24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQgbWUgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZCB6ZXJvIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzoyOC4zODE4MzI4NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMzA6XFx0XFx0XFx0XFx0ICAgICEobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKVxcbjIxMzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjEzMjpcXHRcXHRcXHRcXHRpZiAobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiAhPSBkZXYgfHxcXG4yMTMzOlxcdFxcdFxcdFxcdCAgICAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSlcXG4yMTM0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzU6XFx0XFx0XFx0XFx0YWxpdmUrKztcXG4yMTM2OlxcdFxcdFxcdFxcdG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjEzNzpcXHRcXHRcXHRcXHRjYWxsX2ZpYl9uaF9ub3RpZmllcnMobmV4dGhvcF9uaCwgRklCX0VWRU5UX05IX0FERCk7XFxuMjEzODpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4yMTM5OlxcdFxcbjIxNDA6XFx0XFx0XFx0aWYgKGFsaXZlIFxcdTAwM2UgMCkge1xcbjIxNDE6XFx0XFx0XFx0XFx0ZmktXFx1MDAzZWZpYl9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjE0MjpcXHRcXHRcXHRcXHRyZXQrKztcXG4yMTQzOlxcdFxcdFxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxuMjE0NjpcXHRcXHR9XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuMjE1MjpcXHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdGludCBzdGF0ZSA9IE5VRF9SRUFDSEFCTEU7XFxuMjE1NTpcXHRcXG4yMTU2OlxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspIHtcXG4yMTU3OlxcdFxcdFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0XFx0aWYgKGxpa2VseShuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcXG4yMTYyOlxcdFxcdFxcdFxcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTMyKW5oLVxcdTAwM2VmaWJfbmhfZ3c0KTtcXG4yMTY0OlxcdFxcdFxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjI4LjM4MTk2NzYwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTY2NDQyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBVbmRlcnN0YW5kaW5nIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCoqXG5cbk9rYXksIHNvIEkgc2VlIGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgb24gbGluZSAyMTUxLiBUaGF0J3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUsIG1lYW5pbmcgYSBibG9jayBvZiBjb2RlIGlzIG9ubHkgaW5jbHVkZWQgaWYgYSBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGUgb3B0aW9uIGluIHF1ZXN0aW9uIGlzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCBhY3R1YWxseSAqbWVhbnMqLiBXaGF0IGRvZXMgaXQgY29udHJvbD8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdvdWxkIGNob29zZSB0byBlbmFibGU/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgb2YgY29kZSBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgaXQncyB0aWVkIHRvLiBJIG5lZWQgdGhlIEtjb25maWcgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeS4gTGV0J3MgZ28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYElQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBrbm93IHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBkaXJlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjQ3Ljk0ODQxMzAwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NzgzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc5LVxcbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxcbm5ldC9pcHY0L0tjb25maWctODEtXFx0Ym9vbCBcXFwiSVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzo0OC4yMzcyMDQ4OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwMzg1MTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgSVB2NCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgYXJvdW5kIGxpbmUgODAgd2l0aGluIGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgc3BlY2lmaWMsIHByb2JhYmx5IGltcG9ydGFudCwgYXNwZWN0IG9mIElQdjQuIEJhc2VkIG9uIGl0cyBsaWtlbHkgcG9zaXRpb24gaW4gdGhlIGZpbGUsIGl0J3MgcHJvYmFibHkgKm5vdCogYXQgYSBmb3VuZGF0aW9uYWwgbGV2ZWwgKGxpa2UgdGhlIGNvcmUgcHJvdG9jb2wgZW5hYmxlL2Rpc2FibGUgb3B0aW9ucyksIGJ1dCBtb3JlIGZvY3VzZWQgb24gYSBwYXJ0aWN1bGFyIGZlYXR1cmUsIHN1YnN5c3RlbSwgb3IgdHVuYWJsZSBwYXJhbWV0ZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGF0ICpleGFjdGx5KiBpcyBiZWluZyBjb25maWd1cmVkIHRoZXJlPyBJcyBpdCByZWxhdGVkIHRvIHJvdXRpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZpcmV3YWxsaW5nIChpcHRhYmxlcyksIHNvbWUgYWR2YW5jZWQgcHJvdG9jb2wgZXh0ZW5zaW9uLCBvciBtYXliZSBzb21lIHBlcmZvcm1hbmNlLXJlbGF0ZWQga25vYnM/IExldCdzIGdldCB0byB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZC4gVGhlIGNvbnRleHQgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBpdC4gSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6NTAuNTQxMDU4NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIGRvY3VtZW50YXRpb24gYXRcXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vbGFydGMub3JnL2hvd3RvL2xhcnRjLnJwZGIuaHRtbFxcdTAwM2VcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXFxuICA4MTpcXHRcXHRib29sIFxcXCJJUDogZXF1YWwgY29zdCBtdWx0aXBhdGhcXFwiXFxuICA4MjpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBOb3JtYWxseSwgdGhlIHJvdXRpbmcgdGFibGVzIHNwZWNpZnkgYSBzaW5nbGUgYWN0aW9uIHRvIGJlIHRha2VuIGluXFxuICA4NTpcXHRcXHQgIGEgZGV0ZXJtaW5pc3RpYyBtYW5uZXIgZm9yIGEgZ2l2ZW4gcGFja2V0LiBJZiB5b3Ugc2F5IFkgaGVyZVxcbiAgODY6XFx0XFx0ICBob3dldmVyLCBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIGF0dGFjaCBzZXZlcmFsIGFjdGlvbnMgdG8gYSBwYWNrZXRcXG4gIDg3OlxcdFxcdCAgcGF0dGVybiwgaW4gZWZmZWN0IHNwZWNpZnlpbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBwYXRocyB0byB0cmF2ZWxcXG4gIDg4OlxcdFxcdCAgZm9yIHRob3NlIHBhY2tldHMuIFRoZSByb3V0ZXIgY29uc2lkZXJzIGFsbCB0aGVzZSBwYXRocyB0byBiZSBvZlxcbiAgODk6XFx0XFx0ICBlcXVhbCBcXFwiY29zdFxcXCIgYW5kIGNob29zZXMgb25lIG9mIHRoZW0gaW4gYSBub24tZGV0ZXJtaW5pc3RpYyBmYXNoaW9uXFxuICA5MDpcXHRcXHQgIGlmIGEgbWF0Y2hpbmcgcGFja2V0IGFycml2ZXMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuICA5MzpcXHRcXHRib29sIFxcXCJJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxcbiAgOTc6XFx0XFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcXG4gIDk4OlxcdFxcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXFxuICA5OTpcXHRcXHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjUwLjU0MTE2NDE5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjczMTAxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUm91dGUgTXVsdGlwYXRoaW5nKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHJlbGllcyBvbiBgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUmAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIHVuZGVyc3RhbmQgKndoeSogYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgYSBwcmVyZXF1aXNpdGUuIFdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIHRoYXQgb3B0aW9uIGJyaW5nIHRvIHRoZSB0YWJsZSB0aGF0J3MgZnVuZGFtZW50YWwgdG8gcm91dGUgbXVsdGlwYXRoaW5nPyBJcyBpdCB0aGUgcG9saWN5IHJvdXRpbmcsIHRoZSBtYXJraW5nIGNhcGFiaWxpdGllcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2Qgb2YgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzo1My4yMTQyNjg1MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA5MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE0LVxcbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbm5ldC9pcHY0L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6NTMuNDg5MzY5NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk4MjIxMjYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb21taXQsIHdoYXQncyBiZWluZyBtb2RpZmllZCwgYW5kIHdoeS4gU2luY2UgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYGdpdCBsb2dgIGFzIGEgdG9vbCBoZXJlLCBJJ2xsIG5lZWQgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgYXZhaWxhYmxlIGluZm9ybWF0aW9uIGxpa2UgY29tbWl0IG1lc3NhZ2VzIG9yIG90aGVyIHJlc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY29udGV4dC5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIEkgY2FuIHNlZSB0aGVyZSBpcyBhIGNoYW5nZSB0byBob3cgd2Ugc2VsZWN0IHRoZSBuZXh0IGhvcCBmb3IgYSByb3V0ZS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBnZW5pZGAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIHNvdXJjZSBJUCBhZGRyZXNzIChgc2FkZHJgKSBpbiB0aGUgY29udGV4dCBvZiBtdWx0aXBhdGggcm91dGluZy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnZW5pZGAgaXMgYXNzaWduZWQgYW5kIGxhdGVyIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjayBhbG9uZyB3aXRoIGBuaF9zYWRkcmAuIFRoZSBjb2RlIG5vdyBjaGVja3Mgbm90IG9ubHkgaWYgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIG1hdGNoZXMgdGhlIHNvdXJjZSBhZGRyZXNzIChgc2FkZHJgKSwgYnV0IGFsc28gaWYgdGhlIGBuaF9zYWRkcl9nZW5pZGAgbWF0Y2hlcyBhIGxvY2FsbHkgc3RvcmVkIGBnZW5pZGAuIFRoaXMgaW1wbGllcyB0aGF0IGBnZW5pZGAgbWlnaHQgYmUgdXNlZCBhcyBhIHZlcnNpb24gaWRlbnRpZmllciwgb3Igc29tZSBpbmRpY2F0b3IgdGhhdCBjaGVja3Mgd2hldGhlciBgc2FkZHJgIGlzIHN0YWxlLiBUaGUgY29kZSBhbHNvIHVzZXMgdGhlIGBSRUFEX09OQ0VgIG1hY3JvLCBpbmRpY2F0aW5nIHRoYXQgdGhlc2UgdmFyaWFibGVzIG1pZ2h0IGJlIGFjY2Vzc2VkIGluIGEgbXVsdGl0aHJlYWRlZCBjb250ZXh0LlxuXG5Ob3csIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgYGdlbmlkYCwgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZCwgYW5kIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLCB0byBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgY2hhbmdlIGNvbXBsZXRlbHkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBuaF9zYWRkcl9nZW5pZGAgYW5kIHRoZSBvdGhlciBmaWVsZHMgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGBnZW5pZGAgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZCwgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowMy4zMTE0OTc0NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM2ODI4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmhfc2FkZHJfZ2VuaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9MTA3PXN0cnVjdCBmaWJfbmgge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE0LVxcdF9fYmUzMlxcdFxcdFxcdG5oX3NhZGRyO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcXHRpbnRcXHRcXHRcXHRuaF9zYWRkcl9nZW5pZDtcXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTYtI2RlZmluZSBmaWJfbmhfZmFtaWx5XFx0XFx0bmhfY29tbW9uLm5oY19mYW1pbHlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI3LVxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjg6XFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQsIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyOS1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDMtXFx0XFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzQ0OlxcdFxcdGlmIChSRUFEX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIwOS1cXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIxMDpcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjExLVxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowNS4wNzUxODY3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1Nzg3NTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRklCIFByZWZpeGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBmaWJfcmVzdWx0X3ByZWZzcmNgLiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gcm91Z2hseSBsaW5lIDEzMzMg4oCTIHRoYXQgc2hvdWxkIHB1dCBtZSBpbiB0aGUgdmljaW5pdHkgb2Ygd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBsaWtlbHkgdXNlZCBhbmQgaG9wZWZ1bGx5LCBkZWZpbmVkLiBIb3BlZnVsbHkgdGhlIGNvbnRleHQgdGhlcmUgd2lsbCBpbGx1bWluYXRlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6MDcuNDMzMDY1Mzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyMDpcXHRcXG4xMzIxOlxcdFxcdGlmIChuaGMtXFx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcXG4xMzIyOlxcdFxcdFxcdHJldHVybiBpbmV0X3NlbGVjdF9hZGRyKG5oYy1cXHUwMDNlbmhjX2RldiwgMCwgc2NvcGUpO1xcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XFxuMTMyNTpcXHRcXHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIobmgtXFx1MDAzZWZpYl9uaF9kZXYsIG5oLVxcdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XFxuMTMyNjpcXHRcXG4xMzI3OlxcdFxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XFxuMTMyODpcXHRcXHRXUklURV9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xcbjEzMjk6XFx0XFxuMTMzMDpcXHRcXHRyZXR1cm4gc2FkZHI7XFxuMTMzMTpcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdF9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxcbjEzMzQ6XFx0e1xcbjEzMzU6XFx0XFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyA9IHJlcy1cXHUwMDNlbmhjO1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRpZiAocmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3ByZWZzcmMpXFxuMTMzODpcXHRcXHRcXHRyZXR1cm4gcmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3ByZWZzcmM7XFxuMTMzOTpcXHRcXG4xMzQwOlxcdFxcdGlmIChuaGMtXFx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xcbjEzNDE6XFx0XFx0XFx0c3RydWN0IGZpYl9uaCAqbmg7XFxuMTM0MjpcXHRcXG4xMzQzOlxcdFxcdFxcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcXG4xMzQ0OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxcbjEzNDU6XFx0XFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxcbjEzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIpO1xcbjEzNDc6XFx0XFx0fVxcbjEzNDg6XFx0XFxuMTM0OTpcXHRcXHRyZXR1cm4gZmliX2luZm9fdXBkYXRlX25oY19zYWRkcihuZXQsIG5oYywgcmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3Njb3BlKTtcXG4xMzUwOlxcdH1cXG4xMzUxOlxcdFxcbjEzNTI6XFx0c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxcbjEzNTM6XFx0e1xcbjEzNTQ6XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfdHlwZSAhPSBSVE5fTE9DQUwgfHwgIWNmZy1cXHUwMDNlZmNfZHN0IHx8XFxuMTM1NTpcXHRcXHQgICAgZmliX3ByZWZzcmMgIT0gY2ZnLVxcdTAwM2VmY19kc3QpIHtcXG4xMzU2OlxcdFxcdFxcdHUzMiB0Yl9pZCA9IGNmZy1cXHUwMDNlZmNfdGFibGU7XFxuMTM1NzpcXHRcXHRcXHRpbnQgcmM7XFxuMTM1ODpcXHRcXG4xMzU5OlxcdFxcdFxcdGlmICh0Yl9pZCA9PSBSVF9UQUJMRV9NQUlOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowNy40MzMyMzU3MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE3NzE5NTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmVyYXRpb24gSUQgQ2hlY2sgaW4gYGZpYl9zZW1hbnRpY3MuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZmliX3NlbWFudGljcy5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGdlbmVyYXRpb24gSUQgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLCBhbmQgdGhpcyBmaXggZGlyZWN0bHkgYWRkcmVzc2VzIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlLiBFc3NlbnRpYWxseSwgZWFjaCBuZXh0IGhvcCAoYG5oYCkgY2FjaGVzIGl0cyBzb3VyY2UgYWRkcmVzcyAoYG5oX3NhZGRyYCkgYW5kIGl0cyBhc3NvY2lhdGVkIGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgbmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgIGlzIHVwZGF0ZWQsIHdoaWNoIGhhcHBlbnMsIHNheSwgd2hlbiBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIG1vZGlmaWVkLiBXaXRob3V0IHRoZSB1cGRhdGVkIGNoZWNrLCBhIHN0YWxlIGBuaC1cdTAwM2VuaF9zYWRkcmAgY291bGQgYmUgdXNlZCB3aXRoIGEgbmV3ZXIgYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLlxuXG5UaGUgZml4IGlzIGNsZXZlci4gSXQgbm93IGNoZWNrcyBpZiBgbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgdGhlIGN1cnJlbnQgYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCAqYmVmb3JlKiBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzZXMuIElmIHRoZXkgbWF0Y2gsIGl0ICp0aGVuKiBkb2VzIHRoZSBzb3VyY2UgYWRkcmVzcyBjb21wYXJpc29uLiBBbmQgb2YgY291cnNlLCB0aGUgdXNlIG9mIGBSRUFEX09OQ0VgIGhlcmUgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhlIGRhdGEgcmVhZHMgYXJlIGF0b21pYyBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBvbiB0aGVzZSBwb3RlbnRpYWxseSBjb25jdXJyZW50bHktdXBkYXRlZCBzaGFyZWQgdmFyaWFibGVzISBJdCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgb3B0aW1pemUgYXdheSBhIGNydWNpYWwgcmVhZCBvciByZW9yZGVyIHRoZSByZWFkcyBpbiBhIHdheSB0aGF0IGJyZWFrcyB0aGUgbG9naWMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgcGF0aC5cblxuVGhlIG5leHQgdGhpbmcgSSdkIGRvIGlzIGV2YWx1YXRlIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJcyB0aGlzIGEgY29kZSBwYXRoIHRoYXQncyBoaXQgZnJlcXVlbnRseSwgb3IgaXMgaXQgbW9yZSBvZiBhbiBlZGdlIGNhc2U/IFdoZXJlIGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgYWN0dWFsbHkgY2FsbGVkIGZyb20/IFRpbWUgdG8gZ2V0IHRoZSBncmVwcGVyIG91dCBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoxMS42MTA0MzQzOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzc5MTk1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9NTc0PWludCBmaWJfY2hlY2tfbmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oICpuaCwgdTMyIHRhYmxlLCB1OCBzY29wZSxcXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzUtXFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXBfZmliLmg6NTc2OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNzgtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE4MC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjI3PXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjM3OlxcdFxcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjA1LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIE5VTEwpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cXHRcXHRJUENCKHNrYiktXFx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6MTMuNDQ4MzYwNjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyOTM3NjEyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIGNvbnRleHQuICBUaGUgY29kZSB0ZWxscyBtZSBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBmaXJzdCwgd2l0aGluIGBmaWJfc2VsZWN0X3BhdGhgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBpdCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBwYXRoIHNlbGVjdGlvbiBwcm9jZXNzLiBTZWNvbmQsIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgaXBfbWtyb3V0ZV9pbnB1dGAgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLiBIbW0sIGBpcF9ta3JvdXRlX2lucHV0YCBpcyB1c2VkIGZvciBpbnB1dCByb3V0ZSBjcmVhdGlvbiwgdGhhdCdzIGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGVzZSB0d28gY2FsbCBzaXRlcywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBjYWxsZXJzIG9mIGBmaWJfc2VsZWN0X3BhdGhgIHRvIGdldCB0aGUgY29udGV4dC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBicm9hZGVyIHZpZXcgYW5kIGhlbHAgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGJlaW5nIHVzZWQgZm9yIGBmaWJfc2VsZWN0X3BhdGhgIHdoaWNoIGluIHR1cm4gd2lsbCBzaG93IHRoZSB1c2FnZSBvZiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwYXRoIGZvciBpbnZlc3RpZ2F0aW9uIHJpZ2h0IG5vdywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgYnJvYWRlciByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjE2Ljc0MjEyNDA1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTI2MTU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfc2VsZWN0X3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9NTc2PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KTtcXG5pbmNsdWRlL25ldC9pcF9maWIuaDo1Nzg6dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3OS1cXHRcXHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzUxPXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjQ0NS1cXHRpZiAoZmliX2luZm9fbnVtX3BhdGgocmVzLmZpKSBcXHUwMDNlIDEpXFxubmV0L2NvcmUvZmlsdGVyLmM6NjQ0NjpcXHRcXHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcXHUwMDI2cmVzLCBcXHUwMDI2Zmw0LCBOVUxMKTtcXG5uZXQvY29yZS9maWx0ZXIuYy02NDQ3LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNzk9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjI2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjI3OnZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIyOC1cXHRcXHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9NzczPXN0YXRpYyB2b2lkIF9faXBfZG9fcmVkaXJlY3Qoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtODI3LVxcbm5ldC9pcHY0L3JvdXRlLmM6ODI4OlxcdFxcdFxcdFxcdGZpYl9zZWxlY3RfcGF0aChuZXQsIFxcdTAwMjZyZXMsIGZsNCwgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTgyOS1cXHRcXHRcXHRcXHRuaGMgPSBGSUJfUkVTX05IQyhyZXMpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMDQ4PXN0YXRpYyB2b2lkIF9faXBfcnRfdXBkYXRlX3BtdHUoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBmbG93aTQgKmZsNCwgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTA3Ny1cXG5uZXQvaXB2NC9yb3V0ZS5jOjEwNzg6XFx0XFx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgXFx1MDAyNnJlcywgZmw0LCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTEwNzktI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjc0MT1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODk4LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg5OTpcXHRmaWJfc2VsZWN0X3BhdGgobmV0LCByZXMsIGZsNCwgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjE4LjM4MzM5NTc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyODI0MTEwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhpcyBpcyBjb3JlIElQdjQgcm91dGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gKm11bHRpcGF0aCogcm91dGUgc2VsZWN0aW9uLiBJIGtub3cgdGhhdCBgaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdWAgYW5kIGBpcF9ta3JvdXRlX2lucHV0YCBib3RoIGNhbGwgaW50byB0aGlzIGFyZWEsIHNvIGl0J3MgYSBob3QgcGF0aCwgZXNwZWNpYWxseSB3aXRoIG11bHRpcGF0aCBlbmFibGVkLCB3aGljaCBTeXprYWxsZXIgbG92ZXMgdG8gZXhlcmNpc2UgdGhyb3VnaCBgUlRNX05FV1JPVVRFYCBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBzb2NrZXQgY3JlYXRpb24uIEdvb2QsIHRoYXQncyBhbHJlYWR5IGEgc3Ryb25nIGluZGljYXRvci5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LCBoaXR0aW5nIHVwIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIEZpcnN0LCBTZWN0aW9uIDE6IFwiUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUsXCIgcmlnaHQ/IEFuZCB0aGUgcGF0Y2ggaXMgb3BlcmF0aW5nIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIHNvIHRoYXQncyBnb29kLiBUaGV5IHNheSBkb24ndCB0cnVzdCB0aGUgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIChORkNJKSBsYWJlbCBvciByZWZhY3RvcmluZyBjbGFpbXMgYmxpbmRseSwgYW5kIHRoYXQncyBzb2xpZCBhZHZpY2UuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZT8gWWVzLCB0aGlzIHBhdGNoIGZhbGxzIHJpZ2h0IGludG8gdGhhdC5cblxuTm93LCBTZWN0aW9uIDIgaXMgdGhlIFwid2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgc2VjdGlvbi4gTm9wZSwgbm90aGluZyBoZXJlIGFwcGxpZXMuIFRoZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGluIGtlcm5lbCwgZXhlY3V0YWJsZSBjb2RlLiBObyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBoZXJlLiBObyB1bnJlYWNoYWJsZSBwYXRocy5cblxuRmluYWxseSwgU2VjdGlvbiAzLiBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIFRoaXMgcGF0Y2ggKmRvZXMqIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCBpdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlISBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgPSBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCdzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAhIE1vZGlmeWluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgaXMuIEFuZCB3ZSdyZSB0YWxraW5nIGFib3V0ICpyb3V0ZSBzZWxlY3Rpb24gbG9naWMqIHdoaWNoIGlzIGNvcmUhXG5cblNvLCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGhvdyBjYW5kaWRhdGUgbmV4dGhvcHMgYXJlIHNjb3JlZCBpbiBtdWx0aXBhdGggcm91dGluZy4gSXQncyBjb21wYXJpbmcgYG5oX3NhZGRyX2dlbmlkYCB3aXRoIGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGAgdXNpbmcgYFJFQURfT05DRWAuIFRoaXMgaXMgKmRpcmVjdGx5KiBhZmZlY3Rpbmcgcm91dGUgc2VsZWN0aW9uLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXG5cbk5vdywgd2hhdCBhYm91dCBgRW5hYmxlQ29uZmlnc2A/IE9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGNvbXBpbGUgYW5kIHJlYWNoIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIEkgY2FuIHNlZSBpdCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGlmIHRoZSBmaWxlIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIGl0c2VsZiBoYXMgb3RoZXIgZ3VhcmRzLCBvciBpZiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3MgdG8gcmVwcm9kdWNlIGFuZCB0cmlnZ2VyIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoyNS42NjU4MDg5MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQ4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9zZW1hbnRpY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTU6XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9maWJfbG9va3VwLmg9Mjk9c3RhdGljIGlubGluZSB2b2lkIGZpYl9hbGlhc19hY2Nlc3NlZChzdHJ1Y3QgZmliX2FsaWFzICpmYSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC0zNi1cXG5uZXQvaXB2NC9maWJfbG9va3VwLmg6Mzc6LyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovXFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM4LXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjI1LjcxNTY2MTMzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjMyMDcxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBmaWJfc2VtYW50aWNzLm8gYW5kIE11bHRpcGF0aCBSb3V0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmaWJfc2VtYW50aWNzLm9gIGlzIGludGVncmF0ZWQuIEkgc2VlIHRoYXQgaXQncyBidWlsdCBpbnRvIGBvYmoteWAgd2hlbiBJUHY0IGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lIGxpbmUgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIGxpbmUgMjE1MTogYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuXG5cbkknbGwgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0J3MgdGhlIGtleS4gU28sIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQgd2hlbiBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBzZXQuXG5cbk5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGRlcGVuZGVuY2llcyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFnYWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjI5Ljk0NzczNDg1MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcXG4gIDE5OlxcdFxcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcXG4gIDIwOlxcdFxcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxcbiAgMjE6XFx0XFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsOlxcbiAgMjQ6XFx0XFx0ICBhbnN3ZXJpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDI1OlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IGFkdmFuY2VkIHJvdXRpbmcuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgTm90ZSB0aGF0IHlvdXIgYm94IGNhbiBvbmx5IGFjdCBhcyBhIHJvdXRlciBpZiB5b3UgZW5hYmxlIElQXFxuICAyODpcXHRcXHQgIGZvcndhcmRpbmcgaW4geW91ciBrZXJuZWw7IHlvdSBjYW4gZG8gdGhhdCBieSBzYXlpbmcgWSB0byBcXFwiL3Byb2NcXG4gIDI5OlxcdFxcdCAgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCIgYW5kIFxcXCJTeXNjdGwgc3VwcG9ydFxcXCIgYmVsb3cgYW5kIGV4ZWN1dGluZyB0aGVcXG4gIDMwOlxcdFxcdCAgbGluZVxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGVjaG8gXFxcIjFcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmRcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcnBfZmlsdGVyLCB3aGljaFxcbiAgMzc6XFx0XFx0ICBhdXRvbWF0aWNhbGx5IHJlamVjdHMgaW5jb21pbmcgcGFja2V0cyBpZiB0aGUgcm91dGluZyB0YWJsZSBlbnRyeVxcbiAgMzg6XFx0XFx0ICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoyOS45NDc4MTcyODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ5NzczMDQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGlwYXRoIFJvdXRpbmcgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplciBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZm9jdXMgb24uXG5cbkZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uczogYElQX0FEVkFOQ0VEX1JPVVRFUmAgYW5kIGBJUF9ST1VURV9NVUxUSVBBVEhgLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIHRhcmdldCB0aG9zZSBzZXR0aW5ncy5cblxuTmV4dCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBleHRyYWN0IFwiRm9jdXNTeW1ib2xzXCIgdG8gcHJldmVudCB0aGUgZnV6emVyIGZyb20gZ2V0dGluZyBkaWx1dGVkIGJ5IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cywgYXZvaWRpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgdGhhdCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGEgbm9uLXN0YXRpYyBDIGZ1bmN0aW9uIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kIGZvciBteSBwdXJwb3Nlcy4gSW1wb3J0YW50bHksIGl0J3MgKm5vdCogY2FsbGVkIGluIGV2ZXJ5IHNpbmdsZSByb3V0ZSBsb29rdXAuIEl0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gbXVsdGlwYXRoIHJvdXRpbmcsIGFuZCB0aGlzIGlzIGNydWNpYWwuIEl0J3Mgb25seSBjYWxsZWQgd2hlbiBtdWx0aXBsZSBuZXh0IGhvcHMgYXJlIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0LiBJIGNhbiBzZWUgdGhpcyBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXRzZWxmIChjYWxsZWQgYnkgYGZpYl9zZWxlY3RfcGF0aGAgd2hpY2ggb25seSB1c2VzIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uIGlmIGEgbXVsdGlwYXRoIHJvdXRlIGlzIHByZXNlbnQpLlxuXG5JIGNvbnNpZGVyZWQgYGZpYl9zZWxlY3RfcGF0aGAsIGJ1dCB0aGF0J3MgZmFyIHRvbyBnZW5lcmFsLiBJdCdzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBJUHY0IHJvdXRlIGxvb2t1cCwgcmVnYXJkbGVzcyBvZiBtdWx0aXBhdGggY29uZmlndXJhdGlvbi4gVGhhdCB3b3VsZCBtYWtlIGl0IGEgYmFkIGNob2ljZSwgYW5kIEkgZG9uJ3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzLlxuXG5UaGVuLCBJIGRvdWJsZS1jaGVja2VkIHRvIHNlZSBpZiB0aGVyZSB3ZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgb3IgYWZmZWN0ZWQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBuaF9zYWRkcl9nZW5pZGAuIEhvd2V2ZXIsIGJhc2VkIG9uIHRoZSBgZGlmZmAsIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVkIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHNvIG15IGZvY3VzIGlzIG5hcnJvd2VkLCBhbmQgbXkgZnV6emluZyBlZmZvcnRzIHdpbGwgYmUgZGlyZWN0ZWQgdG93YXJkcyBleGFjdGx5IHRoZSBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhlIG1vc3QgYXR0ZW50aW9uLlxuXG5JIGNvbmZpcm1lZCB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgaW5kZWVkIGEgZ2xvYmFsIG5vbi1pbmxpbmUgZnVuY3Rpb24sIGEgdmFsaWQgc3ltYm9sIGluIHRoZSBgdm1saW51eGAga2VybmVsIGltYWdlLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSByZS1yZXZpZXdlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBmb3JtYXQsIG1ha2luZyBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuU28sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSByb3V0ZSBzZWxlY3Rpb24gbG9naWMgd2l0aGluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIFNwZWNpZmljYWxseSwgaXQgdmFsaWRhdGVzIHRoZSBjYW5kaWRhdGUgbmV4dGhvcCBhZGRyZXNzZXMgYWdhaW5zdCBgZGV2X2FkZHJfZ2VuaWRgLCB1c2luZyBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudC1zYWZlIGFjY2Vzcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGVzcGVjaWFsbHkgZm9yIG11bHRpcGF0aCBlbnZpcm9ubWVudHMuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgKGBJUF9ST1VURV9NVUxUSVBBVEhgLCBgSVBfQURWQU5DRURfUk9VVEVSYCkgYW5kIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgYXJlIHRoZSB3YXkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTIxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDo0NC45MjUxMjQwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTgyNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6NDQuOTk5MzE1MjY4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0ODAyNTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjQ0Ljk5OTc2ODgzOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NDQ3NTY4MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmOTZjNTg0NWM1MzhkM2I4OTZhZjY4OTljOWVjOGVjNTZjODBiZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODoxMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uZTJiZmMxMWFlYTA5YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjE4NCw2ICsyMTg0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdGJvb2wgdXNlX25laWdoO1xuIFx0aW50IHNjb3JlID0gLTE7XG4gXHRfX2JlMzIgc2FkZHI7XG4rXHRpbnQgZ2VuaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuIFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuQEAgLTIxOTIsNiArMjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXG4gXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbiBcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbitcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuIFxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuQEAgLTIyMDQsNyArMjIwNiw5IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXG4rXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSArPSAyO1xuIFx0XHRpZiAoaGFzaCBcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxuIFx0XHRcdG5oX3Njb3JlKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDo0NC45OTk3Njk3MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA3MjE5MDE0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBiZWluZyBhc2tlZCB0byBldmFsdWF0ZSBhIHBhdGNoIGZvciBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGRpdmUgcmlnaHQgaW4gYW5kIGxvb2sgYXQgdGhlIGNvZGUuIEkgY2FuIHNlZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSwgYGdlbmlkYCwgYW5kIHJlZmVyZW5jZXMgYG5oX3NhZGRyX2dlbmlkYCB3aGljaCBpcyBuZXcgdG8gbWUuXG5cbk15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gbG9naWMsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIHNvdXJjZSBhZGRyZXNzIGFmZmluaXR5LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFpbWluZyB0byBtYWtlIG11bHRpcGF0aCBzZWxlY3Rpb24gbW9yZSByb2J1c3Qgd2hlbiBzb3VyY2UgYWRkcmVzc2VzIGFyZSBpbnZvbHZlZC4gVGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyYCwgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYSBnZW5lcmF0aW9uIElEIGNoZWNrIHRvIHRoZSBjb21wYXJpc29uLCBsaWtlbHkgdG8gZ3VhcmQgYWdhaW5zdCBzdGFsZSByb3V0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gbmV0d29yayBjb2RlIOKAkyB1c2luZyBnZW5lcmF0aW9uIElEcyB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdoZW4gbmV0d29yayBkZXZpY2VzIGNoYW5nZSB0aGVpciBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHN5c3RlbSBtaWdodCB0aGluayBvbGQgYWRkcmVzc2VzIGFyZSBzdGlsbCB2YWxpZC4gSSBzZWUgdGhhdCBgZ2VuaWRgIGlzIG9ubHkgc2V0IGlmIGBzYWRkcmAgaXMgbm90IDAsIHNvIGl0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljIGlzIG9ubHkgZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSBhZGRyZXNzIG1hdHRlcnMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgYG5oX3NhZGRyX2dlbmlkYCBpcyBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGRlZmluZWQsIGluaXRpYWxpemVkLCBtb2RpZmllZCwgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUbyBkbyB0aGlzLCBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIG9jY3VycmVuY2VzIG9mIGBuaF9zYWRkcl9nZW5pZGAgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIElQdjQgRklCIHN1YnN5c3RlbSBhbmQgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGJlZm9yZSBJIGNhbiBtYWtlIGEganVkZ2VtZW50IGNhbGwgb24gd2hldGhlciB0aGUgcGF0Y2ggaXMgYSBnb29kIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjU1LjcyMTY3NDU1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MTg0Njk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaF9zYWRkcl9nZW5pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcF9maWIuaD0xMDc9c3RydWN0IGZpYl9uaCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXFx0X19iZTMyXFx0XFx0XFx0bmhfc2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfZmliLmg6MTE1OlxcdGludFxcdFxcdFxcdG5oX3NhZGRyX2dlbmlkO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTExNi0jZGVmaW5lIGZpYl9uaF9mYW1pbHlcXHRcXHRuaF9jb21tb24ubmhjX2ZhbWlseVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMTU9X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjctXFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTMyODpcXHRXUklURV9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMzM9X19iZTMyIGZpYl9yZXN1bHRfcHJlZnNyYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM0My1cXHRcXHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNDQ6XFx0XFx0aWYgKFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDUtXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNzk9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjA5LVxcdFxcdGlmIChzYWRkciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjU3LjgwMzUzMTcyN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU0ODExNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzOlxuXG4qKkRlbHZpbmcgaW50byBgZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGZpYl9zZW1hbnRpY3MuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMTUtMTM1MCBhbmQgdGhlbiBhZ2FpbiBvbiAyMTgwLTIyMjAuIFRpbWUgdG8gZ2V0IHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIGZpcmVkIHVwLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQga2V5IGFyZWFzIHJlbGF0ZWQgdG8uLi4gd2VsbCwgSSBoYXZlIGEgaHVuY2guIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGl0J3MgdmVyeSBsaWtlbHkgdGhlc2Ugc2VjdGlvbnMgd2lsbCBiZSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBvciBvcHRpbWl6YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2Ugc3BlY2lmaWMgbGluZXMgYXJlIGxvY2F0ZWQsIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGNob2ljZXMsIGVkZ2UgY2FzZSBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGltcGxlbWVudGVkIGluIHRoaXMgY29kZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MDguMzUxNjQ5NDIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMDpcXHRcXHRcXHRlcnIgPSBmaWJfY2hlY2tfbmhfbm9uZ3cobmV0LCBuaCwgZXh0YWNrKTtcXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0cmV0dXJuIGVycjtcXG4xMzEzOlxcdH1cXG4xMzE0OlxcdFxcbjEzMTU6XFx0X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbjEzMTY6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgc2NvcGUpXFxuMTMxNzpcXHR7XFxuMTMxODpcXHRcXHRzdHJ1Y3QgZmliX25oICpuaDtcXG4xMzE5OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0aWYgKG5oYy1cXHUwMDNlbmhjX2ZhbWlseSAhPSBBRl9JTkVUKVxcbjEzMjI6XFx0XFx0XFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVxcdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XFxuMTMyMzpcXHRcXG4xMzI0OlxcdFxcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcXG4xMzI1OlxcdFxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cXHUwMDNlZmliX25oX2RldiwgbmgtXFx1MDAzZWZpYl9uaF9ndzQsIHNjb3BlKTtcXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcXG4xMzI4OlxcdFxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSk7XFxuMTMyOTpcXHRcXG4xMzMwOlxcdFxcdHJldHVybiBzYWRkcjtcXG4xMzMxOlxcdH1cXG4xMzMyOlxcdFxcbjEzMzM6XFx0X19iZTMyIGZpYl9yZXN1bHRfcHJlZnNyYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuMTMzNDpcXHR7XFxuMTMzNTpcXHRcXHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVxcdTAwM2VuaGM7XFxuMTMzNjpcXHRcXG4xMzM3OlxcdFxcdGlmIChyZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfcHJlZnNyYylcXG4xMzM4OlxcdFxcdFxcdHJldHVybiByZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfcHJlZnNyYztcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKG5oYy1cXHUwMDNlbmhjX2ZhbWlseSA9PSBBRl9JTkVUKSB7XFxuMTM0MTpcXHRcXHRcXHRzdHJ1Y3QgZmliX25oICpuaDtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0XFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbjEzNDQ6XFx0XFx0XFx0aWYgKFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09XFxuMTM0NTpcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpXFxuMTM0NjpcXHRcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcik7XFxuMTM0NzpcXHRcXHR9XFxuMTM0ODpcXHRcXG4xMzQ5OlxcdFxcdHJldHVybiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKG5ldCwgbmhjLCByZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfc2NvcGUpO1xcbjEzNTA6XFx0fVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXFxuMTM1MzpcXHR7XFxuMTM1NDpcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVxcdTAwM2VmY19kc3QgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MDguMzUxNzU4MTczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTI4NDk3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBmb2N1c2luZyBvbiB3aGF0IEknZCBiZSB0aGlua2luZyBpZiBJIHdlcmUgZGlnZ2luZyBpbnRvIHRoZW0uXG5cbioqQW5hbHl6aW5nIHRoZSBJUHY0IEZJQiBTZW1hbnRpY3MgKExpbmVzIDIxODAtMjIzMCkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGJsb2NrIG9mIGNvZGUg4oCTIGxpbmVzIDIxODAgdGhyb3VnaCAyMjMwIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJltIGltbWVkaWF0ZWx5IG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHdvcmtzIGluIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGhhbmRsaW5nIGEgcHJldHR5IHNwZWNpZmljIHNjZW5hcmlvLCBsaWtlbHkgcmVsYXRlZCB0byByb3V0ZSBsb29rdXAgb3Igcm91dGUgbWFuaXB1bGF0aW9uLCBwcm9iYWJseSB3aXRoIGEgZm9jdXMgb24gSVB2NCwgZ2l2ZW4gdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGNvbnRleHQuXG5cbkknbSBtZW50YWxseSBjcmVhdGluZyBhIGh5cG90aGVzaXM6IElzIHRoaXMgYWJvdXQgcm91dGUgY2FjaGluZywgaGFuZGxpbmcgb2YgbXVsdGlwYXRoIHJvdXRlcywgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyB0eXBlIG9mIHJvdXRlIGF0dHJpYnV0ZT8gUGVyaGFwcyBpdOKAmXMgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHJvdXRlIHByaW9yaXRpZXMgb3IgcHJlZmVyZW5jZS4gQmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGl0J3MgbGlrZWx5IGNvbm5lY3RlZCB0byB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIHRoYXQgKmRlZmluZSogd2hhdCBhIHZhbGlkIHJvdXRlIGlzIGFuZCBob3cgaXTigJlzIGNob3Nlbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLiBUaGUgZ29hbCBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIGNvbmZpcm0gdGhlIGludGVudCBvZiB0aGUgY29kZSwgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgdG8gc2VlIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSByb290IGNhdXNlIGZvciB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBsb2dpY2FsIGZsb3cuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGxvb3BzLCBhbmQgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHJvdXRlIGxvb2t1cHMgYW5kIG1vZGlmaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIEnigJlsbCBsb29rIGZvciBhbnkgb2YgdGhlIHN0YW5kYXJkIEZJQiBBUEkgZnVuY3Rpb25zIHN1Y2ggYXMgYGZpYl9sb29rdXBgLCBgZmliX2FkZF90YWJsZWAsIGBmaWJfZGVsX3RhYmxlYCwgZXRjLiwgaW4gb3JkZXIgdG8gYW5jaG9yIHRoZSBjb2RlIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXkgaGFuZGxpbmcgYSBzcGVjaWZpYyB0eXBlIG9mIHJvdXRlPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBhbmNpbGxhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRlcywgbGlrZSBtZXRyaWNzLCBwb2xpY3kgcm91dGluZyBydWxlcywgb3IgbmV4dC1ob3AgaW5mb3JtYXRpb24/IEFsc28sIEkgd2lsbCBxdWlja2x5IGxvb2sgZm9yIGNvbW1lbnRzIHRoYXQgd2lsbCBleHBsYWluIGFueSBub24tb2J2aW91cyBhc3BlY3Qgb2YgdGhlIGNvZGUgdGhhdCBuZWVkcyBleHBsYW5hdGlvbi5cblxuSSB3aWxsIGFsc28gcXVpY2tseSBsb29rIGZvciBhbnkgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIG9yIG90aGVyIHNlY3Rpb25zIG9mIGNvZGUgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIFRoZSBjb2RlIG1heSB1c2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXNzaXN0IHdpdGggaXRzIGpvYiwgb3IgcmVseSBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHNlY3Rpb24gbWF5IGRlcGVuZCBvbiBvdGhlciBrZXJuZWwgc3RydWN0dXJlcyBvciBzZXR0aW5ncyB0aGF0IEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLlxuXG5NeSBtYWluIGdvYWwgaXMgdG8gc29saWRpZnkgYSBjbGVhciBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgSVB2NCBGSUIuIFRoZW4gSSBjYW4gc3RhcnQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGF0IG1lbnRhbCBtb2RlbCB0aGF0IEkgbWlnaHQgbmVlZCB0byBhY3QgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTIuNTA0NjEwOTAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4yMTgxOlxcdHtcXG4yMTgyOlxcdFxcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXFx1MDAzZWZpO1xcbjIxODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXFx1MDAzZWZpYl9uZXQ7XFxuMjE4NDpcXHRcXHRib29sIHVzZV9uZWlnaDtcXG4yMTg1OlxcdFxcdGludCBzY29yZSA9IC0xO1xcbjIxODY6XFx0XFx0X19iZTMyIHNhZGRyO1xcbjIxODc6XFx0XFx0aW50IGdlbmlkO1xcbjIxODg6XFx0XFxuMjE4OTpcXHRcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuMjE5MDpcXHRcXHRcXHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xcbjIxOTE6XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTI6XFx0XFx0fVxcbjIxOTM6XFx0XFxuMjE5NDpcXHRcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuMjE5NTpcXHRcXHRzYWRkciA9IGZsNCA/IGZsNC1cXHUwMDNlc2FkZHIgOiAwO1xcbjIxOTY6XFx0XFx0Z2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjE5OTpcXHRcXHRcXHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcXG4yMjAwOlxcdFxcbjIyMDE6XFx0XFx0XFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXFxuMjIwMjpcXHRcXHRcXHQgKiBtaW51cyBvbmUgd2hlbiBcXFwiaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXFxcIiBpcyBzZXQuXFxuMjIwMzpcXHRcXHRcXHQgKi9cXG4yMjA0OlxcdFxcdFxcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XFxuMjIwNTpcXHRcXHRcXHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcXG4yMjA2OlxcdFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuMjIwNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjA4OlxcdFxcbjIyMDk6XFx0XFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2XFxuMjIxMDpcXHRcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcXHUwMDI2XFx1MDAyNlxcbjIyMTE6XFx0XFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuMjIxMjpcXHRcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbjIyMTM6XFx0XFx0XFx0aWYgKGhhc2ggXFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXFxuMjIxNDpcXHRcXHRcXHRcXHRuaF9zY29yZSsrO1xcbjIyMTU6XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2Mgbmhfc2NvcmUpIHtcXG4yMjE2OlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhfc2VsID0gbmhzZWw7XFxuMjIxNzpcXHRcXHRcXHRcXHRyZXMtXFx1MDAzZW5oYyA9IFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VuaF9jb21tb247XFxuMjIxODpcXHRcXHRcXHRcXHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFxcdTAwMjZcXHUwMDI2IG5oX3Njb3JlID09IDEpKVxcbjIyMTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMjA6XFx0XFx0XFx0XFx0c2NvcmUgPSBuaF9zY29yZTtcXG4yMjIxOlxcdFxcdFxcdH1cXG4yMjIyOlxcdFxcbjIyMjM6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbjIyMjQ6XFx0fVxcbjIyMjU6XFx0I2VuZGlmXFxuMjIyNjpcXHRcXG4yMjI3OlxcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4yMjI4OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIyMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToxMi41MDQ3MjY5MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg2MjI1MTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mIGBzdHJ1Y3QgZmliX25oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgc3RydWN0IGZpYl9uaGAuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgaW5zdGFudGlhdGVkIGFuZCBob3cgaXMgaXRzIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSXMgaXQgYSBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0dXJlPyBJcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXI/IElzIGl0IGVtYmVkZGVkIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmU/IEtub3dpbmcgaXRzIGFsbG9jYXRpb24gbWV0aG9kIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmliIG5leHQgaG9wcyBhcmUgY3JlYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTQuMzY2OTgxNjQ2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg0MTczNDE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfbmguKmt6YWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjE2LjU1MTE2NTA2M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjU0MzM4MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgTWVtb3J5IEFsbG9jYXRpb24gb2YgYGZpYl9pbmZvYCBhbmQgYGZpYl9uaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIGluIGBmaWJfc2VtYW50aWNzLmNgIHRoZXNlIHN0cnVjdHVyZXMsIGBzdHJ1Y3QgZmliX2luZm9gIGFuZCBgc3RydWN0IGZpYl9uaGAsIGFyZSBhY3R1YWxseSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGJ1dCB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy4gSSBrbm93IEkgY291bGQgdXNlIGEgZGVidWdnZXIsIG9yIHBlcmhhcHMgdHJ5IGEgbW9yZSB0YXJnZXRlZCBzZWFyY2guIEknbSB0aGlua2luZyB0aGUgc2ltcGxlc3QgYXBwcm9hY2ggZm9yIGEgcXVpY2sgYW5zd2VyIGlzIGxpa2VseSBhIGNvZGUgc2VhcmNoLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBvY2N1cnJlbmNlcyBvZiBlaXRoZXIgc3RydWN0dXJlIG5hbWUgaW4gYWxsb2NhdGlvbiBjb250ZXh0cy4gTGV0J3Mgc3RhcnQgd2l0aCBgZmliX3NlbWFudGljcy5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgbGlmZXRpbWVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdHJ1Y3RzIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTkuODA1NTA1MDIxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIyNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM9MTE5ND1pbnQgZmliX3RhYmxlX2luc2VydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfdGFibGUgKnRiLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM6MTIxMjpcXHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVxcdGlmIChJU19FUlIoZmkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjE5Ljg1NTczNzY2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjEzNDE5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byBJUHY0IEZJQiBTZW1hbnRpY3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGUgSVB2NCBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgd29ya3MuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZmliX2NyZWF0ZV9pbmZvYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCBhIGNyaXRpY2FsIHBhcnQgb2YgaXQg4oCTIGluIHNldHRpbmcgdXAgRklCIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSB0byBiZXR0ZXIgZ3Jhc3AgW2luc2VydCB5b3VyIHNwZWNpZmljIG5lZWQsIGUuZy4sIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcm91dGUgaW5zdGFsbGF0aW9ucywgaG93IHBvbGljaWVzIGFyZSBhcHBsaWVkLCBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3NdLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgcHJvdG9jb2xzLiBJIGFudGljaXBhdGUgc2VlaW5nIGhvdyByb3V0ZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIHJvdXRlIHNlbGVjdGlvbiBwcm9jZXNzIGlzIGluaXRpYXRlZC4gSG9wZWZ1bGx5LCBJJ2xsIHVuY292ZXIgc29tZSBvZiB0aGUgbnVhbmNlcyBvZiB0aGUgRklCJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgY2FuIGNvbmZpcm0gdGhlIGJlaGF2aW9yIGZvciBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgbmVlZCwgZS5nLiBob3cgbmV3IHJvdXRlcyBhcmUgY3JlYXRlZCwgd2hhdCBoYXBwZW5zIG9uIHJvdXRlIGNvbmZsaWN0cyBvciByb3V0ZSBjaGFuZ2VzXS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjIyLjg3NzA4MTc2MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzY6XFx0c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRpbnQgZXJyO1xcbjEzODA6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IE5VTEw7XFxuMTM4MTpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBOVUxMO1xcbjEzODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpvZmk7XFxuMTM4MzpcXHRcXHRpbnQgbmhzID0gMTtcXG4xMzg0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGNmZy1cXHUwMDNlZmNfbmxpbmZvLm5sX25ldDtcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4xMzg3OlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX3R5cGUgXFx1MDAzZSBSVE5fTUFYKVxcbjEzODg6XFx0XFx0XFx0Z290byBlcnJfaW52YWw7XFxuMTM4OTpcXHRcXG4xMzkwOlxcdFxcdC8qIEZhc3QgY2hlY2sgdG8gY2F0Y2ggdGhlIG1vc3Qgd2VpcmQgY2FzZXMgKi9cXG4xMzkxOlxcdFxcdGlmIChmaWJfcHJvcHNbY2ZnLVxcdTAwM2VmY190eXBlXS5zY29wZSBcXHUwMDNlIGNmZy1cXHUwMDNlZmNfc2NvcGUpIHtcXG4xMzkyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgc2NvcGVcXFwiKTtcXG4xMzkzOlxcdFxcdFxcdGdvdG8gZXJyX2ludmFsO1xcbjEzOTQ6XFx0XFx0fVxcbjEzOTU6XFx0XFxuMTM5NjpcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IChSVE5IX0ZfREVBRCB8IFJUTkhfRl9MSU5LRE9XTikpIHtcXG4xMzk3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4xMzk4OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBydG1fZmxhZ3MgLSBjYW4gbm90IGNvbnRhaW4gREVBRCBvciBMSU5LRE9XTlxcXCIpO1xcbjEzOTk6XFx0XFx0XFx0Z290byBlcnJfaW52YWw7XFxuMTQwMDpcXHRcXHR9XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKSB7XFxuMTQwMzpcXHRcXHRcXHRpZiAoIWNmZy1cXHUwMDNlZmNfbXgpIHtcXG4xNDA0OlxcdFxcdFxcdFxcdGZpID0gZmliX2ZpbmRfaW5mb19uaChuZXQsIGNmZyk7XFxuMTQwNTpcXHRcXHRcXHRcXHRpZiAoZmkpIHtcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2ZmktXFx1MDAzZWZpYl90cmVlcmVmKTtcXG4xNDA3OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmaTtcXG4xNDA4OlxcdFxcdFxcdFxcdH1cXG4xNDA5OlxcdFxcdFxcdH1cXG4xNDEwOlxcdFxcbjE0MTE6XFx0XFx0XFx0bmggPSBuZXh0aG9wX2ZpbmRfYnlfaWQobmV0LCBjZmctXFx1MDAzZWZjX25oX2lkKTtcXG4xNDEyOlxcdFxcdFxcdGlmICghbmgpIHtcXG4xNDEzOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5leHRob3AgaWQgZG9lcyBub3QgZXhpc3RcXFwiKTtcXG4xNDE0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ludmFsO1xcbjE0MTU6XFx0XFx0XFx0fVxcbjE0MTY6XFx0XFx0XFx0bmhzID0gMDtcXG4xNDE3OlxcdFxcdH1cXG4xNDE4OlxcdFxcbjE0MTk6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4xNDIwOlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX21wKSB7XFxuMTQyMTpcXHRcXHRcXHRuaHMgPSBmaWJfY291bnRfbmV4dGhvcHMoY2ZnLVxcdTAwM2VmY19tcCwgY2ZnLVxcdTAwM2VmY19tcF9sZW4sIGV4dGFjayk7XFxuMTQyMjpcXHRcXHRcXHRpZiAobmhzID09IDApXFxuMTQyMzpcXHRcXHRcXHRcXHRnb3RvIGVycl9pbnZhbDtcXG4xNDI0OlxcdFxcdH1cXG4xNDI1OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyMi44NzcxOTE1MDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE1MjcwMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZmliX2NyZWF0ZV9pbmZvYCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZpYl9jcmVhdGVfaW5mb2Agc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgYGZpYl9jcmVhdGVfaW5mb2AgbGlrZWx5IGhvbGRzIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGEgbmV3IEZpYmVyIChvciwgaW4gc29tZSBjb250ZXh0cywgYSBGb3J3YXJkIEluZm9ybWF0aW9uIEJhc2UgLSBGSUIgLSBlbnRyeSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlYWNoIGZpZWxkIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQuIFNwZWNpZmljYWxseSwgd2hhdCBwYXJ0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVsb25nIHRvIHRoZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiB0aGF0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYSBmaWJlci4gXG5cbklzIGl0IHVzaW5nIGEgZml4ZWQtc2l6ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IG9yIGR5bmFtaWMgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpdHNlbGY/IEFyZSB0aGVyZSBwb2ludGVycyB0byBvdGhlciBhbGxvY2F0ZWQgbWVtb3J5PyBJZiBzbywgd2hhdCBhcmUgdGhlIHNpemVzIG9mIHRob3NlIGFzc29jaWF0ZWQgbWVtb3J5IGJsb2Nrcz8gQXJlIHRoZXJlIGVtYmVkZGVkIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYGZpYl9jcmVhdGVfaW5mb2AgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3I/IElzIHRoZXJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2VzIGV4aXN0P1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBvciBpZiB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZyZXF1ZW50bHkgd2l0aGluIGEgaGlnaC10aHJvdWdocHV0IHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBvciwgYXQgYSBtaW5pbXVtLCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcHJvcGVybHkgZGVhbGxvY2F0ZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgdGhlIGJldHRlciBJIGNhbiBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UsIHByZXZlbnQgbWVtb3J5IGlzc3VlcywgYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZW5zdXJlIHRoaXMgb3BlcmF0aW9uIGlzIGVmZmljaWVudCwgcm9idXN0LCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yLCBldmVuIHdvcnNlLCBzdGFiaWxpdHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyNi4wMjk4OTQzNDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDI2OlxcdFxcbjE0Mjc6XFx0XFx0ZmliX2luZm9faGFzaF9ncm93KG5ldCk7XFxuMTQyODpcXHRcXG4xNDI5OlxcdFxcdGZpID0ga3phbGxvY19mbGV4KCpmaSwgZmliX25oLCBuaHMpO1xcbjE0MzA6XFx0XFx0aWYgKCFmaSkge1xcbjE0MzE6XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTQzMjpcXHRcXHRcXHRnb3RvIGZhaWx1cmU7XFxuMTQzMzpcXHRcXHR9XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGZpLVxcdTAwM2VmaWJfbWV0cmljcyA9IGlwX2ZpYl9tZXRyaWNzX2luaXQoY2ZnLVxcdTAwM2VmY19teCwgY2ZnLVxcdTAwM2VmY19teF9sZW4sIGV4dGFjayk7XFxuMTQzNjpcXHRcXHRpZiAoSVNfRVJSKGZpLVxcdTAwM2VmaWJfbWV0cmljcykpIHtcXG4xNDM3OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZmktXFx1MDAzZWZpYl9tZXRyaWNzKTtcXG4xNDM4OlxcdFxcdFxcdGtmcmVlKGZpKTtcXG4xNDM5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTQ0MDpcXHRcXHR9XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdGZpLVxcdTAwM2VmaWJfbmV0ID0gbmV0O1xcbjE0NDM6XFx0XFx0ZmktXFx1MDAzZWZpYl9wcm90b2NvbCA9IGNmZy1cXHUwMDNlZmNfcHJvdG9jb2w7XFxuMTQ0NDpcXHRcXHRmaS1cXHUwMDNlZmliX3Njb3BlID0gY2ZnLVxcdTAwM2VmY19zY29wZTtcXG4xNDQ1OlxcdFxcdGZpLVxcdTAwM2VmaWJfZmxhZ3MgPSBjZmctXFx1MDAzZWZjX2ZsYWdzO1xcbjE0NDY6XFx0XFx0ZmktXFx1MDAzZWZpYl9wcmlvcml0eSA9IGNmZy1cXHUwMDNlZmNfcHJpb3JpdHk7XFxuMTQ0NzpcXHRcXHRmaS1cXHUwMDNlZmliX3ByZWZzcmMgPSBjZmctXFx1MDAzZWZjX3ByZWZzcmM7XFxuMTQ0ODpcXHRcXHRmaS1cXHUwMDNlZmliX3R5cGUgPSBjZmctXFx1MDAzZWZjX3R5cGU7XFxuMTQ0OTpcXHRcXHRmaS1cXHUwMDNlZmliX3RiX2lkID0gY2ZnLVxcdTAwM2VmY190YWJsZTtcXG4xNDUwOlxcdFxcbjE0NTE6XFx0XFx0ZmktXFx1MDAzZWZpYl9uaHMgPSBuaHM7XFxuMTQ1MjpcXHRcXHRpZiAobmgpIHtcXG4xNDUzOlxcdFxcdFxcdGlmICghbmV4dGhvcF9nZXQobmgpKSB7XFxuMTQ1NDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXh0aG9wIGhhcyBiZWVuIGRlbGV0ZWRcXFwiKTtcXG4xNDU1OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTQ1NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0NTc6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xNDU4OlxcdFxcdFxcdFxcdGZpLVxcdTAwM2VuaCA9IG5oO1xcbjE0NTk6XFx0XFx0XFx0fVxcbjE0NjA6XFx0XFx0fSBlbHNlIHtcXG4xNDYxOlxcdFxcdFxcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xcbjE0NjI6XFx0XFx0XFx0XFx0bmV4dGhvcF9uaC1cXHUwMDNlbmhfcGFyZW50ID0gZmk7XFxuMTQ2MzpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbXApXFxuMTQ2NjpcXHRcXHRcXHRcXHRlcnIgPSBmaWJfZ2V0X25ocyhmaSwgY2ZnLVxcdTAwM2VmY19tcCwgY2ZnLVxcdTAwM2VmY19tcF9sZW4sIGNmZyxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4xNDY4OlxcdFxcdFxcdGVsc2VcXG4xNDY5OlxcdFxcdFxcdFxcdGVyciA9IGZpYl9uaF9pbml0KG5ldCwgZmktXFx1MDAzZWZpYl9uaCwgY2ZnLCAxLCBleHRhY2spO1xcbjE0NzA6XFx0XFx0fVxcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRpZiAoZXJyICE9IDApXFxuMTQ3MzpcXHRcXHRcXHRnb3RvIGZhaWx1cmU7XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdGlmIChmaWJfcHJvcHNbY2ZnLVxcdTAwM2VmY190eXBlXS5lcnJvcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyNi4wMzAwMDcyMDFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMzMzA4Mjk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXggZm9yIE11bHRpcGF0aCBSb3V0ZSBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBmaSA9IGt6YWxsb2NfZmxleCgqZmksIGZpYl9uaCwgbmhzKTtgLCBtZWFuaW5nIGBmaWAgYW5kIGl0cyBmbGV4IGFycmF5IGBmaWJfbmhgIGdldCB6ZXJvLWFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgdGhlcmUncyBgZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7YCDigJMgYSBsb2NhbCBgZ2VuaWRgIGluaXRpYWxpemVkIGNvbmRpdGlvbmFsbHkuIEkga25vdyBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZGAgZ2V0cyBpbml0aWFsaXplZCB0byAwIGR1cmluZyBhbGxvY2F0aW9uIChvciB1cGRhdGVkIGJ5IGBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyYCksIGFuZCB0aGUgY29kZSBjb21wYXJlcyB0d28gaW5pdGlhbGl6ZWQgaW50ZWdlcnMgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkYCwgYXMgd2VsbCBhcyBjb21wYXJpbmcgYF9fYmUzMmAgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyYC5cblxuTm93LCB3aGF0IGV4YWN0bHkgZGlkIHRoYXQgcGF0Y2ggY2hhbmdlLCBhbmQgKndoeSo/IExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgbG9va2luZyBiYWNrIGF0IGNvbW1pdCBgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYWAuIEluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHdlJ3JlIGRlYWxpbmcgd2l0aCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAgY2FjaGVzIHRoZSBwcmVmZXJyZWQgc291cmNlIGFkZHJlc3MgZm9yIGEgcGFydGljdWxhciBuZXh0IGhvcC4gSG93ZXZlciwgdGhlIGdlbmVyYXRpb24gSUQsIGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGAsIGdldHMgYnVtcGVkIGlmIGRldmljZSBhZGRyZXNzZXMgY2hhbmdlLlxuXG5UaGUgcHJldmlvdXMgY29kZSBoYWQgdGhpczogYGlmIChzYWRkciBcdTAwMjZcdTAwMjYgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciA9PSBzYWRkcilgLiBJdCBkaXJlY3RseSBjb21wYXJlZCB0aGUgc291cmNlIGFkZHJlc3Mgd2l0aG91dCBjaGVja2luZyBpZiB0aGUgY2FjaGVkIGBuaF9zYWRkcmAgd2FzIHN0aWxsIHZhbGlkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGBnZW5pZGAgY2hlY2sgdXNpbmcgYXRvbWljIHJlYWRzLiBTcGVjaWZpY2FsbHksIGl0IGFkZHM6XG4gKiBgZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7YCBhbmRcbiAqIGBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcmBcblxuVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHBvdGVudGlhbCBzdGFsZSBlbnRyaWVzIGluIHRoZSBjYWNoZSwgYW5kIGl0IHVzZXMgYFJFQURfT05DRWAgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGdlbmVyYXRpb24gSUQgbWF5IGJlIHVwZGF0ZWQgY29uY3VycmVudGx5LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTGV0J3Mgc2VlOlxuXG4xLiAgYGdlbmlkYCBpcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5IHRvIGBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDBgLiBHb29kLiBObyB3b3JyaWVzIHRoZXJlLlxuMi4gIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkYCBpcyBpbml0aWFsaXplZCB0byAwIG9uIGFsbG9jYXRpb24gdmlhIGBremFsbG9jX2ZsZXhgLCBvciBpdCdzIHVwZGF0ZWQgYXRvbWljYWxseSB3aXRoIFdSSVRFXFxfT05DRSBpbiBgZmliX2luZm9fdXBkYXRlX25oY19zYWRkcmAuXG4zLiAgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIGlzIGFsc28gaW5pdGlhbGl6ZWQgdG8gMCBvbiBhbGxvY2F0aW9uIGFuZCB1cGRhdGVkIHVzaW5nIFdSSVRFX09OQ0UuXG40LiAgTm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG41LiAgVGhlcmUgYXJlIG5vIG1lbW9yeSBidWZmZXJzLCBwYWNrZXQgYnVmZmVycywgb3Igc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgcmVzaXplZC5cbjYuICBEb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHNraXBzIGluaXRpYWxpemF0aW9uIG9mIGFueXRoaW5nPyBUaGUgYHJlcy1cdTAwM2VuaF9zZWxgIGFuZCBgcmVzLVx1MDAzZW5oY2AgYXJlIHNldCBpZiBgc2NvcmUgXHUwMDNjIG5oX3Njb3JlYC4gSWYgbm8gbmV4dCBob3AgbWF0Y2hlcywgdGhleSBtaWdodCByZW1haW4gaW4gdGhlaXIgcHJldmlvdXMgc3RhdGUgYmVmb3JlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgY2FsbGVkLiBOZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gT3ZlcmFsbCwgaXQgc2VlbXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MzkuMzYwODQxNDg0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzODk4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX2ZpYi5oPTU3ND1pbnQgZmliX2NoZWNrX25oKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaCAqbmgsIHUzMiB0YWJsZSwgdTggc2NvcGUsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc1LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjU3Njp2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjE1Mj1zdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTc5OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjIyNz12b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIzNzpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMzgtXFx0fVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMTk4PWlwX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjIyMDY6XFx0XFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTIyMDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyB8PSBJUFNLQl9NVUxUSVBBVEg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjQxLjAxNDc0NjcyMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTIxNjA5ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZmliX3NlbGVjdF9wYXRoYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgaW4gb24gYGZpYl9zZWxlY3RfcGF0aGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjI3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gY2hhc2luZyBkb3duIHBhdGggc2VsZWN0aW9uIGxvZ2ljIGluIHRoZSBGSUIuIEkndmUgZ290IGEgaHVuY2ggc29tZXRoaW5nJ3Mgb2ZmIHRoZXJlLCBzbyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuIE5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIHNlbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNTo0My4xMzYzNTkwMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjc6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyOTpcXHR7XFxuMjIzMDpcXHRcXHRpZiAoZmw0LVxcdTAwM2VmbG93aTRfb2lmKVxcbjIyMzE6XFx0XFx0XFx0Z290byBjaGVja19zYWRkcjtcXG4yMjMyOlxcdFxcbjIyMzM6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4yMjM0OlxcdFxcdGlmIChmaWJfaW5mb19udW1fcGF0aChyZXMtXFx1MDAzZWZpKSBcXHUwMDNlIDEpIHtcXG4yMjM1OlxcdFxcdFxcdGludCBoID0gZmliX211bHRpcGF0aF9oYXNoKG5ldCwgZmw0LCBza2IsIE5VTEwpO1xcbjIyMzY6XFx0XFxuMjIzNzpcXHRcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxuMjIzODpcXHRcXHR9XFxuMjIzOTpcXHRcXHRlbHNlXFxuMjI0MDpcXHQjZW5kaWZcXG4yMjQxOlxcdFxcdGlmICghcmVzLVxcdTAwM2VwcmVmaXhsZW4gXFx1MDAyNlxcdTAwMjZcXG4yMjQyOlxcdFxcdCAgICByZXMtXFx1MDAzZXRhYmxlLVxcdTAwM2V0Yl9udW1fZGVmYXVsdCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjZcXG4yMjQzOlxcdFxcdCAgICByZXMtXFx1MDAzZXR5cGUgPT0gUlROX1VOSUNBU1QpXFxuMjI0NDpcXHRcXHRcXHRmaWJfc2VsZWN0X2RlZmF1bHQoZmw0LCByZXMpO1xcbjIyNDU6XFx0XFxuMjI0NjpcXHRjaGVja19zYWRkcjpcXG4yMjQ3OlxcdFxcdGlmICghZmw0LVxcdTAwM2VzYWRkcikge1xcbjIyNDg6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmwzbWRldjtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0XFx0bDNtZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBmbDQtXFx1MDAzZWZsb3dpNF9sM21kZXYpO1xcbjIyNTE6XFx0XFxuMjI1MjpcXHRcXHRcXHRpZiAoIWwzbWRldiB8fFxcbjIyNTM6XFx0XFx0XFx0ICAgIGwzbWRldl9tYXN0ZXJfZGV2X3JjdShGSUJfUkVTX0RFVigqcmVzKSkgPT0gbDNtZGV2KVxcbjIyNTQ6XFx0XFx0XFx0XFx0Zmw0LVxcdTAwM2VzYWRkciA9IGZpYl9yZXN1bHRfcHJlZnNyYyhuZXQsIHJlcyk7XFxuMjI1NTpcXHRcXHRcXHRlbHNlXFxuMjI1NjpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihsM21kZXYsIDAsIFJUX1NDT1BFX0xJTkspO1xcbjIyNTc6XFx0XFx0fVxcbjIyNTg6XFx0fVxcbjIyNTk6XFx0XFxuMjI2MDpcXHRpbnQgX19uZXRfaW5pdCBmaWI0X3NlbWFudGljc19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4yMjYxOlxcdHtcXG4yMjYyOlxcdFxcdHVuc2lnbmVkIGludCBoYXNoX2JpdHMgPSA0O1xcbjIyNjM6XFx0XFxuMjI2NDpcXHRcXHRuZXQtXFx1MDAzZWlwdjQuZmliX2luZm9faGFzaCA9IGZpYl9pbmZvX2hhc2hfYWxsb2MoaGFzaF9iaXRzKTtcXG4yMjY1OlxcdFxcdGlmICghbmV0LVxcdTAwM2VpcHY0LmZpYl9pbmZvX2hhc2gpXFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6NDMuMTM2NDc3Mzc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMTA4MzY3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3RhbmRhcmQgSVB2NCBGSUIgcm91dGUgbG9va3VwIGxvZ2ljLiBUaGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGdlbmVyYXRpb24gSUQgY2hlY2sgYW5kIGBSRUFEX09OQ0VgIHdyYXBwZXJzIHdoZW4gY29tcGFyaW5nIHRoZSBjYWNoZWQgc291cmNlIGFkZHJlc3MgKGBuaF9zYWRkcmApIHdpdGggdGhlIGZsb3cncyBzb3VyY2UgYWRkcmVzcyAoYGZsNC1cdTAwM2VzYWRkcmApLiBJdCdzIGFsbCB2ZXJ5IGNvbnRhaW5lZC5cblxuVGhlcmUgYXJlIG5vIHJlZCBmbGFncyBoZXJlLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJJ3ZlIGRvdWJsZS1jaGVja2VkOlxuXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBBYnNvbHV0ZWx5IG5vIG5ldyBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgYGdlbmlkYCB2YXJpYWJsZSBpcyBhIHN0YWNrIHZhcmlhYmxlIGFuZCBpcyBpbml0aWFsaXplZCBhdCBpdHMgZGVjbGFyYXRpb24uIFRoZSBgbmhfc2FkZHJfZ2VuaWRgIGZpZWxkIGlzIHByZS1leGlzdGluZyBhbmQgbWFuYWdlZCBjb3JyZWN0bHkuXG4qICAgKipVc2VyIFNwYWNlIEludGVyYWN0aW9uczoqKiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgc28gbm8gd29ycmllcyBhYm91dCBwYWRkaW5nIGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdGhlcmUuXG4qICAgKipCdWZmZXIgSGFuZGxpbmc6KiogTm8gYnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2FsY3VsYXRpb25zIGFyZSBpbnZvbHZlZC5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gc2F5IHRoYXQgS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS01TQU4gaXMgcHJpbWFyaWx5IHVzZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGZyb20gc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIGFwcGx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgYWRlcXVhdGUgZm9yIHRlc3Rpbmcgcm91dGluZyBhbmQgY29uY3VycmVuY3kvZGF0YSByYWNlIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIE5vdCBhcHBsaWNhYmxlOyB0aGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBEZXBlbmRlbmNpZXM6KiogVGhlcmUncyBubyBicmFuY2hpbmcgb3IgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgaXNzdWVzLlxuNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3MsIGxlbmd0aCBjYWxjdWxhdGlvbnMsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY3JpdGVyaWEgZm9yICpub3QqIG5lZWRpbmcgS01TQU46XG5cbiogICAqKk91dC1vZi1Cb3VuZHMvVUFGL0RlYWRsb2NrczoqKiBUaGUgY29kZSBjaGFuZ2VzIGRvbid0IHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuKiAgICoqWmVyb2VkL0luaXRpYWxpemVkIFN0cnVjdHVyZXM6KiogQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSBpbml0aWFsaXplZC5cbiogICAqKk5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2s6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgYWJvdmUsIHRoaXMgaXMgYSBjbGVhci1jdXQgY2FzZS4gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjIsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6NTAuNDQ3MzE3MzMyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 07:54:18 +0000 UTC FinishedAt: 2026-09-15 08:15:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ROUTE_MULTIPATH", "IP_ADVANCED_ROUTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ROUTE_MULTIPATH", "IP_ADVANCED_ROUTER" ], "series_id": "8d50c3cf-7c70-4dbd-964d-41903facb8c9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_select_multipath" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGApLCBhbmQgYWRkcyBgUkVBRF9PTkNFKClgIGFubm90YXRpb25zIGZvciBjb25jdXJyZW50IGFjY2Vzc2VzLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZpYl9zZWxlY3RfbXVsdGlwYXRoIGluIElQdjQgRklCIHJvdXRlIHNlbGVjdGlvbiBsb2dpYywgY2hlY2tpbmcgdGhlIGRldmljZSBhZGRyZXNzIGdlbmVyYXRpb24gSUQgKGRldl9hZGRyX2dlbmlkKSBhbmQgdXNpbmcgUkVBRF9PTkNFIGZvciBjb25jdXJyZW5jeSBzYWZldHkgd2hlbiBtYXRjaGluZyBjYW5kaWRhdGUgbmV4dGhvcHMgd2l0aCBhIGZsb3cgc291cmNlIGFkZHJlc3MuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIG11bHRpcGF0aCByb3V0ZSBzZWxlY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCA3YTM2MmYyZTJjMmJkLi5lMmJmYzExYWVhMDljIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC0yMTg0LDYgJiM0MzsyMTg0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdGJvb2wgdXNlX25laWdoO1xuIFx0aW50IHNjb3JlID0gLTE7XG4gXHRfX2JlMzIgc2FkZHI7XG4mIzQzO1x0aW50IGdlbmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbiBcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbkBAIC0yMTkyLDYgJiM0MzsyMTkzLDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcbiBcdHVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfZmliX211bHRpcGF0aF91c2VfbmVpZ2gpO1xuIFx0c2FkZHIgPSBmbDQgPyBmbDQtXHUwMDNlc2FkZHIgOiAwO1xuJiM0MztcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuIFxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuQEAgLTIyMDQsNyAmIzQzOzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuJiM0MztcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4gXHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4gXHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmaWJfc2VsZWN0X211bHRpcGF0aCBpbiBJUHY0IEZJQiByb3V0ZSBzZWxlY3Rpb24gbG9naWMsIGNoZWNraW5nIHRoZSBkZXZpY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChkZXZfYWRkcl9nZW5pZCkgYW5kIHVzaW5nIFJFQURfT05DRSBmb3IgY29uY3VycmVuY3kgc2FmZXR5IHdoZW4gbWF0Y2hpbmcgY2FuZGlkYXRlIG5leHRob3BzIHdpdGggYSBmbG93IHNvdXJjZSBhZGRyZXNzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA4OjEyOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTIxODQsNiAmIzQzOzIxODQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCWJvb2wgdXNlX25laWdoOwogCWludCBzY29yZSA9IC0xOwogCV9fYmUzMiBzYWRkcjsKJiM0MzsJaW50IGdlbmlkOwogCiAJaWYgKHVubGlrZWx5KHJlcy0mZ3Q7ZmktJmd0O25oKSkgewogCQluZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpOwpAQCAtMjE5Miw2ICYjNDM7MjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAKIAl1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7CiAJc2FkZHIgPSBmbDQgPyBmbDQtJmd0O3NhZGRyIDogMDsKJiM0MzsJZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKCZhbXA7bmV0LSZndDtpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7CiAKIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKIAkJaW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7CkBAIC0yMjA0LDcgJiM0MzsyMjA2LDkgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCwKIAkJICAgICh1c2VfbmVpZ2ggJmFtcDsmYW1wOyAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHNhZGRyICZhbXA7JmFtcDsgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHIgPT0gc2FkZHIpCiYjNDM7CQlpZiAoc2FkZHIgJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpCiAJCQluaF9zY29yZSAmIzQzOz0gMjsKIAkJaWYgKGhhc2ggJmx0Oz0gbmhfdXBwZXJfYm91bmQpCiAJCQluaF9zY29yZSYjNDM7JiM0Mzs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZJQiBTZW1hbnRpY3MgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gRmlyc3QsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkaWZmIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgY2hhbmdlcy4gVGhlbiwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTg0LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmVzaWRlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzbyBJJiMzOTtsbCB3YW50IHRvIHJlYWQgdGhlIGNvZGUgYSBiaXQgYmVmb3JlIGFuZCBhZnRlciB0aGF0IGxpbmUuIFRpbWUgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3Qg4oCTIHRvIG5hdmlnYXRlIHRvIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlLiBHb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4yMTgxOlx0e1xuMjE4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cdTAwM2VmaTtcbjIxODM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVx1MDAzZWZpYl9uZXQ7XG4yMTg0Olx0XHRib29sIHVzZV9uZWlnaDtcbjIxODU6XHRcdGludCBzY29yZSA9IC0xO1xuMjE4NjpcdFx0X19iZTMyIHNhZGRyO1xuMjE4NzpcdFx0aW50IGdlbmlkO1xuMjE4ODpcdFxuMjE4OTpcdFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbjIxOTA6XHRcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbjIxOTE6XHRcdFx0cmV0dXJuO1xuMjE5MjpcdFx0fVxuMjE5MzpcdFxuMjE5NDpcdFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4yMTk1Olx0XHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4yMTk2Olx0XHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcbjIxOTc6XHRcbjIxOTg6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjE5OTpcdFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbjIyMDA6XHRcbjIyMDE6XHRcdFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXG4yMjAyOlx0XHRcdCAqIG1pbnVzIG9uZSB3aGVuIFwmIzM0O2lnbm9yZV9yb3V0ZXNfd2l0aF9saW5rZG93blwmIzM0OyBpcyBzZXQuXG4yMjAzOlx0XHRcdCAqL1xuMjIwNDpcdFx0XHRuaF91cHBlcl9ib3VuZCA9IGF0b21pY19yZWFkKFx1MDAyNm5leHRob3BfbmgtXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcbjIyMDU6XHRcdFx0aWYgKG5oX3VwcGVyX2JvdW5kID09IC0xIHx8XG4yMjA2Olx0XHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuMjIwNzpcdFx0XHRcdGNvbnRpbnVlO1xuMjIwODpcdFxuMjIwOTpcdFx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2XG4yMjEwOlx0XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2XG4yMjExOlx0XHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4yMjEyOlx0XHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4yMjEzOlx0XHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4yMjE0Olx0XHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuMjIxNTpcdFx0XHRpZiAoc2NvcmUgXHUwMDNjIG5oX3Njb3JlKSB7XG4yMjE2Olx0XHRcdFx0cmVzLVx1MDAzZW5oX3NlbCA9IG5oc2VsO1xuMjIxNzpcdFx0XHRcdHJlcy1cdTAwM2VuaGMgPSBcdTAwMjZuZXh0aG9wX25oLVx1MDAzZW5oX2NvbW1vbjtcbjIyMTg6XHRcdFx0XHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFx1MDAyNlx1MDAyNiBuaF9zY29yZSA9PSAxKSlcbjIyMTk6XHRcdFx0XHRcdHJldHVybjtcbjIyMjA6XHRcdFx0XHRzY29yZSA9IG5oX3Njb3JlO1xuMjIyMTpcdFx0XHR9XG4yMjIyOlx0XG4yMjIzOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4yMjI0Olx0fVxuMjIyNTpcdCNlbmRpZlxuMjIyNjpcdFxuMjIyNzpcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbjIyMjg6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMjI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGFyb3VuZCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgY29udHJvbGxpbmcgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBSaWdodCwgc28gbGluZSAyMjI1IGhhcyBhbiBgI2VuZGlmYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdyYXBwZWQgaW4gYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgYmFjay4gSSYjMzk7bGwgY2hlY2sgd2hhdCYjMzk7cyBnb2luZyBvbiBmcm9tIGxpbmVzIDIxNTAgdG8gMjE4NS4gSSYjMzk7bSBleHBlY3RpbmcgYW4gYCNpZmRlZmAgb3IgYSBzaW1pbGFyIGRpcmVjdGl2ZSB0byBiZSBndWFyZGluZyB0aGF0IGJsb2NrLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wgdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIG11bHRpLXBhdGggc2VsZWN0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB1bmRlciB3aGljaCBjb25kaXRpb25zIHRoaXMgbG9naWMgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0XHRcdGlmIChsaWtlbHkobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcbjIxNjI6XHRcdFx0XHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cdTAwM2VmaWJfbmhfZGV2LFxuMjE2MzpcdFx0XHRcdFx0XHRcdCAgIChfX2ZvcmNlIHUzMiluaC1cdTAwM2VmaWJfbmhfZ3c0KTtcbjIxNjQ6XHRcdFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4yMTY1Olx0XHRcdFx0IG5oLVx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYpXG4yMTY2Olx0XHRcdFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXHUwMDNlZmliX25oX2RldixcbjIxNjc6XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KTtcbjIxNjg6XHRcdFx0ZWxzZVxuMjE2OTpcdFx0XHRcdG4gPSBOVUxMO1xuMjE3MDpcdFx0XHRpZiAobilcbjIxNzE6XHRcdFx0XHRzdGF0ZSA9IFJFQURfT05DRShuLVx1MDAzZW51ZF9zdGF0ZSk7XG4yMTcyOlx0XG4yMTczOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3NDpcdFx0fVxuMjE3NTpcdFxuMjE3NjpcdFx0cmV0dXJuICEhKHN0YXRlIFx1MDAyNiBOVURfVkFMSUQpO1xuMjE3NzpcdH1cbjIxNzg6XHRcbjIxNzk6XHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuMjE4MDpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuMjE4MTpcdHtcbjIxODI6XHRcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXHUwMDNlZmk7XG4yMTgzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cdTAwM2VmaWJfbmV0O1xuMjE4NDpcdFx0Ym9vbCB1c2VfbmVpZ2g7XG4yMTg1Olx0XHRpbnQgc2NvcmUgPSAtMTtcbjIxODY6XHRcdF9fYmUzMiBzYWRkcjtcbjIxODc6XHRcdGludCBnZW5pZDtcbjIxODg6XHRcbjIxODk6XHRcdGlmICh1bmxpa2VseShyZXMtXHUwMDNlZmktXHUwMDNlbmgpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGEgc3BlY2lmaWMgYCNpZmRlZmAgZGlyZWN0aXZlIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgZmlsZSwgYW5kIEkga25vdyBpdCYjMzk7cyBsb2NhdGVkIHNvbWV3aGVyZSBiZWZvcmUgbGluZXMgMjE3OCBvciAyMTYwLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IGJ5IHNjYW5uaW5nIHRoZSBlYXJsaWVyIGxpbmVzIGluIHRoZSBmaWxlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBvciBjb2RlIGluY2x1c2lvbiBiYXNlZCBvbiBhIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBGaW5kaW5nIHRoZSBwcmVjaXNlIGxvY2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGZyb20gdGhlIHRvcCBhbmQgemVybyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEzMDpcdFx0XHRcdCAgICAhKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSlcbjIxMzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEzMjpcdFx0XHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYgIT0gZGV2IHx8XG4yMTMzOlx0XHRcdFx0ICAgICFfX2luX2Rldl9nZXRfcnRubChkZXYpKVxuMjEzNDpcdFx0XHRcdFx0Y29udGludWU7XG4yMTM1Olx0XHRcdFx0YWxpdmUmIzQzOyYjNDM7O1xuMjEzNjpcdFx0XHRcdG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNj0gfm5oX2ZsYWdzO1xuMjEzNzpcdFx0XHRcdGNhbGxfZmliX25oX25vdGlmaWVycyhuZXh0aG9wX25oLCBGSUJfRVZFTlRfTkhfQUREKTtcbjIxMzg6XHRcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpXG4yMTM5Olx0XG4yMTQwOlx0XHRcdGlmIChhbGl2ZSBcdTAwM2UgMCkge1xuMjE0MTpcdFx0XHRcdGZpLVx1MDAzZWZpYl9mbGFncyBcdTAwMjY9IH5uaF9mbGFncztcbjIxNDI6XHRcdFx0XHRyZXQmIzQzOyYjNDM7O1xuMjE0MzpcdFx0XHR9XG4yMTQ0Olx0XG4yMTQ1Olx0XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xuMjE0NjpcdFx0fVxuMjE0NzpcdFxuMjE0ODpcdFx0cmV0dXJuIHJldDtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbjIxNTI6XHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcbjIxNTM6XHR7XG4yMTU0Olx0XHRpbnQgc3RhdGUgPSBOVURfUkVBQ0hBQkxFO1xuMjE1NTpcdFxuMjE1NjpcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKSB7XG4yMTU3Olx0XHRcdHN0cnVjdCBuZWlnaGJvdXIgKm47XG4yMTU4Olx0XG4yMTU5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxNjA6XHRcbjIxNjE6XHRcdFx0aWYgKGxpa2VseShuaC1cdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxuMjE2MjpcdFx0XHRcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVx1MDAzZWZpYl9uaF9kZXYsXG4yMTYzOlx0XHRcdFx0XHRcdFx0ICAgKF9fZm9yY2UgdTMyKW5oLVx1MDAzZWZpYl9uaF9ndzQpO1xuMjE2NDpcdFx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAqKgoKT2theSwgc28gSSBzZWUgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBvbiBsaW5lIDIxNTEuIFRoYXQmIzM5O3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUsIG1lYW5pbmcgYSBibG9jayBvZiBjb2RlIGlzIG9ubHkgaW5jbHVkZWQgaWYgYSBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGUgb3B0aW9uIGluIHF1ZXN0aW9uIGlzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCBhY3R1YWxseSAqbWVhbnMqLiBXaGF0IGRvZXMgaXQgY29udHJvbD8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdvdWxkIGNob29zZSB0byBlbmFibGU/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgb2YgY29kZSBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgaXQmIzM5O3MgdGllZCB0by4gSSBuZWVkIHRoZSBLY29uZmlnIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kuIExldCYjMzk7cyBnbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGtub3cgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIHRoaXMgZGlyZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03OS1cbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxubmV0L2lwdjQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7SVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBJUHY0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgbGluZSA4MCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgc3BlY2lmaWMsIHByb2JhYmx5IGltcG9ydGFudCwgYXNwZWN0IG9mIElQdjQuIEJhc2VkIG9uIGl0cyBsaWtlbHkgcG9zaXRpb24gaW4gdGhlIGZpbGUsIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsIChsaWtlIHRoZSBjb3JlIHByb3RvY29sIGVuYWJsZS9kaXNhYmxlIG9wdGlvbnMpLCBidXQgbW9yZSBmb2N1c2VkIG9uIGEgcGFydGljdWxhciBmZWF0dXJlLCBzdWJzeXN0ZW0sIG9yIHR1bmFibGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hhdCAqZXhhY3RseSogaXMgYmVpbmcgY29uZmlndXJlZCB0aGVyZT8gSXMgaXQgcmVsYXRlZCB0byByb3V0aW5nLCBjb25uZWN0aW9uIHRyYWNraW5nLCBmaXJld2FsbGluZyAoaXB0YWJsZXMpLCBzb21lIGFkdmFuY2VkIHByb3RvY29sIGV4dGVuc2lvbiwgb3IgbWF5YmUgc29tZSBwZXJmb3JtYW5jZS1yZWxhdGVkIGtub2JzPyBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRpc2N1c3NlZC4gVGhlIGNvbnRleHQgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBpdC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XG4gIDk3Olx0XHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxuICA5ODpcdFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cbiAgOTk6XHRcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUm91dGUgTXVsdGlwYXRoaW5nKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCByZWxpZXMgb24gYENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdW5kZXJzdGFuZCAqd2h5KiBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBhIHByZXJlcXVpc2l0ZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGRvZXMgdGhhdCBvcHRpb24gYnJpbmcgdG8gdGhlIHRhYmxlIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gcm91dGUgbXVsdGlwYXRoaW5nPyBJcyBpdCB0aGUgcG9saWN5IHJvdXRpbmcsIHRoZSBtYXJraW5nIGNhcGFiaWxpdGllcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIG9mIHRob3NlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNC1cbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb21taXQsIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQsIGFuZCB3aHkuIFNpbmNlIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBgZ2l0IGxvZ2AgYXMgYSB0b29sIGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgYXZhaWxhYmxlIGluZm9ybWF0aW9uIGxpa2UgY29tbWl0IG1lc3NhZ2VzIG9yIG90aGVyIHJlc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNvbnRleHQuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gaXMgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSBjYW4gc2VlIHRoZXJlIGlzIGEgY2hhbmdlIHRvIGhvdyB3ZSBzZWxlY3QgdGhlIG5leHQgaG9wIGZvciBhIHJvdXRlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYGdlbmlkYCwgd2hpY2ggaXMgcmVsYXRlZCB0byB0aGUgc291cmNlIElQIGFkZHJlc3MgKGBzYWRkcmApIGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCByb3V0aW5nLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnZW5pZGAgaXMgYXNzaWduZWQgYW5kIGxhdGVyIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjayBhbG9uZyB3aXRoIGBuaF9zYWRkcmAuIFRoZSBjb2RlIG5vdyBjaGVja3Mgbm90IG9ubHkgaWYgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCBtYXRjaGVzIHRoZSBzb3VyY2UgYWRkcmVzcyAoYHNhZGRyYCksIGJ1dCBhbHNvIGlmIHRoZSBgbmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgYSBsb2NhbGx5IHN0b3JlZCBgZ2VuaWRgLiBUaGlzIGltcGxpZXMgdGhhdCBgZ2VuaWRgIG1pZ2h0IGJlIHVzZWQgYXMgYSB2ZXJzaW9uIGlkZW50aWZpZXIsIG9yIHNvbWUgaW5kaWNhdG9yIHRoYXQgY2hlY2tzIHdoZXRoZXIgYHNhZGRyYCBpcyBzdGFsZS4gVGhlIGNvZGUgYWxzbyB1c2VzIHRoZSBgUkVBRF9PTkNFYCBtYWNybywgaW5kaWNhdGluZyB0aGF0IHRoZXNlIHZhcmlhYmxlcyBtaWdodCBiZSBhY2Nlc3NlZCBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgYGdlbmlkYCwgYW5kIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIHRvIGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhpcyBjaGFuZ2UgY29tcGxldGVseS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBuaF9zYWRkcl9nZW5pZGAgYW5kIHRoZSBvdGhlciBmaWVsZHMgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGBnZW5pZGAgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZCwgYW5kIHdoYXQgcHJvYmxlbSBpdCYjMzk7cyB0cnlpbmcgdG8gc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3NhZGRyX2dlbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTEwNz1zdHJ1Y3QgZmliX25oIHtcbi0tXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXHRfX2JlMzJcdFx0XHRuaF9zYWRkcjtcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcdGludFx0XHRcdG5oX3NhZGRyX2dlbmlkO1xuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE2LSNkZWZpbmUgZmliX25oX2ZhbWlseVx0XHRuaF9jb21tb24ubmhjX2ZhbWlseVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNy1cdFdSSVRFX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI4Olx0V1JJVEVfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQzLVx0XHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTM0NDpcdFx0aWYgKFJFQURfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMDktXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlx0XHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRklCIFByZWZpeGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGZpYl9yZXN1bHRfcHJlZnNyY2AuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHJvdWdobHkgbGluZSAxMzMzIOKAkyB0aGF0IHNob3VsZCBwdXQgbWUgaW4gdGhlIHZpY2luaXR5IG9mIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgbGlrZWx5IHVzZWQgYW5kIGhvcGVmdWxseSwgZGVmaW5lZC4gSG9wZWZ1bGx5IHRoZSBjb250ZXh0IHRoZXJlIHdpbGwgaWxsdW1pbmF0ZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XG4xMzIxOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcbjEzMjI6XHRcdFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVx1MDAzZW5oY19kZXYsIDAsIHNjb3BlKTtcbjEzMjM6XHRcbjEzMjQ6XHRcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcbjEzMjU6XHRcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cdTAwM2VmaWJfbmhfZGV2LCBuaC1cdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XG4xMzI2Olx0XG4xMzI3Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XG4xMzI4Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIHNhZGRyO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRfX2JlMzIgZmliX3Jlc3VsdF9wcmVmc3JjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbjEzMzQ6XHR7XG4xMzM1Olx0XHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVx1MDAzZW5oYztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmIChyZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmMpXG4xMzM4Olx0XHRcdHJldHVybiByZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmM7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xuMTM0MTpcdFx0XHRzdHJ1Y3QgZmliX25oICpuaDtcbjEzNDI6XHRcbjEzNDM6XHRcdFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xuMTM0NDpcdFx0XHRpZiAoUkVBRF9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxuMTM0NTpcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuMTM0NjpcdFx0XHRcdHJldHVybiBSRUFEX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIpO1xuMTM0NzpcdFx0fVxuMTM0ODpcdFxuMTM0OTpcdFx0cmV0dXJuIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIobmV0LCBuaGMsIHJlcy1cdTAwM2VmaS1cdTAwM2VmaWJfc2NvcGUpO1xuMTM1MDpcdH1cbjEzNTE6XHRcbjEzNTI6XHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXG4xMzUzOlx0e1xuMTM1NDpcdFx0aWYgKGNmZy1cdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVx1MDAzZWZjX2RzdCB8fFxuMTM1NTpcdFx0ICAgIGZpYl9wcmVmc3JjICE9IGNmZy1cdTAwM2VmY19kc3QpIHtcbjEzNTY6XHRcdFx0dTMyIHRiX2lkID0gY2ZnLVx1MDAzZWZjX3RhYmxlO1xuMTM1NzpcdFx0XHRpbnQgcmM7XG4xMzU4Olx0XG4xMzU5Olx0XHRcdGlmICh0Yl9pZCA9PSBSVF9UQUJMRV9NQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VuZXJhdGlvbiBJRCBDaGVjayBpbiBgZmliX3NlbWFudGljcy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGZpYl9zZW1hbnRpY3MuY2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBnZW5lcmF0aW9uIElEIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSwgYW5kIHRoaXMgZml4IGRpcmVjdGx5IGFkZHJlc3NlcyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gRXNzZW50aWFsbHksIGVhY2ggbmV4dCBob3AgKGBuaGApIGNhY2hlcyBpdHMgc291cmNlIGFkZHJlc3MgKGBuaF9zYWRkcmApIGFuZCBpdHMgYXNzb2NpYXRlZCBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKS4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgaXMgdXBkYXRlZCwgd2hpY2ggaGFwcGVucywgc2F5LCB3aGVuIG5ldHdvcmsgZGV2aWNlIGFkZHJlc3NlcyBhcmUgbW9kaWZpZWQuIFdpdGhvdXQgdGhlIHVwZGF0ZWQgY2hlY2ssIGEgc3RhbGUgYG5oLSZndDtuaF9zYWRkcmAgY291bGQgYmUgdXNlZCB3aXRoIGEgbmV3ZXIgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4KClRoZSBmaXggaXMgY2xldmVyLiBJdCBub3cgY2hlY2tzIGlmIGBuaC0mZ3Q7bmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgdGhlIGN1cnJlbnQgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAgKmJlZm9yZSogY29tcGFyaW5nIHRoZSBzb3VyY2UgYWRkcmVzc2VzLiBJZiB0aGV5IG1hdGNoLCBpdCAqdGhlbiogZG9lcyB0aGUgc291cmNlIGFkZHJlc3MgY29tcGFyaXNvbi4gQW5kIG9mIGNvdXJzZSwgdGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBoZXJlIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBkYXRhIHJlYWRzIGFyZSBhdG9taWMgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgb24gdGhlc2UgcG90ZW50aWFsbHkgY29uY3VycmVudGx5LXVwZGF0ZWQgc2hhcmVkIHZhcmlhYmxlcyEgSXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciBkb2VzbiYjMzk7dCBvcHRpbWl6ZSBhd2F5IGEgY3J1Y2lhbCByZWFkIG9yIHJlb3JkZXIgdGhlIHJlYWRzIGluIGEgd2F5IHRoYXQgYnJlYWtzIHRoZSBsb2dpYy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZSBwYXRoLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBkbyBpcyBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXMgdGhpcyBhIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGhpdCBmcmVxdWVudGx5LCBvciBpcyBpdCBtb3JlIG9mIGFuIGVkZ2UgY2FzZT8gV2hlcmUgaXMgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBhY3R1YWxseSBjYWxsZWQgZnJvbT8gVGltZSB0byBnZXQgdGhlIGdyZXBwZXIgb3V0IGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfZmliLmg9NTc0PWludCBmaWJfY2hlY2tfbmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oICpuaCwgdTMyIHRhYmxlLCB1OCBzY29wZSxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3NS1cdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcF9maWIuaDo1NzY6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNTI9c3RhdGljIGJvb2wgZmliX2dvb2RfbmgoY29uc3Qgc3RydWN0IGZpYl9uaCAqbmgpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNzgtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE3OTp2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIyMjc9dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM2LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIyMzc6XHRcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM4LVx0fVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjE5OD1pcF9ta3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjA1LVxubmV0L2lwdjQvcm91dGUuYzoyMjA2Olx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIE5VTEwpO1xubmV0L2lwdjQvcm91dGUuYy0yMjA3LVx0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgfD0gSVBTS0JfTVVMVElQQVRIO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY0IHJvdXRpbmcgY29udGV4dC4gIFRoZSBjb2RlIHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBmaXJzdCwgd2l0aGluIGBmaWJfc2VsZWN0X3BhdGhgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBpdCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBwYXRoIHNlbGVjdGlvbiBwcm9jZXNzLiBTZWNvbmQsIGl0JiMzOTtzIGFsc28gY2FsbGVkIGZyb20gYGlwX21rcm91dGVfaW5wdXRgIGluIGBuZXQvaXB2NC9yb3V0ZS5jYC4gSG1tLCBgaXBfbWtyb3V0ZV9pbnB1dGAgaXMgdXNlZCBmb3IgaW5wdXQgcm91dGUgY3JlYXRpb24sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpHaXZlbiB0aGVzZSB0d28gY2FsbCBzaXRlcywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY2FsbGVycyBvZiBgZmliX3NlbGVjdF9wYXRoYCB0byBnZXQgdGhlIGNvbnRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGEgYnJvYWRlciB2aWV3IGFuZCBoZWxwIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBiZWluZyB1c2VkIGZvciBgZmliX3NlbGVjdF9wYXRoYCB3aGljaCBpbiB0dXJuIHdpbGwgc2hvdyB0aGUgdXNhZ2Ugb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGF0aCBmb3IgaW52ZXN0aWdhdGlvbiByaWdodCBub3csIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBicm9hZGVyIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF9maWIuaD01NzY9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XG5pbmNsdWRlL25ldC9pcF9maWIuaDo1Nzg6dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc5LVx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjM1MT1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDQ1LVx0aWYgKGZpYl9pbmZvX251bV9wYXRoKHJlcy5maSkgXHUwMDNlIDEpXG5uZXQvY29yZS9maWx0ZXIuYzo2NDQ2Olx0XHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcdTAwMjZyZXMsIFx1MDAyNmZsNCwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYy02NDQ3LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMjYtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIyNzp2b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIyOC1cdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYz03NzM9c3RhdGljIHZvaWQgX19pcF9kb19yZWRpcmVjdChzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtODI3LVxubmV0L2lwdjQvcm91dGUuYzo4Mjg6XHRcdFx0XHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcdTAwMjZyZXMsIGZsNCwgc2tiKTtcbm5ldC9pcHY0L3JvdXRlLmMtODI5LVx0XHRcdFx0bmhjID0gRklCX1JFU19OSEMocmVzKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEwNDg9c3RhdGljIHZvaWQgX19pcF9ydF91cGRhdGVfcG10dShzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IGZsb3dpNCAqZmw0LCB1MzIgbXR1KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTA3Ny1cbm5ldC9pcHY0L3JvdXRlLmM6MTA3ODpcdFx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgXHUwMDI2cmVzLCBmbDQsIE5VTEwpO1xubmV0L2lwdjQvcm91dGUuYy0xMDc5LSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNzQxPXN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yODk4LVxubmV0L2lwdjQvcm91dGUuYzoyODk5Olx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgcmVzLCBmbDQsIHNrYik7XG5uZXQvaXB2NC9yb3V0ZS5jLTI5MDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgY29yZSBJUHY0IHJvdXRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICptdWx0aXBhdGgqIHJvdXRlIHNlbGVjdGlvbi4gSSBrbm93IHRoYXQgYGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3VgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAgYm90aCBjYWxsIGludG8gdGhpcyBhcmVhLCBzbyBpdCYjMzk7cyBhIGhvdCBwYXRoLCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwYXRoIGVuYWJsZWQsIHdoaWNoIFN5emthbGxlciBsb3ZlcyB0byBleGVyY2lzZSB0aHJvdWdoIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMgYW5kIHNvY2tldCBjcmVhdGlvbi4gR29vZCwgdGhhdCYjMzk7cyBhbHJlYWR5IGEgc3Ryb25nIGluZGljYXRvci4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGhpdHRpbmcgdXAgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gRmlyc3QsIFNlY3Rpb24gMTogJiMzNDtSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwmIzM0OyByaWdodD8gQW5kIHRoZSBwYXRjaCBpcyBvcGVyYXRpbmcgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgc28gdGhhdCYjMzk7cyBnb29kLiBUaGV5IHNheSBkb24mIzM5O3QgdHJ1c3QgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyAoTkZDSSkgbGFiZWwgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIGJsaW5kbHksIGFuZCB0aGF0JiMzOTtzIHNvbGlkIGFkdmljZS4gQW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgcGF0Y2ggZmFsbHMgcmlnaHQgaW50byB0aGF0LgoKTm93LCBTZWN0aW9uIDIgaXMgdGhlICYjMzQ7d2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2VjdGlvbi4gTm9wZSwgbm90aGluZyBoZXJlIGFwcGxpZXMuIFRoZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGluIGtlcm5lbCwgZXhlY3V0YWJsZSBjb2RlLiBObyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBoZXJlLiBObyB1bnJlYWNoYWJsZSBwYXRocy4KCkZpbmFsbHksIFNlY3Rpb24gMy4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBUaGlzIHBhdGNoICpkb2VzKiB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUhIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIGNvcmUgbmV0d29ya2luZyA9IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEl0JiMzOTtzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAhIE1vZGlmeWluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgaXMuIEFuZCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCAqcm91dGUgc2VsZWN0aW9uIGxvZ2ljKiB3aGljaCBpcyBjb3JlIQoKU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgaG93IGNhbmRpZGF0ZSBuZXh0aG9wcyBhcmUgc2NvcmVkIGluIG11bHRpcGF0aCByb3V0aW5nLiBJdCYjMzk7cyBjb21wYXJpbmcgYG5oX3NhZGRyX2dlbmlkYCB3aXRoIGBuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWRgIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGlzIGlzICpkaXJlY3RseSogYWZmZWN0aW5nIHJvdXRlIHNlbGVjdGlvbi4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYWN0dWFsbHkgY29tcGlsZSBhbmQgcmVhY2ggYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSBjYW4gc2VlIGl0IGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgaWYgdGhlIGZpbGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgaXRzZWxmIGhhcyBvdGhlciBndWFyZHMsIG9yIGlmIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3MgdG8gcmVwcm9kdWNlIGFuZCB0cmlnZ2VyIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfc2VtYW50aWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4tLVxubmV0L2lwdjQvZmliX2xvb2t1cC5oPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBmaWJfYWxpYXNfYWNjZXNzZWQoc3RydWN0IGZpYl9hbGlhcyAqZmEpXG4tLVxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM2LVxubmV0L2lwdjQvZmliX2xvb2t1cC5oOjM3Oi8qIEV4cG9ydGVkIGJ5IGZpYl9zZW1hbnRpY3MuYyAqL1xubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM4LXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBmaWJfc2VtYW50aWNzLm8gYW5kIE11bHRpcGF0aCBSb3V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGZpYl9zZW1hbnRpY3Mub2AgaXMgaW50ZWdyYXRlZC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBidWlsdCBpbnRvIGBvYmoteWAgd2hlbiBJUHY0IGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZSBsaW5lIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBsaW5lIDIxNTE6IGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgLgoKSSYjMzk7bGwgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFNvLCBtdWx0aXBhdGggcm91dGluZyBpcyBlbmFibGVkIHdoZW4gYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgc2V0LgoKTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBJcyBpdCBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgYWdhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNDpcdFxuICAxNTpcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBJZiB5b3UgaW50ZW5kIHRvIHJ1biB5b3VyIExpbnV4IGJveCBtb3N0bHkgYXMgYSByb3V0ZXIsIGkuZS4gYXMgYVxuICAxOTpcdFx0ICBjb21wdXRlciB0aGF0IGZvcndhcmRzIGFuZCByZWRpc3RyaWJ1dGVzIG5ldHdvcmsgcGFja2V0cywgc2F5IFk7IHlvdVxuICAyMDpcdFx0ICB3aWxsIHRoZW4gYmUgcHJlc2VudGVkIHdpdGggc2V2ZXJhbCBvcHRpb25zIHRoYXQgYWxsb3cgbW9yZSBwcmVjaXNlXG4gIDIxOlx0XHQgIGNvbnRyb2wgYWJvdXQgdGhlIHJvdXRpbmcgcHJvY2Vzcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcbiAgMjQ6XHRcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDI1Olx0XHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxuICAyNjpcdFxuICAyNzpcdFx0ICBOb3RlIHRoYXQgeW91ciBib3ggY2FuIG9ubHkgYWN0IGFzIGEgcm91dGVyIGlmIHlvdSBlbmFibGUgSVBcbiAgMjg6XHRcdCAgZm9yd2FyZGluZyBpbiB5b3VyIGtlcm5lbDsgeW91IGNhbiBkbyB0aGF0IGJ5IHNheWluZyBZIHRvIFwmIzM0Oy9wcm9jXG4gIDI5Olx0XHQgIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgYW5kIFwmIzM0O1N5c2N0bCBzdXBwb3J0XCYjMzQ7IGJlbG93IGFuZCBleGVjdXRpbmcgdGhlXG4gIDMwOlx0XHQgIGxpbmVcbiAgMzE6XHRcbiAgMzI6XHRcdCAgZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZFxuICAzMzpcdFxuICAzNDpcdFx0ICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2hcbiAgMzc6XHRcdCAgYXV0b21hdGljYWxseSByZWplY3RzIGluY29taW5nIHBhY2tldHMgaWYgdGhlIHJvdXRpbmcgdGFibGUgZW50cnlcbiAgMzg6XHRcdCAgZm9yIHRoZWlyIHNvdXJjZSBhZGRyZXNzIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGV5JiMzOTtyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE11bHRpcGF0aCBSb3V0aW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplciBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZm9jdXMgb24uCgpGaXJzdCwgSSBjb25maXJtZWQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBJUF9BRFZBTkNFRF9ST1VURVJgIGFuZCBgSVBfUk9VVEVfTVVMVElQQVRIYC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gdGFyZ2V0IHRob3NlIHNldHRpbmdzLgoKTmV4dCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBleHRyYWN0ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgdG8gcHJldmVudCB0aGUgZnV6emVyIGZyb20gZ2V0dGluZyBkaWx1dGVkIGJ5IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cywgYXZvaWRpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBhIG5vbi1zdGF0aWMgQyBmdW5jdGlvbiBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG15IHB1cnBvc2VzLiBJbXBvcnRhbnRseSwgaXQmIzM5O3MgKm5vdCogY2FsbGVkIGluIGV2ZXJ5IHNpbmdsZSByb3V0ZSBsb29rdXAuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIG11bHRpcGF0aCByb3V0aW5nLCBhbmQgdGhpcyBpcyBjcnVjaWFsLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIG11bHRpcGxlIG5leHQgaG9wcyBhcmUgY29uZmlndXJlZCBhbmQgYWN0aXZlLCB3aGljaCBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQuIEkgY2FuIHNlZSB0aGlzIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgKGNhbGxlZCBieSBgZmliX3NlbGVjdF9wYXRoYCB3aGljaCBvbmx5IHVzZXMgdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24gaWYgYSBtdWx0aXBhdGggcm91dGUgaXMgcHJlc2VudCkuCgpJIGNvbnNpZGVyZWQgYGZpYl9zZWxlY3RfcGF0aGAsIGJ1dCB0aGF0JiMzOTtzIGZhciB0b28gZ2VuZXJhbC4gSXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkqIElQdjQgcm91dGUgbG9va3VwLCByZWdhcmRsZXNzIG9mIG11bHRpcGF0aCBjb25maWd1cmF0aW9uLiBUaGF0IHdvdWxkIG1ha2UgaXQgYSBiYWQgY2hvaWNlLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzLgoKVGhlbiwgSSBkb3VibGUtY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgd2VyZSAqYW55KiBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIG9yIGFmZmVjdGVkLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgbmhfc2FkZHJfZ2VuaWRgLiBIb3dldmVyLCBiYXNlZCBvbiB0aGUgYGRpZmZgLCB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllZCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLCBzbyBteSBmb2N1cyBpcyBuYXJyb3dlZCwgYW5kIG15IGZ1enppbmcgZWZmb3J0cyB3aWxsIGJlIGRpcmVjdGVkIHRvd2FyZHMgZXhhY3RseSB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0IG5lZWRzIHRoZSBtb3N0IGF0dGVudGlvbi4KCkkgY29uZmlybWVkIHRoYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbmRlZWQgYSBnbG9iYWwgbm9uLWlubGluZSBmdW5jdGlvbiwgYSB2YWxpZCBzeW1ib2wgaW4gdGhlIGB2bWxpbnV4YCBrZXJuZWwgaW1hZ2UuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSByZS1yZXZpZXdlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBmb3JtYXQsIG1ha2luZyBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgpTbywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJvdXRlIHNlbGVjdGlvbiBsb2dpYyB3aXRoaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gU3BlY2lmaWNhbGx5LCBpdCB2YWxpZGF0ZXMgdGhlIGNhbmRpZGF0ZSBuZXh0aG9wIGFkZHJlc3NlcyBhZ2FpbnN0IGBkZXZfYWRkcl9nZW5pZGAsIHVzaW5nIGBSRUFEX09OQ0VgIGZvciBjb25jdXJyZW50LXNhZmUgYWNjZXNzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgZXNwZWNpYWxseSBmb3IgbXVsdGlwYXRoIGVudmlyb25tZW50cy4gSSBhbSBjb25maWRlbnQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyAoYElQX1JPVVRFX01VTFRJUEFUSGAsIGBJUF9BRFZBTkNFRF9ST1VURVJgKSBhbmQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBhcmUgdGhlIHdheSB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmaWJfc2VsZWN0X211bHRpcGF0aCBpbiBJUHY0IEZJQiByb3V0ZSBzZWxlY3Rpb24gbG9naWMsIGNoZWNraW5nIHRoZSBkZXZpY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChkZXZfYWRkcl9nZW5pZCkgYW5kIHVzaW5nIFJFQURfT05DRSBmb3IgY29uY3VycmVuY3kgc2FmZXR5IHdoZW4gbWF0Y2hpbmcgY2FuZGlkYXRlIG5leHRob3BzIHdpdGggYSBmbG93IHNvdXJjZSBhZGRyZXNzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGApLCBhbmQgYWRkcyBgUkVBRF9PTkNFKClgIGFubm90YXRpb25zIGZvciBjb25jdXJyZW50IGFjY2Vzc2VzLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggN2EzNjJmMmUyYzJiZC4uZTJiZmMxMWFlYTA5YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjE4NCw2ICYjNDM7MjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAJYm9vbCB1c2VfbmVpZ2g7CiAJaW50IHNjb3JlID0gLTE7CiAJX19iZTMyIHNhZGRyOwomIzQzOwlpbnQgZ2VuaWQ7CiAKIAlpZiAodW5saWtlbHkocmVzLSZndDtmaS0mZ3Q7bmgpKSB7CiAJCW5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7CkBAIC0yMTkyLDYgJiM0MzsyMTkzLDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCwKIAogCXVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTsKIAlzYWRkciA9IGZsNCA/IGZsNC0mZ3Q7c2FkZHIgOiAwOwomIzQzOwlnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDsKIAogCWNoYW5nZV9uZXh0aG9wcyhmaSkgewogCQlpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDsKQEAgLTIyMDQsNyAmIzQzOzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCQkgICAgKHVzZV9uZWlnaCAmYW1wOyZhbXA7ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcikKJiM0MzsJCWlmIChzYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcikKIAkJCW5oX3Njb3JlICYjNDM7PSAyOwogCQlpZiAoaGFzaCAmbHQ7PSBuaF91cHBlcl9ib3VuZCkKIAkJCW5oX3Njb3JlJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGFza2VkIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZm9yIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgZGl2ZSByaWdodCBpbiBhbmQgbG9vayBhdCB0aGUgY29kZS4gSSBjYW4gc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhcmlhYmxlLCBgZ2VuaWRgLCBhbmQgcmVmZXJlbmNlcyBgbmhfc2FkZHJfZ2VuaWRgIHdoaWNoIGlzIG5ldyB0byBtZS4KCk15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gbG9naWMsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIHNvdXJjZSBhZGRyZXNzIGFmZmluaXR5LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFpbWluZyB0byBtYWtlIG11bHRpcGF0aCBzZWxlY3Rpb24gbW9yZSByb2J1c3Qgd2hlbiBzb3VyY2UgYWRkcmVzc2VzIGFyZSBpbnZvbHZlZC4gVGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcmAsIGFuZCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGEgZ2VuZXJhdGlvbiBJRCBjaGVjayB0byB0aGUgY29tcGFyaXNvbiwgbGlrZWx5IHRvIGd1YXJkIGFnYWluc3Qgc3RhbGUgcm91dGUgZW50cmllcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIG5ldHdvcmsgY29kZSDigJMgdXNpbmcgZ2VuZXJhdGlvbiBJRHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIG5ldHdvcmsgZGV2aWNlcyBjaGFuZ2UgdGhlaXIgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBzeXN0ZW0gbWlnaHQgdGhpbmsgb2xkIGFkZHJlc3NlcyBhcmUgc3RpbGwgdmFsaWQuIEkgc2VlIHRoYXQgYGdlbmlkYCBpcyBvbmx5IHNldCBpZiBgc2FkZHJgIGlzIG5vdCAwLCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBsb2dpYyBpcyBvbmx5IGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBtYXR0ZXJzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBgbmhfc2FkZHJfZ2VuaWRgIGlzIGFuZCBob3cgaXTigJlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGluaXRpYWxpemVkLCBtb2RpZmllZCwgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUbyBkbyB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBgbmhfc2FkZHJfZ2VuaWRgIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHdpbGwgaGVscCBtZSBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBJUHY0IEZJQiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudCBjYWxsIG9uIHdoZXRoZXIgdGhlIHBhdGNoIGlzIGEgZ29vZCBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3NhZGRyX2dlbmlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTEwNz1zdHJ1Y3QgZmliX25oIHtcbi0tXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXHRfX2JlMzJcdFx0XHRuaF9zYWRkcjtcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcdGludFx0XHRcdG5oX3NhZGRyX2dlbmlkO1xuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE2LSNkZWZpbmUgZmliX25oX2ZhbWlseVx0XHRuaF9jb21tb24ubmhjX2ZhbWlseVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNy1cdFdSSVRFX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI4Olx0V1JJVEVfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQzLVx0XHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTM0NDpcdFx0aWYgKFJFQURfT05DRShuaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMDktXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlx0XHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpczoKCioqRGVsdmluZyBpbnRvIGBmaWJfc2VtYW50aWNzLmNgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBmaWJfc2VtYW50aWNzLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBsaW5lcyAxMzE1LTEzNTAgYW5kIHRoZW4gYWdhaW4gb24gMjE4MC0yMjIwLiBUaW1lIHRvIGdldCB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCBmaXJlZCB1cC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBrZXkgYXJlYXMgcmVsYXRlZCB0by4uLiB3ZWxsLCBJIGhhdmUgYSBodW5jaC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdGhlc2Ugc2VjdGlvbnMgd2lsbCBiZSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBvciBvcHRpbWl6YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2Ugc3BlY2lmaWMgbGluZXMgYXJlIGxvY2F0ZWQsIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGNob2ljZXMsIGVkZ2UgY2FzZSBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGltcGxlbWVudGVkIGluIHRoaXMgY29kZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XHRcdGVyciA9IGZpYl9jaGVja19uaF9ub25ndyhuZXQsIG5oLCBleHRhY2spO1xuMTMxMTpcdFxuMTMxMjpcdFx0cmV0dXJuIGVycjtcbjEzMTM6XHR9XG4xMzE0Olx0XG4xMzE1Olx0X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuMTMxNjpcdFx0XHRcdFx0IHVuc2lnbmVkIGNoYXIgc2NvcGUpXG4xMzE3Olx0e1xuMTMxODpcdFx0c3RydWN0IGZpYl9uaCAqbmg7XG4xMzE5Olx0XHRfX2JlMzIgc2FkZHI7XG4xMzIwOlx0XG4xMzIxOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcbjEzMjI6XHRcdFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVx1MDAzZW5oY19kZXYsIDAsIHNjb3BlKTtcbjEzMjM6XHRcbjEzMjQ6XHRcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcbjEzMjU6XHRcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cdTAwM2VmaWJfbmhfZGV2LCBuaC1cdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XG4xMzI2Olx0XG4xMzI3Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XG4xMzI4Olx0XHRXUklURV9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIHNhZGRyO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRfX2JlMzIgZmliX3Jlc3VsdF9wcmVmc3JjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbjEzMzQ6XHR7XG4xMzM1Olx0XHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVx1MDAzZW5oYztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmIChyZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmMpXG4xMzM4Olx0XHRcdHJldHVybiByZXMtXHUwMDNlZmktXHUwMDNlZmliX3ByZWZzcmM7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAobmhjLVx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xuMTM0MTpcdFx0XHRzdHJ1Y3QgZmliX25oICpuaDtcbjEzNDI6XHRcbjEzNDM6XHRcdFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xuMTM0NDpcdFx0XHRpZiAoUkVBRF9PTkNFKG5oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxuMTM0NTpcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxuMTM0NjpcdFx0XHRcdHJldHVybiBSRUFEX09OQ0UobmgtXHUwMDNlbmhfc2FkZHIpO1xuMTM0NzpcdFx0fVxuMTM0ODpcdFxuMTM0OTpcdFx0cmV0dXJuIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIobmV0LCBuaGMsIHJlcy1cdTAwM2VmaS1cdTAwM2VmaWJfc2NvcGUpO1xuMTM1MDpcdH1cbjEzNTE6XHRcbjEzNTI6XHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXG4xMzUzOlx0e1xuMTM1NDpcdFx0aWYgKGNmZy1cdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVx1MDAzZWZjX2RzdCB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCwgZm9jdXNpbmcgb24gd2hhdCBJJiMzOTtkIGJlIHRoaW5raW5nIGlmIEkgd2VyZSBkaWdnaW5nIGludG8gdGhlbS4KCioqQW5hbHl6aW5nIHRoZSBJUHY0IEZJQiBTZW1hbnRpY3MgKExpbmVzIDIxODAtMjIzMCkqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlIOKAkyBsaW5lcyAyMTgwIHRocm91Z2ggMjIzMCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbSBpbW1lZGlhdGVseSBtZW50YWxseSBwYXJzaW5nIHRoaXMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSAoRklCKSB3b3JrcyBpbiB0aGUga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgYSBwcmV0dHkgc3BlY2lmaWMgc2NlbmFyaW8sIGxpa2VseSByZWxhdGVkIHRvIHJvdXRlIGxvb2t1cCBvciByb3V0ZSBtYW5pcHVsYXRpb24sIHByb2JhYmx5IHdpdGggYSBmb2N1cyBvbiBJUHY0LCBnaXZlbiB0aGUgZmlsZSBuYW1lIGFuZCB0aGUgY29udGV4dC4KCkkmIzM5O20gbWVudGFsbHkgY3JlYXRpbmcgYSBoeXBvdGhlc2lzOiBJcyB0aGlzIGFib3V0IHJvdXRlIGNhY2hpbmcsIGhhbmRsaW5nIG9mIG11bHRpcGF0aCByb3V0ZXMsIG9yIHBlcmhhcHMgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgdHlwZSBvZiByb3V0ZSBhdHRyaWJ1dGU/IFBlcmhhcHMgaXTigJlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByb3V0ZSBwcmlvcml0aWVzIG9yIHByZWZlcmVuY2UuIEJhc2VkIG9uIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgY29ubmVjdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgdGhhdCAqZGVmaW5lKiB3aGF0IGEgdmFsaWQgcm91dGUgaXMgYW5kIGhvdyBpdOKAmXMgY2hvc2VuLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLiBUaGUgZ29hbCBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIGNvbmZpcm0gdGhlIGludGVudCBvZiB0aGUgY29kZSwgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgdG8gc2VlIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSByb290IGNhdXNlIGZvciB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBmbG93LiBJIHdpbGwga2VlcCBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIGltcG9ydGFudCB0byByb3V0ZSBsb29rdXBzIGFuZCBtb2RpZmljYXRpb25zLiBJ4oCZbSB0aGlua2luZyBJ4oCZbGwgbG9vayBmb3IgYW55IG9mIHRoZSBzdGFuZGFyZCBGSUIgQVBJIGZ1bmN0aW9ucyBzdWNoIGFzIGBmaWJfbG9va3VwYCwgYGZpYl9hZGRfdGFibGVgLCBgZmliX2RlbF90YWJsZWAsIGV0Yy4sIGluIG9yZGVyIHRvIGFuY2hvciB0aGUgY29kZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGV5IGhhbmRsaW5nIGEgc3BlY2lmaWMgdHlwZSBvZiByb3V0ZT8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggYW5jaWxsYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSByb3V0ZXMsIGxpa2UgbWV0cmljcywgcG9saWN5IHJvdXRpbmcgcnVsZXMsIG9yIG5leHQtaG9wIGluZm9ybWF0aW9uPyBBbHNvLCBJIHdpbGwgcXVpY2tseSBsb29rIGZvciBjb21tZW50cyB0aGF0IHdpbGwgZXhwbGFpbiBhbnkgbm9uLW9idmlvdXMgYXNwZWN0IG9mIHRoZSBjb2RlIHRoYXQgbmVlZHMgZXhwbGFuYXRpb24uCgpJIHdpbGwgYWxzbyBxdWlja2x5IGxvb2sgZm9yIGFueSBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgb3Igb3RoZXIgc2VjdGlvbnMgb2YgY29kZSB0aGF0IG1heSBiZSByZWxldmFudC4gVGhlIGNvZGUgbWF5IHVzZSBhIGhlbHBlciBmdW5jdGlvbiB0byBhc3Npc3Qgd2l0aCBpdHMgam9iLCBvciByZWx5IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgc2VjdGlvbiBtYXkgZGVwZW5kIG9uIG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHNldHRpbmdzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24uCgpNeSBtYWluIGdvYWwgaXMgdG8gc29saWRpZnkgYSBjbGVhciBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgSVB2NCBGSUIuIFRoZW4gSSBjYW4gc3RhcnQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGF0IG1lbnRhbCBtb2RlbCB0aGF0IEkgbWlnaHQgbmVlZCB0byBhY3QgdXBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcbjIxODE6XHR7XG4yMTgyOlx0XHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVx1MDAzZWZpO1xuMjE4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXHUwMDNlZmliX25ldDtcbjIxODQ6XHRcdGJvb2wgdXNlX25laWdoO1xuMjE4NTpcdFx0aW50IHNjb3JlID0gLTE7XG4yMTg2Olx0XHRfX2JlMzIgc2FkZHI7XG4yMTg3Olx0XHRpbnQgZ2VuaWQ7XG4yMTg4Olx0XG4yMTg5Olx0XHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuMjE5MDpcdFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuMjE5MTpcdFx0XHRyZXR1cm47XG4yMTkyOlx0XHR9XG4yMTkzOlx0XG4yMTk0Olx0XHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbjIxOTU6XHRcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbjIxOTY6XHRcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuMjE5NzpcdFxuMjE5ODpcdFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4yMTk5Olx0XHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuMjIwMDpcdFxuMjIwMTpcdFx0XHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcbjIyMDI6XHRcdFx0ICogbWludXMgb25lIHdoZW4gXCYjMzQ7aWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXCYjMzQ7IGlzIHNldC5cbjIyMDM6XHRcdFx0ICovXG4yMjA0Olx0XHRcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQpO1xuMjIwNTpcdFx0XHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcbjIyMDY6XHRcdFx0ICAgICh1c2VfbmVpZ2ggXHUwMDI2XHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXG4yMjA3Olx0XHRcdFx0Y29udGludWU7XG4yMjA4Olx0XG4yMjA5Olx0XHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbjIyMTA6XHRcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbjIyMTE6XHRcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbjIyMTI6XHRcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbjIyMTM6XHRcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbjIyMTQ6XHRcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4yMjE1Olx0XHRcdGlmIChzY29yZSBcdTAwM2Mgbmhfc2NvcmUpIHtcbjIyMTY6XHRcdFx0XHRyZXMtXHUwMDNlbmhfc2VsID0gbmhzZWw7XG4yMjE3Olx0XHRcdFx0cmVzLVx1MDAzZW5oYyA9IFx1MDAyNm5leHRob3BfbmgtXHUwMDNlbmhfY29tbW9uO1xuMjIxODpcdFx0XHRcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXHUwMDI2XHUwMDI2IG5oX3Njb3JlID09IDEpKVxuMjIxOTpcdFx0XHRcdFx0cmV0dXJuO1xuMjIyMDpcdFx0XHRcdHNjb3JlID0gbmhfc2NvcmU7XG4yMjIxOlx0XHRcdH1cbjIyMjI6XHRcbjIyMjM6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbjIyMjQ6XHR9XG4yMjI1Olx0I2VuZGlmXG4yMjI2Olx0XG4yMjI3Olx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuMjIyODpcdFx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIyMjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEdlbmVzaXMgb2YgYHN0cnVjdCBmaWJfbmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgc3RydWN0IGZpYl9uaGAuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgaW5zdGFudGlhdGVkIGFuZCBob3cgaXMgaXRzIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSXMgaXQgYSBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0dXJlPyBJcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXI/IElzIGl0IGVtYmVkZGVkIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmU/IEtub3dpbmcgaXRzIGFsbG9jYXRpb24gbWV0aG9kIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmliIG5leHQgaG9wcyBhcmUgY3JlYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfbmguKmt6YWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBvZiBgZmliX2luZm9gIGFuZCBgZmliX25oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIGluIGBmaWJfc2VtYW50aWNzLmNgIHRoZXNlIHN0cnVjdHVyZXMsIGBzdHJ1Y3QgZmliX2luZm9gIGFuZCBgc3RydWN0IGZpYl9uaGAsIGFyZSBhY3R1YWxseSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGJ1dCB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuIEkga25vdyBJIGNvdWxkIHVzZSBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIHRyeSBhIG1vcmUgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIHRoaW5raW5nIHRoZSBzaW1wbGVzdCBhcHByb2FjaCBmb3IgYSBxdWljayBhbnN3ZXIgaXMgbGlrZWx5IGEgY29kZSBzZWFyY2guIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG9jY3VycmVuY2VzIG9mIGVpdGhlciBzdHJ1Y3R1cmUgbmFtZSBpbiBhbGxvY2F0aW9uIGNvbnRleHRzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZmliX3NlbWFudGljcy5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgbGlmZXRpbWVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdHJ1Y3RzIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2xvb2t1cC5oPTM4PXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XG5uZXQvaXB2NC9maWJfbG9va3VwLmg6Mzk6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3NS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTk0PWludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxubmV0L2lwdjQvZmliX3RyaWUuYzoxMjEyOlx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVx0aWYgKElTX0VSUihmaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipEaXZpbmcgaW50byBJUHY0IEZJQiBTZW1hbnRpY3MqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBob3cgdGhlIElQdjQgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBmaWJfY3JlYXRlX2luZm9gIHdpdGhpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgb3IgYXQgbGVhc3QsIGEgY3JpdGljYWwgcGFydCBvZiBpdCDigJMgaW4gc2V0dGluZyB1cCBGSUIgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIGJldHRlciBncmFzcCBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgbmVlZCwgZS5nLiwgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByb3V0ZSBpbnN0YWxsYXRpb25zLCBob3cgcG9saWNpZXMgYXJlIGFwcGxpZWQsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrc10uIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyBwcm90b2NvbHMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaG93IHJvdXRlIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGUgcm91dGUgc2VsZWN0aW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBIb3BlZnVsbHksIEkmIzM5O2xsIHVuY292ZXIgc29tZSBvZiB0aGUgbnVhbmNlcyBvZiB0aGUgRklCJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGNhbiBjb25maXJtIHRoZSBiZWhhdmlvciBmb3IgW2luc2VydCB5b3VyIHNwZWNpZmljIG5lZWQsIGUuZy4gaG93IG5ldyByb3V0ZXMgYXJlIGNyZWF0ZWQsIHdoYXQgaGFwcGVucyBvbiByb3V0ZSBjb25mbGljdHMgb3Igcm91dGUgY2hhbmdlc10uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzY6XHRzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxuMTM3NzpcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzNzg6XHR7XG4xMzc5Olx0XHRpbnQgZXJyO1xuMTM4MDpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IE5VTEw7XG4xMzgxOlx0XHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBOVUxMO1xuMTM4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpvZmk7XG4xMzgzOlx0XHRpbnQgbmhzID0gMTtcbjEzODQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGNmZy1cdTAwM2VmY19ubGluZm8ubmxfbmV0O1xuMTM4NTpcdFxuMTM4NjpcdFx0QVNTRVJUX1JUTkwoKTtcbjEzODc6XHRcdGlmIChjZmctXHUwMDNlZmNfdHlwZSBcdTAwM2UgUlROX01BWClcbjEzODg6XHRcdFx0Z290byBlcnJfaW52YWw7XG4xMzg5Olx0XG4xMzkwOlx0XHQvKiBGYXN0IGNoZWNrIHRvIGNhdGNoIHRoZSBtb3N0IHdlaXJkIGNhc2VzICovXG4xMzkxOlx0XHRpZiAoZmliX3Byb3BzW2NmZy1cdTAwM2VmY190eXBlXS5zY29wZSBcdTAwM2UgY2ZnLVx1MDAzZWZjX3Njb3BlKSB7XG4xMzkyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBzY29wZVwmIzM0Oyk7XG4xMzkzOlx0XHRcdGdvdG8gZXJyX2ludmFsO1xuMTM5NDpcdFx0fVxuMTM5NTpcdFxuMTM5NjpcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgKFJUTkhfRl9ERUFEIHwgUlROSF9GX0xJTktET1dOKSkge1xuMTM5NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4xMzk4Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgcnRtX2ZsYWdzIC0gY2FuIG5vdCBjb250YWluIERFQUQgb3IgTElOS0RPV05cJiMzNDspO1xuMTM5OTpcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MDA6XHRcdH1cbjE0MDE6XHRcbjE0MDI6XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpIHtcbjE0MDM6XHRcdFx0aWYgKCFjZmctXHUwMDNlZmNfbXgpIHtcbjE0MDQ6XHRcdFx0XHRmaSA9IGZpYl9maW5kX2luZm9fbmgobmV0LCBjZmcpO1xuMTQwNTpcdFx0XHRcdGlmIChmaSkge1xuMTQwNjpcdFx0XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmZpLVx1MDAzZWZpYl90cmVlcmVmKTtcbjE0MDc6XHRcdFx0XHRcdHJldHVybiBmaTtcbjE0MDg6XHRcdFx0XHR9XG4xNDA5Olx0XHRcdH1cbjE0MTA6XHRcbjE0MTE6XHRcdFx0bmggPSBuZXh0aG9wX2ZpbmRfYnlfaWQobmV0LCBjZmctXHUwMDNlZmNfbmhfaWQpO1xuMTQxMjpcdFx0XHRpZiAoIW5oKSB7XG4xNDEzOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXh0aG9wIGlkIGRvZXMgbm90IGV4aXN0XCYjMzQ7KTtcbjE0MTQ6XHRcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MTU6XHRcdFx0fVxuMTQxNjpcdFx0XHRuaHMgPSAwO1xuMTQxNzpcdFx0fVxuMTQxODpcdFxuMTQxOTpcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4xNDIwOlx0XHRpZiAoY2ZnLVx1MDAzZWZjX21wKSB7XG4xNDIxOlx0XHRcdG5ocyA9IGZpYl9jb3VudF9uZXh0aG9wcyhjZmctXHUwMDNlZmNfbXAsIGNmZy1cdTAwM2VmY19tcF9sZW4sIGV4dGFjayk7XG4xNDIyOlx0XHRcdGlmIChuaHMgPT0gMClcbjE0MjM6XHRcdFx0XHRnb3RvIGVycl9pbnZhbDtcbjE0MjQ6XHRcdH1cbjE0MjU6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGZpYl9jcmVhdGVfaW5mb2AgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZpYl9jcmVhdGVfaW5mb2Agc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgYGZpYl9jcmVhdGVfaW5mb2AgbGlrZWx5IGhvbGRzIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGEgbmV3IEZpYmVyIChvciwgaW4gc29tZSBjb250ZXh0cywgYSBGb3J3YXJkIEluZm9ybWF0aW9uIEJhc2UgLSBGSUIgLSBlbnRyeSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlYWNoIGZpZWxkIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQuIFNwZWNpZmljYWxseSwgd2hhdCBwYXJ0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVsb25nIHRvIHRoZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiB0aGF0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYSBmaWJlci4gCgpJcyBpdCB1c2luZyBhIGZpeGVkLXNpemUgYWxsb2NhdGlvbiBzdHJhdGVneSBvciBkeW5hbWljIGFsbG9jYXRpb24gd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmPyBBcmUgdGhlcmUgcG9pbnRlcnMgdG8gb3RoZXIgYWxsb2NhdGVkIG1lbW9yeT8gSWYgc28sIHdoYXQgYXJlIHRoZSBzaXplcyBvZiB0aG9zZSBhc3NvY2lhdGVkIG1lbW9yeSBibG9ja3M/IEFyZSB0aGVyZSBlbWJlZGRlZCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBmaWJfY3JlYXRlX2luZm9gIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yPyBJcyB0aGVyZSBhIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgcmVxdWVzdGVkIHJlc291cmNlcyBleGlzdD8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBvciBpZiB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZyZXF1ZW50bHkgd2l0aGluIGEgaGlnaC10aHJvdWdocHV0IHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBvciwgYXQgYSBtaW5pbXVtLCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcHJvcGVybHkgZGVhbGxvY2F0ZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgdGhlIGJldHRlciBJIGNhbiBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UsIHByZXZlbnQgbWVtb3J5IGlzc3VlcywgYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVuc3VyZSB0aGlzIG9wZXJhdGlvbiBpcyBlZmZpY2llbnQsIHJvYnVzdCwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IsIGV2ZW4gd29yc2UsIHN0YWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI2Olx0XG4xNDI3Olx0XHRmaWJfaW5mb19oYXNoX2dyb3cobmV0KTtcbjE0Mjg6XHRcbjE0Mjk6XHRcdGZpID0ga3phbGxvY19mbGV4KCpmaSwgZmliX25oLCBuaHMpO1xuMTQzMDpcdFx0aWYgKCFmaSkge1xuMTQzMTpcdFx0XHRlcnIgPSAtRU5PQlVGUztcbjE0MzI6XHRcdFx0Z290byBmYWlsdXJlO1xuMTQzMzpcdFx0fVxuMTQzNDpcdFxuMTQzNTpcdFx0ZmktXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbiwgZXh0YWNrKTtcbjE0MzY6XHRcdGlmIChJU19FUlIoZmktXHUwMDNlZmliX21ldHJpY3MpKSB7XG4xNDM3Olx0XHRcdGVyciA9IFBUUl9FUlIoZmktXHUwMDNlZmliX21ldHJpY3MpO1xuMTQzODpcdFx0XHRrZnJlZShmaSk7XG4xNDM5Olx0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4xNDQwOlx0XHR9XG4xNDQxOlx0XG4xNDQyOlx0XHRmaS1cdTAwM2VmaWJfbmV0ID0gbmV0O1xuMTQ0MzpcdFx0ZmktXHUwMDNlZmliX3Byb3RvY29sID0gY2ZnLVx1MDAzZWZjX3Byb3RvY29sO1xuMTQ0NDpcdFx0ZmktXHUwMDNlZmliX3Njb3BlID0gY2ZnLVx1MDAzZWZjX3Njb3BlO1xuMTQ0NTpcdFx0ZmktXHUwMDNlZmliX2ZsYWdzID0gY2ZnLVx1MDAzZWZjX2ZsYWdzO1xuMTQ0NjpcdFx0ZmktXHUwMDNlZmliX3ByaW9yaXR5ID0gY2ZnLVx1MDAzZWZjX3ByaW9yaXR5O1xuMTQ0NzpcdFx0ZmktXHUwMDNlZmliX3ByZWZzcmMgPSBjZmctXHUwMDNlZmNfcHJlZnNyYztcbjE0NDg6XHRcdGZpLVx1MDAzZWZpYl90eXBlID0gY2ZnLVx1MDAzZWZjX3R5cGU7XG4xNDQ5Olx0XHRmaS1cdTAwM2VmaWJfdGJfaWQgPSBjZmctXHUwMDNlZmNfdGFibGU7XG4xNDUwOlx0XG4xNDUxOlx0XHRmaS1cdTAwM2VmaWJfbmhzID0gbmhzO1xuMTQ1MjpcdFx0aWYgKG5oKSB7XG4xNDUzOlx0XHRcdGlmICghbmV4dGhvcF9nZXQobmgpKSB7XG4xNDU0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXh0aG9wIGhhcyBiZWVuIGRlbGV0ZWRcJiMzNDspO1xuMTQ1NTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xNDU2Olx0XHRcdH0gZWxzZSB7XG4xNDU3Olx0XHRcdFx0ZXJyID0gMDtcbjE0NTg6XHRcdFx0XHRmaS1cdTAwM2VuaCA9IG5oO1xuMTQ1OTpcdFx0XHR9XG4xNDYwOlx0XHR9IGVsc2Uge1xuMTQ2MTpcdFx0XHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbjE0NjI6XHRcdFx0XHRuZXh0aG9wX25oLVx1MDAzZW5oX3BhcmVudCA9IGZpO1xuMTQ2MzpcdFx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcbjE0NjQ6XHRcbjE0NjU6XHRcdFx0aWYgKGNmZy1cdTAwM2VmY19tcClcbjE0NjY6XHRcdFx0XHRlcnIgPSBmaWJfZ2V0X25ocyhmaSwgY2ZnLVx1MDAzZWZjX21wLCBjZmctXHUwMDNlZmNfbXBfbGVuLCBjZmcsXG4xNDY3Olx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjE0Njg6XHRcdFx0ZWxzZVxuMTQ2OTpcdFx0XHRcdGVyciA9IGZpYl9uaF9pbml0KG5ldCwgZmktXHUwMDNlZmliX25oLCBjZmcsIDEsIGV4dGFjayk7XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoZXJyICE9IDApXG4xNDczOlx0XHRcdGdvdG8gZmFpbHVyZTtcbjE0NzQ6XHRcbjE0NzU6XHRcdGlmIChmaWJfcHJvcHNbY2ZnLVx1MDAzZWZjX3R5cGVdLmVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRml4IGZvciBNdWx0aXBhdGggUm91dGUgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBmaSA9IGt6YWxsb2NfZmxleCgqZmksIGZpYl9uaCwgbmhzKTtgLCBtZWFuaW5nIGBmaWAgYW5kIGl0cyBmbGV4IGFycmF5IGBmaWJfbmhgIGdldCB6ZXJvLWFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgdGhlcmUmIzM5O3MgYGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZCgmYW1wO25ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO2Ag4oCTIGEgbG9jYWwgYGdlbmlkYCBpbml0aWFsaXplZCBjb25kaXRpb25hbGx5LiBJIGtub3cgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkYCBnZXRzIGluaXRpYWxpemVkIHRvIDAgZHVyaW5nIGFsbG9jYXRpb24gKG9yIHVwZGF0ZWQgYnkgYGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHJgKSwgYW5kIHRoZSBjb2RlIGNvbXBhcmVzIHR3byBpbml0aWFsaXplZCBpbnRlZ2VycyB3aXRoIGBSRUFEX09OQ0UobmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkYCwgYXMgd2VsbCBhcyBjb21wYXJpbmcgYF9fYmUzMmAgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcmAuCgpOb3csIHdoYXQgZXhhY3RseSBkaWQgdGhhdCBwYXRjaCBjaGFuZ2UsIGFuZCAqd2h5Kj8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgbG9va2luZyBiYWNrIGF0IGNvbW1pdCBgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYWAuIEluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCBjYWNoZXMgdGhlIHByZWZlcnJlZCBzb3VyY2UgYWRkcmVzcyBmb3IgYSBwYXJ0aWN1bGFyIG5leHQgaG9wLiBIb3dldmVyLCB0aGUgZ2VuZXJhdGlvbiBJRCwgYG5ldC0mZ3Q7aXB2NC5kZXZfYWRkcl9nZW5pZGAsIGdldHMgYnVtcGVkIGlmIGRldmljZSBhZGRyZXNzZXMgY2hhbmdlLgoKVGhlIHByZXZpb3VzIGNvZGUgaGFkIHRoaXM6IGBpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcilgLiBJdCBkaXJlY3RseSBjb21wYXJlZCB0aGUgc291cmNlIGFkZHJlc3Mgd2l0aG91dCBjaGVja2luZyBpZiB0aGUgY2FjaGVkIGBuaF9zYWRkcmAgd2FzIHN0aWxsIHZhbGlkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGBnZW5pZGAgY2hlY2sgdXNpbmcgYXRvbWljIHJlYWRzLiBTcGVjaWZpY2FsbHksIGl0IGFkZHM6CiAqIGBnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtgIGFuZAogKiBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHJgCgpUaGlzIHByb3RlY3RzIGFnYWluc3QgcG90ZW50aWFsIHN0YWxlIGVudHJpZXMgaW4gdGhlIGNhY2hlLCBhbmQgaXQgdXNlcyBgUkVBRF9PTkNFYCB3aGljaCBpcyBjb3JyZWN0IHNpbmNlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgZ2VuZXJhdGlvbiBJRCBtYXkgYmUgdXBkYXRlZCBjb25jdXJyZW50bHkuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTGV0JiMzOTtzIHNlZToKCjEuICBgZ2VuaWRgIGlzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCB3aGljaCBpcyBpbml0aWFsaXplZCB1bmNvbmRpdGlvbmFsbHkgdG8gYHNhZGRyID8gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O2lwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMGAuIEdvb2QuIE5vIHdvcnJpZXMgdGhlcmUuCjIuICBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJfZ2VuaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgb24gYWxsb2NhdGlvbiB2aWEgYGt6YWxsb2NfZmxleGAsIG9yIGl0JiMzOTtzIHVwZGF0ZWQgYXRvbWljYWxseSB3aXRoIFdSSVRFXF9PTkNFIGluIGBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyYC4KMy4gIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgaXMgYWxzbyBpbml0aWFsaXplZCB0byAwIG9uIGFsbG9jYXRpb24gYW5kIHVwZGF0ZWQgdXNpbmcgV1JJVEVfT05DRS4KNC4gIE5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KNS4gIFRoZXJlIGFyZSBubyBtZW1vcnkgYnVmZmVycywgcGFja2V0IGJ1ZmZlcnMsIG9yIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIHJlc2l6ZWQuCjYuICBEb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHNraXBzIGluaXRpYWxpemF0aW9uIG9mIGFueXRoaW5nPyBUaGUgYHJlcy0mZ3Q7bmhfc2VsYCBhbmQgYHJlcy0mZ3Q7bmhjYCBhcmUgc2V0IGlmIGBzY29yZSAmbHQ7IG5oX3Njb3JlYC4gSWYgbm8gbmV4dCBob3AgbWF0Y2hlcywgdGhleSBtaWdodCByZW1haW4gaW4gdGhlaXIgcHJldmlvdXMgc3RhdGUgYmVmb3JlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgY2FsbGVkLiBOZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gT3ZlcmFsbCwgaXQgc2VlbXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX2ZpYi5oPTU3ND1pbnQgZmliX2NoZWNrX25oKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaCAqbmgsIHUzMiB0YWJsZSwgdTggc2NvcGUsXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzUtXHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvaXBfZmliLmg6NTc2OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzctXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTgwLVx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjI3PXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNi1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjM3Olx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzOC1cdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcdFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGZpYl9zZWxlY3RfcGF0aGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGZpYl9zZWxlY3RfcGF0aGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjI3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBjaGFzaW5nIGRvd24gcGF0aCBzZWxlY3Rpb24gbG9naWMgaW4gdGhlIEZJQi4gSSYjMzk7dmUgZ290IGEgaHVuY2ggc29tZXRoaW5nJiMzOTtzIG9mZiB0aGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuIE5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIHNlbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjc6XHR2b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4yMjI4Olx0XHRcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjIyOTpcdHtcbjIyMzA6XHRcdGlmIChmbDQtXHUwMDNlZmxvd2k0X29pZilcbjIyMzE6XHRcdFx0Z290byBjaGVja19zYWRkcjtcbjIyMzI6XHRcbjIyMzM6XHQjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFxuMjIzNDpcdFx0aWYgKGZpYl9pbmZvX251bV9wYXRoKHJlcy1cdTAwM2VmaSkgXHUwMDNlIDEpIHtcbjIyMzU6XHRcdFx0aW50IGggPSBmaWJfbXVsdGlwYXRoX2hhc2gobmV0LCBmbDQsIHNrYiwgTlVMTCk7XG4yMjM2Olx0XG4yMjM3Olx0XHRcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcbjIyMzg6XHRcdH1cbjIyMzk6XHRcdGVsc2VcbjIyNDA6XHQjZW5kaWZcbjIyNDE6XHRcdGlmICghcmVzLVx1MDAzZXByZWZpeGxlbiBcdTAwMjZcdTAwMjZcbjIyNDI6XHRcdCAgICByZXMtXHUwMDNldGFibGUtXHUwMDNldGJfbnVtX2RlZmF1bHQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2XG4yMjQzOlx0XHQgICAgcmVzLVx1MDAzZXR5cGUgPT0gUlROX1VOSUNBU1QpXG4yMjQ0Olx0XHRcdGZpYl9zZWxlY3RfZGVmYXVsdChmbDQsIHJlcyk7XG4yMjQ1Olx0XG4yMjQ2Olx0Y2hlY2tfc2FkZHI6XG4yMjQ3Olx0XHRpZiAoIWZsNC1cdTAwM2VzYWRkcikge1xuMjI0ODpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbDNtZGV2O1xuMjI0OTpcdFxuMjI1MDpcdFx0XHRsM21kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGZsNC1cdTAwM2VmbG93aTRfbDNtZGV2KTtcbjIyNTE6XHRcbjIyNTI6XHRcdFx0aWYgKCFsM21kZXYgfHxcbjIyNTM6XHRcdFx0ICAgIGwzbWRldl9tYXN0ZXJfZGV2X3JjdShGSUJfUkVTX0RFVigqcmVzKSkgPT0gbDNtZGV2KVxuMjI1NDpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGZpYl9yZXN1bHRfcHJlZnNyYyhuZXQsIHJlcyk7XG4yMjU1Olx0XHRcdGVsc2VcbjIyNTY6XHRcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGwzbWRldiwgMCwgUlRfU0NPUEVfTElOSyk7XG4yMjU3Olx0XHR9XG4yMjU4Olx0fVxuMjI1OTpcdFxuMjI2MDpcdGludCBfX25ldF9pbml0IGZpYjRfc2VtYW50aWNzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuMjI2MTpcdHtcbjIyNjI6XHRcdHVuc2lnbmVkIGludCBoYXNoX2JpdHMgPSA0O1xuMjI2MzpcdFxuMjI2NDpcdFx0bmV0LVx1MDAzZWlwdjQuZmliX2luZm9faGFzaCA9IGZpYl9pbmZvX2hhc2hfYWxsb2MoaGFzaF9iaXRzKTtcbjIyNjU6XHRcdGlmICghbmV0LVx1MDAzZWlwdjQuZmliX2luZm9faGFzaClcbjIyNjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzYyCgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDU3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHN0YW5kYXJkIElQdjQgRklCIHJvdXRlIGxvb2t1cCBsb2dpYy4gVGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBnZW5lcmF0aW9uIElEIGNoZWNrIGFuZCBgUkVBRF9PTkNFYCB3cmFwcGVycyB3aGVuIGNvbXBhcmluZyB0aGUgY2FjaGVkIHNvdXJjZSBhZGRyZXNzIChgbmhfc2FkZHJgKSB3aXRoIHRoZSBmbG93JiMzOTtzIHNvdXJjZSBhZGRyZXNzIChgZmw0LSZndDtzYWRkcmApLiBJdCYjMzk7cyBhbGwgdmVyeSBjb250YWluZWQuCgpUaGVyZSBhcmUgbm8gcmVkIGZsYWdzIGhlcmUsIGFzIGZhciBhcyBJIGNhbiBzZWUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkOgoKKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogQWJzb2x1dGVseSBubyBuZXcgYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucy4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBgZ2VuaWRgIHZhcmlhYmxlIGlzIGEgc3RhY2sgdmFyaWFibGUgYW5kIGlzIGluaXRpYWxpemVkIGF0IGl0cyBkZWNsYXJhdGlvbi4gVGhlIGBuaF9zYWRkcl9nZW5pZGAgZmllbGQgaXMgcHJlLWV4aXN0aW5nIGFuZCBtYW5hZ2VkIGNvcnJlY3RseS4KKiAgICoqVXNlciBTcGFjZSBJbnRlcmFjdGlvbnM6KiogTm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIHNvIG5vIHdvcnJpZXMgYWJvdXQgcGFkZGluZyBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoZXJlLgoqICAgKipCdWZmZXIgSGFuZGxpbmc6KiogTm8gYnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2FsY3VsYXRpb25zIGFyZSBpbnZvbHZlZC4KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIHNheSB0aGF0IEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtNU0FOIGlzIHByaW1hcmlseSB1c2VkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBOb25lIG9mIHRoZXNlIHNjZW5hcmlvcyBhcHBseS4gS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgc2hvdWxkIGJlIGFkZXF1YXRlIGZvciB0ZXN0aW5nIHJvdXRpbmcgYW5kIGNvbmN1cnJlbmN5L2RhdGEgcmFjZSBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gOgoKMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgdG8gVXNlciBTcGFjZToqKiBOb3QgYXBwbGljYWJsZTsgdGhlcmUgYXJlIG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBEZXBlbmRlbmNpZXM6KiogVGhlcmUmIzM5O3Mgbm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgaXNzdWVzLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3RoIGNhbGN1bGF0aW9ucywgb3IgbG9naWMgY2hhbmdlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNyaXRlcmlhIGZvciAqbm90KiBuZWVkaW5nIEtNU0FOOgoKKiAgICoqT3V0LW9mLUJvdW5kcy9VQUYvRGVhZGxvY2tzOioqIFRoZSBjb2RlIGNoYW5nZXMgZG9uJiMzOTt0IHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLgoqICAgKipaZXJvZWQvSW5pdGlhbGl6ZWQgU3RydWN0dXJlczoqKiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoqICAgKipObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBhYm92ZSwgdGhpcyBpcyBhIGNsZWFyLWN1dCBjYXNlLiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cblxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IG11bHRpcGF0aCByb3V0ZSBzZWxlY3Rpb24gaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIHZhbGlkYXRlIHRoZSBuZXh0aG9wIHNvdXJjZSBhZGRyZXNzIGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApIGFnYWluc3QgdGhlIGN1cnJlbnQgbmV0d29yayBuYW1lc3BhY2UgZ2VuZXJhdGlvbiBJRCAoYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXG5cbkFsbCB2YXJpYWJsZXMgYW5kIGZpZWxkcyBpbnZvbHZlZCAoYGdlbmlkYCwgYG5oX3NhZGRyX2dlbmlkYCwgYG5oX3NhZGRyYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQ6IGBnZW5pZGAgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgYHN0cnVjdCBmaWJfbmhgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19mbGV4KClgIGR1cmluZyBGSUIgaW5mbyBjcmVhdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY29weSB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG1hbmlwdWxhdGlvbnMsIG9yIGluZm9sZWFrcy4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGF0YS1yYWNlIGNvbmNlcm5zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuMTc4MDg5MTY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjY5MjYxNTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuMTc4MDk0NjI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcyMDIxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA4OjEyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuQEAgLTIxODQsNiArMjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcdGJvb2wgdXNlX25laWdoO1xcbiBcXHRpbnQgc2NvcmUgPSAtMTtcXG4gXFx0X19iZTMyIHNhZGRyO1xcbitcXHRpbnQgZ2VuaWQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuIFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuQEAgLTIxOTIsNiArMjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcbiBcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuIFxcdHNhZGRyID0gZmw0ID8gZmw0LVxcdTAwM2VzYWRkciA6IDA7XFxuK1xcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7XFxuIFxcbiBcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gXFx0XFx0aW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7XFxuQEAgLTIyMDQsNyArMjIwNiw5IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuIFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2IG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxcbitcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuIFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuIFxcdFxcdGlmIChoYXNoIFxcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxcbiBcXHRcXHRcXHRuaF9zY29yZSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMjo1Ni43NDU5ODQxNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODI1MzMyNzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjk2YzU4NDVjNTM4ZDNiODk2YWY2ODk5YzllYzhlYzU2YzgwYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6MTI6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbmluZGV4IDdhMzYyZjJlMmMyYmQuLmUyYmZjMTFhZWEwOWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuQEAgLTIxODQsNiArMjE4NCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRib29sIHVzZV9uZWlnaDtcbiBcdGludCBzY29yZSA9IC0xO1xuIFx0X19iZTMyIHNhZGRyO1xuK1x0aW50IGdlbmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbiBcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbkBAIC0yMTkyLDYgKzIxOTMsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFxuIFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4gXHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4rXHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcbiBcbiBcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbkBAIC0yMjA0LDcgKzIyMDYsOSBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuK1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgKz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTI6NTYuNzQ1OTg1NjE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ0NDU3NDUwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGSUIgU2VtYW50aWNzIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBGaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgZGlmZiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGNoYW5nZXMuIFRoZW4sIEknbGwgemVybyBpbiBvbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTg0LCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSBhc3N1bWUgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXNpZGVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc28gSSdsbCB3YW50IHRvIHJlYWQgdGhlIGNvZGUgYSBiaXQgYmVmb3JlIGFuZCBhZnRlciB0aGF0IGxpbmUuIFRpbWUgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBxdWlja2VzdCDigJMgdG8gbmF2aWdhdGUgdG8gdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQncyBiZWVuIHR3ZWFrZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6MjEuMTkxNzMzMjY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTgwOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxcbjIxODE6XFx0e1xcbjIxODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cXHUwMDNlZmk7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cXHUwMDNlZmliX25ldDtcXG4yMTg0OlxcdFxcdGJvb2wgdXNlX25laWdoO1xcbjIxODU6XFx0XFx0aW50IHNjb3JlID0gLTE7XFxuMjE4NjpcXHRcXHRfX2JlMzIgc2FkZHI7XFxuMjE4NzpcXHRcXHRpbnQgZ2VuaWQ7XFxuMjE4ODpcXHRcXG4yMTg5OlxcdFxcdGlmICh1bmxpa2VseShyZXMtXFx1MDAzZWZpLVxcdTAwM2VuaCkpIHtcXG4yMTkwOlxcdFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuMjE5MTpcXHRcXHRcXHRyZXR1cm47XFxuMjE5MjpcXHRcXHR9XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdHVzZV9uZWlnaCA9IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcXG4yMTk1OlxcdFxcdHNhZGRyID0gZmw0ID8gZmw0LVxcdTAwM2VzYWRkciA6IDA7XFxuMjE5NjpcXHRcXHRnZW5pZCA9IHNhZGRyID8gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4yMTk5OlxcdFxcdFxcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xcbjIyMDA6XFx0XFxuMjIwMTpcXHRcXHRcXHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcXG4yMjAyOlxcdFxcdFxcdCAqIG1pbnVzIG9uZSB3aGVuIFxcXCJpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cXFwiIGlzIHNldC5cXG4yMjAzOlxcdFxcdFxcdCAqL1xcbjIyMDQ6XFx0XFx0XFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcXG4yMjA1OlxcdFxcdFxcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxcbjIyMDY6XFx0XFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4yMjA3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMDg6XFx0XFxuMjIwOTpcXHRcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4yMjEwOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFxcdTAwMjZcXHUwMDI2XFxuMjIxMTpcXHRcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcXG4yMjEyOlxcdFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuMjIxMzpcXHRcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4yMjE0OlxcdFxcdFxcdFxcdG5oX3Njb3JlKys7XFxuMjIxNTpcXHRcXHRcXHRpZiAoc2NvcmUgXFx1MDAzYyBuaF9zY29yZSkge1xcbjIyMTY6XFx0XFx0XFx0XFx0cmVzLVxcdTAwM2VuaF9zZWwgPSBuaHNlbDtcXG4yMjE3OlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhjID0gXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZW5oX2NvbW1vbjtcXG4yMjE4OlxcdFxcdFxcdFxcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmhfc2NvcmUgPT0gMSkpXFxuMjIxOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIyMDpcXHRcXHRcXHRcXHRzY29yZSA9IG5oX3Njb3JlO1xcbjIyMjE6XFx0XFx0XFx0fVxcbjIyMjI6XFx0XFxuMjIyMzpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuMjIyNDpcXHR9XFxuMjIyNTpcXHQjZW5kaWZcXG4yMjI2OlxcdFxcbjIyMjc6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjIxLjE5MTg5NTgxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyMjUzNTY5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhcm91bmQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBjb250cm9sbGluZyBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gbG9vayBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFJpZ2h0LCBzbyBsaW5lIDIyMjUgaGFzIGFuIGAjZW5kaWZgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LlxuXG5Pa2F5LCBsZXQncyB0cmFjZSBiYWNrLiBJJ2xsIGNoZWNrIHdoYXQncyBnb2luZyBvbiBmcm9tIGxpbmVzIDIxNTAgdG8gMjE4NS4gSSdtIGV4cGVjdGluZyBhbiBgI2lmZGVmYCBvciBhIHNpbWlsYXIgZGlyZWN0aXZlIHRvIGJlIGd1YXJkaW5nIHRoYXQgYmxvY2suIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCB0aGF0IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgbXVsdGktcGF0aCBzZWxlY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBsb2dpYyBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjI2LjQxNzI1NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRcXG4yMTYxOlxcdFxcdFxcdGlmIChsaWtlbHkobmgtXFx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVCkpXFxuMjE2MjpcXHRcXHRcXHRcXHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cXHUwMDNlZmliX25oX2RldixcXG4yMTYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIChfX2ZvcmNlIHUzMiluaC1cXHUwMDNlZmliX25oX2d3NCk7XFxuMjE2NDpcXHRcXHRcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbjIxNjU6XFx0XFx0XFx0XFx0IG5oLVxcdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjIxNjY6XFx0XFx0XFx0XFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXFx1MDAzZWZpYl9uaF9kZXYsXFxuMjE2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpO1xcbjIxNjg6XFx0XFx0XFx0ZWxzZVxcbjIxNjk6XFx0XFx0XFx0XFx0biA9IE5VTEw7XFxuMjE3MDpcXHRcXHRcXHRpZiAobilcXG4yMTcxOlxcdFxcdFxcdFxcdHN0YXRlID0gUkVBRF9PTkNFKG4tXFx1MDAzZW51ZF9zdGF0ZSk7XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxNzQ6XFx0XFx0fVxcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRyZXR1cm4gISEoc3RhdGUgXFx1MDAyNiBOVURfVkFMSUQpO1xcbjIxNzc6XFx0fVxcbjIxNzg6XFx0XFxuMjE3OTpcXHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxcbjIxODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuMjE4MTpcXHR7XFxuMjE4MjpcXHRcXHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVxcdTAwM2VmaTtcXG4yMTgzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVxcdTAwM2VmaWJfbmV0O1xcbjIxODQ6XFx0XFx0Ym9vbCB1c2VfbmVpZ2g7XFxuMjE4NTpcXHRcXHRpbnQgc2NvcmUgPSAtMTtcXG4yMTg2OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4yMTg3OlxcdFxcdGludCBnZW5pZDtcXG4yMTg4OlxcdFxcbjIxODk6XFx0XFx0aWYgKHVubGlrZWx5KHJlcy1cXHUwMDNlZmktXFx1MDAzZW5oKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzoyNi40MTczODY3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTY0NDQyMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGEgc3BlY2lmaWMgYCNpZmRlZmAgZGlyZWN0aXZlIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgZmlsZSwgYW5kIEkga25vdyBpdCdzIGxvY2F0ZWQgc29tZXdoZXJlIGJlZm9yZSBsaW5lcyAyMTc4IG9yIDIxNjAuIE15IHBsYW4gaXMgdG8gc3RhcnQgYnkgc2Nhbm5pbmcgdGhlIGVhcmxpZXIgbGluZXMgaW4gdGhlIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZGl0aW9uIHRoYXQgdHJpZ2dlcnMgY2VydGFpbiBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgaW5jbHVzaW9uIGJhc2VkIG9uIGEgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIEZpbmRpbmcgdGhlIHByZWNpc2UgbG9jYXRpb24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQgbWUgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZCB6ZXJvIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzoyOC4zODE4MzI4NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMzA6XFx0XFx0XFx0XFx0ICAgICEobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKVxcbjIxMzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjEzMjpcXHRcXHRcXHRcXHRpZiAobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiAhPSBkZXYgfHxcXG4yMTMzOlxcdFxcdFxcdFxcdCAgICAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSlcXG4yMTM0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzU6XFx0XFx0XFx0XFx0YWxpdmUrKztcXG4yMTM2OlxcdFxcdFxcdFxcdG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjEzNzpcXHRcXHRcXHRcXHRjYWxsX2ZpYl9uaF9ub3RpZmllcnMobmV4dGhvcF9uaCwgRklCX0VWRU5UX05IX0FERCk7XFxuMjEzODpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4yMTM5OlxcdFxcbjIxNDA6XFx0XFx0XFx0aWYgKGFsaXZlIFxcdTAwM2UgMCkge1xcbjIxNDE6XFx0XFx0XFx0XFx0ZmktXFx1MDAzZWZpYl9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjE0MjpcXHRcXHRcXHRcXHRyZXQrKztcXG4yMTQzOlxcdFxcdFxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxuMjE0NjpcXHRcXHR9XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuMjE1MjpcXHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdGludCBzdGF0ZSA9IE5VRF9SRUFDSEFCTEU7XFxuMjE1NTpcXHRcXG4yMTU2OlxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspIHtcXG4yMTU3OlxcdFxcdFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0XFx0aWYgKGxpa2VseShuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcXG4yMTYyOlxcdFxcdFxcdFxcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTMyKW5oLVxcdTAwM2VmaWJfbmhfZ3c0KTtcXG4yMTY0OlxcdFxcdFxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjI4LjM4MTk2NzYwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTY2NDQyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBVbmRlcnN0YW5kaW5nIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCoqXG5cbk9rYXksIHNvIEkgc2VlIGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgb24gbGluZSAyMTUxLiBUaGF0J3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUsIG1lYW5pbmcgYSBibG9jayBvZiBjb2RlIGlzIG9ubHkgaW5jbHVkZWQgaWYgYSBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGUgb3B0aW9uIGluIHF1ZXN0aW9uIGlzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCBhY3R1YWxseSAqbWVhbnMqLiBXaGF0IGRvZXMgaXQgY29udHJvbD8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdvdWxkIGNob29zZSB0byBlbmFibGU/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgb2YgY29kZSBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgaXQncyB0aWVkIHRvLiBJIG5lZWQgdGhlIEtjb25maWcgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeS4gTGV0J3MgZ28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYElQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBrbm93IHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBkaXJlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjQ3Ljk0ODQxMzAwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NzgzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc5LVxcbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxcbm5ldC9pcHY0L0tjb25maWctODEtXFx0Ym9vbCBcXFwiSVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzo0OC4yMzcyMDQ4OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwMzg1MTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgSVB2NCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgYXJvdW5kIGxpbmUgODAgd2l0aGluIGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgc3BlY2lmaWMsIHByb2JhYmx5IGltcG9ydGFudCwgYXNwZWN0IG9mIElQdjQuIEJhc2VkIG9uIGl0cyBsaWtlbHkgcG9zaXRpb24gaW4gdGhlIGZpbGUsIGl0J3MgcHJvYmFibHkgKm5vdCogYXQgYSBmb3VuZGF0aW9uYWwgbGV2ZWwgKGxpa2UgdGhlIGNvcmUgcHJvdG9jb2wgZW5hYmxlL2Rpc2FibGUgb3B0aW9ucyksIGJ1dCBtb3JlIGZvY3VzZWQgb24gYSBwYXJ0aWN1bGFyIGZlYXR1cmUsIHN1YnN5c3RlbSwgb3IgdHVuYWJsZSBwYXJhbWV0ZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGF0ICpleGFjdGx5KiBpcyBiZWluZyBjb25maWd1cmVkIHRoZXJlPyBJcyBpdCByZWxhdGVkIHRvIHJvdXRpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZpcmV3YWxsaW5nIChpcHRhYmxlcyksIHNvbWUgYWR2YW5jZWQgcHJvdG9jb2wgZXh0ZW5zaW9uLCBvciBtYXliZSBzb21lIHBlcmZvcm1hbmNlLXJlbGF0ZWQga25vYnM/IExldCdzIGdldCB0byB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZC4gVGhlIGNvbnRleHQgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBpdC4gSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6NTAuNTQxMDU4NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIGRvY3VtZW50YXRpb24gYXRcXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vbGFydGMub3JnL2hvd3RvL2xhcnRjLnJwZGIuaHRtbFxcdTAwM2VcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXFxuICA4MTpcXHRcXHRib29sIFxcXCJJUDogZXF1YWwgY29zdCBtdWx0aXBhdGhcXFwiXFxuICA4MjpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBOb3JtYWxseSwgdGhlIHJvdXRpbmcgdGFibGVzIHNwZWNpZnkgYSBzaW5nbGUgYWN0aW9uIHRvIGJlIHRha2VuIGluXFxuICA4NTpcXHRcXHQgIGEgZGV0ZXJtaW5pc3RpYyBtYW5uZXIgZm9yIGEgZ2l2ZW4gcGFja2V0LiBJZiB5b3Ugc2F5IFkgaGVyZVxcbiAgODY6XFx0XFx0ICBob3dldmVyLCBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIGF0dGFjaCBzZXZlcmFsIGFjdGlvbnMgdG8gYSBwYWNrZXRcXG4gIDg3OlxcdFxcdCAgcGF0dGVybiwgaW4gZWZmZWN0IHNwZWNpZnlpbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBwYXRocyB0byB0cmF2ZWxcXG4gIDg4OlxcdFxcdCAgZm9yIHRob3NlIHBhY2tldHMuIFRoZSByb3V0ZXIgY29uc2lkZXJzIGFsbCB0aGVzZSBwYXRocyB0byBiZSBvZlxcbiAgODk6XFx0XFx0ICBlcXVhbCBcXFwiY29zdFxcXCIgYW5kIGNob29zZXMgb25lIG9mIHRoZW0gaW4gYSBub24tZGV0ZXJtaW5pc3RpYyBmYXNoaW9uXFxuICA5MDpcXHRcXHQgIGlmIGEgbWF0Y2hpbmcgcGFja2V0IGFycml2ZXMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuICA5MzpcXHRcXHRib29sIFxcXCJJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxcbiAgOTc6XFx0XFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcXG4gIDk4OlxcdFxcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXFxuICA5OTpcXHRcXHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjEzOjUwLjU0MTE2NDE5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjczMTAxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUm91dGUgTXVsdGlwYXRoaW5nKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHJlbGllcyBvbiBgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUmAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIHVuZGVyc3RhbmQgKndoeSogYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgYSBwcmVyZXF1aXNpdGUuIFdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIHRoYXQgb3B0aW9uIGJyaW5nIHRvIHRoZSB0YWJsZSB0aGF0J3MgZnVuZGFtZW50YWwgdG8gcm91dGUgbXVsdGlwYXRoaW5nPyBJcyBpdCB0aGUgcG9saWN5IHJvdXRpbmcsIHRoZSBtYXJraW5nIGNhcGFiaWxpdGllcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2Qgb2YgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxMzo1My4yMTQyNjg1MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA5MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE0LVxcbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbm5ldC9pcHY0L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTM6NTMuNDg5MzY5NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk4MjIxMjYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb21taXQsIHdoYXQncyBiZWluZyBtb2RpZmllZCwgYW5kIHdoeS4gU2luY2UgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYGdpdCBsb2dgIGFzIGEgdG9vbCBoZXJlLCBJJ2xsIG5lZWQgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgYXZhaWxhYmxlIGluZm9ybWF0aW9uIGxpa2UgY29tbWl0IG1lc3NhZ2VzIG9yIG90aGVyIHJlc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY29udGV4dC5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIEkgY2FuIHNlZSB0aGVyZSBpcyBhIGNoYW5nZSB0byBob3cgd2Ugc2VsZWN0IHRoZSBuZXh0IGhvcCBmb3IgYSByb3V0ZS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBnZW5pZGAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIHNvdXJjZSBJUCBhZGRyZXNzIChgc2FkZHJgKSBpbiB0aGUgY29udGV4dCBvZiBtdWx0aXBhdGggcm91dGluZy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnZW5pZGAgaXMgYXNzaWduZWQgYW5kIGxhdGVyIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjayBhbG9uZyB3aXRoIGBuaF9zYWRkcmAuIFRoZSBjb2RlIG5vdyBjaGVja3Mgbm90IG9ubHkgaWYgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIG1hdGNoZXMgdGhlIHNvdXJjZSBhZGRyZXNzIChgc2FkZHJgKSwgYnV0IGFsc28gaWYgdGhlIGBuaF9zYWRkcl9nZW5pZGAgbWF0Y2hlcyBhIGxvY2FsbHkgc3RvcmVkIGBnZW5pZGAuIFRoaXMgaW1wbGllcyB0aGF0IGBnZW5pZGAgbWlnaHQgYmUgdXNlZCBhcyBhIHZlcnNpb24gaWRlbnRpZmllciwgb3Igc29tZSBpbmRpY2F0b3IgdGhhdCBjaGVja3Mgd2hldGhlciBgc2FkZHJgIGlzIHN0YWxlLiBUaGUgY29kZSBhbHNvIHVzZXMgdGhlIGBSRUFEX09OQ0VgIG1hY3JvLCBpbmRpY2F0aW5nIHRoYXQgdGhlc2UgdmFyaWFibGVzIG1pZ2h0IGJlIGFjY2Vzc2VkIGluIGEgbXVsdGl0aHJlYWRlZCBjb250ZXh0LlxuXG5Ob3csIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgYGdlbmlkYCwgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZCwgYW5kIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLCB0byBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgY2hhbmdlIGNvbXBsZXRlbHkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBuaF9zYWRkcl9nZW5pZGAgYW5kIHRoZSBvdGhlciBmaWVsZHMgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGBnZW5pZGAgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZCwgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowMy4zMTE0OTc0NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM2ODI4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmhfc2FkZHJfZ2VuaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9MTA3PXN0cnVjdCBmaWJfbmgge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtMTE0LVxcdF9fYmUzMlxcdFxcdFxcdG5oX3NhZGRyO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjExNTpcXHRpbnRcXHRcXHRcXHRuaF9zYWRkcl9nZW5pZDtcXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTYtI2RlZmluZSBmaWJfbmhfZmFtaWx5XFx0XFx0bmhfY29tbW9uLm5oY19mYW1pbHlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI3LVxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjg6XFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQsIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyOS1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzMzPV9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDMtXFx0XFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzQ0OlxcdFxcdGlmIChSRUFEX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ1LVxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTc5PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIwOS1cXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIxMDpcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjExLVxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowNS4wNzUxODY3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1Nzg3NTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRklCIFByZWZpeGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBmaWJfcmVzdWx0X3ByZWZzcmNgLiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gcm91Z2hseSBsaW5lIDEzMzMg4oCTIHRoYXQgc2hvdWxkIHB1dCBtZSBpbiB0aGUgdmljaW5pdHkgb2Ygd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBsaWtlbHkgdXNlZCBhbmQgaG9wZWZ1bGx5LCBkZWZpbmVkLiBIb3BlZnVsbHkgdGhlIGNvbnRleHQgdGhlcmUgd2lsbCBpbGx1bWluYXRlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6MDcuNDMzMDY1Mzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyMDpcXHRcXG4xMzIxOlxcdFxcdGlmIChuaGMtXFx1MDAzZW5oY19mYW1pbHkgIT0gQUZfSU5FVClcXG4xMzIyOlxcdFxcdFxcdHJldHVybiBpbmV0X3NlbGVjdF9hZGRyKG5oYy1cXHUwMDNlbmhjX2RldiwgMCwgc2NvcGUpO1xcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XFxuMTMyNTpcXHRcXHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIobmgtXFx1MDAzZWZpYl9uaF9kZXYsIG5oLVxcdTAwM2VmaWJfbmhfZ3c0LCBzY29wZSk7XFxuMTMyNjpcXHRcXG4xMzI3OlxcdFxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyLCBzYWRkcik7XFxuMTMyODpcXHRcXHRXUklURV9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xcbjEzMjk6XFx0XFxuMTMzMDpcXHRcXHRyZXR1cm4gc2FkZHI7XFxuMTMzMTpcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdF9fYmUzMiBmaWJfcmVzdWx0X3ByZWZzcmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxcbjEzMzQ6XFx0e1xcbjEzMzU6XFx0XFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyA9IHJlcy1cXHUwMDNlbmhjO1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRpZiAocmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3ByZWZzcmMpXFxuMTMzODpcXHRcXHRcXHRyZXR1cm4gcmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3ByZWZzcmM7XFxuMTMzOTpcXHRcXG4xMzQwOlxcdFxcdGlmIChuaGMtXFx1MDAzZW5oY19mYW1pbHkgPT0gQUZfSU5FVCkge1xcbjEzNDE6XFx0XFx0XFx0c3RydWN0IGZpYl9uaCAqbmg7XFxuMTM0MjpcXHRcXG4xMzQzOlxcdFxcdFxcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcXG4xMzQ0OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PVxcbjEzNDU6XFx0XFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxcbjEzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIpO1xcbjEzNDc6XFx0XFx0fVxcbjEzNDg6XFx0XFxuMTM0OTpcXHRcXHRyZXR1cm4gZmliX2luZm9fdXBkYXRlX25oY19zYWRkcihuZXQsIG5oYywgcmVzLVxcdTAwM2VmaS1cXHUwMDNlZmliX3Njb3BlKTtcXG4xMzUwOlxcdH1cXG4xMzUxOlxcdFxcbjEzNTI6XFx0c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxcbjEzNTM6XFx0e1xcbjEzNTQ6XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfdHlwZSAhPSBSVE5fTE9DQUwgfHwgIWNmZy1cXHUwMDNlZmNfZHN0IHx8XFxuMTM1NTpcXHRcXHQgICAgZmliX3ByZWZzcmMgIT0gY2ZnLVxcdTAwM2VmY19kc3QpIHtcXG4xMzU2OlxcdFxcdFxcdHUzMiB0Yl9pZCA9IGNmZy1cXHUwMDNlZmNfdGFibGU7XFxuMTM1NzpcXHRcXHRcXHRpbnQgcmM7XFxuMTM1ODpcXHRcXG4xMzU5OlxcdFxcdFxcdGlmICh0Yl9pZCA9PSBSVF9UQUJMRV9NQUlOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDowNy40MzMyMzU3MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE3NzE5NTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmVyYXRpb24gSUQgQ2hlY2sgaW4gYGZpYl9zZW1hbnRpY3MuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZmliX3NlbWFudGljcy5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGdlbmVyYXRpb24gSUQgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLCBhbmQgdGhpcyBmaXggZGlyZWN0bHkgYWRkcmVzc2VzIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlLiBFc3NlbnRpYWxseSwgZWFjaCBuZXh0IGhvcCAoYG5oYCkgY2FjaGVzIGl0cyBzb3VyY2UgYWRkcmVzcyAoYG5oX3NhZGRyYCkgYW5kIGl0cyBhc3NvY2lhdGVkIGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgbmV0LVx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgIGlzIHVwZGF0ZWQsIHdoaWNoIGhhcHBlbnMsIHNheSwgd2hlbiBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIG1vZGlmaWVkLiBXaXRob3V0IHRoZSB1cGRhdGVkIGNoZWNrLCBhIHN0YWxlIGBuaC1cdTAwM2VuaF9zYWRkcmAgY291bGQgYmUgdXNlZCB3aXRoIGEgbmV3ZXIgYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLlxuXG5UaGUgZml4IGlzIGNsZXZlci4gSXQgbm93IGNoZWNrcyBpZiBgbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWRgIG1hdGNoZXMgdGhlIGN1cnJlbnQgYG5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCAqYmVmb3JlKiBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzZXMuIElmIHRoZXkgbWF0Y2gsIGl0ICp0aGVuKiBkb2VzIHRoZSBzb3VyY2UgYWRkcmVzcyBjb21wYXJpc29uLiBBbmQgb2YgY291cnNlLCB0aGUgdXNlIG9mIGBSRUFEX09OQ0VgIGhlcmUgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhlIGRhdGEgcmVhZHMgYXJlIGF0b21pYyBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBvbiB0aGVzZSBwb3RlbnRpYWxseSBjb25jdXJyZW50bHktdXBkYXRlZCBzaGFyZWQgdmFyaWFibGVzISBJdCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgb3B0aW1pemUgYXdheSBhIGNydWNpYWwgcmVhZCBvciByZW9yZGVyIHRoZSByZWFkcyBpbiBhIHdheSB0aGF0IGJyZWFrcyB0aGUgbG9naWMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgcGF0aC5cblxuVGhlIG5leHQgdGhpbmcgSSdkIGRvIGlzIGV2YWx1YXRlIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJcyB0aGlzIGEgY29kZSBwYXRoIHRoYXQncyBoaXQgZnJlcXVlbnRseSwgb3IgaXMgaXQgbW9yZSBvZiBhbiBlZGdlIGNhc2U/IFdoZXJlIGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgYWN0dWFsbHkgY2FsbGVkIGZyb20/IFRpbWUgdG8gZ2V0IHRoZSBncmVwcGVyIG91dCBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoxMS42MTA0MzQzOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzc5MTk1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9NTc0PWludCBmaWJfY2hlY2tfbmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oICpuaCwgdTMyIHRhYmxlLCB1OCBzY29wZSxcXG5pbmNsdWRlL25ldC9pcF9maWIuaC01NzUtXFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXBfZmliLmg6NTc2OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNzgtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE4MC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjI3PXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjM2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjM3OlxcdFxcdGZpYl9zZWxlY3RfbXVsdGlwYXRoKHJlcywgaCwgZmw0KTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjA1LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIE5VTEwpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cXHRcXHRJUENCKHNrYiktXFx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6MTMuNDQ4MzYwNjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyOTM3NjEyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIGNvbnRleHQuICBUaGUgY29kZSB0ZWxscyBtZSBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBmaXJzdCwgd2l0aGluIGBmaWJfc2VsZWN0X3BhdGhgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBpdCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBwYXRoIHNlbGVjdGlvbiBwcm9jZXNzLiBTZWNvbmQsIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgaXBfbWtyb3V0ZV9pbnB1dGAgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLiBIbW0sIGBpcF9ta3JvdXRlX2lucHV0YCBpcyB1c2VkIGZvciBpbnB1dCByb3V0ZSBjcmVhdGlvbiwgdGhhdCdzIGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGVzZSB0d28gY2FsbCBzaXRlcywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBjYWxsZXJzIG9mIGBmaWJfc2VsZWN0X3BhdGhgIHRvIGdldCB0aGUgY29udGV4dC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBicm9hZGVyIHZpZXcgYW5kIGhlbHAgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGJlaW5nIHVzZWQgZm9yIGBmaWJfc2VsZWN0X3BhdGhgIHdoaWNoIGluIHR1cm4gd2lsbCBzaG93IHRoZSB1c2FnZSBvZiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwYXRoIGZvciBpbnZlc3RpZ2F0aW9uIHJpZ2h0IG5vdywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgYnJvYWRlciByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjE2Ljc0MjEyNDA1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTI2MTU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfc2VsZWN0X3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfZmliLmg9NTc2PXZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KTtcXG5pbmNsdWRlL25ldC9pcF9maWIuaDo1Nzg6dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3OS1cXHRcXHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzUxPXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjQ0NS1cXHRpZiAoZmliX2luZm9fbnVtX3BhdGgocmVzLmZpKSBcXHUwMDNlIDEpXFxubmV0L2NvcmUvZmlsdGVyLmM6NjQ0NjpcXHRcXHRmaWJfc2VsZWN0X3BhdGgobmV0LCBcXHUwMDI2cmVzLCBcXHUwMDI2Zmw0LCBOVUxMKTtcXG5uZXQvY29yZS9maWx0ZXIuYy02NDQ3LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNzk9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjI2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjI3OnZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIyOC1cXHRcXHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9NzczPXN0YXRpYyB2b2lkIF9faXBfZG9fcmVkaXJlY3Qoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtODI3LVxcbm5ldC9pcHY0L3JvdXRlLmM6ODI4OlxcdFxcdFxcdFxcdGZpYl9zZWxlY3RfcGF0aChuZXQsIFxcdTAwMjZyZXMsIGZsNCwgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTgyOS1cXHRcXHRcXHRcXHRuaGMgPSBGSUJfUkVTX05IQyhyZXMpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMDQ4PXN0YXRpYyB2b2lkIF9faXBfcnRfdXBkYXRlX3BtdHUoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBmbG93aTQgKmZsNCwgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTA3Ny1cXG5uZXQvaXB2NC9yb3V0ZS5jOjEwNzg6XFx0XFx0ZmliX3NlbGVjdF9wYXRoKG5ldCwgXFx1MDAyNnJlcywgZmw0LCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTEwNzktI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjc0MT1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODk4LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg5OTpcXHRmaWJfc2VsZWN0X3BhdGgobmV0LCByZXMsIGZsNCwgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjE4LjM4MzM5NTc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyODI0MTEwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhpcyBpcyBjb3JlIElQdjQgcm91dGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gKm11bHRpcGF0aCogcm91dGUgc2VsZWN0aW9uLiBJIGtub3cgdGhhdCBgaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdWAgYW5kIGBpcF9ta3JvdXRlX2lucHV0YCBib3RoIGNhbGwgaW50byB0aGlzIGFyZWEsIHNvIGl0J3MgYSBob3QgcGF0aCwgZXNwZWNpYWxseSB3aXRoIG11bHRpcGF0aCBlbmFibGVkLCB3aGljaCBTeXprYWxsZXIgbG92ZXMgdG8gZXhlcmNpc2UgdGhyb3VnaCBgUlRNX05FV1JPVVRFYCBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBzb2NrZXQgY3JlYXRpb24uIEdvb2QsIHRoYXQncyBhbHJlYWR5IGEgc3Ryb25nIGluZGljYXRvci5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LCBoaXR0aW5nIHVwIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIEZpcnN0LCBTZWN0aW9uIDE6IFwiUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUsXCIgcmlnaHQ/IEFuZCB0aGUgcGF0Y2ggaXMgb3BlcmF0aW5nIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIHNvIHRoYXQncyBnb29kLiBUaGV5IHNheSBkb24ndCB0cnVzdCB0aGUgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIChORkNJKSBsYWJlbCBvciByZWZhY3RvcmluZyBjbGFpbXMgYmxpbmRseSwgYW5kIHRoYXQncyBzb2xpZCBhZHZpY2UuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZT8gWWVzLCB0aGlzIHBhdGNoIGZhbGxzIHJpZ2h0IGludG8gdGhhdC5cblxuTm93LCBTZWN0aW9uIDIgaXMgdGhlIFwid2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgc2VjdGlvbi4gTm9wZSwgbm90aGluZyBoZXJlIGFwcGxpZXMuIFRoZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGluIGtlcm5lbCwgZXhlY3V0YWJsZSBjb2RlLiBObyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBoZXJlLiBObyB1bnJlYWNoYWJsZSBwYXRocy5cblxuRmluYWxseSwgU2VjdGlvbiAzLiBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIFRoaXMgcGF0Y2ggKmRvZXMqIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCBpdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlISBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgPSBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCdzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAhIE1vZGlmeWluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgaXMuIEFuZCB3ZSdyZSB0YWxraW5nIGFib3V0ICpyb3V0ZSBzZWxlY3Rpb24gbG9naWMqIHdoaWNoIGlzIGNvcmUhXG5cblNvLCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGhvdyBjYW5kaWRhdGUgbmV4dGhvcHMgYXJlIHNjb3JlZCBpbiBtdWx0aXBhdGggcm91dGluZy4gSXQncyBjb21wYXJpbmcgYG5oX3NhZGRyX2dlbmlkYCB3aXRoIGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGAgdXNpbmcgYFJFQURfT05DRWAuIFRoaXMgaXMgKmRpcmVjdGx5KiBhZmZlY3Rpbmcgcm91dGUgc2VsZWN0aW9uLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXG5cbk5vdywgd2hhdCBhYm91dCBgRW5hYmxlQ29uZmlnc2A/IE9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGNvbXBpbGUgYW5kIHJlYWNoIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIEkgY2FuIHNlZSBpdCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGlmIHRoZSBmaWxlIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIGl0c2VsZiBoYXMgb3RoZXIgZ3VhcmRzLCBvciBpZiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3MgdG8gcmVwcm9kdWNlIGFuZCB0cmlnZ2VyIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoyNS42NjU4MDg5MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQ4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9zZW1hbnRpY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTU6XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9maWJfbG9va3VwLmg9Mjk9c3RhdGljIGlubGluZSB2b2lkIGZpYl9hbGlhc19hY2Nlc3NlZChzdHJ1Y3QgZmliX2FsaWFzICpmYSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC0zNi1cXG5uZXQvaXB2NC9maWJfbG9va3VwLmg6Mzc6LyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovXFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTM4LXZvaWQgZmliX3JlbGVhc2VfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjI1LjcxNTY2MTMzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjMyMDcxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBmaWJfc2VtYW50aWNzLm8gYW5kIE11bHRpcGF0aCBSb3V0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmaWJfc2VtYW50aWNzLm9gIGlzIGludGVncmF0ZWQuIEkgc2VlIHRoYXQgaXQncyBidWlsdCBpbnRvIGBvYmoteWAgd2hlbiBJUHY0IGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lIGxpbmUgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIGxpbmUgMjE1MTogYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuXG5cbkknbGwgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBUaGF0J3MgdGhlIGtleS4gU28sIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQgd2hlbiBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBzZXQuXG5cbk5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGRlcGVuZGVuY2llcyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFnYWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjI5Ljk0NzczNDg1MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcXG4gIDE5OlxcdFxcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcXG4gIDIwOlxcdFxcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxcbiAgMjE6XFx0XFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsOlxcbiAgMjQ6XFx0XFx0ICBhbnN3ZXJpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDI1OlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IGFkdmFuY2VkIHJvdXRpbmcuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgTm90ZSB0aGF0IHlvdXIgYm94IGNhbiBvbmx5IGFjdCBhcyBhIHJvdXRlciBpZiB5b3UgZW5hYmxlIElQXFxuICAyODpcXHRcXHQgIGZvcndhcmRpbmcgaW4geW91ciBrZXJuZWw7IHlvdSBjYW4gZG8gdGhhdCBieSBzYXlpbmcgWSB0byBcXFwiL3Byb2NcXG4gIDI5OlxcdFxcdCAgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCIgYW5kIFxcXCJTeXNjdGwgc3VwcG9ydFxcXCIgYmVsb3cgYW5kIGV4ZWN1dGluZyB0aGVcXG4gIDMwOlxcdFxcdCAgbGluZVxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGVjaG8gXFxcIjFcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmRcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcnBfZmlsdGVyLCB3aGljaFxcbiAgMzc6XFx0XFx0ICBhdXRvbWF0aWNhbGx5IHJlamVjdHMgaW5jb21pbmcgcGFja2V0cyBpZiB0aGUgcm91dGluZyB0YWJsZSBlbnRyeVxcbiAgMzg6XFx0XFx0ICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDoyOS45NDc4MTcyODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ5NzczMDQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGlwYXRoIFJvdXRpbmcgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplciBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZm9jdXMgb24uXG5cbkZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uczogYElQX0FEVkFOQ0VEX1JPVVRFUmAgYW5kIGBJUF9ST1VURV9NVUxUSVBBVEhgLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIHRhcmdldCB0aG9zZSBzZXR0aW5ncy5cblxuTmV4dCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBleHRyYWN0IFwiRm9jdXNTeW1ib2xzXCIgdG8gcHJldmVudCB0aGUgZnV6emVyIGZyb20gZ2V0dGluZyBkaWx1dGVkIGJ5IHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cywgYXZvaWRpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgdGhhdCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGEgbm9uLXN0YXRpYyBDIGZ1bmN0aW9uIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kIGZvciBteSBwdXJwb3Nlcy4gSW1wb3J0YW50bHksIGl0J3MgKm5vdCogY2FsbGVkIGluIGV2ZXJ5IHNpbmdsZSByb3V0ZSBsb29rdXAuIEl0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gbXVsdGlwYXRoIHJvdXRpbmcsIGFuZCB0aGlzIGlzIGNydWNpYWwuIEl0J3Mgb25seSBjYWxsZWQgd2hlbiBtdWx0aXBsZSBuZXh0IGhvcHMgYXJlIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0LiBJIGNhbiBzZWUgdGhpcyBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXRzZWxmIChjYWxsZWQgYnkgYGZpYl9zZWxlY3RfcGF0aGAgd2hpY2ggb25seSB1c2VzIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uIGlmIGEgbXVsdGlwYXRoIHJvdXRlIGlzIHByZXNlbnQpLlxuXG5JIGNvbnNpZGVyZWQgYGZpYl9zZWxlY3RfcGF0aGAsIGJ1dCB0aGF0J3MgZmFyIHRvbyBnZW5lcmFsLiBJdCdzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBJUHY0IHJvdXRlIGxvb2t1cCwgcmVnYXJkbGVzcyBvZiBtdWx0aXBhdGggY29uZmlndXJhdGlvbi4gVGhhdCB3b3VsZCBtYWtlIGl0IGEgYmFkIGNob2ljZSwgYW5kIEkgZG9uJ3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzLlxuXG5UaGVuLCBJIGRvdWJsZS1jaGVja2VkIHRvIHNlZSBpZiB0aGVyZSB3ZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgb3IgYWZmZWN0ZWQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBuaF9zYWRkcl9nZW5pZGAuIEhvd2V2ZXIsIGJhc2VkIG9uIHRoZSBgZGlmZmAsIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVkIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHNvIG15IGZvY3VzIGlzIG5hcnJvd2VkLCBhbmQgbXkgZnV6emluZyBlZmZvcnRzIHdpbGwgYmUgZGlyZWN0ZWQgdG93YXJkcyBleGFjdGx5IHRoZSBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhlIG1vc3QgYXR0ZW50aW9uLlxuXG5JIGNvbmZpcm1lZCB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgaW5kZWVkIGEgZ2xvYmFsIG5vbi1pbmxpbmUgZnVuY3Rpb24sIGEgdmFsaWQgc3ltYm9sIGluIHRoZSBgdm1saW51eGAga2VybmVsIGltYWdlLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSByZS1yZXZpZXdlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBmb3JtYXQsIG1ha2luZyBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuU28sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSByb3V0ZSBzZWxlY3Rpb24gbG9naWMgd2l0aGluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAuIFNwZWNpZmljYWxseSwgaXQgdmFsaWRhdGVzIHRoZSBjYW5kaWRhdGUgbmV4dGhvcCBhZGRyZXNzZXMgYWdhaW5zdCBgZGV2X2FkZHJfZ2VuaWRgLCB1c2luZyBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudC1zYWZlIGFjY2Vzcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGVzcGVjaWFsbHkgZm9yIG11bHRpcGF0aCBlbnZpcm9ubWVudHMuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgKGBJUF9ST1VURV9NVUxUSVBBVEhgLCBgSVBfQURWQU5DRURfUk9VVEVSYCkgYW5kIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgYXJlIHRoZSB3YXkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTIxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDo0NC45MjUxMjQwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTgyNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZmliX3NlbGVjdF9tdWx0aXBhdGggaW4gSVB2NCBGSUIgcm91dGUgc2VsZWN0aW9uIGxvZ2ljLCBjaGVja2luZyB0aGUgZGV2aWNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoZGV2X2FkZHJfZ2VuaWQpIGFuZCB1c2luZyBSRUFEX09OQ0UgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSB3aGVuIG1hdGNoaW5nIGNhbmRpZGF0ZSBuZXh0aG9wcyB3aXRoIGEgZmxvdyBzb3VyY2UgYWRkcmVzcy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBkdXJpbmcgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTQ6NDQuOTk5MzE1MjY4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0ODAyNTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjQ0Ljk5OTc2ODgzOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NDQ3NTY4MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmOTZjNTg0NWM1MzhkM2I4OTZhZjY4OTljOWVjOGVjNTZjODBiZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODoxMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uZTJiZmMxMWFlYTA5YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjE4NCw2ICsyMTg0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdGJvb2wgdXNlX25laWdoO1xuIFx0aW50IHNjb3JlID0gLTE7XG4gXHRfX2JlMzIgc2FkZHI7XG4rXHRpbnQgZ2VuaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuIFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuQEAgLTIxOTIsNiArMjE5Myw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXG4gXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbiBcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbitcdGdlbmlkID0gc2FkZHIgPyBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkgOiAwO1xuIFxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xuQEAgLTIyMDQsNyArMjIwNiw5IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXG4rXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSArPSAyO1xuIFx0XHRpZiAoaGFzaCBcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxuIFx0XHRcdG5oX3Njb3JlKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNDo0NC45OTk3Njk3MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA3MjE5MDE0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBiZWluZyBhc2tlZCB0byBldmFsdWF0ZSBhIHBhdGNoIGZvciBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGRpdmUgcmlnaHQgaW4gYW5kIGxvb2sgYXQgdGhlIGNvZGUuIEkgY2FuIHNlZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSwgYGdlbmlkYCwgYW5kIHJlZmVyZW5jZXMgYG5oX3NhZGRyX2dlbmlkYCB3aGljaCBpcyBuZXcgdG8gbWUuXG5cbk15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gbG9naWMsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIHNvdXJjZSBhZGRyZXNzIGFmZmluaXR5LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFpbWluZyB0byBtYWtlIG11bHRpcGF0aCBzZWxlY3Rpb24gbW9yZSByb2J1c3Qgd2hlbiBzb3VyY2UgYWRkcmVzc2VzIGFyZSBpbnZvbHZlZC4gVGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyYCwgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYSBnZW5lcmF0aW9uIElEIGNoZWNrIHRvIHRoZSBjb21wYXJpc29uLCBsaWtlbHkgdG8gZ3VhcmQgYWdhaW5zdCBzdGFsZSByb3V0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gbmV0d29yayBjb2RlIOKAkyB1c2luZyBnZW5lcmF0aW9uIElEcyB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdoZW4gbmV0d29yayBkZXZpY2VzIGNoYW5nZSB0aGVpciBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHN5c3RlbSBtaWdodCB0aGluayBvbGQgYWRkcmVzc2VzIGFyZSBzdGlsbCB2YWxpZC4gSSBzZWUgdGhhdCBgZ2VuaWRgIGlzIG9ubHkgc2V0IGlmIGBzYWRkcmAgaXMgbm90IDAsIHNvIGl0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljIGlzIG9ubHkgZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSBhZGRyZXNzIG1hdHRlcnMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgYG5oX3NhZGRyX2dlbmlkYCBpcyBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGRlZmluZWQsIGluaXRpYWxpemVkLCBtb2RpZmllZCwgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUbyBkbyB0aGlzLCBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIG9jY3VycmVuY2VzIG9mIGBuaF9zYWRkcl9nZW5pZGAgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIElQdjQgRklCIHN1YnN5c3RlbSBhbmQgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGJlZm9yZSBJIGNhbiBtYWtlIGEganVkZ2VtZW50IGNhbGwgb24gd2hldGhlciB0aGUgcGF0Y2ggaXMgYSBnb29kIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjU1LjcyMTY3NDU1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MTg0Njk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaF9zYWRkcl9nZW5pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcF9maWIuaD0xMDc9c3RydWN0IGZpYl9uaCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF9maWIuaC0xMTQtXFx0X19iZTMyXFx0XFx0XFx0bmhfc2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfZmliLmg6MTE1OlxcdGludFxcdFxcdFxcdG5oX3NhZGRyX2dlbmlkO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTExNi0jZGVmaW5lIGZpYl9uaF9mYW1pbHlcXHRcXHRuaF9jb21tb24ubmhjX2ZhbWlseVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMTU9X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjctXFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTMyODpcXHRXUklURV9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcl9nZW5pZCwgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI5LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMzM9X19iZTMyIGZpYl9yZXN1bHRfcHJlZnNyYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM0My1cXHRcXHRuaCA9IGNvbnRhaW5lcl9vZihuaGMsIHN0cnVjdCBmaWJfbmgsIG5oX2NvbW1vbik7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNDQ6XFx0XFx0aWYgKFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDUtXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIxNzk9dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjA5LVxcdFxcdGlmIChzYWRkciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjEwOlxcdFxcdCAgICBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMTEtXFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE0OjU3LjgwMzUzMTcyN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU0ODExNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzOlxuXG4qKkRlbHZpbmcgaW50byBgZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGZpYl9zZW1hbnRpY3MuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMTUtMTM1MCBhbmQgdGhlbiBhZ2FpbiBvbiAyMTgwLTIyMjAuIFRpbWUgdG8gZ2V0IHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIGZpcmVkIHVwLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQga2V5IGFyZWFzIHJlbGF0ZWQgdG8uLi4gd2VsbCwgSSBoYXZlIGEgaHVuY2guIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGl0J3MgdmVyeSBsaWtlbHkgdGhlc2Ugc2VjdGlvbnMgd2lsbCBiZSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBvciBvcHRpbWl6YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2Ugc3BlY2lmaWMgbGluZXMgYXJlIGxvY2F0ZWQsIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGNob2ljZXMsIGVkZ2UgY2FzZSBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGltcGxlbWVudGVkIGluIHRoaXMgY29kZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MDguMzUxNjQ5NDIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMDpcXHRcXHRcXHRlcnIgPSBmaWJfY2hlY2tfbmhfbm9uZ3cobmV0LCBuaCwgZXh0YWNrKTtcXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0cmV0dXJuIGVycjtcXG4xMzEzOlxcdH1cXG4xMzE0OlxcdFxcbjEzMTU6XFx0X19iZTMyIGZpYl9pbmZvX3VwZGF0ZV9uaGNfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbjEzMTY6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgc2NvcGUpXFxuMTMxNzpcXHR7XFxuMTMxODpcXHRcXHRzdHJ1Y3QgZmliX25oICpuaDtcXG4xMzE5OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0aWYgKG5oYy1cXHUwMDNlbmhjX2ZhbWlseSAhPSBBRl9JTkVUKVxcbjEzMjI6XFx0XFx0XFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVxcdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XFxuMTMyMzpcXHRcXG4xMzI0OlxcdFxcdG5oID0gY29udGFpbmVyX29mKG5oYywgc3RydWN0IGZpYl9uaCwgbmhfY29tbW9uKTtcXG4xMzI1OlxcdFxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cXHUwMDNlZmliX25oX2RldiwgbmgtXFx1MDAzZWZpYl9uaF9ndzQsIHNjb3BlKTtcXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0V1JJVEVfT05DRShuaC1cXHUwMDNlbmhfc2FkZHIsIHNhZGRyKTtcXG4xMzI4OlxcdFxcdFdSSVRFX09OQ0UobmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkLCBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSk7XFxuMTMyOTpcXHRcXG4xMzMwOlxcdFxcdHJldHVybiBzYWRkcjtcXG4xMzMxOlxcdH1cXG4xMzMyOlxcdFxcbjEzMzM6XFx0X19iZTMyIGZpYl9yZXN1bHRfcHJlZnNyYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuMTMzNDpcXHR7XFxuMTMzNTpcXHRcXHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjID0gcmVzLVxcdTAwM2VuaGM7XFxuMTMzNjpcXHRcXG4xMzM3OlxcdFxcdGlmIChyZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfcHJlZnNyYylcXG4xMzM4OlxcdFxcdFxcdHJldHVybiByZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfcHJlZnNyYztcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKG5oYy1cXHUwMDNlbmhjX2ZhbWlseSA9PSBBRl9JTkVUKSB7XFxuMTM0MTpcXHRcXHRcXHRzdHJ1Y3QgZmliX25oICpuaDtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0XFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbjEzNDQ6XFx0XFx0XFx0aWYgKFJFQURfT05DRShuaC1cXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09XFxuMTM0NTpcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZCkpXFxuMTM0NjpcXHRcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG5oLVxcdTAwM2VuaF9zYWRkcik7XFxuMTM0NzpcXHRcXHR9XFxuMTM0ODpcXHRcXG4xMzQ5OlxcdFxcdHJldHVybiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKG5ldCwgbmhjLCByZXMtXFx1MDAzZWZpLVxcdTAwM2VmaWJfc2NvcGUpO1xcbjEzNTA6XFx0fVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRzdGF0aWMgYm9vbCBmaWJfdmFsaWRfcHJlZnNyYyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBfX2JlMzIgZmliX3ByZWZzcmMpXFxuMTM1MzpcXHR7XFxuMTM1NDpcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY190eXBlICE9IFJUTl9MT0NBTCB8fCAhY2ZnLVxcdTAwM2VmY19kc3QgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MDguMzUxNzU4MTczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTI4NDk3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBmb2N1c2luZyBvbiB3aGF0IEknZCBiZSB0aGlua2luZyBpZiBJIHdlcmUgZGlnZ2luZyBpbnRvIHRoZW0uXG5cbioqQW5hbHl6aW5nIHRoZSBJUHY0IEZJQiBTZW1hbnRpY3MgKExpbmVzIDIxODAtMjIzMCkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGJsb2NrIG9mIGNvZGUg4oCTIGxpbmVzIDIxODAgdGhyb3VnaCAyMjMwIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJltIGltbWVkaWF0ZWx5IG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHdvcmtzIGluIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGhhbmRsaW5nIGEgcHJldHR5IHNwZWNpZmljIHNjZW5hcmlvLCBsaWtlbHkgcmVsYXRlZCB0byByb3V0ZSBsb29rdXAgb3Igcm91dGUgbWFuaXB1bGF0aW9uLCBwcm9iYWJseSB3aXRoIGEgZm9jdXMgb24gSVB2NCwgZ2l2ZW4gdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGNvbnRleHQuXG5cbkknbSBtZW50YWxseSBjcmVhdGluZyBhIGh5cG90aGVzaXM6IElzIHRoaXMgYWJvdXQgcm91dGUgY2FjaGluZywgaGFuZGxpbmcgb2YgbXVsdGlwYXRoIHJvdXRlcywgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyB0eXBlIG9mIHJvdXRlIGF0dHJpYnV0ZT8gUGVyaGFwcyBpdOKAmXMgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHJvdXRlIHByaW9yaXRpZXMgb3IgcHJlZmVyZW5jZS4gQmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGl0J3MgbGlrZWx5IGNvbm5lY3RlZCB0byB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIHRoYXQgKmRlZmluZSogd2hhdCBhIHZhbGlkIHJvdXRlIGlzIGFuZCBob3cgaXTigJlzIGNob3Nlbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLiBUaGUgZ29hbCBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIGNvbmZpcm0gdGhlIGludGVudCBvZiB0aGUgY29kZSwgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgdG8gc2VlIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSByb290IGNhdXNlIGZvciB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBsb2dpY2FsIGZsb3cuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGxvb3BzLCBhbmQgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHJvdXRlIGxvb2t1cHMgYW5kIG1vZGlmaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIEnigJlsbCBsb29rIGZvciBhbnkgb2YgdGhlIHN0YW5kYXJkIEZJQiBBUEkgZnVuY3Rpb25zIHN1Y2ggYXMgYGZpYl9sb29rdXBgLCBgZmliX2FkZF90YWJsZWAsIGBmaWJfZGVsX3RhYmxlYCwgZXRjLiwgaW4gb3JkZXIgdG8gYW5jaG9yIHRoZSBjb2RlIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXkgaGFuZGxpbmcgYSBzcGVjaWZpYyB0eXBlIG9mIHJvdXRlPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBhbmNpbGxhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRlcywgbGlrZSBtZXRyaWNzLCBwb2xpY3kgcm91dGluZyBydWxlcywgb3IgbmV4dC1ob3AgaW5mb3JtYXRpb24/IEFsc28sIEkgd2lsbCBxdWlja2x5IGxvb2sgZm9yIGNvbW1lbnRzIHRoYXQgd2lsbCBleHBsYWluIGFueSBub24tb2J2aW91cyBhc3BlY3Qgb2YgdGhlIGNvZGUgdGhhdCBuZWVkcyBleHBsYW5hdGlvbi5cblxuSSB3aWxsIGFsc28gcXVpY2tseSBsb29rIGZvciBhbnkgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIG9yIG90aGVyIHNlY3Rpb25zIG9mIGNvZGUgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIFRoZSBjb2RlIG1heSB1c2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXNzaXN0IHdpdGggaXRzIGpvYiwgb3IgcmVseSBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHNlY3Rpb24gbWF5IGRlcGVuZCBvbiBvdGhlciBrZXJuZWwgc3RydWN0dXJlcyBvciBzZXR0aW5ncyB0aGF0IEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLlxuXG5NeSBtYWluIGdvYWwgaXMgdG8gc29saWRpZnkgYSBjbGVhciBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgSVB2NCBGSUIuIFRoZW4gSSBjYW4gc3RhcnQgdG8gbG9vayBmb3IgYW55IGRldmlhdGlvbnMgZnJvbSB0aGF0IG1lbnRhbCBtb2RlbCB0aGF0IEkgbWlnaHQgbmVlZCB0byBhY3QgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTIuNTA0NjEwOTAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4yMTgxOlxcdHtcXG4yMTgyOlxcdFxcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXFx1MDAzZWZpO1xcbjIxODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXFx1MDAzZWZpYl9uZXQ7XFxuMjE4NDpcXHRcXHRib29sIHVzZV9uZWlnaDtcXG4yMTg1OlxcdFxcdGludCBzY29yZSA9IC0xO1xcbjIxODY6XFx0XFx0X19iZTMyIHNhZGRyO1xcbjIxODc6XFx0XFx0aW50IGdlbmlkO1xcbjIxODg6XFx0XFxuMjE4OTpcXHRcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuMjE5MDpcXHRcXHRcXHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xcbjIxOTE6XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTI6XFx0XFx0fVxcbjIxOTM6XFx0XFxuMjE5NDpcXHRcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuMjE5NTpcXHRcXHRzYWRkciA9IGZsNCA/IGZsNC1cXHUwMDNlc2FkZHIgOiAwO1xcbjIxOTY6XFx0XFx0Z2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWQpIDogMDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjE5OTpcXHRcXHRcXHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcXG4yMjAwOlxcdFxcbjIyMDE6XFx0XFx0XFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXFxuMjIwMjpcXHRcXHRcXHQgKiBtaW51cyBvbmUgd2hlbiBcXFwiaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXFxcIiBpcyBzZXQuXFxuMjIwMzpcXHRcXHRcXHQgKi9cXG4yMjA0OlxcdFxcdFxcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XFxuMjIwNTpcXHRcXHRcXHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcXG4yMjA2OlxcdFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuMjIwNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjA4OlxcdFxcbjIyMDk6XFx0XFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2XFxuMjIxMDpcXHRcXHRcXHQgICAgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyX2dlbmlkKSA9PSBnZW5pZCBcXHUwMDI2XFx1MDAyNlxcbjIyMTE6XFx0XFx0XFx0ICAgIFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuMjIxMjpcXHRcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbjIyMTM6XFx0XFx0XFx0aWYgKGhhc2ggXFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXFxuMjIxNDpcXHRcXHRcXHRcXHRuaF9zY29yZSsrO1xcbjIyMTU6XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2Mgbmhfc2NvcmUpIHtcXG4yMjE2OlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhfc2VsID0gbmhzZWw7XFxuMjIxNzpcXHRcXHRcXHRcXHRyZXMtXFx1MDAzZW5oYyA9IFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VuaF9jb21tb247XFxuMjIxODpcXHRcXHRcXHRcXHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFxcdTAwMjZcXHUwMDI2IG5oX3Njb3JlID09IDEpKVxcbjIyMTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMjA6XFx0XFx0XFx0XFx0c2NvcmUgPSBuaF9zY29yZTtcXG4yMjIxOlxcdFxcdFxcdH1cXG4yMjIyOlxcdFxcbjIyMjM6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbjIyMjQ6XFx0fVxcbjIyMjU6XFx0I2VuZGlmXFxuMjIyNjpcXHRcXG4yMjI3OlxcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4yMjI4OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIyMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToxMi41MDQ3MjY5MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg2MjI1MTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mIGBzdHJ1Y3QgZmliX25oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgc3RydWN0IGZpYl9uaGAuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgaW5zdGFudGlhdGVkIGFuZCBob3cgaXMgaXRzIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSXMgaXQgYSBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0dXJlPyBJcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXI/IElzIGl0IGVtYmVkZGVkIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmU/IEtub3dpbmcgaXRzIGFsbG9jYXRpb24gbWV0aG9kIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmliIG5leHQgaG9wcyBhcmUgY3JlYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTQuMzY2OTgxNjQ2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg0MTczNDE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfbmguKmt6YWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjE2LjU1MTE2NTA2M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjU0MzM4MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgTWVtb3J5IEFsbG9jYXRpb24gb2YgYGZpYl9pbmZvYCBhbmQgYGZpYl9uaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIGluIGBmaWJfc2VtYW50aWNzLmNgIHRoZXNlIHN0cnVjdHVyZXMsIGBzdHJ1Y3QgZmliX2luZm9gIGFuZCBgc3RydWN0IGZpYl9uaGAsIGFyZSBhY3R1YWxseSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGJ1dCB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy4gSSBrbm93IEkgY291bGQgdXNlIGEgZGVidWdnZXIsIG9yIHBlcmhhcHMgdHJ5IGEgbW9yZSB0YXJnZXRlZCBzZWFyY2guIEknbSB0aGlua2luZyB0aGUgc2ltcGxlc3QgYXBwcm9hY2ggZm9yIGEgcXVpY2sgYW5zd2VyIGlzIGxpa2VseSBhIGNvZGUgc2VhcmNoLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBvY2N1cnJlbmNlcyBvZiBlaXRoZXIgc3RydWN0dXJlIG5hbWUgaW4gYWxsb2NhdGlvbiBjb250ZXh0cy4gTGV0J3Mgc3RhcnQgd2l0aCBgZmliX3NlbWFudGljcy5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgbGlmZXRpbWVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdHJ1Y3RzIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MTkuODA1NTA1MDIxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIyNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM9MTE5ND1pbnQgZmliX3RhYmxlX2luc2VydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfdGFibGUgKnRiLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM6MTIxMjpcXHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVxcdGlmIChJU19FUlIoZmkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjE5Ljg1NTczNzY2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjEzNDE5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byBJUHY0IEZJQiBTZW1hbnRpY3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGUgSVB2NCBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgd29ya3MuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZmliX2NyZWF0ZV9pbmZvYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCBhIGNyaXRpY2FsIHBhcnQgb2YgaXQg4oCTIGluIHNldHRpbmcgdXAgRklCIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSB0byBiZXR0ZXIgZ3Jhc3AgW2luc2VydCB5b3VyIHNwZWNpZmljIG5lZWQsIGUuZy4sIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcm91dGUgaW5zdGFsbGF0aW9ucywgaG93IHBvbGljaWVzIGFyZSBhcHBsaWVkLCBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3NdLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgcHJvdG9jb2xzLiBJIGFudGljaXBhdGUgc2VlaW5nIGhvdyByb3V0ZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIHJvdXRlIHNlbGVjdGlvbiBwcm9jZXNzIGlzIGluaXRpYXRlZC4gSG9wZWZ1bGx5LCBJJ2xsIHVuY292ZXIgc29tZSBvZiB0aGUgbnVhbmNlcyBvZiB0aGUgRklCJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgY2FuIGNvbmZpcm0gdGhlIGJlaGF2aW9yIGZvciBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgbmVlZCwgZS5nLiBob3cgbmV3IHJvdXRlcyBhcmUgY3JlYXRlZCwgd2hhdCBoYXBwZW5zIG9uIHJvdXRlIGNvbmZsaWN0cyBvciByb3V0ZSBjaGFuZ2VzXS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjIyLjg3NzA4MTc2MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzY6XFx0c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRpbnQgZXJyO1xcbjEzODA6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IE5VTEw7XFxuMTM4MTpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBOVUxMO1xcbjEzODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpvZmk7XFxuMTM4MzpcXHRcXHRpbnQgbmhzID0gMTtcXG4xMzg0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGNmZy1cXHUwMDNlZmNfbmxpbmZvLm5sX25ldDtcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4xMzg3OlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX3R5cGUgXFx1MDAzZSBSVE5fTUFYKVxcbjEzODg6XFx0XFx0XFx0Z290byBlcnJfaW52YWw7XFxuMTM4OTpcXHRcXG4xMzkwOlxcdFxcdC8qIEZhc3QgY2hlY2sgdG8gY2F0Y2ggdGhlIG1vc3Qgd2VpcmQgY2FzZXMgKi9cXG4xMzkxOlxcdFxcdGlmIChmaWJfcHJvcHNbY2ZnLVxcdTAwM2VmY190eXBlXS5zY29wZSBcXHUwMDNlIGNmZy1cXHUwMDNlZmNfc2NvcGUpIHtcXG4xMzkyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgc2NvcGVcXFwiKTtcXG4xMzkzOlxcdFxcdFxcdGdvdG8gZXJyX2ludmFsO1xcbjEzOTQ6XFx0XFx0fVxcbjEzOTU6XFx0XFxuMTM5NjpcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IChSVE5IX0ZfREVBRCB8IFJUTkhfRl9MSU5LRE9XTikpIHtcXG4xMzk3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4xMzk4OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBydG1fZmxhZ3MgLSBjYW4gbm90IGNvbnRhaW4gREVBRCBvciBMSU5LRE9XTlxcXCIpO1xcbjEzOTk6XFx0XFx0XFx0Z290byBlcnJfaW52YWw7XFxuMTQwMDpcXHRcXHR9XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKSB7XFxuMTQwMzpcXHRcXHRcXHRpZiAoIWNmZy1cXHUwMDNlZmNfbXgpIHtcXG4xNDA0OlxcdFxcdFxcdFxcdGZpID0gZmliX2ZpbmRfaW5mb19uaChuZXQsIGNmZyk7XFxuMTQwNTpcXHRcXHRcXHRcXHRpZiAoZmkpIHtcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2ZmktXFx1MDAzZWZpYl90cmVlcmVmKTtcXG4xNDA3OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmaTtcXG4xNDA4OlxcdFxcdFxcdFxcdH1cXG4xNDA5OlxcdFxcdFxcdH1cXG4xNDEwOlxcdFxcbjE0MTE6XFx0XFx0XFx0bmggPSBuZXh0aG9wX2ZpbmRfYnlfaWQobmV0LCBjZmctXFx1MDAzZWZjX25oX2lkKTtcXG4xNDEyOlxcdFxcdFxcdGlmICghbmgpIHtcXG4xNDEzOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5leHRob3AgaWQgZG9lcyBub3QgZXhpc3RcXFwiKTtcXG4xNDE0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ludmFsO1xcbjE0MTU6XFx0XFx0XFx0fVxcbjE0MTY6XFx0XFx0XFx0bmhzID0gMDtcXG4xNDE3OlxcdFxcdH1cXG4xNDE4OlxcdFxcbjE0MTk6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4xNDIwOlxcdFxcdGlmIChjZmctXFx1MDAzZWZjX21wKSB7XFxuMTQyMTpcXHRcXHRcXHRuaHMgPSBmaWJfY291bnRfbmV4dGhvcHMoY2ZnLVxcdTAwM2VmY19tcCwgY2ZnLVxcdTAwM2VmY19tcF9sZW4sIGV4dGFjayk7XFxuMTQyMjpcXHRcXHRcXHRpZiAobmhzID09IDApXFxuMTQyMzpcXHRcXHRcXHRcXHRnb3RvIGVycl9pbnZhbDtcXG4xNDI0OlxcdFxcdH1cXG4xNDI1OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyMi44NzcxOTE1MDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE1MjcwMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZmliX2NyZWF0ZV9pbmZvYCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZpYl9jcmVhdGVfaW5mb2Agc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgYGZpYl9jcmVhdGVfaW5mb2AgbGlrZWx5IGhvbGRzIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGEgbmV3IEZpYmVyIChvciwgaW4gc29tZSBjb250ZXh0cywgYSBGb3J3YXJkIEluZm9ybWF0aW9uIEJhc2UgLSBGSUIgLSBlbnRyeSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlYWNoIGZpZWxkIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQuIFNwZWNpZmljYWxseSwgd2hhdCBwYXJ0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVsb25nIHRvIHRoZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiB0aGF0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYSBmaWJlci4gXG5cbklzIGl0IHVzaW5nIGEgZml4ZWQtc2l6ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IG9yIGR5bmFtaWMgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpdHNlbGY/IEFyZSB0aGVyZSBwb2ludGVycyB0byBvdGhlciBhbGxvY2F0ZWQgbWVtb3J5PyBJZiBzbywgd2hhdCBhcmUgdGhlIHNpemVzIG9mIHRob3NlIGFzc29jaWF0ZWQgbWVtb3J5IGJsb2Nrcz8gQXJlIHRoZXJlIGVtYmVkZGVkIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYGZpYl9jcmVhdGVfaW5mb2AgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3I/IElzIHRoZXJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2VzIGV4aXN0P1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBvciBpZiB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZyZXF1ZW50bHkgd2l0aGluIGEgaGlnaC10aHJvdWdocHV0IHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBvciwgYXQgYSBtaW5pbXVtLCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcHJvcGVybHkgZGVhbGxvY2F0ZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgdGhlIGJldHRlciBJIGNhbiBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UsIHByZXZlbnQgbWVtb3J5IGlzc3VlcywgYW5kIGVuc3VyZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZW5zdXJlIHRoaXMgb3BlcmF0aW9uIGlzIGVmZmljaWVudCwgcm9idXN0LCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yLCBldmVuIHdvcnNlLCBzdGFiaWxpdHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyNi4wMjk4OTQzNDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDI2OlxcdFxcbjE0Mjc6XFx0XFx0ZmliX2luZm9faGFzaF9ncm93KG5ldCk7XFxuMTQyODpcXHRcXG4xNDI5OlxcdFxcdGZpID0ga3phbGxvY19mbGV4KCpmaSwgZmliX25oLCBuaHMpO1xcbjE0MzA6XFx0XFx0aWYgKCFmaSkge1xcbjE0MzE6XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTQzMjpcXHRcXHRcXHRnb3RvIGZhaWx1cmU7XFxuMTQzMzpcXHRcXHR9XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGZpLVxcdTAwM2VmaWJfbWV0cmljcyA9IGlwX2ZpYl9tZXRyaWNzX2luaXQoY2ZnLVxcdTAwM2VmY19teCwgY2ZnLVxcdTAwM2VmY19teF9sZW4sIGV4dGFjayk7XFxuMTQzNjpcXHRcXHRpZiAoSVNfRVJSKGZpLVxcdTAwM2VmaWJfbWV0cmljcykpIHtcXG4xNDM3OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZmktXFx1MDAzZWZpYl9tZXRyaWNzKTtcXG4xNDM4OlxcdFxcdFxcdGtmcmVlKGZpKTtcXG4xNDM5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTQ0MDpcXHRcXHR9XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdGZpLVxcdTAwM2VmaWJfbmV0ID0gbmV0O1xcbjE0NDM6XFx0XFx0ZmktXFx1MDAzZWZpYl9wcm90b2NvbCA9IGNmZy1cXHUwMDNlZmNfcHJvdG9jb2w7XFxuMTQ0NDpcXHRcXHRmaS1cXHUwMDNlZmliX3Njb3BlID0gY2ZnLVxcdTAwM2VmY19zY29wZTtcXG4xNDQ1OlxcdFxcdGZpLVxcdTAwM2VmaWJfZmxhZ3MgPSBjZmctXFx1MDAzZWZjX2ZsYWdzO1xcbjE0NDY6XFx0XFx0ZmktXFx1MDAzZWZpYl9wcmlvcml0eSA9IGNmZy1cXHUwMDNlZmNfcHJpb3JpdHk7XFxuMTQ0NzpcXHRcXHRmaS1cXHUwMDNlZmliX3ByZWZzcmMgPSBjZmctXFx1MDAzZWZjX3ByZWZzcmM7XFxuMTQ0ODpcXHRcXHRmaS1cXHUwMDNlZmliX3R5cGUgPSBjZmctXFx1MDAzZWZjX3R5cGU7XFxuMTQ0OTpcXHRcXHRmaS1cXHUwMDNlZmliX3RiX2lkID0gY2ZnLVxcdTAwM2VmY190YWJsZTtcXG4xNDUwOlxcdFxcbjE0NTE6XFx0XFx0ZmktXFx1MDAzZWZpYl9uaHMgPSBuaHM7XFxuMTQ1MjpcXHRcXHRpZiAobmgpIHtcXG4xNDUzOlxcdFxcdFxcdGlmICghbmV4dGhvcF9nZXQobmgpKSB7XFxuMTQ1NDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXh0aG9wIGhhcyBiZWVuIGRlbGV0ZWRcXFwiKTtcXG4xNDU1OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTQ1NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0NTc6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xNDU4OlxcdFxcdFxcdFxcdGZpLVxcdTAwM2VuaCA9IG5oO1xcbjE0NTk6XFx0XFx0XFx0fVxcbjE0NjA6XFx0XFx0fSBlbHNlIHtcXG4xNDYxOlxcdFxcdFxcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xcbjE0NjI6XFx0XFx0XFx0XFx0bmV4dGhvcF9uaC1cXHUwMDNlbmhfcGFyZW50ID0gZmk7XFxuMTQ2MzpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbXApXFxuMTQ2NjpcXHRcXHRcXHRcXHRlcnIgPSBmaWJfZ2V0X25ocyhmaSwgY2ZnLVxcdTAwM2VmY19tcCwgY2ZnLVxcdTAwM2VmY19tcF9sZW4sIGNmZyxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4xNDY4OlxcdFxcdFxcdGVsc2VcXG4xNDY5OlxcdFxcdFxcdFxcdGVyciA9IGZpYl9uaF9pbml0KG5ldCwgZmktXFx1MDAzZWZpYl9uaCwgY2ZnLCAxLCBleHRhY2spO1xcbjE0NzA6XFx0XFx0fVxcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRpZiAoZXJyICE9IDApXFxuMTQ3MzpcXHRcXHRcXHRnb3RvIGZhaWx1cmU7XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdGlmIChmaWJfcHJvcHNbY2ZnLVxcdTAwM2VmY190eXBlXS5lcnJvcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNToyNi4wMzAwMDcyMDFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMzMzA4Mjk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXggZm9yIE11bHRpcGF0aCBSb3V0ZSBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBmaSA9IGt6YWxsb2NfZmxleCgqZmksIGZpYl9uaCwgbmhzKTtgLCBtZWFuaW5nIGBmaWAgYW5kIGl0cyBmbGV4IGFycmF5IGBmaWJfbmhgIGdldCB6ZXJvLWFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgdGhlcmUncyBgZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7YCDigJMgYSBsb2NhbCBgZ2VuaWRgIGluaXRpYWxpemVkIGNvbmRpdGlvbmFsbHkuIEkga25vdyBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZGAgZ2V0cyBpbml0aWFsaXplZCB0byAwIGR1cmluZyBhbGxvY2F0aW9uIChvciB1cGRhdGVkIGJ5IGBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyYCksIGFuZCB0aGUgY29kZSBjb21wYXJlcyB0d28gaW5pdGlhbGl6ZWQgaW50ZWdlcnMgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJfZ2VuaWQpID09IGdlbmlkYCwgYXMgd2VsbCBhcyBjb21wYXJpbmcgYF9fYmUzMmAgd2l0aCBgUkVBRF9PTkNFKG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyYC5cblxuTm93LCB3aGF0IGV4YWN0bHkgZGlkIHRoYXQgcGF0Y2ggY2hhbmdlLCBhbmQgKndoeSo/IExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgbG9va2luZyBiYWNrIGF0IGNvbW1pdCBgZmY5NmM1ODQ1YzUzOGQzYjg5NmFmNjg5OWM5ZWM4ZWM1NmM4MGJmYWAuIEluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIHdlJ3JlIGRlYWxpbmcgd2l0aCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAgY2FjaGVzIHRoZSBwcmVmZXJyZWQgc291cmNlIGFkZHJlc3MgZm9yIGEgcGFydGljdWxhciBuZXh0IGhvcC4gSG93ZXZlciwgdGhlIGdlbmVyYXRpb24gSUQsIGBuZXQtXHUwMDNlaXB2NC5kZXZfYWRkcl9nZW5pZGAsIGdldHMgYnVtcGVkIGlmIGRldmljZSBhZGRyZXNzZXMgY2hhbmdlLlxuXG5UaGUgcHJldmlvdXMgY29kZSBoYWQgdGhpczogYGlmIChzYWRkciBcdTAwMjZcdTAwMjYgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciA9PSBzYWRkcilgLiBJdCBkaXJlY3RseSBjb21wYXJlZCB0aGUgc291cmNlIGFkZHJlc3Mgd2l0aG91dCBjaGVja2luZyBpZiB0aGUgY2FjaGVkIGBuaF9zYWRkcmAgd2FzIHN0aWxsIHZhbGlkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gSUQgKGBuaF9zYWRkcl9nZW5pZGApLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGBnZW5pZGAgY2hlY2sgdXNpbmcgYXRvbWljIHJlYWRzLiBTcGVjaWZpY2FsbHksIGl0IGFkZHM6XG4gKiBgZ2VuaWQgPSBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDA7YCBhbmRcbiAqIGBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcl9nZW5pZCkgPT0gZ2VuaWQgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcmBcblxuVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHBvdGVudGlhbCBzdGFsZSBlbnRyaWVzIGluIHRoZSBjYWNoZSwgYW5kIGl0IHVzZXMgYFJFQURfT05DRWAgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGdlbmVyYXRpb24gSUQgbWF5IGJlIHVwZGF0ZWQgY29uY3VycmVudGx5LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTGV0J3Mgc2VlOlxuXG4xLiAgYGdlbmlkYCBpcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5IHRvIGBzYWRkciA/IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkKSA6IDBgLiBHb29kLiBObyB3b3JyaWVzIHRoZXJlLlxuMi4gIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyX2dlbmlkYCBpcyBpbml0aWFsaXplZCB0byAwIG9uIGFsbG9jYXRpb24gdmlhIGBremFsbG9jX2ZsZXhgLCBvciBpdCdzIHVwZGF0ZWQgYXRvbWljYWxseSB3aXRoIFdSSVRFXFxfT05DRSBpbiBgZmliX2luZm9fdXBkYXRlX25oY19zYWRkcmAuXG4zLiAgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIGlzIGFsc28gaW5pdGlhbGl6ZWQgdG8gMCBvbiBhbGxvY2F0aW9uIGFuZCB1cGRhdGVkIHVzaW5nIFdSSVRFX09OQ0UuXG40LiAgTm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG41LiAgVGhlcmUgYXJlIG5vIG1lbW9yeSBidWZmZXJzLCBwYWNrZXQgYnVmZmVycywgb3Igc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgcmVzaXplZC5cbjYuICBEb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHNraXBzIGluaXRpYWxpemF0aW9uIG9mIGFueXRoaW5nPyBUaGUgYHJlcy1cdTAwM2VuaF9zZWxgIGFuZCBgcmVzLVx1MDAzZW5oY2AgYXJlIHNldCBpZiBgc2NvcmUgXHUwMDNjIG5oX3Njb3JlYC4gSWYgbm8gbmV4dCBob3AgbWF0Y2hlcywgdGhleSBtaWdodCByZW1haW4gaW4gdGhlaXIgcHJldmlvdXMgc3RhdGUgYmVmb3JlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgY2FsbGVkLiBOZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gT3ZlcmFsbCwgaXQgc2VlbXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6MzkuMzYwODQxNDg0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzODk4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX2ZpYi5oPTU3ND1pbnQgZmliX2NoZWNrX25oKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaCAqbmgsIHUzMiB0YWJsZSwgdTggc2NvcGUsXFxuaW5jbHVkZS9uZXQvaXBfZmliLmgtNTc1LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oOjU3Njp2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxcbmluY2x1ZGUvbmV0L2lwX2ZpYi5oLTU3Ny1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCk7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjE1Mj1zdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTc5OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjIyNz12b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIzNzpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMzgtXFx0fVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMTk4PWlwX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjIyMDY6XFx0XFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTIyMDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyB8PSBJUFNLQl9NVUxUSVBBVEg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjE1OjQxLjAxNDc0NjcyMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTIxNjA5ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZmliX3NlbGVjdF9wYXRoYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgaW4gb24gYGZpYl9zZWxlY3RfcGF0aGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjI3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gY2hhc2luZyBkb3duIHBhdGggc2VsZWN0aW9uIGxvZ2ljIGluIHRoZSBGSUIuIEkndmUgZ290IGEgaHVuY2ggc29tZXRoaW5nJ3Mgb2ZmIHRoZXJlLCBzbyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3Qgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuIE5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBwYXRoIHNlbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODoxNTo0My4xMzYzNTkwMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjc6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyOTpcXHR7XFxuMjIzMDpcXHRcXHRpZiAoZmw0LVxcdTAwM2VmbG93aTRfb2lmKVxcbjIyMzE6XFx0XFx0XFx0Z290byBjaGVja19zYWRkcjtcXG4yMjMyOlxcdFxcbjIyMzM6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG4yMjM0OlxcdFxcdGlmIChmaWJfaW5mb19udW1fcGF0aChyZXMtXFx1MDAzZWZpKSBcXHUwMDNlIDEpIHtcXG4yMjM1OlxcdFxcdFxcdGludCBoID0gZmliX211bHRpcGF0aF9oYXNoKG5ldCwgZmw0LCBza2IsIE5VTEwpO1xcbjIyMzY6XFx0XFxuMjIzNzpcXHRcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxuMjIzODpcXHRcXHR9XFxuMjIzOTpcXHRcXHRlbHNlXFxuMjI0MDpcXHQjZW5kaWZcXG4yMjQxOlxcdFxcdGlmICghcmVzLVxcdTAwM2VwcmVmaXhsZW4gXFx1MDAyNlxcdTAwMjZcXG4yMjQyOlxcdFxcdCAgICByZXMtXFx1MDAzZXRhYmxlLVxcdTAwM2V0Yl9udW1fZGVmYXVsdCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjZcXG4yMjQzOlxcdFxcdCAgICByZXMtXFx1MDAzZXR5cGUgPT0gUlROX1VOSUNBU1QpXFxuMjI0NDpcXHRcXHRcXHRmaWJfc2VsZWN0X2RlZmF1bHQoZmw0LCByZXMpO1xcbjIyNDU6XFx0XFxuMjI0NjpcXHRjaGVja19zYWRkcjpcXG4yMjQ3OlxcdFxcdGlmICghZmw0LVxcdTAwM2VzYWRkcikge1xcbjIyNDg6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmwzbWRldjtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0XFx0bDNtZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBmbDQtXFx1MDAzZWZsb3dpNF9sM21kZXYpO1xcbjIyNTE6XFx0XFxuMjI1MjpcXHRcXHRcXHRpZiAoIWwzbWRldiB8fFxcbjIyNTM6XFx0XFx0XFx0ICAgIGwzbWRldl9tYXN0ZXJfZGV2X3JjdShGSUJfUkVTX0RFVigqcmVzKSkgPT0gbDNtZGV2KVxcbjIyNTQ6XFx0XFx0XFx0XFx0Zmw0LVxcdTAwM2VzYWRkciA9IGZpYl9yZXN1bHRfcHJlZnNyYyhuZXQsIHJlcyk7XFxuMjI1NTpcXHRcXHRcXHRlbHNlXFxuMjI1NjpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihsM21kZXYsIDAsIFJUX1NDT1BFX0xJTkspO1xcbjIyNTc6XFx0XFx0fVxcbjIyNTg6XFx0fVxcbjIyNTk6XFx0XFxuMjI2MDpcXHRpbnQgX19uZXRfaW5pdCBmaWI0X3NlbWFudGljc19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4yMjYxOlxcdHtcXG4yMjYyOlxcdFxcdHVuc2lnbmVkIGludCBoYXNoX2JpdHMgPSA0O1xcbjIyNjM6XFx0XFxuMjI2NDpcXHRcXHRuZXQtXFx1MDAzZWlwdjQuZmliX2luZm9faGFzaCA9IGZpYl9pbmZvX2hhc2hfYWxsb2MoaGFzaF9iaXRzKTtcXG4yMjY1OlxcdFxcdGlmICghbmV0LVxcdTAwM2VpcHY0LmZpYl9pbmZvX2hhc2gpXFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6NDMuMTM2NDc3Mzc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMTA4MzY3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3RhbmRhcmQgSVB2NCBGSUIgcm91dGUgbG9va3VwIGxvZ2ljLiBUaGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGdlbmVyYXRpb24gSUQgY2hlY2sgYW5kIGBSRUFEX09OQ0VgIHdyYXBwZXJzIHdoZW4gY29tcGFyaW5nIHRoZSBjYWNoZWQgc291cmNlIGFkZHJlc3MgKGBuaF9zYWRkcmApIHdpdGggdGhlIGZsb3cncyBzb3VyY2UgYWRkcmVzcyAoYGZsNC1cdTAwM2VzYWRkcmApLiBJdCdzIGFsbCB2ZXJ5IGNvbnRhaW5lZC5cblxuVGhlcmUgYXJlIG5vIHJlZCBmbGFncyBoZXJlLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJJ3ZlIGRvdWJsZS1jaGVja2VkOlxuXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBBYnNvbHV0ZWx5IG5vIG5ldyBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgYGdlbmlkYCB2YXJpYWJsZSBpcyBhIHN0YWNrIHZhcmlhYmxlIGFuZCBpcyBpbml0aWFsaXplZCBhdCBpdHMgZGVjbGFyYXRpb24uIFRoZSBgbmhfc2FkZHJfZ2VuaWRgIGZpZWxkIGlzIHByZS1leGlzdGluZyBhbmQgbWFuYWdlZCBjb3JyZWN0bHkuXG4qICAgKipVc2VyIFNwYWNlIEludGVyYWN0aW9uczoqKiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgc28gbm8gd29ycmllcyBhYm91dCBwYWRkaW5nIGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdGhlcmUuXG4qICAgKipCdWZmZXIgSGFuZGxpbmc6KiogTm8gYnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2FsY3VsYXRpb25zIGFyZSBpbnZvbHZlZC5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gc2F5IHRoYXQgS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS01TQU4gaXMgcHJpbWFyaWx5IHVzZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGZyb20gc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIGFwcGx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgYWRlcXVhdGUgZm9yIHRlc3Rpbmcgcm91dGluZyBhbmQgY29uY3VycmVuY3kvZGF0YSByYWNlIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIE5vdCBhcHBsaWNhYmxlOyB0aGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBEZXBlbmRlbmNpZXM6KiogVGhlcmUncyBubyBicmFuY2hpbmcgb3IgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgaXNzdWVzLlxuNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3MsIGxlbmd0aCBjYWxjdWxhdGlvbnMsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY3JpdGVyaWEgZm9yICpub3QqIG5lZWRpbmcgS01TQU46XG5cbiogICAqKk91dC1vZi1Cb3VuZHMvVUFGL0RlYWRsb2NrczoqKiBUaGUgY29kZSBjaGFuZ2VzIGRvbid0IHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuKiAgICoqWmVyb2VkL0luaXRpYWxpemVkIFN0cnVjdHVyZXM6KiogQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSBpbml0aWFsaXplZC5cbiogICAqKk5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2s6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgYWJvdmUsIHRoaXMgaXMgYSBjbGVhci1jdXQgY2FzZS4gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjIsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6MTU6NTAuNDQ3MzE3MzMyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgbXVsdGlwYXRoIHJvdXRlIHNlbGVjdGlvbiBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gdmFsaWRhdGUgdGhlIG5leHRob3Agc291cmNlIGFkZHJlc3MgZ2VuZXJhdGlvbiBJRCAoYG5oX3NhZGRyX2dlbmlkYCkgYWdhaW5zdCB0aGUgY3VycmVudCBuZXR3b3JrIG5hbWVzcGFjZSBnZW5lcmF0aW9uIElEIChgbmV0LVxcdTAwM2VpcHY0LmRldl9hZGRyX2dlbmlkYCksIGFuZCBhZGRzIGBSRUFEX09OQ0UoKWAgYW5ub3RhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzZXMuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgZmllbGRzIGludm9sdmVkIChgZ2VuaWRgLCBgbmhfc2FkZHJfZ2VuaWRgLCBgbmhfc2FkZHJgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGdlbmlkYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCBgc3RydWN0IGZpYl9uaGAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX2ZsZXgoKWAgZHVyaW5nIEZJQiBpbmZvIGNyZWF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjb3B5IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgaW5mb2xlYWtzLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBkYXRhLXJhY2UgY29uY2VybnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBtdWx0aXBhdGggcm91dGUgc2VsZWN0aW9uIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byB2YWxpZGF0ZSB0aGUgbmV4dGhvcCBzb3VyY2UgYWRkcmVzcyBnZW5lcmF0aW9uIElEIChgbmhfc2FkZHJfZ2VuaWRgKSBhZ2FpbnN0IHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlIGdlbmVyYXRpb24gSUQgKGBuZXQtXFx1MDAzZWlwdjQuZGV2X2FkZHJfZ2VuaWRgKSwgYW5kIGFkZHMgYFJFQURfT05DRSgpYCBhbm5vdGF0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3Nlcy5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBmaWVsZHMgaW52b2x2ZWQgKGBnZW5pZGAsIGBuaF9zYWRkcl9nZW5pZGAsIGBuaF9zYWRkcmApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkOiBgZ2VuaWRgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIGBzdHJ1Y3QgZmliX25oYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2NfZmxleCgpYCBkdXJpbmcgRklCIGluZm8gY3JlYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNvcHkgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBvciBpbmZvbGVha3MuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGRhdGEtcmFjZSBjb25jZXJucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL3N0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[1] Phase: Succeeded StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 08:16:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 08:16:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2] Phase: Succeeded StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 08:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 08:16:04 +0000 UTC FinishedAt: 2026-09-15 08:16:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzlzw/series-workflowdzlzw-convert-artifact-1263500538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 08:16:15 +0000 UTC FinishedAt: 2026-09-15 08:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 08:16:15 +0000 UTC FinishedAt: 2026-09-15 08:32:27 +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:*69dd3950-b253-4335-af13-20e4e267cc6d,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-workflowdzlzw/series-workflowdzlzw-convert-artifact-1263500538/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": "9a1ea455-70c3-4e85-a22c-908a573bb469", "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-workflowdzlzw/series-workflowdzlzw-build-action-3598273960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 08:16:15 +0000 UTC FinishedAt: 2026-09-15 08:32:17 +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:*69dd3950-b253-4335-af13-20e4e267cc6d,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-workflowdzlzw/series-workflowdzlzw-convert-artifact-1263500538/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": "9a1ea455-70c3-4e85-a22c-908a573bb469", "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-workflowdzlzw/series-workflowdzlzw-build-action-3598273960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 08:32:27 +0000 UTC FinishedAt: 2026-09-15 08:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 08:32:27 +0000 UTC FinishedAt: 2026-09-15 08:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 08:32:27 +0000 UTC FinishedAt: 2026-09-15 08:32:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 08:32:27 +0000 UTC FinishedAt: 2026-09-15 08:32:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzlzw/series-workflowdzlzw-convert-artifact-1212787541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 08:32:37 +0000 UTC FinishedAt: 2026-09-15 08:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 08:32:37 +0000 UTC FinishedAt: 2026-09-15 08:34:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a1ea455-70c3-4e85-a22c-908a573bb469,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-workflowdzlzw/series-workflowdzlzw-build-action-3598273960/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-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 08:34:34 +0000 UTC FinishedAt: 2026-09-15 08:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 08:34:34 +0000 UTC FinishedAt: 2026-09-15 08:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 08:34:34 +0000 UTC FinishedAt: 2026-09-15 08:50:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 08:34:34 +0000 UTC FinishedAt: 2026-09-15 08:50: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:*69dd3950-b253-4335-af13-20e4e267cc6d,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-workflowdzlzw/series-workflowdzlzw-convert-artifact-1212787541/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": "01441e57-4298-44b0-9cc4-8e57256b2fdc", "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-workflowdzlzw/series-workflowdzlzw-build-action-2788871393/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 08:34:34 +0000 UTC FinishedAt: 2026-09-15 08:50:32 +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:*69dd3950-b253-4335-af13-20e4e267cc6d,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-workflowdzlzw/series-workflowdzlzw-convert-artifact-1212787541/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": "01441e57-4298-44b0-9cc4-8e57256b2fdc", "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-workflowdzlzw/series-workflowdzlzw-build-action-2788871393/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 08:50:42 +0000 UTC FinishedAt: 2026-09-15 08:50:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 08:50:42 +0000 UTC FinishedAt: 2026-09-15 08:50:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 08:50:42 +0000 UTC FinishedAt: 2026-09-15 08:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 08:50:42 +0000 UTC FinishedAt: 2026-09-15 08:52:41 +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:*01441e57-4298-44b0-9cc4-8e57256b2fdc,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-workflowdzlzw/series-workflowdzlzw-build-action-2788871393/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-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"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:*9a1ea455-70c3-4e85-a22c-908a573bb469,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*01441e57-4298-44b0-9cc4-8e57256b2fdc,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-workflowdzlzw/series-workflowdzlzw-build-action-3598273960/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-workflowdzlzw/series-workflowdzlzw-build-action-2788871393/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 08:53:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 08:53:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"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-workflowdzlzw/series-workflowdzlzw-convert-artifact-4193730874/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 08:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 08:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 08:52:51 +0000 UTC FinishedAt: 2026-09-15 08:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 08:53:12 +0000 UTC FinishedAt: 2026-09-15 11:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzlzw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ROUTE_MULTIPATH","IP_ADVANCED_ROUTER"],"series_id":"8d50c3cf-7c70-4dbd-964d-41903facb8c9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 08:53:12 +0000 UTC FinishedAt: 2026-09-15 11:57:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a1ea455-70c3-4e85-a22c-908a573bb469,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*01441e57-4298-44b0-9cc4-8e57256b2fdc,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-workflowdzlzw/series-workflowdzlzw-build-action-3598273960/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-workflowdzlzw/series-workflowdzlzw-build-action-2788871393/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-workflowdzlzw/series-workflowdzlzw-convert-artifact-4193730874/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,}