ZGlmZiAtLWdpdCBhL0VQUGx1cy9Db21wYXRpYmlsaXR5L0ltYWdlQ29tcGF0LmNzIGIvRVBQbHVzL0NvbXBhdGliaWxpdHkvSW1hZ2VDb21wYXQuY3MKaW5kZXggZWMwZWVmMy4uZTdhZWZkZSAxMDA2NDQKLS0tIGEvRVBQbHVzL0NvbXBhdGliaWxpdHkvSW1hZ2VDb21wYXQuY3MKKysrIGIvRVBQbHVzL0NvbXBhdGliaWxpdHkvSW1hZ2VDb21wYXQuY3MKQEAgLTEsMzcgKzEsMjMgQEAKLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkRyYXdpbmc7Ci11c2luZyBTeXN0ZW0uRHJhd2luZy5JbWFnaW5nOwogdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBTeXN0ZW0uVGV4dDsKK3VzaW5nIElyb25Tb2Z0d2FyZS5EcmF3aW5nOwogCiBuYW1lc3BhY2UgT2ZmaWNlT3BlblhtbC5Db21wYXRpYmlsaXR5CiB7CiAgICAgaW50ZXJuYWwgY2xhc3MgSW1hZ2VDb21wYXQKICAgICB7Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBieXRlW10gR2V0SW1hZ2VBc0J5dGVBcnJheShJbWFnZSBpbWFnZSkKKyAgICAgICAgaW50ZXJuYWwgc3RhdGljIGJ5dGVbXSBHZXRJbWFnZUFzQnl0ZUFycmF5KEFueUJpdG1hcCBpbWFnZSkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIG1zID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgaWYgKGltYWdlLlJhd0Zvcm1hdC5HdWlkID09IEltYWdlRm9ybWF0LkdpZi5HdWlkKQorICAgICAgICAgICAgaWYgKGltYWdlLkdldEltYWdlRm9ybWF0KCkgPT0gQW55Qml0bWFwLkltYWdlRm9ybWF0LkdpZiB8fAorICAgICAgICAgICAgICAgIGltYWdlLkdldEltYWdlRm9ybWF0KCkgPT0gQW55Qml0bWFwLkltYWdlRm9ybWF0LkJtcCB8fAorICAgICAgICAgICAgICAgIGltYWdlLkdldEltYWdlRm9ybWF0KCkgPT0gQW55Qml0bWFwLkltYWdlRm9ybWF0LlBuZyB8fAorICAgICAgICAgICAgICAgIGltYWdlLkdldEltYWdlRm9ybWF0KCkgPT0gQW55Qml0bWFwLkltYWdlRm9ybWF0LlRpZmYpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW1hZ2UuU2F2ZShtcywgSW1hZ2VGb3JtYXQuR2lmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGltYWdlLlJhd0Zvcm1hdC5HdWlkID09IEltYWdlRm9ybWF0LkJtcC5HdWlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGltYWdlLlNhdmUobXMsIEltYWdlRm9ybWF0LkJtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChpbWFnZS5SYXdGb3JtYXQuR3VpZCA9PSBJbWFnZUZvcm1hdC5QbmcuR3VpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbWFnZS5TYXZlKG1zLCBJbWFnZUZvcm1hdC5QbmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2UuUmF3Rm9ybWF0Lkd1aWQgPT0gSW1hZ2VGb3JtYXQuVGlmZi5HdWlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGltYWdlLlNhdmUobXMsIEltYWdlRm9ybWF0LlRpZmYpOworICAgICAgICAgICAgICAgIGltYWdlLkV4cG9ydFN0cmVhbShtcywgaW1hZ2UuR2V0SW1hZ2VGb3JtYXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW1hZ2UuU2F2ZShtcywgSW1hZ2VGb3JtYXQuSnBlZyk7CisgICAgICAgICAgICAgICAgaW1hZ2UuRXhwb3J0U3RyZWFtKG1zLCBBbnlCaXRtYXAuSW1hZ2VGb3JtYXQuSnBlZyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtcy5Ub0FycmF5KCk7CmRpZmYgLS1naXQgYS9FUFBsdXMvRHJhd2luZy9FeGNlbERyYXdpbmdzLmNzIGIvRVBQbHVzL0RyYXdpbmcvRXhjZWxEcmF3aW5ncy5jcwppbmRleCA4NDQxZTU2Li45N2ExNDgzIDEwMDY0NAotLS0gYS9FUFBsdXMvRHJhd2luZy9FeGNlbERyYXdpbmdzLmNzCisrKyBiL0VQUGx1cy9EcmF3aW5nL0V4Y2VsRHJhd2luZ3MuY3MKQEAgLTM1LDggKzM1LDggQEAKIHVzaW5nIFN5c3RlbS5YbWw7CiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CiB1c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uRHJhd2luZzsKIHVzaW5nIFN5c3RlbS5MaW5xOwordXNpbmcgSXJvblNvZnR3YXJlLkRyYXdpbmc7CiB1c2luZyBPZmZpY2VPcGVuWG1sLkRyYXdpbmcuQ2hhcnQ7CiB1c2luZyBPZmZpY2VPcGVuWG1sLlRhYmxlLlBpdm90VGFibGU7CiB1c2luZyBPZmZpY2VPcGVuWG1sLlV0aWxzOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Ik5hbWUiPjwvcGFyYW0+CiAgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImltYWdlIj5BbiBpbWFnZS4gQWxsd2F5cyBzYXZlZCBpbiB0aGVuIEpQZWcgZm9ybWF0PC9wYXJhbT4KICAgICAgICAgICAgIC8vLyA8cmV0dXJucz48L3JldHVybnM+Ci0gICAgICAgICAgICBwdWJsaWMgRXhjZWxQaWN0dXJlIEFkZFBpY3R1cmUoc3RyaW5nIE5hbWUsIEltYWdlIGltYWdlKQorICAgICAgICAgICAgcHVibGljIEV4Y2VsUGljdHVyZSBBZGRQaWN0dXJlKHN0cmluZyBOYW1lLCBBbnlCaXRtYXAgaW1hZ2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gQWRkUGljdHVyZShOYW1lLCBpbWFnZSwgbnVsbCk7CiAgICAgICAgICAgICB9CkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW1hZ2UiPkFuIGltYWdlLiBBbGx3YXlzIHNhdmVkIGluIHRoZW4gSlBlZyBmb3JtYXQ8L3BhcmFtPgogICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJIeXBlcmxpbmsiPlBpY3R1cmUgSHlwZXJsaW5rPC9wYXJhbT4KICAgICAgICAgICAgIC8vLyA8cmV0dXJucz48L3JldHVybnM+Ci0gICAgICAgICAgICBwdWJsaWMgRXhjZWxQaWN0dXJlIEFkZFBpY3R1cmUoc3RyaW5nIE5hbWUsIEltYWdlIGltYWdlLCBVcmkgSHlwZXJsaW5rKQorICAgICAgICAgICAgcHVibGljIEV4Y2VsUGljdHVyZSBBZGRQaWN0dXJlKHN0cmluZyBOYW1lLCBBbnlCaXRtYXAgaW1hZ2UsIFVyaSBIeXBlcmxpbmspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGltYWdlICE9IG51bGwpCiAgICAgICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvRVBQbHVzL0RyYXdpbmcvRXhjZWxQaWN0dXJlLmNzIGIvRVBQbHVzL0RyYXdpbmcvRXhjZWxQaWN0dXJlLmNzCmluZGV4IDU5ZThjZjEuLjIxM2RkMjQgMTAwNjQ0Ci0tLSBhL0VQUGx1cy9EcmF3aW5nL0V4Y2VsUGljdHVyZS5jcworKysgYi9FUFBsdXMvRHJhd2luZy9FeGNlbFBpY3R1cmUuY3MKQEAgLTM1LDkgKzM1LDggQEAKIHVzaW5nIFN5c3RlbS5UZXh0OwogdXNpbmcgU3lzdGVtLlhtbDsKIHVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5EcmF3aW5nOwotdXNpbmcgU3lzdGVtLkRyYXdpbmcuSW1hZ2luZzsKIHVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKK3VzaW5nIElyb25Tb2Z0d2FyZS5EcmF3aW5nOwogdXNpbmcgT2ZmaWNlT3BlblhtbC5Db21wYXRpYmlsaXR5OwogdXNpbmcgT2ZmaWNlT3BlblhtbC5VdGlsczsKIApAQCAtNjEsNyArNjAsNyBAQAogICAgICAgICAgICAgICAgIFBhcnQgPSBkcmF3aW5ncy5QYXJ0LlBhY2thZ2UuR2V0UGFydChVcmlQaWMpOwogICAgICAgICAgICAgICAgIEZpbGVJbmZvIGYgPSBuZXcgRmlsZUluZm8oVXJpUGljLk9yaWdpbmFsU3RyaW5nKTsKICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9IEdldENvbnRlbnRUeXBlKGYuRXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICBfaW1hZ2UgPSBJbWFnZS5Gcm9tU3RyZWFtKFBhcnQuR2V0U3RyZWFtKCkpOworICAgICAgICAgICAgICAgIF9pbWFnZSA9IEFueUJpdG1hcC5Gcm9tU3RyZWFtKFBhcnQuR2V0U3RyZWFtKCkpOwogI2lmIChDb3JlKQogICAgICAgICAgICAgICAgIGJ5dGVbXSBpYnkgPSBJbWFnZUNvbXBhdC5HZXRJbWFnZUFzQnl0ZUFycmF5KF9pbWFnZSk7CiAjZWxzZQpAQCAtODcsMTEgKzg2LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGludGVybmFsIEV4Y2VsUGljdHVyZShFeGNlbERyYXdpbmdzIGRyYXdpbmdzLCBYbWxOb2RlIG5vZGUsIEltYWdlIGltYWdlKSA6CisgICAgICAgIGludGVybmFsIEV4Y2VsUGljdHVyZShFeGNlbERyYXdpbmdzIGRyYXdpbmdzLCBYbWxOb2RlIG5vZGUsIEFueUJpdG1hcCBpbWFnZSkgOgogICAgICAgICAgICB0aGlzKGRyYXdpbmdzLCBub2RlLCBpbWFnZSwgbnVsbCkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIGludGVybmFsIEV4Y2VsUGljdHVyZShFeGNlbERyYXdpbmdzIGRyYXdpbmdzLCBYbWxOb2RlIG5vZGUsIEltYWdlIGltYWdlLCBVcmkgaHlwZXJsaW5rKSA6CisgICAgICAgIGludGVybmFsIEV4Y2VsUGljdHVyZShFeGNlbERyYXdpbmdzIGRyYXdpbmdzLCBYbWxOb2RlIG5vZGUsIEFueUJpdG1hcCBpbWFnZSwgVXJpIGh5cGVybGluaykgOgogICAgICAgICAgICAgYmFzZShkcmF3aW5ncywgbm9kZSwgInhkcjpwaWMveGRyOm52UGljUHIveGRyOmNOdlByL0BuYW1lIikKICAgICAgICAgewogICAgICAgICAgICAgWG1sRWxlbWVudCBwaWNOb2RlID0gbm9kZS5Pd25lckRvY3VtZW50LkNyZWF0ZUVsZW1lbnQoInhkciIsICJwaWMiLCBFeGNlbFBhY2thZ2Uuc2NoZW1hU2hlZXREcmF3aW5ncyk7CkBAIC0xMzAsNyArMTI5LDcgQEAKICAgICAgICAgICAgIHZhciBwYWNrYWdlID0gZHJhd2luZ3MuV29ya3NoZWV0Ll9wYWNrYWdlLlBhY2thZ2U7CiAgICAgICAgICAgICBDb250ZW50VHlwZSA9IEdldENvbnRlbnRUeXBlKGltYWdlRmlsZS5FeHRlbnNpb24pOwogICAgICAgICAgICAgdmFyIGltYWdlc3RyZWFtID0gbmV3IEZpbGVTdHJlYW0oaW1hZ2VGaWxlLkZ1bGxOYW1lLCBGaWxlTW9kZS5PcGVuLCBGaWxlQWNjZXNzLlJlYWQpOwotICAgICAgICAgICAgX2ltYWdlID0gSW1hZ2UuRnJvbVN0cmVhbShpbWFnZXN0cmVhbSk7CisgICAgICAgICAgICBfaW1hZ2UgPSBBbnlCaXRtYXAuRnJvbVN0cmVhbShpbWFnZXN0cmVhbSk7CiAjaWYgKENvcmUpCiAgICAgICAgICAgICB2YXIgaW1nPUltYWdlQ29tcGF0LkdldEltYWdlQXNCeXRlQXJyYXkoX2ltYWdlKTsKICNlbHNlCkBAIC0yMDUsNyArMjA0LDcgQEAKICAgICAgICAgICAgIC8vX2RyYXdpbmdzLl9waWNzLkFkZChuZXdQaWMpOwogICAgICAgICB9CiAgICAgICAgICNlbmRyZWdpb24KLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgU2F2ZVBpY3R1cmUoSW1hZ2UgaW1hZ2UpCisgICAgICAgIHByaXZhdGUgc3RyaW5nIFNhdmVQaWN0dXJlKEFueUJpdG1hcCBpbWFnZSkKICAgICAgICAgewogI2lmIChDb3JlKQogICAgICAgICAgICAgYnl0ZVtdIGltZyA9IEltYWdlQ29tcGF0LkdldEltYWdlQXNCeXRlQXJyYXkoaW1hZ2UpOwpAQCAtMjM3LDExICsyMzYsMTEgQEAKIAogICAgICAgICAgICAgcmV0dXJuIFJlbFBpYy5JZDsKICAgICAgICAgfQotICAgICAgICBwcml2YXRlIHZvaWQgU2V0UG9zRGVmYXVsdHMoSW1hZ2UgaW1hZ2UpCisgICAgICAgIHByaXZhdGUgdm9pZCBTZXRQb3NEZWZhdWx0cyhBbnlCaXRtYXAgaW1hZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVkaXRBcyA9IGVFZGl0QXMuT25lQ2VsbDsKLSAgICAgICAgICAgIFNldFBpeGVsV2lkdGgoaW1hZ2UuV2lkdGgsIGltYWdlLkhvcml6b250YWxSZXNvbHV0aW9uKTsKLSAgICAgICAgICAgIFNldFBpeGVsSGVpZ2h0KGltYWdlLkhlaWdodCwgaW1hZ2UuVmVydGljYWxSZXNvbHV0aW9uKTsKKyAgICAgICAgICAgIFNldFBpeGVsV2lkdGgoaW1hZ2UuV2lkdGgsIChmbG9hdClpbWFnZS5Ib3Jpem9udGFsUmVzb2x1dGlvbi5WYWx1ZSk7CisgICAgICAgICAgICBTZXRQaXhlbEhlaWdodChpbWFnZS5IZWlnaHQsIChmbG9hdClpbWFnZS5WZXJ0aWNhbFJlc29sdXRpb24uVmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBzdHJpbmcgUGljU3RhcnRYbWwoKQpAQCAtMjgwLDExICsyNzksMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIGludGVybmFsIHN0cmluZyBJbWFnZUhhc2ggeyBnZXQ7IHNldDsgfQotICAgICAgICBJbWFnZSBfaW1hZ2UgPSBudWxsOworICAgICAgICBBbnlCaXRtYXAgX2ltYWdlID0gbnVsbDsKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gVGhlIEltYWdlCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBJbWFnZSBJbWFnZQorICAgICAgICBwdWJsaWMgQW55Qml0bWFwIEltYWdlCiAgICAgICAgIHsKICAgICAgICAgICAgIGdldAogICAgICAgICAgICAgewpAQCAtMzEwLDEyICszMDksMTIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgSW1hZ2VGb3JtYXQgX2ltYWdlRm9ybWF0PUltYWdlRm9ybWF0LkpwZWc7CisgICAgICAgIEFueUJpdG1hcC5JbWFnZUZvcm1hdCBfaW1hZ2VGb3JtYXQ9QW55Qml0bWFwLkltYWdlRm9ybWF0LkpwZWc7CiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vIEltYWdlIGZvcm1hdAogICAgICAgICAvLy8gSWYgdGhlIHBpY3R1cmUgaXMgY3JlYXRlZCBmcm9tIGFuIEltYWdlIHRoaXMgdHlwZSBpcyBhbHdheXMgSnBlZwogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgSW1hZ2VGb3JtYXQgSW1hZ2VGb3JtYXQKKyAgICAgICAgcHVibGljIEFueUJpdG1hcC5JbWFnZUZvcm1hdCBJbWFnZUZvcm1hdAogICAgICAgICB7CiAgICAgICAgICAgICBnZXQKICAgICAgICAgICAgIHsKQEAgLTM1MCw4ICszNDksOCBAQAogICAgICAgICAgICAgICAgIHdpZHRoID0gKGludCkod2lkdGggKiAoKGRlY2ltYWwpUGVyY2VudCAvIDEwMCkpOwogICAgICAgICAgICAgICAgIGhlaWdodCA9IChpbnQpKGhlaWdodCAqICgoZGVjaW1hbClQZXJjZW50IC8gMTAwKSk7CiAKLSAgICAgICAgICAgICAgICBTZXRQaXhlbFdpZHRoKHdpZHRoLCBJbWFnZS5Ib3Jpem9udGFsUmVzb2x1dGlvbik7Ci0gICAgICAgICAgICAgICAgU2V0UGl4ZWxIZWlnaHQoaGVpZ2h0LCBJbWFnZS5WZXJ0aWNhbFJlc29sdXRpb24pOworICAgICAgICAgICAgICAgIFNldFBpeGVsV2lkdGgod2lkdGgsIChmbG9hdClJbWFnZS5Ib3Jpem9udGFsUmVzb2x1dGlvbi5WYWx1ZSk7CisgICAgICAgICAgICAgICAgU2V0UGl4ZWxIZWlnaHQoaGVpZ2h0LCAoZmxvYXQpSW1hZ2UuVmVydGljYWxSZXNvbHV0aW9uLlZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpbnRlcm5hbCBVcmkgVXJpUGljIHsgZ2V0OyBzZXQ7IH0KZGlmZiAtLWdpdCBhL0VQUGx1cy9EcmF3aW5nL1ZtbC9FeGNlbFZtbERyYXdpbmdQaWN0dXJlLmNzIGIvRVBQbHVzL0RyYXdpbmcvVm1sL0V4Y2VsVm1sRHJhd2luZ1BpY3R1cmUuY3MKaW5kZXggZDRiMzhhYi4uYzQ2YWI2YiAxMDA2NDQKLS0tIGEvRVBQbHVzL0RyYXdpbmcvVm1sL0V4Y2VsVm1sRHJhd2luZ1BpY3R1cmUuY3MKKysrIGIvRVBQbHVzL0RyYXdpbmcvVm1sL0V4Y2VsVm1sRHJhd2luZ1BpY3R1cmUuY3MKQEAgLTM1LDYgKzM1LDcgQEAKIHVzaW5nIFN5c3RlbS5YbWw7CiB1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKIHVzaW5nIFN5c3RlbS5EcmF3aW5nOwordXNpbmcgSXJvblNvZnR3YXJlLkRyYXdpbmc7CiAKIAogbmFtZXNwYWNlIE9mZmljZU9wZW5YbWwuRHJhd2luZy5WbWwKQEAgLTEzMyw3ICsxMzQsNyBAQAogICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyBUaGUgaW1hZ2UKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEltYWdlIEltYWdlCisgICAgICAgIHB1YmxpYyBBbnlCaXRtYXAgSW1hZ2UKICAgICAgICAgewogICAgICAgICAgICAgZ2V0CiAgICAgICAgICAgICB7CkBAIC0xNDEsNyArMTQyLDcgQEAKICAgICAgICAgICAgICAgICBpZiAocGNrLlBhcnRFeGlzdHMoSW1hZ2VVcmkpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBwY2suR2V0UGFydChJbWFnZVVyaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbWFnZS5Gcm9tU3RyZWFtKHBhcnQuR2V0U3RyZWFtKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW55Qml0bWFwLkZyb21TdHJlYW0ocGFydC5HZXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9FUFBsdXMvRVBQbHVzU0RLLmNzcHJvaiBiL0VQUGx1cy9FUFBsdXNTREsuY3Nwcm9qCmluZGV4IDQ5YTU4YWMuLmVhYTFlNDMgMTAwNjQ0Ci0tLSBhL0VQUGx1cy9FUFBsdXNTREsuY3Nwcm9qCisrKyBiL0VQUGx1cy9FUFBsdXNTREsuY3Nwcm9qCkBAIC0xNCwxMCArMTQsMTIgQEAKICAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5XZWIiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9Iklyb25Tb2Z0d2FyZS5TeXN0ZW0uRHJhd2luZyIgVmVyc2lvbj0iMjAyNC4zLjIiIC8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iTWljcm9zb2Z0LkNTaGFycCIgVmVyc2lvbj0iNC43LjAiIC8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLkNvZGVEb20iIFZlcnNpb249IjUuMC4wIiAvPgotICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5EcmF3aW5nLkNvbW1vbiIgVmVyc2lvbj0iNS4wLjMiIC8+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLkRyYXdpbmcuQ29tbW9uIiBWZXJzaW9uPSI2LjAuMCIgLz4KICAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LlBrY3MiIFZlcnNpb249IjUuMC4xIiAvPgogICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5TZWN1cml0eS5QZXJtaXNzaW9ucyIgVmVyc2lvbj0iNS4wLjAiIC8+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlRleHQuRW5jb2RpbmcuQ29kZVBhZ2VzIiBWZXJzaW9uPSI1LjAuMCIgLz4KICAgPC9JdGVtR3JvdXA+CiA8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9FUFBsdXMvRXhjZWxXb3Jrc2hlZXQuY3MgYi9FUFBsdXMvRXhjZWxXb3Jrc2hlZXQuY3MKaW5kZXggYzE5NGU4OC4uOTdjNWU1OCAxMDA2NDQKLS0tIGEvRVBQbHVzL0V4Y2VsV29ya3NoZWV0LmNzCisrKyBiL0VQUGx1cy9FeGNlbFdvcmtzaGVldC5jcwpAQCAtNTAsMTAgKzUwLDEwIEBACiB1c2luZyBPZmZpY2VPcGVuWG1sLkRhdGFWYWxpZGF0aW9uOwogdXNpbmcgT2ZmaWNlT3BlblhtbC5UYWJsZS5QaXZvdFRhYmxlOwogdXNpbmcgU3lzdGVtLkNvbXBvbmVudE1vZGVsOwotdXNpbmcgU3lzdGVtLkRyYXdpbmc7CiB1c2luZyBPZmZpY2VPcGVuWG1sLkNvbmRpdGlvbmFsRm9ybWF0dGluZzsKIHVzaW5nIE9mZmljZU9wZW5YbWwuVXRpbHM7CiB1c2luZyBJb25pYy5aaXA7Cit1c2luZyBJcm9uU29mdHdhcmUuRHJhd2luZzsKIHVzaW5nIE9mZmljZU9wZW5YbWwuRm9ybXVsYVBhcnNpbmcuTGV4aWNhbEFuYWx5c2lzOwogdXNpbmcgT2ZmaWNlT3BlblhtbC5Gb3JtdWxhUGFyc2luZzsKIHVzaW5nIE9mZmljZU9wZW5YbWwuUGFja2FnaW5nLklvbmljLlppcDsKZGlmZiAtLWdpdCBhL0VQUGx1cy9FeGNlbFdvcmtzaGVldHMuY3MgYi9FUFBsdXMvRXhjZWxXb3Jrc2hlZXRzLmNzCmluZGV4IDE0YmE2MzYuLmVmMTNlYWEgMTAwNjQ0Ci0tLSBhL0VQUGx1cy9FeGNlbFdvcmtzaGVldHMuY3MKKysrIGIvRVBQbHVzL0V4Y2VsV29ya3NoZWV0cy5jcwpAQCAtNCw3ICs0LDcgQEAKICAqIEVQUGx1cyBwcm92aWRlcyBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIG9mIEV4Y2VsIDIwMDcvMjAxMCBzcHJlYWRzaGVldHMuCiAgKiBTZWUgaHR0cDovL3d3dy5jb2RlcGxleC5jb20vRVBQbHVzIGZvciBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSAgSmFuIEvkbGxtYW4KKyAqIENvcHlyaWdodCAoQykgMjAxMSAgSmFuIEvvv71sbG1hbgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDggKzI2LDggQEAKICAqIAogICogQXV0aG9yCQkJCQkJCUNoYW5nZQkJCQkJCURhdGUKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSmFuIEvkbGxtYW4JCSAgICBJbml0aWFsIFJlbGVhc2UJCSAgICAgICAyMDA5LTEwLTAxCi0gKiBKYW4gS+RsbG1hbgkJICAgIExpY2Vuc2UgY2hhbmdlZCBHUEwtLT5MR1BMIDIwMTEtMTItMjcKKyAqIEphbiBL77+9bGxtYW4JCSAgICBJbml0aWFsIFJlbGVhc2UJCSAgICAgICAyMDA5LTEwLTAxCisgKiBKYW4gS++/vWxsbWFuCQkgICAgTGljZW5zZSBjaGFuZ2VkIEdQTC0tPkxHUEwgMjAxMS0xMi0yNwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1c2luZyBTeXN0ZW07CiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CkBAIC02OTMsNyArNjkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF3b3JrU2hlZXQuV29ya2Jvb2suX3BhY2thZ2UuUGFja2FnZS5QYXJ0RXhpc3RzKHVyaSkpCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpY1BhcnQgPSB3b3JrU2hlZXQuV29ya2Jvb2suX3BhY2thZ2UuUGFja2FnZS5DcmVhdGVQYXJ0KHVyaSwgcGljLkNvbnRlbnRUeXBlLCBDb21wcmVzc2lvbkxldmVsLk5vbmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy5JbWFnZS5TYXZlKHBpY1BhcnQuR2V0U3RyZWFtKEZpbGVNb2RlLkNyZWF0ZSwgRmlsZUFjY2Vzcy5Xcml0ZSksIHBpYy5JbWFnZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLkltYWdlLkV4cG9ydFN0cmVhbShwaWNQYXJ0LkdldFN0cmVhbShGaWxlTW9kZS5DcmVhdGUsIEZpbGVBY2Nlc3MuV3JpdGUpLCBwaWMuSW1hZ2VGb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVsID0gcGFydC5DcmVhdGVSZWxhdGlvbnNoaXAoVXJpSGVscGVyLkdldFJlbGF0aXZlVXJpKHdvcmtTaGVldC5Xb3Jrc2hlZXRVcmksIHVyaSksIFBhY2thZ2luZy5UYXJnZXRNb2RlLkludGVybmFsLCBFeGNlbFBhY2thZ2Uuc2NoZW1hUmVsYXRpb25zaGlwcyArICIvaW1hZ2UiKTsKZGlmZiAtLWdpdCBhL05ldENvcmVUZXN0cy9OZXRDb3JlVGVzdHMuY3Nwcm9qIGIvTmV0Q29yZVRlc3RzL05ldENvcmVUZXN0cy5jc3Byb2oKaW5kZXggOTVhYTNmYi4uY2U2MTk1OCAxMDA2NDQKLS0tIGEvTmV0Q29yZVRlc3RzL05ldENvcmVUZXN0cy5jc3Byb2oKKysrIGIvTmV0Q29yZVRlc3RzL05ldENvcmVUZXN0cy5jc3Byb2oKQEAgLTEwLDcgKzEwLDcgQEAKICAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJNU1Rlc3QuVGVzdEZyYW1ld29yayIgVmVyc2lvbj0iMi4yLjgiIC8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iTWljcm9zb2Z0Lk5FVC5UZXN0LlNESyIgVmVyc2lvbj0iMTcuMS4wIi8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLk5ldC5IdHRwIiBWZXJzaW9uPSI0LjMuNCIvPgotICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5UZXh0LkVuY29kaW5nLkNvZGVQYWdlcyIgVmVyc2lvbj0iNC4zLjAiIC8+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlRleHQuRW5jb2RpbmcuQ29kZVBhZ2VzIiBWZXJzaW9uPSI1LjAuMCIgLz4KICAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMiIFZlcnNpb249IjQuMy4xIi8+CiAKICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxFUFBsdXNcRVBQbHVzU0RLLmNzcHJvaiIgLz4KZGlmZiAtLWdpdCBhL05ldEZyYW1ld29ya1Rlc3RzL05ldEZyYW1ld29ya1Rlc3RzLmNzcHJvaiBiL05ldEZyYW1ld29ya1Rlc3RzL05ldEZyYW1ld29ya1Rlc3RzLmNzcHJvagppbmRleCAyNDJmY2Y1Li4wNzUwYzYwIDEwMDY0NAotLS0gYS9OZXRGcmFtZXdvcmtUZXN0cy9OZXRGcmFtZXdvcmtUZXN0cy5jc3Byb2oKKysrIGIvTmV0RnJhbWV3b3JrVGVzdHMvTmV0RnJhbWV3b3JrVGVzdHMuY3Nwcm9qCkBAIC05LDcgKzksNyBAQAogICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9Ik1TVGVzdC5UZXN0QWRhcHRlciIgVmVyc2lvbj0iMi4yLjgiLz4KICAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJNU1Rlc3QuVGVzdEZyYW1ld29yayIgVmVyc2lvbj0iMi4yLjgiIC8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iTWljcm9zb2Z0Lk5FVC5UZXN0LlNESyIgVmVyc2lvbj0iMTcuMS4wIi8+Ci0gICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlRleHQuRW5jb2RpbmcuQ29kZVBhZ2VzIiBWZXJzaW9uPSI0LjMuMCIgLz4KKyAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uVGV4dC5FbmNvZGluZy5Db2RlUGFnZXMiIFZlcnNpb249IjUuMC4wIiAvPgogCiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iLi5cRVBQbHVzXEVQUGx1c1NESy5jc3Byb2oiIC8+CiAK