Name: series-workflowcctld Phase: Succeeded StartedAt: 2026-08-21 10:41:00 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[0] Phase: Succeeded StartedAt: 2026-08-21 10:41:00 +0000 UTC FinishedAt: 2026-08-21 11:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 10:41:00 +0000 UTC FinishedAt: 2026-08-21 11:00:17 +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": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB" ], "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": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB" ], "series_id": "022b9980-ba2a-4efa-9918-9424e8ec0cfa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn", "efi_reserve_poisoned_memory", "install_poisoned_memory_table", "efi_get_ram_top" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUmIzM0OywKICAgICYjMzQ7ZWZpX2dldF9yYW1fdG9wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZSBgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgaXMgYWxsb2NhdGVkIGluIGBlZmlfcG9pc29uX2FsbG9jKClgIGFuZCBhbGwgaXRzIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBmbGV4aWJsZSBgYml0bWFwYCBhcnJheSwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKHRoZSBmaWVsZHMgYXJlIGFzc2lnbmVkIGFuZCB0aGUgYml0bWFwIGlzIHplcm9lZCB1c2luZyBgbWVtc2V0YCkuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIHRoaXMgdGFibGUgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgYml0bWFwIGhhbmRsaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWMzNjUxYzY4YjdhZTA3MWY0NWRlNzdiYzlmYjRkNzkwNDRmYTA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjU4OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcbiBcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxuIFx0ICBhbGxvd3MgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGFjY2VzcyB0aGUgaW5qZWN0ZWQgc2VjcmV0cy5cbiBcbiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHRib29sIFwmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlY1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzXCYjMzQ7XG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQmIzQzOz0gZWFybHljb24ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKVx0XHQmIzQzOz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQmIzQzOz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0JiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm9cbiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQmIzQzOz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbmluZGV4IDAzMjdhMzlkMzFmYTUuLjc0NzRlZWViYjBhZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0LnBvaXNvbmVkX21lbW9yeVx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxuJiM0MzsjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcJiMzNDtVbmFjY2VwdGVkXCYjMzQ7XHR9LFxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHR7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnBvaXNvbmVkX21lbW9yeSxcdFwmIzM0O1BPSVNPTlwmIzM0O1x0fSxcbiYjNDM7I2VuZGlmXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXG4gXHR7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELFx0XHUwMDI2cHJpbWFyeV9kaXNwbGF5X3RhYmxlXHRcdFx0fSxcbiAjZW5kaWZcbkBAIC04MDYsNiAmIzQzOzgxMiw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7XG4mIzQzO1xuIFx0aWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xuIFx0XHRlZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwmIzM0Oyk7XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzOy8qIENhcCBvbiB0aGUgYml0bWFwOyBhIHNwYW4gdG9vIHdpZGUgdG8gZml0IGdldHMgYSBjb2Fyc2VyIHVuaXQgaW5zdGVhZC4gKi9cbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFXHRTWl8xTVxuJiM0MzsjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVx0U1pfMUdcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJpdG1hcCBnZW9tZXRyeSBmb3IgYSBnaXZlbiB0b3Agb2YgUkFNLiBUaGUgYml0bWFwIHN0YXJ0cyBhdCBhZGRyZXNzIDAsIHNvXG4mIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uXG4mIzQzOyAqIEluIHRoZSBmb2xsb3dpbmcgY29kZSwgYSBcJiMzNDt1bml0XCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZVxuJiM0MzsgKiBiaXRtYXAgYml0IGNvdmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4mIzQzO1x0dTMyIHVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcdTAwM2UgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdW5pdF9zaXplIFx1MDAzYyBFRklfUE9JU09OX01BWF9VTklUX1NJWkUpIHtcbiYjNDM7XHRcdG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCAyKTtcbiYjNDM7XHRcdHVuaXRfc2l6ZSAqPSAyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XHRyZXR1cm4gdW5pdF9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuJiM0MztcdFx0XHQgICAgIHNpemVvZigqcG0pICYjNDM7IGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbiYjNDM7XHRwbS1cdTAwM2V1bml0X3NpemUgPSB1bml0X3NpemU7XG4mIzQzO1x0cG0tXHUwMDNlcGh5c19iYXNlID0gMDtcbiYjNDM7XHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4mIzQzO1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXG4mIzQzOyAqIGF2YWlsYWJsZVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1x0dTMyIHVuaXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuJiM0MztcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuJiM0MztcdGlmIChwbSkge1xuJiM0MztcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbiYjNDM7XHRcdFx0ZWZpX2VycihcJiMzNDtVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlZmlfZ2V0X3JhbV90b3AoXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9lcnIoXCYjMzQ7RmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dW5pdF9zaXplID0gZWZpX3BvaXNvbl9nZW9tZXRyeShyYW1fdG9wLCBcdTAwMjZiaXRtYXBfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uYjVlMTliYTUwZGRhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBjaGFyICplZmlfY29udmVydF9jbWRsaW5lKGVmaV9sb2FkZWRfaW1hZ2VfdCAqaW1hZ2UpO1xuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdFx0XHRcdGJvb2wgaW5zdGFsbF9jZmdfdGJsKTtcbiBcbiYjNDM7ZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XG4mIzQzO1xuIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuQEAgLTExNjksNiAmIzQzOzExNzEsMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5AQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdHJldHVybiBFRklfU1VDQ0VTUztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXG4mIzQzOyAqIEB0b3A6XHRvbiByZXR1cm4sIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgbWVtb3J5IG1hcCBlbnRyeSB0aGF0IGJlY29tZXNcbiYjNDM7ICpcdFx0dXNhYmxlIFJBTVxuJiM0MzsgKlxuJiM0MzsgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XG4mIzQzOyAqIHNldHVwX2U4MjAoKSBtYXBzIHRvIEU4MjBfVFlQRV9SQU0sIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhbnkgb2ZcbiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXG4mIzQzOyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcbiYjNDM7ICogb2YgbWF4X3Bmbiwgd2hpY2ggaXMgb25seSBzZXQgb25jZSB0aGUga2VybmVsIHByb3BlciBpcyB1cC5cbiYjNDM7ICpcbiYjNDM7ICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xuJiM0MzsgKiBpcyBub3QgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XHRzdGF0dXMgY29kZVxuJiM0MzsgKi9cbiYjNDM7ZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdHU2NCByYW1fdG9wID0gMDtcbiYjNDM7XHRpbnQgaSwgbnJfZGVzYztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4mIzQzO1xuJiM0MztcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbiYjNDM7XHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbiYjNDM7XHRcdGNhc2UgRUZJX0xPQURFUl9EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuJiM0MztcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wKVxuJiM0MztcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4mIzQzO1xuJiM0MztcdCp0b3AgPSByYW1fdG9wO1xuJiM0MztcdHJldHVybiBFRklfU1VDQ0VTUztcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xuICAqIEBzaXplOlx0bWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiYjNDM7XG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0MThjNmIzYWFiODFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXG4mIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcbiYjNDM7ICogaGFyZHdhcmUtcG9pc29uZWQgZnJhbWVzIHNvIHRoZSBuZXh0IGtleGVjIGtlcm5lbCBjYW4ga2VlcCB0aGVtIG91dCBvZiBpdHNcbiYjNDM7ICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcbiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcbiYjNDM7ICogYWxsb2NhdG9yIGNvbWVzIHVwLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2VmaTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuJiM0MzsvKiBBIG5vbi1lbXB0eSBiaXRtYXAgb24gYSBwb3dlci1vZi0yIGdyaWQgdGhhdCBwaHlzX2Jhc2UgYWN0dWFsbHkgc2l0cyBvbi4gKi9cbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwbS1cdTAwM2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cdTAwM2V1bml0X3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVNfQUxJR05FRChwbS1cdTAwM2VwaHlzX2Jhc2UsIHBtLVx1MDAzZXVuaXRfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSByYW5nZSB0aGUgYml0bWFwIGNsYWltcyB0byBkZXNjcmliZSBoYXMgdG8gZml0IGluIGEgdTY0LiAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHR1NjQgbmJpdHMsIHNwYW47XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcdTAwMjZuYml0cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS1cdTAwM2V1bml0X3NpemUsIFx1MDAyNnNwYW4pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cdTAwM2VwaHlzX2Jhc2UsIHNwYW4sIFx1MDAyNnNwYW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgdGFibGUgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBrZXJuZWwgaW4gdGhlIGtleGVjIGNoYWluLFxuJiM0MzsgKiBzbyBjaGVjayBpdHMgZ2VvbWV0cnkgYmVmb3JlIGRvaW5nIGFueSBhcml0aG1ldGljIHdpdGggaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIHRoZSBoZWFkZXIgdG8gbGVhcm4gdGhlIGJpdG1hcCBzaXplLCB0aGVuIG1hcCB0aGUgd2hvbGUgdGFibGUuICovXG4mIzQzO1x0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdG1lbXVubWFwKHBtKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzaXplID0gcG0tXHUwMDNlc2l6ZTtcbiYjNDM7XHRtZW11bm1hcChwbSk7XG4mIzQzO1xuJiM0MztcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLFxuJiM0MztcdFx0XHQgICAgICBNRU1SRU1BUF9XQik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuJiM0MztcbiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi9cbiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XG4mIzQzO1x0dTY0IHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSkgLyBlZmlfcG9pc29uLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHRpZiAodW5pdCBcdTAwM2U9ICh1NjQpZWZpX3BvaXNvbi1cdTAwM2VzaXplICogQklUU19QRVJfQllURSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gdW5pdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVjb3JkIGEgaGFyZHdhcmUtcG9pc29uZWQgZnJhbWUgc28gdGhlIG5leHQga2VybmVsIGtlZXBzIGl0cyB1bml0IG91dCBvZiB0aGVcbiYjNDM7ICogYWxsb2NhdG9yLiBtZW1vcnlfZmFpbHVyZSgpIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGZyYW1lIGZyb20gdGhpcyBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IG9uZSBiaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzb1xuJiM0MzsgKiBhbiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRsb25nIHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuJiM0MztcdGlmICh1bml0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcHBtID0gZWZpLnBvaXNvbmVkX21lbW9yeSwgcGh5c19iYXNlLCB1bml0X3NpemUsIGJpdG1hcF9zaXplLCBvZmY7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl91bml0cyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcG0gPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cG0gPSBlYXJseV9tZW1yZW1hcChwcG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXG4mIzQzO1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7XHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlzX2Jhc2UgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4mIzQzO1x0dW5pdF9zaXplID0gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdGJpdG1hcF9zaXplID0gcG0tXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cbiYjNDM7XHRtZW1ibG9ja19yZXNlcnZlKFBBR0VfQUxJR05fRE9XTihwcG0pLFxuJiM0MztcdFx0XHQgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC1cbiYjNDM7XHRcdFx0IFBBR0VfQUxJR05fRE9XTihwcG0pKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuXG4mIzQzO1x0ICogbWVtYmxvY2subWVtb3J5IGlzIG5vdCBwb3B1bGF0ZWQgdGhpcyBlYXJseSwgc28gbWVtYmxvY2tfcmVtb3ZlKClcbiYjNDM7XHQgKiBhbmQgbWVtYmxvY2tfbWFya19ub21hcCgpIHdvdWxkIGJlIG5vLW9wczsgYSByZXNlcnZhdGlvbiBpcyB3aGF0XG4mIzQzO1x0ICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nICptYXA7XG4mIzQzO1xuJiM0MztcdFx0bWFwID0gZWFybHlfbWVtcmVtYXAocHBtICYjNDM7IG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgYml0bWFwKSAmIzQzOyBvZmYsIGNodW5rKTtcbiYjNDM7XHRcdGlmICghbWFwKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbiYjNDM7XHRcdFx0dTY0IHVuaXQgPSBvZmYgKiBCSVRTX1BFUl9CWVRFICYjNDM7IGJpdDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICYjNDM7IHVuaXQgKiB1bml0X3NpemUsIHVuaXRfc2l6ZSk7XG4mIzQzO1x0XHRcdG5yX3VuaXRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX3VuaXRzKVxuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRucl91bml0cywgdW5pdF9zaXplIFx1MDAzZVx1MDAzZSAxMCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgJiM0Mzs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbiYjNDM7I2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4mIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcbiYjNDM7XHR1MzJcdFx0dmVyc2lvbjtcbiYjNDM7XHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuJiM0MztcdHU2NFx0XHRwaHlzX2Jhc2U7XHQvKiBwaHlzIGFkZHJlc3MgY292ZXJlZCBieSBiaXQgMCAqL1xuJiM0MztcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcbiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICYjNDM7NDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTI4Niw2ICYjNDM7MTI4Nyw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4mIzQzO1x0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG4mIzQzO1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDssCiAgICAmIzM0O2VmaV9nZXRfcmFtX3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJYm9vbCAmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgT1ZNRl9ERUJVR19MT0cKIAlib29sICYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmcyYjMzQ7CiAJZGVwZW5kcyBvbiBFRkkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKaW5kZXggOGVmYmNmNjk5ZTRmZi4uMDVkMGE0OTA5MjNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKQEAgLTQzLDQgJiM0Mzs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pCQkmIzQzOz0gZWFybHljb24ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pCQkmIzQzOz0gY3Blci1hcm0ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9YODYpCQkmIzQzOz0gY3Blci14ODYubwogb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKQkJJiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm8KJiM0MztvYmotJChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkJJiM0Mzs9IHBvaXNvbi5vCiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKQkJJiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTU1LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBlZmkgX19yZWFkX21vc3RseSBlZmkgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJLnVuYWNjZXB0ZWQJCT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwkucG9pc29uZWRfbWVtb3J5CT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKJiM0MzsjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGVmaSk7CiAKQEAgLTY0Niw2ICYjNDM7NjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAl7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnVuYWNjZXB0ZWQsCSYjMzQ7VW5hY2NlcHRlZCYjMzQ7CX0sCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJe0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCwJJmFtcDtlZmkucG9pc29uZWRfbWVtb3J5LAkmIzM0O1BPSVNPTiYjMzQ7CX0sCiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUIKIAl7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELAkmYW1wO3ByaW1hcnlfZGlzcGxheV90YWJsZQkJCX0sCiAjZW5kaWYKQEAgLTgwNiw2ICYjNDM7ODEyLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsCiAJCX0KIAl9CiAKJiM0MzsJZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwpAQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqLwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRQlTWl8xTQomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFCVNaXzFHCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzbwomIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uCiYjNDM7ICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhICYjMzQ7dW5pdCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZQomIzQzOyAqIGJpdG1hcCBiaXQgY292ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7CiYjNDM7CXUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTsKJiM0MzsKJiM0MzsJd2hpbGUgKERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSkgJmd0OyBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVuaXRfc2l6ZSAmbHQ7IEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkgewomIzQzOwkJbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIDIpOwomIzQzOwkJdW5pdF9zaXplICo9IDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsJcmV0dXJuIHVuaXRfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsCiYjNDM7CQkJCQkJCSAgdTMyIHVuaXRfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gdW5pdF9zaXplOwomIzQzOwlwbS0mZ3Q7cGh5c19iYXNlID0gMDsKJiM0MzsJcG0tJmd0O3NpemUgPSBiaXRtYXBfc2l6ZTsKJiM0MzsJbWVtc2V0KHBtLSZndDtiaXRtYXAsIDAsIGJpdG1hcF9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBtOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlCiYjNDM7ICogYXZhaWxhYmxlCiYjNDM7ICovCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CXUzMiB1bml0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgJmFtcDtiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMDk0LDYgJiM0MzsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTsKIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAkJCQlib29sIGluc3RhbGxfY2ZnX3RibCk7CiAKJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTsKJiM0MzsKIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgbWF4KTsKIApAQCAtMTE2OSw2ICYjNDM7MTE3MSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfQogCiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jCmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYwpAQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAlyZXR1cm4gRUZJX1NVQ0NFU1M7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNCiYjNDM7ICogQHRvcDoJb24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzCiYjNDM7ICoJCXVzYWJsZSBSQU0KJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXQKJiM0MzsgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mCiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzCiYjNDM7ICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZQomIzQzOyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvCiYjNDM7ICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJc3RhdHVzIGNvZGUKJiM0MzsgKi8KJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKIC8qKgogICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXMKICAqIEBzaXplOgltaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYQomIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHMKJiM0MzsgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0cwomIzQzOyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsCiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGUKJiM0MzsgKiBhbGxvY2F0b3IgY29tZXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2VmaTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbG9nMi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzOy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKCFwbS0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHBtLSZndDt1bml0X3NpemUgJmx0OyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBJU19BTElHTkVEKHBtLSZndDtwaHlzX2Jhc2UsIHBtLSZndDt1bml0X3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0cywgc3BhbjsKJiM0MzsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS0mZ3Q7c2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCAmYW1wO25iaXRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS0mZ3Q7cGh5c19iYXNlLCBzcGFuLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sCiYjNDM7ICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XG4mIzM0OywKJiM0MzsJCQlwbS0mZ3Q7dmVyc2lvbik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi8KJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IHBtLSZndDtzaXplOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLAomIzQzOwkJCSAgICAgIE1FTVJFTUFQX1dCKTsKJiM0MzsJV0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi8KJiM0MztzdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTsKJiM0MzsJdTY0IHVuaXQ7CiYjNDM7CiYjNDM7CWlmIChhZGRyICZsdDsgZWZpX3BvaXNvbi0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLSZndDtwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSAodTY0KWVmaV9wb2lzb24tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZQomIzQzOyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvCiYjNDM7ICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwOwomIzQzOwomIzQzOwlpZiAocHBtID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5c19iYXNlID0gcG0tJmd0O3BoeXNfYmFzZTsKJiM0MzsJdW5pdF9zaXplID0gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJYml0bWFwX3NpemUgPSBwbS0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi8KJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSwKJiM0MzsJCQkgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC0KJiM0MzsJCQkgUEFHRV9BTElHTl9ET1dOKHBwbSkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuCiYjNDM7CSAqIG1lbWJsb2NrLm1lbW9yeSBpcyBub3QgcG9wdWxhdGVkIHRoaXMgZWFybHksIHNvIG1lbWJsb2NrX3JlbW92ZSgpCiYjNDM7CSAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXQKJiM0MzsJICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MzsJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7CiYjNDM7CQl1bnNpZ25lZCBsb25nICptYXA7CiYjNDM7CiYjNDM7CQltYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJICAgIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CQlpZiAoIW1hcCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJCXU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSAmIzQzOyBiaXQ7CiYjNDM7CiYjNDM7CQkJbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgJiM0MzsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJCQlucl91bml0cyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfdW5pdHMpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xuJiMzNDssCiYjNDM7CQkJbnJfdW5pdHMsIHVuaXRfc2l6ZSAmZ3Q7Jmd0OyAxMCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MCkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi8KJiM0MzsJdTY0CQlzaXplOwkJLyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwliaXRtYXBbXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkUJU1pfMk0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLjFjYzRlOTJlOTg3NDggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEyODYsNiAmIzQzOzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYXJkd2FyZSBQb2lzb25lZCBQYWdlIEtleGVjIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIGF0dGVtcHRpbmcgdG8gcHJvcGFnYXRlIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBhY3Jvc3MgYSBrZXhlYyByZWJvb3QgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEludGVyZXN0aW5nIGFwcHJvYWNoLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBudWFuY2VzIG9mIHRoaXMgdG8gc2VlIGlmIGl0JiMzOTtzIGFkZGluZyBhbnkgdmFsdWUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmlza3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGlzIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AsIHdoaWNoIGlzIGdvb2Q7IHNlcGFyYXRpbmcgdGhlIGxvZ2ljIGZyb20gdGhlIGNvcmUgRUZJIHN0dWIgaXMgc291bmQuIFRoZSBgS2NvbmZpZ2AgY2hhbmdlIGFuZCB0aGUgaG9vayBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5IGNhbGxpbmcgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbilgIHNlZW1zIGxpa2UgdGhlIGNydWNpYWwgc3RlcCB3aGVuIGEgcGFnZSBpcyBmbGFnZ2VkIGFzIHBvaXNvbmVkLiBUaGVuIHRoZSBFRkkgc3R1YiBpcyBiZWluZyBtb2RpZmllZCB0byBpbnN0YWxsIHRoaXMgcG9pc29uZWQgbWVtb3J5IHRhYmxlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBjYW4gdHJpZ2dlciBgbW0vbWVtb3J5LWZhaWx1cmUuY2Agd2l0aCBpbmplY3RlZCBtZW1vcnkgZmFpbHVyZXMgdGhyb3VnaCBgbWFkdmlzZWAgb3Igc3lzZnMsIHRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gQW5kLCBzaW5jZSBpdOKAmXMgRUZJIGJhc2VkLCB3ZSBuZWVkIHRvIGJvb3QgdGhlIGtlcm5lbCB2aWEgRUZJLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgd2F5IG9mIGRvaW5nIHRoaW5ncy4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGlzIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGNhbGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlLCBhbmQgd2hldGhlciB0aGUgb3RoZXIgYml0cyBhbmQgcGllY2VzIGFyZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQ/CgpJcyBmdXp6aW5nIHRoaXMgd29ydGh3aGlsZT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBuZXcgY29kZSBwYXRocyBpbiBib3RoIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBFRkkgYm9vdC4gVGhlIG5ldyBmdW5jdGlvbnMgYXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9wb2lzb25faW5pdGAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXJlIGFsbCBwb3RlbnRpYWwgdGFyZ2V0cy4KCkJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBpdCYjMzk7cyBub3QganVzdCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIHRoYXTigJlzIG5lZWRlZCwgaXQgZGVwZW5kcyBvbiBgRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUYC4gU28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIHRob3NlIGNvbmZpZ3MgdG9vLgoKTm93LCBhIHF1aWNrIGdyZXAgZm9yIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgYWNyb3NzIHRoZSBjb2RlYmFzZSBzaG91bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIGFueSBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gVGhhdCYjMzk7bGwgYmUgbXkgbmV4dCBzdGVwIGJlZm9yZSBhIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMDE9c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMC0gKi9cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEyMTp2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODY9dm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODc6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODgtI2Vsc2VcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4OT1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjkwOnN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyOTEtI2VuZGlmXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMjgyPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjkwLVx0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTE6XHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyOTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGb2N1czogRUZJIE1lbW9yeSBQb2lzb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBFRkkgbWVtb3J5IHBvaXNvbmluZyBmdW5jdGlvbmFsaXR5LiBSaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGNvbmNlbnRyYXRlIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLiBUaGVzZSBhcmUgcHJvYmFibHkgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIHdob2xlIG1lbW9yeSBwb2lzb25pbmcgc3lzdGVtIHdvcmtzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAgdGhvdWdoLCBJIHNob3VsZCBmaXJzdCBkZXRlcm1pbmUgd2hldGhlciBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgIGlzIHN0YXRpYyBvciBub3QsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyBteSBuZXh0IHF1aWNrIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM9ODA1PXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MjgtICovXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jOjgyOTp2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgzMC17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jPTE1Mz1lZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4MS1cdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jOjE4MjpcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTgzLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oPTExNzI9dm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3NC0jaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzU6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oLTExNzYtI2Vsc2VcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzc6c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3OC0jZW5kaWZcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmM9OTEyPXZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYy0xMDI1LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jOjEwMjY6XHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jLTEwMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVGSSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBFRkktcmVsYXRlZCBrZXJuZWwgY29kZS4gSSYjMzk7bSBzZWVpbmcgYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHBvaXNvbmluZywgYW5kIEkgd2FudCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBmaXQgdG9nZXRoZXIuIEZpcnN0LCBJJiMzOTt2ZSBnb3QgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGFuZCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYC4gVGhlbiwgSSBoYXZlIGBlZmlfZ2V0X3JhbV90b3BgIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jYCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGRldGVybWluaW5nIHRoZSB0b3Agb2YgdXNhYmxlIFJBTS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgbWVtb3J5IHBvaXNvbmluZyBuZWVkcyB0byBrbm93IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBtZW1vcnkgaXQgY2FuIHBsYXkgd2l0aC4gIEFuZCBmaW5hbGx5LCBJJiMzOTt2ZSBnb3QgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAgYW5kIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgaW4gYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBwb2lzb25pbmcgbWVjaGFuaXNtIGl0c2VsZi4gIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gYHBvaXNvbi5jYCBhbmQgZmlndXJlIG91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBtZW1vcnkgcG9pc29uaW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBlZmlfcG9pc29uX2luaXRgLiBMZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgZGVjbGFyZWQgc3RhdGljIHRvIGdhdWdlIGl0cyByZWFjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmlfcG9pc29uX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9NTg9ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtNzMtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo3NDpzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTc1LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy05Ny19XG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo5ODplYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHNpdHVhdGlvbiBmZWVscy4uLmZpeGVkLiBTdGFnbmFudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5LiBBaCwgYSBwb3NzaWJsZSBsZWFkISBMZXQgbWUgY2hlY2sgc29tZXRoaW5nOiBpcyB0aGlzIGBlZmlfcG9pc29uX2FsbG9jYCBmdW5jdGlvbiBkZWNsYXJlZCBhcyBzdGF0aWM/IFRoYXQgbWlnaHQgZXhwbGFpbiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IsIGlmIGl0JiMzOTtzIGdvdCByZXN0cmljdGVkIHNjb3BlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX3BvaXNvbl9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTc4OT1zdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MDQtLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4MDU6c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMtODA2LVx0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM9ODI5PXZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTg1MS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM6ODUyOlx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04NTMtXHRpZiAoIXBtKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEVGSSBQb2lzb25lZCBNZW1vcnkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgbmV3IHRhcmdldDogRUZJIHBvaXNvbmVkIG1lbW9yeS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLgoKSSBzZWUgdGhhdCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgIGFuZCBgZWZpX2dldF9yYW1fdG9wYCBhcmUgcGFydCBvZiB0aGUgRUZJIHN0dWIsIHdoaWNoIGlzIGEgYml0IG9mIGEgdHJpY2t5IGFyZWEuIFN5emthbGxlciBjYW4gcnVuIHRoZSBFRkkgc3R1YiBpZiB3ZSBib290IHZpYSBFRkksIGJ1dCBpdCYjMzk7cyBnZW5lcmFsbHkgbm90IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIGZ1enppbmcuIEluc3RlYWQsIHdlJiMzOTtyZSBsaWtlbHkgZnV6emluZyB0aGUga2VybmVsJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIEVGSSB0YWJsZXMsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGFuZCBgZWZpX3BvaXNvbl9pbml0YCBjb21lIGludG8gcGxheS4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIGdldHRpbmcgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gd2hhdCBjb25maWdzIGFyZSBuZWVkZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gYmUgY29tcHJlaGVuc2l2ZS4gSXQgbG9va3MgbGlrZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIGl0IGRlcGVuZHMgb24gYEVGSV9TVFVCYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGA2NEJJVGAsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHNwZWNpZnkgYWxsIG9mIHRob3NlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgRUZJX1NUVUJgIGFyZSBlbmFibGVkLCBidXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHRoZSBjcml0aWNhbCBvbmUuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBtYWluIG9uZS4KCkdpdmVuIHRoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBoYW5kbGVzIGFuIGB1bnNpZ25lZCBsb25nIHBmbmAsIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaW50ZXJmYWNlIHRvIHRhcmdldC4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCBhZGRzIG5ldyBsb2dpYyBhcm91bmQgbWVtb3J5LWZhaWx1cmUgYW5kIEVGSSBib290LgoKKipTbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOioqCgoqICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYAoqICAgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAKKiAgIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAKKiAgIGBlZmlfZ2V0X3JhbV90b3BgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MjUxPWNvbmZpZyBFRklfQ09DT19TRUNSRVRcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTI2NS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MjY2OmNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTI2Ny1cdGJvb2wgXCYjMzQ7Q2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzcwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIEVGSV9QT0lTT05FRF9NRU1PUlkgYW5kIFZlcmlmaWNhdGlvbiBvZiBBY3Rpb25fUmVzdWx0JiMzOTtzIFN0YXRpYyBOYXR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBhZGQgYEVGSV9QT0lTT05FRF9NRU1PUllgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBjcml0aWNhbCBhYm91dCBgYWN0aW9uX3Jlc3VsdGAuIEkgKnJlYWxseSogbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFjdGlvbl9yZXN1bHRgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgb3RoZXJ3aXNlIGFyZSBub3Qgc29tZXRoaW5nIEkgd2FudCB0byB0aGluayBhYm91dCByaWdodCBub3cuIEkgaGF2ZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhhdCBpbW1lZGlhdGVseSwgYW5kIEkgaGF2ZSBteSB0b29scyByZWFkeSB0byBnby4gSSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBjb21taXR0aW5nIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3Rpb25fcmVzdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oPTE4Mz1UUkFDRV9FVkVOVChjb21wYWN0X3JldHJ5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oOjIxMjpcdFRQX3ByaW50ayhcJiMzNDtvcmRlcj0lZCBwcmlvcml0eT0lcyBjb21wYWN0aW9uX3Jlc3VsdD0lcyByZXRyaWVzPSVkIG1heF9yZXRyaWVzPSVkIHNob3VsZF9yZXRyeT0lZFwmIzM0OyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMy1cdFx0XHRfX2VudHJ5LVx1MDAzZW9yZGVyLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI2OT1zdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4MS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4MjpzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgzLVx0XHRcdCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzAzPXN0YXRpYyBpbnQgcGFnZV9hY3Rpb24oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTY6XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIHBzLVx1MDAzZXR5cGUsIHJlc3VsdCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTctfVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjA4ND1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAxLVx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMDI6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMDMtXHRjYXNlIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEwOC1cdFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEKVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTA5Olx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMC1cdFx0ZWxzZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTExOlx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfSFVHRSwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMi1cdFx0cmV0dXJuIHJ2O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE0Mi1cdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTQzOlx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNDQtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTQ5LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTUwOlx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTEtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTc3PXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfZGV2X3BhZ2VtYXAodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXHRpZiAocmMgIT0gLUVPUE5PVFNVUFApXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfREFYLCByYyA/IE1GX0ZBSUxFRCA6IE1GX1JFQ09WRVJFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDYtXHRyZXR1cm4gcmM7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzIzPXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzQ3LVx0XHRpZiAoIW1mX2hhbmRsZWQpXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNDg6XHRcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfUEZOX01BUCwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzNDktXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYwLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYxOlx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfUEZOX01BUCwgTUZfUkVDT1ZFUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2Mi19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg5PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Ny1cdFx0XHRwdXRfcGFnZShwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ0ODpcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQ5LVx0XHRnb3RvIHVubG9ja19tdXRleDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NzgtXHRcdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDc5Olx0XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQlVERFksIHJlcyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0ODAtXHRcdH0gZWxzZSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0ODE6XHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0ODItXHRcdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTItXHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDkzOlx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTQtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ5Ni1cdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDk3Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTgtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0NC1cdFx0XHRwdXRfcGFnZShwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0NTpcdFx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOU1BMSVRfVEhQLCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ2LVx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OC1cdGlmICghaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhmb2xpbywgcCwgcGZuLCBmbGFncykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU5OTpcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDAtXHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA3LVx0ICAgIGZvbGlvLVx1MDAzZW1hcHBpbmcgPT0gTlVMTCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjA4Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1RSVU5DQVRFRF9MUlUsIE1GX0lHTk9SRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA5LVx0XHRnb3RvIHVubG9ja19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRm9jdXM6IFVFRkkgUG9pc29uZWQgTWVtb3J5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFVFRkkgbWVtb3J5IHBvaXNvbmluZyBpbXBsZW1lbnRhdGlvbi4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbWFya2luZyBhbmQgaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUsIGZvciBzb21lIHJlYXNvbiwgY29uc2lkZXJlZCAmIzM0O3BvaXNvbmVkJiMzNDsg4oCTIGxpa2VseSBzaWduaWZ5aW5nIHNvbWUgc29ydCBvZiBoYXJkd2FyZSBpc3N1ZSBvciBhIHJlZ2lvbiB0aGF0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIEkgZGVsdmUgZGVlcGVyLCBpcyBhYm91dCB0aGUgc2NvcGUgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBtZW1vcnkgcmVzZXJ2YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IHRoZSBwb2lzb25lZCBtZW1vcnkgaXMgZGVjbGFyZWQgYW5kIHN1YnNlcXVlbnRseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIElmIGl0IGlzIHN0YXRpYywgdGhlbiBteSBjb25jZXJucyByZWdhcmRpbmcgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcmUgYWxsZXZpYXRlZC4gSSB3aWxsIGJlZ2luIGJ5IHZlcmlmeWluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTcxNT1pbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy04MTQtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo4MTU6XHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTgxNi1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMjE9dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMzQtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMzU6dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMzYte1xuLS1cbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT1zdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4tLVxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg1LSNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg2OnZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg3LXZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODk6c3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvZWZpLmgtMTI5MC1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk4MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIEVGSSBwb2lzb25lZCBtZW1vcnkgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciBob3cgdG8gZW5hYmxlIGl0IHByb3Blcmx5LiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UuIEkgZG91YmxlLWNoZWNrZWQgdG8gYmUgc3VyZSwgYnV0IHRoZSBzdGF0aWMgZnVuY3Rpb25zLCBsaWtlIGBlZmlfcG9pc29uX2luaXRgLCBgZWZpX3BvaXNvbl90YWJsZV92YWxpZGAsIGBlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkYCwgYGVmaV9wb2lzb25fcmFuZ2VfdmFsaWRgLCBgZWZpX3BvaXNvbl91bml0YCwgYGVmaV9wb2lzb25fZ2VvbWV0cnlgLCBhbmQgYGVmaV9wb2lzb25fYWxsb2NgIGFyZW4mIzM5O3QgcGFydCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXNzdWUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgZGVwZW5kcyBvbiBgRUZJX1NUVUJgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYDY0QklUYC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgYE1FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgYEVGSV9QT0lTT05FRF9NRU1PUllgIHdvbiYjMzk7dCBiZSBlaXRoZXIsIGFuZCB2aWNlIHZlcnNhLiBJIHNob3VsZCBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBFRklfU1RVQmAganVzdCB0byBiZSBzYWZlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYEVGSV9TVFVCYCYjMzk7cyBsb2NhdGlvbiBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ2AsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVGSV9TVFVCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTYwMi1cbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cdGJvb2xcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDY2LVxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cdGJvb2xcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTA3LVx0Ym9vbCBcJiMzNDtFRkkgYm9vdCBzdHViIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjUwLVxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cdGJvb2xcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxuLS1cbmFyY2gveDg2L0tjb25maWctMTg5OC1cbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcbmFyY2gveDg2L0tjb25maWctMTkwMC1cdGJvb2wgXCYjMzQ7RUZJIHN0dWIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBnb3QgYEVGSV9TVFVCYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBvbiBteSBtaW5kLiBJIGtub3cgYm90aCBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBiZXR0ZXIgaW4gY29udGV4dC4gYEVGSV9TVFVCYCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvcHRpb24uCgpNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIGFuZCBJIGZpZ3VyZSB0aGUgcGxhY2UgdG8gc3RhcnQgd2l0aCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBTbywgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbW0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGZvciBhbnkgbWVtb3J5IHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMuIEkmIzM5O20gc3VyZSBJJiMzOTtsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgYWxsIGFib3V0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM3MQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRUZJIE1lbW9yeSBQb2lzb25pbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG1lbnRhbGx5IG9yZ2FuaXppbmcgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgRUZJX1NUVUJgLiBIYW5nIG9uLi4uIGBFRklfU1RVQmAgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIGJvb2xlYW5zLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLiBSaWdodCwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIG9uIGhhbmRsaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBFRkkgdGFibGUgdG8gc3RvcmUgdGhlIGJpdG1hcCBvZiBwb2lzb25lZCBtZW1vcnksIGFuZCB0aGVyZSBhcmUgaG9va3Mgd2l0aGluIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2VzLiBUaGVyZSBhcmUgYWxzbyBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiBmb3IgdGFibGUgYWxsb2NhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJvdGggZHVyaW5nIEVGSSBib290ICphbmQqIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBleHBsaWNpdGx5IGluamVjdGVkLCBmb3IgZXhhbXBsZSwgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gQ2xldmVyLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY29udHJpYnV0aW9uLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBhcmVhIGlzIGxpa2VseSB0byBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSBzZWUgdGhhdCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLiBUaGVzZSBhcmUgYWxsIGxvZ2ljYWwgYW5kIGV4cGVjdGVkIGNob2ljZXMsIHRhcmdldGluZyB0aGUgY29yZSBmdW5jdGlvbnMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVub3VnaCBmb3IgbXkgaW5pdGlhbCByZXZpZXcuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzIG9mIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDssCiAgICAmIzM0O2VmaV9nZXRfcmFtX3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUmIzM0OywKICAgICYjMzQ7ZWZpX2dldF9yYW1fdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY2FycnlpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gSXQgaW50cm9kdWNlcyBhIG5ldyBFRkkgY29uZmlnIHRhYmxlIHRvIHN0b3JlIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLCBob29rcyBpbnRvIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgcG9pc29uZWQgcGFnZXMsIGFuZCBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiB0byBhbGxvY2F0ZSBhbmQgaW5zdGFsbCB0aGUgdGFibGUuIFRoZSBuZXcgbG9naWMgaXMgcmVhY2hhYmxlIGR1cmluZyBFRkkgYm9vdCBhbmQgd2hlbiBtZW1vcnkgZmFpbHVyZXMgYXJlIGluamVjdGVkIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJYm9vbCAmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgT1ZNRl9ERUJVR19MT0cKIAlib29sICYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmcyYjMzQ7CiAJZGVwZW5kcyBvbiBFRkkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKaW5kZXggOGVmYmNmNjk5ZTRmZi4uMDVkMGE0OTA5MjNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKQEAgLTQzLDQgJiM0Mzs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pCQkmIzQzOz0gZWFybHljb24ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pCQkmIzQzOz0gY3Blci1hcm0ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9YODYpCQkmIzQzOz0gY3Blci14ODYubwogb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKQkJJiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm8KJiM0MztvYmotJChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkJJiM0Mzs9IHBvaXNvbi5vCiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKQkJJiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTU1LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBlZmkgX19yZWFkX21vc3RseSBlZmkgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJLnVuYWNjZXB0ZWQJCT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwkucG9pc29uZWRfbWVtb3J5CT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKJiM0MzsjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGVmaSk7CiAKQEAgLTY0Niw2ICYjNDM7NjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAl7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnVuYWNjZXB0ZWQsCSYjMzQ7VW5hY2NlcHRlZCYjMzQ7CX0sCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJe0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCwJJmFtcDtlZmkucG9pc29uZWRfbWVtb3J5LAkmIzM0O1BPSVNPTiYjMzQ7CX0sCiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUIKIAl7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELAkmYW1wO3ByaW1hcnlfZGlzcGxheV90YWJsZQkJCX0sCiAjZW5kaWYKQEAgLTgwNiw2ICYjNDM7ODEyLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsCiAJCX0KIAl9CiAKJiM0MzsJZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwpAQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqLwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRQlTWl8xTQomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFCVNaXzFHCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzbwomIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uCiYjNDM7ICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhICYjMzQ7dW5pdCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZQomIzQzOyAqIGJpdG1hcCBiaXQgY292ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7CiYjNDM7CXUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTsKJiM0MzsKJiM0MzsJd2hpbGUgKERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSkgJmd0OyBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVuaXRfc2l6ZSAmbHQ7IEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkgewomIzQzOwkJbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIDIpOwomIzQzOwkJdW5pdF9zaXplICo9IDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsJcmV0dXJuIHVuaXRfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsCiYjNDM7CQkJCQkJCSAgdTMyIHVuaXRfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gdW5pdF9zaXplOwomIzQzOwlwbS0mZ3Q7cGh5c19iYXNlID0gMDsKJiM0MzsJcG0tJmd0O3NpemUgPSBiaXRtYXBfc2l6ZTsKJiM0MzsJbWVtc2V0KHBtLSZndDtiaXRtYXAsIDAsIGJpdG1hcF9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBtOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlCiYjNDM7ICogYXZhaWxhYmxlCiYjNDM7ICovCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CXUzMiB1bml0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgJmFtcDtiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMDk0LDYgJiM0MzsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTsKIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAkJCQlib29sIGluc3RhbGxfY2ZnX3RibCk7CiAKJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTsKJiM0MzsKIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgbWF4KTsKIApAQCAtMTE2OSw2ICYjNDM7MTE3MSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfQogCiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jCmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYwpAQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAlyZXR1cm4gRUZJX1NVQ0NFU1M7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNCiYjNDM7ICogQHRvcDoJb24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzCiYjNDM7ICoJCXVzYWJsZSBSQU0KJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXQKJiM0MzsgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mCiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzCiYjNDM7ICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZQomIzQzOyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvCiYjNDM7ICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJc3RhdHVzIGNvZGUKJiM0MzsgKi8KJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKIC8qKgogICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXMKICAqIEBzaXplOgltaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYQomIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHMKJiM0MzsgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0cwomIzQzOyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsCiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGUKJiM0MzsgKiBhbGxvY2F0b3IgY29tZXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2VmaTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbG9nMi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzOy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKCFwbS0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHBtLSZndDt1bml0X3NpemUgJmx0OyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBJU19BTElHTkVEKHBtLSZndDtwaHlzX2Jhc2UsIHBtLSZndDt1bml0X3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0cywgc3BhbjsKJiM0MzsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS0mZ3Q7c2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCAmYW1wO25iaXRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS0mZ3Q7cGh5c19iYXNlLCBzcGFuLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sCiYjNDM7ICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XG4mIzM0OywKJiM0MzsJCQlwbS0mZ3Q7dmVyc2lvbik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi8KJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IHBtLSZndDtzaXplOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLAomIzQzOwkJCSAgICAgIE1FTVJFTUFQX1dCKTsKJiM0MzsJV0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi8KJiM0MztzdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTsKJiM0MzsJdTY0IHVuaXQ7CiYjNDM7CiYjNDM7CWlmIChhZGRyICZsdDsgZWZpX3BvaXNvbi0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLSZndDtwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSAodTY0KWVmaV9wb2lzb24tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZQomIzQzOyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvCiYjNDM7ICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwOwomIzQzOwomIzQzOwlpZiAocHBtID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5c19iYXNlID0gcG0tJmd0O3BoeXNfYmFzZTsKJiM0MzsJdW5pdF9zaXplID0gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJYml0bWFwX3NpemUgPSBwbS0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi8KJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSwKJiM0MzsJCQkgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC0KJiM0MzsJCQkgUEFHRV9BTElHTl9ET1dOKHBwbSkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuCiYjNDM7CSAqIG1lbWJsb2NrLm1lbW9yeSBpcyBub3QgcG9wdWxhdGVkIHRoaXMgZWFybHksIHNvIG1lbWJsb2NrX3JlbW92ZSgpCiYjNDM7CSAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXQKJiM0MzsJICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MzsJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7CiYjNDM7CQl1bnNpZ25lZCBsb25nICptYXA7CiYjNDM7CiYjNDM7CQltYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJICAgIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CQlpZiAoIW1hcCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJCXU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSAmIzQzOyBiaXQ7CiYjNDM7CiYjNDM7CQkJbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgJiM0MzsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJCQlucl91bml0cyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfdW5pdHMpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xuJiMzNDssCiYjNDM7CQkJbnJfdW5pdHMsIHVuaXRfc2l6ZSAmZ3Q7Jmd0OyAxMCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MCkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi8KJiM0MzsJdTY0CQlzaXplOwkJLyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwliaXRtYXBbXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkUJU1pfMk0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLjFjYzRlOTJlOTg3NDggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEyODYsNiAmIzQzOzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTEKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZJIFBvaXNvbmVkIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgdG8gaGFuZGxlIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYy4gSSBzZWUgdGhleSYjMzk7cmUgYWRkaW5nIGEgbmV3IEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdCwgYSBuZXcgdGFibGUgdG8gdHJhY2sgdGhlIHBvaXNvbmVkIG1lbW9yeS4KCkkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgY29kZSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSB0YWJsZSBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IFRoZXkmIzM5O3JlIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBzdGFuZGFyZCBFRkkgc3R1ZmYuIENydWNpYWxseSwgdGhleSYjMzk7cmUgKmZ1bGx5KiBpbml0aWFsaXppbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSBgcG1gIHN0cnVjdCYjMzk7cyBmaWVsZHMgKGB2ZXJzaW9uYCwgYHVuaXRfc2l6ZWAsIGBwaHlzX2Jhc2VgLCBgc2l6ZWApIGFyZSBzZXQsIGFuZCwgY3JpdGljYWxseSwgdGhlIGBiaXRtYXBgIGlzIHplcm9lZCBvdXQgdXNpbmcgYG1lbXNldGAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gY2FyZWZ1bGx5IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvZnRlbiBzdXJmYWNlcy4KCkxvb2tpbmcgYXQgdGhlIHN0cnVjdCBpdHNlbGYsIGl0IGxvb2tzIGNsZWFuOiBgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgLCBhbmQgYSBmbGV4aWJsZSBhcnJheSBgYml0bWFwYC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgYG1lbXNldGAgY292ZXJzIHRoZSBlbnRpcmUgYGJpdG1hcGAgYXJlYSwgc28gdGhlcmUmIzM5O3Mgbm8gZGFuZ2xpbmcgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyB1bmV4cGVjdGVkIHBhZGRpbmcgaW4gdGhlIHN0cnVjdCB0aGF0IGNvdWxkIGxlYXZlIHNvbWV0aGluZyB1bmluaXRpYWxpemVkLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGBlZmlfcG9pc29uX2luaXQoKWAgd2hpY2ggbWFwcyB0aGUgdGFibGUgdXNpbmcgYG1lbXJlbWFwKClgLiBUaGVuLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KClgIHJlYWRzIHRoZSB0YWJsZSBhbmQgcmVzZXJ2ZXMgdGhlIG1lbW9yeSB3aXRoIGBtZW1ibG9ja19yZXNlcnZlKClgLCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIHNldHMgYml0cyBpbiB0aGUgYml0bWFwLiBJIGNhbiBzZWUgaG93IHRoaXMgd29ya3MuIFRoZSB0YWJsZSBnZXRzIHBhc3NlZCB0byB0aGUgbmV4dCBrZXJuZWwgdmlhIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMsIHdoaWNoIGlzIGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoLCBub3QgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBhbGxvY2F0aW9uIGluIGBlZmlfcG9pc29uX2FsbG9jKClgLiBUaGUgYWxsb2NhdGlvbiBzaXplIGxvb2tzIGNvcnJlY3Q6IGBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZWAuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gKkV2ZXJ5dGhpbmcqIGFsbG9jYXRlZCBoZXJlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgpJIGFsc28gY2hlY2tlZCBgZWZpX2dldF9yYW1fdG9wKClgIHdoaWNoIGNhbGxzIGBlZmlfZ2V0X21lbW9yeV9tYXAoKWAgYnV0IHRoaXMgYXBwZWFycyB0byBiZSBleGlzdGluZyBjb2RlLCBub3Qgc29tZXRoaW5nIG5ldyB0byB0aGlzIHBhdGNoLCBzbyBJJiMzOTttIG5vdCBjb25jZXJuZWQuCgpHaXZlbiB3aGF0IEkmIzM5O3ZlIHNlZW4sIHRoZXJlIGFyZSBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaGVyZS4gVGhleSYjMzk7cmUgYmVpbmcgdmVyeSBjYXJlZnVsIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLiBLQVNBTiBzZWVtcyBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBhbnkgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoaXMgYXJlYSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3R1cmUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGlzIGFsbG9jYXRlZCBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYCBhbmQgYWxsIGl0cyBmaWVsZHMsIGluY2x1ZGluZyB0aGUgZmxleGlibGUgYGJpdG1hcGAgYXJyYXksIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICh0aGUgZmllbGRzIGFyZSBhc3NpZ25lZCBhbmQgdGhlIGJpdG1hcCBpcyB6ZXJvZWQgdXNpbmcgYG1lbXNldGApLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCB0aGlzIHRhYmxlIGlzIG5vdCBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJpdG1hcCBoYW5kbGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS4yOTM4MTAxMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk0MDE3MTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY2FycnlpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gSXQgaW50cm9kdWNlcyBhIG5ldyBFRkkgY29uZmlnIHRhYmxlIHRvIHN0b3JlIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLCBob29rcyBpbnRvIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgcG9pc29uZWQgcGFnZXMsIGFuZCBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiB0byBhbGxvY2F0ZSBhbmQgaW5zdGFsbCB0aGUgdGFibGUuIFRoZSBuZXcgbG9naWMgaXMgcmVhY2hhYmxlIGR1cmluZyBFRkkgYm9vdCBhbmQgd2hlbiBtZW1vcnkgZmFpbHVyZXMgYXJlIGluamVjdGVkIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTg6NTEuMjkzODE5NDI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzODQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjU4OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuaW5kZXggMjllMDcyOTI5OWY1Yi4uNjljMGRjMDJiYzExMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbkBAIC0yNjMsNiArMjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcXG4gXFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXFxuIFxcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXFxuIFxcbitjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHRib29sIFxcXCJDYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWNcXFwiXFxuK1xcdGRlcGVuZHMgb24gRUZJX1NUVUIgXFx1MDAyNlxcdTAwMjYgTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4rXFx0aGVscFxcbitcXHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXFxuK1xcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXFxuK1xcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcXG4gXFx0Ym9vbCBcXFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBFRklcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXFx0XFx0Kz0gZWFybHljb24ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcXHRcXHQrPSBjcGVyLWFybS5vXFxuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVxcdFxcdCs9IGNwZXIteDg2Lm9cXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVxcdFxcdCs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm9cXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXFx0Kz0gcG9pc29uLm9cXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcXHRcXHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li43NDc0ZWVlYmIwYWRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXFxuIFxcdC51bmFjY2VwdGVkXFx0XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdC5wb2lzb25lZF9tZW1vcnlcXHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXFxuKyNlbmRpZlxcbiB9O1xcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XFxuIFxcbkBAIC02NDYsNiArNjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS51bmFjY2VwdGVkLFxcdFxcXCJVbmFjY2VwdGVkXFxcIlxcdH0sXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcXHRcXHUwMDI2ZWZpLnBvaXNvbmVkX21lbW9yeSxcXHRcXFwiUE9JU09OXFxcIlxcdH0sXFxuKyNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcXG4gXFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcXHRcXHUwMDI2cHJpbWFyeV9kaXNwbGF5X3RhYmxlXFx0XFx0XFx0fSxcXG4gI2VuZGlmXFxuQEAgLTgwNiw2ICs4MTIsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcXG4rXFxuIFxcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcXG4gXFx0XFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5pbmRleCBmMjdmMmUxZjAwMTk5Li43MjU4ZWNkZjFmN2MyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXFxuQEAgLTc3NCwzICs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxcbiBcXHRcXHRcXHRlZmlfd2FybihcXFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiB9XFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rLyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqL1xcbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1RBQkxFX1NJWkVcXHRTWl8xTVxcbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVxcdFNaXzFHXFxuK1xcbisvKlxcbisgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzb1xcbisgKiBiaXQgTiBjb3ZlcnMgdW5pdCBOLlxcbisgKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUsIGEgXFxcInVuaXRcXFwiIGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZVxcbisgKiBiaXRtYXAgYml0IGNvdmVycy5cXG4rICovXFxuK3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSlcXG4re1xcbitcXHR1NjQgbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xcbitcXHR1MzIgdW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XFxuK1xcbitcXHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcXHUwMDNlIEVGSV9QT0lTT05fTUFYX1RBQkxFX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHVuaXRfc2l6ZSBcXHUwMDNjIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkge1xcbitcXHRcXHRucl91bml0cyA9IERJVl9ST1VORF9VUChucl91bml0cywgMik7XFxuK1xcdFxcdHVuaXRfc2l6ZSAqPSAyO1xcbitcXHR9XFxuK1xcbitcXHQqYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xcbitcXHRyZXR1cm4gdW5pdF9zaXplO1xcbit9XFxuK1xcbisvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTMyIHVuaXRfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XFxuK1xcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcXG4rXFx0XFx0XFx0ICAgICBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplLCAodm9pZCAqKilcXHUwMDI2cG0pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHBtLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG4rXFx0cG0tXFx1MDAzZXVuaXRfc2l6ZSA9IHVuaXRfc2l6ZTtcXG4rXFx0cG0tXFx1MDAzZXBoeXNfYmFzZSA9IDA7XFxuK1xcdHBtLVxcdTAwM2VzaXplID0gYml0bWFwX3NpemU7XFxuK1xcdG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gcG07XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXFxuKyAqIGF2YWlsYWJsZVxcbisgKi9cXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbit7XFxuK1xcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1MzIgdW5pdF9zaXplO1xcbitcXG4rXFx0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xcbitcXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcXG4rXFx0aWYgKHBtKSB7XFxuK1xcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKVxcbitcXHRcXHRcXHRlZmlfZXJyKFxcXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZWZpX2dldF9yYW1fdG9wKFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dW5pdF9zaXplID0gZWZpX3BvaXNvbl9nZW9tZXRyeShyYW1fdG9wLCBcXHUwMDI2Yml0bWFwX3NpemUpO1xcbitcXG4rXFx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbit9XFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCA0MmQ2MDczYmNkMDYyLi4wMDg2MzVlYjUwMjdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXHRcXHRcXHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XFxuIFxcbiBcXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4gXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uYjVlMTliYTUwZGRhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuQEAgLTEwOTQsNiArMTA5NCw4IEBAIGNoYXIgKmVmaV9jb252ZXJ0X2NtZGxpbmUoZWZpX2xvYWRlZF9pbWFnZV90ICppbWFnZSk7XFxuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpbnN0YWxsX2NmZ190YmwpO1xcbiBcXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XFxuK1xcbiBlZmlfc3RhdHVzX3QgZWZpX2FsbG9jYXRlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5AQCAtMTE2OSw2ICsxMTcxLDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XFxuIFxcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcXG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcXG5AQCAtNjQsNiArNjQsNTkgQEAgZWZpX3N0YXR1c190IGVmaV9nZXRfbWVtb3J5X21hcChzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICoqbWFwLFxcbiBcXHRyZXR1cm4gRUZJX1NVQ0NFU1M7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXFxuKyAqIEB0b3A6XFx0b24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzXFxuKyAqXFx0XFx0dXNhYmxlIFJBTVxcbisgKlxcbisgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XFxuKyAqIHNldHVwX2U4MjAoKSBtYXBzIHRvIEU4MjBfVFlQRV9SQU0sIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhbnkgb2ZcXG4rICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXFxuKyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcXG4rICogb2YgbWF4X3Bmbiwgd2hpY2ggaXMgb25seSBzZXQgb25jZSB0aGUga2VybmVsIHByb3BlciBpcyB1cC5cXG4rICpcXG4rICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xcbisgKiBpcyBub3QgYWNjb3VudGVkIGZvciBoZXJlLlxcbisgKlxcbisgKiBSZXR1cm46XFx0c3RhdHVzIGNvZGVcXG4rICovXFxuK2VmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXFxuK3tcXG4rXFx0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1NjQgcmFtX3RvcCA9IDA7XFxuK1xcdGludCBpLCBucl9kZXNjO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFxcdTAwMjZtYXAsIGZhbHNlKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuK1xcdG5yX2Rlc2MgPSBtYXAtXFx1MDAzZW1hcF9zaXplIC8gbWFwLVxcdTAwM2VkZXNjX3NpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXNjOyBpKyspIHtcXG4rXFx0XFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XFxuK1xcbitcXHRcXHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cXHUwMDNlbWFwLCBtYXAtXFx1MDAzZWRlc2Nfc2l6ZSwgaSk7XFxuK1xcdFxcdHN3aXRjaCAoZC1cXHUwMDNldHlwZSkge1xcbitcXHRcXHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XFxuK1xcdFxcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxcbitcXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbitcXHRcXHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcXG4rXFx0XFx0XFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxcbitcXHRcXHRcXHRcXHQgICAgICBkLVxcdTAwM2VwaHlzX2FkZHIgKyBkLVxcdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKCFyYW1fdG9wKVxcbitcXHRcXHRyZXR1cm4gRUZJX05PVF9GT1VORDtcXG4rXFxuK1xcdCp0b3AgPSByYW1fdG9wO1xcbitcXHRyZXR1cm4gRUZJX1NVQ0NFU1M7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xcbiAgKiBAc2l6ZTpcXHRtaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG5pbmRleCBjZWYzMmUyYzgyZDhmLi5mOTBkZTExYmM4ODU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbkBAIC0xMDIzLDYgKzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFxuIFxcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XFxuIFxcbitcXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xcbitcXG4gXFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xcbiBcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuIFxcdFxcdGVmaV9lcnIoXFxcImV4aXRfYm9vdCgpIGZhaWxlZCFcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXFxuQEAgLTAsMCArMSwxOTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXFxuKyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcXG4rICogaGFyZHdhcmUtcG9pc29uZWQgZnJhbWVzIHNvIHRoZSBuZXh0IGtleGVjIGtlcm5lbCBjYW4ga2VlcCB0aGVtIG91dCBvZiBpdHNcXG4rICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcXG4rICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcXG4rICogYWxsb2NhdG9yIGNvbWVzIHVwLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImVmaTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvZzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taW5tYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuKy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqL1xcbitzdGF0aWMgYm9vbCBfX2luaXRcXG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXFxuK3tcXG4rXFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAocG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIElTX0FMSUdORUQocG0tXFx1MDAzZXBoeXNfYmFzZSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuK31cXG4rXFxuKy8qIFRoZSByYW5nZSB0aGUgYml0bWFwIGNsYWltcyB0byBkZXNjcmliZSBoYXMgdG8gZml0IGluIGEgdTY0LiAqL1xcbitzdGF0aWMgYm9vbCBfX2luaXRcXG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXFxuK3tcXG4rXFx0dTY0IG5iaXRzLCBzcGFuO1xcbitcXG4rXFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcXHUwMDI2bmJpdHMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXFx1MDAzZXVuaXRfc2l6ZSwgXFx1MDAyNnNwYW4pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cXHUwMDNlcGh5c19iYXNlLCBzcGFuLCBcXHUwMDI2c3Bhbik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sXFxuKyAqIHNvIGNoZWNrIGl0cyBnZW9tZXRyeSBiZWZvcmUgZG9pbmcgYW55IGFyaXRobWV0aWMgd2l0aCBpdC5cXG4rICovXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAocG0tXFx1MDAzZXZlcnNpb24gIT0gMSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwbS1cXHUwMDNldmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHNpemU7XFxuK1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE1hcCB0aGUgaGVhZGVyIHRvIGxlYXJuIHRoZSBiaXRtYXAgc2l6ZSwgdGhlbiBtYXAgdGhlIHdob2xlIHRhYmxlLiAqL1xcbitcXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcXG4rXFx0XFx0bWVtdW5tYXAocG0pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRzaXplID0gcG0tXFx1MDAzZXNpemU7XFxuK1xcdG1lbXVubWFwKHBtKTtcXG4rXFxuK1xcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXFxuK1xcdFxcdFxcdCAgICAgIE1FTVJFTUFQX1dCKTtcXG4rXFx0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcXG4rXFxuKy8qIEJpdG1hcCB1bml0IGNvdmVyaW5nIEBwZm4sIG9yIC0xIGlmIHRoZSBwZm4gZmFsbHMgb3V0c2lkZSB0aGUgdGFibGUuICovXFxuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcXG4rXFx0dTY0IHVuaXQ7XFxuK1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIGVmaV9wb2lzb24tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVxcdTAwM2VwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRpZiAodW5pdCBcXHUwMDNlPSAodTY0KWVmaV9wb2lzb24tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiB1bml0O1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZVxcbisgKiBhbGxvY2F0b3IuIG1lbW9yeV9mYWlsdXJlKCkgaGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUgZnJhbWUgZnJvbSB0aGlzIGtlcm5lbC5cXG4rICpcXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvXFxuKyAqIGFuIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxcbisgKi9cXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRsb25nIHVuaXQ7XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcXG4rXFx0aWYgKHVuaXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXFx1MDAzZWJpdG1hcCk7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKVxcbit7XFxuK1xcdHU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjtcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwO1xcbitcXG4rXFx0aWYgKHBwbSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwbSA9IGVhcmx5X21lbXJlbWFwKHBwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXFxuK1xcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbitcXHRcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBoeXNfYmFzZSA9IHBtLVxcdTAwM2VwaHlzX2Jhc2U7XFxuK1xcdHVuaXRfc2l6ZSA9IHBtLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdGJpdG1hcF9zaXplID0gcG0tXFx1MDAzZXNpemU7XFxuK1xcbitcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXG4rXFx0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cXG4rXFx0bWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSxcXG4rXFx0XFx0XFx0IFBBR0VfQUxJR04ocHBtICsgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSkgLVxcbitcXHRcXHRcXHQgUEFHRV9BTElHTl9ET1dOKHBwbSkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FsayB0aGUgYml0bWFwIGEgcGFnZSBhdCBhIHRpbWUgYW5kIHJlc2VydmUgZWFjaCBwb2lzb25lZCB1bml0LlxcbitcXHQgKiBtZW1ibG9jay5tZW1vcnkgaXMgbm90IHBvcHVsYXRlZCB0aGlzIGVhcmx5LCBzbyBtZW1ibG9ja19yZW1vdmUoKVxcbitcXHQgKiBhbmQgbWVtYmxvY2tfbWFya19ub21hcCgpIHdvdWxkIGJlIG5vLW9wczsgYSByZXNlcnZhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGtlZXBzIHRoZSB1bml0cyBhd2F5IGZyb20gdGhlIGFsbG9jYXRvci5cXG4rXFx0ICovXFxuK1xcdGZvciAob2ZmID0gMDsgb2ZmIFxcdTAwM2MgYml0bWFwX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGJpdG1hcF9zaXplIC0gb2ZmKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nICptYXA7XFxuK1xcbitcXHRcXHRtYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJpdG1hcCkgKyBvZmYsIGNodW5rKTtcXG4rXFx0XFx0aWYgKCFtYXApIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XFxuK1xcdFxcdFxcdHU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSArIGJpdDtcXG4rXFxuK1xcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTtcXG4rXFx0XFx0XFx0bnJfdW5pdHMrKztcXG4rXFx0XFx0fVxcbitcXHRcXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5yX3VuaXRzKVxcbitcXHRcXHRwcl9pbmZvKFxcXCJyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRucl91bml0cywgdW5pdF9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGNjYmMzNTQ3OTY4NGEuLjNjYjNmMjI0YWMwMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtMjMsNiArMjMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHN0b3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVib290LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcXG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXFx0XFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXFx0XFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFxcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcXG4gXFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFxcdFxcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcXG4gXFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRtb2t2YXJfdGFibGU7XFx0XFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0Y29jb19zZWNyZXQ7XFx0XFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHVuYWNjZXB0ZWQ7XFx0XFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHBvaXNvbmVkX21lbW9yeTtcXHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cXG4gXFxuIFxcdGVmaV9nZXRfdGltZV90XFx0XFx0XFx0KmdldF90aW1lO1xcbiBcXHRlZmlfc2V0X3RpbWVfdFxcdFxcdFxcdCpzZXRfdGltZTtcXG5AQCAtMTI2OSw2ICsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XFxuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcXFxcbiBcXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcXG4gXFxuK3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcXG4rXFx0dTMyXFx0XFx0dmVyc2lvbjtcXG4rXFx0dTMyXFx0XFx0dW5pdF9zaXplO1xcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cXG4rXFx0dTY0XFx0XFx0cGh5c19iYXNlO1xcdC8qIHBoeXMgYWRkcmVzcyBjb3ZlcmVkIGJ5IGJpdCAwICovXFxuK1xcdHU2NFxcdFxcdHNpemU7XFx0XFx0LyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdGJpdG1hcFtdO1xcbit9O1xcbitcXG4rI2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVxcdFNaXzJNXFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XFxuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZWZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbkBAIC0xMjg2LDYgKzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XFxuIFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcXG4gXFx0XFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcXG4rXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbitcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbiBcXHR9XFxuIFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS44MzQ5ODkxOTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTQ4NzMyNzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uNjljMGRjMDJiYzExMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiArMjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcbiBcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxuIFx0ICBhbGxvd3MgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGFjY2VzcyB0aGUgaW5qZWN0ZWQgc2VjcmV0cy5cbiBcbitjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0Ym9vbCBcIkNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlY1wiXG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuQEAgLTgwNiw2ICs4MTIsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7XG4rXG4gXHRpZiAocnRfcHJvcCAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4gXHRcdGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnRibDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggZjI3ZjJlMWYwMDE5OS4uNzI1OGVjZGYxZjdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyArNzc0LDkyIEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqL1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRVx0U1pfMU1cbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVx0U1pfMUdcbitcbisvKlxuKyAqIEJpdG1hcCBnZW9tZXRyeSBmb3IgYSBnaXZlbiB0b3Agb2YgUkFNLiBUaGUgYml0bWFwIHN0YXJ0cyBhdCBhZGRyZXNzIDAsIHNvXG4rICogYml0IE4gY292ZXJzIHVuaXQgTi5cbisgKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUsIGEgXCJ1bml0XCIgaXMgZ3JhbnVsZSBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIHRoYXQgb25lXG4rICogYml0bWFwIGJpdCBjb3ZlcnMuXG4rICovXG4rc3RhdGljIHUzMiBlZmlfcG9pc29uX2dlb21ldHJ5KHU2NCByYW1fdG9wLCB1NjQgKmJpdG1hcF9zaXplKVxuK3tcbitcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4rXHR1MzIgdW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4rXG4rXHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcdTAwM2UgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB1bml0X3NpemUgXHUwMDNjIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkge1xuK1x0XHRucl91bml0cyA9IERJVl9ST1VORF9VUChucl91bml0cywgMik7XG4rXHRcdHVuaXRfc2l6ZSAqPSAyO1xuK1x0fVxuK1xuK1x0KmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcdHJldHVybiB1bml0X3NpemU7XG4rfVxuK1xuKy8qIEFDUEkgcmVjbGFpbSBtZW1vcnksIHNvIHRoZSBuZXh0IGtlcm5lbCBkb2VzIG5vdCB0cmVhdCBpdCBhcyBmcmVlIFJBTS4gKi9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplLFxuK1x0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbitcdFx0XHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVx1MDAyNnBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4rXHRwbS1cdTAwM2V1bml0X3NpemUgPSB1bml0X3NpemU7XG4rXHRwbS1cdTAwM2VwaHlzX2Jhc2UgPSAwO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXG4rICogYXZhaWxhYmxlXG4rICovXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuK3tcbitcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTMyIHVuaXRfc2l6ZTtcbitcbitcdC8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi9cbitcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuK1x0aWYgKHBtKSB7XG4rXHRcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpXG4rXHRcdFx0ZWZpX2VycihcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlZmlfZ2V0X3JhbV90b3AoXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR1bml0X3NpemUgPSBlZmlfcG9pc29uX2dlb21ldHJ5KHJhbV90b3AsIFx1MDAyNmJpdG1hcF9zaXplKTtcbitcbitcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi5iNWUxOWJhNTBkZGFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTA5NCw2ICsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTtcbiBlZmlfc3RhdHVzX3QgZWZpX2dldF9tZW1vcnlfbWFwKHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKiptYXAsXG4gXHRcdFx0XHRib29sIGluc3RhbGxfY2ZnX3RibCk7XG4gXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XG4rXG4gZWZpX3N0YXR1c190IGVmaV9hbGxvY2F0ZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHIsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG4gXG5AQCAtMTE2OSw2ICsxMTcxLDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5pbmRleCA1OWYzZjgzZGU1MGMyLi43NzdmMWYxODBjNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xuQEAgLTY0LDYgKzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdHJldHVybiBFRklfU1VDQ0VTUztcbiB9XG4gXG4rLyoqXG4rICogZWZpX2dldF9yYW1fdG9wKCkgLSBmaW5kIHRoZSB0b3Agb2YgdXNhYmxlIFJBTVxuKyAqIEB0b3A6XHRvbiByZXR1cm4sIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgbWVtb3J5IG1hcCBlbnRyeSB0aGF0IGJlY29tZXNcbisgKlx0XHR1c2FibGUgUkFNXG4rICpcbisgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XG4rICogc2V0dXBfZTgyMCgpIG1hcHMgdG8gRTgyMF9UWVBFX1JBTSwgYW5kIHJldHVybiB0aGUgaGlnaGVzdCBhZGRyZXNzIGFueSBvZlxuKyAqIHRoZW0gcmVhY2hlcy4gTWVtb3J5IGEgY29uZmlkZW50aWFsIGd1ZXN0IGhhcyBub3QgYWNjZXB0ZWQgeWV0IGNvdW50cyBhc1xuKyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcbisgKiBvZiBtYXhfcGZuLCB3aGljaCBpcyBvbmx5IHNldCBvbmNlIHRoZSBrZXJuZWwgcHJvcGVyIGlzIHVwLlxuKyAqXG4rICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xuKyAqIGlzIG5vdCBhY2NvdW50ZWQgZm9yIGhlcmUuXG4rICpcbisgKiBSZXR1cm46XHRzdGF0dXMgY29kZVxuKyAqL1xuK2VmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXG4re1xuK1x0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcdHU2NCByYW1fdG9wID0gMDtcbitcdGludCBpLCBucl9kZXNjO1xuK1xuK1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIHN0YXR1cztcbitcbitcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XG4rXHRcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xuK1xuK1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuK1x0XHRzd2l0Y2ggKGQtXHUwMDNldHlwZSkge1xuK1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbitcdFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuK1x0XHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4gLyoqXG4gICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXNcbiAgKiBAc2l6ZTpcdG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCBjZWYzMmUyYzgyZDhmLi5mOTBkZTExYmM4ODU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDIzLDYgKzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuK1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwiZXhpdF9ib290KCkgZmFpbGVkIVxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQxOGM2YjNhYWI4MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgKzEsMTk3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYVxuKyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcbisgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0c1xuKyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsXG4rICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcbisgKiBhbGxvY2F0b3IgY29tZXMgdXAuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9nMi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbm1heC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0O1xuK1xuKy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqL1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdGlmICghcG0tXHUwMDNlc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rLyogVGhlIHJhbmdlIHRoZSBiaXRtYXAgY2xhaW1zIHRvIGRlc2NyaWJlIGhhcyB0byBmaXQgaW4gYSB1NjQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS1cdTAwM2V1bml0X3NpemUsIFx1MDAyNnNwYW4pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cdTAwM2VwaHlzX2Jhc2UsIHNwYW4sIFx1MDAyNnNwYW4pO1xuK31cbitcbisvKlxuKyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sXG4rICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LlxuKyAqL1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cIixcbitcdFx0XHRwbS1cdTAwM2V2ZXJzaW9uKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIG1hbGZvcm1lZCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgc2l6ZTtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTWFwIHRoZSBoZWFkZXIgdG8gbGVhcm4gdGhlIGJpdG1hcCBzaXplLCB0aGVuIG1hcCB0aGUgd2hvbGUgdGFibGUuICovXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IHBtLVx1MDAzZXNpemU7XG4rXHRtZW11bm1hcChwbSk7XG4rXG4rXHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgKyBzaXplLFxuK1x0XHRcdCAgICAgIE1FTVJFTUFQX1dCKTtcbitcdFdBUk5fT05fT05DRSghZWZpX3BvaXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcbitcbisvKiBCaXRtYXAgdW5pdCBjb3ZlcmluZyBAcGZuLCBvciAtMSBpZiB0aGUgcGZuIGZhbGxzIG91dHNpZGUgdGhlIHRhYmxlLiAqL1xuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcbitcdHU2NCB1bml0O1xuK1xuK1x0aWYgKGFkZHIgXHUwMDNjIGVmaV9wb2lzb24tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSkgLyBlZmlfcG9pc29uLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGlmICh1bml0IFx1MDAzZT0gKHU2NCllZmlfcG9pc29uLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZVxuKyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLlxuKyAqXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvXG4rICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rdm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4re1xuK1x0dTY0IHBwbSA9IGVmaS5wb2lzb25lZF9tZW1vcnksIHBoeXNfYmFzZSwgdW5pdF9zaXplLCBiaXRtYXBfc2l6ZSwgb2ZmO1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0dW5zaWduZWQgaW50IG5yX3VuaXRzID0gMDtcbitcbitcdGlmIChwcG0gPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cG0gPSBlYXJseV9tZW1yZW1hcChwcG0sIHNpemVvZigqcG0pKTtcbitcdGlmICghcG0pIHtcbitcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XG4rXHRcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXG4rXHRcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuK1x0XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlzX2Jhc2UgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4rXHR1bml0X3NpemUgPSBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRiaXRtYXBfc2l6ZSA9IHBtLVx1MDAzZXNpemU7XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cbitcdG1lbWJsb2NrX3Jlc2VydmUoUEFHRV9BTElHTl9ET1dOKHBwbSksXG4rXHRcdFx0IFBBR0VfQUxJR04ocHBtICsgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSkgLVxuK1x0XHRcdCBQQUdFX0FMSUdOX0RPV04ocHBtKSk7XG4rXG4rXHQvKlxuK1x0ICogV2FsayB0aGUgYml0bWFwIGEgcGFnZSBhdCBhIHRpbWUgYW5kIHJlc2VydmUgZWFjaCBwb2lzb25lZCB1bml0LlxuK1x0ICogbWVtYmxvY2subWVtb3J5IGlzIG5vdCBwb3B1bGF0ZWQgdGhpcyBlYXJseSwgc28gbWVtYmxvY2tfcmVtb3ZlKClcbitcdCAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXRcbitcdCAqIGtlZXBzIHRoZSB1bml0cyBhd2F5IGZyb20gdGhlIGFsbG9jYXRvci5cbitcdCAqL1xuK1x0Zm9yIChvZmYgPSAwOyBvZmYgXHUwMDNjIGJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdFx0dW5zaWduZWQgbG9uZyAqbWFwO1xuK1xuK1x0XHRtYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcbitcdFx0XHRcdFx0XHQgICAgYml0bWFwKSArIG9mZiwgY2h1bmspO1xuK1x0XHRpZiAoIW1hcCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XG4rXHRcdFx0dTY0IHVuaXQgPSBvZmYgKiBCSVRTX1BFUl9CWVRFICsgYml0O1xuK1xuK1x0XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTtcbitcdFx0XHRucl91bml0cysrO1xuK1x0XHR9XG4rXHRcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuK1x0fVxuK1xuK1x0aWYgKG5yX3VuaXRzKVxuK1x0XHRwcl9pbmZvKFwicmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xcblwiLFxuK1x0XHRcdG5yX3VuaXRzLCB1bml0X3NpemUgXHUwMDNlXHUwMDNlIDEwKTtcbit9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmhcbmluZGV4IGNjYmMzNTQ3OTY4NGEuLjNjYjNmMjI0YWMwMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiArNDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4rI2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRwb2lzb25lZF9tZW1vcnk7XHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cbiBcbiBcdGVmaV9nZXRfdGltZV90XHRcdFx0KmdldF90aW1lO1xuIFx0ZWZpX3NldF90aW1lX3RcdFx0XHQqc2V0X3RpbWU7XG5AQCAtMTI2OSw2ICsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHBoeXNfYmFzZTtcdC8qIHBoeXMgYWRkcmVzcyBjb3ZlcmVkIGJ5IGJpdCAwICovXG4rXHR1NjRcdFx0c2l6ZTtcdFx0LyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi9cbitcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuK307XG4rXG4rI2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEyODYsNiArMTI4Nyw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4rXHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbitcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS44MzQ5OTA3ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM4MTE5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhhcmR3YXJlIFBvaXNvbmVkIFBhZ2UgS2V4ZWMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGF0dGVtcHRpbmcgdG8gcHJvcGFnYXRlIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBhY3Jvc3MgYSBrZXhlYyByZWJvb3QgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEludGVyZXN0aW5nIGFwcHJvYWNoLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIG51YW5jZXMgb2YgdGhpcyB0byBzZWUgaWYgaXQncyBhZGRpbmcgYW55IHZhbHVlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJpc2tzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCB3aGljaCBpcyBnb29kOyBzZXBhcmF0aW5nIHRoZSBsb2dpYyBmcm9tIHRoZSBjb3JlIEVGSSBzdHViIGlzIHNvdW5kLiBUaGUgYEtjb25maWdgIGNoYW5nZSBhbmQgdGhlIGhvb2sgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYXJlIGFsc28gZXhwZWN0ZWQuIFNwZWNpZmljYWxseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIHN0ZXAgd2hlbiBhIHBhZ2UgaXMgZmxhZ2dlZCBhcyBwb2lzb25lZC4gVGhlbiB0aGUgRUZJIHN0dWIgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaW5zdGFsbCB0aGlzIHBvaXNvbmVkIG1lbW9yeSB0YWJsZS5cblxuQWxyaWdodCwgbGV0J3MgdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LiBJIGNhbiB0cmlnZ2VyIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB3aXRoIGluamVjdGVkIG1lbW9yeSBmYWlsdXJlcyB0aHJvdWdoIGBtYWR2aXNlYCBvciBzeXNmcywgdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiBBbmQsIHNpbmNlIGl04oCZcyBFRkkgYmFzZWQsIHdlIG5lZWQgdG8gYm9vdCB0aGUga2VybmVsIHZpYSBFRkksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCB3YXkgb2YgZG9pbmcgdGhpbmdzLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogaXMgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAgY2FsbGVkIGNvcnJlY3RseSBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UsIGFuZCB3aGV0aGVyIHRoZSBvdGhlciBiaXRzIGFuZCBwaWVjZXMgYXJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZD9cblxuSXMgZnV6emluZyB0aGlzIHdvcnRod2hpbGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgbmV3IGNvZGUgcGF0aHMgaW4gYm90aCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBhbmQgRUZJIGJvb3QuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZTogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfcG9pc29uX2luaXRgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIHRhcmdldHMuXG5cbkJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBpdCdzIG5vdCBqdXN0IGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgdGhhdOKAmXMgbmVlZGVkLCBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQiBcdTAwMjZcdTAwMjYgTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IDY0QklUYC4gU28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIHRob3NlIGNvbmZpZ3MgdG9vLlxuXG5Ob3csIGEgcXVpY2sgZ3JlcCBmb3IgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHNob3VsZCBxdWlja2x5IHJldmVhbCB0aGUgY2FsbCBzaXRlcyBhbmQgYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBUaGF0J2xsIGJlIG15IG5leHQgc3RlcCBiZWZvcmUgYSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1OC42NzMxMTM0MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MDkzNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMDE9c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIwLSAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEyMTp2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODY9dm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg3OnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI4OC0jZWxzZVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4OT1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgvZWZpLmg6MTI5MDpzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI5MS0jZW5kaWZcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI4Mj1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjkwLVxcdFxcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTE6XFx0XFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyOTItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowMC43NDQwNTc2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTI5ODgzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRm9jdXM6IEVGSSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBFRkkgbWVtb3J5IHBvaXNvbmluZyBmdW5jdGlvbmFsaXR5LiBSaWdodCBub3csIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgY29uY2VudHJhdGUgb24gYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmU6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFyZSBwcm9iYWJseSB0aGUgY29yZSBidWlsZGluZyBibG9ja3Mgb2YgaG93IHRoaXMgd2hvbGUgbWVtb3J5IHBvaXNvbmluZyBzeXN0ZW0gd29ya3MuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCB0aG91Z2gsIEkgc2hvdWxkIGZpcnN0IGRldGVybWluZSB3aGV0aGVyIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAgaXMgc3RhdGljIG9yIG5vdCwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgc2NvcGUgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tLiBUaGF0J3MgbXkgbmV4dCBxdWljayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowNC4xOTcwNDkxMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzkzNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTgwNT1zdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MjgtICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4Mjk6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMtODMwLXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYz0xNTM9ZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4MS1cXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM6MTgyOlxcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4My1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oPTExNzI9dm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaC0xMTc0LSNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzU6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaC0xMTc2LSNlbHNlXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmg6MTE3NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3OC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYz05MTI9dm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMtMTAyNS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmM6MTAyNjpcXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYy0xMDI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowNi4wNDA5OTQzMzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNzg5NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFRkkgTWVtb3J5IFBvaXNvbmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIEVGSS1yZWxhdGVkIGtlcm5lbCBjb2RlLiBJJ20gc2VlaW5nIGEgZmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBwb2lzb25pbmcsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLiBGaXJzdCwgSSd2ZSBnb3QgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGFuZCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYC4gVGhlbiwgSSBoYXZlIGBlZmlfZ2V0X3JhbV90b3BgIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jYCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGRldGVybWluaW5nIHRoZSB0b3Agb2YgdXNhYmxlIFJBTS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgbWVtb3J5IHBvaXNvbmluZyBuZWVkcyB0byBrbm93IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBtZW1vcnkgaXQgY2FuIHBsYXkgd2l0aC4gIEFuZCBmaW5hbGx5LCBJJ3ZlIGdvdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBvaXNvbmluZyBtZWNoYW5pc20gaXRzZWxmLiAgSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGVsdmUgaW50byBgcG9pc29uLmNgIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byBhY2hpZXZlIG1lbW9yeSBwb2lzb25pbmcuIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGVmaV9wb2lzb25faW5pdGAuIExldCdzIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHN0YXRpYyB0byBnYXVnZSBpdHMgcmVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjEwLjI0NDc4ODA4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3NzExNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9wb2lzb25faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz01OD1lZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTczLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjc0OnN0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTc1LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTk3LX1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo5ODplYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxMi4wMTI1MDY0NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA5NDMyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgc2l0dWF0aW9uIGZlZWxzLi4uZml4ZWQuIFN0YWduYW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIEFoLCBhIHBvc3NpYmxlIGxlYWQhIExldCBtZSBjaGVjayBzb21ldGhpbmc6IGlzIHRoaXMgYGVmaV9wb2lzb25fYWxsb2NgIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCBtaWdodCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvciwgaWYgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxNC43MjE5NDI2MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODkyMTYyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWZpX3BvaXNvbl9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTc4OT1zdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgwNC0vKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4MDU6c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSxcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiB1bml0X3NpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTgyOT12b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTg1MS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jOjg1MjpcXHRwbSA9IGVmaV9wb2lzb25fYWxsb2MoYml0bWFwX3NpemUsIHVuaXRfc2l6ZSk7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04NTMtXFx0aWYgKCFwbSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxNi40MTExNjcyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MzIwOTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBuZXcgdGFyZ2V0OiBFRkkgcG9pc29uZWQgbWVtb3J5LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuXG5cbkkgc2VlIHRoYXQgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAgYXJlIHBhcnQgb2YgdGhlIEVGSSBzdHViLCB3aGljaCBpcyBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLiBTeXprYWxsZXIgY2FuIHJ1biB0aGUgRUZJIHN0dWIgaWYgd2UgYm9vdCB2aWEgRUZJLCBidXQgaXQncyBnZW5lcmFsbHkgbm90IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIGZ1enppbmcuIEluc3RlYWQsIHdlJ3JlIGxpa2VseSBmdXp6aW5nIHRoZSBrZXJuZWwncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkkgdGFibGVzLCBhbmQgdGhhdCdzIHdoZXJlIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGFuZCBgZWZpX3BvaXNvbl9pbml0YCBjb21lIGludG8gcGxheS4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIGdldHRpbmcgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGNvbXByZWhlbnNpdmUuIEl0IGxvb2tzIGxpa2UgYEVGSV9QT0lTT05FRF9NRU1PUllgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHNwZWNpZnkgYWxsIG9mIHRob3NlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgRUZJX1NUVUJgIGFyZSBlbmFibGVkLCBidXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHRoZSBjcml0aWNhbCBvbmUuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIGluZGVlZCB0aGUgbWFpbiBvbmUuXG5cbkdpdmVuIHRoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBoYW5kbGVzIGFuIGB1bnNpZ25lZCBsb25nIHBmbmAsIHRoYXQncyBhbiBpbnRlcmVzdGluZyBpbnRlcmZhY2UgdG8gdGFyZ2V0LiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQgYWRkcyBuZXcgbG9naWMgYXJvdW5kIG1lbW9yeS1mYWlsdXJlIGFuZCBFRkkgYm9vdC5cblxuKipTbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOioqXG5cbiogICBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gXG4qICAgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWBcbiogICBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgXG4qICAgYGVmaV9nZXRfcmFtX3RvcGBcblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MjQuNTU0MzgwMTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1NDA0MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MjUxPWNvbmZpZyBFRklfQ09DT19TRUNSRVRcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMjY1LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MjY2OmNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0yNjctXFx0Ym9vbCBcXFwiQ2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToyNi4yMDk3OTAyMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMjU5MzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQWRkaW5nIEVGSV9QT0lTT05FRF9NRU1PUlkgYW5kIFZlcmlmaWNhdGlvbiBvZiBBY3Rpb25fUmVzdWx0J3MgU3RhdGljIE5hdHVyZSoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBhZGQgYEVGSV9QT0lTT05FRF9NRU1PUllgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLCBidXQgaXQncyBjcnVjaWFsIGZvciB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gQmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNyaXRpY2FsIGFib3V0IGBhY3Rpb25fcmVzdWx0YC4gSSAqcmVhbGx5KiBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgYWN0aW9uX3Jlc3VsdGAgaXMsIGluIGZhY3QsIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyBvdGhlcndpc2UgYXJlIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHRoaW5rIGFib3V0IHJpZ2h0IG5vdy4gSSBoYXZlIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aGF0IGltbWVkaWF0ZWx5LCBhbmQgSSBoYXZlIG15IHRvb2xzIHJlYWR5IHRvIGdvLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGNvbW1pdHRpbmcgYW55IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzcwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MjkuNjIyMzg3NDk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0NjA3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdGlvbl9yZXN1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg9MTgzPVRSQUNFX0VWRU5UKGNvbXBhY3RfcmV0cnksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaC0yMTEtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg6MjEyOlxcdFRQX3ByaW50ayhcXFwib3JkZXI9JWQgcHJpb3JpdHk9JXMgY29tcGFjdGlvbl9yZXN1bHQ9JXMgcmV0cmllcz0lZCBtYXhfcmV0cmllcz0lZCBzaG91bGRfcmV0cnk9JWRcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMy1cXHRcXHRcXHRfX2VudHJ5LVxcdTAwM2VvcmRlcixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI2OT1zdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4MjpzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4My1cXHRcXHRcXHQgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzAzPXN0YXRpYyBpbnQgcGFnZV9hY3Rpb24oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMxNS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTY6XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBwcy1cXHUwMDNldHlwZSwgcmVzdWx0KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTctfVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDg0PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEwMS1cXHRcXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTAyOlxcdFxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAzLVxcdGNhc2UgTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ6XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMDgtXFx0XFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjEwOTpcXHRcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTEwLVxcdFxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMTE6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19IVUdFLCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMi1cXHRcXHRyZXR1cm4gcnY7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNDItXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE0MzpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTQ0LVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE0OS1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1MDpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTUxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE3Nz1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjIwNTpcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0RBWCwgcmMgPyBNRl9GQUlMRUQgOiBNRl9SRUNPVkVSRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMjM9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM0Ny1cXHRcXHRpZiAoIW1mX2hhbmRsZWQpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzQ4OlxcdFxcdFxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1BGTl9NQVAsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM0OS1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzNjAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYxOlxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1BGTl9NQVAsIE1GX1JFQ09WRVJFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYyLX1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4OT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Ny1cXHRcXHRcXHRwdXRfcGFnZShwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDg6XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0OS1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ3OC1cXHRcXHRcXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDc5OlxcdFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQlVERFksIHJlcyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDgwLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDgxOlxcdFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ4Mi1cXHRcXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTItXFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDkzOlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTQtXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTYtXFx0XFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ5NzpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDk4LVxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ0LVxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0NTpcXHRcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOU1BMSVRfVEhQLCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0Ni1cXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OC1cXHRpZiAoIWh3cG9pc29uX3VzZXJfbWFwcGluZ3MoZm9saW8sIHAsIHBmbiwgZmxhZ3MpKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTk5OlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5NQVBfRkFJTEVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYwMC1cXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA3LVxcdCAgICBmb2xpby1cXHUwMDNlbWFwcGluZyA9PSBOVUxMKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjA4OlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVFJVTkNBVEVEX0xSVSwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA5LVxcdFxcdGdvdG8gdW5sb2NrX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjMxLjIxNzAwMzQ1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAwMzAyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgRm9jdXM6IFVFRkkgUG9pc29uZWQgTWVtb3J5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBVRUZJIG1lbW9yeSBwb2lzb25pbmcgaW1wbGVtZW50YXRpb24uIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnM6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIG1hcmtpbmcgYW5kIGhhbmRsaW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlLCBmb3Igc29tZSByZWFzb24sIGNvbnNpZGVyZWQgXCJwb2lzb25lZFwiIOKAkyBsaWtlbHkgc2lnbmlmeWluZyBzb21lIHNvcnQgb2YgaGFyZHdhcmUgaXNzdWUgb3IgYSByZWdpb24gdGhhdCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIEkgZGVsdmUgZGVlcGVyLCBpcyBhYm91dCB0aGUgc2NvcGUgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBtZW1vcnkgcmVzZXJ2YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IHRoZSBwb2lzb25lZCBtZW1vcnkgaXMgZGVjbGFyZWQgYW5kIHN1YnNlcXVlbnRseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIElmIGl0IGlzIHN0YXRpYywgdGhlbiBteSBjb25jZXJucyByZWdhcmRpbmcgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcmUgYWxsZXZpYXRlZC4gSSB3aWxsIGJlZ2luIGJ5IHZlcmlmeWluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTozNS4xMTczMDk0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTYxNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9NzE1PWludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE0LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjgxNTpcXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy04MTYtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMjE9dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEzNC1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMzU6dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTM2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT1zdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODUtI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg2OnZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI4Ny12b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODk6c3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyOTAtc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MzYuNzEyOTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MDAwNTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBFRkkgcG9pc29uZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciBob3cgdG8gZW5hYmxlIGl0IHByb3Blcmx5LiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gSSBkb3VibGUtY2hlY2tlZCB0byBiZSBzdXJlLCBidXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGVmaV9wb2lzb25faW5pdGAsIGBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkYCwgYGVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWRgLCBgZWZpX3BvaXNvbl9yYW5nZV92YWxpZGAsIGBlZmlfcG9pc29uX3VuaXRgLCBgZWZpX3BvaXNvbl9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl9hbGxvY2AgYXJlbid0IHBhcnQgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBsb29rcyBsaWtlIGBFRklfUE9JU09ORURfTUVNT1JZYCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiBgTUVNT1JZX0ZBSUxVUkVgIGlzbid0IGVuYWJsZWQsIGBFRklfUE9JU09ORURfTUVNT1JZYCB3b24ndCBiZSBlaXRoZXIsIGFuZCB2aWNlIHZlcnNhLiBJIHNob3VsZCBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBFRklfU1RVQmAganVzdCB0byBiZSBzYWZlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYEVGSV9TVFVCYCdzIGxvY2F0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTo0Mi41OTI5MzkwNjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc1NDU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVGSV9TVFVCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xNjAyLVxcbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2FybS9LY29uZmlnLTE2MDQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI0NjU9ZW5kY2hvaWNlXFxuYXJjaC9hcm02NC9LY29uZmlnLTI0NjYtXFxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9hcm02NC9LY29uZmlnLTI0NjgtXFx0Ym9vbFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz00OTg9Y29uZmlnIEVGSVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MDY6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDctXFx0Ym9vbCBcXFwiRUZJIGJvb3Qgc3R1YiBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEyNDk9ZW5kY2hvaWNlXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEyNTAtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEyNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xODgxPWNvbmZpZyBFRklcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg5OC1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4OTk6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC94ODYvS2NvbmZpZy0xOTAwLVxcdGJvb2wgXFxcIkVGSSBzdHViIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjQ0LjIzMDQ5NDYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Njk1ODkxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgYEVGSV9TVFVCYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBvbiBteSBtaW5kLiBJIGtub3cgYm90aCBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBiZXR0ZXIgaW4gY29udGV4dC4gYEVGSV9TVFVCYCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvcHRpb24uXG5cbk15IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEkgZmlndXJlIHRoZSBwbGFjZSB0byBzdGFydCB3aXRoIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuIFNvLCBsZXQncyBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueSBtZW1vcnkgcmVsYXRlZCBjb25maWcgb3B0aW9ucy4gSSdtIHN1cmUgSSdsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgYWxsIGFib3V0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjQ4LjkwMDA4NjkzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyOTg1OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY0LVxcbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY2LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjUwLjYyOTk1MTg2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE1NDMwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVGSSBNZW1vcnkgUG9pc29uaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbWVudGFsbHkgb3JnYW5pemluZyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLiBXZSdyZSBkZWFsaW5nIHdpdGggYEVGSV9QT0lTT05FRF9NRU1PUllgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYEVGSV9TVFVCYC4gSGFuZyBvbi4uLiBgRUZJX1NUVUJgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBib29sZWFucywgdGhhdCdzIGltcG9ydGFudCB0byBub3RlLiBSaWdodCwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBXZSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBFRkkgdGFibGUgdG8gc3RvcmUgdGhlIGJpdG1hcCBvZiBwb2lzb25lZCBtZW1vcnksIGFuZCB0aGVyZSBhcmUgaG9va3Mgd2l0aGluIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2VzLiBUaGVyZSBhcmUgYWxzbyBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiBmb3IgdGFibGUgYWxsb2NhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJvdGggZHVyaW5nIEVGSSBib290ICphbmQqIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBleHBsaWNpdGx5IGluamVjdGVkLCBmb3IgZXhhbXBsZSwgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gQ2xldmVyLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjb250cmlidXRpb24uIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHRoaXMgYXJlYSBpcyBsaWtlbHkgdG8gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXJlIGFsbCBsb2dpY2FsIGFuZCBleHBlY3RlZCBjaG9pY2VzLCB0YXJnZXRpbmcgdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGZvciBteSBpbml0aWFsIHJldmlldy4gVGltZSB0byByZWNvcmQgdGhlIHJlc3VsdHMgb2YgbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNzEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjI0NTM4NTkxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTI3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsXG4gICAgXCJlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlcIixcbiAgICBcImluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlXCIsXG4gICAgXCJlZmlfZ2V0X3JhbV90b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjMyMDc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMTY1MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjkyNDI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTExMDQxOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjMzY1MWM2OGI3YWUwNzFmNDVkZTc3YmM5ZmI0ZDc5MDQ0ZmEwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDo1ODo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTYgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRib29sIFwiQ2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXCJcbitcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuK1x0aGVscFxuK1x0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xuK1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbitcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXG4gXHRib29sIFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wiXG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXHRcdCs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0Kz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQrPSBjcGVyLXg4Ni5vXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVx0XHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQrPSBwb2lzb24ub1xuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXHRcdCs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li43NDc0ZWVlYmIwYWRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbisjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NDYsNiArNjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcdFwiVW5hY2NlcHRlZFwiXHR9LFxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcIlBPSVNPTlwiXHR9LFxuKyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODA2LDYgKzgxMiw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcbitcbiBcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcbiBcdFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li43MjU4ZWNkZjFmN2MyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxuXCIpO1xuIFx0fVxuIH1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbisvKiBDYXAgb24gdGhlIGJpdG1hcDsgYSBzcGFuIHRvbyB3aWRlIHRvIGZpdCBnZXRzIGEgY29hcnNlciB1bml0IGluc3RlYWQuICovXG4rI2RlZmluZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFXHRTWl8xTVxuKyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFXHRTWl8xR1xuK1xuKy8qXG4rICogQml0bWFwIGdlb21ldHJ5IGZvciBhIGdpdmVuIHRvcCBvZiBSQU0uIFRoZSBiaXRtYXAgc3RhcnRzIGF0IGFkZHJlc3MgMCwgc29cbisgKiBiaXQgTiBjb3ZlcnMgdW5pdCBOLlxuKyAqIEluIHRoZSBmb2xsb3dpbmcgY29kZSwgYSBcInVuaXRcIiBpcyBncmFudWxlIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgdGhhdCBvbmVcbisgKiBiaXRtYXAgYml0IGNvdmVycy5cbisgKi9cbitzdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbitcdHUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbitcbitcdHdoaWxlIChESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpIFx1MDAzZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVuaXRfc2l6ZSBcdTAwM2MgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFKSB7XG4rXHRcdG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCAyKTtcbitcdFx0dW5pdF9zaXplICo9IDI7XG4rXHR9XG4rXG4rXHQqYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xuK1x0cmV0dXJuIHVuaXRfc2l6ZTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHUzMiB1bml0X3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IHVuaXRfc2l6ZTtcbitcdHBtLVx1MDAzZXBoeXNfYmFzZSA9IDA7XG4rXHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4rXHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcG07XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXAgd2hpbGUgYm9vdCBzZXJ2aWNlcyBhcmVcbisgKiBhdmFpbGFibGVcbisgKi9cbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXHR1MzIgdW5pdF9zaXplO1xuK1xuK1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuK1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4rXHRpZiAocG0pIHtcbitcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbitcdFx0XHRlZmlfZXJyKFwiVW5rbm93biB2ZXJzaW9uIG9mIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVmaV9nZXRfcmFtX3RvcChcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgXHUwMDI2Yml0bWFwX3NpemUpO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbitcdFx0XHQgICAgIFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rXHR9XG4rfVxuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcdFx0XHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMDk0LDYgKzEwOTQsOCBAQCBjaGFyICplZmlfY29udmVydF9jbWRsaW5lKGVmaV9sb2FkZWRfaW1hZ2VfdCAqaW1hZ2UpO1xuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdFx0XHRcdGJvb2wgaW5zdGFsbF9jZmdfdGJsKTtcbiBcbitlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTtcbitcbiBlZmlfc3RhdHVzX3QgZWZpX2FsbG9jYXRlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYWRkcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbiBcbkBAIC0xMTY5LDYgKzExNzEsMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5AQCAtNjQsNiArNjQsNTkgQEAgZWZpX3N0YXR1c190IGVmaV9nZXRfbWVtb3J5X21hcChzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICoqbWFwLFxuIFx0cmV0dXJuIEVGSV9TVUNDRVNTO1xuIH1cbiBcbisvKipcbisgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXG4rICogQHRvcDpcdG9uIHJldHVybiwgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCBtZW1vcnkgbWFwIGVudHJ5IHRoYXQgYmVjb21lc1xuKyAqXHRcdHVzYWJsZSBSQU1cbisgKlxuKyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXRcbisgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mXG4rICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXG4rICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZVxuKyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuXG4rICpcbisgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvXG4rICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS5cbisgKlxuKyAqIFJldHVybjpcdHN0YXR1cyBjb2RlXG4rICovXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcbitcdFx0XHRcdCAgICAgIGQtXHUwMDNlcGh5c19hZGRyICsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyYW1fdG9wKVxuK1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbitcbitcdCp0b3AgPSByYW1fdG9wO1xuK1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuK31cbitcbiAvKipcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xuICAqIEBzaXplOlx0bWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjMsNiArMTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4rXG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCArMSwxOTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXG4rICogYml0bWFwIHdpdGggb25lIGJpdCBwZXIgRUZJX1BPSVNPTl9VTklUX1NJWkUgb2YgcGh5c2ljYWwgbWVtb3J5IHRoYXQgcmVjb3Jkc1xuKyAqIGhhcmR3YXJlLXBvaXNvbmVkIGZyYW1lcyBzbyB0aGUgbmV4dCBrZXhlYyBrZXJuZWwgY2FuIGtlZXAgdGhlbSBvdXQgb2YgaXRzXG4rICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcbisgKiBzZXRzIGJpdHMgYXQgcnVudGltZTsgdGhlIG5leHQga2VybmVsIHJlc2VydmVzIHRoZSBzZXQgdW5pdHMgYmVmb3JlIHRoZVxuKyAqIGFsbG9jYXRvciBjb21lcyB1cC5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImVmaTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rLyogQSBub24tZW1wdHkgYml0bWFwIG9uIGEgcG93ZXItb2YtMiBncmlkIHRoYXQgcGh5c19iYXNlIGFjdHVhbGx5IHNpdHMgb24uICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK31cbitcbisvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi9cbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHR1NjQgbmJpdHMsIHNwYW47XG4rXG4rXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KG5iaXRzLCAodTY0KXBtLVx1MDAzZXVuaXRfc2l6ZSwgXHUwMDI2c3BhbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiAhY2hlY2tfYWRkX292ZXJmbG93KHBtLVx1MDAzZXBoeXNfYmFzZSwgc3BhbiwgXHUwMDI2c3Bhbik7XG4rfVxuK1xuKy8qXG4rICogVGhlIHRhYmxlIG1heSBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIga2VybmVsIGluIHRoZSBrZXhlYyBjaGFpbixcbisgKiBzbyBjaGVjayBpdHMgZ2VvbWV0cnkgYmVmb3JlIGRvaW5nIGFueSBhcml0aG1ldGljIHdpdGggaXQuXG4rICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi9cbitcdHBtID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSksIE1FTVJFTUFQX1dCKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XG4rXHRcdG1lbXVubWFwKHBtKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRzaXplID0gcG0tXHUwMDNlc2l6ZTtcbitcdG1lbXVubWFwKHBtKTtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcbitcdHJldHVybiAwO1xuK31cbitlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuK1xuKy8qIEJpdG1hcCB1bml0IGNvdmVyaW5nIEBwZm4sIG9yIC0xIGlmIHRoZSBwZm4gZmFsbHMgb3V0c2lkZSB0aGUgdGFibGUuICovXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuK1x0dTY0IHVuaXQ7XG4rXG4rXHRpZiAoYWRkciBcdTAwM2MgZWZpX3BvaXNvbi1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybiAtMTtcbitcdHVuaXQgPSAoYWRkciAtIGVmaV9wb2lzb24tXHUwMDNlcGh5c19iYXNlKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1x0aWYgKHVuaXQgXHUwMDNlPSAodTY0KWVmaV9wb2lzb24tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiB1bml0O1xuK31cbitcbisvKlxuKyAqIFJlY29yZCBhIGhhcmR3YXJlLXBvaXNvbmVkIGZyYW1lIHNvIHRoZSBuZXh0IGtlcm5lbCBrZWVwcyBpdHMgdW5pdCBvdXQgb2YgdGhlXG4rICogYWxsb2NhdG9yLiBtZW1vcnlfZmFpbHVyZSgpIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGZyYW1lIGZyb20gdGhpcyBrZXJuZWwuXG4rICpcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBvbmUgYml0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc29cbisgKiBhbiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbisgKi9cbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdGxvbmcgdW5pdDtcbitcbitcdGlmICghZWZpX3BvaXNvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuK1x0aWYgKHVuaXQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNldF9iaXQodW5pdCwgZWZpX3BvaXNvbi1cdTAwM2ViaXRtYXApO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHR1NjQgcHBtID0gZWZpLnBvaXNvbmVkX21lbW9yeSwgcGh5c19iYXNlLCB1bml0X3NpemUsIGJpdG1hcF9zaXplLCBvZmY7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwO1xuK1xuK1x0aWYgKHBwbSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwbSA9IGVhcmx5X21lbXJlbWFwKHBwbSwgc2l6ZW9mKCpwbSkpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRwcl93YXJuKFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBoeXNfYmFzZSA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbitcdHVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGJpdG1hcF9zaXplID0gcG0tXHUwMDNlc2l6ZTtcbitcbitcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXG4rXHQvKiBSZXNlcnZlIHRoZSB0YWJsZSBpdHNlbGYgc28gaXQgc3Vydml2ZXMgYSBmdXJ0aGVyIGtleGVjLiAqL1xuK1x0bWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSxcbitcdFx0XHQgUEFHRV9BTElHTihwcG0gKyBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplKSAtXG4rXHRcdFx0IFBBR0VfQUxJR05fRE9XTihwcG0pKTtcbitcbitcdC8qXG4rXHQgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuXG4rXHQgKiBtZW1ibG9jay5tZW1vcnkgaXMgbm90IHBvcHVsYXRlZCB0aGlzIGVhcmx5LCBzbyBtZW1ibG9ja19yZW1vdmUoKVxuK1x0ICogYW5kIG1lbWJsb2NrX21hcmtfbm9tYXAoKSB3b3VsZCBiZSBuby1vcHM7IGEgcmVzZXJ2YXRpb24gaXMgd2hhdFxuK1x0ICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLlxuK1x0ICovXG4rXHRmb3IgKG9mZiA9IDA7IG9mZiBcdTAwM2MgYml0bWFwX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpIHtcbitcdFx0dTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdFx0dW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFO1xuK1x0XHR1bnNpZ25lZCBsb25nICptYXA7XG4rXG4rXHRcdG1hcCA9IGVhcmx5X21lbXJlbWFwKHBwbSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCAgICBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRcdGlmICghbWFwKSB7XG4rXHRcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IGJpdG1hcFxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0XHR1NjQgdW5pdCA9IG9mZiAqIEJJVFNfUEVSX0JZVEUgKyBiaXQ7XG4rXG4rXHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgKyB1bml0ICogdW5pdF9zaXplLCB1bml0X3NpemUpO1xuK1x0XHRcdG5yX3VuaXRzKys7XG4rXHRcdH1cbitcdFx0ZWFybHlfbWVtdW5tYXAobWFwLCBjaHVuayk7XG4rXHR9XG4rXG4rXHRpZiAobnJfdW5pdHMpXG4rXHRcdHByX2luZm8oXCJyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxuXCIsXG4rXHRcdFx0bnJfdW5pdHMsIHVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgMTApO1xuK31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHN0b3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVib290LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHg3OGE1YmYwNywgMHg3ZDJhLCAweDI4ODksICAweDE2LCAweDMxLCAweDYzLCAweGQ0LCAweDU2LCAweGYyLCAweDgzLCAweDUwKVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtNjUwLDYgKzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRtb2t2YXJfdGFibGU7XHRcdC8qIE1PSyB2YXJpYWJsZSBjb25maWcgdGFibGUgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb2NvX3NlY3JldDtcdFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHR1bmFjY2VwdGVkO1x0XHQvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjY5LDYgKzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcbiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFxcXG4gXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcbiBcbitzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4rXHR1MzJcdFx0dmVyc2lvbjtcbitcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4rXHR1NjRcdFx0cGh5c19iYXNlO1x0LyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi9cbitcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4rfTtcbitcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li4xY2M0ZTkyZTk4NzQ4IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTI4Niw2ICsxMjg3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjkyNTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTExMDEzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBvaXNvbmVkIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZYCB0byBoYW5kbGUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjLiBJIHNlZSB0aGV5J3JlIGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIGEgbmV3IHRhYmxlIHRvIHRyYWNrIHRoZSBwb2lzb25lZCBtZW1vcnkuXG5cbkknbSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBjb2RlIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIHRhYmxlIGluIGBlZmlfcG9pc29uX2FsbG9jKClgLiBMZXQncyBicmVhayBpdCBkb3duOiBUaGV5J3JlIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBzdGFuZGFyZCBFRkkgc3R1ZmYuIENydWNpYWxseSwgdGhleSdyZSAqZnVsbHkqIGluaXRpYWxpemluZyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGBwbWAgc3RydWN0J3MgZmllbGRzIChgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgKSBhcmUgc2V0LCBhbmQsIGNyaXRpY2FsbHksIHRoZSBgYml0bWFwYCBpcyB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXRgLiBJJ20gdmVyaWZ5aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gY2FyZWZ1bGx5IGJlY2F1c2UgdGhhdCdzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9mdGVuIHN1cmZhY2VzLlxuXG5Mb29raW5nIGF0IHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBsb29rcyBjbGVhbjogYHZlcnNpb25gLCBgdW5pdF9zaXplYCwgYHBoeXNfYmFzZWAsIGBzaXplYCwgYW5kIGEgZmxleGlibGUgYXJyYXkgYGJpdG1hcGAuIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYG1lbXNldGAgY292ZXJzIHRoZSBlbnRpcmUgYGJpdG1hcGAgYXJlYSwgc28gdGhlcmUncyBubyBkYW5nbGluZyBtZW1vcnkuIFRoZXJlJ3Mgbm8gdW5leHBlY3RlZCBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QgdGhhdCBjb3VsZCBsZWF2ZSBzb21ldGhpbmcgdW5pbml0aWFsaXplZC5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGBlZmlfcG9pc29uX2luaXQoKWAgd2hpY2ggbWFwcyB0aGUgdGFibGUgdXNpbmcgYG1lbXJlbWFwKClgLiBUaGVuLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KClgIHJlYWRzIHRoZSB0YWJsZSBhbmQgcmVzZXJ2ZXMgdGhlIG1lbW9yeSB3aXRoIGBtZW1ibG9ja19yZXNlcnZlKClgLCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIHNldHMgYml0cyBpbiB0aGUgYml0bWFwLiBJIGNhbiBzZWUgaG93IHRoaXMgd29ya3MuIFRoZSB0YWJsZSBnZXRzIHBhc3NlZCB0byB0aGUgbmV4dCBrZXJuZWwgdmlhIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMsIHdoaWNoIGlzIGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoLCBub3QgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgYWxsb2NhdGlvbiBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYC4gVGhlIGFsbG9jYXRpb24gc2l6ZSBsb29rcyBjb3JyZWN0OiBgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZWAuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gKkV2ZXJ5dGhpbmcqIGFsbG9jYXRlZCBoZXJlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cbkkgYWxzbyBjaGVja2VkIGBlZmlfZ2V0X3JhbV90b3AoKWAgd2hpY2ggY2FsbHMgYGVmaV9nZXRfbWVtb3J5X21hcCgpYCBidXQgdGhpcyBhcHBlYXJzIHRvIGJlIGV4aXN0aW5nIGNvZGUsIG5vdCBzb21ldGhpbmcgbmV3IHRvIHRoaXMgcGF0Y2gsIHNvIEknbSBub3QgY29uY2VybmVkLlxuXG5HaXZlbiB3aGF0IEkndmUgc2VlbiwgdGhlcmUgYXJlIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBoZXJlLiBUaGV5J3JlIGJlaW5nIHZlcnkgY2FyZWZ1bCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbi4gS0FTQU4gc2VlbXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGlzIGFyZWEsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MSwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowMDowOS4yMzM5NDM2NTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3R1cmUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGlzIGFsbG9jYXRlZCBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYCBhbmQgYWxsIGl0cyBmaWVsZHMsIGluY2x1ZGluZyB0aGUgZmxleGlibGUgYGJpdG1hcGAgYXJyYXksIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICh0aGUgZmllbGRzIGFyZSBhc3NpZ25lZCBhbmQgdGhlIGJpdG1hcCBpcyB6ZXJvZWQgdXNpbmcgYG1lbXNldGApLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCB0aGlzIHRhYmxlIGlzIG5vdCBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJpdG1hcCBoYW5kbGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZSBgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgaXMgYWxsb2NhdGVkIGluIGBlZmlfcG9pc29uX2FsbG9jKClgIGFuZCBhbGwgaXRzIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBmbGV4aWJsZSBgYml0bWFwYCBhcnJheSwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKHRoZSBmaWVsZHMgYXJlIGFzc2lnbmVkIGFuZCB0aGUgYml0bWFwIGlzIHplcm9lZCB1c2luZyBgbWVtc2V0YCkuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIHRoaXMgdGFibGUgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgYml0bWFwIGhhbmRsaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcctld[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 10:41:00 +0000 UTC FinishedAt: 2026-08-21 11:00:10 +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": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB" ], "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": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB" ], "series_id": "022b9980-ba2a-4efa-9918-9424e8ec0cfa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn", "efi_reserve_poisoned_memory", "install_poisoned_memory_table", "efi_get_ram_top" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUmIzM0OywKICAgICYjMzQ7ZWZpX2dldF9yYW1fdG9wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZSBgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgaXMgYWxsb2NhdGVkIGluIGBlZmlfcG9pc29uX2FsbG9jKClgIGFuZCBhbGwgaXRzIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBmbGV4aWJsZSBgYml0bWFwYCBhcnJheSwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKHRoZSBmaWVsZHMgYXJlIGFzc2lnbmVkIGFuZCB0aGUgYml0bWFwIGlzIHplcm9lZCB1c2luZyBgbWVtc2V0YCkuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIHRoaXMgdGFibGUgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgYml0bWFwIGhhbmRsaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWMzNjUxYzY4YjdhZTA3MWY0NWRlNzdiYzlmYjRkNzkwNDRmYTA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjU4OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcbiBcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxuIFx0ICBhbGxvd3MgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGFjY2VzcyB0aGUgaW5qZWN0ZWQgc2VjcmV0cy5cbiBcbiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHRib29sIFwmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlY1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzXCYjMzQ7XG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICYjNDM7NDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQmIzQzOz0gZWFybHljb24ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfQVJNKVx0XHQmIzQzOz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQmIzQzOz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0JiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm9cbiYjNDM7b2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQmIzQzOz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbmluZGV4IDAzMjdhMzlkMzFmYTUuLjc0NzRlZWViYjBhZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbkBAIC01NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0LnBvaXNvbmVkX21lbW9yeVx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxuJiM0MzsjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NDYsNiAmIzQzOzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcJiMzNDtVbmFjY2VwdGVkXCYjMzQ7XHR9LFxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHR7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnBvaXNvbmVkX21lbW9yeSxcdFwmIzM0O1BPSVNPTlwmIzM0O1x0fSxcbiYjNDM7I2VuZGlmXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXG4gXHR7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELFx0XHUwMDI2cHJpbWFyeV9kaXNwbGF5X3RhYmxlXHRcdFx0fSxcbiAjZW5kaWZcbkBAIC04MDYsNiAmIzQzOzgxMiw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7XG4mIzQzO1xuIFx0aWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xuIFx0XHRlZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwmIzM0Oyk7XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzOy8qIENhcCBvbiB0aGUgYml0bWFwOyBhIHNwYW4gdG9vIHdpZGUgdG8gZml0IGdldHMgYSBjb2Fyc2VyIHVuaXQgaW5zdGVhZC4gKi9cbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFXHRTWl8xTVxuJiM0MzsjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVx0U1pfMUdcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJpdG1hcCBnZW9tZXRyeSBmb3IgYSBnaXZlbiB0b3Agb2YgUkFNLiBUaGUgYml0bWFwIHN0YXJ0cyBhdCBhZGRyZXNzIDAsIHNvXG4mIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uXG4mIzQzOyAqIEluIHRoZSBmb2xsb3dpbmcgY29kZSwgYSBcJiMzNDt1bml0XCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZVxuJiM0MzsgKiBiaXRtYXAgYml0IGNvdmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4mIzQzO1x0dTMyIHVuaXRfc2l6ZSA9IEVGSV9QT0lTT05fVU5JVF9TSVpFO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcdTAwM2UgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdW5pdF9zaXplIFx1MDAzYyBFRklfUE9JU09OX01BWF9VTklUX1NJWkUpIHtcbiYjNDM7XHRcdG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCAyKTtcbiYjNDM7XHRcdHVuaXRfc2l6ZSAqPSAyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XHRyZXR1cm4gdW5pdF9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuJiM0MztcdFx0XHQgICAgIHNpemVvZigqcG0pICYjNDM7IGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbiYjNDM7XHRwbS1cdTAwM2V1bml0X3NpemUgPSB1bml0X3NpemU7XG4mIzQzO1x0cG0tXHUwMDNlcGh5c19iYXNlID0gMDtcbiYjNDM7XHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4mIzQzO1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXG4mIzQzOyAqIGF2YWlsYWJsZVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xuJiM0MztcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4mIzQzO1x0dTMyIHVuaXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuJiM0MztcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuJiM0MztcdGlmIChwbSkge1xuJiM0MztcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbiYjNDM7XHRcdFx0ZWZpX2VycihcJiMzNDtVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlZmlfZ2V0X3JhbV90b3AoXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9lcnIoXCYjMzQ7RmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dW5pdF9zaXplID0gZWZpX3BvaXNvbl9nZW9tZXRyeShyYW1fdG9wLCBcdTAwMjZiaXRtYXBfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uYjVlMTliYTUwZGRhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBjaGFyICplZmlfY29udmVydF9jbWRsaW5lKGVmaV9sb2FkZWRfaW1hZ2VfdCAqaW1hZ2UpO1xuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdFx0XHRcdGJvb2wgaW5zdGFsbF9jZmdfdGJsKTtcbiBcbiYjNDM7ZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XG4mIzQzO1xuIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuQEAgLTExNjksNiAmIzQzOzExNzEsMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5AQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdHJldHVybiBFRklfU1VDQ0VTUztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXG4mIzQzOyAqIEB0b3A6XHRvbiByZXR1cm4sIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgbWVtb3J5IG1hcCBlbnRyeSB0aGF0IGJlY29tZXNcbiYjNDM7ICpcdFx0dXNhYmxlIFJBTVxuJiM0MzsgKlxuJiM0MzsgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XG4mIzQzOyAqIHNldHVwX2U4MjAoKSBtYXBzIHRvIEU4MjBfVFlQRV9SQU0sIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhbnkgb2ZcbiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXG4mIzQzOyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcbiYjNDM7ICogb2YgbWF4X3Bmbiwgd2hpY2ggaXMgb25seSBzZXQgb25jZSB0aGUga2VybmVsIHByb3BlciBpcyB1cC5cbiYjNDM7ICpcbiYjNDM7ICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xuJiM0MzsgKiBpcyBub3QgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XHRzdGF0dXMgY29kZVxuJiM0MzsgKi9cbiYjNDM7ZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdHU2NCByYW1fdG9wID0gMDtcbiYjNDM7XHRpbnQgaSwgbnJfZGVzYztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4mIzQzO1xuJiM0MztcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbiYjNDM7XHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbiYjNDM7XHRcdGNhc2UgRUZJX0xPQURFUl9EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuJiM0MztcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuJiM0MztcdFx0Y2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWTpcbiYjNDM7XHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuJiM0MztcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wKVxuJiM0MztcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4mIzQzO1xuJiM0MztcdCp0b3AgPSByYW1fdG9wO1xuJiM0MztcdHJldHVybiBFRklfU1VDQ0VTUztcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xuICAqIEBzaXplOlx0bWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiYjNDM7XG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0MThjNmIzYWFiODFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXG4mIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcbiYjNDM7ICogaGFyZHdhcmUtcG9pc29uZWQgZnJhbWVzIHNvIHRoZSBuZXh0IGtleGVjIGtlcm5lbCBjYW4ga2VlcCB0aGVtIG91dCBvZiBpdHNcbiYjNDM7ICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcbiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcbiYjNDM7ICogYWxsb2NhdG9yIGNvbWVzIHVwLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2VmaTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuJiM0MzsvKiBBIG5vbi1lbXB0eSBiaXRtYXAgb24gYSBwb3dlci1vZi0yIGdyaWQgdGhhdCBwaHlzX2Jhc2UgYWN0dWFsbHkgc2l0cyBvbi4gKi9cbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwbS1cdTAwM2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChwbS1cdTAwM2V1bml0X3NpemUgXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cdTAwM2V1bml0X3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVNfQUxJR05FRChwbS1cdTAwM2VwaHlzX2Jhc2UsIHBtLVx1MDAzZXVuaXRfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSByYW5nZSB0aGUgYml0bWFwIGNsYWltcyB0byBkZXNjcmliZSBoYXMgdG8gZml0IGluIGEgdTY0LiAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHR1NjQgbmJpdHMsIHNwYW47XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cocG0tXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcdTAwMjZuYml0cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS1cdTAwM2V1bml0X3NpemUsIFx1MDAyNnNwYW4pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cdTAwM2VwaHlzX2Jhc2UsIHNwYW4sIFx1MDAyNnNwYW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgdGFibGUgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBrZXJuZWwgaW4gdGhlIGtleGVjIGNoYWluLFxuJiM0MzsgKiBzbyBjaGVjayBpdHMgZ2VvbWV0cnkgYmVmb3JlIGRvaW5nIGFueSBhcml0aG1ldGljIHdpdGggaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXRcbiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX3BvaXNvbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIHRoZSBoZWFkZXIgdG8gbGVhcm4gdGhlIGJpdG1hcCBzaXplLCB0aGVuIG1hcCB0aGUgd2hvbGUgdGFibGUuICovXG4mIzQzO1x0cG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdG1lbXVubWFwKHBtKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzaXplID0gcG0tXHUwMDNlc2l6ZTtcbiYjNDM7XHRtZW11bm1hcChwbSk7XG4mIzQzO1xuJiM0MztcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLFxuJiM0MztcdFx0XHQgICAgICBNRU1SRU1BUF9XQik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuJiM0MztcbiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi9cbiYjNDM7c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XG4mIzQzO1x0dTY0IHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSkgLyBlZmlfcG9pc29uLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHRpZiAodW5pdCBcdTAwM2U9ICh1NjQpZWZpX3BvaXNvbi1cdTAwM2VzaXplICogQklUU19QRVJfQllURSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gdW5pdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVjb3JkIGEgaGFyZHdhcmUtcG9pc29uZWQgZnJhbWUgc28gdGhlIG5leHQga2VybmVsIGtlZXBzIGl0cyB1bml0IG91dCBvZiB0aGVcbiYjNDM7ICogYWxsb2NhdG9yLiBtZW1vcnlfZmFpbHVyZSgpIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGZyYW1lIGZyb20gdGhpcyBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IG9uZSBiaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzb1xuJiM0MzsgKiBhbiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRsb25nIHVuaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuJiM0MztcdGlmICh1bml0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcHBtID0gZWZpLnBvaXNvbmVkX21lbW9yeSwgcGh5c19iYXNlLCB1bml0X3NpemUsIGJpdG1hcF9zaXplLCBvZmY7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl91bml0cyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcG0gPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cG0gPSBlYXJseV9tZW1yZW1hcChwcG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXG4mIzQzO1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7XHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlzX2Jhc2UgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4mIzQzO1x0dW5pdF9zaXplID0gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdGJpdG1hcF9zaXplID0gcG0tXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cbiYjNDM7XHRtZW1ibG9ja19yZXNlcnZlKFBBR0VfQUxJR05fRE9XTihwcG0pLFxuJiM0MztcdFx0XHQgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC1cbiYjNDM7XHRcdFx0IFBBR0VfQUxJR05fRE9XTihwcG0pKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuXG4mIzQzO1x0ICogbWVtYmxvY2subWVtb3J5IGlzIG5vdCBwb3B1bGF0ZWQgdGhpcyBlYXJseSwgc28gbWVtYmxvY2tfcmVtb3ZlKClcbiYjNDM7XHQgKiBhbmQgbWVtYmxvY2tfbWFya19ub21hcCgpIHdvdWxkIGJlIG5vLW9wczsgYSByZXNlcnZhdGlvbiBpcyB3aGF0XG4mIzQzO1x0ICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nICptYXA7XG4mIzQzO1xuJiM0MztcdFx0bWFwID0gZWFybHlfbWVtcmVtYXAocHBtICYjNDM7IG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgYml0bWFwKSAmIzQzOyBvZmYsIGNodW5rKTtcbiYjNDM7XHRcdGlmICghbWFwKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7Q291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbiYjNDM7XHRcdFx0dTY0IHVuaXQgPSBvZmYgKiBCSVRTX1BFUl9CWVRFICYjNDM7IGJpdDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICYjNDM7IHVuaXQgKiB1bml0X3NpemUsIHVuaXRfc2l6ZSk7XG4mIzQzO1x0XHRcdG5yX3VuaXRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX3VuaXRzKVxuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRucl91bml0cywgdW5pdF9zaXplIFx1MDAzZVx1MDAzZSAxMCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgJiM0Mzs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbiYjNDM7I2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4mIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcbiYjNDM7XHR1MzJcdFx0dmVyc2lvbjtcbiYjNDM7XHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuJiM0MztcdHU2NFx0XHRwaHlzX2Jhc2U7XHQvKiBwaHlzIGFkZHJlc3MgY292ZXJlZCBieSBiaXQgMCAqL1xuJiM0MztcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcbiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICYjNDM7NDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTI4Niw2ICYjNDM7MTI4Nyw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4mIzQzO1x0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG4mIzQzO1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDssCiAgICAmIzM0O2VmaV9nZXRfcmFtX3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJYm9vbCAmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgT1ZNRl9ERUJVR19MT0cKIAlib29sICYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmcyYjMzQ7CiAJZGVwZW5kcyBvbiBFRkkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKaW5kZXggOGVmYmNmNjk5ZTRmZi4uMDVkMGE0OTA5MjNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKQEAgLTQzLDQgJiM0Mzs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pCQkmIzQzOz0gZWFybHljb24ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pCQkmIzQzOz0gY3Blci1hcm0ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9YODYpCQkmIzQzOz0gY3Blci14ODYubwogb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKQkJJiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm8KJiM0MztvYmotJChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkJJiM0Mzs9IHBvaXNvbi5vCiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKQkJJiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTU1LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBlZmkgX19yZWFkX21vc3RseSBlZmkgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJLnVuYWNjZXB0ZWQJCT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwkucG9pc29uZWRfbWVtb3J5CT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKJiM0MzsjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGVmaSk7CiAKQEAgLTY0Niw2ICYjNDM7NjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAl7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnVuYWNjZXB0ZWQsCSYjMzQ7VW5hY2NlcHRlZCYjMzQ7CX0sCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJe0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCwJJmFtcDtlZmkucG9pc29uZWRfbWVtb3J5LAkmIzM0O1BPSVNPTiYjMzQ7CX0sCiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUIKIAl7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELAkmYW1wO3ByaW1hcnlfZGlzcGxheV90YWJsZQkJCX0sCiAjZW5kaWYKQEAgLTgwNiw2ICYjNDM7ODEyLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsCiAJCX0KIAl9CiAKJiM0MzsJZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwpAQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqLwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRQlTWl8xTQomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFCVNaXzFHCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzbwomIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uCiYjNDM7ICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhICYjMzQ7dW5pdCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZQomIzQzOyAqIGJpdG1hcCBiaXQgY292ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7CiYjNDM7CXUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTsKJiM0MzsKJiM0MzsJd2hpbGUgKERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSkgJmd0OyBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVuaXRfc2l6ZSAmbHQ7IEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkgewomIzQzOwkJbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIDIpOwomIzQzOwkJdW5pdF9zaXplICo9IDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsJcmV0dXJuIHVuaXRfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsCiYjNDM7CQkJCQkJCSAgdTMyIHVuaXRfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gdW5pdF9zaXplOwomIzQzOwlwbS0mZ3Q7cGh5c19iYXNlID0gMDsKJiM0MzsJcG0tJmd0O3NpemUgPSBiaXRtYXBfc2l6ZTsKJiM0MzsJbWVtc2V0KHBtLSZndDtiaXRtYXAsIDAsIGJpdG1hcF9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBtOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlCiYjNDM7ICogYXZhaWxhYmxlCiYjNDM7ICovCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CXUzMiB1bml0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgJmFtcDtiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMDk0LDYgJiM0MzsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTsKIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAkJCQlib29sIGluc3RhbGxfY2ZnX3RibCk7CiAKJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTsKJiM0MzsKIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgbWF4KTsKIApAQCAtMTE2OSw2ICYjNDM7MTE3MSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfQogCiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jCmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYwpAQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAlyZXR1cm4gRUZJX1NVQ0NFU1M7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNCiYjNDM7ICogQHRvcDoJb24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzCiYjNDM7ICoJCXVzYWJsZSBSQU0KJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXQKJiM0MzsgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mCiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzCiYjNDM7ICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZQomIzQzOyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvCiYjNDM7ICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJc3RhdHVzIGNvZGUKJiM0MzsgKi8KJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKIC8qKgogICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXMKICAqIEBzaXplOgltaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYQomIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHMKJiM0MzsgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0cwomIzQzOyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsCiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGUKJiM0MzsgKiBhbGxvY2F0b3IgY29tZXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2VmaTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbG9nMi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzOy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKCFwbS0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHBtLSZndDt1bml0X3NpemUgJmx0OyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBJU19BTElHTkVEKHBtLSZndDtwaHlzX2Jhc2UsIHBtLSZndDt1bml0X3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0cywgc3BhbjsKJiM0MzsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS0mZ3Q7c2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCAmYW1wO25iaXRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS0mZ3Q7cGh5c19iYXNlLCBzcGFuLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sCiYjNDM7ICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XG4mIzM0OywKJiM0MzsJCQlwbS0mZ3Q7dmVyc2lvbik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi8KJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IHBtLSZndDtzaXplOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLAomIzQzOwkJCSAgICAgIE1FTVJFTUFQX1dCKTsKJiM0MzsJV0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi8KJiM0MztzdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTsKJiM0MzsJdTY0IHVuaXQ7CiYjNDM7CiYjNDM7CWlmIChhZGRyICZsdDsgZWZpX3BvaXNvbi0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLSZndDtwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSAodTY0KWVmaV9wb2lzb24tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZQomIzQzOyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvCiYjNDM7ICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwOwomIzQzOwomIzQzOwlpZiAocHBtID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5c19iYXNlID0gcG0tJmd0O3BoeXNfYmFzZTsKJiM0MzsJdW5pdF9zaXplID0gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJYml0bWFwX3NpemUgPSBwbS0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi8KJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSwKJiM0MzsJCQkgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC0KJiM0MzsJCQkgUEFHRV9BTElHTl9ET1dOKHBwbSkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuCiYjNDM7CSAqIG1lbWJsb2NrLm1lbW9yeSBpcyBub3QgcG9wdWxhdGVkIHRoaXMgZWFybHksIHNvIG1lbWJsb2NrX3JlbW92ZSgpCiYjNDM7CSAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXQKJiM0MzsJICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MzsJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7CiYjNDM7CQl1bnNpZ25lZCBsb25nICptYXA7CiYjNDM7CiYjNDM7CQltYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJICAgIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CQlpZiAoIW1hcCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJCXU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSAmIzQzOyBiaXQ7CiYjNDM7CiYjNDM7CQkJbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgJiM0MzsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJCQlucl91bml0cyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfdW5pdHMpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xuJiMzNDssCiYjNDM7CQkJbnJfdW5pdHMsIHVuaXRfc2l6ZSAmZ3Q7Jmd0OyAxMCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MCkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi8KJiM0MzsJdTY0CQlzaXplOwkJLyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwliaXRtYXBbXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkUJU1pfMk0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLjFjYzRlOTJlOTg3NDggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEyODYsNiAmIzQzOzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYXJkd2FyZSBQb2lzb25lZCBQYWdlIEtleGVjIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIGF0dGVtcHRpbmcgdG8gcHJvcGFnYXRlIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBhY3Jvc3MgYSBrZXhlYyByZWJvb3QgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEludGVyZXN0aW5nIGFwcHJvYWNoLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBudWFuY2VzIG9mIHRoaXMgdG8gc2VlIGlmIGl0JiMzOTtzIGFkZGluZyBhbnkgdmFsdWUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmlza3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGlzIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AsIHdoaWNoIGlzIGdvb2Q7IHNlcGFyYXRpbmcgdGhlIGxvZ2ljIGZyb20gdGhlIGNvcmUgRUZJIHN0dWIgaXMgc291bmQuIFRoZSBgS2NvbmZpZ2AgY2hhbmdlIGFuZCB0aGUgaG9vayBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5IGNhbGxpbmcgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbilgIHNlZW1zIGxpa2UgdGhlIGNydWNpYWwgc3RlcCB3aGVuIGEgcGFnZSBpcyBmbGFnZ2VkIGFzIHBvaXNvbmVkLiBUaGVuIHRoZSBFRkkgc3R1YiBpcyBiZWluZyBtb2RpZmllZCB0byBpbnN0YWxsIHRoaXMgcG9pc29uZWQgbWVtb3J5IHRhYmxlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBjYW4gdHJpZ2dlciBgbW0vbWVtb3J5LWZhaWx1cmUuY2Agd2l0aCBpbmplY3RlZCBtZW1vcnkgZmFpbHVyZXMgdGhyb3VnaCBgbWFkdmlzZWAgb3Igc3lzZnMsIHRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gQW5kLCBzaW5jZSBpdOKAmXMgRUZJIGJhc2VkLCB3ZSBuZWVkIHRvIGJvb3QgdGhlIGtlcm5lbCB2aWEgRUZJLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgd2F5IG9mIGRvaW5nIHRoaW5ncy4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGlzIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGNhbGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlLCBhbmQgd2hldGhlciB0aGUgb3RoZXIgYml0cyBhbmQgcGllY2VzIGFyZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQ/CgpJcyBmdXp6aW5nIHRoaXMgd29ydGh3aGlsZT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBuZXcgY29kZSBwYXRocyBpbiBib3RoIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBFRkkgYm9vdC4gVGhlIG5ldyBmdW5jdGlvbnMgYXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9wb2lzb25faW5pdGAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXJlIGFsbCBwb3RlbnRpYWwgdGFyZ2V0cy4KCkJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBpdCYjMzk7cyBub3QganVzdCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIHRoYXTigJlzIG5lZWRlZCwgaXQgZGVwZW5kcyBvbiBgRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUYC4gU28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIHRob3NlIGNvbmZpZ3MgdG9vLgoKTm93LCBhIHF1aWNrIGdyZXAgZm9yIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgYWNyb3NzIHRoZSBjb2RlYmFzZSBzaG91bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIGFueSBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gVGhhdCYjMzk7bGwgYmUgbXkgbmV4dCBzdGVwIGJlZm9yZSBhIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMDE9c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMC0gKi9cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEyMTp2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODY9dm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODc6dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbik7XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODgtI2Vsc2VcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4OT1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjkwOnN0YXRpYyBpbmxpbmUgdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikgeyB9XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyOTEtI2VuZGlmXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMjgyPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjkwLVx0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTE6XHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyOTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGb2N1czogRUZJIE1lbW9yeSBQb2lzb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBFRkkgbWVtb3J5IHBvaXNvbmluZyBmdW5jdGlvbmFsaXR5LiBSaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGNvbmNlbnRyYXRlIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLiBUaGVzZSBhcmUgcHJvYmFibHkgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIHdob2xlIG1lbW9yeSBwb2lzb25pbmcgc3lzdGVtIHdvcmtzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAgdGhvdWdoLCBJIHNob3VsZCBmaXJzdCBkZXRlcm1pbmUgd2hldGhlciBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgIGlzIHN0YXRpYyBvciBub3QsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyBteSBuZXh0IHF1aWNrIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM9ODA1PXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MjgtICovXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jOjgyOTp2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgzMC17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jPTE1Mz1lZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4MS1cdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jOjE4MjpcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTgzLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oPTExNzI9dm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3NC0jaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzU6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oLTExNzYtI2Vsc2VcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzc6c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3OC0jZW5kaWZcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmM9OTEyPXZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYy0xMDI1LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jOjEwMjY6XHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jLTEwMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVGSSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBFRkktcmVsYXRlZCBrZXJuZWwgY29kZS4gSSYjMzk7bSBzZWVpbmcgYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHBvaXNvbmluZywgYW5kIEkgd2FudCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBmaXQgdG9nZXRoZXIuIEZpcnN0LCBJJiMzOTt2ZSBnb3QgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGFuZCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYC4gVGhlbiwgSSBoYXZlIGBlZmlfZ2V0X3JhbV90b3BgIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jYCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGRldGVybWluaW5nIHRoZSB0b3Agb2YgdXNhYmxlIFJBTS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgbWVtb3J5IHBvaXNvbmluZyBuZWVkcyB0byBrbm93IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBtZW1vcnkgaXQgY2FuIHBsYXkgd2l0aC4gIEFuZCBmaW5hbGx5LCBJJiMzOTt2ZSBnb3QgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAgYW5kIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgaW4gYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBwb2lzb25pbmcgbWVjaGFuaXNtIGl0c2VsZi4gIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gYHBvaXNvbi5jYCBhbmQgZmlndXJlIG91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBtZW1vcnkgcG9pc29uaW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBlZmlfcG9pc29uX2luaXRgLiBMZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgZGVjbGFyZWQgc3RhdGljIHRvIGdhdWdlIGl0cyByZWFjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmlfcG9pc29uX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9NTg9ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtNzMtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo3NDpzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTc1LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy05Ny19XG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo5ODplYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHNpdHVhdGlvbiBmZWVscy4uLmZpeGVkLiBTdGFnbmFudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5LiBBaCwgYSBwb3NzaWJsZSBsZWFkISBMZXQgbWUgY2hlY2sgc29tZXRoaW5nOiBpcyB0aGlzIGBlZmlfcG9pc29uX2FsbG9jYCBmdW5jdGlvbiBkZWNsYXJlZCBhcyBzdGF0aWM/IFRoYXQgbWlnaHQgZXhwbGFpbiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IsIGlmIGl0JiMzOTtzIGdvdCByZXN0cmljdGVkIHNjb3BlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX3BvaXNvbl9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTc4OT1zdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MDQtLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4MDU6c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMtODA2LVx0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM9ODI5PXZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTg1MS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmM6ODUyOlx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04NTMtXHRpZiAoIXBtKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEVGSSBQb2lzb25lZCBNZW1vcnkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgbmV3IHRhcmdldDogRUZJIHBvaXNvbmVkIG1lbW9yeS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLgoKSSBzZWUgdGhhdCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgIGFuZCBgZWZpX2dldF9yYW1fdG9wYCBhcmUgcGFydCBvZiB0aGUgRUZJIHN0dWIsIHdoaWNoIGlzIGEgYml0IG9mIGEgdHJpY2t5IGFyZWEuIFN5emthbGxlciBjYW4gcnVuIHRoZSBFRkkgc3R1YiBpZiB3ZSBib290IHZpYSBFRkksIGJ1dCBpdCYjMzk7cyBnZW5lcmFsbHkgbm90IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIGZ1enppbmcuIEluc3RlYWQsIHdlJiMzOTtyZSBsaWtlbHkgZnV6emluZyB0aGUga2VybmVsJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIEVGSSB0YWJsZXMsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGFuZCBgZWZpX3BvaXNvbl9pbml0YCBjb21lIGludG8gcGxheS4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIGdldHRpbmcgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gd2hhdCBjb25maWdzIGFyZSBuZWVkZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gYmUgY29tcHJlaGVuc2l2ZS4gSXQgbG9va3MgbGlrZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIGl0IGRlcGVuZHMgb24gYEVGSV9TVFVCYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGA2NEJJVGAsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHNwZWNpZnkgYWxsIG9mIHRob3NlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgRUZJX1NUVUJgIGFyZSBlbmFibGVkLCBidXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHRoZSBjcml0aWNhbCBvbmUuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgaW5kZWVkIHRoZSBtYWluIG9uZS4KCkdpdmVuIHRoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBoYW5kbGVzIGFuIGB1bnNpZ25lZCBsb25nIHBmbmAsIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaW50ZXJmYWNlIHRvIHRhcmdldC4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCBhZGRzIG5ldyBsb2dpYyBhcm91bmQgbWVtb3J5LWZhaWx1cmUgYW5kIEVGSSBib290LgoKKipTbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOioqCgoqICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYAoqICAgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAKKiAgIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAKKiAgIGBlZmlfZ2V0X3JhbV90b3BgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MjUxPWNvbmZpZyBFRklfQ09DT19TRUNSRVRcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTI2NS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MjY2OmNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTI2Ny1cdGJvb2wgXCYjMzQ7Q2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzcwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIEVGSV9QT0lTT05FRF9NRU1PUlkgYW5kIFZlcmlmaWNhdGlvbiBvZiBBY3Rpb25fUmVzdWx0JiMzOTtzIFN0YXRpYyBOYXR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBhZGQgYEVGSV9QT0lTT05FRF9NRU1PUllgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBjcml0aWNhbCBhYm91dCBgYWN0aW9uX3Jlc3VsdGAuIEkgKnJlYWxseSogbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFjdGlvbl9yZXN1bHRgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgb3RoZXJ3aXNlIGFyZSBub3Qgc29tZXRoaW5nIEkgd2FudCB0byB0aGluayBhYm91dCByaWdodCBub3cuIEkgaGF2ZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhhdCBpbW1lZGlhdGVseSwgYW5kIEkgaGF2ZSBteSB0b29scyByZWFkeSB0byBnby4gSSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBjb21taXR0aW5nIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3Rpb25fcmVzdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oPTE4Mz1UUkFDRV9FVkVOVChjb21wYWN0X3JldHJ5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oOjIxMjpcdFRQX3ByaW50ayhcJiMzNDtvcmRlcj0lZCBwcmlvcml0eT0lcyBjb21wYWN0aW9uX3Jlc3VsdD0lcyByZXRyaWVzPSVkIG1heF9yZXRyaWVzPSVkIHNob3VsZF9yZXRyeT0lZFwmIzM0OyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMy1cdFx0XHRfX2VudHJ5LVx1MDAzZW9yZGVyLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI2OT1zdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4MS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4MjpzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgzLVx0XHRcdCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzAzPXN0YXRpYyBpbnQgcGFnZV9hY3Rpb24oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTY6XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIHBzLVx1MDAzZXR5cGUsIHJlc3VsdCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTctfVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjA4ND1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAxLVx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMDI6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMDMtXHRjYXNlIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEwOC1cdFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEKVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTA5Olx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMC1cdFx0ZWxzZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTExOlx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfSFVHRSwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMi1cdFx0cmV0dXJuIHJ2O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE0Mi1cdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTQzOlx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNDQtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTQ5LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTUwOlx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTEtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTc3PXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfZGV2X3BhZ2VtYXAodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXHRpZiAocmMgIT0gLUVPUE5PVFNVUFApXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfREFYLCByYyA/IE1GX0ZBSUxFRCA6IE1GX1JFQ09WRVJFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDYtXHRyZXR1cm4gcmM7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzIzPXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzQ3LVx0XHRpZiAoIW1mX2hhbmRsZWQpXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNDg6XHRcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfUEZOX01BUCwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzNDktXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYwLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYxOlx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfUEZOX01BUCwgTUZfUkVDT1ZFUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2Mi19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg5PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Ny1cdFx0XHRwdXRfcGFnZShwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ0ODpcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQ5LVx0XHRnb3RvIHVubG9ja19tdXRleDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NzgtXHRcdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDc5Olx0XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQlVERFksIHJlcyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0ODAtXHRcdH0gZWxzZSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0ODE6XHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0ODItXHRcdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTItXHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDkzOlx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTQtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ5Ni1cdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDk3Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTgtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0NC1cdFx0XHRwdXRfcGFnZShwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0NTpcdFx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOU1BMSVRfVEhQLCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ2LVx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OC1cdGlmICghaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhmb2xpbywgcCwgcGZuLCBmbGFncykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU5OTpcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDAtXHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA3LVx0ICAgIGZvbGlvLVx1MDAzZW1hcHBpbmcgPT0gTlVMTCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjA4Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1RSVU5DQVRFRF9MUlUsIE1GX0lHTk9SRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA5LVx0XHRnb3RvIHVubG9ja19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRm9jdXM6IFVFRkkgUG9pc29uZWQgTWVtb3J5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFVFRkkgbWVtb3J5IHBvaXNvbmluZyBpbXBsZW1lbnRhdGlvbi4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbWFya2luZyBhbmQgaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUsIGZvciBzb21lIHJlYXNvbiwgY29uc2lkZXJlZCAmIzM0O3BvaXNvbmVkJiMzNDsg4oCTIGxpa2VseSBzaWduaWZ5aW5nIHNvbWUgc29ydCBvZiBoYXJkd2FyZSBpc3N1ZSBvciBhIHJlZ2lvbiB0aGF0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIEkgZGVsdmUgZGVlcGVyLCBpcyBhYm91dCB0aGUgc2NvcGUgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBtZW1vcnkgcmVzZXJ2YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IHRoZSBwb2lzb25lZCBtZW1vcnkgaXMgZGVjbGFyZWQgYW5kIHN1YnNlcXVlbnRseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIElmIGl0IGlzIHN0YXRpYywgdGhlbiBteSBjb25jZXJucyByZWdhcmRpbmcgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcmUgYWxsZXZpYXRlZC4gSSB3aWxsIGJlZ2luIGJ5IHZlcmlmeWluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTcxNT1pbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy04MTQtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo4MTU6XHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTgxNi1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMjE9dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMzQtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMzU6dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy0xMzYte1xuLS1cbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT1zdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4tLVxuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg1LSNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg2OnZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg3LXZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9lZmkuaC0xMjg4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODk6c3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvZWZpLmgtMTI5MC1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk4MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIEVGSSBwb2lzb25lZCBtZW1vcnkgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciBob3cgdG8gZW5hYmxlIGl0IHByb3Blcmx5LiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UuIEkgZG91YmxlLWNoZWNrZWQgdG8gYmUgc3VyZSwgYnV0IHRoZSBzdGF0aWMgZnVuY3Rpb25zLCBsaWtlIGBlZmlfcG9pc29uX2luaXRgLCBgZWZpX3BvaXNvbl90YWJsZV92YWxpZGAsIGBlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkYCwgYGVmaV9wb2lzb25fcmFuZ2VfdmFsaWRgLCBgZWZpX3BvaXNvbl91bml0YCwgYGVmaV9wb2lzb25fZ2VvbWV0cnlgLCBhbmQgYGVmaV9wb2lzb25fYWxsb2NgIGFyZW4mIzM5O3QgcGFydCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXNzdWUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgZGVwZW5kcyBvbiBgRUZJX1NUVUJgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYDY0QklUYC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgYE1FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgYEVGSV9QT0lTT05FRF9NRU1PUllgIHdvbiYjMzk7dCBiZSBlaXRoZXIsIGFuZCB2aWNlIHZlcnNhLiBJIHNob3VsZCBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBFRklfU1RVQmAganVzdCB0byBiZSBzYWZlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYEVGSV9TVFVCYCYjMzk7cyBsb2NhdGlvbiBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ2AsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVGSV9TVFVCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTYwMi1cbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcbmFyY2gvYXJtL0tjb25maWctMTYwNC1cdGJvb2xcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MjQ2NT1lbmRjaG9pY2VcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDY2LVxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL2FybTY0L0tjb25maWctMjQ2OC1cdGJvb2xcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTQ5OD1jb25maWcgRUZJXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwNjpjb25maWcgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTA3LVx0Ym9vbCBcJiMzNDtFRkkgYm9vdCBzdHViIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTI0OT1lbmRjaG9pY2VcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjUwLVxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXG5hcmNoL3Jpc2N2L0tjb25maWctMTI1Mi1cdGJvb2xcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4ODE9Y29uZmlnIEVGSVxuLS1cbmFyY2gveDg2L0tjb25maWctMTg5OC1cbmFyY2gveDg2L0tjb25maWc6MTg5OTpjb25maWcgRUZJX1NUVUJcbmFyY2gveDg2L0tjb25maWctMTkwMC1cdGJvb2wgXCYjMzQ7RUZJIHN0dWIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBnb3QgYEVGSV9TVFVCYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBvbiBteSBtaW5kLiBJIGtub3cgYm90aCBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBiZXR0ZXIgaW4gY29udGV4dC4gYEVGSV9TVFVCYCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvcHRpb24uCgpNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIGFuZCBJIGZpZ3VyZSB0aGUgcGxhY2UgdG8gc3RhcnQgd2l0aCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBTbywgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbW0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGZvciBhbnkgbWVtb3J5IHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMuIEkmIzM5O20gc3VyZSBJJiMzOTtsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgYWxsIGFib3V0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM3MQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRUZJIE1lbW9yeSBQb2lzb25pbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG1lbnRhbGx5IG9yZ2FuaXppbmcgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgRUZJX1NUVUJgLiBIYW5nIG9uLi4uIGBFRklfU1RVQmAgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIGJvb2xlYW5zLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLiBSaWdodCwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIG9uIGhhbmRsaW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBFRkkgdGFibGUgdG8gc3RvcmUgdGhlIGJpdG1hcCBvZiBwb2lzb25lZCBtZW1vcnksIGFuZCB0aGVyZSBhcmUgaG9va3Mgd2l0aGluIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2VzLiBUaGVyZSBhcmUgYWxzbyBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiBmb3IgdGFibGUgYWxsb2NhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJvdGggZHVyaW5nIEVGSSBib290ICphbmQqIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBleHBsaWNpdGx5IGluamVjdGVkLCBmb3IgZXhhbXBsZSwgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gQ2xldmVyLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY29udHJpYnV0aW9uLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBhcmVhIGlzIGxpa2VseSB0byBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSBzZWUgdGhhdCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlOiBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgLiBUaGVzZSBhcmUgYWxsIGxvZ2ljYWwgYW5kIGV4cGVjdGVkIGNob2ljZXMsIHRhcmdldGluZyB0aGUgY29yZSBmdW5jdGlvbnMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVub3VnaCBmb3IgbXkgaW5pdGlhbCByZXZpZXcuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzIG9mIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2luc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlJiMzNDssCiAgICAmIzM0O2VmaV9nZXRfcmFtX3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUmIzM0OywKICAgICYjMzQ7ZWZpX2dldF9yYW1fdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY2FycnlpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gSXQgaW50cm9kdWNlcyBhIG5ldyBFRkkgY29uZmlnIHRhYmxlIHRvIHN0b3JlIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLCBob29rcyBpbnRvIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgcG9pc29uZWQgcGFnZXMsIGFuZCBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiB0byBhbGxvY2F0ZSBhbmQgaW5zdGFsbCB0aGUgdGFibGUuIFRoZSBuZXcgbG9naWMgaXMgcmVhY2hhYmxlIGR1cmluZyBFRkkgYm9vdCBhbmQgd2hlbiBtZW1vcnkgZmFpbHVyZXMgYXJlIGluamVjdGVkIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJYm9vbCAmIzM0O0NhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBNRU1PUllfRkFJTFVSRSAmYW1wOyZhbXA7IDY0QklUCiYjNDM7CWhlbHAKJiM0MzsJICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVucwomIzQzOwkgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZQomIzQzOwkgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgT1ZNRl9ERUJVR19MT0cKIAlib29sICYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmcyYjMzQ7CiAJZGVwZW5kcyBvbiBFRkkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKaW5kZXggOGVmYmNmNjk5ZTRmZi4uMDVkMGE0OTA5MjNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUKQEAgLTQzLDQgJiM0Mzs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pCQkmIzQzOz0gZWFybHljb24ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pCQkmIzQzOz0gY3Blci1hcm0ubwogb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9YODYpCQkmIzQzOz0gY3Blci14ODYubwogb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKQkJJiM0Mzs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm8KJiM0MztvYmotJChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkJJiM0Mzs9IHBvaXNvbi5vCiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKQkJJiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTU1LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBlZmkgX19yZWFkX21vc3RseSBlZmkgPSB7CiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZCiAJLnVuYWNjZXB0ZWQJCT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwkucG9pc29uZWRfbWVtb3J5CT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKJiM0MzsjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGVmaSk7CiAKQEAgLTY0Niw2ICYjNDM7NjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAl7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnVuYWNjZXB0ZWQsCSYjMzQ7VW5hY2NlcHRlZCYjMzQ7CX0sCiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJe0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCwJJmFtcDtlZmkucG9pc29uZWRfbWVtb3J5LAkmIzM0O1BPSVNPTiYjMzQ7CX0sCiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUIKIAl7TElOVVhfRUZJX1BSSU1BUllfRElTUExBWV9UQUJMRV9HVUlELAkmYW1wO3ByaW1hcnlfZGlzcGxheV90YWJsZQkJCX0sCiAjZW5kaWYKQEAgLTgwNiw2ICYjNDM7ODEyLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsCiAJCX0KIAl9CiAKJiM0MzsJZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCmluZGV4IGYyN2YyZTFmMDAxOTkuLjcyNThlY2RmMWY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwpAQCAtNzc0LDMgJiM0Mzs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqLwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRQlTWl8xTQomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFCVNaXzFHCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzbwomIzQzOyAqIGJpdCBOIGNvdmVycyB1bml0IE4uCiYjNDM7ICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhICYjMzQ7dW5pdCYjMzQ7IGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZQomIzQzOyAqIGJpdG1hcCBiaXQgY292ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7CiYjNDM7CXUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTsKJiM0MzsKJiM0MzsJd2hpbGUgKERJVl9ST1VORF9VUChucl91bml0cywgQklUU19QRVJfQllURSkgJmd0OyBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVuaXRfc2l6ZSAmbHQ7IEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkgewomIzQzOwkJbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIDIpOwomIzQzOwkJdW5pdF9zaXplICo9IDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsJcmV0dXJuIHVuaXRfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsCiYjNDM7CQkJCQkJCSAgdTMyIHVuaXRfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gdW5pdF9zaXplOwomIzQzOwlwbS0mZ3Q7cGh5c19iYXNlID0gMDsKJiM0MzsJcG0tJmd0O3NpemUgPSBiaXRtYXBfc2l6ZTsKJiM0MzsJbWVtc2V0KHBtLSZndDtiaXRtYXAsIDAsIGJpdG1hcF9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBtOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlCiYjNDM7ICogYXZhaWxhYmxlCiYjNDM7ICovCiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CXUzMiB1bml0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fdG9wKCZhbXA7cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgJmFtcDtiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLAomIzQzOwkJCSAgICAgJmFtcDtwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTsKJiM0MzsJCWVmaV9lcnIoJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCQkJIEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApOwogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiYjNDM7CWluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7CiAKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCkBAIC0xMDk0LDYgJiM0MzsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTsKIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAkJCQlib29sIGluc3RhbGxfY2ZnX3RibCk7CiAKJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTsKJiM0MzsKIGVmaV9zdGF0dXNfdCBlZmlfYWxsb2NhdGVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICphZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgbWF4KTsKIApAQCAtMTE2OSw2ICYjNDM7MTE3MSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfQogCiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTsKIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jCmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYwpAQCAtNjQsNiAmIzQzOzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCwKIAlyZXR1cm4gRUZJX1NVQ0NFU1M7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNCiYjNDM7ICogQHRvcDoJb24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzCiYjNDM7ICoJCXVzYWJsZSBSQU0KJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXQKJiM0MzsgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mCiYjNDM7ICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzCiYjNDM7ICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZQomIzQzOyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvCiYjNDM7ICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJc3RhdHVzIGNvZGUKJiM0MzsgKi8KJiM0MztlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwl1NjQgcmFtX3RvcCA9IDA7CiYjNDM7CWludCBpLCBucl9kZXNjOwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJmFtcDttYXAsIGZhbHNlKTsKJiM0MzsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKJiM0MzsJCXJldHVybiBzdGF0dXM7CiYjNDM7CiYjNDM7CW5yX2Rlc2MgPSBtYXAtJmd0O21hcF9zaXplIC8gbWFwLSZndDtkZXNjX3NpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9kZXNjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZWZpX21lbW9yeV9kZXNjX3QgKmQ7CiYjNDM7CiYjNDM7CQlkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC0mZ3Q7bWFwLCBtYXAtJmd0O2Rlc2Nfc2l6ZSwgaSk7CiYjNDM7CQlzd2l0Y2ggKGQtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgRUZJX0xPQURFUl9DT0RFOgomIzQzOwkJY2FzZSBFRklfTE9BREVSX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0NPREU6CiYjNDM7CQljYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6CiYjNDM7CQljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgomIzQzOwkJY2FzZSBFRklfVU5BQ0NFUFRFRF9NRU1PUlk6CiYjNDM7CQkJcmFtX3RvcCA9IG1heChyYW1fdG9wLAomIzQzOwkJCQkgICAgICBkLSZndDtwaHlzX2FkZHIgJiM0MzsgZC0mZ3Q7bnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCkKJiM0MzsJCXJldHVybiBFRklfTk9UX0ZPVU5EOwomIzQzOwomIzQzOwkqdG9wID0gcmFtX3RvcDsKJiM0MzsJcmV0dXJuIEVGSV9TVUNDRVNTOwomIzQzO30KJiM0MzsKIC8qKgogICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXMKICAqIEBzaXplOgltaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKQEAgLTEwMjMsNiAmIzQzOzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSwKIAogCXNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7CiAKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewogCQllZmlfZXJyKCYjMzQ7ZXhpdF9ib290KCkgZmFpbGVkIVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYQomIzQzOyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHMKJiM0MzsgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0cwomIzQzOyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsCiYjNDM7ICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGUKJiM0MzsgKiBhbGxvY2F0b3IgY29tZXMgdXAuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2VmaTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbG9nMi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzOy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKCFwbS0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHBtLSZndDt1bml0X3NpemUgJmx0OyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tJmd0O3VuaXRfc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBJU19BTElHTkVEKHBtLSZndDtwaHlzX2Jhc2UsIHBtLSZndDt1bml0X3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi8KJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0cywgc3BhbjsKJiM0MzsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS0mZ3Q7c2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCAmYW1wO25iaXRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS0mZ3Q7dW5pdF9zaXplLCAmYW1wO3NwYW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS0mZ3Q7cGh5c19iYXNlLCBzcGFuLCAmYW1wO3NwYW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sCiYjNDM7ICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdAomIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKQomIzQzO3sKJiM0MzsJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XG4mIzM0OywKJiM0MzsJCQlwbS0mZ3Q7dmVyc2lvbik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1NjQgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi8KJiM0MzsJcG0gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSwgTUVNUkVNQVBfV0IpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwbSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkgewomIzQzOwkJbWVtdW5tYXAocG0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc2l6ZSA9IHBtLSZndDtzaXplOwomIzQzOwltZW11bm1hcChwbSk7CiYjNDM7CiYjNDM7CWVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSAmIzQzOyBzaXplLAomIzQzOwkJCSAgICAgIE1FTVJFTUFQX1dCKTsKJiM0MzsJV0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9wb2lzb25faW5pdCk7CiYjNDM7CiYjNDM7LyogQml0bWFwIHVuaXQgY292ZXJpbmcgQHBmbiwgb3IgLTEgaWYgdGhlIHBmbiBmYWxscyBvdXRzaWRlIHRoZSB0YWJsZS4gKi8KJiM0MztzdGF0aWMgbG9uZyBlZmlfcG9pc29uX3VuaXQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTsKJiM0MzsJdTY0IHVuaXQ7CiYjNDM7CiYjNDM7CWlmIChhZGRyICZsdDsgZWZpX3BvaXNvbi0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLSZndDtwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmZ3Q7PSAodTY0KWVmaV9wb2lzb24tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gdW5pdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZQomIzQzOyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvCiYjNDM7ICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uCiYjNDM7ICovCiYjNDM7dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWxvbmcgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFlZmlfcG9pc29uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bml0ID0gZWZpX3BvaXNvbl91bml0KHBmbik7CiYjNDM7CWlmICh1bml0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2V0X2JpdCh1bml0LCBlZmlfcG9pc29uLSZndDtiaXRtYXApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjsKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwOwomIzQzOwomIzQzOwlpZiAocHBtID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBtID0gZWFybHlfbWVtcmVtYXAocHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CWlmICghcG0pIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHsKJiM0MzsJCS8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovCiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5c19iYXNlID0gcG0tJmd0O3BoeXNfYmFzZTsKJiM0MzsJdW5pdF9zaXplID0gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJYml0bWFwX3NpemUgPSBwbS0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi8KJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSwKJiM0MzsJCQkgUEFHRV9BTElHTihwcG0gJiM0Mzsgc2l6ZW9mKCpwbSkgJiM0MzsgYml0bWFwX3NpemUpIC0KJiM0MzsJCQkgUEFHRV9BTElHTl9ET1dOKHBwbSkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuCiYjNDM7CSAqIG1lbWJsb2NrLm1lbW9yeSBpcyBub3QgcG9wdWxhdGVkIHRoaXMgZWFybHksIHNvIG1lbWJsb2NrX3JlbW92ZSgpCiYjNDM7CSAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXQKJiM0MzsJICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MzsJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBiaXRtYXBfc2l6ZTsgb2ZmICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGJpdCwgbmJpdHMgPSBjaHVuayAqIEJJVFNfUEVSX0JZVEU7CiYjNDM7CQl1bnNpZ25lZCBsb25nICptYXA7CiYjNDM7CiYjNDM7CQltYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnksCiYjNDM7CQkJCQkJICAgIGJpdG1hcCkgJiM0Mzsgb2ZmLCBjaHVuayk7CiYjNDM7CQlpZiAoIW1hcCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFwLCBuYml0cykgewomIzQzOwkJCXU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSAmIzQzOyBiaXQ7CiYjNDM7CiYjNDM7CQkJbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgJiM0MzsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTsKJiM0MzsJCQlucl91bml0cyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQllYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfdW5pdHMpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xuJiMzNDssCiYjNDM7CQkJbnJfdW5pdHMsIHVuaXRfc2l6ZSAmZ3Q7Jmd0OyAxMCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MCkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjY5LDYgJiM0MzsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi8KJiM0MzsJdTY0CQlzaXplOwkJLyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwliaXRtYXBbXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkUJU1pfMk0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLjFjYzRlOTJlOTg3NDggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEyODYsNiAmIzQzOzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLAogCWlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEICZhbXA7JmFtcDsgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkgewogCQludW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7CiAJCXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7CiYjNDM7CQkvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovCiYjNDM7CQllZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pOwogCX0KIAogCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTEKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZJIFBvaXNvbmVkIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgdG8gaGFuZGxlIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYy4gSSBzZWUgdGhleSYjMzk7cmUgYWRkaW5nIGEgbmV3IEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdCwgYSBuZXcgdGFibGUgdG8gdHJhY2sgdGhlIHBvaXNvbmVkIG1lbW9yeS4KCkkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgY29kZSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSB0YWJsZSBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IFRoZXkmIzM5O3JlIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBzdGFuZGFyZCBFRkkgc3R1ZmYuIENydWNpYWxseSwgdGhleSYjMzk7cmUgKmZ1bGx5KiBpbml0aWFsaXppbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSBgcG1gIHN0cnVjdCYjMzk7cyBmaWVsZHMgKGB2ZXJzaW9uYCwgYHVuaXRfc2l6ZWAsIGBwaHlzX2Jhc2VgLCBgc2l6ZWApIGFyZSBzZXQsIGFuZCwgY3JpdGljYWxseSwgdGhlIGBiaXRtYXBgIGlzIHplcm9lZCBvdXQgdXNpbmcgYG1lbXNldGAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gY2FyZWZ1bGx5IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvZnRlbiBzdXJmYWNlcy4KCkxvb2tpbmcgYXQgdGhlIHN0cnVjdCBpdHNlbGYsIGl0IGxvb2tzIGNsZWFuOiBgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgLCBhbmQgYSBmbGV4aWJsZSBhcnJheSBgYml0bWFwYC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgYG1lbXNldGAgY292ZXJzIHRoZSBlbnRpcmUgYGJpdG1hcGAgYXJlYSwgc28gdGhlcmUmIzM5O3Mgbm8gZGFuZ2xpbmcgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyB1bmV4cGVjdGVkIHBhZGRpbmcgaW4gdGhlIHN0cnVjdCB0aGF0IGNvdWxkIGxlYXZlIHNvbWV0aGluZyB1bmluaXRpYWxpemVkLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGBlZmlfcG9pc29uX2luaXQoKWAgd2hpY2ggbWFwcyB0aGUgdGFibGUgdXNpbmcgYG1lbXJlbWFwKClgLiBUaGVuLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KClgIHJlYWRzIHRoZSB0YWJsZSBhbmQgcmVzZXJ2ZXMgdGhlIG1lbW9yeSB3aXRoIGBtZW1ibG9ja19yZXNlcnZlKClgLCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIHNldHMgYml0cyBpbiB0aGUgYml0bWFwLiBJIGNhbiBzZWUgaG93IHRoaXMgd29ya3MuIFRoZSB0YWJsZSBnZXRzIHBhc3NlZCB0byB0aGUgbmV4dCBrZXJuZWwgdmlhIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMsIHdoaWNoIGlzIGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoLCBub3QgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBhbGxvY2F0aW9uIGluIGBlZmlfcG9pc29uX2FsbG9jKClgLiBUaGUgYWxsb2NhdGlvbiBzaXplIGxvb2tzIGNvcnJlY3Q6IGBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZWAuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gKkV2ZXJ5dGhpbmcqIGFsbG9jYXRlZCBoZXJlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgpJIGFsc28gY2hlY2tlZCBgZWZpX2dldF9yYW1fdG9wKClgIHdoaWNoIGNhbGxzIGBlZmlfZ2V0X21lbW9yeV9tYXAoKWAgYnV0IHRoaXMgYXBwZWFycyB0byBiZSBleGlzdGluZyBjb2RlLCBub3Qgc29tZXRoaW5nIG5ldyB0byB0aGlzIHBhdGNoLCBzbyBJJiMzOTttIG5vdCBjb25jZXJuZWQuCgpHaXZlbiB3aGF0IEkmIzM5O3ZlIHNlZW4sIHRoZXJlIGFyZSBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaGVyZS4gVGhleSYjMzk7cmUgYmVpbmcgdmVyeSBjYXJlZnVsIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLiBLQVNBTiBzZWVtcyBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBhbnkgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoaXMgYXJlYSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3R1cmUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGlzIGFsbG9jYXRlZCBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYCBhbmQgYWxsIGl0cyBmaWVsZHMsIGluY2x1ZGluZyB0aGUgZmxleGlibGUgYGJpdG1hcGAgYXJyYXksIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICh0aGUgZmllbGRzIGFyZSBhc3NpZ25lZCBhbmQgdGhlIGJpdG1hcCBpcyB6ZXJvZWQgdXNpbmcgYG1lbXNldGApLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCB0aGlzIHRhYmxlIGlzIG5vdCBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJpdG1hcCBoYW5kbGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS4yOTM4MTAxMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk0MDE3MTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY2FycnlpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gSXQgaW50cm9kdWNlcyBhIG5ldyBFRkkgY29uZmlnIHRhYmxlIHRvIHN0b3JlIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLCBob29rcyBpbnRvIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgcG9pc29uZWQgcGFnZXMsIGFuZCBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiB0byBhbGxvY2F0ZSBhbmQgaW5zdGFsbCB0aGUgdGFibGUuIFRoZSBuZXcgbG9naWMgaXMgcmVhY2hhYmxlIGR1cmluZyBFRkkgYm9vdCBhbmQgd2hlbiBtZW1vcnkgZmFpbHVyZXMgYXJlIGluamVjdGVkIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTg6NTEuMjkzODE5NDI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzODQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjU4OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuaW5kZXggMjllMDcyOTI5OWY1Yi4uNjljMGRjMDJiYzExMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbkBAIC0yNjMsNiArMjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcXG4gXFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXFxuIFxcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXFxuIFxcbitjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHRib29sIFxcXCJDYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWNcXFwiXFxuK1xcdGRlcGVuZHMgb24gRUZJX1NUVUIgXFx1MDAyNlxcdTAwMjYgTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4rXFx0aGVscFxcbitcXHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXFxuK1xcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXFxuK1xcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcXG4gXFx0Ym9vbCBcXFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBFRklcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXFx0XFx0Kz0gZWFybHljb24ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcXHRcXHQrPSBjcGVyLWFybS5vXFxuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVxcdFxcdCs9IGNwZXIteDg2Lm9cXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVxcdFxcdCs9IHVuYWNjZXB0ZWRfbWVtb3J5Lm9cXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXFx0Kz0gcG9pc29uLm9cXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcXHRcXHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li43NDc0ZWVlYmIwYWRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXFxuIFxcdC51bmFjY2VwdGVkXFx0XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdC5wb2lzb25lZF9tZW1vcnlcXHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXFxuKyNlbmRpZlxcbiB9O1xcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XFxuIFxcbkBAIC02NDYsNiArNjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS51bmFjY2VwdGVkLFxcdFxcXCJVbmFjY2VwdGVkXFxcIlxcdH0sXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcXHRcXHUwMDI2ZWZpLnBvaXNvbmVkX21lbW9yeSxcXHRcXFwiUE9JU09OXFxcIlxcdH0sXFxuKyNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcXG4gXFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcXHRcXHUwMDI2cHJpbWFyeV9kaXNwbGF5X3RhYmxlXFx0XFx0XFx0fSxcXG4gI2VuZGlmXFxuQEAgLTgwNiw2ICs4MTIsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcXG4rXFxuIFxcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcXG4gXFx0XFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5pbmRleCBmMjdmMmUxZjAwMTk5Li43MjU4ZWNkZjFmN2MyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXFxuQEAgLTc3NCwzICs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxcbiBcXHRcXHRcXHRlZmlfd2FybihcXFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiB9XFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rLyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqL1xcbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1RBQkxFX1NJWkVcXHRTWl8xTVxcbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVxcdFNaXzFHXFxuK1xcbisvKlxcbisgKiBCaXRtYXAgZ2VvbWV0cnkgZm9yIGEgZ2l2ZW4gdG9wIG9mIFJBTS4gVGhlIGJpdG1hcCBzdGFydHMgYXQgYWRkcmVzcyAwLCBzb1xcbisgKiBiaXQgTiBjb3ZlcnMgdW5pdCBOLlxcbisgKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUsIGEgXFxcInVuaXRcXFwiIGlzIGdyYW51bGUgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB0aGF0IG9uZVxcbisgKiBiaXRtYXAgYml0IGNvdmVycy5cXG4rICovXFxuK3N0YXRpYyB1MzIgZWZpX3BvaXNvbl9nZW9tZXRyeSh1NjQgcmFtX3RvcCwgdTY0ICpiaXRtYXBfc2l6ZSlcXG4re1xcbitcXHR1NjQgbnJfdW5pdHMgPSBESVZfUk9VTkRfVVAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xcbitcXHR1MzIgdW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XFxuK1xcbitcXHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcXHUwMDNlIEVGSV9QT0lTT05fTUFYX1RBQkxFX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHVuaXRfc2l6ZSBcXHUwMDNjIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkge1xcbitcXHRcXHRucl91bml0cyA9IERJVl9ST1VORF9VUChucl91bml0cywgMik7XFxuK1xcdFxcdHVuaXRfc2l6ZSAqPSAyO1xcbitcXHR9XFxuK1xcbitcXHQqYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xcbitcXHRyZXR1cm4gdW5pdF9zaXplO1xcbit9XFxuK1xcbisvKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTMyIHVuaXRfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XFxuK1xcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcXG4rXFx0XFx0XFx0ICAgICBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplLCAodm9pZCAqKilcXHUwMDI2cG0pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHBtLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG4rXFx0cG0tXFx1MDAzZXVuaXRfc2l6ZSA9IHVuaXRfc2l6ZTtcXG4rXFx0cG0tXFx1MDAzZXBoeXNfYmFzZSA9IDA7XFxuK1xcdHBtLVxcdTAwM2VzaXplID0gYml0bWFwX3NpemU7XFxuK1xcdG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gcG07XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXFxuKyAqIGF2YWlsYWJsZVxcbisgKi9cXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbit7XFxuK1xcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHJhbV90b3AsIGJpdG1hcF9zaXplO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1MzIgdW5pdF9zaXplO1xcbitcXG4rXFx0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xcbitcXHRwbSA9IGdldF9lZmlfY29uZmlnX3RhYmxlKHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkKTtcXG4rXFx0aWYgKHBtKSB7XFxuK1xcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKVxcbitcXHRcXHRcXHRlZmlfZXJyKFxcXCJVbmtub3duIHZlcnNpb24gb2YgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZWZpX2dldF9yYW1fdG9wKFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dW5pdF9zaXplID0gZWZpX3BvaXNvbl9nZW9tZXRyeShyYW1fdG9wLCBcXHUwMDI2Yml0bWFwX3NpemUpO1xcbitcXG4rXFx0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbit9XFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCA0MmQ2MDczYmNkMDYyLi4wMDg2MzVlYjUwMjdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXHRcXHRcXHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XFxuIFxcbiBcXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4gXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uYjVlMTliYTUwZGRhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuQEAgLTEwOTQsNiArMTA5NCw4IEBAIGNoYXIgKmVmaV9jb252ZXJ0X2NtZGxpbmUoZWZpX2xvYWRlZF9pbWFnZV90ICppbWFnZSk7XFxuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpbnN0YWxsX2NmZ190YmwpO1xcbiBcXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XFxuK1xcbiBlZmlfc3RhdHVzX3QgZWZpX2FsbG9jYXRlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5AQCAtMTE2OSw2ICsxMTcxLDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XFxuIFxcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcXG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcXG5AQCAtNjQsNiArNjQsNTkgQEAgZWZpX3N0YXR1c190IGVmaV9nZXRfbWVtb3J5X21hcChzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICoqbWFwLFxcbiBcXHRyZXR1cm4gRUZJX1NVQ0NFU1M7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXFxuKyAqIEB0b3A6XFx0b24gcmV0dXJuLCB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IG1lbW9yeSBtYXAgZW50cnkgdGhhdCBiZWNvbWVzXFxuKyAqXFx0XFx0dXNhYmxlIFJBTVxcbisgKlxcbisgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XFxuKyAqIHNldHVwX2U4MjAoKSBtYXBzIHRvIEU4MjBfVFlQRV9SQU0sIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhbnkgb2ZcXG4rICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXFxuKyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcXG4rICogb2YgbWF4X3Bmbiwgd2hpY2ggaXMgb25seSBzZXQgb25jZSB0aGUga2VybmVsIHByb3BlciBpcyB1cC5cXG4rICpcXG4rICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xcbisgKiBpcyBub3QgYWNjb3VudGVkIGZvciBoZXJlLlxcbisgKlxcbisgKiBSZXR1cm46XFx0c3RhdHVzIGNvZGVcXG4rICovXFxuK2VmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXFxuK3tcXG4rXFx0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHR1NjQgcmFtX3RvcCA9IDA7XFxuK1xcdGludCBpLCBucl9kZXNjO1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFxcdTAwMjZtYXAsIGZhbHNlKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuK1xcdG5yX2Rlc2MgPSBtYXAtXFx1MDAzZW1hcF9zaXplIC8gbWFwLVxcdTAwM2VkZXNjX3NpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXNjOyBpKyspIHtcXG4rXFx0XFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XFxuK1xcbitcXHRcXHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cXHUwMDNlbWFwLCBtYXAtXFx1MDAzZWRlc2Nfc2l6ZSwgaSk7XFxuK1xcdFxcdHN3aXRjaCAoZC1cXHUwMDNldHlwZSkge1xcbitcXHRcXHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XFxuK1xcdFxcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcXG4rXFx0XFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxcbitcXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbitcXHRcXHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcXG4rXFx0XFx0XFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxcbitcXHRcXHRcXHRcXHQgICAgICBkLVxcdTAwM2VwaHlzX2FkZHIgKyBkLVxcdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKCFyYW1fdG9wKVxcbitcXHRcXHRyZXR1cm4gRUZJX05PVF9GT1VORDtcXG4rXFxuK1xcdCp0b3AgPSByYW1fdG9wO1xcbitcXHRyZXR1cm4gRUZJX1NVQ0NFU1M7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xcbiAgKiBAc2l6ZTpcXHRtaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG5pbmRleCBjZWYzMmUyYzgyZDhmLi5mOTBkZTExYmM4ODU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xcbkBAIC0xMDIzLDYgKzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFxuIFxcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XFxuIFxcbitcXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xcbitcXG4gXFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xcbiBcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuIFxcdFxcdGVmaV9lcnIoXFxcImV4aXRfYm9vdCgpIGZhaWxlZCFcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXFxuQEAgLTAsMCArMSwxOTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXFxuKyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcXG4rICogaGFyZHdhcmUtcG9pc29uZWQgZnJhbWVzIHNvIHRoZSBuZXh0IGtleGVjIGtlcm5lbCBjYW4ga2VlcCB0aGVtIG91dCBvZiBpdHNcXG4rICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcXG4rICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcXG4rICogYWxsb2NhdG9yIGNvbWVzIHVwLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImVmaTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvZzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taW5tYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuKy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqL1xcbitzdGF0aWMgYm9vbCBfX2luaXRcXG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXFxuK3tcXG4rXFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAocG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIElTX0FMSUdORUQocG0tXFx1MDAzZXBoeXNfYmFzZSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuK31cXG4rXFxuKy8qIFRoZSByYW5nZSB0aGUgYml0bWFwIGNsYWltcyB0byBkZXNjcmliZSBoYXMgdG8gZml0IGluIGEgdTY0LiAqL1xcbitzdGF0aWMgYm9vbCBfX2luaXRcXG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXFxuK3tcXG4rXFx0dTY0IG5iaXRzLCBzcGFuO1xcbitcXG4rXFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcXHUwMDI2bmJpdHMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChjaGVja19tdWxfb3ZlcmZsb3cobmJpdHMsICh1NjQpcG0tXFx1MDAzZXVuaXRfc2l6ZSwgXFx1MDAyNnNwYW4pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cXHUwMDNlcGh5c19iYXNlLCBzcGFuLCBcXHUwMDI2c3Bhbik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sXFxuKyAqIHNvIGNoZWNrIGl0cyBnZW9tZXRyeSBiZWZvcmUgZG9pbmcgYW55IGFyaXRobWV0aWMgd2l0aCBpdC5cXG4rICovXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAocG0tXFx1MDAzZXZlcnNpb24gIT0gMSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwbS1cXHUwMDNldmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0dTY0IHNpemU7XFxuK1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE1hcCB0aGUgaGVhZGVyIHRvIGxlYXJuIHRoZSBiaXRtYXAgc2l6ZSwgdGhlbiBtYXAgdGhlIHdob2xlIHRhYmxlLiAqL1xcbitcXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcXG4rXFx0XFx0bWVtdW5tYXAocG0pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRzaXplID0gcG0tXFx1MDAzZXNpemU7XFxuK1xcdG1lbXVubWFwKHBtKTtcXG4rXFxuK1xcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXFxuK1xcdFxcdFxcdCAgICAgIE1FTVJFTUFQX1dCKTtcXG4rXFx0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcXG4rXFxuKy8qIEJpdG1hcCB1bml0IGNvdmVyaW5nIEBwZm4sIG9yIC0xIGlmIHRoZSBwZm4gZmFsbHMgb3V0c2lkZSB0aGUgdGFibGUuICovXFxuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcXG4rXFx0dTY0IHVuaXQ7XFxuK1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIGVmaV9wb2lzb24tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVxcdTAwM2VwaHlzX2Jhc2UpIC8gZWZpX3BvaXNvbi1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRpZiAodW5pdCBcXHUwMDNlPSAodTY0KWVmaV9wb2lzb24tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiB1bml0O1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZVxcbisgKiBhbGxvY2F0b3IuIG1lbW9yeV9mYWlsdXJlKCkgaGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUgZnJhbWUgZnJvbSB0aGlzIGtlcm5lbC5cXG4rICpcXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvXFxuKyAqIGFuIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxcbisgKi9cXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRsb25nIHVuaXQ7XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcXG4rXFx0aWYgKHVuaXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXFx1MDAzZWJpdG1hcCk7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKVxcbit7XFxuK1xcdHU2NCBwcG0gPSBlZmkucG9pc29uZWRfbWVtb3J5LCBwaHlzX2Jhc2UsIHVuaXRfc2l6ZSwgYml0bWFwX3NpemUsIG9mZjtcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwO1xcbitcXG4rXFx0aWYgKHBwbSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwbSA9IGVhcmx5X21lbXJlbWFwKHBwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXFxuK1xcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbitcXHRcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBoeXNfYmFzZSA9IHBtLVxcdTAwM2VwaHlzX2Jhc2U7XFxuK1xcdHVuaXRfc2l6ZSA9IHBtLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdGJpdG1hcF9zaXplID0gcG0tXFx1MDAzZXNpemU7XFxuK1xcbitcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXG4rXFx0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cXG4rXFx0bWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSxcXG4rXFx0XFx0XFx0IFBBR0VfQUxJR04ocHBtICsgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSkgLVxcbitcXHRcXHRcXHQgUEFHRV9BTElHTl9ET1dOKHBwbSkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FsayB0aGUgYml0bWFwIGEgcGFnZSBhdCBhIHRpbWUgYW5kIHJlc2VydmUgZWFjaCBwb2lzb25lZCB1bml0LlxcbitcXHQgKiBtZW1ibG9jay5tZW1vcnkgaXMgbm90IHBvcHVsYXRlZCB0aGlzIGVhcmx5LCBzbyBtZW1ibG9ja19yZW1vdmUoKVxcbitcXHQgKiBhbmQgbWVtYmxvY2tfbWFya19ub21hcCgpIHdvdWxkIGJlIG5vLW9wczsgYSByZXNlcnZhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGtlZXBzIHRoZSB1bml0cyBhd2F5IGZyb20gdGhlIGFsbG9jYXRvci5cXG4rXFx0ICovXFxuK1xcdGZvciAob2ZmID0gMDsgb2ZmIFxcdTAwM2MgYml0bWFwX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGJpdG1hcF9zaXplIC0gb2ZmKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nICptYXA7XFxuK1xcbitcXHRcXHRtYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJpdG1hcCkgKyBvZmYsIGNodW5rKTtcXG4rXFx0XFx0aWYgKCFtYXApIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgYml0bWFwXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XFxuK1xcdFxcdFxcdHU2NCB1bml0ID0gb2ZmICogQklUU19QRVJfQllURSArIGJpdDtcXG4rXFxuK1xcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTtcXG4rXFx0XFx0XFx0bnJfdW5pdHMrKztcXG4rXFx0XFx0fVxcbitcXHRcXHRlYXJseV9tZW11bm1hcChtYXAsIGNodW5rKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5yX3VuaXRzKVxcbitcXHRcXHRwcl9pbmZvKFxcXCJyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRucl91bml0cywgdW5pdF9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGNjYmMzNTQ3OTY4NGEuLjNjYjNmMjI0YWMwMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtMjMsNiArMjMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHN0b3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVib290LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcXG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXFx0XFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXFx0XFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFxcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcXG4gXFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFxcdFxcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcXG4gXFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRtb2t2YXJfdGFibGU7XFx0XFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0Y29jb19zZWNyZXQ7XFx0XFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHVuYWNjZXB0ZWQ7XFx0XFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHBvaXNvbmVkX21lbW9yeTtcXHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cXG4gXFxuIFxcdGVmaV9nZXRfdGltZV90XFx0XFx0XFx0KmdldF90aW1lO1xcbiBcXHRlZmlfc2V0X3RpbWVfdFxcdFxcdFxcdCpzZXRfdGltZTtcXG5AQCAtMTI2OSw2ICsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XFxuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcXFxcbiBcXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcXG4gXFxuK3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcXG4rXFx0dTMyXFx0XFx0dmVyc2lvbjtcXG4rXFx0dTMyXFx0XFx0dW5pdF9zaXplO1xcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cXG4rXFx0dTY0XFx0XFx0cGh5c19iYXNlO1xcdC8qIHBoeXMgYWRkcmVzcyBjb3ZlcmVkIGJ5IGJpdCAwICovXFxuK1xcdHU2NFxcdFxcdHNpemU7XFx0XFx0LyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdGJpdG1hcFtdO1xcbit9O1xcbitcXG4rI2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVxcdFNaXzJNXFxuK1xcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XFxuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZWZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbkBAIC0xMjg2LDYgKzEyODcsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XFxuIFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcXG4gXFx0XFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcXG4rXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbitcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbiBcXHR9XFxuIFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS44MzQ5ODkxOTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTQ4NzMyNzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzM2NTFjNjhiN2FlMDcxZjQ1ZGU3N2JjOWZiNGQ3OTA0NGZhMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTA6NTg6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uNjljMGRjMDJiYzExMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiArMjYzLDE2IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVRcbiBcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxuIFx0ICBhbGxvd3MgdXNlcnNwYWNlIHByb2dyYW1zIHRvIGFjY2VzcyB0aGUgaW5qZWN0ZWQgc2VjcmV0cy5cbiBcbitjb25maWcgRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0Ym9vbCBcIkNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlY1wiXG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uNzQ3NGVlZWJiMGFkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjQ2LDYgKzY0OSw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuQEAgLTgwNiw2ICs4MTIsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KCk7XG4rXG4gXHRpZiAocnRfcHJvcCAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4gXHRcdGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnRibDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggZjI3ZjJlMWYwMDE5OS4uNzI1OGVjZGYxZjdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyArNzc0LDkyIEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcbiBcdFx0XHRlZmlfd2FybihcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwiKTtcbiBcdH1cbiB9XG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rLyogQ2FwIG9uIHRoZSBiaXRtYXA7IGEgc3BhbiB0b28gd2lkZSB0byBmaXQgZ2V0cyBhIGNvYXJzZXIgdW5pdCBpbnN0ZWFkLiAqL1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRVx0U1pfMU1cbisjZGVmaW5lIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRVx0U1pfMUdcbitcbisvKlxuKyAqIEJpdG1hcCBnZW9tZXRyeSBmb3IgYSBnaXZlbiB0b3Agb2YgUkFNLiBUaGUgYml0bWFwIHN0YXJ0cyBhdCBhZGRyZXNzIDAsIHNvXG4rICogYml0IE4gY292ZXJzIHVuaXQgTi5cbisgKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUsIGEgXCJ1bml0XCIgaXMgZ3JhbnVsZSBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIHRoYXQgb25lXG4rICogYml0bWFwIGJpdCBjb3ZlcnMuXG4rICovXG4rc3RhdGljIHUzMiBlZmlfcG9pc29uX2dlb21ldHJ5KHU2NCByYW1fdG9wLCB1NjQgKmJpdG1hcF9zaXplKVxuK3tcbitcdHU2NCBucl91bml0cyA9IERJVl9ST1VORF9VUChyYW1fdG9wLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4rXHR1MzIgdW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4rXG4rXHR3aGlsZSAoRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKSBcdTAwM2UgRUZJX1BPSVNPTl9NQVhfVEFCTEVfU0laRSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB1bml0X3NpemUgXHUwMDNjIEVGSV9QT0lTT05fTUFYX1VOSVRfU0laRSkge1xuK1x0XHRucl91bml0cyA9IERJVl9ST1VORF9VUChucl91bml0cywgMik7XG4rXHRcdHVuaXRfc2l6ZSAqPSAyO1xuK1x0fVxuK1xuK1x0KmJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCBCSVRTX1BFUl9CWVRFKTtcbitcdHJldHVybiB1bml0X3NpemU7XG4rfVxuK1xuKy8qIEFDUEkgcmVjbGFpbSBtZW1vcnksIHNvIHRoZSBuZXh0IGtlcm5lbCBkb2VzIG5vdCB0cmVhdCBpdCBhcyBmcmVlIFJBTS4gKi9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplLFxuK1x0XHRcdFx0XHRcdFx0ICB1MzIgdW5pdF9zaXplKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbitcdFx0XHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVx1MDAyNnBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4rXHRwbS1cdTAwM2V1bml0X3NpemUgPSB1bml0X3NpemU7XG4rXHRwbS1cdTAwM2VwaHlzX2Jhc2UgPSAwO1xuK1x0cG0tXHUwMDNlc2l6ZSA9IGJpdG1hcF9zaXplO1xuK1x0bWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpO1xuK1xuK1x0cmV0dXJuIHBtO1xuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSBwb2lzb25lZC1tZW1vcnkgYml0bWFwIHdoaWxlIGJvb3Qgc2VydmljZXMgYXJlXG4rICogYXZhaWxhYmxlXG4rICovXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuK3tcbitcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgcmFtX3RvcCwgYml0bWFwX3NpemU7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTMyIHVuaXRfc2l6ZTtcbitcbitcdC8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi9cbitcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuK1x0aWYgKHBtKSB7XG4rXHRcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpXG4rXHRcdFx0ZWZpX2VycihcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlZmlfZ2V0X3JhbV90b3AoXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR1bml0X3NpemUgPSBlZmlfcG9pc29uX2dlb21ldHJ5KHJhbV90b3AsIFx1MDAyNmJpdG1hcF9zaXplKTtcbitcbitcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhiaXRtYXBfc2l6ZSwgdW5pdF9zaXplKTtcbitcdGlmICghcG0pIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXG4rXHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfYnNfY2FsbChmcmVlX3Bvb2wsIHBtKTtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxuXCIpO1xuK1x0fVxuK31cbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjAwODYzNWViNTAyN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTE3OSw2ICsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuIFxuIFx0c3RhdHVzID0gZWZpX2Jvb3Rfa2VybmVsKGhhbmRsZSwgaW1hZ2UsIGltYWdlX2FkZHIsIGNtZGxpbmVfcHRyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5pbmRleCBmZDkxZmMxNWVjODEwLi5iNWUxOWJhNTBkZGFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG5AQCAtMTA5NCw2ICsxMDk0LDggQEAgY2hhciAqZWZpX2NvbnZlcnRfY21kbGluZShlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKTtcbiBlZmlfc3RhdHVzX3QgZWZpX2dldF9tZW1vcnlfbWFwKHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKiptYXAsXG4gXHRcdFx0XHRib29sIGluc3RhbGxfY2ZnX3RibCk7XG4gXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcCk7XG4rXG4gZWZpX3N0YXR1c190IGVmaV9hbGxvY2F0ZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHIsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG4gXG5AQCAtMTE2OSw2ICsxMTcxLDEyIEBAIGVmaV9lbmFibGVfcmVzZXRfYXR0YWNrX21pdGlnYXRpb24odm9pZCkgeyB9XG4gXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XG4gXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbisjZW5kaWZcbitcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICphbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XG4gdm9pZCBmcmVlX3ByaW1hcnlfZGlzcGxheShzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpkcHkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5pbmRleCA1OWYzZjgzZGU1MGMyLi43NzdmMWYxODBjNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uY1xuQEAgLTY0LDYgKzY0LDU5IEBAIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdHJldHVybiBFRklfU1VDQ0VTUztcbiB9XG4gXG4rLyoqXG4rICogZWZpX2dldF9yYW1fdG9wKCkgLSBmaW5kIHRoZSB0b3Agb2YgdXNhYmxlIFJBTVxuKyAqIEB0b3A6XHRvbiByZXR1cm4sIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgbWVtb3J5IG1hcCBlbnRyeSB0aGF0IGJlY29tZXNcbisgKlx0XHR1c2FibGUgUkFNXG4rICpcbisgKiBXYWxrIHRoZSBVRUZJIG1lbW9yeSBtYXAgZm9yIHRoZSBlbnRyeSB0eXBlcyB0aGF0IGJlY29tZSB1c2FibGUgUkFNLCB0aGUgc2V0XG4rICogc2V0dXBfZTgyMCgpIG1hcHMgdG8gRTgyMF9UWVBFX1JBTSwgYW5kIHJldHVybiB0aGUgaGlnaGVzdCBhZGRyZXNzIGFueSBvZlxuKyAqIHRoZW0gcmVhY2hlcy4gTWVtb3J5IGEgY29uZmlkZW50aWFsIGd1ZXN0IGhhcyBub3QgYWNjZXB0ZWQgeWV0IGNvdW50cyBhc1xuKyAqIHdlbGwsIHNpbmNlIGl0IGJlY29tZXMgUkFNIG9uY2UgYWNjZXB0ZWQuIFRoaXMgaXMgd2hhdCB0aGUgc3R1YiBoYXMgaW4gcGxhY2VcbisgKiBvZiBtYXhfcGZuLCB3aGljaCBpcyBvbmx5IHNldCBvbmNlIHRoZSBrZXJuZWwgcHJvcGVyIGlzIHVwLlxuKyAqXG4rICogTWVtb3J5IHRoZSBmaXJtd2FyZSBob3QtYWRkcyBsYXRlciBpcyBub3QgZGVzY3JpYmVkIGJ5IHRoZSBtZW1vcnkgbWFwIGFuZCBzb1xuKyAqIGlzIG5vdCBhY2NvdW50ZWQgZm9yIGhlcmUuXG4rICpcbisgKiBSZXR1cm46XHRzdGF0dXMgY29kZVxuKyAqL1xuK2VmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV90b3AodTY0ICp0b3ApXG4re1xuK1x0c3RydWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcdHU2NCByYW1fdG9wID0gMDtcbitcdGludCBpLCBucl9kZXNjO1xuK1xuK1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIHN0YXR1cztcbitcbitcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XG4rXHRcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xuK1xuK1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuK1x0XHRzd2l0Y2ggKGQtXHUwMDNldHlwZSkge1xuK1x0XHRjYXNlIEVGSV9MT0FERVJfQ09ERTpcbitcdFx0Y2FzZSBFRklfTE9BREVSX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0JPT1RfU0VSVklDRVNfQ09ERTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOlxuK1x0XHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxuK1x0XHRjYXNlIEVGSV9VTkFDQ0VQVEVEX01FTU9SWTpcbitcdFx0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0XHQgICAgICBkLVx1MDAzZXBoeXNfYWRkciArIGQtXHUwMDNlbnVtX3BhZ2VzICogRUZJX1BBR0VfU0laRSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmICghcmFtX3RvcClcbitcdFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XG4rXG4rXHQqdG9wID0gcmFtX3RvcDtcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4gLyoqXG4gICogZWZpX2FsbG9jYXRlX3BhZ2VzKCkgLSBBbGxvY2F0ZSBtZW1vcnkgcGFnZXNcbiAgKiBAc2l6ZTpcdG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCBjZWYzMmUyYzgyZDhmLi5mOTBkZTExYmM4ODU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDIzLDYgKzEwMjMsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuK1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwiZXhpdF9ib290KCkgZmFpbGVkIVxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQxOGM2YjNhYWI4MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgKzEsMTk3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUnVudGltZSBoYW5kbGluZyBmb3IgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgY29uZmlndXJhdGlvbiB0YWJsZTogYVxuKyAqIGJpdG1hcCB3aXRoIG9uZSBiaXQgcGVyIEVGSV9QT0lTT05fVU5JVF9TSVpFIG9mIHBoeXNpY2FsIG1lbW9yeSB0aGF0IHJlY29yZHNcbisgKiBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZXMgc28gdGhlIG5leHQga2V4ZWMga2VybmVsIGNhbiBrZWVwIHRoZW0gb3V0IG9mIGl0c1xuKyAqIGFsbG9jYXRvci4gVGhlIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgKGVtcHR5KSBiaXRtYXA7IHRoaXMga2VybmVsXG4rICogc2V0cyBiaXRzIGF0IHJ1bnRpbWU7IHRoZSBuZXh0IGtlcm5lbCByZXNlcnZlcyB0aGUgc2V0IHVuaXRzIGJlZm9yZSB0aGVcbisgKiBhbGxvY2F0b3IgY29tZXMgdXAuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJlZmk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9nMi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbm1heC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb24gX19yb19hZnRlcl9pbml0O1xuK1xuKy8qIEEgbm9uLWVtcHR5IGJpdG1hcCBvbiBhIHBvd2VyLW9mLTIgZ3JpZCB0aGF0IHBoeXNfYmFzZSBhY3R1YWxseSBzaXRzIG9uLiAqL1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdGlmICghcG0tXHUwMDNlc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rLyogVGhlIHJhbmdlIHRoZSBiaXRtYXAgY2xhaW1zIHRvIGRlc2NyaWJlIGhhcyB0byBmaXQgaW4gYSB1NjQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9yYW5nZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0dTY0IG5iaXRzLCBzcGFuO1xuK1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhuYml0cywgKHU2NClwbS1cdTAwM2V1bml0X3NpemUsIFx1MDAyNnNwYW4pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gIWNoZWNrX2FkZF9vdmVyZmxvdyhwbS1cdTAwM2VwaHlzX2Jhc2UsIHNwYW4sIFx1MDAyNnNwYW4pO1xuK31cbitcbisvKlxuKyAqIFRoZSB0YWJsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGtlcm5lbCBpbiB0aGUga2V4ZWMgY2hhaW4sXG4rICogc28gY2hlY2sgaXRzIGdlb21ldHJ5IGJlZm9yZSBkb2luZyBhbnkgYXJpdGhtZXRpYyB3aXRoIGl0LlxuKyAqL1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cIixcbitcdFx0XHRwbS1cdTAwM2V2ZXJzaW9uKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSB8fCAhZWZpX3BvaXNvbl9yYW5nZV92YWxpZChwbSkpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIG1hbGZvcm1lZCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBlZmlfcG9pc29uX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgc2l6ZTtcbitcbitcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTWFwIHRoZSBoZWFkZXIgdG8gbGVhcm4gdGhlIGJpdG1hcCBzaXplLCB0aGVuIG1hcCB0aGUgd2hvbGUgdGFibGUuICovXG4rXHRwbSA9IG1lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pLCBNRU1SRU1BUF9XQik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwbSkpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRtZW11bm1hcChwbSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c2l6ZSA9IHBtLVx1MDAzZXNpemU7XG4rXHRtZW11bm1hcChwbSk7XG4rXG4rXHRlZmlfcG9pc29uID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkgKyBzaXplLFxuK1x0XHRcdCAgICAgIE1FTVJFTUFQX1dCKTtcbitcdFdBUk5fT05fT05DRSghZWZpX3BvaXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfaW5pdGNhbGwoZWZpX3BvaXNvbl9pbml0KTtcbitcbisvKiBCaXRtYXAgdW5pdCBjb3ZlcmluZyBAcGZuLCBvciAtMSBpZiB0aGUgcGZuIGZhbGxzIG91dHNpZGUgdGhlIHRhYmxlLiAqL1xuK3N0YXRpYyBsb25nIGVmaV9wb2lzb25fdW5pdCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcbitcdHU2NCB1bml0O1xuK1xuK1x0aWYgKGFkZHIgXHUwMDNjIGVmaV9wb2lzb24tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR1bml0ID0gKGFkZHIgLSBlZmlfcG9pc29uLVx1MDAzZXBoeXNfYmFzZSkgLyBlZmlfcG9pc29uLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGlmICh1bml0IFx1MDAzZT0gKHU2NCllZmlfcG9pc29uLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gdW5pdDtcbit9XG4rXG4rLypcbisgKiBSZWNvcmQgYSBoYXJkd2FyZS1wb2lzb25lZCBmcmFtZSBzbyB0aGUgbmV4dCBrZXJuZWwga2VlcHMgaXRzIHVuaXQgb3V0IG9mIHRoZVxuKyAqIGFsbG9jYXRvci4gbWVtb3J5X2ZhaWx1cmUoKSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBmcmFtZSBmcm9tIHRoaXMga2VybmVsLlxuKyAqXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogb25lIGJpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvXG4rICogYW4gdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRsb25nIHVuaXQ7XG4rXG4rXHRpZiAoIWVmaV9wb2lzb24pXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSBlZmlfcG9pc29uX3VuaXQocGZuKTtcbitcdGlmICh1bml0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KHVuaXQsIGVmaV9wb2lzb24tXHUwMDNlYml0bWFwKTtcbit9XG4rXG4rdm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4re1xuK1x0dTY0IHBwbSA9IGVmaS5wb2lzb25lZF9tZW1vcnksIHBoeXNfYmFzZSwgdW5pdF9zaXplLCBiaXRtYXBfc2l6ZSwgb2ZmO1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0dW5zaWduZWQgaW50IG5yX3VuaXRzID0gMDtcbitcbitcdGlmIChwcG0gPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cG0gPSBlYXJseV9tZW1yZW1hcChwcG0sIHNpemVvZigqcG0pKTtcbitcdGlmICghcG0pIHtcbitcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XG4rXHRcdC8qIEtlZXAgdGhlIHJ1bnRpbWUgc2lkZSBvZmYgYSB0YWJsZSB0aGlzIHBhc3MgcmVqZWN0ZWQuICovXG4rXHRcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuK1x0XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlzX2Jhc2UgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4rXHR1bml0X3NpemUgPSBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRiaXRtYXBfc2l6ZSA9IHBtLVx1MDAzZXNpemU7XG4rXG4rXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuK1xuK1x0LyogUmVzZXJ2ZSB0aGUgdGFibGUgaXRzZWxmIHNvIGl0IHN1cnZpdmVzIGEgZnVydGhlciBrZXhlYy4gKi9cbitcdG1lbWJsb2NrX3Jlc2VydmUoUEFHRV9BTElHTl9ET1dOKHBwbSksXG4rXHRcdFx0IFBBR0VfQUxJR04ocHBtICsgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSkgLVxuK1x0XHRcdCBQQUdFX0FMSUdOX0RPV04ocHBtKSk7XG4rXG4rXHQvKlxuK1x0ICogV2FsayB0aGUgYml0bWFwIGEgcGFnZSBhdCBhIHRpbWUgYW5kIHJlc2VydmUgZWFjaCBwb2lzb25lZCB1bml0LlxuK1x0ICogbWVtYmxvY2subWVtb3J5IGlzIG5vdCBwb3B1bGF0ZWQgdGhpcyBlYXJseSwgc28gbWVtYmxvY2tfcmVtb3ZlKClcbitcdCAqIGFuZCBtZW1ibG9ja19tYXJrX25vbWFwKCkgd291bGQgYmUgbm8tb3BzOyBhIHJlc2VydmF0aW9uIGlzIHdoYXRcbitcdCAqIGtlZXBzIHRoZSB1bml0cyBhd2F5IGZyb20gdGhlIGFsbG9jYXRvci5cbitcdCAqL1xuK1x0Zm9yIChvZmYgPSAwOyBvZmYgXHUwMDNjIGJpdG1hcF9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdHU2NCBjaHVuayA9IG1pbl90KHU2NCwgUEFHRV9TSVpFLCBiaXRtYXBfc2l6ZSAtIG9mZik7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYml0LCBuYml0cyA9IGNodW5rICogQklUU19QRVJfQllURTtcbitcdFx0dW5zaWduZWQgbG9uZyAqbWFwO1xuK1xuK1x0XHRtYXAgPSBlYXJseV9tZW1yZW1hcChwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSxcbitcdFx0XHRcdFx0XHQgICAgYml0bWFwKSArIG9mZiwgY2h1bmspO1xuK1x0XHRpZiAoIW1hcCkge1xuK1x0XHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXBcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGZvcl9lYWNoX3NldF9iaXQoYml0LCBtYXAsIG5iaXRzKSB7XG4rXHRcdFx0dTY0IHVuaXQgPSBvZmYgKiBCSVRTX1BFUl9CWVRFICsgYml0O1xuK1xuK1x0XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19iYXNlICsgdW5pdCAqIHVuaXRfc2l6ZSwgdW5pdF9zaXplKTtcbitcdFx0XHRucl91bml0cysrO1xuK1x0XHR9XG4rXHRcdGVhcmx5X21lbXVubWFwKG1hcCwgY2h1bmspO1xuK1x0fVxuK1xuK1x0aWYgKG5yX3VuaXRzKVxuK1x0XHRwcl9pbmZvKFwicmVzZXJ2ZWQgJXUgcG9pc29uZWQgdW5pdChzKSAoJWxsdUsgZWFjaCkgaW5oZXJpdGVkIGFjcm9zcyBrZXhlY1xcblwiLFxuK1x0XHRcdG5yX3VuaXRzLCB1bml0X3NpemUgXHUwMDNlXHUwMDNlIDEwKTtcbit9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmhcbmluZGV4IGNjYmMzNTQ3OTY4NGEuLjNjYjNmMjI0YWMwMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiArNDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4rI2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4NzhhNWJmMDcsIDB4N2QyYSwgMHgyODg5LCAgMHgxNiwgMHgzMSwgMHg2MywgMHhkNCwgMHg1NiwgMHhmMiwgMHg4MywgMHg1MClcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRwb2lzb25lZF9tZW1vcnk7XHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cbiBcbiBcdGVmaV9nZXRfdGltZV90XHRcdFx0KmdldF90aW1lO1xuIFx0ZWZpX3NldF90aW1lX3RcdFx0XHQqc2V0X3RpbWU7XG5AQCAtMTI2OSw2ICsxMjcyLDI0IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHBoeXNfYmFzZTtcdC8qIHBoeXMgYWRkcmVzcyBjb3ZlcmVkIGJ5IGJpdCAwICovXG4rXHR1NjRcdFx0c2l6ZTtcdFx0LyogYml0bWFwIHNpemUgaW4gYnl0ZXMgKi9cbitcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuK307XG4rXG4rI2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKTtcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uMWNjNGU5MmU5ODc0OCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEyODYsNiArMTI4Nyw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4rXHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbitcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1MS44MzQ5OTA3ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM4MTE5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhhcmR3YXJlIFBvaXNvbmVkIFBhZ2UgS2V4ZWMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGF0dGVtcHRpbmcgdG8gcHJvcGFnYXRlIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBhY3Jvc3MgYSBrZXhlYyByZWJvb3QgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEludGVyZXN0aW5nIGFwcHJvYWNoLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIG51YW5jZXMgb2YgdGhpcyB0byBzZWUgaWYgaXQncyBhZGRpbmcgYW55IHZhbHVlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJpc2tzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCB3aGljaCBpcyBnb29kOyBzZXBhcmF0aW5nIHRoZSBsb2dpYyBmcm9tIHRoZSBjb3JlIEVGSSBzdHViIGlzIHNvdW5kLiBUaGUgYEtjb25maWdgIGNoYW5nZSBhbmQgdGhlIGhvb2sgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYXJlIGFsc28gZXhwZWN0ZWQuIFNwZWNpZmljYWxseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIHN0ZXAgd2hlbiBhIHBhZ2UgaXMgZmxhZ2dlZCBhcyBwb2lzb25lZC4gVGhlbiB0aGUgRUZJIHN0dWIgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaW5zdGFsbCB0aGlzIHBvaXNvbmVkIG1lbW9yeSB0YWJsZS5cblxuQWxyaWdodCwgbGV0J3MgdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LiBJIGNhbiB0cmlnZ2VyIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB3aXRoIGluamVjdGVkIG1lbW9yeSBmYWlsdXJlcyB0aHJvdWdoIGBtYWR2aXNlYCBvciBzeXNmcywgdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiBBbmQsIHNpbmNlIGl04oCZcyBFRkkgYmFzZWQsIHdlIG5lZWQgdG8gYm9vdCB0aGUga2VybmVsIHZpYSBFRkksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCB3YXkgb2YgZG9pbmcgdGhpbmdzLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogaXMgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAgY2FsbGVkIGNvcnJlY3RseSBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UsIGFuZCB3aGV0aGVyIHRoZSBvdGhlciBiaXRzIGFuZCBwaWVjZXMgYXJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZD9cblxuSXMgZnV6emluZyB0aGlzIHdvcnRod2hpbGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgbmV3IGNvZGUgcGF0aHMgaW4gYm90aCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBhbmQgRUZJIGJvb3QuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZTogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfcG9pc29uX2luaXRgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIHRhcmdldHMuXG5cbkJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBpdCdzIG5vdCBqdXN0IGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgdGhhdOKAmXMgbmVlZGVkLCBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQiBcdTAwMjZcdTAwMjYgTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IDY0QklUYC4gU28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIHRob3NlIGNvbmZpZ3MgdG9vLlxuXG5Ob3csIGEgcXVpY2sgZ3JlcCBmb3IgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHNob3VsZCBxdWlja2x5IHJldmVhbCB0aGUgY2FsbCBzaXRlcyBhbmQgYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBUaGF0J2xsIGJlIG15IG5leHQgc3RlcCBiZWZvcmUgYSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1ODo1OC42NzMxMTM0MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MDkzNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMDE9c3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTIwLSAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEyMTp2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oPTEyODY9dm9pZCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg3OnZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI4OC0jZWxzZVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI4OT1zdGF0aWMgaW5saW5lIHZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgvZWZpLmg6MTI5MDpzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI5MS0jZW5kaWZcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI4Mj1zdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjkwLVxcdFxcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTE6XFx0XFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyOTItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowMC43NDQwNTc2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTI5ODgzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRm9jdXM6IEVGSSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBFRkkgbWVtb3J5IHBvaXNvbmluZyBmdW5jdGlvbmFsaXR5LiBSaWdodCBub3csIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgY29uY2VudHJhdGUgb24gYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmU6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFyZSBwcm9iYWJseSB0aGUgY29yZSBidWlsZGluZyBibG9ja3Mgb2YgaG93IHRoaXMgd2hvbGUgbWVtb3J5IHBvaXNvbmluZyBzeXN0ZW0gd29ya3MuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCB0aG91Z2gsIEkgc2hvdWxkIGZpcnN0IGRldGVybWluZSB3aGV0aGVyIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAgaXMgc3RhdGljIG9yIG5vdCwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgc2NvcGUgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tLiBUaGF0J3MgbXkgbmV4dCBxdWljayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowNC4xOTcwNDkxMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzkzNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTgwNT1zdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IGJpdG1hcF9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04MjgtICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4Mjk6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMtODMwLXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYz0xNTM9ZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4MS1cXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM6MTgyOlxcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jLTE4My1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oPTExNzI9dm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaC0xMTc0LSNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oOjExNzU6dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaC0xMTc2LSNlbHNlXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmg6MTE3NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgtMTE3OC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYz05MTI9dm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMtMTAyNS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmM6MTAyNjpcXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYy0xMDI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTowNi4wNDA5OTQzMzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNzg5NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFRkkgTWVtb3J5IFBvaXNvbmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIEVGSS1yZWxhdGVkIGtlcm5lbCBjb2RlLiBJJ20gc2VlaW5nIGEgZmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBwb2lzb25pbmcsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLiBGaXJzdCwgSSd2ZSBnb3QgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGFuZCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYC4gVGhlbiwgSSBoYXZlIGBlZmlfZ2V0X3JhbV90b3BgIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jYCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGRldGVybWluaW5nIHRoZSB0b3Agb2YgdXNhYmxlIFJBTS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgbWVtb3J5IHBvaXNvbmluZyBuZWVkcyB0byBrbm93IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBtZW1vcnkgaXQgY2FuIHBsYXkgd2l0aC4gIEFuZCBmaW5hbGx5LCBJJ3ZlIGdvdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBvaXNvbmluZyBtZWNoYW5pc20gaXRzZWxmLiAgSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGVsdmUgaW50byBgcG9pc29uLmNgIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byBhY2hpZXZlIG1lbW9yeSBwb2lzb25pbmcuIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGVmaV9wb2lzb25faW5pdGAuIExldCdzIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHN0YXRpYyB0byBnYXVnZSBpdHMgcmVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjEwLjI0NDc4ODA4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3NzExNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9wb2lzb25faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz01OD1lZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTczLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjc0OnN0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTc1LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTk3LX1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzo5ODplYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxMi4wMTI1MDY0NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA5NDMyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgc2l0dWF0aW9uIGZlZWxzLi4uZml4ZWQuIFN0YWduYW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIEFoLCBhIHBvc3NpYmxlIGxlYWQhIExldCBtZSBjaGVjayBzb21ldGhpbmc6IGlzIHRoaXMgYGVmaV9wb2lzb25fYWxsb2NgIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCBtaWdodCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvciwgaWYgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxNC43MjE5NDI2MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODkyMTYyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWZpX3BvaXNvbl9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTc4OT1zdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgwNC0vKiBBQ1BJIHJlY2xhaW0gbWVtb3J5LCBzbyB0aGUgbmV4dCBrZXJuZWwgZG9lcyBub3QgdHJlYXQgaXQgYXMgZnJlZSBSQU0uICovXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYzo4MDU6c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBiaXRtYXBfc2l6ZSxcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiB1bml0X3NpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jPTgyOT12b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jLTg1MS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jOjg1MjpcXHRwbSA9IGVmaV9wb2lzb25fYWxsb2MoYml0bWFwX3NpemUsIHVuaXRfc2l6ZSk7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYy04NTMtXFx0aWYgKCFwbSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToxNi40MTExNjcyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MzIwOTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBuZXcgdGFyZ2V0OiBFRkkgcG9pc29uZWQgbWVtb3J5LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuXG5cbkkgc2VlIHRoYXQgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAgYXJlIHBhcnQgb2YgdGhlIEVGSSBzdHViLCB3aGljaCBpcyBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLiBTeXprYWxsZXIgY2FuIHJ1biB0aGUgRUZJIHN0dWIgaWYgd2UgYm9vdCB2aWEgRUZJLCBidXQgaXQncyBnZW5lcmFsbHkgbm90IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIGZ1enppbmcuIEluc3RlYWQsIHdlJ3JlIGxpa2VseSBmdXp6aW5nIHRoZSBrZXJuZWwncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBFRkkgdGFibGVzLCBhbmQgdGhhdCdzIHdoZXJlIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGFuZCBgZWZpX3BvaXNvbl9pbml0YCBjb21lIGludG8gcGxheS4gYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIGdldHRpbmcgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHRgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGNvbXByZWhlbnNpdmUuIEl0IGxvb2tzIGxpa2UgYEVGSV9QT0lTT05FRF9NRU1PUllgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHNwZWNpZnkgYWxsIG9mIHRob3NlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgRUZJX1NUVUJgIGFyZSBlbmFibGVkLCBidXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHRoZSBjcml0aWNhbCBvbmUuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIGluZGVlZCB0aGUgbWFpbiBvbmUuXG5cbkdpdmVuIHRoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBoYW5kbGVzIGFuIGB1bnNpZ25lZCBsb25nIHBmbmAsIHRoYXQncyBhbiBpbnRlcmVzdGluZyBpbnRlcmZhY2UgdG8gdGFyZ2V0LiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQgYWRkcyBuZXcgbG9naWMgYXJvdW5kIG1lbW9yeS1mYWlsdXJlIGFuZCBFRkkgYm9vdC5cblxuKipTbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOioqXG5cbiogICBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gXG4qICAgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWBcbiogICBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgXG4qICAgYGVmaV9nZXRfcmFtX3RvcGBcblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MjQuNTU0MzgwMTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1NDA0MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MjUxPWNvbmZpZyBFRklfQ09DT19TRUNSRVRcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMjY1LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MjY2OmNvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0yNjctXFx0Ym9vbCBcXFwiQ2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OToyNi4yMDk3OTAyMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMjU5MzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQWRkaW5nIEVGSV9QT0lTT05FRF9NRU1PUlkgYW5kIFZlcmlmaWNhdGlvbiBvZiBBY3Rpb25fUmVzdWx0J3MgU3RhdGljIE5hdHVyZSoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBhZGQgYEVGSV9QT0lTT05FRF9NRU1PUllgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLCBidXQgaXQncyBjcnVjaWFsIGZvciB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gQmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNyaXRpY2FsIGFib3V0IGBhY3Rpb25fcmVzdWx0YC4gSSAqcmVhbGx5KiBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgYWN0aW9uX3Jlc3VsdGAgaXMsIGluIGZhY3QsIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyBvdGhlcndpc2UgYXJlIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHRoaW5rIGFib3V0IHJpZ2h0IG5vdy4gSSBoYXZlIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aGF0IGltbWVkaWF0ZWx5LCBhbmQgSSBoYXZlIG15IHRvb2xzIHJlYWR5IHRvIGdvLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGNvbW1pdHRpbmcgYW55IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzcwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MjkuNjIyMzg3NDk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0NjA3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdGlvbl9yZXN1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg9MTgzPVRSQUNFX0VWRU5UKGNvbXBhY3RfcmV0cnksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaC0yMTEtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg6MjEyOlxcdFRQX3ByaW50ayhcXFwib3JkZXI9JWQgcHJpb3JpdHk9JXMgY29tcGFjdGlvbl9yZXN1bHQ9JXMgcmV0cmllcz0lZCBtYXhfcmV0cmllcz0lZCBzaG91bGRfcmV0cnk9JWRcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxMy1cXHRcXHRcXHRfX2VudHJ5LVxcdTAwM2VvcmRlcixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTI2OT1zdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4MjpzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4My1cXHRcXHRcXHQgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzAzPXN0YXRpYyBpbnQgcGFnZV9hY3Rpb24oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMxNS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTY6XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBwcy1cXHUwMDNldHlwZSwgcmVzdWx0KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMTctfVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDg0PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEwMS1cXHRcXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTAyOlxcdFxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAzLVxcdGNhc2UgTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ6XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMDgtXFx0XFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjEwOTpcXHRcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTEwLVxcdFxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMTE6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19IVUdFLCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjExMi1cXHRcXHRyZXR1cm4gcnY7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNDItXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE0MzpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTQ0LVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE0OS1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1MDpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTk1BUF9GQUlMRUQsIE1GX0ZBSUxFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTUxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE3Nz1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjIwNTpcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0RBWCwgcmMgPyBNRl9GQUlMRUQgOiBNRl9SRUNPVkVSRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMjM9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM0Ny1cXHRcXHRpZiAoIW1mX2hhbmRsZWQpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzQ4OlxcdFxcdFxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1BGTl9NQVAsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM0OS1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzNjAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYxOlxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1BGTl9NQVAsIE1GX1JFQ09WRVJFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYyLX1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4OT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Ny1cXHRcXHRcXHRwdXRfcGFnZShwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDg6XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0OS1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ3OC1cXHRcXHRcXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDc5OlxcdFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQlVERFksIHJlcyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDgwLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDgxOlxcdFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ4Mi1cXHRcXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTItXFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDkzOlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTQtXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0OTYtXFx0XFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ5NzpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDk4LVxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ0LVxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0NTpcXHRcXHRcXHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOU1BMSVRfVEhQLCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0Ni1cXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OC1cXHRpZiAoIWh3cG9pc29uX3VzZXJfbWFwcGluZ3MoZm9saW8sIHAsIHBmbiwgZmxhZ3MpKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTk5OlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5NQVBfRkFJTEVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYwMC1cXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA3LVxcdCAgICBmb2xpby1cXHUwMDNlbWFwcGluZyA9PSBOVUxMKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjA4OlxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVFJVTkNBVEVEX0xSVSwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjA5LVxcdFxcdGdvdG8gdW5sb2NrX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjMxLjIxNzAwMzQ1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAwMzAyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgRm9jdXM6IFVFRkkgUG9pc29uZWQgTWVtb3J5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBVRUZJIG1lbW9yeSBwb2lzb25pbmcgaW1wbGVtZW50YXRpb24uIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnM6IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgLCBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBhbmQgYGVmaV9nZXRfcmFtX3RvcGAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIG1hcmtpbmcgYW5kIGhhbmRsaW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlLCBmb3Igc29tZSByZWFzb24sIGNvbnNpZGVyZWQgXCJwb2lzb25lZFwiIOKAkyBsaWtlbHkgc2lnbmlmeWluZyBzb21lIHNvcnQgb2YgaGFyZHdhcmUgaXNzdWUgb3IgYSByZWdpb24gdGhhdCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIEkgZGVsdmUgZGVlcGVyLCBpcyBhYm91dCB0aGUgc2NvcGUgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBtZW1vcnkgcmVzZXJ2YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IHRoZSBwb2lzb25lZCBtZW1vcnkgaXMgZGVjbGFyZWQgYW5kIHN1YnNlcXVlbnRseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIElmIGl0IGlzIHN0YXRpYywgdGhlbiBteSBjb25jZXJucyByZWdhcmRpbmcgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcmUgYWxsZXZpYXRlZC4gSSB3aWxsIGJlZ2luIGJ5IHZlcmlmeWluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTozNS4xMTczMDk0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTYxNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9NzE1PWludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE0LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjgxNTpcXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy04MTYtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYz0xMjE9dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEzNC1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYzoxMzU6dm9pZCBfX2luaXQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTM2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT1zdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODUtI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjg2OnZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI4Ny12b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyODgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyODk6c3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyOTAtc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6NTk6MzYuNzEyOTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MDAwNTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBFRkkgUG9pc29uZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBFRkkgcG9pc29uZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciBob3cgdG8gZW5hYmxlIGl0IHByb3Blcmx5LiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlYCwgYW5kIGBlZmlfZ2V0X3JhbV90b3BgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gSSBkb3VibGUtY2hlY2tlZCB0byBiZSBzdXJlLCBidXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGVmaV9wb2lzb25faW5pdGAsIGBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkYCwgYGVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWRgLCBgZWZpX3BvaXNvbl9yYW5nZV92YWxpZGAsIGBlZmlfcG9pc29uX3VuaXRgLCBgZWZpX3BvaXNvbl9nZW9tZXRyeWAsIGFuZCBgZWZpX3BvaXNvbl9hbGxvY2AgYXJlbid0IHBhcnQgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBsb29rcyBsaWtlIGBFRklfUE9JU09ORURfTUVNT1JZYCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiBgTUVNT1JZX0ZBSUxVUkVgIGlzbid0IGVuYWJsZWQsIGBFRklfUE9JU09ORURfTUVNT1JZYCB3b24ndCBiZSBlaXRoZXIsIGFuZCB2aWNlIHZlcnNhLiBJIHNob3VsZCBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBFRklfU1RVQmAganVzdCB0byBiZSBzYWZlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYEVGSV9TVFVCYCdzIGxvY2F0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDo1OTo0Mi41OTI5MzkwNjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc1NDU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVGSV9TVFVCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9MTU5Mj1jb25maWcgQVVUT19aUkVMQUREUlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xNjAyLVxcbmFyY2gvYXJtL0tjb25maWc6MTYwMzpjb25maWcgRUZJX1NUVUJcXG5hcmNoL2FybS9LY29uZmlnLTE2MDQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI0NjU9ZW5kY2hvaWNlXFxuYXJjaC9hcm02NC9LY29uZmlnLTI0NjYtXFxuYXJjaC9hcm02NC9LY29uZmlnOjI0Njc6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9hcm02NC9LY29uZmlnLTI0NjgtXFx0Ym9vbFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz00OTg9Y29uZmlnIEVGSVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDUtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MDY6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MDctXFx0Ym9vbCBcXFwiRUZJIGJvb3Qgc3R1YiBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEyNDk9ZW5kY2hvaWNlXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEyNTAtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjEyNTE6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEyNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xODgxPWNvbmZpZyBFRklcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg5OC1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4OTk6Y29uZmlnIEVGSV9TVFVCXFxuYXJjaC94ODYvS2NvbmZpZy0xOTAwLVxcdGJvb2wgXFxcIkVGSSBzdHViIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjQ0LjIzMDQ5NDYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Njk1ODkxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgYEVGSV9TVFVCYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBvbiBteSBtaW5kLiBJIGtub3cgYm90aCBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBiZXR0ZXIgaW4gY29udGV4dC4gYEVGSV9TVFVCYCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvcHRpb24uXG5cbk15IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEkgZmlndXJlIHRoZSBwbGFjZSB0byBzdGFydCB3aXRoIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuIFNvLCBsZXQncyBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueSBtZW1vcnkgcmVsYXRlZCBjb25maWcgb3B0aW9ucy4gSSdtIHN1cmUgSSdsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgYWxsIGFib3V0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjQ4LjkwMDA4NjkzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyOTg1OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY0LVxcbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY2LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjUwLjYyOTk1MTg2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE1NDMwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVGSSBNZW1vcnkgUG9pc29uaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbWVudGFsbHkgb3JnYW5pemluZyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLiBXZSdyZSBkZWFsaW5nIHdpdGggYEVGSV9QT0lTT05FRF9NRU1PUllgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYEVGSV9TVFVCYC4gSGFuZyBvbi4uLiBgRUZJX1NUVUJgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBib29sZWFucywgdGhhdCdzIGltcG9ydGFudCB0byBub3RlLiBSaWdodCwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBXZSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBFRkkgdGFibGUgdG8gc3RvcmUgdGhlIGJpdG1hcCBvZiBwb2lzb25lZCBtZW1vcnksIGFuZCB0aGVyZSBhcmUgaG9va3Mgd2l0aGluIGBtZW1vcnktZmFpbHVyZS5jYCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2VzLiBUaGVyZSBhcmUgYWxzbyBob29rcyBpbnRvIHRoZSBFRkkgc3R1YiBmb3IgdGFibGUgYWxsb2NhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJvdGggZHVyaW5nIEVGSSBib290ICphbmQqIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBleHBsaWNpdGx5IGluamVjdGVkLCBmb3IgZXhhbXBsZSwgdmlhIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gQ2xldmVyLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjb250cmlidXRpb24uIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHRoaXMgYXJlYSBpcyBsaWtlbHkgdG8gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeWAsIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGFuZCBgZWZpX2dldF9yYW1fdG9wYC4gVGhlc2UgYXJlIGFsbCBsb2dpY2FsIGFuZCBleHBlY3RlZCBjaG9pY2VzLCB0YXJnZXRpbmcgdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGZvciBteSBpbml0aWFsIHJldmlldy4gVGltZSB0byByZWNvcmQgdGhlIHJlc3VsdHMgb2YgbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNzEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjI0NTM4NTkxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTI3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwiZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZVwiLFxuICAgIFwiZWZpX2dldF9yYW1fdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjYXJyeWluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVGSSBjb25maWcgdGFibGUgdG8gc3RvcmUgdGhlIHBvaXNvbmVkIG1lbW9yeSBiaXRtYXAsIGhvb2tzIGludG8gYG1lbW9yeS1mYWlsdXJlLmNgIHRvIHJlY29yZCBwb2lzb25lZCBwYWdlcywgYW5kIGhvb2tzIGludG8gdGhlIEVGSSBzdHViIHRvIGFsbG9jYXRlIGFuZCBpbnN0YWxsIHRoZSB0YWJsZS4gVGhlIG5ldyBsb2dpYyBpcyByZWFjaGFibGUgZHVyaW5nIEVGSSBib290IGFuZCB3aGVuIG1lbW9yeSBmYWlsdXJlcyBhcmUgaW5qZWN0ZWQgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsXG4gICAgXCJlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnlcIixcbiAgICBcImluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlXCIsXG4gICAgXCJlZmlfZ2V0X3JhbV90b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNhcnJ5aW5nIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIEl0IGludHJvZHVjZXMgYSBuZXcgRUZJIGNvbmZpZyB0YWJsZSB0byBzdG9yZSB0aGUgcG9pc29uZWQgbWVtb3J5IGJpdG1hcCwgaG9va3MgaW50byBgbWVtb3J5LWZhaWx1cmUuY2AgdG8gcmVjb3JkIHBvaXNvbmVkIHBhZ2VzLCBhbmQgaG9va3MgaW50byB0aGUgRUZJIHN0dWIgdG8gYWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHRhYmxlLiBUaGUgbmV3IGxvZ2ljIGlzIHJlYWNoYWJsZSBkdXJpbmcgRUZJIGJvb3QgYW5kIHdoZW4gbWVtb3J5IGZhaWx1cmVzIGFyZSBpbmplY3RlZCAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjMyMDc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMTY1MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjkyNDI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTExMDQxOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNhcnJ5IGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIGFjcm9zcyBrZXhlYyB1c2luZyBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZS4gVGhlIG5ld2x5IGludHJvZHVjZWQgc3RydWN0dXJlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBpcyBhbGxvY2F0ZWQgaW4gYGVmaV9wb2lzb25fYWxsb2MoKWAgYW5kIGFsbCBpdHMgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGZsZXhpYmxlIGBiaXRtYXBgIGFycmF5LCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAodGhlIGZpZWxkcyBhcmUgYXNzaWduZWQgYW5kIHRoZSBiaXRtYXAgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgKS4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgdGhpcyB0YWJsZSBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBiaXRtYXAgaGFuZGxpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjMzY1MWM2OGI3YWUwNzFmNDVkZTc3YmM5ZmI0ZDc5MDQ0ZmEwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDo1ODo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi42OWMwZGMwMmJjMTEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTYgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRib29sIFwiQ2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjXCJcbitcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuK1x0aGVscFxuK1x0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xuK1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbitcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXG4gXHRib29sIFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wiXG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXHRcdCs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0Kz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQrPSBjcGVyLXg4Ni5vXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVx0XHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQrPSBwb2lzb24ub1xuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXHRcdCs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li43NDc0ZWVlYmIwYWRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbisjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NDYsNiArNjQ5LDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcdFwiVW5hY2NlcHRlZFwiXHR9LFxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcIlBPSVNPTlwiXHR9LFxuKyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODA2LDYgKzgxMiw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkoKTtcbitcbiBcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcbiBcdFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5pbmRleCBmMjdmMmUxZjAwMTk5Li43MjU4ZWNkZjFmN2MyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuQEAgLTc3NCwzICs3NzQsOTIgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxuXCIpO1xuIFx0fVxuIH1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbisvKiBDYXAgb24gdGhlIGJpdG1hcDsgYSBzcGFuIHRvbyB3aWRlIHRvIGZpdCBnZXRzIGEgY29hcnNlciB1bml0IGluc3RlYWQuICovXG4rI2RlZmluZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFXHRTWl8xTVxuKyNkZWZpbmUgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFXHRTWl8xR1xuK1xuKy8qXG4rICogQml0bWFwIGdlb21ldHJ5IGZvciBhIGdpdmVuIHRvcCBvZiBSQU0uIFRoZSBiaXRtYXAgc3RhcnRzIGF0IGFkZHJlc3MgMCwgc29cbisgKiBiaXQgTiBjb3ZlcnMgdW5pdCBOLlxuKyAqIEluIHRoZSBmb2xsb3dpbmcgY29kZSwgYSBcInVuaXRcIiBpcyBncmFudWxlIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgdGhhdCBvbmVcbisgKiBiaXRtYXAgYml0IGNvdmVycy5cbisgKi9cbitzdGF0aWMgdTMyIGVmaV9wb2lzb25fZ2VvbWV0cnkodTY0IHJhbV90b3AsIHU2NCAqYml0bWFwX3NpemUpXG4re1xuK1x0dTY0IG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbitcdHUzMiB1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbitcbitcdHdoaWxlIChESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpIFx1MDAzZSBFRklfUE9JU09OX01BWF9UQUJMRV9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVuaXRfc2l6ZSBcdTAwM2MgRUZJX1BPSVNPTl9NQVhfVU5JVF9TSVpFKSB7XG4rXHRcdG5yX3VuaXRzID0gRElWX1JPVU5EX1VQKG5yX3VuaXRzLCAyKTtcbitcdFx0dW5pdF9zaXplICo9IDI7XG4rXHR9XG4rXG4rXHQqYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAobnJfdW5pdHMsIEJJVFNfUEVSX0JZVEUpO1xuK1x0cmV0dXJuIHVuaXRfc2l6ZTtcbit9XG4rXG4rLyogQUNQSSByZWNsYWltIG1lbW9yeSwgc28gdGhlIG5leHQga2VybmVsIGRvZXMgbm90IHRyZWF0IGl0IGFzIGZyZWUgUkFNLiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgYml0bWFwX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHUzMiB1bml0X3NpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxuK1x0XHRcdCAgICAgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwbS1cdTAwM2V2ZXJzaW9uID0gMTtcbitcdHBtLVx1MDAzZXVuaXRfc2l6ZSA9IHVuaXRfc2l6ZTtcbitcdHBtLVx1MDAzZXBoeXNfYmFzZSA9IDA7XG4rXHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4rXHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcG07XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgYW5kIGluc3RhbGwgdGhlIHBvaXNvbmVkLW1lbW9yeSBiaXRtYXAgd2hpbGUgYm9vdCBzZXJ2aWNlcyBhcmVcbisgKiBhdmFpbGFibGVcbisgKi9cbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXHR1MzIgdW5pdF9zaXplO1xuK1xuK1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuK1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4rXHRpZiAocG0pIHtcbitcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbitcdFx0XHRlZmlfZXJyKFwiVW5rbm93biB2ZXJzaW9uIG9mIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVmaV9nZXRfcmFtX3RvcChcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHVuaXRfc2l6ZSA9IGVmaV9wb2lzb25fZ2VvbWV0cnkocmFtX3RvcCwgXHUwMDI2Yml0bWFwX3NpemUpO1xuK1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKGJpdG1hcF9zaXplLCB1bml0X3NpemUpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbitcdFx0XHQgICAgIFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rXHR9XG4rfVxuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggNDJkNjA3M2JjZDA2Mi4uMDA4NjM1ZWI1MDI3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcdFx0XHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLmI1ZTE5YmE1MGRkYWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMDk0LDYgKzEwOTQsOCBAQCBjaGFyICplZmlfY29udmVydF9jbWRsaW5lKGVmaV9sb2FkZWRfaW1hZ2VfdCAqaW1hZ2UpO1xuIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X21lbW9yeV9tYXAoc3RydWN0IGVmaV9ib290X21lbW1hcCAqKm1hcCxcbiBcdFx0XHRcdGJvb2wgaW5zdGFsbF9jZmdfdGJsKTtcbiBcbitlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fdG9wKHU2NCAqdG9wKTtcbitcbiBlZmlfc3RhdHVzX3QgZWZpX2FsbG9jYXRlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYWRkcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbiBcbkBAIC0xMTY5LDYgKzExNzEsMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbWVtLmNcbmluZGV4IDU5ZjNmODNkZTUwYzIuLjc3N2YxZjE4MGM2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jXG5AQCAtNjQsNiArNjQsNTkgQEAgZWZpX3N0YXR1c190IGVmaV9nZXRfbWVtb3J5X21hcChzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICoqbWFwLFxuIFx0cmV0dXJuIEVGSV9TVUNDRVNTO1xuIH1cbiBcbisvKipcbisgKiBlZmlfZ2V0X3JhbV90b3AoKSAtIGZpbmQgdGhlIHRvcCBvZiB1c2FibGUgUkFNXG4rICogQHRvcDpcdG9uIHJldHVybiwgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCBtZW1vcnkgbWFwIGVudHJ5IHRoYXQgYmVjb21lc1xuKyAqXHRcdHVzYWJsZSBSQU1cbisgKlxuKyAqIFdhbGsgdGhlIFVFRkkgbWVtb3J5IG1hcCBmb3IgdGhlIGVudHJ5IHR5cGVzIHRoYXQgYmVjb21lIHVzYWJsZSBSQU0sIHRoZSBzZXRcbisgKiBzZXR1cF9lODIwKCkgbWFwcyB0byBFODIwX1RZUEVfUkFNLCBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJlc3MgYW55IG9mXG4rICogdGhlbSByZWFjaGVzLiBNZW1vcnkgYSBjb25maWRlbnRpYWwgZ3Vlc3QgaGFzIG5vdCBhY2NlcHRlZCB5ZXQgY291bnRzIGFzXG4rICogd2VsbCwgc2luY2UgaXQgYmVjb21lcyBSQU0gb25jZSBhY2NlcHRlZC4gVGhpcyBpcyB3aGF0IHRoZSBzdHViIGhhcyBpbiBwbGFjZVxuKyAqIG9mIG1heF9wZm4sIHdoaWNoIGlzIG9ubHkgc2V0IG9uY2UgdGhlIGtlcm5lbCBwcm9wZXIgaXMgdXAuXG4rICpcbisgKiBNZW1vcnkgdGhlIGZpcm13YXJlIGhvdC1hZGRzIGxhdGVyIGlzIG5vdCBkZXNjcmliZWQgYnkgdGhlIG1lbW9yeSBtYXAgYW5kIHNvXG4rICogaXMgbm90IGFjY291bnRlZCBmb3IgaGVyZS5cbisgKlxuKyAqIFJldHVybjpcdHN0YXR1cyBjb2RlXG4rICovXG4rZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3RvcCh1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1x0dTY0IHJhbV90b3AgPSAwO1xuK1x0aW50IGksIG5yX2Rlc2M7XG4rXG4rXHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gc3RhdHVzO1xuK1xuK1x0bnJfZGVzYyA9IG1hcC1cdTAwM2VtYXBfc2l6ZSAvIG1hcC1cdTAwM2VkZXNjX3NpemU7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXNjOyBpKyspIHtcbitcdFx0ZWZpX21lbW9yeV9kZXNjX3QgKmQ7XG4rXG4rXHRcdGQgPSBlZmlfbWVtZGVzY19wdHIoKHVuc2lnbmVkIGxvbmcpbWFwLVx1MDAzZW1hcCwgbWFwLVx1MDAzZWRlc2Nfc2l6ZSwgaSk7XG4rXHRcdHN3aXRjaCAoZC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgRUZJX0xPQURFUl9DT0RFOlxuK1x0XHRjYXNlIEVGSV9MT0FERVJfREFUQTpcbitcdFx0Y2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOlxuK1x0XHRjYXNlIEVGSV9CT09UX1NFUlZJQ0VTX0RBVEE6XG4rXHRcdGNhc2UgRUZJX0NPTlZFTlRJT05BTF9NRU1PUlk6XG4rXHRcdGNhc2UgRUZJX1VOQUNDRVBURURfTUVNT1JZOlxuK1x0XHRcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcbitcdFx0XHRcdCAgICAgIGQtXHUwMDNlcGh5c19hZGRyICsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyYW1fdG9wKVxuK1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbitcbitcdCp0b3AgPSByYW1fdG9wO1xuK1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuK31cbitcbiAvKipcbiAgKiBlZmlfYWxsb2NhdGVfcGFnZXMoKSAtIEFsbG9jYXRlIG1lbW9yeSBwYWdlc1xuICAqIEBzaXplOlx0bWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IGNlZjMyZTJjODJkOGYuLmY5MGRlMTFiYzg4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjMsNiArMTAyMyw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4rXG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNDE4YzZiM2FhYjgxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCArMSwxOTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBSdW50aW1lIGhhbmRsaW5nIGZvciB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSBjb25maWd1cmF0aW9uIHRhYmxlOiBhXG4rICogYml0bWFwIHdpdGggb25lIGJpdCBwZXIgRUZJX1BPSVNPTl9VTklUX1NJWkUgb2YgcGh5c2ljYWwgbWVtb3J5IHRoYXQgcmVjb3Jkc1xuKyAqIGhhcmR3YXJlLXBvaXNvbmVkIGZyYW1lcyBzbyB0aGUgbmV4dCBrZXhlYyBrZXJuZWwgY2FuIGtlZXAgdGhlbSBvdXQgb2YgaXRzXG4rICogYWxsb2NhdG9yLiBUaGUgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSAoZW1wdHkpIGJpdG1hcDsgdGhpcyBrZXJuZWxcbisgKiBzZXRzIGJpdHMgYXQgcnVudGltZTsgdGhlIG5leHQga2VybmVsIHJlc2VydmVzIHRoZSBzZXQgdW5pdHMgYmVmb3JlIHRoZVxuKyAqIGFsbG9jYXRvciBjb21lcyB1cC5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImVmaTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbiBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rLyogQSBub24tZW1wdHkgYml0bWFwIG9uIGEgcG93ZXItb2YtMiBncmlkIHRoYXQgcGh5c19iYXNlIGFjdHVhbGx5IHNpdHMgb24uICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKCFwbS1cdTAwM2VzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK31cbitcbisvKiBUaGUgcmFuZ2UgdGhlIGJpdG1hcCBjbGFpbXMgdG8gZGVzY3JpYmUgaGFzIHRvIGZpdCBpbiBhIHU2NC4gKi9cbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHR1NjQgbmJpdHMsIHNwYW47XG4rXG4rXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KG5iaXRzLCAodTY0KXBtLVx1MDAzZXVuaXRfc2l6ZSwgXHUwMDI2c3BhbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiAhY2hlY2tfYWRkX292ZXJmbG93KHBtLVx1MDAzZXBoeXNfYmFzZSwgc3BhbiwgXHUwMDI2c3Bhbik7XG4rfVxuK1xuKy8qXG4rICogVGhlIHRhYmxlIG1heSBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIga2VybmVsIGluIHRoZSBrZXhlYyBjaGFpbixcbisgKiBzbyBjaGVjayBpdHMgZ2VvbWV0cnkgYmVmb3JlIGRvaW5nIGFueSBhcml0aG1ldGljIHdpdGggaXQuXG4rICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pIHx8ICFlZmlfcG9pc29uX3JhbmdlX3ZhbGlkKHBtKSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGVmaV9wb2lzb25faW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCBzaXplO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBNYXAgdGhlIGhlYWRlciB0byBsZWFybiB0aGUgYml0bWFwIHNpemUsIHRoZW4gbWFwIHRoZSB3aG9sZSB0YWJsZS4gKi9cbitcdHBtID0gbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSksIE1FTVJFTUFQX1dCKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXBtKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XG4rXHRcdG1lbXVubWFwKHBtKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRzaXplID0gcG0tXHUwMDNlc2l6ZTtcbitcdG1lbXVubWFwKHBtKTtcbitcbitcdGVmaV9wb2lzb24gPSBtZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSArIHNpemUsXG4rXHRcdFx0ICAgICAgTUVNUkVNQVBfV0IpO1xuK1x0V0FSTl9PTl9PTkNFKCFlZmlfcG9pc29uKTtcbitcdHJldHVybiAwO1xuK31cbitlYXJseV9pbml0Y2FsbChlZmlfcG9pc29uX2luaXQpO1xuK1xuKy8qIEJpdG1hcCB1bml0IGNvdmVyaW5nIEBwZm4sIG9yIC0xIGlmIHRoZSBwZm4gZmFsbHMgb3V0c2lkZSB0aGUgdGFibGUuICovXG4rc3RhdGljIGxvbmcgZWZpX3BvaXNvbl91bml0KHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuK1x0dTY0IHVuaXQ7XG4rXG4rXHRpZiAoYWRkciBcdTAwM2MgZWZpX3BvaXNvbi1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybiAtMTtcbitcdHVuaXQgPSAoYWRkciAtIGVmaV9wb2lzb24tXHUwMDNlcGh5c19iYXNlKSAvIGVmaV9wb2lzb24tXHUwMDNldW5pdF9zaXplO1xuK1x0aWYgKHVuaXQgXHUwMDNlPSAodTY0KWVmaV9wb2lzb24tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiB1bml0O1xuK31cbitcbisvKlxuKyAqIFJlY29yZCBhIGhhcmR3YXJlLXBvaXNvbmVkIGZyYW1lIHNvIHRoZSBuZXh0IGtlcm5lbCBrZWVwcyBpdHMgdW5pdCBvdXQgb2YgdGhlXG4rICogYWxsb2NhdG9yLiBtZW1vcnlfZmFpbHVyZSgpIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGZyYW1lIGZyb20gdGhpcyBrZXJuZWwuXG4rICpcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBvbmUgYml0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc29cbisgKiBhbiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbisgKi9cbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdGxvbmcgdW5pdDtcbitcbitcdGlmICghZWZpX3BvaXNvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW5pdCA9IGVmaV9wb2lzb25fdW5pdChwZm4pO1xuK1x0aWYgKHVuaXQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNldF9iaXQodW5pdCwgZWZpX3BvaXNvbi1cdTAwM2ViaXRtYXApO1xuK31cbitcbit2b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHR1NjQgcHBtID0gZWZpLnBvaXNvbmVkX21lbW9yeSwgcGh5c19iYXNlLCB1bml0X3NpemUsIGJpdG1hcF9zaXplLCBvZmY7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1bnNpZ25lZCBpbnQgbnJfdW5pdHMgPSAwO1xuK1xuK1x0aWYgKHBwbSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwbSA9IGVhcmx5X21lbXJlbWFwKHBwbSwgc2l6ZW9mKCpwbSkpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRwcl93YXJuKFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbitcdFx0LyogS2VlcCB0aGUgcnVudGltZSBzaWRlIG9mZiBhIHRhYmxlIHRoaXMgcGFzcyByZWplY3RlZC4gKi9cbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBoeXNfYmFzZSA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbitcdHVuaXRfc2l6ZSA9IHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGJpdG1hcF9zaXplID0gcG0tXHUwMDNlc2l6ZTtcbitcbitcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXG4rXHQvKiBSZXNlcnZlIHRoZSB0YWJsZSBpdHNlbGYgc28gaXQgc3Vydml2ZXMgYSBmdXJ0aGVyIGtleGVjLiAqL1xuK1x0bWVtYmxvY2tfcmVzZXJ2ZShQQUdFX0FMSUdOX0RPV04ocHBtKSxcbitcdFx0XHQgUEFHRV9BTElHTihwcG0gKyBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplKSAtXG4rXHRcdFx0IFBBR0VfQUxJR05fRE9XTihwcG0pKTtcbitcbitcdC8qXG4rXHQgKiBXYWxrIHRoZSBiaXRtYXAgYSBwYWdlIGF0IGEgdGltZSBhbmQgcmVzZXJ2ZSBlYWNoIHBvaXNvbmVkIHVuaXQuXG4rXHQgKiBtZW1ibG9jay5tZW1vcnkgaXMgbm90IHBvcHVsYXRlZCB0aGlzIGVhcmx5LCBzbyBtZW1ibG9ja19yZW1vdmUoKVxuK1x0ICogYW5kIG1lbWJsb2NrX21hcmtfbm9tYXAoKSB3b3VsZCBiZSBuby1vcHM7IGEgcmVzZXJ2YXRpb24gaXMgd2hhdFxuK1x0ICoga2VlcHMgdGhlIHVuaXRzIGF3YXkgZnJvbSB0aGUgYWxsb2NhdG9yLlxuK1x0ICovXG4rXHRmb3IgKG9mZiA9IDA7IG9mZiBcdTAwM2MgYml0bWFwX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpIHtcbitcdFx0dTY0IGNodW5rID0gbWluX3QodTY0LCBQQUdFX1NJWkUsIGJpdG1hcF9zaXplIC0gb2ZmKTtcbitcdFx0dW5zaWduZWQgbG9uZyBiaXQsIG5iaXRzID0gY2h1bmsgKiBCSVRTX1BFUl9CWVRFO1xuK1x0XHR1bnNpZ25lZCBsb25nICptYXA7XG4rXG4rXHRcdG1hcCA9IGVhcmx5X21lbXJlbWFwKHBwbSArIG9mZnNldG9mKHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5LFxuK1x0XHRcdFx0XHRcdCAgICBiaXRtYXApICsgb2ZmLCBjaHVuayk7XG4rXHRcdGlmICghbWFwKSB7XG4rXHRcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IGJpdG1hcFxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hcCwgbmJpdHMpIHtcbitcdFx0XHR1NjQgdW5pdCA9IG9mZiAqIEJJVFNfUEVSX0JZVEUgKyBiaXQ7XG4rXG4rXHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2Jhc2UgKyB1bml0ICogdW5pdF9zaXplLCB1bml0X3NpemUpO1xuK1x0XHRcdG5yX3VuaXRzKys7XG4rXHRcdH1cbitcdFx0ZWFybHlfbWVtdW5tYXAobWFwLCBjaHVuayk7XG4rXHR9XG4rXG4rXHRpZiAobnJfdW5pdHMpXG4rXHRcdHByX2luZm8oXCJyZXNlcnZlZCAldSBwb2lzb25lZCB1bml0KHMpICglbGx1SyBlYWNoKSBpbmhlcml0ZWQgYWNyb3NzIGtleGVjXFxuXCIsXG4rXHRcdFx0bnJfdW5pdHMsIHVuaXRfc2l6ZSBcdTAwM2VcdTAwM2UgMTApO1xuK31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggY2NiYzM1NDc5Njg0YS4uM2NiM2YyMjRhYzAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHN0b3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVib290LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHg3OGE1YmYwNywgMHg3ZDJhLCAweDI4ODksICAweDE2LCAweDMxLCAweDYzLCAweGQ0LCAweDU2LCAweGYyLCAweDgzLCAweDUwKVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtNjUwLDYgKzY1Miw3IEBAIGV4dGVybiBzdHJ1Y3QgZWZpIHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRtb2t2YXJfdGFibGU7XHRcdC8qIE1PSyB2YXJpYWJsZSBjb25maWcgdGFibGUgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb2NvX3NlY3JldDtcdFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHR1bmFjY2VwdGVkO1x0XHQvKiBVbmFjY2VwdGVkIG1lbW9yeSB0YWJsZSAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjY5LDYgKzEyNzIsMjQgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcbiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFxcXG4gXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcbiBcbitzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4rXHR1MzJcdFx0dmVyc2lvbjtcbitcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4rXHR1NjRcdFx0cGh5c19iYXNlO1x0LyogcGh5cyBhZGRyZXNzIGNvdmVyZWQgYnkgYml0IDAgKi9cbitcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4rfTtcbitcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KHZvaWQpO1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9yZXNlcnZlX3BvaXNvbmVkX21lbW9yeSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li4xY2M0ZTkyZTk4NzQ4IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTI4Niw2ICsxMjg3LDggQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdGlmICh0eXBlICE9IE1GX01TR19BTFJFQURZX1BPSVNPTkVEIFx1MDAyNlx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XG4gXHRcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcbiBcdFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcbitcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuK1x0XHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xuIFx0fVxuIFxuIFx0cHJfZXJyKFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjU5OjU3LjMyMjkyNTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTExMDEzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBvaXNvbmVkIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZYCB0byBoYW5kbGUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjLiBJIHNlZSB0aGV5J3JlIGFkZGluZyBhIG5ldyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIGEgbmV3IHRhYmxlIHRvIHRyYWNrIHRoZSBwb2lzb25lZCBtZW1vcnkuXG5cbkknbSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBjb2RlIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIHRhYmxlIGluIGBlZmlfcG9pc29uX2FsbG9jKClgLiBMZXQncyBicmVhayBpdCBkb3duOiBUaGV5J3JlIHVzaW5nIGBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCAuLi4pYCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBzdGFuZGFyZCBFRkkgc3R1ZmYuIENydWNpYWxseSwgdGhleSdyZSAqZnVsbHkqIGluaXRpYWxpemluZyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGBwbWAgc3RydWN0J3MgZmllbGRzIChgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgKSBhcmUgc2V0LCBhbmQsIGNyaXRpY2FsbHksIHRoZSBgYml0bWFwYCBpcyB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXRgLiBJJ20gdmVyaWZ5aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gY2FyZWZ1bGx5IGJlY2F1c2UgdGhhdCdzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9mdGVuIHN1cmZhY2VzLlxuXG5Mb29raW5nIGF0IHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBsb29rcyBjbGVhbjogYHZlcnNpb25gLCBgdW5pdF9zaXplYCwgYHBoeXNfYmFzZWAsIGBzaXplYCwgYW5kIGEgZmxleGlibGUgYXJyYXkgYGJpdG1hcGAuIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYG1lbXNldGAgY292ZXJzIHRoZSBlbnRpcmUgYGJpdG1hcGAgYXJlYSwgc28gdGhlcmUncyBubyBkYW5nbGluZyBtZW1vcnkuIFRoZXJlJ3Mgbm8gdW5leHBlY3RlZCBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QgdGhhdCBjb3VsZCBsZWF2ZSBzb21ldGhpbmcgdW5pbml0aWFsaXplZC5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGBlZmlfcG9pc29uX2luaXQoKWAgd2hpY2ggbWFwcyB0aGUgdGFibGUgdXNpbmcgYG1lbXJlbWFwKClgLiBUaGVuLCBgZWZpX3Jlc2VydmVfcG9pc29uZWRfbWVtb3J5KClgIHJlYWRzIHRoZSB0YWJsZSBhbmQgcmVzZXJ2ZXMgdGhlIG1lbW9yeSB3aXRoIGBtZW1ibG9ja19yZXNlcnZlKClgLCBhbmQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIHNldHMgYml0cyBpbiB0aGUgYml0bWFwLiBJIGNhbiBzZWUgaG93IHRoaXMgd29ya3MuIFRoZSB0YWJsZSBnZXRzIHBhc3NlZCB0byB0aGUgbmV4dCBrZXJuZWwgdmlhIHRoZSBFRkkgY29uZmlndXJhdGlvbiB0YWJsZXMsIHdoaWNoIGlzIGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoLCBub3QgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgYWxsb2NhdGlvbiBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYC4gVGhlIGFsbG9jYXRpb24gc2l6ZSBsb29rcyBjb3JyZWN0OiBgc2l6ZW9mKCpwbSkgKyBiaXRtYXBfc2l6ZWAuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gKkV2ZXJ5dGhpbmcqIGFsbG9jYXRlZCBoZXJlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cbkkgYWxzbyBjaGVja2VkIGBlZmlfZ2V0X3JhbV90b3AoKWAgd2hpY2ggY2FsbHMgYGVmaV9nZXRfbWVtb3J5X21hcCgpYCBidXQgdGhpcyBhcHBlYXJzIHRvIGJlIGV4aXN0aW5nIGNvZGUsIG5vdCBzb21ldGhpbmcgbmV3IHRvIHRoaXMgcGF0Y2gsIHNvIEknbSBub3QgY29uY2VybmVkLlxuXG5HaXZlbiB3aGF0IEkndmUgc2VlbiwgdGhlcmUgYXJlIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBoZXJlLiBUaGV5J3JlIGJlaW5nIHZlcnkgY2FyZWZ1bCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbi4gS0FTQU4gc2VlbXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGlzIGFyZWEsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MSwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowMDowOS4yMzM5NDM2NTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY2FycnkgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgYWNyb3NzIGtleGVjIHVzaW5nIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3R1cmUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGlzIGFsbG9jYXRlZCBpbiBgZWZpX3BvaXNvbl9hbGxvYygpYCBhbmQgYWxsIGl0cyBmaWVsZHMsIGluY2x1ZGluZyB0aGUgZmxleGlibGUgYGJpdG1hcGAgYXJyYXksIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICh0aGUgZmllbGRzIGFyZSBhc3NpZ25lZCBhbmQgdGhlIGJpdG1hcCBpcyB6ZXJvZWQgdXNpbmcgYG1lbXNldGApLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCB0aGlzIHRhYmxlIGlzIG5vdCBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJpdG1hcCBoYW5kbGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjYXJyeSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBhY3Jvc3Mga2V4ZWMgdXNpbmcgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZSBgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgaXMgYWxsb2NhdGVkIGluIGBlZmlfcG9pc29uX2FsbG9jKClgIGFuZCBhbGwgaXRzIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBmbGV4aWJsZSBgYml0bWFwYCBhcnJheSwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKHRoZSBmaWVsZHMgYXJlIGFzc2lnbmVkIGFuZCB0aGUgYml0bWFwIGlzIHplcm9lZCB1c2luZyBgbWVtc2V0YCkuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIHRoaXMgdGFibGUgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgYml0bWFwIGhhbmRsaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcctld[1] Phase: Succeeded StartedAt: 2026-08-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 11:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 11:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2] Phase: Succeeded StartedAt: 2026-08-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 11:00:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:17 +0000 UTC FinishedAt: 2026-08-21 11:00:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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-workflowcctld/series-workflowcctld-convert-artifact-3946331144/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:27 +0000 UTC FinishedAt: 2026-08-21 11:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:27 +0000 UTC FinishedAt: 2026-08-21 11:17:10 +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:*6053aea6-ac96-497e-babf-376885e8d660,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-workflowcctld/series-workflowcctld-convert-artifact-3946331144/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": "2f82619d-3d3a-447e-9726-b705d57799af", "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-workflowcctld/series-workflowcctld-build-action-2409764478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:00:27 +0000 UTC FinishedAt: 2026-08-21 11:17:00 +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:*6053aea6-ac96-497e-babf-376885e8d660,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-workflowcctld/series-workflowcctld-convert-artifact-3946331144/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": "2f82619d-3d3a-447e-9726-b705d57799af", "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-workflowcctld/series-workflowcctld-build-action-2409764478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:10 +0000 UTC FinishedAt: 2026-08-21 11:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:10 +0000 UTC FinishedAt: 2026-08-21 11:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:10 +0000 UTC FinishedAt: 2026-08-21 11:17:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:10 +0000 UTC FinishedAt: 2026-08-21 11:17:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-workflowcctld/series-workflowcctld-convert-artifact-4276144367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:20 +0000 UTC FinishedAt: 2026-08-21 11:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:17:20 +0000 UTC FinishedAt: 2026-08-21 11:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f82619d-3d3a-447e-9726-b705d57799af,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-workflowcctld/series-workflowcctld-build-action-2409764478/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-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:19:11 +0000 UTC FinishedAt: 2026-08-21 11:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:19:11 +0000 UTC FinishedAt: 2026-08-21 11:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:19:11 +0000 UTC FinishedAt: 2026-08-21 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:19:11 +0000 UTC FinishedAt: 2026-08-21 11:35:50 +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:*6053aea6-ac96-497e-babf-376885e8d660,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-workflowcctld/series-workflowcctld-convert-artifact-4276144367/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": "200a0b52-c550-4559-96cb-f071b7b89f48", "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-workflowcctld/series-workflowcctld-build-action-1275083907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:19:11 +0000 UTC FinishedAt: 2026-08-21 11:35:40 +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:*6053aea6-ac96-497e-babf-376885e8d660,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-workflowcctld/series-workflowcctld-convert-artifact-4276144367/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": "200a0b52-c550-4559-96cb-f071b7b89f48", "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-workflowcctld/series-workflowcctld-build-action-1275083907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:35:50 +0000 UTC FinishedAt: 2026-08-21 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:35:50 +0000 UTC FinishedAt: 2026-08-21 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:35:50 +0000 UTC FinishedAt: 2026-08-21 11:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:35:50 +0000 UTC FinishedAt: 2026-08-21 11:37:39 +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:*200a0b52-c550-4559-96cb-f071b7b89f48,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-workflowcctld/series-workflowcctld-build-action-1275083907/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-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"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:*2f82619d-3d3a-447e-9726-b705d57799af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*200a0b52-c550-4559-96cb-f071b7b89f48,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-workflowcctld/series-workflowcctld-build-action-2409764478/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-workflowcctld/series-workflowcctld-build-action-1275083907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 11:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 11:37:54 +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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"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-workflowcctld/series-workflowcctld-convert-artifact-3284321960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 11:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 11:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:49 +0000 UTC FinishedAt: 2026-08-21 11:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:59 +0000 UTC FinishedAt: 2026-08-21 14:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcctld[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"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","efi_reserve_poisoned_memory","install_poisoned_memory_table","efi_get_ram_top"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB"],"series_id":"022b9980-ba2a-4efa-9918-9424e8ec0cfa","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-21 11:37:59 +0000 UTC FinishedAt: 2026-08-21 14:42:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f82619d-3d3a-447e-9726-b705d57799af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*200a0b52-c550-4559-96cb-f071b7b89f48,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-workflowcctld/series-workflowcctld-build-action-2409764478/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-workflowcctld/series-workflowcctld-build-action-1275083907/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-workflowcctld/series-workflowcctld-convert-artifact-3284321960/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,}