Name: series-workflowbd9vg Phase: Succeeded StartedAt: 2026-08-26 12:19:16 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[0] Phase: Succeeded StartedAt: 2026-08-26 12:19:16 +0000 UTC FinishedAt: 2026-08-26 13:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 12:19:16 +0000 UTC FinishedAt: 2026-08-26 13:03:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "EFI_STUB", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "EFI_STUB", "MEMORY_FAILURE" ], "series_id": "d43ca8ef-218e-473f-ac4b-22688b028cd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcmVjb3JkaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZCBhY3Jvc3Mga2V4ZWMgcmVib290cy4gVGhlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiAoYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBpbmNsdWRpbmcgYSBgbWVtc2V0YCBvZiB0aGUgdHJhaWxpbmcgYml0bWFwLiBBbGwgc3RhY2sgdmFyaWFibGVzIHVzZWQgZm9yIGdlb21ldHJ5IGFuZCBzaXppbmcgKGByYW1fdG9wYCwgYGJpdG1hcF9zaXplYCwgYHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGdgLCBgbnJfdW5pdHNgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBvbmx5IGFjY2Vzc2VkIG9uIHN1Y2Nlc3MgcGF0aHMgd2hlcmUgdGhleSBoYXZlIGJlZW4gcG9wdWxhdGVkLiBUaGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMpIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uYWFmY2Q0MWJjMDA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiAmIzQzOzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4mIzQzO2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0ZGVmX2Jvb2wgeVxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcbiBcdGJvb2wgXCYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTilcdFx0JiM0Mzs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0JiM0Mzs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0JiM0Mzs9IGNwZXIteDg2Lm9cbiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpXHRcdCYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vXG4mIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0JiM0Mzs9IHBvaXNvbi5vXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcdFx0JiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li4xMTFlNjA0NzkyMTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MztcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiYjNDM7I2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgJiM0Mzs2NDksOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdHtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFx0XCYjMzQ7VW5hY2NlcHRlZFwmIzM0O1x0fSxcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcJiMzNDtQT0lTT05cJiMzNDtcdH0sXG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IGYyN2YyZTFmMDAxOTkuLmI4YjgwODQ2MjM5ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgJiM0Mzs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcXG5cJiMzNDspO1xuIFx0fVxuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqL1xuJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdHU2NCByYW1fdG9wID0gMDtcbiYjNDM7XHRpbnQgaSwgbnJfZGVzYztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4mIzQzO1xuJiM0MztcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbiYjNDM7XHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbiYjNDM7XHRcdGNhc2UgRUZJX0xPQURFUl9EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuJiM0MztcdFx0Y2FzZSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1BFUlNJU1RFTlRfTUVNT1JZOlxuJiM0MztcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wKVxuJiM0MztcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4mIzQzO1xuJiM0MztcdCp0b3AgPSByYW1fdG9wO1xuJiM0MztcdHJldHVybiBFRklfU1VDQ0VTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHJhbV90b3ApXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbiYjNDM7XHRcdFx0XHQgQklUU19QRVJfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuJiM0MztcdFx0XHQgICAgIHNpemVvZigqcG0pICYjNDM7IGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbiYjNDM7XHRwbS1cdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbiYjNDM7XHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4mIzQzO1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4mIzQzO1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4mIzQzO1x0aWYgKHBtKSB7XG4mIzQzO1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuJiM0MztcdFx0XHRlZmlfZXJyKFwmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVmaV9nZXRfcmFtX3RvcChcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCk7XG4mIzQzO1xuJiM0MztcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQsIHBtKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4mIzQzO1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbiYjNDM7XHRcdGVmaV9lcnIoXCYjMzQ7RmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFx0XHRcdCBFRklfUlRfU1VQUE9SVEVEX1NFVF9WSVJUVUFMX0FERFJFU1NfTUFQKTtcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuJiM0MztcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICYjNDM7MTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbiYjNDM7XHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuJiM0MztcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTc5ODQzMjc3NDU3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgJiM0MzsxLDIzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2VmaTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IHtcbiYjNDM7XHR1NjQgdGFibGU7XHRcdC8qIHBoeXMgYWRkcmVzcyBvZiB0aGUgdGFibGUgKi9cbiYjNDM7XHR1NjQgdW5pdF9zaXplO1xuJiM0MztcdHU2NCBiaXRtYXBfc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9uYml0cyBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IF9faW5pdFxuJiM0MztlZmlfcG9pc29uX3VzYWJsZV9zaXplKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbiYjNDM7e1xuJiM0MztcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChQRk5fUEhZUyhtYXhfcGZuKSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbiYjNDM7XHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXaG9sZSB3b3JkczogdGhlIGJpdG1hcCBpcyByZWFjaGVkIGFuIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lLiAqL1xuJiM0MztcdHJldHVybiBtaW4ocm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksIHBtLVx1MDAzZXNpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2U9IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgaXNfcG93ZXJfb2ZfMihwbS1cdTAwM2V1bml0X3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHR1NjQgbmJpdHMsIHNwYW47XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcdTAwMjZuYml0cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhY2hlY2tfbXVsX292ZXJmbG93KG5iaXRzLCAodTY0KXBtLVx1MDAzZXVuaXRfc2l6ZSwgXHUwMDI2c3Bhbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSB0YWJsZSBtYXkgY29tZSBmcm9tIGFuIGVhcmxpZXIga2VybmVsLCBzbyB2ZXQgaXQgYmVmb3JlIHVzaW5nIGl0LiAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdG1lbXVubWFwKHBtKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzaXplID0gZWZpX3BvaXNvbl91c2FibGVfc2l6ZShwbSk7XG4mIzQzO1x0bWVtdW5tYXAocG0pO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICh1bml0IFx1MDAzZT0gZWZpX3BvaXNvbl9uYml0cylcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gdW5pdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhblxuJiM0MzsgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRsb25nIHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuJiM0MztcdGlmICh1bml0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGJvb2wgdmFsaWQ7XG4mIzQzO1xuJiM0MztcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWxpZCA9IGVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pO1xuJiM0MztcdGlmICh2YWxpZCkge1xuJiM0MztcdFx0Zy1cdTAwM2V0YWJsZSA9IHBwbTtcbiYjNDM7XHRcdGctXHUwMDNldW5pdF9zaXplID0gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBLZWVwIHRoZSBydW50aW1lIHNpZGUgb2ZmIGEgdGFibGUgdGhpcyBwYXNzIHJlamVjdGVkLiAqL1xuJiM0MztcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsaWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdFxuJiM0MztlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiA9IFBIWVNfUEZOKHVuaXQgKiBnLVx1MDAzZXVuaXRfc2l6ZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGctXHUwMDNldW5pdF9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5yX3BhZ2VzICYjNDM7PSBod3BvaXNvbl9ib290X3BmbihwZm4gJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBucl9wYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbiYjNDM7XHRcdFx0XHRcdCB1NjQgb2ZmLCB1bnNpZ25lZCBsb25nICpucl91bml0cylcbiYjNDM7e1xuJiM0MztcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFwLCBucl9wYWdlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcCA9IGVhcmx5X21lbXJlbWFwKGctXHUwMDNldGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksXG4mIzQzO1x0XHRcdFx0XHRcdCBiaXRtYXApICYjNDM7IG9mZiwgY2h1bmspO1xuJiM0MztcdGlmICghbWFwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykge1xuJiM0MztcdFx0bnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTtcbiYjNDM7XHRcdCgqbnJfdW5pdHMpJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfcGFnZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIF9faW5pdCBlZmlfcG9pc29uX3dhbGsoY29uc3Qgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnJfdW5pdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMDtcbiYjNDM7XHR1NjQgb2ZmO1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZiA9IDA7IG9mZiBcdTAwM2MgZy1cdTAwM2ViaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bnJfcGFnZXMgJiM0Mzs9IG5yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yX3BhZ2VzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4mIzQzO1x0bG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfcGFnZXMpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O3BvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cJiMzNDssIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYyBleHBlY3RlZClcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRleHBlY3RlZCAtIG5yX3BhZ2VzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHN0b3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVib290LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhhZjgyOGExNSwgMHgwZWY0LCAweDQzOWEsICAweGI4LCAweDZhLCAweGQ2LCAweGQ2LCAweDllLCAweGFmLCAweGJhLCAweGZhKVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtNjUwLDYgJiM0Mzs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiAmIzQzOzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcbiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFxcXG4gXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcbiBcbiYjNDM7LyogQml0IE4gY292ZXJzIHVuaXQgTiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBjb3VudGluZyBmcm9tIGFkZHJlc3MgMC4gKi9cbiYjNDM7c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuJiM0MztcdHUzMlx0XHR2ZXJzaW9uO1xuJiM0MztcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4mIzQzO1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uODg1YWQ2MDkzZDQxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTI1NCwxMSAmIzQzOzUyNTQsMTcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuJiM0Mztib29sIF9faW5pdCBod3BvaXNvbl9ib290X3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcm1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXG4gXHRcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4mIzQzO1xuJiM0Mztib29sIF9faW5pdCBod3BvaXNvbl9ib290X3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbiYjNDM7XHRcdGlmICghdGFrZV9wYWdlX29mZl9idWRkeShwYWdlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuJiM0MztcdH0gZWxzZSBpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSkge1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4mIzQzO1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuJiM0Mzt2b2lkIF9faW5pdCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cbkBAIC0xMjg2LDYgJiM0MzsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbiYjNDM7XHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbiYjNDM7XHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG4gXHR9XG4gXG4gXHRwcl9lcnIoXCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4gXHRraG9fbWVtb3J5X2luaXQoKTtcbiBcbiBcdG1lbWJsb2NrX2ZyZWVfYWxsKCk7XG4mIzQzO1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwpAQCAtMjYzLDYgJiM0MzsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVAogCSAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVybgogCSAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuCiAKJiM0Mztjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwogY29uZmlnIE9WTUZfREVCVUdfTE9HCiAJYm9vbCAmIzM0O0V4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnMmIzM0OwogCWRlcGVuZHMgb24gRUZJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKQkJJiM0Mzs9IGVhcmx5Y29uLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKQkJJiM0Mzs9IGNwZXItYXJtLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KQkJJiM0Mzs9IGNwZXIteDg2Lm8KIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSkJCSYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vCiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpCSYjNDM7PSBwb2lzb24ubwogb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSkJCSYjNDM7PSBzdG1tL3RlZV9zdG1tX2VmaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCmluZGV4IDAzMjdhMzlkMzFmYTUuLjExMWU2MDQ3OTIxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCS51bmFjY2VwdGVkCQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJLnBvaXNvbmVkX21lbW9yeQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiYjNDM7I2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChlZmkpOwogCkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJe0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELAkmYW1wO2VmaS51bmFjY2VwdGVkLAkmIzM0O1VuYWNjZXB0ZWQmIzM0Owl9LAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CXtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwJJiMzNDtQT0lTT04mIzM0Owl9LAomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCCiAJe0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCwJJmFtcDtwcmltYXJ5X2Rpc3BsYXlfdGFibGUJCQl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwppbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKQEAgLTc3NCwzICYjNDM7Nzc0LDEwOSBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsCiAJCQllZmlfd2FybigmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxuJiMzNDspOwogCX0KIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqLwomIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQljYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovCiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCByYW1fdG9wKQomIzQzO3sKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSksCiYjNDM7CQkJCSBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wKTsKJiM0MzsKJiM0MzsJcG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9CiAKIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNzk4NDMyNzc0NTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMjM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlcgomIzQzOyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7ZWZpOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgewomIzQzOwl1NjQgdGFibGU7CQkvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovCiYjNDM7CXU2NCB1bml0X3NpemU7CiYjNDM7CXU2NCBiaXRtYXBfc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IF9faW5pdAomIzQzO2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHM6IHRoZSBiaXRtYXAgaXMgcmVhY2hlZCBhbiB1bnNpZ25lZCBsb25nIGF0IGEgdGltZS4gKi8KJiM0MzsJcmV0dXJuIG1pbihyb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwgcG0tJmd0O3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmICghcG0tJmd0O3NpemUgfHwgIUlTX0FMSUdORUQocG0tJmd0O3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwbS0mZ3Q7dW5pdF9zaXplICZndDs9IFBBR0VfU0laRSAmYW1wOyZhbXA7IGlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5iaXRzLCBzcGFuOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLSZndDtzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsICZhbXA7bmJpdHMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmIChwbS0mZ3Q7dmVyc2lvbiAhPSAxKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxuJiMzNDssCiYjNDM7CQkJcG0tJmd0O3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkgfHwgIWVmaV9wb2lzb25fcmFuZ2VfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSwKJiM0MzsJCQkgICAgICBNRU1SRU1BUF9XQik7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJdTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSBlZmlfcG9pc29uX25iaXRzKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuCiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KHU2NCBwcG0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7CiYjNDM7CWlmICh2YWxpZCkgewomIzQzOwkJZy0mZ3Q7dGFibGUgPSBwcG07CiYjNDM7CQlnLSZndDt1bml0X3NpemUgPSBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwkJZy0mZ3Q7Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdAomIzQzO2VmaV9wb2lzb25fb2ZmbGluZV91bml0KGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLCB1NjQgdW5pdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gUEhZU19QRk4odW5pdCAqIGctJmd0O3VuaXRfc2l6ZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZy0mZ3Q7dW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGh3cG9pc29uX2Jvb3RfcGZuKHBmbiAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrX2NodW5rKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkJIHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKQomIzQzO3sKJiM0MzsJdTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGctJmd0O2JpdG1hcF9zaXplIC0gb2ZmKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXAsIG5yX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJbWFwID0gZWFybHlfbWVtcmVtYXAoZy0mZ3Q7dGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CWlmICghbWFwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTsKJiM0MzsJCSgqbnJfdW5pdHMpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpucl91bml0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwl1NjQgb2ZmOwomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGctJmd0O2JpdG1hcF9zaXplOyBvZmYgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJbG9uZyBuciA9IGVmaV9wb2lzb25fd2Fsa19jaHVuayhnLCBvZmYsIG5yX3VuaXRzKTsKJiM0MzsKJiM0MzsJCWlmIChuciAmbHQ7IDApIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDsKJiM0MzsJbG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksICZhbXA7ZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKCZhbXA7ZywgJmFtcDtucl91bml0cyk7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcykKJiM0MzsJCXByX2luZm8oJiMzNDtwb2lzb25lZCAlbGQgcGFnZShzKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXG4mIzM0OywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwlleHBlY3RlZCA9IG5yX3VuaXRzICogKGcudW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0OyBleHBlY3RlZCkKJiM0MzsJCXByX3dhcm4oJiMzNDslbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcbiYjMzQ7LAomIzQzOwkJCWV4cGVjdGVkIC0gbnJfcGFnZXMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGNjYmMzNTQ3OTY4NGEuLmRhMGQzY2E5MTE1Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wc3RvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlYm9vdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3V1aWQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpOwogI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlECQlFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpCiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlECQlFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpCiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSkKJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRAlFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpCiAKICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRAkJRUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKQogCkBAIC02NTAsNiAmIzQzOzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHsKIAl1bnNpZ25lZCBsb25nCQkJbW9rdmFyX3RhYmxlOwkJLyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcJCQljb2NvX3NlY3JldDsJCS8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCXVuYWNjZXB0ZWQ7CQkvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqLwomIzQzOwl1bnNpZ25lZCBsb25nCQkJcG9pc29uZWRfbWVtb3J5OwkvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi8KIAogCWVmaV9nZXRfdGltZV90CQkJKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90CQkJKnNldF90aW1lOwpAQCAtMTI2OSw2ICYjNDM7MTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcCiAJLyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpCiAKJiM0MzsvKiBCaXQgTiBjb3ZlcnMgdW5pdCBOIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIGNvdW50aW5nIGZyb20gYWRkcmVzcyAwLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpOwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjg4NWFkNjA5M2Q0MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTQsMTEgJiM0Mzs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7CiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpOwomIzQzO2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pCiB7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7Ym9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7CiYjNDM7CQlpZiAoIXRha2VfcGFnZV9vZmZfYnVkZHkocGFnZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcGFnZV9yZWZfaW5jKHBhZ2UpOwomIzQzOwl9IGVsc2UgaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpIHsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7CiYjNDM7CWF0b21pY19sb25nX2luYygmYW1wO251bV9wb2lzb25lZF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqLwomIzQzO3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KQEAgLTEyODYsNiAmIzQzOzEzMTcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpCiAJa2hvX21lbW9yeV9pbml0KCk7CiAKIAltZW1ibG9ja19mcmVlX2FsbCgpOwomIzQzOwlod3BvaXNvbl9pbml0X2Jvb3QoKTsKIAltZW1faW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVGSSBQb2lzb25lZCBNZW1vcnk6IEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0byB0cmFjayBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgYW5kIHRoZW4gaG9ub3JzIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBuZXh0IGtlcm5lbCBib290LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IHdpdGggc3l6a2FsbGVyLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIHJlYWNoYWJpbGl0eS4gQ2FuIHdlIHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgb2Ygc3l6a2FsbGVyPyBNZW1vcnkgZmFpbHVyZXMgY2FuIGJlIGluamVjdGVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IsIEkgdGhpbmssIHRocm91Z2ggc3lzZnMuIFRoZSBjb2RlIHBhdGggbG9va3MgbGlrZSB0aGlzOiBgbWFkdmlzZWAgLSZndDsgYG1lbW9yeV9mYWlsdXJlYCAtJmd0OyBgYWN0aW9uX3Jlc3VsdGAgLSZndDsgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gVGhhdCBsYXN0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lOiBpdCBzZXRzIGEgYml0IGluIHRoZSBFRkkgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBUaGlzIHRhYmxlIGlzIGFsbG9jYXRlZCBieSB0aGUgRUZJIHN0dWIgYW5kIHBhc3NlZCB0byB0aGUga2VybmVsLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiBEb2VzIFFFTVUsIGFzIHVzZWQgYnkgc3l6a2FsbGVyLCBzdXBwb3J0IHRoaXMgRUZJIHN0dWI/CgpZZXMsIGlmIHRoZSBib290IHVzZXMgT1ZNRiwgaXQgZG9lcy4gSG93ZXZlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnVzZSogdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQ/IFR5cGljYWxseSwgaXQgYm9vdHMgd2l0aCBiekltYWdlLCB3aGljaCBtaWdodCBieXBhc3MgdGhlIEVGSSBzdHViLCB1bmxlc3Mgd2UgY29uZmlndXJlIGl0IGEgc3BlY2lmaWMgd2F5LiBFdmVuIGlmIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQsIHdlIHNob3VsZCBzdGlsbCBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbHNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgZHVyaW5nICpydW50aW1lKiB3aGljaCBpcyBnb29kLgoKTG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3MgcHJldHR5IHNpbXBsZTogaXQgY2hlY2tzIGlmIGBlZmlfcG9pc29uYCBpcyBpbml0aWFsaXplZCwgY2FsY3VsYXRlcyBhIHVuaXQsIGFuZCB0aGVuIHNldHMgYSBiaXQgaW4gYSBiaXRtYXAuIFRoZSBgZWZpX3BvaXNvbmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGVhcmx5LCBkdXJpbmcgYm9vdCBpbiBgZWZpX3BvaXNvbl9pbml0KClgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYW4gRUZJIHRhYmxlIGlzIHByZXNlbnQsIHRoZSBwb2ludGVyIGBlZmkucG9pc29uZWRfbWVtb3J5YCBpcyBzZXQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyByZWFjaGFibGUuIFRoZSBFRkkgdGFibGUgaXMgaW5zdGFsbGVkIGJ5IHRoZSBFRkkgc3R1YiBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UgYnkgZnVuY3Rpb25zIGxpa2UgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgZWZpX3N0dWJfY29tbW9uKClgIGFuZCBgZWZpX3N0dWJfZW50cnkoKWAuCgpNeSBjb25jZXJuIGlzIHRoYXQgc3l6a2FsbGVyICpieSBkZWZhdWx0KiBkb2VzIG5vdCB1c2UgRUZJLCBzbyB0aGUgYm9vdC10aW1lIHBhcnNpbmcgaXNuJiMzOTt0IGRpcmVjdGx5IGZ1enphYmxlLiBJdCYjMzk7cyBib290LXRpbWUsIGluIHRoZSBgZWFybHlfaW5pdGNhbGxgIHBoYXNlLiBJdCB3b24mIzM5O3QgZ2V0IGZ1enplZCBub3JtYWxseSwgYW5kIGRpcmVjdCBFRkkgdGFibGUgbWFuaXB1bGF0aW9uIGlzIG5vdCBhIHN5emthbGxlciBjb3JlIGNvbXBldGVuY3kuIEJ1dCwgZXZlbiBpZiBzeXprYWxsZXIgZG9lcyBub3QgZnV6eiB0aGUgRUZJIHBhcnQsIHRoZSBydW50aW1lIHBhdGggaXMuCgpUaGUgYm9vdC10aW1lIGNvZGUgcGFyc2VzIHRoZSBFRkkgdGFibGUuIEhvd2V2ZXIsIHN5emthbGxlciBkb2VzbiYjMzk7dCBmb2N1cyBvbiB0aGF0IHBhcnQgdW5sZXNzIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBzeXNjYWxscy4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIG9jY3VycyAqYXQgcnVudGltZSouIFRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgbWluaW1hbCwgaXQganVzdCBzZXRzIGEgYml0LiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGUgYm9vdCB0aW1lIGNvZGUgdGhhdCBkZWFscyB3aXRoIHJlYWRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdmlhIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLiBIb3dldmVyLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgZG8ga2V4ZWMgYW5kIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNvbnRyb2wgdGhlIEVGSSBhdCBib290LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHJ1bnRpbWUgc2lkZSBjYW4gYmUgYSBmb2N1cy4KCkNoZWNraW5nIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBgaHdwb2lzb25fYm9vdF9wZm5gIGFuZCBgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5YCBhcmUgY2FsbGVkIGR1cmluZyBib290LCBhbmQgYGVmaV9wb2lzb25faW5pdGAgaXMgYW4gYGVhcmx5X2luaXRjYWxsYCwgc28gdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgaXMgdmVyeSBsb3cuIFRoZSBtYWluIHJ1bnRpbWUgaW50ZXJhY3Rpb24gaXMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgYW5kIG1heSBiZSB3b3J0aCBmdXp6aW5nLCBldmVuIGlmIHdlIGFyZSBub3QgdGVzdGluZyB0aGUgYm9vdCBwcm9jZXNzLgoKU2luY2Ugc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIGBNQURWX0hXUE9JU09OYCwgdGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTGV0IG1lIHVzZSB0b29scyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9MTA3PXN0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMTktICovXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMjA6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMS17XG4tLVxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjg2PXZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg3OnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODk9c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvZWZpLmg6MTI5MDpzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjkxLSNlbmRpZlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTMxMj1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMC1cdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzIxOlx0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzIyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBjb2RlIGl0c2VsZiBpcyBzaW1wbGUuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzICp3b3J0aCogZnV6emluZy4gVGhlIGxvZ2ljIGl0IGNvbnRhaW5zIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYSBjaGVjayBmb3IgYSBnbG9iYWwgYGVmaV9wb2lzb25gIGZsYWcsIGEgY2FsbCB0byBgZWZpX3BvaXNvbl91bml0YCB0byBkZXRlcm1pbmUgYSBiaXRtYXAgdW5pdCwgYW5kIHRoZW4gc2V0dGluZyBhIGJpdCBpbiB0aGUgYml0bWFwLiBUaGVyZSBpc24mIzM5O3QgYW55IGNvbXBsZXggbG9naWMgKndpdGhpbiogdGhlIGZ1bmN0aW9uIGl0c2VsZi4KClRoZSBjb21wbGljYXRlZCBwYXJ0cyBzZWVtIHRvIGJlIGR1cmluZyBib290LCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBIb3dldmVyLCB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZvY3VzIG9uIGBfX2luaXRgIGNvZGUgc2luY2UgaXQgb2NjdXJzIGJlZm9yZSB1c2VyLXNwYWNlIHRha2VzIG92ZXIuIFRoZSBzeXN0ZW0gYm9vdHMgYW5kIHRoZXNlIHBhcnRzIGV4ZWN1dGUgb25jZSBkdXJpbmcgYm9vdC4gUUVNVSBhbmQgT1ZNRiBieSBkZWZhdWx0IHdvdWxkbiYjMzk7dCBwcm92aWRlIGEgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZSBFRkkgc3R1YiAqaW5zdGFsbHMqIHRoZSB0YWJsZS4KClRoaXMgaXMgYSBrZXkgcG9pbnQ6IHRoZSBFRkkgc3R1YiBjYWxscyBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLiBTbyB0aGUgdGFibGUgKmlzKiBjcmVhdGVkIGFuZCBpbnN0YWxsZWQgYnkgdGhlIEVGSSBzdHViLCBiZWZvcmUgdGhlIGtlcm5lbCBib290cy4gVGhlIGtlcm5lbCB0aGVuIGNhbGxzIGBlZmlfcG9pc29uX2luaXRgLCB3aGljaCBtYXBzIHRoZSB0YWJsZSBpbnRvIGtlcm5lbCBzcGFjZSwgYW5kIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBkdXJpbmcgcnVudGltZSB3aWxsIGNhbGwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byBzZXQgYml0cyBpbiB0aGUgYml0bWFwLgoKU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBwcm9tcHQgY3JpdGVyaWEsIGl0ICppcyouIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgYWRkcyBhIG5ldyBFRkkgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBpbiBRRU1VIGlmIGJvb3RlZCB3aXRoIGFuIEVGSSBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBleHBsaWNpdDogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi4gdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQgaXQmIzM5O3Mgd29ydGggZnV6emluZywgSSBzaG91bGQgZGVmaW5lIGBFRklfUE9JU09ORURfTUVNT1JZYCBhcyBhIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBUaGUgY29uZmlnIGRlcGVuZHMgb24gYEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVGAuIFNpbmNlIGBFRklfUE9JU09ORURfTUVNT1JZYCBpcyBgZGVmX2Jvb2wgeWAsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KClJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyB0aGUgb25seSBub24taW5pdCBydW50aW1lIGZ1bmN0aW9uLCBhbmQgd2UgY2FuIGRlZmluZSB0aGF0IGFzIGEgZm9jdXMgc3ltYm9sLgoKQmFzZWQgb24gdGhlIHByb21wdCwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLiBJIHdpbGwgZGVmaW5lIHRoZXNlIGNvbmZpZ3M6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYEVGSV9TVFVCYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgd2lsbCBhZGQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVGSV9TVFVCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTYwMi1cbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cdGJvb2xcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDY2LVxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cdGJvb2xcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTA3LVx0Ym9vbCBcJiMzNDtFRkkgYm9vdCBzdHViIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjUwLVxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cdGJvb2xcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxuLS1cbmFyY2gveDg2L0tjb25maWctMTg5OC1cbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcbmFyY2gveDg2L0tjb25maWctMTkwMC1cdGJvb2wgXCYjMzQ7RUZJIHN0dWIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgTWVtb3J5IEZhaWx1cmUgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgRUZJX1NUVUJgIGZlYXR1cmUsIHdoaWNoIEkgdW5kZXJzdGFuZCB0byBiZSBhIGJvb2xlYW4gc2V0dGluZy4gTm93LCBJIHNlZSB0aGUgdGVybSBgTUVNT1JZX0ZBSUxVUkVgIGhhcyBjb21lIHVwLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEga2V5IHRlcm0sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBvcmlnaW4gYW5kIGNvbnRleHQuIEFoLCByaWdodCwgYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgYXJlIHVzdWFsbHkgbG9jYXRlZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gdGhlcmUgYW5kIHRyeSB0byBwaWVjZSB0b2dldGhlciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE1FTU9SWV9GQUlMVVJFYCBhbmQgdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgZmF1bHQgdG9sZXJhbmNlLCBidXQgYSBkaXJlY3QgY2hlY2sgd2lsbCBjb25maXJtIGFuZCBjbGFyaWZ5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzIHdpdGggYEVGSV9TVFVCYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDU5CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVGSSBIYXJkd2FyZSBQb2lzb25lZCBNZW1vcnkgUmVjb3JkaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIGBNRU1PUllfRkFJTFVSRWAgaXMgYSBib29sL3RyaXN0YXRlIOKAkyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBzeW1ib2xzOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLgoKTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyB0aGUgb25seSBydW50aW1lIGZ1bmN0aW9uIGFkZGVkLiBZZXMsIGl0IGxvb2tzIGxpa2UgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhY3Rpb25fcmVzdWx0YCB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBgYWN0aW9uX3Jlc3VsdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgd2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgYG1lbW9yeV9mYWlsdXJlYCBpdHNlbGYuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBzeXNmcywgbWFraW5nIGl0IGludGVyZXN0aW5nLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbiBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhpcyB3b3VsZCBhbGxvdyB0aGUgbmV4dCBrZXJuZWwgYm9vdCAoYWZ0ZXIgYSBrZXhlYykgdG8gYXZvaWQgdXNpbmcgdGhlc2UgYmFkIG1lbW9yeSBwYWdlcy4gVGhlIGNyaXRpY2FsIHJ1bnRpbWUgbG9naWMgaXMgd2l0aGluIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbigpYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBkZXRlY3RlZC4gVGhpcyBtYWtlcyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW1zLgoKVGhlcmVmb3JlLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG15IGZvY3VzIHN5bWJvbC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLgoKSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBjYWxsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYCBhbmQgYGh3cG9pc29uX2Jvb3RfcGZuYCB3aGljaCBpcyBgX19pbml0YCwgbWFraW5nIG15IGZvY3VzIHN5bWJvbCBjb3JyZWN0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBlbnN1cmluZyB0aGF0IGEgc3Vic2VxdWVudCBrZXJuZWwgYm9vdCAoZS5nLiwgdmlhIGtleGVjKSBhdm9pZHMgdXNpbmcga25vd24tYmFkIFJBTS4gVGhlIGNvcmUgcnVudGltZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGludm9rZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIGlzIGhhbmRsZWQgKGUuZy4sIHRyaWdnZXJlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwpAQCAtMjYzLDYgJiM0MzsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVAogCSAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVybgogCSAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuCiAKJiM0Mztjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwogY29uZmlnIE9WTUZfREVCVUdfTE9HCiAJYm9vbCAmIzM0O0V4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnMmIzM0OwogCWRlcGVuZHMgb24gRUZJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKQkJJiM0Mzs9IGVhcmx5Y29uLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKQkJJiM0Mzs9IGNwZXItYXJtLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KQkJJiM0Mzs9IGNwZXIteDg2Lm8KIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSkJCSYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vCiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpCSYjNDM7PSBwb2lzb24ubwogb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSkJCSYjNDM7PSBzdG1tL3RlZV9zdG1tX2VmaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCmluZGV4IDAzMjdhMzlkMzFmYTUuLjExMWU2MDQ3OTIxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCS51bmFjY2VwdGVkCQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJLnBvaXNvbmVkX21lbW9yeQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiYjNDM7I2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChlZmkpOwogCkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJe0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELAkmYW1wO2VmaS51bmFjY2VwdGVkLAkmIzM0O1VuYWNjZXB0ZWQmIzM0Owl9LAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CXtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwJJiMzNDtQT0lTT04mIzM0Owl9LAomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCCiAJe0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCwJJmFtcDtwcmltYXJ5X2Rpc3BsYXlfdGFibGUJCQl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwppbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKQEAgLTc3NCwzICYjNDM7Nzc0LDEwOSBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsCiAJCQllZmlfd2FybigmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxuJiMzNDspOwogCX0KIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqLwomIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQljYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovCiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCByYW1fdG9wKQomIzQzO3sKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSksCiYjNDM7CQkJCSBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wKTsKJiM0MzsKJiM0MzsJcG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9CiAKIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNzk4NDMyNzc0NTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMjM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlcgomIzQzOyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7ZWZpOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgewomIzQzOwl1NjQgdGFibGU7CQkvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovCiYjNDM7CXU2NCB1bml0X3NpemU7CiYjNDM7CXU2NCBiaXRtYXBfc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IF9faW5pdAomIzQzO2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHM6IHRoZSBiaXRtYXAgaXMgcmVhY2hlZCBhbiB1bnNpZ25lZCBsb25nIGF0IGEgdGltZS4gKi8KJiM0MzsJcmV0dXJuIG1pbihyb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwgcG0tJmd0O3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmICghcG0tJmd0O3NpemUgfHwgIUlTX0FMSUdORUQocG0tJmd0O3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwbS0mZ3Q7dW5pdF9zaXplICZndDs9IFBBR0VfU0laRSAmYW1wOyZhbXA7IGlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5iaXRzLCBzcGFuOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLSZndDtzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsICZhbXA7bmJpdHMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmIChwbS0mZ3Q7dmVyc2lvbiAhPSAxKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxuJiMzNDssCiYjNDM7CQkJcG0tJmd0O3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkgfHwgIWVmaV9wb2lzb25fcmFuZ2VfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSwKJiM0MzsJCQkgICAgICBNRU1SRU1BUF9XQik7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJdTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSBlZmlfcG9pc29uX25iaXRzKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuCiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KHU2NCBwcG0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7CiYjNDM7CWlmICh2YWxpZCkgewomIzQzOwkJZy0mZ3Q7dGFibGUgPSBwcG07CiYjNDM7CQlnLSZndDt1bml0X3NpemUgPSBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwkJZy0mZ3Q7Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdAomIzQzO2VmaV9wb2lzb25fb2ZmbGluZV91bml0KGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLCB1NjQgdW5pdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gUEhZU19QRk4odW5pdCAqIGctJmd0O3VuaXRfc2l6ZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZy0mZ3Q7dW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGh3cG9pc29uX2Jvb3RfcGZuKHBmbiAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrX2NodW5rKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkJIHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKQomIzQzO3sKJiM0MzsJdTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGctJmd0O2JpdG1hcF9zaXplIC0gb2ZmKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXAsIG5yX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJbWFwID0gZWFybHlfbWVtcmVtYXAoZy0mZ3Q7dGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CWlmICghbWFwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTsKJiM0MzsJCSgqbnJfdW5pdHMpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpucl91bml0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwl1NjQgb2ZmOwomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGctJmd0O2JpdG1hcF9zaXplOyBvZmYgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJbG9uZyBuciA9IGVmaV9wb2lzb25fd2Fsa19jaHVuayhnLCBvZmYsIG5yX3VuaXRzKTsKJiM0MzsKJiM0MzsJCWlmIChuciAmbHQ7IDApIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDsKJiM0MzsJbG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksICZhbXA7ZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKCZhbXA7ZywgJmFtcDtucl91bml0cyk7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcykKJiM0MzsJCXByX2luZm8oJiMzNDtwb2lzb25lZCAlbGQgcGFnZShzKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXG4mIzM0OywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwlleHBlY3RlZCA9IG5yX3VuaXRzICogKGcudW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0OyBleHBlY3RlZCkKJiM0MzsJCXByX3dhcm4oJiMzNDslbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcbiYjMzQ7LAomIzQzOwkJCWV4cGVjdGVkIC0gbnJfcGFnZXMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGNjYmMzNTQ3OTY4NGEuLmRhMGQzY2E5MTE1Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wc3RvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlYm9vdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3V1aWQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpOwogI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlECQlFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpCiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlECQlFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpCiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSkKJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRAlFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpCiAKICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRAkJRUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKQogCkBAIC02NTAsNiAmIzQzOzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHsKIAl1bnNpZ25lZCBsb25nCQkJbW9rdmFyX3RhYmxlOwkJLyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcJCQljb2NvX3NlY3JldDsJCS8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCXVuYWNjZXB0ZWQ7CQkvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqLwomIzQzOwl1bnNpZ25lZCBsb25nCQkJcG9pc29uZWRfbWVtb3J5OwkvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi8KIAogCWVmaV9nZXRfdGltZV90CQkJKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90CQkJKnNldF90aW1lOwpAQCAtMTI2OSw2ICYjNDM7MTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcCiAJLyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpCiAKJiM0MzsvKiBCaXQgTiBjb3ZlcnMgdW5pdCBOIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIGNvdW50aW5nIGZyb20gYWRkcmVzcyAwLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpOwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjg4NWFkNjA5M2Q0MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTQsMTEgJiM0Mzs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7CiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpOwomIzQzO2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pCiB7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7Ym9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7CiYjNDM7CQlpZiAoIXRha2VfcGFnZV9vZmZfYnVkZHkocGFnZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcGFnZV9yZWZfaW5jKHBhZ2UpOwomIzQzOwl9IGVsc2UgaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpIHsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7CiYjNDM7CWF0b21pY19sb25nX2luYygmYW1wO251bV9wb2lzb25lZF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqLwomIzQzO3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KQEAgLTEyODYsNiAmIzQzOzEzMTcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpCiAJa2hvX21lbW9yeV9pbml0KCk7CiAKIAltZW1ibG9ja19mcmVlX2FsbCgpOwomIzQzOwlod3BvaXNvbl9pbml0X2Jvb3QoKTsKIAltZW1faW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ3CgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDEyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEVGSSBQb2lzb25lZCBNZW1vcnkgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmb2N1cyBpcyBvbiBLTVNBTiYjMzk7cyBwcmltYXJ5IGNvbmNlcm5zOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoYWNyb3NzIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mb3JtYXRpb24gbGVha3MuCgpGaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCBhc3NvY2lhdGVkIGZpbGVzLCBwcmltYXJpbHkgY2VudGVyZWQgYXJvdW5kIGEgbWVtb3J5IHBvaXNvbmluZyBtZWNoYW5pc20gd2l0aGluIHRoZSBFRkkgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBOb3RhYmx5LCBpbiBgZWZpX3BvaXNvbl9hbGxvY2AsIHRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBgZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgLi4uKWAgYW5kICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCB3aXRoIGBwbS0mZ3Q7dmVyc2lvbiA9IDE7YCwgYHBtLSZndDt1bml0X3NpemUgPSAuLi47YCwgYHBtLSZndDtzaXplID0gLi4uO2AsIGFuZCBjcnVjaWFsbHksIGBtZW1zZXQocG0tJmd0O2JpdG1hcCwgMCwgYml0bWFwX3NpemUpO2AuIFRoaXMgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGNhcmVmdWwgaW5pdGlhbGl6YXRpb24uIFNvLCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBmdWxseSB0YWtlbiBjYXJlIG9mLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGNhbGxzIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGZvciBleGFtcGxlLCBgZWZpX3BvaXNvbl9pbml0YCwgYGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYC4gVGhlc2UgZnVuY3Rpb25zIG1hcCwgcmVhZCwgYW5kIHByb2Nlc3MgdGhpcyBtZW1vcnkgYnV0IGFsbCBvZiB0aGVtIGFyZSB1dGlsaXppbmcgZnVuY3Rpb25zIHRoYXQgcHJvcGVybHkgaW5pdGlhbGl6ZSByZWxldmFudCB2YXJpYWJsZXMuCgpJdCBsb29rcyBsaWtlIHRoZSBkYXRhIGlzIHByaW1hcmlseSB1c2VkIHdpdGhpbiB0aGUgRUZJIGNvbnRleHQgYW5kIGR1cmluZyBlYXJseSBib290LCBpbnRlcmFjdGluZyB3aXRoIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy4gVGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bCBjYWxscykgYW5kIG5vIG9idmlvdXMgZGF0YSB0cmFuc2Zlci4gVGhpcyBtaW5pbWl6ZXMgdGhlIHJpc2sgb2YgaW5mby1sZWFrcy4KCk5vdywgSSYjMzk7bSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIG1pc3NlZCBpbml0aWFsaXphdGlvbiBzY2VuYXJpb3MuIEkmIzM5O20gY2hlY2tpbmcga2V5IHZhcmlhYmxlcy4gYGVmaV9nZXRfcmFtX3RvcGAgaW5pdGlhbGl6ZXMgYHJhbV90b3BgLiBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKWAmIzM5O3MgYHJhbV90b3BgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBJbiBgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5YCwgaWYgdGhlIGB2YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgZ2AgaXMgaW5pdGlhbGl6ZWQuIEluIGBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkoKWAsIGBnYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgaW50byBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgd2hpY2ggaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gVGhlcmUgYXJlIG5vIHJlYWRpbHkgYXBwYXJlbnQgaXNzdWVzLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSBhbSBub3Qgc2VlaW5nIGFueSBkaXJlY3Qgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlci1zcGFjZS4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIHNlZW0gdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseS4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gZm9jdXMgb24gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy4gUG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3JlIGxpa2VseSBpbnZvbHZlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgb3RoZXIgY29tbW9uIGJ1ZyBkZXRlY3RvcnMuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IE5lZWRzS01TQU4gPSBmYWxzZS4gSSBkb24mIzM5O3QgYmVsaWV2ZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBqdXN0aWZpZWQgZm9yIHRoaXMgcGF0Y2ggc2VyaWVzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBlZmlfcG9pc29uX2FsbG9jYCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAgZm9yIGFueSBsYXN0IG1pbnV0ZSBpbmNvbnNpc3RlbmNpZXMuIEFoLCBgZWZpX3BvaXNvbl9hbGxvY2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBgZWZpX2dldF9yYW1fdG9wYCB1dGlsaXplcyBgX19mcmVlYCBjbGVhbnVwIGF0dHJpYnV0ZSB3aGljaCBpbmRpY2F0ZXMgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQuIE5vIEtNU0FOIG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjA2Ljg5ODk0Njc5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzI4MjE5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDE6MDYuODk4OTUzMjQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1Mjg5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNiOTRlNzM4OGQwMDFmZWM3OGYzZDk3MWI1YTlmMjQ5YTg4NWI5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXFxuIFxcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxcbiBcXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxcbiBcXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0ZGVmX2Jvb2wgeVxcbitcXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFxcdTAwMjZcXHUwMDI2IE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuK1xcdGhlbHBcXG4rXFx0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xcbitcXHQgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZVxcbitcXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxcbitcXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXFxuIFxcdGJvb2wgXFxcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcXFwiXFxuIFxcdGRlcGVuZHMgb24gRUZJXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVxcdFxcdCs9IGVhcmx5Y29uLm9cXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXFx0XFx0Kz0gY3Blci1hcm0ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcXHRcXHQrPSBjcGVyLXg4Ni5vXFxuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcXHRcXHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXFxuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVxcdCs9IHBvaXNvbi5vXFxuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXFx0XFx0Kz0gc3RtbS90ZWVfc3RtbV9lZmkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHQudW5hY2NlcHRlZFxcdFxcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHQucG9pc29uZWRfbWVtb3J5XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbisjZW5kaWZcXG4gfTtcXG4gRVhQT1JUX1NZTUJPTChlZmkpO1xcbiBcXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFxcdFxcdTAwMjZlZmkudW5hY2NlcHRlZCxcXHRcXFwiVW5hY2NlcHRlZFxcXCJcXHR9LFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXFx0XFxcIlBPSVNPTlxcXCJcXHR9LFxcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXFxuIFxcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVxcdFxcdFxcdH0sXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xcbmluZGV4IGYyN2YyZTFmMDAxOTkuLmI4YjgwODQ2MjM5ZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5AQCAtNzc0LDMgKzc3NCwxMDkgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxcbiBcXHRcXHRcXHRlZmlfd2FybihcXFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiB9XFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cXG4rc3RhdGljIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXFxuK3tcXG4rXFx0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1NjQgcmFtX3RvcCA9IDA7XFxuK1xcdGludCBpLCBucl9kZXNjO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFxcdTAwMjZtYXAsIGZhbHNlKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuK1xcdG5yX2Rlc2MgPSBtYXAtXFx1MDAzZW1hcF9zaXplIC8gbWFwLVxcdTAwM2VkZXNjX3NpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXNjOyBpKyspIHtcXG4rXFx0XFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XFxuK1xcbitcXHRcXHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cXHUwMDNlbWFwLCBtYXAtXFx1MDAzZWRlc2Nfc2l6ZSwgaSk7XFxuK1xcdFxcdHN3aXRjaCAoZC1cXHUwMDNldHlwZSkge1xcbitcXHRcXHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XFxuK1xcdFxcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxcbitcXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbitcXHRcXHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcXG4rXFx0XFx0Y2FzZSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWTpcXG4rXFx0XFx0Y2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6XFxuK1xcdFxcdFxcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZC1cXHUwMDNlcGh5c19hZGRyICsgZC1cXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmICghcmFtX3RvcClcXG4rXFx0XFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XFxuK1xcbitcXHQqdG9wID0gcmFtX3RvcDtcXG4rXFx0cmV0dXJuIEVGSV9TVUNDRVNTO1xcbit9XFxuK1xcbisvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovXFxuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcXG4re1xcbitcXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcXG4rXFx0XFx0XFx0XFx0IEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbit9XFxuK1xcbisvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksXFxuK1xcdFxcdFxcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXFx1MDAyNnBtKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwbS1cXHUwMDNldmVyc2lvbiA9IDE7XFxuK1xcdHBtLVxcdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcXG4rXFx0cG0tXFx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcXG4rXFx0bWVtc2V0KHBtLVxcdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBwbTtcXG4rfVxcbitcXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbit7XFxuK1xcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXG4rXFx0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xcbitcXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcXG4rXFx0aWYgKHBtKSB7XFxuK1xcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKVxcbitcXHRcXHRcXHRlZmlfZXJyKFxcXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZWZpX2dldF9yYW1fdG9wKFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xcbitcXG4rXFx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcXG4rXFx0aWYgKCFwbSkge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuK1xcdFxcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rfVxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXFxuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFx0XFx0XFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xcbiBcXG4gXFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XFxuK1xcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuIFxcbiBcXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbkBAIC0xMTY5LDYgKzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cXG4gXFxuIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cXG4rI2VuZGlmXFxuK1xcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XFxuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuQEAgLTEwMjMsNiArMTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXG4gXFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcXG4gXFxuK1xcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuK1xcbiBcXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XFxuIFxcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4gXFx0XFx0ZWZpX2VycihcXFwiZXhpdF9ib290KCkgZmFpbGVkIVxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2ZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcXG5AQCAtMCwwICsxLDIzNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcXG4rICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImVmaTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2cyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlubWF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IHtcXG4rXFx0dTY0IHRhYmxlO1xcdFxcdC8qIHBoeXMgYWRkcmVzcyBvZiB0aGUgdGFibGUgKi9cXG4rXFx0dTY0IHVuaXRfc2l6ZTtcXG4rXFx0dTY0IGJpdG1hcF9zaXplO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuK3N0YXRpYyB1NjQgX19pbml0XFxuK2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChQRk5fUEhZUyhtYXhfcGZuKSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuK1xcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSk7XFxuK1xcbitcXHQvKiBXaG9sZSB3b3JkczogdGhlIGJpdG1hcCBpcyByZWFjaGVkIGFuIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lLiAqL1xcbitcXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cXHUwMDNlc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAoIXBtLVxcdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVxcdTAwM2VzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNlPSBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBuYml0cywgc3BhbjtcXG4rXFxuK1xcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXFx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXFx1MDAyNm5iaXRzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXFx1MDAzZXVuaXRfc2l6ZSwgXFx1MDAyNnNwYW4pO1xcbit9XFxuK1xcbisvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIklnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBtLVxcdTAwM2V2ZXJzaW9uKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHR1NjQgc2l6ZTtcXG4rXFxuK1xcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdG1lbXVubWFwKHBtKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xcbitcXHRtZW11bm1hcChwbSk7XFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgKyBzaXplLFxcbitcXHRcXHRcXHQgICAgICBNRU1SRU1BUF9XQik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcXG4rXFxuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHR1NjQgdW5pdCA9IFBGTl9QSFlTKHBmbikgLyBlZmlfcG9pc29uLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcbitcXHRpZiAodW5pdCBcXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiB1bml0O1xcbit9XFxuK1xcbisvKlxcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXFxuKyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxcbisgKi9cXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRsb25nIHVuaXQ7XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcXG4rXFx0aWYgKHVuaXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXFx1MDAzZWJpdG1hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnkodTY0IHBwbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rXFxuK1xcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XFxuK1xcdGlmICghcG0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7XFxuK1xcdGlmICh2YWxpZCkge1xcbitcXHRcXHRnLVxcdTAwM2V0YWJsZSA9IHBwbTtcXG4rXFx0XFx0Zy1cXHUwMDNldW5pdF9zaXplID0gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4rXFx0XFx0Zy1cXHUwMDNlYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cXG4rXFx0XFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuK1xcdH1cXG4rXFxuK1xcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XFxuK1xcbitcXHRyZXR1cm4gdmFsaWQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdFxcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cXHUwMDNldW5pdF9zaXplKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZy1cXHUwMDNldW5pdF9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7IGkrKylcXG4rXFx0XFx0bnJfcGFnZXMgKz0gaHdwb2lzb25fYm9vdF9wZm4ocGZuICsgaSk7XFxuK1xcbitcXHRyZXR1cm4gbnJfcGFnZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIF9faW5pdCBlZmlfcG9pc29uX3dhbGtfY2h1bmsoY29uc3Qgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcsXFxuK1xcdFxcdFxcdFxcdFxcdCB1NjQgb2ZmLCB1bnNpZ25lZCBsb25nICpucl91bml0cylcXG4re1xcbitcXHR1NjQgY2h1bmsgPSBtaW5fdCh1NjQsIFBBR0VfU0laRSwgZy1cXHUwMDNlYml0bWFwX3NpemUgLSBvZmYpO1xcbitcXHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xcbitcXG4rXFx0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cXHUwMDNldGFibGUgKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJpdG1hcCkgKyBvZmYsIGNodW5rKTtcXG4rXFx0aWYgKCFtYXApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XFxuK1xcdFxcdG5yX3BhZ2VzICs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgKyBiaXQpO1xcbitcXHRcXHQoKm5yX3VuaXRzKSsrO1xcbitcXHR9XFxuK1xcbitcXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcXG4rXFxuK1xcdHJldHVybiBucl9wYWdlcztcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnJfdW5pdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDA7XFxuK1xcdHU2NCBvZmY7XFxuK1xcbitcXHRmb3IgKG9mZiA9IDA7IG9mZiBcXHUwMDNjIGctXFx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XFxuK1xcbitcXHRcXHRpZiAobnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IGJpdG1hcFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRucl9wYWdlcyArPSBucjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yX3BhZ2VzO1xcbit9XFxuK1xcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDtcXG4rXFx0bG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7XFxuK1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeShlZmkucG9pc29uZWRfbWVtb3J5LCBcXHUwMDI2ZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKFxcdTAwMjZnLCBcXHUwMDI2bnJfdW5pdHMpO1xcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobnJfcGFnZXMpXFxuK1xcdFxcdHByX2luZm8oXFxcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXFxcblxcXCIsIG5yX3BhZ2VzKTtcXG4rXFxuK1xcdGV4cGVjdGVkID0gbnJfdW5pdHMgKiAoZy51bml0X3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNjIGV4cGVjdGVkKVxcbitcXHRcXHRwcl93YXJuKFxcXCIlbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGV4cGVjdGVkIC0gbnJfcGFnZXMpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uZGEwZDNjYTkxMTVjZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbkBAIC0yMyw2ICsyMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc3RvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWJvb3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpemVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91dWlkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcXHRcXHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXFxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcXHRcXHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXFxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXFxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhhZjgyOGExNSwgMHgwZWY0LCAweDQzOWEsICAweGI4LCAweDZhLCAweGQ2LCAweGQ2LCAweDllLCAweGFmLCAweGJhLCAweGZhKVxcbiBcXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXFx0XFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxcbiBcXG5AQCAtNjUwLDYgKzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdG1va3Zhcl90YWJsZTtcXHRcXHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRjb2NvX3NlY3JldDtcXHRcXHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0dW5hY2NlcHRlZDtcXHRcXHQvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqL1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0cG9pc29uZWRfbWVtb3J5O1xcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xcbiBcXG4gXFx0ZWZpX2dldF90aW1lX3RcXHRcXHRcXHQqZ2V0X3RpbWU7XFxuIFxcdGVmaV9zZXRfdGltZV90XFx0XFx0XFx0KnNldF90aW1lO1xcbkBAIC0xMjY5LDYgKzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcXG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxcXFxuIFxcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxcbiBcXG4rLyogQml0IE4gY292ZXJzIHVuaXQgTiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBjb3VudGluZyBmcm9tIGFkZHJlc3MgMC4gKi9cXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xcbitcXHR1MzJcXHRcXHR2ZXJzaW9uO1xcbitcXHR1MzJcXHRcXHR1bml0X3NpemU7XFx0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xcbitcXHR1NjRcXHRcXHRzaXplO1xcdFxcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRiaXRtYXBbXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcXHRTWl8yTVxcbitcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKTtcXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGE4YjAzZTI5MjBiYTguLmQ1ZDY1ZjBjM2UwNGMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtNDMsNiArNDMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3NtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ybWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG5AQCAtOTYsNiArOTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIFxcdFxcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9yZXN1bHQgcmVzdWx0KTtcXG4rXFxuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuK1xcbitcXHRpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7XFxuK1xcdFxcdGlmICghdGFrZV9wYWdlX29mZl9idWRkeShwYWdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRwYWdlX3JlZl9pbmMocGFnZSk7XFxuK1xcdH0gZWxzZSBpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSkge1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgTUZfUkVDT1ZFUkVEKTtcXG4rXFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qIFRoZSBFRkkgdGFibGUgaXMgdGhlIG9ubHkgc291cmNlIG9mIGluaGVyaXRlZCBwb2lzb24gdG9kYXkuICovXFxuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxcbit7XFxuK1xcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xcbit9XFxuK1xcbiAvKipcXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxcbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG4gXFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xcbiBcXHRcXHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XFxuIFxcdFxcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XFxuK1xcdFxcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cXG4rXFx0XFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cHJfZXJyKFxcXCIlI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggZTljNDIwNGI3M2FkYi4uMTY3ODhhZWM3NTRjZCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMjcyMiw2ICsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuIFxcdGtob19tZW1vcnlfaW5pdCgpO1xcbiBcXG4gXFx0bWVtYmxvY2tfZnJlZV9hbGwoKTtcXG4rXFx0aHdwb2lzb25faW5pdF9ib290KCk7XFxuIFxcdG1lbV9pbml0KCk7XFxuIFxcdGttZW1fY2FjaGVfaW5pdCgpO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMTowOC41MzUyMDY5NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTYyMTc5NjczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byByZWNvcmQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGVuc3VyaW5nIHRoYXQgYSBzdWJzZXF1ZW50IGtlcm5lbCBib290IChlLmcuLCB2aWEga2V4ZWMpIGF2b2lkcyB1c2luZyBrbm93bi1iYWQgUkFNLiBUaGUgY29yZSBydW50aW1lIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbigpYCwgd2hpY2ggaXMgaW52b2tlZCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgaGFuZGxlZCAoZS5nLiwgdHJpZ2dlcmVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBhbmQgRUZJIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cbitzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9QRVJTSVNURU5UX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4rXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcbitcdGlmIChwbSkge1xuK1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuK1x0XHRcdGVmaV9lcnIoXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZWZpX2dldF9yYW1fdG9wKFx1MDAyNnJhbV90b3ApICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi40NDQzNjg2OWM0ZWZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTE2OSw2ICsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICsxMDIzLDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcImV4aXRfYm9vdCgpIGZhaWxlZCFcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICsxLDIzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4rXG4rc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkge1xuK1x0dTY0IHRhYmxlO1x0XHQvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovXG4rXHR1NjQgdW5pdF9zaXplO1xuK1x0dTY0IGJpdG1hcF9zaXplO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fbmJpdHMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyB1NjQgX19pbml0XG4rZWZpX3BvaXNvbl91c2FibGVfc2l6ZShjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK1x0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdC8qIFdob2xlIHdvcmRzOiB0aGUgYml0bWFwIGlzIHJlYWNoZWQgYW4gdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUuICovXG4rXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cdTAwM2VzaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNlPSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXHUwMDNldW5pdF9zaXplLCBcdTAwMjZzcGFuKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0bWVtdW5tYXAocG0pO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghZWZpX3BvaXNvbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZWZpX3BvaXNvbl9uYml0cyA9IHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7XG4rXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHU2NCB1bml0ID0gUEZOX1BIWVMocGZuKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1xuK1x0aWYgKHVuaXQgXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dmFsaWQgPSBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKTtcbitcdGlmICh2YWxpZCkge1xuK1x0XHRnLVx1MDAzZXRhYmxlID0gcHBtO1xuK1x0XHRnLVx1MDAzZXVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0cmV0dXJuIHZhbGlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cdTAwM2V1bml0X3NpemUpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDsgaSsrKVxuK1x0XHRucl9wYWdlcyArPSBod3BvaXNvbl9ib290X3BmbihwZm4gKyBpKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdFx0IHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xuK1xuK1x0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cdTAwM2V0YWJsZSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRpZiAoIW1hcClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0bnJfcGFnZXMgKz0gZWZpX3BvaXNvbl9vZmZsaW5lX3VuaXQoZywgb2ZmICogQklUU19QRVJfQllURSArIGJpdCk7XG4rXHRcdCgqbnJfdW5pdHMpKys7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0dTY0IG9mZjtcbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBnLVx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4rXG4rXHRcdGlmIChuciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdG5yX3BhZ2VzICs9IG5yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xuK1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4rXHRsb25nIG5yX3BhZ2VzLCBleHBlY3RlZDtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucl9wYWdlcylcbitcdFx0cHJfaW5mbyhcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cIiwgbnJfcGFnZXMpO1xuK1xuK1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIGV4cGVjdGVkKVxuK1x0XHRwcl93YXJuKFwiJWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCIsXG4rXHRcdFx0ZXhwZWN0ZWQgLSBucl9wYWdlcyk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiArMTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB1bml0IE4gb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgY291bnRpbmcgZnJvbSBhZGRyZXNzIDAuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uZDVkNjVmMGMzZTA0YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTk2LDYgKzk3LDM2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcbitcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbitcdFx0aWYgKCF0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHBhZ2UpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuK1x0fSBlbHNlIGlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbitcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGU5YzQyMDRiNzNhZGIuLjE2Nzg4YWVjNzU0Y2QgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI3MjIsNiArMjcyMiw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIFx0a2hvX21lbW9yeV9pbml0KCk7XG4gXG4gXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xuK1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDE6MDguNTM1MjA5MDE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NTA5MDE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRUZJIFBvaXNvbmVkIE1lbW9yeTogRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgLiBJdCdzIGVzc2VudGlhbGx5IGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0byB0cmFjayBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgYW5kIHRoZW4gaG9ub3JzIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBuZXh0IGtlcm5lbCBib290LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IHdpdGggc3l6a2FsbGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBzeXprYWxsZXI/IE1lbW9yeSBmYWlsdXJlcyBjYW4gYmUgaW5qZWN0ZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciwgSSB0aGluaywgdGhyb3VnaCBzeXNmcy4gVGhlIGNvZGUgcGF0aCBsb29rcyBsaWtlIHRoaXM6IGBtYWR2aXNlYCAtXHUwMDNlIGBtZW1vcnlfZmFpbHVyZWAgLVx1MDAzZSBgYWN0aW9uX3Jlc3VsdGAgLVx1MDAzZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLiBUaGF0IGxhc3QgZnVuY3Rpb24gaXMgdGhlIGtleSBvbmU6IGl0IHNldHMgYSBiaXQgaW4gdGhlIEVGSSBwb2lzb25lZCBtZW1vcnkgdGFibGUuIFRoaXMgdGFibGUgaXMgYWxsb2NhdGVkIGJ5IHRoZSBFRkkgc3R1YiBhbmQgcGFzc2VkIHRvIHRoZSBrZXJuZWwsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyB0aGUgcXVlc3Rpb246IERvZXMgUUVNVSwgYXMgdXNlZCBieSBzeXprYWxsZXIsIHN1cHBvcnQgdGhpcyBFRkkgc3R1Yj9cblxuWWVzLCBpZiB0aGUgYm9vdCB1c2VzIE9WTUYsIGl0IGRvZXMuIEhvd2V2ZXIsIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICp1c2UqIHRoZSBFRkkgc3R1YiBieSBkZWZhdWx0PyBUeXBpY2FsbHksIGl0IGJvb3RzIHdpdGggYnpJbWFnZSwgd2hpY2ggbWlnaHQgYnlwYXNzIHRoZSBFRkkgc3R1YiwgdW5sZXNzIHdlIGNvbmZpZ3VyZSBpdCBhIHNwZWNpZmljIHdheS4gRXZlbiBpZiBzeXprYWxsZXIgZG9lc24ndCB1c2UgdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQsIHdlIHNob3VsZCBzdGlsbCBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbHNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgZHVyaW5nICpydW50aW1lKiB3aGljaCBpcyBnb29kLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBzaW1wbGU6IGl0IGNoZWNrcyBpZiBgZWZpX3BvaXNvbmAgaXMgaW5pdGlhbGl6ZWQsIGNhbGN1bGF0ZXMgYSB1bml0LCBhbmQgdGhlbiBzZXRzIGEgYml0IGluIGEgYml0bWFwLiBUaGUgYGVmaV9wb2lzb25gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBlYXJseSwgZHVyaW5nIGJvb3QgaW4gYGVmaV9wb2lzb25faW5pdCgpYC4gVGhpcyBtZWFucyB0aGF0IGlmIGFuIEVGSSB0YWJsZSBpcyBwcmVzZW50LCB0aGUgcG9pbnRlciBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgc2V0LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLiBUaGUgRUZJIHRhYmxlIGlzIGluc3RhbGxlZCBieSB0aGUgRUZJIHN0dWIgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlIGJ5IGZ1bmN0aW9ucyBsaWtlIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGVmaV9zdHViX2NvbW1vbigpYCBhbmQgYGVmaV9zdHViX2VudHJ5KClgLlxuXG5NeSBjb25jZXJuIGlzIHRoYXQgc3l6a2FsbGVyICpieSBkZWZhdWx0KiBkb2VzIG5vdCB1c2UgRUZJLCBzbyB0aGUgYm9vdC10aW1lIHBhcnNpbmcgaXNuJ3QgZGlyZWN0bHkgZnV6emFibGUuIEl0J3MgYm9vdC10aW1lLCBpbiB0aGUgYGVhcmx5X2luaXRjYWxsYCBwaGFzZS4gSXQgd29uJ3QgZ2V0IGZ1enplZCBub3JtYWxseSwgYW5kIGRpcmVjdCBFRkkgdGFibGUgbWFuaXB1bGF0aW9uIGlzIG5vdCBhIHN5emthbGxlciBjb3JlIGNvbXBldGVuY3kuIEJ1dCwgZXZlbiBpZiBzeXprYWxsZXIgZG9lcyBub3QgZnV6eiB0aGUgRUZJIHBhcnQsIHRoZSBydW50aW1lIHBhdGggaXMuXG5cblRoZSBib290LXRpbWUgY29kZSBwYXJzZXMgdGhlIEVGSSB0YWJsZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJ3QgZm9jdXMgb24gdGhhdCBwYXJ0IHVubGVzcyBpdCdzIHRyaWdnZXJlZCBieSBzeXNjYWxscy4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIG9jY3VycyAqYXQgcnVudGltZSouIFRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgbWluaW1hbCwgaXQganVzdCBzZXRzIGEgYml0LiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGUgYm9vdCB0aW1lIGNvZGUgdGhhdCBkZWFscyB3aXRoIHJlYWRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdmlhIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLiBIb3dldmVyLCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCBkbyBrZXhlYyBhbmQgZG9lc24ndCBkaXJlY3RseSBjb250cm9sIHRoZSBFRkkgYXQgYm9vdCwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBydW50aW1lIHNpZGUgY2FuIGJlIGEgZm9jdXMuXG5cbkNoZWNraW5nIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBgaHdwb2lzb25fYm9vdF9wZm5gIGFuZCBgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5YCBhcmUgY2FsbGVkIGR1cmluZyBib290LCBhbmQgYGVmaV9wb2lzb25faW5pdGAgaXMgYW4gYGVhcmx5X2luaXRjYWxsYCwgc28gdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgaXMgdmVyeSBsb3cuIFRoZSBtYWluIHJ1bnRpbWUgaW50ZXJhY3Rpb24gaXMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgYW5kIG1heSBiZSB3b3J0aCBmdXp6aW5nLCBldmVuIGlmIHdlIGFyZSBub3QgdGVzdGluZyB0aGUgYm9vdCBwcm9jZXNzLlxuXG5TaW5jZSBzeXprYWxsZXIgY2FuIHRyaWdnZXIgYE1BRFZfSFdQT0lTT05gLCB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkxldCBtZSB1c2UgdG9vbHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjM4Ljk4NjExNTAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4ODM4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jPTEwNz1zdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMTktICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM6MTIwOnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4Nj12b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODc6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XFxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjg5PXN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjkwOnN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XFxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjkxLSNlbmRpZlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzEyPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjAtXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMTpcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjQyLjIyNDk1NzI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzM3NTg5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBjb2RlIGl0c2VsZiBpcyBzaW1wbGUuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgKndvcnRoKiBmdXp6aW5nLiBUaGUgbG9naWMgaXQgY29udGFpbnMgaXMgc3RyYWlnaHRmb3J3YXJkOiBhIGNoZWNrIGZvciBhIGdsb2JhbCBgZWZpX3BvaXNvbmAgZmxhZywgYSBjYWxsIHRvIGBlZmlfcG9pc29uX3VuaXRgIHRvIGRldGVybWluZSBhIGJpdG1hcCB1bml0LCBhbmQgdGhlbiBzZXR0aW5nIGEgYml0IGluIHRoZSBiaXRtYXAuIFRoZXJlIGlzbid0IGFueSBjb21wbGV4IGxvZ2ljICp3aXRoaW4qIHRoZSBmdW5jdGlvbiBpdHNlbGYuXG5cblRoZSBjb21wbGljYXRlZCBwYXJ0cyBzZWVtIHRvIGJlIGR1cmluZyBib290LCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBIb3dldmVyLCB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCBzeXprYWxsZXIgZG9lc24ndCBmb2N1cyBvbiBgX19pbml0YCBjb2RlIHNpbmNlIGl0IG9jY3VycyBiZWZvcmUgdXNlci1zcGFjZSB0YWtlcyBvdmVyLiBUaGUgc3lzdGVtIGJvb3RzIGFuZCB0aGVzZSBwYXJ0cyBleGVjdXRlIG9uY2UgZHVyaW5nIGJvb3QuIFFFTVUgYW5kIE9WTUYgYnkgZGVmYXVsdCB3b3VsZG4ndCBwcm92aWRlIGEgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZSBFRkkgc3R1YiAqaW5zdGFsbHMqIHRoZSB0YWJsZS5cblxuVGhpcyBpcyBhIGtleSBwb2ludDogdGhlIEVGSSBzdHViIGNhbGxzIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAuIFNvIHRoZSB0YWJsZSAqaXMqIGNyZWF0ZWQgYW5kIGluc3RhbGxlZCBieSB0aGUgRUZJIHN0dWIsIGJlZm9yZSB0aGUga2VybmVsIGJvb3RzLiBUaGUga2VybmVsIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25faW5pdGAsIHdoaWNoIG1hcHMgdGhlIHRhYmxlIGludG8ga2VybmVsIHNwYWNlLCBhbmQgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGR1cmluZyBydW50aW1lIHdpbGwgY2FsbCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHRvIHNldCBiaXRzIGluIHRoZSBiaXRtYXAuXG5cblNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiB0aGUgcHJvbXB0IGNyaXRlcmlhLCBpdCAqaXMqLiBJdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGFkZHMgYSBuZXcgRUZJIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgaW4gUUVNVSBpZiBib290ZWQgd2l0aCBhbiBFRkkgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgZXhwbGljaXQ6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLi4uIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkdpdmVuIHRoYXQgaXQncyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBkZWZpbmUgYEVGSV9QT0lTT05FRF9NRU1PUllgIGFzIGEgY29uZmlndXJhdGlvbiB0byBlbmFibGUuIFRoZSBjb25maWcgZGVwZW5kcyBvbiBgRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFNpbmNlIGBFRklfUE9JU09ORURfTUVNT1JZYCBpcyBgZGVmX2Jvb2wgeWAsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHRoZSBvbmx5IG5vbi1pbml0IHJ1bnRpbWUgZnVuY3Rpb24sIGFuZCB3ZSBjYW4gZGVmaW5lIHRoYXQgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLiBJIHdpbGwgZGVmaW5lIHRoZXNlIGNvbmZpZ3M6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYEVGSV9TVFVCYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgd2lsbCBhZGQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjowMy45NjI1NDk3OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMzA0ODU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUZJX1NUVUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xNTkyPWNvbmZpZyBBVVRPX1pSRUxBRERSXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTE2MDItXFxuYXJjaC9hcm0vS2NvbmZpZzoxNjAzOmNvbmZpZyBFRklfU1RVQlxcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cXHRib29sXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcXG5hcmNoL2FybTY0L0tjb25maWctMjQ2Ni1cXG5hcmNoL2FybTY0L0tjb25maWc6MjQ2Nzpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cXHRib29sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwNS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwNy1cXHRib29sIFxcXCJFRkkgYm9vdCBzdHViIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1MC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6MTI1MTpjb25maWcgRUZJX1NUVUJcXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODk4LVxcbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcXG5hcmNoL3g4Ni9LY29uZmlnLTE5MDAtXFx0Ym9vbCBcXFwiRUZJIHN0dWIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MDUuNzk1NjAyMzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDg5MTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgTWVtb3J5IEZhaWx1cmUgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYEVGSV9TVFVCYCBmZWF0dXJlLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBib29sZWFuIHNldHRpbmcuIE5vdywgSSBzZWUgdGhlIHRlcm0gYE1FTU9SWV9GQUlMVVJFYCBoYXMgY29tZSB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEga2V5IHRlcm0sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBvcmlnaW4gYW5kIGNvbnRleHQuIEFoLCByaWdodCwgYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhcmUgdXN1YWxseSBsb2NhdGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIHRoZXJlIGFuZCB0cnkgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBNRU1PUllfRkFJTFVSRWAgYW5kIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgZmF1bHQgdG9sZXJhbmNlLCBidXQgYSBkaXJlY3QgY2hlY2sgd2lsbCBjb25maXJtIGFuZCBjbGFyaWZ5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzIHdpdGggYEVGSV9TVFVCYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjowOS42NTA0OTU4NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTQ3MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY0LVxcbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY2LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjExLjA4NTk3MjAyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDA1OTk5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFRkkgSGFyZHdhcmUgUG9pc29uZWQgTWVtb3J5IFJlY29yZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MuIEZpcnN0LCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGEgYm9vbC90cmlzdGF0ZSDigJMgSSdsbCBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBzeW1ib2xzOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHRoZSBvbmx5IHJ1bnRpbWUgZnVuY3Rpb24gYWRkZWQuIFllcywgaXQgbG9va3MgbGlrZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG9ubHkgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIGBhY3Rpb25fcmVzdWx0YCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCB3aGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBgbWVtb3J5X2ZhaWx1cmVgIGl0c2VsZi4gVGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIHRocm91Z2ggYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHN5c2ZzLCBtYWtpbmcgaXQgaW50ZXJlc3RpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW4gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoaXMgd291bGQgYWxsb3cgdGhlIG5leHQga2VybmVsIGJvb3QgKGFmdGVyIGEga2V4ZWMpIHRvIGF2b2lkIHVzaW5nIHRoZXNlIGJhZCBtZW1vcnkgcGFnZXMuIFRoZSBjcml0aWNhbCBydW50aW1lIGxvZ2ljIGlzIHdpdGhpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgZGV0ZWN0ZWQuIFRoaXMgbWFrZXMgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtcy5cblxuVGhlcmVmb3JlLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG15IGZvY3VzIHN5bWJvbC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLlxuXG5JJ3ZlIGFsc28gdmVyaWZpZWQgdGhhdCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gY2FsbCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKWAgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgd2hpY2ggaXMgYF9faW5pdGAsIG1ha2luZyBteSBmb2N1cyBzeW1ib2wgY29ycmVjdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU5LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjoyMC4wODY1NzQ3MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQyNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BPSVNPTkVEX01FTU9SWVwiLFxuICAgIFwiRUZJX1NUVUJcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBlbnN1cmluZyB0aGF0IGEgc3Vic2VxdWVudCBrZXJuZWwgYm9vdCAoZS5nLiwgdmlhIGtleGVjKSBhdm9pZHMgdXNpbmcga25vd24tYmFkIFJBTS4gVGhlIGNvcmUgcnVudGltZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGludm9rZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIGlzIGhhbmRsZWQgKGUuZy4sIHRyaWdnZXJlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MjAuMTU3MDA2ODU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3MDEzNDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjIwLjE1NzUwMTIxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTQ2OTYzNjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciByZWNvcmRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc28gdGhhdCB0aGV5IGNhbiBiZSBob25vcmVkIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBUaGUgbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIChgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGluY2x1ZGluZyBhIGBtZW1zZXRgIG9mIHRoZSB0cmFpbGluZyBiaXRtYXAuIEFsbCBzdGFjayB2YXJpYWJsZXMgdXNlZCBmb3IgZ2VvbWV0cnkgYW5kIHNpemluZyAoYHJhbV90b3BgLCBgYml0bWFwX3NpemVgLCBgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgZ2AsIGBucl91bml0c2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIG9ubHkgYWNjZXNzZWQgb24gc3VjY2VzcyBwYXRocyB3aGVyZSB0aGV5IGhhdmUgYmVlbiBwb3B1bGF0ZWQuIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RscykgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cbitzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9QRVJTSVNURU5UX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4rXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcbitcdGlmIChwbSkge1xuK1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuK1x0XHRcdGVmaV9lcnIoXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZWZpX2dldF9yYW1fdG9wKFx1MDAyNnJhbV90b3ApICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi40NDQzNjg2OWM0ZWZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTE2OSw2ICsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICsxMDIzLDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcImV4aXRfYm9vdCgpIGZhaWxlZCFcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICsxLDIzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4rXG4rc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkge1xuK1x0dTY0IHRhYmxlO1x0XHQvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovXG4rXHR1NjQgdW5pdF9zaXplO1xuK1x0dTY0IGJpdG1hcF9zaXplO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fbmJpdHMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyB1NjQgX19pbml0XG4rZWZpX3BvaXNvbl91c2FibGVfc2l6ZShjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK1x0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdC8qIFdob2xlIHdvcmRzOiB0aGUgYml0bWFwIGlzIHJlYWNoZWQgYW4gdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUuICovXG4rXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cdTAwM2VzaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNlPSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXHUwMDNldW5pdF9zaXplLCBcdTAwMjZzcGFuKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0bWVtdW5tYXAocG0pO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghZWZpX3BvaXNvbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZWZpX3BvaXNvbl9uYml0cyA9IHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7XG4rXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHU2NCB1bml0ID0gUEZOX1BIWVMocGZuKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1xuK1x0aWYgKHVuaXQgXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dmFsaWQgPSBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKTtcbitcdGlmICh2YWxpZCkge1xuK1x0XHRnLVx1MDAzZXRhYmxlID0gcHBtO1xuK1x0XHRnLVx1MDAzZXVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0cmV0dXJuIHZhbGlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cdTAwM2V1bml0X3NpemUpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDsgaSsrKVxuK1x0XHRucl9wYWdlcyArPSBod3BvaXNvbl9ib290X3BmbihwZm4gKyBpKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdFx0IHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xuK1xuK1x0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cdTAwM2V0YWJsZSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRpZiAoIW1hcClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0bnJfcGFnZXMgKz0gZWZpX3BvaXNvbl9vZmZsaW5lX3VuaXQoZywgb2ZmICogQklUU19QRVJfQllURSArIGJpdCk7XG4rXHRcdCgqbnJfdW5pdHMpKys7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0dTY0IG9mZjtcbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBnLVx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4rXG4rXHRcdGlmIChuciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdG5yX3BhZ2VzICs9IG5yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xuK1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4rXHRsb25nIG5yX3BhZ2VzLCBleHBlY3RlZDtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucl9wYWdlcylcbitcdFx0cHJfaW5mbyhcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cIiwgbnJfcGFnZXMpO1xuK1xuK1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIGV4cGVjdGVkKVxuK1x0XHRwcl93YXJuKFwiJWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCIsXG4rXHRcdFx0ZXhwZWN0ZWQgLSBucl9wYWdlcyk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiArMTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB1bml0IE4gb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgY291bnRpbmcgZnJvbSBhZGRyZXNzIDAuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uZDVkNjVmMGMzZTA0YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTk2LDYgKzk3LDM2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcbitcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbitcdFx0aWYgKCF0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHBhZ2UpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuK1x0fSBlbHNlIGlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbitcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGU5YzQyMDRiNzNhZGIuLjE2Nzg4YWVjNzU0Y2QgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI3MjIsNiArMjcyMiw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIFx0a2hvX21lbW9yeV9pbml0KCk7XG4gXG4gXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xuK1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MjAuMTU3NTAxOTc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NDY5NjEzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBFRkkgUG9pc29uZWQgTWVtb3J5IFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZvY3VzIGlzIG9uIEtNU0FOJ3MgcHJpbWFyeSBjb25jZXJuczogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGFjcm9zcyBzdGFjaywgaGVhcCwgYW5kIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCBhc3NvY2lhdGVkIGZpbGVzLCBwcmltYXJpbHkgY2VudGVyZWQgYXJvdW5kIGEgbWVtb3J5IHBvaXNvbmluZyBtZWNoYW5pc20gd2l0aGluIHRoZSBFRkkgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhbGxvY2F0aW5nIGEgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBzdHJ1Y3R1cmUuIE5vdGFibHksIGluIGBlZmlfcG9pc29uX2FsbG9jYCwgdGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBhbmQgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIHdpdGggYHBtLVx1MDAzZXZlcnNpb24gPSAxO2AsIGBwbS1cdTAwM2V1bml0X3NpemUgPSAuLi47YCwgYHBtLVx1MDAzZXNpemUgPSAuLi47YCwgYW5kIGNydWNpYWxseSwgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtgLiBUaGlzIGlzIGEgc3Ryb25nIGluZGljYXRvciBvZiBjYXJlZnVsIGluaXRpYWxpemF0aW9uLiBTbywgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgZnVsbHkgdGFrZW4gY2FyZSBvZi5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGNhbGxzIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGZvciBleGFtcGxlLCBgZWZpX3BvaXNvbl9pbml0YCwgYGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYC4gVGhlc2UgZnVuY3Rpb25zIG1hcCwgcmVhZCwgYW5kIHByb2Nlc3MgdGhpcyBtZW1vcnkgYnV0IGFsbCBvZiB0aGVtIGFyZSB1dGlsaXppbmcgZnVuY3Rpb25zIHRoYXQgcHJvcGVybHkgaW5pdGlhbGl6ZSByZWxldmFudCB2YXJpYWJsZXMuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGRhdGEgaXMgcHJpbWFyaWx5IHVzZWQgd2l0aGluIHRoZSBFRkkgY29udGV4dCBhbmQgZHVyaW5nIGVhcmx5IGJvb3QsIGludGVyYWN0aW5nIHdpdGggRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVzLiBUaGVyZSdzIG5vIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIChubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgY2FsbHMpIGFuZCBubyBvYnZpb3VzIGRhdGEgdHJhbnNmZXIuIFRoaXMgbWluaW1pemVzIHRoZSByaXNrIG9mIGluZm8tbGVha3MuXG5cbk5vdywgSSdtIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgbWlzc2VkIGluaXRpYWxpemF0aW9uIHNjZW5hcmlvcy4gSSdtIGNoZWNraW5nIGtleSB2YXJpYWJsZXMuIGBlZmlfZ2V0X3JhbV90b3BgIGluaXRpYWxpemVzIGByYW1fdG9wYC4gYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKClgJ3MgYHJhbV90b3BgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBJbiBgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5YCwgaWYgdGhlIGB2YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgZ2AgaXMgaW5pdGlhbGl6ZWQuIEluIGBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkoKWAsIGBnYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSdtIGFsc28gbG9va2luZyBpbnRvIGBlZmlfcG9pc29uX3dhbGtfY2h1bmtgLCB3aGljaCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBUaGVyZSBhcmUgbm8gcmVhZGlseSBhcHBhcmVudCBpc3N1ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgZGlyZWN0IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXItc3BhY2UuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBzZWVtIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiBjb3JyZWN0bHkuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGZvY3VzIG9uIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMuIFBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd291bGQgbW9yZSBsaWtlbHkgaW52b2x2ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBhbHJlYWR5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIG90aGVyIGNvbW1vbiBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IE5lZWRzS01TQU4gPSBmYWxzZS4gSSBkb24ndCBiZWxpZXZlIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIEkgd2lsbCBkb3VibGUtY2hlY2sgYGVmaV9wb2lzb25fYWxsb2NgIGFuZCBgZWZpX2dldF9yYW1fdG9wYCBmb3IgYW55IGxhc3QgbWludXRlIGluY29uc2lzdGVuY2llcy4gQWgsIGBlZmlfcG9pc29uX2FsbG9jYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIHV0aWxpemVzIGBfX2ZyZWVgIGNsZWFudXAgYXR0cmlidXRlIHdoaWNoIGluZGljYXRlcyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDcsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjM5LjYyNzExOTgzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciByZWNvcmRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc28gdGhhdCB0aGV5IGNhbiBiZSBob25vcmVkIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBUaGUgbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIChgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGluY2x1ZGluZyBhIGBtZW1zZXRgIG9mIHRoZSB0cmFpbGluZyBiaXRtYXAuIEFsbCBzdGFjayB2YXJpYWJsZXMgdXNlZCBmb3IgZ2VvbWV0cnkgYW5kIHNpemluZyAoYHJhbV90b3BgLCBgYml0bWFwX3NpemVgLCBgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgZ2AsIGBucl91bml0c2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIG9ubHkgYWNjZXNzZWQgb24gc3VjY2VzcyBwYXRocyB3aGVyZSB0aGV5IGhhdmUgYmVlbiBwb3B1bGF0ZWQuIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RscykgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcmVjb3JkaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZCBhY3Jvc3Mga2V4ZWMgcmVib290cy4gVGhlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiAoYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBpbmNsdWRpbmcgYSBgbWVtc2V0YCBvZiB0aGUgdHJhaWxpbmcgYml0bWFwLiBBbGwgc3RhY2sgdmFyaWFibGVzIHVzZWQgZm9yIGdlb21ldHJ5IGFuZCBzaXppbmcgKGByYW1fdG9wYCwgYGJpdG1hcF9zaXplYCwgYHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGdgLCBgbnJfdW5pdHNgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBvbmx5IGFjY2Vzc2VkIG9uIHN1Y2Nlc3MgcGF0aHMgd2hlcmUgdGhleSBoYXZlIGJlZW4gcG9wdWxhdGVkLiBUaGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMpIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 12:19:16 +0000 UTC FinishedAt: 2026-08-26 13:02:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "EFI_STUB", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "EFI_STUB", "MEMORY_FAILURE" ], "series_id": "d43ca8ef-218e-473f-ac4b-22688b028cd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcmVjb3JkaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZCBhY3Jvc3Mga2V4ZWMgcmVib290cy4gVGhlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiAoYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBpbmNsdWRpbmcgYSBgbWVtc2V0YCBvZiB0aGUgdHJhaWxpbmcgYml0bWFwLiBBbGwgc3RhY2sgdmFyaWFibGVzIHVzZWQgZm9yIGdlb21ldHJ5IGFuZCBzaXppbmcgKGByYW1fdG9wYCwgYGJpdG1hcF9zaXplYCwgYHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGdgLCBgbnJfdW5pdHNgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBvbmx5IGFjY2Vzc2VkIG9uIHN1Y2Nlc3MgcGF0aHMgd2hlcmUgdGhleSBoYXZlIGJlZW4gcG9wdWxhdGVkLiBUaGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMpIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uYWFmY2Q0MWJjMDA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiAmIzQzOzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4mIzQzO2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0ZGVmX2Jvb2wgeVxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcbiBcdGJvb2wgXCYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTilcdFx0JiM0Mzs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0JiM0Mzs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0JiM0Mzs9IGNwZXIteDg2Lm9cbiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpXHRcdCYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vXG4mIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0JiM0Mzs9IHBvaXNvbi5vXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcdFx0JiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li4xMTFlNjA0NzkyMTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MztcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiYjNDM7I2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgJiM0Mzs2NDksOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdHtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFx0XCYjMzQ7VW5hY2NlcHRlZFwmIzM0O1x0fSxcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcJiMzNDtQT0lTT05cJiMzNDtcdH0sXG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IGYyN2YyZTFmMDAxOTkuLmI4YjgwODQ2MjM5ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgJiM0Mzs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcXG5cJiMzNDspO1xuIFx0fVxuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqL1xuJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdHU2NCByYW1fdG9wID0gMDtcbiYjNDM7XHRpbnQgaSwgbnJfZGVzYztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4mIzQzO1xuJiM0MztcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbiYjNDM7XHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbiYjNDM7XHRcdGNhc2UgRUZJX0xPQURFUl9EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuJiM0MztcdFx0Y2FzZSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1BFUlNJU1RFTlRfTUVNT1JZOlxuJiM0MztcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wKVxuJiM0MztcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4mIzQzO1xuJiM0MztcdCp0b3AgPSByYW1fdG9wO1xuJiM0MztcdHJldHVybiBFRklfU1VDQ0VTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHJhbV90b3ApXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbiYjNDM7XHRcdFx0XHQgQklUU19QRVJfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuJiM0MztcdFx0XHQgICAgIHNpemVvZigqcG0pICYjNDM7IGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbiYjNDM7XHRwbS1cdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbiYjNDM7XHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4mIzQzO1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4mIzQzO1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4mIzQzO1x0aWYgKHBtKSB7XG4mIzQzO1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuJiM0MztcdFx0XHRlZmlfZXJyKFwmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVmaV9nZXRfcmFtX3RvcChcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCk7XG4mIzQzO1xuJiM0MztcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQsIHBtKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4mIzQzO1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbiYjNDM7XHRcdGVmaV9lcnIoXCYjMzQ7RmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFx0XHRcdCBFRklfUlRfU1VQUE9SVEVEX1NFVF9WSVJUVUFMX0FERFJFU1NfTUFQKTtcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuJiM0MztcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICYjNDM7MTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbiYjNDM7XHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuJiM0MztcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTc5ODQzMjc3NDU3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgJiM0MzsxLDIzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2VmaTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IHtcbiYjNDM7XHR1NjQgdGFibGU7XHRcdC8qIHBoeXMgYWRkcmVzcyBvZiB0aGUgdGFibGUgKi9cbiYjNDM7XHR1NjQgdW5pdF9zaXplO1xuJiM0MztcdHU2NCBiaXRtYXBfc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9uYml0cyBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IF9faW5pdFxuJiM0MztlZmlfcG9pc29uX3VzYWJsZV9zaXplKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbiYjNDM7e1xuJiM0MztcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChQRk5fUEhZUyhtYXhfcGZuKSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbiYjNDM7XHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXaG9sZSB3b3JkczogdGhlIGJpdG1hcCBpcyByZWFjaGVkIGFuIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lLiAqL1xuJiM0MztcdHJldHVybiBtaW4ocm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksIHBtLVx1MDAzZXNpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2U9IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgaXNfcG93ZXJfb2ZfMihwbS1cdTAwM2V1bml0X3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHR1NjQgbmJpdHMsIHNwYW47XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcdTAwMjZuYml0cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhY2hlY2tfbXVsX292ZXJmbG93KG5iaXRzLCAodTY0KXBtLVx1MDAzZXVuaXRfc2l6ZSwgXHUwMDI2c3Bhbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSB0YWJsZSBtYXkgY29tZSBmcm9tIGFuIGVhcmxpZXIga2VybmVsLCBzbyB2ZXQgaXQgYmVmb3JlIHVzaW5nIGl0LiAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdG1lbXVubWFwKHBtKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzaXplID0gZWZpX3BvaXNvbl91c2FibGVfc2l6ZShwbSk7XG4mIzQzO1x0bWVtdW5tYXAocG0pO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1xuJiM0MztcdGlmICh1bml0IFx1MDAzZT0gZWZpX3BvaXNvbl9uYml0cylcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gdW5pdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhblxuJiM0MzsgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRsb25nIHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuJiM0MztcdGlmICh1bml0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGJvb2wgdmFsaWQ7XG4mIzQzO1xuJiM0MztcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWxpZCA9IGVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pO1xuJiM0MztcdGlmICh2YWxpZCkge1xuJiM0MztcdFx0Zy1cdTAwM2V0YWJsZSA9IHBwbTtcbiYjNDM7XHRcdGctXHUwMDNldW5pdF9zaXplID0gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBLZWVwIHRoZSBydW50aW1lIHNpZGUgb2ZmIGEgdGFibGUgdGhpcyBwYXNzIHJlamVjdGVkLiAqL1xuJiM0MztcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsaWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdFxuJiM0MztlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiA9IFBIWVNfUEZOKHVuaXQgKiBnLVx1MDAzZXVuaXRfc2l6ZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGctXHUwMDNldW5pdF9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5yX3BhZ2VzICYjNDM7PSBod3BvaXNvbl9ib290X3BmbihwZm4gJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBucl9wYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbiYjNDM7XHRcdFx0XHRcdCB1NjQgb2ZmLCB1bnNpZ25lZCBsb25nICpucl91bml0cylcbiYjNDM7e1xuJiM0MztcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFwLCBucl9wYWdlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcCA9IGVhcmx5X21lbXJlbWFwKGctXHUwMDNldGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksXG4mIzQzO1x0XHRcdFx0XHRcdCBiaXRtYXApICYjNDM7IG9mZiwgY2h1bmspO1xuJiM0MztcdGlmICghbWFwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykge1xuJiM0MztcdFx0bnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTtcbiYjNDM7XHRcdCgqbnJfdW5pdHMpJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfcGFnZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIF9faW5pdCBlZmlfcG9pc29uX3dhbGsoY29uc3Qgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnJfdW5pdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMDtcbiYjNDM7XHR1NjQgb2ZmO1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZiA9IDA7IG9mZiBcdTAwM2MgZy1cdTAwM2ViaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bnJfcGFnZXMgJiM0Mzs9IG5yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yX3BhZ2VzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4mIzQzO1x0bG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfcGFnZXMpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O3BvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cJiMzNDssIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYyBleHBlY3RlZClcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRleHBlY3RlZCAtIG5yX3BhZ2VzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHN0b3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVib290LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhhZjgyOGExNSwgMHgwZWY0LCAweDQzOWEsICAweGI4LCAweDZhLCAweGQ2LCAweGQ2LCAweDllLCAweGFmLCAweGJhLCAweGZhKVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtNjUwLDYgJiM0Mzs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiAmIzQzOzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcbiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFxcXG4gXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcbiBcbiYjNDM7LyogQml0IE4gY292ZXJzIHVuaXQgTiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBjb3VudGluZyBmcm9tIGFkZHJlc3MgMC4gKi9cbiYjNDM7c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuJiM0MztcdHUzMlx0XHR2ZXJzaW9uO1xuJiM0MztcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4mIzQzO1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uODg1YWQ2MDkzZDQxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTI1NCwxMSAmIzQzOzUyNTQsMTcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuJiM0Mztib29sIF9faW5pdCBod3BvaXNvbl9ib290X3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcm1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXG4gXHRcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4mIzQzO1xuJiM0Mztib29sIF9faW5pdCBod3BvaXNvbl9ib290X3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbiYjNDM7XHRcdGlmICghdGFrZV9wYWdlX29mZl9idWRkeShwYWdlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuJiM0MztcdH0gZWxzZSBpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSkge1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4mIzQzO1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuJiM0Mzt2b2lkIF9faW5pdCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cbkBAIC0xMjg2LDYgJiM0MzsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbiYjNDM7XHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbiYjNDM7XHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG4gXHR9XG4gXG4gXHRwcl9lcnIoXCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4gXHRraG9fbWVtb3J5X2luaXQoKTtcbiBcbiBcdG1lbWJsb2NrX2ZyZWVfYWxsKCk7XG4mIzQzO1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwpAQCAtMjYzLDYgJiM0MzsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVAogCSAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVybgogCSAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuCiAKJiM0Mztjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwogY29uZmlnIE9WTUZfREVCVUdfTE9HCiAJYm9vbCAmIzM0O0V4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnMmIzM0OwogCWRlcGVuZHMgb24gRUZJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKQkJJiM0Mzs9IGVhcmx5Y29uLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKQkJJiM0Mzs9IGNwZXItYXJtLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KQkJJiM0Mzs9IGNwZXIteDg2Lm8KIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSkJCSYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vCiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpCSYjNDM7PSBwb2lzb24ubwogb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSkJCSYjNDM7PSBzdG1tL3RlZV9zdG1tX2VmaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCmluZGV4IDAzMjdhMzlkMzFmYTUuLjExMWU2MDQ3OTIxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCS51bmFjY2VwdGVkCQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJLnBvaXNvbmVkX21lbW9yeQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiYjNDM7I2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChlZmkpOwogCkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJe0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELAkmYW1wO2VmaS51bmFjY2VwdGVkLAkmIzM0O1VuYWNjZXB0ZWQmIzM0Owl9LAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CXtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwJJiMzNDtQT0lTT04mIzM0Owl9LAomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCCiAJe0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCwJJmFtcDtwcmltYXJ5X2Rpc3BsYXlfdGFibGUJCQl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwppbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKQEAgLTc3NCwzICYjNDM7Nzc0LDEwOSBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsCiAJCQllZmlfd2FybigmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxuJiMzNDspOwogCX0KIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqLwomIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQljYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovCiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCByYW1fdG9wKQomIzQzO3sKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSksCiYjNDM7CQkJCSBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wKTsKJiM0MzsKJiM0MzsJcG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9CiAKIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNzk4NDMyNzc0NTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMjM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlcgomIzQzOyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7ZWZpOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgewomIzQzOwl1NjQgdGFibGU7CQkvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovCiYjNDM7CXU2NCB1bml0X3NpemU7CiYjNDM7CXU2NCBiaXRtYXBfc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IF9faW5pdAomIzQzO2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHM6IHRoZSBiaXRtYXAgaXMgcmVhY2hlZCBhbiB1bnNpZ25lZCBsb25nIGF0IGEgdGltZS4gKi8KJiM0MzsJcmV0dXJuIG1pbihyb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwgcG0tJmd0O3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmICghcG0tJmd0O3NpemUgfHwgIUlTX0FMSUdORUQocG0tJmd0O3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwbS0mZ3Q7dW5pdF9zaXplICZndDs9IFBBR0VfU0laRSAmYW1wOyZhbXA7IGlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5iaXRzLCBzcGFuOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLSZndDtzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsICZhbXA7bmJpdHMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmIChwbS0mZ3Q7dmVyc2lvbiAhPSAxKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxuJiMzNDssCiYjNDM7CQkJcG0tJmd0O3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkgfHwgIWVmaV9wb2lzb25fcmFuZ2VfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSwKJiM0MzsJCQkgICAgICBNRU1SRU1BUF9XQik7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJdTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSBlZmlfcG9pc29uX25iaXRzKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuCiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KHU2NCBwcG0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7CiYjNDM7CWlmICh2YWxpZCkgewomIzQzOwkJZy0mZ3Q7dGFibGUgPSBwcG07CiYjNDM7CQlnLSZndDt1bml0X3NpemUgPSBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwkJZy0mZ3Q7Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdAomIzQzO2VmaV9wb2lzb25fb2ZmbGluZV91bml0KGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLCB1NjQgdW5pdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gUEhZU19QRk4odW5pdCAqIGctJmd0O3VuaXRfc2l6ZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZy0mZ3Q7dW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGh3cG9pc29uX2Jvb3RfcGZuKHBmbiAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrX2NodW5rKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkJIHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKQomIzQzO3sKJiM0MzsJdTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGctJmd0O2JpdG1hcF9zaXplIC0gb2ZmKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXAsIG5yX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJbWFwID0gZWFybHlfbWVtcmVtYXAoZy0mZ3Q7dGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CWlmICghbWFwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTsKJiM0MzsJCSgqbnJfdW5pdHMpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpucl91bml0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwl1NjQgb2ZmOwomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGctJmd0O2JpdG1hcF9zaXplOyBvZmYgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJbG9uZyBuciA9IGVmaV9wb2lzb25fd2Fsa19jaHVuayhnLCBvZmYsIG5yX3VuaXRzKTsKJiM0MzsKJiM0MzsJCWlmIChuciAmbHQ7IDApIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDsKJiM0MzsJbG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksICZhbXA7ZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKCZhbXA7ZywgJmFtcDtucl91bml0cyk7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcykKJiM0MzsJCXByX2luZm8oJiMzNDtwb2lzb25lZCAlbGQgcGFnZShzKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXG4mIzM0OywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwlleHBlY3RlZCA9IG5yX3VuaXRzICogKGcudW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0OyBleHBlY3RlZCkKJiM0MzsJCXByX3dhcm4oJiMzNDslbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcbiYjMzQ7LAomIzQzOwkJCWV4cGVjdGVkIC0gbnJfcGFnZXMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGNjYmMzNTQ3OTY4NGEuLmRhMGQzY2E5MTE1Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wc3RvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlYm9vdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3V1aWQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpOwogI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlECQlFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpCiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlECQlFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpCiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSkKJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRAlFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpCiAKICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRAkJRUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKQogCkBAIC02NTAsNiAmIzQzOzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHsKIAl1bnNpZ25lZCBsb25nCQkJbW9rdmFyX3RhYmxlOwkJLyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcJCQljb2NvX3NlY3JldDsJCS8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCXVuYWNjZXB0ZWQ7CQkvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqLwomIzQzOwl1bnNpZ25lZCBsb25nCQkJcG9pc29uZWRfbWVtb3J5OwkvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi8KIAogCWVmaV9nZXRfdGltZV90CQkJKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90CQkJKnNldF90aW1lOwpAQCAtMTI2OSw2ICYjNDM7MTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcCiAJLyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpCiAKJiM0MzsvKiBCaXQgTiBjb3ZlcnMgdW5pdCBOIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIGNvdW50aW5nIGZyb20gYWRkcmVzcyAwLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpOwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjg4NWFkNjA5M2Q0MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTQsMTEgJiM0Mzs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7CiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpOwomIzQzO2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pCiB7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7Ym9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7CiYjNDM7CQlpZiAoIXRha2VfcGFnZV9vZmZfYnVkZHkocGFnZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcGFnZV9yZWZfaW5jKHBhZ2UpOwomIzQzOwl9IGVsc2UgaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpIHsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7CiYjNDM7CWF0b21pY19sb25nX2luYygmYW1wO251bV9wb2lzb25lZF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqLwomIzQzO3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KQEAgLTEyODYsNiAmIzQzOzEzMTcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpCiAJa2hvX21lbW9yeV9pbml0KCk7CiAKIAltZW1ibG9ja19mcmVlX2FsbCgpOwomIzQzOwlod3BvaXNvbl9pbml0X2Jvb3QoKTsKIAltZW1faW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVGSSBQb2lzb25lZCBNZW1vcnk6IEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0byB0cmFjayBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgYW5kIHRoZW4gaG9ub3JzIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBuZXh0IGtlcm5lbCBib290LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IHdpdGggc3l6a2FsbGVyLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIHJlYWNoYWJpbGl0eS4gQ2FuIHdlIHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgb2Ygc3l6a2FsbGVyPyBNZW1vcnkgZmFpbHVyZXMgY2FuIGJlIGluamVjdGVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IsIEkgdGhpbmssIHRocm91Z2ggc3lzZnMuIFRoZSBjb2RlIHBhdGggbG9va3MgbGlrZSB0aGlzOiBgbWFkdmlzZWAgLSZndDsgYG1lbW9yeV9mYWlsdXJlYCAtJmd0OyBgYWN0aW9uX3Jlc3VsdGAgLSZndDsgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gVGhhdCBsYXN0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lOiBpdCBzZXRzIGEgYml0IGluIHRoZSBFRkkgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBUaGlzIHRhYmxlIGlzIGFsbG9jYXRlZCBieSB0aGUgRUZJIHN0dWIgYW5kIHBhc3NlZCB0byB0aGUga2VybmVsLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiBEb2VzIFFFTVUsIGFzIHVzZWQgYnkgc3l6a2FsbGVyLCBzdXBwb3J0IHRoaXMgRUZJIHN0dWI/CgpZZXMsIGlmIHRoZSBib290IHVzZXMgT1ZNRiwgaXQgZG9lcy4gSG93ZXZlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnVzZSogdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQ/IFR5cGljYWxseSwgaXQgYm9vdHMgd2l0aCBiekltYWdlLCB3aGljaCBtaWdodCBieXBhc3MgdGhlIEVGSSBzdHViLCB1bmxlc3Mgd2UgY29uZmlndXJlIGl0IGEgc3BlY2lmaWMgd2F5LiBFdmVuIGlmIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQsIHdlIHNob3VsZCBzdGlsbCBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbHNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgZHVyaW5nICpydW50aW1lKiB3aGljaCBpcyBnb29kLgoKTG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3MgcHJldHR5IHNpbXBsZTogaXQgY2hlY2tzIGlmIGBlZmlfcG9pc29uYCBpcyBpbml0aWFsaXplZCwgY2FsY3VsYXRlcyBhIHVuaXQsIGFuZCB0aGVuIHNldHMgYSBiaXQgaW4gYSBiaXRtYXAuIFRoZSBgZWZpX3BvaXNvbmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGVhcmx5LCBkdXJpbmcgYm9vdCBpbiBgZWZpX3BvaXNvbl9pbml0KClgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYW4gRUZJIHRhYmxlIGlzIHByZXNlbnQsIHRoZSBwb2ludGVyIGBlZmkucG9pc29uZWRfbWVtb3J5YCBpcyBzZXQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyByZWFjaGFibGUuIFRoZSBFRkkgdGFibGUgaXMgaW5zdGFsbGVkIGJ5IHRoZSBFRkkgc3R1YiBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UgYnkgZnVuY3Rpb25zIGxpa2UgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgZWZpX3N0dWJfY29tbW9uKClgIGFuZCBgZWZpX3N0dWJfZW50cnkoKWAuCgpNeSBjb25jZXJuIGlzIHRoYXQgc3l6a2FsbGVyICpieSBkZWZhdWx0KiBkb2VzIG5vdCB1c2UgRUZJLCBzbyB0aGUgYm9vdC10aW1lIHBhcnNpbmcgaXNuJiMzOTt0IGRpcmVjdGx5IGZ1enphYmxlLiBJdCYjMzk7cyBib290LXRpbWUsIGluIHRoZSBgZWFybHlfaW5pdGNhbGxgIHBoYXNlLiBJdCB3b24mIzM5O3QgZ2V0IGZ1enplZCBub3JtYWxseSwgYW5kIGRpcmVjdCBFRkkgdGFibGUgbWFuaXB1bGF0aW9uIGlzIG5vdCBhIHN5emthbGxlciBjb3JlIGNvbXBldGVuY3kuIEJ1dCwgZXZlbiBpZiBzeXprYWxsZXIgZG9lcyBub3QgZnV6eiB0aGUgRUZJIHBhcnQsIHRoZSBydW50aW1lIHBhdGggaXMuCgpUaGUgYm9vdC10aW1lIGNvZGUgcGFyc2VzIHRoZSBFRkkgdGFibGUuIEhvd2V2ZXIsIHN5emthbGxlciBkb2VzbiYjMzk7dCBmb2N1cyBvbiB0aGF0IHBhcnQgdW5sZXNzIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBzeXNjYWxscy4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIG9jY3VycyAqYXQgcnVudGltZSouIFRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgbWluaW1hbCwgaXQganVzdCBzZXRzIGEgYml0LiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGUgYm9vdCB0aW1lIGNvZGUgdGhhdCBkZWFscyB3aXRoIHJlYWRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdmlhIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLiBIb3dldmVyLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgZG8ga2V4ZWMgYW5kIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNvbnRyb2wgdGhlIEVGSSBhdCBib290LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHJ1bnRpbWUgc2lkZSBjYW4gYmUgYSBmb2N1cy4KCkNoZWNraW5nIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBgaHdwb2lzb25fYm9vdF9wZm5gIGFuZCBgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5YCBhcmUgY2FsbGVkIGR1cmluZyBib290LCBhbmQgYGVmaV9wb2lzb25faW5pdGAgaXMgYW4gYGVhcmx5X2luaXRjYWxsYCwgc28gdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgaXMgdmVyeSBsb3cuIFRoZSBtYWluIHJ1bnRpbWUgaW50ZXJhY3Rpb24gaXMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgYW5kIG1heSBiZSB3b3J0aCBmdXp6aW5nLCBldmVuIGlmIHdlIGFyZSBub3QgdGVzdGluZyB0aGUgYm9vdCBwcm9jZXNzLgoKU2luY2Ugc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIGBNQURWX0hXUE9JU09OYCwgdGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTGV0IG1lIHVzZSB0b29scyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9MTA3PXN0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMTktICovXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMjA6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMS17XG4tLVxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjg2PXZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg3OnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODk9c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvZWZpLmg6MTI5MDpzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjkxLSNlbmRpZlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTMxMj1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMC1cdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzIxOlx0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzIyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBjb2RlIGl0c2VsZiBpcyBzaW1wbGUuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzICp3b3J0aCogZnV6emluZy4gVGhlIGxvZ2ljIGl0IGNvbnRhaW5zIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYSBjaGVjayBmb3IgYSBnbG9iYWwgYGVmaV9wb2lzb25gIGZsYWcsIGEgY2FsbCB0byBgZWZpX3BvaXNvbl91bml0YCB0byBkZXRlcm1pbmUgYSBiaXRtYXAgdW5pdCwgYW5kIHRoZW4gc2V0dGluZyBhIGJpdCBpbiB0aGUgYml0bWFwLiBUaGVyZSBpc24mIzM5O3QgYW55IGNvbXBsZXggbG9naWMgKndpdGhpbiogdGhlIGZ1bmN0aW9uIGl0c2VsZi4KClRoZSBjb21wbGljYXRlZCBwYXJ0cyBzZWVtIHRvIGJlIGR1cmluZyBib290LCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBIb3dldmVyLCB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZvY3VzIG9uIGBfX2luaXRgIGNvZGUgc2luY2UgaXQgb2NjdXJzIGJlZm9yZSB1c2VyLXNwYWNlIHRha2VzIG92ZXIuIFRoZSBzeXN0ZW0gYm9vdHMgYW5kIHRoZXNlIHBhcnRzIGV4ZWN1dGUgb25jZSBkdXJpbmcgYm9vdC4gUUVNVSBhbmQgT1ZNRiBieSBkZWZhdWx0IHdvdWxkbiYjMzk7dCBwcm92aWRlIGEgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZSBFRkkgc3R1YiAqaW5zdGFsbHMqIHRoZSB0YWJsZS4KClRoaXMgaXMgYSBrZXkgcG9pbnQ6IHRoZSBFRkkgc3R1YiBjYWxscyBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLiBTbyB0aGUgdGFibGUgKmlzKiBjcmVhdGVkIGFuZCBpbnN0YWxsZWQgYnkgdGhlIEVGSSBzdHViLCBiZWZvcmUgdGhlIGtlcm5lbCBib290cy4gVGhlIGtlcm5lbCB0aGVuIGNhbGxzIGBlZmlfcG9pc29uX2luaXRgLCB3aGljaCBtYXBzIHRoZSB0YWJsZSBpbnRvIGtlcm5lbCBzcGFjZSwgYW5kIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBkdXJpbmcgcnVudGltZSB3aWxsIGNhbGwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byBzZXQgYml0cyBpbiB0aGUgYml0bWFwLgoKU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBwcm9tcHQgY3JpdGVyaWEsIGl0ICppcyouIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgYWRkcyBhIG5ldyBFRkkgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBpbiBRRU1VIGlmIGJvb3RlZCB3aXRoIGFuIEVGSSBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBleHBsaWNpdDogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi4gdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQgaXQmIzM5O3Mgd29ydGggZnV6emluZywgSSBzaG91bGQgZGVmaW5lIGBFRklfUE9JU09ORURfTUVNT1JZYCBhcyBhIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBUaGUgY29uZmlnIGRlcGVuZHMgb24gYEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVGAuIFNpbmNlIGBFRklfUE9JU09ORURfTUVNT1JZYCBpcyBgZGVmX2Jvb2wgeWAsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KClJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyB0aGUgb25seSBub24taW5pdCBydW50aW1lIGZ1bmN0aW9uLCBhbmQgd2UgY2FuIGRlZmluZSB0aGF0IGFzIGEgZm9jdXMgc3ltYm9sLgoKQmFzZWQgb24gdGhlIHByb21wdCwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLiBJIHdpbGwgZGVmaW5lIHRoZXNlIGNvbmZpZ3M6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYEVGSV9TVFVCYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgd2lsbCBhZGQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVGSV9TVFVCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTYwMi1cbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cdGJvb2xcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDY2LVxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cdGJvb2xcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTA3LVx0Ym9vbCBcJiMzNDtFRkkgYm9vdCBzdHViIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjUwLVxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cdGJvb2xcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxuLS1cbmFyY2gveDg2L0tjb25maWctMTg5OC1cbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcbmFyY2gveDg2L0tjb25maWctMTkwMC1cdGJvb2wgXCYjMzQ7RUZJIHN0dWIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgTWVtb3J5IEZhaWx1cmUgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgRUZJX1NUVUJgIGZlYXR1cmUsIHdoaWNoIEkgdW5kZXJzdGFuZCB0byBiZSBhIGJvb2xlYW4gc2V0dGluZy4gTm93LCBJIHNlZSB0aGUgdGVybSBgTUVNT1JZX0ZBSUxVUkVgIGhhcyBjb21lIHVwLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEga2V5IHRlcm0sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBvcmlnaW4gYW5kIGNvbnRleHQuIEFoLCByaWdodCwgYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgYXJlIHVzdWFsbHkgbG9jYXRlZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gdGhlcmUgYW5kIHRyeSB0byBwaWVjZSB0b2dldGhlciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE1FTU9SWV9GQUlMVVJFYCBhbmQgdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgZmF1bHQgdG9sZXJhbmNlLCBidXQgYSBkaXJlY3QgY2hlY2sgd2lsbCBjb25maXJtIGFuZCBjbGFyaWZ5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzIHdpdGggYEVGSV9TVFVCYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDU5CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVGSSBIYXJkd2FyZSBQb2lzb25lZCBNZW1vcnkgUmVjb3JkaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIGBNRU1PUllfRkFJTFVSRWAgaXMgYSBib29sL3RyaXN0YXRlIOKAkyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBzeW1ib2xzOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLgoKTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyB0aGUgb25seSBydW50aW1lIGZ1bmN0aW9uIGFkZGVkLiBZZXMsIGl0IGxvb2tzIGxpa2UgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhY3Rpb25fcmVzdWx0YCB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBgYWN0aW9uX3Jlc3VsdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgd2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgYG1lbW9yeV9mYWlsdXJlYCBpdHNlbGYuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBzeXNmcywgbWFraW5nIGl0IGludGVyZXN0aW5nLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbiBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhpcyB3b3VsZCBhbGxvdyB0aGUgbmV4dCBrZXJuZWwgYm9vdCAoYWZ0ZXIgYSBrZXhlYykgdG8gYXZvaWQgdXNpbmcgdGhlc2UgYmFkIG1lbW9yeSBwYWdlcy4gVGhlIGNyaXRpY2FsIHJ1bnRpbWUgbG9naWMgaXMgd2l0aGluIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbigpYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBkZXRlY3RlZC4gVGhpcyBtYWtlcyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW1zLgoKVGhlcmVmb3JlLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG15IGZvY3VzIHN5bWJvbC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLgoKSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBjYWxsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYCBhbmQgYGh3cG9pc29uX2Jvb3RfcGZuYCB3aGljaCBpcyBgX19pbml0YCwgbWFraW5nIG15IGZvY3VzIHN5bWJvbCBjb3JyZWN0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBlbnN1cmluZyB0aGF0IGEgc3Vic2VxdWVudCBrZXJuZWwgYm9vdCAoZS5nLiwgdmlhIGtleGVjKSBhdm9pZHMgdXNpbmcga25vd24tYmFkIFJBTS4gVGhlIGNvcmUgcnVudGltZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGludm9rZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIGlzIGhhbmRsZWQgKGUuZy4sIHRyaWdnZXJlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwpAQCAtMjYzLDYgJiM0MzsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVAogCSAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVybgogCSAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuCiAKJiM0Mztjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwogY29uZmlnIE9WTUZfREVCVUdfTE9HCiAJYm9vbCAmIzM0O0V4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnMmIzM0OwogCWRlcGVuZHMgb24gRUZJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKQkJJiM0Mzs9IGVhcmx5Y29uLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKQkJJiM0Mzs9IGNwZXItYXJtLm8KIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KQkJJiM0Mzs9IGNwZXIteDg2Lm8KIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSkJCSYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vCiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpCSYjNDM7PSBwb2lzb24ubwogb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSkJCSYjNDM7PSBzdG1tL3RlZV9zdG1tX2VmaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCmluZGV4IDAzMjdhMzlkMzFmYTUuLjExMWU2MDQ3OTIxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jCkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCS51bmFjY2VwdGVkCQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJLnBvaXNvbmVkX21lbW9yeQk9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiYjNDM7I2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChlZmkpOwogCkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJe0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELAkmYW1wO2VmaS51bmFjY2VwdGVkLAkmIzM0O1VuYWNjZXB0ZWQmIzM0Owl9LAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CXtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwJJiMzNDtQT0lTT04mIzM0Owl9LAomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCCiAJe0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCwJJmFtcDtwcmltYXJ5X2Rpc3BsYXlfdGFibGUJCQl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwppbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKQEAgLTc3NCwzICYjNDM7Nzc0LDEwOSBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsCiAJCQllZmlfd2FybigmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxuJiMzNDspOwogCX0KIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsvKiBFcnJpbmcgd2lkZSBvbmx5IGNvc3RzIGJpdG1hcCBieXRlcywgc28gdGhlIHR5cGUgbGlzdCBpcyBwZXJtaXNzaXZlLiAqLwomIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQljYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovCiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCByYW1fdG9wKQomIzQzO3sKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSksCiYjNDM7CQkJCSBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wKTsKJiM0MzsKJiM0MzsJcG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMTY5LDYgJiM0MzsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9CiAKIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNzk4NDMyNzc0NTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMjM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlcgomIzQzOyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7ZWZpOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgewomIzQzOwl1NjQgdGFibGU7CQkvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovCiYjNDM7CXU2NCB1bml0X3NpemU7CiYjNDM7CXU2NCBiaXRtYXBfc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IF9faW5pdAomIzQzO2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0MzsJdTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHM6IHRoZSBiaXRtYXAgaXMgcmVhY2hlZCBhbiB1bnNpZ25lZCBsb25nIGF0IGEgdGltZS4gKi8KJiM0MzsJcmV0dXJuIG1pbihyb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwgcG0tJmd0O3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmICghcG0tJmd0O3NpemUgfHwgIUlTX0FMSUdORUQocG0tJmd0O3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwbS0mZ3Q7dW5pdF9zaXplICZndDs9IFBBR0VfU0laRSAmYW1wOyZhbXA7IGlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJdTY0IG5iaXRzLCBzcGFuOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLSZndDtzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsICZhbXA7bmJpdHMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CWlmIChwbS0mZ3Q7dmVyc2lvbiAhPSAxKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxuJiMzNDssCiYjNDM7CQkJcG0tJmd0O3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkgfHwgIWVmaV9wb2lzb25fcmFuZ2VfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgJiM0Mzsgc2l6ZSwKJiM0MzsJCQkgICAgICBNRU1SRU1BUF9XQik7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJdTY0IHVuaXQgPSBQRk5fUEhZUyhwZm4pIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSBlZmlfcG9pc29uX25iaXRzKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuCiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KHU2NCBwcG0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7CiYjNDM7CWlmICh2YWxpZCkgewomIzQzOwkJZy0mZ3Q7dGFibGUgPSBwcG07CiYjNDM7CQlnLSZndDt1bml0X3NpemUgPSBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwkJZy0mZ3Q7Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdAomIzQzO2VmaV9wb2lzb25fb2ZmbGluZV91bml0KGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLCB1NjQgdW5pdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gUEhZU19QRk4odW5pdCAqIGctJmd0O3VuaXRfc2l6ZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZy0mZ3Q7dW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGh3cG9pc29uX2Jvb3RfcGZuKHBmbiAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrX2NodW5rKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkJIHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKQomIzQzO3sKJiM0MzsJdTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGctJmd0O2JpdG1hcF9zaXplIC0gb2ZmKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXAsIG5yX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJbWFwID0gZWFybHlfbWVtcmVtYXAoZy0mZ3Q7dGFibGUgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CWlmICghbWFwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgJiM0MzsgYml0KTsKJiM0MzsJCSgqbnJfdW5pdHMpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3BhZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBfX2luaXQgZWZpX3BvaXNvbl93YWxrKGNvbnN0IHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpucl91bml0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwl1NjQgb2ZmOwomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGctJmd0O2JpdG1hcF9zaXplOyBvZmYgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJbG9uZyBuciA9IGVmaV9wb2lzb25fd2Fsa19jaHVuayhnLCBvZmYsIG5yX3VuaXRzKTsKJiM0MzsKJiM0MzsJCWlmIChuciAmbHQ7IDApIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJbnJfcGFnZXMgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDsKJiM0MzsJbG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7CiYjNDM7CiYjNDM7CWlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksICZhbXA7ZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKCZhbXA7ZywgJmFtcDtucl91bml0cyk7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcykKJiM0MzsJCXByX2luZm8oJiMzNDtwb2lzb25lZCAlbGQgcGFnZShzKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXG4mIzM0OywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwlleHBlY3RlZCA9IG5yX3VuaXRzICogKGcudW5pdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0OyBleHBlY3RlZCkKJiM0MzsJCXByX3dhcm4oJiMzNDslbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcbiYjMzQ7LAomIzQzOwkJCWV4cGVjdGVkIC0gbnJfcGFnZXMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGNjYmMzNTQ3OTY4NGEuLmRhMGQzY2E5MTE1Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wc3RvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlYm9vdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3V1aWQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CkBAIC00MjIsNiAmIzQzOzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpOwogI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlECQlFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpCiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlECQlFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpCiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSkKJiM0MzsjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRAlFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpCiAKICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRAkJRUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKQogCkBAIC02NTAsNiAmIzQzOzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHsKIAl1bnNpZ25lZCBsb25nCQkJbW9rdmFyX3RhYmxlOwkJLyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcJCQljb2NvX3NlY3JldDsJCS8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCXVuYWNjZXB0ZWQ7CQkvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqLwomIzQzOwl1bnNpZ25lZCBsb25nCQkJcG9pc29uZWRfbWVtb3J5OwkvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi8KIAogCWVmaV9nZXRfdGltZV90CQkJKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90CQkJKnNldF90aW1lOwpAQCAtMTI2OSw2ICYjNDM7MTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcCiAJLyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpCiAKJiM0MzsvKiBCaXQgTiBjb3ZlcnMgdW5pdCBOIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIGNvdW50aW5nIGZyb20gYWRkcmVzcyAwLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpOwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjg4NWFkNjA5M2Q0MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTQsMTEgJiM0Mzs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7CiYjNDM7dm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpOwomIzQzO2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBod3BvaXNvbl9pbml0X2Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pCiB7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5kNWQ2NWYwYzNlMDRjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC05Niw2ICYjNDM7OTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7Ym9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7CiYjNDM7CQlpZiAoIXRha2VfcGFnZV9vZmZfYnVkZHkocGFnZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcGFnZV9yZWZfaW5jKHBhZ2UpOwomIzQzOwl9IGVsc2UgaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpIHsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7CiYjNDM7CWF0b21pY19sb25nX2luYygmYW1wO251bV9wb2lzb25lZF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqLwomIzQzO3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KQEAgLTEyODYsNiAmIzQzOzEzMTcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBlOWM0MjA0YjczYWRiLi4xNjc4OGFlYzc1NGNkIDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0yNzIyLDYgJiM0MzsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpCiAJa2hvX21lbW9yeV9pbml0KCk7CiAKIAltZW1ibG9ja19mcmVlX2FsbCgpOwomIzQzOwlod3BvaXNvbl9pbml0X2Jvb3QoKTsKIAltZW1faW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ3CgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDEyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEVGSSBQb2lzb25lZCBNZW1vcnkgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmb2N1cyBpcyBvbiBLTVNBTiYjMzk7cyBwcmltYXJ5IGNvbmNlcm5zOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoYWNyb3NzIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mb3JtYXRpb24gbGVha3MuCgpGaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCBhc3NvY2lhdGVkIGZpbGVzLCBwcmltYXJpbHkgY2VudGVyZWQgYXJvdW5kIGEgbWVtb3J5IHBvaXNvbmluZyBtZWNoYW5pc20gd2l0aGluIHRoZSBFRkkgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBOb3RhYmx5LCBpbiBgZWZpX3BvaXNvbl9hbGxvY2AsIHRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBgZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgLi4uKWAgYW5kICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCB3aXRoIGBwbS0mZ3Q7dmVyc2lvbiA9IDE7YCwgYHBtLSZndDt1bml0X3NpemUgPSAuLi47YCwgYHBtLSZndDtzaXplID0gLi4uO2AsIGFuZCBjcnVjaWFsbHksIGBtZW1zZXQocG0tJmd0O2JpdG1hcCwgMCwgYml0bWFwX3NpemUpO2AuIFRoaXMgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGNhcmVmdWwgaW5pdGlhbGl6YXRpb24uIFNvLCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBmdWxseSB0YWtlbiBjYXJlIG9mLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGNhbGxzIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGZvciBleGFtcGxlLCBgZWZpX3BvaXNvbl9pbml0YCwgYGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYC4gVGhlc2UgZnVuY3Rpb25zIG1hcCwgcmVhZCwgYW5kIHByb2Nlc3MgdGhpcyBtZW1vcnkgYnV0IGFsbCBvZiB0aGVtIGFyZSB1dGlsaXppbmcgZnVuY3Rpb25zIHRoYXQgcHJvcGVybHkgaW5pdGlhbGl6ZSByZWxldmFudCB2YXJpYWJsZXMuCgpJdCBsb29rcyBsaWtlIHRoZSBkYXRhIGlzIHByaW1hcmlseSB1c2VkIHdpdGhpbiB0aGUgRUZJIGNvbnRleHQgYW5kIGR1cmluZyBlYXJseSBib290LCBpbnRlcmFjdGluZyB3aXRoIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy4gVGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bCBjYWxscykgYW5kIG5vIG9idmlvdXMgZGF0YSB0cmFuc2Zlci4gVGhpcyBtaW5pbWl6ZXMgdGhlIHJpc2sgb2YgaW5mby1sZWFrcy4KCk5vdywgSSYjMzk7bSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIG1pc3NlZCBpbml0aWFsaXphdGlvbiBzY2VuYXJpb3MuIEkmIzM5O20gY2hlY2tpbmcga2V5IHZhcmlhYmxlcy4gYGVmaV9nZXRfcmFtX3RvcGAgaW5pdGlhbGl6ZXMgYHJhbV90b3BgLiBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKWAmIzM5O3MgYHJhbV90b3BgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBJbiBgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5YCwgaWYgdGhlIGB2YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgZ2AgaXMgaW5pdGlhbGl6ZWQuIEluIGBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkoKWAsIGBnYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgaW50byBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgd2hpY2ggaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gVGhlcmUgYXJlIG5vIHJlYWRpbHkgYXBwYXJlbnQgaXNzdWVzLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSBhbSBub3Qgc2VlaW5nIGFueSBkaXJlY3Qgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlci1zcGFjZS4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIHNlZW0gdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseS4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gZm9jdXMgb24gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy4gUG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3JlIGxpa2VseSBpbnZvbHZlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgb3RoZXIgY29tbW9uIGJ1ZyBkZXRlY3RvcnMuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IE5lZWRzS01TQU4gPSBmYWxzZS4gSSBkb24mIzM5O3QgYmVsaWV2ZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBqdXN0aWZpZWQgZm9yIHRoaXMgcGF0Y2ggc2VyaWVzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBlZmlfcG9pc29uX2FsbG9jYCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAgZm9yIGFueSBsYXN0IG1pbnV0ZSBpbmNvbnNpc3RlbmNpZXMuIEFoLCBgZWZpX3BvaXNvbl9hbGxvY2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBgZWZpX2dldF9yYW1fdG9wYCB1dGlsaXplcyBgX19mcmVlYCBjbGVhbnVwIGF0dHJpYnV0ZSB3aGljaCBpbmRpY2F0ZXMgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQuIE5vIEtNU0FOIG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjA2Ljg5ODk0Njc5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzI4MjE5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHJlY29yZGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQgYWNyb3NzIGtleGVjIHJlYm9vdHMuIFRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgKGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgaW5jbHVkaW5nIGEgYG1lbXNldGAgb2YgdGhlIHRyYWlsaW5nIGJpdG1hcC4gQWxsIHN0YWNrIHZhcmlhYmxlcyB1c2VkIGZvciBnZW9tZXRyeSBhbmQgc2l6aW5nIChgcmFtX3RvcGAsIGBiaXRtYXBfc2l6ZWAsIGBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnYCwgYG5yX3VuaXRzYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3Igb25seSBhY2Nlc3NlZCBvbiBzdWNjZXNzIHBhdGhzIHdoZXJlIHRoZXkgaGF2ZSBiZWVuIHBvcHVsYXRlZC4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGxzKSB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDE6MDYuODk4OTUzMjQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1Mjg5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNiOTRlNzM4OGQwMDFmZWM3OGYzZDk3MWI1YTlmMjQ5YTg4NWI5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXFxuIFxcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxcbiBcXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxcbiBcXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0ZGVmX2Jvb2wgeVxcbitcXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFxcdTAwMjZcXHUwMDI2IE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuK1xcdGhlbHBcXG4rXFx0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xcbitcXHQgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZVxcbitcXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxcbitcXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXFxuIFxcdGJvb2wgXFxcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcXFwiXFxuIFxcdGRlcGVuZHMgb24gRUZJXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVxcdFxcdCs9IGVhcmx5Y29uLm9cXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXFx0XFx0Kz0gY3Blci1hcm0ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcXHRcXHQrPSBjcGVyLXg4Ni5vXFxuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcXHRcXHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXFxuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVxcdCs9IHBvaXNvbi5vXFxuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXFx0XFx0Kz0gc3RtbS90ZWVfc3RtbV9lZmkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHQudW5hY2NlcHRlZFxcdFxcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHQucG9pc29uZWRfbWVtb3J5XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbisjZW5kaWZcXG4gfTtcXG4gRVhQT1JUX1NZTUJPTChlZmkpO1xcbiBcXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFxcdFxcdTAwMjZlZmkudW5hY2NlcHRlZCxcXHRcXFwiVW5hY2NlcHRlZFxcXCJcXHR9LFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXFx0XFxcIlBPSVNPTlxcXCJcXHR9LFxcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXFxuIFxcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVxcdFxcdFxcdH0sXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xcbmluZGV4IGYyN2YyZTFmMDAxOTkuLmI4YjgwODQ2MjM5ZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5AQCAtNzc0LDMgKzc3NCwxMDkgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxcbiBcXHRcXHRcXHRlZmlfd2FybihcXFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiB9XFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cXG4rc3RhdGljIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXFxuK3tcXG4rXFx0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1NjQgcmFtX3RvcCA9IDA7XFxuK1xcdGludCBpLCBucl9kZXNjO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFxcdTAwMjZtYXAsIGZhbHNlKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuK1xcdG5yX2Rlc2MgPSBtYXAtXFx1MDAzZW1hcF9zaXplIC8gbWFwLVxcdTAwM2VkZXNjX3NpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXNjOyBpKyspIHtcXG4rXFx0XFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XFxuK1xcbitcXHRcXHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cXHUwMDNlbWFwLCBtYXAtXFx1MDAzZWRlc2Nfc2l6ZSwgaSk7XFxuK1xcdFxcdHN3aXRjaCAoZC1cXHUwMDNldHlwZSkge1xcbitcXHRcXHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XFxuK1xcdFxcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxcbitcXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbitcXHRcXHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcXG4rXFx0XFx0Y2FzZSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWTpcXG4rXFx0XFx0Y2FzZSBFRklfUEVSU0lTVEVOVF9NRU1PUlk6XFxuK1xcdFxcdFxcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZC1cXHUwMDNlcGh5c19hZGRyICsgZC1cXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmICghcmFtX3RvcClcXG4rXFx0XFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XFxuK1xcbitcXHQqdG9wID0gcmFtX3RvcDtcXG4rXFx0cmV0dXJuIEVGSV9TVUNDRVNTO1xcbit9XFxuK1xcbisvKiBXaG9sZSB3b3JkczogdGhlIGtlcm5lbCByZWFjaGVzIHRoZSBiaXRtYXAgd2l0aCBzZXRfYml0KCkuICovXFxuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcXG4re1xcbitcXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcXG4rXFx0XFx0XFx0XFx0IEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbit9XFxuK1xcbisvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksXFxuK1xcdFxcdFxcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXFx1MDAyNnBtKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwbS1cXHUwMDNldmVyc2lvbiA9IDE7XFxuK1xcdHBtLVxcdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcXG4rXFx0cG0tXFx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcXG4rXFx0bWVtc2V0KHBtLVxcdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBwbTtcXG4rfVxcbitcXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbit7XFxuK1xcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXG4rXFx0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xcbitcXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcXG4rXFx0aWYgKHBtKSB7XFxuK1xcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKVxcbitcXHRcXHRcXHRlZmlfZXJyKFxcXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZWZpX2dldF9yYW1fdG9wKFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xcbitcXG4rXFx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcXG4rXFx0aWYgKCFwbSkge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuK1xcdFxcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rfVxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXFxuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFx0XFx0XFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xcbiBcXG4gXFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XFxuK1xcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuIFxcbiBcXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbkBAIC0xMTY5LDYgKzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cXG4gXFxuIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cXG4rI2VuZGlmXFxuK1xcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XFxuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuQEAgLTEwMjMsNiArMTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXG4gXFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcXG4gXFxuK1xcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuK1xcbiBcXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XFxuIFxcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4gXFx0XFx0ZWZpX2VycihcXFwiZXhpdF9ib290KCkgZmFpbGVkIVxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2ZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcXG5AQCAtMCwwICsxLDIzNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcXG4rICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImVmaTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2cyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlubWF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IHtcXG4rXFx0dTY0IHRhYmxlO1xcdFxcdC8qIHBoeXMgYWRkcmVzcyBvZiB0aGUgdGFibGUgKi9cXG4rXFx0dTY0IHVuaXRfc2l6ZTtcXG4rXFx0dTY0IGJpdG1hcF9zaXplO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHU2NCBlZmlfcG9pc29uX25iaXRzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuK3N0YXRpYyB1NjQgX19pbml0XFxuK2VmaV9wb2lzb25fdXNhYmxlX3NpemUoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChQRk5fUEhZUyhtYXhfcGZuKSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuK1xcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSk7XFxuK1xcbitcXHQvKiBXaG9sZSB3b3JkczogdGhlIGJpdG1hcCBpcyByZWFjaGVkIGFuIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lLiAqL1xcbitcXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cXHUwMDNlc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAoIXBtLVxcdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVxcdTAwM2VzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNlPSBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fcmFuZ2VfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBuYml0cywgc3BhbjtcXG4rXFxuK1xcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXFx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXFx1MDAyNm5iaXRzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXFx1MDAzZXVuaXRfc2l6ZSwgXFx1MDAyNnNwYW4pO1xcbit9XFxuK1xcbisvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIklnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBtLVxcdTAwM2V2ZXJzaW9uKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHR1NjQgc2l6ZTtcXG4rXFxuK1xcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdG1lbXVubWFwKHBtKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xcbitcXHRtZW11bm1hcChwbSk7XFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgKyBzaXplLFxcbitcXHRcXHRcXHQgICAgICBNRU1SRU1BUF9XQik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWVmaV9wb2lzb24pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGVmaV9wb2lzb25fbmJpdHMgPSBzaXplICogQklUU19QRVJfQllURTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcXG4rXFxuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHR1NjQgdW5pdCA9IFBGTl9QSFlTKHBmbikgLyBlZmlfcG9pc29uLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcbitcXHRpZiAodW5pdCBcXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiB1bml0O1xcbit9XFxuK1xcbisvKlxcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXFxuKyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxcbisgKi9cXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRsb25nIHVuaXQ7XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcXG4rXFx0aWYgKHVuaXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXFx1MDAzZWJpdG1hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnkodTY0IHBwbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5ICpnKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rXFxuK1xcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XFxuK1xcdGlmICghcG0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHZhbGlkID0gZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSk7XFxuK1xcdGlmICh2YWxpZCkge1xcbitcXHRcXHRnLVxcdTAwM2V0YWJsZSA9IHBwbTtcXG4rXFx0XFx0Zy1cXHUwMDNldW5pdF9zaXplID0gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4rXFx0XFx0Zy1cXHUwMDNlYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX3VzYWJsZV9zaXplKHBtKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cXG4rXFx0XFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuK1xcdH1cXG4rXFxuK1xcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XFxuK1xcbitcXHRyZXR1cm4gdmFsaWQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdFxcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cXHUwMDNldW5pdF9zaXplKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZy1cXHUwMDNldW5pdF9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7IGkrKylcXG4rXFx0XFx0bnJfcGFnZXMgKz0gaHdwb2lzb25fYm9vdF9wZm4ocGZuICsgaSk7XFxuK1xcbitcXHRyZXR1cm4gbnJfcGFnZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIF9faW5pdCBlZmlfcG9pc29uX3dhbGtfY2h1bmsoY29uc3Qgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcsXFxuK1xcdFxcdFxcdFxcdFxcdCB1NjQgb2ZmLCB1bnNpZ25lZCBsb25nICpucl91bml0cylcXG4re1xcbitcXHR1NjQgY2h1bmsgPSBtaW5fdCh1NjQsIFBBR0VfU0laRSwgZy1cXHUwMDNlYml0bWFwX3NpemUgLSBvZmYpO1xcbitcXHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xcbitcXG4rXFx0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cXHUwMDNldGFibGUgKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJpdG1hcCkgKyBvZmYsIGNodW5rKTtcXG4rXFx0aWYgKCFtYXApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XFxuK1xcdFxcdG5yX3BhZ2VzICs9IGVmaV9wb2lzb25fb2ZmbGluZV91bml0KGcsIG9mZiAqIEJJVFNfUEVSX0JZVEUgKyBiaXQpO1xcbitcXHRcXHQoKm5yX3VuaXRzKSsrO1xcbitcXHR9XFxuK1xcbitcXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcXG4rXFxuK1xcdHJldHVybiBucl9wYWdlcztcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnJfdW5pdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDA7XFxuK1xcdHU2NCBvZmY7XFxuK1xcbitcXHRmb3IgKG9mZiA9IDA7IG9mZiBcXHUwMDNjIGctXFx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XFxuK1xcbitcXHRcXHRpZiAobnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IGJpdG1hcFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRucl9wYWdlcyArPSBucjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yX3BhZ2VzO1xcbit9XFxuK1xcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3VuaXRzID0gMDtcXG4rXFx0bG9uZyBucl9wYWdlcywgZXhwZWN0ZWQ7XFxuK1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeShlZmkucG9pc29uZWRfbWVtb3J5LCBcXHUwMDI2ZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5yX3BhZ2VzID0gZWZpX3BvaXNvbl93YWxrKFxcdTAwMjZnLCBcXHUwMDI2bnJfdW5pdHMpO1xcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobnJfcGFnZXMpXFxuK1xcdFxcdHByX2luZm8oXFxcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXFxcblxcXCIsIG5yX3BhZ2VzKTtcXG4rXFxuK1xcdGV4cGVjdGVkID0gbnJfdW5pdHMgKiAoZy51bml0X3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNjIGV4cGVjdGVkKVxcbitcXHRcXHRwcl93YXJuKFxcXCIlbGQgaW5oZXJpdGVkIHBvaXNvbmVkIHBhZ2UocykgY291bGQgbm90IGJlIHRha2VuIG91dCBvZiB1c2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGV4cGVjdGVkIC0gbnJfcGFnZXMpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uZGEwZDNjYTkxMTVjZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbkBAIC0yMyw2ICsyMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc3RvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWJvb3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpemVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91dWlkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcXHRcXHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXFxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcXHRcXHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXFxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXFxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhhZjgyOGExNSwgMHgwZWY0LCAweDQzOWEsICAweGI4LCAweDZhLCAweGQ2LCAweGQ2LCAweDllLCAweGFmLCAweGJhLCAweGZhKVxcbiBcXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXFx0XFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxcbiBcXG5AQCAtNjUwLDYgKzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdG1va3Zhcl90YWJsZTtcXHRcXHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRjb2NvX3NlY3JldDtcXHRcXHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0dW5hY2NlcHRlZDtcXHRcXHQvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqL1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0cG9pc29uZWRfbWVtb3J5O1xcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xcbiBcXG4gXFx0ZWZpX2dldF90aW1lX3RcXHRcXHRcXHQqZ2V0X3RpbWU7XFxuIFxcdGVmaV9zZXRfdGltZV90XFx0XFx0XFx0KnNldF90aW1lO1xcbkBAIC0xMjY5LDYgKzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcXG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxcXFxuIFxcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxcbiBcXG4rLyogQml0IE4gY292ZXJzIHVuaXQgTiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBjb3VudGluZyBmcm9tIGFkZHJlc3MgMC4gKi9cXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xcbitcXHR1MzJcXHRcXHR2ZXJzaW9uO1xcbitcXHR1MzJcXHRcXHR1bml0X3NpemU7XFx0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xcbitcXHR1NjRcXHRcXHRzaXplO1xcdFxcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRiaXRtYXBbXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcXHRTWl8yTVxcbitcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK3ZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKTtcXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGE4YjAzZTI5MjBiYTguLmQ1ZDY1ZjBjM2UwNGMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtNDMsNiArNDMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3NtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ybWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG5AQCAtOTYsNiArOTcsMzYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIFxcdFxcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9yZXN1bHQgcmVzdWx0KTtcXG4rXFxuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuK1xcbitcXHRpZiAoIXBhZ2UgfHwgUGFnZUhXUG9pc29uKHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpKSB7XFxuK1xcdFxcdGlmICghdGFrZV9wYWdlX29mZl9idWRkeShwYWdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRwYWdlX3JlZl9pbmMocGFnZSk7XFxuK1xcdH0gZWxzZSBpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSkge1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgTUZfUkVDT1ZFUkVEKTtcXG4rXFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qIFRoZSBFRkkgdGFibGUgaXMgdGhlIG9ubHkgc291cmNlIG9mIGluaGVyaXRlZCBwb2lzb24gdG9kYXkuICovXFxuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxcbit7XFxuK1xcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xcbit9XFxuK1xcbiAvKipcXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxcbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG4gXFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xcbiBcXHRcXHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XFxuIFxcdFxcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XFxuK1xcdFxcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cXG4rXFx0XFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cHJfZXJyKFxcXCIlI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggZTljNDIwNGI3M2FkYi4uMTY3ODhhZWM3NTRjZCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMjcyMiw2ICsyNzIyLDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuIFxcdGtob19tZW1vcnlfaW5pdCgpO1xcbiBcXG4gXFx0bWVtYmxvY2tfZnJlZV9hbGwoKTtcXG4rXFx0aHdwb2lzb25faW5pdF9ib290KCk7XFxuIFxcdG1lbV9pbml0KCk7XFxuIFxcdGttZW1fY2FjaGVfaW5pdCgpO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMTowOC41MzUyMDY5NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTYyMTc5NjczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byByZWNvcmQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGVuc3VyaW5nIHRoYXQgYSBzdWJzZXF1ZW50IGtlcm5lbCBib290IChlLmcuLCB2aWEga2V4ZWMpIGF2b2lkcyB1c2luZyBrbm93bi1iYWQgUkFNLiBUaGUgY29yZSBydW50aW1lIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbigpYCwgd2hpY2ggaXMgaW52b2tlZCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgaGFuZGxlZCAoZS5nLiwgdHJpZ2dlcmVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBhbmQgRUZJIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cbitzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9QRVJTSVNURU5UX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4rXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcbitcdGlmIChwbSkge1xuK1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuK1x0XHRcdGVmaV9lcnIoXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZWZpX2dldF9yYW1fdG9wKFx1MDAyNnJhbV90b3ApICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi40NDQzNjg2OWM0ZWZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTE2OSw2ICsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICsxMDIzLDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcImV4aXRfYm9vdCgpIGZhaWxlZCFcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICsxLDIzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4rXG4rc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkge1xuK1x0dTY0IHRhYmxlO1x0XHQvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovXG4rXHR1NjQgdW5pdF9zaXplO1xuK1x0dTY0IGJpdG1hcF9zaXplO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fbmJpdHMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyB1NjQgX19pbml0XG4rZWZpX3BvaXNvbl91c2FibGVfc2l6ZShjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK1x0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdC8qIFdob2xlIHdvcmRzOiB0aGUgYml0bWFwIGlzIHJlYWNoZWQgYW4gdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUuICovXG4rXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cdTAwM2VzaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNlPSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXHUwMDNldW5pdF9zaXplLCBcdTAwMjZzcGFuKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0bWVtdW5tYXAocG0pO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghZWZpX3BvaXNvbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZWZpX3BvaXNvbl9uYml0cyA9IHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7XG4rXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHU2NCB1bml0ID0gUEZOX1BIWVMocGZuKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1xuK1x0aWYgKHVuaXQgXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dmFsaWQgPSBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKTtcbitcdGlmICh2YWxpZCkge1xuK1x0XHRnLVx1MDAzZXRhYmxlID0gcHBtO1xuK1x0XHRnLVx1MDAzZXVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0cmV0dXJuIHZhbGlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cdTAwM2V1bml0X3NpemUpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDsgaSsrKVxuK1x0XHRucl9wYWdlcyArPSBod3BvaXNvbl9ib290X3BmbihwZm4gKyBpKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdFx0IHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xuK1xuK1x0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cdTAwM2V0YWJsZSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRpZiAoIW1hcClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0bnJfcGFnZXMgKz0gZWZpX3BvaXNvbl9vZmZsaW5lX3VuaXQoZywgb2ZmICogQklUU19QRVJfQllURSArIGJpdCk7XG4rXHRcdCgqbnJfdW5pdHMpKys7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0dTY0IG9mZjtcbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBnLVx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4rXG4rXHRcdGlmIChuciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdG5yX3BhZ2VzICs9IG5yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xuK1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4rXHRsb25nIG5yX3BhZ2VzLCBleHBlY3RlZDtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucl9wYWdlcylcbitcdFx0cHJfaW5mbyhcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cIiwgbnJfcGFnZXMpO1xuK1xuK1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIGV4cGVjdGVkKVxuK1x0XHRwcl93YXJuKFwiJWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCIsXG4rXHRcdFx0ZXhwZWN0ZWQgLSBucl9wYWdlcyk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiArMTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB1bml0IE4gb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgY291bnRpbmcgZnJvbSBhZGRyZXNzIDAuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uZDVkNjVmMGMzZTA0YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTk2LDYgKzk3LDM2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcbitcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbitcdFx0aWYgKCF0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHBhZ2UpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuK1x0fSBlbHNlIGlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbitcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGU5YzQyMDRiNzNhZGIuLjE2Nzg4YWVjNzU0Y2QgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI3MjIsNiArMjcyMiw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIFx0a2hvX21lbW9yeV9pbml0KCk7XG4gXG4gXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xuK1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDE6MDguNTM1MjA5MDE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NTA5MDE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRUZJIFBvaXNvbmVkIE1lbW9yeTogRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgLiBJdCdzIGVzc2VudGlhbGx5IGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0byB0cmFjayBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgYW5kIHRoZW4gaG9ub3JzIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBuZXh0IGtlcm5lbCBib290LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6IHdpdGggc3l6a2FsbGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgcmVhY2hhYmlsaXR5LiBDYW4gd2UgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBzeXprYWxsZXI/IE1lbW9yeSBmYWlsdXJlcyBjYW4gYmUgaW5qZWN0ZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciwgSSB0aGluaywgdGhyb3VnaCBzeXNmcy4gVGhlIGNvZGUgcGF0aCBsb29rcyBsaWtlIHRoaXM6IGBtYWR2aXNlYCAtXHUwMDNlIGBtZW1vcnlfZmFpbHVyZWAgLVx1MDAzZSBgYWN0aW9uX3Jlc3VsdGAgLVx1MDAzZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLiBUaGF0IGxhc3QgZnVuY3Rpb24gaXMgdGhlIGtleSBvbmU6IGl0IHNldHMgYSBiaXQgaW4gdGhlIEVGSSBwb2lzb25lZCBtZW1vcnkgdGFibGUuIFRoaXMgdGFibGUgaXMgYWxsb2NhdGVkIGJ5IHRoZSBFRkkgc3R1YiBhbmQgcGFzc2VkIHRvIHRoZSBrZXJuZWwsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyB0aGUgcXVlc3Rpb246IERvZXMgUUVNVSwgYXMgdXNlZCBieSBzeXprYWxsZXIsIHN1cHBvcnQgdGhpcyBFRkkgc3R1Yj9cblxuWWVzLCBpZiB0aGUgYm9vdCB1c2VzIE9WTUYsIGl0IGRvZXMuIEhvd2V2ZXIsIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICp1c2UqIHRoZSBFRkkgc3R1YiBieSBkZWZhdWx0PyBUeXBpY2FsbHksIGl0IGJvb3RzIHdpdGggYnpJbWFnZSwgd2hpY2ggbWlnaHQgYnlwYXNzIHRoZSBFRkkgc3R1YiwgdW5sZXNzIHdlIGNvbmZpZ3VyZSBpdCBhIHNwZWNpZmljIHdheS4gRXZlbiBpZiBzeXprYWxsZXIgZG9lc24ndCB1c2UgdGhlIEVGSSBzdHViIGJ5IGRlZmF1bHQsIHdlIHNob3VsZCBzdGlsbCBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbHNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgZHVyaW5nICpydW50aW1lKiB3aGljaCBpcyBnb29kLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBzaW1wbGU6IGl0IGNoZWNrcyBpZiBgZWZpX3BvaXNvbmAgaXMgaW5pdGlhbGl6ZWQsIGNhbGN1bGF0ZXMgYSB1bml0LCBhbmQgdGhlbiBzZXRzIGEgYml0IGluIGEgYml0bWFwLiBUaGUgYGVmaV9wb2lzb25gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBlYXJseSwgZHVyaW5nIGJvb3QgaW4gYGVmaV9wb2lzb25faW5pdCgpYC4gVGhpcyBtZWFucyB0aGF0IGlmIGFuIEVGSSB0YWJsZSBpcyBwcmVzZW50LCB0aGUgcG9pbnRlciBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgc2V0LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLiBUaGUgRUZJIHRhYmxlIGlzIGluc3RhbGxlZCBieSB0aGUgRUZJIHN0dWIgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlIGJ5IGZ1bmN0aW9ucyBsaWtlIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGVmaV9zdHViX2NvbW1vbigpYCBhbmQgYGVmaV9zdHViX2VudHJ5KClgLlxuXG5NeSBjb25jZXJuIGlzIHRoYXQgc3l6a2FsbGVyICpieSBkZWZhdWx0KiBkb2VzIG5vdCB1c2UgRUZJLCBzbyB0aGUgYm9vdC10aW1lIHBhcnNpbmcgaXNuJ3QgZGlyZWN0bHkgZnV6emFibGUuIEl0J3MgYm9vdC10aW1lLCBpbiB0aGUgYGVhcmx5X2luaXRjYWxsYCBwaGFzZS4gSXQgd29uJ3QgZ2V0IGZ1enplZCBub3JtYWxseSwgYW5kIGRpcmVjdCBFRkkgdGFibGUgbWFuaXB1bGF0aW9uIGlzIG5vdCBhIHN5emthbGxlciBjb3JlIGNvbXBldGVuY3kuIEJ1dCwgZXZlbiBpZiBzeXprYWxsZXIgZG9lcyBub3QgZnV6eiB0aGUgRUZJIHBhcnQsIHRoZSBydW50aW1lIHBhdGggaXMuXG5cblRoZSBib290LXRpbWUgY29kZSBwYXJzZXMgdGhlIEVGSSB0YWJsZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJ3QgZm9jdXMgb24gdGhhdCBwYXJ0IHVubGVzcyBpdCdzIHRyaWdnZXJlZCBieSBzeXNjYWxscy4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIG9jY3VycyAqYXQgcnVudGltZSouIFRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgbWluaW1hbCwgaXQganVzdCBzZXRzIGEgYml0LiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGUgYm9vdCB0aW1lIGNvZGUgdGhhdCBkZWFscyB3aXRoIHJlYWRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdmlhIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLiBIb3dldmVyLCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCBkbyBrZXhlYyBhbmQgZG9lc24ndCBkaXJlY3RseSBjb250cm9sIHRoZSBFRkkgYXQgYm9vdCwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBydW50aW1lIHNpZGUgY2FuIGJlIGEgZm9jdXMuXG5cbkNoZWNraW5nIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBgaHdwb2lzb25fYm9vdF9wZm5gIGFuZCBgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5YCBhcmUgY2FsbGVkIGR1cmluZyBib290LCBhbmQgYGVmaV9wb2lzb25faW5pdGAgaXMgYW4gYGVhcmx5X2luaXRjYWxsYCwgc28gdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgaXMgdmVyeSBsb3cuIFRoZSBtYWluIHJ1bnRpbWUgaW50ZXJhY3Rpb24gaXMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgYW5kIG1heSBiZSB3b3J0aCBmdXp6aW5nLCBldmVuIGlmIHdlIGFyZSBub3QgdGVzdGluZyB0aGUgYm9vdCBwcm9jZXNzLlxuXG5TaW5jZSBzeXprYWxsZXIgY2FuIHRyaWdnZXIgYE1BRFZfSFdQT0lTT05gLCB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkxldCBtZSB1c2UgdG9vbHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjM4Ljk4NjExNTAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4ODM4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jPTEwNz1zdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMTktICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM6MTIwOnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4Nj12b2lkIGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODc6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XFxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjg5PXN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjkwOnN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XFxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjkxLSNlbmRpZlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzEyPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMjAtXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTMyMTpcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMyMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAxOjQyLjIyNDk1NzI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzM3NTg5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBjb2RlIGl0c2VsZiBpcyBzaW1wbGUuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgKndvcnRoKiBmdXp6aW5nLiBUaGUgbG9naWMgaXQgY29udGFpbnMgaXMgc3RyYWlnaHRmb3J3YXJkOiBhIGNoZWNrIGZvciBhIGdsb2JhbCBgZWZpX3BvaXNvbmAgZmxhZywgYSBjYWxsIHRvIGBlZmlfcG9pc29uX3VuaXRgIHRvIGRldGVybWluZSBhIGJpdG1hcCB1bml0LCBhbmQgdGhlbiBzZXR0aW5nIGEgYml0IGluIHRoZSBiaXRtYXAuIFRoZXJlIGlzbid0IGFueSBjb21wbGV4IGxvZ2ljICp3aXRoaW4qIHRoZSBmdW5jdGlvbiBpdHNlbGYuXG5cblRoZSBjb21wbGljYXRlZCBwYXJ0cyBzZWVtIHRvIGJlIGR1cmluZyBib290LCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBlZmlfcG9pc29uX3JlYWRfZ2VvbWV0cnlgLCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYCwgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBIb3dldmVyLCB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCBzeXprYWxsZXIgZG9lc24ndCBmb2N1cyBvbiBgX19pbml0YCBjb2RlIHNpbmNlIGl0IG9jY3VycyBiZWZvcmUgdXNlci1zcGFjZSB0YWtlcyBvdmVyLiBUaGUgc3lzdGVtIGJvb3RzIGFuZCB0aGVzZSBwYXJ0cyBleGVjdXRlIG9uY2UgZHVyaW5nIGJvb3QuIFFFTVUgYW5kIE9WTUYgYnkgZGVmYXVsdCB3b3VsZG4ndCBwcm92aWRlIGEgcG9pc29uZWQgbWVtb3J5IHRhYmxlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZSBFRkkgc3R1YiAqaW5zdGFsbHMqIHRoZSB0YWJsZS5cblxuVGhpcyBpcyBhIGtleSBwb2ludDogdGhlIEVGSSBzdHViIGNhbGxzIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAuIFNvIHRoZSB0YWJsZSAqaXMqIGNyZWF0ZWQgYW5kIGluc3RhbGxlZCBieSB0aGUgRUZJIHN0dWIsIGJlZm9yZSB0aGUga2VybmVsIGJvb3RzLiBUaGUga2VybmVsIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25faW5pdGAsIHdoaWNoIG1hcHMgdGhlIHRhYmxlIGludG8ga2VybmVsIHNwYWNlLCBhbmQgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGR1cmluZyBydW50aW1lIHdpbGwgY2FsbCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHRvIHNldCBiaXRzIGluIHRoZSBiaXRtYXAuXG5cblNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiB0aGUgcHJvbXB0IGNyaXRlcmlhLCBpdCAqaXMqLiBJdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGFkZHMgYSBuZXcgRUZJIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgaW4gUUVNVSBpZiBib290ZWQgd2l0aCBhbiBFRkkgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgZXhwbGljaXQ6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLi4uIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkdpdmVuIHRoYXQgaXQncyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBkZWZpbmUgYEVGSV9QT0lTT05FRF9NRU1PUllgIGFzIGEgY29uZmlndXJhdGlvbiB0byBlbmFibGUuIFRoZSBjb25maWcgZGVwZW5kcyBvbiBgRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFNpbmNlIGBFRklfUE9JU09ORURfTUVNT1JZYCBpcyBgZGVmX2Jvb2wgeWAsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHRoZSBvbmx5IG5vbi1pbml0IHJ1bnRpbWUgZnVuY3Rpb24sIGFuZCB3ZSBjYW4gZGVmaW5lIHRoYXQgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLiBJIHdpbGwgZGVmaW5lIHRoZXNlIGNvbmZpZ3M6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYEVGSV9TVFVCYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgd2lsbCBhZGQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjowMy45NjI1NDk3OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMzA0ODU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUZJX1NUVUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xNTkyPWNvbmZpZyBBVVRPX1pSRUxBRERSXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTE2MDItXFxuYXJjaC9hcm0vS2NvbmZpZzoxNjAzOmNvbmZpZyBFRklfU1RVQlxcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cXHRib29sXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcXG5hcmNoL2FybTY0L0tjb25maWctMjQ2Ni1cXG5hcmNoL2FybTY0L0tjb25maWc6MjQ2Nzpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cXHRib29sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwNS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwNy1cXHRib29sIFxcXCJFRkkgYm9vdCBzdHViIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1MC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6MTI1MTpjb25maWcgRUZJX1NUVUJcXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODk4LVxcbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcXG5hcmNoL3g4Ni9LY29uZmlnLTE5MDAtXFx0Ym9vbCBcXFwiRUZJIHN0dWIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MDUuNzk1NjAyMzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDg5MTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgTWVtb3J5IEZhaWx1cmUgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYEVGSV9TVFVCYCBmZWF0dXJlLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBib29sZWFuIHNldHRpbmcuIE5vdywgSSBzZWUgdGhlIHRlcm0gYE1FTU9SWV9GQUlMVVJFYCBoYXMgY29tZSB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEga2V5IHRlcm0sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBvcmlnaW4gYW5kIGNvbnRleHQuIEFoLCByaWdodCwgYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhcmUgdXN1YWxseSBsb2NhdGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIHRoZXJlIGFuZCB0cnkgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBNRU1PUllfRkFJTFVSRWAgYW5kIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgZmF1bHQgdG9sZXJhbmNlLCBidXQgYSBkaXJlY3QgY2hlY2sgd2lsbCBjb25maXJtIGFuZCBjbGFyaWZ5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgYW55IHJlbGF0ZWQgaXNzdWVzIHdpdGggYEVGSV9TVFVCYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjowOS42NTA0OTU4NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTQ3MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY0LVxcbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY2LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjExLjA4NTk3MjAyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDA1OTk5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFRkkgSGFyZHdhcmUgUG9pc29uZWQgTWVtb3J5IFJlY29yZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MuIEZpcnN0LCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGEgYm9vbC90cmlzdGF0ZSDigJMgSSdsbCBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBzeW1ib2xzOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIHRoZSBvbmx5IHJ1bnRpbWUgZnVuY3Rpb24gYWRkZWQuIFllcywgaXQgbG9va3MgbGlrZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG9ubHkgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIGBhY3Rpb25fcmVzdWx0YCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCB3aGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBgbWVtb3J5X2ZhaWx1cmVgIGl0c2VsZi4gVGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIHRocm91Z2ggYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHN5c2ZzLCBtYWtpbmcgaXQgaW50ZXJlc3RpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW4gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoaXMgd291bGQgYWxsb3cgdGhlIG5leHQga2VybmVsIGJvb3QgKGFmdGVyIGEga2V4ZWMpIHRvIGF2b2lkIHVzaW5nIHRoZXNlIGJhZCBtZW1vcnkgcGFnZXMuIFRoZSBjcml0aWNhbCBydW50aW1lIGxvZ2ljIGlzIHdpdGhpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgZGV0ZWN0ZWQuIFRoaXMgbWFrZXMgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtcy5cblxuVGhlcmVmb3JlLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIGlzIG15IGZvY3VzIHN5bWJvbC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBFRklfU1RVQmAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLlxuXG5JJ3ZlIGFsc28gdmVyaWZpZWQgdGhhdCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gY2FsbCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKWAgYW5kIGBod3BvaXNvbl9ib290X3BmbmAgd2hpY2ggaXMgYF9faW5pdGAsIG1ha2luZyBteSBmb2N1cyBzeW1ib2wgY29ycmVjdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU5LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMzowMjoyMC4wODY1NzQ3MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQyNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BPSVNPTkVEX01FTU9SWVwiLFxuICAgIFwiRUZJX1NUVUJcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gcmVjb3JkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBlbnN1cmluZyB0aGF0IGEgc3Vic2VxdWVudCBrZXJuZWwgYm9vdCAoZS5nLiwgdmlhIGtleGVjKSBhdm9pZHMgdXNpbmcga25vd24tYmFkIFJBTS4gVGhlIGNvcmUgcnVudGltZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAsIHdoaWNoIGlzIGludm9rZWQgd2hlbiBhIG1lbW9yeSBmYWlsdXJlIGlzIGhhbmRsZWQgKGUuZy4sIHRyaWdnZXJlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgYW5kIEVGSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHJlY29yZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgZW5zdXJpbmcgdGhhdCBhIHN1YnNlcXVlbnQga2VybmVsIGJvb3QgKGUuZy4sIHZpYSBrZXhlYykgYXZvaWRzIHVzaW5nIGtub3duLWJhZCBSQU0uIFRoZSBjb3JlIHJ1bnRpbWUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBoYW5kbGVkIChlLmcuLCB0cmlnZ2VyZWQgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGFuZCBFRkkgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MjAuMTU3MDA2ODU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3MDEzNDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjIwLjE1NzUwMTIxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTQ2OTYzNjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciByZWNvcmRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc28gdGhhdCB0aGV5IGNhbiBiZSBob25vcmVkIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBUaGUgbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIChgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGluY2x1ZGluZyBhIGBtZW1zZXRgIG9mIHRoZSB0cmFpbGluZyBiaXRtYXAuIEFsbCBzdGFjayB2YXJpYWJsZXMgdXNlZCBmb3IgZ2VvbWV0cnkgYW5kIHNpemluZyAoYHJhbV90b3BgLCBgYml0bWFwX3NpemVgLCBgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgZ2AsIGBucl91bml0c2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIG9ubHkgYWNjZXNzZWQgb24gc3VjY2VzcyBwYXRocyB3aGVyZSB0aGV5IGhhdmUgYmVlbiBwb3B1bGF0ZWQuIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RscykgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjYjk0ZTczODhkMDAxZmVjNzhmM2Q5NzFiNWE5ZjI0OWE4ODViOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMzowMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uMTExZTYwNDc5MjExYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li5iOGI4MDg0NjIzOWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsMTA5IEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogRXJyaW5nIHdpZGUgb25seSBjb3N0cyBiaXRtYXAgYnl0ZXMsIHNvIHRoZSB0eXBlIGxpc3QgaXMgcGVybWlzc2l2ZS4gKi9cbitzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9QRVJTSVNURU5UX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogV2hvbGUgd29yZHM6IHRoZSBrZXJuZWwgcmVhY2hlcyB0aGUgYml0bWFwIHdpdGggc2V0X2JpdCgpLiAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgcmFtX3RvcClcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4rXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcbitcdGlmIChwbSkge1xuK1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuK1x0XHRcdGVmaV9lcnIoXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZWZpX2dldF9yYW1fdG9wKFx1MDAyNnJhbV90b3ApICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3ApO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi40NDQzNjg2OWM0ZWZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTE2OSw2ICsxMTY5LDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuaW5kZXggY2VmMzJlMmM4MmQ4Zi4uZjkwZGUxMWJjODg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5AQCAtMTAyMyw2ICsxMDIzLDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcbiBcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiBcdFx0ZWZpX2VycihcImV4aXRfYm9vdCgpIGZhaWxlZCFcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3OTg0MzI3NzQ1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICsxLDIzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4rXG4rc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkge1xuK1x0dTY0IHRhYmxlO1x0XHQvKiBwaHlzIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovXG4rXHR1NjQgdW5pdF9zaXplO1xuK1x0dTY0IGJpdG1hcF9zaXplO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fbmJpdHMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyB1NjQgX19pbml0XG4rZWZpX3BvaXNvbl91c2FibGVfc2l6ZShjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKFBGTl9QSFlTKG1heF9wZm4pLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK1x0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdC8qIFdob2xlIHdvcmRzOiB0aGUgYml0bWFwIGlzIHJlYWNoZWQgYW4gdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUuICovXG4rXHRyZXR1cm4gbWluKHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpLCBwbS1cdTAwM2VzaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNlPSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuICFjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXHUwMDNldW5pdF9zaXplLCBcdTAwMjZzcGFuKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0bWVtdW5tYXAocG0pO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghZWZpX3BvaXNvbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZWZpX3BvaXNvbl9uYml0cyA9IHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7XG4rXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHU2NCB1bml0ID0gUEZOX1BIWVMocGZuKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1xuK1x0aWYgKHVuaXQgXHUwMDNlPSBlZmlfcG9pc29uX25iaXRzKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeSh1NjQgcHBtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgKmcpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdHBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dmFsaWQgPSBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKTtcbitcdGlmICh2YWxpZCkge1xuK1x0XHRnLVx1MDAzZXRhYmxlID0gcHBtO1xuK1x0XHRnLVx1MDAzZXVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdFx0Zy1cdTAwM2ViaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fdXNhYmxlX3NpemUocG0pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0cmV0dXJuIHZhbGlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRcbitlZmlfcG9pc29uX29mZmxpbmVfdW5pdChjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZywgdTY0IHVuaXQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwZm4gPSBQSFlTX1BGTih1bml0ICogZy1cdTAwM2V1bml0X3NpemUpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDsgaSsrKVxuK1x0XHRucl9wYWdlcyArPSBod3BvaXNvbl9ib290X3BmbihwZm4gKyBpKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsa19jaHVuayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdFx0IHU2NCBvZmYsIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBnLVx1MDAzZWJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hcCwgbnJfcGFnZXMgPSAwO1xuK1xuK1x0bWFwID0gZWFybHlfbWVtcmVtYXAoZy1cdTAwM2V0YWJsZSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRpZiAoIW1hcClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0bnJfcGFnZXMgKz0gZWZpX3BvaXNvbl9vZmZsaW5lX3VuaXQoZywgb2ZmICogQklUU19QRVJfQllURSArIGJpdCk7XG4rXHRcdCgqbnJfdW5pdHMpKys7XG4rXHR9XG4rXG4rXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rXG4rc3RhdGljIGxvbmcgX19pbml0IGVmaV9wb2lzb25fd2Fsayhjb25zdCBzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSAqZyxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yX3VuaXRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0dTY0IG9mZjtcbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBnLVx1MDAzZWJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGxvbmcgbnIgPSBlZmlfcG9pc29uX3dhbGtfY2h1bmsoZywgb2ZmLCBucl91bml0cyk7XG4rXG4rXHRcdGlmIChuciBcdTAwM2MgMCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdG5yX3BhZ2VzICs9IG5yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgZWZpX3BvaXNvbl9nZW9tZXRyeSBnO1xuK1x0dW5zaWduZWQgbG9uZyBucl91bml0cyA9IDA7XG4rXHRsb25nIG5yX3BhZ2VzLCBleHBlY3RlZDtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5KGVmaS5wb2lzb25lZF9tZW1vcnksIFx1MDAyNmcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRucl9wYWdlcyA9IGVmaV9wb2lzb25fd2FsayhcdTAwMjZnLCBcdTAwMjZucl91bml0cyk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucl9wYWdlcylcbitcdFx0cHJfaW5mbyhcInBvaXNvbmVkICVsZCBwYWdlKHMpIGluaGVyaXRlZCBhY3Jvc3Mga2V4ZWNcXG5cIiwgbnJfcGFnZXMpO1xuK1xuK1x0ZXhwZWN0ZWQgPSBucl91bml0cyAqIChnLnVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjIGV4cGVjdGVkKVxuK1x0XHRwcl93YXJuKFwiJWxkIGluaGVyaXRlZCBwb2lzb25lZCBwYWdlKHMpIGNvdWxkIG5vdCBiZSB0YWtlbiBvdXQgb2YgdXNlXFxuXCIsXG4rXHRcdFx0ZXhwZWN0ZWQgLSBucl9wYWdlcyk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjY2JjMzU0Nzk2ODRhLi5kYTBkM2NhOTExNWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNjksNiArMTI3MiwyNCBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB1bml0IE4gb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgY291bnRpbmcgZnJvbSBhZGRyZXNzIDAuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX29mZmxpbmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44ODVhZDYwOTNkNDE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjU0LDExICs1MjU0LDE3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX2luaXQgaHdwb2lzb25faW5pdF9ib290KHZvaWQpO1xuK2Jvb2wgX19pbml0IGh3cG9pc29uX2Jvb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uZDVkNjVmMGMzZTA0YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTk2LDYgKzk3LDM2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rYm9vbCBfX2luaXQgaHdwb2lzb25fYm9vdF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcbitcdGlmICghcGFnZSB8fCBQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpIHtcbitcdFx0aWYgKCF0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHBhZ2UpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0cGFnZV9yZWZfaW5jKHBhZ2UpO1xuK1x0fSBlbHNlIGlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdFNldFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBUaGUgRUZJIHRhYmxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBpbmhlcml0ZWQgcG9pc29uIHRvZGF5LiAqL1xuK3ZvaWQgX19pbml0IGh3cG9pc29uX2luaXRfYm9vdCh2b2lkKVxuK3tcbitcdGVmaV9vZmZsaW5lX3BvaXNvbmVkX21lbW9yeSgpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG5AQCAtMTI4Niw2ICsxMzE3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGU5YzQyMDRiNzNhZGIuLjE2Nzg4YWVjNzU0Y2QgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI3MjIsNiArMjcyMiw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIFx0a2hvX21lbW9yeV9pbml0KCk7XG4gXG4gXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xuK1x0aHdwb2lzb25faW5pdF9ib290KCk7XG4gXHRtZW1faW5pdCgpO1xuIFx0a21lbV9jYWNoZV9pbml0KCk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTM6MDI6MjAuMTU3NTAxOTc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NDY5NjEzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBFRkkgUG9pc29uZWQgTWVtb3J5IFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZvY3VzIGlzIG9uIEtNU0FOJ3MgcHJpbWFyeSBjb25jZXJuczogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGFjcm9zcyBzdGFjaywgaGVhcCwgYW5kIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCBhc3NvY2lhdGVkIGZpbGVzLCBwcmltYXJpbHkgY2VudGVyZWQgYXJvdW5kIGEgbWVtb3J5IHBvaXNvbmluZyBtZWNoYW5pc20gd2l0aGluIHRoZSBFRkkgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhbGxvY2F0aW5nIGEgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBzdHJ1Y3R1cmUuIE5vdGFibHksIGluIGBlZmlfcG9pc29uX2FsbG9jYCwgdGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBhbmQgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIHdpdGggYHBtLVx1MDAzZXZlcnNpb24gPSAxO2AsIGBwbS1cdTAwM2V1bml0X3NpemUgPSAuLi47YCwgYHBtLVx1MDAzZXNpemUgPSAuLi47YCwgYW5kIGNydWNpYWxseSwgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtgLiBUaGlzIGlzIGEgc3Ryb25nIGluZGljYXRvciBvZiBjYXJlZnVsIGluaXRpYWxpemF0aW9uLiBTbywgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgZnVsbHkgdGFrZW4gY2FyZSBvZi5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGNhbGxzIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGZvciBleGFtcGxlLCBgZWZpX3BvaXNvbl9pbml0YCwgYGVmaV9wb2lzb25fcmVhZF9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl93YWxrX2NodW5rYC4gVGhlc2UgZnVuY3Rpb25zIG1hcCwgcmVhZCwgYW5kIHByb2Nlc3MgdGhpcyBtZW1vcnkgYnV0IGFsbCBvZiB0aGVtIGFyZSB1dGlsaXppbmcgZnVuY3Rpb25zIHRoYXQgcHJvcGVybHkgaW5pdGlhbGl6ZSByZWxldmFudCB2YXJpYWJsZXMuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGRhdGEgaXMgcHJpbWFyaWx5IHVzZWQgd2l0aGluIHRoZSBFRkkgY29udGV4dCBhbmQgZHVyaW5nIGVhcmx5IGJvb3QsIGludGVyYWN0aW5nIHdpdGggRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVzLiBUaGVyZSdzIG5vIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIChubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgY2FsbHMpIGFuZCBubyBvYnZpb3VzIGRhdGEgdHJhbnNmZXIuIFRoaXMgbWluaW1pemVzIHRoZSByaXNrIG9mIGluZm8tbGVha3MuXG5cbk5vdywgSSdtIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgbWlzc2VkIGluaXRpYWxpemF0aW9uIHNjZW5hcmlvcy4gSSdtIGNoZWNraW5nIGtleSB2YXJpYWJsZXMuIGBlZmlfZ2V0X3JhbV90b3BgIGluaXRpYWxpemVzIGByYW1fdG9wYC4gYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKClgJ3MgYHJhbV90b3BgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBJbiBgZWZpX3BvaXNvbl9yZWFkX2dlb21ldHJ5YCwgaWYgdGhlIGB2YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgZ2AgaXMgaW5pdGlhbGl6ZWQuIEluIGBlZmlfb2ZmbGluZV9wb2lzb25lZF9tZW1vcnkoKWAsIGBnYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSdtIGFsc28gbG9va2luZyBpbnRvIGBlZmlfcG9pc29uX3dhbGtfY2h1bmtgLCB3aGljaCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBUaGVyZSBhcmUgbm8gcmVhZGlseSBhcHBhcmVudCBpc3N1ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgZGlyZWN0IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXItc3BhY2UuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBzZWVtIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiBjb3JyZWN0bHkuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGZvY3VzIG9uIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMuIFBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd291bGQgbW9yZSBsaWtlbHkgaW52b2x2ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBhbHJlYWR5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIG90aGVyIGNvbW1vbiBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IE5lZWRzS01TQU4gPSBmYWxzZS4gSSBkb24ndCBiZWxpZXZlIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIEkgd2lsbCBkb3VibGUtY2hlY2sgYGVmaV9wb2lzb25fYWxsb2NgIGFuZCBgZWZpX2dldF9yYW1fdG9wYCBmb3IgYW55IGxhc3QgbWludXRlIGluY29uc2lzdGVuY2llcy4gQWgsIGBlZmlfcG9pc29uX2FsbG9jYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIHV0aWxpemVzIGBfX2ZyZWVgIGNsZWFudXAgYXR0cmlidXRlIHdoaWNoIGluZGljYXRlcyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDcsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEzOjAyOjM5LjYyNzExOTgzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciByZWNvcmRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc28gdGhhdCB0aGV5IGNhbiBiZSBob25vcmVkIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBUaGUgbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIChgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGluY2x1ZGluZyBhIGBtZW1zZXRgIG9mIHRoZSB0cmFpbGluZyBiaXRtYXAuIEFsbCBzdGFjayB2YXJpYWJsZXMgdXNlZCBmb3IgZ2VvbWV0cnkgYW5kIHNpemluZyAoYHJhbV90b3BgLCBgYml0bWFwX3NpemVgLCBgc3RydWN0IGVmaV9wb2lzb25fZ2VvbWV0cnkgZ2AsIGBucl91bml0c2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIG9ubHkgYWNjZXNzZWQgb24gc3VjY2VzcyBwYXRocyB3aGVyZSB0aGV5IGhhdmUgYmVlbiBwb3B1bGF0ZWQuIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RscykgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2dpY2FsIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcmVjb3JkaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZCBhY3Jvc3Mga2V4ZWMgcmVib290cy4gVGhlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiAoYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBpbmNsdWRpbmcgYSBgbWVtc2V0YCBvZiB0aGUgdHJhaWxpbmcgYml0bWFwLiBBbGwgc3RhY2sgdmFyaWFibGVzIHVzZWQgZm9yIGdlb21ldHJ5IGFuZCBzaXppbmcgKGByYW1fdG9wYCwgYGJpdG1hcF9zaXplYCwgYHN0cnVjdCBlZmlfcG9pc29uX2dlb21ldHJ5IGdgLCBgbnJfdW5pdHNgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBvbmx5IGFjY2Vzc2VkIG9uIHN1Y2Nlc3MgcGF0aHMgd2hlcmUgdGhleSBoYXZlIGJlZW4gcG9wdWxhdGVkLiBUaGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMpIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[1] Phase: Succeeded StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 13:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 13:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2] Phase: Succeeded StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 13:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 13:03:02 +0000 UTC FinishedAt: 2026-08-26 13:03:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowbd9vg/series-workflowbd9vg-convert-artifact-930361434/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 13:03:12 +0000 UTC FinishedAt: 2026-08-26 13:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 13:03:12 +0000 UTC FinishedAt: 2026-08-26 13:19:32 +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:*8893ccec-2bd6-4212-b920-050562ca3610,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-workflowbd9vg/series-workflowbd9vg-convert-artifact-930361434/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": "2f856c82-2c36-4388-884d-210eb16dfa4e", "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-workflowbd9vg/series-workflowbd9vg-build-action-3567412488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 13:03:12 +0000 UTC FinishedAt: 2026-08-26 13:19:22 +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:*8893ccec-2bd6-4212-b920-050562ca3610,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-workflowbd9vg/series-workflowbd9vg-convert-artifact-930361434/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": "2f856c82-2c36-4388-884d-210eb16dfa4e", "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-workflowbd9vg/series-workflowbd9vg-build-action-3567412488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 13:19:32 +0000 UTC FinishedAt: 2026-08-26 13:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 13:19:32 +0000 UTC FinishedAt: 2026-08-26 13:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 13:19:32 +0000 UTC FinishedAt: 2026-08-26 13:19:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 13:19:32 +0000 UTC FinishedAt: 2026-08-26 13:19:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowbd9vg/series-workflowbd9vg-convert-artifact-3229558965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 13:19:42 +0000 UTC FinishedAt: 2026-08-26 13:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 13:19:42 +0000 UTC FinishedAt: 2026-08-26 13:21:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f856c82-2c36-4388-884d-210eb16dfa4e,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-workflowbd9vg/series-workflowbd9vg-build-action-3567412488/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-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 13:21:48 +0000 UTC FinishedAt: 2026-08-26 13:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 13:21:48 +0000 UTC FinishedAt: 2026-08-26 13:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 13:21:48 +0000 UTC FinishedAt: 2026-08-26 13:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 13:21:48 +0000 UTC FinishedAt: 2026-08-26 13:37:37 +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:*8893ccec-2bd6-4212-b920-050562ca3610,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-workflowbd9vg/series-workflowbd9vg-convert-artifact-3229558965/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": "75358575-8885-4ae5-ab7d-df94d01bd757", "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-workflowbd9vg/series-workflowbd9vg-build-action-1426807233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 13:21:48 +0000 UTC FinishedAt: 2026-08-26 13:37:27 +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:*8893ccec-2bd6-4212-b920-050562ca3610,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-workflowbd9vg/series-workflowbd9vg-convert-artifact-3229558965/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": "75358575-8885-4ae5-ab7d-df94d01bd757", "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-workflowbd9vg/series-workflowbd9vg-build-action-1426807233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 13:37:37 +0000 UTC FinishedAt: 2026-08-26 13:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 13:37:37 +0000 UTC FinishedAt: 2026-08-26 13:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 13:37:37 +0000 UTC FinishedAt: 2026-08-26 13:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 13:37:37 +0000 UTC FinishedAt: 2026-08-26 13:39:28 +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:*75358575-8885-4ae5-ab7d-df94d01bd757,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-workflowbd9vg/series-workflowbd9vg-build-action-1426807233/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-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},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:*2f856c82-2c36-4388-884d-210eb16dfa4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75358575-8885-4ae5-ab7d-df94d01bd757,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-workflowbd9vg/series-workflowbd9vg-build-action-3567412488/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-workflowbd9vg/series-workflowbd9vg-build-action-1426807233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 13:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 13:39:37 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},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-workflowbd9vg/series-workflowbd9vg-convert-artifact-4109847194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 13:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 13:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 13:39:32 +0000 UTC FinishedAt: 2026-08-26 13:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 13:39:42 +0000 UTC FinishedAt: 2026-08-26 16:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd9vg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["efi_hwpoison_record_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","EFI_STUB","MEMORY_FAILURE"],"series_id":"d43ca8ef-218e-473f-ac4b-22688b028cd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 13:39:42 +0000 UTC FinishedAt: 2026-08-26 16:42:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f856c82-2c36-4388-884d-210eb16dfa4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75358575-8885-4ae5-ab7d-df94d01bd757,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-workflowbd9vg/series-workflowbd9vg-build-action-3567412488/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-workflowbd9vg/series-workflowbd9vg-build-action-1426807233/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-workflowbd9vg/series-workflowbd9vg-convert-artifact-4109847194/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,}