ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4NWY4NjlhLi5iNzA2MzU0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKK1RodSBNYXkgMTUgMTg6MDY6MTggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgorCisJKiBidWlsZF9nbG9iLnB5IGdsb2JhbC5kYXRhIGdsb2JhbHMuYyBwYXJzZXIuYworCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3Igc2V0dGluZworCSAgdXAgdGhyZWFkcyBnbG9iYWwgZGVmYXVsdHMuCisJKiBkb2MvbGlieG1sMi1hcGkueG1sOiB0aGlzIGV4dGVuZHMgdGhlIEFQSSB3aXRoIG5ldyBmdW5jdGlvbnMKKwkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyMi5weQorCSAgcHl0aG9uL3Rlc3RzL3RocmVhZDIucHk6IGludGVncmF0ZWQgdGhlIGFzc29jaWF0ZWQgdGVzdGNhc2UgYW5kCisJICBmaXhlZCB0aGUgZXJyb3Igc3RyaW5nIHVzZWQgaW4gcmVhZGVyMgorCiBXZWQgTWF5IDE0IDE0OjU2OjQ2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KIAogCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogdHJ5aW5nCmRpZmYgLS1naXQgYS9idWlsZF9nbG9iLnB5IGIvYnVpbGRfZ2xvYi5weQppbmRleCBkYzQyYzI0Li44ODU1ZWM3IDEwMDc1NQotLS0gYS9idWlsZF9nbG9iLnB5CisrKyBiL2J1aWxkX2dsb2IucHkKQEAgLTE2LDEwICsxNiwxNSBAQAogICAgICAgICBzZWxmLnR5cGU9dHlwZQogICAgICAgICBzZWxmLm5hbWU9bmFtZQogCitkZWYgc3RyaXBsaW5lc2VwKGxpbmUpOgorICAgIHdoaWxlIGxpbmUgYW5kIGxpbmVbLTFdIGluICgnXHInLCdcbicpOgorICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgcmV0dXJuIGxpbmUKKwogZGVmIHdyaXRlbGluZShmaWxlLCBsaW5lPU5vbmUpOgogICAgIGlmIGxpbmU6CiAgICAgICAgIGZpbGUud3JpdGUobGluZSkKLSAgICBmaWxlLndyaXRlKG9zLmxpbmVzZXApCisgICAgZmlsZS53cml0ZSgiXG4iKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGdsb2JhbHM9e30KQEAgLTM0LDggKzM5LDcgQEAKICAgICAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHN0cmluZwogICAgICMgCiAgICAgZm9yIGxpbmUgaW4gZ2xvYmFsX2hkcjoKLSAgICAgICAgaWYgbGluZVstbGVuKG9zLmxpbmVzZXApOl0gPT0gb3MubGluZXNlcDoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotbGVuKG9zLmxpbmVzZXApXQorICAgICAgICBsaW5lID0gc3RyaXBsaW5lc2VwKGxpbmUpCiAgICAgICAgIGlmIGxpbmUgPT0gIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGJ1aWxkX2dsb2IucHkuIjoKIAkgICAgYnJlYWsKIAl3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIGxpbmUpCkBAIC00Niw4ICs1MCw3IEBACiAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyKQogCiAgICAgZm9yIGxpbmUgaW4gZ2xvYmFsX2NvZGU6Ci0gICAgICAgIGlmIGxpbmVbLWxlbihvcy5saW5lc2VwKTpdID09IG9zLmxpbmVzZXA6Ci0gICAgICAgICAgICBsaW5lID0gbGluZVs6LWxlbihvcy5saW5lc2VwKV0KKyAgICAgICAgbGluZSA9IHN0cmlwbGluZXNlcChsaW5lKQogICAgICAgICBpZiBsaW5lID09ICIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBidWlsZF9nbG9iLnB5LiI6CiAJICAgIGJyZWFrCiAJd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgbGluZSkKQEAgLTYxLDM2ICs2NCwzOCBAQAogICAgIGZvciBsaW5lIGluIGdsb2JhbF9kYXRhOgogICAgICAgICBpZiBsaW5lWzBdPT0nIyc6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBsaW5lWy1sZW4ob3MubGluZXNlcCk6XSA9PSBvcy5saW5lc2VwOgotICAgICAgICAgICAgbGluZSA9IGxpbmVbOi1sZW4ob3MubGluZXNlcCldCisgICAgICAgIGxpbmUgPSBzdHJpcGxpbmVzZXAobGluZSkKICAgICAgICAgZmllbGRzID0gc3RyaW5nLnNwbGl0KGxpbmUsICIsIikKICAgICAgICAgIyBVcGRhdGUgdGhlIGhlYWRlciBmaWxlCiAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkcikKICAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19oZHIud3JpdGUoImV4dGVybiAiK2ZpZWxkc1swXSsiICoiKQotICAgICAgICBpZiBsZW4oZmllbGRzKSA9PSAzOgorICAgICAgICBpZiBmaWVsZHNbMl06CiAgICAgICAgICAgICBnbG9iYWxfZnVuY3Rpb25zX2hkci53cml0ZSgiKCoiKQogICAgICAgICBnbG9iYWxfZnVuY3Rpb25zX2hkci53cml0ZSgiX18iK2ZpZWxkc1sxXSsiKHZvaWQpIikKLSAgICAgICAgaWYgbGVuKGZpZWxkcykgPT0gMzoKKyAgICAgICAgaWYgZmllbGRzWzJdOgogICAgICAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19oZHIud3JpdGUoIikiK2ZpZWxkc1syXSkKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCI7IikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCAiI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRCIpCiAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiI2RlZmluZSAiK2ZpZWxkc1sxXSsiIFxcIikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCIoKihfXyIrZmllbGRzWzFdKyIoKSkpIikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCIjZWxzZSIpCi0gICAgICAgIGlmIGxlbihmaWVsZHMpID09IDM6CisgICAgICAgIGlmIGZpZWxkc1syXToKICAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuICIrZmllbGRzWzBdKyIgIitmaWVsZHNbMV0rZmllbGRzWzJdKyI7IikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuICIrZmllbGRzWzBdKyIgIitmaWVsZHNbMV0rIjsiKQogICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIiNlbmRpZiIpCisgICAgICAgICMgc2V0L2dldCBmb3IgcGVyLXRocmVhZCBnbG9iYWwgZGVmYXVsdHMKKyAgICAgICAgaWYgZmllbGRzWzNdOgorICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLGZpZWxkc1swXSsiICIrZmllbGRzWzFdWzozXSsiVGhyRGVmIitmaWVsZHNbMV1bMzpdKyIoIitmaWVsZHNbMF0rIiB2KTsiKQogICAgICAgICAjIFVwZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZmlsZQogICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsKQogIyAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgImV4dGVybiAiK2ZpZWxkc1swXSsiICIrZmllbGRzWzFdKyI7IikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgIiN1bmRlZlx0IitmaWVsZHNbMV0pCiAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIGZpZWxkc1swXSsiICoiKQotICAgICAgICBpZiBsZW4oZmllbGRzKSA9PSAzOgorICAgICAgICBpZiBmaWVsZHNbMl06CiAgICAgICAgICAgICBnbG9iYWxfZnVuY3Rpb25zX2ltcGwud3JpdGUoIigqIikKICAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLndyaXRlKCJfXyIrZmllbGRzWzFdKyIodm9pZCkiKQotICAgICAgICBpZiBsZW4oZmllbGRzKSA9PSAzOgorICAgICAgICBpZiBmaWVsZHNbMl06CiAgICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCAiKVtdIikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgIiB7IikKICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgIiAgICBpZiAoSVNfTUFJTl9USFJFQUQpIikKQEAgLTk4LDYgKzEwMywxNiBAQAogICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCAiICAgIGVsc2UiKQogICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCAiXHRyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT4iK2ZpZWxkc1sxXSsiKTsiKQogICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCAifSIpCisgICAgICAgICMgc2V0L2dldCBmb3IgcGVyLXRocmVhZCBnbG9iYWwgZGVmYXVsdHMKKyAgICAgICAgaWYgZmllbGRzWzNdOgorICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCxmaWVsZHNbMF0rIiAiK2ZpZWxkc1sxXVs6M10rIlRockRlZiIrZmllbGRzWzFdWzM6XSsiKCIrZmllbGRzWzBdKyIgdikgeyIpCisgICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCIgICAgIitmaWVsZHNbMF0rIiByZXQ7Iik7CisgICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCIgICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsiKQorICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwiICAgIHJldCA9ICIrZmllbGRzWzFdWzozXStmaWVsZHNbMV1bMzpdKyJUaHJEZWY7IikKKyAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIiAgICAiK2ZpZWxkc1sxXVs6M10rZmllbGRzWzFdWzM6XSsiVGhyRGVmID0gdjsiKQorICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwiICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsiKQorICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwiICAgIHJldHVybiByZXQ7IikKKyAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIn0iKQogICAgICMgVGVybWluYXRlIHRoZSBoZWFkZXIgZmlsZSB3aXRoIGFwcHJvcHJpYXRlIGJvaWxlcnBsYXRlCiAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyKQogICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwgIiNpZmRlZiBfX2NwbHVzcGx1cyIpCmRpZmYgLS1naXQgYS9kb2MvbGlieG1sMi1hcGkueG1sIGIvZG9jL2xpYnhtbDItYXBpLnhtbAppbmRleCBhMzZhNmU1Li4xNmFjMTUwIDEwMDY0NAotLS0gYS9kb2MvbGlieG1sMi1hcGkueG1sCisrKyBiL2RvYy9saWJ4bWwyLWFwaS54bWwKQEAgLTE1MTQsNiArMTUxNCw3IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0nb2xkWE1MV0Rjb21wYXRpYmlsaXR5Jy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQnVmZmVyQWxsb2NTY2hlbWUnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxCdWZmZXJBbGxvY1NjaGVtZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbENsZWFudXBHbG9iYWxzJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRGVmYXVsdEJ1ZmZlclNpemUnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxEZWZhdWx0QnVmZmVyU2l6ZScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlZmF1bHRTQVhIYW5kbGVyJy8+CkBAIC0xNTM4LDYgKzE1MzksNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdsb2JhbFN0YXRlUHRyJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sSW5kZW50VHJlZU91dHB1dCcvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEluZGVudFRyZWVPdXRwdXQnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxJbml0R2xvYmFscycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEluaXRpYWxpemVHbG9iYWxTdGF0ZScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlJy8+CkBAIC0xNTY3LDYgKzE1NjksMjIgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTYXZlTm9FbXB0eVRhZ3MnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0Jy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0Jy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZTZXRHZW5lcmljRXJyb3JGdW5jJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmVHJlZUluZGVudFN0cmluZycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRyZWVJbmRlbnRTdHJpbmcnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUcmVlSW5kZW50U3RyaW5nJy8+CiAgICAgPC9maWxlPgpAQCAtNTM4Myw2ICs1NDAxLDEwIEBACiAgICAgICA8aW5mbz5VbnJlZ2lzdGVycyBhbGwgYWxpYXNlczwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbENsZWFudXBHbG9iYWxzJyBmaWxlPSdnbG9iYWxzJz4KKyAgICAgIDxpbmZvPjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgorICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbENsZWFudXBJbnB1dENhbGxiYWNrcycgZmlsZT0neG1sSU8nPgogICAgICAgPGluZm8+Y2xlYXJzIHRoZSBlbnRpcmUgaW5wdXQgY2FsbGJhY2sgdGFibGUuIHRoaXMgaW5jbHVkZXMgdGhlIGNvbXBpbGVkLWluIEkvTy48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KQEAgLTY0MzksNiArNjQ2MSwxMCBAQAogICAgICAgPGluZm8+SW5pdGlhbGl6ZSB0aGUgY2hhciBlbmNvZGluZyBzdXBwb3J0LCBpdCByZWdpc3RlcnMgdGhlIGRlZmF1bHQgZW5jb2Rpbmcgc3VwcG9ydGVkLiBOT1RFOiB3aGlsZSBwdWJsaWMsIHRoaXMgZnVuY3Rpb24gdXN1YWxseSBkb2VzbiZhcG9zO3QgbmVlZCB0byBiZSBjYWxsZWQgaW4gbm9ybWFsIHByb2Nlc3NpbmcuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdEdsb2JhbHMnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CisgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdE1lbW9yeScgZmlsZT0neG1sbWVtb3J5Jz4KICAgICAgIDxpbmZvPkluaXRpYWxpemUgdGhlIG1lbW9yeSBsYXllci48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBvbiBzdWNjZXNzJy8+CkBAIC05MzAwLDYgKzkzMjYsODcgQEAKICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSd0aGUgeG1sOmxhbmcgdmFsdWUgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4nLz4KICAgICAgIDxhcmcgbmFtZT0ncmVhZGVyJyB0eXBlPSd4bWxUZXh0UmVhZGVyUHRyJyBpbmZvPSd0aGUgeG1sVGV4dFJlYWRlclB0ciB1c2VkJy8+CiAgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lJyBpbmZvPScnLz4KKyAgICAgIDxhcmcgbmFtZT0ndicgdHlwZT0neG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZScgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3htbERlcmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J2Z1bmMnIHR5cGU9J3htbERlcmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJz4KKyAgICAgIDxpbmZvPjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScnLz4KKyAgICAgIDxhcmcgbmFtZT0ndicgdHlwZT0naW50JyBpbmZvPScnLz4KKyAgICA8L2Z1bmN0aW9uPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCcgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJz4KKyAgICAgIDxpbmZvPjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScnLz4KKyAgICAgIDxhcmcgbmFtZT0ndicgdHlwZT0naW50JyBpbmZvPScnLz4KKyAgICA8L2Z1bmN0aW9uPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0JyBmaWxlPSdnbG9iYWxzJz4KKyAgICAgIDxpbmZvPjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0neG1sUmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J2Z1bmMnIHR5cGU9J3htbFJlZ2lzdGVyTm9kZUZ1bmMnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlNhdmVOb0VtcHR5VGFncycgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYycgZmlsZT0nZ2xvYmFscyc+CisgICAgICA8aW5mbz48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KKyAgICAgIDxhcmcgbmFtZT0nY3R4JyB0eXBlPSd2b2lkIConIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSdoYW5kbGVyJyB0eXBlPSd4bWxHZW5lcmljRXJyb3JGdW5jJyBpbmZvPScnLz4KKyAgICA8L2Z1bmN0aW9uPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlRyZWVJbmRlbnRTdHJpbmcnIGZpbGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdjb25zdCBjaGFyIConIGluZm89JycvPgorICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89JycvPgorICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFVDU0lzQWxwaGFiZXRpY1ByZXNlbnRhdGlvbkZvcm1zJyBmaWxlPSd4bWx1bmljb2RlJz4KICAgICAgIDxpbmZvPkNoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBwYXJ0IG9mIEFscGhhYmV0aWNQcmVzZW50YXRpb25Gb3JtcyBVQ1MgQmxvY2s8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMSBpZiB0cnVlIDAgb3RoZXJ3aXNlJy8+CmRpZmYgLS1naXQgYS9nbG9iYWwuZGF0YSBiL2dsb2JhbC5kYXRhCmluZGV4IDZiMTcwZGQuLjFhOGM4YTcgMTAwNjQ0Ci0tLSBhL2dsb2JhbC5kYXRhCisrKyBiL2dsb2JhbC5kYXRhCkBAIC0xLDI0ICsxLDI1IEBACi1pbnQsb2xkWE1MV0Rjb21wYXRpYmlsaXR5Ci14bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lLHhtbEJ1ZmZlckFsbG9jU2NoZW1lCi1pbnQseG1sRGVmYXVsdEJ1ZmZlclNpemUKLXhtbFNBWEhhbmRsZXIseG1sRGVmYXVsdFNBWEhhbmRsZXIKLXhtbFNBWExvY2F0b3IseG1sRGVmYXVsdFNBWExvY2F0b3IKLWludCx4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUKLXhtbEdlbmVyaWNFcnJvckZ1bmMseG1sR2VuZXJpY0Vycm9yCi12b2lkICoseG1sR2VuZXJpY0Vycm9yQ29udGV4dAotaW50LHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCi1pbnQseG1sSW5kZW50VHJlZU91dHB1dAotY29uc3QgY2hhciAqLHhtbFRyZWVJbmRlbnRTdHJpbmcKLWludCx4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlCi1pbnQseG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUKLWludCx4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlCi1pbnQseG1sUGFyc2VyRGVidWdFbnRpdGllcwotY29uc3QgY2hhciAqLHhtbFBhcnNlclZlcnNpb24KLWludCx4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZQotaW50LHhtbFNhdmVOb0VtcHR5VGFncwotI2NvbnN0IHhtbENoYXIseG1sU3RyaW5nQ29tbWVudCxbXQotI2NvbnN0IHhtbENoYXIseG1sU3RyaW5nVGV4dCxbXQotI2NvbnN0IHhtbENoYXIseG1sU3RyaW5nVGV4dE5vZW5jLFtdCi1pbnQseG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlCi14bWxSZWdpc3Rlck5vZGVGdW5jLHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQoteG1sRGVyZWdpc3Rlck5vZGVGdW5jLHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlCisjdHlwZSxuYW1lLGFycmF5Pyx0aHJlYWRHbG9iYWxEZWZhdWx0IGFjY2Vzc29yPworaW50LG9sZFhNTFdEY29tcGF0aWJpbGl0eSwsCit4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lLHhtbEJ1ZmZlckFsbG9jU2NoZW1lLCwxCitpbnQseG1sRGVmYXVsdEJ1ZmZlclNpemUsLDEKK3htbFNBWEhhbmRsZXIseG1sRGVmYXVsdFNBWEhhbmRsZXIsLAoreG1sU0FYTG9jYXRvcix4bWxEZWZhdWx0U0FYTG9jYXRvciwsCitpbnQseG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlLCwxCit4bWxHZW5lcmljRXJyb3JGdW5jLHhtbEdlbmVyaWNFcnJvciwsCit2b2lkICoseG1sR2VuZXJpY0Vycm9yQ29udGV4dCwsCitpbnQseG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUsLDEKK2ludCx4bWxJbmRlbnRUcmVlT3V0cHV0LCwxCitjb25zdCBjaGFyICoseG1sVHJlZUluZGVudFN0cmluZywsMQoraW50LHhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUsLDEKK2ludCx4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSwsMQoraW50LHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUsLDEKK2ludCx4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzLCwxCitjb25zdCBjaGFyICoseG1sUGFyc2VyVmVyc2lvbiwsCitpbnQseG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUsLDEKK2ludCx4bWxTYXZlTm9FbXB0eVRhZ3MsLDEKKyNjb25zdCB4bWxDaGFyLHhtbFN0cmluZ0NvbW1lbnQsW10sMQorI2NvbnN0IHhtbENoYXIseG1sU3RyaW5nVGV4dCxbXSwxCisjY29uc3QgeG1sQ2hhcix4bWxTdHJpbmdUZXh0Tm9lbmMsW10sMQoraW50LHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSwsMQoreG1sUmVnaXN0ZXJOb2RlRnVuYyx4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUsLAoreG1sRGVyZWdpc3Rlck5vZGVGdW5jLHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlLCwKZGlmZiAtLWdpdCBhL2dsb2JhbHMuYyBiL2dsb2JhbHMuYwppbmRleCAwZmM1NGUyLi5lZTY0MTdiIDEwMDY0NAotLS0gYS9nbG9iYWxzLmMKKysrIGIvZ2xvYmFscy5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgogCiAvKiAjZGVmaW5lIERFQlVHX0dMT0JBTFMgKi8KIApAQCAtMzMsNiArMzQsMjEgQEAKICNkZWZpbmUgSVNfTUFJTl9USFJFQUQgMQogI2VuZGlmCiAKKy8qCisgKiBNdXRleCB0byBwcm90ZWN0ICJGb3JOZXdUaHJlYWRzIiB2YXJpYWJsZXMKKyAqLworc3RhdGljIHhtbE11dGV4UHRyIHhtbFRockRlZk11dGV4ID0gTlVMTDsKKwordm9pZCB4bWxJbml0R2xvYmFscygpCit7CisgICAgeG1sVGhyRGVmTXV0ZXggPSB4bWxOZXdNdXRleCgpOworfQorCit2b2lkIHhtbENsZWFudXBHbG9iYWxzKCkKK3sKKyAgICB4bWxGcmVlTXV0ZXgoeG1sVGhyRGVmTXV0ZXgpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAJCQkJCQkJCQkqCiAgKglBbGwgdGhlIHVzZXIgYWNjZXNzaWJsZSBnbG9iYWwgdmFyaWFibGVzIG9mIHRoZSBsaWJyYXJ5CQkqCkBAIC0xNTAsMTIgKzE2NiwxNCBAQAogICogWE1MX0JVRkZFUl9BTExPQ19FWEFDVAogICovCiB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHhtbEJ1ZmZlckFsbG9jU2NoZW1lID0gWE1MX0JVRkZFUl9BTExPQ19FWEFDVDsKK3N0YXRpYyB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmID0gWE1MX0JVRkZFUl9BTExPQ19FWEFDVDsKIC8qKgogICogeG1sRGVmYXVsdEJ1ZmZlclNpemU6CiAgKgogICogR2xvYmFsIHNldHRpbmcsIGRlZmF1bHQgYnVmZmVyIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgQkFTRV9CVUZGRVJfU0laRQogICovCiBpbnQgeG1sRGVmYXVsdEJ1ZmZlclNpemUgPSBCQVNFX0JVRkZFUl9TSVpFOworc3RhdGljIGludCB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZiA9IEJBU0VfQlVGRkVSX1NJWkU7CiAKIC8qCiAgKiBQYXJzZXIgZGVmYXVsdHMKQEAgLTE3NSw2ICsxOTMsNyBAQAogICogRGlzYWJsZWQgYnkgZGVmYXVsdAogICovCiBpbnQgeG1sUGFyc2VyRGVidWdFbnRpdGllcyA9IDA7CitzdGF0aWMgaW50IHhtbFBhcnNlckRlYnVnRW50aXRpZXNUaHJEZWYgPSAwOwogLyoqCiAgKiB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU6CiAgKgpAQCAtMTgyLDYgKzIwMSw3IEBACiAgKiBEaXNhYmxlZCBieSBkZWZhdWx0LgogICovCiBpbnQgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlID0gMDsKK3N0YXRpYyBpbnQgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlVGhyRGVmID0gMDsKIC8qKgogICogeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWU6CiAgKgpAQCAtMTg5LDYgKzIwOSw3IEBACiAgKiBBY3RpdmF0ZWQgYnkgZGVmYXVsdC4KICAqLwogaW50IHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlID0gMTsKK3N0YXRpYyBpbnQgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWYgPSAxOwogLyoqCiAgKiB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlOgogICoKQEAgLTE5Nyw2ICsyMTgsNyBAQAogICogRGlzYWJsZWQgYnkgZGVmYXVsdC4KICAqLwogaW50IHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUgPSAwOworc3RhdGljIGludCB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlVGhyRGVmID0gMDsKIC8qKgogICogeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU6CiAgKgpAQCAtMjA0LDYgKzIyNiw3IEBACiAgKiBEaXNhYmxlZCBieSBkZWZhdWx0LgogICovCiBpbnQgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgPSAwOworc3RhdGljIGludCB4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZVRockRlZiA9IDA7CiAvKioKICAqIHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlOgogICoKQEAgLTIxMyw2ICsyMzYsNyBAQAogICogYXBwbGljYXRvbi4KICAqLwogaW50IHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlID0gMDsKK3N0YXRpYyBpbnQgeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWYgPSAwOwogLyoqCiAgKiB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlOgogICoKQEAgLTIyMyw2ICsyNDcsNyBAQAogICogZm9yIHNvbWUgYXBwbGljYXRpb25zIHNpbmNlIHRoaXMgd2FzIGxpYnhtbDEgZGVmYXVsdCBiZWhhdmlvdXIuCiAgKi8KIGludCB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlID0gMTsKK3N0YXRpYyBpbnQgeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZVRockRlZiA9IDE7CiAvKioKICAqIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZToKICAqCkBAIC0yMzMsOSArMjU4LDEyIEBACiAgKiBlbmdpbmUgZG9lcyBub3QgaGFuZGxlIGVudGl0aWVzIHJlZmVyZW5jZXMgdHJhbnNwYXJlbnRseS4KICAqLwogaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSA9IDA7CitzdGF0aWMgaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZiA9IDA7CiAKIHhtbFJlZ2lzdGVyTm9kZUZ1bmMgeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlID0gTlVMTDsKK3N0YXRpYyB4bWxSZWdpc3Rlck5vZGVGdW5jIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZVRockRlZiA9IE5VTEw7CiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBOVUxMOworc3RhdGljIHhtbERlcmVnaXN0ZXJOb2RlRnVuYyB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZVRockRlZiA9IE5VTEw7CiAKIC8qCiAgKiBFcnJvciBoYW5kbGluZwpAQCAtMjUyLDEyICsyODAsMTQgQEAKICAqIEdsb2JhbCBzZXR0aW5nOiBmdW5jdGlvbiB1c2VkIGZvciBnZW5lcmljIGVycm9yIGNhbGxiYWNrcwogICovCiB4bWxHZW5lcmljRXJyb3JGdW5jIHhtbEdlbmVyaWNFcnJvciA9IHhtbEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jOworc3RhdGljIHhtbEdlbmVyaWNFcnJvckZ1bmMgeG1sR2VuZXJpY0Vycm9yVGhyRGVmID0geG1sR2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmM7CiAvKioKICAqIHhtbEdlbmVyaWNFcnJvckNvbnRleHQ6CiAgKgogICogR2xvYmFsIHNldHRpbmcgcGFzc2VkIHRvIGdlbmVyaWMgZXJyb3IgY2FsbGJhY2tzCiAgKi8KIHZvaWQgKnhtbEdlbmVyaWNFcnJvckNvbnRleHQgPSBOVUxMOworc3RhdGljIHZvaWQgKnhtbEdlbmVyaWNFcnJvckNvbnRleHRUaHJEZWYgPSBOVUxMOwogCiAvKgogICogb3V0cHV0IGRlZmF1bHRzCkBAIC0yNjksNiArMjk5LDcgQEAKICAqIEVuYWJsZWQgYnkgZGVmYXVsdAogICovCiBpbnQgeG1sSW5kZW50VHJlZU91dHB1dCA9IDE7CitzdGF0aWMgaW50IHhtbEluZGVudFRyZWVPdXRwdXRUaHJEZWYgPSAxOwogCiAvKioKICAqIHhtbFRyZWVJbmRlbnRTdHJpbmc6CkBAIC0yNzYsNiArMzA3LDcgQEAKICAqIFRoZSBzdHJpbmcgdXNlZCB0byBkbyBvbmUtbGV2ZWwgaW5kZW50LiBCeSBkZWZhdWx0IGlzIGVxdWFsIHRvICIgICIgKHR3byBzcGFjZXMpCiAgKi8KIGNvbnN0IGNoYXIgKnhtbFRyZWVJbmRlbnRTdHJpbmcgPSAiICAiOworc3RhdGljIGNvbnN0IGNoYXIgKnhtbFRyZWVJbmRlbnRTdHJpbmdUaHJEZWYgPSAiICAiOwogCiAvKioKICAqIHhtbFNhdmVOb0VtcHR5VGFnczoKQEAgLTI4Niw2ICszMTgsNyBAQAogICogRGlzYWJsZWQgYnkgZGVmYXVsdAogICovCiBpbnQgeG1sU2F2ZU5vRW1wdHlUYWdzID0gMDsKK2ludCB4bWxTYXZlTm9FbXB0eVRhZ3NUaHJEZWYgPSAwOwogCiAvKioKICAqIHhtbERlZmF1bHRTQVhIYW5kbGVyOgpAQCAtNDI3LDYgKzQ2MCw3IEBACiAgICAgLyoKICAgICAgKiBQZXJmb3JtIGluaXRpYWxpemF0aW9uIGFzIHJlcXVpcmVkIGJ5IGxpYnhtbAogICAgICAqLworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CiAKICNpZmRlZiBMSUJYTUxfRE9DQl9FTkFCTEVECiAgICAgaW5pdGRvY2JEZWZhdWx0U0FYSGFuZGxlcigmZ3MtPmRvY2JEZWZhdWx0U0FYSGFuZGxlcik7CkBAIC00MzQsMTcgKzQ2OCwxNyBAQAogI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKICAgICBpbml0aHRtbERlZmF1bHRTQVhIYW5kbGVyKCZncy0+aHRtbERlZmF1bHRTQVhIYW5kbGVyKTsKICNlbmRpZgotICAgIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYygmZ3MtPnhtbEdlbmVyaWNFcnJvcik7CiAKICAgICBncy0+b2xkWE1MV0Rjb21wYXRpYmlsaXR5ID0gMDsKLSAgICBncy0+eG1sQnVmZmVyQWxsb2NTY2hlbWUgPSBYTUxfQlVGRkVSX0FMTE9DX0VYQUNUOwotICAgIGdzLT54bWxEZWZhdWx0QnVmZmVyU2l6ZSA9IEJBU0VfQlVGRkVSX1NJWkU7CisgICAgZ3MtPnhtbEJ1ZmZlckFsbG9jU2NoZW1lID0geG1sQnVmZmVyQWxsb2NTY2hlbWVUaHJEZWY7CisgICAgZ3MtPnhtbERlZmF1bHRCdWZmZXJTaXplID0geG1sRGVmYXVsdEJ1ZmZlclNpemVUaHJEZWY7CiAgICAgaW5pdHhtbERlZmF1bHRTQVhIYW5kbGVyKCZncy0+eG1sRGVmYXVsdFNBWEhhbmRsZXIsIDEpOwogICAgIGdzLT54bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRQdWJsaWNJZCA9IGdldFB1YmxpY0lkOwogICAgIGdzLT54bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRTeXN0ZW1JZCA9IGdldFN5c3RlbUlkOwogICAgIGdzLT54bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRMaW5lTnVtYmVyID0gZ2V0TGluZU51bWJlcjsKICAgICBncy0+eG1sRGVmYXVsdFNBWExvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyID0gZ2V0Q29sdW1uTnVtYmVyOwotICAgIGdzLT54bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPSAwOworICAgIGdzLT54bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPSAKKyAgICAgICAgIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZVRockRlZjsKICNpZiBkZWZpbmVkKERFQlVHX01FTU9SWV9MT0NBVElPTikgfCBkZWZpbmVkKERFQlVHX01FTU9SWSkKICAgICBncy0+eG1sRnJlZSA9ICh4bWxGcmVlRnVuYykgeG1sTWVtRnJlZTsKICAgICBncy0+eG1sTWFsbG9jID0gKHhtbE1hbGxvY0Z1bmMpIHhtbE1lbU1hbGxvYzsKQEAgLTQ1OCwyMSArNDkyLDM2IEBACiAgICAgZ3MtPnhtbFJlYWxsb2MgPSAoeG1sUmVhbGxvY0Z1bmMpIHJlYWxsb2M7CiAgICAgZ3MtPnhtbE1lbVN0cmR1cCA9ICh4bWxTdHJkdXBGdW5jKSB4bWxTdHJkdXA7CiAjZW5kaWYKLSAgICBncy0+eG1sR2VuZXJpY0Vycm9yQ29udGV4dCA9IE5VTEw7Ci0gICAgZ3MtPnhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlID0gMTsKLSAgICBncy0+eG1sSW5kZW50VHJlZU91dHB1dCA9IDE7Ci0gICAgZ3MtPnhtbFRyZWVJbmRlbnRTdHJpbmcgPSAiICAiOwotICAgIGdzLT54bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlID0gMTsKLSAgICBncy0+eG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUgPSAwOwotICAgIGdzLT54bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlID0gMDsKLSAgICBncy0+eG1sUGFyc2VyRGVidWdFbnRpdGllcyA9IDA7CisgICAgZ3MtPnhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlID0geG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPnhtbEluZGVudFRyZWVPdXRwdXQgPSB4bWxJbmRlbnRUcmVlT3V0cHV0VGhyRGVmOworICAgIGdzLT54bWxUcmVlSW5kZW50U3RyaW5nID0geG1sVHJlZUluZGVudFN0cmluZ1RockRlZjsKKyAgICBncy0+eG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSA9IHhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPnhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlID0geG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPnhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUgPSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIGdzLT54bWxQYXJzZXJEZWJ1Z0VudGl0aWVzID0geG1sUGFyc2VyRGVidWdFbnRpdGllc1RockRlZjsKICAgICBncy0+eG1sUGFyc2VyVmVyc2lvbiA9IExJQlhNTF9WRVJTSU9OX1NUUklORzsKLSAgICBncy0+eG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgPSAwOwotICAgIGdzLT54bWxTYXZlTm9FbXB0eVRhZ3MgPSAwOwotICAgIGdzLT54bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUgPSAwOworICAgIGdzLT54bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSA9IHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIGdzLT54bWxTYXZlTm9FbXB0eVRhZ3MgPSB4bWxTYXZlTm9FbXB0eVRhZ3NUaHJEZWY7CisgICAgZ3MtPnhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSA9IAorICAgICAgICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWVUaHJEZWY7CiAKLSAgICBncy0+eG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlID0gTlVMTDsKLSAgICBncy0+eG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBOVUxMOworICAgIGdzLT54bWxHZW5lcmljRXJyb3IgPSB4bWxHZW5lcmljRXJyb3JUaHJEZWY7CisgICAgZ3MtPnhtbEdlbmVyaWNFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0VGhyRGVmOworICAgIGdzLT54bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPnhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlID0geG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWY7CisKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Cit9CisKK3ZvaWQKK3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmModm9pZCAqY3R4LCB4bWxHZW5lcmljRXJyb3JGdW5jIGhhbmRsZXIpIHsKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHhtbEdlbmVyaWNFcnJvckNvbnRleHRUaHJEZWYgPSBjdHg7CisgICAgaWYgKGhhbmRsZXIgIT0gTlVMTCkKKwl4bWxHZW5lcmljRXJyb3JUaHJEZWYgPSBoYW5kbGVyOworICAgIGVsc2UKKwl4bWxHZW5lcmljRXJyb3JUaHJEZWYgPSB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYzsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CiB9CiAKIC8qKgpAQCAtNDkzLDYgKzU0MiwyMSBAQAogICAgIHJldHVybihvbGQpOwogfQogCit4bWxSZWdpc3Rlck5vZGVGdW5jCit4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0KHhtbFJlZ2lzdGVyTm9kZUZ1bmMgZnVuYykKK3sKKyAgICB4bWxSZWdpc3Rlck5vZGVGdW5jIG9sZDsKKyAgICAKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIG9sZCA9IHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZVRockRlZjsKKyAgICAKKyAgICBfX3htbFJlZ2lzdGVyQ2FsbGJhY2tzID0gMTsKKyAgICB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWYgPSBmdW5jOworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKworICAgIHJldHVybihvbGQpOworfQorCiAvKioKICAqIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdDoKICAqIEBmdW5jOiBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgRGVyZWdpc3Rlck5vZGVGdW5jCkBAIC01MTEsNiArNTc1LDIxIEBACiAgICAgcmV0dXJuKG9sZCk7CiB9CiAKK3htbERlcmVnaXN0ZXJOb2RlRnVuYworeG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0KHhtbERlcmVnaXN0ZXJOb2RlRnVuYyBmdW5jKQoreworICAgIHhtbERlcmVnaXN0ZXJOb2RlRnVuYyBvbGQ7CisKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIG9sZCA9IHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIAorICAgIF9feG1sUmVnaXN0ZXJDYWxsYmFja3MgPSAxOworICAgIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmID0gZnVuYzsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisKKyAgICByZXR1cm4ob2xkKTsKK30KKwogCiAjaWZkZWYgTElCWE1MX0RPQ0JfRU5BQkxFRAogI3VuZGVmCWRvY2JEZWZhdWx0U0FYSGFuZGxlcgpAQCAtNTU4LDYgKzYzNywxNCBAQAogICAgIGVsc2UKIAlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxCdWZmZXJBbGxvY1NjaGVtZSk7CiB9Cit4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lKHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgdikgeworICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sQnVmZmVyQWxsb2NTY2hlbWVUaHJEZWY7CisgICAgeG1sQnVmZmVyQWxsb2NTY2hlbWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sRGVmYXVsdEJ1ZmZlclNpemUKIGludCAqCkBAIC01NjcsNiArNjU0LDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbERlZmF1bHRCdWZmZXJTaXplKTsKIH0KK2ludCB4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXQgPSB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZjsKKyAgICB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CiAKICN1bmRlZgl4bWxEZWZhdWx0U0FYSGFuZGxlcgogeG1sU0FYSGFuZGxlciAqCkBAIC01OTQsNiArNjg5LDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSk7CiB9CitpbnQgeG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZVRockRlZjsKKyAgICB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sR2VuZXJpY0Vycm9yCiB4bWxHZW5lcmljRXJyb3JGdW5jICoKQEAgLTYyMSw2ICs3MjQsMTQgQEAKICAgICBlbHNlCiAJcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUpOwogfQoraW50IHhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KIAogI3VuZGVmCXhtbEluZGVudFRyZWVPdXRwdXQKIGludCAqCkBAIC02MzAsNiArNzQxLDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbEluZGVudFRyZWVPdXRwdXQpOwogfQoraW50IHhtbFRockRlZkluZGVudFRyZWVPdXRwdXQoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sSW5kZW50VHJlZU91dHB1dFRockRlZjsKKyAgICB4bWxJbmRlbnRUcmVlT3V0cHV0VGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KIAogI3VuZGVmIHhtbFRyZWVJbmRlbnRTdHJpbmcKIGNvbnN0IGNoYXIgKiAqCkBAIC02MzksNiArNzU4LDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbFRyZWVJbmRlbnRTdHJpbmcpOwogfQorY29uc3QgY2hhciAqIHhtbFRockRlZlRyZWVJbmRlbnRTdHJpbmcoY29uc3QgY2hhciAqIHYpIHsKKyAgICBjb25zdCBjaGFyICogcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sVHJlZUluZGVudFN0cmluZ1RockRlZjsKKyAgICB4bWxUcmVlSW5kZW50U3RyaW5nVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KIAogI3VuZGVmCXhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUKIGludCAqCkBAIC02NDgsNiArNzc1LDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUpOwogfQoraW50IHhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZVRockRlZjsKKyAgICB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KIAogI3VuZGVmCXhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCiBpbnQgKgpAQCAtNjU3LDYgKzc5MiwxNCBAQAogICAgIGVsc2UKIAlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSk7CiB9CitpbnQgeG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZQogaW50ICoKQEAgLTY2Niw2ICs4MDksMTQgQEAKICAgICBlbHNlCiAJcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSk7CiB9CitpbnQgeG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXQgPSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sUGFyc2VyRGVidWdFbnRpdGllcwogaW50ICoKQEAgLTY3NSw2ICs4MjYsMTQgQEAKICAgICBlbHNlCiAJcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sUGFyc2VyRGVidWdFbnRpdGllcyk7CiB9CitpbnQgeG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyhpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXQgPSB4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzVGhyRGVmOworICAgIHhtbFBhcnNlckRlYnVnRW50aXRpZXNUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sUGFyc2VyVmVyc2lvbgogY29uc3QgY2hhciAqICoKQEAgLTY5Myw2ICs4NTIsMTQgQEAKICAgICBlbHNlCiAJcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUpOwogfQoraW50IHhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KIAogI3VuZGVmCXhtbFNhdmVOb0VtcHR5VGFncwogaW50ICoKQEAgLTcwMiw2ICs4NjksMTQgQEAKICAgICBlbHNlCiAJcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sU2F2ZU5vRW1wdHlUYWdzKTsKIH0KK2ludCB4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sU2F2ZU5vRW1wdHlUYWdzVGhyRGVmOworICAgIHhtbFNhdmVOb0VtcHR5VGFnc1RockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CiAKICN1bmRlZgl4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUKIGludCAqCkBAIC03MTEsNiArODg2LDE0IEBACiAgICAgZWxzZQogCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSk7CiB9CitpbnQgeG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZjsKKyAgICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQogCiAjdW5kZWYJeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlCiB4bWxSZWdpc3Rlck5vZGVGdW5jICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBiL2luY2x1ZGUvbGlieG1sL2dsb2JhbHMuaAppbmRleCA5YTdlM2QxLi4zYTgzMmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oCkBAIC0yMiw2ICsyMiw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCit2b2lkIHhtbEluaXRHbG9iYWxzKHZvaWQpOwordm9pZCB4bWxDbGVhbnVwR2xvYmFscyh2b2lkKTsKKwogLyoKICAqIEV4dGVybmFsbHkgZ2xvYmFsIHN5bWJvbHMgd2hpY2ggbmVlZCB0byBiZSBwcm90ZWN0ZWQgZm9yIGJhY2t3YXJkcwogICogY29tcGF0aWJpbGl0eSBzdXBwb3J0LgpAQCAtMTEyLDggKzExNSwxMiBAQAogCiB2b2lkCXhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZSh4bWxHbG9iYWxTdGF0ZVB0ciBncyk7CiAKK3ZvaWQgeG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYyh2b2lkICpjdHgsIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcik7CisKIHhtbFJlZ2lzdGVyTm9kZUZ1bmMgeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxSZWdpc3Rlck5vZGVGdW5jIGZ1bmMpOworeG1sUmVnaXN0ZXJOb2RlRnVuYyB4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0KHhtbFJlZ2lzdGVyTm9kZUZ1bmMgZnVuYyk7CiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0KHhtbERlcmVnaXN0ZXJOb2RlRnVuYyBmdW5jKTsKK3htbERlcmVnaXN0ZXJOb2RlRnVuYyB4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQoeG1sRGVyZWdpc3Rlck5vZGVGdW5jIGZ1bmMpOwogCiAvKgogICogSW4gZ2VuZXJhbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZW50cnkgcG9pbnRzIGFyZSBub3Qga2VwdApAQCAtMjE3LDYgKzIyNCw3IEBACiAjZWxzZQogTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgeG1sQnVmZmVyQWxsb2NTY2hlbWU7CiAjZW5kaWYKK3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUoeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSB2KTsKIAogZXh0ZXJuIGludCAqX194bWxEZWZhdWx0QnVmZmVyU2l6ZSh2b2lkKTsKICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKQEAgLTIyNSw2ICsyMzMsNyBAQAogI2Vsc2UKIExJQlhNTF9ETExfSU1QT1JUIGV4dGVybiBpbnQgeG1sRGVmYXVsdEJ1ZmZlclNpemU7CiAjZW5kaWYKK2ludCB4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZShpbnQgdik7CiAKIGV4dGVybiB4bWxTQVhIYW5kbGVyICpfX3htbERlZmF1bHRTQVhIYW5kbGVyKHZvaWQpOwogI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRApAQCAtMjQ5LDYgKzI1OCw3IEBACiAjZWxzZQogTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuIGludCB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU7CiAjZW5kaWYKK2ludCB4bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUoaW50IHYpOwogCiBleHRlcm4geG1sR2VuZXJpY0Vycm9yRnVuYyAqX194bWxHZW5lcmljRXJyb3Iodm9pZCk7CiAjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECkBAIC0yNzMsNiArMjgzLDcgQEAKICNlbHNlCiBMSUJYTUxfRExMX0lNUE9SVCBleHRlcm4gaW50IHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlOwogI2VuZGlmCitpbnQgeG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUoaW50IHYpOwogCiBleHRlcm4gaW50ICpfX3htbEluZGVudFRyZWVPdXRwdXQodm9pZCk7CiAjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECkBAIC0yODEsNiArMjkyLDcgQEAKICNlbHNlCiBMSUJYTUxfRExMX0lNUE9SVCBleHRlcm4gaW50IHhtbEluZGVudFRyZWVPdXRwdXQ7CiAjZW5kaWYKK2ludCB4bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0KGludCB2KTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKiAqX194bWxUcmVlSW5kZW50U3RyaW5nKHZvaWQpOwogI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRApAQCAtMjg5LDYgKzMwMSw3IEBACiAjZWxzZQogTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuIGNvbnN0IGNoYXIgKiB4bWxUcmVlSW5kZW50U3RyaW5nOwogI2VuZGlmCitjb25zdCBjaGFyICogeG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyhjb25zdCBjaGFyICogdik7CiAKIGV4dGVybiBpbnQgKl9feG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSh2b2lkKTsKICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKQEAgLTI5Nyw2ICszMTAsNyBAQAogI2Vsc2UKIExJQlhNTF9ETExfSU1QT1JUIGV4dGVybiBpbnQgeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZTsKICNlbmRpZgoraW50IHhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUoaW50IHYpOwogCiBleHRlcm4gaW50ICpfX3htbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKHZvaWQpOwogI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRApAQCAtMzA1LDYgKzMxOSw3IEBACiAjZWxzZQogTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuIGludCB4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTsKICNlbmRpZgoraW50IHhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKGludCB2KTsKIAogZXh0ZXJuIGludCAqX194bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlKHZvaWQpOwogI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRApAQCAtMzEzLDYgKzMyOCw3IEBACiAjZWxzZQogTElCWE1MX0RMTF9JTVBPUlQgZXh0ZXJuIGludCB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlOwogI2VuZGlmCitpbnQgeG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZShpbnQgdik7CiAKIGV4dGVybiBpbnQgKl9feG1sUGFyc2VyRGVidWdFbnRpdGllcyh2b2lkKTsKICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKQEAgLTMyMSw2ICszMzcsNyBAQAogI2Vsc2UKIExJQlhNTF9ETExfSU1QT1JUIGV4dGVybiBpbnQgeG1sUGFyc2VyRGVidWdFbnRpdGllczsKICNlbmRpZgoraW50IHhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMoaW50IHYpOwogCiBleHRlcm4gY29uc3QgY2hhciAqICpfX3htbFBhcnNlclZlcnNpb24odm9pZCk7CiAjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECkBAIC0zMzcsNiArMzU0LDcgQEAKICNlbHNlCiBMSUJYTUxfRExMX0lNUE9SVCBleHRlcm4gaW50IHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlOwogI2VuZGlmCitpbnQgeG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUoaW50IHYpOwogCiBleHRlcm4gaW50ICpfX3htbFNhdmVOb0VtcHR5VGFncyh2b2lkKTsKICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKQEAgLTM0NSw2ICszNjMsNyBAQAogI2Vsc2UKIExJQlhNTF9ETExfSU1QT1JUIGV4dGVybiBpbnQgeG1sU2F2ZU5vRW1wdHlUYWdzOwogI2VuZGlmCitpbnQgeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKGludCB2KTsKIAogZXh0ZXJuIGludCAqX194bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUodm9pZCk7CiAjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECkBAIC0zNTMsNiArMzcyLDcgQEAKICNlbHNlCiBMSUJYTUxfRExMX0lNUE9SVCBleHRlcm4gaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZTsKICNlbmRpZgoraW50IHhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZShpbnQgdik7CiAKIGV4dGVybiB4bWxSZWdpc3Rlck5vZGVGdW5jICpfX3htbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSh2b2lkKTsKICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKaW5kZXggZmFlZGE4ZC4uNDBmZmQyMCAxMDA2NDQKLS0tIGEvcGFyc2VyLmMKKysrIGIvcGFyc2VyLmMKQEAgLTExMTQwLDYgKzExMTQwLDcgQEAKICAgICBpZiAoKHhtbEdlbmVyaWNFcnJvciA9PSB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYykgfHwKIAkoeG1sR2VuZXJpY0Vycm9yID09IE5VTEwpKQogCWluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyhOVUxMKTsKKyAgICB4bWxJbml0R2xvYmFscygpOwogICAgIHhtbEluaXRUaHJlYWRzKCk7CiAgICAgeG1sSW5pdE1lbW9yeSgpOwogICAgIHhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycygpOwpAQCAtMTExNzYsNSArMTExNzcsNiBAQAogICAgIHhtbENhdGFsb2dDbGVhbnVwKCk7CiAjZW5kaWYKICAgICB4bWxDbGVhbnVwVGhyZWFkcygpOworICAgIHhtbENsZWFudXBHbG9iYWxzKCk7CiAgICAgeG1sUGFyc2VySW5pdGlhbGl6ZWQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvcHl0aG9uL2xpYnhtbC5jIGIvcHl0aG9uL2xpYnhtbC5jCmluZGV4IGE5NDM1MzAuLmUzNzI4MzUgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9saWJ4bWwuYworKysgYi9weXRob24vbGlieG1sLmMKQEAgLTEyNjcsNiArMTI2Nyw3IEBACiAgICAgcHJpbnRmKCJsaWJ4bWxfeG1sRXJyb3JJbml0aWFsaXplKCkgY2FsbGVkXG4iKTsKICNlbmRpZgogICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoTlVMTCwgbGlieG1sX3htbEVycm9yRnVuY0hhbmRsZXIpOworICAgIHhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMoTlVMTCwgbGlieG1sX3htbEVycm9yRnVuY0hhbmRsZXIpOwogfQogCiBQeU9iamVjdCAqCkBAIC0xNzY3LDcgKzE3NjgsNyBAQAogICAgIHByaW50ZigibGlieG1sX3hwYXRoQ2FsbGJhY2tzSW5pdGlhbGl6ZWQgY2FsbGVkXG4iKTsKICNlbmRpZgogCi0gICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGlieG1sX3hwYXRoQ2FsbGJhY2tzTWF4OyBpKyspIHsKICAgICAgICAgbGlieG1sX3hwYXRoQ2FsbGJhY2tzW2ldLmN0eCA9IE5VTEw7CiAgICAgICAgIGxpYnhtbF94cGF0aENhbGxiYWNrc1tpXS5uYW1lID0gTlVMTDsKICAgICAgICAgbGlieG1sX3hwYXRoQ2FsbGJhY2tzW2ldLm5zX3VyaSA9IE5VTEw7CkBAIC0yNjIwLDYgKzI2MjEsOCBAQAogCiAgICAgaWYgKGluaXRpYWxpemVkICE9IDApCiAgICAgICAgIHJldHVybjsKKyAgICAvKiBYWFggeG1sSW5pdFBhcnNlciBkb2VzIG11Y2ggbW9yZSB0aGFuIHRoaXMgKi8KKyAgICB4bWxJbml0R2xvYmFscygpOwogICAgIHhtbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcygpOwogICAgIHhtbFJlZ2lzdGVyRGVmYXVsdElucHV0Q2FsbGJhY2tzKCk7CiAgICAgbSA9IFB5X0luaXRNb2R1bGUoKGNoYXIgKikgImxpYnhtbDJtb2QiLCBsaWJ4bWxNZXRob2RzKTsKZGlmZiAtLWdpdCBhL3B5dGhvbi9saWJ4bWwyY2xhc3MudHh0IGIvcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKaW5kZXggZTQ1ODdmOC4uYjMzYzg3MyAxMDA2NDQKLS0tIGEvcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKKysrIGIvcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKQEAgLTYzLDYgKzYzLDIyIEBACiBpbml0aWFsaXplUHJlZGVmaW5lZEVudGl0aWVzKCkKIHByZWRlZmluZWRFbnRpdHkoKQogCisjIGZ1bmN0aW9ucyBmcm9tIG1vZHVsZSBnbG9iYWxzCitjbGVhbnVwR2xvYmFscygpCitpbml0R2xvYmFscygpCit0aHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSgpCit0aHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUoKQordGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUoKQordGhyRGVmSW5kZW50VHJlZU91dHB1dCgpCit0aHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlKCkKK3RockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKCkKK3RockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUoKQordGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcygpCit0aHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSgpCit0aHJEZWZTYXZlTm9FbXB0eVRhZ3MoKQordGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlKCkKK3RockRlZlRyZWVJbmRlbnRTdHJpbmcoKQorCiAjIGZ1bmN0aW9ucyBmcm9tIG1vZHVsZSBuYW5vZnRwCiBuYW5vRlRQQ2xlYW51cCgpCiBuYW5vRlRQSW5pdCgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvTWFrZWZpbGUuYW0gYi9weXRob24vdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggMGMxNmFjZi4uZDRlOTFkZCAxMDA2NDQKLS0tIGEvcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtCisrKyBiL3B5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMjgsNyArMjgsOCBAQAogICAgIHJlYWRlcjYucHkJXAogICAgIGN0eHRlcnJvci5weVwKICAgICByZWFkZXJlcnIucHlcCi0gICAgcmVsYXhuZy5weQorICAgIHJlbGF4bmcucHkJXAorICAgIHRocmVhZDIucHkKIAogWE1MUz0JCVwKICAgICB0c3QueG1sCVwKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXIyLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKaW5kZXggZjhjYTI1NC4uYWZjMzU4NiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKQEAgLTE0LDEwICsxNCwxMCBAQAogZXJyPSIiCiBleHBlY3Q9IiIiLi4vLi4vdGVzdC92YWxpZC9yc3MueG1sOjE3MjogdmFsaWRpdHkgZXJyb3I6IEVsZW1lbnQgcnNzIGRvZXMgbm90IGNhcnJ5IGF0dHJpYnV0ZSB2ZXJzaW9uCiA8L3Jzcz4KLSAgICAgXgorICAgICAgXgogLi4vLi4vdGVzdC92YWxpZC94bGluay54bWw6NDUwOiB2YWxpZGl0eSBlcnJvcjogSUQgZHQtYXJjIGFscmVhZHkgZGVmaW5lZAogCTxwPjx0ZXJtZGVmIGlkPSJkdC1hcmMiIHRlcm09IkFyYyI+QW4gPHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC4uLy4uL3Rlc3QvdmFsaWQveGxpbmsueG1sOjUzMDogdmFsaWRpdHkgZXJyb3I6IGF0dHJpYnV0ZSBkZWYgbGluZSAxOTkgcmVmZXJlbmNlcyBhbiB1bmtub3duIElEICJkdC14bGciCiAKIF4KZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90aHJlYWQyLnB5IGIvcHl0aG9uL3Rlc3RzL3RocmVhZDIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhhYzVlZAotLS0gL2Rldi9udWxsCisrKyBiL3B5dGhvbi90ZXN0cy90aHJlYWQyLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uIC11CitpbXBvcnQgc3RyaW5nLCBzeXMsIHRpbWUKK2ltcG9ydCB0aHJlYWQKK2Zyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIExvY2sKKworaW1wb3J0IGxpYnhtbDIKKworVEhSRUFEU19DT1VOVCA9IDE1CisKK2ZhaWxlZCA9IDAKKworY2xhc3MgRXJyb3JIYW5kbGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmVycm9ycyA9IFtdCisgICAgICAgIHNlbGYubG9jayA9IExvY2soKQorCisgICAgZGVmIGhhbmRsZXIoc2VsZixjdHgsc3RyKToKKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoc3RyKQorICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisKK2RlZiBnZXRMaW5lTnVtYmVyc0RlZmF1bHQoKToKKyAgICBvbGQgPSBsaWJ4bWwyLmxpbmVOdW1iZXJzRGVmYXVsdCgwKQorICAgIGxpYnhtbDIubGluZU51bWJlcnNEZWZhdWx0KG9sZCkKKyAgICByZXR1cm4gb2xkCisKK2RlZiB0ZXN0KGV4cGVjdGVkTGluZU51bWJlcnNEZWZhdWx0KToKKyAgICB0aW1lLnNsZWVwKDEpCisgICAgZ2xvYmFsIGZhaWxlZAorICAgICMgY2hlY2sgYSBwZXIgdGhyZWFkLWdsb2JhbAorICAgIGlmIGV4cGVjdGVkTGluZU51bWJlcnNEZWZhdWx0ICE9IGdldExpbmVOdW1iZXJzRGVmYXVsdCgpOgorICAgICAgICBmYWlsZWQgPSAxCisgICAgICAgIHByaW50ICJGQUlMRUQgdG8gb2J0YWluIGNvcnJlY3QgdmFsdWUgZm9yICIgXAorICAgICAgICAgICAgICAibGluZU51bWJlcnNEZWZhdWx0IGluIHRocmVhZCAlZCIgJSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAjIGNoZWNrIHRoZXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIgCisgICAgIyAod2hpY2ggaXMgTk9UIHBlci10aHJlYWQgaW4gdGhlIHB5dGhvbiBiaW5kaW5ncykKKyAgICB0cnk6CisgICAgICAgIGRvYyA9IGxpYnhtbDIucGFyc2VGaWxlKCJiYWQueG1sIikKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgImZhaWxlZCIKKworIyBnbG9iYWwgZXJyb3IgaGFuZGxlcgorZWggPSBFcnJvckhhbmRsZXIoKQorbGlieG1sMi5yZWdpc3RlckVycm9ySGFuZGxlcihlaC5oYW5kbGVyLCIiKQorCisjIHNldCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seQorbGlieG1sMi5saW5lTnVtYmVyc0RlZmF1bHQoMSkgCit0ZXN0KDEpCitlYyA9IGxlbihlaC5lcnJvcnMpCitpZiBlYyA9PSAwOgorICAgIHByaW50ICJGQUlMRUQ6IHNob3VsZCBoYXZlIG9idGFpbmVkIGVycm9ycyIKKyAgICBzeXMuZXhpdCgxKQorCit0cyA9IFtdCitmb3IgaSBpbiByYW5nZShUSFJFQURTX0NPVU5UKToKKyAgICAjIGV4cGVjdCAwIGZvciBsaW5lTnVtYmVyc0RlZmF1bHQgYmVjYXVzZQorICAgICMgdGhlIG5ldyB2YWx1ZSBoYXMgYmVlbiBzZXQgb24gdGhlIG1haW4gdGhyZWFkIG9ubHkKKyAgICB0cy5hcHBlbmQoVGhyZWFkKHRhcmdldD10ZXN0LGFyZ3M9KDAsKSkpCitmb3IgdCBpbiB0czoKKyAgICB0LnN0YXJ0KCkKK2ZvciB0IGluIHRzOgorICAgIHQuam9pbigpCisKK2lmIGxlbihlaC5lcnJvcnMpICE9IGVjK1RIUkVBRFNfQ09VTlQqZWM6CisgICAgcHJpbnQgIkZBSUxFRDogZGlkIG5vdCBvYnRhaW4gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVycm9ycyIKKyAgICBzeXMuZXhpdCgxKQorCisjIHNldCBsaW5lTnVtYmVyc0RlZmF1bHQgZm9yIGZ1dHVyZSBuZXcgdGhyZWFkcworbGlieG1sMi50aHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSgxKQordHMgPSBbXQorZm9yIGkgaW4gcmFuZ2UoVEhSRUFEU19DT1VOVCk6CisgICAgIyBleHBlY3QgMSBmb3IgbGluZU51bWJlcnNEZWZhdWx0CisgICAgdHMuYXBwZW5kKFRocmVhZCh0YXJnZXQ9dGVzdCxhcmdzPSgxLCkpKQorZm9yIHQgaW4gdHM6CisgICAgdC5zdGFydCgpCitmb3IgdCBpbiB0czoKKyAgICB0LmpvaW4oKQorCitpZiBsZW4oZWguZXJyb3JzKSAhPSBlYytUSFJFQURTX0NPVU5UKmVjKjI6CisgICAgcHJpbnQgIkZBSUxFRDogZGlkIG5vdCBvYnRhaW4gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVycm9ycyIKKyAgICBzeXMuZXhpdCgxKQorCitpZiBmYWlsZWQ6CisgICAgcHJpbnQgIkZBSUxFRCIKKyAgICBzeXMuZXhpdCgxKQorCisjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYworbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKK2lmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKKyAgICBwcmludCAiT0siCitlbHNlOgorICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQo=