Name: series-workflowzwdgk Phase: Failed StartedAt: 2026-09-05 19:19:05 +0000 UTC FinishedAt: 2026-09-05 19:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwdgk[0] Phase: Succeeded StartedAt: 2026-09-05 19:19:05 +0000 UTC FinishedAt: 2026-09-05 19:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwdgk[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 19:19:05 +0000 UTC FinishedAt: 2026-09-05 19:22:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGEyMWY1MWU1ODE1ZTkuLjVlYWE2NTU3OGQ1OGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtNjg1LDYgJiM0Mzs2ODUsMTAgQEAgY29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNcbiBjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4gXHRkZWZfYm9vbCA2NEJJVFxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuJiM0MztcdGRlZl9ib29sIDY0QklUIFx1MDAyNlx1MDAyNiBFRklfU1RVQlxuJiM0MztcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXG4mIzQzO1xuIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcdGRlcGVuZHMgb24gS0VYRUNfRklMRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTMxNCw2ICYjNDM7MzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFXG4gXG4gXHQgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuXG4gXG4mIzQzO2NvbmZpZyBFRklfS0hPXG4mIzQzO1x0Ym9vbFxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IEVGSV9HRU5FUklDX1NUVUIgXHUwMDI2XHUwMDI2IEtFWEVDX0hBTkRPVkVSXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cbiYjNDM7XHQgIG9uZSBrZXJuZWwgdG8gdGhlIG5leHQgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZVxuJiM0MztcdCAgZW50cnkgdW5kZXIgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXRcbiYjNDM7XHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXG4mIzQzO1xuJiM0MztcdCAgQXJjaGl0ZWN0dXJlcyB3aXRoIGEgYm9vdCBGRFQgKGFybTY0LCByaXNjdikgdXNlIHRoZSAvY2hvc2VuIEZEVFxuJiM0MztcdCAgcGF0aCBpbnN0ZWFkIGFuZCBkbyBub3Qgc2VsZWN0IHRoaXMuXG4mIzQzO1xuIGVuZG1lbnVcbiBcbiBjb25maWcgVUVGSV9DUEVSXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uNjM4MGNmYWIxNDkzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdHJkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG5AQCAtNjIsNiAmIzQzOzYzLDkgQEAgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgZWZpX3JuZ19zZWVkID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbV9yZXNlcnZlID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJ0X3Byb3AgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgaW5pdHJkID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuJiM0MzsjZW5kaWZcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcmltYXJ5X2Rpc3BsYXlfdGFibGU7XG4gXG5AQCAtNjI5LDYgJiM0Mzs2MzMsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuIFx0e0VGSV9UQ0cyX0ZJTkFMX0VWRU5UU19UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnRwbV9maW5hbF9sb2csXHRcJiMzNDtUUE1GaW5hbExvZ1wmIzM0O1x0fSxcbiBcdHtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudHBtX2ZpbmFsX2xvZyxcdFwmIzM0O0NDRmluYWxMb2dcJiMzNDtcdH0sXG4gXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcJiMzNDtNRU1SRVNFUlZFXCYjMzQ7XHR9LFxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE9cbiYjNDM7XHR7TElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsXHRcdFx1MDAyNmVmaV9raG9fdGFibGVfcGh5cyxcdFwmIzM0O0tIT1wmIzM0O1x0XHR9LFxuJiM0MzsjZW5kaWZcbiBcdHtMSU5VWF9FRklfSU5JVFJEX01FRElBX0dVSUQsXHRcdFx1MDAyNmluaXRyZCxcdFx0XCYjMzQ7SU5JVFJEXCYjMzQ7XHR9LFxuIFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXHRcdFx1MDAyNnJ0X3Byb3AsXHRcdFwmIzM0O1JUUFJPUFwmIzM0O1x0fSxcbiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HXG5AQCAtODA2LDYgJiM0Mzs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzO1x0aWYgKGVmaV9raG9fdGFibGVfcGh5cyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlc2VydmUgdGhlIHN0dWItYWxsb2NhdGVkIHRhYmxlIHNvIGl0IGlzIG5laXRoZXIgaGFuZGVkXG4mIzQzO1x0XHQgKiBvdXQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvciBub3IgcGxhY2VkIG9uIGJ5IGtleGVjXG4mIzQzO1x0XHQgKiBzZWdtZW50cywgbWlycm9yaW5nIHRoZSBtZW1yZXNlcnZlIGhhbmRsaW5nIGFib3ZlLiAgVGhpc1xuJiM0MztcdFx0ICogcnVucyBvbiBldmVyeSBib290LCBzbyBpdCBhbHNvIHByb3RlY3RzIHRoZSB0YWJsZSBpbiB0aGVcbiYjNDM7XHRcdCAqIG5leHQga2VybmVsIHVudGlsIGl0IHJlYWRzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZW1ibG9ja19yZXNlcnZlKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCpraG8pKTtcbiYjNDM7XG4mIzQzO1x0XHRraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XG4mIzQzO1x0XHRpZiAoa2hvKSB7XG4mIzQzO1x0XHRcdGlmIChraG8tXHUwMDNlZmR0X2FkZHIpXG4mIzQzO1x0XHRcdFx0a2hvX3BvcHVsYXRlKChwaHlzX2FkZHJfdClraG8tXHUwMDNlZmR0X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VmZHRfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgKHBoeXNfYWRkcl90KWtoby1cdTAwM2VzY3JhdGNoX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VzY3JhdGNoX3NpemUpO1xuJiM0MztcdFx0XHRlYXJseV9tZW11bm1hcChraG8sIHNpemVvZigqa2hvKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAocnRfcHJvcCAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4gXHRcdGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnRibDtcbiBcbkBAIC0xMTcxLDYgJiM0MzsxMjAzLDUyIEBAIHN0YXRpYyBpbnQgX19pbml0IGVmaV9tZW1yZXNlcnZlX3Jvb3RfaW5pdCh2b2lkKVxuIH1cbiBlYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE9cbiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmVmaV9raG9fdGFibGUgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX2tob190YWJsZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZWZpX2tob190YWJsZV9waHlzID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIGEgcGVyc2lzdGVudCBtYXBwaW5nIG9mIHRoZSB0YWJsZSwgdGhlIHNhbWUgd2F5XG4mIzQzO1x0ICogZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KCkga2VlcHMgdGhlIG1lbXJlc2VydmUgcm9vdCBtYXBwZWQ6XG4mIzQzO1x0ICogZWZpX2tob191cGRhdGUoKSBpcyBhbHNvIGNhbGxlZCBvbiB0aGUgY3Jhc2gga2V4ZWMgcGF0aCwgd2hlcmVcbiYjNDM7XHQgKiBtZW1yZW1hcCgpIGlzIG5vIGxvbmdlciBhbiBvcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZWZpX2tob190YWJsZSA9IG1lbXJlbWFwKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCplZmlfa2hvX3RhYmxlKSxcbiYjNDM7XHRcdFx0XHQgTUVNUkVNQVBfV0IpO1xuJiM0MztcdFdBUk5fT05fT05DRSghZWZpX2tob190YWJsZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9raG9fdGFibGVfaW5pdCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBVcGRhdGUgdGhlIEtITyBjb25maWcgdGFibGUgaW4gcGxhY2UgYmVmb3JlIGEga2V4ZWMsIHNvIHRoZSBuZXh0IGtlcm5lbFxuJiM0MzsgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcbiYjNDM7ICogdGhlIGNvbmZpZyB0YWJsZSBlbnRyeSB3YXMgaW5zdGFsbGVkIG9uY2UgYnkgdGhlIEVGSSBzdHViIGFuZCBpcyBpbmhlcml0ZWRcbiYjNDM7ICogYWNyb3NzIGtleGVjLCBzbyBvbmx5IHRoZSB0YWJsZSBjb250ZW50cyBhcmUgcmV3cml0dGVuIGhlcmUgLS0gdGhlIGNvbmZpZ1xuJiM0MzsgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cdTAwM2V0YWJsZXMgaXMgbmV2ZXIgc3dpdGNoZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSxcbiYjNDM7XHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobyA9IGVmaV9raG9fdGFibGU7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGtoby1cdTAwM2VmZHRfYWRkclx0XHQ9IGZkdF9hZGRyO1xuJiM0MztcdGtoby1cdTAwM2VmZHRfc2l6ZVx0XHQ9IGZkdF9zaXplO1xuJiM0MztcdGtoby1cdTAwM2VzY3JhdGNoX2FkZHJcdD0gc2NyYXRjaF9hZGRyO1xuJiM0MztcdGtoby1cdTAwM2VzY3JhdGNoX3NpemVcdD0gc2NyYXRjaF9zaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LRVhFQ1xuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTEwMCw2ICYjNDM7MTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKVxuIFx0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIG1lbXJlc2VydmUgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobztcbiYjNDM7XHRlZmlfZ3VpZF90IGtob190YWJsZV9ndWlkID0gTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQ7XG4mIzQzO1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0xPQURFUl9EQVRBLCBzaXplb2YoKmtobyksXG4mIzQzO1x0XHRcdCAgICAgKHZvaWQgKiopXHUwMDI2a2hvKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqa2hvID0gKHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEpe307XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSwgXHUwMDI2a2hvX3RhYmxlX2d1aWQsXG4mIzQzO1x0XHRcdCAgICAga2hvKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBLSE8gY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgZ2V0X3N1cHBvcnRlZF9ydF9zZXJ2aWNlcyh2b2lkKVxuIHtcbiBcdGNvbnN0IGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnJ0X3Byb3BfdGFibGU7XG5AQCAtMTgwLDYgJiM0MzsyMDMsOCBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbiBcbiYjNDM7XHRpbnN0YWxsX2tob190YWJsZSgpO1xuJiM0MztcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG4gXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBhYTE1ZmY4ODUzOWJkLi41NjRiM2NiZDVjY2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTQyMiw2ICYjNDM7NDIyLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4mIzQzOyNkZWZpbmUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSURcdFx0RUZJX0dVSUQoMHhjOTQxYjZjNywgMHg3YjNmLCAweDRhZjYsICAweDllLCAweDUwLCAweGZjLCAweGIzLCAweGE4LCAweDg2LCAweDhhLCAweDE3KVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtMTI3Myw2ICYjNDM7MTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuIFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLlxuJiM0MzsgKiBJdCBjYXJyaWVzIHRoZSBrZXhlYyBoYW5kb3ZlciAoS0hPKSBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IGtlcm5lbCB0byB0aGVcbiYjNDM7ICogbmV4dCBvbmU6IHRoZSBhZGRyZXNzZXMgb2YgdGhlIEtITyBzdGF0ZSBGRFQgYW5kIG9mIHRoZSBzY3JhdGNoIGFyZWEuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgdGhlIGhhbmRvdmVyIGNoYW5uZWwgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJXG4mIzQzOyAqIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSAoZS5nLiBMb29uZ0FyY2gpLCB3aGVyZSB0aGUgL2Nob3NlbiBsaW51eCxraG8tZmR0XG4mIzQzOyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90XG4mIzQzOyAqIGF2YWlsYWJsZS4gIFRoZSBFRkkgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSB0YWJsZSBvbmNlIGF0IGJvb3Q7XG4mIzQzOyAqIHRoZSBjdXJyZW50IGtlcm5lbCB1cGRhdGVzIGl0cyBjb250ZW50cyBiZWZvcmUgYSBrZXhlYywgYW5kIHRoZSBuZXh0XG4mIzQzOyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxheW91dCBpcyBhbiBBQkkgYmV0d2VlbiB0aGUgdHdvIGtlcm5lbHMgYW5kIGNhcnJpZXMgbm8gdmVyc2lvblxuJiM0MzsgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWRcbiYjNDM7ICogaXRzZWxmIGlzIHZlcnNpb25lZCBzZXBhcmF0ZWx5IGJ5IHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgS0hPIHN0YXRlXG4mIzQzOyAqIEZEVCwgd2hpY2gga2hvX3BvcHVsYXRlKCkgY2hlY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSB7XG4mIzQzO1x0dTY0IGZkdF9hZGRyO1xuJiM0MztcdHU2NCBmZHRfc2l6ZTtcbiYjNDM7XHR1NjQgc2NyYXRjaF9hZGRyO1xuJiM0MztcdHU2NCBzY3JhdGNoX3NpemU7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSxcbiYjNDM7XHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4mIzQzO1x0XHRcdFx0IHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqIFRoZSBMSU5VWF9FRklfTU9LX1ZBUklBQkxFX1RBQkxFX0dVSUQgY29uZmlnIHRhYmxlIGNhbiBiZSBwcm92aWRlZFxuICAqIHRvIHRoZSBrZXJuZWwgYnkgYW4gRUZJIGJvb3QgbG9hZGVyLiBUaGUgdGFibGUgY29udGFpbnMgYSBwYWNrZWRcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uNjE2NmNlNDIwM2QzYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0xMzgsNiAmIzQzOzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHtcbiBcdFx0XHRzdHJ1Y3QgcHRfcmVncyBmaXhlZF9yZWdzO1xuIFxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIGNyYXNoIGltYWdlIGNhcnJpZXMgbm8gS0hPIHN0YXRlOiBjbGVhciB0aGVcbiYjNDM7XHRcdFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXG4mIzQzO1x0XHRcdCAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcbiYjNDM7XG4gXHRcdFx0Y3Jhc2hfc2V0dXBfcmVncyhcdTAwMjZmaXhlZF9yZWdzLCByZWdzKTtcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi4xNDdmNWI1YjIzZDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTExNDYsNiAmIzQzOzExNDYsMTEgQEAgaW50IGtlcm5lbF9rZXhlYyh2b2lkKVxuIFx0XHRnb3RvIFVubG9jaztcbiBcdH1cbiBcbiYjNDM7XHQvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqL1xuJiM0MztcdGVycm9yID0ga2hvX3N5bmNfY2hhbm5lbChrZXhlY19pbWFnZSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBVbmxvY2s7XG4mIzQzO1xuIFx0aWYgKCFrZXhlY19pbWFnZS1cdTAwM2VwcmVzZXJ2ZV9jb250ZXh0KSB7XG4gXHRcdGVycm9yID0gbGl2ZXVwZGF0ZV9yZWJvb3QoKTtcbiBcdFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcbmluZGV4IDIyOGJiODhjMDE4YmMuLjRkNGMyMjkwZTg1YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcbkBAIC00Niw2ICYjNDM7NDYsNyBAQCBzdHJ1Y3Qga2V4ZWNfYnVmO1xuIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0aW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpO1xuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpO1xuJiM0MztpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0XHQgICAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbkBAIC01NCw1ICYjNDM7NTUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li5iNjAwOGMwMTUyNWQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY291bnRfemVyb3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2thc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuQEAgLTIwNjMsNiAmIzQzOzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU3luY2hyb25pemUgdGhlIGhhbmRvdmVyIHRyYW5zcG9ydCB3aXRoIHRoZSBpbWFnZSB0aGF0IGlzIGFib3V0IHRvIGJlXG4mIzQzOyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXG4mIzQzOyAqIHNlcGFyYXRlIGltYWdlcyBmb3IgYSBub3JtYWwgcmVib290IGFuZCBmb3IgY3Jhc2guICBXcml0ZSB0aGUgc3RhdGUgb2YgdGhlXG4mIzQzOyAqIHNlbGVjdGVkIGltYWdlIGltbWVkaWF0ZWx5IGJlZm9yZSBpdCBpcyBleGVjdXRlZCwgcmF0aGVyIHRoYW4gd2hpbGUgYVxuJiM0MzsgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXG4mIzQzOyAqIGNoYW5uZWwgcG9pbnRpbmcgYXQgdGhhdCBmYWlsZWQgaW1hZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXG4mIzQzOyAqIGFuIGltYWdlIGxvYWRlZCB3aGlsZSBLSE8gaXMgZGlzYWJsZWQgY2FycmllcyBubyBoYW5kb3ZlciBzdGF0ZS4gIENsZWFyIHRoZVxuJiM0MzsgKiBjaGFubmVsIGZvciB0aG9zZSBpbWFnZXMgc28gdGhlIG5leHQga2VybmVsIGJvb3RzIGNvbGQgaW5zdGVhZCBvZiByZXZpdmluZ1xuJiM0MzsgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcbiYjNDM7ICogYWZmZWN0IGEgY29sZCBib290LlxuJiM0MzsgKi9cbiYjNDM7aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKSB7XG4mIzQzO1x0XHRlZmlfa2hvX3VwZGF0ZSgwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbSxcbiYjNDM7XHRcdFx0ICAgICBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VidWZzeik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdFx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jIGIva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNcbmluZGV4IDBkMmEzNDJlZjQyMjguLjBkNTY4OTFiMmY0YzggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tob19ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiBcbiAvKlxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MztRRU1VX0VGST1cJiMzNDske1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XCYjMzQ7XG4mIzQzO1FFTVVfQ01EPVwmIzM0O3FlbXUtc3lzdGVtLWxvb25nYXJjaDY0IC1NIHZpcnQgLWNwdSBsYTQ2NCAtYmlvcyAkUUVNVV9FRklcJiMzNDtcbiYjNDM7UUVNVV9LQ09ORklHPVwmIzM0O1xuJiM0MztDT05GSUdfQUNQSV9TUENSX1RBQkxFPXlcbiYjNDM7Q09ORklHX1BDSV9IT1NUX0dFTkVSSUM9eVxuJiM0MztDT05GSUdfU0VSSUFMXzgyNTA9eVxuJiM0MztDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15XG4mIzQzO0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXlcbiYjNDM7XCYjMzQ7XG4mIzQzO0tFUk5FTF9JTUFHRT1cJiMzNDt2bWxpbnV4LmVmaVwmIzM0O1xuJiM0MztLRVJORUxfQ01ETElORT1cJiMzNDtjb25zb2xlPXR0eVMwIGVhcmx5Y29uXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbmluZGV4IDAwMTRiZDc2ZTg4ZGUuLmQwNWJhMDczNGIyNTkgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXG5AQCAtMjEsNyAmIzQzOzIxLDcgQEAgT3B0aW9uczpcbiBcdC1kKVx0cGF0aCB0byB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeVxuIFx0LWopXHRudW1iZXIgb2Ygam9icyBmb3IgY29tcGlsYXRpb24sIHNpbWlsYXIgdG8gLWogaW4gbWFrZVxuIFx0LXQpXHRydW4gdGVzdCBmb3IgdGFyZ2V0X2FyY2gsIHJlcXVpcmVzIENST1NTX0NPTVBJTEUgc2V0XG4tXHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCB4ODZfNjRcbiYjNDM7XHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XG4gXHQtaClcdGRpc3BsYXkgdGhpcyBoZWxwXG4gRU9GXG4gfVxuQEAgLTEyNiw2ICYjNDM7MTI2LDcgQEAgZnVuY3Rpb24gdGFyZ2V0X3RvX2FyY2goKSB7XG4gXG4gXHRjYXNlICR0YXJnZXQgaW5cbiBcdCAgICAgYWFyY2g2NCkgZWNobyBcJiMzNDthcm02NFwmIzM0OyA7O1xuJiM0MztcdCAgICAgbG9vbmdhcmNoNjQpIGVjaG8gXCYjMzQ7bG9vbmdhcmNoXCYjMzQ7IDs7XG4gXHQgICAgIHg4Nl82NCkgZWNobyBcJiMzNDt4ODZcJiMzNDsgOztcbiBcdCAgICAgKikgc2tpcCBcJiMzNDthcmNoaXRlY3R1cmUgJHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7XG4gXHRlc2FjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwppbmRleCBhMjFmNTFlNTgxNWU5Li41ZWFhNjU1NzhkNThlIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKQEAgLTY4NSw2ICYjNDM7Njg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDCiBjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFCiAJZGVmX2Jvb2wgNjRCSVQKIAomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSCiYjNDM7CWRlZl9ib29sIDY0QklUICZhbXA7JmFtcDsgRUZJX1NUVUIKJiM0MzsJc2VsZWN0IEVGSV9LSE8gaWYgS0VYRUNfSEFORE9WRVIKJiM0MzsKIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRQogCWRlZl9ib29sIDY0QklUCiAJZGVwZW5kcyBvbiBLRVhFQ19GSUxFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTMxNCw2ICYjNDM7MzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFCiAKIAkgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuCiAKJiM0Mztjb25maWcgRUZJX0tITwomIzQzOwlib29sCiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBFRklfR0VORVJJQ19TVFVCICZhbXA7JmFtcDsgS0VYRUNfSEFORE9WRVIKJiM0MzsJaGVscAomIzQzOwkgIENhcnJ5IHRoZSBLSE8gc3RhdGUgKHRoZSBLSE8gc3RhdGUgRkRUIGFuZCB0aGUgc2NyYXRjaCBhcmVhKSBmcm9tCiYjNDM7CSAgb25lIGtlcm5lbCB0byB0aGUgbmV4dCBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlCiYjNDM7CSAgZW50cnkgdW5kZXIgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQKJiM0MzsJICBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSAoZS5nLiBMb29uZ0FyY2gpLgomIzQzOwomIzQzOwkgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFQKJiM0MzsJICBwYXRoIGluc3RlYWQgYW5kIGRvIG5vdCBzZWxlY3QgdGhpcy4KJiM0MzsKIGVuZG1lbnUKIAogY29uZmlnIFVFRklfQ1BFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCAwMzI3YTM5ZDMxZmE1Li42MzgwY2ZhYjE0OTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0cmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmFuZG9tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CkBAIC02Miw2ICYjNDM7NjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtZW1fcmVzZXJ2ZSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJ0X3Byb3AgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwomIzQzOyNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcmltYXJ5X2Rpc3BsYXlfdGFibGU7CiAKQEAgLTYyOSw2ICYjNDM7NjMzLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKIAl7RUZJX1RDRzJfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnRwbV9maW5hbF9sb2csCSYjMzQ7VFBNRmluYWxMb2cmIzM0Owl9LAogCXtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnRwbV9maW5hbF9sb2csCSYjMzQ7Q0NGaW5hbExvZyYjMzQ7CX0sCiAJe0xJTlVYX0VGSV9NRU1SRVNFUlZFX1RBQkxFX0dVSUQsCSZhbXA7bWVtX3Jlc2VydmUsCQkmIzM0O01FTVJFU0VSVkUmIzM0Owl9LAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzOwl7TElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsCQkmYW1wO2VmaV9raG9fdGFibGVfcGh5cywJJiMzNDtLSE8mIzM0OwkJfSwKJiM0MzsjZW5kaWYKIAl7TElOVVhfRUZJX0lOSVRSRF9NRURJQV9HVUlELAkJJmFtcDtpbml0cmQsCQkmIzM0O0lOSVRSRCYjMzQ7CX0sCiAJe0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsCQkmYW1wO3J0X3Byb3AsCQkmIzM0O1JUUFJPUCYjMzQ7CX0sCiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HCkBAIC04MDYsNiAmIzQzOzgxMywzMSBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzOwlpZiAoZWZpX2tob190YWJsZV9waHlzICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHsKJiM0MzsJCXN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXNlcnZlIHRoZSBzdHViLWFsbG9jYXRlZCB0YWJsZSBzbyBpdCBpcyBuZWl0aGVyIGhhbmRlZAomIzQzOwkJICogb3V0IGJ5IHRoZSBidWRkeSBhbGxvY2F0b3Igbm9yIHBsYWNlZCBvbiBieSBrZXhlYwomIzQzOwkJICogc2VnbWVudHMsIG1pcnJvcmluZyB0aGUgbWVtcmVzZXJ2ZSBoYW5kbGluZyBhYm92ZS4gIFRoaXMKJiM0MzsJCSAqIHJ1bnMgb24gZXZlcnkgYm9vdCwgc28gaXQgYWxzbyBwcm90ZWN0cyB0aGUgdGFibGUgaW4gdGhlCiYjNDM7CQkgKiBuZXh0IGtlcm5lbCB1bnRpbCBpdCByZWFkcyBpdC4KJiM0MzsJCSAqLwomIzQzOwkJbWVtYmxvY2tfcmVzZXJ2ZShlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7CiYjNDM7CiYjNDM7CQlraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7CiYjNDM7CQlpZiAoa2hvKSB7CiYjNDM7CQkJaWYgKGtoby0mZ3Q7ZmR0X2FkZHIpCiYjNDM7CQkJCWtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLSZndDtmZHRfYWRkciwKJiM0MzsJCQkJCSAgICAga2hvLSZndDtmZHRfc2l6ZSwKJiM0MzsJCQkJCSAgICAgKHBoeXNfYWRkcl90KWtoby0mZ3Q7c2NyYXRjaF9hZGRyLAomIzQzOwkJCQkJICAgICBraG8tJmd0O3NjcmF0Y2hfc2l6ZSk7CiYjNDM7CQkJZWFybHlfbWVtdW5tYXAoa2hvLCBzaXplb2YoKmtobykpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKQEAgLTExNzEsNiAmIzQzOzEyMDMsNTIgQEAgc3RhdGljIGludCBfX2luaXQgZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KHZvaWQpCiB9CiBlYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmVmaV9raG9fdGFibGUgX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9raG9fdGFibGVfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaV9raG9fdGFibGVfcGh5cyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgYSBwZXJzaXN0ZW50IG1hcHBpbmcgb2YgdGhlIHRhYmxlLCB0aGUgc2FtZSB3YXkKJiM0MzsJICogZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KCkga2VlcHMgdGhlIG1lbXJlc2VydmUgcm9vdCBtYXBwZWQ6CiYjNDM7CSAqIGVmaV9raG9fdXBkYXRlKCkgaXMgYWxzbyBjYWxsZWQgb24gdGhlIGNyYXNoIGtleGVjIHBhdGgsIHdoZXJlCiYjNDM7CSAqIG1lbXJlbWFwKCkgaXMgbm8gbG9uZ2VyIGFuIG9wdGlvbi4KJiM0MzsJICovCiYjNDM7CWVmaV9raG9fdGFibGUgPSBtZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqZWZpX2tob190YWJsZSksCiYjNDM7CQkJCSBNRU1SRU1BUF9XQik7CiYjNDM7CVdBUk5fT05fT05DRSghZWZpX2tob190YWJsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztlYXJseV9pbml0Y2FsbChlZmlfa2hvX3RhYmxlX2luaXQpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVXBkYXRlIHRoZSBLSE8gY29uZmlnIHRhYmxlIGluIHBsYWNlIGJlZm9yZSBhIGtleGVjLCBzbyB0aGUgbmV4dCBrZXJuZWwKJiM0MzsgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKToKJiM0MzsgKiB0aGUgY29uZmlnIHRhYmxlIGVudHJ5IHdhcyBpbnN0YWxsZWQgb25jZSBieSB0aGUgRUZJIHN0dWIgYW5kIGlzIGluaGVyaXRlZAomIzQzOyAqIGFjcm9zcyBrZXhlYywgc28gb25seSB0aGUgdGFibGUgY29udGVudHMgYXJlIHJld3JpdHRlbiBoZXJlIC0tIHRoZSBjb25maWcKJiM0MzsgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC0mZ3Q7dGFibGVzIGlzIG5ldmVyIHN3aXRjaGVkLgomIzQzOyAqLwomIzQzO2ludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLAomIzQzOwkJICAgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvID0gZWZpX2tob190YWJsZTsKJiM0MzsKJiM0MzsJaWYgKCFraG8pCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJa2hvLSZndDtmZHRfYWRkcgkJPSBmZHRfYWRkcjsKJiM0MzsJa2hvLSZndDtmZHRfc2l6ZQkJPSBmZHRfc2l6ZTsKJiM0MzsJa2hvLSZndDtzY3JhdGNoX2FkZHIJPSBzY3JhdGNoX2FkZHI7CiYjNDM7CWtoby0mZ3Q7c2NyYXRjaF9zaXplCT0gc2NyYXRjaF9zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0tFWEVDCiBzdGF0aWMgaW50IHVwZGF0ZV9lZmlfcmFuZG9tX3NlZWQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTEwMCw2ICYjNDM7MTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKQogCQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGluc3RhbGwgbWVtcmVzZXJ2ZSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE8KJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvOwomIzQzOwllZmlfZ3VpZF90IGtob190YWJsZV9ndWlkID0gTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQ7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLAomIzQzOwkJCSAgICAgKHZvaWQgKiopJmFtcDtraG8pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIEtITyBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9OwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsICZhbXA7a2hvX3RhYmxlX2d1aWQsCiYjNDM7CQkJICAgICBraG8pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKQomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIEtITyBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHUzMiBnZXRfc3VwcG9ydGVkX3J0X3NlcnZpY2VzKHZvaWQpCiB7CiAJY29uc3QgZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqcnRfcHJvcF90YWJsZTsKQEAgLTE4MCw2ICYjNDM7MjAzLDggQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiAKJiM0MzsJaW5zdGFsbF9raG9fdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCiAJZnJlZV9wcmltYXJ5X2Rpc3BsYXkoZHB5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGFhMTVmZjg4NTM5YmQuLjU2NGIzY2JkNWNjYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTsKICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRAkJRUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KQogI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRAkJRUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KQogI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRAlFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpCiYjNDM7I2RlZmluZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRAkJRUZJX0dVSUQoMHhjOTQxYjZjNywgMHg3YjNmLCAweDRhZjYsICAweDllLCAweDUwLCAweGZjLCAweGIzLCAweGE4LCAweDg2LCAweDhhLCAweDE3KQogCiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSUQJCUVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZikKIApAQCAtMTI3Myw2ICYjNDM7MTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogCiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE8KJiM0MzsvKgomIzQzOyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLgomIzQzOyAqIEl0IGNhcnJpZXMgdGhlIGtleGVjIGhhbmRvdmVyIChLSE8pIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQga2VybmVsIHRvIHRoZQomIzQzOyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyB0aGUgaGFuZG92ZXIgY2hhbm5lbCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkKJiM0MzsgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdAomIzQzOyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90CiYjNDM7ICogYXZhaWxhYmxlLiAgVGhlIEVGSSBzdHViIGFsbG9jYXRlcyBhbmQgaW5zdGFsbHMgdGhlIHRhYmxlIG9uY2UgYXQgYm9vdDsKJiM0MzsgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dAomIzQzOyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb24KJiM0MzsgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWQKJiM0MzsgKiBpdHNlbGYgaXMgdmVyc2lvbmVkIHNlcGFyYXRlbHkgYnkgdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBLSE8gc3RhdGUKJiM0MzsgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhIHsKJiM0MzsJdTY0IGZkdF9hZGRyOwomIzQzOwl1NjQgZmR0X3NpemU7CiYjNDM7CXU2NCBzY3JhdGNoX2FkZHI7CiYjNDM7CXU2NCBzY3JhdGNoX3NpemU7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSwKJiM0MzsJCSAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLAomIzQzOwkJCQkgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIFRoZSBMSU5VWF9FRklfTU9LX1ZBUklBQkxFX1RBQkxFX0dVSUQgY29uZmlnIHRhYmxlIGNhbiBiZSBwcm92aWRlZAogICogdG8gdGhlIGtlcm5lbCBieSBhbiBFRkkgYm9vdCBsb2FkZXIuIFRoZSB0YWJsZSBjb250YWlucyBhIHBhY2tlZApkaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmMKaW5kZXggMmIzNmFhOWZhZGUwNi4uNjE2NmNlNDIwM2QzYiAxMDA2NDQKLS0tIGEva2VybmVsL2NyYXNoX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3Jhc2hfY29yZS5jCkBAIC0xMzgsNiAmIzQzOzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHsKIAkJCXN0cnVjdCBwdF9yZWdzIGZpeGVkX3JlZ3M7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgY3Jhc2ggaW1hZ2UgY2FycmllcyBubyBLSE8gc3RhdGU6IGNsZWFyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzbyB0aGUgY3Jhc2gga2VybmVsIGJvb3RzIGNvbGQgaW5zdGVhZAomIzQzOwkJCSAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuCiYjNDM7CQkJICovCiYjNDM7CQkJKHZvaWQpa2hvX3N5bmNfY2hhbm5lbChrZXhlY19jcmFzaF9pbWFnZSk7CiYjNDM7CiAJCQljcmFzaF9zZXR1cF9yZWdzKCZhbXA7Zml4ZWRfcmVncywgcmVncyk7CiAJCQljcmFzaF9zYXZlX3ZtY29yZWluZm8oKTsKIAkJCW1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oJmFtcDtmaXhlZF9yZWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jCmluZGV4IGRjNzcwYjlhNmQwNTMuLjE0N2Y1YjViMjNkNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuYwpAQCAtMTE0Niw2ICYjNDM7MTE0NiwxMSBAQCBpbnQga2VybmVsX2tleGVjKHZvaWQpCiAJCWdvdG8gVW5sb2NrOwogCX0KIAomIzQzOwkvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqLwomIzQzOwllcnJvciA9IGtob19zeW5jX2NoYW5uZWwoa2V4ZWNfaW1hZ2UpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIFVubG9jazsKJiM0MzsKIAlpZiAoIWtleGVjX2ltYWdlLSZndDtwcmVzZXJ2ZV9jb250ZXh0KSB7CiAJCWVycm9yID0gbGl2ZXVwZGF0ZV9yZWJvb3QoKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ludGVybmFsLmggYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaAppbmRleCAyMjhiYjg4YzAxOGJjLi40ZDRjMjI5MGU4NWM3IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaApAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgc3RydWN0IGtleGVjX2J1ZjsKIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsCiAJCQlpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSk7CiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKJiM0MztpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCQkJCSAgICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQpAQCAtNTQsNSAmIzQzOzU1LDcgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogfQogCiBzdGF0aWMgaW5saW5lIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovCiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggN2M0ZDg2ZGFmODZkNS4uYjYwMDhjMDE1MjVkOSAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY291bnRfemVyb3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXhlYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CkBAIC0yMDYzLDYgJiM0MzsyMDY0LDM4IEBAIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZQomIzQzOyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzCiYjNDM7ICogc2VwYXJhdGUgaW1hZ2VzIGZvciBhIG5vcm1hbCByZWJvb3QgYW5kIGZvciBjcmFzaC4gIFdyaXRlIHRoZSBzdGF0ZSBvZiB0aGUKJiM0MzsgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGEKJiM0MzsgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlCiYjNDM7ICogY2hhbm5lbCBwb2ludGluZyBhdCB0aGF0IGZhaWxlZCBpbWFnZS4KJiM0MzsgKgomIzQzOyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yCiYjNDM7ICogYW4gaW1hZ2UgbG9hZGVkIHdoaWxlIEtITyBpcyBkaXNhYmxlZCBjYXJyaWVzIG5vIGhhbmRvdmVyIHN0YXRlLiAgQ2xlYXIgdGhlCiYjNDM7ICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmcKJiM0MzsgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3QKJiM0MzsgKiBhZmZlY3QgYSBjb2xkIGJvb3QuCiYjNDM7ICovCiYjNDM7aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gpIHsKJiM0MzsJCWVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtJmd0O2toby5mZHQsIFBBR0VfU0laRSwKJiM0MzsJCQkgICAgIGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7bWVtLAomIzQzOwkJCSAgICAgaW1hZ2UtJmd0O2toby5zY3JhdGNoLSZndDtidWZzeik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsCiAJCQkgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suYyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCmluZGV4IDBkMmEzNDJlZjQyMjguLjBkNTY4OTFiMmY0YzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCkBAIC0yNSw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvYmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9raG9fYmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAKIC8qCiAgKiBTYWZlZ3VhcmQgbGltaXQgZm9yIHRoZSBudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBibG9ja3MuIFRoaXMgaXMgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjM2MTUzYjAzYzRlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vbG9vbmdhcmNoLmNvbmYKQEAgLTAsMCAmIzQzOzEsMTEgQEAKJiM0MztRRU1VX0VGST0mIzM0OyR7UUVNVV9FRkk6LS91c3Ivc2hhcmUvZWRrMi9sb29uZ2FyY2g2NC9RRU1VX0VGSS5mZH0mIzM0OwomIzQzO1FFTVVfQ01EPSYjMzQ7cWVtdS1zeXN0ZW0tbG9vbmdhcmNoNjQgLU0gdmlydCAtY3B1IGxhNDY0IC1iaW9zICRRRU1VX0VGSSYjMzQ7CiYjNDM7UUVNVV9LQ09ORklHPSYjMzQ7CiYjNDM7Q09ORklHX0FDUElfU1BDUl9UQUJMRT15CiYjNDM7Q09ORklHX1BDSV9IT1NUX0dFTkVSSUM9eQomIzQzO0NPTkZJR19TRVJJQUxfODI1MD15CiYjNDM7Q09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQomIzQzO0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKJiM0MzsmIzM0OwomIzQzO0tFUk5FTF9JTUFHRT0mIzM0O3ZtbGludXguZWZpJiMzNDsKJiM0MztLRVJORUxfQ01ETElORT0mIzM0O2NvbnNvbGU9dHR5UzAgZWFybHljb24mIzM0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2gKaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoCkBAIC0yMSw3ICYjNDM7MjEsNyBAQCBPcHRpb25zOgogCS1kKQlwYXRoIHRvIHRoZSBrZXJuZWwgYnVpbGQgZGlyZWN0b3J5CiAJLWopCW51bWJlciBvZiBqb2JzIGZvciBjb21waWxhdGlvbiwgc2ltaWxhciB0byAtaiBpbiBtYWtlCiAJLXQpCXJ1biB0ZXN0IGZvciB0YXJnZXRfYXJjaCwgcmVxdWlyZXMgQ1JPU1NfQ09NUElMRSBzZXQKLQkJc3VwcG9ydGVkIHRhcmdldHM6IGFhcmNoNjQsIHg4Nl82NAomIzQzOwkJc3VwcG9ydGVkIHRhcmdldHM6IGFhcmNoNjQsIGxvb25nYXJjaDY0LCB4ODZfNjQKIAktaCkJZGlzcGxheSB0aGlzIGhlbHAKIEVPRgogfQpAQCAtMTI2LDYgJiM0MzsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHsKIAogCWNhc2UgJHRhcmdldCBpbgogCSAgICAgYWFyY2g2NCkgZWNobyAmIzM0O2FybTY0JiMzNDsgOzsKJiM0MzsJICAgICBsb29uZ2FyY2g2NCkgZWNobyAmIzM0O2xvb25nYXJjaCYjMzQ7IDs7CiAJICAgICB4ODZfNjQpIGVjaG8gJiMzNDt4ODYmIzM0OyA7OwogCSAgICAgKikgc2tpcCAmIzM0O2FyY2hpdGVjdHVyZSAkdGFyZ2V0IGlzIG5vdCBzdXBwb3J0ZWQmIzM0OwogCWVzYWMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGluIHBsYXkgaXMgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCYjMzk7bGwgYWZmZWN0IHRoZSBzeXN0ZW0uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSByZWFsbHkgY2xvc2UgbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBkaWZmIGl0c2VsZiDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBhcmVhczogYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvKmAsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBga2VybmVsL2tleGVjXypgIGZpbGVzLCBhbmQgc29tZSB0ZXN0LXJlbGF0ZWQgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9gLiBUaGF0JiMzOTtzIGEgcHJldHR5IGJyb2FkIHNjb3BlLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIHByZXR0eSBpbXBvcnRhbnQuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgYEtFWEVDX0hBTkRPVkVSYCwgYEVGSV9LSE9gLCBhbmQgcmVsYXRlZCBzZXR0aW5ncyBiZWhhdmUuIEFyZSB0aGV5IGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHF1aXJrcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSBnb2luZyB0byBiaXRlIG1lIGxhdGVyPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB4ODZfNjQgYXNwZWN0cywgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgd29ya2luZyBjb3JyZWN0bHkuIFRvIGRpZyBpbnRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEtFWEVDX0hBTkRPVkVSYCBpbiB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIGhvdyBpdCYjMzk7cyB1c2VkIGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoS0VYRUNfSEFORE9WRVJ8QVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUnxFRklfS0hPKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTcwOD1jb25maWcgQVJDSF9ERUZBVUxUX0tFWEVDX0lNQUdFX1ZFUklGWV9TSUdcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTcxMC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzExOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXG5hcmNoL2FybTY0L0tjb25maWctMTcxMi1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTY4NT1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODctXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjY4ODpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXHRkZWZfYm9vbCA2NEJJVCBcdTAwMjZcdTAwMjYgRUZJX1NUVUJcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE5Nzg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUFxuLS1cbmFyY2gveDg2L0tjb25maWctMTk4MC1cbmFyY2gveDg2L0tjb25maWc6MTk4MTpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC94ODYvS2NvbmZpZy0xOTgyLVx0ZGVmX2Jvb2wgWDg2XzY0XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0yOTY9Y29uZmlnIEVGSV9TQkFUX0ZJTEVcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxNi1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MzE3OmNvbmZpZyBFRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxOC1cdGJvb2xcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnPTM9bWVudSBcJiMzNDtMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcJiMzNDtcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNC1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6NTpjb25maWcgS0VYRUNfSEFORE9WRVJcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXJcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE3LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTktXHRib29sIFwmIzM0O0VuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoyNzpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdGU1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXIgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM3LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzozODpjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgS0VYRUMgSGFuZG92ZXIgYW5kIEVGSV9LSE8gb24geDg2XzY0KioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgS0VYRUNfSEFORE9WRVJgIGFuZCBgRUZJX0tIT2Agc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gZ3Jhc3AgdGhlIHg4Nl82NC1zcGVjaWZpYyBpbXBsaWNhdGlvbnMuIFRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsaXZlIHVwZGF0ZSBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhvc2Ugb3B0aW9ucywgc28gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBga2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ2AuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgbWFuYWdlZCBhbmQgd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGVtIG9uIHg4Nl82NC4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlcyB3aWxsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhcmNoaXRlY3R1cmFsIHF1aXJrcyBpbnZvbHZlZCBpbiBlaXRoZXIgaGFuZG92ZXIgbWVjaGFuaXNtcyB3aGVuIGVuYWJsZWQgb24gYW4geDg2XF82NCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RUZJX0tIT3xLRVhFQ19IQU5ET1ZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTk3OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTgwLVxuYXJjaC94ODYvS2NvbmZpZzoxOTgxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODItXHRkZWZfYm9vbCBYODZfNjRcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz03NzA9c3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzYtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3Nzc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0yNzQ9c3RhdGljIHZvaWQgc2V0dXBfa2hvKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgwLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjI4MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0zMDE9c2V0dXBfYm9vdF9wYXJhbWV0ZXJzKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkwLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjM5MTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTItXHRcdC8qIFNldHVwIHNwYWNlIHRvIHN0b3JlIHByZXNlcnZhdGlvbiBtZXRhZGF0YSAqL1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz00NzU9c3RhdGljIHZvaWQgKmJ6SW1hZ2U2NF9sb2FkKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBjaGFyICprZXJuZWwsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4MS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzo1ODI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4My1cdFx0a2J1Zi5idWZzeiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSAmIzQzO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTQ1Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX2tobyh1NjQgcGh5c19hZGRyLCB1MzIgZGF0YV9sZW4pXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDYyLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6NDYzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2NDpcdFx0cHJfd2FybihcJiMzNDtQYXNzZWQgS0hPIGRhdGEsIGJ1dCBDT05GSUdfS0VYRUNfSEFORE9WRVIgbm90IHNldC4gSWdub3JpbmcuXFxuXCYjMzQ7KTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2NS1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEVGSV9LSE8gQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyB0byBzZWUgaWYgYEVGSV9LSE9gIGlzIGRpcmVjdGx5IGVuYWJsZWQgdGhlcmUuIE5vcGUsIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCwgZGVmYXVsdC1vbiBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpdHNlbGYuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBpcyBzZWxlY3RpbmcgYEVGSV9LSE9gIGZyb20gKmFueXdoZXJlKiBpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIGl0IGJlaW5nIHB1bGxlZCBpbiBmcm9tPyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QuKkVGSV9LSE98RUZJX0tITyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9LY29uZmlnPTY4OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXHRkZWZfYm9vbCA2NEJJVCBcdTAwMjZcdTAwMjYgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NjkwOlx0c2VsZWN0IEVGSV9LSE8gaWYgS0VYRUNfSEFORE9WRVJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNjkxLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9Mjk2PWNvbmZpZyBFRklfU0JBVF9GSUxFXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTYtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjMxNzpjb25maWcgRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTgtXHRib29sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjY6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy02Ny1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgZWZpX2tob190YWJsZV9waHlzID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02MjQ9c3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy02MzUtXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcJiMzNDtNRU1SRVNFUlZFXCYjMzQ7XHR9LFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjM2OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjM3LVx0e0xJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELFx0XHRcdTAwMjZlZmlfa2hvX3RhYmxlX3BoeXMsXHRcJiMzNDtLSE9cJiMzNDtcdFx0fSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz03MTY9aW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE1LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6ODE2OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE3LVx0aWYgKGVmaV9raG9fdGFibGVfcGh5cyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9MTIwND1lYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTIwNS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjEyMDY6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMjA3LXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICplZmlfa2hvX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM9MTAzPXN0YXRpYyB2b2lkIGluc3RhbGxfa2hvX3RhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA0LXtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYzoxMDU6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA2LVx0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xuLS1cbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT12b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzYtXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyNzc6I2lmZGVmIENPTkZJR19FRklfS0hPXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzgtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2V4ZWMgSGFuZG92ZXIgUGF0Y2ggZm9yIGFtZDY0IEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgRUZJX0tIT2AsIGFuZCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgRUZJX0tIT2AgaXMgYSB2ZXJ5IHNwZWNpZmljIG9wdGlvbiwgc2VsZWN0ZWQgb25seSBpZiBgRUZJX1NUVUJgLCBgRUZJX0dFTkVSSUNfU1RVQmAsIGFuZCBgS0VYRUNfSEFORE9WRVJgIGFyZSBlbmFibGVkLCB3aXRoIGZ1cnRoZXIgY29uc3RyYWludHMgZnJvbSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZS4gVGhlIGtleSBoZXJlIGlzIGl0cyBsYWNrIG9mIGEgZGlyZWN0IHByb21wdC4gSXQmIzM5O3MgKm9ubHkqIHNlbGVjdGFibGUgYnkgb3RoZXIgb3B0aW9ucy4KCk15IGludmVzdGlnYXRpb24gbGVkIG1lIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCwgd2hpY2ggZGVmaW5lcyBgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUmAgYW5kICpzZWxlY3RzKiBgRUZJX0tIT2AgKmlmKiBgS0VYRUNfSEFORE9WRVJgIGlzIGFsc28gc2VsZWN0ZWQuIEJpbmdvISBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgdmVyeSB0YXJnZXRlZCB1c2UgY2FzZSBmb3IgYXJjaGl0ZWN0dXJlcyBib290aW5nIHZpYSBFRkkgKndpdGhvdXQqIGEgZGV2aWNlIHRyZWUgKEZEVCksIGFzIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBoZWxwIHRleHQuCgpJIHByb2NlZWRlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBhbGwgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllczoKCjEuICBNb2RpZmllZCBgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ2AKMi4gIEFkZGVkIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCBhbmQgYGNvbmZpZyBFRklfS0hPYAozLiAgQ2hhbmdlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNgLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgZWZpX2tob190YWJsZV9waHlzYCwgdGFibGUgZW50cmllcywgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gIGJsb2NrLgo0LiAgVXBkYXRlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jYCwgc3BlY2lmaWNhbGx5IGBpbnN0YWxsX2tob190YWJsZWAsIGFsc28gcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gLgo1LiAgTW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9lZmkuaGAgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhYCBhbmQgYSBkZWNsYXJhdGlvbi9zdHViIGZvciBgZWZpX2tob191cGRhdGVgCjYuICBVcGRhdGVzIGluIGBrZXJuZWwvY3Jhc2hfY29yZS5jYCBhbmQgYGtlcm5lbC9rZXhlY19jb3JlLmNgIGluY2x1ZGluZyBjYWxscyB0byBga2hvX3N5bmNfY2hhbm5lbGAsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBoYW5kb3Zlci4KNy4gIFRoZSBhZGRpdGlvbiBvZiBga2hvX3N5bmNfY2hhbm5lbGAgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgd2hpY2ggY2FsbHMgYGVmaV9raG9fdXBkYXRlYC4KOC4gIERlY2xhcmF0aW9uIG9mIGBraG9fc3luY19jaGFubmVsKClgIC8gc3R1YiB3aGVuIGAhQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpbiBga2VybmVsL2tleGVjX2ludGVybmFsLmhgCjkuICBBZGRpdGlvbiBvZiBgI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7YCBpbiBga2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNgCjEwLiBTZWxmdGVzdC9zY3JpcHQgY2hhbmdlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvLy4uLmAKCkkgbmVlZGVkIHRvIGRldGVybWluZSBpZiAqYW55KiBvZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFtZDY0LiBJIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfRUZJX0tIT2AgY2FuICoqbmV2ZXIqKiBiZSBlbmFibGVkIG9uIGFtZDY0LCBiZWNhdXNlIExvb25nQXJjaCYjMzk7cyBLY29uZmlnIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGNhbiBiZSBzZWxlY3RlZC4gSSB0aGVuIGNoZWNrZWQgYGdyZXBwZXJgIGFuZCBjb25maXJtZWQgbm90aGluZyBlbHNlIGluIHRoZSBrZXJuZWwgdHJlZSBzZWxlY3RlZCBvciBtZW50aW9uZWQgYENPTkZJR19FRklfS0hPYC4gVGhpcyBpcyBjcml0aWNhbC4gT24gYW1kNjQsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCBhY3RpdmF0ZWQuCgpJIGRyaWxsZWQgZG93biBmdXJ0aGVyLCBleGFtaW5pbmcgdGhlIGJlaGF2aW9yIG9mIGBraG9fc3luY19jaGFubmVsYCBvbiBhbWQ2NC4gSSBzZWUgdGhhdCBldmVuIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgICppcyogZW5hYmxlZCBvbiBhbWQ2NCwgYGtob19zeW5jX2NoYW5uZWxgIGNhbGxzIGBlZmlfa2hvX3VwZGF0ZSgpYC4gSG93ZXZlciwgc2luY2UgYENPTkZJR19FRklfS0hPYCBpcyAqbm90KiBkZWZpbmVkIG9uIGFtZDY0LCBgZWZpX2tob191cGRhdGUoKWAgaXMganVzdCBhbiAqaW5saW5lKiBmdW5jdGlvbiB0aGF0IHJldHVybnMgMC4gU28gdGhlIGZ1bmN0aW9uIGNhbGwgYmVjb21lcyBhIG5vLW9wLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBga2hvX3N5bmNfY2hhbm5lbGAuIEluIHN1bW1hcnksIGV2ZW4gd2l0aCBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBlbmFibGVkLCBLSE8gb24gYW1kNjQgYm9pbHMgZG93biB0byBhIHRyaXZpYWwgbm8tb3AuCgpUaGVuIEkgY29uc2lkZXJlZCBvdGhlciB3YXlzIGtleGVjIGhhbmRvdmVyIHdvcmtzLCBlLmcuIG9uIHg4Niwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCB1c2VzIGBzZXR1cF9kYXRhYCAoc3BlY2lmaWNhbGx5IGBTRVRVUF9LSE9fTUVNYCksIGFuZCBub3QgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVzLgoKTm93LCBsZXQmIzM5O3MgY29ubmVjdCBhbGwgdGhlIGRvdHMgYW5kIHNlZSBpZiB0aGUgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZzoKKiAgIFRoZSBmdW5kYW1lbnRhbCBsb2dpYyBmb3IgRUZJLWJhc2VkIEtITyB0YWJsZSBoYW5kbGluZyBpcyBlbnRpcmVseSBnYXRlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC4gVGhpcyBndWFyZCBpcyAqb25seSogZW5hYmxlZCBmb3IgTG9vbmdBcmNoLgoqICAgVGhlIGZ1bmN0aW9ucyBhZGRlZCBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvYCBhcmUgKm5vdCogY29tcGlsZWQgZm9yIGFtZDY0LgoqICAgVGhlIGluY2x1c2lvbiBvZiBgI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7YCBpcyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZSBhbmQsIHRodXMsIGlycmVsZXZhbnQgdG8gZnV6emluZy4KKiAgIFRoZSB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4KKiAgYGtob19zeW5jX2NoYW5uZWxgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDYwOlx0XHRpZiAoZXJyKVxuMjA2MTpcdFx0XHRyZXR1cm4gZXJyO1xuMjA2MjpcdFx0aW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2ggPSBcdTAwMjZpbWFnZS1cdTAwM2VzZWdtZW50W2ltYWdlLVx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XG4yMDYzOlx0XG4yMDY0Olx0XHRyZXR1cm4gMDtcbjIwNjU6XHR9XG4yMDY2Olx0XG4yMDY3Olx0LypcbjIwNjg6XHQgKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIHRoYXQgaXMgYWJvdXQgdG8gYmVcbjIwNjk6XHQgKiBleGVjdXRlZC4gIFRoZSBFRkkgY29uZmlnIHRhYmxlIGNoYW5uZWwgaXMgZ2xvYmFsLCB3aGlsZSBrZXhlYyBrZWVwc1xuMjA3MDpcdCAqIHNlcGFyYXRlIGltYWdlcyBmb3IgYSBub3JtYWwgcmVib290IGFuZCBmb3IgY3Jhc2guICBXcml0ZSB0aGUgc3RhdGUgb2YgdGhlXG4yMDcxOlx0ICogc2VsZWN0ZWQgaW1hZ2UgaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGV4ZWN1dGVkLCByYXRoZXIgdGhhbiB3aGlsZSBhXG4yMDcyOlx0ICogY2FuZGlkYXRlIGltYWdlIGlzIGJlaW5nIGxvYWRlZCwgc28gYSBmYWlsZWQgcmVwbGFjZW1lbnQgY2Fubm90IGxlYXZlIHRoZVxuMjA3MzpcdCAqIGNoYW5uZWwgcG9pbnRpbmcgYXQgdGhhdCBmYWlsZWQgaW1hZ2UuXG4yMDc0Olx0ICpcbjIwNzU6XHQgKiBBbiBpbWFnZSBsb2FkZWQgdGhyb3VnaCB0aGUgbGVnYWN5IGtleGVjX2xvYWQoKSBzeXNjYWxsLCBhIGNyYXNoIGltYWdlLCBvclxuMjA3NjpcdCAqIGFuIGltYWdlIGxvYWRlZCB3aGlsZSBLSE8gaXMgZGlzYWJsZWQgY2FycmllcyBubyBoYW5kb3ZlciBzdGF0ZS4gIENsZWFyIHRoZVxuMjA3NzpcdCAqIGNoYW5uZWwgZm9yIHRob3NlIGltYWdlcyBzbyB0aGUgbmV4dCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkIG9mIHJldml2aW5nXG4yMDc4Olx0ICogZnJvbSBzdGFsZSBzdGF0ZS4gIENsZWFyaW5nIGlzIGJlc3QtZWZmb3J0IGJlY2F1c2UgYW4gYWJzZW50IGNoYW5uZWwgY2Fubm90XG4yMDc5Olx0ICogYWZmZWN0IGEgY29sZCBib290LlxuMjA4MDpcdCAqL1xuMjA4MTpcdGludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuMjA4MjpcdHtcbjIwODM6XHRcdGludCBlcnI7XG4yMDg0Olx0XG4yMDg1Olx0XHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKSB7XG4yMDg2Olx0XHRcdGVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApO1xuMjA4NzpcdFx0XHRyZXR1cm4gMDtcbjIwODg6XHRcdH1cbjIwODk6XHRcbjIwOTA6XHRcdGVyciA9IGVmaV9raG9fdXBkYXRlKGltYWdlLVx1MDAzZWtoby5mZHQsIFBBR0VfU0laRSxcbjIwOTE6XHRcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbSxcbjIwOTI6XHRcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6KTtcbjIwOTM6XHRcdGlmIChlcnIpXG4yMDk0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxcblwmIzM0OywgZXJyKTtcbjIwOTU6XHRcbjIwOTY6XHRcdHJldHVybiBlcnI7XG4yMDk3Olx0fVxuMjA5ODpcdFxuMjA5OTpcdHN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuMjEwMDpcdFx0XHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbjIxMDE6XHR7XG4yMTAyOlx0XHRpbnQgcmV0ID0gMDtcbjIxMDM6XHRcdGludCBpO1xuMjEwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQyMAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0hPIFBhdGNoIG9uIGFtZDY0KioKCk9rYXksIEkmIzM5O3ZlIGdvdCB0aGlzLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzdXBwb3J0IGZvciBrZXhlYyBoYW5kb3Zlciwgb3IgS0hPLCBzcGVjaWZpY2FsbHkgZm9yIExvb25nQXJjaC4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyBgQ09ORklHX0VGSV9LSE9gLCBhbmQgSSBzZWUgdGhhdCBpdCYjMzk7cyB0aWdodGx5IGJvdW5kIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSAqd2l0aG91dCogYSBkZXZpY2UgdHJlZSwgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IHRvIG15IHR5cGljYWwgYW1kNjQgc2V0dXAuCgpMb29raW5nIGNsb3NlciBhdCB0aGUgYW1kNjQgc2lkZSwgYXMgSSBzdXNwZWN0ZWQsIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBFRkkgS0hPIGlzIGRlYWQgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9gIGlzIGNvbXBsZXRlbHkgYCNpZmRlZiBDT05GSUdfRUZJX0tIT2BkIG91dC4gYGVmaV9raG9fdXBkYXRlYCBpcyBqdXN0IGEgbm8tb3Agc3R1YiwganVzdCByZXR1cm5pbmcgemVybywgYW5kIGBraG9fc3luY19jaGFubmVsKClgIGRvZXNuJiMzOTt0IGFjdHVhbGx5ICpkbyogYW55dGhpbmcgb24gYW1kNjQuIEV2ZW4gdGhlIHRlc3Qgc2NyaXB0cyBhcmUgdXNlci1zcGFjZSBzdHVmZiwgc28gSSBkb24mIzM5O3Qgc2VlIGFueSBleHBvc2VkIGtlcm5lbCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLiBJIGNhbiYjMzk7dCBmaW5kIGFueXRoaW5nIHVzZWZ1bCBoZXJlLgoKU28sIGxldCYjMzk7cyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuIEkgbmVlZDoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgc3BlY2lmaWNhbGx5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKExvb25nQXJjaCkuIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBzdWJzdGFudGl2ZSBFRkkgS0hPIGxvZ2ljIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhIG5vLW9wIGlubGluZSByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBjb25zaXN0IG9mIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1ZGUuJiMzNDsKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAobm90aGluZyB0byBlbmFibGUpCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAobm90aGluZyByZWxldmFudCB0byBmb2N1cyBvbikKCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHRyYW5zcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIgKEtITyksIHRhcmdldGVkIGF0IGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgZGV2aWNlIHRyZWUgKHN1Y2ggYXMgTG9vbmdBcmNoKS4gVGhlIG5ldyBjb25maWcgQ09ORklHX0VGSV9LSE8gaXMgb25seSBzZWxlY3RlZCBieSBhcmNoL2xvb25nYXJjaC9LY29uZmlnIGFuZCBjYW5ub3QgYmUgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBPbiBhbWQ2NCwgYWxsIEVGSSBLSE8gbG9naWMgaW4gdGhlIEVGSSBkcml2ZXJzIGFuZCBsaWJzdHViIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhbiBpbmxpbmUgbm8tb3AgcmV0dXJuaW5nIDAsIGFuZCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgYXJlIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1c2lvbi4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIGZvciBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyNS4wMDgwMzUzNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzAxODQyOTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgdGFyZ2V0ZWQgYXQgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBkZXZpY2UgdHJlZSAoc3VjaCBhcyBMb29uZ0FyY2gpLiBUaGUgbmV3IGNvbmZpZyBDT05GSUdfRUZJX0tITyBpcyBvbmx5IHNlbGVjdGVkIGJ5IGFyY2gvbG9vbmdhcmNoL0tjb25maWcgYW5kIGNhbm5vdCBiZSBlbmFibGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIE9uIGFtZDY0LCBhbGwgRUZJIEtITyBsb2dpYyBpbiB0aGUgRUZJIGRyaXZlcnMgYW5kIGxpYnN0dWIgaXMgY29tcGlsZWQgb3V0LCBlZmlfa2hvX3VwZGF0ZSgpIGlzIGFuIGlubGluZSBuby1vcCByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBhcmUgc2VsZnRlc3Qgc2NyaXB0cyBhbmQgYSBoZWFkZXIgaW5jbHVzaW9uLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgZm9yIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6MjUuMDA4MDQwMDc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3Mjc3ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDE5OjIxOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggYTIxZjUxZTU4MTVlOS4uNWVhYTY1NTc4ZDU4ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbkBAIC02ODUsNiArNjg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXFxuIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG4gXFx0ZGVmX2Jvb2wgNjRCSVRcXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuK1xcdGRlZl9ib29sIDY0QklUIFxcdTAwMjZcXHUwMDI2IEVGSV9TVFVCXFxuK1xcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXFxuK1xcbiBjb25maWcgQVJDSF9TRUxFQ1RTX0tFWEVDX0ZJTEVcXG4gXFx0ZGVmX2Jvb2wgNjRCSVRcXG4gXFx0ZGVwZW5kcyBvbiBLRVhFQ19GSUxFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuaW5kZXggMjllMDcyOTI5OWY1Yi4uZDZjMTM3MjQ4NGI0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbkBAIC0zMTQsNiArMzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFXFxuIFxcbiBcXHQgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuXFxuIFxcbitjb25maWcgRUZJX0tIT1xcbitcXHRib29sXFxuK1xcdGRlcGVuZHMgb24gRUZJX1NUVUIgXFx1MDAyNlxcdTAwMjYgRUZJX0dFTkVSSUNfU1RVQiBcXHUwMDI2XFx1MDAyNiBLRVhFQ19IQU5ET1ZFUlxcbitcXHRoZWxwXFxuK1xcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cXG4rXFx0ICBvbmUga2VybmVsIHRvIHRoZSBuZXh0IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVcXG4rXFx0ICBlbnRyeSB1bmRlciBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCwgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdFxcbitcXHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXFxuK1xcbitcXHQgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFRcXG4rXFx0ICBwYXRoIGluc3RlYWQgYW5kIGRvIG5vdCBzZWxlY3QgdGhpcy5cXG4rXFxuIGVuZG1lbnVcXG4gXFxuIGNvbmZpZyBVRUZJX0NQRVJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbmluZGV4IDAzMjdhMzlkMzFmYTUuLjYzODBjZmFiMTQ5M2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0cmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXhlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWJvb3QuaFxcdTAwM2VcXG5AQCAtNjIsNiArNjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbV9yZXNlcnZlID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBydF9wcm9wID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGVmaV9raG9fdGFibGVfcGh5cyA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuKyNlbmRpZlxcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJpbWFyeV9kaXNwbGF5X3RhYmxlO1xcbiBcXG5AQCAtNjI5LDYgKzYzMyw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuIFxcdHtFRklfVENHMl9GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcXHRcXHUwMDI2ZWZpLnRwbV9maW5hbF9sb2csXFx0XFxcIlRQTUZpbmFsTG9nXFxcIlxcdH0sXFxuIFxcdHtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFxcdFxcXCJDQ0ZpbmFsTG9nXFxcIlxcdH0sXFxuIFxcdHtMSU5VWF9FRklfTUVNUkVTRVJWRV9UQUJMRV9HVUlELFxcdFxcdTAwMjZtZW1fcmVzZXJ2ZSxcXHRcXHRcXFwiTUVNUkVTRVJWRVxcXCJcXHR9LFxcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cXG4rXFx0e0xJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELFxcdFxcdFxcdTAwMjZlZmlfa2hvX3RhYmxlX3BoeXMsXFx0XFxcIktIT1xcXCJcXHRcXHR9LFxcbisjZW5kaWZcXG4gXFx0e0xJTlVYX0VGSV9JTklUUkRfTUVESUFfR1VJRCxcXHRcXHRcXHUwMDI2aW5pdHJkLFxcdFxcdFxcXCJJTklUUkRcXFwiXFx0fSxcXG4gXFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXFx0XFx0XFx1MDAyNnJ0X3Byb3AsXFx0XFx0XFxcIlJUUFJPUFxcXCJcXHR9LFxcbiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HXFxuQEAgLTgwNiw2ICs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rI2lmZGVmIENPTkZJR19FRklfS0hPXFxuK1xcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbitcXHRcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZXNlcnZlIHRoZSBzdHViLWFsbG9jYXRlZCB0YWJsZSBzbyBpdCBpcyBuZWl0aGVyIGhhbmRlZFxcbitcXHRcXHQgKiBvdXQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvciBub3IgcGxhY2VkIG9uIGJ5IGtleGVjXFxuK1xcdFxcdCAqIHNlZ21lbnRzLCBtaXJyb3JpbmcgdGhlIG1lbXJlc2VydmUgaGFuZGxpbmcgYWJvdmUuICBUaGlzXFxuK1xcdFxcdCAqIHJ1bnMgb24gZXZlcnkgYm9vdCwgc28gaXQgYWxzbyBwcm90ZWN0cyB0aGUgdGFibGUgaW4gdGhlXFxuK1xcdFxcdCAqIG5leHQga2VybmVsIHVudGlsIGl0IHJlYWRzIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XFxuK1xcbitcXHRcXHRraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XFxuK1xcdFxcdGlmIChraG8pIHtcXG4rXFx0XFx0XFx0aWYgKGtoby1cXHUwMDNlZmR0X2FkZHIpXFxuK1xcdFxcdFxcdFxcdGtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLVxcdTAwM2VmZHRfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBraG8tXFx1MDAzZWZkdF9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIChwaHlzX2FkZHJfdClraG8tXFx1MDAzZXNjcmF0Y2hfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBraG8tXFx1MDAzZXNjcmF0Y2hfc2l6ZSk7XFxuK1xcdFxcdFxcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZW9mKCpraG8pKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbiBcXHRcXHRlZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7XFxuIFxcbkBAIC0xMTcxLDYgKzEyMDMsNTIgQEAgc3RhdGljIGludCBfX2luaXQgZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KHZvaWQpXFxuIH1cXG4gZWFybHlfaW5pdGNhbGwoZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqZWZpX2tob190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBlZmlfa2hvX3RhYmxlX2luaXQodm9pZClcXG4re1xcbitcXHRpZiAoZWZpX2tob190YWJsZV9waHlzID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2VlcCBhIHBlcnNpc3RlbnQgbWFwcGluZyBvZiB0aGUgdGFibGUsIHRoZSBzYW1lIHdheVxcbitcXHQgKiBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQoKSBrZWVwcyB0aGUgbWVtcmVzZXJ2ZSByb290IG1hcHBlZDpcXG4rXFx0ICogZWZpX2tob191cGRhdGUoKSBpcyBhbHNvIGNhbGxlZCBvbiB0aGUgY3Jhc2gga2V4ZWMgcGF0aCwgd2hlcmVcXG4rXFx0ICogbWVtcmVtYXAoKSBpcyBubyBsb25nZXIgYW4gb3B0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZWZpX2tob190YWJsZSA9IG1lbXJlbWFwKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCplZmlfa2hvX3RhYmxlKSxcXG4rXFx0XFx0XFx0XFx0IE1FTVJFTUFQX1dCKTtcXG4rXFx0V0FSTl9PTl9PTkNFKCFlZmlfa2hvX3RhYmxlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK2Vhcmx5X2luaXRjYWxsKGVmaV9raG9fdGFibGVfaW5pdCk7XFxuK1xcbisvKlxcbisgKiBVcGRhdGUgdGhlIEtITyBjb25maWcgdGFibGUgaW4gcGxhY2UgYmVmb3JlIGEga2V4ZWMsIHNvIHRoZSBuZXh0IGtlcm5lbFxcbisgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcXG4rICogdGhlIGNvbmZpZyB0YWJsZSBlbnRyeSB3YXMgaW5zdGFsbGVkIG9uY2UgYnkgdGhlIEVGSSBzdHViIGFuZCBpcyBpbmhlcml0ZWRcXG4rICogYWNyb3NzIGtleGVjLCBzbyBvbmx5IHRoZSB0YWJsZSBjb250ZW50cyBhcmUgcmV3cml0dGVuIGhlcmUgLS0gdGhlIGNvbmZpZ1xcbisgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cXHUwMDNldGFibGVzIGlzIG5ldmVyIHN3aXRjaGVkLlxcbisgKi9cXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXFxuK1xcdFxcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG8gPSBlZmlfa2hvX3RhYmxlO1xcbitcXG4rXFx0aWYgKCFraG8pXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0a2hvLVxcdTAwM2VmZHRfYWRkclxcdFxcdD0gZmR0X2FkZHI7XFxuK1xcdGtoby1cXHUwMDNlZmR0X3NpemVcXHRcXHQ9IGZkdF9zaXplO1xcbitcXHRraG8tXFx1MDAzZXNjcmF0Y2hfYWRkclxcdD0gc2NyYXRjaF9hZGRyO1xcbitcXHRraG8tXFx1MDAzZXNjcmF0Y2hfc2l6ZVxcdD0gc2NyYXRjaF9zaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX0tFWEVDXFxuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCA0MmQ2MDczYmNkMDYyLi43NTFmNDYyODA0MzNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xMDAsNiArMTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKVxcbiBcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gaW5zdGFsbCBtZW1yZXNlcnZlIGNvbmZpZyB0YWJsZSFcXFxcblxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XFxuK1xcdGVmaV9ndWlkX3Qga2hvX3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRDtcXG4rXFx0ZWZpX3N0YXR1c190IHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLFxcbitcXHRcXHRcXHQgICAgICh2b2lkICoqKVxcdTAwMjZraG8pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0KmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9O1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLCBcXHUwMDI2a2hvX3RhYmxlX2d1aWQsXFxuK1xcdFxcdFxcdCAgICAga2hvKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0ZWZpX2VycihcXFwiRmFpbGVkIHRvIGluc3RhbGwgS0hPIGNvbmZpZyB0YWJsZSFcXFxcblxcXCIpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHUzMiBnZXRfc3VwcG9ydGVkX3J0X3NlcnZpY2VzKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3QgZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqcnRfcHJvcF90YWJsZTtcXG5AQCAtMTgwLDYgKzIwMyw4IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFxuIFxcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xcbiBcXG4rXFx0aW5zdGFsbF9raG9fdGFibGUoKTtcXG4rXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbiBcXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGFhMTVmZjg4NTM5YmQuLjU2NGIzY2JkNWNjYjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtNDIyLDYgKzQyMiw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcXHRcXHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXFxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcXHRcXHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXFxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXFxuKyNkZWZpbmUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSURcXHRcXHRFRklfR1VJRCgweGM5NDFiNmM3LCAweDdiM2YsIDB4NGFmNiwgIDB4OWUsIDB4NTAsIDB4ZmMsIDB4YjMsIDB4YTgsIDB4ODYsIDB4OGEsIDB4MTcpXFxuIFxcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcXHRcXHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXFxuIFxcbkBAIC0xMjczLDYgKzEyNzQsNDEgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcXG4gXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbisvKlxcbisgKiBUaGUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQgY29uZmlnIHRhYmxlIHBvaW50cyB0byB0aGlzIHN0cnVjdHVyZS5cXG4rICogSXQgY2FycmllcyB0aGUga2V4ZWMgaGFuZG92ZXIgKEtITykgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBrZXJuZWwgdG8gdGhlXFxuKyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLlxcbisgKlxcbisgKiBUaGlzIGlzIHRoZSBoYW5kb3ZlciBjaGFubmVsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSVxcbisgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdFxcbisgKiBhbmQgbGludXgsa2hvLXNjcmF0Y2ggcHJvcGVydGllcyByZWFkIGJ5IGVhcmx5X2luaXRfZHRfY2hlY2tfa2hvKCkgYXJlIG5vdFxcbisgKiBhdmFpbGFibGUuICBUaGUgRUZJIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgdGFibGUgb25jZSBhdCBib290O1xcbisgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dFxcbisgKiBrZXJuZWwgcmVhZHMgaXQgYmFjayBhbmQgY2FsbHMga2hvX3BvcHVsYXRlKCkuXFxuKyAqXFxuKyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb25cXG4rICogZmllbGQ6IGFuIGluY29tcGF0aWJsZSBjaGFuZ2UgbXVzdCB1c2UgYSBuZXcgR1VJRC4gIFRoZSBoYW5kb3ZlciBwYXlsb2FkXFxuKyAqIGl0c2VsZiBpcyB2ZXJzaW9uZWQgc2VwYXJhdGVseSBieSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIEtITyBzdGF0ZVxcbisgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy5cXG4rICovXFxuK3N0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEge1xcbitcXHR1NjQgZmR0X2FkZHI7XFxuK1xcdHU2NCBmZHRfc2l6ZTtcXG4rXFx0dTY0IHNjcmF0Y2hfYWRkcjtcXG4rXFx0dTY0IHNjcmF0Y2hfc2l6ZTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK2ludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxcbitcXHRcXHQgICBwaHlzX2FkZHJfdCBzY3JhdGNoX2FkZHIsIHU2NCBzY3JhdGNoX3NpemUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gLypcXG4gICogVGhlIExJTlVYX0VGSV9NT0tfVkFSSUFCTEVfVEFCTEVfR1VJRCBjb25maWcgdGFibGUgY2FuIGJlIHByb3ZpZGVkXFxuICAqIHRvIHRoZSBrZXJuZWwgYnkgYW4gRUZJIGJvb3QgbG9hZGVyLiBUaGUgdGFibGUgY29udGFpbnMgYSBwYWNrZWRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcXG5pbmRleCAyYjM2YWE5ZmFkZTA2Li42MTY2Y2U0MjAzZDNiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcXG4rKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuQEAgLTEzOCw2ICsxMzgsMTMgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0aWYgKGtleGVjX2NyYXNoX2ltYWdlKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBwdF9yZWdzIGZpeGVkX3JlZ3M7XFxuIFxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIGNyYXNoIGltYWdlIGNhcnJpZXMgbm8gS0hPIHN0YXRlOiBjbGVhciB0aGVcXG4rXFx0XFx0XFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXFxuK1xcdFxcdFxcdCAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcXG4rXFxuIFxcdFxcdFxcdGNyYXNoX3NldHVwX3JlZ3MoXFx1MDAyNmZpeGVkX3JlZ3MsIHJlZ3MpO1xcbiBcXHRcXHRcXHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcXG4gXFx0XFx0XFx0bWFjaGluZV9jcmFzaF9zaHV0ZG93bihcXHUwMDI2Zml4ZWRfcmVncyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXFxuaW5kZXggZGM3NzBiOWE2ZDA1My4uMTQ3ZjViNWIyM2Q0MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbkBAIC0xMTQ2LDYgKzExNDYsMTEgQEAgaW50IGtlcm5lbF9rZXhlYyh2b2lkKVxcbiBcXHRcXHRnb3RvIFVubG9jaztcXG4gXFx0fVxcbiBcXG4rXFx0LyogU3luY2hyb25pemUgdGhlIGhhbmRvdmVyIHRyYW5zcG9ydCB3aXRoIHRoZSBpbWFnZSBiZWluZyBleGVjdXRlZC4gKi9cXG4rXFx0ZXJyb3IgPSBraG9fc3luY19jaGFubmVsKGtleGVjX2ltYWdlKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIFVubG9jaztcXG4rXFxuIFxcdGlmICgha2V4ZWNfaW1hZ2UtXFx1MDAzZXByZXNlcnZlX2NvbnRleHQpIHtcXG4gXFx0XFx0ZXJyb3IgPSBsaXZldXBkYXRlX3JlYm9vdCgpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcXG5pbmRleCAyMjhiYjg4YzAxOGJjLi40ZDRjMjI5MGU4NWM3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcXG5AQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3Qga2V4ZWNfYnVmO1xcbiBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbiBcXHRcXHRcXHRpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSk7XFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpO1xcbitpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXFxuQEAgLTU0LDUgKzU1LDcgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbmluZGV4IDdjNGQ4NmRhZjg2ZDUuLmI2MDA4YzAxNTI1ZDkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rbWVtbGVhay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY291bnRfemVyb3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2FzYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXFx1MDAzZVxcbkBAIC0yMDYzLDYgKzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZVxcbisgKiBleGVjdXRlZC4gIFRoZSBFRkkgY29uZmlnIHRhYmxlIGNoYW5uZWwgaXMgZ2xvYmFsLCB3aGlsZSBrZXhlYyBrZWVwc1xcbisgKiBzZXBhcmF0ZSBpbWFnZXMgZm9yIGEgbm9ybWFsIHJlYm9vdCBhbmQgZm9yIGNyYXNoLiAgV3JpdGUgdGhlIHN0YXRlIG9mIHRoZVxcbisgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGFcXG4rICogY2FuZGlkYXRlIGltYWdlIGlzIGJlaW5nIGxvYWRlZCwgc28gYSBmYWlsZWQgcmVwbGFjZW1lbnQgY2Fubm90IGxlYXZlIHRoZVxcbisgKiBjaGFubmVsIHBvaW50aW5nIGF0IHRoYXQgZmFpbGVkIGltYWdlLlxcbisgKlxcbisgKiBBbiBpbWFnZSBsb2FkZWQgdGhyb3VnaCB0aGUgbGVnYWN5IGtleGVjX2xvYWQoKSBzeXNjYWxsLCBhIGNyYXNoIGltYWdlLCBvclxcbisgKiBhbiBpbWFnZSBsb2FkZWQgd2hpbGUgS0hPIGlzIGRpc2FibGVkIGNhcnJpZXMgbm8gaGFuZG92ZXIgc3RhdGUuICBDbGVhciB0aGVcXG4rICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmdcXG4rICogZnJvbSBzdGFsZSBzdGF0ZS4gIENsZWFyaW5nIGlzIGJlc3QtZWZmb3J0IGJlY2F1c2UgYW4gYWJzZW50IGNoYW5uZWwgY2Fubm90XFxuKyAqIGFmZmVjdCBhIGNvbGQgYm9vdC5cXG4rICovXFxuK2ludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWltYWdlLVxcdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gpIHtcXG4rXFx0XFx0ZWZpX2tob191cGRhdGUoMCwgMCwgMCwgMCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBlZmlfa2hvX3VwZGF0ZShpbWFnZS1cXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlbWVtLFxcbitcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlYnVmc3opO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gdXBkYXRlIEVGSSBjb25maWcgdGFibGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suYyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXFxuaW5kZXggMGQyYTM0MmVmNDIyOC4uMGQ1Njg5MWIyZjRjOCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tob19ibG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9sb29uZ2FyY2guY29uZiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9sb29uZ2FyY2guY29uZlxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vbG9vbmdhcmNoLmNvbmZcXG5AQCAtMCwwICsxLDExIEBAXFxuK1FFTVVfRUZJPVxcXCIke1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XFxcIlxcbitRRU1VX0NNRD1cXFwicWVtdS1zeXN0ZW0tbG9vbmdhcmNoNjQgLU0gdmlydCAtY3B1IGxhNDY0IC1iaW9zICRRRU1VX0VGSVxcXCJcXG4rUUVNVV9LQ09ORklHPVxcXCJcXG4rQ09ORklHX0FDUElfU1BDUl9UQUJMRT15XFxuK0NPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXlcXG4rQ09ORklHX1NFUklBTF84MjUwPXlcXG4rQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eVxcbitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15XFxuK1xcXCJcXG4rS0VSTkVMX0lNQUdFPVxcXCJ2bWxpbnV4LmVmaVxcXCJcXG4rS0VSTkVMX0NNRExJTkU9XFxcImNvbnNvbGU9dHR5UzAgZWFybHljb25cXFwiXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXFxuaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaFxcbkBAIC0yMSw3ICsyMSw3IEBAIE9wdGlvbnM6XFxuIFxcdC1kKVxcdHBhdGggdG8gdGhlIGtlcm5lbCBidWlsZCBkaXJlY3RvcnlcXG4gXFx0LWopXFx0bnVtYmVyIG9mIGpvYnMgZm9yIGNvbXBpbGF0aW9uLCBzaW1pbGFyIHRvIC1qIGluIG1ha2VcXG4gXFx0LXQpXFx0cnVuIHRlc3QgZm9yIHRhcmdldF9hcmNoLCByZXF1aXJlcyBDUk9TU19DT01QSUxFIHNldFxcbi1cXHRcXHRzdXBwb3J0ZWQgdGFyZ2V0czogYWFyY2g2NCwgeDg2XzY0XFxuK1xcdFxcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XFxuIFxcdC1oKVxcdGRpc3BsYXkgdGhpcyBoZWxwXFxuIEVPRlxcbiB9XFxuQEAgLTEyNiw2ICsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHtcXG4gXFxuIFxcdGNhc2UgJHRhcmdldCBpblxcbiBcXHQgICAgIGFhcmNoNjQpIGVjaG8gXFxcImFybTY0XFxcIiA7O1xcbitcXHQgICAgIGxvb25nYXJjaDY0KSBlY2hvIFxcXCJsb29uZ2FyY2hcXFwiIDs7XFxuIFxcdCAgICAgeDg2XzY0KSBlY2hvIFxcXCJ4ODZcXFwiIDs7XFxuIFxcdCAgICAgKikgc2tpcCBcXFwiYXJjaGl0ZWN0dXJlICR0YXJnZXQgaXMgbm90IHN1cHBvcnRlZFxcXCJcXG4gXFx0ZXNhY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyNi44MTU5NTEyMzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjEwNTAxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHRyYW5zcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIgKEtITyksIHRhcmdldGVkIGF0IGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgZGV2aWNlIHRyZWUgKHN1Y2ggYXMgTG9vbmdBcmNoKS4gVGhlIG5ldyBjb25maWcgQ09ORklHX0VGSV9LSE8gaXMgb25seSBzZWxlY3RlZCBieSBhcmNoL2xvb25nYXJjaC9LY29uZmlnIGFuZCBjYW5ub3QgYmUgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBPbiBhbWQ2NCwgYWxsIEVGSSBLSE8gbG9naWMgaW4gdGhlIEVGSSBkcml2ZXJzIGFuZCBsaWJzdHViIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhbiBpbmxpbmUgbm8tb3AgcmV0dXJuaW5nIDAsIGFuZCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgYXJlIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1c2lvbi4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIGZvciBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggYTIxZjUxZTU4MTVlOS4uNWVhYTY1NTc4ZDU4ZSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC02ODUsNiArNjg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXG4gY29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuK1x0ZGVmX2Jvb2wgNjRCSVQgXHUwMDI2XHUwMDI2IEVGSV9TVFVCXG4rXHRzZWxlY3QgRUZJX0tITyBpZiBLRVhFQ19IQU5ET1ZFUlxuK1xuIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcdGRlcGVuZHMgb24gS0VYRUNfRklMRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTMxNCw2ICszMTQsMTggQEAgY29uZmlnIEVGSV9TQkFUX0ZJTEVcbiBcbiBcdCAgSWYgdW5zdXJlLCBsZWF2ZSBibGFuay5cbiBcbitjb25maWcgRUZJX0tIT1xuK1x0Ym9vbFxuK1x0ZGVwZW5kcyBvbiBFRklfU1RVQiBcdTAwMjZcdTAwMjYgRUZJX0dFTkVSSUNfU1RVQiBcdTAwMjZcdTAwMjYgS0VYRUNfSEFORE9WRVJcbitcdGhlbHBcbitcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cbitcdCAgb25lIGtlcm5lbCB0byB0aGUgbmV4dCBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlXG4rXHQgIGVudHJ5IHVuZGVyIExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0XG4rXHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXG4rXG4rXHQgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFRcbitcdCAgcGF0aCBpbnN0ZWFkIGFuZCBkbyBub3Qgc2VsZWN0IHRoaXMuXG4rXG4gZW5kbWVudVxuIFxuIGNvbmZpZyBVRUZJX0NQRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li42MzgwY2ZhYjE0OTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXRyZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG5AQCAtNjIsNiArNjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtX3Jlc2VydmUgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcnRfcHJvcCA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuKyNlbmRpZlxuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHByaW1hcnlfZGlzcGxheV90YWJsZTtcbiBcbkBAIC02MjksNiArNjMzLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiBcdHtFRklfVENHMl9GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFx0XCJUUE1GaW5hbExvZ1wiXHR9LFxuIFx0e0VGSV9DQ19GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFx0XCJDQ0ZpbmFsTG9nXCJcdH0sXG4gXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcIk1FTVJFU0VSVkVcIlx0fSxcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitcdHtMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCxcdFx0XHUwMDI2ZWZpX2tob190YWJsZV9waHlzLFx0XCJLSE9cIlx0XHR9LFxuKyNlbmRpZlxuIFx0e0xJTlVYX0VGSV9JTklUUkRfTUVESUFfR1VJRCxcdFx0XHUwMDI2aW5pdHJkLFx0XHRcIklOSVRSRFwiXHR9LFxuIFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXHRcdFx1MDAyNnJ0X3Byb3AsXHRcdFwiUlRQUk9QXCJcdH0sXG4gI2lmZGVmIENPTkZJR19PVk1GX0RFQlVHX0xPR1xuQEAgLTgwNiw2ICs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4gXHRcdH1cbiBcdH1cbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xuK1x0XHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFJlc2VydmUgdGhlIHN0dWItYWxsb2NhdGVkIHRhYmxlIHNvIGl0IGlzIG5laXRoZXIgaGFuZGVkXG4rXHRcdCAqIG91dCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yIG5vciBwbGFjZWQgb24gYnkga2V4ZWNcbitcdFx0ICogc2VnbWVudHMsIG1pcnJvcmluZyB0aGUgbWVtcmVzZXJ2ZSBoYW5kbGluZyBhYm92ZS4gIFRoaXNcbitcdFx0ICogcnVucyBvbiBldmVyeSBib290LCBzbyBpdCBhbHNvIHByb3RlY3RzIHRoZSB0YWJsZSBpbiB0aGVcbitcdFx0ICogbmV4dCBrZXJuZWwgdW50aWwgaXQgcmVhZHMgaXQuXG4rXHRcdCAqL1xuK1x0XHRtZW1ibG9ja19yZXNlcnZlKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCpraG8pKTtcbitcbitcdFx0a2hvID0gZWFybHlfbWVtcmVtYXAoZWZpX2tob190YWJsZV9waHlzLCBzaXplb2YoKmtobykpO1xuK1x0XHRpZiAoa2hvKSB7XG4rXHRcdFx0aWYgKGtoby1cdTAwM2VmZHRfYWRkcilcbitcdFx0XHRcdGtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLVx1MDAzZWZkdF9hZGRyLFxuK1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VmZHRfc2l6ZSxcbitcdFx0XHRcdFx0ICAgICAocGh5c19hZGRyX3Qpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcixcbitcdFx0XHRcdFx0ICAgICBraG8tXHUwMDNlc2NyYXRjaF9zaXplKTtcbitcdFx0XHRlYXJseV9tZW11bm1hcChraG8sIHNpemVvZigqa2hvKSk7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiBcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcbiBcdFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xuIFxuQEAgLTExNzEsNiArMTIwMyw1MiBAQCBzdGF0aWMgaW50IF9faW5pdCBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQodm9pZClcbiB9XG4gZWFybHlfaW5pdGNhbGwoZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqZWZpX2tob190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rc3RhdGljIGludCBfX2luaXQgZWZpX2tob190YWJsZV9pbml0KHZvaWQpXG4re1xuK1x0aWYgKGVmaV9raG9fdGFibGVfcGh5cyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBLZWVwIGEgcGVyc2lzdGVudCBtYXBwaW5nIG9mIHRoZSB0YWJsZSwgdGhlIHNhbWUgd2F5XG4rXHQgKiBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQoKSBrZWVwcyB0aGUgbWVtcmVzZXJ2ZSByb290IG1hcHBlZDpcbitcdCAqIGVmaV9raG9fdXBkYXRlKCkgaXMgYWxzbyBjYWxsZWQgb24gdGhlIGNyYXNoIGtleGVjIHBhdGgsIHdoZXJlXG4rXHQgKiBtZW1yZW1hcCgpIGlzIG5vIGxvbmdlciBhbiBvcHRpb24uXG4rXHQgKi9cbitcdGVmaV9raG9fdGFibGUgPSBtZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqZWZpX2tob190YWJsZSksXG4rXHRcdFx0XHQgTUVNUkVNQVBfV0IpO1xuK1x0V0FSTl9PTl9PTkNFKCFlZmlfa2hvX3RhYmxlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitlYXJseV9pbml0Y2FsbChlZmlfa2hvX3RhYmxlX2luaXQpO1xuK1xuKy8qXG4rICogVXBkYXRlIHRoZSBLSE8gY29uZmlnIHRhYmxlIGluIHBsYWNlIGJlZm9yZSBhIGtleGVjLCBzbyB0aGUgbmV4dCBrZXJuZWxcbisgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcbisgKiB0aGUgY29uZmlnIHRhYmxlIGVudHJ5IHdhcyBpbnN0YWxsZWQgb25jZSBieSB0aGUgRUZJIHN0dWIgYW5kIGlzIGluaGVyaXRlZFxuKyAqIGFjcm9zcyBrZXhlYywgc28gb25seSB0aGUgdGFibGUgY29udGVudHMgYXJlIHJld3JpdHRlbiBoZXJlIC0tIHRoZSBjb25maWdcbisgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cdTAwM2V0YWJsZXMgaXMgbmV2ZXIgc3dpdGNoZWQuXG4rICovXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4rXHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG8gPSBlZmlfa2hvX3RhYmxlO1xuK1xuK1x0aWYgKCFraG8pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0a2hvLVx1MDAzZWZkdF9hZGRyXHRcdD0gZmR0X2FkZHI7XG4rXHRraG8tXHUwMDNlZmR0X3NpemVcdFx0PSBmZHRfc2l6ZTtcbitcdGtoby1cdTAwM2VzY3JhdGNoX2FkZHJcdD0gc2NyYXRjaF9hZGRyO1xuK1x0a2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZVx0PSBzY3JhdGNoX3NpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19LRVhFQ1xuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTEwMCw2ICsxMDAsMjkgQEAgc3RhdGljIHZvaWQgaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKHZvaWQpXG4gXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gaW5zdGFsbCBtZW1yZXNlcnZlIGNvbmZpZyB0YWJsZSFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGluc3RhbGxfa2hvX3RhYmxlKHZvaWQpXG4re1xuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuK1x0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xuK1x0ZWZpX2d1aWRfdCBraG9fdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlEO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLFxuK1x0XHRcdCAgICAgKHZvaWQgKiopXHUwMDI2a2hvKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9O1xuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLCBcdTAwMjZraG9fdGFibGVfZ3VpZCxcbitcdFx0XHQgICAgIGtobyk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgS0hPIGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB1MzIgZ2V0X3N1cHBvcnRlZF9ydF9zZXJ2aWNlcyh2b2lkKVxuIHtcbiBcdGNvbnN0IGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnJ0X3Byb3BfdGFibGU7XG5AQCAtMTgwLDYgKzIwMyw4IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuIFxuK1x0aW5zdGFsbF9raG9fdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG4gXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBhYTE1ZmY4ODUzOWJkLi41NjRiM2NiZDVjY2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTQyMiw2ICs0MjIsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbisjZGVmaW5lIExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlEXHRcdEVGSV9HVUlEKDB4Yzk0MWI2YzcsIDB4N2IzZiwgMHg0YWY2LCAgMHg5ZSwgMHg1MCwgMHhmYywgMHhiMywgMHhhOCwgMHg4NiwgMHg4YSwgMHgxNylcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTEyNzMsNiArMTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuIFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbisvKlxuKyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLlxuKyAqIEl0IGNhcnJpZXMgdGhlIGtleGVjIGhhbmRvdmVyIChLSE8pIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQga2VybmVsIHRvIHRoZVxuKyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLlxuKyAqXG4rICogVGhpcyBpcyB0aGUgaGFuZG92ZXIgY2hhbm5lbCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRklcbisgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdFxuKyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90XG4rICogYXZhaWxhYmxlLiAgVGhlIEVGSSBzdHViIGFsbG9jYXRlcyBhbmQgaW5zdGFsbHMgdGhlIHRhYmxlIG9uY2UgYXQgYm9vdDtcbisgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dFxuKyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS5cbisgKlxuKyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb25cbisgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWRcbisgKiBpdHNlbGYgaXMgdmVyc2lvbmVkIHNlcGFyYXRlbHkgYnkgdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBLSE8gc3RhdGVcbisgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy5cbisgKi9cbitzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhIHtcbitcdHU2NCBmZHRfYWRkcjtcbitcdHU2NCBmZHRfc2l6ZTtcbitcdHU2NCBzY3JhdGNoX2FkZHI7XG4rXHR1NjQgc2NyYXRjaF9zaXplO1xuK30gX19wYWNrZWQ7XG4rXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4rXHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxuK1x0XHRcdFx0IHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBUaGUgTElOVVhfRUZJX01PS19WQVJJQUJMRV9UQUJMRV9HVUlEIGNvbmZpZyB0YWJsZSBjYW4gYmUgcHJvdmlkZWRcbiAgKiB0byB0aGUga2VybmVsIGJ5IGFuIEVGSSBib290IGxvYWRlci4gVGhlIHRhYmxlIGNvbnRhaW5zIGEgcGFja2VkXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbmluZGV4IDJiMzZhYTlmYWRlMDYuLjYxNjZjZTQyMDNkM2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jXG4rKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXG5AQCAtMTM4LDYgKzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHtcbiBcdFx0XHRzdHJ1Y3QgcHRfcmVncyBmaXhlZF9yZWdzO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBjcmFzaCBpbWFnZSBjYXJyaWVzIG5vIEtITyBzdGF0ZTogY2xlYXIgdGhlXG4rXHRcdFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXG4rXHRcdFx0ICogb2YgcmV2aXZpbmcgZnJvbSBzdGFsZSBzdGF0ZS5cbitcdFx0XHQgKi9cbitcdFx0XHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcbitcbiBcdFx0XHRjcmFzaF9zZXR1cF9yZWdzKFx1MDAyNmZpeGVkX3JlZ3MsIHJlZ3MpO1xuIFx0XHRcdGNyYXNoX3NhdmVfdm1jb3JlaW5mbygpO1xuIFx0XHRcdG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oXHUwMDI2Zml4ZWRfcmVncyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbmluZGV4IGRjNzcwYjlhNmQwNTMuLjE0N2Y1YjViMjNkNDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5AQCAtMTE0Niw2ICsxMTQ2LDExIEBAIGludCBrZXJuZWxfa2V4ZWModm9pZClcbiBcdFx0Z290byBVbmxvY2s7XG4gXHR9XG4gXG4rXHQvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqL1xuK1x0ZXJyb3IgPSBraG9fc3luY19jaGFubmVsKGtleGVjX2ltYWdlKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBVbmxvY2s7XG4rXG4gXHRpZiAoIWtleGVjX2ltYWdlLVx1MDAzZXByZXNlcnZlX2NvbnRleHQpIHtcbiBcdFx0ZXJyb3IgPSBsaXZldXBkYXRlX3JlYm9vdCgpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ludGVybmFsLmggYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuaW5kZXggMjI4YmI4OGMwMThiYy4uNGQ0YzIyOTBlODVjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oXG4rKysgYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuQEAgLTQ2LDYgKzQ2LDcgQEAgc3RydWN0IGtleGVjX2J1ZjtcbiBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuIFx0XHRcdGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKTtcbiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKTtcbitpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0XHQgICAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbkBAIC01NCw1ICs1NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li5iNjAwOGMwMTUyNWQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3VudF96ZXJvcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbkBAIC0yMDYzLDYgKzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZVxuKyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXG4rICogc2VwYXJhdGUgaW1hZ2VzIGZvciBhIG5vcm1hbCByZWJvb3QgYW5kIGZvciBjcmFzaC4gIFdyaXRlIHRoZSBzdGF0ZSBvZiB0aGVcbisgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGFcbisgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXG4rICogY2hhbm5lbCBwb2ludGluZyBhdCB0aGF0IGZhaWxlZCBpbWFnZS5cbisgKlxuKyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXG4rICogYW4gaW1hZ2UgbG9hZGVkIHdoaWxlIEtITyBpcyBkaXNhYmxlZCBjYXJyaWVzIG5vIGhhbmRvdmVyIHN0YXRlLiAgQ2xlYXIgdGhlXG4rICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmdcbisgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcbisgKiBhZmZlY3QgYSBjb2xkIGJvb3QuXG4rICovXG4raW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gpIHtcbitcdFx0ZWZpX2tob191cGRhdGUoMCwgMCwgMCwgMCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxuK1x0XHRcdCAgICAgaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlbWVtLFxuK1x0XHRcdCAgICAgaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlYnVmc3opO1xuK1x0aWYgKGVycilcbitcdFx0cHJfd2FybihcImZhaWxlZCB0byB1cGRhdGUgRUZJIGNvbmZpZyB0YWJsZTogJWRcXG5cIiwgZXJyKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuIFx0XHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuaW5kZXggMGQyYTM0MmVmNDIyOC4uMGQ1Njg5MWIyZjRjOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL2Jsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9raG9fYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiBcbiAvKlxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5AQCAtMCwwICsxLDExIEBAXG4rUUVNVV9FRkk9XCIke1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XCJcbitRRU1VX0NNRD1cInFlbXUtc3lzdGVtLWxvb25nYXJjaDY0IC1NIHZpcnQgLWNwdSBsYTQ2NCAtYmlvcyAkUUVNVV9FRklcIlxuK1FFTVVfS0NPTkZJRz1cIlxuK0NPTkZJR19BQ1BJX1NQQ1JfVEFCTEU9eVxuK0NPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXlcbitDT05GSUdfU0VSSUFMXzgyNTA9eVxuK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXlcbitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15XG4rXCJcbitLRVJORUxfSU1BR0U9XCJ2bWxpbnV4LmVmaVwiXG4rS0VSTkVMX0NNRExJTkU9XCJjb25zb2xlPXR0eVMwIGVhcmx5Y29uXCJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaFxuaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbkBAIC0yMSw3ICsyMSw3IEBAIE9wdGlvbnM6XG4gXHQtZClcdHBhdGggdG8gdGhlIGtlcm5lbCBidWlsZCBkaXJlY3RvcnlcbiBcdC1qKVx0bnVtYmVyIG9mIGpvYnMgZm9yIGNvbXBpbGF0aW9uLCBzaW1pbGFyIHRvIC1qIGluIG1ha2VcbiBcdC10KVx0cnVuIHRlc3QgZm9yIHRhcmdldF9hcmNoLCByZXF1aXJlcyBDUk9TU19DT01QSUxFIHNldFxuLVx0XHRzdXBwb3J0ZWQgdGFyZ2V0czogYWFyY2g2NCwgeDg2XzY0XG4rXHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XG4gXHQtaClcdGRpc3BsYXkgdGhpcyBoZWxwXG4gRU9GXG4gfVxuQEAgLTEyNiw2ICsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHtcbiBcbiBcdGNhc2UgJHRhcmdldCBpblxuIFx0ICAgICBhYXJjaDY0KSBlY2hvIFwiYXJtNjRcIiA7O1xuK1x0ICAgICBsb29uZ2FyY2g2NCkgZWNobyBcImxvb25nYXJjaFwiIDs7XG4gXHQgICAgIHg4Nl82NCkgZWNobyBcIng4NlwiIDs7XG4gXHQgICAgICopIHNraXAgXCJhcmNoaXRlY3R1cmUgJHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkXCJcbiBcdGVzYWNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjI2LjgxNTk1MjgzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzg4NTEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGluIHBsYXkgaXMgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCdsbCBhZmZlY3QgdGhlIHN5c3RlbS4gRmlyc3QsIEknbSBnb2luZyB0byB0YWtlIGEgcmVhbGx5IGNsb3NlIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgZGlmZiBpdHNlbGYg4oCTIHRoYXQncyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBhcmVhczogYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvKmAsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBga2VybmVsL2tleGVjXypgIGZpbGVzLCBhbmQgc29tZSB0ZXN0LXJlbGF0ZWQgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9gLiBUaGF0J3MgYSBwcmV0dHkgYnJvYWQgc2NvcGUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBwcmV0dHkgaW1wb3J0YW50LlxuXG5NeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgYEtFWEVDX0hBTkRPVkVSYCwgYEVGSV9LSE9gLCBhbmQgcmVsYXRlZCBzZXR0aW5ncyBiZWhhdmUuIEFyZSB0aGV5IGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHF1aXJrcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSBnb2luZyB0byBiaXRlIG1lIGxhdGVyPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHg4Nl82NCBhc3BlY3RzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBUbyBkaWcgaW50byB0aGF0LCBJJ20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEtFWEVDX0hBTkRPVkVSYCBpbiB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIGhvdyBpdCdzIHVzZWQgYWNyb3NzIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyOS44OTQ4MDg2OTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwODYwMzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEtFWEVDX0hBTkRPVkVSfEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJ8RUZJX0tITylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE3MDg9Y29uZmlnIEFSQ0hfREVGQVVMVF9LRVhFQ19JTUFHRV9WRVJJRllfU0lHXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTcxMC1cXG5hcmNoL2FybTY0L0tjb25maWc6MTcxMTpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzEyLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Njg1PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNjg3LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6Njg4OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXFx0ZGVmX2Jvb2wgNjRCSVQgXFx1MDAyNlxcdTAwMjYgRUZJX1NUVUJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MTk3OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODAtXFxuYXJjaC94ODYvS2NvbmZpZzoxOTgxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuYXJjaC94ODYvS2NvbmZpZy0xOTgyLVxcdGRlZl9ib29sIFg4Nl82NFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0yOTY9Y29uZmlnIEVGSV9TQkFUX0ZJTEVcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMzE2LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MzE3OmNvbmZpZyBFRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjMyLjYwMzQyMTE1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjQ3NjkwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtFWEVDIEhhbmRvdmVyIGFuZCBFRklfS0hPIG9uIHg4Nl82NCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgS0VYRUNfSEFORE9WRVJgIGFuZCBgRUZJX0tIT2Agc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gZ3Jhc3AgdGhlIHg4Nl82NC1zcGVjaWZpYyBpbXBsaWNhdGlvbnMuIFRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsaXZlIHVwZGF0ZSBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhvc2Ugb3B0aW9ucywgc28gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBga2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ2AuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIGFuZCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZW0gb24geDg2XzY0LiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgY2xlYXJseSBvdXRsaW5lIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFyY2hpdGVjdHVyYWwgcXVpcmtzIGludm9sdmVkIGluIGVpdGhlciBoYW5kb3ZlciBtZWNoYW5pc21zIHdoZW4gZW5hYmxlZCBvbiBhbiB4ODZcXF82NCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTozNS4wMjgxOTE3OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDE2NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVGSV9LSE98S0VYRUNfSEFORE9WRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xOTc4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0pVTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTk4MC1cXG5hcmNoL3g4Ni9LY29uZmlnOjE5ODE6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJcXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODItXFx0ZGVmX2Jvb2wgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz03NzA9c3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3Ni1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3Nzc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzc4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0yNzQ9c3RhdGljIHZvaWQgc2V0dXBfa2hvKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0yODAtXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjI4MTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0zMDE9c2V0dXBfYm9vdF9wYXJhbWV0ZXJzKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTAtXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjM5MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTM5Mi1cXHRcXHQvKiBTZXR1cCBzcGFjZSB0byBzdG9yZSBwcmVzZXJ2YXRpb24gbWV0YWRhdGEgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz00NzU9c3RhdGljIHZvaWQgKmJ6SW1hZ2U2NF9sb2FkKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBjaGFyICprZXJuZWwsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtNTgxLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzo1ODI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtNTgzLVxcdFxcdGtidWYuYnVmc3ogKz0gc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSArXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00NTc9c3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDYyLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2MzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSkge1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2NDpcXHRcXHRwcl93YXJuKFxcXCJQYXNzZWQgS0hPIGRhdGEsIGJ1dCBDT05GSUdfS0VYRUNfSEFORE9WRVIgbm90IHNldC4gSWdub3JpbmcuXFxcXG5cXFwiKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00NjUtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTozNS4xNDkyMTQ3NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAzNjg4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRUZJX0tITyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIHRvIHNlZSBpZiBgRUZJX0tIT2AgaXMgZGlyZWN0bHkgZW5hYmxlZCB0aGVyZS4gTm9wZSwgZG9lc24ndCBzZWVtIHRvIGJlLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSBpdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCwgZGVmYXVsdC1vbiBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpdHNlbGYuIFRoaXMgbWVhbnMgaXQncyBsaWtlbHkgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIHNlbGVjdGluZyBgRUZJX0tIT2AgZnJvbSAqYW55d2hlcmUqIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gaXRzIGRlcGVuZGVuY2llcy4gV2hlcmUncyBpdCBiZWluZyBwdWxsZWQgaW4gZnJvbT8gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6MzcuMzUyOTE2NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDczMjUzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0LipFRklfS0hPfEVGSV9LSE9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz02ODg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTY4OS1cXHRkZWZfYm9vbCA2NEJJVCBcXHUwMDI2XFx1MDAyNiBFRklfU1RVQlxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NjkwOlxcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02OTEtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTI5Nj1jb25maWcgRUZJX1NCQVRfRklMRVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTYtXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzozMTc6Y29uZmlnIEVGSV9LSE9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxOC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGluaXRyZCA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjctc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGVmaV9raG9fdGFibGVfcGh5cyA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02MjQ9c3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTYzNS1cXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcXHRcXHUwMDI2bWVtX3Jlc2VydmUsXFx0XFx0XFxcIk1FTVJFU0VSVkVcXFwiXFx0fSxcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo2MzY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjM3LVxcdHtMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCxcXHRcXHRcXHUwMDI2ZWZpX2tob190YWJsZV9waHlzLFxcdFxcXCJLSE9cXFwiXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTcxNj1pbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTgxNS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo4MTY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE3LVxcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9MTIwND1lYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTEyMDUtXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTIwNjojaWZkZWYgQ09ORklHX0VGSV9LSE9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMjA3LXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICplZmlfa2hvX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYz0xMDM9c3RhdGljIHZvaWQgaW5zdGFsbF9raG9fdGFibGUodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA0LXtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM6MTA1OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYy0xMDYtXFx0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjc1PXZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzYtXFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjc3OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI3OC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo0MC4xNjAyNDg4MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgxMTU4MTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXhlYyBIYW5kb3ZlciBQYXRjaCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgRUZJX0tIT2AsIGFuZCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBFRklfS0hPYCBpcyBhIHZlcnkgc3BlY2lmaWMgb3B0aW9uLCBzZWxlY3RlZCBvbmx5IGlmIGBFRklfU1RVQmAsIGBFRklfR0VORVJJQ19TVFVCYCwgYW5kIGBLRVhFQ19IQU5ET1ZFUmAgYXJlIGVuYWJsZWQsIHdpdGggZnVydGhlciBjb25zdHJhaW50cyBmcm9tIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBUaGUga2V5IGhlcmUgaXMgaXRzIGxhY2sgb2YgYSBkaXJlY3QgcHJvbXB0LiBJdCdzICpvbmx5KiBzZWxlY3RhYmxlIGJ5IG90aGVyIG9wdGlvbnMuXG5cbk15IGludmVzdGlnYXRpb24gbGVkIG1lIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCwgd2hpY2ggZGVmaW5lcyBgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUmAgYW5kICpzZWxlY3RzKiBgRUZJX0tIT2AgKmlmKiBgS0VYRUNfSEFORE9WRVJgIGlzIGFsc28gc2VsZWN0ZWQuIEJpbmdvISBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgdmVyeSB0YXJnZXRlZCB1c2UgY2FzZSBmb3IgYXJjaGl0ZWN0dXJlcyBib290aW5nIHZpYSBFRkkgKndpdGhvdXQqIGEgZGV2aWNlIHRyZWUgKEZEVCksIGFzIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBoZWxwIHRleHQuXG5cbkkgcHJvY2VlZGVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGFsbCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzOlxuXG4xLiAgTW9kaWZpZWQgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgXG4yLiAgQWRkZWQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdgIGFuZCBgY29uZmlnIEVGSV9LSE9gXG4zLiAgQ2hhbmdlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNgLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgZWZpX2tob190YWJsZV9waHlzYCwgdGFibGUgZW50cmllcywgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gIGJsb2NrLlxuNC4gIFVwZGF0ZXMgdG8gYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY2AsIHNwZWNpZmljYWxseSBgaW5zdGFsbF9raG9fdGFibGVgLCBhbHNvIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC5cbjUuICBNb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGFgIGFuZCBhIGRlY2xhcmF0aW9uL3N0dWIgZm9yIGBlZmlfa2hvX3VwZGF0ZWBcbjYuICBVcGRhdGVzIGluIGBrZXJuZWwvY3Jhc2hfY29yZS5jYCBhbmQgYGtlcm5lbC9rZXhlY19jb3JlLmNgIGluY2x1ZGluZyBjYWxscyB0byBga2hvX3N5bmNfY2hhbm5lbGAsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBoYW5kb3Zlci5cbjcuICBUaGUgYWRkaXRpb24gb2YgYGtob19zeW5jX2NoYW5uZWxgIHdpdGhpbiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIHdoaWNoIGNhbGxzIGBlZmlfa2hvX3VwZGF0ZWAuXG44LiAgRGVjbGFyYXRpb24gb2YgYGtob19zeW5jX2NoYW5uZWwoKWAgLyBzdHViIHdoZW4gYCFDT05GSUdfS0VYRUNfSEFORE9WRVJgIGluIGBrZXJuZWwva2V4ZWNfaW50ZXJuYWwuaGBcbjkuICBBZGRpdGlvbiBvZiBgI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZWAgaW4gYGtlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jYFxuMTAuIFNlbGZ0ZXN0L3NjcmlwdCBjaGFuZ2VzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vLi4uYFxuXG5JIG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgKmFueSogb2YgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbWQ2NC4gSSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0VGSV9LSE9gIGNhbiAqKm5ldmVyKiogYmUgZW5hYmxlZCBvbiBhbWQ2NCwgYmVjYXVzZSBMb29uZ0FyY2gncyBLY29uZmlnIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGNhbiBiZSBzZWxlY3RlZC4gSSB0aGVuIGNoZWNrZWQgYGdyZXBwZXJgIGFuZCBjb25maXJtZWQgbm90aGluZyBlbHNlIGluIHRoZSBrZXJuZWwgdHJlZSBzZWxlY3RlZCBvciBtZW50aW9uZWQgYENPTkZJR19FRklfS0hPYC4gVGhpcyBpcyBjcml0aWNhbC4gT24gYW1kNjQsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCBhY3RpdmF0ZWQuXG5cbkkgZHJpbGxlZCBkb3duIGZ1cnRoZXIsIGV4YW1pbmluZyB0aGUgYmVoYXZpb3Igb2YgYGtob19zeW5jX2NoYW5uZWxgIG9uIGFtZDY0LiBJIHNlZSB0aGF0IGV2ZW4gaWYgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgKmlzKiBlbmFibGVkIG9uIGFtZDY0LCBga2hvX3N5bmNfY2hhbm5lbGAgY2FsbHMgYGVmaV9raG9fdXBkYXRlKClgLiBIb3dldmVyLCBzaW5jZSBgQ09ORklHX0VGSV9LSE9gIGlzICpub3QqIGRlZmluZWQgb24gYW1kNjQsIGBlZmlfa2hvX3VwZGF0ZSgpYCBpcyBqdXN0IGFuICppbmxpbmUqIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAwLiBTbyB0aGUgZnVuY3Rpb24gY2FsbCBiZWNvbWVzIGEgbm8tb3AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBraG9fc3luY19jaGFubmVsYC4gSW4gc3VtbWFyeSwgZXZlbiB3aXRoIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGVuYWJsZWQsIEtITyBvbiBhbWQ2NCBib2lscyBkb3duIHRvIGEgdHJpdmlhbCBuby1vcC5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgd2F5cyBrZXhlYyBoYW5kb3ZlciB3b3JrcywgZS5nLiBvbiB4ODYsIHdoaWNoLCBhcyBJIHN1c3BlY3RlZCwgdXNlcyBgc2V0dXBfZGF0YWAgKHNwZWNpZmljYWxseSBgU0VUVVBfS0hPX01FTWApLCBhbmQgbm90IEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy5cblxuTm93LCBsZXQncyBjb25uZWN0IGFsbCB0aGUgZG90cyBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nOlxuKiAgIFRoZSBmdW5kYW1lbnRhbCBsb2dpYyBmb3IgRUZJLWJhc2VkIEtITyB0YWJsZSBoYW5kbGluZyBpcyBlbnRpcmVseSBnYXRlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC4gVGhpcyBndWFyZCBpcyAqb25seSogZW5hYmxlZCBmb3IgTG9vbmdBcmNoLlxuKiAgIFRoZSBmdW5jdGlvbnMgYWRkZWQgaW4gYGRyaXZlcnMvZmlybXdhcmUvZWZpL2AgYXJlICpub3QqIGNvbXBpbGVkIGZvciBhbWQ2NC5cbiogICBUaGUgaW5jbHVzaW9uIG9mIGAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlYCBpcyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZSBhbmQsIHRodXMsIGlycmVsZXZhbnQgdG8gZnV6emluZy5cbiogICBUaGUgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgYXJlIHVzZXItc3BhY2UgdGVzdHMuXG4qICBga2hvX3N5bmNfY2hhbm5lbGBcblxuIiwiSW5wdXRUb2tlbnMiOjExOTY4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo1My45NzE4MzM0OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA2MDpcXHRcXHRpZiAoZXJyKVxcbjIwNjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMDYyOlxcdFxcdGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaCA9IFxcdTAwMjZpbWFnZS1cXHUwMDNlc2VnbWVudFtpbWFnZS1cXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0cmV0dXJuIDA7XFxuMjA2NTpcXHR9XFxuMjA2NjpcXHRcXG4yMDY3OlxcdC8qXFxuMjA2ODpcXHQgKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIHRoYXQgaXMgYWJvdXQgdG8gYmVcXG4yMDY5OlxcdCAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXFxuMjA3MDpcXHQgKiBzZXBhcmF0ZSBpbWFnZXMgZm9yIGEgbm9ybWFsIHJlYm9vdCBhbmQgZm9yIGNyYXNoLiAgV3JpdGUgdGhlIHN0YXRlIG9mIHRoZVxcbjIwNzE6XFx0ICogc2VsZWN0ZWQgaW1hZ2UgaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGV4ZWN1dGVkLCByYXRoZXIgdGhhbiB3aGlsZSBhXFxuMjA3MjpcXHQgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXFxuMjA3MzpcXHQgKiBjaGFubmVsIHBvaW50aW5nIGF0IHRoYXQgZmFpbGVkIGltYWdlLlxcbjIwNzQ6XFx0ICpcXG4yMDc1OlxcdCAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXFxuMjA3NjpcXHQgKiBhbiBpbWFnZSBsb2FkZWQgd2hpbGUgS0hPIGlzIGRpc2FibGVkIGNhcnJpZXMgbm8gaGFuZG92ZXIgc3RhdGUuICBDbGVhciB0aGVcXG4yMDc3OlxcdCAqIGNoYW5uZWwgZm9yIHRob3NlIGltYWdlcyBzbyB0aGUgbmV4dCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkIG9mIHJldml2aW5nXFxuMjA3ODpcXHQgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcXG4yMDc5OlxcdCAqIGFmZmVjdCBhIGNvbGQgYm9vdC5cXG4yMDgwOlxcdCAqL1xcbjIwODE6XFx0aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuMjA4MjpcXHR7XFxuMjA4MzpcXHRcXHRpbnQgZXJyO1xcbjIwODQ6XFx0XFxuMjA4NTpcXHRcXHRpZiAoIWltYWdlLVxcdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gpIHtcXG4yMDg2OlxcdFxcdFxcdGVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApO1xcbjIwODc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4ODpcXHRcXHR9XFxuMjA4OTpcXHRcXG4yMDkwOlxcdFxcdGVyciA9IGVmaV9raG9fdXBkYXRlKGltYWdlLVxcdTAwM2VraG8uZmR0LCBQQUdFX1NJWkUsXFxuMjA5MTpcXHRcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlbWVtLFxcbjIwOTI6XFx0XFx0XFx0XFx0ICAgICBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZWJ1ZnN6KTtcXG4yMDkzOlxcdFxcdGlmIChlcnIpXFxuMjA5NDpcXHRcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gdXBkYXRlIEVGSSBjb25maWcgdGFibGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwOTc6XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRzdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4yMTAwOlxcdFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4yMTAxOlxcdHtcXG4yMTAyOlxcdFxcdGludCByZXQgPSAwO1xcbjIxMDM6XFx0XFx0aW50IGk7XFxuMjEwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6NTMuOTcyMDAyNTgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTQ0MjI0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0hPIFBhdGNoIG9uIGFtZDY0KipcblxuT2theSwgSSd2ZSBnb3QgdGhpcy4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc3VwcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIsIG9yIEtITywgc3BlY2lmaWNhbGx5IGZvciBMb29uZ0FyY2guIFRoZSBpbXBvcnRhbnQgYml0IGhlcmUgaXMgYENPTkZJR19FRklfS0hPYCwgYW5kIEkgc2VlIHRoYXQgaXQncyB0aWdodGx5IGJvdW5kIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0J3MgZGVzaWduZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJICp3aXRob3V0KiBhIGRldmljZSB0cmVlLCBzbyBpdCdzIG5vdCByZWxldmFudCB0byBteSB0eXBpY2FsIGFtZDY0IHNldHVwLlxuXG5Mb29raW5nIGNsb3NlciBhdCB0aGUgYW1kNjQgc2lkZSwgYXMgSSBzdXNwZWN0ZWQsIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBFRkkgS0hPIGlzIGRlYWQgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9gIGlzIGNvbXBsZXRlbHkgYCNpZmRlZiBDT05GSUdfRUZJX0tIT2BkIG91dC4gYGVmaV9raG9fdXBkYXRlYCBpcyBqdXN0IGEgbm8tb3Agc3R1YiwganVzdCByZXR1cm5pbmcgemVybywgYW5kIGBraG9fc3luY19jaGFubmVsKClgIGRvZXNuJ3QgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBvbiBhbWQ2NC4gRXZlbiB0aGUgdGVzdCBzY3JpcHRzIGFyZSB1c2VyLXNwYWNlIHN0dWZmLCBzbyBJIGRvbid0IHNlZSBhbnkgZXhwb3NlZCBrZXJuZWwgZW50cnkgcG9pbnRzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLiBJIGNhbid0IGZpbmQgYW55dGhpbmcgdXNlZnVsIGhlcmUuXG5cblNvLCBsZXQncyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuIEkgbmVlZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgc3BlY2lmaWNhbGx5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKExvb25nQXJjaCkuIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBzdWJzdGFudGl2ZSBFRkkgS0hPIGxvZ2ljIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhIG5vLW9wIGlubGluZSByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBjb25zaXN0IG9mIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1ZGUuXCJcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKG5vdGhpbmcgdG8gZW5hYmxlKVxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChub3RoaW5nIHJlbGV2YW50IHRvIGZvY3VzIG9uKVxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDIwLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjU4LjAyNjQyNzcwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgdGFyZ2V0ZWQgYXQgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBkZXZpY2UgdHJlZSAoc3VjaCBhcyBMb29uZ0FyY2gpLiBUaGUgbmV3IGNvbmZpZyBDT05GSUdfRUZJX0tITyBpcyBvbmx5IHNlbGVjdGVkIGJ5IGFyY2gvbG9vbmdhcmNoL0tjb25maWcgYW5kIGNhbm5vdCBiZSBlbmFibGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIE9uIGFtZDY0LCBhbGwgRUZJIEtITyBsb2dpYyBpbiB0aGUgRUZJIGRyaXZlcnMgYW5kIGxpYnN0dWIgaXMgY29tcGlsZWQgb3V0LCBlZmlfa2hvX3VwZGF0ZSgpIGlzIGFuIGlubGluZSBuby1vcCByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBhcmUgc2VsZnRlc3Qgc2NyaXB0cyBhbmQgYSBoZWFkZXIgaW5jbHVzaW9uLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgZm9yIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo1OC4wMjY0NTQwNjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwdgk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 19:19:05 +0000 UTC FinishedAt: 2026-09-05 19:21:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGEyMWY1MWU1ODE1ZTkuLjVlYWE2NTU3OGQ1OGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtNjg1LDYgJiM0Mzs2ODUsMTAgQEAgY29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNcbiBjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4gXHRkZWZfYm9vbCA2NEJJVFxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuJiM0MztcdGRlZl9ib29sIDY0QklUIFx1MDAyNlx1MDAyNiBFRklfU1RVQlxuJiM0MztcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXG4mIzQzO1xuIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcdGRlcGVuZHMgb24gS0VYRUNfRklMRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTMxNCw2ICYjNDM7MzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFXG4gXG4gXHQgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuXG4gXG4mIzQzO2NvbmZpZyBFRklfS0hPXG4mIzQzO1x0Ym9vbFxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IEVGSV9HRU5FUklDX1NUVUIgXHUwMDI2XHUwMDI2IEtFWEVDX0hBTkRPVkVSXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cbiYjNDM7XHQgIG9uZSBrZXJuZWwgdG8gdGhlIG5leHQgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZVxuJiM0MztcdCAgZW50cnkgdW5kZXIgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXRcbiYjNDM7XHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXG4mIzQzO1xuJiM0MztcdCAgQXJjaGl0ZWN0dXJlcyB3aXRoIGEgYm9vdCBGRFQgKGFybTY0LCByaXNjdikgdXNlIHRoZSAvY2hvc2VuIEZEVFxuJiM0MztcdCAgcGF0aCBpbnN0ZWFkIGFuZCBkbyBub3Qgc2VsZWN0IHRoaXMuXG4mIzQzO1xuIGVuZG1lbnVcbiBcbiBjb25maWcgVUVGSV9DUEVSXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggMDMyN2EzOWQzMWZhNS4uNjM4MGNmYWIxNDkzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdHJkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG5AQCAtNjIsNiAmIzQzOzYzLDkgQEAgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgZWZpX3JuZ19zZWVkID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbV9yZXNlcnZlID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJ0X3Byb3AgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgaW5pdHJkID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuJiM0MzsjZW5kaWZcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcmltYXJ5X2Rpc3BsYXlfdGFibGU7XG4gXG5AQCAtNjI5LDYgJiM0Mzs2MzMsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuIFx0e0VGSV9UQ0cyX0ZJTkFMX0VWRU5UU19UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnRwbV9maW5hbF9sb2csXHRcJiMzNDtUUE1GaW5hbExvZ1wmIzM0O1x0fSxcbiBcdHtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudHBtX2ZpbmFsX2xvZyxcdFwmIzM0O0NDRmluYWxMb2dcJiMzNDtcdH0sXG4gXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcJiMzNDtNRU1SRVNFUlZFXCYjMzQ7XHR9LFxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE9cbiYjNDM7XHR7TElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsXHRcdFx1MDAyNmVmaV9raG9fdGFibGVfcGh5cyxcdFwmIzM0O0tIT1wmIzM0O1x0XHR9LFxuJiM0MzsjZW5kaWZcbiBcdHtMSU5VWF9FRklfSU5JVFJEX01FRElBX0dVSUQsXHRcdFx1MDAyNmluaXRyZCxcdFx0XCYjMzQ7SU5JVFJEXCYjMzQ7XHR9LFxuIFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXHRcdFx1MDAyNnJ0X3Byb3AsXHRcdFwmIzM0O1JUUFJPUFwmIzM0O1x0fSxcbiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HXG5AQCAtODA2LDYgJiM0Mzs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzO1x0aWYgKGVmaV9raG9fdGFibGVfcGh5cyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlc2VydmUgdGhlIHN0dWItYWxsb2NhdGVkIHRhYmxlIHNvIGl0IGlzIG5laXRoZXIgaGFuZGVkXG4mIzQzO1x0XHQgKiBvdXQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvciBub3IgcGxhY2VkIG9uIGJ5IGtleGVjXG4mIzQzO1x0XHQgKiBzZWdtZW50cywgbWlycm9yaW5nIHRoZSBtZW1yZXNlcnZlIGhhbmRsaW5nIGFib3ZlLiAgVGhpc1xuJiM0MztcdFx0ICogcnVucyBvbiBldmVyeSBib290LCBzbyBpdCBhbHNvIHByb3RlY3RzIHRoZSB0YWJsZSBpbiB0aGVcbiYjNDM7XHRcdCAqIG5leHQga2VybmVsIHVudGlsIGl0IHJlYWRzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZW1ibG9ja19yZXNlcnZlKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCpraG8pKTtcbiYjNDM7XG4mIzQzO1x0XHRraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XG4mIzQzO1x0XHRpZiAoa2hvKSB7XG4mIzQzO1x0XHRcdGlmIChraG8tXHUwMDNlZmR0X2FkZHIpXG4mIzQzO1x0XHRcdFx0a2hvX3BvcHVsYXRlKChwaHlzX2FkZHJfdClraG8tXHUwMDNlZmR0X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VmZHRfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgKHBoeXNfYWRkcl90KWtoby1cdTAwM2VzY3JhdGNoX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VzY3JhdGNoX3NpemUpO1xuJiM0MztcdFx0XHRlYXJseV9tZW11bm1hcChraG8sIHNpemVvZigqa2hvKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAocnRfcHJvcCAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4gXHRcdGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnRibDtcbiBcbkBAIC0xMTcxLDYgJiM0MzsxMjAzLDUyIEBAIHN0YXRpYyBpbnQgX19pbml0IGVmaV9tZW1yZXNlcnZlX3Jvb3RfaW5pdCh2b2lkKVxuIH1cbiBlYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE9cbiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmVmaV9raG9fdGFibGUgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgZWZpX2tob190YWJsZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZWZpX2tob190YWJsZV9waHlzID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIGEgcGVyc2lzdGVudCBtYXBwaW5nIG9mIHRoZSB0YWJsZSwgdGhlIHNhbWUgd2F5XG4mIzQzO1x0ICogZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KCkga2VlcHMgdGhlIG1lbXJlc2VydmUgcm9vdCBtYXBwZWQ6XG4mIzQzO1x0ICogZWZpX2tob191cGRhdGUoKSBpcyBhbHNvIGNhbGxlZCBvbiB0aGUgY3Jhc2gga2V4ZWMgcGF0aCwgd2hlcmVcbiYjNDM7XHQgKiBtZW1yZW1hcCgpIGlzIG5vIGxvbmdlciBhbiBvcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZWZpX2tob190YWJsZSA9IG1lbXJlbWFwKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCplZmlfa2hvX3RhYmxlKSxcbiYjNDM7XHRcdFx0XHQgTUVNUkVNQVBfV0IpO1xuJiM0MztcdFdBUk5fT05fT05DRSghZWZpX2tob190YWJsZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO2Vhcmx5X2luaXRjYWxsKGVmaV9raG9fdGFibGVfaW5pdCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBVcGRhdGUgdGhlIEtITyBjb25maWcgdGFibGUgaW4gcGxhY2UgYmVmb3JlIGEga2V4ZWMsIHNvIHRoZSBuZXh0IGtlcm5lbFxuJiM0MzsgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcbiYjNDM7ICogdGhlIGNvbmZpZyB0YWJsZSBlbnRyeSB3YXMgaW5zdGFsbGVkIG9uY2UgYnkgdGhlIEVGSSBzdHViIGFuZCBpcyBpbmhlcml0ZWRcbiYjNDM7ICogYWNyb3NzIGtleGVjLCBzbyBvbmx5IHRoZSB0YWJsZSBjb250ZW50cyBhcmUgcmV3cml0dGVuIGhlcmUgLS0gdGhlIGNvbmZpZ1xuJiM0MzsgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cdTAwM2V0YWJsZXMgaXMgbmV2ZXIgc3dpdGNoZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSxcbiYjNDM7XHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobyA9IGVmaV9raG9fdGFibGU7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGtoby1cdTAwM2VmZHRfYWRkclx0XHQ9IGZkdF9hZGRyO1xuJiM0MztcdGtoby1cdTAwM2VmZHRfc2l6ZVx0XHQ9IGZkdF9zaXplO1xuJiM0MztcdGtoby1cdTAwM2VzY3JhdGNoX2FkZHJcdD0gc2NyYXRjaF9hZGRyO1xuJiM0MztcdGtoby1cdTAwM2VzY3JhdGNoX3NpemVcdD0gc2NyYXRjaF9zaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LRVhFQ1xuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTEwMCw2ICYjNDM7MTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKVxuIFx0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIG1lbXJlc2VydmUgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobztcbiYjNDM7XHRlZmlfZ3VpZF90IGtob190YWJsZV9ndWlkID0gTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQ7XG4mIzQzO1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0xPQURFUl9EQVRBLCBzaXplb2YoKmtobyksXG4mIzQzO1x0XHRcdCAgICAgKHZvaWQgKiopXHUwMDI2a2hvKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqa2hvID0gKHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEpe307XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSwgXHUwMDI2a2hvX3RhYmxlX2d1aWQsXG4mIzQzO1x0XHRcdCAgICAga2hvKTtcbiYjNDM7XHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBLSE8gY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgZ2V0X3N1cHBvcnRlZF9ydF9zZXJ2aWNlcyh2b2lkKVxuIHtcbiBcdGNvbnN0IGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnJ0X3Byb3BfdGFibGU7XG5AQCAtMTgwLDYgJiM0MzsyMDMsOCBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbiBcbiYjNDM7XHRpbnN0YWxsX2tob190YWJsZSgpO1xuJiM0MztcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG4gXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBhYTE1ZmY4ODUzOWJkLi41NjRiM2NiZDVjY2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTQyMiw2ICYjNDM7NDIyLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4mIzQzOyNkZWZpbmUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSURcdFx0RUZJX0dVSUQoMHhjOTQxYjZjNywgMHg3YjNmLCAweDRhZjYsICAweDllLCAweDUwLCAweGZjLCAweGIzLCAweGE4LCAweDg2LCAweDhhLCAweDE3KVxuIFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFx0XHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXG4gXG5AQCAtMTI3Myw2ICYjNDM7MTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuIFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLlxuJiM0MzsgKiBJdCBjYXJyaWVzIHRoZSBrZXhlYyBoYW5kb3ZlciAoS0hPKSBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IGtlcm5lbCB0byB0aGVcbiYjNDM7ICogbmV4dCBvbmU6IHRoZSBhZGRyZXNzZXMgb2YgdGhlIEtITyBzdGF0ZSBGRFQgYW5kIG9mIHRoZSBzY3JhdGNoIGFyZWEuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgdGhlIGhhbmRvdmVyIGNoYW5uZWwgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJXG4mIzQzOyAqIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSAoZS5nLiBMb29uZ0FyY2gpLCB3aGVyZSB0aGUgL2Nob3NlbiBsaW51eCxraG8tZmR0XG4mIzQzOyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90XG4mIzQzOyAqIGF2YWlsYWJsZS4gIFRoZSBFRkkgc3R1YiBhbGxvY2F0ZXMgYW5kIGluc3RhbGxzIHRoZSB0YWJsZSBvbmNlIGF0IGJvb3Q7XG4mIzQzOyAqIHRoZSBjdXJyZW50IGtlcm5lbCB1cGRhdGVzIGl0cyBjb250ZW50cyBiZWZvcmUgYSBrZXhlYywgYW5kIHRoZSBuZXh0XG4mIzQzOyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxheW91dCBpcyBhbiBBQkkgYmV0d2VlbiB0aGUgdHdvIGtlcm5lbHMgYW5kIGNhcnJpZXMgbm8gdmVyc2lvblxuJiM0MzsgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWRcbiYjNDM7ICogaXRzZWxmIGlzIHZlcnNpb25lZCBzZXBhcmF0ZWx5IGJ5IHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgS0hPIHN0YXRlXG4mIzQzOyAqIEZEVCwgd2hpY2gga2hvX3BvcHVsYXRlKCkgY2hlY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSB7XG4mIzQzO1x0dTY0IGZkdF9hZGRyO1xuJiM0MztcdHU2NCBmZHRfc2l6ZTtcbiYjNDM7XHR1NjQgc2NyYXRjaF9hZGRyO1xuJiM0MztcdHU2NCBzY3JhdGNoX3NpemU7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSxcbiYjNDM7XHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4mIzQzO1x0XHRcdFx0IHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqIFRoZSBMSU5VWF9FRklfTU9LX1ZBUklBQkxFX1RBQkxFX0dVSUQgY29uZmlnIHRhYmxlIGNhbiBiZSBwcm92aWRlZFxuICAqIHRvIHRoZSBrZXJuZWwgYnkgYW4gRUZJIGJvb3QgbG9hZGVyLiBUaGUgdGFibGUgY29udGFpbnMgYSBwYWNrZWRcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uNjE2NmNlNDIwM2QzYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0xMzgsNiAmIzQzOzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHtcbiBcdFx0XHRzdHJ1Y3QgcHRfcmVncyBmaXhlZF9yZWdzO1xuIFxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIGNyYXNoIGltYWdlIGNhcnJpZXMgbm8gS0hPIHN0YXRlOiBjbGVhciB0aGVcbiYjNDM7XHRcdFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXG4mIzQzO1x0XHRcdCAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcbiYjNDM7XG4gXHRcdFx0Y3Jhc2hfc2V0dXBfcmVncyhcdTAwMjZmaXhlZF9yZWdzLCByZWdzKTtcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi4xNDdmNWI1YjIzZDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTExNDYsNiAmIzQzOzExNDYsMTEgQEAgaW50IGtlcm5lbF9rZXhlYyh2b2lkKVxuIFx0XHRnb3RvIFVubG9jaztcbiBcdH1cbiBcbiYjNDM7XHQvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqL1xuJiM0MztcdGVycm9yID0ga2hvX3N5bmNfY2hhbm5lbChrZXhlY19pbWFnZSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBVbmxvY2s7XG4mIzQzO1xuIFx0aWYgKCFrZXhlY19pbWFnZS1cdTAwM2VwcmVzZXJ2ZV9jb250ZXh0KSB7XG4gXHRcdGVycm9yID0gbGl2ZXVwZGF0ZV9yZWJvb3QoKTtcbiBcdFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcbmluZGV4IDIyOGJiODhjMDE4YmMuLjRkNGMyMjkwZTg1YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcbkBAIC00Niw2ICYjNDM7NDYsNyBAQCBzdHJ1Y3Qga2V4ZWNfYnVmO1xuIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0aW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpO1xuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpO1xuJiM0MztpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0XHQgICAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbkBAIC01NCw1ICYjNDM7NTUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li5iNjAwOGMwMTUyNWQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY291bnRfemVyb3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2thc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuQEAgLTIwNjMsNiAmIzQzOzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU3luY2hyb25pemUgdGhlIGhhbmRvdmVyIHRyYW5zcG9ydCB3aXRoIHRoZSBpbWFnZSB0aGF0IGlzIGFib3V0IHRvIGJlXG4mIzQzOyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXG4mIzQzOyAqIHNlcGFyYXRlIGltYWdlcyBmb3IgYSBub3JtYWwgcmVib290IGFuZCBmb3IgY3Jhc2guICBXcml0ZSB0aGUgc3RhdGUgb2YgdGhlXG4mIzQzOyAqIHNlbGVjdGVkIGltYWdlIGltbWVkaWF0ZWx5IGJlZm9yZSBpdCBpcyBleGVjdXRlZCwgcmF0aGVyIHRoYW4gd2hpbGUgYVxuJiM0MzsgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXG4mIzQzOyAqIGNoYW5uZWwgcG9pbnRpbmcgYXQgdGhhdCBmYWlsZWQgaW1hZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXG4mIzQzOyAqIGFuIGltYWdlIGxvYWRlZCB3aGlsZSBLSE8gaXMgZGlzYWJsZWQgY2FycmllcyBubyBoYW5kb3ZlciBzdGF0ZS4gIENsZWFyIHRoZVxuJiM0MzsgKiBjaGFubmVsIGZvciB0aG9zZSBpbWFnZXMgc28gdGhlIG5leHQga2VybmVsIGJvb3RzIGNvbGQgaW5zdGVhZCBvZiByZXZpdmluZ1xuJiM0MzsgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcbiYjNDM7ICogYWZmZWN0IGEgY29sZCBib290LlxuJiM0MzsgKi9cbiYjNDM7aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKSB7XG4mIzQzO1x0XHRlZmlfa2hvX3VwZGF0ZSgwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbSxcbiYjNDM7XHRcdFx0ICAgICBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VidWZzeik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdFx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jIGIva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNcbmluZGV4IDBkMmEzNDJlZjQyMjguLjBkNTY4OTFiMmY0YzggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tob19ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiBcbiAvKlxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MztRRU1VX0VGST1cJiMzNDske1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XCYjMzQ7XG4mIzQzO1FFTVVfQ01EPVwmIzM0O3FlbXUtc3lzdGVtLWxvb25nYXJjaDY0IC1NIHZpcnQgLWNwdSBsYTQ2NCAtYmlvcyAkUUVNVV9FRklcJiMzNDtcbiYjNDM7UUVNVV9LQ09ORklHPVwmIzM0O1xuJiM0MztDT05GSUdfQUNQSV9TUENSX1RBQkxFPXlcbiYjNDM7Q09ORklHX1BDSV9IT1NUX0dFTkVSSUM9eVxuJiM0MztDT05GSUdfU0VSSUFMXzgyNTA9eVxuJiM0MztDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15XG4mIzQzO0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXlcbiYjNDM7XCYjMzQ7XG4mIzQzO0tFUk5FTF9JTUFHRT1cJiMzNDt2bWxpbnV4LmVmaVwmIzM0O1xuJiM0MztLRVJORUxfQ01ETElORT1cJiMzNDtjb25zb2xlPXR0eVMwIGVhcmx5Y29uXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbmluZGV4IDAwMTRiZDc2ZTg4ZGUuLmQwNWJhMDczNGIyNTkgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXG5AQCAtMjEsNyAmIzQzOzIxLDcgQEAgT3B0aW9uczpcbiBcdC1kKVx0cGF0aCB0byB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeVxuIFx0LWopXHRudW1iZXIgb2Ygam9icyBmb3IgY29tcGlsYXRpb24sIHNpbWlsYXIgdG8gLWogaW4gbWFrZVxuIFx0LXQpXHRydW4gdGVzdCBmb3IgdGFyZ2V0X2FyY2gsIHJlcXVpcmVzIENST1NTX0NPTVBJTEUgc2V0XG4tXHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCB4ODZfNjRcbiYjNDM7XHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XG4gXHQtaClcdGRpc3BsYXkgdGhpcyBoZWxwXG4gRU9GXG4gfVxuQEAgLTEyNiw2ICYjNDM7MTI2LDcgQEAgZnVuY3Rpb24gdGFyZ2V0X3RvX2FyY2goKSB7XG4gXG4gXHRjYXNlICR0YXJnZXQgaW5cbiBcdCAgICAgYWFyY2g2NCkgZWNobyBcJiMzNDthcm02NFwmIzM0OyA7O1xuJiM0MztcdCAgICAgbG9vbmdhcmNoNjQpIGVjaG8gXCYjMzQ7bG9vbmdhcmNoXCYjMzQ7IDs7XG4gXHQgICAgIHg4Nl82NCkgZWNobyBcJiMzNDt4ODZcJiMzNDsgOztcbiBcdCAgICAgKikgc2tpcCBcJiMzNDthcmNoaXRlY3R1cmUgJHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7XG4gXHRlc2FjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwppbmRleCBhMjFmNTFlNTgxNWU5Li41ZWFhNjU1NzhkNThlIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKQEAgLTY4NSw2ICYjNDM7Njg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDCiBjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFCiAJZGVmX2Jvb2wgNjRCSVQKIAomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSCiYjNDM7CWRlZl9ib29sIDY0QklUICZhbXA7JmFtcDsgRUZJX1NUVUIKJiM0MzsJc2VsZWN0IEVGSV9LSE8gaWYgS0VYRUNfSEFORE9WRVIKJiM0MzsKIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRQogCWRlZl9ib29sIDY0QklUCiAJZGVwZW5kcyBvbiBLRVhFQ19GSUxFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTMxNCw2ICYjNDM7MzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFCiAKIAkgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuCiAKJiM0Mztjb25maWcgRUZJX0tITwomIzQzOwlib29sCiYjNDM7CWRlcGVuZHMgb24gRUZJX1NUVUIgJmFtcDsmYW1wOyBFRklfR0VORVJJQ19TVFVCICZhbXA7JmFtcDsgS0VYRUNfSEFORE9WRVIKJiM0MzsJaGVscAomIzQzOwkgIENhcnJ5IHRoZSBLSE8gc3RhdGUgKHRoZSBLSE8gc3RhdGUgRkRUIGFuZCB0aGUgc2NyYXRjaCBhcmVhKSBmcm9tCiYjNDM7CSAgb25lIGtlcm5lbCB0byB0aGUgbmV4dCBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlCiYjNDM7CSAgZW50cnkgdW5kZXIgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQKJiM0MzsJICBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgYSBkZXZpY2UgdHJlZSAoZS5nLiBMb29uZ0FyY2gpLgomIzQzOwomIzQzOwkgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFQKJiM0MzsJICBwYXRoIGluc3RlYWQgYW5kIGRvIG5vdCBzZWxlY3QgdGhpcy4KJiM0MzsKIGVuZG1lbnUKIAogY29uZmlnIFVFRklfQ1BFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCAwMzI3YTM5ZDMxZmE1Li42MzgwY2ZhYjE0OTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0cmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmFuZG9tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CkBAIC02Miw2ICYjNDM7NjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtZW1fcmVzZXJ2ZSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJ0X3Byb3AgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwomIzQzOyNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcmltYXJ5X2Rpc3BsYXlfdGFibGU7CiAKQEAgLTYyOSw2ICYjNDM7NjMzLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHsKIAl7RUZJX1RDRzJfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnRwbV9maW5hbF9sb2csCSYjMzQ7VFBNRmluYWxMb2cmIzM0Owl9LAogCXtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsCSZhbXA7ZWZpLnRwbV9maW5hbF9sb2csCSYjMzQ7Q0NGaW5hbExvZyYjMzQ7CX0sCiAJe0xJTlVYX0VGSV9NRU1SRVNFUlZFX1RBQkxFX0dVSUQsCSZhbXA7bWVtX3Jlc2VydmUsCQkmIzM0O01FTVJFU0VSVkUmIzM0Owl9LAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzOwl7TElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQsCQkmYW1wO2VmaV9raG9fdGFibGVfcGh5cywJJiMzNDtLSE8mIzM0OwkJfSwKJiM0MzsjZW5kaWYKIAl7TElOVVhfRUZJX0lOSVRSRF9NRURJQV9HVUlELAkJJmFtcDtpbml0cmQsCQkmIzM0O0lOSVRSRCYjMzQ7CX0sCiAJe0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsCQkmYW1wO3J0X3Byb3AsCQkmIzM0O1JUUFJPUCYjMzQ7CX0sCiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HCkBAIC04MDYsNiAmIzQzOzgxMywzMSBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOyNpZmRlZiBDT05GSUdfRUZJX0tITwomIzQzOwlpZiAoZWZpX2tob190YWJsZV9waHlzICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHsKJiM0MzsJCXN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmtobzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXNlcnZlIHRoZSBzdHViLWFsbG9jYXRlZCB0YWJsZSBzbyBpdCBpcyBuZWl0aGVyIGhhbmRlZAomIzQzOwkJICogb3V0IGJ5IHRoZSBidWRkeSBhbGxvY2F0b3Igbm9yIHBsYWNlZCBvbiBieSBrZXhlYwomIzQzOwkJICogc2VnbWVudHMsIG1pcnJvcmluZyB0aGUgbWVtcmVzZXJ2ZSBoYW5kbGluZyBhYm92ZS4gIFRoaXMKJiM0MzsJCSAqIHJ1bnMgb24gZXZlcnkgYm9vdCwgc28gaXQgYWxzbyBwcm90ZWN0cyB0aGUgdGFibGUgaW4gdGhlCiYjNDM7CQkgKiBuZXh0IGtlcm5lbCB1bnRpbCBpdCByZWFkcyBpdC4KJiM0MzsJCSAqLwomIzQzOwkJbWVtYmxvY2tfcmVzZXJ2ZShlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7CiYjNDM7CiYjNDM7CQlraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7CiYjNDM7CQlpZiAoa2hvKSB7CiYjNDM7CQkJaWYgKGtoby0mZ3Q7ZmR0X2FkZHIpCiYjNDM7CQkJCWtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLSZndDtmZHRfYWRkciwKJiM0MzsJCQkJCSAgICAga2hvLSZndDtmZHRfc2l6ZSwKJiM0MzsJCQkJCSAgICAgKHBoeXNfYWRkcl90KWtoby0mZ3Q7c2NyYXRjaF9hZGRyLAomIzQzOwkJCQkJICAgICBraG8tJmd0O3NjcmF0Y2hfc2l6ZSk7CiYjNDM7CQkJZWFybHlfbWVtdW5tYXAoa2hvLCBzaXplb2YoKmtobykpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgewogCQllZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7CiAKQEAgLTExNzEsNiAmIzQzOzEyMDMsNTIgQEAgc3RhdGljIGludCBfX2luaXQgZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KHZvaWQpCiB9CiBlYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19FRklfS0hPCiYjNDM7c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEgKmVmaV9raG9fdGFibGUgX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGVmaV9raG9fdGFibGVfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaV9raG9fdGFibGVfcGh5cyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgYSBwZXJzaXN0ZW50IG1hcHBpbmcgb2YgdGhlIHRhYmxlLCB0aGUgc2FtZSB3YXkKJiM0MzsJICogZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KCkga2VlcHMgdGhlIG1lbXJlc2VydmUgcm9vdCBtYXBwZWQ6CiYjNDM7CSAqIGVmaV9raG9fdXBkYXRlKCkgaXMgYWxzbyBjYWxsZWQgb24gdGhlIGNyYXNoIGtleGVjIHBhdGgsIHdoZXJlCiYjNDM7CSAqIG1lbXJlbWFwKCkgaXMgbm8gbG9uZ2VyIGFuIG9wdGlvbi4KJiM0MzsJICovCiYjNDM7CWVmaV9raG9fdGFibGUgPSBtZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqZWZpX2tob190YWJsZSksCiYjNDM7CQkJCSBNRU1SRU1BUF9XQik7CiYjNDM7CVdBUk5fT05fT05DRSghZWZpX2tob190YWJsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztlYXJseV9pbml0Y2FsbChlZmlfa2hvX3RhYmxlX2luaXQpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVXBkYXRlIHRoZSBLSE8gY29uZmlnIHRhYmxlIGluIHBsYWNlIGJlZm9yZSBhIGtleGVjLCBzbyB0aGUgbmV4dCBrZXJuZWwKJiM0MzsgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKToKJiM0MzsgKiB0aGUgY29uZmlnIHRhYmxlIGVudHJ5IHdhcyBpbnN0YWxsZWQgb25jZSBieSB0aGUgRUZJIHN0dWIgYW5kIGlzIGluaGVyaXRlZAomIzQzOyAqIGFjcm9zcyBrZXhlYywgc28gb25seSB0aGUgdGFibGUgY29udGVudHMgYXJlIHJld3JpdHRlbiBoZXJlIC0tIHRoZSBjb25maWcKJiM0MzsgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC0mZ3Q7dGFibGVzIGlzIG5ldmVyIHN3aXRjaGVkLgomIzQzOyAqLwomIzQzO2ludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLAomIzQzOwkJICAgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvID0gZWZpX2tob190YWJsZTsKJiM0MzsKJiM0MzsJaWYgKCFraG8pCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJa2hvLSZndDtmZHRfYWRkcgkJPSBmZHRfYWRkcjsKJiM0MzsJa2hvLSZndDtmZHRfc2l6ZQkJPSBmZHRfc2l6ZTsKJiM0MzsJa2hvLSZndDtzY3JhdGNoX2FkZHIJPSBzY3JhdGNoX2FkZHI7CiYjNDM7CWtoby0mZ3Q7c2NyYXRjaF9zaXplCT0gc2NyYXRjaF9zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0tFWEVDCiBzdGF0aWMgaW50IHVwZGF0ZV9lZmlfcmFuZG9tX3NlZWQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKQEAgLTEwMCw2ICYjNDM7MTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKQogCQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGluc3RhbGwgbWVtcmVzZXJ2ZSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE8KJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvOwomIzQzOwllZmlfZ3VpZF90IGtob190YWJsZV9ndWlkID0gTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQ7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLAomIzQzOwkJCSAgICAgKHZvaWQgKiopJmFtcDtraG8pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIEtITyBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9OwomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsICZhbXA7a2hvX3RhYmxlX2d1aWQsCiYjNDM7CQkJICAgICBraG8pOwomIzQzOwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKQomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIEtITyBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHUzMiBnZXRfc3VwcG9ydGVkX3J0X3NlcnZpY2VzKHZvaWQpCiB7CiAJY29uc3QgZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqcnRfcHJvcF90YWJsZTsKQEAgLTE4MCw2ICYjNDM7MjAzLDggQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7CiAKJiM0MzsJaW5zdGFsbF9raG9fdGFibGUoKTsKJiM0MzsKIAlzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpOwogCiAJZnJlZV9wcmltYXJ5X2Rpc3BsYXkoZHB5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGFhMTVmZjg4NTM5YmQuLjU2NGIzY2JkNWNjYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTsKICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRAkJRUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KQogI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRAkJRUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KQogI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRAlFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpCiYjNDM7I2RlZmluZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRAkJRUZJX0dVSUQoMHhjOTQxYjZjNywgMHg3YjNmLCAweDRhZjYsICAweDllLCAweDUwLCAweGZjLCAweGIzLCAweGE4LCAweDg2LCAweDhhLCAweDE3KQogCiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSUQJCUVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZikKIApAQCAtMTI3Myw2ICYjNDM7MTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUgewogCiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9LSE8KJiM0MzsvKgomIzQzOyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLgomIzQzOyAqIEl0IGNhcnJpZXMgdGhlIGtleGVjIGhhbmRvdmVyIChLSE8pIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQga2VybmVsIHRvIHRoZQomIzQzOyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyB0aGUgaGFuZG92ZXIgY2hhbm5lbCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkKJiM0MzsgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdAomIzQzOyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90CiYjNDM7ICogYXZhaWxhYmxlLiAgVGhlIEVGSSBzdHViIGFsbG9jYXRlcyBhbmQgaW5zdGFsbHMgdGhlIHRhYmxlIG9uY2UgYXQgYm9vdDsKJiM0MzsgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dAomIzQzOyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb24KJiM0MzsgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWQKJiM0MzsgKiBpdHNlbGYgaXMgdmVyc2lvbmVkIHNlcGFyYXRlbHkgYnkgdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBLSE8gc3RhdGUKJiM0MzsgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhIHsKJiM0MzsJdTY0IGZkdF9hZGRyOwomIzQzOwl1NjQgZmR0X3NpemU7CiYjNDM7CXU2NCBzY3JhdGNoX2FkZHI7CiYjNDM7CXU2NCBzY3JhdGNoX3NpemU7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztpbnQgZWZpX2tob191cGRhdGUocGh5c19hZGRyX3QgZmR0X2FkZHIsIHU2NCBmZHRfc2l6ZSwKJiM0MzsJCSAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLAomIzQzOwkJCQkgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIFRoZSBMSU5VWF9FRklfTU9LX1ZBUklBQkxFX1RBQkxFX0dVSUQgY29uZmlnIHRhYmxlIGNhbiBiZSBwcm92aWRlZAogICogdG8gdGhlIGtlcm5lbCBieSBhbiBFRkkgYm9vdCBsb2FkZXIuIFRoZSB0YWJsZSBjb250YWlucyBhIHBhY2tlZApkaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmMKaW5kZXggMmIzNmFhOWZhZGUwNi4uNjE2NmNlNDIwM2QzYiAxMDA2NDQKLS0tIGEva2VybmVsL2NyYXNoX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3Jhc2hfY29yZS5jCkBAIC0xMzgsNiAmIzQzOzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHsKIAkJCXN0cnVjdCBwdF9yZWdzIGZpeGVkX3JlZ3M7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgY3Jhc2ggaW1hZ2UgY2FycmllcyBubyBLSE8gc3RhdGU6IGNsZWFyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzbyB0aGUgY3Jhc2gga2VybmVsIGJvb3RzIGNvbGQgaW5zdGVhZAomIzQzOwkJCSAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuCiYjNDM7CQkJICovCiYjNDM7CQkJKHZvaWQpa2hvX3N5bmNfY2hhbm5lbChrZXhlY19jcmFzaF9pbWFnZSk7CiYjNDM7CiAJCQljcmFzaF9zZXR1cF9yZWdzKCZhbXA7Zml4ZWRfcmVncywgcmVncyk7CiAJCQljcmFzaF9zYXZlX3ZtY29yZWluZm8oKTsKIAkJCW1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oJmFtcDtmaXhlZF9yZWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jCmluZGV4IGRjNzcwYjlhNmQwNTMuLjE0N2Y1YjViMjNkNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuYwpAQCAtMTE0Niw2ICYjNDM7MTE0NiwxMSBAQCBpbnQga2VybmVsX2tleGVjKHZvaWQpCiAJCWdvdG8gVW5sb2NrOwogCX0KIAomIzQzOwkvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqLwomIzQzOwllcnJvciA9IGtob19zeW5jX2NoYW5uZWwoa2V4ZWNfaW1hZ2UpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIFVubG9jazsKJiM0MzsKIAlpZiAoIWtleGVjX2ltYWdlLSZndDtwcmVzZXJ2ZV9jb250ZXh0KSB7CiAJCWVycm9yID0gbGl2ZXVwZGF0ZV9yZWJvb3QoKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ludGVybmFsLmggYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaAppbmRleCAyMjhiYjg4YzAxOGJjLi40ZDRjMjI5MGU4NWM3IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaApAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgc3RydWN0IGtleGVjX2J1ZjsKIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsCiAJCQlpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSk7CiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKJiM0MztpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCQkJCSAgICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQpAQCAtNTQsNSAmIzQzOzU1LDcgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogfQogCiBzdGF0aWMgaW5saW5lIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovCiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggN2M0ZDg2ZGFmODZkNS4uYjYwMDhjMDE1MjVkOSAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY291bnRfemVyb3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXhlYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CkBAIC0yMDYzLDYgJiM0MzsyMDY0LDM4IEBAIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZQomIzQzOyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzCiYjNDM7ICogc2VwYXJhdGUgaW1hZ2VzIGZvciBhIG5vcm1hbCByZWJvb3QgYW5kIGZvciBjcmFzaC4gIFdyaXRlIHRoZSBzdGF0ZSBvZiB0aGUKJiM0MzsgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGEKJiM0MzsgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlCiYjNDM7ICogY2hhbm5lbCBwb2ludGluZyBhdCB0aGF0IGZhaWxlZCBpbWFnZS4KJiM0MzsgKgomIzQzOyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yCiYjNDM7ICogYW4gaW1hZ2UgbG9hZGVkIHdoaWxlIEtITyBpcyBkaXNhYmxlZCBjYXJyaWVzIG5vIGhhbmRvdmVyIHN0YXRlLiAgQ2xlYXIgdGhlCiYjNDM7ICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmcKJiM0MzsgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3QKJiM0MzsgKiBhZmZlY3QgYSBjb2xkIGJvb3QuCiYjNDM7ICovCiYjNDM7aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gpIHsKJiM0MzsJCWVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtJmd0O2toby5mZHQsIFBBR0VfU0laRSwKJiM0MzsJCQkgICAgIGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7bWVtLAomIzQzOwkJCSAgICAgaW1hZ2UtJmd0O2toby5zY3JhdGNoLSZndDtidWZzeik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsCiAJCQkgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suYyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCmluZGV4IDBkMmEzNDJlZjQyMjguLjBkNTY4OTFiMmY0YzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jCkBAIC0yNSw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvYmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9raG9fYmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAKIC8qCiAgKiBTYWZlZ3VhcmQgbGltaXQgZm9yIHRoZSBudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBibG9ja3MuIFRoaXMgaXMgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjM2MTUzYjAzYzRlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vbG9vbmdhcmNoLmNvbmYKQEAgLTAsMCAmIzQzOzEsMTEgQEAKJiM0MztRRU1VX0VGST0mIzM0OyR7UUVNVV9FRkk6LS91c3Ivc2hhcmUvZWRrMi9sb29uZ2FyY2g2NC9RRU1VX0VGSS5mZH0mIzM0OwomIzQzO1FFTVVfQ01EPSYjMzQ7cWVtdS1zeXN0ZW0tbG9vbmdhcmNoNjQgLU0gdmlydCAtY3B1IGxhNDY0IC1iaW9zICRRRU1VX0VGSSYjMzQ7CiYjNDM7UUVNVV9LQ09ORklHPSYjMzQ7CiYjNDM7Q09ORklHX0FDUElfU1BDUl9UQUJMRT15CiYjNDM7Q09ORklHX1BDSV9IT1NUX0dFTkVSSUM9eQomIzQzO0NPTkZJR19TRVJJQUxfODI1MD15CiYjNDM7Q09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQomIzQzO0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKJiM0MzsmIzM0OwomIzQzO0tFUk5FTF9JTUFHRT0mIzM0O3ZtbGludXguZWZpJiMzNDsKJiM0MztLRVJORUxfQ01ETElORT0mIzM0O2NvbnNvbGU9dHR5UzAgZWFybHljb24mIzM0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2gKaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoCkBAIC0yMSw3ICYjNDM7MjEsNyBAQCBPcHRpb25zOgogCS1kKQlwYXRoIHRvIHRoZSBrZXJuZWwgYnVpbGQgZGlyZWN0b3J5CiAJLWopCW51bWJlciBvZiBqb2JzIGZvciBjb21waWxhdGlvbiwgc2ltaWxhciB0byAtaiBpbiBtYWtlCiAJLXQpCXJ1biB0ZXN0IGZvciB0YXJnZXRfYXJjaCwgcmVxdWlyZXMgQ1JPU1NfQ09NUElMRSBzZXQKLQkJc3VwcG9ydGVkIHRhcmdldHM6IGFhcmNoNjQsIHg4Nl82NAomIzQzOwkJc3VwcG9ydGVkIHRhcmdldHM6IGFhcmNoNjQsIGxvb25nYXJjaDY0LCB4ODZfNjQKIAktaCkJZGlzcGxheSB0aGlzIGhlbHAKIEVPRgogfQpAQCAtMTI2LDYgJiM0MzsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHsKIAogCWNhc2UgJHRhcmdldCBpbgogCSAgICAgYWFyY2g2NCkgZWNobyAmIzM0O2FybTY0JiMzNDsgOzsKJiM0MzsJICAgICBsb29uZ2FyY2g2NCkgZWNobyAmIzM0O2xvb25nYXJjaCYjMzQ7IDs7CiAJICAgICB4ODZfNjQpIGVjaG8gJiMzNDt4ODYmIzM0OyA7OwogCSAgICAgKikgc2tpcCAmIzM0O2FyY2hpdGVjdHVyZSAkdGFyZ2V0IGlzIG5vdCBzdXBwb3J0ZWQmIzM0OwogCWVzYWMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGluIHBsYXkgaXMgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCYjMzk7bGwgYWZmZWN0IHRoZSBzeXN0ZW0uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSByZWFsbHkgY2xvc2UgbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBkaWZmIGl0c2VsZiDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBhcmVhczogYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvKmAsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBga2VybmVsL2tleGVjXypgIGZpbGVzLCBhbmQgc29tZSB0ZXN0LXJlbGF0ZWQgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9gLiBUaGF0JiMzOTtzIGEgcHJldHR5IGJyb2FkIHNjb3BlLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIHByZXR0eSBpbXBvcnRhbnQuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgYEtFWEVDX0hBTkRPVkVSYCwgYEVGSV9LSE9gLCBhbmQgcmVsYXRlZCBzZXR0aW5ncyBiZWhhdmUuIEFyZSB0aGV5IGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHF1aXJrcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSBnb2luZyB0byBiaXRlIG1lIGxhdGVyPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB4ODZfNjQgYXNwZWN0cywgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgd29ya2luZyBjb3JyZWN0bHkuIFRvIGRpZyBpbnRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEtFWEVDX0hBTkRPVkVSYCBpbiB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIGhvdyBpdCYjMzk7cyB1c2VkIGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoS0VYRUNfSEFORE9WRVJ8QVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUnxFRklfS0hPKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTcwOD1jb25maWcgQVJDSF9ERUZBVUxUX0tFWEVDX0lNQUdFX1ZFUklGWV9TSUdcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTcxMC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzExOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXG5hcmNoL2FybTY0L0tjb25maWctMTcxMi1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTY4NT1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODctXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjY4ODpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXHRkZWZfYm9vbCA2NEJJVCBcdTAwMjZcdTAwMjYgRUZJX1NUVUJcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE5Nzg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUFxuLS1cbmFyY2gveDg2L0tjb25maWctMTk4MC1cbmFyY2gveDg2L0tjb25maWc6MTk4MTpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC94ODYvS2NvbmZpZy0xOTgyLVx0ZGVmX2Jvb2wgWDg2XzY0XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0yOTY9Y29uZmlnIEVGSV9TQkFUX0ZJTEVcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxNi1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MzE3OmNvbmZpZyBFRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxOC1cdGJvb2xcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnPTM9bWVudSBcJiMzNDtMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcJiMzNDtcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNC1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6NTpjb25maWcgS0VYRUNfSEFORE9WRVJcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXJcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE3LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTktXHRib29sIFwmIzM0O0VuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoyNzpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdGU1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXIgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM3LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzozODpjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgS0VYRUMgSGFuZG92ZXIgYW5kIEVGSV9LSE8gb24geDg2XzY0KioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgS0VYRUNfSEFORE9WRVJgIGFuZCBgRUZJX0tIT2Agc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gZ3Jhc3AgdGhlIHg4Nl82NC1zcGVjaWZpYyBpbXBsaWNhdGlvbnMuIFRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsaXZlIHVwZGF0ZSBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhvc2Ugb3B0aW9ucywgc28gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBga2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ2AuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgbWFuYWdlZCBhbmQgd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGVtIG9uIHg4Nl82NC4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlcyB3aWxsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhcmNoaXRlY3R1cmFsIHF1aXJrcyBpbnZvbHZlZCBpbiBlaXRoZXIgaGFuZG92ZXIgbWVjaGFuaXNtcyB3aGVuIGVuYWJsZWQgb24gYW4geDg2XF82NCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RUZJX0tIT3xLRVhFQ19IQU5ET1ZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTk3OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTgwLVxuYXJjaC94ODYvS2NvbmZpZzoxOTgxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODItXHRkZWZfYm9vbCBYODZfNjRcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz03NzA9c3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzYtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3Nzc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0yNzQ9c3RhdGljIHZvaWQgc2V0dXBfa2hvKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgwLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjI4MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0zMDE9c2V0dXBfYm9vdF9wYXJhbWV0ZXJzKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkwLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjM5MTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTItXHRcdC8qIFNldHVwIHNwYWNlIHRvIHN0b3JlIHByZXNlcnZhdGlvbiBtZXRhZGF0YSAqL1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz00NzU9c3RhdGljIHZvaWQgKmJ6SW1hZ2U2NF9sb2FkKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBjaGFyICprZXJuZWwsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4MS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzo1ODI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4My1cdFx0a2J1Zi5idWZzeiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSAmIzQzO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTQ1Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX2tobyh1NjQgcGh5c19hZGRyLCB1MzIgZGF0YV9sZW4pXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDYyLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6NDYzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2NDpcdFx0cHJfd2FybihcJiMzNDtQYXNzZWQgS0hPIGRhdGEsIGJ1dCBDT05GSUdfS0VYRUNfSEFORE9WRVIgbm90IHNldC4gSWdub3JpbmcuXFxuXCYjMzQ7KTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2NS1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEVGSV9LSE8gQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyB0byBzZWUgaWYgYEVGSV9LSE9gIGlzIGRpcmVjdGx5IGVuYWJsZWQgdGhlcmUuIE5vcGUsIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCwgZGVmYXVsdC1vbiBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpdHNlbGYuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBpcyBzZWxlY3RpbmcgYEVGSV9LSE9gIGZyb20gKmFueXdoZXJlKiBpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIGl0IGJlaW5nIHB1bGxlZCBpbiBmcm9tPyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QuKkVGSV9LSE98RUZJX0tITyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9LY29uZmlnPTY4OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXHRkZWZfYm9vbCA2NEJJVCBcdTAwMjZcdTAwMjYgRUZJX1NUVUJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NjkwOlx0c2VsZWN0IEVGSV9LSE8gaWYgS0VYRUNfSEFORE9WRVJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNjkxLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9Mjk2PWNvbmZpZyBFRklfU0JBVF9GSUxFXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTYtXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjMxNzpjb25maWcgRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTgtXHRib29sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjY6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy02Ny1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgZWZpX2tob190YWJsZV9waHlzID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02MjQ9c3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy02MzUtXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcJiMzNDtNRU1SRVNFUlZFXCYjMzQ7XHR9LFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjM2OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjM3LVx0e0xJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELFx0XHRcdTAwMjZlZmlfa2hvX3RhYmxlX3BoeXMsXHRcJiMzNDtLSE9cJiMzNDtcdFx0fSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz03MTY9aW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE1LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6ODE2OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE3LVx0aWYgKGVmaV9raG9fdGFibGVfcGh5cyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9MTIwND1lYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTIwNS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjEyMDY6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMjA3LXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICplZmlfa2hvX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM9MTAzPXN0YXRpYyB2b2lkIGluc3RhbGxfa2hvX3RhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA0LXtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYzoxMDU6I2lmZGVmIENPTkZJR19FRklfS0hPXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA2LVx0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xuLS1cbmluY2x1ZGUvbGludXgvZWZpLmg9MTI3NT12b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzYtXG5pbmNsdWRlL2xpbnV4L2VmaS5oOjEyNzc6I2lmZGVmIENPTkZJR19FRklfS0hPXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzgtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2V4ZWMgSGFuZG92ZXIgUGF0Y2ggZm9yIGFtZDY0IEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgRUZJX0tIT2AsIGFuZCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgRUZJX0tIT2AgaXMgYSB2ZXJ5IHNwZWNpZmljIG9wdGlvbiwgc2VsZWN0ZWQgb25seSBpZiBgRUZJX1NUVUJgLCBgRUZJX0dFTkVSSUNfU1RVQmAsIGFuZCBgS0VYRUNfSEFORE9WRVJgIGFyZSBlbmFibGVkLCB3aXRoIGZ1cnRoZXIgY29uc3RyYWludHMgZnJvbSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZS4gVGhlIGtleSBoZXJlIGlzIGl0cyBsYWNrIG9mIGEgZGlyZWN0IHByb21wdC4gSXQmIzM5O3MgKm9ubHkqIHNlbGVjdGFibGUgYnkgb3RoZXIgb3B0aW9ucy4KCk15IGludmVzdGlnYXRpb24gbGVkIG1lIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCwgd2hpY2ggZGVmaW5lcyBgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUmAgYW5kICpzZWxlY3RzKiBgRUZJX0tIT2AgKmlmKiBgS0VYRUNfSEFORE9WRVJgIGlzIGFsc28gc2VsZWN0ZWQuIEJpbmdvISBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgdmVyeSB0YXJnZXRlZCB1c2UgY2FzZSBmb3IgYXJjaGl0ZWN0dXJlcyBib290aW5nIHZpYSBFRkkgKndpdGhvdXQqIGEgZGV2aWNlIHRyZWUgKEZEVCksIGFzIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBoZWxwIHRleHQuCgpJIHByb2NlZWRlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBhbGwgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllczoKCjEuICBNb2RpZmllZCBgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ2AKMi4gIEFkZGVkIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCBhbmQgYGNvbmZpZyBFRklfS0hPYAozLiAgQ2hhbmdlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNgLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgZWZpX2tob190YWJsZV9waHlzYCwgdGFibGUgZW50cmllcywgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gIGJsb2NrLgo0LiAgVXBkYXRlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jYCwgc3BlY2lmaWNhbGx5IGBpbnN0YWxsX2tob190YWJsZWAsIGFsc28gcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gLgo1LiAgTW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9lZmkuaGAgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhYCBhbmQgYSBkZWNsYXJhdGlvbi9zdHViIGZvciBgZWZpX2tob191cGRhdGVgCjYuICBVcGRhdGVzIGluIGBrZXJuZWwvY3Jhc2hfY29yZS5jYCBhbmQgYGtlcm5lbC9rZXhlY19jb3JlLmNgIGluY2x1ZGluZyBjYWxscyB0byBga2hvX3N5bmNfY2hhbm5lbGAsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBoYW5kb3Zlci4KNy4gIFRoZSBhZGRpdGlvbiBvZiBga2hvX3N5bmNfY2hhbm5lbGAgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgd2hpY2ggY2FsbHMgYGVmaV9raG9fdXBkYXRlYC4KOC4gIERlY2xhcmF0aW9uIG9mIGBraG9fc3luY19jaGFubmVsKClgIC8gc3R1YiB3aGVuIGAhQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpbiBga2VybmVsL2tleGVjX2ludGVybmFsLmhgCjkuICBBZGRpdGlvbiBvZiBgI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7YCBpbiBga2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmNgCjEwLiBTZWxmdGVzdC9zY3JpcHQgY2hhbmdlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvLy4uLmAKCkkgbmVlZGVkIHRvIGRldGVybWluZSBpZiAqYW55KiBvZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFtZDY0LiBJIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfRUZJX0tIT2AgY2FuICoqbmV2ZXIqKiBiZSBlbmFibGVkIG9uIGFtZDY0LCBiZWNhdXNlIExvb25nQXJjaCYjMzk7cyBLY29uZmlnIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGNhbiBiZSBzZWxlY3RlZC4gSSB0aGVuIGNoZWNrZWQgYGdyZXBwZXJgIGFuZCBjb25maXJtZWQgbm90aGluZyBlbHNlIGluIHRoZSBrZXJuZWwgdHJlZSBzZWxlY3RlZCBvciBtZW50aW9uZWQgYENPTkZJR19FRklfS0hPYC4gVGhpcyBpcyBjcml0aWNhbC4gT24gYW1kNjQsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCBhY3RpdmF0ZWQuCgpJIGRyaWxsZWQgZG93biBmdXJ0aGVyLCBleGFtaW5pbmcgdGhlIGJlaGF2aW9yIG9mIGBraG9fc3luY19jaGFubmVsYCBvbiBhbWQ2NC4gSSBzZWUgdGhhdCBldmVuIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgICppcyogZW5hYmxlZCBvbiBhbWQ2NCwgYGtob19zeW5jX2NoYW5uZWxgIGNhbGxzIGBlZmlfa2hvX3VwZGF0ZSgpYC4gSG93ZXZlciwgc2luY2UgYENPTkZJR19FRklfS0hPYCBpcyAqbm90KiBkZWZpbmVkIG9uIGFtZDY0LCBgZWZpX2tob191cGRhdGUoKWAgaXMganVzdCBhbiAqaW5saW5lKiBmdW5jdGlvbiB0aGF0IHJldHVybnMgMC4gU28gdGhlIGZ1bmN0aW9uIGNhbGwgYmVjb21lcyBhIG5vLW9wLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBga2hvX3N5bmNfY2hhbm5lbGAuIEluIHN1bW1hcnksIGV2ZW4gd2l0aCBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBlbmFibGVkLCBLSE8gb24gYW1kNjQgYm9pbHMgZG93biB0byBhIHRyaXZpYWwgbm8tb3AuCgpUaGVuIEkgY29uc2lkZXJlZCBvdGhlciB3YXlzIGtleGVjIGhhbmRvdmVyIHdvcmtzLCBlLmcuIG9uIHg4Niwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCB1c2VzIGBzZXR1cF9kYXRhYCAoc3BlY2lmaWNhbGx5IGBTRVRVUF9LSE9fTUVNYCksIGFuZCBub3QgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVzLgoKTm93LCBsZXQmIzM5O3MgY29ubmVjdCBhbGwgdGhlIGRvdHMgYW5kIHNlZSBpZiB0aGUgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZzoKKiAgIFRoZSBmdW5kYW1lbnRhbCBsb2dpYyBmb3IgRUZJLWJhc2VkIEtITyB0YWJsZSBoYW5kbGluZyBpcyBlbnRpcmVseSBnYXRlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC4gVGhpcyBndWFyZCBpcyAqb25seSogZW5hYmxlZCBmb3IgTG9vbmdBcmNoLgoqICAgVGhlIGZ1bmN0aW9ucyBhZGRlZCBpbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvYCBhcmUgKm5vdCogY29tcGlsZWQgZm9yIGFtZDY0LgoqICAgVGhlIGluY2x1c2lvbiBvZiBgI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7YCBpcyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZSBhbmQsIHRodXMsIGlycmVsZXZhbnQgdG8gZnV6emluZy4KKiAgIFRoZSB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4KKiAgYGtob19zeW5jX2NoYW5uZWxgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDYwOlx0XHRpZiAoZXJyKVxuMjA2MTpcdFx0XHRyZXR1cm4gZXJyO1xuMjA2MjpcdFx0aW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2ggPSBcdTAwMjZpbWFnZS1cdTAwM2VzZWdtZW50W2ltYWdlLVx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XG4yMDYzOlx0XG4yMDY0Olx0XHRyZXR1cm4gMDtcbjIwNjU6XHR9XG4yMDY2Olx0XG4yMDY3Olx0LypcbjIwNjg6XHQgKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIHRoYXQgaXMgYWJvdXQgdG8gYmVcbjIwNjk6XHQgKiBleGVjdXRlZC4gIFRoZSBFRkkgY29uZmlnIHRhYmxlIGNoYW5uZWwgaXMgZ2xvYmFsLCB3aGlsZSBrZXhlYyBrZWVwc1xuMjA3MDpcdCAqIHNlcGFyYXRlIGltYWdlcyBmb3IgYSBub3JtYWwgcmVib290IGFuZCBmb3IgY3Jhc2guICBXcml0ZSB0aGUgc3RhdGUgb2YgdGhlXG4yMDcxOlx0ICogc2VsZWN0ZWQgaW1hZ2UgaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGV4ZWN1dGVkLCByYXRoZXIgdGhhbiB3aGlsZSBhXG4yMDcyOlx0ICogY2FuZGlkYXRlIGltYWdlIGlzIGJlaW5nIGxvYWRlZCwgc28gYSBmYWlsZWQgcmVwbGFjZW1lbnQgY2Fubm90IGxlYXZlIHRoZVxuMjA3MzpcdCAqIGNoYW5uZWwgcG9pbnRpbmcgYXQgdGhhdCBmYWlsZWQgaW1hZ2UuXG4yMDc0Olx0ICpcbjIwNzU6XHQgKiBBbiBpbWFnZSBsb2FkZWQgdGhyb3VnaCB0aGUgbGVnYWN5IGtleGVjX2xvYWQoKSBzeXNjYWxsLCBhIGNyYXNoIGltYWdlLCBvclxuMjA3NjpcdCAqIGFuIGltYWdlIGxvYWRlZCB3aGlsZSBLSE8gaXMgZGlzYWJsZWQgY2FycmllcyBubyBoYW5kb3ZlciBzdGF0ZS4gIENsZWFyIHRoZVxuMjA3NzpcdCAqIGNoYW5uZWwgZm9yIHRob3NlIGltYWdlcyBzbyB0aGUgbmV4dCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkIG9mIHJldml2aW5nXG4yMDc4Olx0ICogZnJvbSBzdGFsZSBzdGF0ZS4gIENsZWFyaW5nIGlzIGJlc3QtZWZmb3J0IGJlY2F1c2UgYW4gYWJzZW50IGNoYW5uZWwgY2Fubm90XG4yMDc5Olx0ICogYWZmZWN0IGEgY29sZCBib290LlxuMjA4MDpcdCAqL1xuMjA4MTpcdGludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuMjA4MjpcdHtcbjIwODM6XHRcdGludCBlcnI7XG4yMDg0Olx0XG4yMDg1Olx0XHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKSB7XG4yMDg2Olx0XHRcdGVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApO1xuMjA4NzpcdFx0XHRyZXR1cm4gMDtcbjIwODg6XHRcdH1cbjIwODk6XHRcbjIwOTA6XHRcdGVyciA9IGVmaV9raG9fdXBkYXRlKGltYWdlLVx1MDAzZWtoby5mZHQsIFBBR0VfU0laRSxcbjIwOTE6XHRcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbSxcbjIwOTI6XHRcdFx0XHQgICAgIGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6KTtcbjIwOTM6XHRcdGlmIChlcnIpXG4yMDk0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSBFRkkgY29uZmlnIHRhYmxlOiAlZFxcblwmIzM0OywgZXJyKTtcbjIwOTU6XHRcbjIwOTY6XHRcdHJldHVybiBlcnI7XG4yMDk3Olx0fVxuMjA5ODpcdFxuMjA5OTpcdHN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuMjEwMDpcdFx0XHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbjIxMDE6XHR7XG4yMTAyOlx0XHRpbnQgcmV0ID0gMDtcbjIxMDM6XHRcdGludCBpO1xuMjEwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQyMAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0hPIFBhdGNoIG9uIGFtZDY0KioKCk9rYXksIEkmIzM5O3ZlIGdvdCB0aGlzLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSBzdXBwb3J0IGZvciBrZXhlYyBoYW5kb3Zlciwgb3IgS0hPLCBzcGVjaWZpY2FsbHkgZm9yIExvb25nQXJjaC4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyBgQ09ORklHX0VGSV9LSE9gLCBhbmQgSSBzZWUgdGhhdCBpdCYjMzk7cyB0aWdodGx5IGJvdW5kIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSAqd2l0aG91dCogYSBkZXZpY2UgdHJlZSwgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IHRvIG15IHR5cGljYWwgYW1kNjQgc2V0dXAuCgpMb29raW5nIGNsb3NlciBhdCB0aGUgYW1kNjQgc2lkZSwgYXMgSSBzdXNwZWN0ZWQsIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBFRkkgS0hPIGlzIGRlYWQgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9gIGlzIGNvbXBsZXRlbHkgYCNpZmRlZiBDT05GSUdfRUZJX0tIT2BkIG91dC4gYGVmaV9raG9fdXBkYXRlYCBpcyBqdXN0IGEgbm8tb3Agc3R1YiwganVzdCByZXR1cm5pbmcgemVybywgYW5kIGBraG9fc3luY19jaGFubmVsKClgIGRvZXNuJiMzOTt0IGFjdHVhbGx5ICpkbyogYW55dGhpbmcgb24gYW1kNjQuIEV2ZW4gdGhlIHRlc3Qgc2NyaXB0cyBhcmUgdXNlci1zcGFjZSBzdHVmZiwgc28gSSBkb24mIzM5O3Qgc2VlIGFueSBleHBvc2VkIGtlcm5lbCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLiBJIGNhbiYjMzk7dCBmaW5kIGFueXRoaW5nIHVzZWZ1bCBoZXJlLgoKU28sIGxldCYjMzk7cyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuIEkgbmVlZDoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgc3BlY2lmaWNhbGx5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKExvb25nQXJjaCkuIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBzdWJzdGFudGl2ZSBFRkkgS0hPIGxvZ2ljIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhIG5vLW9wIGlubGluZSByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBjb25zaXN0IG9mIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1ZGUuJiMzNDsKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAobm90aGluZyB0byBlbmFibGUpCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAobm90aGluZyByZWxldmFudCB0byBmb2N1cyBvbikKCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHRyYW5zcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIgKEtITyksIHRhcmdldGVkIGF0IGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgZGV2aWNlIHRyZWUgKHN1Y2ggYXMgTG9vbmdBcmNoKS4gVGhlIG5ldyBjb25maWcgQ09ORklHX0VGSV9LSE8gaXMgb25seSBzZWxlY3RlZCBieSBhcmNoL2xvb25nYXJjaC9LY29uZmlnIGFuZCBjYW5ub3QgYmUgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBPbiBhbWQ2NCwgYWxsIEVGSSBLSE8gbG9naWMgaW4gdGhlIEVGSSBkcml2ZXJzIGFuZCBsaWJzdHViIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhbiBpbmxpbmUgbm8tb3AgcmV0dXJuaW5nIDAsIGFuZCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgYXJlIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1c2lvbi4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIGZvciBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyNS4wMDgwMzUzNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzAxODQyOTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgdGFyZ2V0ZWQgYXQgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBkZXZpY2UgdHJlZSAoc3VjaCBhcyBMb29uZ0FyY2gpLiBUaGUgbmV3IGNvbmZpZyBDT05GSUdfRUZJX0tITyBpcyBvbmx5IHNlbGVjdGVkIGJ5IGFyY2gvbG9vbmdhcmNoL0tjb25maWcgYW5kIGNhbm5vdCBiZSBlbmFibGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIE9uIGFtZDY0LCBhbGwgRUZJIEtITyBsb2dpYyBpbiB0aGUgRUZJIGRyaXZlcnMgYW5kIGxpYnN0dWIgaXMgY29tcGlsZWQgb3V0LCBlZmlfa2hvX3VwZGF0ZSgpIGlzIGFuIGlubGluZSBuby1vcCByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBhcmUgc2VsZnRlc3Qgc2NyaXB0cyBhbmQgYSBoZWFkZXIgaW5jbHVzaW9uLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgZm9yIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6MjUuMDA4MDQwMDc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3Mjc3ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDE5OjIxOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggYTIxZjUxZTU4MTVlOS4uNWVhYTY1NTc4ZDU4ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbkBAIC02ODUsNiArNjg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXFxuIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG4gXFx0ZGVmX2Jvb2wgNjRCSVRcXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuK1xcdGRlZl9ib29sIDY0QklUIFxcdTAwMjZcXHUwMDI2IEVGSV9TVFVCXFxuK1xcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXFxuK1xcbiBjb25maWcgQVJDSF9TRUxFQ1RTX0tFWEVDX0ZJTEVcXG4gXFx0ZGVmX2Jvb2wgNjRCSVRcXG4gXFx0ZGVwZW5kcyBvbiBLRVhFQ19GSUxFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuaW5kZXggMjllMDcyOTI5OWY1Yi4uZDZjMTM3MjQ4NGI0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbkBAIC0zMTQsNiArMzE0LDE4IEBAIGNvbmZpZyBFRklfU0JBVF9GSUxFXFxuIFxcbiBcXHQgIElmIHVuc3VyZSwgbGVhdmUgYmxhbmsuXFxuIFxcbitjb25maWcgRUZJX0tIT1xcbitcXHRib29sXFxuK1xcdGRlcGVuZHMgb24gRUZJX1NUVUIgXFx1MDAyNlxcdTAwMjYgRUZJX0dFTkVSSUNfU1RVQiBcXHUwMDI2XFx1MDAyNiBLRVhFQ19IQU5ET1ZFUlxcbitcXHRoZWxwXFxuK1xcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cXG4rXFx0ICBvbmUga2VybmVsIHRvIHRoZSBuZXh0IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGVcXG4rXFx0ICBlbnRyeSB1bmRlciBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCwgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdFxcbitcXHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXFxuK1xcbitcXHQgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFRcXG4rXFx0ICBwYXRoIGluc3RlYWQgYW5kIGRvIG5vdCBzZWxlY3QgdGhpcy5cXG4rXFxuIGVuZG1lbnVcXG4gXFxuIGNvbmZpZyBVRUZJX0NQRVJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbmluZGV4IDAzMjdhMzlkMzFmYTUuLjYzODBjZmFiMTQ5M2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0cmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXhlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWJvb3QuaFxcdTAwM2VcXG5AQCAtNjIsNiArNjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbV9yZXNlcnZlID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBydF9wcm9wID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGVmaV9raG9fdGFibGVfcGh5cyA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuKyNlbmRpZlxcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJpbWFyeV9kaXNwbGF5X3RhYmxlO1xcbiBcXG5AQCAtNjI5LDYgKzYzMyw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuIFxcdHtFRklfVENHMl9GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcXHRcXHUwMDI2ZWZpLnRwbV9maW5hbF9sb2csXFx0XFxcIlRQTUZpbmFsTG9nXFxcIlxcdH0sXFxuIFxcdHtFRklfQ0NfRklOQUxfRVZFTlRTX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFxcdFxcXCJDQ0ZpbmFsTG9nXFxcIlxcdH0sXFxuIFxcdHtMSU5VWF9FRklfTUVNUkVTRVJWRV9UQUJMRV9HVUlELFxcdFxcdTAwMjZtZW1fcmVzZXJ2ZSxcXHRcXHRcXFwiTUVNUkVTRVJWRVxcXCJcXHR9LFxcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cXG4rXFx0e0xJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELFxcdFxcdFxcdTAwMjZlZmlfa2hvX3RhYmxlX3BoeXMsXFx0XFxcIktIT1xcXCJcXHRcXHR9LFxcbisjZW5kaWZcXG4gXFx0e0xJTlVYX0VGSV9JTklUUkRfTUVESUFfR1VJRCxcXHRcXHRcXHUwMDI2aW5pdHJkLFxcdFxcdFxcXCJJTklUUkRcXFwiXFx0fSxcXG4gXFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXFx0XFx0XFx1MDAyNnJ0X3Byb3AsXFx0XFx0XFxcIlJUUFJPUFxcXCJcXHR9LFxcbiAjaWZkZWYgQ09ORklHX09WTUZfREVCVUdfTE9HXFxuQEAgLTgwNiw2ICs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rI2lmZGVmIENPTkZJR19FRklfS0hPXFxuK1xcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbitcXHRcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZXNlcnZlIHRoZSBzdHViLWFsbG9jYXRlZCB0YWJsZSBzbyBpdCBpcyBuZWl0aGVyIGhhbmRlZFxcbitcXHRcXHQgKiBvdXQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvciBub3IgcGxhY2VkIG9uIGJ5IGtleGVjXFxuK1xcdFxcdCAqIHNlZ21lbnRzLCBtaXJyb3JpbmcgdGhlIG1lbXJlc2VydmUgaGFuZGxpbmcgYWJvdmUuICBUaGlzXFxuK1xcdFxcdCAqIHJ1bnMgb24gZXZlcnkgYm9vdCwgc28gaXQgYWxzbyBwcm90ZWN0cyB0aGUgdGFibGUgaW4gdGhlXFxuK1xcdFxcdCAqIG5leHQga2VybmVsIHVudGlsIGl0IHJlYWRzIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XFxuK1xcbitcXHRcXHRraG8gPSBlYXJseV9tZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqa2hvKSk7XFxuK1xcdFxcdGlmIChraG8pIHtcXG4rXFx0XFx0XFx0aWYgKGtoby1cXHUwMDNlZmR0X2FkZHIpXFxuK1xcdFxcdFxcdFxcdGtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLVxcdTAwM2VmZHRfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBraG8tXFx1MDAzZWZkdF9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIChwaHlzX2FkZHJfdClraG8tXFx1MDAzZXNjcmF0Y2hfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBraG8tXFx1MDAzZXNjcmF0Y2hfc2l6ZSk7XFxuK1xcdFxcdFxcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZW9mKCpraG8pKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKHJ0X3Byb3AgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbiBcXHRcXHRlZmlfcnRfcHJvcGVydGllc190YWJsZV90ICp0Ymw7XFxuIFxcbkBAIC0xMTcxLDYgKzEyMDMsNTIgQEAgc3RhdGljIGludCBfX2luaXQgZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KHZvaWQpXFxuIH1cXG4gZWFybHlfaW5pdGNhbGwoZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqZWZpX2tob190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBlZmlfa2hvX3RhYmxlX2luaXQodm9pZClcXG4re1xcbitcXHRpZiAoZWZpX2tob190YWJsZV9waHlzID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2VlcCBhIHBlcnNpc3RlbnQgbWFwcGluZyBvZiB0aGUgdGFibGUsIHRoZSBzYW1lIHdheVxcbitcXHQgKiBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQoKSBrZWVwcyB0aGUgbWVtcmVzZXJ2ZSByb290IG1hcHBlZDpcXG4rXFx0ICogZWZpX2tob191cGRhdGUoKSBpcyBhbHNvIGNhbGxlZCBvbiB0aGUgY3Jhc2gga2V4ZWMgcGF0aCwgd2hlcmVcXG4rXFx0ICogbWVtcmVtYXAoKSBpcyBubyBsb25nZXIgYW4gb3B0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZWZpX2tob190YWJsZSA9IG1lbXJlbWFwKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCplZmlfa2hvX3RhYmxlKSxcXG4rXFx0XFx0XFx0XFx0IE1FTVJFTUFQX1dCKTtcXG4rXFx0V0FSTl9PTl9PTkNFKCFlZmlfa2hvX3RhYmxlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK2Vhcmx5X2luaXRjYWxsKGVmaV9raG9fdGFibGVfaW5pdCk7XFxuK1xcbisvKlxcbisgKiBVcGRhdGUgdGhlIEtITyBjb25maWcgdGFibGUgaW4gcGxhY2UgYmVmb3JlIGEga2V4ZWMsIHNvIHRoZSBuZXh0IGtlcm5lbFxcbisgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcXG4rICogdGhlIGNvbmZpZyB0YWJsZSBlbnRyeSB3YXMgaW5zdGFsbGVkIG9uY2UgYnkgdGhlIEVGSSBzdHViIGFuZCBpcyBpbmhlcml0ZWRcXG4rICogYWNyb3NzIGtleGVjLCBzbyBvbmx5IHRoZSB0YWJsZSBjb250ZW50cyBhcmUgcmV3cml0dGVuIGhlcmUgLS0gdGhlIGNvbmZpZ1xcbisgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cXHUwMDNldGFibGVzIGlzIG5ldmVyIHN3aXRjaGVkLlxcbisgKi9cXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXFxuK1xcdFxcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG8gPSBlZmlfa2hvX3RhYmxlO1xcbitcXG4rXFx0aWYgKCFraG8pXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0a2hvLVxcdTAwM2VmZHRfYWRkclxcdFxcdD0gZmR0X2FkZHI7XFxuK1xcdGtoby1cXHUwMDNlZmR0X3NpemVcXHRcXHQ9IGZkdF9zaXplO1xcbitcXHRraG8tXFx1MDAzZXNjcmF0Y2hfYWRkclxcdD0gc2NyYXRjaF9hZGRyO1xcbitcXHRraG8tXFx1MDAzZXNjcmF0Y2hfc2l6ZVxcdD0gc2NyYXRjaF9zaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX0tFWEVDXFxuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCA0MmQ2MDczYmNkMDYyLi43NTFmNDYyODA0MzNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xMDAsNiArMTAwLDI5IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSh2b2lkKVxcbiBcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gaW5zdGFsbCBtZW1yZXNlcnZlIGNvbmZpZyB0YWJsZSFcXFxcblxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpbnN0YWxsX2tob190YWJsZSh2b2lkKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XFxuK1xcdGVmaV9ndWlkX3Qga2hvX3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRDtcXG4rXFx0ZWZpX3N0YXR1c190IHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLFxcbitcXHRcXHRcXHQgICAgICh2b2lkICoqKVxcdTAwMjZraG8pO1xcbitcXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0KmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9O1xcbitcXG4rXFx0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLCBcXHUwMDI2a2hvX3RhYmxlX2d1aWQsXFxuK1xcdFxcdFxcdCAgICAga2hvKTtcXG4rXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcXG4rXFx0XFx0ZWZpX2VycihcXFwiRmFpbGVkIHRvIGluc3RhbGwgS0hPIGNvbmZpZyB0YWJsZSFcXFxcblxcXCIpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHUzMiBnZXRfc3VwcG9ydGVkX3J0X3NlcnZpY2VzKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3QgZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqcnRfcHJvcF90YWJsZTtcXG5AQCAtMTgwLDYgKzIwMyw4IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcXG4gXFxuIFxcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xcbiBcXG4rXFx0aW5zdGFsbF9raG9fdGFibGUoKTtcXG4rXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbiBcXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGFhMTVmZjg4NTM5YmQuLjU2NGIzY2JkNWNjYjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtNDIyLDYgKzQyMiw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcXHRcXHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXFxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcXHRcXHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXFxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXFxuKyNkZWZpbmUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSURcXHRcXHRFRklfR1VJRCgweGM5NDFiNmM3LCAweDdiM2YsIDB4NGFmNiwgIDB4OWUsIDB4NTAsIDB4ZmMsIDB4YjMsIDB4YTgsIDB4ODYsIDB4OGEsIDB4MTcpXFxuIFxcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcXHRcXHRFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpXFxuIFxcbkBAIC0xMjczLDYgKzEyNzQsNDEgQEAgc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlIHtcXG4gXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbisvKlxcbisgKiBUaGUgTElOVVhfRUZJX0tFWEVDX0hBTkRPVkVSX0dVSUQgY29uZmlnIHRhYmxlIHBvaW50cyB0byB0aGlzIHN0cnVjdHVyZS5cXG4rICogSXQgY2FycmllcyB0aGUga2V4ZWMgaGFuZG92ZXIgKEtITykgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBrZXJuZWwgdG8gdGhlXFxuKyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLlxcbisgKlxcbisgKiBUaGlzIGlzIHRoZSBoYW5kb3ZlciBjaGFubmVsIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSVxcbisgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdFxcbisgKiBhbmQgbGludXgsa2hvLXNjcmF0Y2ggcHJvcGVydGllcyByZWFkIGJ5IGVhcmx5X2luaXRfZHRfY2hlY2tfa2hvKCkgYXJlIG5vdFxcbisgKiBhdmFpbGFibGUuICBUaGUgRUZJIHN0dWIgYWxsb2NhdGVzIGFuZCBpbnN0YWxscyB0aGUgdGFibGUgb25jZSBhdCBib290O1xcbisgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dFxcbisgKiBrZXJuZWwgcmVhZHMgaXQgYmFjayBhbmQgY2FsbHMga2hvX3BvcHVsYXRlKCkuXFxuKyAqXFxuKyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb25cXG4rICogZmllbGQ6IGFuIGluY29tcGF0aWJsZSBjaGFuZ2UgbXVzdCB1c2UgYSBuZXcgR1VJRC4gIFRoZSBoYW5kb3ZlciBwYXlsb2FkXFxuKyAqIGl0c2VsZiBpcyB2ZXJzaW9uZWQgc2VwYXJhdGVseSBieSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIEtITyBzdGF0ZVxcbisgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy5cXG4rICovXFxuK3N0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGEge1xcbitcXHR1NjQgZmR0X2FkZHI7XFxuK1xcdHU2NCBmZHRfc2l6ZTtcXG4rXFx0dTY0IHNjcmF0Y2hfYWRkcjtcXG4rXFx0dTY0IHNjcmF0Y2hfc2l6ZTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK2ludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxcbitcXHRcXHQgICBwaHlzX2FkZHJfdCBzY3JhdGNoX2FkZHIsIHU2NCBzY3JhdGNoX3NpemUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9hZGRyLCB1NjQgc2NyYXRjaF9zaXplKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gLypcXG4gICogVGhlIExJTlVYX0VGSV9NT0tfVkFSSUFCTEVfVEFCTEVfR1VJRCBjb25maWcgdGFibGUgY2FuIGJlIHByb3ZpZGVkXFxuICAqIHRvIHRoZSBrZXJuZWwgYnkgYW4gRUZJIGJvb3QgbG9hZGVyLiBUaGUgdGFibGUgY29udGFpbnMgYSBwYWNrZWRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcXG5pbmRleCAyYjM2YWE5ZmFkZTA2Li42MTY2Y2U0MjAzZDNiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcXG4rKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuQEAgLTEzOCw2ICsxMzgsMTMgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0aWYgKGtleGVjX2NyYXNoX2ltYWdlKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBwdF9yZWdzIGZpeGVkX3JlZ3M7XFxuIFxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIGNyYXNoIGltYWdlIGNhcnJpZXMgbm8gS0hPIHN0YXRlOiBjbGVhciB0aGVcXG4rXFx0XFx0XFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXFxuK1xcdFxcdFxcdCAqIG9mIHJldml2aW5nIGZyb20gc3RhbGUgc3RhdGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcXG4rXFxuIFxcdFxcdFxcdGNyYXNoX3NldHVwX3JlZ3MoXFx1MDAyNmZpeGVkX3JlZ3MsIHJlZ3MpO1xcbiBcXHRcXHRcXHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcXG4gXFx0XFx0XFx0bWFjaGluZV9jcmFzaF9zaHV0ZG93bihcXHUwMDI2Zml4ZWRfcmVncyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXFxuaW5kZXggZGM3NzBiOWE2ZDA1My4uMTQ3ZjViNWIyM2Q0MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbkBAIC0xMTQ2LDYgKzExNDYsMTEgQEAgaW50IGtlcm5lbF9rZXhlYyh2b2lkKVxcbiBcXHRcXHRnb3RvIFVubG9jaztcXG4gXFx0fVxcbiBcXG4rXFx0LyogU3luY2hyb25pemUgdGhlIGhhbmRvdmVyIHRyYW5zcG9ydCB3aXRoIHRoZSBpbWFnZSBiZWluZyBleGVjdXRlZC4gKi9cXG4rXFx0ZXJyb3IgPSBraG9fc3luY19jaGFubmVsKGtleGVjX2ltYWdlKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIFVubG9jaztcXG4rXFxuIFxcdGlmICgha2V4ZWNfaW1hZ2UtXFx1MDAzZXByZXNlcnZlX2NvbnRleHQpIHtcXG4gXFx0XFx0ZXJyb3IgPSBsaXZldXBkYXRlX3JlYm9vdCgpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcXG5pbmRleCAyMjhiYjg4YzAxOGJjLi40ZDRjMjI5MGU4NWM3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL2tleGVjX2ludGVybmFsLmhcXG5AQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3Qga2V4ZWNfYnVmO1xcbiBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbiBcXHRcXHRcXHRpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSk7XFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpO1xcbitpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXFxuQEAgLTU0LDUgKzU1LDcgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbmluZGV4IDdjNGQ4NmRhZjg2ZDUuLmI2MDA4YzAxNTI1ZDkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rbWVtbGVhay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY291bnRfemVyb3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VmaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2FzYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXFx1MDAzZVxcbkBAIC0yMDYzLDYgKzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZVxcbisgKiBleGVjdXRlZC4gIFRoZSBFRkkgY29uZmlnIHRhYmxlIGNoYW5uZWwgaXMgZ2xvYmFsLCB3aGlsZSBrZXhlYyBrZWVwc1xcbisgKiBzZXBhcmF0ZSBpbWFnZXMgZm9yIGEgbm9ybWFsIHJlYm9vdCBhbmQgZm9yIGNyYXNoLiAgV3JpdGUgdGhlIHN0YXRlIG9mIHRoZVxcbisgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGFcXG4rICogY2FuZGlkYXRlIGltYWdlIGlzIGJlaW5nIGxvYWRlZCwgc28gYSBmYWlsZWQgcmVwbGFjZW1lbnQgY2Fubm90IGxlYXZlIHRoZVxcbisgKiBjaGFubmVsIHBvaW50aW5nIGF0IHRoYXQgZmFpbGVkIGltYWdlLlxcbisgKlxcbisgKiBBbiBpbWFnZSBsb2FkZWQgdGhyb3VnaCB0aGUgbGVnYWN5IGtleGVjX2xvYWQoKSBzeXNjYWxsLCBhIGNyYXNoIGltYWdlLCBvclxcbisgKiBhbiBpbWFnZSBsb2FkZWQgd2hpbGUgS0hPIGlzIGRpc2FibGVkIGNhcnJpZXMgbm8gaGFuZG92ZXIgc3RhdGUuICBDbGVhciB0aGVcXG4rICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmdcXG4rICogZnJvbSBzdGFsZSBzdGF0ZS4gIENsZWFyaW5nIGlzIGJlc3QtZWZmb3J0IGJlY2F1c2UgYW4gYWJzZW50IGNoYW5uZWwgY2Fubm90XFxuKyAqIGFmZmVjdCBhIGNvbGQgYm9vdC5cXG4rICovXFxuK2ludCBraG9fc3luY19jaGFubmVsKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWltYWdlLVxcdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gpIHtcXG4rXFx0XFx0ZWZpX2tob191cGRhdGUoMCwgMCwgMCwgMCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBlZmlfa2hvX3VwZGF0ZShpbWFnZS1cXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlbWVtLFxcbitcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlYnVmc3opO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gdXBkYXRlIEVGSSBjb25maWcgdGFibGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suYyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXFxuaW5kZXggMGQyYTM0MmVmNDIyOC4uMGQ1Njg5MWIyZjRjOCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tob19ibG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9sb29uZ2FyY2guY29uZiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9sb29uZ2FyY2guY29uZlxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vbG9vbmdhcmNoLmNvbmZcXG5AQCAtMCwwICsxLDExIEBAXFxuK1FFTVVfRUZJPVxcXCIke1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XFxcIlxcbitRRU1VX0NNRD1cXFwicWVtdS1zeXN0ZW0tbG9vbmdhcmNoNjQgLU0gdmlydCAtY3B1IGxhNDY0IC1iaW9zICRRRU1VX0VGSVxcXCJcXG4rUUVNVV9LQ09ORklHPVxcXCJcXG4rQ09ORklHX0FDUElfU1BDUl9UQUJMRT15XFxuK0NPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXlcXG4rQ09ORklHX1NFUklBTF84MjUwPXlcXG4rQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eVxcbitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15XFxuK1xcXCJcXG4rS0VSTkVMX0lNQUdFPVxcXCJ2bWxpbnV4LmVmaVxcXCJcXG4rS0VSTkVMX0NNRExJTkU9XFxcImNvbnNvbGU9dHR5UzAgZWFybHljb25cXFwiXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXFxuaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaFxcbkBAIC0yMSw3ICsyMSw3IEBAIE9wdGlvbnM6XFxuIFxcdC1kKVxcdHBhdGggdG8gdGhlIGtlcm5lbCBidWlsZCBkaXJlY3RvcnlcXG4gXFx0LWopXFx0bnVtYmVyIG9mIGpvYnMgZm9yIGNvbXBpbGF0aW9uLCBzaW1pbGFyIHRvIC1qIGluIG1ha2VcXG4gXFx0LXQpXFx0cnVuIHRlc3QgZm9yIHRhcmdldF9hcmNoLCByZXF1aXJlcyBDUk9TU19DT01QSUxFIHNldFxcbi1cXHRcXHRzdXBwb3J0ZWQgdGFyZ2V0czogYWFyY2g2NCwgeDg2XzY0XFxuK1xcdFxcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XFxuIFxcdC1oKVxcdGRpc3BsYXkgdGhpcyBoZWxwXFxuIEVPRlxcbiB9XFxuQEAgLTEyNiw2ICsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHtcXG4gXFxuIFxcdGNhc2UgJHRhcmdldCBpblxcbiBcXHQgICAgIGFhcmNoNjQpIGVjaG8gXFxcImFybTY0XFxcIiA7O1xcbitcXHQgICAgIGxvb25nYXJjaDY0KSBlY2hvIFxcXCJsb29uZ2FyY2hcXFwiIDs7XFxuIFxcdCAgICAgeDg2XzY0KSBlY2hvIFxcXCJ4ODZcXFwiIDs7XFxuIFxcdCAgICAgKikgc2tpcCBcXFwiYXJjaGl0ZWN0dXJlICR0YXJnZXQgaXMgbm90IHN1cHBvcnRlZFxcXCJcXG4gXFx0ZXNhY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyNi44MTU5NTEyMzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjEwNTAxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIHRyYW5zcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIgKEtITyksIHRhcmdldGVkIGF0IGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJIHdpdGhvdXQgZGV2aWNlIHRyZWUgKHN1Y2ggYXMgTG9vbmdBcmNoKS4gVGhlIG5ldyBjb25maWcgQ09ORklHX0VGSV9LSE8gaXMgb25seSBzZWxlY3RlZCBieSBhcmNoL2xvb25nYXJjaC9LY29uZmlnIGFuZCBjYW5ub3QgYmUgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBPbiBhbWQ2NCwgYWxsIEVGSSBLSE8gbG9naWMgaW4gdGhlIEVGSSBkcml2ZXJzIGFuZCBsaWJzdHViIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhbiBpbmxpbmUgbm8tb3AgcmV0dXJuaW5nIDAsIGFuZCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgYXJlIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1c2lvbi4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIGZvciBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxMzU0ZTE3MTQzYzU4NzQ4NjNkYzVhN2E4OGYzY2UyMzc4OTk2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MjE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggYTIxZjUxZTU4MTVlOS4uNWVhYTY1NTc4ZDU4ZSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC02ODUsNiArNjg1LDEwIEBAIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXG4gY29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxuK1x0ZGVmX2Jvb2wgNjRCSVQgXHUwMDI2XHUwMDI2IEVGSV9TVFVCXG4rXHRzZWxlY3QgRUZJX0tITyBpZiBLRVhFQ19IQU5ET1ZFUlxuK1xuIGNvbmZpZyBBUkNIX1NFTEVDVFNfS0VYRUNfRklMRVxuIFx0ZGVmX2Jvb2wgNjRCSVRcbiBcdGRlcGVuZHMgb24gS0VYRUNfRklMRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5kNmMxMzcyNDg0YjRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTMxNCw2ICszMTQsMTggQEAgY29uZmlnIEVGSV9TQkFUX0ZJTEVcbiBcbiBcdCAgSWYgdW5zdXJlLCBsZWF2ZSBibGFuay5cbiBcbitjb25maWcgRUZJX0tIT1xuK1x0Ym9vbFxuK1x0ZGVwZW5kcyBvbiBFRklfU1RVQiBcdTAwMjZcdTAwMjYgRUZJX0dFTkVSSUNfU1RVQiBcdTAwMjZcdTAwMjYgS0VYRUNfSEFORE9WRVJcbitcdGhlbHBcbitcdCAgQ2FycnkgdGhlIEtITyBzdGF0ZSAodGhlIEtITyBzdGF0ZSBGRFQgYW5kIHRoZSBzY3JhdGNoIGFyZWEpIGZyb21cbitcdCAgb25lIGtlcm5lbCB0byB0aGUgbmV4dCBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlXG4rXHQgIGVudHJ5IHVuZGVyIExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlELCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0XG4rXHQgIGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBhIGRldmljZSB0cmVlIChlLmcuIExvb25nQXJjaCkuXG4rXG4rXHQgIEFyY2hpdGVjdHVyZXMgd2l0aCBhIGJvb3QgRkRUIChhcm02NCwgcmlzY3YpIHVzZSB0aGUgL2Nob3NlbiBGRFRcbitcdCAgcGF0aCBpbnN0ZWFkIGFuZCBkbyBub3Qgc2VsZWN0IHRoaXMuXG4rXG4gZW5kbWVudVxuIFxuIGNvbmZpZyBVRUZJX0NQRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCAwMzI3YTM5ZDMxZmE1Li42MzgwY2ZhYjE0OTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXRyZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG5AQCAtNjIsNiArNjMsOSBAQCB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfcm5nX3NlZWQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtX3Jlc2VydmUgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcnRfcHJvcCA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBpbml0cmQgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBlZmlfa2hvX3RhYmxlX3BoeXMgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuKyNlbmRpZlxuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHByaW1hcnlfZGlzcGxheV90YWJsZTtcbiBcbkBAIC02MjksNiArNjMzLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiBcdHtFRklfVENHMl9GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFx0XCJUUE1GaW5hbExvZ1wiXHR9LFxuIFx0e0VGSV9DQ19GSU5BTF9FVkVOVFNfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS50cG1fZmluYWxfbG9nLFx0XCJDQ0ZpbmFsTG9nXCJcdH0sXG4gXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcdFx1MDAyNm1lbV9yZXNlcnZlLFx0XHRcIk1FTVJFU0VSVkVcIlx0fSxcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitcdHtMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCxcdFx0XHUwMDI2ZWZpX2tob190YWJsZV9waHlzLFx0XCJLSE9cIlx0XHR9LFxuKyNlbmRpZlxuIFx0e0xJTlVYX0VGSV9JTklUUkRfTUVESUFfR1VJRCxcdFx0XHUwMDI2aW5pdHJkLFx0XHRcIklOSVRSRFwiXHR9LFxuIFx0e0VGSV9SVF9QUk9QRVJUSUVTX1RBQkxFX0dVSUQsXHRcdFx1MDAyNnJ0X3Byb3AsXHRcdFwiUlRQUk9QXCJcdH0sXG4gI2lmZGVmIENPTkZJR19PVk1GX0RFQlVHX0xPR1xuQEAgLTgwNiw2ICs4MTMsMzEgQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXG4gXHRcdH1cbiBcdH1cbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xuK1x0XHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG87XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFJlc2VydmUgdGhlIHN0dWItYWxsb2NhdGVkIHRhYmxlIHNvIGl0IGlzIG5laXRoZXIgaGFuZGVkXG4rXHRcdCAqIG91dCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yIG5vciBwbGFjZWQgb24gYnkga2V4ZWNcbitcdFx0ICogc2VnbWVudHMsIG1pcnJvcmluZyB0aGUgbWVtcmVzZXJ2ZSBoYW5kbGluZyBhYm92ZS4gIFRoaXNcbitcdFx0ICogcnVucyBvbiBldmVyeSBib290LCBzbyBpdCBhbHNvIHByb3RlY3RzIHRoZSB0YWJsZSBpbiB0aGVcbitcdFx0ICogbmV4dCBrZXJuZWwgdW50aWwgaXQgcmVhZHMgaXQuXG4rXHRcdCAqL1xuK1x0XHRtZW1ibG9ja19yZXNlcnZlKGVmaV9raG9fdGFibGVfcGh5cywgc2l6ZW9mKCpraG8pKTtcbitcbitcdFx0a2hvID0gZWFybHlfbWVtcmVtYXAoZWZpX2tob190YWJsZV9waHlzLCBzaXplb2YoKmtobykpO1xuK1x0XHRpZiAoa2hvKSB7XG4rXHRcdFx0aWYgKGtoby1cdTAwM2VmZHRfYWRkcilcbitcdFx0XHRcdGtob19wb3B1bGF0ZSgocGh5c19hZGRyX3Qpa2hvLVx1MDAzZWZkdF9hZGRyLFxuK1x0XHRcdFx0XHQgICAgIGtoby1cdTAwM2VmZHRfc2l6ZSxcbitcdFx0XHRcdFx0ICAgICAocGh5c19hZGRyX3Qpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcixcbitcdFx0XHRcdFx0ICAgICBraG8tXHUwMDNlc2NyYXRjaF9zaXplKTtcbitcdFx0XHRlYXJseV9tZW11bm1hcChraG8sIHNpemVvZigqa2hvKSk7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiBcdGlmIChydF9wcm9wICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHtcbiBcdFx0ZWZpX3J0X3Byb3BlcnRpZXNfdGFibGVfdCAqdGJsO1xuIFxuQEAgLTExNzEsNiArMTIwMyw1MiBAQCBzdGF0aWMgaW50IF9faW5pdCBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQodm9pZClcbiB9XG4gZWFybHlfaW5pdGNhbGwoZWZpX21lbXJlc2VydmVfcm9vdF9pbml0KTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqZWZpX2tob190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rc3RhdGljIGludCBfX2luaXQgZWZpX2tob190YWJsZV9pbml0KHZvaWQpXG4re1xuK1x0aWYgKGVmaV9raG9fdGFibGVfcGh5cyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBLZWVwIGEgcGVyc2lzdGVudCBtYXBwaW5nIG9mIHRoZSB0YWJsZSwgdGhlIHNhbWUgd2F5XG4rXHQgKiBlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQoKSBrZWVwcyB0aGUgbWVtcmVzZXJ2ZSByb290IG1hcHBlZDpcbitcdCAqIGVmaV9raG9fdXBkYXRlKCkgaXMgYWxzbyBjYWxsZWQgb24gdGhlIGNyYXNoIGtleGVjIHBhdGgsIHdoZXJlXG4rXHQgKiBtZW1yZW1hcCgpIGlzIG5vIGxvbmdlciBhbiBvcHRpb24uXG4rXHQgKi9cbitcdGVmaV9raG9fdGFibGUgPSBtZW1yZW1hcChlZmlfa2hvX3RhYmxlX3BoeXMsIHNpemVvZigqZWZpX2tob190YWJsZSksXG4rXHRcdFx0XHQgTUVNUkVNQVBfV0IpO1xuK1x0V0FSTl9PTl9PTkNFKCFlZmlfa2hvX3RhYmxlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitlYXJseV9pbml0Y2FsbChlZmlfa2hvX3RhYmxlX2luaXQpO1xuK1xuKy8qXG4rICogVXBkYXRlIHRoZSBLSE8gY29uZmlnIHRhYmxlIGluIHBsYWNlIGJlZm9yZSBhIGtleGVjLCBzbyB0aGUgbmV4dCBrZXJuZWxcbisgKiBmaW5kcyB0aGUgY3VycmVudCBoYW5kb3ZlciBzdGF0ZS4gIE1pcnJvcnMgZWZpX21lbV9yZXNlcnZlX3BlcnNpc3RlbnQoKTpcbisgKiB0aGUgY29uZmlnIHRhYmxlIGVudHJ5IHdhcyBpbnN0YWxsZWQgb25jZSBieSB0aGUgRUZJIHN0dWIgYW5kIGlzIGluaGVyaXRlZFxuKyAqIGFjcm9zcyBrZXhlYywgc28gb25seSB0aGUgdGFibGUgY29udGVudHMgYXJlIHJld3JpdHRlbiBoZXJlIC0tIHRoZSBjb25maWdcbisgKiB0YWJsZSBhcnJheSBpcyBuZXZlciByZWJ1aWx0IGFuZCBzdC1cdTAwM2V0YWJsZXMgaXMgbmV2ZXIgc3dpdGNoZWQuXG4rICovXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4rXHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICpraG8gPSBlZmlfa2hvX3RhYmxlO1xuK1xuK1x0aWYgKCFraG8pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0a2hvLVx1MDAzZWZkdF9hZGRyXHRcdD0gZmR0X2FkZHI7XG4rXHRraG8tXHUwMDNlZmR0X3NpemVcdFx0PSBmZHRfc2l6ZTtcbitcdGtoby1cdTAwM2VzY3JhdGNoX2FkZHJcdD0gc2NyYXRjaF9hZGRyO1xuK1x0a2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZVx0PSBzY3JhdGNoX3NpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19LRVhFQ1xuIHN0YXRpYyBpbnQgdXBkYXRlX2VmaV9yYW5kb21fc2VlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbmluZGV4IDQyZDYwNzNiY2QwNjIuLjc1MWY0NjI4MDQzM2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuQEAgLTEwMCw2ICsxMDAsMjkgQEAgc3RhdGljIHZvaWQgaW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKHZvaWQpXG4gXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gaW5zdGFsbCBtZW1yZXNlcnZlIGNvbmZpZyB0YWJsZSFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGluc3RhbGxfa2hvX3RhYmxlKHZvaWQpXG4re1xuKyNpZmRlZiBDT05GSUdfRUZJX0tIT1xuK1x0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xuK1x0ZWZpX2d1aWRfdCBraG9fdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlEO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9MT0FERVJfREFUQSwgc2l6ZW9mKCpraG8pLFxuK1x0XHRcdCAgICAgKHZvaWQgKiopXHUwMDI2a2hvKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBLSE8gY29uZmlnIHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KmtobyA9IChzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhKXt9O1xuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLCBcdTAwMjZraG9fdGFibGVfZ3VpZCxcbitcdFx0XHQgICAgIGtobyk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgS0hPIGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB1MzIgZ2V0X3N1cHBvcnRlZF9ydF9zZXJ2aWNlcyh2b2lkKVxuIHtcbiBcdGNvbnN0IGVmaV9ydF9wcm9wZXJ0aWVzX3RhYmxlX3QgKnJ0X3Byb3BfdGFibGU7XG5AQCAtMTgwLDYgKzIwMyw4IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuIFxuK1x0aW5zdGFsbF9raG9fdGFibGUoKTtcbitcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG4gXHRmcmVlX3ByaW1hcnlfZGlzcGxheShkcHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBhYTE1ZmY4ODUzOWJkLi41NjRiM2NiZDVjY2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTQyMiw2ICs0MjIsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbisjZGVmaW5lIExJTlVYX0VGSV9LRVhFQ19IQU5ET1ZFUl9HVUlEXHRcdEVGSV9HVUlEKDB4Yzk0MWI2YzcsIDB4N2IzZiwgMHg0YWY2LCAgMHg5ZSwgMHg1MCwgMHhmYywgMHhiMywgMHhhOCwgMHg4NiwgMHg4YSwgMHgxNylcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTEyNzMsNiArMTI3NCw0MSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuIFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9LSE9cbisvKlxuKyAqIFRoZSBMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCBjb25maWcgdGFibGUgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlLlxuKyAqIEl0IGNhcnJpZXMgdGhlIGtleGVjIGhhbmRvdmVyIChLSE8pIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQga2VybmVsIHRvIHRoZVxuKyAqIG5leHQgb25lOiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBLSE8gc3RhdGUgRkRUIGFuZCBvZiB0aGUgc2NyYXRjaCBhcmVhLlxuKyAqXG4rICogVGhpcyBpcyB0aGUgaGFuZG92ZXIgY2hhbm5lbCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRklcbisgKiB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKGUuZy4gTG9vbmdBcmNoKSwgd2hlcmUgdGhlIC9jaG9zZW4gbGludXgsa2hvLWZkdFxuKyAqIGFuZCBsaW51eCxraG8tc2NyYXRjaCBwcm9wZXJ0aWVzIHJlYWQgYnkgZWFybHlfaW5pdF9kdF9jaGVja19raG8oKSBhcmUgbm90XG4rICogYXZhaWxhYmxlLiAgVGhlIEVGSSBzdHViIGFsbG9jYXRlcyBhbmQgaW5zdGFsbHMgdGhlIHRhYmxlIG9uY2UgYXQgYm9vdDtcbisgKiB0aGUgY3VycmVudCBrZXJuZWwgdXBkYXRlcyBpdHMgY29udGVudHMgYmVmb3JlIGEga2V4ZWMsIGFuZCB0aGUgbmV4dFxuKyAqIGtlcm5lbCByZWFkcyBpdCBiYWNrIGFuZCBjYWxscyBraG9fcG9wdWxhdGUoKS5cbisgKlxuKyAqIFRoZSBsYXlvdXQgaXMgYW4gQUJJIGJldHdlZW4gdGhlIHR3byBrZXJuZWxzIGFuZCBjYXJyaWVzIG5vIHZlcnNpb25cbisgKiBmaWVsZDogYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBtdXN0IHVzZSBhIG5ldyBHVUlELiAgVGhlIGhhbmRvdmVyIHBheWxvYWRcbisgKiBpdHNlbGYgaXMgdmVyc2lvbmVkIHNlcGFyYXRlbHkgYnkgdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBLSE8gc3RhdGVcbisgKiBGRFQsIHdoaWNoIGtob19wb3B1bGF0ZSgpIGNoZWNrcy5cbisgKi9cbitzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhIHtcbitcdHU2NCBmZHRfYWRkcjtcbitcdHU2NCBmZHRfc2l6ZTtcbitcdHU2NCBzY3JhdGNoX2FkZHI7XG4rXHR1NjQgc2NyYXRjaF9zaXplO1xuK30gX19wYWNrZWQ7XG4rXG4raW50IGVmaV9raG9fdXBkYXRlKHBoeXNfYWRkcl90IGZkdF9hZGRyLCB1NjQgZmR0X3NpemUsXG4rXHRcdCAgIHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBlZmlfa2hvX3VwZGF0ZShwaHlzX2FkZHJfdCBmZHRfYWRkciwgdTY0IGZkdF9zaXplLFxuK1x0XHRcdFx0IHBoeXNfYWRkcl90IHNjcmF0Y2hfYWRkciwgdTY0IHNjcmF0Y2hfc2l6ZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBUaGUgTElOVVhfRUZJX01PS19WQVJJQUJMRV9UQUJMRV9HVUlEIGNvbmZpZyB0YWJsZSBjYW4gYmUgcHJvdmlkZWRcbiAgKiB0byB0aGUga2VybmVsIGJ5IGFuIEVGSSBib290IGxvYWRlci4gVGhlIHRhYmxlIGNvbnRhaW5zIGEgcGFja2VkXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2NvcmUuYyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbmluZGV4IDJiMzZhYTlmYWRlMDYuLjYxNjZjZTQyMDNkM2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jXG4rKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXG5AQCAtMTM4LDYgKzEzOCwxMyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAoa2V4ZWNfY3Jhc2hfaW1hZ2UpIHtcbiBcdFx0XHRzdHJ1Y3QgcHRfcmVncyBmaXhlZF9yZWdzO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBjcmFzaCBpbWFnZSBjYXJyaWVzIG5vIEtITyBzdGF0ZTogY2xlYXIgdGhlXG4rXHRcdFx0ICogdHJhbnNwb3J0IHNvIHRoZSBjcmFzaCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkXG4rXHRcdFx0ICogb2YgcmV2aXZpbmcgZnJvbSBzdGFsZSBzdGF0ZS5cbitcdFx0XHQgKi9cbitcdFx0XHQodm9pZClraG9fc3luY19jaGFubmVsKGtleGVjX2NyYXNoX2ltYWdlKTtcbitcbiBcdFx0XHRjcmFzaF9zZXR1cF9yZWdzKFx1MDAyNmZpeGVkX3JlZ3MsIHJlZ3MpO1xuIFx0XHRcdGNyYXNoX3NhdmVfdm1jb3JlaW5mbygpO1xuIFx0XHRcdG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oXHUwMDI2Zml4ZWRfcmVncyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbmluZGV4IGRjNzcwYjlhNmQwNTMuLjE0N2Y1YjViMjNkNDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5AQCAtMTE0Niw2ICsxMTQ2LDExIEBAIGludCBrZXJuZWxfa2V4ZWModm9pZClcbiBcdFx0Z290byBVbmxvY2s7XG4gXHR9XG4gXG4rXHQvKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIGJlaW5nIGV4ZWN1dGVkLiAqL1xuK1x0ZXJyb3IgPSBraG9fc3luY19jaGFubmVsKGtleGVjX2ltYWdlKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBVbmxvY2s7XG4rXG4gXHRpZiAoIWtleGVjX2ltYWdlLVx1MDAzZXByZXNlcnZlX2NvbnRleHQpIHtcbiBcdFx0ZXJyb3IgPSBsaXZldXBkYXRlX3JlYm9vdCgpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ludGVybmFsLmggYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuaW5kZXggMjI4YmI4OGMwMThiYy4uNGQ0YzIyOTBlODVjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19pbnRlcm5hbC5oXG4rKysgYi9rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaFxuQEAgLTQ2LDYgKzQ2LDcgQEAgc3RydWN0IGtleGVjX2J1ZjtcbiBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuIFx0XHRcdGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKTtcbiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKTtcbitpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0XHQgICAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbkBAIC01NCw1ICs1NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3N5bmNfY2hhbm5lbChzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbiAjZW5kaWYgLyogTElOVVhfS0VYRUNfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li5iNjAwOGMwMTUyNWQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3VudF96ZXJvcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbkBAIC0yMDYzLDYgKzIwNjQsMzggQEAgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFN5bmNocm9uaXplIHRoZSBoYW5kb3ZlciB0cmFuc3BvcnQgd2l0aCB0aGUgaW1hZ2UgdGhhdCBpcyBhYm91dCB0byBiZVxuKyAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXG4rICogc2VwYXJhdGUgaW1hZ2VzIGZvciBhIG5vcm1hbCByZWJvb3QgYW5kIGZvciBjcmFzaC4gIFdyaXRlIHRoZSBzdGF0ZSBvZiB0aGVcbisgKiBzZWxlY3RlZCBpbWFnZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQsIHJhdGhlciB0aGFuIHdoaWxlIGFcbisgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXG4rICogY2hhbm5lbCBwb2ludGluZyBhdCB0aGF0IGZhaWxlZCBpbWFnZS5cbisgKlxuKyAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXG4rICogYW4gaW1hZ2UgbG9hZGVkIHdoaWxlIEtITyBpcyBkaXNhYmxlZCBjYXJyaWVzIG5vIGhhbmRvdmVyIHN0YXRlLiAgQ2xlYXIgdGhlXG4rICogY2hhbm5lbCBmb3IgdGhvc2UgaW1hZ2VzIHNvIHRoZSBuZXh0IGtlcm5lbCBib290cyBjb2xkIGluc3RlYWQgb2YgcmV2aXZpbmdcbisgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcbisgKiBhZmZlY3QgYSBjb2xkIGJvb3QuXG4rICovXG4raW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gpIHtcbitcdFx0ZWZpX2tob191cGRhdGUoMCwgMCwgMCwgMCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZXJyID0gZWZpX2tob191cGRhdGUoaW1hZ2UtXHUwMDNla2hvLmZkdCwgUEFHRV9TSVpFLFxuK1x0XHRcdCAgICAgaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlbWVtLFxuK1x0XHRcdCAgICAgaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlYnVmc3opO1xuK1x0aWYgKGVycilcbitcdFx0cHJfd2FybihcImZhaWxlZCB0byB1cGRhdGUgRUZJIGNvbmZpZyB0YWJsZTogJWRcXG5cIiwgZXJyKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuIFx0XHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2hvX2Jsb2NrLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuaW5kZXggMGQyYTM0MmVmNDIyOC4uMGQ1Njg5MWIyZjRjOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9raG9fYmxvY2suY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL2Jsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9raG9fYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiBcbiAvKlxuICAqIFNhZmVndWFyZCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGJsb2Nrcy4gVGhpcyBpcyB1c2VkIHRvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYxNTNiMDNjNGVmYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2xvb25nYXJjaC5jb25mXG5AQCAtMCwwICsxLDExIEBAXG4rUUVNVV9FRkk9XCIke1FFTVVfRUZJOi0vdXNyL3NoYXJlL2VkazIvbG9vbmdhcmNoNjQvUUVNVV9FRkkuZmR9XCJcbitRRU1VX0NNRD1cInFlbXUtc3lzdGVtLWxvb25nYXJjaDY0IC1NIHZpcnQgLWNwdSBsYTQ2NCAtYmlvcyAkUUVNVV9FRklcIlxuK1FFTVVfS0NPTkZJRz1cIlxuK0NPTkZJR19BQ1BJX1NQQ1JfVEFCTEU9eVxuK0NPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXlcbitDT05GSUdfU0VSSUFMXzgyNTA9eVxuK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXlcbitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15XG4rXCJcbitLRVJORUxfSU1BR0U9XCJ2bWxpbnV4LmVmaVwiXG4rS0VSTkVMX0NNRExJTkU9XCJjb25zb2xlPXR0eVMwIGVhcmx5Y29uXCJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaFxuaW5kZXggMDAxNGJkNzZlODhkZS4uZDA1YmEwNzM0YjI1OSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2hcbkBAIC0yMSw3ICsyMSw3IEBAIE9wdGlvbnM6XG4gXHQtZClcdHBhdGggdG8gdGhlIGtlcm5lbCBidWlsZCBkaXJlY3RvcnlcbiBcdC1qKVx0bnVtYmVyIG9mIGpvYnMgZm9yIGNvbXBpbGF0aW9uLCBzaW1pbGFyIHRvIC1qIGluIG1ha2VcbiBcdC10KVx0cnVuIHRlc3QgZm9yIHRhcmdldF9hcmNoLCByZXF1aXJlcyBDUk9TU19DT01QSUxFIHNldFxuLVx0XHRzdXBwb3J0ZWQgdGFyZ2V0czogYWFyY2g2NCwgeDg2XzY0XG4rXHRcdHN1cHBvcnRlZCB0YXJnZXRzOiBhYXJjaDY0LCBsb29uZ2FyY2g2NCwgeDg2XzY0XG4gXHQtaClcdGRpc3BsYXkgdGhpcyBoZWxwXG4gRU9GXG4gfVxuQEAgLTEyNiw2ICsxMjYsNyBAQCBmdW5jdGlvbiB0YXJnZXRfdG9fYXJjaCgpIHtcbiBcbiBcdGNhc2UgJHRhcmdldCBpblxuIFx0ICAgICBhYXJjaDY0KSBlY2hvIFwiYXJtNjRcIiA7O1xuK1x0ICAgICBsb29uZ2FyY2g2NCkgZWNobyBcImxvb25nYXJjaFwiIDs7XG4gXHQgICAgIHg4Nl82NCkgZWNobyBcIng4NlwiIDs7XG4gXHQgICAgICopIHNraXAgXCJhcmNoaXRlY3R1cmUgJHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkXCJcbiBcdGVzYWNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjI2LjgxNTk1MjgzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzg4NTEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGluIHBsYXkgaXMgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCdsbCBhZmZlY3QgdGhlIHN5c3RlbS4gRmlyc3QsIEknbSBnb2luZyB0byB0YWtlIGEgcmVhbGx5IGNsb3NlIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgZGlmZiBpdHNlbGYg4oCTIHRoYXQncyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBhcmVhczogYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvKmAsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBga2VybmVsL2tleGVjXypgIGZpbGVzLCBhbmQgc29tZSB0ZXN0LXJlbGF0ZWQgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby9gLiBUaGF0J3MgYSBwcmV0dHkgYnJvYWQgc2NvcGUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBwcmV0dHkgaW1wb3J0YW50LlxuXG5NeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgYEtFWEVDX0hBTkRPVkVSYCwgYEVGSV9LSE9gLCBhbmQgcmVsYXRlZCBzZXR0aW5ncyBiZWhhdmUuIEFyZSB0aGV5IGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHF1aXJrcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSBnb2luZyB0byBiaXRlIG1lIGxhdGVyPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHg4Nl82NCBhc3BlY3RzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBUbyBkaWcgaW50byB0aGF0LCBJJ20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEtFWEVDX0hBTkRPVkVSYCBpbiB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIGhvdyBpdCdzIHVzZWQgYWNyb3NzIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMToyOS44OTQ4MDg2OTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwODYwMzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEtFWEVDX0hBTkRPVkVSfEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJ8RUZJX0tITylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE3MDg9Y29uZmlnIEFSQ0hfREVGQVVMVF9LRVhFQ19JTUFHRV9WRVJJRllfU0lHXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTcxMC1cXG5hcmNoL2FybTY0L0tjb25maWc6MTcxMTpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUlxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzEyLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Njg1PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNjg3LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6Njg4OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02ODktXFx0ZGVmX2Jvb2wgNjRCSVQgXFx1MDAyNlxcdTAwMjYgRUZJX1NUVUJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MTk3OD1jb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODAtXFxuYXJjaC94ODYvS2NvbmZpZzoxOTgxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSXFxuYXJjaC94ODYvS2NvbmZpZy0xOTgyLVxcdGRlZl9ib29sIFg4Nl82NFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0yOTY9Y29uZmlnIEVGSV9TQkFUX0ZJTEVcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMzE2LVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MzE3OmNvbmZpZyBFRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjMyLjYwMzQyMTE1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjQ3NjkwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtFWEVDIEhhbmRvdmVyIGFuZCBFRklfS0hPIG9uIHg4Nl82NCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgS0VYRUNfSEFORE9WRVJgIGFuZCBgRUZJX0tIT2Agc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gZ3Jhc3AgdGhlIHg4Nl82NC1zcGVjaWZpYyBpbXBsaWNhdGlvbnMuIFRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsaXZlIHVwZGF0ZSBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhvc2Ugb3B0aW9ucywgc28gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBga2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ2AuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIGFuZCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZW0gb24geDg2XzY0LiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgY2xlYXJseSBvdXRsaW5lIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFyY2hpdGVjdHVyYWwgcXVpcmtzIGludm9sdmVkIGluIGVpdGhlciBoYW5kb3ZlciBtZWNoYW5pc21zIHdoZW4gZW5hYmxlZCBvbiBhbiB4ODZcXF82NCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTozNS4wMjgxOTE3OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDE2NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVGSV9LSE98S0VYRUNfSEFORE9WRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xOTc4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0pVTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTk4MC1cXG5hcmNoL3g4Ni9LY29uZmlnOjE5ODE6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJcXG5hcmNoL3g4Ni9LY29uZmlnLTE5ODItXFx0ZGVmX2Jvb2wgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz03NzA9c3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3Ni1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3Nzc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzc4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0yNzQ9c3RhdGljIHZvaWQgc2V0dXBfa2hvKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0yODAtXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjI4MTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz0zMDE9c2V0dXBfYm9vdF9wYXJhbWV0ZXJzKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTAtXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jOjM5MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTM5Mi1cXHRcXHQvKiBTZXR1cCBzcGFjZSB0byBzdG9yZSBwcmVzZXJ2YXRpb24gbWV0YWRhdGEgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYz00NzU9c3RhdGljIHZvaWQgKmJ6SW1hZ2U2NF9sb2FkKHN0cnVjdCBraW1hZ2UgKmltYWdlLCBjaGFyICprZXJuZWwsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtNTgxLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzo1ODI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtNTgzLVxcdFxcdGtidWYuYnVmc3ogKz0gc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSArXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00NTc9c3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDYyLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2MzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSkge1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2NDpcXHRcXHRwcl93YXJuKFxcXCJQYXNzZWQgS0hPIGRhdGEsIGJ1dCBDT05GSUdfS0VYRUNfSEFORE9WRVIgbm90IHNldC4gSWdub3JpbmcuXFxcXG5cXFwiKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00NjUtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTozNS4xNDkyMTQ3NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAzNjg4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRUZJX0tITyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGNoZWNraW5nIHRvIHNlZSBpZiBgRUZJX0tIT2AgaXMgZGlyZWN0bHkgZW5hYmxlZCB0aGVyZS4gTm9wZSwgZG9lc24ndCBzZWVtIHRvIGJlLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSBpdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCwgZGVmYXVsdC1vbiBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpdHNlbGYuIFRoaXMgbWVhbnMgaXQncyBsaWtlbHkgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIHNlbGVjdGluZyBgRUZJX0tIT2AgZnJvbSAqYW55d2hlcmUqIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gaXRzIGRlcGVuZGVuY2llcy4gV2hlcmUncyBpdCBiZWluZyBwdWxsZWQgaW4gZnJvbT8gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6MzcuMzUyOTE2NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDczMjUzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0LipFRklfS0hPfEVGSV9LSE9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz02ODg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTY4OS1cXHRkZWZfYm9vbCA2NEJJVCBcXHUwMDI2XFx1MDAyNiBFRklfU1RVQlxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NjkwOlxcdHNlbGVjdCBFRklfS0hPIGlmIEtFWEVDX0hBTkRPVkVSXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02OTEtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTI5Nj1jb25maWcgRUZJX1NCQVRfRklMRVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZy0zMTYtXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzozMTc6Y29uZmlnIEVGSV9LSE9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTMxOC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGluaXRyZCA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6NjY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjctc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGVmaV9raG9fdGFibGVfcGh5cyA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz02MjQ9c3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTYzNS1cXHR7TElOVVhfRUZJX01FTVJFU0VSVkVfVEFCTEVfR1VJRCxcXHRcXHUwMDI2bWVtX3Jlc2VydmUsXFx0XFx0XFxcIk1FTVJFU0VSVkVcXFwiXFx0fSxcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo2MzY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtNjM3LVxcdHtMSU5VWF9FRklfS0VYRUNfSEFORE9WRVJfR1VJRCxcXHRcXHRcXHUwMDI2ZWZpX2tob190YWJsZV9waHlzLFxcdFxcXCJLSE9cXFwiXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTcxNj1pbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTgxNS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzo4MTY6I2lmZGVmIENPTkZJR19FRklfS0hPXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtODE3LVxcdGlmIChlZmlfa2hvX3RhYmxlX3BoeXMgIT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM9MTIwND1lYXJseV9pbml0Y2FsbChlZmlfbWVtcmVzZXJ2ZV9yb290X2luaXQpO1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jLTEyMDUtXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTIwNjojaWZkZWYgQ09ORklHX0VGSV9LSE9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMjA3LXN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX2tob19kYXRhICplZmlfa2hvX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYz0xMDM9c3RhdGljIHZvaWQgaW5zdGFsbF9raG9fdGFibGUodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMtMTA0LXtcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmM6MTA1OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYy0xMDYtXFx0c3RydWN0IGxpbnV4X2VmaV9raG9fZGF0YSAqa2hvO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZmkuaD0xMjc1PXZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2VmaS5oLTEyNzYtXFxuaW5jbHVkZS9saW51eC9lZmkuaDoxMjc3OiNpZmRlZiBDT05GSUdfRUZJX0tIT1xcbmluY2x1ZGUvbGludXgvZWZpLmgtMTI3OC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo0MC4xNjAyNDg4MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgxMTU4MTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXhlYyBIYW5kb3ZlciBQYXRjaCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgRUZJX0tIT2AsIGFuZCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBFRklfS0hPYCBpcyBhIHZlcnkgc3BlY2lmaWMgb3B0aW9uLCBzZWxlY3RlZCBvbmx5IGlmIGBFRklfU1RVQmAsIGBFRklfR0VORVJJQ19TVFVCYCwgYW5kIGBLRVhFQ19IQU5ET1ZFUmAgYXJlIGVuYWJsZWQsIHdpdGggZnVydGhlciBjb25zdHJhaW50cyBmcm9tIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBUaGUga2V5IGhlcmUgaXMgaXRzIGxhY2sgb2YgYSBkaXJlY3QgcHJvbXB0LiBJdCdzICpvbmx5KiBzZWxlY3RhYmxlIGJ5IG90aGVyIG9wdGlvbnMuXG5cbk15IGludmVzdGlnYXRpb24gbGVkIG1lIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCwgd2hpY2ggZGVmaW5lcyBgQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUmAgYW5kICpzZWxlY3RzKiBgRUZJX0tIT2AgKmlmKiBgS0VYRUNfSEFORE9WRVJgIGlzIGFsc28gc2VsZWN0ZWQuIEJpbmdvISBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgdmVyeSB0YXJnZXRlZCB1c2UgY2FzZSBmb3IgYXJjaGl0ZWN0dXJlcyBib290aW5nIHZpYSBFRkkgKndpdGhvdXQqIGEgZGV2aWNlIHRyZWUgKEZEVCksIGFzIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBoZWxwIHRleHQuXG5cbkkgcHJvY2VlZGVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGFsbCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzOlxuXG4xLiAgTW9kaWZpZWQgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgXG4yLiAgQWRkZWQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdgIGFuZCBgY29uZmlnIEVGSV9LSE9gXG4zLiAgQ2hhbmdlcyB0byBgZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNgLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgZWZpX2tob190YWJsZV9waHlzYCwgdGFibGUgZW50cmllcywgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0VGSV9LSE9gIGJsb2NrLlxuNC4gIFVwZGF0ZXMgdG8gYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY2AsIHNwZWNpZmljYWxseSBgaW5zdGFsbF9raG9fdGFibGVgLCBhbHNvIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC5cbjUuICBNb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBsaW51eF9lZmlfa2hvX2RhdGFgIGFuZCBhIGRlY2xhcmF0aW9uL3N0dWIgZm9yIGBlZmlfa2hvX3VwZGF0ZWBcbjYuICBVcGRhdGVzIGluIGBrZXJuZWwvY3Jhc2hfY29yZS5jYCBhbmQgYGtlcm5lbC9rZXhlY19jb3JlLmNgIGluY2x1ZGluZyBjYWxscyB0byBga2hvX3N5bmNfY2hhbm5lbGAsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBoYW5kb3Zlci5cbjcuICBUaGUgYWRkaXRpb24gb2YgYGtob19zeW5jX2NoYW5uZWxgIHdpdGhpbiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIHdoaWNoIGNhbGxzIGBlZmlfa2hvX3VwZGF0ZWAuXG44LiAgRGVjbGFyYXRpb24gb2YgYGtob19zeW5jX2NoYW5uZWwoKWAgLyBzdHViIHdoZW4gYCFDT05GSUdfS0VYRUNfSEFORE9WRVJgIGluIGBrZXJuZWwva2V4ZWNfaW50ZXJuYWwuaGBcbjkuICBBZGRpdGlvbiBvZiBgI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZWAgaW4gYGtlcm5lbC9saXZldXBkYXRlL2tob19ibG9jay5jYFxuMTAuIFNlbGZ0ZXN0L3NjcmlwdCBjaGFuZ2VzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vLi4uYFxuXG5JIG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgKmFueSogb2YgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbWQ2NC4gSSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0VGSV9LSE9gIGNhbiAqKm5ldmVyKiogYmUgZW5hYmxlZCBvbiBhbWQ2NCwgYmVjYXVzZSBMb29uZ0FyY2gncyBLY29uZmlnIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGNhbiBiZSBzZWxlY3RlZC4gSSB0aGVuIGNoZWNrZWQgYGdyZXBwZXJgIGFuZCBjb25maXJtZWQgbm90aGluZyBlbHNlIGluIHRoZSBrZXJuZWwgdHJlZSBzZWxlY3RlZCBvciBtZW50aW9uZWQgYENPTkZJR19FRklfS0hPYC4gVGhpcyBpcyBjcml0aWNhbC4gT24gYW1kNjQsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCBhY3RpdmF0ZWQuXG5cbkkgZHJpbGxlZCBkb3duIGZ1cnRoZXIsIGV4YW1pbmluZyB0aGUgYmVoYXZpb3Igb2YgYGtob19zeW5jX2NoYW5uZWxgIG9uIGFtZDY0LiBJIHNlZSB0aGF0IGV2ZW4gaWYgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgKmlzKiBlbmFibGVkIG9uIGFtZDY0LCBga2hvX3N5bmNfY2hhbm5lbGAgY2FsbHMgYGVmaV9raG9fdXBkYXRlKClgLiBIb3dldmVyLCBzaW5jZSBgQ09ORklHX0VGSV9LSE9gIGlzICpub3QqIGRlZmluZWQgb24gYW1kNjQsIGBlZmlfa2hvX3VwZGF0ZSgpYCBpcyBqdXN0IGFuICppbmxpbmUqIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAwLiBTbyB0aGUgZnVuY3Rpb24gY2FsbCBiZWNvbWVzIGEgbm8tb3AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBraG9fc3luY19jaGFubmVsYC4gSW4gc3VtbWFyeSwgZXZlbiB3aXRoIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGVuYWJsZWQsIEtITyBvbiBhbWQ2NCBib2lscyBkb3duIHRvIGEgdHJpdmlhbCBuby1vcC5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgd2F5cyBrZXhlYyBoYW5kb3ZlciB3b3JrcywgZS5nLiBvbiB4ODYsIHdoaWNoLCBhcyBJIHN1c3BlY3RlZCwgdXNlcyBgc2V0dXBfZGF0YWAgKHNwZWNpZmljYWxseSBgU0VUVVBfS0hPX01FTWApLCBhbmQgbm90IEVGSSBjb25maWd1cmF0aW9uIHRhYmxlcy5cblxuTm93LCBsZXQncyBjb25uZWN0IGFsbCB0aGUgZG90cyBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nOlxuKiAgIFRoZSBmdW5kYW1lbnRhbCBsb2dpYyBmb3IgRUZJLWJhc2VkIEtITyB0YWJsZSBoYW5kbGluZyBpcyBlbnRpcmVseSBnYXRlZCBieSBgI2lmZGVmIENPTkZJR19FRklfS0hPYC4gVGhpcyBndWFyZCBpcyAqb25seSogZW5hYmxlZCBmb3IgTG9vbmdBcmNoLlxuKiAgIFRoZSBmdW5jdGlvbnMgYWRkZWQgaW4gYGRyaXZlcnMvZmlybXdhcmUvZWZpL2AgYXJlICpub3QqIGNvbXBpbGVkIGZvciBhbWQ2NC5cbiogICBUaGUgaW5jbHVzaW9uIG9mIGAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlYCBpcyBhIG5vbi1leGVjdXRhYmxlIGNoYW5nZSBhbmQsIHRodXMsIGlycmVsZXZhbnQgdG8gZnV6emluZy5cbiogICBUaGUgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgYXJlIHVzZXItc3BhY2UgdGVzdHMuXG4qICBga2hvX3N5bmNfY2hhbm5lbGBcblxuIiwiSW5wdXRUb2tlbnMiOjExOTY4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo1My45NzE4MzM0OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA2MDpcXHRcXHRpZiAoZXJyKVxcbjIwNjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMDYyOlxcdFxcdGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaCA9IFxcdTAwMjZpbWFnZS1cXHUwMDNlc2VnbWVudFtpbWFnZS1cXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0cmV0dXJuIDA7XFxuMjA2NTpcXHR9XFxuMjA2NjpcXHRcXG4yMDY3OlxcdC8qXFxuMjA2ODpcXHQgKiBTeW5jaHJvbml6ZSB0aGUgaGFuZG92ZXIgdHJhbnNwb3J0IHdpdGggdGhlIGltYWdlIHRoYXQgaXMgYWJvdXQgdG8gYmVcXG4yMDY5OlxcdCAqIGV4ZWN1dGVkLiAgVGhlIEVGSSBjb25maWcgdGFibGUgY2hhbm5lbCBpcyBnbG9iYWwsIHdoaWxlIGtleGVjIGtlZXBzXFxuMjA3MDpcXHQgKiBzZXBhcmF0ZSBpbWFnZXMgZm9yIGEgbm9ybWFsIHJlYm9vdCBhbmQgZm9yIGNyYXNoLiAgV3JpdGUgdGhlIHN0YXRlIG9mIHRoZVxcbjIwNzE6XFx0ICogc2VsZWN0ZWQgaW1hZ2UgaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGV4ZWN1dGVkLCByYXRoZXIgdGhhbiB3aGlsZSBhXFxuMjA3MjpcXHQgKiBjYW5kaWRhdGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkLCBzbyBhIGZhaWxlZCByZXBsYWNlbWVudCBjYW5ub3QgbGVhdmUgdGhlXFxuMjA3MzpcXHQgKiBjaGFubmVsIHBvaW50aW5nIGF0IHRoYXQgZmFpbGVkIGltYWdlLlxcbjIwNzQ6XFx0ICpcXG4yMDc1OlxcdCAqIEFuIGltYWdlIGxvYWRlZCB0aHJvdWdoIHRoZSBsZWdhY3kga2V4ZWNfbG9hZCgpIHN5c2NhbGwsIGEgY3Jhc2ggaW1hZ2UsIG9yXFxuMjA3NjpcXHQgKiBhbiBpbWFnZSBsb2FkZWQgd2hpbGUgS0hPIGlzIGRpc2FibGVkIGNhcnJpZXMgbm8gaGFuZG92ZXIgc3RhdGUuICBDbGVhciB0aGVcXG4yMDc3OlxcdCAqIGNoYW5uZWwgZm9yIHRob3NlIGltYWdlcyBzbyB0aGUgbmV4dCBrZXJuZWwgYm9vdHMgY29sZCBpbnN0ZWFkIG9mIHJldml2aW5nXFxuMjA3ODpcXHQgKiBmcm9tIHN0YWxlIHN0YXRlLiAgQ2xlYXJpbmcgaXMgYmVzdC1lZmZvcnQgYmVjYXVzZSBhbiBhYnNlbnQgY2hhbm5lbCBjYW5ub3RcXG4yMDc5OlxcdCAqIGFmZmVjdCBhIGNvbGQgYm9vdC5cXG4yMDgwOlxcdCAqL1xcbjIwODE6XFx0aW50IGtob19zeW5jX2NoYW5uZWwoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuMjA4MjpcXHR7XFxuMjA4MzpcXHRcXHRpbnQgZXJyO1xcbjIwODQ6XFx0XFxuMjA4NTpcXHRcXHRpZiAoIWltYWdlLVxcdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gpIHtcXG4yMDg2OlxcdFxcdFxcdGVmaV9raG9fdXBkYXRlKDAsIDAsIDAsIDApO1xcbjIwODc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4ODpcXHRcXHR9XFxuMjA4OTpcXHRcXG4yMDkwOlxcdFxcdGVyciA9IGVmaV9raG9fdXBkYXRlKGltYWdlLVxcdTAwM2VraG8uZmR0LCBQQUdFX1NJWkUsXFxuMjA5MTpcXHRcXHRcXHRcXHQgICAgIGltYWdlLVxcdTAwM2VraG8uc2NyYXRjaC1cXHUwMDNlbWVtLFxcbjIwOTI6XFx0XFx0XFx0XFx0ICAgICBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZWJ1ZnN6KTtcXG4yMDkzOlxcdFxcdGlmIChlcnIpXFxuMjA5NDpcXHRcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gdXBkYXRlIEVGSSBjb25maWcgdGFibGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwOTc6XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRzdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4yMTAwOlxcdFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4yMTAxOlxcdHtcXG4yMTAyOlxcdFxcdGludCByZXQgPSAwO1xcbjIxMDM6XFx0XFx0aW50IGk7XFxuMjEwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MjE6NTMuOTcyMDAyNTgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTQ0MjI0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0hPIFBhdGNoIG9uIGFtZDY0KipcblxuT2theSwgSSd2ZSBnb3QgdGhpcy4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgc3VwcG9ydCBmb3Iga2V4ZWMgaGFuZG92ZXIsIG9yIEtITywgc3BlY2lmaWNhbGx5IGZvciBMb29uZ0FyY2guIFRoZSBpbXBvcnRhbnQgYml0IGhlcmUgaXMgYENPTkZJR19FRklfS0hPYCwgYW5kIEkgc2VlIHRoYXQgaXQncyB0aWdodGx5IGJvdW5kIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0J3MgZGVzaWduZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBib290IHRocm91Z2ggRUZJICp3aXRob3V0KiBhIGRldmljZSB0cmVlLCBzbyBpdCdzIG5vdCByZWxldmFudCB0byBteSB0eXBpY2FsIGFtZDY0IHNldHVwLlxuXG5Mb29raW5nIGNsb3NlciBhdCB0aGUgYW1kNjQgc2lkZSwgYXMgSSBzdXNwZWN0ZWQsIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBFRkkgS0hPIGlzIGRlYWQgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9gIGlzIGNvbXBsZXRlbHkgYCNpZmRlZiBDT05GSUdfRUZJX0tIT2BkIG91dC4gYGVmaV9raG9fdXBkYXRlYCBpcyBqdXN0IGEgbm8tb3Agc3R1YiwganVzdCByZXR1cm5pbmcgemVybywgYW5kIGBraG9fc3luY19jaGFubmVsKClgIGRvZXNuJ3QgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBvbiBhbWQ2NC4gRXZlbiB0aGUgdGVzdCBzY3JpcHRzIGFyZSB1c2VyLXNwYWNlIHN0dWZmLCBzbyBJIGRvbid0IHNlZSBhbnkgZXhwb3NlZCBrZXJuZWwgZW50cnkgcG9pbnRzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLiBJIGNhbid0IGZpbmQgYW55dGhpbmcgdXNlZnVsIGhlcmUuXG5cblNvLCBsZXQncyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuIEkgbmVlZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgc3BlY2lmaWNhbGx5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGEgZGV2aWNlIHRyZWUgKExvb25nQXJjaCkuIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBzdWJzdGFudGl2ZSBFRkkgS0hPIGxvZ2ljIGlzIGNvbXBpbGVkIG91dCwgZWZpX2tob191cGRhdGUoKSBpcyBhIG5vLW9wIGlubGluZSByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBjb25zaXN0IG9mIHNlbGZ0ZXN0IHNjcmlwdHMgYW5kIGEgaGVhZGVyIGluY2x1ZGUuXCJcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKG5vdGhpbmcgdG8gZW5hYmxlKVxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChub3RoaW5nIHJlbGV2YW50IHRvIGZvY3VzIG9uKVxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDIwLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjIxOjU4LjAyNjQyNzcwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgdHJhbnNwb3J0IGZvciBrZXhlYyBoYW5kb3ZlciAoS0hPKSwgdGFyZ2V0ZWQgYXQgYXJjaGl0ZWN0dXJlcyB0aGF0IGJvb3QgdGhyb3VnaCBFRkkgd2l0aG91dCBkZXZpY2UgdHJlZSAoc3VjaCBhcyBMb29uZ0FyY2gpLiBUaGUgbmV3IGNvbmZpZyBDT05GSUdfRUZJX0tITyBpcyBvbmx5IHNlbGVjdGVkIGJ5IGFyY2gvbG9vbmdhcmNoL0tjb25maWcgYW5kIGNhbm5vdCBiZSBlbmFibGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIE9uIGFtZDY0LCBhbGwgRUZJIEtITyBsb2dpYyBpbiB0aGUgRUZJIGRyaXZlcnMgYW5kIGxpYnN0dWIgaXMgY29tcGlsZWQgb3V0LCBlZmlfa2hvX3VwZGF0ZSgpIGlzIGFuIGlubGluZSBuby1vcCByZXR1cm5pbmcgMCwgYW5kIHRoZSByZW1haW5pbmcgY2hhbmdlcyBhcmUgc2VsZnRlc3Qgc2NyaXB0cyBhbmQgYSBoZWFkZXIgaW5jbHVzaW9uLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgZm9yIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSB0cmFuc3BvcnQgZm9yIGtleGVjIGhhbmRvdmVyIChLSE8pLCB0YXJnZXRlZCBhdCBhcmNoaXRlY3R1cmVzIHRoYXQgYm9vdCB0aHJvdWdoIEVGSSB3aXRob3V0IGRldmljZSB0cmVlIChzdWNoIGFzIExvb25nQXJjaCkuIFRoZSBuZXcgY29uZmlnIENPTkZJR19FRklfS0hPIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBhbmQgY2Fubm90IGJlIGVuYWJsZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gT24gYW1kNjQsIGFsbCBFRkkgS0hPIGxvZ2ljIGluIHRoZSBFRkkgZHJpdmVycyBhbmQgbGlic3R1YiBpcyBjb21waWxlZCBvdXQsIGVmaV9raG9fdXBkYXRlKCkgaXMgYW4gaW5saW5lIG5vLW9wIHJldHVybmluZyAwLCBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZSBzZWxmdGVzdCBzY3JpcHRzIGFuZCBhIGhlYWRlciBpbmNsdXNpb24uIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBmb3IgYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOToyMTo1OC4wMjY0NTQwNjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwdgk[1] Phase: Running StartedAt: 2026-09-05 19:22:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwdgk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 19:22:09 +0000 UTC FinishedAt: 2026-09-05 19:22:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}