Name: series-workflowvbs5t Phase: Succeeded StartedAt: 2026-09-04 10:19:53 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[0] Phase: Succeeded StartedAt: 2026-09-04 10:19:53 +0000 UTC FinishedAt: 2026-09-04 11:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 10:19:53 +0000 UTC FinishedAt: 2026-09-04 11:02:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "a64a20fb270f244a25c16c184c015b104278a06f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "a64a20fb270f244a25c16c184c015b104278a06f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "152900a9-1075-4940-8f82-b361428bcf0c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_find_ie", "p54_beacon_format_ie_tim", "p54_pspoll_workaround", "p54_beacon_update", "p54_rx", "p54_bss_info_changed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fZm9ybWF0X2llX3RpbSYjMzQ7LAogICAgJiMzNDtwNTRfcHNwb2xsX3dvcmthcm91bmQmIzM0OywKICAgICYjMzQ7cDU0X2JlYWNvbl91cGRhdGUmIzM0OywKICAgICYjMzQ7cDU0X3J4JiMzNDssCiAgICAmIzM0O3A1NF9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlIG9yIHJlYWRpbmcgcGFzdCB0aGUgc2tiIGRhdGEgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuaW5kZXggNTdhNjIxMDhjYmMzNS4uZDNlMTc3NjE3NGY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbkBAIC03Niw3ICYjNDM7NzYsNyBAQCB1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0dTggKnBvcywgKmVuZDtcbiBcbi1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpKVxuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwb3MgPSAodTggKiltZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fZm9ybWF0X2llX3RpbSYjMzQ7LAogICAgJiMzNDtwNTRfcHNwb2xsX3dvcmthcm91bmQmIzM0OywKICAgICYjMzQ7cDU0X2JlYWNvbl91cGRhdGUmIzM0OywKICAgICYjMzQ7cDU0X3J4JiMzNDssCiAgICAmIzM0O3A1NF9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jCmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYwpAQCAtNzYsNyAmIzQzOzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKQogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXU4ICpwb3MsICplbmQ7CiAKLQlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpKQomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKCptZ210KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwb3MgPSAodTggKiltZ210LSZndDt1LmJlYWNvbi52YXJpYWJsZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNQoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBhbmQgdGhlbiBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY2AuIE5vdywgdGhlIGNoYW5nZSB3aXRoaW4gYHA1NF9maW5kX2llYCByZWFsbHkgc3RhbmRzIG91dC4gVGhlIGNvbmRpdGlvbiBgaWYgKHNrYi0mZ3Q7bGVuICZsdDs9IHNpemVvZihtZ210KSlgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGlmIChza2ItJmd0O2xlbiAmbHQ7PSBzaXplb2YoKm1nbXQpKWAuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBzaXplIGNhbGN1bGF0aW9uIGVycm9yOyB0aGUgZm9ybWVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGlsZSB0aGUgbGF0dGVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2Ygd2hhdCB0aGUgcG9pbnRlciBpcyAqcG9pbnRpbmcqIGF0LiBHb29kIGNhdGNoIQoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBwNTQgZHJpdmVyIGFuZCB0cmFjZSB3aGVyZSBgcDU0X2ZpbmRfaWVgIGlzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCBpbnRlcmZhY2VzIHRoaXMgZHJpdmVyIHN1cHBvcnRzOiBpcyBpdCBQQ0ksIFVTQiwgU1BJLCBvciBhIGNvbWJpbmF0aW9uPyBBbmQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaXMgdGhpcyBkcml2ZXIgcmVhY2hhYmxlIGluIG1vcmUgc3BlY2lhbGl6ZWQgZW52aXJvbm1lbnRzPyBEb2VzIHN5emthbGxlciBoYXZlIGVhc3kgYWNjZXNzIHRvIGl0LCB1c2luZyBVU0IgZW11bGF0aW9uLCBSYXcgR2FkZ2V0LCBvciBkb2VzIGl0IG9wZXJhdGUgdmlhIG1hYzgwMjExIGh3c2ltIG9yIHZpcnRpbz8gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBjYW4gYmUgcmVhY2hlZCBpbiBzeXprYWxsZXIgb3IgYW5vdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgcXVpY2sgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgc291cmNlLCBvciBpZiB0aGF0JiMzOTtzIG5vdCBlZmZlY3RpdmUsIEkmIzM5O2xsIGhhdmUgdG8gcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyBkaXJlY3RseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTU1ND1zdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnAsIGNvbnN0IHUxNiBmcmVxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1Ni0vKiB1dGlsaXR5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oOjU1Nzp1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC01NTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz02Nj1zdGF0aWMgaW50IHA1NF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzo3NDp1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTc1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTk2PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjEwODpcdHRpbSA9IHA1NF9maW5kX2llKHNrYiwgV0xBTl9FSURfVElNKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTA5LVx0aWYgKCF0aW0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMTM6XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTMxNC1cdGlmICghdGltKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdHJldHVybiBwNTRfdXBkYXRlX2JlYWNvbl90aW0ocHJpdiwgc3RhLVx1MDAzZWFpZCwgc2V0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gIDc3Olx0XHR1OCAqcG9zLCAqZW5kO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKVxuICA4MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODE6XHRcbiAgODI6XHRcdHBvcyA9ICh1OCAqKW1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGU7XG4gIDgzOlx0XHRlbmQgPSBza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICA4NDpcdFx0d2hpbGUgKHBvcyBcdTAwM2MgZW5kKSB7XG4gIDg1Olx0XHRcdGlmIChwb3MgJiM0MzsgMiAmIzQzOyBwb3NbMV0gXHUwMDNlIGVuZClcbiAgODY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODc6XHRcbiAgODg6XHRcdFx0aWYgKHBvc1swXSA9PSBpZSlcbiAgODk6XHRcdFx0XHRyZXR1cm4gcG9zO1xuICA5MDpcdFxuICA5MTpcdFx0XHRwb3MgJiM0Mzs9IDIgJiM0MzsgcG9zWzFdO1xuICA5MjpcdFx0fVxuICA5MzpcdFx0cmV0dXJuIE5VTEw7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4gIDk3Olx0e1xuICA5ODpcdFx0LypcbiAgOTk6XHRcdCAqIHRoZSBnb29kIGV4Y3VzZSBmb3IgdGhpcyBtZXNzIGlzIC4uLiB0aGUgZmlybXdhcmUuXG4gMTAwOlx0XHQgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLFxuIDEwMTpcdFx0ICogYmVjYXVzZSBpdCYjMzk7bGwgYmUgb3ZlcndyaXR0ZW4hXG4gMTAyOlx0XHQgKi9cbiAxMDM6XHRcdHU4ICp0aW07XG4gMTA0Olx0XHR1OCBkdGltX2xlbjtcbiAxMDU6XHRcdHU4IGR0aW1fcGVyaW9kO1xuIDEwNjpcdFx0dTggKm5leHQ7XG4gMTA3Olx0XG4gMTA4Olx0XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG4gMTA5Olx0XHRpZiAoIXRpbSlcbiAxMTA6XHRcdFx0cmV0dXJuIDA7XG4gMTExOlx0XG4gMTEyOlx0XHRkdGltX2xlbiA9IHRpbVsxXTtcbiAxMTM6XHRcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xuIDExNDpcdFx0bmV4dCA9IHRpbSAmIzQzOyAyICYjNDM7IGR0aW1fbGVuO1xuIDExNTpcdFxuIDExNjpcdFx0aWYgKGR0aW1fbGVuIFx1MDAzYyAzKVxuIDExNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMTg6XHRcbiAxMTk6XHRcdG1lbW1vdmUodGltLCBuZXh0LCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBuZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFA1NF9DT01NT05cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnRtYWMgUHJpc201NCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA1Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gICA2Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy5cbiAgIDk6XHRcdCAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJL1NQSSBmcm9udC1lbmRzXG4gIDEwOlx0XHQgIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgYW55IGRldmljZXMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAxMzpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUDU0X1VTQlxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBVU0Igc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBVU0JcbiAgMjA6XHRcdHNlbGVjdCBDUkMzMlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgVVNCIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAyNTpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICAyNjpcdFxuICAyNzpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHVzYi5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgUDU0X1BDSVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBQQ0kgc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBQQ0lcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcbiAgMzY6XHRcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRwY2kuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFA1NF9TUElcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydFwmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBTUElfTUFTVEVSXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBzdGxjNDU1MCBvciBzdGxjNDU2MCBiYXNlZCB3aXJlbGVzcyBjaGlwc1xuICA0ODpcdFx0ICBzdWNoIGFzIE5va2lhJiMzOTtzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0c3BpLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXG4gIDUzOlx0XHRib29sIFwmIzM0O0luY2x1ZGUgZmFsbGJhY2sgRUVQUk9NIGJsb2JcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gUDU0X1NQSVxuICA1NTpcdFx0ZGVmYXVsdCBuXG4gIDU2Olx0XHRoZWxwXG4gIDU3Olx0XHQgVW5saWtlIHRoZSBQQ0kgb3IgVVNCIGRldmljZXMsIHRoZSBTUEkgdmFyaWFudHMgZG9uJiMzOTt0IGhhdmVcbiAgNTg6XHRcdCBhIGRlZGljYXRlZCBFRVBST00gY2hpcCB0byBzdG9yZSBhbGwgZGV2aWNlIHNwZWNpZmljIHZhbHVlc1xuICA1OTpcdFx0IGZvciBjYWxpYnJhdGlvbiwgY291bnRyeSBhbmQgaW50ZXJmYWNlIHNldHRpbmdzLlxuICA2MDpcdFxuICA2MTpcdFx0IFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gbG9hZCB0aGUgaW1hZ2UgXCYjMzQ7MzgyNi5lZXByb21cJiMzNDssIGlmIHRoZVxuICA2MjpcdFx0IGZpbGUgaXMgcHV0IGF0IHRoZSByaWdodCBwbGFjZS4gKHVzdWFsbHkgL2xpYi9maXJtd2FyZS4pXG4gIDYzOlx0XG4gIDY0Olx0XHQgT25seSBpZiB0aGlzIHJlcXVlc3QgZmFpbHMsIHRoaXMgb3B0aW9uIHdpbGwgcHJvdmlkZSBhXG4gIDY1Olx0XHQgYmFja3VwIHNldCBvZiBnZW5lcmljIHZhbHVlcyB0byBnZXQgdGhlIGRldmljZSB3b3JraW5nLlxuICA2NjpcdFxuICA2NzpcdFx0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYWJvdXQgNGsgdG8gcDU0c3BpLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBQNTRfTEVEU1xuICA3MDpcdFx0Ym9vbFxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9MRURTIFx1MDAyNlx1MDAyNiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IFA1NF9DT01NT04pXG4gIDcyOlx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI1CgkJCQkJCQlvdXRwdXQ6IDg1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUDU0IFVTQiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXkgd2l0aCBQNTQgYW5kIGl0cyBVU0IgdXNhZ2UuIENhbiB3ZSBsZXZlcmFnZSBVU0IgZW11bGF0aW9uIHdpdGhpbiBzeXprYWxsZXIgdG8gcHJvYmUgYFA1NF9VU0JgLCBvciBwZXJoYXBzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIGBtYWM4MDIxMWAgYW5kIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0aWVzIHRvIHNpbXVsYXRlIHRoZSBlbnZpcm9ubWVudD8KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6a2FsbGVyICphbHJlYWR5KiBoYXMgbWV0aG9kcyBmb3IgVVNCIGRyaXZlciBmdXp6aW5nLiBJdCBkb2VzIHRoaXMgdmlhIGByYXdfZ2FkZ2V0YCwgYHN5el91c2JfY29ubmVjdGAsIG9yIGRpcmVjdCBVU0IgZnV6emluZyB0ZWNobmlxdWVzLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLgoKU28sIHRoZSBuZXcgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkgbmVlZCB0byBleGFtaW5lIGBwNTR1c2IuY2Agc3BlY2lmaWNhbGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwcm9iZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwNTR1c2JgIG1vZHVsZSBnZXRzIHByb2JlZC4gQ3J1Y2lhbGx5LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIGZpcm13YXJlIGxvYWRpbmcgaXMgaW52b2x2ZWQgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkgdG8gdGhlIGZ1enppbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUgc2VxdWVuY2Ugd2lsbCBiZSBwaXZvdGFsIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MzE9TU9EVUxFX0ZJUk1XQVJFKFwmIzM0O2lzbDM4ODd1c2JcJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjMzOnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwNTR1X2RyaXZlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0zNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9OTE5PXN0YXRpYyB2b2lkIHA1NHVfbG9hZF9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDUtXHRcdHVzYl9sb2NrX2RldmljZSh1ZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NDY6XHRcdHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk0Ny1cdFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTExMTc9c3RhdGljIGludCBwNTR1X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjQ6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjUtXHQubmFtZVx0PSBcJiMzNDtwNTR1c2JcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTE0MDptb2R1bGVfdXNiX2RyaXZlcihwNTR1X2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHRwcml2ID0gZGV2LVx1MDAzZXByaXY7XG4xMDAxOlx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVX0lOVkFMSURfSFc7XG4xMDAyOlx0XG4xMDAzOlx0XHRTRVRfSUVFRTgwMjExX0RFVihkZXYsIFx1MDAyNmludGYtXHUwMDNlZGV2KTtcbjEwMDQ6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcbjEwMDU6XHRcdHByaXYtXHUwMDNldWRldiA9IHVkZXY7XG4xMDA2Olx0XHRwcml2LVx1MDAzZWludGYgPSBpbnRmO1xuMTAwNzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJ4X3F1ZXVlKTtcbjEwMDg6XHRcdGluaXRfdXNiX2FuY2hvcihcdTAwMjZwcml2LVx1MDAzZXN1Ym1pdHRlZCk7XG4xMDA5Olx0XG4xMDEwOlx0XHQvKiByZWFsbHkgbGF6eSBhbmQgc2ltcGxlIHdheSBvZiBmaWd1cmluZyBvdXQgaWYgd2UmIzM5O3JlIGEgMzg4NyAqL1xuMTAxMTpcdFx0LyogVE9ETzogc2hvdWxkIGp1c3Qgc3RpY2sgdGhlIGlkZW50aWZpY2F0aW9uIGluIHRoZSBkZXZpY2UgdGFibGUgKi9cbjEwMTI6XHRcdGkgPSBpbnRmLVx1MDAzZWFsdHNldHRpbmctXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzO1xuMTAxMzpcdFx0cmVjb2duaXplZF9waXBlcyA9IDA7XG4xMDE0Olx0XHR3aGlsZSAoaS0tKSB7XG4xMDE1Olx0XHRcdHN3aXRjaCAoaW50Zi1cdTAwM2VhbHRzZXR0aW5nLVx1MDAzZWVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykge1xuMTAxNjpcdFx0XHRjYXNlIFA1NFVfUElQRV9EQVRBOlxuMTAxNzpcdFx0XHRjYXNlIFA1NFVfUElQRV9NR01UOlxuMTAxODpcdFx0XHRjYXNlIFA1NFVfUElQRV9CUkc6XG4xMDE5Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0RFVjpcbjEwMjA6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfREFUQSB8IFVTQl9ESVJfSU46XG4xMDIxOlx0XHRcdGNhc2UgUDU0VV9QSVBFX01HTVQgfCBVU0JfRElSX0lOOlxuMTAyMjpcdFx0XHRjYXNlIFA1NFVfUElQRV9CUkcgfCBVU0JfRElSX0lOOlxuMTAyMzpcdFx0XHRjYXNlIFA1NFVfUElQRV9ERVYgfCBVU0JfRElSX0lOOlxuMTAyNDpcdFx0XHRjYXNlIFA1NFVfUElQRV9JTlQgfCBVU0JfRElSX0lOOlxuMTAyNTpcdFx0XHRcdHJlY29nbml6ZWRfcGlwZXMmIzQzOyYjNDM7O1xuMTAyNjpcdFx0XHR9XG4xMDI3Olx0XHR9XG4xMDI4Olx0XHRwcml2LVx1MDAzZWNvbW1vbi5vcGVuID0gcDU0dV9vcGVuO1xuMTAyOTpcdFx0cHJpdi1cdTAwM2Vjb21tb24uc3RvcCA9IHA1NHVfc3RvcDtcbjEwMzA6XHRcdGlmIChyZWNvZ25pemVkX3BpcGVzIFx1MDAzYyBQNTRVX1BJUEVfTlVNQkVSKSB7XG4xMDMxOlx0I2lmZGVmIENPTkZJR19QTVxuMTAzMjpcdFx0XHQvKiBJU0wzODg3IG5lZWRzIGEgZnVsbCByZXNldCBvbiByZXN1bWUgKi9cbjEwMzM6XHRcdFx0dWRldi1cdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xuMTAzNDpcdCNlbmRpZiAvKiBDT05GSUdfUE0gKi9cbjEwMzU6XHRcdFx0ZXJyID0gcDU0dV9kZXZpY2VfcmVzZXQoZGV2KTtcbjEwMzY6XHRcbjEwMzc6XHRcdFx0cHJpdi1cdTAwM2Vod190eXBlID0gUDU0VV8zODg3O1xuMTAzODpcdFx0XHRkZXYtXHUwMDNlZXh0cmFfdHhfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbG04N190eF9oZHIpO1xuMTAzOTpcdFx0XHRwcml2LVx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XG4xMDQwOlx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4ID0gcDU0dV90eF9sbTg3O1xuMTA0MTpcdFx0XHRwcml2LVx1MDAzZXVwbG9hZF9mdyA9IHA1NHVfdXBsb2FkX2Zpcm13YXJlXzM4ODc7XG4xMDQyOlx0XHR9IGVsc2Uge1xuMTA0MzpcdFx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVX05FVDIyODA7XG4xMDQ0Olx0XHRcdGRldi1cdTAwM2VleHRyYV90eF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7XG4xMDQ1Olx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcbjEwNDY6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X25ldDIyODA7XG4xMDQ3Olx0XHRcdHByaXYtXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfbmV0MjI4MDtcbjEwNDg6XHRcdH1cbjEwNDk6XHRcdGVyciA9IHA1NHVfbG9hZF9maXJtd2FyZShkZXYsIGludGYpO1xuMTA1MDpcdFx0aWYgKGVycilcbjEwNTE6XHRcdFx0cDU0X2ZyZWVfY29tbW9uKGRldik7XG4xMDUyOlx0XHRyZXR1cm4gZXJyO1xuMTA1MzpcdH1cbjEwNTQ6XHRcbjEwNTU6XHRzdGF0aWMgdm9pZCBwNTR1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4xMDU2Olx0e1xuMTA1NzpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbjEwNTg6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXY7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAoIWRldilcbjEwNjE6XHRcdFx0cmV0dXJuO1xuMTA2MjpcdFxuMTA2MzpcdFx0cHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuMTA2NDpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRfbG9hZCk7XG4xMDY1Olx0XHRwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTtcbjEwNjY6XHRcbjEwNjc6XHRcdHJlbGVhc2VfZmlybXdhcmUocHJpdi1cdTAwM2Vmdyk7XG4xMDY4Olx0XHRwNTRfZnJlZV9jb21tb24oZGV2KTtcbjEwNjk6XHR9XG4xMDcwOlx0XG4xMDcxOlx0c3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTA3NDpcdFxuMTA3NTpcdFx0aWYgKCFkZXYpXG4xMDc2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTA3NzpcdFxuMTA3ODpcdFx0cDU0dV9zdG9wKGRldik7XG4xMDc5Olx0XHRyZXR1cm4gMDtcbjEwODA6XHR9XG4xMDgxOlx0XG4xMDgyOlx0c3RhdGljIGludCBwNTR1X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjEwODM6XHR7XG4xMDg0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTA4NTpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcbjEwODY6XHRcbjEwODc6XHRcdGlmICghZGV2KVxuMTA4ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEwODk6XHRcbjEwOTA6XHRcdHByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbjEwOTE6XHRcdGlmICh1bmxpa2VseSghKHByaXYtXHUwMDNldXBsb2FkX2Z3IFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWZ3KSkpXG4xMDkyOlx0XHRcdHJldHVybiAwO1xuMTA5MzpcdFxuMTA5NDpcdFx0cmV0dXJuIHByaXYtXHUwMDNldXBsb2FkX2Z3KGRldik7XG4xMDk1Olx0fVxuMTA5NjpcdFxuMTA5NzpcdHN0YXRpYyBpbnQgcDU0dV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuMTA5ODpcdHtcbjEwOTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTMKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBIaWVyYXJjaHkgb2YgYHA1NF9maW5kX2llYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwNTRfZmluZF9pZWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9uczogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAgYW5kIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBLbm93aW5nIHdoZXJlICp0aGV5KiBhcmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIGBwNTRfZmluZF9pZWAmIzM5O3Mgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgZml0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NzQ9dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjk2OnN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTEzNT1zdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQ0LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTQ1Olx0cmV0ID0gcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKGJlYWNvbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0Ni1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3NT1zdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgaW50IHJzc2kpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0yOTMtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjI5NDpzdGF0aWMgdm9pZCBwNTRfcHNwb2xsX3dvcmthcm91bmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTI5NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0zMjc9c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTM4OC1cdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9DT05GX1BTKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6Mzg5Olx0XHRwNTRfcHNwb2xsX3dvcmthcm91bmQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUDU0IEJ1ZyBGaXggYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBmaXguIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgcDU0X2ZpbmRfaWVgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGBzaXplb2YobWdtdClgLCB3aGljaCBpcyBqdXN0IHRoZSBzaXplIG9mIHRoZSBwb2ludGVyIGl0c2VsZiAoOCBieXRlcyksIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgYGllZWU4MDIxMV9tZ210YCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY2hlY2sgYHNrYi0mZ3Q7bGVuICZsdDs9IHNpemVvZihtZ210KWAgd2FzIHRvbyBsb29zZSwgYW5kIGlmIHRoZSBidWZmZXIgc2l6ZSB3YXMgYmV0d2VlbiA4IGJ5dGVzIGFuZCB0aGUgZnVsbCBzaXplIG9mIHRoZSBtYW5hZ2VtZW50IGZyYW1lLCB3ZSB3ZXJlIGFjY2Vzc2luZyBgbWdtdC0mZ3Q7dS5iZWFjb24udmFyaWFibGVgIG91dCBvZiBib3VuZHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIHByb2JsZW1zLiBUaGUgZml4LCBjaGFuZ2luZyBpdCB0byBgc2l6ZW9mKCptZ210KWAsIG5vdyBjb3JyZWN0bHkgbWFrZXMgdGhlIGNoZWNrLiBUaGlzIGlzIGJhc2ljLCBidXQgaW1wb3J0YW50LCBwb2ludGVyIGFyaXRobWV0aWMuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGZpeCBpcyB3aXRoaW4gU3l6a2FsbGVyLiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gdHJpZ2dlciBlYXNpbHk/IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIFA1NCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgVVNCIHZhcmlhbnQsIGBQNTRfVVNCYC4gU3l6a2FsbGVyIHV0aWxpemVzIFVTQiBlbXVsYXRpb24gdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCByYXctZ2FkZ2V0LCBhbmQgdXNiLWZ1enplci4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGdldCBgcDU0dXNiYCB0byBwcm9iZSBhbmQgbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgYHA1NHVfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuIEl0IGNoZWNrcyBlbmRwb2ludHMsIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGNhbGxzIGBwNTR1X2xvYWRfZmlybXdhcmVgLiBUaGlzIGZpcm13YXJlIGxvYWRpbmcgaXMgcHJvYmFibHkgd2hlcmUgd2UgY2FuIGdldCB0aGUgbW9zdCBtaWxlYWdlIGZvciBmdXp6aW5nLiBUbyBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmVhc2libGUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBwNTR1X2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHA1NHVzYi5jYCBkcml2ZXIgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBmaXJtd2FyZSBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfbG9hZF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5MTk6c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTIwLVx0XHRcdFx0ICB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTUzOnN0YXRpYyBpbnQgcDU0dV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTQtXHRcdFx0ICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk3My1cdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NzQ6XHRcdFx0XHQgICAgICBwNTR1X2xvYWRfZmlybXdhcmVfY2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk3NS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9OTg0PXN0YXRpYyBpbnQgcDU0dV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTA0OC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxMDQ5Olx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTA1MC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCYjMzk7cyBkb25lIGFzeW5jaHJvbm91c2x5IHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cyBpbml0aWF0ZWQgYnkgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBhbmQgY29udHJhc3QgaXQgd2l0aCB0aGUgc3RhbmRhcmQsIHN5bmNocm9ub3VzIGFwcHJvYWNoLgoKKipBbmFseXppbmcgRmlybXdhcmUgTG9hZGluZyB3aXRoIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAqKgoKTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNydWNpYWwgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2x2ZWQsIHNpbmNlIGNhbGxiYWNrcyBhcmUgd2hhdCBhc3luY2hyb25vdXMgZnVuY3Rpb25zIGFyZSBrbm93biBmb3IuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBlbmRwb2ludCBvZiB0aGF0IHByb2Nlc3MsIHRoZSBwb2ludCB3aGVyZSB0aGUgZmlybXdhcmUgZGF0YSBpcyBmaW5hbGx5IGhhbmRlZCBvZmYsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hvIGNhbGxzIGl0IGFuZCB3aHk/CgpUaGVuIHRoZXJlJiMzOTtzIGBwNTR1X3N0YXJ0X29wc2AuIEkgc3VzcGVjdCB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIG9yIGVuYWJsZW1lbnQgb2YgdGhlIGRldmljZSBhZnRlciB0aGUgZmlybXdhcmUgaGFzIGJlZW4gbG9hZGVkLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgY2FsbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGl0IHdhaXQ/IERvZXMgaXQgcHJvY2VlZCByaWdodCBhd2F5PyBPciBpcyBpdCBjb25kaXRpb25hbCBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3Mgc3luY2hyb25pemVkLCBhbmQgaWYgbm90LCBob3cgaXQgYWRkcmVzc2VzIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXRleGVzIGludm9sdmVkPwoKVGhlIGNvcmUgcXVlc3Rpb24gaXMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIGFuZCBpZiBpdCBpcyBkb25lIHByb3Blcmx5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBhc3luY2hyb25vdXMgcmVxdWVzdCBpcyBtYWRlIGFsbCB0aGUgd2F5IHRocm91Z2ggdG8gd2hlbiB0aGUgZGV2aWNlIGlzIGZ1bGx5IG9wZXJhdGlvbmFsIHRvIGdhaW4gdGhpcyB1bmRlcnN0YW5kaW5nLiBTbywgSSB3aWxsIHN0YXJ0IHJlYWRpbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucywgdHJhY2luZyB0aGUgdmFyaWFibGVzLCBhbmQgY2hhcnRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZmlybXdhcmUgbG9hZCBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxODpcdFxuIDkxOTpcdHN0YXRpYyB2b2lkIHA1NHVfbG9hZF9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLFxuIDkyMDpcdFx0XHRcdFx0ICB2b2lkICpjb250ZXh0KVxuIDkyMTpcdHtcbiA5MjI6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBjb250ZXh0O1xuIDkyMzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwcml2LVx1MDAzZXVkZXY7XG4gOTI0Olx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHByaXYtXHUwMDNlaW50ZjtcbiA5MjU6XHRcdGludCBlcnI7XG4gOTI2Olx0XG4gOTI3Olx0XHRpZiAoZmlybXdhcmUpIHtcbiA5Mjg6XHRcdFx0cHJpdi1cdTAwM2VmdyA9IGZpcm13YXJlO1xuIDkyOTpcdFx0XHRlcnIgPSBwNTR1X3N0YXJ0X29wcyhwcml2KTtcbiA5MzA6XHRcdH0gZWxzZSB7XG4gOTMxOlx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gOTMyOlx0XHRcdGRldl9lcnIoXHUwMDI2dWRldi1cdTAwM2VkZXYsIFwmIzM0O0Zpcm13YXJlIG5vdCBmb3VuZC5cXG5cJiMzNDspO1xuIDkzMzpcdFx0fVxuIDkzNDpcdFxuIDkzNTpcdFx0Y29tcGxldGUoXHUwMDI2cHJpdi1cdTAwM2Vmd193YWl0X2xvYWQpO1xuIDkzNjpcdFx0LypcbiA5Mzc6XHRcdCAqIEF0IHRoaXMgcG9pbnQgcDU0dV9kaXNjb25uZWN0IG1heSBoYXZlIGFscmVhZHkgZnJlZWRcbiA5Mzg6XHRcdCAqIHRoZSBcJiMzNDtwcml2XCYjMzQ7IGNvbnRleHQuIERvIG5vdCB1c2UgaXQgYW55bW9yZSFcbiA5Mzk6XHRcdCAqL1xuIDk0MDpcdFx0cHJpdiA9IE5VTEw7XG4gOTQxOlx0XG4gOTQyOlx0XHRpZiAoZXJyKSB7XG4gOTQzOlx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpXFxuXCYjMzQ7LCBlcnIpO1xuIDk0NDpcdFxuIDk0NTpcdFx0XHR1c2JfbG9ja19kZXZpY2UodWRldik7XG4gOTQ2Olx0XHRcdHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xuIDk0NzpcdFx0XHR1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTtcbiA5NDg6XHRcdH1cbiA5NDk6XHRcbiA5NTA6XHRcdHVzYl9wdXRfaW50ZihpbnRmKTtcbiA5NTE6XHR9XG4gOTUyOlx0XG4gOTUzOlx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuIDk1NDpcdFx0XHRcdCAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDk1NTpcdHtcbiA5NTY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA5NTc6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiA5NTg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldmljZSA9IFx1MDAyNnVkZXYtXHUwMDNlZGV2O1xuIDk1OTpcdFx0aW50IGVyciwgaTtcbiA5NjA6XHRcbiA5NjE6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xuIDk2MjpcdFxuIDk2MzpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlZndfd2FpdF9sb2FkKTtcbiA5NjQ6XHRcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDk2NTpcdFx0aWYgKGkgXHUwMDNjIDApXG4gOTY2Olx0XHRcdHJldHVybiBpO1xuIDk2NzpcdFxuIDk2ODpcdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxuXCYjMzQ7LFxuIDk2OTpcdFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcbiA5NzA6XHRcbiA5NzE6XHRcdHVzYl9nZXRfaW50ZihpbnRmKTtcbiA5NzI6XHRcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBwNTR1X2Z3bGlzdFtpXS5mdyxcbiA5NzM6XHRcdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbiA5NzQ6XHRcdFx0XHRcdCAgICAgIHA1NHVfbG9hZF9maXJtd2FyZV9jYik7XG4gOTc1Olx0XHRpZiAoZXJyKSB7XG4gOTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7KHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXCYjMzQ7XG4gOTc3Olx0XHRcdFx0XHRcdCAgXCYjMzQ7KCVkKSFcXG5cJiMzNDssIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQNTQgVVNCIERyaXZlciBUcmlhZ2U6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwNTQgVVNCIGRyaXZlciBhbmQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IGl0IHdpdGggc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHByb21pc2luZy4gVVNCIGRldmljZXMgYXJlLCBhZnRlciBhbGwsIGVtdWxhdGVkIHZpYSBzeXprYWxsZXIgdXNpbmcgVVNCIFJhdyBHYWRnZXQgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggb3VyIHRyaWFnZSBwaGlsb3NvcGh5OiByZWFjaGFibGUgZHJpdmVycyB0aHJvdWdoIHZpcnR1YWwgYnVzZXMgYXJlIHByaW1lIHRhcmdldHMuCgpMZXQmIzM5O3MgcXVpY2tseSBydWxlIG91dCBhbnkgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDIGRyaXZlciByZXF1aXJpbmcgZXhvdGljIGhhcmR3YXJlLiBQNTQgVVNCIGlzIGEgKlVTQiBkcml2ZXIqLCBhbmQgY3J1Y2lhbGx5LCBpdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiB3aXRoaW4gdGhlIFFFTVUvc3l6a2FsbGVyIHNldHVwLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4hCgpOb3cgZm9yIHRoZSBpbnRlcmVzdGluZyBiaXQg4oCTIHRoZSBjb2RlIGNoYW5nZXMuIEkmIzM5O20gc2VlaW5nIGEgZml4IHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY2AsIHNwZWNpZmljYWxseSBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgZml4IGFkZHJlc3NlcyBhIGBzaXplb2YobWdtdClgIGlzc3VlLCBjaGFuZ2luZyBpdCBmcm9tIGEgcG9pbnRlciBzaXplIHRvIHRoZSBhY3R1YWwgc3RydWN0IHNpemUsIHdoaWNoIG1lYW5zIHRoZSBib3VuZHMgY2hlY2tpbmcgb2YgcGFyc2luZyA4MDIuMTEgSUVzIGlzIGJlaW5nIGZpeGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsISBQb3RlbnRpYWxseSBjcml0aWNhbC4KCkFscmlnaHQsIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGU/IExldCYjMzk7cyBhbmFseXplIHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBMb29rcyBsaWtlIHdlIG5lZWQgYFA1NF9DT01NT05gLCBgUDU0X1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYCBlbmFibGVkLiBgUDU0X0NPTU1PTmAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBhbmQgdGhlbiBzZWxlY3RzIGBGV19MT0FERVJgIGFuZCBgQ1JDX0NDSVRUYC4gYFA1NF9VU0JgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBVU0JgIGFuZCBzZWxlY3RzIGBDUkMzMmAuIFdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgb3RoZXIgY29uZmlncyBpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYsIG9mIGNvdXJzZS4KCk92ZXJhbGwsIHRoaXMgZHJpdmVyIHNlZW1zIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBlbXVsYXRpb24sIGNvdXBsZWQgd2l0aCB0aGUgbmF0dXJlIG9mIHRoZSBmaXggaW4gYHA1NF9maW5kX2llYCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyB3b3VsZCBiZSBhIHByb2ZpdGFibGUgYXZlbnVlIHRvIGV4cGxvcmUuIFdlJiMzOTt2ZSBqdXN0IGdvdCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRwNTRjb21tb24tb2Jqc1x0XHRcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXG4gICAzOlx0cDU0Y29tbW9uLSQoQ09ORklHX1A1NF9MRURTKVx0JiM0Mzs9IGxlZC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXHQmIzQzOz0gcDU0Y29tbW9uLm9cbiAgIDY6XHRvYmotJChDT05GSUdfUDU0X1VTQilcdFx0JiM0Mzs9IHA1NHVzYi5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1A1NF9QQ0kpXHRcdCYjNDM7PSBwNTRwY2kub1xuICAgODpcdG9iai0kKENPTkZJR19QNTRfU1BJKVx0XHQmIzQzOz0gcDU0c3BpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ2FsbGVycyBvZiBgcDU0X2ZpbmRfaWVgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIHRvIGBwNTRfZmluZF9pZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjYWxsZXJzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHVzaW5nIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBgcDU0X2ZpbmRfaWVgLCBhbmQgSSBzZWUgdGhlIGZvbGxvd2luZzogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAsIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLCBgcDU0X2JlYWNvbl91cGRhdGVgLCBhbmQgYHA1NF9yeF9kYXRhYC4gR29vZCwgbm93IEkgaGF2ZSBteSB0YXJnZXQgbGlzdC4KCk5leHQsIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYHA1NF9maW5kX2llYC4gSXMgaXQgc3RhdGljLCBsb2NhbCwgb3IgZ2xvYmFsIGFuZCBleHBvcnRlZD8gQSBxdWljayBjaGVjayBzaG93cyBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbG1hYy5oYCBhbmQgZGVmaW5lZCBpbiBgbWFpbi5jYCwgYW5kIHRoZSBkZWZpbml0aW9uIGFwcGVhcnMgZ2xvYmFsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBtb2RpZmljYXRpb25zIHRvIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSB3aWRlc3ByZWFkIGltcGFjdCwgYXMgaXQmIzM5O3Mgbm90IHJlc3RyaWN0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUuIEkgYWxzbyBzZWUgdGhhdCBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGFuZCBgcDU0X3J4X2RhdGFgIGFyZSBhbGwgc3RhdGljLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBhcyB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHRoZSBnbG9iYWwgZnVuY3Rpb24gaW4gcXVlc3Rpb24uCgpHaXZlbiB0aGF0IGBwNTRfcnhfZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlIGZpbGUgYHR4cnguY2AsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgbWlnaHQgY2FsbCBgcDU0X2ZpbmRfaWVgLiBMZXQmIzM5O3MgY2hlY2sgYHR4cnguY2AgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucywgc3RhcnRpbmcgd2l0aCBgcDU0X3J4YC4gSXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9yeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYz0yNz1pbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk0LVx0XHRcdG1heGxlbiA9IHByaXYtXHUwMDNldHhfaGRyX2xlbiAmIzQzOyAvKiBVU0IgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5NTpcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy05Ni1cdFx0XHRcdCA0ICYjNDM7IC8qIHJ4IGFsaWdubWVudCAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg9MTM1PXN0cnVjdCBwNTRfZWVwcm9tX2xtODYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDoxNTM6ZW51bSBwNTRfcnhfZGVjcnlwdF9zdGF0dXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC0xNTQtXHRQNTRfREVDUllQVF9OT05FID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTY3OnN0cnVjdCBwNTRfcnhfZGF0YSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE2OC1cdF9fbGUxNiBmbGFncztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjY2LS8qIGludGVyZmFjZXMgZm9yIHRoZSBkcml2ZXJzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjY3OmludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNjgtdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM9MTg0PXN0YXRpYyB2b2lkIHA1NHBfY2hlY2tfcnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiAqaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzoyMjM6XHRcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtMjI0LVx0XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZG1hX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jPTMxND1zdGF0aWMgaW50IHA1NHNwaV9yeChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0zNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MzYzOlx0aWYgKHA1NF9yeChwcml2LVx1MDAzZWh3LCBza2IpID09IDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMzY0LVx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTE0MD1zdGF0aWMgdm9pZCBwNTR1X3J4X2NiKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTYyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjE2MzpcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTY0LVx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKHByaXYtXHUwMDNlY29tbW9uLnJ4X210dSAmIzQzOyAzMik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMjc6c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI5Olx0c3RydWN0IHA1NF9yeF9kYXRhICpoZHIgPSAoc3RydWN0IHA1NF9yeF9kYXRhICopIHNrYi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMzAtXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjM5OTpzdGF0aWMgdm9pZCBwNTRfcnhfZnJhbWVfc2VudChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNDAwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NDg4OnN0YXRpYyB2b2lkIHA1NF9yeF9lZXByb21fcmVhZGJhY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4OS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy01MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjUyNTpzdGF0aWMgdm9pZCBwNTRfcnhfc3RhdHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTUyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjYxOTpzdGF0aWMgdm9pZCBwNTRfcnhfdHJhcChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjIwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjU1OnN0YXRpYyBpbnQgcDU0X3J4X2NvbnRyb2woc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY1Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjAtXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfVFhET05FOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2NjE6XHRcdHA1NF9yeF9mcmFtZV9zZW50KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2My1cdGNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2NjQ6XHRcdHA1NF9yeF90cmFwKHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjgtXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjY5Olx0XHRwNTRfcnhfc3RhdHMocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjcwLVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjcxLVx0Y2FzZSBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjcyOlx0XHRwNTRfcnhfZWVwcm9tX3JlYWRiYWNrKHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02ODMtLyogcmV0dXJucyB6ZXJvIGlmIHNrYiBjYW4gYmUgcmV1c2VkICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY4NDppbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY4OS1cdGlmICh0eXBlIFx1MDAyNiBQNTRfSERSX0ZMQUdfQ09OVFJPTClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjkwOlx0XHRyZXR1cm4gcDU0X3J4X2NvbnRyb2wocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjkxLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTI6XHRcdHJldHVybiBwNTRfcnhfZGF0YShwcml2LCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02OTMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTQ6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3J4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgQmVhY29uIFVwZGF0ZSBFbnRyeSBQb2ludCoqCgpBbHJpZ2h0LCBiZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBiZWFjb24gZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdXBkYXRlIGVudHJ5IHBvaW50IGNvcnJlY3RseS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSBjb3ZlcmVkIGl0LCBidXQgaXQgbmV2ZXIgaHVydHMgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgb3ZlciB0byBgbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IHBpbnBvaW50IHdoZXJlIHRoZSBiZWFjb24gdXBkYXRlIHNlcXVlbmNlIGtpY2tzIG9mZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBlc3BlY2lhbGx5IHdpdGggaG93IHdlJiMzOTtyZSBhcmNoaXRlY3RpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBOZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGFyZSBwcm9wZXJseSBjb29yZGluYXRlZCBmb3Igc2VhbWxlc3MgZXhlY3V0aW9uLiBHb3R0YSBtYWtlIHN1cmUgd2UgZGlkbiYjMzk7dCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyBkdXJpbmcgdGhlIHJlZmFjdG9yLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTk2PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjEzNTpzdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzYtXHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTQ1Mj1zdGF0aWMgdm9pZCBwNTRfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy00NjctXHRcdHA1NF9zZXR1cF9tYWMocHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjQ2ODpcdFx0cDU0X2JlYWNvbl91cGRhdGUocHJpdiwgdmlmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNDY5LVx0XHRwNTRfc2V0X2VkY2YocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzI0CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgcDU0X2ZpbmRfaWVgLCBhcyB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgYnVmZmVyIGxlbmd0aCBjaGVjayBpc3N1ZS4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGEgbWlzdGFrZSBpbiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGJlaW5nIHJlYWQgYnkgdXNpbmcgdGhlIHNpemUgb2YgYSBwb2ludGVyIChgc2l6ZW9mKG1nbXQpYCkgaW5zdGVhZCBvZiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZiAoYHNpemVvZigqbWdtdClgKS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgYWxsb3dpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiBiZWFjb25zIG9yIHJlY2VpdmVkIGZyYW1lcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGhhcyBiZWVuIGlkZW50aWZpZWQgbWVhbnMgaXQmIzM5O3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciB0ZXN0aW5nLiBUaGUgZGVzY3JpcHRpb24gc3BlY2lmaWVzIHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGJlYWNvbiBhbmQgZnJhbWUgcHJvY2Vzc2luZywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2Ygd2lyZWxlc3MgYW5kIG5ldHdvcmsgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJvdmlkZWQgYFJlYXNvbmluZ2AgY29uZmlybXMgaXQgY2FuIGJlIGV4cGxvaXRlZCBieSBjYXJlZnVsbHkgY3JhZnRlZCB3aXJlbGVzcyBwYWNrZXRzLgoKTG9va2luZyBhdCB0aGUgb3RoZXIgc3ltYm9scyBsaXN0ZWQ6IGBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW1gLCBgcDU0X3BzcG9sbF93b3JrYXJvdW5kYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9yeGAsIGFuZCBgcDU0X2Jzc19pbmZvX2NoYW5nZWRgIOKAkyB0aGV5JiMzOTtyZSBhbGwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgYmVhY29uIGFuZCBmcmFtZSBoYW5kbGluZy4gV2Ugc2hvdWxkIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIGFuYWx5emluZyB0aGUgb3ZlcmFsbCBwYXRjaC4gVGhleSBwcm9iYWJseSBhcmUgYWRqYWNlbnQgY29kZS4KClRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBVU0IgZ2FkZ2V0IC8gcmF3X2dhZGdldCBpbnRlcmZhY2VzIGFzIGFuIG9wdGlvbiBpcyB2ZXJ5IGhlbHBmdWwuIEl0IG1lYW5zIHdlIGNhbiBlbXVsYXRlIHRoZSBkcml2ZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIG1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gdHJpZ2dlciBhbmQgcmVwcm9kdWNlIHRoZSB2dWxuZXJhYmlsaXR5LCBvciBldmVuIGZ1enogaXQgaWYgd2UgY2FuIGZpbmQgYSBnb29kIHNldHVwLgoKRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IChgUDU0X0NPTU1PTmAsIGBQNTRfVVNCYCwgYE1BQzgwMjExYCkgdGVsbHMgbWUgd2hhdCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGlzIGlzc3VlLiBUaGVzZSBhcmUgZXNzZW50aWFsIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4KCkFscmlnaHQsIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbm93IHN1Ym1pdCB0aGUgcmVzdWx0cyBhbmQgZm9jdXMgb24gZnVydGhlciB0ZXN0aW5nLiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfZmluZF9pZSYjMzQ7LAogICAgJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAgICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgICAmIzM0O3A1NF9yeCYjMzQ7LAogICAgJiMzNDtwNTRfYnNzX2luZm9fY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfZmluZF9pZSYjMzQ7LAogICAgJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAgICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgICAmIzM0O3A1NF9yeCYjMzQ7LAogICAgJiMzNDtwNTRfYnNzX2luZm9fY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlIG9yIHJlYWRpbmcgcGFzdCB0aGUgc2tiIGRhdGEgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jCmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYwpAQCAtNzYsNyAmIzQzOzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKQogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXU4ICpwb3MsICplbmQ7CiAKLQlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpKQomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKCptZ210KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwb3MgPSAodTggKiltZ210LSZndDt1LmJlYWNvbi52YXJpYWJsZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUGF0Y2ggRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aG9kaWNhbC4gRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgdXBkYXRlIGluIGBwNTRfZmluZF9pZWAuIFRoZSBvcmlnaW5hbCBjaGVjayBgc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpYCBpcyBiZWluZyB1cGRhdGVkIHRvIGBza2ItJmd0O2xlbiAmbHQ7PSBzaXplb2YoKm1nbXQpYC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXguIFRoaXMgaXMgYSBiYXNpYyBmaXgsIGxpa2VseSBhdm9pZGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBzb21ldGhpbmcgdGVycmlibHkgY29tcGxleC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHVzaW5nIG15IGtub3dsZWRnZSBvZiB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGZ1bmN0aW9uLiBPa2F5LCBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBpbW1lZGlhdGVseSBzY3JlYW1pbmcgZm9yIGV4dHJhIHNjcnV0aW55IHdpdGggS01TQU4uIFdoaWxlIGFueSBib3VuZHMgY2hlY2sgZml4ICpjb3VsZCogYmUgaW1wb3J0YW50LCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgZm9jdXNlZC4gVGhlIGZ1bmN0aW9uIGlzIHBhcnNpbmcgSUUgaGVhZGVycywgc28gaXQmIzM5O3MgaGFuZGxpbmcgcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEsIGJ1dCBpdCYjMzk7cyBhICp2ZXJ5KiBiYXNpYyBjaGVjayBvbiB0aGUgbGVuZ3RoIG9mIGFuIGluY29taW5nIHNrYi4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHRoZSBjYWxsIGFuZCBzYXkgYE5lZWRzS01TQU49ZmFsc2VgIG9uIHRoaXMgb25lLiBJdCYjMzk7cyBhIGdvb2QgcGF0Y2gsIGJ1dCBzdGFuZGFyZCBhbmQgc3RyYWlnaHRmb3J3YXJkLiBMZXQmIzM5O3MgZmxhZyB0aGlzIGFzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdFx0YnJlYWs7XG4gIDYxOlx0XHRkZWZhdWx0OlxuICA2MjpcdFx0XHRicmVhaztcbiAgNjM6XHRcdH1cbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gIDY3Olx0XHRcdFx0Ym9vbCBzZXQpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiAgNzA6XHRcbiAgNzE6XHRcdHJldHVybiBwNTRfdXBkYXRlX2JlYWNvbl90aW0ocHJpdiwgc3RhLVx1MDAzZWFpZCwgc2V0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gIDc3Olx0XHR1OCAqcG9zLCAqZW5kO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKVxuICA4MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODE6XHRcbiAgODI6XHRcdHBvcyA9ICh1OCAqKW1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGU7XG4gIDgzOlx0XHRlbmQgPSBza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICA4NDpcdFx0d2hpbGUgKHBvcyBcdTAwM2MgZW5kKSB7XG4gIDg1Olx0XHRcdGlmIChwb3MgJiM0MzsgMiAmIzQzOyBwb3NbMV0gXHUwMDNlIGVuZClcbiAgODY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODc6XHRcbiAgODg6XHRcdFx0aWYgKHBvc1swXSA9PSBpZSlcbiAgODk6XHRcdFx0XHRyZXR1cm4gcG9zO1xuICA5MDpcdFxuICA5MTpcdFx0XHRwb3MgJiM0Mzs9IDIgJiM0MzsgcG9zWzFdO1xuICA5MjpcdFx0fVxuICA5MzpcdFx0cmV0dXJuIE5VTEw7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4gIDk3Olx0e1xuICA5ODpcdFx0LypcbiAgOTk6XHRcdCAqIHRoZSBnb29kIGV4Y3VzZSBmb3IgdGhpcyBtZXNzIGlzIC4uLiB0aGUgZmlybXdhcmUuXG4gMTAwOlx0XHQgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLFxuIDEwMTpcdFx0ICogYmVjYXVzZSBpdCYjMzk7bGwgYmUgb3ZlcndyaXR0ZW4hXG4gMTAyOlx0XHQgKi9cbiAxMDM6XHRcdHU4ICp0aW07XG4gMTA0Olx0XHR1OCBkdGltX2xlbjtcbiAxMDU6XHRcdHU4IGR0aW1fcGVyaW9kO1xuIDEwNjpcdFx0dTggKm5leHQ7XG4gMTA3Olx0XG4gMTA4Olx0XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG4gMTA5Olx0XHRpZiAoIXRpbSlcbiAxMTA6XHRcdFx0cmV0dXJuIDA7XG4gMTExOlx0XG4gMTEyOlx0XHRkdGltX2xlbiA9IHRpbVsxXTtcbiAxMTM6XHRcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xuIDExNDpcdFx0bmV4dCA9IHRpbSAmIzQzOyAyICYjNDM7IGR0aW1fbGVuO1xuIDExNTpcdFxuIDExNjpcdFx0aWYgKGR0aW1fbGVuIFx1MDAzYyAzKVxuIDExNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMTg6XHRcbiAxMTk6XHRcdG1lbW1vdmUodGltLCBuZXh0LCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBuZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA4ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS0FTQU4gaXMgdGhlIEtleSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZml4ZXMgYSBzdWJ0bGUgYnVnIGluIGBwNTRfZmluZF9pZWAuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgYHNpemVvZmAgY29uZnVzaW9uLiBJdCB3YXMgdXNpbmcgYHNpemVvZihtZ210KWAgaW5zdGVhZCBvZiBgc2l6ZW9mKCptZ210KWAuICBgbWdtdGAgaXMgYSBwb2ludGVyLCBzbyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgZ2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIqIGl0c2VsZiAoNCBvciA4IGJ5dGVzIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUpLCBub3QgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpdCBwb2ludGVkIHRvIChgc3RydWN0IGllZWU4MDIxMV9tZ210YCkuIFRoaXMgbWVhbnQgdGhhdCBpZiB0aGUgYHNrYi0mZ3Q7bGVuYCAodGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlcikgd2FzIHNtYWxsZXIgdGhhbiB0aGUgKmFjdHVhbCogbWFuYWdlbWVudCBmcmFtZSBoZWFkZXIgc2l6ZSAod2hpY2ggaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIpLCB0aGUgY29kZSB3b3VsZCB0cmVhdCBwYXJ0cyBvZiB0aGUgYnVmZmVyICpiZXlvbmQqIHRoZSB2YWxpZCBkYXRhIGFzIGlmIHRoZXkgd2VyZSB2YWxpZC4gIFNwZWNpZmljYWxseSwgYHBvc2Agd2FzIGJlaW5nIHNldCB0byBhbiBvZmZzZXQgdGhhdCB3YXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbG9vcCBjb3VsZCByZWFkIHBhc3QgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEuCgpUaGF0JiMzOTtzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyByZWFkIChPT0IpIHNjZW5hcmlvLiAgQW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgS0FTQU4sIHRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiAgSXQmIzM5O3Mgc2V0IHVwIHRvIGRldGVjdCBwcmVjaXNlbHkgdGhlc2Uga2luZHMgb2YgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IHRoaXMgZml4ZXMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2sgdmFyaWFibGVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCwgb3IgYW55IGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuIEl0IGlzIHB1cmVseSBhIGJvdW5kcyBjaGVjayBjb3JyZWN0aW9uLiBUaGUgY29kZSAqYmVmb3JlKiB0aGUgcGF0Y2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCB0aGF0JiMzOTtzIHRoZSB2dWxuZXJhYmlsaXR5LiBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIGJvdW5kcyBjaGVjay4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZ2xlLiBLTVNBTiYjMzk7cyBqb2IgaXMgdG8gc25pZmYgb3V0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZS4gIEJ1dCB0aGUgZ3VpZGluZyBwcmluY2lwbGUgaXMsIGFuZCB0aGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsICYjMzQ7dGhlcmUgaXMgbm8gc2Vuc2UgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgYSBidWcgY2FuIGJlIGNhdWdodCBieSBLQVNBTi4uLiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzJiMzNDsuICBUaGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhhdCwgYW5kIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoLCBvciBjcmVhdGUsIGFueSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm90IGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHJpc2sgb2Yga2VybmVsIGluZm8gbGVha2luZy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGFuIE9PQiwgYW5kIGJlY2F1c2UgS0FTQU4gaXMgYmVzdCBzdWl0ZWQgdG8gY2F0Y2hpbmcgdGhhdCBraW5kIG9mIGlzc3VlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwcmVwYXJlIHdvdWxkIGJlOgoKKiAgIFRoZSBwYXRjaCBmaXhlcyBhIGBzaXplb2ZgIHR5cG8gaW4gYHA1NF9maW5kX2llKClgLCBhIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jYC4gVGhlIHR5cG8gd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLgoqICAgS0FTQU4gaXMgYXBwcm9wcmlhdGUgYmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIHNpemUgb2YgdGhlIHNrYiBidWZmZXIgd2FzIHNtYWxsZXIgdGhhbiB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbWdtdGAgaGVhZGVyLiBUaGUgY29ycmVjdGVkIGNvZGUgZml4ZXMgdGhlIE9PQiByZWFkLgoqICAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIG9yIGluZm8gbGVha2luZy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNpemVvZiBidWcgaW4gcDU0X2ZpbmRfaWUoKSB3aGVyZSBzaXplb2YobWdtdCkgKHRoZSBwb2ludGVyIHNpemUsIDQgb3IgOCBieXRlcykgd2FzIGNoZWNrZWQgaW5zdGVhZCBvZiBzaXplb2YoKm1nbXQpICh0aGUgc3RydWN0dXJlIHNpemUpLiBBbiBza2Igc2hvcnRlciB0aGFuIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQpIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gYWNjZXNzaW5nIGZpZWxkcyBsaWtlIG1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGUgb3IgcmVhZGluZyBwYXN0IHRoZSBza2IgZGF0YSBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXRpZXMgb24gc2tfYnVmZiBidWZmZXJzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBrZXJuZWwtdG8tdXNlciBkYXRhIGxlYWtzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2l6ZW9mIGJ1ZyBpbiBwNTRfZmluZF9pZSgpIHdoZXJlIHNpemVvZihtZ210KSAodGhlIHBvaW50ZXIgc2l6ZSwgNCBvciA4IGJ5dGVzKSB3YXMgY2hlY2tlZCBpbnN0ZWFkIG9mIHNpemVvZigqbWdtdCkgKHRoZSBzdHJ1Y3R1cmUgc2l6ZSkuIEFuIHNrYiBzaG9ydGVyIHRoYW4gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBhY2Nlc3NpbmcgZmllbGRzIGxpa2UgbWdtdC1cdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cblxuT3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdGllcyBvbiBza19idWZmIGJ1ZmZlcnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGtlcm5lbC10by11c2VyIGRhdGEgbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTozNS41NjM0OTIwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDUzNTcxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X2ZpbmRfaWVcIixcbiAgICBcInA1NF9iZWFjb25fZm9ybWF0X2llX3RpbVwiLFxuICAgIFwicDU0X3BzcG9sbF93b3JrYXJvdW5kXCIsXG4gICAgXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICAgIFwicDU0X3J4XCIsXG4gICAgXCJwNTRfYnNzX2luZm9fY2hhbmdlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgYSBzaXplb2YgcG9pbnRlciB2cyBkZXJlZmVyZW5jZSBidWcgaW4gcDU0X2ZpbmRfaWUoKSwgY2hhbmdpbmcgc2l6ZW9mKG1nbXQpIHRvIHNpemVvZigqbWdtdCkgdG8gcHJvcGVybHkgdmFsaWRhdGUgZnJhbWUgbGVuZ3RoIGJlZm9yZSBwYXJzaW5nIElFRUUgODAyLjExIGluZm9ybWF0aW9uIGVsZW1lbnRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAocDU0dXNiKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6MzUuNTYzNDk3ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDYxMjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0Yzk1MTc5MmY1MDIwYzBiNWYxMGQ2NTcyYWFiZjFmMDQ0YjgzZThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xcbmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcXG5AQCAtNzYsNyArNzYsNyBAQCB1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHR1OCAqcG9zLCAqZW5kO1xcbiBcXG4tXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IHNpemVvZihtZ210KSlcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IHNpemVvZigqbWdtdCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cG9zID0gKHU4ICopbWdtdC1cXHUwMDNldS5iZWFjb24udmFyaWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjM1Ljk2NDg3NDU0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk4MDIzMDc4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfZmluZF9pZVwiLFxuICAgIFwicDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltXCIsXG4gICAgXCJwNTRfcHNwb2xsX3dvcmthcm91bmRcIixcbiAgICBcInA1NF9iZWFjb25fdXBkYXRlXCIsXG4gICAgXCJwNTRfcnhcIixcbiAgICBcInA1NF9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgYSBzaXplb2YgcG9pbnRlciB2cyBkZXJlZmVyZW5jZSBidWcgaW4gcDU0X2ZpbmRfaWUoKSwgY2hhbmdpbmcgc2l6ZW9mKG1nbXQpIHRvIHNpemVvZigqbWdtdCkgdG8gcHJvcGVybHkgdmFsaWRhdGUgZnJhbWUgbGVuZ3RoIGJlZm9yZSBwYXJzaW5nIElFRUUgODAyLjExIGluZm9ybWF0aW9uIGVsZW1lbnRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAocDU0dXNiKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jXG5pbmRleCA1N2E2MjEwOGNiYzM1Li5kM2UxNzc2MTc0ZjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuQEAgLTc2LDcgKzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHU4ICpwb3MsICplbmQ7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IHNpemVvZihtZ210KSlcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwb3MgPSAodTggKiltZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6MzUuOTY0ODc2MDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYwNzkxNDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQsIHNvIEknbSBnb2luZyB0byBhbmFseXplIHRoaXMgcGF0Y2ggYW5kIHRoZW4gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgLiBOb3csIHRoZSBjaGFuZ2Ugd2l0aGluIGBwNTRfZmluZF9pZWAgcmVhbGx5IHN0YW5kcyBvdXQuIFRoZSBjb25kaXRpb24gYGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKWAuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBzaXplIGNhbGN1bGF0aW9uIGVycm9yOyB0aGUgZm9ybWVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGlsZSB0aGUgbGF0dGVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2Ygd2hhdCB0aGUgcG9pbnRlciBpcyAqcG9pbnRpbmcqIGF0LiBHb29kIGNhdGNoIVxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEknbSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcDU0IGRyaXZlciBhbmQgdHJhY2Ugd2hlcmUgYHA1NF9maW5kX2llYCBpcyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgaW50ZXJmYWNlcyB0aGlzIGRyaXZlciBzdXBwb3J0czogaXMgaXQgUENJLCBVU0IsIFNQSSwgb3IgYSBjb21iaW5hdGlvbj8gQW5kIHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBtb3JlIHNwZWNpYWxpemVkIGVudmlyb25tZW50cz8gRG9lcyBzeXprYWxsZXIgaGF2ZSBlYXN5IGFjY2VzcyB0byBpdCwgdXNpbmcgVVNCIGVtdWxhdGlvbiwgUmF3IEdhZGdldCwgb3IgZG9lcyBpdCBvcGVyYXRlIHZpYSBtYWM4MDIxMSBod3NpbSBvciB2aXJ0aW8/IEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgY2FuIGJlIHJlYWNoZWQgaW4gc3l6a2FsbGVyIG9yIGFub3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gZG8gc29tZSBxdWljayBncmVwcGluZyB0aHJvdWdoIHRoZSBzb3VyY2UsIG9yIGlmIHRoYXQncyBub3QgZWZmZWN0aXZlLCBJJ2xsIGhhdmUgdG8gcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyBkaXJlY3RseS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDMuNTcyNzkyNzgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDU3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9maW5kX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaD01NTQ9c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICpwNTRfcnNzaV9maW5kKHN0cnVjdCBwNTRfY29tbW9uICpwLCBjb25zdCB1MTYgZnJlcSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1Ni0vKiB1dGlsaXR5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDo1NTc6dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NjY9c3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6NzQ6dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz05Nj1zdGF0aWMgaW50IHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzoxMDg6XFx0dGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTA5LVxcdGlmICghdGltKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMTM6XFx0dGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzE0LVxcdGlmICghdGltKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0My42MTY4NTM0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdFxcbiAgNzE6XFx0XFx0cmV0dXJuIHA1NF91cGRhdGVfYmVhY29uX3RpbShwcml2LCBzdGEtXFx1MDAzZWFpZCwgc2V0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3NzpcXHRcXHR1OCAqcG9zLCAqZW5kO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRwb3MgPSAodTggKiltZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcXG4gIDgzOlxcdFxcdGVuZCA9IHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgODQ6XFx0XFx0d2hpbGUgKHBvcyBcXHUwMDNjIGVuZCkge1xcbiAgODU6XFx0XFx0XFx0aWYgKHBvcyArIDIgKyBwb3NbMV0gXFx1MDAzZSBlbmQpXFxuICA4NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0XFx0aWYgKHBvc1swXSA9PSBpZSlcXG4gIDg5OlxcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdHBvcyArPSAyICsgcG9zWzFdO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHQvKlxcbiAgOTk6XFx0XFx0ICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS5cXG4gMTAwOlxcdFxcdCAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsXFxuIDEwMTpcXHRcXHQgKiBiZWNhdXNlIGl0J2xsIGJlIG92ZXJ3cml0dGVuIVxcbiAxMDI6XFx0XFx0ICovXFxuIDEwMzpcXHRcXHR1OCAqdGltO1xcbiAxMDQ6XFx0XFx0dTggZHRpbV9sZW47XFxuIDEwNTpcXHRcXHR1OCBkdGltX3BlcmlvZDtcXG4gMTA2OlxcdFxcdHU4ICpuZXh0O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XFxuIDEwOTpcXHRcXHRpZiAoIXRpbSlcXG4gMTEwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRkdGltX2xlbiA9IHRpbVsxXTtcXG4gMTEzOlxcdFxcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xcbiAxMTQ6XFx0XFx0bmV4dCA9IHRpbSArIDIgKyBkdGltX2xlbjtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKGR0aW1fbGVuIFxcdTAwM2MgMylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRtZW1tb3ZlKHRpbSwgbmV4dCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gbmV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQzLjYxNjk3NTg5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUDU0X0NPTU1PTlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnRtYWMgUHJpc201NCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xcbiAgMTA6XFx0XFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFA1NF9VU0JcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTR1c2IuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBQNTRfUENJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBQQ0kgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4gIDM2OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFA1NF9TUElcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJX01BU1RFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcXG4gIDQ4OlxcdFxcdCAgc3VjaCBhcyBOb2tpYSdzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS5cXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIFA1NF9TUElfREVGQVVMVF9FRVBST01cXG4gIDUzOlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgZmFsbGJhY2sgRUVQUk9NIGJsb2JcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFA1NF9TUElcXG4gIDU1OlxcdFxcdGRlZmF1bHQgblxcbiAgNTY6XFx0XFx0aGVscFxcbiAgNTc6XFx0XFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbid0IGhhdmVcXG4gIDU4OlxcdFxcdCBhIGRlZGljYXRlZCBFRVBST00gY2hpcCB0byBzdG9yZSBhbGwgZGV2aWNlIHNwZWNpZmljIHZhbHVlc1xcbiAgNTk6XFx0XFx0IGZvciBjYWxpYnJhdGlvbiwgY291bnRyeSBhbmQgaW50ZXJmYWNlIHNldHRpbmdzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBsb2FkIHRoZSBpbWFnZSBcXFwiMzgyNi5lZXByb21cXFwiLCBpZiB0aGVcXG4gIDYyOlxcdFxcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgT25seSBpZiB0aGlzIHJlcXVlc3QgZmFpbHMsIHRoaXMgb3B0aW9uIHdpbGwgcHJvdmlkZSBhXFxuICA2NTpcXHRcXHQgYmFja3VwIHNldCBvZiBnZW5lcmljIHZhbHVlcyB0byBnZXQgdGhlIGRldmljZSB3b3JraW5nLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWRkcyBhYm91dCA0ayB0byBwNTRzcGkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQNTRfTEVEU1xcbiAgNzA6XFx0XFx0Ym9vbFxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0xFRFMgXFx1MDAyNlxcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxcbiAgNzI6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQzLjYxNzAzOTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3NDM1MzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFA1NCBVU0IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheSB3aXRoIFA1NCBhbmQgaXRzIFVTQiB1c2FnZS4gQ2FuIHdlIGxldmVyYWdlIFVTQiBlbXVsYXRpb24gd2l0aGluIHN5emthbGxlciB0byBwcm9iZSBgUDU0X1VTQmAsIG9yIHBlcmhhcHMgdXNlIGEgY29tYmluYXRpb24gb2YgYG1hYzgwMjExYCBhbmQgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXRpZXMgdG8gc2ltdWxhdGUgdGhlIGVudmlyb25tZW50P1xuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHN5emthbGxlciAqYWxyZWFkeSogaGFzIG1ldGhvZHMgZm9yIFVTQiBkcml2ZXIgZnV6emluZy4gSXQgZG9lcyB0aGlzIHZpYSBgcmF3X2dhZGdldGAsIGBzeXpfdXNiX2Nvbm5lY3RgLCBvciBkaXJlY3QgVVNCIGZ1enppbmcgdGVjaG5pcXVlcy4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLlxuXG5TbywgdGhlIG5ldyBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIGV4YW1pbmUgYHA1NHVzYi5jYCBzcGVjaWZpY2FsbHksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHByb2JlIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcDU0dXNiYCBtb2R1bGUgZ2V0cyBwcm9iZWQuIENydWNpYWxseSwgSSBoYXZlIHRvIGRldGVybWluZSBpZiBmaXJtd2FyZSBsb2FkaW5nIGlzIGludm9sdmVkIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIHRoZSBmdXp6aW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHNlcXVlbmNlIHdpbGwgYmUgcGl2b3RhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjUsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDcuMzkxMzk0NTE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDIwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MzE9TU9EVUxFX0ZJUk1XQVJFKFxcXCJpc2wzODg3dXNiXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzozMzpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTM0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTkxOT1zdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDUtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKHVkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NDY6XFx0XFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDctXFx0XFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTExNz1zdGF0aWMgaW50IHA1NHVfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTEyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTEyNDpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjUtXFx0Lm5hbWVcXHQ9IFxcXCJwNTR1c2JcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExNDA6bW9kdWxlX3VzYl9kcml2ZXIocDU0dV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0Ny40MzU0MjgxOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcdHByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuMTAwMTpcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV9JTlZBTElEX0hXO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRTRVRfSUVFRTgwMjExX0RFVihkZXYsIFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYpO1xcbjEwMDQ6XFx0XFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbjEwMDU6XFx0XFx0cHJpdi1cXHUwMDNldWRldiA9IHVkZXY7XFxuMTAwNjpcXHRcXHRwcml2LVxcdTAwM2VpbnRmID0gaW50ZjtcXG4xMDA3OlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4xMDA4OlxcdFxcdGluaXRfdXNiX2FuY2hvcihcXHUwMDI2cHJpdi1cXHUwMDNlc3VibWl0dGVkKTtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0LyogcmVhbGx5IGxhenkgYW5kIHNpbXBsZSB3YXkgb2YgZmlndXJpbmcgb3V0IGlmIHdlJ3JlIGEgMzg4NyAqL1xcbjEwMTE6XFx0XFx0LyogVE9ETzogc2hvdWxkIGp1c3Qgc3RpY2sgdGhlIGlkZW50aWZpY2F0aW9uIGluIHRoZSBkZXZpY2UgdGFibGUgKi9cXG4xMDEyOlxcdFxcdGkgPSBpbnRmLVxcdTAwM2VhbHRzZXR0aW5nLVxcdTAwM2VkZXNjLmJOdW1FbmRwb2ludHM7XFxuMTAxMzpcXHRcXHRyZWNvZ25pemVkX3BpcGVzID0gMDtcXG4xMDE0OlxcdFxcdHdoaWxlIChpLS0pIHtcXG4xMDE1OlxcdFxcdFxcdHN3aXRjaCAoaW50Zi1cXHUwMDNlYWx0c2V0dGluZy1cXHUwMDNlZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSB7XFxuMTAxNjpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9EQVRBOlxcbjEwMTc6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfTUdNVDpcXG4xMDE4OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0JSRzpcXG4xMDE5OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RFVjpcXG4xMDIwOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RBVEEgfCBVU0JfRElSX0lOOlxcbjEwMjE6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfTUdNVCB8IFVTQl9ESVJfSU46XFxuMTAyMjpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9CUkcgfCBVU0JfRElSX0lOOlxcbjEwMjM6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfREVWIHwgVVNCX0RJUl9JTjpcXG4xMDI0OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0lOVCB8IFVTQl9ESVJfSU46XFxuMTAyNTpcXHRcXHRcXHRcXHRyZWNvZ25pemVkX3BpcGVzKys7XFxuMTAyNjpcXHRcXHRcXHR9XFxuMTAyNzpcXHRcXHR9XFxuMTAyODpcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24ub3BlbiA9IHA1NHVfb3BlbjtcXG4xMDI5OlxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi5zdG9wID0gcDU0dV9zdG9wO1xcbjEwMzA6XFx0XFx0aWYgKHJlY29nbml6ZWRfcGlwZXMgXFx1MDAzYyBQNTRVX1BJUEVfTlVNQkVSKSB7XFxuMTAzMTpcXHQjaWZkZWYgQ09ORklHX1BNXFxuMTAzMjpcXHRcXHRcXHQvKiBJU0wzODg3IG5lZWRzIGEgZnVsbCByZXNldCBvbiByZXN1bWUgKi9cXG4xMDMzOlxcdFxcdFxcdHVkZXYtXFx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XFxuMTAzNDpcXHQjZW5kaWYgLyogQ09ORklHX1BNICovXFxuMTAzNTpcXHRcXHRcXHRlcnIgPSBwNTR1X2RldmljZV9yZXNldChkZXYpO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV8zODg3O1xcbjEwMzg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VleHRyYV90eF9oZWFkcm9vbSArPSBzaXplb2Yoc3RydWN0IGxtODdfdHhfaGRyKTtcXG4xMDM5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XFxuMTA0MDpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X2xtODc7XFxuMTA0MTpcXHRcXHRcXHRwcml2LVxcdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV8zODg3O1xcbjEwNDI6XFx0XFx0fSBlbHNlIHtcXG4xMDQzOlxcdFxcdFxcdHByaXYtXFx1MDAzZWh3X3R5cGUgPSBQNTRVX05FVDIyODA7XFxuMTA0NDpcXHRcXHRcXHRkZXYtXFx1MDAzZWV4dHJhX3R4X2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgbmV0MjI4MF90eF9oZHIpO1xcbjEwNDU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcXG4xMDQ2OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eCA9IHA1NHVfdHhfbmV0MjI4MDtcXG4xMDQ3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXVwbG9hZF9mdyA9IHA1NHVfdXBsb2FkX2Zpcm13YXJlX25ldDIyODA7XFxuMTA0ODpcXHRcXHR9XFxuMTA0OTpcXHRcXHRlcnIgPSBwNTR1X2xvYWRfZmlybXdhcmUoZGV2LCBpbnRmKTtcXG4xMDUwOlxcdFxcdGlmIChlcnIpXFxuMTA1MTpcXHRcXHRcXHRwNTRfZnJlZV9jb21tb24oZGV2KTtcXG4xMDUyOlxcdFxcdHJldHVybiBlcnI7XFxuMTA1MzpcXHR9XFxuMTA1NDpcXHRcXG4xMDU1OlxcdHN0YXRpYyB2b2lkIHA1NHVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTA1ODpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2O1xcbjEwNTk6XFx0XFxuMTA2MDpcXHRcXHRpZiAoIWRldilcXG4xMDYxOlxcdFxcdFxcdHJldHVybjtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0cHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4xMDY0OlxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuMTA2NTpcXHRcXHRwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShwcml2LVxcdTAwM2Vmdyk7XFxuMTA2ODpcXHRcXHRwNTRfZnJlZV9jb21tb24oZGV2KTtcXG4xMDY5OlxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0c3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4xMDcyOlxcdHtcXG4xMDczOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTA3NDpcXHRcXG4xMDc1OlxcdFxcdGlmICghZGV2KVxcbjEwNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTA3NzpcXHRcXG4xMDc4OlxcdFxcdHA1NHVfc3RvcChkZXYpO1xcbjEwNzk6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MDpcXHR9XFxuMTA4MTpcXHRcXG4xMDgyOlxcdHN0YXRpYyBpbnQgcDU0dV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTA4MzpcXHR7XFxuMTA4NDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbjEwODU6XFx0XFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0aWYgKCFkZXYpXFxuMTA4ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0cHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4xMDkxOlxcdFxcdGlmICh1bmxpa2VseSghKHByaXYtXFx1MDAzZXVwbG9hZF9mdyBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VmdykpKVxcbjEwOTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdHJldHVybiBwcml2LVxcdTAwM2V1cGxvYWRfZncoZGV2KTtcXG4xMDk1OlxcdH1cXG4xMDk2OlxcdFxcbjEwOTc6XFx0c3RhdGljIGludCBwNTR1X3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTA5ODpcXHR7XFxuMTA5OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0Ny40MzU1NjM3NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzEyNzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgSGllcmFyY2h5IG9mIGBwNTRfZmluZF9pZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBwNTRfZmluZF9pZWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9uczogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAgYW5kIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBLbm93aW5nIHdoZXJlICp0aGV5KiBhcmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIGBwNTRfZmluZF9pZWAncyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGZpdCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxMywiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQ5LjQyMjY5Mzk1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz03ND11OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6OTY6c3RhdGljIGludCBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9MTM1PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0NC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjE0NTpcXHRyZXQgPSBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oYmVhY29uKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0Ni1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQ5LjQ2NjY4NjIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAxOTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfcHNwb2xsX3dvcmthcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3NT1zdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgaW50IHJzc2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTI5My0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjI5NDpzdGF0aWMgdm9pZCBwNTRfcHNwb2xsX3dvcmthcm91bmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0yOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0zMjc9c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzg4LVxcdGlmICh1bmxpa2VseShwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DT05GX1BTKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjM4OTpcXHRcXHRwNTRfcHNwb2xsX3dvcmthcm91bmQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTM5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDkuNTA5NzA5NjI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI5Nzk4Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUDU0IEJ1ZyBGaXggYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhpcyBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgYHA1NF9maW5kX2llYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgc2l6ZW9mKG1nbXQpYCwgd2hpY2ggaXMganVzdCB0aGUgc2l6ZSBvZiB0aGUgcG9pbnRlciBpdHNlbGYgKDggYnl0ZXMpLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGBpZWVlODAyMTFfbWdtdGAgc3RydWN0dXJlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGNoZWNrIGBza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpYCB3YXMgdG9vIGxvb3NlLCBhbmQgaWYgdGhlIGJ1ZmZlciBzaXplIHdhcyBiZXR3ZWVuIDggYnl0ZXMgYW5kIHRoZSBmdWxsIHNpemUgb2YgdGhlIG1hbmFnZW1lbnQgZnJhbWUsIHdlIHdlcmUgYWNjZXNzaW5nIGBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlYCBvdXQgb2YgYm91bmRzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcy4gVGhlIGZpeCwgY2hhbmdpbmcgaXQgdG8gYHNpemVvZigqbWdtdClgLCBub3cgY29ycmVjdGx5IG1ha2VzIHRoZSBjaGVjay4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgcG9pbnRlciBhcml0aG1ldGljLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCB0aGluayBhYm91dCBob3cgcmVhY2hhYmxlIHRoaXMgZml4IGlzIHdpdGhpbiBTeXprYWxsZXIuIElzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiB0cmlnZ2VyIGVhc2lseT8gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBQNTQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFVTQiB2YXJpYW50LCBgUDU0X1VTQmAuIFN5emthbGxlciB1dGlsaXplcyBVU0IgZW11bGF0aW9uIHZpYSBgc3l6X3VzYl9jb25uZWN0YCwgcmF3LWdhZGdldCwgYW5kIHVzYi1mdXp6ZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBnZXQgYHA1NHVzYmAgdG8gcHJvYmUgYW5kIGxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhhdCdzIHRoZSBrZXkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBwNTR1X3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBJdCBjaGVja3MgZW5kcG9pbnRzLCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBjYWxscyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhpcyBmaXJtd2FyZSBsb2FkaW5nIGlzIHByb2JhYmx5IHdoZXJlIHdlIGNhbiBnZXQgdGhlIG1vc3QgbWlsZWFnZSBmb3IgZnV6emluZy4gVG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZlYXNpYmxlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgcDU0dV9sb2FkX2Zpcm13YXJlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBwNTR1c2IuY2AgZHJpdmVyIGZpbGUuIFRoYXQgd2lsbCByZXZlYWwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV0ZXJtaW5lIGlmIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgZmlybXdhcmUgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjowNi42Mzk1MTA5ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg0MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTR1X2xvYWRfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9ODY3PXN0YXRpYyBpbnQgcDU0dV9zdGFydF9vcHMoc3RydWN0IHA1NHVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjkxOTpzdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTIwLVxcdFxcdFxcdFxcdCAgdm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjk1MzpzdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk1NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NzMtXFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLCBHRlBfS0VSTkVMLCBwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NzQ6XFx0XFx0XFx0XFx0ICAgICAgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTc1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05ODQ9c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTEwNDgtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxMDQ5OlxcdGVyciA9IHA1NHVfbG9hZF9maXJtd2FyZShkZXYsIGludGYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMDUwLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjA2Ljc2MzM1OTE3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc0OTc0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIGRvbmUgYXN5bmNocm9ub3VzbHkgdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YC4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgaW5pdGlhdGVkIGJ5IGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgYW5kIGNvbnRyYXN0IGl0IHdpdGggdGhlIHN0YW5kYXJkLCBzeW5jaHJvbm91cyBhcHByb2FjaC5cblxuKipBbmFseXppbmcgRmlybXdhcmUgTG9hZGluZyB3aXRoIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAqKlxuXG5NeSBndXQgdGVsbHMgbWUgdGhhdCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCBpcyB0aGUgY3J1Y2lhbCBjYWxsYmFjayBmdW5jdGlvbiBpbnZvbHZlZCwgc2luY2UgY2FsbGJhY2tzIGFyZSB3aGF0IGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgYXJlIGtub3duIGZvci4gSXQncyBwcm9iYWJseSB0aGUgZW5kcG9pbnQgb2YgdGhhdCBwcm9jZXNzLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGZpcm13YXJlIGRhdGEgaXMgZmluYWxseSBoYW5kZWQgb2ZmLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZsb3cuIFdoYXQncyB0aGUgY29udGV4dD8gV2hvIGNhbGxzIGl0IGFuZCB3aHk/XG5cblRoZW4gdGhlcmUncyBgcDU0dV9zdGFydF9vcHNgLiBJIHN1c3BlY3QgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBvciBlbmFibGVtZW50IG9mIHRoZSBkZXZpY2UgYWZ0ZXIgdGhlIGZpcm13YXJlIGhhcyBiZWVuIGxvYWRlZCwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgY2FsbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGl0IHdhaXQ/IERvZXMgaXQgcHJvY2VlZCByaWdodCBhd2F5PyBPciBpcyBpdCBjb25kaXRpb25hbCBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgaWYgaXQncyBzeW5jaHJvbml6ZWQsIGFuZCBpZiBub3QsIGhvdyBpdCBhZGRyZXNzZXMgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IG11dGV4ZXMgaW52b2x2ZWQ/XG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBhbmQgaWYgaXQgaXMgZG9uZSBwcm9wZXJseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZSBwb2ludCB3aGVyZSB0aGUgYXN5bmNocm9ub3VzIHJlcXVlc3QgaXMgbWFkZSBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIHdoZW4gdGhlIGRldmljZSBpcyBmdWxseSBvcGVyYXRpb25hbCB0byBnYWluIHRoaXMgdW5kZXJzdGFuZGluZy4gU28sIEkgd2lsbCBzdGFydCByZWFkaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIHRyYWNpbmcgdGhlIHZhcmlhYmxlcywgYW5kIGNoYXJ0aW5nIHRoZSBleGVjdXRpb24gZmxvdyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZpcm13YXJlIGxvYWQgc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MDkuOTM4MzM2NjUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE4OlxcdFxcbiA5MTk6XFx0c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXFxuIDkyMDpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNvbnRleHQpXFxuIDkyMTpcXHR7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gY29udGV4dDtcXG4gOTIzOlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcHJpdi1cXHUwMDNldWRldjtcXG4gOTI0OlxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gcHJpdi1cXHUwMDNlaW50ZjtcXG4gOTI1OlxcdFxcdGludCBlcnI7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlmIChmaXJtd2FyZSkge1xcbiA5Mjg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZncgPSBmaXJtd2FyZTtcXG4gOTI5OlxcdFxcdFxcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xcbiA5MzA6XFx0XFx0fSBlbHNlIHtcXG4gOTMxOlxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuIDkzMjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsIFxcXCJGaXJtd2FyZSBub3QgZm91bmQuXFxcXG5cXFwiKTtcXG4gOTMzOlxcdFxcdH1cXG4gOTM0OlxcdFxcbiA5MzU6XFx0XFx0Y29tcGxldGUoXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuIDkzNjpcXHRcXHQvKlxcbiA5Mzc6XFx0XFx0ICogQXQgdGhpcyBwb2ludCBwNTR1X2Rpc2Nvbm5lY3QgbWF5IGhhdmUgYWxyZWFkeSBmcmVlZFxcbiA5Mzg6XFx0XFx0ICogdGhlIFxcXCJwcml2XFxcIiBjb250ZXh0LiBEbyBub3QgdXNlIGl0IGFueW1vcmUhXFxuIDkzOTpcXHRcXHQgKi9cXG4gOTQwOlxcdFxcdHByaXYgPSBOVUxMO1xcbiA5NDE6XFx0XFxuIDk0MjpcXHRcXHRpZiAoZXJyKSB7XFxuIDk0MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0XFx0dXNiX2xvY2tfZGV2aWNlKHVkZXYpO1xcbiA5NDY6XFx0XFx0XFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xcbiA5NDc6XFx0XFx0XFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdHVzYl9wdXRfaW50ZihpbnRmKTtcXG4gOTUxOlxcdH1cXG4gOTUyOlxcdFxcbiA5NTM6XFx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbiA5NTQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDk1NTpcXHR7XFxuIDk1NjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDk1NzpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbiA5NTg6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2aWNlID0gXFx1MDAyNnVkZXYtXFx1MDAzZWRldjtcXG4gOTU5OlxcdFxcdGludCBlcnIsIGk7XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuIDk2NDpcXHRcXHRpID0gcDU0X2ZpbmRfdHlwZShwcml2KTtcXG4gOTY1OlxcdFxcdGlmIChpIFxcdTAwM2MgMClcXG4gOTY2OlxcdFxcdFxcdHJldHVybiBpO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cHJpdi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwiTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxcXG5cXFwiLFxcbiA5Njk6XFx0XFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0dXNiX2dldF9pbnRmKGludGYpO1xcbiA5NzI6XFx0XFx0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsIHA1NHVfZndsaXN0W2ldLmZ3LFxcbiA5NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLCBHRlBfS0VSTkVMLCBwcml2LFxcbiA5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKTtcXG4gOTc1OlxcdFxcdGlmIChlcnIpIHtcXG4gOTc2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcIihwNTR1c2IpIGNhbm5vdCBsb2FkIGZpcm13YXJlICVzIFxcXCJcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIiglZCkhXFxcXG5cXFwiLCBwNTR1X2Z3bGlzdFtpXS5mdywgZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MDkuOTM4NDU0NzYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTc3NDU3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUDU0IFVTQiBEcml2ZXIgVHJpYWdlOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHA1NCBVU0IgZHJpdmVyIGFuZCBob3cgd2UgY2FuIGVmZmVjdGl2ZWx5IGZ1enogaXQgd2l0aCBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcHJvbWlzaW5nLiBVU0IgZGV2aWNlcyBhcmUsIGFmdGVyIGFsbCwgZW11bGF0ZWQgdmlhIHN5emthbGxlciB1c2luZyBVU0IgUmF3IEdhZGdldCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCBvdXIgdHJpYWdlIHBoaWxvc29waHk6IHJlYWNoYWJsZSBkcml2ZXJzIHRocm91Z2ggdmlydHVhbCBidXNlcyBhcmUgcHJpbWUgdGFyZ2V0cy5cblxuTGV0J3MgcXVpY2tseSBydWxlIG91dCBhbnkgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXNuJ3Qgc29tZSBvYnNjdXJlLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVyIHJlcXVpcmluZyBleG90aWMgaGFyZHdhcmUuIFA1NCBVU0IgaXMgYSAqVVNCIGRyaXZlciosIGFuZCBjcnVjaWFsbHksIGl0J3MgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gd2l0aGluIHRoZSBRRU1VL3N5emthbGxlciBzZXR1cC4gVGhhdCdzIGEgaHVnZSB3aW4hXG5cbk5vdyBmb3IgdGhlIGludGVyZXN0aW5nIGJpdCDigJMgdGhlIGNvZGUgY2hhbmdlcy4gSSdtIHNlZWluZyBhIGZpeCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHA1NF9maW5kX2llYC4gVGhlIGZpeCBhZGRyZXNzZXMgYSBgc2l6ZW9mKG1nbXQpYCBpc3N1ZSwgY2hhbmdpbmcgaXQgZnJvbSBhIHBvaW50ZXIgc2l6ZSB0byB0aGUgYWN0dWFsIHN0cnVjdCBzaXplLCB3aGljaCBtZWFucyB0aGUgYm91bmRzIGNoZWNraW5nIG9mIHBhcnNpbmcgODAyLjExIElFcyBpcyBiZWluZyBmaXhlZCwgd2hpY2ggaXMgYSBiaWcgZGVhbCEgUG90ZW50aWFsbHkgY3JpdGljYWwuXG5cbkFscmlnaHQsIHRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGU/IExldCdzIGFuYWx5emUgdGhvc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIExvb2tzIGxpa2Ugd2UgbmVlZCBgUDU0X0NPTU1PTmAsIGBQNTRfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGVuYWJsZWQuIGBQNTRfQ09NTU9OYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGFuZCB0aGVuIHNlbGVjdHMgYEZXX0xPQURFUmAgYW5kIGBDUkNfQ0NJVFRgLiBgUDU0X1VTQmAgZGVwZW5kcyBvbiBgUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCYCBhbmQgc2VsZWN0cyBgQ1JDMzJgLiBXZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3MgaW4gdGhlIGBNYWtlZmlsZWAgaXRzZWxmLCBvZiBjb3Vyc2UuXG5cbk92ZXJhbGwsIHRoaXMgZHJpdmVyIHNlZW1zIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBlbXVsYXRpb24sIGNvdXBsZWQgd2l0aCB0aGUgbmF0dXJlIG9mIHRoZSBmaXggaW4gYHA1NF9maW5kX2llYCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyB3b3VsZCBiZSBhIHByb2ZpdGFibGUgYXZlbnVlIHRvIGV4cGxvcmUuIFdlJ3ZlIGp1c3QgZ290IHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MTQuNDU2MjAzNDg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdHA1NGNvbW1vbi1vYmpzXFx0XFx0XFx0Oj0gZWVwcm9tLm8gZndpby5vIHR4cngubyBtYWluLm9cXG4gICAzOlxcdHA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcXHQrPSBsZWQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfUDU0X0NPTU1PTilcXHQrPSBwNTRjb21tb24ub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1A1NF9VU0IpXFx0XFx0Kz0gcDU0dXNiLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19QNTRfUENJKVxcdFxcdCs9IHA1NHBjaS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfUDU0X1NQSSlcXHRcXHQrPSBwNTRzcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoxNC40NTYyODUyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxODg4ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIGFuZCBDYWxsZXJzIG9mIGBwNTRfZmluZF9pZWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIHRvIGBwNTRfZmluZF9pZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjYWxsZXJzLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UgdXNpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBwNTRfZmluZF9pZWAsIGFuZCBJIHNlZSB0aGUgZm9sbG93aW5nOiBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGBwNTRfYmVhY29uX3VwZGF0ZWAsIGFuZCBgcDU0X3J4X2RhdGFgLiBHb29kLCBub3cgSSBoYXZlIG15IHRhcmdldCBsaXN0LlxuXG5OZXh0LCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYHA1NF9maW5kX2llYC4gSXMgaXQgc3RhdGljLCBsb2NhbCwgb3IgZ2xvYmFsIGFuZCBleHBvcnRlZD8gQSBxdWljayBjaGVjayBzaG93cyBpdCdzIGRlY2xhcmVkIGluIGBsbWFjLmhgIGFuZCBkZWZpbmVkIGluIGBtYWluLmNgLCBhbmQgdGhlIGRlZmluaXRpb24gYXBwZWFycyBnbG9iYWwuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFzIGl0J3Mgbm90IHJlc3RyaWN0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUuIEkgYWxzbyBzZWUgdGhhdCBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGFuZCBgcDU0X3J4X2RhdGFgIGFyZSBhbGwgc3RhdGljLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBhcyB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHRoZSBnbG9iYWwgZnVuY3Rpb24gaW4gcXVlc3Rpb24uXG5cbkdpdmVuIHRoYXQgYHA1NF9yeF9kYXRhYCBpcyB1c2VkIHdpdGhpbiB0aGUgZmlsZSBgdHhyeC5jYCwgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB0aGF0IG1vZHVsZSBtaWdodCBjYWxsIGBwNTRfZmluZF9pZWAuIExldCdzIGNoZWNrIGB0eHJ4LmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYHA1NF9yeGAuIEl0IHNlZW1zIHJlbGV2YW50IHRvIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjE4LjA3NTE3NjU1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5MjYxNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9Mjc9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk0LVxcdFxcdFxcdG1heGxlbiA9IHByaXYtXFx1MDAzZXR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTU6XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk2LVxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTEzNT1zdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTUzOmVudW0gcDU0X3J4X2RlY3J5cHRfc3RhdHVzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE1NC1cXHRQNTRfREVDUllQVF9OT05FID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTY3OnN0cnVjdCBwNTRfcnhfZGF0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC0xNjgtXFx0X19sZTE2IGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTE2ND1zdHJ1Y3QgcDU0X2NvbW1vbiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjY2LS8qIGludGVyZmFjZXMgZm9yIHRoZSBkcml2ZXJzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjI2NzppbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTI2OC12b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTE4ND1zdGF0aWMgdm9pZCBwNTRwX2NoZWNrX3J4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgKmluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM6MjIzOlxcdFxcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyNC1cXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRtYV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jPTMxND1zdGF0aWMgaW50IHA1NHNwaV9yeChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTM2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MzYzOlxcdGlmIChwNTRfcngocHJpdi1cXHUwMDNlaHcsIHNrYikgPT0gMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMzY0LVxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz0xNDA9c3RhdGljIHZvaWQgcDU0dV9yeF9jYihzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxNjM6XFx0aWYgKHA1NF9yeChkZXYsIHNrYikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTY0LVxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IocHJpdi1cXHUwMDNlY29tbW9uLnJ4X210dSArIDMyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM9Mjk0PXN0YXRpYyB2b2lkIHA1NF9wc3BvbGxfd29ya2Fyb3VuZChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI3OnN0YXRpYyBpbnQgcDU0X3J4X2RhdGEoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMjgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI5OlxcdHN0cnVjdCBwNTRfcnhfZGF0YSAqaGRyID0gKHN0cnVjdCBwNTRfcnhfZGF0YSAqKSBza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMzAtXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zOTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozOTk6c3RhdGljIHZvaWQgcDU0X3J4X2ZyYW1lX3NlbnQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo0ODg6c3RhdGljIHZvaWQgcDU0X3J4X2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy01MjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo1MjU6c3RhdGljIHZvaWQgcDU0X3J4X3N0YXRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNTI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE5OnN0YXRpYyB2b2lkIHA1NF9yeF90cmFwKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjU1OnN0YXRpYyBpbnQgcDU0X3J4X2NvbnRyb2woc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjAtXFx0Y2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY2MTpcXHRcXHRwNTRfcnhfZnJhbWVfc2VudChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjYyLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjYzLVxcdGNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjY0OlxcdFxcdHA1NF9yeF90cmFwKHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2OC1cXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSzpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY2OTpcXHRcXHRwNTRfcnhfc3RhdHMocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3MS1cXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjcyOlxcdFxcdHA1NF9yeF9lZXByb21fcmVhZGJhY2socHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3My1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjgzLS8qIHJldHVybnMgemVybyBpZiBza2IgY2FuIGJlIHJldXNlZCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6Njg0OmludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg5LVxcdGlmICh0eXBlIFxcdTAwMjYgUDU0X0hEUl9GTEFHX0NPTlRST0wpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTA6XFx0XFx0cmV0dXJuIHA1NF9yeF9jb250cm9sKHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02OTEtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjkyOlxcdFxcdHJldHVybiBwNTRfcnhfZGF0YShwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjkzLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY5NDpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcngpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjk1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoxOC4zNzQ0NDM5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNjQ3NjExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEJlYWNvbiBVcGRhdGUgRW50cnkgUG9pbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBiZWFjb24gZnVuY3Rpb25hbGl0eS4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIHVwZGF0ZSBlbnRyeSBwb2ludCBjb3JyZWN0bHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgd2UgY292ZXJlZCBpdCwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgb3ZlciB0byBgbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IHBpbnBvaW50IHdoZXJlIHRoZSBiZWFjb24gdXBkYXRlIHNlcXVlbmNlIGtpY2tzIG9mZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBlc3BlY2lhbGx5IHdpdGggaG93IHdlJ3JlIGFyY2hpdGVjdGluZyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMuIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgYXJlIHByb3Blcmx5IGNvb3JkaW5hdGVkIGZvciBzZWFtbGVzcyBleGVjdXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMgZHVyaW5nIHRoZSByZWZhY3Rvci4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MjAuNzgwOTIyMzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY2MTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9OTY9c3RhdGljIGludCBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTM1OnN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzYtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NDUyPXN0YXRpYyB2b2lkIHA1NF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNDY3LVxcdFxcdHA1NF9zZXR1cF9tYWMocHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzo0Njg6XFx0XFx0cDU0X2JlYWNvbl91cGRhdGUocHJpdiwgdmlmKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTQ2OS1cXHRcXHRwNTRfc2V0X2VkY2YocHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjIwLjg3NDU4OTEyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzY4OTIwOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgcDU0X2ZpbmRfaWVgLCBhcyB0aGF0J3MgdGhlIG9uZSB0aGF0IHdhcyBhY3R1YWxseSBtb2RpZmllZC4gV2UncmUgdGFsa2luZyBhYm91dCBhIGJ1ZmZlciBsZW5ndGggY2hlY2sgaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1ha2luZyBhIG1pc3Rha2UgaW4gY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBiZWluZyByZWFkIGJ5IHVzaW5nIHRoZSBzaXplIG9mIGEgcG9pbnRlciAoYHNpemVvZihtZ210KWApIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYgKGBzaXplb2YoKm1nbXQpYCkuIFRoYXQncyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgYWxsb3dpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiBiZWFjb25zIG9yIHJlY2VpdmVkIGZyYW1lcy4gV2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyBoYXMgYmVlbiBpZGVudGlmaWVkIG1lYW5zIGl0J3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciB0ZXN0aW5nLiBUaGUgZGVzY3JpcHRpb24gc3BlY2lmaWVzIHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGJlYWNvbiBhbmQgZnJhbWUgcHJvY2Vzc2luZywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2Ygd2lyZWxlc3MgYW5kIG5ldHdvcmsgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJvdmlkZWQgYFJlYXNvbmluZ2AgY29uZmlybXMgaXQgY2FuIGJlIGV4cGxvaXRlZCBieSBjYXJlZnVsbHkgY3JhZnRlZCB3aXJlbGVzcyBwYWNrZXRzLlxuXG5Mb29raW5nIGF0IHRoZSBvdGhlciBzeW1ib2xzIGxpc3RlZDogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAsIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLCBgcDU0X2JlYWNvbl91cGRhdGVgLCBgcDU0X3J4YCwgYW5kIGBwNTRfYnNzX2luZm9fY2hhbmdlZGAg4oCTIHRoZXkncmUgYWxsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGJlYWNvbiBhbmQgZnJhbWUgaGFuZGxpbmcuIFdlIHNob3VsZCBrZWVwIHRoZXNlIGluIG1pbmQgd2hlbiBhbmFseXppbmcgdGhlIG92ZXJhbGwgcGF0Y2guIFRoZXkgcHJvYmFibHkgYXJlIGFkamFjZW50IGNvZGUuXG5cblRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBVU0IgZ2FkZ2V0IC8gcmF3X2dhZGdldCBpbnRlcmZhY2VzIGFzIGFuIG9wdGlvbiBpcyB2ZXJ5IGhlbHBmdWwuIEl0IG1lYW5zIHdlIGNhbiBlbXVsYXRlIHRoZSBkcml2ZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIG1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gdHJpZ2dlciBhbmQgcmVwcm9kdWNlIHRoZSB2dWxuZXJhYmlsaXR5LCBvciBldmVuIGZ1enogaXQgaWYgd2UgY2FuIGZpbmQgYSBnb29kIHNldHVwLlxuXG5GaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgKGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgKSB0ZWxscyBtZSB3aGF0IGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoaXMgaXNzdWUuIFRoZXNlIGFyZSBlc3NlbnRpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyBzdWJtaXQgdGhlIHJlc3VsdHMgYW5kIGZvY3VzIG9uIGZ1cnRoZXIgdGVzdGluZy4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyNCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MjUuNjQzNTEzNzY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjY1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQNTRfQ09NTU9OXCIsXG4gICAgXCJQNTRfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9maW5kX2llXCIsXG4gICAgXCJwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW1cIixcbiAgICBcInA1NF9wc3BvbGxfd29ya2Fyb3VuZFwiLFxuICAgIFwicDU0X2JlYWNvbl91cGRhdGVcIixcbiAgICBcInA1NF9yeFwiLFxuICAgIFwicDU0X2Jzc19pbmZvX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X2ZpbmRfaWVcIixcbiAgICBcInA1NF9iZWFjb25fZm9ybWF0X2llX3RpbVwiLFxuICAgIFwicDU0X3BzcG9sbF93b3JrYXJvdW5kXCIsXG4gICAgXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICAgIFwicDU0X3J4XCIsXG4gICAgXCJwNTRfYnNzX2luZm9fY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjI1Ljc2NzE4NjA4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDk4NTc2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoyNS43Njc2MDI1MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDg0OTQzNjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDRjOTUxNzkyZjUwMjBjMGI1ZjEwZDY1NzJhYWJmMWYwNDRiODNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTE6MDE6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuaW5kZXggNTdhNjIxMDhjYmMzNS4uZDNlMTc3NjE3NGY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbkBAIC03Niw3ICs3Niw3IEBAIHU4ICpwNTRfZmluZF9pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpZSlcbiBcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gXHR1OCAqcG9zLCAqZW5kO1xuIFxuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YobWdtdCkpXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IHNpemVvZigqbWdtdCkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cG9zID0gKHU4ICopbWdtdC1cdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjI1Ljc2NzYwMzU0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTI2NjA3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFBhdGNoIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQncyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgYm91bmRzIGNoZWNrIHVwZGF0ZSBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgb3JpZ2luYWwgY2hlY2sgYHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YobWdtdClgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gYHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpYC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXguIFRoaXMgaXMgYSBiYXNpYyBmaXgsIGxpa2VseSBhdm9pZGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBzb21ldGhpbmcgdGVycmlibHkgY29tcGxleC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSBrbm93bGVkZ2Ugb2YgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gc2VlIHRoZSBmdW5jdGlvbi4gT2theSwgSSd2ZSBnb3QgdGhlIGNvbnRleHQuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGltbWVkaWF0ZWx5IHNjcmVhbWluZyBmb3IgZXh0cmEgc2NydXRpbnkgd2l0aCBLTVNBTi4gV2hpbGUgYW55IGJvdW5kcyBjaGVjayBmaXggKmNvdWxkKiBiZSBpbXBvcnRhbnQsIHRoaXMgb25lIHNlZW1zIHByZXR0eSBmb2N1c2VkLiBUaGUgZnVuY3Rpb24gaXMgcGFyc2luZyBJRSBoZWFkZXJzLCBzbyBpdCdzIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBkYXRhLCBidXQgaXQncyBhICp2ZXJ5KiBiYXNpYyBjaGVjayBvbiB0aGUgbGVuZ3RoIG9mIGFuIGluY29taW5nIHNrYi4gSSdtIGdvaW5nIHRvIG1ha2UgdGhlIGNhbGwgYW5kIHNheSBgTmVlZHNLTVNBTj1mYWxzZWAgb24gdGhpcyBvbmUuIEl0J3MgYSBnb29kIHBhdGNoLCBidXQgc3RhbmRhcmQgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0J3MgZmxhZyB0aGlzIGFzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjozMi42OTQyMTU1MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0XFx0YnJlYWs7XFxuICA2MTpcXHRcXHRkZWZhdWx0OlxcbiAgNjI6XFx0XFx0XFx0YnJlYWs7XFxuICA2MzpcXHRcXHR9XFxuICA2NDpcXHR9XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyBpbnQgcDU0X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiAgNjc6XFx0XFx0XFx0XFx0Ym9vbCBzZXQpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0cmV0dXJuIHA1NF91cGRhdGVfYmVhY29uX3RpbShwcml2LCBzdGEtXFx1MDAzZWFpZCwgc2V0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3NzpcXHRcXHR1OCAqcG9zLCAqZW5kO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRwb3MgPSAodTggKiltZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcXG4gIDgzOlxcdFxcdGVuZCA9IHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgODQ6XFx0XFx0d2hpbGUgKHBvcyBcXHUwMDNjIGVuZCkge1xcbiAgODU6XFx0XFx0XFx0aWYgKHBvcyArIDIgKyBwb3NbMV0gXFx1MDAzZSBlbmQpXFxuICA4NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0XFx0aWYgKHBvc1swXSA9PSBpZSlcXG4gIDg5OlxcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdHBvcyArPSAyICsgcG9zWzFdO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHQvKlxcbiAgOTk6XFx0XFx0ICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS5cXG4gMTAwOlxcdFxcdCAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsXFxuIDEwMTpcXHRcXHQgKiBiZWNhdXNlIGl0J2xsIGJlIG92ZXJ3cml0dGVuIVxcbiAxMDI6XFx0XFx0ICovXFxuIDEwMzpcXHRcXHR1OCAqdGltO1xcbiAxMDQ6XFx0XFx0dTggZHRpbV9sZW47XFxuIDEwNTpcXHRcXHR1OCBkdGltX3BlcmlvZDtcXG4gMTA2OlxcdFxcdHU4ICpuZXh0O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XFxuIDEwOTpcXHRcXHRpZiAoIXRpbSlcXG4gMTEwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRkdGltX2xlbiA9IHRpbVsxXTtcXG4gMTEzOlxcdFxcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xcbiAxMTQ6XFx0XFx0bmV4dCA9IHRpbSArIDIgKyBkdGltX2xlbjtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKGR0aW1fbGVuIFxcdTAwM2MgMylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRtZW1tb3ZlKHRpbSwgbmV4dCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gbmV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjMyLjY5NDM2NzczOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTIyNjQ4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEtBU0FOIGlzIHRoZSBLZXkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZpeGVzIGEgc3VidGxlIGJ1ZyBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIGBzaXplb2ZgIGNvbmZ1c2lvbi4gSXQgd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLiAgYG1nbXRgIGlzIGEgcG9pbnRlciwgc28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGdldHRpbmcgdGhlIHNpemUgb2YgdGhlICpwb2ludGVyKiBpdHNlbGYgKDQgb3IgOCBieXRlcyBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlKSwgbm90IHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXQgcG9pbnRlZCB0byAoYHN0cnVjdCBpZWVlODAyMTFfbWdtdGApLiBUaGlzIG1lYW50IHRoYXQgaWYgdGhlIGBza2ItXHUwMDNlbGVuYCAodGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlcikgd2FzIHNtYWxsZXIgdGhhbiB0aGUgKmFjdHVhbCogbWFuYWdlbWVudCBmcmFtZSBoZWFkZXIgc2l6ZSAod2hpY2ggaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIpLCB0aGUgY29kZSB3b3VsZCB0cmVhdCBwYXJ0cyBvZiB0aGUgYnVmZmVyICpiZXlvbmQqIHRoZSB2YWxpZCBkYXRhIGFzIGlmIHRoZXkgd2VyZSB2YWxpZC4gIFNwZWNpZmljYWxseSwgYHBvc2Agd2FzIGJlaW5nIHNldCB0byBhbiBvZmZzZXQgdGhhdCB3YXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbG9vcCBjb3VsZCByZWFkIHBhc3QgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEuXG5cblRoYXQncyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCAoT09CKSBzY2VuYXJpby4gIEFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgS0FTQU4sIHRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiAgSXQncyBzZXQgdXAgdG8gZGV0ZWN0IHByZWNpc2VseSB0aGVzZSBraW5kcyBvZiBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIG5vdCB3aGF0IHRoaXMgZml4ZXMuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjayB2YXJpYWJsZXMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBhbnkgY29kZSBwYXRocyB0aGF0IGNvdWxkIGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gSXQgaXMgcHVyZWx5IGEgYm91bmRzIGNoZWNrIGNvcnJlY3Rpb24uIFRoZSBjb2RlICpiZWZvcmUqIHRoZSBwYXRjaCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoYXQncyB0aGUgdnVsbmVyYWJpbGl0eS4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBib3VuZHMgY2hlY2suXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5nbGUuIEtNU0FOJ3Mgam9iIGlzIHRvIHNuaWZmIG91dCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuICBCdXQgdGhlIGd1aWRpbmcgcHJpbmNpcGxlIGlzLCBhbmQgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLCBcInRoZXJlIGlzIG5vIHNlbnNlIGluIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGlmIGEgYnVnIGNhbiBiZSBjYXVnaHQgYnkgS0FTQU4uLi4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9yc1wiLiAgVGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIGlzc3VlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoYXQsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBzaXR1YXRpb24uIFRoZSBwYXRjaCBkb2Vzbid0IHRvdWNoLCBvciBjcmVhdGUsIGFueSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm90IGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHJpc2sgb2Yga2VybmVsIGluZm8gbGVha2luZy5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYW4gT09CLCBhbmQgYmVjYXVzZSBLQVNBTiBpcyBiZXN0IHN1aXRlZCB0byBjYXRjaGluZyB0aGF0IGtpbmQgb2YgaXNzdWUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblNvLCB0aGUgcmVhc29uaW5nIEkgd291bGQgcHJlcGFyZSB3b3VsZCBiZTpcblxuKiAgIFRoZSBwYXRjaCBmaXhlcyBhIGBzaXplb2ZgIHR5cG8gaW4gYHA1NF9maW5kX2llKClgLCBhIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jYC4gVGhlIHR5cG8gd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLlxuKiAgIEtBU0FOIGlzIGFwcHJvcHJpYXRlIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBzaXplIG9mIHRoZSBza2IgYnVmZmVyIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX21nbXRgIGhlYWRlci4gVGhlIGNvcnJlY3RlZCBjb2RlIGZpeGVzIHRoZSBPT0IgcmVhZC5cbiogICBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgb3IgaW5mbyBsZWFraW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTczLCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjQwLjYxNzAxOTMwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvbs5t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 10:19:53 +0000 UTC FinishedAt: 2026-09-04 11:02:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "a64a20fb270f244a25c16c184c015b104278a06f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "a64a20fb270f244a25c16c184c015b104278a06f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "152900a9-1075-4940-8f82-b361428bcf0c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_find_ie", "p54_beacon_format_ie_tim", "p54_pspoll_workaround", "p54_beacon_update", "p54_rx", "p54_bss_info_changed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fZm9ybWF0X2llX3RpbSYjMzQ7LAogICAgJiMzNDtwNTRfcHNwb2xsX3dvcmthcm91bmQmIzM0OywKICAgICYjMzQ7cDU0X2JlYWNvbl91cGRhdGUmIzM0OywKICAgICYjMzQ7cDU0X3J4JiMzNDssCiAgICAmIzM0O3A1NF9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlIG9yIHJlYWRpbmcgcGFzdCB0aGUgc2tiIGRhdGEgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuaW5kZXggNTdhNjIxMDhjYmMzNS4uZDNlMTc3NjE3NGY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbkBAIC03Niw3ICYjNDM7NzYsNyBAQCB1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0dTggKnBvcywgKmVuZDtcbiBcbi1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpKVxuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwb3MgPSAodTggKiltZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fZm9ybWF0X2llX3RpbSYjMzQ7LAogICAgJiMzNDtwNTRfcHNwb2xsX3dvcmthcm91bmQmIzM0OywKICAgICYjMzQ7cDU0X2JlYWNvbl91cGRhdGUmIzM0OywKICAgICYjMzQ7cDU0X3J4JiMzNDssCiAgICAmIzM0O3A1NF9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jCmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYwpAQCAtNzYsNyAmIzQzOzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKQogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXU4ICpwb3MsICplbmQ7CiAKLQlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpKQomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKCptZ210KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwb3MgPSAodTggKiltZ210LSZndDt1LmJlYWNvbi52YXJpYWJsZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNQoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBhbmQgdGhlbiBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY2AuIE5vdywgdGhlIGNoYW5nZSB3aXRoaW4gYHA1NF9maW5kX2llYCByZWFsbHkgc3RhbmRzIG91dC4gVGhlIGNvbmRpdGlvbiBgaWYgKHNrYi0mZ3Q7bGVuICZsdDs9IHNpemVvZihtZ210KSlgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGlmIChza2ItJmd0O2xlbiAmbHQ7PSBzaXplb2YoKm1nbXQpKWAuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBzaXplIGNhbGN1bGF0aW9uIGVycm9yOyB0aGUgZm9ybWVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGlsZSB0aGUgbGF0dGVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2Ygd2hhdCB0aGUgcG9pbnRlciBpcyAqcG9pbnRpbmcqIGF0LiBHb29kIGNhdGNoIQoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBwNTQgZHJpdmVyIGFuZCB0cmFjZSB3aGVyZSBgcDU0X2ZpbmRfaWVgIGlzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCBpbnRlcmZhY2VzIHRoaXMgZHJpdmVyIHN1cHBvcnRzOiBpcyBpdCBQQ0ksIFVTQiwgU1BJLCBvciBhIGNvbWJpbmF0aW9uPyBBbmQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaXMgdGhpcyBkcml2ZXIgcmVhY2hhYmxlIGluIG1vcmUgc3BlY2lhbGl6ZWQgZW52aXJvbm1lbnRzPyBEb2VzIHN5emthbGxlciBoYXZlIGVhc3kgYWNjZXNzIHRvIGl0LCB1c2luZyBVU0IgZW11bGF0aW9uLCBSYXcgR2FkZ2V0LCBvciBkb2VzIGl0IG9wZXJhdGUgdmlhIG1hYzgwMjExIGh3c2ltIG9yIHZpcnRpbz8gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBjYW4gYmUgcmVhY2hlZCBpbiBzeXprYWxsZXIgb3IgYW5vdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgcXVpY2sgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgc291cmNlLCBvciBpZiB0aGF0JiMzOTtzIG5vdCBlZmZlY3RpdmUsIEkmIzM5O2xsIGhhdmUgdG8gcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyBkaXJlY3RseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9maW5kX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTU1ND1zdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnAsIGNvbnN0IHUxNiBmcmVxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1Ni0vKiB1dGlsaXR5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oOjU1Nzp1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC01NTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz02Nj1zdGF0aWMgaW50IHA1NF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzo3NDp1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTc1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTk2PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjEwODpcdHRpbSA9IHA1NF9maW5kX2llKHNrYiwgV0xBTl9FSURfVElNKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTA5LVx0aWYgKCF0aW0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMTM6XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTMxNC1cdGlmICghdGltKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdHJldHVybiBwNTRfdXBkYXRlX2JlYWNvbl90aW0ocHJpdiwgc3RhLVx1MDAzZWFpZCwgc2V0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gIDc3Olx0XHR1OCAqcG9zLCAqZW5kO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKVxuICA4MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODE6XHRcbiAgODI6XHRcdHBvcyA9ICh1OCAqKW1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGU7XG4gIDgzOlx0XHRlbmQgPSBza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICA4NDpcdFx0d2hpbGUgKHBvcyBcdTAwM2MgZW5kKSB7XG4gIDg1Olx0XHRcdGlmIChwb3MgJiM0MzsgMiAmIzQzOyBwb3NbMV0gXHUwMDNlIGVuZClcbiAgODY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODc6XHRcbiAgODg6XHRcdFx0aWYgKHBvc1swXSA9PSBpZSlcbiAgODk6XHRcdFx0XHRyZXR1cm4gcG9zO1xuICA5MDpcdFxuICA5MTpcdFx0XHRwb3MgJiM0Mzs9IDIgJiM0MzsgcG9zWzFdO1xuICA5MjpcdFx0fVxuICA5MzpcdFx0cmV0dXJuIE5VTEw7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4gIDk3Olx0e1xuICA5ODpcdFx0LypcbiAgOTk6XHRcdCAqIHRoZSBnb29kIGV4Y3VzZSBmb3IgdGhpcyBtZXNzIGlzIC4uLiB0aGUgZmlybXdhcmUuXG4gMTAwOlx0XHQgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLFxuIDEwMTpcdFx0ICogYmVjYXVzZSBpdCYjMzk7bGwgYmUgb3ZlcndyaXR0ZW4hXG4gMTAyOlx0XHQgKi9cbiAxMDM6XHRcdHU4ICp0aW07XG4gMTA0Olx0XHR1OCBkdGltX2xlbjtcbiAxMDU6XHRcdHU4IGR0aW1fcGVyaW9kO1xuIDEwNjpcdFx0dTggKm5leHQ7XG4gMTA3Olx0XG4gMTA4Olx0XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG4gMTA5Olx0XHRpZiAoIXRpbSlcbiAxMTA6XHRcdFx0cmV0dXJuIDA7XG4gMTExOlx0XG4gMTEyOlx0XHRkdGltX2xlbiA9IHRpbVsxXTtcbiAxMTM6XHRcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xuIDExNDpcdFx0bmV4dCA9IHRpbSAmIzQzOyAyICYjNDM7IGR0aW1fbGVuO1xuIDExNTpcdFxuIDExNjpcdFx0aWYgKGR0aW1fbGVuIFx1MDAzYyAzKVxuIDExNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMTg6XHRcbiAxMTk6XHRcdG1lbW1vdmUodGltLCBuZXh0LCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBuZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFA1NF9DT01NT05cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnRtYWMgUHJpc201NCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA1Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gICA2Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy5cbiAgIDk6XHRcdCAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJL1NQSSBmcm9udC1lbmRzXG4gIDEwOlx0XHQgIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgYW55IGRldmljZXMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAxMzpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUDU0X1VTQlxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBVU0Igc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBVU0JcbiAgMjA6XHRcdHNlbGVjdCBDUkMzMlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgVVNCIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAyNTpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICAyNjpcdFxuICAyNzpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHVzYi5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgUDU0X1BDSVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBQQ0kgc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBQQ0lcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcbiAgMzY6XHRcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRwY2kuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFA1NF9TUElcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydFwmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBTUElfTUFTVEVSXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBzdGxjNDU1MCBvciBzdGxjNDU2MCBiYXNlZCB3aXJlbGVzcyBjaGlwc1xuICA0ODpcdFx0ICBzdWNoIGFzIE5va2lhJiMzOTtzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0c3BpLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXG4gIDUzOlx0XHRib29sIFwmIzM0O0luY2x1ZGUgZmFsbGJhY2sgRUVQUk9NIGJsb2JcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gUDU0X1NQSVxuICA1NTpcdFx0ZGVmYXVsdCBuXG4gIDU2Olx0XHRoZWxwXG4gIDU3Olx0XHQgVW5saWtlIHRoZSBQQ0kgb3IgVVNCIGRldmljZXMsIHRoZSBTUEkgdmFyaWFudHMgZG9uJiMzOTt0IGhhdmVcbiAgNTg6XHRcdCBhIGRlZGljYXRlZCBFRVBST00gY2hpcCB0byBzdG9yZSBhbGwgZGV2aWNlIHNwZWNpZmljIHZhbHVlc1xuICA1OTpcdFx0IGZvciBjYWxpYnJhdGlvbiwgY291bnRyeSBhbmQgaW50ZXJmYWNlIHNldHRpbmdzLlxuICA2MDpcdFxuICA2MTpcdFx0IFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gbG9hZCB0aGUgaW1hZ2UgXCYjMzQ7MzgyNi5lZXByb21cJiMzNDssIGlmIHRoZVxuICA2MjpcdFx0IGZpbGUgaXMgcHV0IGF0IHRoZSByaWdodCBwbGFjZS4gKHVzdWFsbHkgL2xpYi9maXJtd2FyZS4pXG4gIDYzOlx0XG4gIDY0Olx0XHQgT25seSBpZiB0aGlzIHJlcXVlc3QgZmFpbHMsIHRoaXMgb3B0aW9uIHdpbGwgcHJvdmlkZSBhXG4gIDY1Olx0XHQgYmFja3VwIHNldCBvZiBnZW5lcmljIHZhbHVlcyB0byBnZXQgdGhlIGRldmljZSB3b3JraW5nLlxuICA2NjpcdFxuICA2NzpcdFx0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYWJvdXQgNGsgdG8gcDU0c3BpLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBQNTRfTEVEU1xuICA3MDpcdFx0Ym9vbFxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9MRURTIFx1MDAyNlx1MDAyNiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IFA1NF9DT01NT04pXG4gIDcyOlx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI1CgkJCQkJCQlvdXRwdXQ6IDg1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUDU0IFVTQiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXkgd2l0aCBQNTQgYW5kIGl0cyBVU0IgdXNhZ2UuIENhbiB3ZSBsZXZlcmFnZSBVU0IgZW11bGF0aW9uIHdpdGhpbiBzeXprYWxsZXIgdG8gcHJvYmUgYFA1NF9VU0JgLCBvciBwZXJoYXBzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIGBtYWM4MDIxMWAgYW5kIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0aWVzIHRvIHNpbXVsYXRlIHRoZSBlbnZpcm9ubWVudD8KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6a2FsbGVyICphbHJlYWR5KiBoYXMgbWV0aG9kcyBmb3IgVVNCIGRyaXZlciBmdXp6aW5nLiBJdCBkb2VzIHRoaXMgdmlhIGByYXdfZ2FkZ2V0YCwgYHN5el91c2JfY29ubmVjdGAsIG9yIGRpcmVjdCBVU0IgZnV6emluZyB0ZWNobmlxdWVzLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLgoKU28sIHRoZSBuZXcgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkgbmVlZCB0byBleGFtaW5lIGBwNTR1c2IuY2Agc3BlY2lmaWNhbGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwcm9iZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwNTR1c2JgIG1vZHVsZSBnZXRzIHByb2JlZC4gQ3J1Y2lhbGx5LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIGZpcm13YXJlIGxvYWRpbmcgaXMgaW52b2x2ZWQgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkgdG8gdGhlIGZ1enppbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUgc2VxdWVuY2Ugd2lsbCBiZSBwaXZvdGFsIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MzE9TU9EVUxFX0ZJUk1XQVJFKFwmIzM0O2lzbDM4ODd1c2JcJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjMzOnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwNTR1X2RyaXZlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0zNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9OTE5PXN0YXRpYyB2b2lkIHA1NHVfbG9hZF9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDUtXHRcdHVzYl9sb2NrX2RldmljZSh1ZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NDY6XHRcdHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk0Ny1cdFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTExMTc9c3RhdGljIGludCBwNTR1X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjQ6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjUtXHQubmFtZVx0PSBcJiMzNDtwNTR1c2JcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTE0MDptb2R1bGVfdXNiX2RyaXZlcihwNTR1X2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHRwcml2ID0gZGV2LVx1MDAzZXByaXY7XG4xMDAxOlx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVX0lOVkFMSURfSFc7XG4xMDAyOlx0XG4xMDAzOlx0XHRTRVRfSUVFRTgwMjExX0RFVihkZXYsIFx1MDAyNmludGYtXHUwMDNlZGV2KTtcbjEwMDQ6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcbjEwMDU6XHRcdHByaXYtXHUwMDNldWRldiA9IHVkZXY7XG4xMDA2Olx0XHRwcml2LVx1MDAzZWludGYgPSBpbnRmO1xuMTAwNzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJ4X3F1ZXVlKTtcbjEwMDg6XHRcdGluaXRfdXNiX2FuY2hvcihcdTAwMjZwcml2LVx1MDAzZXN1Ym1pdHRlZCk7XG4xMDA5Olx0XG4xMDEwOlx0XHQvKiByZWFsbHkgbGF6eSBhbmQgc2ltcGxlIHdheSBvZiBmaWd1cmluZyBvdXQgaWYgd2UmIzM5O3JlIGEgMzg4NyAqL1xuMTAxMTpcdFx0LyogVE9ETzogc2hvdWxkIGp1c3Qgc3RpY2sgdGhlIGlkZW50aWZpY2F0aW9uIGluIHRoZSBkZXZpY2UgdGFibGUgKi9cbjEwMTI6XHRcdGkgPSBpbnRmLVx1MDAzZWFsdHNldHRpbmctXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzO1xuMTAxMzpcdFx0cmVjb2duaXplZF9waXBlcyA9IDA7XG4xMDE0Olx0XHR3aGlsZSAoaS0tKSB7XG4xMDE1Olx0XHRcdHN3aXRjaCAoaW50Zi1cdTAwM2VhbHRzZXR0aW5nLVx1MDAzZWVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykge1xuMTAxNjpcdFx0XHRjYXNlIFA1NFVfUElQRV9EQVRBOlxuMTAxNzpcdFx0XHRjYXNlIFA1NFVfUElQRV9NR01UOlxuMTAxODpcdFx0XHRjYXNlIFA1NFVfUElQRV9CUkc6XG4xMDE5Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0RFVjpcbjEwMjA6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfREFUQSB8IFVTQl9ESVJfSU46XG4xMDIxOlx0XHRcdGNhc2UgUDU0VV9QSVBFX01HTVQgfCBVU0JfRElSX0lOOlxuMTAyMjpcdFx0XHRjYXNlIFA1NFVfUElQRV9CUkcgfCBVU0JfRElSX0lOOlxuMTAyMzpcdFx0XHRjYXNlIFA1NFVfUElQRV9ERVYgfCBVU0JfRElSX0lOOlxuMTAyNDpcdFx0XHRjYXNlIFA1NFVfUElQRV9JTlQgfCBVU0JfRElSX0lOOlxuMTAyNTpcdFx0XHRcdHJlY29nbml6ZWRfcGlwZXMmIzQzOyYjNDM7O1xuMTAyNjpcdFx0XHR9XG4xMDI3Olx0XHR9XG4xMDI4Olx0XHRwcml2LVx1MDAzZWNvbW1vbi5vcGVuID0gcDU0dV9vcGVuO1xuMTAyOTpcdFx0cHJpdi1cdTAwM2Vjb21tb24uc3RvcCA9IHA1NHVfc3RvcDtcbjEwMzA6XHRcdGlmIChyZWNvZ25pemVkX3BpcGVzIFx1MDAzYyBQNTRVX1BJUEVfTlVNQkVSKSB7XG4xMDMxOlx0I2lmZGVmIENPTkZJR19QTVxuMTAzMjpcdFx0XHQvKiBJU0wzODg3IG5lZWRzIGEgZnVsbCByZXNldCBvbiByZXN1bWUgKi9cbjEwMzM6XHRcdFx0dWRldi1cdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xuMTAzNDpcdCNlbmRpZiAvKiBDT05GSUdfUE0gKi9cbjEwMzU6XHRcdFx0ZXJyID0gcDU0dV9kZXZpY2VfcmVzZXQoZGV2KTtcbjEwMzY6XHRcbjEwMzc6XHRcdFx0cHJpdi1cdTAwM2Vod190eXBlID0gUDU0VV8zODg3O1xuMTAzODpcdFx0XHRkZXYtXHUwMDNlZXh0cmFfdHhfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbG04N190eF9oZHIpO1xuMTAzOTpcdFx0XHRwcml2LVx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XG4xMDQwOlx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4ID0gcDU0dV90eF9sbTg3O1xuMTA0MTpcdFx0XHRwcml2LVx1MDAzZXVwbG9hZF9mdyA9IHA1NHVfdXBsb2FkX2Zpcm13YXJlXzM4ODc7XG4xMDQyOlx0XHR9IGVsc2Uge1xuMTA0MzpcdFx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVX05FVDIyODA7XG4xMDQ0Olx0XHRcdGRldi1cdTAwM2VleHRyYV90eF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7XG4xMDQ1Olx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcbjEwNDY6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X25ldDIyODA7XG4xMDQ3Olx0XHRcdHByaXYtXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfbmV0MjI4MDtcbjEwNDg6XHRcdH1cbjEwNDk6XHRcdGVyciA9IHA1NHVfbG9hZF9maXJtd2FyZShkZXYsIGludGYpO1xuMTA1MDpcdFx0aWYgKGVycilcbjEwNTE6XHRcdFx0cDU0X2ZyZWVfY29tbW9uKGRldik7XG4xMDUyOlx0XHRyZXR1cm4gZXJyO1xuMTA1MzpcdH1cbjEwNTQ6XHRcbjEwNTU6XHRzdGF0aWMgdm9pZCBwNTR1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4xMDU2Olx0e1xuMTA1NzpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbjEwNTg6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXY7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAoIWRldilcbjEwNjE6XHRcdFx0cmV0dXJuO1xuMTA2MjpcdFxuMTA2MzpcdFx0cHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuMTA2NDpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRfbG9hZCk7XG4xMDY1Olx0XHRwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTtcbjEwNjY6XHRcbjEwNjc6XHRcdHJlbGVhc2VfZmlybXdhcmUocHJpdi1cdTAwM2Vmdyk7XG4xMDY4Olx0XHRwNTRfZnJlZV9jb21tb24oZGV2KTtcbjEwNjk6XHR9XG4xMDcwOlx0XG4xMDcxOlx0c3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTA3NDpcdFxuMTA3NTpcdFx0aWYgKCFkZXYpXG4xMDc2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTA3NzpcdFxuMTA3ODpcdFx0cDU0dV9zdG9wKGRldik7XG4xMDc5Olx0XHRyZXR1cm4gMDtcbjEwODA6XHR9XG4xMDgxOlx0XG4xMDgyOlx0c3RhdGljIGludCBwNTR1X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjEwODM6XHR7XG4xMDg0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTA4NTpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcbjEwODY6XHRcbjEwODc6XHRcdGlmICghZGV2KVxuMTA4ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEwODk6XHRcbjEwOTA6XHRcdHByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbjEwOTE6XHRcdGlmICh1bmxpa2VseSghKHByaXYtXHUwMDNldXBsb2FkX2Z3IFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWZ3KSkpXG4xMDkyOlx0XHRcdHJldHVybiAwO1xuMTA5MzpcdFxuMTA5NDpcdFx0cmV0dXJuIHByaXYtXHUwMDNldXBsb2FkX2Z3KGRldik7XG4xMDk1Olx0fVxuMTA5NjpcdFxuMTA5NzpcdHN0YXRpYyBpbnQgcDU0dV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuMTA5ODpcdHtcbjEwOTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTMKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBIaWVyYXJjaHkgb2YgYHA1NF9maW5kX2llYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwNTRfZmluZF9pZWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9uczogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAgYW5kIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBLbm93aW5nIHdoZXJlICp0aGV5KiBhcmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIGBwNTRfZmluZF9pZWAmIzM5O3Mgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgZml0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NzQ9dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjk2OnN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTEzNT1zdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQ0LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTQ1Olx0cmV0ID0gcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKGJlYWNvbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0Ni1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3NT1zdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgaW50IHJzc2kpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0yOTMtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjI5NDpzdGF0aWMgdm9pZCBwNTRfcHNwb2xsX3dvcmthcm91bmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTI5NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0zMjc9c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTM4OC1cdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9DT05GX1BTKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6Mzg5Olx0XHRwNTRfcHNwb2xsX3dvcmthcm91bmQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUDU0IEJ1ZyBGaXggYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBmaXguIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgcDU0X2ZpbmRfaWVgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGBzaXplb2YobWdtdClgLCB3aGljaCBpcyBqdXN0IHRoZSBzaXplIG9mIHRoZSBwb2ludGVyIGl0c2VsZiAoOCBieXRlcyksIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgYGllZWU4MDIxMV9tZ210YCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY2hlY2sgYHNrYi0mZ3Q7bGVuICZsdDs9IHNpemVvZihtZ210KWAgd2FzIHRvbyBsb29zZSwgYW5kIGlmIHRoZSBidWZmZXIgc2l6ZSB3YXMgYmV0d2VlbiA4IGJ5dGVzIGFuZCB0aGUgZnVsbCBzaXplIG9mIHRoZSBtYW5hZ2VtZW50IGZyYW1lLCB3ZSB3ZXJlIGFjY2Vzc2luZyBgbWdtdC0mZ3Q7dS5iZWFjb24udmFyaWFibGVgIG91dCBvZiBib3VuZHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIHByb2JsZW1zLiBUaGUgZml4LCBjaGFuZ2luZyBpdCB0byBgc2l6ZW9mKCptZ210KWAsIG5vdyBjb3JyZWN0bHkgbWFrZXMgdGhlIGNoZWNrLiBUaGlzIGlzIGJhc2ljLCBidXQgaW1wb3J0YW50LCBwb2ludGVyIGFyaXRobWV0aWMuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGZpeCBpcyB3aXRoaW4gU3l6a2FsbGVyLiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gdHJpZ2dlciBlYXNpbHk/IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIFA1NCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgVVNCIHZhcmlhbnQsIGBQNTRfVVNCYC4gU3l6a2FsbGVyIHV0aWxpemVzIFVTQiBlbXVsYXRpb24gdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCByYXctZ2FkZ2V0LCBhbmQgdXNiLWZ1enplci4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGdldCBgcDU0dXNiYCB0byBwcm9iZSBhbmQgbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgYHA1NHVfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuIEl0IGNoZWNrcyBlbmRwb2ludHMsIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGNhbGxzIGBwNTR1X2xvYWRfZmlybXdhcmVgLiBUaGlzIGZpcm13YXJlIGxvYWRpbmcgaXMgcHJvYmFibHkgd2hlcmUgd2UgY2FuIGdldCB0aGUgbW9zdCBtaWxlYWdlIGZvciBmdXp6aW5nLiBUbyBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmVhc2libGUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBwNTR1X2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHA1NHVzYi5jYCBkcml2ZXIgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBmaXJtd2FyZSBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfbG9hZF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5MTk6c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTIwLVx0XHRcdFx0ICB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTUzOnN0YXRpYyBpbnQgcDU0dV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTQtXHRcdFx0ICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk3My1cdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NzQ6XHRcdFx0XHQgICAgICBwNTR1X2xvYWRfZmlybXdhcmVfY2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk3NS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9OTg0PXN0YXRpYyBpbnQgcDU0dV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTA0OC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxMDQ5Olx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTA1MC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCYjMzk7cyBkb25lIGFzeW5jaHJvbm91c2x5IHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cyBpbml0aWF0ZWQgYnkgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBhbmQgY29udHJhc3QgaXQgd2l0aCB0aGUgc3RhbmRhcmQsIHN5bmNocm9ub3VzIGFwcHJvYWNoLgoKKipBbmFseXppbmcgRmlybXdhcmUgTG9hZGluZyB3aXRoIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAqKgoKTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNydWNpYWwgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2x2ZWQsIHNpbmNlIGNhbGxiYWNrcyBhcmUgd2hhdCBhc3luY2hyb25vdXMgZnVuY3Rpb25zIGFyZSBrbm93biBmb3IuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBlbmRwb2ludCBvZiB0aGF0IHByb2Nlc3MsIHRoZSBwb2ludCB3aGVyZSB0aGUgZmlybXdhcmUgZGF0YSBpcyBmaW5hbGx5IGhhbmRlZCBvZmYsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hvIGNhbGxzIGl0IGFuZCB3aHk/CgpUaGVuIHRoZXJlJiMzOTtzIGBwNTR1X3N0YXJ0X29wc2AuIEkgc3VzcGVjdCB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIG9yIGVuYWJsZW1lbnQgb2YgdGhlIGRldmljZSBhZnRlciB0aGUgZmlybXdhcmUgaGFzIGJlZW4gbG9hZGVkLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgY2FsbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGl0IHdhaXQ/IERvZXMgaXQgcHJvY2VlZCByaWdodCBhd2F5PyBPciBpcyBpdCBjb25kaXRpb25hbCBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3Mgc3luY2hyb25pemVkLCBhbmQgaWYgbm90LCBob3cgaXQgYWRkcmVzc2VzIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXRleGVzIGludm9sdmVkPwoKVGhlIGNvcmUgcXVlc3Rpb24gaXMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIGFuZCBpZiBpdCBpcyBkb25lIHByb3Blcmx5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBhc3luY2hyb25vdXMgcmVxdWVzdCBpcyBtYWRlIGFsbCB0aGUgd2F5IHRocm91Z2ggdG8gd2hlbiB0aGUgZGV2aWNlIGlzIGZ1bGx5IG9wZXJhdGlvbmFsIHRvIGdhaW4gdGhpcyB1bmRlcnN0YW5kaW5nLiBTbywgSSB3aWxsIHN0YXJ0IHJlYWRpbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucywgdHJhY2luZyB0aGUgdmFyaWFibGVzLCBhbmQgY2hhcnRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZmlybXdhcmUgbG9hZCBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxODpcdFxuIDkxOTpcdHN0YXRpYyB2b2lkIHA1NHVfbG9hZF9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLFxuIDkyMDpcdFx0XHRcdFx0ICB2b2lkICpjb250ZXh0KVxuIDkyMTpcdHtcbiA5MjI6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBjb250ZXh0O1xuIDkyMzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwcml2LVx1MDAzZXVkZXY7XG4gOTI0Olx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHByaXYtXHUwMDNlaW50ZjtcbiA5MjU6XHRcdGludCBlcnI7XG4gOTI2Olx0XG4gOTI3Olx0XHRpZiAoZmlybXdhcmUpIHtcbiA5Mjg6XHRcdFx0cHJpdi1cdTAwM2VmdyA9IGZpcm13YXJlO1xuIDkyOTpcdFx0XHRlcnIgPSBwNTR1X3N0YXJ0X29wcyhwcml2KTtcbiA5MzA6XHRcdH0gZWxzZSB7XG4gOTMxOlx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gOTMyOlx0XHRcdGRldl9lcnIoXHUwMDI2dWRldi1cdTAwM2VkZXYsIFwmIzM0O0Zpcm13YXJlIG5vdCBmb3VuZC5cXG5cJiMzNDspO1xuIDkzMzpcdFx0fVxuIDkzNDpcdFxuIDkzNTpcdFx0Y29tcGxldGUoXHUwMDI2cHJpdi1cdTAwM2Vmd193YWl0X2xvYWQpO1xuIDkzNjpcdFx0LypcbiA5Mzc6XHRcdCAqIEF0IHRoaXMgcG9pbnQgcDU0dV9kaXNjb25uZWN0IG1heSBoYXZlIGFscmVhZHkgZnJlZWRcbiA5Mzg6XHRcdCAqIHRoZSBcJiMzNDtwcml2XCYjMzQ7IGNvbnRleHQuIERvIG5vdCB1c2UgaXQgYW55bW9yZSFcbiA5Mzk6XHRcdCAqL1xuIDk0MDpcdFx0cHJpdiA9IE5VTEw7XG4gOTQxOlx0XG4gOTQyOlx0XHRpZiAoZXJyKSB7XG4gOTQzOlx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpXFxuXCYjMzQ7LCBlcnIpO1xuIDk0NDpcdFxuIDk0NTpcdFx0XHR1c2JfbG9ja19kZXZpY2UodWRldik7XG4gOTQ2Olx0XHRcdHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xuIDk0NzpcdFx0XHR1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTtcbiA5NDg6XHRcdH1cbiA5NDk6XHRcbiA5NTA6XHRcdHVzYl9wdXRfaW50ZihpbnRmKTtcbiA5NTE6XHR9XG4gOTUyOlx0XG4gOTUzOlx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuIDk1NDpcdFx0XHRcdCAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDk1NTpcdHtcbiA5NTY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA5NTc6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiA5NTg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldmljZSA9IFx1MDAyNnVkZXYtXHUwMDNlZGV2O1xuIDk1OTpcdFx0aW50IGVyciwgaTtcbiA5NjA6XHRcbiA5NjE6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xuIDk2MjpcdFxuIDk2MzpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlZndfd2FpdF9sb2FkKTtcbiA5NjQ6XHRcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDk2NTpcdFx0aWYgKGkgXHUwMDNjIDApXG4gOTY2Olx0XHRcdHJldHVybiBpO1xuIDk2NzpcdFxuIDk2ODpcdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxuXCYjMzQ7LFxuIDk2OTpcdFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcbiA5NzA6XHRcbiA5NzE6XHRcdHVzYl9nZXRfaW50ZihpbnRmKTtcbiA5NzI6XHRcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBwNTR1X2Z3bGlzdFtpXS5mdyxcbiA5NzM6XHRcdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbiA5NzQ6XHRcdFx0XHRcdCAgICAgIHA1NHVfbG9hZF9maXJtd2FyZV9jYik7XG4gOTc1Olx0XHRpZiAoZXJyKSB7XG4gOTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7KHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXCYjMzQ7XG4gOTc3Olx0XHRcdFx0XHRcdCAgXCYjMzQ7KCVkKSFcXG5cJiMzNDssIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQNTQgVVNCIERyaXZlciBUcmlhZ2U6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwNTQgVVNCIGRyaXZlciBhbmQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IGl0IHdpdGggc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHByb21pc2luZy4gVVNCIGRldmljZXMgYXJlLCBhZnRlciBhbGwsIGVtdWxhdGVkIHZpYSBzeXprYWxsZXIgdXNpbmcgVVNCIFJhdyBHYWRnZXQgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggb3VyIHRyaWFnZSBwaGlsb3NvcGh5OiByZWFjaGFibGUgZHJpdmVycyB0aHJvdWdoIHZpcnR1YWwgYnVzZXMgYXJlIHByaW1lIHRhcmdldHMuCgpMZXQmIzM5O3MgcXVpY2tseSBydWxlIG91dCBhbnkgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDIGRyaXZlciByZXF1aXJpbmcgZXhvdGljIGhhcmR3YXJlLiBQNTQgVVNCIGlzIGEgKlVTQiBkcml2ZXIqLCBhbmQgY3J1Y2lhbGx5LCBpdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiB3aXRoaW4gdGhlIFFFTVUvc3l6a2FsbGVyIHNldHVwLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4hCgpOb3cgZm9yIHRoZSBpbnRlcmVzdGluZyBiaXQg4oCTIHRoZSBjb2RlIGNoYW5nZXMuIEkmIzM5O20gc2VlaW5nIGEgZml4IHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY2AsIHNwZWNpZmljYWxseSBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgZml4IGFkZHJlc3NlcyBhIGBzaXplb2YobWdtdClgIGlzc3VlLCBjaGFuZ2luZyBpdCBmcm9tIGEgcG9pbnRlciBzaXplIHRvIHRoZSBhY3R1YWwgc3RydWN0IHNpemUsIHdoaWNoIG1lYW5zIHRoZSBib3VuZHMgY2hlY2tpbmcgb2YgcGFyc2luZyA4MDIuMTEgSUVzIGlzIGJlaW5nIGZpeGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsISBQb3RlbnRpYWxseSBjcml0aWNhbC4KCkFscmlnaHQsIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGU/IExldCYjMzk7cyBhbmFseXplIHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBMb29rcyBsaWtlIHdlIG5lZWQgYFA1NF9DT01NT05gLCBgUDU0X1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYCBlbmFibGVkLiBgUDU0X0NPTU1PTmAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBhbmQgdGhlbiBzZWxlY3RzIGBGV19MT0FERVJgIGFuZCBgQ1JDX0NDSVRUYC4gYFA1NF9VU0JgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBVU0JgIGFuZCBzZWxlY3RzIGBDUkMzMmAuIFdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgb3RoZXIgY29uZmlncyBpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYsIG9mIGNvdXJzZS4KCk92ZXJhbGwsIHRoaXMgZHJpdmVyIHNlZW1zIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBlbXVsYXRpb24sIGNvdXBsZWQgd2l0aCB0aGUgbmF0dXJlIG9mIHRoZSBmaXggaW4gYHA1NF9maW5kX2llYCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyB3b3VsZCBiZSBhIHByb2ZpdGFibGUgYXZlbnVlIHRvIGV4cGxvcmUuIFdlJiMzOTt2ZSBqdXN0IGdvdCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRwNTRjb21tb24tb2Jqc1x0XHRcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXG4gICAzOlx0cDU0Y29tbW9uLSQoQ09ORklHX1A1NF9MRURTKVx0JiM0Mzs9IGxlZC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXHQmIzQzOz0gcDU0Y29tbW9uLm9cbiAgIDY6XHRvYmotJChDT05GSUdfUDU0X1VTQilcdFx0JiM0Mzs9IHA1NHVzYi5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1A1NF9QQ0kpXHRcdCYjNDM7PSBwNTRwY2kub1xuICAgODpcdG9iai0kKENPTkZJR19QNTRfU1BJKVx0XHQmIzQzOz0gcDU0c3BpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ2FsbGVycyBvZiBgcDU0X2ZpbmRfaWVgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIHRvIGBwNTRfZmluZF9pZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjYWxsZXJzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHVzaW5nIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBgcDU0X2ZpbmRfaWVgLCBhbmQgSSBzZWUgdGhlIGZvbGxvd2luZzogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAsIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLCBgcDU0X2JlYWNvbl91cGRhdGVgLCBhbmQgYHA1NF9yeF9kYXRhYC4gR29vZCwgbm93IEkgaGF2ZSBteSB0YXJnZXQgbGlzdC4KCk5leHQsIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYHA1NF9maW5kX2llYC4gSXMgaXQgc3RhdGljLCBsb2NhbCwgb3IgZ2xvYmFsIGFuZCBleHBvcnRlZD8gQSBxdWljayBjaGVjayBzaG93cyBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbG1hYy5oYCBhbmQgZGVmaW5lZCBpbiBgbWFpbi5jYCwgYW5kIHRoZSBkZWZpbml0aW9uIGFwcGVhcnMgZ2xvYmFsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBtb2RpZmljYXRpb25zIHRvIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSB3aWRlc3ByZWFkIGltcGFjdCwgYXMgaXQmIzM5O3Mgbm90IHJlc3RyaWN0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUuIEkgYWxzbyBzZWUgdGhhdCBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGFuZCBgcDU0X3J4X2RhdGFgIGFyZSBhbGwgc3RhdGljLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBhcyB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHRoZSBnbG9iYWwgZnVuY3Rpb24gaW4gcXVlc3Rpb24uCgpHaXZlbiB0aGF0IGBwNTRfcnhfZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlIGZpbGUgYHR4cnguY2AsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgbWlnaHQgY2FsbCBgcDU0X2ZpbmRfaWVgLiBMZXQmIzM5O3MgY2hlY2sgYHR4cnguY2AgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucywgc3RhcnRpbmcgd2l0aCBgcDU0X3J4YC4gSXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9yeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYz0yNz1pbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk0LVx0XHRcdG1heGxlbiA9IHByaXYtXHUwMDNldHhfaGRyX2xlbiAmIzQzOyAvKiBVU0IgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5NTpcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy05Ni1cdFx0XHRcdCA0ICYjNDM7IC8qIHJ4IGFsaWdubWVudCAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg9MTM1PXN0cnVjdCBwNTRfZWVwcm9tX2xtODYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDoxNTM6ZW51bSBwNTRfcnhfZGVjcnlwdF9zdGF0dXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC0xNTQtXHRQNTRfREVDUllQVF9OT05FID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTY3OnN0cnVjdCBwNTRfcnhfZGF0YSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE2OC1cdF9fbGUxNiBmbGFncztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjY2LS8qIGludGVyZmFjZXMgZm9yIHRoZSBkcml2ZXJzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjY3OmludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNjgtdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM9MTg0PXN0YXRpYyB2b2lkIHA1NHBfY2hlY2tfcnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiAqaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzoyMjM6XHRcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtMjI0LVx0XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZG1hX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jPTMxND1zdGF0aWMgaW50IHA1NHNwaV9yeChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0zNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MzYzOlx0aWYgKHA1NF9yeChwcml2LVx1MDAzZWh3LCBza2IpID09IDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMzY0LVx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTE0MD1zdGF0aWMgdm9pZCBwNTR1X3J4X2NiKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTYyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjE2MzpcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTY0LVx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKHByaXYtXHUwMDNlY29tbW9uLnJ4X210dSAmIzQzOyAzMik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMjc6c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI5Olx0c3RydWN0IHA1NF9yeF9kYXRhICpoZHIgPSAoc3RydWN0IHA1NF9yeF9kYXRhICopIHNrYi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMzAtXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjM5OTpzdGF0aWMgdm9pZCBwNTRfcnhfZnJhbWVfc2VudChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNDAwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NDg4OnN0YXRpYyB2b2lkIHA1NF9yeF9lZXByb21fcmVhZGJhY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4OS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy01MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjUyNTpzdGF0aWMgdm9pZCBwNTRfcnhfc3RhdHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTUyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjYxOTpzdGF0aWMgdm9pZCBwNTRfcnhfdHJhcChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjIwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjU1OnN0YXRpYyBpbnQgcDU0X3J4X2NvbnRyb2woc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY1Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjAtXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfVFhET05FOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2NjE6XHRcdHA1NF9yeF9mcmFtZV9zZW50KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2My1cdGNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2NjQ6XHRcdHA1NF9yeF90cmFwKHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjgtXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjY5Olx0XHRwNTRfcnhfc3RhdHMocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjcwLVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjcxLVx0Y2FzZSBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjcyOlx0XHRwNTRfcnhfZWVwcm9tX3JlYWRiYWNrKHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02ODMtLyogcmV0dXJucyB6ZXJvIGlmIHNrYiBjYW4gYmUgcmV1c2VkICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY4NDppbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY4OS1cdGlmICh0eXBlIFx1MDAyNiBQNTRfSERSX0ZMQUdfQ09OVFJPTClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjkwOlx0XHRyZXR1cm4gcDU0X3J4X2NvbnRyb2wocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjkxLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTI6XHRcdHJldHVybiBwNTRfcnhfZGF0YShwcml2LCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02OTMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTQ6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3J4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgQmVhY29uIFVwZGF0ZSBFbnRyeSBQb2ludCoqCgpBbHJpZ2h0LCBiZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBiZWFjb24gZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdXBkYXRlIGVudHJ5IHBvaW50IGNvcnJlY3RseS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSBjb3ZlcmVkIGl0LCBidXQgaXQgbmV2ZXIgaHVydHMgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgb3ZlciB0byBgbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IHBpbnBvaW50IHdoZXJlIHRoZSBiZWFjb24gdXBkYXRlIHNlcXVlbmNlIGtpY2tzIG9mZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBlc3BlY2lhbGx5IHdpdGggaG93IHdlJiMzOTtyZSBhcmNoaXRlY3RpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBOZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGFyZSBwcm9wZXJseSBjb29yZGluYXRlZCBmb3Igc2VhbWxlc3MgZXhlY3V0aW9uLiBHb3R0YSBtYWtlIHN1cmUgd2UgZGlkbiYjMzk7dCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyBkdXJpbmcgdGhlIHJlZmFjdG9yLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTk2PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjEzNTpzdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzYtXHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jPTQ1Mj1zdGF0aWMgdm9pZCBwNTRfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy00NjctXHRcdHA1NF9zZXR1cF9tYWMocHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjQ2ODpcdFx0cDU0X2JlYWNvbl91cGRhdGUocHJpdiwgdmlmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNDY5LVx0XHRwNTRfc2V0X2VkY2YocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzI0CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgcDU0X2ZpbmRfaWVgLCBhcyB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgYnVmZmVyIGxlbmd0aCBjaGVjayBpc3N1ZS4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGEgbWlzdGFrZSBpbiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGJlaW5nIHJlYWQgYnkgdXNpbmcgdGhlIHNpemUgb2YgYSBwb2ludGVyIChgc2l6ZW9mKG1nbXQpYCkgaW5zdGVhZCBvZiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZiAoYHNpemVvZigqbWdtdClgKS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgYWxsb3dpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiBiZWFjb25zIG9yIHJlY2VpdmVkIGZyYW1lcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGhhcyBiZWVuIGlkZW50aWZpZWQgbWVhbnMgaXQmIzM5O3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciB0ZXN0aW5nLiBUaGUgZGVzY3JpcHRpb24gc3BlY2lmaWVzIHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGJlYWNvbiBhbmQgZnJhbWUgcHJvY2Vzc2luZywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2Ygd2lyZWxlc3MgYW5kIG5ldHdvcmsgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJvdmlkZWQgYFJlYXNvbmluZ2AgY29uZmlybXMgaXQgY2FuIGJlIGV4cGxvaXRlZCBieSBjYXJlZnVsbHkgY3JhZnRlZCB3aXJlbGVzcyBwYWNrZXRzLgoKTG9va2luZyBhdCB0aGUgb3RoZXIgc3ltYm9scyBsaXN0ZWQ6IGBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW1gLCBgcDU0X3BzcG9sbF93b3JrYXJvdW5kYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9yeGAsIGFuZCBgcDU0X2Jzc19pbmZvX2NoYW5nZWRgIOKAkyB0aGV5JiMzOTtyZSBhbGwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgYmVhY29uIGFuZCBmcmFtZSBoYW5kbGluZy4gV2Ugc2hvdWxkIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIGFuYWx5emluZyB0aGUgb3ZlcmFsbCBwYXRjaC4gVGhleSBwcm9iYWJseSBhcmUgYWRqYWNlbnQgY29kZS4KClRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBVU0IgZ2FkZ2V0IC8gcmF3X2dhZGdldCBpbnRlcmZhY2VzIGFzIGFuIG9wdGlvbiBpcyB2ZXJ5IGhlbHBmdWwuIEl0IG1lYW5zIHdlIGNhbiBlbXVsYXRlIHRoZSBkcml2ZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIG1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gdHJpZ2dlciBhbmQgcmVwcm9kdWNlIHRoZSB2dWxuZXJhYmlsaXR5LCBvciBldmVuIGZ1enogaXQgaWYgd2UgY2FuIGZpbmQgYSBnb29kIHNldHVwLgoKRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IChgUDU0X0NPTU1PTmAsIGBQNTRfVVNCYCwgYE1BQzgwMjExYCkgdGVsbHMgbWUgd2hhdCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGlzIGlzc3VlLiBUaGVzZSBhcmUgZXNzZW50aWFsIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4KCkFscmlnaHQsIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbm93IHN1Ym1pdCB0aGUgcmVzdWx0cyBhbmQgZm9jdXMgb24gZnVydGhlciB0ZXN0aW5nLiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfZmluZF9pZSYjMzQ7LAogICAgJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAgICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgICAmIzM0O3A1NF9yeCYjMzQ7LAogICAgJiMzNDtwNTRfYnNzX2luZm9fY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfZmluZF9pZSYjMzQ7LAogICAgJiMzNDtwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0mIzM0OywKICAgICYjMzQ7cDU0X3BzcG9sbF93b3JrYXJvdW5kJiMzNDssCiAgICAmIzM0O3A1NF9iZWFjb25fdXBkYXRlJiMzNDssCiAgICAmIzM0O3A1NF9yeCYjMzQ7LAogICAgJiMzNDtwNTRfYnNzX2luZm9fY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlIG9yIHJlYWRpbmcgcGFzdCB0aGUgc2tiIGRhdGEgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jCmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYwpAQCAtNzYsNyAmIzQzOzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKQogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXU4ICpwb3MsICplbmQ7CiAKLQlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpKQomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKCptZ210KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwb3MgPSAodTggKiltZ210LSZndDt1LmJlYWNvbi52YXJpYWJsZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUGF0Y2ggRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aG9kaWNhbC4gRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgdXBkYXRlIGluIGBwNTRfZmluZF9pZWAuIFRoZSBvcmlnaW5hbCBjaGVjayBgc2tiLSZndDtsZW4gJmx0Oz0gc2l6ZW9mKG1nbXQpYCBpcyBiZWluZyB1cGRhdGVkIHRvIGBza2ItJmd0O2xlbiAmbHQ7PSBzaXplb2YoKm1nbXQpYC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXguIFRoaXMgaXMgYSBiYXNpYyBmaXgsIGxpa2VseSBhdm9pZGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBzb21ldGhpbmcgdGVycmlibHkgY29tcGxleC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHVzaW5nIG15IGtub3dsZWRnZSBvZiB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGZ1bmN0aW9uLiBPa2F5LCBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBpbW1lZGlhdGVseSBzY3JlYW1pbmcgZm9yIGV4dHJhIHNjcnV0aW55IHdpdGggS01TQU4uIFdoaWxlIGFueSBib3VuZHMgY2hlY2sgZml4ICpjb3VsZCogYmUgaW1wb3J0YW50LCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgZm9jdXNlZC4gVGhlIGZ1bmN0aW9uIGlzIHBhcnNpbmcgSUUgaGVhZGVycywgc28gaXQmIzM5O3MgaGFuZGxpbmcgcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEsIGJ1dCBpdCYjMzk7cyBhICp2ZXJ5KiBiYXNpYyBjaGVjayBvbiB0aGUgbGVuZ3RoIG9mIGFuIGluY29taW5nIHNrYi4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHRoZSBjYWxsIGFuZCBzYXkgYE5lZWRzS01TQU49ZmFsc2VgIG9uIHRoaXMgb25lLiBJdCYjMzk7cyBhIGdvb2QgcGF0Y2gsIGJ1dCBzdGFuZGFyZCBhbmQgc3RyYWlnaHRmb3J3YXJkLiBMZXQmIzM5O3MgZmxhZyB0aGlzIGFzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdFx0YnJlYWs7XG4gIDYxOlx0XHRkZWZhdWx0OlxuICA2MjpcdFx0XHRicmVhaztcbiAgNjM6XHRcdH1cbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gIDY3Olx0XHRcdFx0Ym9vbCBzZXQpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiAgNzA6XHRcbiAgNzE6XHRcdHJldHVybiBwNTRfdXBkYXRlX2JlYWNvbl90aW0ocHJpdiwgc3RhLVx1MDAzZWFpZCwgc2V0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gIDc3Olx0XHR1OCAqcG9zLCAqZW5kO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKVxuICA4MDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODE6XHRcbiAgODI6XHRcdHBvcyA9ICh1OCAqKW1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGU7XG4gIDgzOlx0XHRlbmQgPSBza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICA4NDpcdFx0d2hpbGUgKHBvcyBcdTAwM2MgZW5kKSB7XG4gIDg1Olx0XHRcdGlmIChwb3MgJiM0MzsgMiAmIzQzOyBwb3NbMV0gXHUwMDNlIGVuZClcbiAgODY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODc6XHRcbiAgODg6XHRcdFx0aWYgKHBvc1swXSA9PSBpZSlcbiAgODk6XHRcdFx0XHRyZXR1cm4gcG9zO1xuICA5MDpcdFxuICA5MTpcdFx0XHRwb3MgJiM0Mzs9IDIgJiM0MzsgcG9zWzFdO1xuICA5MjpcdFx0fVxuICA5MzpcdFx0cmV0dXJuIE5VTEw7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXG4gIDk3Olx0e1xuICA5ODpcdFx0LypcbiAgOTk6XHRcdCAqIHRoZSBnb29kIGV4Y3VzZSBmb3IgdGhpcyBtZXNzIGlzIC4uLiB0aGUgZmlybXdhcmUuXG4gMTAwOlx0XHQgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLFxuIDEwMTpcdFx0ICogYmVjYXVzZSBpdCYjMzk7bGwgYmUgb3ZlcndyaXR0ZW4hXG4gMTAyOlx0XHQgKi9cbiAxMDM6XHRcdHU4ICp0aW07XG4gMTA0Olx0XHR1OCBkdGltX2xlbjtcbiAxMDU6XHRcdHU4IGR0aW1fcGVyaW9kO1xuIDEwNjpcdFx0dTggKm5leHQ7XG4gMTA3Olx0XG4gMTA4Olx0XHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XG4gMTA5Olx0XHRpZiAoIXRpbSlcbiAxMTA6XHRcdFx0cmV0dXJuIDA7XG4gMTExOlx0XG4gMTEyOlx0XHRkdGltX2xlbiA9IHRpbVsxXTtcbiAxMTM6XHRcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xuIDExNDpcdFx0bmV4dCA9IHRpbSAmIzQzOyAyICYjNDM7IGR0aW1fbGVuO1xuIDExNTpcdFxuIDExNjpcdFx0aWYgKGR0aW1fbGVuIFx1MDAzYyAzKVxuIDExNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMTg6XHRcbiAxMTk6XHRcdG1lbW1vdmUodGltLCBuZXh0LCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBuZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA4ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS0FTQU4gaXMgdGhlIEtleSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZml4ZXMgYSBzdWJ0bGUgYnVnIGluIGBwNTRfZmluZF9pZWAuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgYHNpemVvZmAgY29uZnVzaW9uLiBJdCB3YXMgdXNpbmcgYHNpemVvZihtZ210KWAgaW5zdGVhZCBvZiBgc2l6ZW9mKCptZ210KWAuICBgbWdtdGAgaXMgYSBwb2ludGVyLCBzbyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgZ2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIqIGl0c2VsZiAoNCBvciA4IGJ5dGVzIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUpLCBub3QgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpdCBwb2ludGVkIHRvIChgc3RydWN0IGllZWU4MDIxMV9tZ210YCkuIFRoaXMgbWVhbnQgdGhhdCBpZiB0aGUgYHNrYi0mZ3Q7bGVuYCAodGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlcikgd2FzIHNtYWxsZXIgdGhhbiB0aGUgKmFjdHVhbCogbWFuYWdlbWVudCBmcmFtZSBoZWFkZXIgc2l6ZSAod2hpY2ggaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIpLCB0aGUgY29kZSB3b3VsZCB0cmVhdCBwYXJ0cyBvZiB0aGUgYnVmZmVyICpiZXlvbmQqIHRoZSB2YWxpZCBkYXRhIGFzIGlmIHRoZXkgd2VyZSB2YWxpZC4gIFNwZWNpZmljYWxseSwgYHBvc2Agd2FzIGJlaW5nIHNldCB0byBhbiBvZmZzZXQgdGhhdCB3YXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbG9vcCBjb3VsZCByZWFkIHBhc3QgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEuCgpUaGF0JiMzOTtzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyByZWFkIChPT0IpIHNjZW5hcmlvLiAgQW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgS0FTQU4sIHRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiAgSXQmIzM5O3Mgc2V0IHVwIHRvIGRldGVjdCBwcmVjaXNlbHkgdGhlc2Uga2luZHMgb2YgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IHRoaXMgZml4ZXMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2sgdmFyaWFibGVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCwgb3IgYW55IGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuIEl0IGlzIHB1cmVseSBhIGJvdW5kcyBjaGVjayBjb3JyZWN0aW9uLiBUaGUgY29kZSAqYmVmb3JlKiB0aGUgcGF0Y2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCB0aGF0JiMzOTtzIHRoZSB2dWxuZXJhYmlsaXR5LiBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIGJvdW5kcyBjaGVjay4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZ2xlLiBLTVNBTiYjMzk7cyBqb2IgaXMgdG8gc25pZmYgb3V0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZS4gIEJ1dCB0aGUgZ3VpZGluZyBwcmluY2lwbGUgaXMsIGFuZCB0aGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsICYjMzQ7dGhlcmUgaXMgbm8gc2Vuc2UgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgYSBidWcgY2FuIGJlIGNhdWdodCBieSBLQVNBTi4uLiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzJiMzNDsuICBUaGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhhdCwgYW5kIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoLCBvciBjcmVhdGUsIGFueSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm90IGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHJpc2sgb2Yga2VybmVsIGluZm8gbGVha2luZy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGFuIE9PQiwgYW5kIGJlY2F1c2UgS0FTQU4gaXMgYmVzdCBzdWl0ZWQgdG8gY2F0Y2hpbmcgdGhhdCBraW5kIG9mIGlzc3VlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwcmVwYXJlIHdvdWxkIGJlOgoKKiAgIFRoZSBwYXRjaCBmaXhlcyBhIGBzaXplb2ZgIHR5cG8gaW4gYHA1NF9maW5kX2llKClgLCBhIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jYC4gVGhlIHR5cG8gd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLgoqICAgS0FTQU4gaXMgYXBwcm9wcmlhdGUgYmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIHNpemUgb2YgdGhlIHNrYiBidWZmZXIgd2FzIHNtYWxsZXIgdGhhbiB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbWdtdGAgaGVhZGVyLiBUaGUgY29ycmVjdGVkIGNvZGUgZml4ZXMgdGhlIE9PQiByZWFkLgoqICAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIG9yIGluZm8gbGVha2luZy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNpemVvZiBidWcgaW4gcDU0X2ZpbmRfaWUoKSB3aGVyZSBzaXplb2YobWdtdCkgKHRoZSBwb2ludGVyIHNpemUsIDQgb3IgOCBieXRlcykgd2FzIGNoZWNrZWQgaW5zdGVhZCBvZiBzaXplb2YoKm1nbXQpICh0aGUgc3RydWN0dXJlIHNpemUpLiBBbiBza2Igc2hvcnRlciB0aGFuIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQpIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gYWNjZXNzaW5nIGZpZWxkcyBsaWtlIG1nbXQtXHUwMDNldS5iZWFjb24udmFyaWFibGUgb3IgcmVhZGluZyBwYXN0IHRoZSBza2IgZGF0YSBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXRpZXMgb24gc2tfYnVmZiBidWZmZXJzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBrZXJuZWwtdG8tdXNlciBkYXRhIGxlYWtzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2l6ZW9mIGJ1ZyBpbiBwNTRfZmluZF9pZSgpIHdoZXJlIHNpemVvZihtZ210KSAodGhlIHBvaW50ZXIgc2l6ZSwgNCBvciA4IGJ5dGVzKSB3YXMgY2hlY2tlZCBpbnN0ZWFkIG9mIHNpemVvZigqbWdtdCkgKHRoZSBzdHJ1Y3R1cmUgc2l6ZSkuIEFuIHNrYiBzaG9ydGVyIHRoYW4gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBhY2Nlc3NpbmcgZmllbGRzIGxpa2UgbWdtdC1cdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cblxuT3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdGllcyBvbiBza19idWZmIGJ1ZmZlcnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGtlcm5lbC10by11c2VyIGRhdGEgbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTozNS41NjM0OTIwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDUzNTcxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X2ZpbmRfaWVcIixcbiAgICBcInA1NF9iZWFjb25fZm9ybWF0X2llX3RpbVwiLFxuICAgIFwicDU0X3BzcG9sbF93b3JrYXJvdW5kXCIsXG4gICAgXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICAgIFwicDU0X3J4XCIsXG4gICAgXCJwNTRfYnNzX2luZm9fY2hhbmdlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgYSBzaXplb2YgcG9pbnRlciB2cyBkZXJlZmVyZW5jZSBidWcgaW4gcDU0X2ZpbmRfaWUoKSwgY2hhbmdpbmcgc2l6ZW9mKG1nbXQpIHRvIHNpemVvZigqbWdtdCkgdG8gcHJvcGVybHkgdmFsaWRhdGUgZnJhbWUgbGVuZ3RoIGJlZm9yZSBwYXJzaW5nIElFRUUgODAyLjExIGluZm9ybWF0aW9uIGVsZW1lbnRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAocDU0dXNiKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6MzUuNTYzNDk3ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDYxMjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0Yzk1MTc5MmY1MDIwYzBiNWYxMGQ2NTcyYWFiZjFmMDQ0YjgzZThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xcbmluZGV4IDU3YTYyMTA4Y2JjMzUuLmQzZTE3NzYxNzRmOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcXG5AQCAtNzYsNyArNzYsNyBAQCB1OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHR1OCAqcG9zLCAqZW5kO1xcbiBcXG4tXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IHNpemVvZihtZ210KSlcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IHNpemVvZigqbWdtdCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cG9zID0gKHU4ICopbWdtdC1cXHUwMDNldS5iZWFjb24udmFyaWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjM1Ljk2NDg3NDU0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk4MDIzMDc4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfZmluZF9pZVwiLFxuICAgIFwicDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltXCIsXG4gICAgXCJwNTRfcHNwb2xsX3dvcmthcm91bmRcIixcbiAgICBcInA1NF9iZWFjb25fdXBkYXRlXCIsXG4gICAgXCJwNTRfcnhcIixcbiAgICBcInA1NF9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgYSBzaXplb2YgcG9pbnRlciB2cyBkZXJlZmVyZW5jZSBidWcgaW4gcDU0X2ZpbmRfaWUoKSwgY2hhbmdpbmcgc2l6ZW9mKG1nbXQpIHRvIHNpemVvZigqbWdtdCkgdG8gcHJvcGVybHkgdmFsaWRhdGUgZnJhbWUgbGVuZ3RoIGJlZm9yZSBwYXJzaW5nIElFRUUgODAyLjExIGluZm9ybWF0aW9uIGVsZW1lbnRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAocDU0dXNiKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGM5NTE3OTJmNTAyMGMwYjVmMTBkNjU3MmFhYmYxZjA0NGI4M2U4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTowMTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jXG5pbmRleCA1N2E2MjEwOGNiYzM1Li5kM2UxNzc2MTc0ZjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuQEAgLTc2LDcgKzc2LDcgQEAgdTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHU4ICpwb3MsICplbmQ7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IHNpemVvZihtZ210KSlcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwb3MgPSAodTggKiltZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6MzUuOTY0ODc2MDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYwNzkxNDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQsIHNvIEknbSBnb2luZyB0byBhbmFseXplIHRoaXMgcGF0Y2ggYW5kIHRoZW4gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgLiBOb3csIHRoZSBjaGFuZ2Ugd2l0aGluIGBwNTRfZmluZF9pZWAgcmVhbGx5IHN0YW5kcyBvdXQuIFRoZSBjb25kaXRpb24gYGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpKWAuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBzaXplIGNhbGN1bGF0aW9uIGVycm9yOyB0aGUgZm9ybWVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGlsZSB0aGUgbGF0dGVyIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2Ygd2hhdCB0aGUgcG9pbnRlciBpcyAqcG9pbnRpbmcqIGF0LiBHb29kIGNhdGNoIVxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEknbSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcDU0IGRyaXZlciBhbmQgdHJhY2Ugd2hlcmUgYHA1NF9maW5kX2llYCBpcyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgaW50ZXJmYWNlcyB0aGlzIGRyaXZlciBzdXBwb3J0czogaXMgaXQgUENJLCBVU0IsIFNQSSwgb3IgYSBjb21iaW5hdGlvbj8gQW5kIHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBtb3JlIHNwZWNpYWxpemVkIGVudmlyb25tZW50cz8gRG9lcyBzeXprYWxsZXIgaGF2ZSBlYXN5IGFjY2VzcyB0byBpdCwgdXNpbmcgVVNCIGVtdWxhdGlvbiwgUmF3IEdhZGdldCwgb3IgZG9lcyBpdCBvcGVyYXRlIHZpYSBtYWM4MDIxMSBod3NpbSBvciB2aXJ0aW8/IEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgY2FuIGJlIHJlYWNoZWQgaW4gc3l6a2FsbGVyIG9yIGFub3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gZG8gc29tZSBxdWljayBncmVwcGluZyB0aHJvdWdoIHRoZSBzb3VyY2UsIG9yIGlmIHRoYXQncyBub3QgZWZmZWN0aXZlLCBJJ2xsIGhhdmUgdG8gcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyBkaXJlY3RseS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDMuNTcyNzkyNzgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDU3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9maW5kX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaD01NTQ9c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICpwNTRfcnNzaV9maW5kKHN0cnVjdCBwNTRfY29tbW9uICpwLCBjb25zdCB1MTYgZnJlcSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1Ni0vKiB1dGlsaXR5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDo1NTc6dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NjY9c3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6NzQ6dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz05Nj1zdGF0aWMgaW50IHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzoxMDg6XFx0dGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTA5LVxcdGlmICghdGltKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yOTQ9c3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozMTM6XFx0dGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzE0LVxcdGlmICghdGltKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0My42MTY4NTM0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdFxcbiAgNzE6XFx0XFx0cmV0dXJuIHA1NF91cGRhdGVfYmVhY29uX3RpbShwcml2LCBzdGEtXFx1MDAzZWFpZCwgc2V0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3NzpcXHRcXHR1OCAqcG9zLCAqZW5kO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRwb3MgPSAodTggKiltZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcXG4gIDgzOlxcdFxcdGVuZCA9IHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgODQ6XFx0XFx0d2hpbGUgKHBvcyBcXHUwMDNjIGVuZCkge1xcbiAgODU6XFx0XFx0XFx0aWYgKHBvcyArIDIgKyBwb3NbMV0gXFx1MDAzZSBlbmQpXFxuICA4NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0XFx0aWYgKHBvc1swXSA9PSBpZSlcXG4gIDg5OlxcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdHBvcyArPSAyICsgcG9zWzFdO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHQvKlxcbiAgOTk6XFx0XFx0ICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS5cXG4gMTAwOlxcdFxcdCAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsXFxuIDEwMTpcXHRcXHQgKiBiZWNhdXNlIGl0J2xsIGJlIG92ZXJ3cml0dGVuIVxcbiAxMDI6XFx0XFx0ICovXFxuIDEwMzpcXHRcXHR1OCAqdGltO1xcbiAxMDQ6XFx0XFx0dTggZHRpbV9sZW47XFxuIDEwNTpcXHRcXHR1OCBkdGltX3BlcmlvZDtcXG4gMTA2OlxcdFxcdHU4ICpuZXh0O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XFxuIDEwOTpcXHRcXHRpZiAoIXRpbSlcXG4gMTEwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRkdGltX2xlbiA9IHRpbVsxXTtcXG4gMTEzOlxcdFxcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xcbiAxMTQ6XFx0XFx0bmV4dCA9IHRpbSArIDIgKyBkdGltX2xlbjtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKGR0aW1fbGVuIFxcdTAwM2MgMylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRtZW1tb3ZlKHRpbSwgbmV4dCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gbmV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQzLjYxNjk3NTg5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUDU0X0NPTU1PTlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnRtYWMgUHJpc201NCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xcbiAgMTA6XFx0XFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFA1NF9VU0JcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTR1c2IuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBQNTRfUENJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBQQ0kgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4gIDM2OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFA1NF9TUElcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJX01BU1RFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcXG4gIDQ4OlxcdFxcdCAgc3VjaCBhcyBOb2tpYSdzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS5cXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIFA1NF9TUElfREVGQVVMVF9FRVBST01cXG4gIDUzOlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgZmFsbGJhY2sgRUVQUk9NIGJsb2JcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFA1NF9TUElcXG4gIDU1OlxcdFxcdGRlZmF1bHQgblxcbiAgNTY6XFx0XFx0aGVscFxcbiAgNTc6XFx0XFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbid0IGhhdmVcXG4gIDU4OlxcdFxcdCBhIGRlZGljYXRlZCBFRVBST00gY2hpcCB0byBzdG9yZSBhbGwgZGV2aWNlIHNwZWNpZmljIHZhbHVlc1xcbiAgNTk6XFx0XFx0IGZvciBjYWxpYnJhdGlvbiwgY291bnRyeSBhbmQgaW50ZXJmYWNlIHNldHRpbmdzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBsb2FkIHRoZSBpbWFnZSBcXFwiMzgyNi5lZXByb21cXFwiLCBpZiB0aGVcXG4gIDYyOlxcdFxcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgT25seSBpZiB0aGlzIHJlcXVlc3QgZmFpbHMsIHRoaXMgb3B0aW9uIHdpbGwgcHJvdmlkZSBhXFxuICA2NTpcXHRcXHQgYmFja3VwIHNldCBvZiBnZW5lcmljIHZhbHVlcyB0byBnZXQgdGhlIGRldmljZSB3b3JraW5nLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWRkcyBhYm91dCA0ayB0byBwNTRzcGkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQNTRfTEVEU1xcbiAgNzA6XFx0XFx0Ym9vbFxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0xFRFMgXFx1MDAyNlxcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxcbiAgNzI6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQzLjYxNzAzOTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3NDM1MzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFA1NCBVU0IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheSB3aXRoIFA1NCBhbmQgaXRzIFVTQiB1c2FnZS4gQ2FuIHdlIGxldmVyYWdlIFVTQiBlbXVsYXRpb24gd2l0aGluIHN5emthbGxlciB0byBwcm9iZSBgUDU0X1VTQmAsIG9yIHBlcmhhcHMgdXNlIGEgY29tYmluYXRpb24gb2YgYG1hYzgwMjExYCBhbmQgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXRpZXMgdG8gc2ltdWxhdGUgdGhlIGVudmlyb25tZW50P1xuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHN5emthbGxlciAqYWxyZWFkeSogaGFzIG1ldGhvZHMgZm9yIFVTQiBkcml2ZXIgZnV6emluZy4gSXQgZG9lcyB0aGlzIHZpYSBgcmF3X2dhZGdldGAsIGBzeXpfdXNiX2Nvbm5lY3RgLCBvciBkaXJlY3QgVVNCIGZ1enppbmcgdGVjaG5pcXVlcy4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLlxuXG5TbywgdGhlIG5ldyBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIGV4YW1pbmUgYHA1NHVzYi5jYCBzcGVjaWZpY2FsbHksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHByb2JlIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcDU0dXNiYCBtb2R1bGUgZ2V0cyBwcm9iZWQuIENydWNpYWxseSwgSSBoYXZlIHRvIGRldGVybWluZSBpZiBmaXJtd2FyZSBsb2FkaW5nIGlzIGludm9sdmVkIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIHRoZSBmdXp6aW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHNlcXVlbmNlIHdpbGwgYmUgcGl2b3RhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjUsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDcuMzkxMzk0NTE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDIwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MzE9TU9EVUxFX0ZJUk1XQVJFKFxcXCJpc2wzODg3dXNiXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzozMzpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTM0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTkxOT1zdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDUtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKHVkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NDY6XFx0XFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NDctXFx0XFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTExNz1zdGF0aWMgaW50IHA1NHVfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTEyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTEyNDpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjUtXFx0Lm5hbWVcXHQ9IFxcXCJwNTR1c2JcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExNDA6bW9kdWxlX3VzYl9kcml2ZXIocDU0dV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0Ny40MzU0MjgxOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcdHByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuMTAwMTpcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV9JTlZBTElEX0hXO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRTRVRfSUVFRTgwMjExX0RFVihkZXYsIFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYpO1xcbjEwMDQ6XFx0XFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbjEwMDU6XFx0XFx0cHJpdi1cXHUwMDNldWRldiA9IHVkZXY7XFxuMTAwNjpcXHRcXHRwcml2LVxcdTAwM2VpbnRmID0gaW50ZjtcXG4xMDA3OlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4xMDA4OlxcdFxcdGluaXRfdXNiX2FuY2hvcihcXHUwMDI2cHJpdi1cXHUwMDNlc3VibWl0dGVkKTtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0LyogcmVhbGx5IGxhenkgYW5kIHNpbXBsZSB3YXkgb2YgZmlndXJpbmcgb3V0IGlmIHdlJ3JlIGEgMzg4NyAqL1xcbjEwMTE6XFx0XFx0LyogVE9ETzogc2hvdWxkIGp1c3Qgc3RpY2sgdGhlIGlkZW50aWZpY2F0aW9uIGluIHRoZSBkZXZpY2UgdGFibGUgKi9cXG4xMDEyOlxcdFxcdGkgPSBpbnRmLVxcdTAwM2VhbHRzZXR0aW5nLVxcdTAwM2VkZXNjLmJOdW1FbmRwb2ludHM7XFxuMTAxMzpcXHRcXHRyZWNvZ25pemVkX3BpcGVzID0gMDtcXG4xMDE0OlxcdFxcdHdoaWxlIChpLS0pIHtcXG4xMDE1OlxcdFxcdFxcdHN3aXRjaCAoaW50Zi1cXHUwMDNlYWx0c2V0dGluZy1cXHUwMDNlZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSB7XFxuMTAxNjpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9EQVRBOlxcbjEwMTc6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfTUdNVDpcXG4xMDE4OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0JSRzpcXG4xMDE5OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RFVjpcXG4xMDIwOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RBVEEgfCBVU0JfRElSX0lOOlxcbjEwMjE6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfTUdNVCB8IFVTQl9ESVJfSU46XFxuMTAyMjpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9CUkcgfCBVU0JfRElSX0lOOlxcbjEwMjM6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfREVWIHwgVVNCX0RJUl9JTjpcXG4xMDI0OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0lOVCB8IFVTQl9ESVJfSU46XFxuMTAyNTpcXHRcXHRcXHRcXHRyZWNvZ25pemVkX3BpcGVzKys7XFxuMTAyNjpcXHRcXHRcXHR9XFxuMTAyNzpcXHRcXHR9XFxuMTAyODpcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24ub3BlbiA9IHA1NHVfb3BlbjtcXG4xMDI5OlxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi5zdG9wID0gcDU0dV9zdG9wO1xcbjEwMzA6XFx0XFx0aWYgKHJlY29nbml6ZWRfcGlwZXMgXFx1MDAzYyBQNTRVX1BJUEVfTlVNQkVSKSB7XFxuMTAzMTpcXHQjaWZkZWYgQ09ORklHX1BNXFxuMTAzMjpcXHRcXHRcXHQvKiBJU0wzODg3IG5lZWRzIGEgZnVsbCByZXNldCBvbiByZXN1bWUgKi9cXG4xMDMzOlxcdFxcdFxcdHVkZXYtXFx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XFxuMTAzNDpcXHQjZW5kaWYgLyogQ09ORklHX1BNICovXFxuMTAzNTpcXHRcXHRcXHRlcnIgPSBwNTR1X2RldmljZV9yZXNldChkZXYpO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV8zODg3O1xcbjEwMzg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VleHRyYV90eF9oZWFkcm9vbSArPSBzaXplb2Yoc3RydWN0IGxtODdfdHhfaGRyKTtcXG4xMDM5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XFxuMTA0MDpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X2xtODc7XFxuMTA0MTpcXHRcXHRcXHRwcml2LVxcdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV8zODg3O1xcbjEwNDI6XFx0XFx0fSBlbHNlIHtcXG4xMDQzOlxcdFxcdFxcdHByaXYtXFx1MDAzZWh3X3R5cGUgPSBQNTRVX05FVDIyODA7XFxuMTA0NDpcXHRcXHRcXHRkZXYtXFx1MDAzZWV4dHJhX3R4X2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgbmV0MjI4MF90eF9oZHIpO1xcbjEwNDU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcXG4xMDQ2OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eCA9IHA1NHVfdHhfbmV0MjI4MDtcXG4xMDQ3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXVwbG9hZF9mdyA9IHA1NHVfdXBsb2FkX2Zpcm13YXJlX25ldDIyODA7XFxuMTA0ODpcXHRcXHR9XFxuMTA0OTpcXHRcXHRlcnIgPSBwNTR1X2xvYWRfZmlybXdhcmUoZGV2LCBpbnRmKTtcXG4xMDUwOlxcdFxcdGlmIChlcnIpXFxuMTA1MTpcXHRcXHRcXHRwNTRfZnJlZV9jb21tb24oZGV2KTtcXG4xMDUyOlxcdFxcdHJldHVybiBlcnI7XFxuMTA1MzpcXHR9XFxuMTA1NDpcXHRcXG4xMDU1OlxcdHN0YXRpYyB2b2lkIHA1NHVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTA1ODpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2O1xcbjEwNTk6XFx0XFxuMTA2MDpcXHRcXHRpZiAoIWRldilcXG4xMDYxOlxcdFxcdFxcdHJldHVybjtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0cHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4xMDY0OlxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuMTA2NTpcXHRcXHRwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShwcml2LVxcdTAwM2Vmdyk7XFxuMTA2ODpcXHRcXHRwNTRfZnJlZV9jb21tb24oZGV2KTtcXG4xMDY5OlxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0c3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4xMDcyOlxcdHtcXG4xMDczOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTA3NDpcXHRcXG4xMDc1OlxcdFxcdGlmICghZGV2KVxcbjEwNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTA3NzpcXHRcXG4xMDc4OlxcdFxcdHA1NHVfc3RvcChkZXYpO1xcbjEwNzk6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MDpcXHR9XFxuMTA4MTpcXHRcXG4xMDgyOlxcdHN0YXRpYyBpbnQgcDU0dV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTA4MzpcXHR7XFxuMTA4NDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbjEwODU6XFx0XFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0aWYgKCFkZXYpXFxuMTA4ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0cHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4xMDkxOlxcdFxcdGlmICh1bmxpa2VseSghKHByaXYtXFx1MDAzZXVwbG9hZF9mdyBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VmdykpKVxcbjEwOTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdHJldHVybiBwcml2LVxcdTAwM2V1cGxvYWRfZncoZGV2KTtcXG4xMDk1OlxcdH1cXG4xMDk2OlxcdFxcbjEwOTc6XFx0c3RhdGljIGludCBwNTR1X3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTA5ODpcXHR7XFxuMTA5OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMTo0Ny40MzU1NjM3NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzEyNzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgSGllcmFyY2h5IG9mIGBwNTRfZmluZF9pZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBwNTRfZmluZF9pZWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9uczogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAgYW5kIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBLbm93aW5nIHdoZXJlICp0aGV5KiBhcmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIGBwNTRfZmluZF9pZWAncyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGZpdCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxMywiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQ5LjQyMjY5Mzk1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz03ND11OCAqcDU0X2ZpbmRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6OTY6c3RhdGljIGludCBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9MTM1PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0NC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjE0NTpcXHRyZXQgPSBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oYmVhY29uKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0Ni1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAxOjQ5LjQ2NjY4NjIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAxOTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfcHNwb2xsX3dvcmthcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3NT1zdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgaW50IHJzc2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTI5My0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjI5NDpzdGF0aWMgdm9pZCBwNTRfcHNwb2xsX3dvcmthcm91bmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0yOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0zMjc9c3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzg4LVxcdGlmICh1bmxpa2VseShwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DT05GX1BTKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjM4OTpcXHRcXHRwNTRfcHNwb2xsX3dvcmthcm91bmQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTM5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDE6NDkuNTA5NzA5NjI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI5Nzk4Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUDU0IEJ1ZyBGaXggYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhpcyBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgYHA1NF9maW5kX2llYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgc2l6ZW9mKG1nbXQpYCwgd2hpY2ggaXMganVzdCB0aGUgc2l6ZSBvZiB0aGUgcG9pbnRlciBpdHNlbGYgKDggYnl0ZXMpLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGBpZWVlODAyMTFfbWdtdGAgc3RydWN0dXJlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGNoZWNrIGBza2ItXHUwMDNlbGVuIFx1MDAzYz0gc2l6ZW9mKG1nbXQpYCB3YXMgdG9vIGxvb3NlLCBhbmQgaWYgdGhlIGJ1ZmZlciBzaXplIHdhcyBiZXR3ZWVuIDggYnl0ZXMgYW5kIHRoZSBmdWxsIHNpemUgb2YgdGhlIG1hbmFnZW1lbnQgZnJhbWUsIHdlIHdlcmUgYWNjZXNzaW5nIGBtZ210LVx1MDAzZXUuYmVhY29uLnZhcmlhYmxlYCBvdXQgb2YgYm91bmRzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcy4gVGhlIGZpeCwgY2hhbmdpbmcgaXQgdG8gYHNpemVvZigqbWdtdClgLCBub3cgY29ycmVjdGx5IG1ha2VzIHRoZSBjaGVjay4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgcG9pbnRlciBhcml0aG1ldGljLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCB0aGluayBhYm91dCBob3cgcmVhY2hhYmxlIHRoaXMgZml4IGlzIHdpdGhpbiBTeXprYWxsZXIuIElzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiB0cmlnZ2VyIGVhc2lseT8gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBQNTQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFVTQiB2YXJpYW50LCBgUDU0X1VTQmAuIFN5emthbGxlciB1dGlsaXplcyBVU0IgZW11bGF0aW9uIHZpYSBgc3l6X3VzYl9jb25uZWN0YCwgcmF3LWdhZGdldCwgYW5kIHVzYi1mdXp6ZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBnZXQgYHA1NHVzYmAgdG8gcHJvYmUgYW5kIGxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhhdCdzIHRoZSBrZXkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBwNTR1X3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBJdCBjaGVja3MgZW5kcG9pbnRzLCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBjYWxscyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhpcyBmaXJtd2FyZSBsb2FkaW5nIGlzIHByb2JhYmx5IHdoZXJlIHdlIGNhbiBnZXQgdGhlIG1vc3QgbWlsZWFnZSBmb3IgZnV6emluZy4gVG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZlYXNpYmxlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgcDU0dV9sb2FkX2Zpcm13YXJlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBwNTR1c2IuY2AgZHJpdmVyIGZpbGUuIFRoYXQgd2lsbCByZXZlYWwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV0ZXJtaW5lIGlmIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgZmlybXdhcmUgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjowNi42Mzk1MTA5ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg0MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTR1X2xvYWRfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9ODY3PXN0YXRpYyBpbnQgcDU0dV9zdGFydF9vcHMoc3RydWN0IHA1NHVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjkxOTpzdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTIwLVxcdFxcdFxcdFxcdCAgdm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjk1MzpzdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk1NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05NzMtXFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLCBHRlBfS0VSTkVMLCBwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5NzQ6XFx0XFx0XFx0XFx0ICAgICAgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTc1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05ODQ9c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTEwNDgtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxMDQ5OlxcdGVyciA9IHA1NHVfbG9hZF9maXJtd2FyZShkZXYsIGludGYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMDUwLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjA2Ljc2MzM1OTE3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc0OTc0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIGRvbmUgYXN5bmNocm9ub3VzbHkgdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YC4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgaW5pdGlhdGVkIGJ5IGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgYW5kIGNvbnRyYXN0IGl0IHdpdGggdGhlIHN0YW5kYXJkLCBzeW5jaHJvbm91cyBhcHByb2FjaC5cblxuKipBbmFseXppbmcgRmlybXdhcmUgTG9hZGluZyB3aXRoIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAqKlxuXG5NeSBndXQgdGVsbHMgbWUgdGhhdCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCBpcyB0aGUgY3J1Y2lhbCBjYWxsYmFjayBmdW5jdGlvbiBpbnZvbHZlZCwgc2luY2UgY2FsbGJhY2tzIGFyZSB3aGF0IGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgYXJlIGtub3duIGZvci4gSXQncyBwcm9iYWJseSB0aGUgZW5kcG9pbnQgb2YgdGhhdCBwcm9jZXNzLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGZpcm13YXJlIGRhdGEgaXMgZmluYWxseSBoYW5kZWQgb2ZmLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZsb3cuIFdoYXQncyB0aGUgY29udGV4dD8gV2hvIGNhbGxzIGl0IGFuZCB3aHk/XG5cblRoZW4gdGhlcmUncyBgcDU0dV9zdGFydF9vcHNgLiBJIHN1c3BlY3QgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBvciBlbmFibGVtZW50IG9mIHRoZSBkZXZpY2UgYWZ0ZXIgdGhlIGZpcm13YXJlIGhhcyBiZWVuIGxvYWRlZCwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgY2FsbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGl0IHdhaXQ/IERvZXMgaXQgcHJvY2VlZCByaWdodCBhd2F5PyBPciBpcyBpdCBjb25kaXRpb25hbCBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgaWYgaXQncyBzeW5jaHJvbml6ZWQsIGFuZCBpZiBub3QsIGhvdyBpdCBhZGRyZXNzZXMgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IG11dGV4ZXMgaW52b2x2ZWQ/XG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBhbmQgaWYgaXQgaXMgZG9uZSBwcm9wZXJseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZSBwb2ludCB3aGVyZSB0aGUgYXN5bmNocm9ub3VzIHJlcXVlc3QgaXMgbWFkZSBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIHdoZW4gdGhlIGRldmljZSBpcyBmdWxseSBvcGVyYXRpb25hbCB0byBnYWluIHRoaXMgdW5kZXJzdGFuZGluZy4gU28sIEkgd2lsbCBzdGFydCByZWFkaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIHRyYWNpbmcgdGhlIHZhcmlhYmxlcywgYW5kIGNoYXJ0aW5nIHRoZSBleGVjdXRpb24gZmxvdyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZpcm13YXJlIGxvYWQgc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MDkuOTM4MzM2NjUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE4OlxcdFxcbiA5MTk6XFx0c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXFxuIDkyMDpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNvbnRleHQpXFxuIDkyMTpcXHR7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gY29udGV4dDtcXG4gOTIzOlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcHJpdi1cXHUwMDNldWRldjtcXG4gOTI0OlxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gcHJpdi1cXHUwMDNlaW50ZjtcXG4gOTI1OlxcdFxcdGludCBlcnI7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlmIChmaXJtd2FyZSkge1xcbiA5Mjg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZncgPSBmaXJtd2FyZTtcXG4gOTI5OlxcdFxcdFxcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xcbiA5MzA6XFx0XFx0fSBlbHNlIHtcXG4gOTMxOlxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuIDkzMjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsIFxcXCJGaXJtd2FyZSBub3QgZm91bmQuXFxcXG5cXFwiKTtcXG4gOTMzOlxcdFxcdH1cXG4gOTM0OlxcdFxcbiA5MzU6XFx0XFx0Y29tcGxldGUoXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuIDkzNjpcXHRcXHQvKlxcbiA5Mzc6XFx0XFx0ICogQXQgdGhpcyBwb2ludCBwNTR1X2Rpc2Nvbm5lY3QgbWF5IGhhdmUgYWxyZWFkeSBmcmVlZFxcbiA5Mzg6XFx0XFx0ICogdGhlIFxcXCJwcml2XFxcIiBjb250ZXh0LiBEbyBub3QgdXNlIGl0IGFueW1vcmUhXFxuIDkzOTpcXHRcXHQgKi9cXG4gOTQwOlxcdFxcdHByaXYgPSBOVUxMO1xcbiA5NDE6XFx0XFxuIDk0MjpcXHRcXHRpZiAoZXJyKSB7XFxuIDk0MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0XFx0dXNiX2xvY2tfZGV2aWNlKHVkZXYpO1xcbiA5NDY6XFx0XFx0XFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcXHUwMDI2cDU0dV9kcml2ZXIsIGludGYpO1xcbiA5NDc6XFx0XFx0XFx0dXNiX3VubG9ja19kZXZpY2UodWRldik7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdHVzYl9wdXRfaW50ZihpbnRmKTtcXG4gOTUxOlxcdH1cXG4gOTUyOlxcdFxcbiA5NTM6XFx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbiA5NTQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDk1NTpcXHR7XFxuIDk1NjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDk1NzpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbiA5NTg6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2aWNlID0gXFx1MDAyNnVkZXYtXFx1MDAzZWRldjtcXG4gOTU5OlxcdFxcdGludCBlcnIsIGk7XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWZ3X3dhaXRfbG9hZCk7XFxuIDk2NDpcXHRcXHRpID0gcDU0X2ZpbmRfdHlwZShwcml2KTtcXG4gOTY1OlxcdFxcdGlmIChpIFxcdTAwM2MgMClcXG4gOTY2OlxcdFxcdFxcdHJldHVybiBpO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cHJpdi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwiTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxcXG5cXFwiLFxcbiA5Njk6XFx0XFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0dXNiX2dldF9pbnRmKGludGYpO1xcbiA5NzI6XFx0XFx0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsIHA1NHVfZndsaXN0W2ldLmZ3LFxcbiA5NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLCBHRlBfS0VSTkVMLCBwcml2LFxcbiA5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKTtcXG4gOTc1OlxcdFxcdGlmIChlcnIpIHtcXG4gOTc2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcIihwNTR1c2IpIGNhbm5vdCBsb2FkIGZpcm13YXJlICVzIFxcXCJcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIiglZCkhXFxcXG5cXFwiLCBwNTR1X2Z3bGlzdFtpXS5mdywgZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MDkuOTM4NDU0NzYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTc3NDU3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUDU0IFVTQiBEcml2ZXIgVHJpYWdlOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHA1NCBVU0IgZHJpdmVyIGFuZCBob3cgd2UgY2FuIGVmZmVjdGl2ZWx5IGZ1enogaXQgd2l0aCBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcHJvbWlzaW5nLiBVU0IgZGV2aWNlcyBhcmUsIGFmdGVyIGFsbCwgZW11bGF0ZWQgdmlhIHN5emthbGxlciB1c2luZyBVU0IgUmF3IEdhZGdldCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCBvdXIgdHJpYWdlIHBoaWxvc29waHk6IHJlYWNoYWJsZSBkcml2ZXJzIHRocm91Z2ggdmlydHVhbCBidXNlcyBhcmUgcHJpbWUgdGFyZ2V0cy5cblxuTGV0J3MgcXVpY2tseSBydWxlIG91dCBhbnkgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXNuJ3Qgc29tZSBvYnNjdXJlLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVyIHJlcXVpcmluZyBleG90aWMgaGFyZHdhcmUuIFA1NCBVU0IgaXMgYSAqVVNCIGRyaXZlciosIGFuZCBjcnVjaWFsbHksIGl0J3MgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gd2l0aGluIHRoZSBRRU1VL3N5emthbGxlciBzZXR1cC4gVGhhdCdzIGEgaHVnZSB3aW4hXG5cbk5vdyBmb3IgdGhlIGludGVyZXN0aW5nIGJpdCDigJMgdGhlIGNvZGUgY2hhbmdlcy4gSSdtIHNlZWluZyBhIGZpeCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHA1NF9maW5kX2llYC4gVGhlIGZpeCBhZGRyZXNzZXMgYSBgc2l6ZW9mKG1nbXQpYCBpc3N1ZSwgY2hhbmdpbmcgaXQgZnJvbSBhIHBvaW50ZXIgc2l6ZSB0byB0aGUgYWN0dWFsIHN0cnVjdCBzaXplLCB3aGljaCBtZWFucyB0aGUgYm91bmRzIGNoZWNraW5nIG9mIHBhcnNpbmcgODAyLjExIElFcyBpcyBiZWluZyBmaXhlZCwgd2hpY2ggaXMgYSBiaWcgZGVhbCEgUG90ZW50aWFsbHkgY3JpdGljYWwuXG5cbkFscmlnaHQsIHRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGU/IExldCdzIGFuYWx5emUgdGhvc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIExvb2tzIGxpa2Ugd2UgbmVlZCBgUDU0X0NPTU1PTmAsIGBQNTRfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGVuYWJsZWQuIGBQNTRfQ09NTU9OYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGFuZCB0aGVuIHNlbGVjdHMgYEZXX0xPQURFUmAgYW5kIGBDUkNfQ0NJVFRgLiBgUDU0X1VTQmAgZGVwZW5kcyBvbiBgUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCYCBhbmQgc2VsZWN0cyBgQ1JDMzJgLiBXZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3MgaW4gdGhlIGBNYWtlZmlsZWAgaXRzZWxmLCBvZiBjb3Vyc2UuXG5cbk92ZXJhbGwsIHRoaXMgZHJpdmVyIHNlZW1zIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBlbXVsYXRpb24sIGNvdXBsZWQgd2l0aCB0aGUgbmF0dXJlIG9mIHRoZSBmaXggaW4gYHA1NF9maW5kX2llYCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyB3b3VsZCBiZSBhIHByb2ZpdGFibGUgYXZlbnVlIHRvIGV4cGxvcmUuIFdlJ3ZlIGp1c3QgZ290IHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MTQuNDU2MjAzNDg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdHA1NGNvbW1vbi1vYmpzXFx0XFx0XFx0Oj0gZWVwcm9tLm8gZndpby5vIHR4cngubyBtYWluLm9cXG4gICAzOlxcdHA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcXHQrPSBsZWQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfUDU0X0NPTU1PTilcXHQrPSBwNTRjb21tb24ub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1A1NF9VU0IpXFx0XFx0Kz0gcDU0dXNiLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19QNTRfUENJKVxcdFxcdCs9IHA1NHBjaS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfUDU0X1NQSSlcXHRcXHQrPSBwNTRzcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoxNC40NTYyODUyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxODg4ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIGFuZCBDYWxsZXJzIG9mIGBwNTRfZmluZF9pZWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIHRvIGBwNTRfZmluZF9pZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjYWxsZXJzLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UgdXNpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBwNTRfZmluZF9pZWAsIGFuZCBJIHNlZSB0aGUgZm9sbG93aW5nOiBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGBwNTRfYmVhY29uX3VwZGF0ZWAsIGFuZCBgcDU0X3J4X2RhdGFgLiBHb29kLCBub3cgSSBoYXZlIG15IHRhcmdldCBsaXN0LlxuXG5OZXh0LCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYHA1NF9maW5kX2llYC4gSXMgaXQgc3RhdGljLCBsb2NhbCwgb3IgZ2xvYmFsIGFuZCBleHBvcnRlZD8gQSBxdWljayBjaGVjayBzaG93cyBpdCdzIGRlY2xhcmVkIGluIGBsbWFjLmhgIGFuZCBkZWZpbmVkIGluIGBtYWluLmNgLCBhbmQgdGhlIGRlZmluaXRpb24gYXBwZWFycyBnbG9iYWwuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFzIGl0J3Mgbm90IHJlc3RyaWN0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUuIEkgYWxzbyBzZWUgdGhhdCBgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltYCwgYHA1NF9iZWFjb25fdXBkYXRlYCwgYHA1NF9wc3BvbGxfd29ya2Fyb3VuZGAsIGFuZCBgcDU0X3J4X2RhdGFgIGFyZSBhbGwgc3RhdGljLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBhcyB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHRoZSBnbG9iYWwgZnVuY3Rpb24gaW4gcXVlc3Rpb24uXG5cbkdpdmVuIHRoYXQgYHA1NF9yeF9kYXRhYCBpcyB1c2VkIHdpdGhpbiB0aGUgZmlsZSBgdHhyeC5jYCwgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB0aGF0IG1vZHVsZSBtaWdodCBjYWxsIGBwNTRfZmluZF9pZWAuIExldCdzIGNoZWNrIGB0eHJ4LmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYHA1NF9yeGAuIEl0IHNlZW1zIHJlbGV2YW50IHRvIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjE4LjA3NTE3NjU1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5MjYxNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9Mjc9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk0LVxcdFxcdFxcdG1heGxlbiA9IHByaXYtXFx1MDAzZXR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTU6XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk2LVxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTEzNT1zdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTUzOmVudW0gcDU0X3J4X2RlY3J5cHRfc3RhdHVzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTE1NC1cXHRQNTRfREVDUllQVF9OT05FID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtMTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg6MTY3OnN0cnVjdCBwNTRfcnhfZGF0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaC0xNjgtXFx0X19sZTE2IGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTE2ND1zdHJ1Y3QgcDU0X2NvbW1vbiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjY2LS8qIGludGVyZmFjZXMgZm9yIHRoZSBkcml2ZXJzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjI2NzppbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTI2OC12b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTE4ND1zdGF0aWMgdm9pZCBwNTRwX2NoZWNrX3J4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgKmluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM6MjIzOlxcdFxcdGlmIChwNTRfcngoZGV2LCBza2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTIyNC1cXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRtYV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jPTMxND1zdGF0aWMgaW50IHA1NHNwaV9yeChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTM2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MzYzOlxcdGlmIChwNTRfcngocHJpdi1cXHUwMDNlaHcsIHNrYikgPT0gMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMzY0LVxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz0xNDA9c3RhdGljIHZvaWQgcDU0dV9yeF9jYihzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzoxNjM6XFx0aWYgKHA1NF9yeChkZXYsIHNrYikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTY0LVxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IocHJpdi1cXHUwMDNlY29tbW9uLnJ4X210dSArIDMyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM9Mjk0PXN0YXRpYyB2b2lkIHA1NF9wc3BvbGxfd29ya2Fyb3VuZChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMzI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI3OnN0YXRpYyBpbnQgcDU0X3J4X2RhdGEoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMjgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6MzI5OlxcdHN0cnVjdCBwNTRfcnhfZGF0YSAqaGRyID0gKHN0cnVjdCBwNTRfcnhfZGF0YSAqKSBza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zMzAtXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0zOTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzozOTk6c3RhdGljIHZvaWQgcDU0X3J4X2ZyYW1lX3NlbnQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo0ODg6c3RhdGljIHZvaWQgcDU0X3J4X2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQ4OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy01MjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo1MjU6c3RhdGljIHZvaWQgcDU0X3J4X3N0YXRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNTI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE5OnN0YXRpYyB2b2lkIHA1NF9yeF90cmFwKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjU1OnN0YXRpYyBpbnQgcDU0X3J4X2NvbnRyb2woc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjAtXFx0Y2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY2MTpcXHRcXHRwNTRfcnhfZnJhbWVfc2VudChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjYyLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjYzLVxcdGNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjY0OlxcdFxcdHA1NF9yeF90cmFwKHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02NjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY2OC1cXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSzpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY2OTpcXHRcXHRwNTRfcnhfc3RhdHMocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3MS1cXHRjYXNlIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjcyOlxcdFxcdHA1NF9yeF9lZXByb21fcmVhZGJhY2socHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTY3My1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjgzLS8qIHJldHVybnMgemVybyBpZiBza2IgY2FuIGJlIHJldXNlZCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6Njg0OmludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjg5LVxcdGlmICh0eXBlIFxcdTAwMjYgUDU0X0hEUl9GTEFHX0NPTlRST0wpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo2OTA6XFx0XFx0cmV0dXJuIHA1NF9yeF9jb250cm9sKHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02OTEtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjkyOlxcdFxcdHJldHVybiBwNTRfcnhfZGF0YShwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjkzLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjY5NDpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcngpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjk1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoxOC4zNzQ0NDM5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNjQ3NjExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEJlYWNvbiBVcGRhdGUgRW50cnkgUG9pbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBiZWFjb24gZnVuY3Rpb25hbGl0eS4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIHVwZGF0ZSBlbnRyeSBwb2ludCBjb3JyZWN0bHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgd2UgY292ZXJlZCBpdCwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgb3ZlciB0byBgbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IHBpbnBvaW50IHdoZXJlIHRoZSBiZWFjb24gdXBkYXRlIHNlcXVlbmNlIGtpY2tzIG9mZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBlc3BlY2lhbGx5IHdpdGggaG93IHdlJ3JlIGFyY2hpdGVjdGluZyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMuIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgYXJlIHByb3Blcmx5IGNvb3JkaW5hdGVkIGZvciBzZWFtbGVzcyBleGVjdXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMgZHVyaW5nIHRoZSByZWZhY3Rvci4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MjAuNzgwOTIyMzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY2MTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9OTY9c3RhdGljIGludCBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTM1OnN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xMzYtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9NDUyPXN0YXRpYyB2b2lkIHA1NF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtNDY3LVxcdFxcdHA1NF9zZXR1cF9tYWMocHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYzo0Njg6XFx0XFx0cDU0X2JlYWNvbl91cGRhdGUocHJpdiwgdmlmKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTQ2OS1cXHRcXHRwNTRfc2V0X2VkY2YocHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjIwLjg3NDU4OTEyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzY4OTIwOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBgcDU0X2ZpbmRfaWVgLCBhcyB0aGF0J3MgdGhlIG9uZSB0aGF0IHdhcyBhY3R1YWxseSBtb2RpZmllZC4gV2UncmUgdGFsa2luZyBhYm91dCBhIGJ1ZmZlciBsZW5ndGggY2hlY2sgaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1ha2luZyBhIG1pc3Rha2UgaW4gY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBiZWluZyByZWFkIGJ5IHVzaW5nIHRoZSBzaXplIG9mIGEgcG9pbnRlciAoYHNpemVvZihtZ210KWApIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYgKGBzaXplb2YoKm1nbXQpYCkuIFRoYXQncyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgYWxsb3dpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiBiZWFjb25zIG9yIHJlY2VpdmVkIGZyYW1lcy4gV2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyBoYXMgYmVlbiBpZGVudGlmaWVkIG1lYW5zIGl0J3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciB0ZXN0aW5nLiBUaGUgZGVzY3JpcHRpb24gc3BlY2lmaWVzIHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGJlYWNvbiBhbmQgZnJhbWUgcHJvY2Vzc2luZywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2Ygd2lyZWxlc3MgYW5kIG5ldHdvcmsgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJvdmlkZWQgYFJlYXNvbmluZ2AgY29uZmlybXMgaXQgY2FuIGJlIGV4cGxvaXRlZCBieSBjYXJlZnVsbHkgY3JhZnRlZCB3aXJlbGVzcyBwYWNrZXRzLlxuXG5Mb29raW5nIGF0IHRoZSBvdGhlciBzeW1ib2xzIGxpc3RlZDogYHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbWAsIGBwNTRfcHNwb2xsX3dvcmthcm91bmRgLCBgcDU0X2JlYWNvbl91cGRhdGVgLCBgcDU0X3J4YCwgYW5kIGBwNTRfYnNzX2luZm9fY2hhbmdlZGAg4oCTIHRoZXkncmUgYWxsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGJlYWNvbiBhbmQgZnJhbWUgaGFuZGxpbmcuIFdlIHNob3VsZCBrZWVwIHRoZXNlIGluIG1pbmQgd2hlbiBhbmFseXppbmcgdGhlIG92ZXJhbGwgcGF0Y2guIFRoZXkgcHJvYmFibHkgYXJlIGFkamFjZW50IGNvZGUuXG5cblRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBVU0IgZ2FkZ2V0IC8gcmF3X2dhZGdldCBpbnRlcmZhY2VzIGFzIGFuIG9wdGlvbiBpcyB2ZXJ5IGhlbHBmdWwuIEl0IG1lYW5zIHdlIGNhbiBlbXVsYXRlIHRoZSBkcml2ZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIG1ha2UgaXQgbXVjaCBlYXNpZXIgdG8gdHJpZ2dlciBhbmQgcmVwcm9kdWNlIHRoZSB2dWxuZXJhYmlsaXR5LCBvciBldmVuIGZ1enogaXQgaWYgd2UgY2FuIGZpbmQgYSBnb29kIHNldHVwLlxuXG5GaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgKGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgKSB0ZWxscyBtZSB3aGF0IGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoaXMgaXNzdWUuIFRoZXNlIGFyZSBlc3NlbnRpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyBzdWJtaXQgdGhlIHJlc3VsdHMgYW5kIGZvY3VzIG9uIGZ1cnRoZXIgdGVzdGluZy4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyNCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6MDI6MjUuNjQzNTEzNzY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjY1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQNTRfQ09NTU9OXCIsXG4gICAgXCJQNTRfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9maW5kX2llXCIsXG4gICAgXCJwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW1cIixcbiAgICBcInA1NF9wc3BvbGxfd29ya2Fyb3VuZFwiLFxuICAgIFwicDU0X2JlYWNvbl91cGRhdGVcIixcbiAgICBcInA1NF9yeFwiLFxuICAgIFwicDU0X2Jzc19pbmZvX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyBhIHNpemVvZiBwb2ludGVyIHZzIGRlcmVmZXJlbmNlIGJ1ZyBpbiBwNTRfZmluZF9pZSgpLCBjaGFuZ2luZyBzaXplb2YobWdtdCkgdG8gc2l6ZW9mKCptZ210KSB0byBwcm9wZXJseSB2YWxpZGF0ZSBmcmFtZSBsZW5ndGggYmVmb3JlIHBhcnNpbmcgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChwNTR1c2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X2ZpbmRfaWVcIixcbiAgICBcInA1NF9iZWFjb25fZm9ybWF0X2llX3RpbVwiLFxuICAgIFwicDU0X3BzcG9sbF93b3JrYXJvdW5kXCIsXG4gICAgXCJwNTRfYmVhY29uX3VwZGF0ZVwiLFxuICAgIFwicDU0X3J4XCIsXG4gICAgXCJwNTRfYnNzX2luZm9fY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvcnJlY3RzIGEgc2l6ZW9mIHBvaW50ZXIgdnMgZGVyZWZlcmVuY2UgYnVnIGluIHA1NF9maW5kX2llKCksIGNoYW5naW5nIHNpemVvZihtZ210KSB0byBzaXplb2YoKm1nbXQpIHRvIHByb3Blcmx5IHZhbGlkYXRlIGZyYW1lIGxlbmd0aCBiZWZvcmUgcGFyc2luZyBJRUVFIDgwMi4xMSBpbmZvcm1hdGlvbiBlbGVtZW50cy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHA1NHVzYikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjI1Ljc2NzE4NjA4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDk4NTc2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjoyNS43Njc2MDI1MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDg0OTQzNjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDRjOTUxNzkyZjUwMjBjMGI1ZjEwZDY1NzJhYWJmMWYwNDRiODNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTE6MDE6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uY1xuaW5kZXggNTdhNjIxMDhjYmMzNS4uZDNlMTc3NjE3NGY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcbkBAIC03Niw3ICs3Niw3IEBAIHU4ICpwNTRfZmluZF9pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpZSlcbiBcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gXHR1OCAqcG9zLCAqZW5kO1xuIFxuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YobWdtdCkpXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IHNpemVvZigqbWdtdCkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cG9zID0gKHU4ICopbWdtdC1cdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjI1Ljc2NzYwMzU0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTI2NjA3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFBhdGNoIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNgIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQncyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgYm91bmRzIGNoZWNrIHVwZGF0ZSBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgb3JpZ2luYWwgY2hlY2sgYHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YobWdtdClgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gYHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBzaXplb2YoKm1nbXQpYC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXguIFRoaXMgaXMgYSBiYXNpYyBmaXgsIGxpa2VseSBhdm9pZGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBzb21ldGhpbmcgdGVycmlibHkgY29tcGxleC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSBrbm93bGVkZ2Ugb2YgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gc2VlIHRoZSBmdW5jdGlvbi4gT2theSwgSSd2ZSBnb3QgdGhlIGNvbnRleHQuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGltbWVkaWF0ZWx5IHNjcmVhbWluZyBmb3IgZXh0cmEgc2NydXRpbnkgd2l0aCBLTVNBTi4gV2hpbGUgYW55IGJvdW5kcyBjaGVjayBmaXggKmNvdWxkKiBiZSBpbXBvcnRhbnQsIHRoaXMgb25lIHNlZW1zIHByZXR0eSBmb2N1c2VkLiBUaGUgZnVuY3Rpb24gaXMgcGFyc2luZyBJRSBoZWFkZXJzLCBzbyBpdCdzIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBkYXRhLCBidXQgaXQncyBhICp2ZXJ5KiBiYXNpYyBjaGVjayBvbiB0aGUgbGVuZ3RoIG9mIGFuIGluY29taW5nIHNrYi4gSSdtIGdvaW5nIHRvIG1ha2UgdGhlIGNhbGwgYW5kIHNheSBgTmVlZHNLTVNBTj1mYWxzZWAgb24gdGhpcyBvbmUuIEl0J3MgYSBnb29kIHBhdGNoLCBidXQgc3RhbmRhcmQgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0J3MgZmxhZyB0aGlzIGFzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTowMjozMi42OTQyMTU1MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0XFx0YnJlYWs7XFxuICA2MTpcXHRcXHRkZWZhdWx0OlxcbiAgNjI6XFx0XFx0XFx0YnJlYWs7XFxuICA2MzpcXHRcXHR9XFxuICA2NDpcXHR9XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyBpbnQgcDU0X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiAgNjc6XFx0XFx0XFx0XFx0Ym9vbCBzZXQpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0cmV0dXJuIHA1NF91cGRhdGVfYmVhY29uX3RpbShwcml2LCBzdGEtXFx1MDAzZWFpZCwgc2V0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0dTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3NzpcXHRcXHR1OCAqcG9zLCAqZW5kO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gc2l6ZW9mKCptZ210KSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRwb3MgPSAodTggKiltZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZTtcXG4gIDgzOlxcdFxcdGVuZCA9IHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgODQ6XFx0XFx0d2hpbGUgKHBvcyBcXHUwMDNjIGVuZCkge1xcbiAgODU6XFx0XFx0XFx0aWYgKHBvcyArIDIgKyBwb3NbMV0gXFx1MDAzZSBlbmQpXFxuICA4NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0XFx0aWYgKHBvc1swXSA9PSBpZSlcXG4gIDg5OlxcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdHBvcyArPSAyICsgcG9zWzFdO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHQvKlxcbiAgOTk6XFx0XFx0ICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS5cXG4gMTAwOlxcdFxcdCAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsXFxuIDEwMTpcXHRcXHQgKiBiZWNhdXNlIGl0J2xsIGJlIG92ZXJ3cml0dGVuIVxcbiAxMDI6XFx0XFx0ICovXFxuIDEwMzpcXHRcXHR1OCAqdGltO1xcbiAxMDQ6XFx0XFx0dTggZHRpbV9sZW47XFxuIDEwNTpcXHRcXHR1OCBkdGltX3BlcmlvZDtcXG4gMTA2OlxcdFxcdHU4ICpuZXh0O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHR0aW0gPSBwNTRfZmluZF9pZShza2IsIFdMQU5fRUlEX1RJTSk7XFxuIDEwOTpcXHRcXHRpZiAoIXRpbSlcXG4gMTEwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRkdGltX2xlbiA9IHRpbVsxXTtcXG4gMTEzOlxcdFxcdGR0aW1fcGVyaW9kID0gdGltWzNdO1xcbiAxMTQ6XFx0XFx0bmV4dCA9IHRpbSArIDIgKyBkdGltX2xlbjtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKGR0aW1fbGVuIFxcdTAwM2MgMylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRtZW1tb3ZlKHRpbSwgbmV4dCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gbmV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjMyLjY5NDM2NzczOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTIyNjQ4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEtBU0FOIGlzIHRoZSBLZXkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZpeGVzIGEgc3VidGxlIGJ1ZyBpbiBgcDU0X2ZpbmRfaWVgLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIGBzaXplb2ZgIGNvbmZ1c2lvbi4gSXQgd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLiAgYG1nbXRgIGlzIGEgcG9pbnRlciwgc28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGdldHRpbmcgdGhlIHNpemUgb2YgdGhlICpwb2ludGVyKiBpdHNlbGYgKDQgb3IgOCBieXRlcyBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlKSwgbm90IHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXQgcG9pbnRlZCB0byAoYHN0cnVjdCBpZWVlODAyMTFfbWdtdGApLiBUaGlzIG1lYW50IHRoYXQgaWYgdGhlIGBza2ItXHUwMDNlbGVuYCAodGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlcikgd2FzIHNtYWxsZXIgdGhhbiB0aGUgKmFjdHVhbCogbWFuYWdlbWVudCBmcmFtZSBoZWFkZXIgc2l6ZSAod2hpY2ggaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIpLCB0aGUgY29kZSB3b3VsZCB0cmVhdCBwYXJ0cyBvZiB0aGUgYnVmZmVyICpiZXlvbmQqIHRoZSB2YWxpZCBkYXRhIGFzIGlmIHRoZXkgd2VyZSB2YWxpZC4gIFNwZWNpZmljYWxseSwgYHBvc2Agd2FzIGJlaW5nIHNldCB0byBhbiBvZmZzZXQgdGhhdCB3YXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbG9vcCBjb3VsZCByZWFkIHBhc3QgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEuXG5cblRoYXQncyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCAoT09CKSBzY2VuYXJpby4gIEFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgS0FTQU4sIHRoZSBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiAgSXQncyBzZXQgdXAgdG8gZGV0ZWN0IHByZWNpc2VseSB0aGVzZSBraW5kcyBvZiBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIG5vdCB3aGF0IHRoaXMgZml4ZXMuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjayB2YXJpYWJsZXMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBhbnkgY29kZSBwYXRocyB0aGF0IGNvdWxkIGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gSXQgaXMgcHVyZWx5IGEgYm91bmRzIGNoZWNrIGNvcnJlY3Rpb24uIFRoZSBjb2RlICpiZWZvcmUqIHRoZSBwYXRjaCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoYXQncyB0aGUgdnVsbmVyYWJpbGl0eS4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBib3VuZHMgY2hlY2suXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5nbGUuIEtNU0FOJ3Mgam9iIGlzIHRvIHNuaWZmIG91dCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuICBCdXQgdGhlIGd1aWRpbmcgcHJpbmNpcGxlIGlzLCBhbmQgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLCBcInRoZXJlIGlzIG5vIHNlbnNlIGluIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGlmIGEgYnVnIGNhbiBiZSBjYXVnaHQgYnkgS0FTQU4uLi4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9yc1wiLiAgVGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIGlzc3VlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoYXQsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBzaXR1YXRpb24uIFRoZSBwYXRjaCBkb2Vzbid0IHRvdWNoLCBvciBjcmVhdGUsIGFueSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm90IGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHJpc2sgb2Yga2VybmVsIGluZm8gbGVha2luZy5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYW4gT09CLCBhbmQgYmVjYXVzZSBLQVNBTiBpcyBiZXN0IHN1aXRlZCB0byBjYXRjaGluZyB0aGF0IGtpbmQgb2YgaXNzdWUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblNvLCB0aGUgcmVhc29uaW5nIEkgd291bGQgcHJlcGFyZSB3b3VsZCBiZTpcblxuKiAgIFRoZSBwYXRjaCBmaXhlcyBhIGBzaXplb2ZgIHR5cG8gaW4gYHA1NF9maW5kX2llKClgLCBhIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jYC4gVGhlIHR5cG8gd2FzIHVzaW5nIGBzaXplb2YobWdtdClgIGluc3RlYWQgb2YgYHNpemVvZigqbWdtdClgLlxuKiAgIEtBU0FOIGlzIGFwcHJvcHJpYXRlIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBzaXplIG9mIHRoZSBza2IgYnVmZmVyIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX21nbXRgIGhlYWRlci4gVGhlIGNvcnJlY3RlZCBjb2RlIGZpeGVzIHRoZSBPT0IgcmVhZC5cbiogICBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgb3IgaW5mbyBsZWFraW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTczLCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjAyOjQwLjYxNzAxOTMwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaXplb2YgYnVnIGluIHA1NF9maW5kX2llKCkgd2hlcmUgc2l6ZW9mKG1nbXQpICh0aGUgcG9pbnRlciBzaXplLCA0IG9yIDggYnl0ZXMpIHdhcyBjaGVja2VkIGluc3RlYWQgb2Ygc2l6ZW9mKCptZ210KSAodGhlIHN0cnVjdHVyZSBzaXplKS4gQW4gc2tiIHNob3J0ZXIgdGhhbiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBtZ210LVxcdTAwM2V1LmJlYWNvbi52YXJpYWJsZSBvciByZWFkaW5nIHBhc3QgdGhlIHNrYiBkYXRhIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzIG9uIHNrX2J1ZmYgYnVmZmVycyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qga2VybmVsLXRvLXVzZXIgZGF0YSBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvbs5t[1] Phase: Succeeded StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2] Phase: Succeeded StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 11:02:51 +0000 UTC FinishedAt: 2026-09-04 11:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflowvbs5t/series-workflowvbs5t-convert-artifact-1110606209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 11:03:02 +0000 UTC FinishedAt: 2026-09-04 11:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 11:03:02 +0000 UTC FinishedAt: 2026-09-04 11:18:56 +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:*5c2f7c68-c2fe-4d3a-8830-08571381e12b,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-workflowvbs5t/series-workflowvbs5t-convert-artifact-1110606209/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": "13905c7e-5294-44eb-a483-46bb0429c474", "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-workflowvbs5t/series-workflowvbs5t-build-action-3096043183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 11:03:02 +0000 UTC FinishedAt: 2026-09-04 11:18:46 +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:*5c2f7c68-c2fe-4d3a-8830-08571381e12b,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-workflowvbs5t/series-workflowvbs5t-convert-artifact-1110606209/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": "13905c7e-5294-44eb-a483-46bb0429c474", "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-workflowvbs5t/series-workflowvbs5t-build-action-3096043183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 11:18:56 +0000 UTC FinishedAt: 2026-09-04 11:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 11:18:56 +0000 UTC FinishedAt: 2026-09-04 11:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 11:18:56 +0000 UTC FinishedAt: 2026-09-04 11:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 11:18:56 +0000 UTC FinishedAt: 2026-09-04 11:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflowvbs5t/series-workflowvbs5t-convert-artifact-4008286804/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 11:19:07 +0000 UTC FinishedAt: 2026-09-04 11:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 11:19:07 +0000 UTC FinishedAt: 2026-09-04 11:20:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13905c7e-5294-44eb-a483-46bb0429c474,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-workflowvbs5t/series-workflowvbs5t-build-action-3096043183/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-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 11:21:04 +0000 UTC FinishedAt: 2026-09-04 11:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 11:21:04 +0000 UTC FinishedAt: 2026-09-04 11:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 11:21:04 +0000 UTC FinishedAt: 2026-09-04 11:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 11:21:04 +0000 UTC FinishedAt: 2026-09-04 11:36:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5c2f7c68-c2fe-4d3a-8830-08571381e12b,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-workflowvbs5t/series-workflowvbs5t-convert-artifact-4008286804/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": "a91e1087-1d46-4acb-a038-264cff0147f6", "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-workflowvbs5t/series-workflowvbs5t-build-action-3632401952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 11:21:04 +0000 UTC FinishedAt: 2026-09-04 11:36:43 +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:*5c2f7c68-c2fe-4d3a-8830-08571381e12b,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-workflowvbs5t/series-workflowvbs5t-convert-artifact-4008286804/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": "a91e1087-1d46-4acb-a038-264cff0147f6", "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-workflowvbs5t/series-workflowvbs5t-build-action-3632401952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 11:36:53 +0000 UTC FinishedAt: 2026-09-04 11:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 11:36:53 +0000 UTC FinishedAt: 2026-09-04 11:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 11:36:53 +0000 UTC FinishedAt: 2026-09-04 11:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 11:36:53 +0000 UTC FinishedAt: 2026-09-04 11:38:42 +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:*a91e1087-1d46-4acb-a038-264cff0147f6,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-workflowvbs5t/series-workflowvbs5t-build-action-3632401952/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-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"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:*13905c7e-5294-44eb-a483-46bb0429c474,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a91e1087-1d46-4acb-a038-264cff0147f6,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-workflowvbs5t/series-workflowvbs5t-build-action-3096043183/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-workflowvbs5t/series-workflowvbs5t-build-action-3632401952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:38:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"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-workflowvbs5t/series-workflowvbs5t-convert-artifact-1044174717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 11:38:52 +0000 UTC FinishedAt: 2026-09-04 11:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 11:38:53 +0000 UTC FinishedAt: 2026-09-04 11:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 11:39:03 +0000 UTC FinishedAt: 2026-09-04 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbs5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_find_ie","p54_beacon_format_ie_tim","p54_pspoll_workaround","p54_beacon_update","p54_rx","p54_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a64a20fb270f244a25c16c184c015b104278a06f","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"152900a9-1075-4940-8f82-b361428bcf0c","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 11:39:03 +0000 UTC FinishedAt: 2026-09-04 11:41:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13905c7e-5294-44eb-a483-46bb0429c474,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a91e1087-1d46-4acb-a038-264cff0147f6,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-workflowvbs5t/series-workflowvbs5t-build-action-3096043183/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-workflowvbs5t/series-workflowvbs5t-build-action-3632401952/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-workflowvbs5t/series-workflowvbs5t-convert-artifact-1044174717/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,}