ZGlmZiAtLWdpdCBhLy5iYXplbHJjIGIvLmJhemVscmMKaW5kZXggZTI0YmU4OC4uOGMzMjY2MSAxMDA2NDQKLS0tIGEvLmJhemVscmMKKysrIGIvLmJhemVscmMKQEAgLTMsOCArMywzMyBAQAogYnVpbGQgLS1leHBlcmltZW50YWxfc3RyaWN0X2FjdGlvbl9lbnYKIGJ1aWxkIC0tYWN0aW9uX2Vudj1QQVRICiBidWlsZCAtLWRpc2tfY2FjaGU9fi8uZ2Vycml0Y29kZXJldmlldy9iYXplbC1jYWNoZS9jYXMKLWJ1aWxkIC0tamF2YV90b29sY2hhaW4gLy90b29sczplcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW4KKworIyBCdWlsZHMgdXNpbmcgcmVtb3RlX2pkazExLCBleGVjdXRlcyB1c2luZyByZW1vdGVfamRrMTEgb3IgbG9jYWxfamRrCitidWlsZCAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQgLS1qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKK2J1aWxkIC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTEKK2J1aWxkIC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKKworIyBCdWlsZHMgYW5kIGV4ZWN1dGVzIG9uIFJCRSB1c2luZyByZW1vdGVqZGtfMTEKK2J1aWxkOnJlbW90ZSAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQ6cmVtb3RlIC0tamF2YV9ydW50aW1lX3ZlcnNpb249cmVtb3RlamRrXzExCitidWlsZDpyZW1vdGUgLS10b29sX2phdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQ6cmVtb3RlIC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKKworIyBCdWlsZHMgdXNpbmcgcmVtb3RlX2pkazE3LCBleGVjdXRlcyB1c2luZyByZW1vdGVfamRrMTEgb3IgbG9jYWxfamRrCitidWlsZDpqYXZhMTcgLS1qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOmphdmExNyAtLWphdmFfcnVudGltZV92ZXJzaW9uPXJlbW90ZWpka18xNworYnVpbGQ6amF2YTE3IC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOmphdmExNyAtLXRvb2xfamF2YV9ydW50aW1lX3ZlcnNpb249cmVtb3RlamRrXzE3CisKKyMgQnVpbGRzIGFuZCBleGVjdXRlcyBvbiBSQkUgdXNpbmcgcmVtb3RlamRrXzE3CitidWlsZDpyZW1vdGUxNyAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xNworYnVpbGQ6cmVtb3RlMTcgLS1qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTcKK2J1aWxkOnJlbW90ZTE3IC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOnJlbW90ZTE3IC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTcKIAogdGVzdCAtLWJ1aWxkX3Rlc3RzX29ubHkKIHRlc3QgLS10ZXN0X291dHB1dD1lcnJvcnMKIAoraW1wb3J0ICV3b3Jrc3BhY2UlL3Rvb2xzL3JlbW90ZS1iYXplbHJjCisKZGlmZiAtLWdpdCBhLy5iYXplbHZlcnNpb24gYi8uYmF6ZWx2ZXJzaW9uCmluZGV4IGZjZGIyZTEuLjAwNjJhYzkgMTAwNjQ0Ci0tLSBhLy5iYXplbHZlcnNpb24KKysrIGIvLmJhemVsdmVyc2lvbgpAQCAtMSArMSBAQAotNC4wLjAKKzUuMC4wCmRpZmYgLS1naXQgYS8ubWFpbG1hcCBiLy5tYWlsbWFwCmluZGV4IGYwYmM5OTAuLmYwYWY0OWIgMTAwNjQ0Ci0tLSBhLy5tYWlsbWFwCisrKyBiLy5tYWlsbWFwCkBAIC0xMiw2ICsxMiw3IEBACiBTYcWhYSDFvWl2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhc2EgWml2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPgogU2HFoWEgxb1pdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICBTYcWhYSDFvWl2a292IDx6aXZrb3ZAZ21haWwuY29tPgogU2HFoWEgxb1pdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICBTYXNhIFppdmtvdiA8eml2a292QGdtYWlsLmNvbT4KK1NlYmFzdGlhbiBTY2h1YmVydGggPHNzY2h1YmVydGhAZ21haWwuY29tPiAgICAgICAgICAgICAgICAgIFNlYmFzdGlhbiBTY2h1YmVydGggPHNlYmFzdGlhbi5zY2h1YmVydGhAYm9zY2guaW8+CiBTaGF3biBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICBTaGF3biBPLiBQZWFyY2UgPHNvcEBnb29nbGUuY29tPgogU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhd24gUGVhcmNlIDxzb3BAZ29vZ2xlLmNvbT4KIFNoYXduIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KZGlmZiAtLWdpdCBhL0RFUEVOREVOQ0lFUyBiL0RFUEVOREVOQ0lFUwppbmRleCBlYmJlNDgwLi45M2ZhODUwIDEwMDY0NAotLS0gYS9ERVBFTkRFTkNJRVMKKysrIGIvREVQRU5ERU5DSUVTCkBAIC0xLDY5ICsxLDY4IEBACiBtYXZlbi9tYXZlbmNlbnRyYWwvYXJnczRqL2FyZ3M0ai8yLjMzLCBNSVQsIGFwcHJvdmVkLCBDUTExMDY4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvY29tLmdvb2dsZS5jb2RlLmdzb24vZ3Nvbi8yLjguNywgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0OTYKLW1hdmVuL21hdmVuY2VudHJhbC9jb20uZ29vZ2xlY29kZS5qYXZhZXdhaC9KYXZhRVdBSC8xLjEuMTIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTExNjU4CittYXZlbi9tYXZlbmNlbnRyYWwvY29tLmdvb2dsZS5jb2RlLmdzb24vZ3Nvbi8yLjguOSwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0OTYKK21hdmVuL21hdmVuY2VudHJhbC9jb20uZ29vZ2xlY29kZS5qYXZhZXdhaC9KYXZhRVdBSC8xLjEuMTMsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTExNjU4CiBtYXZlbi9tYXZlbmNlbnRyYWwvY29tLmpjcmFmdC9qc2NoLzAuMS41NSwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgQ1ExOTQzNQogbWF2ZW4vbWF2ZW5jZW50cmFsL2NvbS5qY3JhZnQvanpsaWIvMS4xLjEsIEJTRC0yLUNsYXVzZSwgYXBwcm92ZWQsIENRNjIxOAogbWF2ZW4vbWF2ZW5jZW50cmFsL2NvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8xLjExLCBBcGFjaGUtMi4wIEFORCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCBDUTE1OTcxCiBtYXZlbi9tYXZlbmNlbnRyYWwvY29tbW9ucy1sb2dnaW5nL2NvbW1vbnMtbG9nZ2luZy8xLjIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTEwMTYyCi1tYXZlbi9tYXZlbmNlbnRyYWwvamF2YXguc2VydmxldC9qYXZheC5zZXJ2bGV0LWFwaS8zLjEuMCwgQXBhY2hlLTIuMCBBTkQgKENEREwtMS4xIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMCksIGFwcHJvdmVkLCBDUTcyNDgKLW1hdmVuL21hdmVuY2VudHJhbC9qdW5pdC9qdW5pdC80LjEzLCAsIGFwcHJvdmVkLCBDUTIyNzk2Ci1tYXZlbi9tYXZlbmNlbnRyYWwvbG9nNGovbG9nNGovMS4yLjE1LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1E3ODM3CittYXZlbi9tYXZlbmNlbnRyYWwvamF2YXguc2VydmxldC9qYXZheC5zZXJ2bGV0LWFwaS80LjAuMCwgLCBhcHByb3ZlZCwgQ1ExNjEyNQorbWF2ZW4vbWF2ZW5jZW50cmFsL2p1bml0L2p1bml0LzQuMTMuMiwgRVBMLTIuMCwgYXBwcm92ZWQsIENRMjM2MzYKIG1hdmVuL21hdmVuY2VudHJhbC9uZXQuYnl0ZWJ1ZGR5L2J5dGUtYnVkZHktYWdlbnQvMS45LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAogbWF2ZW4vbWF2ZW5jZW50cmFsL25ldC5ieXRlYnVkZHkvYnl0ZS1idWRkeS8xLjkuMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCiBtYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmkycC5jcnlwdG8vZWRkc2EvMC4zLjAsIENDMC0xLjAsIGFwcHJvdmVkLCBDUTIyNTM3CittYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmphdmEuZGV2LmpuYS9qbmEtcGxhdGZvcm0vNS44LjAsIEFwYWNoZS0yLjAgT1IgTEdQTC0yLjEtb3ItbGF0ZXIsIGFwcHJvdmVkLCBDUTIzMjE4CittYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmphdmEuZGV2LmpuYS9qbmEvNS44LjAsIEFwYWNoZS0yLjAgT1IgTEdQTC0yLjEtb3ItbGF0ZXIsIGFwcHJvdmVkLCBDUTIzMjE3CiBtYXZlbi9tYXZlbmNlbnRyYWwvbmV0LnNmLmpvcHQtc2ltcGxlL2pvcHQtc2ltcGxlLzQuNiwgTUlULCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmFudC9hbnQtbGF1bmNoZXIvMS4xMC4xMCwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5hbnQvYW50LzEuMTAuMTAsIEFwYWNoZS0yLjAgQU5EIFczQyBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1ExNTU2MAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMjAsIEFwYWNoZS0yLjAgQU5EIEJTRC0zLUNsYXVzZSBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMTc3MQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuYW50L2FudC1sYXVuY2hlci8xLjEwLjEyLCBBcGFjaGUtMi4wIEFORCBXM0MgQU5EIExpY2Vuc2VSZWYtUHVibGljLURvbWFpbiwgYXBwcm92ZWQsIENRMTU1NjAKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmFudC9hbnQvMS4xMC4xMiwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4yMSwgQXBhY2hlLTIuMCBBTkQgQlNELTMtQ2xhdXNlIEFORCBiemlwMi0xLjAuNiBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMzcxMAogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuY29tbW9ucy9jb21tb25zLW1hdGgzLzMuMiwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy9odHRwY2xpZW50LzQuNS4xMywgQXBhY2hlLTIuMCBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMzUyNwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMvaHR0cGNvcmUvNC40LjE0LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1EyMzUyOAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLWNvbW1vbi8yLjcuMCwgQXBhY2hlLTIuMCBhbmQgSVNDLCBhcHByb3ZlZCwgQ1EyMzQ2OQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLWNvcmUvMi43LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTIzNDY5Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5zc2hkL3NzaGQtb3NnaS8yLjcuMCwgQXBhY2hlLTIuMCBhbmQgSVNDLCBhcHByb3ZlZCwgQ1EyMzQ2OQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLXNmdHAvMi43LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTIzNDcwCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5zc2hkL3NzaGQtb3NnaS8yLjguMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM4OTIKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLnNzaGQvc3NoZC1zZnRwLzIuOC4wLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1EyMzg5MwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hc3NlcnRqL2Fzc2VydGotY29yZS8zLjIwLjIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5ib3VuY3ljYXN0bGUvYmNwZy1qZGsxNW9uLzEuNjksIE1JVCBhbmQgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0NzIKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGtpeC1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzMKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcHJvdi1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzEKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjdXRpbC1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzQKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1odHRwLzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1pby85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VjdXJpdHkvOS40LjQzLnYyMDIxMDYyOSwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZlci85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmxldC85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktdXRpbC1hamF4LzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS11dGlsLzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0LzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC50ZXN0LzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC51aS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmhhbWNyZXN0L2hhbWNyZXN0LWNvcmUvMS4zLCBCU0QtMi1DbGF1c2UsIGFwcHJvdmVkLCBDUTcwNjMKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuaGFtY3Jlc3QvaGFtY3Jlc3QvMi4yLCBCU0QtMi1DbGF1c2UsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5tb2NraXRvL21vY2tpdG8tY29yZS8yLjIzLjAsIE1JVCwgYXBwcm92ZWQsIENRMTc5NzYKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGctamRrMTVvbi8xLjcwLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgIzE3MTMKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGtpeC1qZGsxNW9uLzEuNzAsIE1JVCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmJvdW5jeWNhc3RsZS9iY3Byb3YtamRrMTVvbi8xLjcwLCBNSVQsIGFwcHJvdmVkLCAjMTcxMgorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5ib3VuY3ljYXN0bGUvYmN1dGlsLWpkazE1b24vMS43MCwgTUlULCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS50b29sY2hhaW4vamV0dHktc2VydmxldC1hcGkvNC4wLjYsIEVQTC0yLjAgT1IgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIHJ0LmpldHR5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaHR0cC8xMC4wLjYsIEVQTC0yLjAgT1IgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIHJ0LmpldHR5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaW8vMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlY3VyaXR5LzEwLjAuNiwgRVBMLTIuMCBPUiBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgcnQuamV0dHkKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZXJ2ZXIvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZsZXQvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXV0aWwvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5wZ20vNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQudGVzdC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnVpLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5oYW1jcmVzdC9oYW1jcmVzdC1jb3JlLzEuMywgQlNELTItQ2xhdXNlLCBhcHByb3ZlZCwgQ1ExMTQyOQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5tb2NraXRvL21vY2tpdG8tY29yZS8yLjIzLjAsIEFwYWNoZS0yLjAgQU5EIE1JVCwgYXBwcm92ZWQsICM5NTgKIG1hdmVuL21hdmVuY2VudHJhbC9vcmcub2JqZW5lc2lzL29iamVuZXNpcy8yLjYsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTE1NDc4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1jb3JlLzEuMzIsIEdQTC0yLjAsIGFwcHJvdmVkLCBDUTIzNDk5Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1nZW5lcmF0b3ItYW5ucHJvY2Vzcy8xLjMyLCBHUEwtMi4wLCBhcHByb3ZlZCwgQ1EyMzUwMAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5vc2dpL29yZy5vc2dpLmNvcmUvNC4zLjEsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTEwMTExCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnNsZjRqL2pjbC1vdmVyLXNsZjRqLzEuNy4zMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMTI4NDMKK21hdmVuL21hdmVuY2VudHJhbC9vcmcub3Blbmpkay5qbWgvam1oLWNvcmUvMS4zMiwgR1BMLTIuMC1vbmx5IHdpdGggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAsIGFwcHJvdmVkLCAjOTU5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1nZW5lcmF0b3ItYW5ucHJvY2Vzcy8xLjMyLCBHUEwtMi4wLW9ubHkgd2l0aCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMCwgYXBwcm92ZWQsICM5NjIKK21hdmVuL21hdmVuY2VudHJhbC9vcmcub3NnaS9vcmcub3NnaS5jb3JlLzYuMC4wLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgIzE3OTQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuc2xmNGovamNsLW92ZXItc2xmNGovMS43LjMyLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1ExMjg0MwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5zbGY0ai9zbGY0ai1hcGkvMS43LjMwLCBNSVQsIGFwcHJvdmVkLCBDUTEzMzY4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnNsZjRqL3NsZjRqLWxvZzRqMTIvMS43LjMwLCBNSVQsIGFwcHJvdmVkLCBDUTc2NjUKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuc2xmNGovc2xmNGotc2ltcGxlLzEuNy4zMCwgTUlULCBhcHByb3ZlZCwgQ1E3OTUyCiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnR1a2FhbmkveHovMS45LCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTIzNDk4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1vcHRpb25zLm1kIGIvRG9jdW1lbnRhdGlvbi9jb25maWctb3B0aW9ucy5tZAppbmRleCA3MjIxY2NlLi44MTU2NzdjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1vcHRpb25zLm1kCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLW9wdGlvbnMubWQKQEAgLTQ2LDcgKzQ2LDggQEAKIHwgYGNvcmUuc3RyZWFtRmlsZVRocmVzaG9sZGAgfCBgNTAgTWlCYCB8ICYjeDIwREU7IHwgVGhlIHNpemUgdGhyZXNob2xkIGJleW9uZCB3aGljaCBvYmplY3RzIG11c3QgYmUgc3RyZWFtZWQuIHwKIHwgYGNvcmUuc3VwcG9ydHNBdG9taWNGaWxlQ3JlYXRpb25gIHwgYHRydWVgIHwgJiN4MjBERTsgfCBXaGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIGF0b21pYyBmaWxlIGNyZWF0aW9uLiB8CiB8IGBjb3JlLnN5bWxpbmtzYCB8IEF1dG8gZGV0ZWN0IGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgc3ltbGlua3N8ICYjeDI3MDU7IHwgSWYgZmFsc2UsIHN5bWJvbGljIGxpbmtzIGFyZSBjaGVja2VkIG91dCBhcyBzbWFsbCBwbGFpbiBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIGxpbmsgdGV4dC4gfAotfCBgY29yZS50cnVzdEZvbGRlclN0YXRgIHwgYHRydWVgIHwgJiN4MjBERTsgfCBXaGV0aGVyIHRvIHRydXN0IHRoZSBwYWNrIGZvbGRlcidzIG1vZGlmaWNhdGlvbiB0aW1lLiBJZiBgZmFsc2VgIEpHaXQgd2lsbCBhbHdheXMgc2NhbiB0aGUgYC5naXQvb2JqZWN0cy9wYWNrYCBmb2xkZXIgdG8gY2hlY2sgZm9yIG5ldyBwYWNrIGZpbGVzLiBUaGlzIGNhbiBoZWxwIHRvIHdvcmthcm91bmQgY2FjaGluZyBpc3N1ZXMgb24gTkZTLCBidXQgcmVkdWNlcyBwZXJmb3JtYW5jZS4gSWYgc2V0IHRvIGB0cnVlYCBpdCB1c2VzIHRoZSBgbGFzdG1vZGlmaWVkYCBhdHRyaWJ1dGUgb2YgdGhlIGZvbGRlciBhbmQgYXNzdW1lcyB0aGF0IG5vIG5ldyBwYWNrIGZpbGVzIGNhbiBiZSBpbiB0aGlzIGZvbGRlciBpZiBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgaGFzIG5vdCBjaGFuZ2VkLiB8Cit8IGBjb3JlLnRydXN0Rm9sZGVyU3RhdGAgfCBgdHJ1ZWAgfCAmI3gyMERFOyB8IFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHBhY2sgZm9sZGVyJ3MsIHBhY2tlZC1yZWZzIGZpbGUncyBhbmQgbG9vc2Utb2JqZWN0cyBmb2xkZXIncyBmaWxlIGF0dHJpYnV0ZXMgKEphdmEgZXF1aXZhbGVudCBvZiBzdGF0IGNvbW1hbmQgb24gKm5peCkuIFdoZW4gbG9va2luZyBmb3IgcGFjayBmaWxlcywgaWYgYGZhbHNlYCBKR2l0IHdpbGwgYWx3YXlzIHNjYW4gdGhlIGAuZ2l0L29iamVjdHMvcGFja2AgZm9sZGVyIGFuZCBpZiBzZXQgdG8gYHRydWVgIGl0IGFzc3VtZXMgdGhhdCBwYWNrIGZpbGVzIGFyZSB1bmNoYW5nZWQgaWYgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFjayBmb2xkZXIgYXJlIHVuY2hhbmdlZC4gV2hlbiBnZXR0aW5nIHRoZSBsaXN0IG9mIHBhY2tlZCByZWZzLCBpZiBgZmFsc2VgIEpHaXQgd2lsbCBhbHdheXMgcmVhZCB0aGUgcGFja2VkLXJlZnMgZmlsZSBhbmQgaWYgc2V0IHRvIGB0cnVlYCBpdCB1c2VzIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIHBhY2tlZC1yZWZzIGZpbGUgYW5kIHdpbGwgb25seSByZWFkIGl0IGlmIGEgZmlsZSBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQuIFdoZW4gbG9va2luZyBmb3IgbG9vc2Ugb2JqZWN0cywgaWYgYGZhbHNlYCBhbmQgaWYgYSBsb29zZSBvYmplY3QgaXMgbm90IGZvdW5kLCBKR2l0IHdpbGwgb3BlbiBhbmQgY2xvc2UgYSBzdHJlYW0gdG8gYC5naXQvb2JqZWN0c2AgZm9sZGVyICh3aGljaCBjYW4gcmVmcmVzaCBpdHMgZGlyZWN0b3J5IGxpc3RpbmcsIGF0IGxlYXN0IG9uIHNvbWUgTkZTIGNsaWVudHMpIGFuZCByZXRyeSBsb29raW5nIGZvciB0aGF0IGxvb3NlIG9iamVjdC4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGNhbiBoZWxwIHRvIHdvcmthcm91bmQgY2FjaGluZyBpc3N1ZXMgb24gTkZTLCBidXQgcmVkdWNlcyBwZXJmb3JtYW5jZS4gfAorfCBgY29yZS50cnVzdFBhY2tlZFJlZnNTdGF0YCB8IGB1bnNldGAgfCAmI3gyMERFOyB8IFdoZXRoZXIgdG8gdHJ1c3QgdGhlIGZpbGUgYXR0cmlidXRlcyAoSmF2YSBlcXVpdmFsZW50IG9mIHN0YXQgY29tbWFuZCBvbiAqbml4KSBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZS4gSWYgYG5ldmVyYCBKR2l0IHdpbGwgaWdub3JlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIHBhY2tlZC1yZWZzIGZpbGUgYW5kIGFsd2F5cyByZWFkIGl0LiBJZiBgYWx3YXlzYCBKR2l0IHdpbGwgdHJ1c3QgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZSBhbmQgd2lsbCBvbmx5IHJlYWQgaXQgaWYgYSBmaWxlIGF0dHJpYnV0ZSBoYXMgY2hhbmdlZC4gYGFmdGVyX29wZW5gIGJlaGF2ZXMgdGhlIHNhbWUgYXMgYGFsd2F5c2AsIGV4Y2VwdCB0aGF0IHRoZSBwYWNrZWQtcmVmcyBmaWxlIGlzIG9wZW5lZCBhbmQgY2xvc2VkIGJlZm9yZSBpdHMgZmlsZSBhdHRyaWJ1dGVzIGFyZSBjb25zaWRlcmVkLiBBbiBvcGVuL2Nsb3NlIG9mIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGlzIGtub3duIHRvIHJlZnJlc2ggaXRzIGZpbGUgYXR0cmlidXRlcywgYXQgbGVhc3Qgb24gc29tZSBORlMgY2xpZW50cy4gSWYgYHVuc2V0YCwgSkdpdCB3aWxsIHVzZSB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluIGB0cnVzdEZvbGRlclN0YXRgLiB8CiB8IGBjb3JlLndvcmt0cmVlYCB8IFJvb3QgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUgaWYgaXQgaXMgbm90IHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBgLmdpdGAgZGlyZWN0b3J5IHwgJiN4MjcwNTsgfCBUaGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLiB8CiAKICMjIF9fZ2NfXyBvcHRpb25zCmRpZmYgLS1naXQgYS9XT1JLU1BBQ0UgYi9XT1JLU1BBQ0UKaW5kZXggNTFhODE1ZS4uMDQwNjE3ZSAxMDA2NDQKLS0tIGEvV09SS1NQQUNFCisrKyBiL1dPUktTUEFDRQpAQCAtMSwyMyArMSw2IEBACiB3b3Jrc3BhY2UobmFtZSA9ICJqZ2l0IikKIAogbG9hZCgiQGJhemVsX3Rvb2xzLy90b29scy9idWlsZF9kZWZzL3JlcG86aHR0cC5iemwiLCAiaHR0cF9hcmNoaXZlIikKLQotaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAiYmF6ZWxfc2t5bGliIiwKLSAgICBzaGEyNTYgPSAiMmVhOGE1ZWQyYjQ0OGJhZjRhNjg1NWQzY2UwNDljNGM0NTJhNjQ3MGIxZWZkMTUwNGZkYjdjMWMxMzRkMjIwYSIsCi0gICAgc3RyaXBfcHJlZml4ID0gImJhemVsLXNreWxpYi0wLjguMCIsCi0gICAgdXJscyA9IFsiaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvYmF6ZWwtc2t5bGliL2FyY2hpdmUvMC44LjAudGFyLmd6Il0sCi0pCi0KLSMgQ2hlY2sgQmF6ZWwgdmVyc2lvbiB3aGVuIGludm9rZWQgYnkgQmF6ZWwgZGlyZWN0bHkKLWxvYWQoIi8vdG9vbHM6YmF6ZWxpc2tfdmVyc2lvbi5iemwiLCAiYmF6ZWxpc2tfdmVyc2lvbiIpCi0KLWJhemVsaXNrX3ZlcnNpb24obmFtZSA9ICJiYXplbGlza192ZXJzaW9uIikKLQotbG9hZCgiQGJhemVsaXNrX3ZlcnNpb24vLzpjaGVjay5iemwiLCAiY2hlY2tfYmF6ZWxfdmVyc2lvbiIpCi0KLWNoZWNrX2JhemVsX3ZlcnNpb24oKQotCiBsb2FkKCIvL3Rvb2xzOmJhemxldHMuYnpsIiwgImxvYWRfYmF6bGV0cyIpCiAKIGxvYWRfYmF6bGV0cyhjb21taXQgPSAiZjMwYTk5MmRhOWZjODU1ZGNlODE5ODc1YWZiNTlmOWRkNmY4NjBjZCIpCkBAIC0yOCwzMiArMTEsMTggQEAKICkKIAogaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAib3BlbmpkazE1X2xpbnV4X2FyY2hpdmUiLAotICAgIGJ1aWxkX2ZpbGVfY29udGVudCA9ICIiIgotamF2YV9ydW50aW1lKG5hbWUgPSAncnVudGltZScsIHNyY3MgPSAgZ2xvYihbJyoqJ10pLCB2aXNpYmlsaXR5ID0gWycvL3Zpc2liaWxpdHk6cHVibGljJ10pCi1leHBvcnRzX2ZpbGVzKFsiV09SS1NQQUNFIl0sIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSkKLSIiIiwKLSAgICBzaGEyNTYgPSAiMGEzOGYxMTM4YzE1YTRmMjQzYjc1ZWI4MmY4ZWY0MDg1NWFmY2M0MDJlM2MyYTZkZTk3Y2U4MjM1MDExYjFhZCIsCi0gICAgc3RyaXBfcHJlZml4ID0gInp1bHUxNS4yNy4xNy1jYS1qZGsxNS4wLjAtbGludXhfeDY0IiwKKyAgICBuYW1lID0gInJiZV9qZGsxMSIsCisgICAgc2hhMjU2ID0gIjc2Njc5NmRlNzE5MTYxMThlNTI4YjlmNDMzNGMyOWM5YzliNGU5MjYyMjdiZjMyNjRkZWU1NTVlNmE0MzA2YzgiLAorICAgIHN0cmlwX3ByZWZpeCA9ICJyYmVfYXV0b2NvbmZpZy0yLjAuMCIsCiAgICAgdXJscyA9IFsKLSAgICAgICAgImh0dHBzOi8vbWlycm9yLmJhemVsLmJ1aWxkL2Nkbi5henVsLmNvbS96dWx1L2Jpbi96dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLWxpbnV4X3g2NC50YXIuZ3oiLAotICAgICAgICAiaHR0cHM6Ly9jZG4uYXp1bC5jb20venVsdS9iaW4venVsdTE1LjI3LjE3LWNhLWpkazE1LjAuMC1saW51eF94NjQudGFyLmd6IiwKKyAgICAgICAgImh0dHBzOi8vZ2Vycml0LWJhemVsLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vcmJlX2F1dG9jb25maWcvdjIuMC4wLnRhci5neiIsCisgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZGF2aWRvL3JiZV9hdXRvY29uZmlnL2FyY2hpdmUvdjIuMC4wLnRhci5neiIsCiAgICAgXSwKICkKIAotaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAib3BlbmpkazE1X2Rhcndpbl9hcmNoaXZlIiwKLSAgICBidWlsZF9maWxlX2NvbnRlbnQgPSAiIiIKLWphdmFfcnVudGltZShuYW1lID0gJ3J1bnRpbWUnLCBzcmNzID0gIGdsb2IoWycqKiddKSwgdmlzaWJpbGl0eSA9IFsnLy92aXNpYmlsaXR5OnB1YmxpYyddKQotZXhwb3J0c19maWxlcyhbIldPUktTUEFDRSJdLCB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0pCi0iIiIsCi0gICAgc2hhMjU2ID0gImY4MGIyZTA1MTJkOWQ4YTkyYmUyNDQ5NzMzNGM5NzRiZmVjYzhjODk4ZmMyMTVjZTBlNzY1OTRmMDA0Mzc0ODIiLAotICAgIHN0cmlwX3ByZWZpeCA9ICJ6dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLW1hY29zeF94NjQiLAotICAgIHVybHMgPSBbCi0gICAgICAgICJodHRwczovL21pcnJvci5iYXplbC5idWlsZC9jZG4uYXp1bC5jb20venVsdS9iaW4venVsdTE1LjI3LjE3LWNhLWpkazE1LjAuMC1tYWNvc3hfeDY0LnRhci5neiIsCi0gICAgICAgICJodHRwczovL2Nkbi5henVsLmNvbS96dWx1L2Jpbi96dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLW1hY29zeF94NjQudGFyLmd6IiwKLSAgICBdLAotKQorcmVnaXN0ZXJfdG9vbGNoYWlucygiLy90b29sczplcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW5famF2YTExX2RlZmluaXRpb24iKQorCityZWdpc3Rlcl90b29sY2hhaW5zKCIvL3Rvb2xzOmVycm9yX3Byb25lX3dhcm5pbmdzX3Rvb2xjaGFpbl9qYXZhMTdfZGVmaW5pdGlvbiIpCiAKIEpNSF9WRVJTID0gIjEuMzIiCiAKQEAgLTEyMywxNCArOTIsMTQgQEAKIAogbWF2ZW5famFyKAogICAgIG5hbWUgPSAic3NoZC1vc2dpIiwKLSAgICBhcnRpZmFjdCA9ICJvcmcuYXBhY2hlLnNzaGQ6c3NoZC1vc2dpOjIuNy4wIiwKLSAgICBzaGExID0gImExMDFhYWQwZjc5YWQ0MjQ0OTgwOThmN2U5MWMzOWQzZDkyMTc3YzEiLAorICAgIGFydGlmYWN0ID0gIm9yZy5hcGFjaGUuc3NoZDpzc2hkLW9zZ2k6Mi44LjAiLAorICAgIHNoYTEgPSAiYjJhNTliNzNjMDQ1ZjQwZDU3MjJiOTE2MGQ0ZjkwOWE2NDZkODZjOSIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gInNzaGQtc2Z0cCIsCi0gICAgYXJ0aWZhY3QgPSAib3JnLmFwYWNoZS5zc2hkOnNzaGQtc2Z0cDoyLjcuMCIsCi0gICAgc2hhMSA9ICIwYzllZmY3MTQ1ZTIwYjMzOGMxZGQ2YWNhMzZiYTkzZWQ3YzAxNDdjIiwKKyAgICBhcnRpZmFjdCA9ICJvcmcuYXBhY2hlLnNzaGQ6c3NoZC1zZnRwOjIuOC4wIiwKKyAgICBzaGExID0gImQzY2Q5YmM4ZDMzNWIzZWQxYTg2ZDI5NjVkZWI0ZDIwMmRlMjc0NDIiLAogKQogCiBtYXZlbl9qYXIoCkBAIC0yMzksOCArMjA4LDggQEAKIAogbWF2ZW5famFyKAogICAgIG5hbWUgPSAiZ3NvbiIsCi0gICAgYXJ0aWZhY3QgPSAiY29tLmdvb2dsZS5jb2RlLmdzb246Z3NvbjoyLjguOCIsCi0gICAgc2hhMSA9ICI0MzFmYzNjYmMwZmY4MWFiZGJmZGUwNzAwNjI3NDEwODljM2JhODc0IiwKKyAgICBhcnRpZmFjdCA9ICJjb20uZ29vZ2xlLmNvZGUuZ3Nvbjpnc29uOjIuOC45IiwKKyAgICBzaGExID0gIjhhNDMyYzFkNjgyNTc4MWUyMWEwMmRiMmUyYzMzYzVmZGUyODMzYjkiLAogKQogCiBKRVRUWV9WRVIgPSAiMTAuMC42IgpAQCAtMjk0LDMyICsyNjMsMzIgQEAKICAgICBzcmNfc2hhMSA9ICJmMzVmNTUyNWE1ZDMwZGMxMjM3Yjg1NDU3ZDc1OGQ1NzhlM2NlOGQwIiwKICkKIAotQk9VTkNZQ0FTVExFX1ZFUiA9ICIxLjY5IgorQk9VTkNZQ0FTVExFX1ZFUiA9ICIxLjcwIgogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJiY3BnIiwKICAgICBhcnRpZmFjdCA9ICJvcmcuYm91bmN5Y2FzdGxlOmJjcGctamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gImQ5OWEwOGMzZjY1MWIyNmU4ZWI2NjhlOTQxYjBiYmQyYzA5ZWNlMDgiLAotICAgIHNyY19zaGExID0gImRlMWZjMjYxYjQ0YThlYjYwNTgzNDEzYTMxZmZjOThjZTNkY2UzOGIiLAorICAgIHNoYTEgPSAiMDYyZjcyZWMwNmYzMWE2YzMxYTNmMzM1NWZjZTAzODRiMjExMjZkNyIsCisgICAgc3JjX3NoYTEgPSAiOWRlZTczYWQ5MjY3NTJlZTNiNDIxYTdkYzQ1MzEyODcxNjZjY2YzNiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjcHJvdiIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3Byb3YtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gIjkxZTE2MjgyNTFjZjNjYTkwMDkzY2U5ZDBmZTY3ZTViN2RhYjM4NTAiLAotICAgIHNyY19zaGExID0gIjY3ZGM2NDc2ODQ1ZjZiMjljYjUyMGI1ZGY2MWRiNjVhZTU2NzE4ZTQiLAorICAgIHNoYTEgPSAiNDYzNmEwZDAxZjc0YWNhZjI4MDgyZmI2MmIzMTdmMTA4MDExODM3MSIsCisgICAgc3JjX3NoYTEgPSAiNjI0NWUxNWRkNDdlNWZjMzNjZmYyNzVkZjYxNjYyZTBhOGU1OTU4ZiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjdXRpbCIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3V0aWwtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gImMzZWRmOTNkMzQ2ZTk3ZjY0ZjA0MWU0NDhlNzQ1NWMzOWM3ZWZmNjQiLAotICAgIHNyY19zaGExID0gImRlZWIzZmJiZjM3M2UwNWUyYTIwOTQxZjlhOGNlOTBlOWFlYWIzZDIiLAorICAgIHNoYTEgPSAiNTQyODBlNzE5NWE3NDMwZDc5MTFkZWQ5M2ZjMDFlMDczMDBiOTUyNiIsCisgICAgc3JjX3NoYTEgPSAiNGFmNGE2YzkyYjhlYTA3ODg1YjI3ZDg1MzZiODFiODU1NDk3ZjRlYiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjcGtpeCIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3BraXgtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gIjQ1YzM2ZmI3MmZhZmIwYjY4OGM2YWY3OTVlNmNjODAzZjZmNzllZTUiLAotICAgIHNyY19zaGExID0gIjhiYzUyMTQ0MDE0NTliZDkxZWVhODE2YjUxNjA3OWRhMzgzNzRlOTAiLAorICAgIHNoYTEgPSAiZjgxZTVhZjQ5NTcxYTlkNWExMDlhODhmMjM5YTczY2U4NzA1NTQxNyIsCisgICAgc3JjX3NoYTEgPSAiNDJmOWRlNTNhOTFiMjBiYzA2ZTg4NDgyYzU3ZmQ5N2U1YTg0MjUwZCIsCiApCmRpZmYgLS1naXQgYS9saWIvQlVJTEQgYi9saWIvQlVJTEQKaW5kZXggOTQ0MjdmNi4uNmJlOWU1NyAxMDA2NDQKLS0tIGEvbGliL0JVSUxECisrKyBiL2xpYi9CVUlMRApAQCAtOTcsNyArOTcsNyBAQAogamF2YV9saWJyYXJ5KAogICAgIG5hbWUgPSAiam5hIiwKICAgICB2aXNpYmlsaXR5ID0gWwotICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50Ol9fcGtnX18iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ6X19wa2dfXyIsCiAgICAgXSwKICAgICBleHBvcnRzID0gWyJAam5hLy9qYXIiXSwKICkKQEAgLTEwNSw3ICsxMDUsNyBAQAogamF2YV9saWJyYXJ5KAogICAgIG5hbWUgPSAiam5hLXBsYXRmb3JtIiwKICAgICB2aXNpYmlsaXR5ID0gWwotICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50Ol9fcGtnX18iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ6X19wa2dfXyIsCiAgICAgXSwKICAgICBleHBvcnRzID0gWyJAam5hLXBsYXRmb3JtLy9qYXIiXSwKICkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDk0MzM2NTguLjA5OTc1NzAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNSwxMyArNSwxMyBAQAogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0CiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnRvb2xzLmFudCwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sCmluZGV4IDZhZDY0MTUuLmJhNDczZWYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAxMGJmYmQyLi42MDAzYTMxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxMyArMywxMyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnRvb2xzLmFudCwKLSAgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIKKyAgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFudDt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW50O3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLnRvb2xzLmFudCwKICAgIG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGMzZWJmYjMuLmQwZGM1YzggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYW50O3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hbnQ7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sCmluZGV4IDQ0NDhmMmUuLmE3ZjI1OGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvcG9tLnhtbApAQCAtMTUsNyArMTUsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDYyZmU1YTUuLjNmYzhkZjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0xMywxNyArMTMsMTcgQEAKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuYnppcDI7dmVyc2lvbj0iWzEuNCwyLjApIiwKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuZ3ppcDt2ZXJzaW9uPSJbMS40LDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy54ejt2ZXJzaW9uPSJbMS40LDIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcub3NnaS5mcmFtZXdvcms7dmVyc2lvbj0iWzEuMy4wLDIuMC4wKSIKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUuRm9ybWF0QWN0aXZhdG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMsCiAgICBvcmcub3NnaS5mcmFtZXdvcmsiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5pbnRlcm5hbDt2ZXJzaW9uPSI2LjAuMSI7eC1pbnRlcm5hbDo9dHJ1ZQorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5pbnRlcm5hbDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggZGVhYjJmYS4uOGM3ZmQwNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAppbmRleCA0NWYxMWRhLi4xMmYzZTY4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYmVuY2htYXJrcy9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKaW5kZXggNTVjODBjNi4uYWMxZDZiZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKQEAgLTE0LDcgKzE0LDcgQEAKICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+Ci0gIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzPC9hcnRpZmFjdElkPgogICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwKaW5kZXggNjNlYWQyNy4uYWJjMzdlYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5jb3ZlcmFnZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuY292ZXJhZ2UvcG9tLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKQEAgLTI3LDg4ICsyNyw4OCBAQAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmFudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudWk8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KIAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvQlVJTEQKaW5kZXggMzViMTI1Zi4uOWU1ODEzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L0JVSUxECkBAIC0xMCw4ICsxMCw4IEBACiBqdW5pdF90ZXN0cygKICAgICBuYW1lID0gImJjIiwKICAgICBzcmNzID0gZ2xvYihbInRzdC8qKi8qLmphdmEiXSksCi0gICAgcmVzb3VyY2VfamFycyA9IFsiOnRzdF9yc3JjIl0sCiAgICAgdGFncyA9IFsiYmMiXSwKKyAgICBydW50aW1lX2RlcHMgPSBbIjp0c3RfcnNyYyJdLAogICAgIGRlcHMgPSBbCiAgICAgICAgICIvL2xpYjpiY3BnIiwKICAgICAgICAgIi8vbGliOmJjcHJvdiIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBkNzAzNDMyLi5iYjliMzkzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTEyLDkgKzEyLDkgQEAKICBvcmcuYm91bmN5Y2FzdGxlLm9wZW5wZ3Aub3BlcmF0b3I7dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUub3BlbnBncC5vcGVyYXRvci5qY2FqY2U7dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUudXRpbC5lbmNvZGVyczt2ZXJzaW9uPSJbMS42NS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWwua2V5czt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbC5rZXlzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L3BvbS54bWwKaW5kZXggYWQ5NTViMC4uOTU2OGM2OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3Q8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDc0ZTMzMDUuLjUzNDU2OGQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDEwICszLDEwIEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYztzaW5nbGV0b246PXRydWUKLUZyYWdtZW50LUhvc3Q6IG9yZy5lY2xpcHNlLmpnaXQ7YnVuZGxlLXZlcnNpb249Ils2LjAuMSw2LjEuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNi4xLjEsNi4yLjApIgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQogSW1wb3J0LVBhY2thZ2U6IG9yZy5ib3VuY3ljYXN0bGUuYXNuMTt2ZXJzaW9uPSJbMS42OS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS5hc24xLmNyeXB0bGliO3ZlcnNpb249IlsxLjY5LjAsMi4wLjApIiwKQEAgLTI5LDkgKzI5LDkgQEAKICBvcmcuYm91bmN5Y2FzdGxlLnV0aWw7dmVyc2lvbj0iWzEuNjkuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUudXRpbC5lbmNvZGVyczt2ZXJzaW9uPSJbMS42OS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS51dGlsLmlvO3ZlcnNpb249IlsxLjY5LjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuc2xmNGo7dmVyc2lvbj0iWzEuNy4wLDIuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYzt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsLmtleXM7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbC5rZXlzO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGRlNDk2MmIuLjIwZTJkMDEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9wb20ueG1sCmluZGV4IDRiZjgyYzYuLjEzOGY0ZTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzUxYTg3ZS4uYWZjYWE3OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCkBAIC0yNSwxMSArMjUsMTEgQEAKICBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jb25uO3ZlcnNpb249Ils0LjQuMCw1LjAuMCkiLAogIG9yZy5hcGFjaGUuaHR0cC5wYXJhbXM7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwLnNzbDt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLmh0dHAuY2xpZW50LAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cCwKICAgIG9yZy5hcGFjaGUuaHR0cC5lbnRpdHksCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDlkNGY1ZjIuLjdiOGUxNDkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbAppbmRleCA2ZTVmMjYwLi5iZDM1NTg5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9wb20ueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMyYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGNvbXBvbmVudCBpZD0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciIgdmVyc2lvbj0iMiI+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5VcGxvYWRQYWNrRXJyb3JIYW5kbGVyIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMTIxMDA1NjcwNyI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IjYuMS4xIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InN0YXR1c0NvZGVGb3JUaHJvd2FibGUoVGhyb3dhYmxlKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKzwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNTEwYzQzOS4uNGJmNjZhMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDEzICszLDEzIEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249IjYuMC4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLmdsdWU7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LGphdmF4LnNlcnZsZXQuaHR0cCIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCkBAIC0xOCwxNCArMTgsMTQgQEAKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IlsyLjUuMCw1LjAuMCkiLAogIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMi41LjAsNS4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNzQ1M2NiOC4uMmI0NzA1NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sCmluZGV4IGIwMWM3OTEuLjZhNzg4ZTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3BvbS54bWwKQEAgLTE5LDcgKzE5LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9HaXRTbWFydEh0dHBUb29scy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9HaXRTbWFydEh0dHBUb29scy5qYXZhCmluZGV4IDAxMmY5YTMuLmYxMTU1ZGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvaHR0cC9zZXJ2ZXIvR2l0U21hcnRIdHRwVG9vbHMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL0dpdFNtYXJ0SHR0cFRvb2xzLmphdmEKQEAgLTE1OCwxMSArMTU4LDExIEBAIHB1YmxpYyBzdGF0aWMgdm9pZCBzZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJfQogCiAJCWlmIChpc0luZm9SZWZzKHJlcSkpIHsKLQkJCXNlbmRJbmZvUmVmc0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0KTsKKwkJCXNlbmRJbmZvUmVmc0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIGlmIChpc1VwbG9hZFBhY2socmVxKSkgewotCQkJc2VuZFVwbG9hZFBhY2tFcnJvcihyZXEsIHJlcywgdGV4dEZvckdpdCk7CisJCQlzZW5kVXBsb2FkUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIGlmIChpc1JlY2VpdmVQYWNrKHJlcSkpIHsKLQkJCXNlbmRSZWNlaXZlUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0KTsKKwkJCXNlbmRSZWNlaXZlUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChodHRwU3RhdHVzIDwgNDAwKQogCQkJCVNlcnZsZXRVdGlscy5jb25zdW1lUmVxdWVzdEJvZHkocmVxKTsKQEAgLTE3MSwyOSArMTcxLDMyIEBAIHB1YmxpYyBzdGF0aWMgdm9pZCBzZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyB2b2lkIHNlbmRJbmZvUmVmc0Vycm9yKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCi0JCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIHRleHRGb3JHaXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIHRleHRGb3JHaXQsIGludCBodHRwU3RhdHVzKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZiA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oMTI4KTsKIAkJUGFja2V0TGluZU91dCBwY2sgPSBuZXcgUGFja2V0TGluZU91dChidWYpOwogCQlTdHJpbmcgc3ZjID0gcmVxLmdldFBhcmFtZXRlcigic2VydmljZSIpOwogCQlwY2sud3JpdGVTdHJpbmcoIiMgc2VydmljZT0iICsgc3ZjICsgIlxuIik7CiAJCXBjay5lbmQoKTsKIAkJcGNrLndyaXRlU3RyaW5nKCJFUlIgIiArIHRleHRGb3JHaXQpOwotCQlzZW5kKHJlcSwgcmVzLCBpbmZvUmVmc1Jlc3VsdFR5cGUoc3ZjKSwgYnVmLnRvQnl0ZUFycmF5KCkpOworCQlzZW5kKHJlcSwgcmVzLCBpbmZvUmVmc1Jlc3VsdFR5cGUoc3ZjKSwgYnVmLnRvQnl0ZUFycmF5KCksIGh0dHBTdGF0dXMpOwogCX0KIAogCXByaXZhdGUgc3RhdGljIHZvaWQgc2VuZFVwbG9hZFBhY2tFcnJvcihIdHRwU2VydmxldFJlcXVlc3QgcmVxLAotCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0LCBpbnQgaHR0cFN0YXR1cykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCS8vIERvIG5vdCB1c2Ugc2lkZWJhbmQuIFNpZGViYW5kIGlzIGFjY2VwdGFibGUgb25seSB3aGlsZSBwYWNrZmlsZSBpcwogCQkvLyBiZWluZyBzZW50LiBPdGhlciBwbGFjZXMsIGxpa2UgYWNrbm93bGVkZ2VtZW50IHNlY3Rpb24sIGRvIG5vdAogCQkvLyBzdXBwb3J0IHNpZGViYW5kLiBVc2UgYW4gZXJyb3IgcGFja2V0LgogCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgxMjgpOwogCQlQYWNrZXRMaW5lT3V0IHBja091dCA9IG5ldyBQYWNrZXRMaW5lT3V0KGJ1Zik7CiAJCXdyaXRlUGFja2V0KHBja091dCwgdGV4dEZvckdpdCk7Ci0JCXNlbmQocmVxLCByZXMsIFVQTE9BRF9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSk7CisJCXNlbmQocmVxLCByZXMsIFVQTE9BRF9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSwgaHR0cFN0YXR1cyk7CiAJfQogCiAJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZW5kUmVjZWl2ZVBhY2tFcnJvcihIdHRwU2VydmxldFJlcXVlc3QgcmVxLAotCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0LCBpbnQgaHR0cFN0YXR1cykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWYgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDEyOCk7CiAJCVBhY2tldExpbmVPdXQgcGNrT3V0ID0gbmV3IFBhY2tldExpbmVPdXQoYnVmKTsKIApAQCAtMjEyLDcgKzIxNSw3IEBAIHByaXZhdGUgc3RhdGljIHZvaWQgc2VuZFJlY2VpdmVQYWNrRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJCXdyaXRlU2lkZUJhbmQoYnVmLCB0ZXh0Rm9yR2l0KTsKIAkJZWxzZQogCQkJd3JpdGVQYWNrZXQocGNrT3V0LCB0ZXh0Rm9yR2l0KTsKLQkJc2VuZChyZXEsIHJlcywgUkVDRUlWRV9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSk7CisJCXNlbmQocmVxLCByZXMsIFJFQ0VJVkVfUEFDS19SRVNVTFRfVFlQRSwgYnVmLnRvQnl0ZUFycmF5KCksIGh0dHBTdGF0dXMpOwogCX0KIAogCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSZWNlaXZlUGFja1NpZGVCYW5kKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEpIHsKQEAgLTI0Niw5ICsyNDksOSBAQCBwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlUGFja2V0KFBhY2tldExpbmVPdXQgcGNrT3V0LCBTdHJpbmcgdGV4dEZvckdpdCkKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyB2b2lkIHNlbmQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsCi0JCQlTdHJpbmcgdHlwZSwgYnl0ZVtdIGJ1ZikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCVN0cmluZyB0eXBlLCBieXRlW10gYnVmLCBpbnQgaHR0cFN0YXR1cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJU2VydmxldFV0aWxzLmNvbnN1bWVSZXF1ZXN0Qm9keShyZXEpOwotCQlyZXMuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOworCQlyZXMuc2V0U3RhdHVzKGh0dHBTdGF0dXMpOwogCQlyZXMuc2V0Q29udGVudFR5cGUodHlwZSk7CiAJCXJlcy5zZXRDb250ZW50TGVuZ3RoKGJ1Zi5sZW5ndGgpOwogCQl0cnkgKE91dHB1dFN0cmVhbSBvcyA9IHJlcy5nZXRPdXRwdXRTdHJlYW0oKSkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9VcGxvYWRQYWNrRXJyb3JIYW5kbGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQppbmRleCAwM2JlMDg3Li4yYWFkYmJjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQpAQCAtOSwxMyArOSwxOSBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7CiAKK2ltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfRk9SQklEREVOOworaW1wb3J0IHN0YXRpYyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1I7CitpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX09LOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5QYWNrUHJvdG9jb2xFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuU2VydmljZU1heU5vdENvbnRpbnVlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlVwbG9hZFBhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIuU2VydmljZU5vdEVuYWJsZWRFeGNlcHRpb247CiAKIC8qKgogICogSGFuZGxlIGdpdC11cGxvYWQtcGFjayBlcnJvcnMuCkBAIC0zNSw2ICs0MSwyNCBAQAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFVwbG9hZFBhY2tFcnJvckhhbmRsZXIgewogCS8qKgorCSAqIE1hcHMgYSB0aHJvd24gZ2l0IHJlbGF0ZWQgRXhjZXB0aW9uIHRvIGFuIGFwcHJvcHJpYXRlIEhUVFAgc3RhdHVzIGNvZGUuCisJICoKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiAgICAgICAgICAgIFRoZSB0aHJvd24gRXhjZXB0aW9uLgorCSAqIEByZXR1cm4gdGhlIEhUVFAgc3RhdHVzIGNvZGUgYXMgYW4gaW50CisJICogQHNpbmNlIDYuMS4xCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgc3RhdHVzQ29kZUZvclRocm93YWJsZShUaHJvd2FibGUgZXJyb3IpIHsKKwkJaWYgKGVycm9yIGluc3RhbmNlb2YgU2VydmljZU5vdEVuYWJsZWRFeGNlcHRpb24pIHsKKwkJCXJldHVybiBTQ19GT1JCSURERU47CisJCX0KKwkJaWYgKGVycm9yIGluc3RhbmNlb2YgUGFja1Byb3RvY29sRXhjZXB0aW9uKSB7CisJCQkvLyBJbnRlcm5hbCBnaXQgZXJyb3JzIGFyZSBub3QgZXJyb3JzIGZyb20gYW4gSFRUUCBzdGFuZHBvaW50LgorCQkJcmV0dXJuIFNDX09LOworCQl9CisJCXJldHVybiBTQ19JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisJfQorCS8qKgogCSAqIEBwYXJhbSByZXEKIAkgKiAgICAgICAgICAgIFRoZSBIVFRQIHJlcXVlc3QKIAkgKiBAcGFyYW0gcnNwCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tTZXJ2bGV0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tTZXJ2bGV0LmphdmEKaW5kZXggYzRmODQ1ZS4uYjBhMDdmMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9VcGxvYWRQYWNrU2VydmxldC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvaHR0cC9zZXJ2ZXIvVXBsb2FkUGFja1NlcnZsZXQuamF2YQpAQCAtMTEsNyArMTEsNiBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyOwogCiBpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX0ZPUkJJRERFTjsKLWltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogaW1wb3J0IHN0YXRpYyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQ7CiBpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOU1VQUE9SVEVEX01FRElBX1RZUEU7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuR2l0U21hcnRIdHRwVG9vbHMuVVBMT0FEX1BBQ0s7CkBAIC0yMiw2ICsyMSw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuU2VydmxldFV0aWxzLmNvbnN1bWVSZXF1ZXN0Qm9keTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5TZXJ2bGV0VXRpbHMuZ2V0SW5wdXRTdHJlYW07CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuU2VydmxldFV0aWxzLmdldFJlcG9zaXRvcnk7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuVXBsb2FkUGFja0Vycm9ySGFuZGxlci5zdGF0dXNDb2RlRm9yVGhyb3dhYmxlOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuSERSX1VTRVJfQUdFTlQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMTY5LDYgKzE2OSw3IEBAIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJzcCkKIAogCQlVcGxvYWRQYWNrUnVubmFibGUgciA9ICgpIC0+IHsKIAkJCVVwbG9hZFBhY2sgdXAgPSAoVXBsb2FkUGFjaykgcmVxLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSEFORExFUik7CisJCQkvLyB0byBiZSBleHBsaWNpdGx5IGNsb3NlZCBieSBjYWxsZXIKIAkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCiAJCQlTbWFydE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgU21hcnRPdXRwdXRTdHJlYW0ocmVxLCByc3AsIGZhbHNlKSB7CiAJCQkJQE92ZXJyaWRlCkBAIC0yMTcsOSArMjE4LDEyIEBAIHByaXZhdGUgdm9pZCBkZWZhdWx0VXBsb2FkUGFja0hhbmRsZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJCWxvZyh1cC5nZXRSZXBvc2l0b3J5KCksIGUpOwogCQkJaWYgKCFyc3AuaXNDb21taXR0ZWQoKSkgewogCQkJCXJzcC5yZXNldCgpOwotCQkJCVN0cmluZyBtc2cgPSBlIGluc3RhbmNlb2YgUGFja1Byb3RvY29sRXhjZXB0aW9uID8gZS5nZXRNZXNzYWdlKCkKLQkJCQkJCTogbnVsbDsKLQkJCQlzZW5kRXJyb3IocmVxLCByc3AsIFNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwgbXNnKTsKKwkJCQlTdHJpbmcgbXNnID0gbnVsbDsKKwkJCQlpZiAoZSBpbnN0YW5jZW9mIFBhY2tQcm90b2NvbEV4Y2VwdGlvbgorCQkJCQkJfHwgZSBpbnN0YW5jZW9mIFNlcnZpY2VOb3RFbmFibGVkRXhjZXB0aW9uKSB7CisJCQkJCW1zZyA9IGUuZ2V0TWVzc2FnZSgpOworCQkJCX0KKwkJCQlzZW5kRXJyb3IocmVxLCByc3AsIHN0YXR1c0NvZGVGb3JUaHJvd2FibGUoZSksIG1zZyk7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNhNjUxN2MuLjQxNTBiZGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTI2LDI2ICsyNiwyNiBAQAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwubG9nO3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zZWN1cml0eTt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLmdsdWU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sCmluZGV4IDc2OTRjNDQuLjMzNmY0M2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvcG9tLnhtbApAQCAtMTgsNyArMTgsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0hvb2tNZXNzYWdlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0hvb2tNZXNzYWdlVGVzdC5qYXZhCmluZGV4IGRiOWYyYWUuLjIwZGUyNTYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9Ib29rTWVzc2FnZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSG9va01lc3NhZ2VUZXN0LmphdmEKQEAgLTk3LDYgKzk3LDcgQEAgcHVibGljIFJlY2VpdmVQYWNrIGNyZWF0ZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBSZXBvc2l0b3J5IGRiKQogCQlzZXJ2ZXIuc2V0VXAoKTsKIAogCQlyZW1vdGVSZXBvc2l0b3J5ID0gc3JjLmdldFJlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UocmVtb3RlUmVwb3NpdG9yeSk7CiAJCXJlbW90ZVVSSSA9IHRvVVJJaXNoKGFwcCwgc3JjTmFtZSk7CiAKIAkJU3RvcmVkQ29uZmlnIGNmZyA9IHJlbW90ZVJlcG9zaXRvcnkuZ2V0Q29uZmlnKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSHR0cENsaWVudFRlc3RzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSHR0cENsaWVudFRlc3RzLmphdmEKaW5kZXggZGYwOTNjMS4uMzQzOGM1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0h0dHBDbGllbnRUZXN0cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9IdHRwQ2xpZW50VGVzdHMuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmV0LlVSSTsKIGltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwpAQCAtMzA4LDcgKzMwOSwxMCBAQCBwdWJsaWMgdm9pZCB0ZXN0TGlzdFJlbW90ZV9TbWFydF9VcGxvYWRQYWNrRGlzYWJsZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQlmYWlsKCJjb25uZWN0aW9uIG9wZW5lZCBldmVuIHRob3VnaCBzZXJ2aWNlIGRpc2FibGVkIik7CiAJCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZXJyKSB7CiAJCQkJU3RyaW5nIGV4cCA9IHNtYXJ0QXV0aE5vbmVVUkkgKyAiOiAiCi0JCQkJCQkrIEpHaXRUZXh0LmdldCgpLnNlcnZpY2VOb3RFbmFibGVkTm9OYW1lOworCQkJCQkJKyBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQkJSkdpdFRleHQuZ2V0KCkuc2VydmljZU5vdFBlcm1pdHRlZCwKKwkJCQkJCQkJc21hcnRBdXRoTm9uZVVSSS50b1N0cmluZygpICsgIi8iLAorCQkJCQkJCQkiZ2l0LXVwbG9hZC1wYWNrIik7CiAJCQkJYXNzZXJ0RXF1YWxzKGV4cCwgZXJyLmdldE1lc3NhZ2UoKSk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9NZWFzdXJlUGFja1NpemVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvTWVhc3VyZVBhY2tTaXplVGVzdC5qYXZhCmluZGV4IDlmZmExOWUuLjAwMGVlY2QgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9NZWFzdXJlUGFja1NpemVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L01lYXN1cmVQYWNrU2l6ZVRlc3QuamF2YQpAQCAtOTAsNiArOTAsNyBAQCBwdWJsaWMgUmVjZWl2ZVBhY2sgY3JlYXRlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIFJlcG9zaXRvcnkgZGIpCiAJCXNlcnZlci5zZXRVcCgpOwogCiAJCXJlbW90ZVJlcG9zaXRvcnkgPSBzcmMuZ2V0UmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZW1vdGVSZXBvc2l0b3J5KTsKIAkJcmVtb3RlVVJJID0gdG9VUklpc2goYXBwLCBzcmNOYW1lKTsKIAogCQlTdG9yZWRDb25maWcgY2ZnID0gcmVtb3RlUmVwb3NpdG9yeS5nZXRDb25maWcoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9TbWFydENsaWVudFNtYXJ0U2VydmVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKaW5kZXggODg3ZTk3MC4uYjliMTBiNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIb2xkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlRyYW5zcG9ydENvbmZpZ0NhbGxiYWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlJlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm9SZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5VbnN1cHBvcnRlZENyZWRlbnRpYWxJdGVtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuR2l0U2VydmxldDsKQEAgLTQ5Niw4ICs0OTYsOSBAQCBwdWJsaWMgdm9pZCB0ZXN0TGlzdFJlbW90ZV9CYWROYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24gewogCQkJdHJ5IHsKIAkJCQl0Lm9wZW5GZXRjaCgpOwogCQkJCWZhaWwoImZldGNoIGNvbm5lY3Rpb24gb3BlbmVkIik7Ci0JCQl9IGNhdGNoIChSZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uIG5vdEZvdW5kKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKHVyaSArICI6IEdpdCByZXBvc2l0b3J5IG5vdCBmb3VuZCIsCisJCQl9IGNhdGNoIChOb1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb24gbm90Rm91bmQpIHsKKwkJCQlhc3NlcnRFcXVhbHModXJpICsgIjogIiArIHVyaQorCQkJCQkJKyAiL2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBub3QgZm91bmQ6IE5vdCBGb3VuZCIsCiAJCQkJCQlub3RGb3VuZC5nZXRNZXNzYWdlKCkpOwogCQkJfQogCQl9CkBAIC01MTAsNyArNTExLDcgQEAgcHVibGljIHZvaWQgdGVzdExpc3RSZW1vdGVfQmFkTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgVVJJU3ludGF4RXhjZXB0aW9uIHsKIAkJYXNzZXJ0RXF1YWxzKGpvaW4odXJpLCAiaW5mby9yZWZzIiksIGluZm8uZ2V0UGF0aCgpKTsKIAkJYXNzZXJ0RXF1YWxzKDEsIGluZm8uZ2V0UGFyYW1ldGVycygpLnNpemUoKSk7CiAJCWFzc2VydEVxdWFscygiZ2l0LXVwbG9hZC1wYWNrIiwgaW5mby5nZXRQYXJhbWV0ZXIoInNlcnZpY2UiKSk7Ci0JCWFzc2VydEVxdWFscygyMDAsIGluZm8uZ2V0U3RhdHVzKCkpOworCQlhc3NlcnRFcXVhbHMoNDA0LCBpbmZvLmdldFN0YXR1cygpKTsKIAkJYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1hZHZlcnRpc2VtZW50IiwKIAkJCQlpbmZvLmdldFJlc3BvbnNlSGVhZGVyKEhEUl9DT05URU5UX1RZUEUpKTsKIAl9CkBAIC01MzgsNiArNTM5LDcgQEAgcHVibGljIHZvaWQgdGVzdEZldGNoQnlTSEExVW5yZWFjaGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCkuY29udGFpbnMoCiAJCQkJCSJ3YW50ICIgKyB1bnJlYWNoYWJsZUNvbW1pdC5uYW1lKCkgKyAiIG5vdCB2YWxpZCIpKTsKIAkJfQorCQlhc3NlcnRMYXN0UmVxdWVzdFN0YXR1c0NvZGUoMjAwKTsKIAl9CiAKIAlAVGVzdApAQCAtNTYwLDYgKzU2Miw3IEBAIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZWY+IGdldEFkdmVydGlzZWRSZWZzKFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKIAkJCWFzc2VydFRydWUoCiAJCQkJCWUuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJ3YW50ICIgKyBBLm5hbWUoKSArICIgbm90IHZhbGlkIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgyMDApOwogCX0KIAogCUBUZXN0CkBAIC05MTYsNiArOTE5LDcgQEAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxDbG9uZV9SZWRpcmVjdE9uUG9zdEZvcmJpZGRlbigpIHRocm93cyBFeGNlcHRpb24gewogCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkgewogCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKS5jb250YWlucygiMzAxIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgzMDEpOwogCX0KIAogCUBUZXN0CkBAIC05MzQsNiArOTM4LDcgQEAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxDbG9uZV9SZWRpcmVjdEZvcmJpZGRlbigpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0VHJ1ZSgKIAkJCQkJZS5nZXRNZXNzYWdlKCkuY29udGFpbnMoImh0dHAuZm9sbG93UmVkaXJlY3RzIGlzIGZhbHNlIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgzMDEpOwogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRGZXRjaFJlcXVlc3RzKExpc3Q8QWNjZXNzRXZlbnQ+IHJlcXVlc3RzLCBpbnQgaW5kZXgpIHsKQEAgLTE2MDcsNiArMTYxMiw3IEBAIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkV2FudCgpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0VHJ1ZShlcnIuZ2V0TWVzc2FnZSgpCiAJCQkJCS5jb250YWlucygid2FudCAiICsgaWQubmFtZSgpICsgIiBub3QgdmFsaWQiKSk7CiAJCX0KKwkJYXNzZXJ0TGFzdFJlcXVlc3RTdGF0dXNDb2RlKDIwMCk7CiAJfQogCiAJQFRlc3QKQEAgLTE2NTAsNyArMTY1Niw3IEBAIHB1YmxpYyB2b2lkIHRlc3RGZXRjaF9SZWZzVW5yZWFkYWJsZU9uVXBsb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJZmFpbCgiU3VjY2Vzc2Z1bGx5IHNlcnZlZCByZWYgd2l0aCB2YWx1ZSAiICsgYy5nZXRSZWYobWFzdGVyKSk7CiAJCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZXJyKSB7CiAJCQkJYXNzZXJ0VHJ1ZSgiVW5leHBlY3RlZCBleGNlcHRpb24gbWVzc2FnZSAiICsgZXJyLmdldE1lc3NhZ2UoKSwKLQkJCQkJCWVyci5nZXRNZXNzYWdlKCkuY29udGFpbnMoIkludGVybmFsIHNlcnZlciBlcnJvciIpKTsKKwkJCQkJCWVyci5nZXRNZXNzYWdlKCkuY29udGFpbnMoIlNlcnZlciBFcnJvciIpKTsKIAkJCX0KIAkJfSBmaW5hbGx5IHsKIAkJCW5vUmVmU2VydmVyLnRlYXJEb3duKCk7CkBAIC0xODIxLDYgKzE4MjcsMTEgQEAgcHVibGljIHZvaWQgdGVzdFB1c2hfQ2h1bmtlZEVuY29kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJLmdldFJlc3BvbnNlSGVhZGVyKEhEUl9DT05URU5UX1RZUEUpKTsKIAl9CiAKKwlwcml2YXRlIHZvaWQgYXNzZXJ0TGFzdFJlcXVlc3RTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKSB7CisJCUxpc3Q8QWNjZXNzRXZlbnQ+IHJlcXVlc3RzID0gZ2V0UmVxdWVzdHMoKTsKKwkJYXNzZXJ0RXF1YWxzKHN0YXR1c0NvZGUsIHJlcXVlc3RzLmdldChyZXF1ZXN0cy5zaXplKCkgLSAxKS5nZXRTdGF0dXMoKSk7CisJfQorCiAJcHJpdmF0ZSB2b2lkIGVuYWJsZVJlY2VpdmVQYWNrKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJZmluYWwgU3RvcmVkQ29uZmlnIGNmZyA9IHJlbW90ZVJlcG9zaXRvcnkuZ2V0Q29uZmlnKCk7CiAJCWNmZy5zZXRCb29sZWFuKCJodHRwIiwgbnVsbCwgInJlY2VpdmVwYWNrIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzIxZjgzNS4uZDAzNTA3MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CkBAIC0yMSwxNyArMjEsMTcgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzEwLjAuMCwxMS4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNzbDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuc2xmNGouaGVscGVyczt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSI2LjAuMSI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5qdW5pdCwKICAgIGphdmF4LnNlcnZsZXQuaHR0cCwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDk4ZmRlMDYuLjE5MTQyYzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKaW5kZXggYjY2OTkxZi4uZDg4M2UwMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvaHR0cC9IdHRwVGVzdENhc2UuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCmluZGV4IDNlN2M4NGYuLjg3N2I5MTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuU2VydmxldENvbnRleHRIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlLkZpbGVSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuTG9jYWxEaXNrUmVwb3NpdG9yeVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuVGVzdFJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CkBAIC04MCw3ICs4MSw5IEBAIHByb3RlY3RlZCBBcHBTZXJ2ZXIgY3JlYXRlU2VydmVyKCkgewogCSAqLwogCXByb3RlY3RlZCBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBjcmVhdGVUZXN0UmVwb3NpdG9yeSgpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFRlc3RSZXBvc2l0b3J5PD4oY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSk7CisJCWZpbmFsIEZpbGVSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZXBvc2l0b3J5KTsKKwkJcmV0dXJuIG5ldyBUZXN0UmVwb3NpdG9yeTw+KHJlcG9zaXRvcnkpOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4ZDYyOWVkLi42MDg1OGQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw0NiArMyw0NiBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5zc2hkLmNvbW1vbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZmlsZS52aXJ0dWFsZnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5oZWxwZXJzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaW87dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwubG9nZ2luZzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnRocmVhZHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvcmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmF1dGg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLmdzczt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmF1dGgua2V5Ym9hcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLnBhc3N3b3JkO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuY29tbWFuZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zaGVsbDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLnN1YnN5c3RlbTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zZXJ2ZXI7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuc3NoZC5jb21tb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5czt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZpbGUudmlydHVhbGZzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaGVscGVyczt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmlvO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmxvZ2dpbmc7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC50aHJlYWRzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aC5nc3M7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLmtleWJvYXJkO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aC5wYXNzd29yZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmNvbW1hbmQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuc2hlbGw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zdWJzeXN0ZW07dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHA7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHAuc2VydmVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4wLjEiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4xLjEiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNzEzMmI1Yi4uNDEyNDZiYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaCAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL3BvbS54bWwKaW5kZXggNzZiZGNhMS4uMDdkMDIxOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g8L2FydGlmYWN0SWQ+CkBAIC01NSw2ICs1NSwxNiBAQAogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+c3NoZC1zZnRwPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+JHthcGFjaGUtc3NoZC12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc3NoZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3NoZC1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc3NoZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3NoZC1jb21tb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgPGRlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3YTcyZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxjb21wb25lbnQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQiIHZlcnNpb249IjIiPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdC5Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UiPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2NTg0ODEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LkxvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjdXJyZW50VGVzdCIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjAuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjdXJyZW50VGVzdCIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKzwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMWYwMjFkYS4uN2EzYjIwMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDM1ICszLDM1IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcnM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVycy5tb2RlbDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtNDQsNCArNDQsNCBAQAogICAgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwsCiAgICBvcmcuanVuaXQucnVubmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSI2LjAuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lIgorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSI2LjEuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCAxNTZlNTlhLi4yNTg3NmM3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0IC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249IjYuMS4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwKaW5kZXggZWYyYjk0Ni4uMmMyNjBlMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuanVuaXQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L0xvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UuamF2YQppbmRleCA0OTRkMmYzLi41OTY2MmNlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L0xvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvTG9jYWxEaXNrUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEKQEAgLTQ1LDYgKzQ1LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3lzdGVtUmVhZGVyOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5SdWxlOworaW1wb3J0IG9yZy5qdW5pdC5ydWxlcy5UZXN0TmFtZTsKIAogLyoqCiAgKiBKVW5pdCBUZXN0Q2FzZSB3aXRoIHNwZWNpYWxpemVkIHN1cHBvcnQgZm9yIHRlbXBvcmFyeSBsb2NhbCByZXBvc2l0b3J5LgpAQCAtODQsMTggKzg2LDM1IEBAIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UgewogCXByaXZhdGUgRmlsZSB0bXA7CiAKIAkvKioKKwkgKiBUaGUgY3VycmVudCB0ZXN0IG5hbWUuCisJICoKKwkgKiBAc2luY2UgNi4wLjEKKwkgKi8KKwlAUnVsZQorCXB1YmxpYyBUZXN0TmFtZSBjdXJyZW50VGVzdCA9IG5ldyBUZXN0TmFtZSgpOworCisJcHJpdmF0ZSBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CisJCVN0cmluZyBuYW1lID0gY3VycmVudFRlc3QuZ2V0TWV0aG9kTmFtZSgpOworCQluYW1lID0gbmFtZS5yZXBsYWNlQWxsKCJbXmEtekEtWjAtOV0iLCAiXyIpOworCQluYW1lID0gbmFtZS5yZXBsYWNlQWxsKCJfXysiLCAiXyIpOworCQlpZiAobmFtZS5zdGFydHNXaXRoKCJfIikpIHsKKwkJCW5hbWUgPSBuYW1lLnN1YnN0cmluZygxKTsKKwkJfQorCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKIAkgKiBTZXR1cCB0ZXN0CiAJICoKIAkgKiBAdGhyb3dzIEV4Y2VwdGlvbgogCSAqLwogCUBCZWZvcmUKIAlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0bXAgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJqZ2l0X3Rlc3RfIiwgIl90bXAiKTsKKwkJdG1wID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgiamdpdF8iICsgZ2V0VGVzdE5hbWUoKSArICdfJywgIl90bXAiKTsKIAkJQ2xlYW51cFRocmVhZC5kZWxldGVPblNodXRkb3duKHRtcCk7CiAJCWlmICghdG1wLmRlbGV0ZSgpIHx8ICF0bXAubWtkaXIoKSkgewogCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDYW5ub3QgY3JlYXRlICIgKyB0bXApOwogCQl9Ci0KIAkJbW9ja1N5c3RlbVJlYWRlciA9IG5ldyBNb2NrU3lzdGVtUmVhZGVyKCk7CiAJCVN5c3RlbVJlYWRlci5zZXRJbnN0YW5jZShtb2NrU3lzdGVtUmVhZGVyKTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiMmE4MmMyLi5jYmI4MTM1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0yNiwyNCArMjYsMjQgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzEwLjAuMCwxMS4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnRocmVhZDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9wb20ueG1sCmluZGV4IGVmODc1MWUuLjFiYWI2MjAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9QdXNoVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9QdXNoVGVzdC5qYXZhCmluZGV4IDcwYzA0NjMuLjA2NzA4YjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvUHVzaFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL1B1c2hUZXN0LmphdmEKQEAgLTExLDYgKzExLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CkBAIC0yOSw2ICszMCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlUmVwb3NpdG9yeUJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVmU3BlYzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5VUklpc2g7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5QYXRoRmlsdGVyOwpAQCAtMTI4LDQgKzEzMCwxOCBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJCXNlcnZlci5nZXRSZXF1ZXN0cygpLnRvU3RyaW5nKCkpOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0ZUJyYW5jaCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgYnJhbmNoID0gIm5ldy1icmFuY2giOworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZShicmFuY2gpLmNhbGwoKTsKKworCQlTdHJpbmcgZGVzdFJlZiA9IENvbnN0YW50cy5SX0hFQURTICsgYnJhbmNoOworCQlnaXQucHVzaCgpLnNldFJlZlNwZWNzKG5ldyBSZWZTcGVjKCkuc2V0U291cmNlKGJyYW5jaCkuc2V0RGVzdGluYXRpb24oZGVzdFJlZikpLmNhbGwoKTsKKworCQkvLyBTaG91bGQgbm90IGZhaWwgb24gcHVzaC4KKwkJZ2l0LmJyYW5jaERlbGV0ZSgpLnNldEJyYW5jaE5hbWVzKGJyYW5jaCkuc2V0Rm9yY2UodHJ1ZSkuY2FsbCgpOworCQlnaXQucHVzaCgpLnNldFJlZlNwZWNzKG5ldyBSZWZTcGVjKCkuc2V0U291cmNlKG51bGwpLnNldERlc3RpbmF0aW9uKGRlc3RSZWYpKS5jYWxsKCk7CisKKwkJYXNzZXJ0VHJ1ZShzZXJ2ZXIuZ2V0UmVxdWVzdHMoKS5pc0VtcHR5KCkpOworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzYTQ0NDhiLi5jZDhiZGUzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDE5ICszLDE5IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0iamF2YXguc2VydmxldC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LAogICAgamF2YXguc2VydmxldC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYiIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTI0LDE1ICsyNCwxNSBAQAogIGphdmF4LnNlcnZsZXQuYW5ub3RhdGlvbjt2ZXJzaW9uPSJbMy4xLjAsNS4wLjApIiwKICBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iWzMuMS4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwO3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNTAxMWEyMi4uNWE1YjIzYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbAppbmRleCBjMmQ2NTk2Li5hZTI3MTUzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGI4NzA3OTQuLmUzYzBhZjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywyNCArMywyNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLmhhbWNyZXN0LmNvcmU7dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXJzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjYuMC4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbAppbmRleCBhODhjYTk0Li4xZDc4MmU2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0NvbmZpZ0dpdFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0NvbmZpZ0dpdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGEwNzEyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzQ29uZmlnR2l0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyLCBNYXR0aGlhcyBGcm9tbWUgPG1mcm9tbWVAZHNwYWNlLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZXNldENvbW1hbmQuUmVzZXRUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TdG9yZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5IdHRwQ29ubmVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQ7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdCBpZiB0aGUgbGZzIGNvbmZpZyBpcyB1c2VkIGluIHRoZSBjb3JyZWN0IHdheSBkdXJpbmcgY2hlY2tvdXQuCisgKgorICogVHdvIGxmcy1maWxlcyBhcmUgY3JlYXRlZCwgb25lIHRoYXQgY29tZXMgYmVmb3JlIC5naXRhdHRyaWJ1dGVzIGFuZAorICogLmxmc2NvbmZpZyBpbiBnaXQgb3JkZXIgKCIuYWFhLnR4dCIpIGFuZCBvbmUgdGhhdCBjb21lcyBhZnRlciAoInp6ei50eHQiKS4KKyAqCisgKiBEdXJpbmcgY2hlY2tvdXQvcmVzZXQgaXQgaXMgdGVzdGVkIGlmIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhlIGxmcyBjb25maWcKKyAqIGlzIHVzZWQuCisgKgorICogVE9ETzogVGhlIGN1cnJlbnQgYmVoYXZpb3Igc2VlbXMgYSBsaXR0bGUgYml0IHN0cmFuZ2UvdW5pbnR1aXRpdmUuIFNvbWUgZmlsZXMKKyAqIGFyZSBjaGVja2VkIG91dCBiZWZvcmUgYW5kIHNvbWUgYWZ0ZXIgdGhlIGNvbmZpZyBmaWxlcy4gVGhpcyBsZWFkcyB0byB0aGUKKyAqIGJlaGF2aW9yLCB0aGF0IGR1cmluZyBhIHNpbmdsZSBjb21tYW5kIHRoZSBjb25maWcgY2hhbmdlcy4gU2luY2UgdGhpcyBzZWVtcworICogdG8gYmUgdGhlIHNhbWUgd2F5IGluIG5hdGl2ZSBnaXQsIHRoZSBiZWhhdmlvciBpcyBhY2NlcHRlZCBmb3Igbm93LgorICoKKyAqLworcHVibGljIGNsYXNzIExmc0NvbmZpZ0dpdFRlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNNVURHRV9OQU1FID0gb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkJVSUxUSU5fRklMVEVSX1BSRUZJWAorCQkJKyBDb25zdGFudHMuQVRUUl9GSUxURVJfRFJJVkVSX1BSRUZJWAorCQkJKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9TTVVER0U7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEZTX1NFUlZFUl9VUkkxID0gImh0dHBzOi8vbGZzLnNlcnZlcjEvdGVzdC91cmkiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1NFUlZFUl9VUkwxID0gTEZTX1NFUlZFUl9VUkkxCisJCQkrIFByb3RvY29sLk9CSkVDVFNfTEZTX0VORFBPSU5UOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExGU19TRVJWRVJfVVJJMiA9ICJodHRwczovL2xmcy5zZXJ2ZXIyL3Rlc3QvdXJpIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9TRVJWRVJfVVJMMiA9IExGU19TRVJWRVJfVVJJMgorCQkJKyBQcm90b2NvbC5PQkpFQ1RTX0xGU19FTkRQT0lOVDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRlNfU0VSVkVSX1VSSTMgPSAiaHR0cHM6Ly9sZnMuc2VydmVyMy90ZXN0L3VyaSI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfU0VSVkVSX1VSTDMgPSBMRlNfU0VSVkVSX1VSSTMKKwkJCSsgUHJvdG9jb2wuT0JKRUNUU19MRlNfRU5EUE9JTlQ7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFLRV9MRlNfUE9JTlRFUjEgPSAidmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxXG4iCisJCQkrICJvaWQgc2hhMjU2OjZjZTlmYWI1MmVlOWE2YzRjMDk3ZGVmNGUwNDljNmFjZGViYTQ0Yzk5ZDI2ZTgzYmE4MGFkZWMxNDczYzliMmRcbiIKKwkJCSsgInNpemUgMjUzOTUyXG4iOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZBS0VfTEZTX1BPSU5URVIyID0gInZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MVxuIgorCQkJKyAib2lkIHNoYTI1NjphNGI3MTFjZDk4OTg2M2FlMjAzODc1OGE2MjY3MjEzODM0N2FiYmJhZTQwNzZhN2FkM2E1NDVmZGE3ZDA4ZjgyXG4iCisJCQkrICJzaXplIDY3MDcyXG4iOworCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGNoZWNrb3V0VVJMcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisJc3RhdGljIGNsYXNzIFNtdWRnZUZpbHRlck1vY2sgZXh0ZW5kcyBGaWx0ZXJDb21tYW5kIHsKKwkJcHVibGljIFNtdWRnZUZpbHRlck1vY2soUmVwb3NpdG9yeSBkYiwgSW5wdXRTdHJlYW0gaW4sCisJCQkJT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCXN1cGVyKGluLCBvdXQpOworCQkJSHR0cENvbm5lY3Rpb24gbGZzU2VydmVyQ29ubiA9IExmc0Nvbm5lY3Rpb25GYWN0b3J5LmdldExmc0Nvbm5lY3Rpb24oZGIsCisJCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCQkJY2hlY2tvdXRVUkxzLmFkZChsZnNTZXJ2ZXJDb25uLmdldFVSTCgpLnRvU3RyaW5nKCkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgcnVuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCS8vIFN0dXBpZCBubyBpbXBsCisJCQlpbi50cmFuc2ZlclRvKG91dCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlAQmVmb3JlQ2xhc3MKKwlwdWJsaWMgc3RhdGljIHZvaWQgaW5zdGFsbExmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKFNNVURHRV9OQU1FLCBTbXVkZ2VGaWx0ZXJNb2NrOjpuZXcpOworCX0KKworCUBBZnRlckNsYXNzCisJcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUxmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoU01VREdFX05BTUUpOworCX0KKworCXByaXZhdGUgR2l0IGdpdDsKKworCUBPdmVycmlkZQorCUBCZWZvcmUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlnaXQgPSBuZXcgR2l0KGRiKTsKKwkJLy8gY29tbWl0IHNvbWV0aGluZworCQl3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCAiSGVsbG8gd29ybGQiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJUZXN0LnR4dCIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkvLyBwcmVwYXJlIHRoZSBjb25maWcgZm9yIExGUworCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgImxmcyIsICJzbXVkZ2UiLCBTTVVER0VfTkFNRSk7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsICJmYWxzZSIpOworCQljb25maWcuc2F2ZSgpOworCisJCWZpbGVCZWZvcmUgPSBudWxsOworCQlmaWxlQWZ0ZXIgPSBudWxsOworCQljb25maWdGaWxlID0gbnVsbDsKKwkJZ2l0QXR0cmlidXRlc0ZpbGUgPSBudWxsOworCX0KKworCUZpbGUgZmlsZUJlZm9yZTsKKworCUZpbGUgZmlsZUFmdGVyOworCisJRmlsZSBjb25maWdGaWxlOworCisJRmlsZSBnaXRBdHRyaWJ1dGVzRmlsZTsKKworCXByaXZhdGUgdm9pZCBjcmVhdGVMZnNGaWxlcyhTdHJpbmcgbGZzUG9pbnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8qCisJCSAqIEZpbGVOYW1lcyAiLmFhYS50eHQiIGFuZCAienp6LnR4dCIgc2VlbSB0byBiZSBzdWZmaWNpZW50IHRvIGdldCB0aGUKKwkJICogZGVzaXJlZCBjaGVja291dCBvcmRlciBiZWZvcmUgYW5kIGFmdGVyICIubGZzY29uZmlnIiwgYXQgbGVhc3QgaW4gYQorCQkgKiBudW1iZXIgb2YgbWFudWFsIHRyaWVzLiBTaW5jZSB0aGUgZmlsZXMgdG8gY2hlY2tvdXQgYXJlIGNvbnRhaW5lZCBpbgorCQkgKiBhIHNldCAoc2VlIERpckNhY2hlQ2hlY2tvdXQ6OmRvQ2hlY2tvdXQpIHRoZSBvcmRlciBjYW5ub3QgYmUKKwkJICogZ3VhcmFudGVlZC4KKwkJICovCisKKwkJLy9GaWxlIHRvIGJlIGNoZWNrZWQgb3V0IGJlZm9yZSBsZnMgY29uZmlnCisJCVN0cmluZyBmaWxlTmFtZUJlZm9yZSA9ICIuYWFhLnR4dCI7CisJCWZpbGVCZWZvcmUgPSB3cml0ZVRyYXNoRmlsZShmaWxlTmFtZUJlZm9yZSwgbGZzUG9pbnRlcik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihmaWxlTmFtZUJlZm9yZSkuY2FsbCgpOworCisJCS8vIEZpbGUgdG8gYmUgY2hlY2tlZCBvdXQgYWZ0ZXIgbGZzIGNvbmZpZworCQlTdHJpbmcgZmlsZU5hbWVBZnRlciA9ICJ6enoudHh0IjsKKwkJZmlsZUFmdGVyID0gd3JpdGVUcmFzaEZpbGUoZmlsZU5hbWVBZnRlciwgbGZzUG9pbnRlcik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihmaWxlTmFtZUFmdGVyKS5jYWxsKCk7CisKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgUG9pbnRlciBmaWxlcyIpLmNhbGwoKTsKKwl9CisKKworCXByaXZhdGUgU3RyaW5nIGFkZExmc0NvbmZpZ0ZpbGVzKFN0cmluZyBsZnNTZXJ2ZXJVcmwpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBBZGQgY29uZmlnIGZpbGVzIHRvIHRoZSByZXBvCisJCVN0cmluZyBsZnNDb25maWcxID0gY3JlYXRlTGZzQ29uZmlnKGxmc1NlcnZlclVybCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJLy8gTW9kaWZ5IGdpdGF0dHJpYnV0ZXMgb24gc2Vjb25kIGNhbGwsIHRvIGZvcmNlIGNoZWNrb3V0IHRvby4KKwkJaWYgKGdpdEF0dHJpYnV0ZXNGaWxlID09IG51bGwpIHsKKwkJCWdpdEF0dHJpYnV0ZXNGaWxlID0gd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwKKwkJCQkiKi50eHQgZmlsdGVyPWxmcyIpOworCQl9IGVsc2UgeworCQkJZ2l0QXR0cmlidXRlc0ZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLAorCQkJCQkiKi50eHQgZmlsdGVyPWxmc1xuIik7CisJCX0KKworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi5naXRhdHRyaWJ1dGVzIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ29tbWl0IGNvbmZpZyBmaWxlcyIpLmNhbGwoKTsKKwkJcmV0dXJuIGxmc0NvbmZpZzE7CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTGZzQ29uZmlnKFN0cmluZyBsZnNTZXJ2ZXJVcmwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBsZnNDb25maWcxID0gIltsZnNdXG4gICAgdXJsID0gIiArIGxmc1NlcnZlclVybDsKKwkJY29uZmlnRmlsZSA9IHdyaXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywgbGZzQ29uZmlnMSk7CisJCXJldHVybiBsZnNDb25maWcxOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX3Jlc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNyZWF0ZUxmc0ZpbGVzKEZBS0VfTEZTX1BPSU5URVIxKTsKKwkJU3RyaW5nIGxmc0NvbmZpZzEgPSBhZGRMZnNDb25maWdGaWxlcyhMRlNfU0VSVkVSX1VSSTEpOworCisJCS8vIERlbGV0ZSBmaWxlcyB0byBmb3JjZSBhY3Rpb24gb24gcmVzZXQKKwkJYXNzZXJ0VHJ1ZShjb25maWdGaWxlLmRlbGV0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZShmaWxlQmVmb3JlLmRlbGV0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZShmaWxlQWZ0ZXIuZGVsZXRlKCkpOworCisJCWFzc2VydFRydWUoZ2l0QXR0cmlidXRlc0ZpbGUuZGVsZXRlKCkpOworCisJCS8vIGNyZWF0ZSBjb25maWcgZmlsZSB3aXRoIGRpZmZlcmVudCB1cmwKKwkJY3JlYXRlTGZzQ29uZmlnKExGU19TRVJWRVJfVVJJMyk7CisKKwkJY2hlY2tvdXRVUkxzLmNsZWFyKCk7CisJCWdpdC5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMSk7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMSk7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIxKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCS8vIFRPRE86IFNob3VsZCBtYXkgYmUgRVhQRUNURURfU0VSVlJfVVJMMQorCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDMsIGNoZWNrb3V0VVJMcy5nZXQoMCkpOworCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDEsIGNoZWNrb3V0VVJMcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX0JyYW5jaFN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBDcmVhdGUgYSBuZXcgYnJhbmNoICJVUkwxIiBhbmQgYWRkIGNvbmZpZyBmaWxlcworCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgiVVJMMSIpLmNhbGwoKTsKKworCQljcmVhdGVMZnNGaWxlcyhGQUtFX0xGU19QT0lOVEVSMSk7CisJCVN0cmluZyBsZnNDb25maWcxID0gYWRkTGZzQ29uZmlnRmlsZXMoTEZTX1NFUlZFUl9VUkkxKTsKKworCQkvLyBDcmVhdGUgYSBzZWNvbmQgbmV3IGJyYW5jaCAiVVJMMiIgYW5kIGFkZCBjb25maWcgZmlsZXMKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoIlVSTDIiKS5jYWxsKCk7CisKKwkJY3JlYXRlTGZzRmlsZXMoRkFLRV9MRlNfUE9JTlRFUjIpOworCQlTdHJpbmcgbGZzQ29uZmlnMiA9IGFkZExmc0NvbmZpZ0ZpbGVzKExGU19TRVJWRVJfVVJJMik7CisKKwkJY2hlY2tGaWxlKGNvbmZpZ0ZpbGUsIGxmc0NvbmZpZzIpOworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjIpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMik7CisKKwkJY2hlY2tvdXRVUkxzLmNsZWFyKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIlVSTDEiKS5jYWxsKCk7CisKKwkJY2hlY2tGaWxlKGNvbmZpZ0ZpbGUsIGxmc0NvbmZpZzEpOworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjEpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMSk7CisKKwkJYXNzZXJ0RXF1YWxzKDIsIGNoZWNrb3V0VVJMcy5zaXplKCkpOworCQkvLyBUT0RPOiBTaG91bGQgbWF5IGJlIEVYUEVDVEVEX1NFUlZSX1VSTDEKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwyLCBjaGVja291dFVSTHMuZ2V0KDApKTsKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwxLCBjaGVja291dFVSTHMuZ2V0KDEpKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMiIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMik7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIyKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCS8vIFRPRE86IFNob3VsZCBtYXkgYmUgRVhQRUNURURfU0VSVlJfVVJMMgorCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDEsIGNoZWNrb3V0VVJMcy5nZXQoMCkpOworCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDIsIGNoZWNrb3V0VVJMcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX0JyYW5jaFN3aXRjaF9Nb2RpZmllZExvY2FsKCkKKwkJCXRocm93cyBFeGNlcHRpb24geworCisJCS8vIENyZWF0ZSBhIG5ldyBicmFuY2ggIlVSTDEiIGFuZCBhZGQgY29uZmlnIGZpbGVzCisJCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXROYW1lKCJVUkwxIikuY2FsbCgpOworCisJCWNyZWF0ZUxmc0ZpbGVzKEZBS0VfTEZTX1BPSU5URVIxKTsKKwkJYWRkTGZzQ29uZmlnRmlsZXMoTEZTX1NFUlZFUl9VUkkxKTsKKworCQkvLyBDcmVhdGUgYSBzZWNvbmQgbmV3IGJyYW5jaCAiVVJMMiIgYW5kIGFkZCBjb25maWcgZmlsZXMKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoIlVSTDIiKS5jYWxsKCk7CisKKwkJY3JlYXRlTGZzRmlsZXMoRkFLRV9MRlNfUE9JTlRFUjIpOworCQlhZGRMZnNDb25maWdGaWxlcyhMRlNfU0VSVkVSX1VSSTEpOworCisJCS8vIGNyZWF0ZSBjb25maWcgZmlsZSB3aXRoIGRpZmZlcmVudCB1cmwKKwkJYXNzZXJ0VHJ1ZShjb25maWdGaWxlLmRlbGV0ZSgpKTsKKwkJU3RyaW5nIGxmc0NvbmZpZzMgPSBjcmVhdGVMZnNDb25maWcoTEZTX1NFUlZFUl9VUkkzKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMyk7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIyKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMSIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjEpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMSk7CisJCWNoZWNrRmlsZShjb25maWdGaWxlLCBsZnNDb25maWczKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwzLCBjaGVja291dFVSTHMuZ2V0KDApKTsKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwzLCBjaGVja291dFVSTHMuZ2V0KDEpKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMiIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjIpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShjb25maWdGaWxlLCBsZnNDb25maWczKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCWFzc2VydEVxdWFscyhFWFBFQ1RFRF9TRVJWRVJfVVJMMywgY2hlY2tvdXRVUkxzLmdldCgwKSk7CisJCWFzc2VydEVxdWFscyhFWFBFQ1RFRF9TRVJWRVJfVVJMMywgY2hlY2tvdXRVUkxzLmdldCgxKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzR2l0VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzR2l0VGVzdC5qYXZhCmluZGV4IDg5NjQzMTAuLjNlODNjOGUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0dpdFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9MZnNHaXRUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDIxLCAyMDIyIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC02OCw2ICs2OCwyNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJyYW5jaFN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLmJpbiIsICJhYWEiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEuYmluIGZpbHRlcj1sZnMiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWNvbW1pdCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYmJyYW5jaCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYmJyYW5jaCIpLmNhbGwoKTsKKwkJRmlsZSBiRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJiLmJpbiIsICJiYmIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImIuYmluIGZpbHRlcj1sZnMiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYmNvbW1pdCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJY2hlY2tGaWxlKGFGaWxlLCAiYWFhIik7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJicmFuY2giKS5jYWxsKCk7CisJCWNoZWNrRmlsZShiRmlsZSwgImJiYiIpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgY2hlY2tvdXROb25MZnNQb2ludGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVN0cmluZyBjb250ZW50ID0gInNpemVfdFxuc29tZV9mdW5jdGlvbih2b2lkKiBwdHIpO1xuIjsKIAkJRmlsZSBzbWFsbEZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCBjb250ZW50KTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkY2I3ZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE5haWwgU2FtYXRvdiA8c2FuYWlsQHlhbmRleC5ydT4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZW1vdGVBZGRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuQ2xlYW5GaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuUHJvdG9jb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuU211ZGdlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5MZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlVSSWlzaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLkh0dHBDb25uZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydDsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIExmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU01VREdFX05BTUUgPSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQlVJTFRJTl9GSUxURVJfUFJFRklYCisJCQkrIENvbnN0YW50cy5BVFRSX0ZJTFRFUl9EUklWRVJfUFJFRklYCisJCQkrIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX1NNVURHRTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTEVBTl9OQU1FID0gb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkJVSUxUSU5fRklMVEVSX1BSRUZJWAorCQkJKyBDb25zdGFudHMuQVRUUl9GSUxURVJfRFJJVkVSX1BSRUZJWAorCQkJKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9DTEVBTjsKKworCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMRlNfU0VSVkVSX1VSTDEgPSAiaHR0cHM6Ly9sZnMuc2VydmVyMS90ZXN0L3VyaSI7CisKKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTEZTX1NFUlZFUl9VUkwyID0gImh0dHBzOi8vbGZzLnNlcnZlcjIvdGVzdC91cmkiOworCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE9SSUdJTl9VUkwgPSAiaHR0cHM6Ly9naXQuc2VydmVyL3Rlc3QvdXJpIjsKKworCXByaXZhdGUgR2l0IGdpdDsKKworCUBCZWZvcmVDbGFzcworCXB1YmxpYyBzdGF0aWMgdm9pZCBpbnN0YWxsTGZzKCkgeworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoU01VREdFX05BTUUsIFNtdWRnZUZpbHRlci5GQUNUT1JZKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKENMRUFOX05BTUUsIENsZWFuRmlsdGVyLkZBQ1RPUlkpOworCX0KKworCUBBZnRlckNsYXNzCisJcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUxmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoU01VREdFX05BTUUpOworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkudW5yZWdpc3RlcihDTEVBTl9OQU1FKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJZ2l0ID0gbmV3IEdpdChkYik7CisKKwkJLy8gSnVzdCB0byBoYXZlIGEgbm9uIGVtcHR5IHJlcG8KKwkJd3JpdGVUcmFzaEZpbGUoIlRlc3QudHh0IiwgIkhlbGxvIHdvcmxkIGZyb20gdGhlIExGUyBGYWN0b3J5IFRlc3QiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJUZXN0LnR4dCIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgbGZzVXJsRnJvbVJlbW90ZVVybFdpdGhEb3RHaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWRkUmVtb3RlVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvLmdpdCIpOworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby5naXQvaW5mby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21SZW1vdGVVcmxXaXRob3V0RG90R2l0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFkZFJlbW90ZVVybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwbyIpOworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby5naXQvaW5mby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21Mb2NhbENvbmZpZygpIHRocm93cyBFeGNlcHRpb24geworCQlhZGRSZW1vdGVVcmwoImh0dHBzOi8vbG9jYWxob3N0L3JlcG8iKTsKKworCQlTdG9yZWRDb25maWcgY2ZnID0gKChSZXBvc2l0b3J5KSBkYikuZ2V0Q29uZmlnKCk7CisJCWNmZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0xGUywKKwkJCQludWxsLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1VSTCwKKwkJCQkiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby9sZnMiKTsKKwkJY2ZnLnNhdmUoKTsKKworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21PcmlnaW5Db25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWRkUmVtb3RlVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvIik7CisKKwkJU3RvcmVkQ29uZmlnIGNmZyA9ICgoUmVwb3NpdG9yeSkgZGIpLmdldENvbmZpZygpOworCQljZmcuc2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfU0VDVElPTl9MRlMsCisJCQkJb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUUsCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMLAorCQkJCSJodHRwczovL2xvY2FsaG9zdC9yZXBvL2xmcyIpOworCQljZmcuc2F2ZSgpOworCisJCWNoZWNrTGZzVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvL2xmcyIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgbGZzVXJsTm90Q29uZmlndXJlZCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRUaHJvd3MoTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiBMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLAorCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9sZnN1cmxfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fbGZzdXJsX2xmc2NvbmZpZ0Zyb21JbmRleCgpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVMZnNDb25maWcoKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRykuY2FsbCgpOworCQlkZWxldGVUcmFzaEZpbGUoQ29uc3RhbnRzLkRPVF9MRlNfQ09ORklHKTsKKwkJY2hlY2tMZnNVcmwoTEZTX1NFUlZFUl9VUkwxKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9sZnN1cmxfbGZzY29uZmlnRnJvbUhFQUQoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgQ29uZmlnIikuY2FsbCgpOworCisJCS8qCisJCSAqIHJlYWRpbmcgLmxmc2NvbmZpZyBmcm9tIEhFQUQgc2VlbXMgb25seSB0ZXN0YWJsZSB1c2luZyBhIGJhcmUgcmVwbywKKwkJICogc2luY2Ugb3RoZXJ3aXNlIHdvcmtpbmcgdHJlZSBvciBpbmRleCBhcmUgdXNlZAorCQkgKi8KKwkJRmlsZSBkaXJlY3RvcnkgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCJ0ZXN0QmFyZVJlcG8iKTsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvRGIgPSBHaXQuY2xvbmVSZXBvc2l0b3J5KCkKKwkJCQkuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSkKKwkJCQkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkuc2V0QmFyZSh0cnVlKQorCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKSB7CisKKwkJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9yZW1vdGVfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFkZFJlbW90ZVVybChPUklHSU5fVVJMKTsKKwkJd3JpdGVMZnNDb25maWcoTEZTX1NFUlZFUl9VUkwxLCAibGZzIiwgREVGQVVMVF9SRU1PVEVfTkFNRSwgInVybCIpOworCQljaGVja0xmc1VybChMRlNfU0VSVkVSX1VSTDEpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIGNvbmZpZyBmaWxlIHByZWNlZGVuY2UuCisJICoKKwkgKiBDaGVja2luZyBvbmx5IHdpdGggdGhlIGxvY2FsIHJlcG9zaXRvcnkgY29uZmlnIGlzIHN1ZmZpY2llbnQgc2luY2UgZnJvbQorCSAqIHRoYXQgcG9pbnQgdGhlICJub3JtYWwiIHByZWNlZGVuY2UgaXMgdXNlZC4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fQ29uZmlnRmlsZVByZWNlZGVuY2VfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0xGUywgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwsIExGU19TRVJWRVJfVVJMMik7CisJCWNvbmZpZy5zYXZlKCk7CisKKwkJY2hlY2tMZnNVcmwoTEZTX1NFUlZFUl9VUkwyKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9JbnZhbGlkTGZzQ29uZmlnX1dvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlSW52YWxpZExmc0NvbmZpZygpOworCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbiA9IGFzc2VydFRocm93cygKKwkJCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiB7CisJCQlMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLCBIdHRwU3VwcG9ydC5NRVRIT0RfUE9TVCwKKwkJCQkJUHJvdG9jb2wuT1BFUkFUSU9OX0RPV05MT0FEKTsKKwkJfSk7CisJCWFzc2VydFRydWUoZ2V0U3RhY2tUcmFjZShhY3R1YWxFeGNlcHRpb24pCisJCQkJLmNvbnRhaW5zKCJJbnZhbGlkIGxpbmUgaW4gY29uZmlnIGZpbGUiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fSW52YWxpZExmc0NvbmZpZ19JbmRleCgpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVJbnZhbGlkTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZGVsZXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCUxmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24gYWN0dWFsRXhjZXB0aW9uID0gYXNzZXJ0VGhyb3dzKAorCQkJCUxmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24uY2xhc3MsICgpIC0+IHsKKwkJCUxmc0Nvbm5lY3Rpb25GYWN0b3J5LmdldExmc0Nvbm5lY3Rpb24oZGIsIEh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULAorCQkJCQlQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCQl9KTsKKwkJYXNzZXJ0VHJ1ZShnZXRTdGFja1RyYWNlKGFjdHVhbEV4Y2VwdGlvbikKKwkJCQkuY29udGFpbnMoIkludmFsaWQgbGluZSBpbiBjb25maWcgZmlsZSIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9JbnZhbGlkTGZzQ29uZmlnX0hFQUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVJbnZhbGlkTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgQ29uZmlnIikuY2FsbCgpOworCisJCS8qCisJCSAqIHJlYWRpbmcgLmxmc2NvbmZpZyBmcm9tIEhFQUQgc2VlbXMgb25seSB0ZXN0YWJsZSB1c2luZyBhIGJhcmUgcmVwbywKKwkJICogc2luY2Ugb3RoZXJ3aXNlIHdvcmtpbmcgdHJlZSBvciBpbmRleCBhcmUgdXNlZAorCQkgKi8KKwkJRmlsZSBkaXJlY3RvcnkgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCJ0ZXN0QmFyZVJlcG8iKTsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvRGIgPSBHaXQuY2xvbmVSZXBvc2l0b3J5KCkKKwkJCQkuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSkKKwkJCQkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkuc2V0QmFyZSh0cnVlKQorCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKSB7CisJCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbiA9IGFzc2VydFRocm93cygKKwkJCQkJTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4geworCQkJCQkJTGZzQ29ubmVjdGlvbkZhY3RvcnkuZ2V0TGZzQ29ubmVjdGlvbihkYiwKKwkJCQkJCQkJSHR0cFN1cHBvcnQuTUVUSE9EX1BPU1QsCisJCQkJCQkJCVByb3RvY29sLk9QRVJBVElPTl9ET1dOTE9BRCk7CisJCQkJCX0pOworCQkJYXNzZXJ0VHJ1ZShnZXRTdGFja1RyYWNlKGFjdHVhbEV4Y2VwdGlvbikKKwkJCQkJLmNvbnRhaW5zKCJJbnZhbGlkIGxpbmUgaW4gY29uZmlnIGZpbGUiKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgYWRkUmVtb3RlVXJsKFN0cmluZyByZW1vdFVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJlbW90ZUFkZENvbW1hbmQgYWRkID0gZ2l0LnJlbW90ZUFkZCgpOworCQlhZGQuc2V0VXJpKG5ldyBVUklpc2gocmVtb3RVcmwpKTsKKwkJYWRkLnNldE5hbWUob3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUUpOworCQlhZGQuY2FsbCgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwcm92aWRlZCBleGNlcHRpb24gYXMgc3RyaW5nCisJICoKKwkgKiBAcGFyYW0gYWN0dWFsRXhjZXB0aW9uCisJICogQHJldHVybiBUaGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlIGFzIHN0cmluZworCSAqLworCXByaXZhdGUgU3RyaW5nIGdldFN0YWNrVHJhY2UoRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbikgeworCQlTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisJCVByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKKwkJYWN0dWFsRXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShwdyk7CisJCXJldHVybiBzdy50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgdm9pZCB3cml0ZUxmc0NvbmZpZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKExGU19TRVJWRVJfVVJMMSwgImxmcyIsICJ1cmwiKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgd3JpdGVMZnNDb25maWcoU3RyaW5nIGxmc1VybCwgU3RyaW5nIHNlY3Rpb24sIFN0cmluZyBuYW1lKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJd3JpdGVMZnNDb25maWcobGZzVXJsLCBzZWN0aW9uLCBudWxsLCBuYW1lKTsKKwl9CisKKwkvKgorCSAqIFdyaXRlIHNpbXBsZSBsZnMgY29uZmlnIHdpdGggc2luZ2xlIGVudHJ5LiBEbyBub3QgdXNlIEZpbGVCYXNlZENvbmZpZyB0bworCSAqIGF2b2lkIGludHJvZHVjaW5nIG5ldyBkZXBlbmRlbmN5IChmb3Igbm93KS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgd3JpdGVMZnNDb25maWcoU3RyaW5nIGxmc1VybCwgU3RyaW5nIHNlY3Rpb24sCisJCQlTdHJpbmcgc3Vic2VjdGlvbiwgU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgY29uZmlnID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJY29uZmlnLmFwcGVuZCgiWyIpOworCQljb25maWcuYXBwZW5kKHNlY3Rpb24pOworCQlpZiAoc3Vic2VjdGlvbiAhPSBudWxsKSB7CisJCQljb25maWcuYXBwZW5kKCIgXCIiKTsKKwkJCWNvbmZpZy5hcHBlbmQoc3Vic2VjdGlvbik7CisJCQljb25maWcuYXBwZW5kKCJcIiIpOworCQl9CisJCWNvbmZpZy5hcHBlbmQoIl1cbiIpOworCQljb25maWcuYXBwZW5kKCIgICAgIik7CisJCWNvbmZpZy5hcHBlbmQobmFtZSk7CisJCWNvbmZpZy5hcHBlbmQoIiA9ICIpOworCQljb25maWcuYXBwZW5kKGxmc1VybCk7CisJCXdyaXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywgY29uZmlnLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgdm9pZCB3cml0ZUludmFsaWRMZnNDb25maWcoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3cml0ZVRyYXNoRmlsZShDb25zdGFudHMuRE9UX0xGU19DT05GSUcsCisJCQkJIntsZnNdXG4gICAgdXJsID0gIiArIExGU19TRVJWRVJfVVJMMSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNoZWNrTGZzVXJsKFN0cmluZyBsZnNVcmwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUh0dHBDb25uZWN0aW9uIGxmc1NlcnZlckNvbm47CisJCWxmc1NlcnZlckNvbm4gPSBMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLAorCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCisJCWFzc2VydEVxdWFscyhsZnNVcmwgKyBQcm90b2NvbC5PQkpFQ1RTX0xGU19FTkRQT0lOVCwKKwkJCQlsZnNTZXJ2ZXJDb25uLmdldFVSTCgpLnRvU3RyaW5nKCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZmJhNThmOC4uMDlmZmZmYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMzEgKzMsMzMgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzLG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249IjYuMC4xIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mcyxvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSI2LjEuMSIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlLmdzb247dmVyc2lvbj0iWzIuOC4yLDMuMC4wKSIsCiAgY29tLmdvb2dsZS5nc29uLnN0cmVhbTt2ZXJzaW9uPSJbMi44LjIsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiO3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbCwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGE3MTViZTYuLjdhMmE0NDYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wb20ueG1sCmluZGV4IGViNTdkYjMuLjk0OWM1NjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LnByb3BlcnRpZXMKaW5kZXggMGUwMGYxNC4uNjQyYjgzZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5wcm9wZXJ0aWVzCkBAIC0xLDE5ICsxLDE5IEBACiBjb3JydXB0TG9uZ09iamVjdD1UaGUgY29udGVudCBoYXNoICcnezB9Jycgb2YgdGhlIGxvbmcgb2JqZWN0ICcnezF9JycgZG9lc24nJ3QgbWF0Y2ggaXRzIGlkLCB0aGUgY29ycnVwdCBvYmplY3Qgd2lsbCBiZSBkZWxldGVkLgotaW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIPUluY29ycmVjdCBMT05HX09CSkVDVF9JRF9MRU5HVEguCi1pbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg9TWVkaWFmaWxlIHswfSBoYXMgdW5leHBlY3RlZCBsZW5ndGg7IGV4cGVjdGVkIHsxfSBidXQgZm91bmQgezJ9LgorZG90TGZzQ29uZmlnUmVhZEZhaWxlZD1SZWFkaW5nIC5sZnNjb25maWcgZmFpbGVkCiBpbmNvbnNpc3RlbnRDb250ZW50TGVuZ3RoPVVuZXhwZWN0ZWQgY29udGVudCBsZW5ndGggcmVwb3J0ZWQgYnkgTEZTIHNlcnZlciAoezB9KSwgZXhwZWN0ZWQgezF9IGJ1dCByZXBvcnRlZCB3YXMgezJ9CitpbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg9TWVkaWFmaWxlIHswfSBoYXMgdW5leHBlY3RlZCBsZW5ndGg7IGV4cGVjdGVkIHsxfSBidXQgZm91bmQgezJ9LgoraW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIPUluY29ycmVjdCBMT05HX09CSkVDVF9JRF9MRU5HVEguCiBpbnZhbGlkTG9uZ0lkPUludmFsaWQgaWQ6IHswfQogaW52YWxpZExvbmdJZExlbmd0aD1JbnZhbGlkIGlkIGxlbmd0aCB7MH07IHNob3VsZCBiZSB7MX0KLWxmc1VuYXZhaWxhYmxlPUxGUyBpcyBub3QgYXZhaWxhYmxlIGZvciByZXBvc2l0b3J5IHswfQotcHJvdG9jb2xFcnJvcj1MRlMgUHJvdG9jb2wgRXJyb3IgezB9OiB7MX0KLXJlcXVpcmVkSGFzaEZ1bmN0aW9uTm90QXZhaWxhYmxlPVJlcXVpcmVkIGhhc2ggZnVuY3Rpb24gezB9IG5vdCBhdmFpbGFibGUuCi1yZXBvc2l0b3J5Tm90Rm91bmQ9UmVwb3NpdG9yeSB7MH0gbm90IGZvdW5kCi1yZXBvc2l0b3J5UmVhZE9ubHk9UmVwb3NpdG9yeSB7MH0gaXMgcmVhZC1vbmx5Ci1sZnNVbmF2YWlsYWJsZT1MRlMgaXMgbm90IGF2YWlsYWJsZSBmb3IgcmVwb3NpdG9yeSB7MH0KLWxmc1VuYXRob3JpemVkPU5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gb3BlcmF0aW9uIHswfSBvbiByZXBvc2l0b3J5IHsxfQogbGZzRmFpbGVkVG9HZXRSZXBvc2l0b3J5PWZhaWxlZCB0byBnZXQgcmVwb3NpdG9yeSB7MH0KIGxmc05vRG93bmxvYWRVcmw9Ik5lZWQgdG8gZG93bmxvYWQgb2JqZWN0IGZyb20gTEZTIHNlcnZlciBidXQgY291bGRuJ3QgZGV0ZXJtaW5lIExGUyBzZXJ2ZXIgVVJMIgorbGZzVW5hdXRob3JpemVkPU5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gb3BlcmF0aW9uIHswfSBvbiByZXBvc2l0b3J5IHsxfQorbGZzVW5hdmFpbGFibGU9TEZTIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlcG9zaXRvcnkgezB9CittaXNzaW5nTG9jYWxPYmplY3Q9IkxvY2FsIE9iamVjdCB7MH0gaXMgbWlzc2luZyIKK3Byb3RvY29sRXJyb3I9TEZTIFByb3RvY29sIEVycm9yIHswfTogezF9CityZXBvc2l0b3J5Tm90Rm91bmQ9UmVwb3NpdG9yeSB7MH0gbm90IGZvdW5kCityZXBvc2l0b3J5UmVhZE9ubHk9UmVwb3NpdG9yeSB7MH0gaXMgcmVhZC1vbmx5CityZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZT1SZXF1aXJlZCBoYXNoIGZ1bmN0aW9uIHswfSBub3QgYXZhaWxhYmxlLgogc2VydmVyRmFpbHVyZT1XaGVuIHRyeWluZyB0byBvcGVuIGEgY29ubmVjdGlvbiB0byB7MH0gdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhbiBlcnJvciBjb2RlLiByYz17MX0KLXdyb25nQW1vdXRPZkRhdGFSZWNlaXZlZD1XaGlsZSBkb3dubG9hZGluZyBkYXRhIGZyb20gdGhlIGNvbnRlbnQgc2VydmVyIHswfSB7MX0gYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkIHdoaWxlIHsyfSBoYXZlIGJlZW4gZXhwZWN0ZWQKIHVzZXJDb25maWdJbnZhbGlkPSJVc2VyIGNvbmZpZyBmaWxlIHswfSBpbnZhbGlkIHsxfSIKLW1pc3NpbmdMb2NhbE9iamVjdD0iTG9jYWwgT2JqZWN0IHswfSBpcyBtaXNzaW5nIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3dyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQ9V2hpbGUgZG93bmxvYWRpbmcgZGF0YSBmcm9tIHRoZSBjb250ZW50IHNlcnZlciB7MH0gezF9IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZCB3aGlsZSB7Mn0gaGF2ZSBiZWVuIGV4cGVjdGVkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc1ByZVB1c2hIb29rLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQppbmRleCBkNmNlODU1Li5lYmY0NmUwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQpAQCAtMTEzLDYgKzExMyw5IEBAIHByaXZhdGUgU2V0PExmc1BvaW50ZXI+IGZpbmRPYmplY3RzVG9QdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uLAogCiAJCXRyeSAoT2JqZWN0V2FsayB3YWxrID0gbmV3IE9iamVjdFdhbGsoZ2V0UmVwb3NpdG9yeSgpKSkgewogCQkJZm9yIChSZW1vdGVSZWZVcGRhdGUgdXAgOiByZWZzKSB7CisJCQkJaWYgKHVwLmlzRGVsZXRlKCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJCXdhbGsuc2V0UmV3cml0ZVBhcmVudHMoZmFsc2UpOwogCQkJCWV4Y2x1ZGVSZW1vdGVSZWZzKHdhbGspOwogCQkJCXdhbGsubWFya1N0YXJ0KHdhbGsucGFyc2VDb21taXQodXAuZ2V0TmV3T2JqZWN0SWQoKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL1NtdWRnZUZpbHRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL1NtdWRnZUZpbHRlci5qYXZhCmluZGV4IDM0MTE4ODcuLmMyNmExYmYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9TbXVkZ2VGaWx0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvU211ZGdlRmlsdGVyLmphdmEKQEAgLTIwNSw3ICsyMDUsNyBAQCBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248UGF0aD4gZG93bmxvYWRMZnNSZXNvdXJjZShMZnMgbGZzLCBSZXBvc2l0b3J5IGRiLAogCQkJCQlsb25nIGJ5dGVzQ29waWVkID0gRmlsZXMuY29weShjb250ZW50SW4sIHBhdGgpOwogCQkJCQlpZiAoYnl0ZXNDb3BpZWQgIT0gby5zaXplKSB7CiAJCQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCUxmc1RleHQuZ2V0KCkud3JvbmdBbW91dE9mRGF0YVJlY2VpdmVkLAorCQkJCQkJCQlMZnNUZXh0LmdldCgpLndyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQsCiAJCQkJCQkJCWNvbnRlbnRTZXJ2ZXJDb25uLmdldFVSTCgpLAogCQkJCQkJCQlMb25nLnZhbHVlT2YoYnl0ZXNDb3BpZWQpLAogCQkJCQkJCQlMb25nLnZhbHVlT2Yoby5zaXplKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9MZnNVbmF1dGhvcml6ZWQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvTGZzVW5hdXRob3JpemVkLmphdmEKaW5kZXggMzY4ODlkYi4uMGRjNmFlYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9MZnNVbmF1dGhvcml6ZWQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvZXJyb3JzL0xmc1VuYXV0aG9yaXplZC5qYXZhCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYyBjbGFzcyBMZnNVbmF1dGhvcml6ZWQgZXh0ZW5kcyBMZnNFeGNlcHRpb24gewogCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgbmFtZS4KIAkgKi8KIAlwdWJsaWMgTGZzVW5hdXRob3JpemVkKFN0cmluZyBvcGVyYXRpb24sIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1RleHQuZ2V0KCkubGZzVW5hdGhvcml6ZWQsIG9wZXJhdGlvbiwKKwkJc3VwZXIoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTGZzVGV4dC5nZXQoKS5sZnNVbmF1dGhvcml6ZWQsIG9wZXJhdGlvbiwKIAkJCQluYW1lKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0NvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0NvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDM5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29uZmlnLmphdmEKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIE1hdHRoaWFzIEZyb21tZSA8bWZyb21tZUBkc3BhY2UuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29uZmlnSW52YWxpZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkJsb2JCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZUcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworCisvKioKKyAqIEVuY2Fwc3VsYXRlIGFjY2VzcyB0byB0aGUgLmxmc2NvbmZpZy4KKyAqCisgKiBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50CisgKiBodHRwczovL2dpdGh1Yi5jb20vZ2l0LWxmcy9naXQtbGZzL2Jsb2IvbWFpbi9kb2NzL21hbi9naXQtbGZzLWNvbmZpZy41LnJvbm4KKyAqIHRoZSBvcmRlciB0byBmaW5kIHRoZSAubGZzY29uZmlnIGZpbGUgaXM6CisgKgorICogPHByZT4KKyAqICAgMS4gaW4gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZQorICogICAyLiBpbiB0aGUgaW5kZXgKKyAqICAgMy4gaW4gdGhlIEhFQUQsIGZvciBiYXJlIHJlcG9zaXRvcmllcyB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlCisgKiAgICAgIHRoYXQgaXMgc2VhcmNoZWQKKyAqIDwvcHJlPgorICoKKyAqIFZhbHVlcyBmcm9tIHRoZSAubGZzY29uZmlnIGFyZSB1c2VkIG9ubHkgaWYgbm90IHNwZWNpZmllZCBpbiBhbm90aGVyIGdpdAorICogY29uZmlnIGZpbGUgdG8gYWxsb3cgbG9jYWwgb3ZlcnJpZGUgd2l0aG91dCBtb2RpZmljdGlvbiBvZiBhIGNvbW1pdHRlZCBmaWxlLgorICovCitwdWJsaWMgY2xhc3MgTGZzQ29uZmlnIHsKKwlwcml2YXRlIFJlcG9zaXRvcnkgZGI7CisJcHJpdmF0ZSBDb25maWcgZGVsZWdhdGU7CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIExmc0NvbmZpZy4KKwkgKgorCSAqIEBwYXJhbSBkYgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgcmVwbworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgTGZzQ29uZmlnKFJlcG9zaXRvcnkgZGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMuZGIgPSBkYjsKKwkJZGVsZWdhdGUgPSB0aGlzLmxvYWQoKTsKKwl9CisKKwkvKioKKwkgKiBSZWFkIHRoZSAubGZzY29uZmlnIGZpbGUgZnJvbSB0aGUgcmVwb3NpdG9yeQorCSAqCisJICogQHJldHVybiBUaGUgbG9hZGVkIGxmcyBjb25maWcgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdAorCSAqCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgQ29uZmlnIGxvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlDb25maWcgcmVzdWx0ID0gbnVsbDsKKworCQlpZiAoIWRiLmlzQmFyZSgpKSB7CisJCQlyZXN1bHQgPSBsb2FkRnJvbVdvcmtpbmdUcmVlKCk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBsb2FkRnJvbUluZGV4KCk7CisJCQl9CisJCX0KKworCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCXJlc3VsdCA9IGxvYWRGcm9tSGVhZCgpOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQlyZXN1bHQgPSBlbXB0eUNvbmZpZygpOworCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUcnkgdG8gcmVhZCB0aGUgbGZzIGNvbmZpZyBmcm9tIGEgZmlsZSBjYWxsZWQgLmxmc2NvbmZpZyBhdCB0aGUgdG9wIGxldmVsCisJICogb2YgdGhlIHdvcmtpbmcgdHJlZS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGNvbmZpZywgb3IgPGNvZGU+bnVsbDwvY29kZT4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJQE51bGxhYmxlCisJcHJpdmF0ZSBDb25maWcgbG9hZEZyb21Xb3JraW5nVHJlZSgpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlIGxmc0NvbmZpZyA9IGRiLmdldEZTKCkucmVzb2x2ZShkYi5nZXRXb3JrVHJlZSgpLAorCQkJCUNvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCWlmIChsZnNDb25maWcuZXhpc3RzKCkgJiYgbGZzQ29uZmlnLmlzRmlsZSgpKSB7CisJCQlGaWxlQmFzZWRDb25maWcgY29uZmlnID0gbmV3IEZpbGVCYXNlZENvbmZpZyhsZnNDb25maWcsIGRiLmdldEZTKCkpOworCQkJdHJ5IHsKKwkJCQljb25maWcubG9hZCgpOworCQkJCXJldHVybiBjb25maWc7CisJCQl9IGNhdGNoIChDb25maWdJbnZhbGlkRXhjZXB0aW9uIGUpIHsKKwkJCQl0aHJvdyBuZXcgTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbigKKwkJCQkJCUxmc1RleHQuZ2V0KCkuZG90TGZzQ29uZmlnUmVhZEZhaWxlZCwgZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVHJ5IHRvIHJlYWQgdGhlIGxmcyBjb25maWcgZnJvbSBhbiBlbnRyeSBjYWxsZWQgLmxmc2NvbmZpZyBjb250YWluZWQgaW4KKwkgKiB0aGUgaW5kZXguCisJICoKKwkgKiBAcmV0dXJuIHRoZSBjb25maWcsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlATnVsbGFibGUKKwlwcml2YXRlIENvbmZpZyBsb2FkRnJvbUluZGV4KCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlEaXJDYWNoZUVudHJ5IGVudHJ5ID0gZGIucmVhZERpckNhY2hlKCkKKwkJCQkJLmdldEVudHJ5KENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCQlpZiAoZW50cnkgIT0gbnVsbCkgeworCQkJCXJldHVybiBuZXcgQmxvYkJhc2VkQ29uZmlnKG51bGwsIGRiLCBlbnRyeS5nZXRPYmplY3RJZCgpKTsKKwkJCX0KKwkJfSBjYXRjaCAoQ29uZmlnSW52YWxpZEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbigKKwkJCQkJTGZzVGV4dC5nZXQoKS5kb3RMZnNDb25maWdSZWFkRmFpbGVkLCBlKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUcnkgdG8gcmVhZCB0aGUgbGZzIGNvbmZpZyBmcm9tIGFuIGVudHJ5IGNhbGxlZCAubGZzY29uZmlnIGNvbnRhaW5lZCBpbgorCSAqIHRoZSBoZWFkIHJldmlzaW9uLgorCSAqCisJICogQHJldHVybiB0aGUgY29uZmlnLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlATnVsbGFibGUKKwlwcml2YXRlIENvbmZpZyBsb2FkRnJvbUhlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgKFJldldhbGsgcmV2V2FsayA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJT2JqZWN0SWQgaGVhZENvbW1pdElkID0gZGIucmVzb2x2ZShIRUFEKTsKKwkJCWlmIChoZWFkQ29tbWl0SWQgPT0gbnVsbCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJUmV2Q29tbWl0IGNvbW1pdCA9IHJldldhbGsucGFyc2VDb21taXQoaGVhZENvbW1pdElkKTsKKwkJCVJldlRyZWUgdHJlZSA9IGNvbW1pdC5nZXRUcmVlKCk7CisJCQlUcmVlV2FsayB0cmVld2FsayA9IFRyZWVXYWxrLmZvclBhdGgoZGIsIENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywKKwkJCQkJdHJlZSk7CisJCQlpZiAodHJlZXdhbGsgIT0gbnVsbCkgeworCQkJCXJldHVybiBuZXcgQmxvYkJhc2VkQ29uZmlnKG51bGwsIGRiLCB0cmVld2Fsay5nZXRPYmplY3RJZCgwKSk7CisJCQl9CisJCX0gY2F0Y2ggKENvbmZpZ0ludmFsaWRFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IExmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24oCisJCQkJCUxmc1RleHQuZ2V0KCkuZG90TGZzQ29uZmlnUmVhZEZhaWxlZCwgZSk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVtcHR5IGNvbmZpZyBhcyBmYWxsYmFjayB0byBhdm9pZCBudWxsIHBvaW50ZXIgY2hlY2tzLgorCSAqCisJICogQHJldHVybiBhbiBlbXB0eSBjb25maWcKKwkgKi8KKwlwcml2YXRlIENvbmZpZyBlbXB0eUNvbmZpZygpIHsKKwkJcmV0dXJuIG5ldyBDb25maWcoKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgc3RyaW5nIHZhbHVlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorCSAqCisJICogRmlyc3QgdHJpZXMgdG8gZmluZCB0aGUgdmFsdWUgaW4gdGhlIGdpdCBjb25maWcgZmlsZXMuIElmIG5vdCBmb3VuZCB0cmllcworCSAqIHRvIGZpbmQgZGF0YSBpbiAubGZzY29uZmlnLgorCSAqCisJICogQHBhcmFtIHNlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSBzZWN0aW9uCisJICogQHBhcmFtIHN1YnNlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSBzdWJzZWN0aW9uIGZvciB0aGUgdmFsdWUKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lCisJICogQHJldHVybiBhIFN0cmluZyB2YWx1ZSBmcm9tIHRoZSBjb25maWcsIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBmb3VuZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBzZWN0aW9uLCBmaW5hbCBTdHJpbmcgc3Vic2VjdGlvbiwKKwkJCWZpbmFsIFN0cmluZyBuYW1lKSB7CisJCVN0cmluZyByZXN1bHQgPSBkYi5nZXRDb25maWcoKS5nZXRTdHJpbmcoc2VjdGlvbiwgc3Vic2VjdGlvbiwgbmFtZSk7CisJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJcmVzdWx0ID0gZGVsZWdhdGUuZ2V0U3RyaW5nKHNlY3Rpb24sIHN1YnNlY3Rpb24sIG5hbWUpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBlMjIxOTEzLi4xMmI2ODhkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcsIE1hcmt1cyBEdWZ0IDxtYXJrdXMuZHVmdEBzc2ktc2NoYWVmZXIuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjIgTWFya3VzIER1ZnQgPG1hcmt1cy5kdWZ0QHNzaS1zY2hhZWZlci5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTM5LDEyICszOSwxMiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuSHR0cENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkh0dHBTdXBwb3J0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5Tc2hTdXBwb3J0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKIAogLyoqCiAgKiBQcm92aWRlcyBtZWFucyB0byBnZXQgYSB2YWxpZCBMRlMgY29ubmVjdGlvbiBmb3IgYSBnaXZlbiByZXBvc2l0b3J5LgogICovCiBwdWJsaWMgY2xhc3MgTGZzQ29ubmVjdGlvbkZhY3RvcnkgewotCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNTSF9BVVRIX1RJTUVPVVRfU0VDT05EUyA9IDMwOwogCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUVfSFRUUFMgPSAiaHR0cHMiOyAvLyROT04tTkxTLTEkCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNRV9TU0ggPSAic3NoIjsgLy8kTk9OLU5MUy0xJApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWMgY2xhc3MgTGZzQ29ubmVjdGlvbkZhY3RvcnkgewogCSAqICAgICAgICAgICAgYmUgdXNlZCBmb3IKIAkgKiBAcGFyYW0gcHVycG9zZQogCSAqICAgICAgICAgICAgdGhlIGFjdGlvbiwgZS5nLiBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQKLQkgKiBAcmV0dXJuIHRoZSB1cmwgZm9yIHRoZSBsZnMgc2VydmVyLiBlLmcuCisJICogQHJldHVybiB0aGUgY29ubmVjdGlvbiBmb3IgdGhlIGxmcyBzZXJ2ZXIuIGUuZy4KIAkgKiAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMuZ2l0L2luZm8vbGZzIgogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKi8KQEAgLTkyLDEzICs5MiwzMCBAQCBwdWJsaWMgc3RhdGljIEh0dHBDb25uZWN0aW9uIGdldExmc0Nvbm5lY3Rpb24oUmVwb3NpdG9yeSBkYiwgU3RyaW5nIG1ldGhvZCwKIAkJcmV0dXJuIGNvbm5lY3Rpb247CiAJfQogCisJLyoqCisJICogR2V0IExGUyBTZXJ2ZXIgVVJMLgorCSAqCisJICogQHBhcmFtIGRiCisJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSB0byB3b3JrIHdpdGgKKwkgKiBAcGFyYW0gcHVycG9zZQorCSAqICAgICAgICAgICAgdGhlIGFjdGlvbiwgZS5nLiBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQKKwkgKiBAcGFyYW0gYWRkaXRpb25hbEhlYWRlcnMKKwkgKiAgICAgICAgICAgIGFkZGl0aW9uYWwgaGVhZGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gTEZTIHNlcnZlcgorCSAqIEByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIExGUyBzZXJ2ZXIuIGUuZy4KKwkgKiAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMuZ2l0L2luZm8vbGZzIgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgTEZTIGNvbmZpZyBpcyBpbnZhbGlkIG9yIGNhbm5vdCBiZSBhY2Nlc3NlZAorCSAqIEBzZWUgPGEgaHJlZj0KKwkgKiAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0LWxmcy9naXQtbGZzL2Jsb2IvbWFpbi9kb2NzL2FwaS9zZXJ2ZXItZGlzY292ZXJ5Lm1kIj4KKwkgKiAgICAgIFNlcnZlciBEaXNjb3ZlcnkgZG9jdW1lbnRhdGlvbjwvYT4KKwkgKi8KIAlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TGZzVXJsKFJlcG9zaXRvcnkgZGIsIFN0cmluZyBwdXJwb3NlLAogCQkJTWFwPFN0cmluZywgU3RyaW5nPiBhZGRpdGlvbmFsSGVhZGVycykKLQkJCXRocm93cyBMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIHsKLQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJTGZzQ29uZmlnIGNvbmZpZyA9IG5ldyBMZnNDb25maWcoZGIpOwogCQlTdHJpbmcgbGZzVXJsID0gY29uZmlnLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX1NFQ1RJT05fTEZTLAotCQkJCW51bGwsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMKTsKKwkJCQludWxsLCBDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpOworCiAJCUV4Y2VwdGlvbiBleCA9IG51bGw7CiAJCWlmIChsZnNVcmwgPT0gbnVsbCkgewogCQkJU3RyaW5nIHJlbW90ZVVybCA9IG51bGw7CkBAIC0xMDYsNiArMTIzLDcgQEAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldExmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCQlsZnNVcmwgPSBjb25maWcuZ2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfU0VDVElPTl9MRlMsCiAJCQkJCQlyZW1vdGUsCiAJCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpOworCiAJCQkJLy8gVGhpcyBjb3VsZCBiZSBkb25lIGJldHRlciAobW9yZSBwcmVjaXNlIGxvZ2ljKSwgYnV0IGFjY29yZGluZwogCQkJCS8vIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbGZzL2dpdC1sZnMvaXNzdWVzLzE3NTkgZ2l0LWxmcwogCQkJCS8vIGdlbmVyYWxseSBvbmx5IHN1cHBvcnRzICdvcmlnaW4nIGluIGFuIGludGVncmF0ZWQgd29ya2Zsb3cuCkBAIC0xMjUsOCArMTQzLDYgQEAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldExmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCQkJCXwgQ29tbWFuZEZhaWxlZEV4Y2VwdGlvbiBlKSB7CiAJCQkJCWV4ID0gZTsKIAkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWxmc1VybCA9IGxmc1VybCArIFByb3RvY29sLklORk9fTEZTX0VORFBPSU5UOwogCQkJfQogCQl9CiAJCWlmIChsZnNVcmwgPT0gbnVsbCkgewpAQCAtMTQ5LDcgKzE2NSw4IEBAIHByaXZhdGUgc3RhdGljIFN0cmluZyBkaXNjb3Zlckxmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCWFkZGl0aW9uYWxIZWFkZXJzLnB1dEFsbChhY3Rpb24uaGVhZGVyKTsKIAkJCXJldHVybiBhY3Rpb24uaHJlZjsKIAkJfQotCQlyZXR1cm4gcmVtb3RlVXJsICsgUHJvdG9jb2wuSU5GT19MRlNfRU5EUE9JTlQ7CisJCXJldHVybiBTdHJpbmdVdGlscy5uYW1lV2l0aERvdEdpdChyZW1vdGVVcmwpCisJCQkJKyBQcm90b2NvbC5JTkZPX0xGU19FTkRQT0lOVDsKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyBQcm90b2NvbC5FeHBpcmluZ0FjdGlvbiBnZXRTc2hBdXRoZW50aWNhdGlvbigKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5qYXZhCmluZGV4IDFjYTM3YTkuLjA2MjM0YzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQuamF2YQpAQCAtMjgsMjEgKzI4LDIyIEBAIHB1YmxpYyBzdGF0aWMgTGZzVGV4dCBnZXQoKSB7CiAKIAkvLyBAZm9ybWF0dGVyOm9mZgogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ycnVwdExvbmdPYmplY3Q7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBpbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg7CisJLyoqKi8gcHVibGljIFN0cmluZyBkb3RMZnNDb25maWdSZWFkRmFpbGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5jb25zaXN0ZW50Q29udGVudExlbmd0aDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGluY29uc2lzdGVudE1lZGlhZmlsZUxlbmd0aDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGluY29ycmVjdExPTkdfT0JKRUNUX0lEX0xFTkdUSDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRMb25nSWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkTG9uZ0lkTGVuZ3RoOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgbGZzVW5hdmFpbGFibGU7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBwcm90b2NvbEVycm9yOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgcmVxdWlyZWRIYXNoRnVuY3Rpb25Ob3RBdmFpbGFibGU7Ci0JLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5Tm90Rm91bmQ7Ci0JLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5UmVhZE9ubHk7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF0aG9yaXplZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGxmc0ZhaWxlZFRvR2V0UmVwb3NpdG9yeTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGxmc05vRG93bmxvYWRVcmw7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBzZXJ2ZXJGYWlsdXJlOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgd3JvbmdBbW91dE9mRGF0YVJlY2VpdmVkOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgdXNlckNvbmZpZ0ludmFsaWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF1dGhvcml6ZWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF2YWlsYWJsZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIG1pc3NpbmdMb2NhbE9iamVjdDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHByb3RvY29sRXJyb3I7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5Tm90Rm91bmQ7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5UmVhZE9ubHk7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHNlcnZlckZhaWx1cmU7CisJLyoqKi8gcHVibGljIFN0cmluZyB1c2VyQ29uZmlnSW52YWxpZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHdyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQ7CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Db25zdGFudHMuamF2YQppbmRleCAzMjEyYTYzLi45YjQxZWMzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQ29uc3RhbnRzLmphdmEKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25zdGFudHMgewogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRklMVEVSX0RSSVZFUl9QUkVGSVggPSAibGZzLyI7CiAKIAkvKioKKwkgKiBDb25maWcgZmlsZSBuYW1lIGZvciBsZnMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVF9MRlNfQ09ORklHID0gIi5sZnNjb25maWciOworCisJLyoqCiAJICogQ3JlYXRlIGEgbmV3IGRpZ2VzdCBmdW5jdGlvbiBmb3Igb2JqZWN0cy4KIAkgKgogCSAqIEByZXR1cm4gYSBuZXcgZGlnZXN0IG9iamVjdC4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBjYzFiZjg1Li5jZDIyZTI0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0IgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKaW5kZXggODc0YjI3NC4uNTRmZWI5ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBiZTAyNjYyLi4yMDYxOTQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTIzLDcgKzIzLDcgQEAKICAgIDwvdXJsPgogCiAgICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwKaW5kZXggMjkwOWU4MC4uNzYwOTAzZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCA4OTM3YTgzLi5lODk5YWQ1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTIzLDcgKzIzLDcgQEAKICAgIDwvdXJsPgogCiAgICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCmluZGV4IDIyOTJjMmUuLmI3MjVkZmYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDZlZWU3Y2QuLjk5MDczZTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMjQsNyArMjQsNyBAQAogCiAgICA8cmVxdWlyZXM+CiAgICAgICA8aW1wb3J0IHBsdWdpbj0iY29tLmpjcmFmdC5qc2NoIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCmluZGV4IGRjNDE1OWIuLjM1NjZkYmIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZjBhNDg4NC4uYzA0MDUxYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LmxmcyIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwKaW5kZXggZTM0NGMxOS4uNTAzMzhhNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IGY1ODg5ZTUuLjM5MzlmNTEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5wZ20iCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMzUsOSArMzUsOSBAQAogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjEuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sCmluZGV4IGFlOTU3MDQuLjRiMGUyNmEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCmluZGV4IGUxMmU1OTkuLjljY2YzOWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZDVkMTU1NC4uZDNlNjYyYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwKaW5kZXggYTIwNjQ1ZS4uZDhiNWRlMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggYWU2MmZhMC4uZTAzOTY0NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvcG9tLnhtbAppbmRleCA2ZjEyYWZhLi41OTFiNDQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZGY0MmU5My4uM2RmNGE5MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5zc2guanNjaCIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbAppbmRleCAzN2FkYTVkLi5lNDYxYmZmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZDMxY2QzNy4uNWQ2MWVlZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNCArMiw0IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogSkdpdCBUYXJnZXQgUGxhdGZvcm0gQnVuZGxlCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnRhcmdldAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50YXJnZXQKaW5kZXggOTEzNzBjYy4uNGU0MDIzMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xNyIgc2VxdWVuY2VOdW1iZXI9IjE2NDEzOTM5NTQiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTciIHNlcXVlbmNlTnVtYmVyPSIxNjQ2MjU2NjUzIj4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJqYWthcnRhLnNlcnZsZXQtYXBpIiB2ZXJzaW9uPSI0LjAuMCIvPgpAQCAtMjMsOCArMjMsOCBAQAogICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTEwLjAueCIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9qZXR0eS8xMC4wLjYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanpsaWIiIHZlcnNpb249IjEuMS4xLnYyMDEyMDUxMDIzMDUiLz4KQEAgLTUxLDIyICs1MSwyMiBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSIgdmVyc2lvbj0iMS4yLjAudjIwMTgwNDA5LTE1MDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0ai5zb3VyY2UiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LnNvdXJjZSIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QuY29yZSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNDIwLTE1MTkiLz4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5zaW1wbGUuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAwMjA0LTIxNTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjExMjEzMTczODEzL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMjAzMDIxNzIyMzMvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudHBkCmluZGV4IGMyYjEzY2MuLmRiYjQ1MGEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE3IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIwLTA5LyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50YXJnZXQKaW5kZXggMjgyMDRmNS4uMTYyODIxNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOCIgc2VxdWVuY2VOdW1iZXI9IjE2NDEzOTQxMjIiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTgiIHNlcXVlbmNlTnVtYmVyPSIxNjQ2MjU2NjUzIj4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJqYWthcnRhLnNlcnZsZXQtYXBpIiB2ZXJzaW9uPSI0LjAuMCIvPgpAQCAtMjMsOCArMjMsOCBAQAogICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTEwLjAueCIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9qZXR0eS8xMC4wLjYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanpsaWIiIHZlcnNpb249IjEuMS4xLnYyMDEyMDUxMDIzMDUiLz4KQEAgLTUxLDIyICs1MSwyMiBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSIgdmVyc2lvbj0iMS4yLjAudjIwMTgwNDA5LTE1MDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0ai5zb3VyY2UiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LnNvdXJjZSIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QuY29yZSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNDIwLTE1MTkiLz4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5zaW1wbGUuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAwMjA0LTIxNTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjExMjEzMTczODEzL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMjAzMDIxNzIyMzMvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudHBkCmluZGV4IGZmNjc0MWQuLjkxMWM2N2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE4IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIwLTEyLyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50YXJnZXQKaW5kZXggMjBiMDUyOS4uYWIxOGY3YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOS1zdGFnaW5nIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE0MSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOS1zdGFnaW5nIiBzZXF1ZW5jZU51bWJlcj0iMTY0NjI1NjY1MyI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iamFrYXJ0YS5zZXJ2bGV0LWFwaSIgdmVyc2lvbj0iNC4wLjAiLz4KQEAgLTIzLDggKzIzLDggQEAKICAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS0xMC4wLngiIGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvamV0dHkvMTAuMC42LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UiIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UiIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2guc291cmNlIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0Lmp6bGliIiB2ZXJzaW9uPSIxLjEuMS52MjAxMjA1MTAyMzA1Ii8+CkBAIC01MSwyMiArNTEsMjIgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5zb3VyY2UiIHZlcnNpb249IjEuMi4wLnYyMDE4MDQwOS0xNTAyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50IiB2ZXJzaW9uPSI0LjUuMTMudjIwMjEwMTI4LTIyMjUiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQuc291cmNlIiB2ZXJzaW9uPSI0LjUuMTMudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0aiIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGouc291cmNlIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0IiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5zb3VyY2UiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LmNvcmUiIHZlcnNpb249IjEuMy4wLnYyMDE4MDQyMC0xNTE5Ii8+CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcuc2ltcGxlLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMDIwNC0yMTUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMTIxMzE3MzgxMy9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjIwMzAyMTcyMjMzL3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRwZAppbmRleCA4ZmNhYTQ3Li5mZGI4YjExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50cGQKQEAgLTEsNyArMSw3IEBACiB0YXJnZXQgImpnaXQtNC4xOS1zdGFnaW5nIiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGFnaW5nLzIwMjEtMDMvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRhcmdldAppbmRleCAxNTMzMTRkLi40Yzg0MGRjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMC50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIwIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE1MiI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMCIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMC50cGQKaW5kZXggMzNhZGI3Mi4uMTIwZWU2NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjAiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDYvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRhcmdldAppbmRleCAwN2RlMWFmLi43ZThjZDkxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMS50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIxIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE3MCI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMSIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMS50cGQKaW5kZXggYWRmNjJkNS4uMGVjMmE1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjEiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDkvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRhcmdldAppbmRleCA5N2I1ZmI2Li5iMjI5ZGExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMi50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIyIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE3NyI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMiIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMi50cGQKaW5kZXggMzdjOTNhNy4uZWIxNzIzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjIiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMTIvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzY4OQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDIyMDMwMjE3MjIzMy0yMDIyLTAzLnRwZApAQCAtMCwwICsxLDY5IEBACit0YXJnZXQgIlIyMDIyMDMwMjE3MjIzMyIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKKy8vIHNlZSBodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy8KKworbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5IiB7CisJY29tLmdvb2dsZS5nc29uIFsyLjguOS52MjAyMjAxMTEtMTQwOSwyLjguOS52MjAyMjAxMTEtMTQwOV0KKwljb20uZ29vZ2xlLmdzb24uc291cmNlIFsyLjguOS52MjAyMjAxMTEtMTQwOSwyLjguOS52MjAyMjAxMTEtMTQwOV0KKwljb20uamNyYWZ0LmpzY2ggWzAuMS41NS52MjAxOTA0MDQtMTkwMiwwLjEuNTUudjIwMTkwNDA0LTE5MDJdCisJY29tLmpjcmFmdC5qc2NoLnNvdXJjZSBbMC4xLjU1LnYyMDE5MDQwNC0xOTAyLDAuMS41NS52MjAxOTA0MDQtMTkwMl0KKwljb20uamNyYWZ0Lmp6bGliIFsxLjEuMS52MjAxMjA1MTAyMzA1LDEuMS4xLnYyMDEyMDUxMDIzMDVdCisJY29tLmpjcmFmdC5qemxpYi5zb3VyY2UgWzEuMS4xLnYyMDEyMDUxMDIzMDUsMS4xLjEudjIwMTIwNTEwMjMwNV0KKwljb20uc3VuLmpuYSBbNS44LjAudjIwMjEwNTAzLTAzNDMsNS44LjAudjIwMjEwNTAzLTAzNDNdCisJY29tLnN1bi5qbmEuc291cmNlIFs1LjguMC52MjAyMTA1MDMtMDM0Myw1LjguMC52MjAyMTA1MDMtMDM0M10KKwljb20uc3VuLmpuYS5wbGF0Zm9ybSBbNS44LjAudjIwMjEwNDA2LTEwMDQsNS44LjAudjIwMjEwNDA2LTEwMDRdCisJY29tLnN1bi5qbmEucGxhdGZvcm0uc291cmNlIFs1LjguMC52MjAyMTA0MDYtMTAwNCw1LjguMC52MjAyMTA0MDYtMTAwNF0KKwlqYXZhZXdhaCBbMS4xLjEzLnYyMDIxMTAyOS0wODM5LDEuMS4xMy52MjAyMTEwMjktMDgzOV0KKwlqYXZhZXdhaC5zb3VyY2UgWzEuMS4xMy52MjAyMTEwMjktMDgzOSwxLjEuMTMudjIwMjExMDI5LTA4MzldCisJbmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5IFsxLjkuMC52MjAxODExMDctMTQxMCwxLjkuMC52MjAxODExMDctMTQxMF0KKwluZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHktYWdlbnQgWzEuOS4wLnYyMDE4MTEwNi0xNTM0LDEuOS4wLnYyMDE4MTEwNi0xNTM0XQorCW5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS1hZ2VudC5zb3VyY2UgWzEuOS4wLnYyMDE4MTEwNi0xNTM0LDEuOS4wLnYyMDE4MTEwNi0xNTM0XQorCW5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UgWzEuOS4wLnYyMDE4MTEwNy0xNDEwLDEuOS4wLnYyMDE4MTEwNy0xNDEwXQorCW5ldC5pMnAuY3J5cHRvLmVkZHNhIFswLjMuMC52MjAyMTA5MjMtMTQwMSwwLjMuMC52MjAyMTA5MjMtMTQwMV0KKwluZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UgWzAuMy4wLnYyMDIxMDkyMy0xNDAxLDAuMy4wLnYyMDIxMDkyMy0xNDAxXQorCW9yZy5hcGFjaGUuYW50IFsxLjEwLjEyLnYyMDIxMTEwMi0xNDUyLDEuMTAuMTIudjIwMjExMTAyLTE0NTJdCisJb3JnLmFwYWNoZS5hbnQuc291cmNlIFsxLjEwLjEyLnYyMDIxMTEwMi0xNDUyLDEuMTAuMTIudjIwMjExMTAyLTE0NTJdCisJb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIFsxLjE0LjAudjIwMjAwODE4LTE0MjIsMS4xNC4wLnYyMDIwMDgxOC0xNDIyXQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UgWzEuMTQuMC52MjAyMDA4MTgtMTQyMiwxLjE0LjAudjIwMjAwODE4LTE0MjJdCisJb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIFsxLjIxLjAudjIwMjExMTAzLTIxMDAsMS4yMS4wLnYyMDIxMTEwMy0yMTAwXQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5zb3VyY2UgWzEuMjEuMC52MjAyMTExMDMtMjEwMCwxLjIxLjAudjIwMjExMTAzLTIxMDBdCisJb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcgWzEuMi4wLnYyMDE4MDQwOS0xNTAyLDEuMi4wLnYyMDE4MDQwOS0xNTAyXQorCW9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSBbMS4yLjAudjIwMTgwNDA5LTE1MDIsMS4yLjAudjIwMTgwNDA5LTE1MDJdCisJb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50IFs0LjUuMTMudjIwMjEwMTI4LTIyMjUsNC41LjEzLnYyMDIxMDEyOC0yMjI1XQorCW9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UgWzQuNS4xMy52MjAyMTAxMjgtMjIyNSw0LjUuMTMudjIwMjEwMTI4LTIyMjVdCisJb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSBbNC40LjE1LnYyMDIyMDIwOS0yMzQ1LDQuNC4xNS52MjAyMjAyMDktMjM0NV0KKwlvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSBbNC40LjE1LnYyMDIyMDIwOS0yMzQ1LDQuNC4xNS52MjAyMjAyMDktMjM0NV0KKwlvcmcuYXBhY2hlLnNzaGQub3NnaSBbMi44LjAudjIwMjExMjI3LTE3NTAsMi44LjAudjIwMjExMjI3LTE3NTBdCisJb3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIFsyLjguMC52MjAyMTEyMjctMTc1MCwyLjguMC52MjAyMTEyMjctMTc1MF0KKwlvcmcuYXBhY2hlLnNzaGQuc2Z0cCBbMi44LjAudjIwMjExMjI3LTE3NTAsMi44LjAudjIwMjExMjI3LTE3NTBdCisJb3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIFsyLjguMC52MjAyMTEyMjctMTc1MCwyLjguMC52MjAyMTEyMjctMTc1MF0KKwlvcmcuYXNzZXJ0aiBbMy4yMC4yLnYyMDIxMDcwNi0xMTA0LDMuMjAuMi52MjAyMTA3MDYtMTEwNF0KKwlvcmcuYXNzZXJ0ai5zb3VyY2UgWzMuMjAuMi52MjAyMTA3MDYtMTEwNCwzLjIwLjIudjIwMjEwNzA2LTExMDRdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BnIFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UgWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BraXggWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSBbMS43MC4wLnYyMDIyMDEwNS0xNTIyLDEuNzAuMC52MjAyMjAxMDUtMTUyMl0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCBbMS43MC4wLnYyMDIyMDEwNS0xNTIyLDEuNzAuMC52MjAyMjAxMDUtMTUyMl0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UgWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmhhbWNyZXN0IFsyLjIuMC52MjAyMTA3MTEtMDgyMSwyLjIuMC52MjAyMTA3MTEtMDgyMV0KKwlvcmcuaGFtY3Jlc3Quc291cmNlIFsyLjIuMC52MjAyMTA3MTEtMDgyMSwyLjIuMC52MjAyMTA3MTEtMDgyMV0KKwlvcmcuaGFtY3Jlc3QuY29yZSBbMS4zLjAudjIwMTgwNDIwLTE1MTksMS4zLjAudjIwMTgwNDIwLTE1MTldCisJb3JnLmhhbWNyZXN0LmNvcmUuc291cmNlIFsxLjMuMC52MjAxODA0MjAtMTUxOSwxLjMuMC52MjAxODA0MjAtMTUxOV0KKwlvcmcuaGFtY3Jlc3QubGlicmFyeSBbMS4zLjAudjIwMTgwNTI0LTIyNDYsMS4zLjAudjIwMTgwNTI0LTIyNDZdCisJb3JnLmhhbWNyZXN0LmxpYnJhcnkuc291cmNlIFsxLjMuMC52MjAxODA1MjQtMjI0NiwxLjMuMC52MjAxODA1MjQtMjI0Nl0KKwlvcmcuanVuaXQgWzQuMTMuMi52MjAyMTEwMTgtMTk1Niw0LjEzLjIudjIwMjExMDE4LTE5NTZdCisJb3JnLmp1bml0LnNvdXJjZSBbNC4xMy4yLnYyMDIxMTAxOC0xOTU2LDQuMTMuMi52MjAyMTEwMTgtMTk1Nl0KKwlvcmcua29oc3VrZS5hcmdzNGogWzIuMzMuMC52MjAxNjAzMjMtMjIxOCwyLjMzLjAudjIwMTYwMzIzLTIyMThdCisJb3JnLmtvaHN1a2UuYXJnczRqLnNvdXJjZSBbMi4zMy4wLnYyMDE2MDMyMy0yMjE4LDIuMzMuMC52MjAxNjAzMjMtMjIxOF0KKwlvcmcubW9ja2l0byBbMi4yMy4wLnYyMDIwMDMxMC0xNjQyLDIuMjMuMC52MjAyMDAzMTAtMTY0Ml0KKwlvcmcubW9ja2l0by5zb3VyY2UgWzIuMjMuMC52MjAyMDAzMTAtMTY0MiwyLjIzLjAudjIwMjAwMzEwLTE2NDJdCisJb3JnLm9iamVuZXNpcyBbMi42LjAudjIwMTgwNDIwLTE1MTksMi42LjAudjIwMTgwNDIwLTE1MTldCisJb3JnLm9iamVuZXNpcy5zb3VyY2UgWzIuNi4wLnYyMDE4MDQyMC0xNTE5LDIuNi4wLnYyMDE4MDQyMC0xNTE5XQorCW9yZy5zbGY0ai5hcGkgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmFwaS5zb3VyY2UgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmJpbmRpbmcuc2ltcGxlIFsxLjcuMzAudjIwMjAwMjA0LTIxNTAsMS43LjMwLnYyMDIwMDIwNC0yMTUwXQorCW9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnR1a2FhbmkueHogWzEuOS4wLnYyMDIxMDYyNC0xMjU5LDEuOS4wLnYyMDIxMDYyNC0xMjU5XQorCW9yZy50dWthYW5pLnh6LnNvdXJjZSBbMS45LjAudjIwMjEwNjI0LTEyNTksMS45LjAudjIwMjEwNjI0LTEyNTldCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvcG9tLnhtbAppbmRleCA4YmVlMWZjLi4yYTk1MDQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9wb20ueG1sCmluZGV4IDgwYTY0YmQuLmI2NTA1OTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKICAgPG5hbWU+SkdpdCBUeWNobyBQYXJlbnQ8L25hbWU+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhZjAwYjBhLi5mNWM0ZGU0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMjggKzMsMzAgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjEuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbAppbmRleCBjZDJiYjYzLi5jODI0Nzg4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKaW5kZXggNGJhZDczYi4uYzc4NTQ0MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKQEAgLTg5LDYgKzg5LDMxIEBAIHB1YmxpYyB2b2lkIHRlc3REZXNjcmliZUNvbW1pdE1hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmVDb21taXRNYXRjaEFiYnJldigpIHRocm93cyBFeGNlcHRpb24geworCQlpbml0aWFsQ29tbWl0QW5kVGFnKCk7CisJCXNlY29uZENvbW1pdCgpOworCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyAidjEuMC0xLWc1NmY2Y2ViZGYzZjUiLCAiIiB9LAorCQkJCWV4ZWN1dGUoImdpdCBkZXNjcmliZSAtLWFiYnJldiAxMiAtLW1hdGNoIHYxLioiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmVDb21taXRNYXRjaEFiYnJldk1pbigpIHRocm93cyBFeGNlcHRpb24geworCQlpbml0aWFsQ29tbWl0QW5kVGFnKCk7CisJCXNlY29uZENvbW1pdCgpOworCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyAidjEuMC0xLWc1NmY2IiwgIiIgfSwKKwkJCQlleGVjdXRlKCJnaXQgZGVzY3JpYmUgLS1hYmJyZXYgLTUgLS1tYXRjaCB2MS4qIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlc2NyaWJlQ29tbWl0TWF0Y2hBYmJyZXZNYXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJaW5pdGlhbENvbW1pdEFuZFRhZygpOworCQlzZWNvbmRDb21taXQoKTsKKwkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKKwkJCQkidjEuMC0xLWc1NmY2Y2ViZGYzZjVjZWVlY2Q4MDMzNjVhYmYwOTk2ZmIxZmEwMDZkIiwgIiIgfSwKKwkJCQlleGVjdXRlKCJnaXQgZGVzY3JpYmUgLS1hYmJyZXYgNTAgLS1tYXRjaCB2MS4qIikpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdERlc2NyaWJlQ29tbWl0TWF0Y2gyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWluaXRpYWxDb21taXRBbmRUYWcoKTsKIAkJc2Vjb25kQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0RpZmZUb29sVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbFRlc3QuamF2YQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgU2ltZW9uIEFuZHJlZXYgPHNpbWVvbi5kYW5haWxvdi5hbmRyZWV2QGdtYWlsLmNvbT4gYW5kIG90aGVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sLkNvbW1hbmRMaW5lRGlmZlRvb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ0xJUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdC5DbWRMaW5lUGFyc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdC5TdWJjb21tYW5kSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLkFyZ3VtZW50OworCisvKioKKyAqIFRlc3RpbmcgdGhlIHtAY29kZSBkaWZmdG9vbH0gY29tbWFuZC4KKyAqLworcHVibGljIGNsYXNzIERpZmZUb29sVGVzdCBleHRlbmRzIENMSVJlcG9zaXRvcnlUZXN0Q2FzZSB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBHaXRDbGlKR2l0V3JhcHBlclBhcnNlciB7CisJCUBBcmd1bWVudChpbmRleCA9IDAsIG1ldGFWYXIgPSAibWV0YVZhcl9jb21tYW5kIiwgcmVxdWlyZWQgPSB0cnVlLCBoYW5kbGVyID0gU3ViY29tbWFuZEhhbmRsZXIuY2xhc3MpCisJCVRleHRCdWlsdGluIHN1YmNvbW1hbmQ7CisKKwkJQEFyZ3VtZW50KGluZGV4ID0gMSwgbWV0YVZhciA9ICJtZXRhVmFyX2FyZyIpCisJCUxpc3Q8U3RyaW5nPiBhcmd1bWVudHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwl9CisKKwlwcml2YXRlIFN0cmluZ1tdIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoU3RyaW5nLi4uIGFyZ3MpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQ0xJR2l0Q29tbWFuZC5SZXN1bHQgcmVzdWx0ID0gbmV3IENMSUdpdENvbW1hbmQuUmVzdWx0KCk7CisKKwkJR2l0Q2xpSkdpdFdyYXBwZXJQYXJzZXIgYmVhbiA9IG5ldyBHaXRDbGlKR2l0V3JhcHBlclBhcnNlcigpOworCQlDbWRMaW5lUGFyc2VyIGNscCA9IG5ldyBDbWRMaW5lUGFyc2VyKGJlYW4pOworCQljbHAucGFyc2VBcmd1bWVudChhcmdzKTsKKworCQlUZXh0QnVpbHRpbiBjbWQgPSBiZWFuLnN1YmNvbW1hbmQ7CisJCWNtZC5pbml0UmF3KGRiLCBudWxsLCBudWxsLCByZXN1bHQub3V0LCByZXN1bHQuZXJyKTsKKwkJY21kLmV4ZWN1dGUoYmVhbi5hcmd1bWVudHMudG9BcnJheShuZXcgU3RyaW5nW2JlYW4uYXJndW1lbnRzLnNpemUoKV0pKTsKKwkJaWYgKGNtZC5nZXRPdXRwdXRXcml0ZXIoKSAhPSBudWxsKSB7CisJCQljbWQuZ2V0T3V0cHV0V3JpdGVyKCkuZmx1c2goKTsKKwkJfQorCQlpZiAoY21kLmdldEVycm9yV3JpdGVyKCkgIT0gbnVsbCkgeworCQkJY21kLmdldEVycm9yV3JpdGVyKCkuZmx1c2goKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0Lm91dExpbmVzKCkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKKwl9CisKKwlwcml2YXRlIEdpdCBnaXQ7CisKKwlAT3ZlcnJpZGUKKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJZ2l0ID0gbmV3IEdpdChkYik7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUb29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsKKwkJCQkiLS10b29sIiwKKwkJCQkiLXQiLAorCQl9OworCisJCWZvciAoU3RyaW5nIG9wdGlvbiA6IG9wdGlvbnMpIHsKKwkJCWFzc2VydEFycmF5T2ZMaW5lc0VxdWFscygiSW5jb3JyZWN0IG91dHB1dCBmb3Igb3B0aW9uOiAiICsgb3B0aW9uLAorCQkJCQlleHBlY3RlZE91dHB1dCwKKwkJCQkJcnVuQW5kQ2FwdHVyZVVzaW5nSW5pdFJhdygiZGlmZnRvb2wiLCBvcHRpb24sCisJCQkJCQkJInNvbWVfdG9vbCIpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvb2xUcnVzdEV4aXRDb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsgIi0tdG9vbCIsICItdCIsIH07CisKKwkJZm9yIChTdHJpbmcgb3B0aW9uIDogb3B0aW9ucykgeworCQkJYXNzZXJ0QXJyYXlPZkxpbmVzRXF1YWxzKCJJbmNvcnJlY3Qgb3V0cHV0IGZvciBvcHRpb246ICIgKyBvcHRpb24sCisJCQkJCWV4cGVjdGVkT3V0cHV0LCBydW5BbmRDYXB0dXJlVXNpbmdJbml0UmF3KCJkaWZmdG9vbCIsCisJCQkJCQkJIi0tdHJ1c3QtZXhpdC1jb2RlIiwgb3B0aW9uLCAic29tZV90b29sIikpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9vbE5vR3VpTm9Qcm9tcHROb1RydXN0RXhpdGNvZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGNyZWF0ZVVuc3RhZ2VkQ2hhbmdlcygpOworCQlMaXN0PERpZmZFbnRyeT4gY2hhbmdlcyA9IGdldFJlcG9zaXRvcnlDaGFuZ2VzKGNvbW1pdCk7CisJCVN0cmluZ1tdIGV4cGVjdGVkT3V0cHV0ID0gZ2V0RXhwZWN0ZWREaWZmVG9vbE91dHB1dChjaGFuZ2VzKTsKKworCQlTdHJpbmdbXSBvcHRpb25zID0geyAiLS10b29sIiwgIi10IiwgfTsKKworCQlmb3IgKFN0cmluZyBvcHRpb24gOiBvcHRpb25zKSB7CisJCQlhc3NlcnRBcnJheU9mTGluZXNFcXVhbHMoIkluY29ycmVjdCBvdXRwdXQgZm9yIG9wdGlvbjogIiArIG9wdGlvbiwKKwkJCQkJZXhwZWN0ZWRPdXRwdXQsIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoImRpZmZ0b29sIiwKKwkJCQkJCQkiLS1uby1ndWkiLCAiLS1uby1wcm9tcHQiLCAiLS1uby10cnVzdC1leGl0LWNvZGUiLAorCQkJCQkJCW9wdGlvbiwgInNvbWVfdG9vbCIpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvb2xDYWNoZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGNyZWF0ZVN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsgIi0tY2FjaGVkIiwgIi0tc3RhZ2VkIiwgfTsKKworCQlmb3IgKFN0cmluZyBvcHRpb24gOiBvcHRpb25zKSB7CisJCQlhc3NlcnRBcnJheU9mTGluZXNFcXVhbHMoIkluY29ycmVjdCBvdXRwdXQgZm9yIG9wdGlvbjogIiArIG9wdGlvbiwKKwkJCQkJZXhwZWN0ZWRPdXRwdXQsIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoImRpZmZ0b29sIiwKKwkJCQkJCQlvcHRpb24sICItLXRvb2wiLCAic29tZV90b29sIikpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9vbEhlbHAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQ29tbWFuZExpbmVEaWZmVG9vbFtdIGRlZmF1bHRUb29scyA9IENvbW1hbmRMaW5lRGlmZlRvb2wudmFsdWVzKCk7CisJCUxpc3Q8U3RyaW5nPiBleHBlY3RlZE91dHB1dCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlleHBlY3RlZE91dHB1dC5hZGQoImdpdCBkaWZmdG9vbCAtLXRvb2w9PHRvb2w+IG1heSBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Iik7CisJCWZvciAoQ29tbWFuZExpbmVEaWZmVG9vbCBkZWZhdWx0VG9vbCA6IGRlZmF1bHRUb29scykgeworCQkJU3RyaW5nIHRvb2xOYW1lID0gZGVmYXVsdFRvb2wubmFtZSgpOworCQkJZXhwZWN0ZWRPdXRwdXQuYWRkKHRvb2xOYW1lKTsKKwkJfQorCQlTdHJpbmdbXSB1c2VyRGVmaW5lZFRvb2xzSGVscCA9IHsKKwkJCQkidXNlci1kZWZpbmVkOiIsCisJCQkJIlRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6IiwKKwkJCQkiU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkIiwKKwkJCQkiZW52aXJvbm1lbnQuIElmIHJ1biBpbiBhIHRlcm1pbmFsLW9ubHkgc2Vzc2lvbiwgdGhleSB3aWxsIGZhaWwuIiwKKwkJfTsKKwkJZXhwZWN0ZWRPdXRwdXQuYWRkQWxsKEFycmF5cy5hc0xpc3QodXNlckRlZmluZWRUb29sc0hlbHApKTsKKworCQlTdHJpbmcgb3B0aW9uID0gIi0tdG9vbC1oZWxwIjsKKwkJYXNzZXJ0QXJyYXlPZkxpbmVzRXF1YWxzKCJJbmNvcnJlY3Qgb3V0cHV0IGZvciBvcHRpb246ICIgKyBvcHRpb24sCisJCQkJZXhwZWN0ZWRPdXRwdXQudG9BcnJheShuZXcgU3RyaW5nWzBdKSwgcnVuQW5kQ2FwdHVyZVVzaW5nSW5pdFJhdygiZGlmZnRvb2wiLCBvcHRpb24pKTsKKwl9CisKKwlwcml2YXRlIFJldkNvbW1pdCBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoImEiLCAiSGVsbG8gd29ybGQgYSIpOworCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJIZWxsbyB3b3JsZCBiIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJmaWxlcyBhICYgYiIpLmNhbGwoKTsKKwkJd3JpdGVUcmFzaEZpbGUoImEiLCAiTmV3IEhlbGxvIHdvcmxkIGEiKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIiLCAiTmV3IEhlbGxvIHdvcmxkIGIiKTsKKwkJcmV0dXJuIGNvbW1pdDsKKwl9CisKKwlwcml2YXRlIFJldkNvbW1pdCBjcmVhdGVTdGFnZWRDaGFuZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlyZXR1cm4gY29tbWl0OworCX0KKworCXByaXZhdGUgTGlzdDxEaWZmRW50cnk+IGdldFJlcG9zaXRvcnlDaGFuZ2VzKFJldkNvbW1pdCBjb21taXQpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOworCQl0dy5hZGRUcmVlKGNvbW1pdC5nZXRUcmVlKCkpOworCQlGaWxlVHJlZUl0ZXJhdG9yIG1vZGlmaWVkVHJlZSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKTsKKwkJdHcuYWRkVHJlZShtb2RpZmllZFRyZWUpOworCQlMaXN0PERpZmZFbnRyeT4gY2hhbmdlcyA9IERpZmZFbnRyeS5zY2FuKHR3KTsKKwkJcmV0dXJuIGNoYW5nZXM7CisJfQorCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXRFeHBlY3RlZERpZmZUb29sT3V0cHV0KExpc3Q8RGlmZkVudHJ5PiBjaGFuZ2VzKSB7CisJCVN0cmluZ1tdIGV4cGVjdGVkVG9vbE91dHB1dCA9IG5ldyBTdHJpbmdbY2hhbmdlcy5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZXMuc2l6ZSgpOyArK2kpIHsKKwkJCURpZmZFbnRyeSBjaGFuZ2UgPSBjaGFuZ2VzLmdldChpKTsKKwkJCVN0cmluZyBuZXdQYXRoID0gY2hhbmdlLmdldE5ld1BhdGgoKTsKKwkJCVN0cmluZyBvbGRQYXRoID0gY2hhbmdlLmdldE9sZFBhdGgoKTsKKwkJCVN0cmluZyBuZXdJZE5hbWUgPSBjaGFuZ2UuZ2V0TmV3SWQoKS5uYW1lKCk7CisJCQlTdHJpbmcgb2xkSWROYW1lID0gY2hhbmdlLmdldE9sZElkKCkubmFtZSgpOworCQkJU3RyaW5nIGV4cGVjdGVkTGluZSA9ICJNXHQiICsgbmV3UGF0aCArICIgKCIgKyBuZXdJZE5hbWUgKyAiKSIKKwkJCQkJKyAiXHQiICsgb2xkUGF0aCArICIgKCIgKyBvbGRJZE5hbWUgKyAiKSI7CisJCQlleHBlY3RlZFRvb2xPdXRwdXRbaV0gPSBleHBlY3RlZExpbmU7CisJCX0KKwkJcmV0dXJuIGV4cGVjdGVkVG9vbE91dHB1dDsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEFycmF5T2ZMaW5lc0VxdWFscyhTdHJpbmcgZmFpbE1lc3NhZ2UsCisJCQlTdHJpbmdbXSBleHBlY3RlZCwgU3RyaW5nW10gYWN0dWFsKSB7CisJCWFzc2VydEVxdWFscyhmYWlsTWVzc2FnZSwgdG9TdHJpbmcoZXhwZWN0ZWQpLCB0b1N0cmluZyhhY3R1YWwpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9GZXRjaFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCmluZGV4IDU2NGJkNWYuLjFjNmI3ODMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCkBAIC0zMyw2ICszMyw3IEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKIAogCQlSZXBvc2l0b3J5IHJlbW90ZVJlcG9zaXRvcnkgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZW1vdGVSZXBvc2l0b3J5KTsKIAkJcmVtb3RlR2l0ID0gbmV3IEdpdChyZW1vdGVSZXBvc2l0b3J5KTsKIAogCQkvLyBzZXR1cCB0aGUgZmlyc3QgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIHRoZSBzZWNvbmQgcmVwb3NpdG9yeQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBmZmFhZmMxLi5lZDk4MGI1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20KIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0xNCw0NyArMTQsNDkgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0O3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuY29tcG9uZW50O3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuczM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2guanNjaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuczM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2guanNjaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcua29oc3VrZS5hcmdzNGo7dmVyc2lvbj0iWzIuMzMuMCwzLjAuMCkiLAogIG9yZy5rb2hzdWtlLmFyZ3M0ai5zcGk7dmVyc2lvbj0iWzIuMzMuMCwzLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5jb25zb2xlO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmNvbnNvbGU7dmVyc2lvbj0iNi4xLjEiOwogIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpLApAQCAtNjYsMTQgKzY4LDE0IEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGksCiAgICBqYXZheC5zd2luZyIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWc7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbywKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLAogICAgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20ub3B0O3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmtvaHN1a2UuYXJnczRqLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggMjYyNjlkNy4uMGE1ZGQ4OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvc2VydmljZXMvb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW4gYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgppbmRleCBlNjQ1MjU1Li44YzQ0NzY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgpAQCAtMTIsNiArMTIsNyBAQAogb3JnLmVjbGlwc2UuamdpdC5wZ20uRGFlbW9uCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5EZXNjcmliZQogb3JnLmVjbGlwc2UuamdpdC5wZ20uRGlmZgorb3JnLmVjbGlwc2UuamdpdC5wZ20uRGlmZlRvb2wKIG9yZy5lY2xpcHNlLmpnaXQucGdtLkRpZmZUcmVlCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5GZXRjaAogb3JnLmVjbGlwc2UuamdpdC5wZ20uR2MKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sCmluZGV4IDA1ZTBiY2MuLmMxODlkYzcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQucGdtPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKaW5kZXggYWUxMGFmMi4uYzM2NDM3NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCkBAIC01OCw2ICs1OCw5IEBACiBkYXRlSW5mbz1EYXRlOiAgIHswfQogZGVsZXRlZEJyYW5jaD1EZWxldGVkIGJyYW5jaCB7MH0KIGRlbGV0ZWRSZW1vdGVCcmFuY2g9RGVsZXRlZCByZW1vdGUgYnJhbmNoIHswfQorZGlmZlRvb2xIZWxwU2V0VG9Gb2xsb3dpbmc9J2dpdCBkaWZmdG9vbCAtLXRvb2w9PHRvb2w+JyBtYXkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuezB9XG5cdHVzZXItZGVmaW5lZDpcbnsxfVxuVGhlIGZvbGxvd2luZyB0b29scyBhcmUgdmFsaWQsIGJ1dCBub3QgY3VycmVudGx5IGF2YWlsYWJsZTpcbnsyfVxuU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkXG5lbnZpcm9ubWVudC4gSWYgcnVuIGluIGEgdGVybWluYWwtb25seSBzZXNzaW9uLCB0aGV5IHdpbGwgZmFpbC4KK2RpZmZUb29sTGF1bmNoPVZpZXdpbmcgKHswfS97MX0pOiAnezJ9J1xuTGF1bmNoICd7M30nIFtZL25dPworZGlmZlRvb2xEaWVkPWV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgezB9CiBkb2VzTm90RXhpc3Q9ezB9IGRvZXMgbm90IGV4aXN0CiBkb250T3ZlcndyaXRlTG9jYWxDaGFuZ2VzPWVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgogZXZlcnl0aGluZ1VwVG9EYXRlPUV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZQpAQCAtMTQ1LDYgKzE0OCw3IEBACiBtZXRhVmFyX3NlY29uZHM9U0VDT05EUwogbWV0YVZhcl9zZXJ2aWNlPVNFUlZJQ0UKIG1ldGFWYXJfdGFnTG9jYWxVc2VyPTxHUEcga2V5IElEPgorbWV0YVZhcl90b29sPVRPT0wKIG1ldGFWYXJfdHJlZWlzaD10cmVlLWlzaAogbWV0YVZhcl91cmlpc2g9dXJpLWlzaAogbWV0YVZhcl91cmw9VVJMCkBAIC0yMjUsNiArMjI5LDcgQEAKIHVuc3VwcG9ydGVkT3BlcmF0aW9uPVVuc3VwcG9ydGVkIG9wZXJhdGlvbjogezB9CiB1bnRyYWNrZWRGaWxlcz1VbnRyYWNrZWQgZmlsZXM6CiB1cGRhdGluZz1VcGRhdGluZyB7MH0uLnsxfQordXNhZ2VfQWJicmV2PUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAod2hpY2ggd2lsbCB2YXJ5IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgd2l0aCBhIGRlZmF1bHQgb2YgNykgb2YgdGhlIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cywgb3IgYXMgbWFueSBkaWdpdHMgYXMgbmVlZGVkIHRvIGZvcm0gYSB1bmlxdWUgb2JqZWN0IG5hbWUuIEFuIDxuPiBvZiAwIHdpbGwgc3VwcHJlc3MgbG9uZyBmb3JtYXQsIG9ubHkgc2hvd2luZyB0aGUgY2xvc2VzdCB0YWcuCiB1c2FnZV9BZ2dyZXNzaXZlPVRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZ2MgdG8gbW9yZSBhZ2dyZXNzaXZlbHkgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkgYXQgdGhlIGV4cGVuc2Ugb2YgdGFraW5nIG11Y2ggbW9yZSB0aW1lCiB1c2FnZV9BbHdheXNGYWxsYmFjaz1TaG93IHVuaXF1ZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2sKIHVzYWdlX2JhcmVDbG9uZT1NYWtlIGEgYmFyZSBHaXQgcmVwb3NpdG9yeS4gVGhhdCBpcywgaW5zdGVhZCBvZiBjcmVhdGluZyBbRElSRUNUT1JZXSBhbmQgcGxhY2luZyB0aGUgYWRtaW5pc3RyYXRpdmUgZmlsZXMgaW4gW0RJUkVDVE9SWV0vLmdpdCwgbWFrZSB0aGUgW0RJUkVDVE9SWV0gaXRzZWxmIHRoZSAkR0lUX0RJUi4KQEAgLTI0OSw2ICsyNTQsOCBAQAogdXNhZ2VfRGlzcGxheVRoZVZlcnNpb25PZkpnaXQ9RGlzcGxheSB0aGUgdmVyc2lvbiBvZiBqZ2l0CiB1c2FnZV9HYz1DbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeQogdXNhZ2VfR2xvZz1WaWV3IGNvbW1pdCBoaXN0b3J5IGFzIGEgZ3JhcGgKK3VzYWdlX0RpZmZHdWlUb29sPVdoZW4gZ2l0LWRpZmZ0b29sIGlzIGludm9rZWQgd2l0aCB0aGUgLWcgb3IgLS1ndWkgb3B0aW9uIHRoZSBkZWZhdWx0IGRpZmYgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZCBkaWZmLmd1aXRvb2wgdmFyaWFibGUgaW5zdGVhZCBvZiBkaWZmLnRvb2wuCit1c2FnZV9ub0d1aT1UaGUgLS1uby1ndWkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIC1nIG9yIC0tZ3VpIHNldHRpbmcuCiB1c2FnZV9JbmRleFBhY2s9QnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZQogdXNhZ2VfTEZTRGlyZWN0b3J5PURpcmVjdG9yeSB0byBzdG9yZSBsYXJnZSBvYmplY3RzCiB1c2FnZV9MRlNQb3J0PVNlcnZlciBodHRwIHBvcnQKQEAgLTI5Niw2ICszMDMsNyBAQAogdXNhZ2VfU3RhdHVzPVNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMKIHVzYWdlX1N0b3BUcmFja2luZ0FGaWxlPVN0b3AgdHJhY2tpbmcgYSBmaWxlCiB1c2FnZV9UZXh0SGFzaEZ1bmN0aW9ucz1TY2FuIHJlcG9zaXRvcnkgdG8gY29tcHV0ZSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zIGZvciBoYXNoIGZ1bmN0aW9ucwordXNhZ2VfVG9vbEZvckRpZmY9VXNlIHRoZSBkaWZmIHRvb2wgc3BlY2lmaWVkIGJ5IDx0b29sPi4gUnVuIGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscCBmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLlxuSWYgYSBkaWZmIHRvb2wgaXMgbm90IHNwZWNpZmllZCwgZ2l0IGRpZmZ0b29sIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRpZmYudG9vbC4KIHVzYWdlX1VwZGF0ZVJlbW90ZVJlcG9zaXRvcnlGcm9tTG9jYWxSZWZzPVVwZGF0ZSByZW1vdGUgcmVwb3NpdG9yeSBmcm9tIGxvY2FsIHJlZnMKIHVzYWdlX1VzZUFsbD1Vc2UgYWxsIHJlZnMgZm91bmQgaW4gcmVmcy8KIHVzYWdlX1VzZVRhZ3M9VXNlIGFueSB0YWcgaW5jbHVkaW5nIGxpZ2h0d2VpZ2h0IHRhZ3MKQEAgLTM0Miw2ICszNTAsNyBAQAogdXNhZ2VfZGF0ZT1kYXRlIGZvcm1hdCwgb25lIG9mIGRlZmF1bHQsIHJmYywgbG9jYWwsIGlzbywgc2hvcnQsIHJhdyAoYXMgZGVmaW5lZCBieSBnaXQtbG9nKDEpICksIGxvY2FsZSBvciBsb2NhbGVsb2NhbCAoamdpdCBleHRlbnNpb25zKQogdXNhZ2VfZGV0ZWN0UmVuYW1lcz1kZXRlY3QgcmVuYW1lZCBmaWxlcwogdXNhZ2VfZGlmZkFsZ29yaXRobT10aGUgZGlmZiBhbGdvcml0aG0gdG8gdXNlLiBDdXJyZW50bHkgc3VwcG9ydGVkIGFyZTogJ215ZXJzJywgJ2hpc3RvZ3JhbScKK3VzYWdlX0RpZmZUb29sPWdpdCBkaWZmdG9vbCBpcyBhIEdpdCBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBjb21wYXJlIGFuZCBlZGl0IGZpbGVzIGJldHdlZW4gcmV2aXNpb25zIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzLlxuZ2l0IGRpZmZ0b29sIGlzIGEgZnJvbnRlbmQgdG8gZ2l0IGRpZmYgYW5kIGFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhbmQgYXJndW1lbnRzLgogdXNhZ2VfZGlyZWN0b3JpZXNUb0V4cG9ydD1kaXJlY3RvcmllcyB0byBleHBvcnQKIHVzYWdlX2Rpc2FibGVUaGVTZXJ2aWNlSW5BbGxSZXBvc2l0b3JpZXM9ZGlzYWJsZSB0aGUgc2VydmljZSBpbiBhbGwgcmVwb3NpdG9yaWVzCiB1c2FnZV9kaXNwbGF5QUxpc3RPZkFsbFJlZ2lzdGVyZWRKZ2l0Q29tbWFuZHM9RGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgamdpdCBjb21tYW5kcwpAQCAtMzk2LDYgKzQwNSw4IEBACiB1c2FnZV9wZXJmb3JtRnNja1N0eWxlQ2hlY2tzT25SZWNlaXZlPXBlcmZvcm0gZnNjayBzdHlsZSBjaGVja3Mgb24gcmVjZWl2ZQogdXNhZ2VfcG9ydE51bWJlclRvTGlzdGVuT249cG9ydCBudW1iZXIgdG8gbGlzdGVuIG9uCiB1c2FnZV9wcmludE9ubHlCcmFuY2hlc1RoYXRDb250YWluVGhlQ29tbWl0PXByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQKK3VzYWdlX3Byb21wdD1Qcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91cjsgdGhlIG9wdGlvbiBpcyBwcm92aWRlZCB0byBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK3VzYWdlX25vUHJvbXB0PURvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbC4KIHVzYWdlX3BydW5lU3RhbGVUcmFja2luZ1JlZnM9cHJ1bmUgc3RhbGUgdHJhY2tpbmcgcmVmcwogdXNhZ2VfcHVzaFVybHM9cHVzaCBVUkxzIGFyZSBtYW5pcHVsYXRlZAogdXNhZ2VfcXVpZXQ9ZG9uJ3Qgc2hvdyBwcm9ncmVzcyBtZXNzYWdlcwpAQCAtNDIzLDYgKzQzNCw4IEBACiB1c2FnZV9zc2hEcml2ZXI9U2VsZWN0cyB0aGUgYnVpbHQtaW4gc3NoIGxpYnJhcnkgdG8gdXNlLCBKU2NoIG9yIEFwYWNoZSBNSU5BIHNzaGQuCiB1c2FnZV9zeW1ib2xpY1ZlcnNpb25Gb3JUaGVQcm9qZWN0PVN5bWJvbGljIHZlcnNpb24gZm9yIHRoZSBwcm9qZWN0CiB1c2FnZV90YWdzPWZldGNoIGFsbCB0YWdzCit1c2FnZV90cnVzdEV4aXRDb2RlPWdpdC1kaWZmdG9vbCBpbnZva2VzIGEgZGlmZiB0b29sIGluZGl2aWR1YWxseSBvbiBlYWNoIGZpbGUuIEVycm9ycyByZXBvcnRlZCBieSB0aGUgZGlmZiB0b29sIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuIFVzZSAtLXRydXN0LWV4aXQtY29kZSB0byBtYWtlIGdpdC1kaWZmdG9vbCBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZS5cbmdpdC1kaWZmdG9vbCB3aWxsIGZvcndhcmQgdGhlIGV4aXQgY29kZSBvZiB0aGUgaW52b2tlZCB0b29sIHdoZW4gLS10cnVzdC1leGl0LWNvZGUgaXMgdXNlZC4KK3VzYWdlX25vVHJ1c3RFeGl0Q29kZT1UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSAtLXRydXN0LWV4aXQtY29kZSBzZXR0aW5nLgogdXNhZ2Vfbm90YWdzPWRvIG5vdCBmZXRjaCB0YWdzCiB1c2FnZV90YWdBbm5vdGF0ZWQ9Y3JlYXRlIGFuIGFubm90YXRlZCB0YWcsIHVuc2lnbmVkIHVubGVzcyAtcyBvciAtdSBhcmUgZ2l2ZW4sIG9yIGNvbmZpZyB0YWcuZ3BnU2lnbiBpcyB0cnVlCiB1c2FnZV90YWdEZWxldGU9ZGVsZXRlIHRhZwpAQCAtNDMxLDYgKzQ0NCw3IEBACiB1c2FnZV90YWdTaWduPWNyZWF0ZSBhIHNpZ25lZCBhbm5vdGF0ZWQgdGFnCiB1c2FnZV90YWdOb1NpZ249c3VwcHJlc3Mgc2lnbmluZyB0aGUgdGFnCiB1c2FnZV90YWdWZXJpZnk9VmVyaWZ5IHRoZSBHUEcgc2lnbmF0dXJlCit1c2FnZV90b29sSGVscD1QcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggLS10b29sLgogdXNhZ2VfdW50cmFja2VkRmlsZXNNb2RlPXNob3cgdW50cmFja2VkIGZpbGVzCiB1c2FnZV91cGRhdGVSZWY9cmVmZXJlbmNlIHRvIHVwZGF0ZQogdXNhZ2VfdXBkYXRlUmVtb3RlUmVmc0Zyb21Bbm90aGVyUmVwb3NpdG9yeT1VcGRhdGUgcmVtb3RlIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9CbGFtZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKaW5kZXggMmI0OWNmNy4uMWEzYTJmNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuSW50ZWdlci52YWx1ZU9mOwogaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTG9uZy52YWx1ZU9mOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX1NUUklOR19MRU5HVEg7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMTE2LDcgKzExNyw4IEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHsKIAogCQlib29sZWFuIGF1dG9BYmJyZXYgPSBhYmJyZXYgPT0gMDsKIAkJaWYgKGFiYnJldiA9PSAwKSB7Ci0JCQlhYmJyZXYgPSBkYi5nZXRDb25maWcoKS5nZXRJbnQoImNvcmUiLCAiYWJicmV2IiwgNyk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJYWJicmV2ID0gZGIuZ2V0Q29uZmlnKCkuZ2V0SW50KCJjb3JlIiwgImFiYnJldiIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQlPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpOwogCQl9CiAJCWlmICghc2hvd0JsYW5rQm91bmRhcnkpIHsKIAkJCXJvb3QgPSBkYi5nZXRDb25maWcoKS5nZXRCb29sZWFuKCJibGFtZSIsICJibGFua2JvdW5kYXJ5IiwgZmFsc2UpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EZXNjcmliZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKaW5kZXggOGFhMTE5YS4uMTE2ZGIwMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKQEAgLTQ0LDYgKzQ0LDkgQEAgY2xhc3MgRGVzY3JpYmUgZXh0ZW5kcyBUZXh0QnVpbHRpbiB7CiAJQE9wdGlvbihuYW1lID0gIi0tbWF0Y2giLCB1c2FnZSA9ICJ1c2FnZV9NYXRjaCIsIG1ldGFWYXIgPSAibWV0YVZhcl9wYXR0ZXJuIikKIAlwcml2YXRlIExpc3Q8U3RyaW5nPiBwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCisJQE9wdGlvbihuYW1lID0gIi0tYWJicmV2IiwgdXNhZ2UgPSAidXNhZ2VfQWJicmV2IikKKwlwcml2YXRlIEludGVnZXIgYWJicmV2OworCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KIAlAT3ZlcnJpZGUKIAlwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CkBAIC01Nyw2ICs2MCw5IEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHsKIAkJCWNtZC5zZXRUYWdzKHVzZVRhZ3MpOwogCQkJY21kLnNldEFsd2F5cyhhbHdheXMpOwogCQkJY21kLnNldE1hdGNoKHBhdHRlcm5zLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOworCQkJaWYgKGFiYnJldiAhPSBudWxsKSB7CisJCQkJY21kLnNldEFiYnJldihhYmJyZXYuaW50VmFsdWUoKSk7CisJCQl9CiAJCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKIAkJCXRyeSB7CiAJCQkJcmVzdWx0ID0gY21kLmNhbGwoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0RpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ODgxNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbC5qYXZhCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZGb3JtYXR0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkFtYmlndW91c09iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5JbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlJldmlzaW9uU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbC5EaWZmVG9vbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sLkV4dGVybmFsRGlmZlRvb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0UmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuVGV4dFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbC5Cb29sZWFuVHJpU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWwuQ0xJVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQuUGF0aFRyZWVGaWx0ZXJIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuQWJzdHJhY3RUcmVlSXRlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5DYW5vbmljYWxUcmVlUGFyc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5UcmVlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcua29oc3VrZS5hcmdzNGouQXJndW1lbnQ7CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLk9wdGlvbjsKKworQENvbW1hbmQobmFtZSA9ICJkaWZmdG9vbCIsIGNvbW1vbiA9IHRydWUsIHVzYWdlID0gInVzYWdlX0RpZmZUb29sIikKK2NsYXNzIERpZmZUb29sIGV4dGVuZHMgVGV4dEJ1aWx0aW4geworCXByaXZhdGUgRGlmZkZvcm1hdHRlciBkaWZmRm10OworCisJcHJpdmF0ZSBEaWZmVG9vbHMgZGlmZlRvb2xzOworCisJQEFyZ3VtZW50KGluZGV4ID0gMCwgbWV0YVZhciA9ICJtZXRhVmFyX3RyZWVpc2giKQorCXByaXZhdGUgQWJzdHJhY3RUcmVlSXRlcmF0b3Igb2xkVHJlZTsKKworCUBBcmd1bWVudChpbmRleCA9IDEsIG1ldGFWYXIgPSAibWV0YVZhcl90cmVlaXNoIikKKwlwcml2YXRlIEFic3RyYWN0VHJlZUl0ZXJhdG9yIG5ld1RyZWU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS10b29sIiwgYWxpYXNlcyA9IHsKKwkJCSItdCIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3Rvb2wiLCB1c2FnZSA9ICJ1c2FnZV9Ub29sRm9yRGlmZiIpCisJcHJpdmF0ZSBTdHJpbmcgdG9vbE5hbWU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1jYWNoZWQiLCBhbGlhc2VzID0geyAiLS1zdGFnZWQiIH0sIHVzYWdlID0gInVzYWdlX2NhY2hlZCIpCisJcHJpdmF0ZSBib29sZWFuIGNhY2hlZDsKKworCXByaXZhdGUgQm9vbGVhblRyaVN0YXRlIHByb21wdCA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKworCUBPcHRpb24obmFtZSA9ICItLXByb21wdCIsIHVzYWdlID0gInVzYWdlX3Byb21wdCIpCisJdm9pZCBzZXRQcm9tcHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGJvb2xlYW4gb24pIHsKKwkJcHJvbXB0ID0gQm9vbGVhblRyaVN0YXRlLlRSVUU7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tbm8tcHJvbXB0IiwgYWxpYXNlcyA9IHsgIi15IiB9LCB1c2FnZSA9ICJ1c2FnZV9ub1Byb21wdCIpCisJdm9pZCBub1Byb21wdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgYm9vbGVhbiBvbikgeworCQlwcm9tcHQgPSBCb29sZWFuVHJpU3RhdGUuRkFMU0U7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tdG9vbC1oZWxwIiwgdXNhZ2UgPSAidXNhZ2VfdG9vbEhlbHAiKQorCXByaXZhdGUgYm9vbGVhbiB0b29sSGVscDsKKworCXByaXZhdGUgQm9vbGVhblRyaVN0YXRlIGd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKworCUBPcHRpb24obmFtZSA9ICItLWd1aSIsIGFsaWFzZXMgPSB7ICItZyIgfSwgdXNhZ2UgPSAidXNhZ2VfRGlmZkd1aVRvb2wiKQorCXZvaWQgc2V0R3VpKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCWd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCX0KKworCUBPcHRpb24obmFtZSA9ICItLW5vLWd1aSIsIHVzYWdlID0gInVzYWdlX25vR3VpIikKKwl2b2lkIG5vR3VpKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCWd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5GQUxTRTsKKwl9CisKKwlwcml2YXRlIEJvb2xlYW5UcmlTdGF0ZSB0cnVzdEV4aXRDb2RlID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCisJQE9wdGlvbihuYW1lID0gIi0tdHJ1c3QtZXhpdC1jb2RlIiwgdXNhZ2UgPSAidXNhZ2VfdHJ1c3RFeGl0Q29kZSIpCisJdm9pZCBzZXRUcnVzdEV4aXRDb2RlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCXRydXN0RXhpdENvZGUgPSBCb29sZWFuVHJpU3RhdGUuVFJVRTsKKwl9CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1uby10cnVzdC1leGl0LWNvZGUiLCB1c2FnZSA9ICJ1c2FnZV9ub1RydXN0RXhpdENvZGUiKQorCXZvaWQgbm9UcnVzdEV4aXRDb2RlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCXRydXN0RXhpdENvZGUgPSBCb29sZWFuVHJpU3RhdGUuRkFMU0U7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tIiwgbWV0YVZhciA9ICJtZXRhVmFyX3BhdGhzIiwgaGFuZGxlciA9IFBhdGhUcmVlRmlsdGVySGFuZGxlci5jbGFzcykKKwlwcml2YXRlIFRyZWVGaWx0ZXIgcGF0aEZpbHRlciA9IFRyZWVGaWx0ZXIuQUxMOworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdChSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFN0cmluZyBnaXREaXIpIHsKKwkJc3VwZXIuaW5pdChyZXBvc2l0b3J5LCBnaXREaXIpOworCQlkaWZmRm10ID0gbmV3IERpZmZGb3JtYXR0ZXIobmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKG91dHMpKTsKKwkJZGlmZlRvb2xzID0gbmV3IERpZmZUb29scyhyZXBvc2l0b3J5KTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CisJCXRyeSB7CisJCQlpZiAodG9vbEhlbHApIHsKKwkJCQlzaG93VG9vbEhlbHAoKTsKKwkJCX0gZWxzZSB7CisJCQkJYm9vbGVhbiBzaG93UHJvbXB0ID0gZGlmZlRvb2xzLmlzSW50ZXJhY3RpdmUoKTsKKwkJCQlpZiAocHJvbXB0ICE9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVCkgeworCQkJCQlzaG93UHJvbXB0ID0gcHJvbXB0ID09IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCQkJCX0KKwkJCQlTdHJpbmcgdG9vbE5hbWVQcm9tcHQgPSB0b29sTmFtZTsKKwkJCQlpZiAoc2hvd1Byb21wdCkgeworCQkJCQlpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbCh0b29sTmFtZVByb21wdCkpIHsKKwkJCQkJCXRvb2xOYW1lUHJvbXB0ID0gZGlmZlRvb2xzLmdldERlZmF1bHRUb29sTmFtZShndWkpOworCQkJCQl9CisJCQkJfQorCQkJCS8vIGdldCB0aGUgY2hhbmdlZCBmaWxlcworCQkJCUxpc3Q8RGlmZkVudHJ5PiBmaWxlcyA9IGdldEZpbGVzKCk7CisJCQkJaWYgKGZpbGVzLnNpemUoKSA+IDApIHsKKwkJCQkJY29tcGFyZShmaWxlcywgc2hvd1Byb21wdCwgdG9vbE5hbWVQcm9tcHQpOworCQkJCX0KKwkJCX0KKwkJCW91dHcuZmx1c2goKTsKKwkJfSBjYXRjaCAoUmV2aXNpb25TeW50YXhFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBkaWUoZS5nZXRNZXNzYWdlKCksIGUpOworCQl9IGZpbmFsbHkgeworCQkJZGlmZkZtdC5jbG9zZSgpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGNvbXBhcmUoTGlzdDxEaWZmRW50cnk+IGZpbGVzLCBib29sZWFuIHNob3dQcm9tcHQsCisJCQlTdHJpbmcgdG9vbE5hbWVQcm9tcHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoaW50IGZpbGVJbmRleCA9IDA7IGZpbGVJbmRleCA8IGZpbGVzLnNpemUoKTsgZmlsZUluZGV4KyspIHsKKwkJCURpZmZFbnRyeSBlbnQgPSBmaWxlcy5nZXQoZmlsZUluZGV4KTsKKwkJCVN0cmluZyBtZXJnZWRGaWxlUGF0aCA9IGVudC5nZXROZXdQYXRoKCk7CisJCQlpZiAobWVyZ2VkRmlsZVBhdGguZXF1YWxzKERpZmZFbnRyeS5ERVZfTlVMTCkpIHsKKwkJCQltZXJnZWRGaWxlUGF0aCA9IGVudC5nZXRPbGRQYXRoKCk7CisJCQl9CisJCQkvLyBjaGVjayBpZiB1c2VyIHdhbnRzIHRvIGxhdW5jaCBjb21wYXJlCisJCQlib29sZWFuIGxhdW5jaENvbXBhcmUgPSB0cnVlOworCQkJaWYgKHNob3dQcm9tcHQpIHsKKwkJCQlsYXVuY2hDb21wYXJlID0gaXNMYXVuY2hDb21wYXJlKGZpbGVJbmRleCArIDEsIGZpbGVzLnNpemUoKSwKKwkJCQkJCW1lcmdlZEZpbGVQYXRoLCB0b29sTmFtZVByb21wdCk7CisJCQl9CisJCQlpZiAobGF1bmNoQ29tcGFyZSkgeworCQkJCXN3aXRjaCAoZW50LmdldENoYW5nZVR5cGUoKSkgeworCQkJCWNhc2UgTU9ESUZZOgorCQkJCQlvdXR3LnByaW50bG4oIk1cdCIgKyBlbnQuZ2V0TmV3UGF0aCgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrICIgKCIgKyBlbnQuZ2V0TmV3SWQoKS5uYW1lKCkgKyAiKSIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyAiXHQiICsgZW50LmdldE9sZFBhdGgoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJKyAiICgiICsgZW50LmdldE9sZElkKCkubmFtZSgpICsgIikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWludCByZXQgPSBkaWZmVG9vbHMuY29tcGFyZShlbnQuZ2V0TmV3UGF0aCgpLAorCQkJCQkJCWVudC5nZXRPbGRQYXRoKCksIGVudC5nZXROZXdJZCgpLm5hbWUoKSwKKwkJCQkJCQllbnQuZ2V0T2xkSWQoKS5uYW1lKCksIHRvb2xOYW1lLCBwcm9tcHQsIGd1aSwKKwkJCQkJCQl0cnVzdEV4aXRDb2RlKTsKKwkJCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJCQl0aHJvdyBkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJCUNMSVRleHQuZ2V0KCkuZGlmZlRvb2xEaWVkLCBtZXJnZWRGaWxlUGF0aCkpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIGJvb2xlYW4gaXNMYXVuY2hDb21wYXJlKGludCBmaWxlSW5kZXgsIGludCBmaWxlQ291bnQsCisJCQlTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyB0b29sTmFtZVByb21wdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYm9vbGVhbiBsYXVuY2hDb21wYXJlID0gdHJ1ZTsKKwkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkuZGlmZlRvb2xMYXVuY2gsCisJCQkJZmlsZUluZGV4LCBmaWxlQ291bnQsIGZpbGVOYW1lLCB0b29sTmFtZVByb21wdCkpOworCQlvdXR3LmZsdXNoKCk7CisJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKAorCQkJCW5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKKwkJU3RyaW5nIGxpbmUgPSBudWxsOworCQlpZiAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisJCQlpZiAoIWxpbmUuZXF1YWxzSWdub3JlQ2FzZSgiWSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsYXVuY2hDb21wYXJlID0gZmFsc2U7CisJCQl9CisJCX0KKwkJcmV0dXJuIGxhdW5jaENvbXBhcmU7CisJfQorCisJcHJpdmF0ZSB2b2lkIHNob3dUb29sSGVscCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgYXZhaWxhYmxlVG9vbE5hbWVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZm9yIChTdHJpbmcgbmFtZSA6IGRpZmZUb29scy5nZXRBdmFpbGFibGVUb29scygpLmtleVNldCgpKSB7CisJCQlhdmFpbGFibGVUb29sTmFtZXMuYXBwZW5kKFN0cmluZy5mb3JtYXQoIlx0XHQlc1xuIiwgbmFtZSkpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJU3RyaW5nQnVpbGRlciBub3RBdmFpbGFibGVUb29sTmFtZXMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmb3IgKFN0cmluZyBuYW1lIDogZGlmZlRvb2xzLmdldE5vdEF2YWlsYWJsZVRvb2xzKCkua2V5U2V0KCkpIHsKKwkJCW5vdEF2YWlsYWJsZVRvb2xOYW1lcy5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiXHRcdCVzXG4iLCBuYW1lKSk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlTdHJpbmdCdWlsZGVyIHVzZXJUb29sTmFtZXMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiB1c2VyVG9vbHMgPSBkaWZmVG9vbHMKKwkJCQkuZ2V0VXNlckRlZmluZWRUb29scygpOworCQlmb3IgKFN0cmluZyBuYW1lIDogdXNlclRvb2xzLmtleVNldCgpKSB7CisJCQl1c2VyVG9vbE5hbWVzLmFwcGVuZChTdHJpbmcuZm9ybWF0KCJcdFx0JXMuY21kICVzXG4iLCAvLyROT04tTkxTLTEkCisJCQkJCW5hbWUsIHVzZXJUb29scy5nZXQobmFtZSkuZ2V0Q29tbWFuZCgpKSk7CisJCX0KKwkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCUNMSVRleHQuZ2V0KCkuZGlmZlRvb2xIZWxwU2V0VG9Gb2xsb3dpbmcsIGF2YWlsYWJsZVRvb2xOYW1lcywKKwkJCQl1c2VyVG9vbE5hbWVzLCBub3RBdmFpbGFibGVUb29sTmFtZXMpKTsKKwl9CisKKwlwcml2YXRlIExpc3Q8RGlmZkVudHJ5PiBnZXRGaWxlcygpCisJCQl0aHJvd3MgUmV2aXNpb25TeW50YXhFeGNlcHRpb24sIEFtYmlndW91c09iamVjdEV4Y2VwdGlvbiwKKwkJCUluY29ycmVjdE9iamVjdFR5cGVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJZGlmZkZtdC5zZXRSZXBvc2l0b3J5KGRiKTsKKwkJaWYgKGNhY2hlZCkgeworCQkJaWYgKG9sZFRyZWUgPT0gbnVsbCkgeworCQkJCU9iamVjdElkIGhlYWQgPSBkYi5yZXNvbHZlKEhFQUQgKyAiXnt0cmVlfSIpOyAvLyROT04tTkxTLTEkCisJCQkJaWYgKGhlYWQgPT0gbnVsbCkgeworCQkJCQlkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5ub3RBVHJlZSwgSEVBRCkpOworCQkJCX0KKwkJCQlDYW5vbmljYWxUcmVlUGFyc2VyIHAgPSBuZXcgQ2Fub25pY2FsVHJlZVBhcnNlcigpOworCQkJCXRyeSAoT2JqZWN0UmVhZGVyIHJlYWRlciA9IGRiLm5ld09iamVjdFJlYWRlcigpKSB7CisJCQkJCXAucmVzZXQocmVhZGVyLCBoZWFkKTsKKwkJCQl9CisJCQkJb2xkVHJlZSA9IHA7CisJCQl9CisJCQluZXdUcmVlID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQl9IGVsc2UgaWYgKG9sZFRyZWUgPT0gbnVsbCkgeworCQkJb2xkVHJlZSA9IG5ldyBEaXJDYWNoZUl0ZXJhdG9yKGRiLnJlYWREaXJDYWNoZSgpKTsKKwkJCW5ld1RyZWUgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCX0gZWxzZSBpZiAobmV3VHJlZSA9PSBudWxsKSB7CisJCQluZXdUcmVlID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOworCQl9CisKKwkJVGV4dFByb2dyZXNzTW9uaXRvciBwbSA9IG5ldyBUZXh0UHJvZ3Jlc3NNb25pdG9yKGVycncpOworCQlwbS5zZXREZWxheVN0YXJ0KDIsIFRpbWVVbml0LlNFQ09ORFMpOworCQlkaWZmRm10LnNldFByb2dyZXNzTW9uaXRvcihwbSk7CisJCWRpZmZGbXQuc2V0UGF0aEZpbHRlcihwYXRoRmlsdGVyKTsKKworCQlMaXN0PERpZmZFbnRyeT4gZmlsZXMgPSBkaWZmRm10LnNjYW4ob2xkVHJlZSwgbmV3VHJlZSk7CisJCXJldHVybiBmaWxlczsKKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9NZXJnZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKaW5kZXggY2E0ODc3Zi4uMjdhM2Q5MCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKQEAgLTEwLDYgKzEwLDggQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtMTQ0LDggKzE0NiwxMCBAQCBwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CiAJCQljYXNlIEZBU1RfRk9SV0FSRDoKIAkJCQlPYmplY3RJZCBvbGRIZWFkSWQgPSBvbGRIZWFkLmdldE9iamVjdElkKCk7CiAJCQkJaWYgKG9sZEhlYWRJZCAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBvbGRJZCA9IG9sZEhlYWRJZC5hYmJyZXZpYXRlKDcpLm5hbWUoKTsKLQkJCQkJU3RyaW5nIG5ld0lkID0gcmVzdWx0LmdldE5ld0hlYWQoKS5hYmJyZXZpYXRlKDcpLm5hbWUoKTsKKwkJCQkJU3RyaW5nIG9sZElkID0gb2xkSGVhZElkCisJCQkJCQkJLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKS5uYW1lKCk7CisJCQkJCVN0cmluZyBuZXdJZCA9IHJlc3VsdC5nZXROZXdIZWFkKCkKKwkJCQkJCQkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpLm5hbWUoKTsKIAkJCQkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkudXBkYXRpbmcsCiAJCQkJCQkJb2xkSWQsIG5ld0lkKSk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlZmxvZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlZmxvZy5qYXZhCmluZGV4IDAzMDExOWUuLmM2MzUzMmQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZWZsb2cuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmVmbG9nLmphdmEKQEAgLTksNiArOSw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5wZ207CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiAKQEAgLTQ1LDcgKzQ3LDggQEAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgewogCiAJcHJpdmF0ZSBTdHJpbmcgdG9TdHJpbmcoUmVmbG9nRW50cnkgZW50cnksIGludCBpKSB7CiAJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCXMuYXBwZW5kKGVudHJ5LmdldE5ld0lkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkpOworCQlzLmFwcGVuZChlbnRyeS5nZXROZXdJZCgpLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKQorCQkJCS5uYW1lKCkpOwogCQlzLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCiAJCXMuYXBwZW5kKHJlZiA9PSBudWxsID8gQ29uc3RhbnRzLkhFQUQgOiBSZXBvc2l0b3J5LnNob3J0ZW5SZWZOYW1lKHJlZikpOwogCQlzLmFwcGVuZCgiQHsiICsgaSArICJ9OiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5qYXZhCmluZGV4IDhlNDlhNzYuLjdmZTViMGYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQuamF2YQpAQCAtMTM2LDYgKzEzNiw5IEBAIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdGFsRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGRhdGVJbmZvOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZGVsZXRlZEJyYW5jaDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGRlbGV0ZWRSZW1vdGVCcmFuY2g7CisJLyoqKi8gcHVibGljIFN0cmluZyBkaWZmVG9vbEhlbHBTZXRUb0ZvbGxvd2luZzsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGRpZmZUb29sTGF1bmNoOworCS8qKiovIHB1YmxpYyBTdHJpbmcgZGlmZlRvb2xEaWVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZG9lc05vdEV4aXN0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZG9udE92ZXJ3cml0ZUxvY2FsQ2hhbmdlczsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGV2ZXJ5dGhpbmdVcFRvRGF0ZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9CVUlMRAppbmRleCAwYzhjZjgzLi5mMmU0ZDU1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvQlVJTEQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L0JVSUxECkBAIC0xNyw2ICsxNyw2IEBACiAgICAgICAgICIvL2xpYjpzbGY0ai1hcGkiLAogICAgICAgICAiLy9saWI6c3NoZC1vc2dpIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0IiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlOnNzaC1hcGFjaGUiCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTpzc2gtYXBhY2hlIiwKICAgICBdLAogKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNmZDBmNTIuLjFhNTc0NmQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTUgKzIsMTUgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudDtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU7YnVuZGxlLXZlcnNpb249Ils2LjAuMSw2LjEuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU7YnVuZGxlLXZlcnNpb249Ils2LjEuMSw2LjIuMCkiCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIgorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiCiBSZXF1aXJlLUJ1bmRsZTogY29tLnN1bi5qbmE7YnVuZGxlLXZlcnNpb249Ils1LjguMCw2LjAuMCkiLAogIGNvbS5zdW4uam5hLnBsYXRmb3JtO2J1bmRsZS12ZXJzaW9uPSJbNS44LjAsNi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yO3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudC5jb25uZWN0b3I7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDgwOGRlNTMuLmQwNmU2YjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9SRUFETUUubWQgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjJhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsODIgQEAKKyMgSkdpdCBTU0ggYWdlbnQgdHJhbnNwb3J0IHN1cHBvcnQgZm9yIEFwYWNoZSBNSU5BIHNzaGQKKworVGhpcyBidW5kbGUgcHJvdmlkZXMgb3B0aW9uYWwgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGFuIFNTSCBhZ2VudAorZm9yIFNTSCBvciBTRlRQIGF1dGhlbnRpY2F0aW9uLiBJdCBpcyBhbiBPU0dpIGZyYWdtZW50IGZvciBidW5kbGUKK1tvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGVdKC4uL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9SRUFETUUubWQpLAorYW5kIGl0IHByb3ZpZGVzIHRyYW5zcG9ydHMgZm9yIGxvY2FsIGNvbW11bmljYXRpb24gd2l0aCBTU0ggYWdlbnRzLgorCisjIyBTdXBwb3J0ZWQgU1NIIGFnZW50IHRyYW5zcG9ydHMKKworIyMjIExpbnV4LCBPUyBYLCBCU0QKKworT24gTGludXgsIE9TIFgsIGFuZCBCU0QsIHRoZSBvbmx5IHRyYW5zcG9ydCBtZWNoYW5pc20gc3VwcG9ydGVkIGlzIHRoZSB1c3VhbAorY29tbXVuaWNhdGlvbiB2aWEgYSBVbml4IGRvbWFpbiBzb2NrZXQuIFRoaXMgaXMgdGhlIG9ubHkgcHJvdG9jb2wgdGhlIE9wZW5TU0gKK1NTSCBhZ2VudCBzdXBwb3J0cy4gQSBVbml4IGRvbWFpbiBzb2NrZXQgYXBwZWFycyBhcyBhIHNwZWNpYWwgZmlsZSBpbiB0aGUgZmlsZQorc3lzdGVtOyB0aGlzIGZpbGUgbmFtZSBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorYFNTSF9BVVRIX1NPQ0tgLgorCitUaGUgU1NIIGNvbmZpZyBgSWRlbnRpdHlBZ2VudGAgY2FuIGJlIHNldCB0byB0aGlzIHNvY2tldCBmaWxlbmFtZSB0byBzcGVjaWZ5CitleGFjdGx5IHdoaWNoIFVuaXggZG9tYWluIHNvY2tldCB0byB1c2UsIG9yIGl0IGNhbiBiZSBzZXQgdG8gYFNTSF9BVVRIX1NPQ0tgCit0byB1c2UgdGhlIHZhbHVlIGZyb20gdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgYElkZW50aXR5QWdlbnRgIGlzIG5vdCBzZXQKK2F0IGFsbCwgSkdpdCB1c2VzIGBTU0hfQVVUSF9TT0NLYCBieSBkZWZhdWx0LiBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgbm8KK1NTSCBhZ2VudCB3aWxsIGJlIHVzZWQuIGBJZGVudGl0eUFnZW50YCBjYW4gYWxzbyBiZSBzZXQgdG8gYG5vbmVgIHRvIG5vdCB1c2UKK2FueSBTU0ggYWdlbnQuCisKKyMjIyBXaW5kb3dzCisKK09uIFdpbmRvd3MsIHR3byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBhcmUgc3VwcG9ydGVkOgorCisqIEEgdHJhbnNwb3J0IG92ZXIgYSBXaW5kb3dzIG5hbWVkIHBpcGUuIFRoaXMgaXMgdXNlZCBieSBXaW4zMi1PcGVuU1NILCBhbmQgaXMgYXZhaWxhYmxlIGZvciBQYWdlYW50IHNpbmNlIHZlcnNpb24gMC43NS4KKyogQSBQYWdlYW50LXNwZWNpZmljIGxlZ2FjeSB0cmFuc3BvcnQgdmlhIHNoYXJlZCBtZW1vcnk7IHVzZWZ1bCBmb3IgUGFnZWFudCBhbmQgR1BHJ3MgZ3BnLWFnZW50LgorCitQb3NzaWJsZSBzZXR0aW5ncyBvZiBgSWRlbnRpdHlBZ2VudGAgdG8gc2VsZWN0IGEgcGFydGljdWxhciB0cmFuc3BvcnQgYXJlCisKKyogYC8vLi9waXBlL29wZW5zc2gtc3NoLWFnZW50YDogdGhlIFdpbmRvd3MgbmFtZWQgcGlwZSBvZiBXaW4zMi1PcGVuU1NILgorKiBgLy8uL3BhZ2VhbnRgOiB0aGUgc2hhcmVkLW1lbW9yeSBtZWNoYW5pc20gb2YgUGFnZWFudC4KKyogYG5vbmVgOiBkbyBub3QgdXNlIGFueSBTU0ggYWdlbnQuCisqIGAvLy4vcGlwZS8mbHQ7YW55X3ZhbGlkX3BpcGVfbmFtZT5gOiB1c2UgYSBzcGVjaWZpYyBXaW5kb3dzIG5hbWVkIHBpcGUuCisKK1RoZSBkZWZhdWx0IHRyYW5zcG9ydCBvbiBXaW5kb3dzIGlmIGBJZGVudGl0eUFnZW50YCBpcyBub3Qgc2V0IGF0IGFsbCBpcyB0aGUKK1BhZ2VhbnQgc2hhcmVkLW1lbW9yeSB0cmFuc3BvcnQuIEVudmlyb25tZW50IHZhcmlhYmxlIGBTU0hfQVVUSF9TT0NLYCBuZWVkcworbm90IGJlIHNldCBmb3IgUGFnZWFudCwgYW5kIF9tdXN0IG5vdF8gYmUgc2V0IGZvciBXaW4zMi1PcGVuU1NILgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5hbWVkIHBpcGUgYXMgdHJhbnNwb3J0IGZvciBQYWdlYW50IChhcyBvZgordmVyc2lvbiAwLjc1KS4gVW5mb3J0dW5hdGVseSwgUGFnZWFudCB1bm5lY2Vzc2FyaWx5IGNyeXB0b2dyYXBoaWNhbGx5CitvYmZ1c2NhdGVzIHRoZSBwaXBlIG5hbWUsIHNvIGl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgSkdpdCB0byBkZXRlcm1pbmUgaXQKK2F1dG9tYXRpY2FsbHkuIFRoZSBwaXBlIG5hbWUgaXMgYHBhZ2VhbnQuPHVzZXIgbmFtZT4uPHNoYTI1Nj5gLCBmb3IgaW5zdGFuY2UKK2BwYWdlYW50Lm15c2VsZi5jNTY4NzczNmJhNzU1YTcwYjAwMDk1NWNiMTkxNjk4YWVkN2RiMjIxYzJiMDcxMDE5OWViMWY1Mjk4OTIyYWI1YC4KK0EgdXNlciBjYW4gbG9vayB1cCB0aGUgbmFtZSBieSBzdGFydGluZyBQYWdlYW50IGFuZCB0aGVuIHJ1bm5pbmcgdGhlCitjb21tYW5kIGBkaXIgXFwuXHBpcGVcXGAgaW4gYSBjb21tYW5kIHNoZWxsLiBPbmNlIHRoZSBuYW1lIGlzIGtub3duLCBzZXR0aW5nCitgSWRlbnRpdHlBZ2VudGAgdG8gdGhlIHBpcGUgbmFtZSBhcworYC8vLi9waXBlL3BhZ2VhbnQubXlzZWxmLmM1Njg3NzM2YmE3NTVhNzBiMDAwOTU1Y2IxOTE2OThhZWQ3ZGIyMjFjMmIwNzEwMTk5ZWIxZjUyOTg5MjJhYjVgCittYWtlcyBKR2l0IHVzZSB0aGlzIFdpbmRvd3MgbmFtZWQgcGlwZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFBhZ2VhbnQuCisKKyhZb3UgY2FuIHVzZSBmb3J3YXJkIHNsYXNoZXMgaW4gdGhlIGB+Ly5zc2gvY29uZmlnYCBmaWxlLiBTU0ggY29uZmlnIGZpbGUKK3BhcnNpbmcgaGFzIGl0cyBvd24gcnVsZXMgYWJvdXQgYmFja3NsYXNoZXMgaW4gY29uZmlnIGZpbGVzOyB3aGljaCBhcmUKK3RyZWF0ZWQgYXMgZXNjYXBlIGNoYXJhY3RlcnMgaW4gc29tZSBjb250ZXh0cy4gV2l0aCBiYWNrc2xhc2hlcyBvbmUgd291bGQKK2hhdmUgdG8gd3JpdGUsIGUuZy4sIGBcXFxcLlxwaXBlXG9wZW5zc2gtc3NoLWFnZW50YC4pCisKK1dpdGggdGhlc2UgdHdvIHRyYW5zcG9ydCBtZWNoYW5pc21zLCBQYWdlYW50IGFuZCBXaW4zMi1PcGVuU1NIIGFyZSBzdXBwb3J0ZWQuCitBcyBmb3IgR1BHOiB0aGUgZ3BnLWFnZW50IGNhbiBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgc3NoLWFnZW50IChwcmVzdW1hYmx5Cit2aWEgYSBXaW5Tb2NrZXRzMiAiVW5peCBkb21haW4gc29ja2V0IiBvbiBXaW5kb3dzKSBvciB0byBlbXVsYXRlIFBhZ2VhbnQKKyh1c2luZyB0aGUgc2hhcmVkIG1lbW9yeSBtZWNoYW5pc20pLiBSdW5uaW5nIGdwZy1hZ2VudCB3aXRoIHRoZQorYGVuYWJsZS1zc2gtc3VwcG9ydGAgb3B0aW9uIGlzCitbcmVwb3J0ZWQgbm90IHRvIHdvcmsgb24gV2luZG93c10oaHR0cHM6Ly9kZXYuZ251cGcub3JnL1QzODgzKSwgdGhvdWdoLiBCdXQKK3RoZSBQdVRUWSBlbXVsYXRpb24gaW4gZ3BnLWFnZW50IChvcHRpb24gYGVuYWJsZS1wdXR0eS1zdXBwb3J0YCkgX3Nob3VsZF8gd29yaywKK3NvIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgZ3BnLWFnZW50IGluc3RlYWQgb2YgUGFnZWFudC4KKworTmVpdGhlciBQYWdlYW50IChhcyBvZiB2ZXJzaW9uIDAuNzYpIG5vciBXaW4zMi1PcGVuU1NIIChhcyBvZiB2ZXJzaW9uIDguNikKK3N1cHBvcnQgdGhlIGBjb25maXJtYCBvciBsaWZldGltZSBjb25zdHJhaW50cyBmb3IgYEFkZEtleXNUb0FnZW50YC4gZ3BnLWFnZW50CithcHBhcmVudGx5IGRvZXMsIGV2ZW4gd2hlbiBjb21tdW5pY2F0aW5nIG92ZXIgdGhlIFBhZ2VhbnQgc2hhcmVkIG1lbW9yeQorbWVjaGFuaXNtLgorCitUaGUgc3NoLWFnZW50IGZyb20gZ2l0IGJhc2ggb24gV2luZG93cyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gSXQgd291bGQKK25lZWQgYSBjb25uZWN0b3IgaGFuZGxpbmcgQ3lnd2luIHNvY2tldCBmaWxlcyBhbmQgdGhlIEN5Z3dpbiBoYW5kc2hha2Ugb3ZlcgorYSBUQ1Agc3RyZWFtIHNvY2tldCBib3VuZCB0byB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLiBUaGUgQ3lnd2luIHNvY2tldCBmaWxlCitfaXNfIGV4cG9zZWQgaW4gdGhlIFdpbmRvd3MgZmlsZSBzeXN0ZW0gYXQgJVRFTVAlXHNzaC1YWFhYWFhYWFhYXGFnZW50LiZsdDtudW1iZXI+LAorYnV0IGl0IGRvZXMgbm90IGhhdmUgYSBmaXhlZCBuYW1lICh0aGUgWCdzIGFuZCB0aGUgbnVtYmVyIGFyZSB2YXJpYWJsZSBhbmQKK2NoYW5nZSBlYWNoIHRpbWUgc3NoLWFnZW50IGlzIHN0YXJ0ZWQpLgorCisjIyBJbXBsZW1lbnRhdGlvbgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgYWxsIHRyYW5zcG9ydHMgdXNlcyBKTkEuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbAppbmRleCAxYmQzZmFkLi43N2I5Yzk1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudDwvYXJ0aWZhY3RJZD4KQEAgLTEzMiw3ICsxMzIsNiBAQAogICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICA8L3BsdWdpbj4KIAotICAgICAgPCEtLSBOZXcgaW4gNi4wOyB1bmNvbW1lbnQgaW4gNi4xCiAgICAgICA8cGx1Z2luPgogICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuc2lvbTc5LmphcGljbXA8L2dyb3VwSWQ+CiAgICAgICAgICAgPGFydGlmYWN0SWQ+amFwaWNtcC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CkBAIC0xNTUsNiArMTU0LDkgQEAKICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuZWNsaXBzZS5qZ2l0Lio8L2luY2x1ZGU+CiAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPiouaW50ZXJuYWwuKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgIDwvZXhjbHVkZXM+CiAgICAgICAgICAgICAgICAgICA8YWNjZXNzTW9kaWZpZXI+cHVibGljPC9hY2Nlc3NNb2RpZmllcj4KICAgICAgICAgICAgICAgICAgIDxicmVha0J1aWxkT25Nb2RpZmljYXRpb25zPmZhbHNlPC9icmVha0J1aWxkT25Nb2RpZmljYXRpb25zPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbkJpbmFyeUluY29tcGF0aWJsZU1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbkJpbmFyeUluY29tcGF0aWJsZU1vZGlmaWNhdGlvbnM+CkBAIC0xNzQsMTEgKzE3Niw5IEBACiAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgIDwvcGx1Z2luPgotICAgICAgLS0+CiAgICAgPC9wbHVnaW5zPgogICA8L2J1aWxkPgogCi0gIDwhLS0gTmV3IGluIDYuMCwgdW5jb21tZW50IGluIDYuMQogICA8cmVwb3J0aW5nPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KQEAgLTIxMCw2ICsyMTAsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KQEAgLTIyMyw1ICsyMjYsNCBAQAogICAgICAgPC9wbHVnaW4+CiAgICAgPC9wbHVnaW5zPgogICA8L3JlcG9ydGluZz4KLSAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLnByb3BlcnRpZXMKaW5kZXggNmZjZTA4My4uYTNiNGU5MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9UZXh0cy5wcm9wZXJ0aWVzCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMucHJvcGVydGllcwpAQCAtMiw5ICsyLDExIEBACiBlcnJMYXN0RXJyb3I9U3lzdGVtIG1lc3NhZ2UgZm9yIGVycm9yIHswfSBjb3VsZCBub3QgYmUgcmV0cmlldmVkLCBnb3QgezF9CiBlcnJSZWxlYXNlU2hhcmVkTWVtb3J5PUNhbm5vdCByZWxlYXNlIHNoYXJlZCBtZW1vcnk6IHswfSAtIHsxfQogZXJyVW5rbm93bj11bmtub3duIGVycm9yCitlcnJVbmtub3duSWRlbnRpdHlBZ2VudD1JZGVudGl0eUFnZW50ICcnezB9JycgdW5rbm93bgogbG9nRXJyb3JMb2FkTGlicmFyeT1DYW5ub3QgbG9hZCBzb2NrZXQgbGlicmFyeTsgU1NIIGFnZW50IHN1cHBvcnQgaXMgc3dpdGNoZWQgb2ZmCiBtc2dDbG9zZUZhaWxlZD1DYW5ub3QgY2xvc2UgU1NIIGFnZW50IHNvY2tldCB7MH0KIG1zZ0Nvbm5lY3RGYWlsZWQ9Q291bGQgbm90IGNvbm5lY3QgdG8gU1NIIGFnZW50IHZpYSBzb2NrZXQgJyd7MH0nJworbXNnQ29ubmVjdFBpcGVGYWlsZWQ9Q291bGQgbm90IGNvbm5lY3QgdG8gU1NIIGFnZW50IHZpYSBwaXBlICcnezB9JycKIG1zZ05vTWFwcGVkRmlsZT1Db3VsZCBub3QgY3JlYXRlIGZpbGUgbWFwcGluZzogezB9IC0gezF9CiBtc2dOb1NoYXJlZE1lbW9yeT1Db3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5OiB7MH0gLSB7MX0KIG1zZ1BhZ2VhbnRVbmF2YWlsYWJsZT1Db3VsZCBub3QgY29ubmVjdCB0byBQYWdlYW50CkBAIC0xNSwzICsxNyw0IEBACiBtc2dTaG9ydFJlYWQ9U2hvcnQgcmVhZCBmcm9tIFNTSCBhZ2VudCwgZXhwZWN0ZWQgezB9oGJ5dGVzLCBnb3QgezF9IGJ5dGVzOyBsYXN0IHJlYWQoKSByZXR1cm5lZCB7Mn0KIHBhZ2VhbnQ9UGFnZWFudAogdW5peERlZmF1bHRBZ2VudD1zc2gtYWdlbnQKK3dpbk9wZW5Tc2g9V2luMzIgT3BlblNTSApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9GYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQppbmRleCBkNzQwOWIwLi4xY2VlMWJlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQpAQCAtMTEsMTEgKzExLDE1IEBACiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN5c3RlbVJlYWRlcjsKIAogLyoqCkBAIC0yOSw3ICszMywyMCBAQCBwdWJsaWMgY2xhc3MgRmFjdG9yeSBpbXBsZW1lbnRzIENvbm5lY3RvckZhY3RvcnkgewogCXB1YmxpYyBDb25uZWN0b3IgY3JlYXRlKFN0cmluZyBpZGVudGl0eUFnZW50LCBGaWxlIGhvbWVEaXIpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlpZiAoU3lzdGVtUmVhZGVyLmdldEluc3RhbmNlKCkuaXNXaW5kb3dzKCkpIHsKLQkJCXJldHVybiBuZXcgUGFnZWFudENvbm5lY3RvcigpOworCQkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwoaWRlbnRpdHlBZ2VudCkpIHsKKwkJCQkvLyBEZWZhdWx0LgorCQkJCXJldHVybiBuZXcgUGFnZWFudENvbm5lY3RvcigpOworCQkJfQorCQkJU3RyaW5nIHdpblBhdGggPSBpZGVudGl0eUFnZW50LnJlcGxhY2UoJy8nLCAnXFwnKTsKKwkJCWlmIChQYWdlYW50Q29ubmVjdG9yLkRFU0NSSVBUT1IuZ2V0SWRlbnRpdHlBZ2VudCgpCisJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKHdpblBhdGgpKSB7CisJCQkJcmV0dXJuIG5ldyBQYWdlYW50Q29ubmVjdG9yKCk7CisJCQl9CisJCQlpZiAod2luUGF0aC50b0xvd2VyQ2FzZShMb2NhbGUuUk9PVCkuc3RhcnRzV2l0aCgiXFxcXC5cXHBpcGVcXCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gbmV3IFdpblBpcGVDb25uZWN0b3Iod2luUGF0aCk7CisJCQl9CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVRleHRzLmdldCgpLmVyclVua25vd25JZGVudGl0eUFnZW50LCBpZGVudGl0eUFnZW50KSk7CiAJCX0KIAkJcmV0dXJuIG5ldyBVbml4RG9tYWluU29ja2V0Q29ubmVjdG9yKGlkZW50aXR5QWdlbnQpOwogCX0KQEAgLTU1LDcgKzcyLDExIEBAIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKIAkgKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgQ29sbGVjdGlvbjxDb25uZWN0b3JEZXNjcmlwdG9yPiBnZXRTdXBwb3J0ZWRDb25uZWN0b3JzKCkgewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uKGdldERlZmF1bHRDb25uZWN0b3IoKSk7CisJCWlmIChTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5pc1dpbmRvd3MoKSkgeworCQkJcmV0dXJuIExpc3Qub2YoUGFnZWFudENvbm5lY3Rvci5ERVNDUklQVE9SLAorCQkJCQlXaW5QaXBlQ29ubmVjdG9yLkRFU0NSSVBUT1IpOworCQl9CisJCXJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b24oVW5peERvbWFpblNvY2tldENvbm5lY3Rvci5ERVNDUklQVE9SKTsKIAl9CiAKIAlAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvTGlicmFyeUhvbGRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKaW5kZXggYjA5YjU1Zi4uMGE1OTJkMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKQEAgLTUzLDYgKzUzLDEwIEBAIHByaXZhdGUgTGlicmFyeUhvbGRlcigpIHsKIAkJa2VybmVsID0gS2VybmVsMzIuSU5TVEFOQ0U7CiAJfQogCisJU3RyaW5nIHN5c3RlbUVycm9yKCkgeworCQlyZXR1cm4gc3lzdGVtRXJyb3IoIlt7MH1dIC0gezF9Iik7IC8vJE5PTi1OTFMtMSQKKwl9CisKIAlTdHJpbmcgc3lzdGVtRXJyb3IoU3RyaW5nIHBhdHRlcm4pIHsKIAkJaW50IGxhc3RFcnJvciA9IGtlcm5lbC5HZXRMYXN0RXJyb3IoKTsKIAkJU3RyaW5nIG1zZzsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvUGFnZWFudENvbm5lY3Rvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKaW5kZXggYjBlM2JjZS4uMTk2ODRlYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKQEAgLTI2LDcgKzI2LDEwIEBAIHB1YmxpYyBjbGFzcyBQYWdlYW50Q29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3IgewogCiAJCUBPdmVycmlkZQogCQlwdWJsaWMgU3RyaW5nIGdldElkZW50aXR5QWdlbnQoKSB7Ci0JCQlyZXR1cm4gInBhZ2VhbnQiOyAvLyROT04tTkxTLTEkCisJCQkvLyBUaGlzIG11c3QgYmUgYW4gYWJzb2x1dGUgV2luZG93cyBwYXRoIG5hbWUgdG8gYXZvaWQgdGhhdAorCQkJLy8gT3BlblNzaENvbmZpZ0ZpbGUgdHJlYXRzIGl0IGFzIGEgcmVsYXRpdmUgcGF0aCBuYW1lLiBVc2UgYW4gVU5DCisJCQkvLyBuYW1lIG9uIGxvY2FsaG9zdCwgbGlrZSBmb3IgcGlwZXMuCisJCQlyZXR1cm4gIlxcXFwuXFxwYWdlYW50IjsgLy8kTk9OLU5MUy0xJAogCQl9CiAKIAkJQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1NvY2tldHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCmluZGV4IDNkOTViZGIuLjUyY2Y1ZjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCkBAIC0yNCwxMSArMjQsNiBAQCBwcml2YXRlIFNvY2tldHMoKSB7CiAJfQogCiAJLyoqCi0JICogRGVmYXVsdCBTU0ggYWdlbnQgc29ja2V0IGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX1NTSF9BVVRIX1NPQ0sgPSAiU1NIX0FVVEhfU09DSyI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgogCSAqIERvbWFpbiBmb3IgVW5peCBkb21haW4gc29ja2V0cy4KIAkgKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRl9VTklYID0gMTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMuamF2YQppbmRleCBmYjQ1YjMwLi5mMzg3Yzc2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9UZXh0cy5qYXZhCkBAIC0zMSw5ICszMSwxMSBAQCBwdWJsaWMgc3RhdGljIFRleHRzIGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGVyckxhc3RFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGVyclJlbGVhc2VTaGFyZWRNZW1vcnk7CiAJLyoqKi8gcHVibGljIFN0cmluZyBlcnJVbmtub3duOworCS8qKiovIHB1YmxpYyBTdHJpbmcgZXJyVW5rbm93bklkZW50aXR5QWdlbnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBsb2dFcnJvckxvYWRMaWJyYXJ5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgbXNnQ2xvc2VGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dDb25uZWN0RmFpbGVkOworCS8qKiovIHB1YmxpYyBTdHJpbmcgbXNnQ29ubmVjdFBpcGVGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dOb01hcHBlZEZpbGU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dOb1NoYXJlZE1lbW9yeTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIG1zZ1BhZ2VhbnRVbmF2YWlsYWJsZTsKQEAgLTQ0LDUgKzQ2LDYgQEAgcHVibGljIHN0YXRpYyBUZXh0cyBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dTaG9ydFJlYWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwYWdlYW50OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5peERlZmF1bHRBZ2VudDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHdpbk9wZW5Tc2g7CiAKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVW5peERvbWFpblNvY2tldENvbm5lY3Rvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKaW5kZXggM2I3NWYzYS4uOTVhYzM0ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKQEAgLTExLDEwICsxMSwxMCBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yLlNvY2tldHMuQUZfVU5JWDsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudC5jb25uZWN0b3IuU29ja2V0cy5ERUZBVUxUX1BST1RPQ09MOwotaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Tb2NrZXRzLkVOVl9TU0hfQVVUSF9TT0NLOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Tb2NrZXRzLlNPQ0tfU1RSRUFNOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Vbml4U29ja2V0cy5GRF9DTE9FWEVDOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Vbml4U29ja2V0cy5GX1NFVEZEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5Tc2hDb25zdGFudHMuRU5WX1NTSF9BVVRIX1NPQ0tFVDsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWMgY2xhc3MgVW5peERvbWFpblNvY2tldENvbm5lY3RvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdG9yIHsKIAogCQlAT3ZlcnJpZGUKIAkJcHVibGljIFN0cmluZyBnZXRJZGVudGl0eUFnZW50KCkgewotCQkJcmV0dXJuIEVOVl9TU0hfQVVUSF9TT0NLOworCQkJcmV0dXJuIEVOVl9TU0hfQVVUSF9TT0NLRVQ7CiAJCX0KIAogCQlAT3ZlcnJpZGUKQEAgLTkxLDggKzkxLDkgQEAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIFVuaXhTb2NrZXRzIGdldExpYnJhcnkoKSB7CiAJcHVibGljIFVuaXhEb21haW5Tb2NrZXRDb25uZWN0b3IoU3RyaW5nIHNvY2tldEZpbGUpIHsKIAkJc3VwZXIoKTsKIAkJU3RyaW5nIGZpbGUgPSBzb2NrZXRGaWxlOwotCQlpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChmaWxlKSkgewotCQkJZmlsZSA9IFN5c3RlbVJlYWRlci5nZXRJbnN0YW5jZSgpLmdldGVudihFTlZfU1NIX0FVVEhfU09DSyk7CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGZpbGUpCisJCQkJfHwgRU5WX1NTSF9BVVRIX1NPQ0tFVC5lcXVhbHMoZmlsZSkpIHsKKwkJCWZpbGUgPSBTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5nZXRlbnYoRU5WX1NTSF9BVVRIX1NPQ0tFVCk7CiAJCX0KIAkJdGhpcy5zb2NrZXRGaWxlID0gZmlsZTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1dpblBpcGVDb25uZWN0b3IuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvV2luUGlwZUNvbm5lY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWQ5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1dpblBpcGVDb25uZWN0b3IuamF2YQpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOworCitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5Tc2hFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZC5hZ2VudC5BYnN0cmFjdENvbm5lY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3RvcnkuQ29ubmVjdG9yRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CisKK2ltcG9ydCBjb20uc3VuLmpuYS5MYXN0RXJyb3JFeGNlcHRpb247CitpbXBvcnQgY29tLnN1bi5qbmEucGxhdGZvcm0ud2luMzIuV2luQmFzZTsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5FcnJvcjsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5OVDsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5OVC5IQU5ETEU7CitpbXBvcnQgY29tLnN1bi5qbmEucHRyLkludEJ5UmVmZXJlbmNlOworCisvKioKKyAqIEEgY29ubmVjdG9yIGJhc2VkIG9uIEpOQSB1c2luZyBXaW5kb3dzJyBuYW1lZCBwaXBlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGFuCisgKiBzc2ggYWdlbnQuIFRoaXMgaXMgdXNlZCBieSBNaWNyb3NvZnQncyBXaW4zMi1PcGVuU1NIIHBvcnQuCisgKi8KK3B1YmxpYyBjbGFzcyBXaW5QaXBlQ29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3IgeworCisJLy8gUGlwZSBuYW1lcyBhcmUsIGxpa2Ugb3RoZXIgZmlsZSBuYW1lcywgY2FzZS1pbnNlbnNpdGl2ZSBvbiBXaW5kb3dzLgorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQU5PTklDQUxfUElQRV9OQU1FID0gIlxcXFwuXFxwaXBlXFxvcGVuc3NoLXNzaC1hZ2VudCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIHtAbGluayBDb25uZWN0b3JEZXNjcmlwdG9yfSBmb3IgdGhlIHtAbGluayBQYWdlYW50Q29ubmVjdG9yfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvbm5lY3RvckRlc2NyaXB0b3IgREVTQ1JJUFRPUiA9IG5ldyBDb25uZWN0b3JEZXNjcmlwdG9yKCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldElkZW50aXR5QWdlbnQoKSB7CisJCQlyZXR1cm4gQ0FOT05JQ0FMX1BJUEVfTkFNRTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgeworCQkJcmV0dXJuIFRleHRzLmdldCgpLndpbk9wZW5Tc2g7CisJCX0KKwl9OworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJTEVfU0hBUkVfTk9ORSA9IDA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklMRV9BVFRSSUJVVEVfTk9ORSA9IDA7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBwaXBlTmFtZTsKKworCXByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBjb25uZWN0ZWQgPSBuZXcgQXRvbWljQm9vbGVhbigpOworCisJLy8gSXQncyBhIGJ5dGUgcGlwZSwgc28gdGhlIG5vcm1hbCBXaW5kb3dzIGZpbGUgbWVjaGFuaXNtcyBjYW4gYmUgdXNlZC4KKwkvLyBXb3VsZCBvbmUgb2YgdGhlIHN0YW5kYXJkIEphdmEgRmlsZSBJL08gYWJzdHJhY3Rpb25zIHdvcms/CisJcHJpdmF0ZSB2b2xhdGlsZSBIQU5ETEUgZmlsZUhhbmRsZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYSB7QGxpbmsgV2luUGlwZUNvbm5lY3Rvcn0gZm9yIHRoZSBnaXZlbiBuYW1lZCBwaXBlLgorCSAqCisJICogQHBhcmFtIHBpcGVOYW1lCisJICogICAgICAgICAgICB0byBjb25uZWN0IHRvCisJICovCisJcHVibGljIFdpblBpcGVDb25uZWN0b3IoU3RyaW5nIHBpcGVOYW1lKSB7CisJCXRoaXMucGlwZU5hbWUgPSBwaXBlTmFtZS5yZXBsYWNlKCcvJywgJ1xcJyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gY29ubmVjdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHBpcGVOYW1lKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCUhBTkRMRSBmaWxlID0gZmlsZUhhbmRsZTsKKwkJc3luY2hyb25pemVkICh0aGlzKSB7CisJCQlpZiAoY29ubmVjdGVkLmdldCgpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlMaWJyYXJ5SG9sZGVyIGxpYnMgPSBMaWJyYXJ5SG9sZGVyLmdldExpYnJhcnkoKTsKKwkJCWlmIChsaWJzID09IG51bGwpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlmaWxlID0gbGlicy5rZXJuZWwuQ3JlYXRlRmlsZShwaXBlTmFtZSwKKwkJCQkJV2luTlQuR0VORVJJQ19SRUFEIHwgV2luTlQuR0VORVJJQ19XUklURSwgRklMRV9TSEFSRV9OT05FLAorCQkJCQludWxsLCBXaW5OVC5PUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT05FLCBudWxsKTsKKwkJCWlmIChmaWxlID09IG51bGwgfHwgZmlsZSA9PSBXaW5CYXNlLklOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCQkJaW50IGVycm9yQ29kZSA9IGxpYnMua2VybmVsLkdldExhc3RFcnJvcigpOworCQkJCWlmIChlcnJvckNvZGUgPT0gV2luRXJyb3IuRVJST1JfRklMRV9OT1RfRk9VTkQKKwkJCQkJCSYmIENBTk9OSUNBTF9QSVBFX05BTUUuZXF1YWxzSWdub3JlQ2FzZShwaXBlTmFtZSkpIHsKKwkJCQkJLy8gT3BlblNTSCBhZ2VudCBub3QgcnVubmluZy4gRG9uJ3QgdGhyb3cuCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJTGFzdEVycm9yRXhjZXB0aW9uIGNhdXNlID0gbmV3IExhc3RFcnJvckV4Y2VwdGlvbigKKwkJCQkJCWxpYnMuc3lzdGVtRXJyb3IoKSk7CisJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJCS5mb3JtYXQoVGV4dHMuZ2V0KCkubXNnQ29ubmVjdFBpcGVGYWlsZWQsIHBpcGVOYW1lKSwKKwkJCQkJCWNhdXNlKTsKKwkJCX0KKwkJCWNvbm5lY3RlZC5zZXQodHJ1ZSk7CisJCX0KKwkJZmlsZUhhbmRsZSA9IGZpbGU7CisJCXJldHVybiBjb25uZWN0ZWQuZ2V0KCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJSEFORExFIGZpbGUgPSBmaWxlSGFuZGxlOworCQlpZiAoY29ubmVjdGVkLmdldEFuZFNldChmYWxzZSkgJiYgZmlsZUhhbmRsZSAhPSBudWxsKSB7CisJCQlmaWxlSGFuZGxlID0gbnVsbDsKKwkJCUxpYnJhcnlIb2xkZXIgbGlicyA9IExpYnJhcnlIb2xkZXIuZ2V0TGlicmFyeSgpOworCQkJYm9vbGVhbiBzdWNjZXNzID0gbGlicy5rZXJuZWwuQ2xvc2VIYW5kbGUoZmlsZSk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlMYXN0RXJyb3JFeGNlcHRpb24gY2F1c2UgPSBuZXcgTGFzdEVycm9yRXhjZXB0aW9uKAorCQkJCQkJbGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkJLmZvcm1hdChUZXh0cy5nZXQoKS5tc2dDbG9zZUZhaWxlZCwgcGlwZU5hbWUpLCBjYXVzZSk7CisJCQl9CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYnl0ZVtdIHJwYyhieXRlIGNvbW1hbmQsIGJ5dGVbXSBtZXNzYWdlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlwcmVwYXJlTWVzc2FnZShjb21tYW5kLCBtZXNzYWdlKTsKKwkJSEFORExFIGZpbGUgPSBmaWxlSGFuZGxlOworCQlpZiAoIWNvbm5lY3RlZC5nZXQoKSB8fCBmaWxlID09IG51bGwpIHsKKwkJCS8vIE5vIHRyYW5zbGF0aW9uLCBpbnRlcm5hbCBlcnJvcgorCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm90IGNvbm5lY3RlZCB0byBTU0ggYWdlbnQiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCUxpYnJhcnlIb2xkZXIgbGlicyA9IExpYnJhcnlIb2xkZXIuZ2V0TGlicmFyeSgpOworCQl3cml0ZUZ1bGx5KGxpYnMsIGZpbGUsIG1lc3NhZ2UpOworCQkvLyBOb3cgcmVjZWl2ZSB0aGUgcmVwbHkKKwkJYnl0ZVtdIGxlbmd0aEJ1ZiA9IG5ldyBieXRlWzRdOworCQlyZWFkRnVsbHkobGlicywgZmlsZSwgbGVuZ3RoQnVmKTsKKwkJaW50IGxlbmd0aCA9IHRvTGVuZ3RoKGNvbW1hbmQsIGxlbmd0aEJ1Zik7CisJCWJ5dGVbXSBwYXlsb2FkID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKwkJcmVhZEZ1bGx5KGxpYnMsIGZpbGUsIHBheWxvYWQpOworCQlyZXR1cm4gcGF5bG9hZDsKKwl9CisKKwlwcml2YXRlIHZvaWQgd3JpdGVGdWxseShMaWJyYXJ5SG9sZGVyIGxpYnMsIEhBTkRMRSBmaWxlLCBieXRlW10gbWVzc2FnZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWJ5dGVbXSBidWYgPSBtZXNzYWdlOworCQlpbnQgdG9Xcml0ZSA9IGJ1Zi5sZW5ndGg7CisJCXRyeSB7CisJCQl3aGlsZSAodG9Xcml0ZSA+IDApIHsKKwkJCQlJbnRCeVJlZmVyZW5jZSB3cml0dGVuID0gbmV3IEludEJ5UmVmZXJlbmNlKCk7CisJCQkJYm9vbGVhbiBzdWNjZXNzID0gbGlicy5rZXJuZWwuV3JpdGVGaWxlKGZpbGUsIGJ1ZiwgYnVmLmxlbmd0aCwKKwkJCQkJCXdyaXR0ZW4sIG51bGwpOworCQkJCWlmICghc3VjY2VzcykgeworCQkJCQl0aHJvdyBuZXcgTGFzdEVycm9yRXhjZXB0aW9uKGxpYnMuc3lzdGVtRXJyb3IoKSk7CisJCQkJfQorCQkJCWludCBhY3R1YWxseVdyaXR0ZW4gPSB3cml0dGVuLmdldFZhbHVlKCk7CisJCQkJdG9Xcml0ZSAtPSBhY3R1YWxseVdyaXR0ZW47CisJCQkJaWYgKGFjdHVhbGx5V3JpdHRlbiA+IDAgJiYgdG9Xcml0ZSA+IDApIHsKKwkJCQkJYnVmID0gQXJyYXlzLmNvcHlPZlJhbmdlKGJ1ZiwgYWN0dWFsbHlXcml0dGVuLCBidWYubGVuZ3RoKTsKKwkJCQl9CisJCQl9CisJCX0gY2F0Y2ggKExhc3RFcnJvckV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVRleHRzLmdldCgpLm1zZ1NlbmRGYWlsZWQsIEludGVnZXIudG9TdHJpbmcobWVzc2FnZS5sZW5ndGgpLAorCQkJCQlJbnRlZ2VyLnRvU3RyaW5nKHRvV3JpdGUpKSwgZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcmVhZEZ1bGx5KExpYnJhcnlIb2xkZXIgbGlicywgSEFORExFIGZpbGUsIGJ5dGVbXSBkYXRhKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaW50IG4gPSAwOworCQlpbnQgb2Zmc2V0ID0gMDsKKwkJd2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoICYmIChuID0gcmVhZChsaWJzLCBmaWxlLCBkYXRhLCBvZmZzZXQsCisJCQkJZGF0YS5sZW5ndGggLSBvZmZzZXQpKSA+IDApIHsKKwkJCW9mZnNldCArPSBuOworCQl9CisJCWlmIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgeworCQkJdGhyb3cgbmV3IFNzaEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJVGV4dHMuZ2V0KCkubXNnU2hvcnRSZWFkLCBJbnRlZ2VyLnRvU3RyaW5nKGRhdGEubGVuZ3RoKSwKKwkJCQkJSW50ZWdlci50b1N0cmluZyhvZmZzZXQpLCBJbnRlZ2VyLnRvU3RyaW5nKG4pKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIGludCByZWFkKExpYnJhcnlIb2xkZXIgbGlicywgSEFORExFIGZpbGUsIGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsCisJCQlpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgeworCQkJaW50IHRvUmVhZCA9IGxlbmd0aDsKKwkJCUludEJ5UmVmZXJlbmNlIHJlYWQgPSBuZXcgSW50QnlSZWZlcmVuY2UoKTsKKwkJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJCWJvb2xlYW4gc3VjY2VzcyA9IGxpYnMua2VybmVsLlJlYWRGaWxlKGZpbGUsIGJ1ZmZlciwgdG9SZWFkLAorCQkJCQkJcmVhZCwgbnVsbCk7CisJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCXRocm93IG5ldyBMYXN0RXJyb3JFeGNlcHRpb24obGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCQl9CisJCQkJcmV0dXJuIHJlYWQuZ2V0VmFsdWUoKTsKKwkJCX0KKwkJCWJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGxpYnMua2VybmVsLlJlYWRGaWxlKGZpbGUsIGJ1ZmZlciwgdG9SZWFkLCByZWFkLAorCQkJCQludWxsKTsKKwkJCWlmICghc3VjY2VzcykgeworCQkJCXRocm93IG5ldyBMYXN0RXJyb3JFeGNlcHRpb24obGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCX0KKwkJCWludCBhY3R1YWxseVJlYWQgPSByZWFkLmdldFZhbHVlKCk7CisJCQlpZiAoYWN0dWFsbHlSZWFkID4gMCkgeworCQkJCVN5c3RlbS5hcnJheWNvcHkoZGF0YSwgMCwgYnVmZmVyLCBvZmZzZXQsIGFjdHVhbGx5UmVhZCk7CisJCQl9CisJCQlyZXR1cm4gYWN0dWFsbHlSZWFkOworCQl9IGNhdGNoIChMYXN0RXJyb3JFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlUZXh0cy5nZXQoKS5tc2dSZWFkRmFpbGVkLCBJbnRlZ2VyLnRvU3RyaW5nKGxlbmd0aCkpLCBlKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOGZmOTczNS4uNDExZDQzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMzQgKzMsMzQgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmF1dGg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5czt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLm5ldDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvcmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmZvcndhcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQucHJveHk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuY29uZmlnLmhvc3RzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5oZWxwZXJzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5mb3J3YXJkO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3Q7dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LmV4cGVyaW1lbnRhbC50aGVvcmllczt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3BvbS54bWwKaW5kZXggYTg4ZGRhZi4uM2U5OGUzMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3Q8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9BcGFjaGVTc2hUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9BcGFjaGVTc2hUZXN0LmphdmEKaW5kZXggY2NhZjk4Yy4uM2Q3Yzc2NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvQXBhY2hlU3NoVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9zc2hkL0FwYWNoZVNzaFRlc3QuamF2YQpAQCAtMTA3LDYgKzEwNywzMiBAQCBwdWJsaWMgdm9pZCB0ZXN0RWQyNTUxOUhvc3RLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQkiSWRlbnRpdHlGaWxlICIgKyBwcml2YXRlS2V5MS5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAJfQogCisJLyoqCisJICogVGVzdCBmb3IgU1NIRC0xMjMxLiBJZiBhdXRoZW50aWNhdGlvbiBpcyBhdHRlbXB0ZWQgZmlyc3Qgd2l0aCBhbiBSU0Ega2V5LAorCSAqIHdoaWNoIGlzIHJlamVjdGVkLCBhbmQgdGhlbiB3aXRoIHNvbWUgb3RoZXIga2V5IHR5cGUgKGhlcmUgZWQyNTUxOSksCisJICogYXV0aGVudGljYXRpb24gZmFpbHMgaW4gYnVnIFNTSEQtMTIzMS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICogICAgICAgICAgICAgb24gZXJyb3JzCisJICogQHNlZSA8YSBocmVmPQorCSAqICAgICAgImh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvU1NIRC0xMjMxIj5TU0hELTEyMzE8L2E+CisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0V3JvbmdLZXlGaXJzdCgpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlIHVzZXJLZXkgPSBuZXcgRmlsZShnZXRUZW1wb3JhcnlEaXJlY3RvcnkoKSwgInVzZXJrZXkiKTsKKwkJY29weVRlc3RSZXNvdXJjZSgiaWRfZWQyNTUxOSIsIHVzZXJLZXkpOworCQlGaWxlIHB1YmxpY0tleSA9IG5ldyBGaWxlKGdldFRlbXBvcmFyeURpcmVjdG9yeSgpLCAidXNlcmtleS5wdWIiKTsKKwkJY29weVRlc3RSZXNvdXJjZSgiaWRfZWQyNTUxOS5wdWIiLCBwdWJsaWNLZXkpOworCQlzZXJ2ZXIuc2V0VGVzdFVzZXJQdWJsaWNLZXkocHVibGljS2V5LnRvUGF0aCgpKTsKKwkJY2xvbmVXaXRoKCJzc2g6Ly9naXQvZG9lc250bWF0dGVyIiwgZGVmYXVsdENsb25lRGlyLCBudWxsLCAvLworCQkJCSJIb3N0IGdpdCIsIC8vCisJCQkJIkhvc3ROYW1lIGxvY2FsaG9zdCIsIC8vCisJCQkJIlBvcnQgIiArIHRlc3RQb3J0LCAvLworCQkJCSJVc2VyICIgKyBURVNUX1VTRVIsIC8vCisJCQkJIklkZW50aXR5RmlsZSAiICsgcHJpdmF0ZUtleTEuZ2V0QWJzb2x1dGVQYXRoKCksIC8vIFJTQQorCQkJCSJJZGVudGl0eUZpbGUgIiArIHVzZXJLZXkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCX0KKwogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEhhc2hlZEtub3duSG9zdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0VHJ1ZSgiRmFpbGVkIHRvIGRlbGV0ZSBrbm93bl9ob3N0cyIsIGtub3duSG9zdHMuZGVsZXRlKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDgxZTAxY2MuLjczZmVhZWMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTYsOSArNiw5IEBACiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWU7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZTsKICAgdXNlczo9Im9yZy5hcGFjaGUuc3NoZC5jbGllbnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgua2V5Ym9hcmQsCkBAIC0yMyw3MiArMjMsNzUgQEAKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlLAogICAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYXV0aDt2ZXJzaW9uPSI2LjAuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249IjYuMC4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmF1dGg7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5wcm94eTt2ZXJzaW9uPSI2LjEuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNvbmZpZy5ob3N0cywKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24sCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249IjYuMC4xIgorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQ7dmVyc2lvbj0iNi4xLjEiCiBJbXBvcnQtUGFja2FnZTogbmV0LmkycC5jcnlwdG8uZWRkc2E7dmVyc2lvbj0iWzAuMy4wLDAuNC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmFnZW50O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5rZXlib2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucGFzc3dvcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNoYW5uZWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcua2V5czt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmZ1dHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuc2Vzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uYXV0aDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb21wcmVzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyLm9wZW5zc2gua2RmO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZGlnZXN0O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZ1dHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5pbzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLnBhcnNlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleXByb3ZpZGVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ubWFjO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ucmFuZG9tO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb24uaGVscGVyczt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuY2xvc2VhYmxlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5pbzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZnVuY3RvcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLnJlc291cmNlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5sb2dnaW5nO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jbGllbnQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmFnZW50O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5rZXlib2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucGFzc3dvcmQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNoYW5uZWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcua2V5czt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmZ1dHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuc2Vzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uYXV0aDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb21wcmVzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyLm9wZW5zc2gua2RmO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMudTJmO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZGlnZXN0O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZ1dHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5pbzt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLnBhcnNlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleXByb3ZpZGVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ubWFjO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ucmFuZG9tO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb24uaGVscGVyczt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuYnVmZmVyLmtleXM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmNsb3NlYWJsZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW87dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLmRlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZnVuY3RvcnM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLnJlc291cmNlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5sb2dnaW5nO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jbGllbnQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCBiNzcwYjkwLi45ZmVmYTZlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlO3ZlcnNpb249IjYuMS4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvUkVBRE1FLm1kIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL1JFQURNRS5tZAppbmRleCBjYmE4N2FjLi5mMDZiMmY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvUkVBRE1FLm1kCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9SRUFETUUubWQKQEAgLTQzLDYgKzQzLDUzIEBACiAgIC5jYWxsKCk7CiBgYGAKIAorIyMgU3VwcG9ydCBmb3IgU1NIIGFnZW50cworCitUaGVyZSBleGlzdCB0d28gSUVURiBkcmFmdCBSRkNzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gU1NIIGFnZW50OgorCisqIGFuIG9sZGVyIFtTU0gxIHByb3RvY29sXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1zZWNzaC1hZ2VudC0wMikgdGhhdCBjYW4gZGVhbCBvbmx5IHdpdGggRFNBIGFuZCBSU0Ega2V5cywgYW5kCisqIGEgbmV3ZXIgW1NTSDIgcHJvdG9jb2xdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1taWxsZXItc3NoLWFnZW50LTA0KSAoZnJvbSBPcGVuU1NIKS4KKworSkdpdCBvbmx5IHN1cHBvcnRzIHRoZSBuZXdlciBPcGVuU1NIIHByb3RvY29sLgorCitDb21tdW5pY2F0aW9uIHdpdGggYW4gU1NIIGFnZW50IGNhbiBvY2N1ciBvdmVyIGFueSB0cmFuc3BvcnQgcHJvdG9jb2wsIGFuZCBkaWZmZXJlbnQKK1NTSCBhZ2VudHMgbWF5IHVzZSBkaWZmZXJlbnQgdHJhbnNwb3J0cyBmb3IgbG9jYWwgY29tbXVuaWNhdGlvbi4gSkdpdCBwcm92aWRlcyBzb21lCit0cmFuc3BvcnRzIHZpYSB0aGUgW29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudF0oLi4vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L1JFQURNRS5tZCkKK2ZyYWdtZW50LCB3aGljaCBhcmUgZGlzY292ZXJlZCBmcm9tIGBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGVgIGFsc28gdmlhIHRoZSBgU2VydmljZUxvYWRlcmAgbWVjaGFuaXNtOwordGhlIFNQSSAoc2VydmljZSBwcm92aWRlciBpbnRlcmZhY2UpIGlzIGBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3RvcnlgLgorCitJZiBzdWNoIGEgYENvbm5lY3RvckZhY3RvcnlgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLCBKR2l0IG1heSB1c2UgYW4gU1NIIGFnZW50LiBJZiBub25lCitpcyBhdmFpbGFibGUsIEpHaXQgY2Fubm90IGNvbW11bmljYXRlIHdpdGggYW4gU1NIIGFnZW50LCBhbmQgd2lsbCBub3QgYXR0ZW1wdCB0byB1c2Ugb25lLgorCisjIyMgU1NIIGNvbmZpZ3VyYXRpb25zIGZvciBTU0ggYWdlbnRzCisKK1RoZXJlIGFyZSBzZXZlcmFsIFNTSCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIGB+Ly5zc2gvY29uZmlnYCBmaWxlIHRvIGNvbmZpZ3VyZQordGhlIHVzZSBvZiBhbiBTU0ggYWdlbnQuIEZvciB0aGUgZGV0YWlscywgc2VlIHRoZSBbT3BlbkJTRCBzc2gtY29uZmlnIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbWFuLm9wZW5ic2Qub3JnL3NzaF9jb25maWcuNSkuCisKKyogKipBZGRLZXlzVG9BZ2VudCoqIGNhbiBiZSBzZXQgdG8gYG5vYCwgYHllc2AsIG9yIGBhc2tgLiBJZiBzZXQgdG8gYHllc2AsIGtleXMgd2lsbCBiZSBhZGRlZAorICB0byB0aGUgYWdlbnQgaWYgdGhleSdyZSBub3QgeWV0IGluIHRoZSBhZ2VudC4gSWYgc2V0IHRvIGBhc2tgLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkCisgIGJlZm9yZSBkb2luZyBzbywgYW5kIGNhbiBvcHQgb3V0IG9mIGFkZGluZyB0aGUga2V5LiBKR2l0IGFsc28gc3VwcG9ydHMgdGhlIGFkZGl0aW9uYWwKKyAgc2V0dGluZ3MgYGNvbmZpcm1gIGFuZCBrZXkgbGlmZXRpbWVzLgorKiAqKklkZW50aXR5QWdlbnQqKiBjYW4gYmUgc2V0IHRvIGNob29zZSB3aGljaCBTU0ggYWdlbnQgdG8gdXNlLCBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBydW5uaW5nLgorICBJdCBjYW4gYWxzbyBiZSBzZXQgdG8gYG5vbmVgIHRvIGV4cGxpY2l0bHkgc3dpdGNoIG9mZiB1c2luZyBhbiBTU0ggYWdlbnQgYXQgYWxsLgorKiAqKklkZW50aXRpZXNPbmx5KiogaWYgc2V0IHRvIGB5ZXNgIGFuZCBhbiBTU0ggYWdlbnQgaXMgdXNlZCwgb25seSBrZXlzIGZyb20gdGhlIGFnZW50IHRoYXQgYXJlCisgIGFsc28gbGlzdGVkIGluIGFuIGBJZGVudGl0eUZpbGVgIHByb3BlcnR5IHdpbGwgYmUgY29uc2lkZXJlZC4gKEl0J2xsIGFsc28gc3dpdGNoIG9mZiB0cnlpbmcKKyAgZGVmYXVsdCBrZXkgbmFtZXMsIHN1Y2ggYXMgYH4vLnNzaC9pZF9yc2FgIG9yIGB+Ly5zc2gvaWRfZWQyNTUxOWA7IG9ubHkga2V5cyBsaXN0ZWQgZXhwbGljaXRseQorICB3aWxsIGJlIHVzZWQuKQorCisjIyMgTGltaXRhdGlvbnMKKworQXMgbWVudGlvbmVkIGFib3ZlIEpHaXQgb25seSBpbXBsZW1lbnRzIHRoZSBuZXdlciBPcGVuU1NIIHByb3RvY29sLiBPcGVuU1NIIGZ1bGx5IGltcGxlbWVudHMgdGhpcywKK2J1dCBzb21lIG90aGVyIFNTSCBhZ2VudHMgb25seSBvZmZlciBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy4gSW4gcGFydGljdWxhciBvbiBXaW5kb3dzLCBuZWl0aGVyCitQYWdlYW50IG5vciBXaW4zMi1PcGVuU1NIIGltcGxlbWVudCB0aGUgYGNvbmZpcm1gIG9yIGxpZmV0aW1lIGNvbnN0cmFpbnRzIGZvciBgQWRkS2V5c1RvQWdlbnRgLiBXaXRoCitzdWNoIFNTSCBhZ2VudHMsIHRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgdXNlZCBpbiBgfi8uc3NoL2NvbmZpZ2AuIEdQRydzIGdwZy1hZ2VudCBjYW4gYmUgcnVuCit3aXRoIG9wdGlvbiBgZW5hYmxlX3B1dHR5X3N1cHBvcnRgIGFuZCBjYW4gdGhlbiBiZSB1c2VkIGFzIGEgUGFnZWFudCByZXBsYWNlbWVudC4gZ3BnLWFnZW50IGFwcGVhcnMKK3RvIHN1cHBvcnQgdGhlc2Uga2V5IGNvbnN0cmFpbnRzLgorCitPcGVuU1NIIGRvZXMgbm90IGltcGxlbWVudCBlZDQ0OCBrZXlzLCBhbmQgbmVpdGhlciBkb2VzIEFwYWNoZSBNSU5BIHNzaGQsIGFuZCBoZW5jZSBzdWNoIGtleXMgYXJlCitub3Qgc3VwcG9ydGVkIGluIEpHaXQgaWYgaXRzIGJ1aWx0LWluIFNTSCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkLiBlZDQ0OCBvciBvdGhlciB1bnN1cHBvcnRlZCBrZXlzCitwcm92aWRlZCBieSBhbiBTU0ggYWdlbnQgYXJlIGlnbm9yZWQuCisKICMjIFVzaW5nIGEgZGlmZmVyZW50IFNTSCBpbXBsZW1lbnRhdGlvbgogCiBUbyB1c2UgYSBkaWZmZXJlbnQgU1NIIGltcGxlbWVudGF0aW9uOgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAppbmRleCAzNDBjY2ExLi42NzRjN2E0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTwvYXJ0aWZhY3RJZD4KQEAgLTUwLDYgKzUwLDE2IEBACiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNzaGQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLXNmdHA8L2FydGlmYWN0SWQ+CiAgICAgICA8dmVyc2lvbj4ke2FwYWNoZS1zc2hkLXZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLWNvbW1vbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgIDwvZXhjbHVzaW9ucz4KICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICA8ZGVwZW5kZW5jeT4KQEAgLTE1NCw2ICsxNjQsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KQEAgLTIwNyw2ICsyMjAsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKaW5kZXggMmJiYTczNi4uNGY3MzViYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKQEAgLTEsNSArMSw2IEBACiBhdXRoZW50aWNhdGlvbkNhbmNlbGVkPVNTSCBhdXRoZW50aWNhdGlvbiBjYW5jZWxlZDogbm8gcGFzc3dvcmQgZ2l2ZW4KIGF1dGhlbnRpY2F0aW9uT25DbG9zZWRTZXNzaW9uPUF1dGhlbnRpY2F0aW9uIGNhbmNlbGVkOiBzZXNzaW9uIGlzIGFscmVhZHkgY2xvc2luZyBvciBjbG9zZWQKK2Nhbm5vdFJlYWRQdWJsaWNLZXk9Q2Fubm90IHJlYWQgcHVibGljIGtleSBmcm9tIGZpbGUgezB9CiBjbG9zZUxpc3RlbmVyRmFpbGVkPVNzaCBzZXNzaW9uIGNsb3NlIGxpc3RlbmVyIGZhaWxlZAogY29uZmlnSW52YWxpZFBhdGg9SW52YWxpZCBwYXRoIGluIHNzaCBjb25maWcga2V5IHswfTogezF9CiBjb25maWdJbnZhbGlkUGF0dGVybj1JbnZhbGlkIHBhdHRlcm4gaW4gc3NoIGNvbmZpZyBrZXkgezB9OiB7MX0KQEAgLTc3LDYgKzc4LDggQEAKIHByb3h5U29ja3NVbmV4cGVjdGVkTWVzc2FnZT1VbmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBTT0NLUzUgcHJveHkgezB9OyBjbGllbnQgc3RhdGUgezF9OiB7Mn0KIHByb3h5U29ja3NVbmV4cGVjdGVkVmVyc2lvbj1FeHBlY3RlZCBTT0NLUyB2ZXJzaW9uIDUsIGdvdCB7MH0KIHByb3h5U29ja3NVc2VybmFtZVRvb0xvbmc9VXNlciBuYW1lIGZvciBwcm94eSB7MH0gbXVzdCBiZSBhdCBtb3N0IDI1NSBieXRlcyBsb25nLCBpcyB7MX0gYnl0ZXM6IHsyfQorcHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvcj1Db3VsZCBub3QgYWRkIHswfSBrZXkgd2l0aCBmaW5nZXJwcmludCB7MX0gdG8gdGhlIFNTSCBhZ2VudAorcHVia2V5QXV0aEFkZEtleVRvQWdlbnRRdWVzdGlvbj1BZGQgdGhlIHswfSBrZXkgd2l0aCBmaW5nZXJwcmludCB7MX0gdG8gdGhlIFNTSCBhZ2VudD8KIHB1YmtleUF1dGhXcm9uZ0NvbW1hbmQ9UHVibGljIGtleSBhdXRoZW50aWNhdGlvbiByZWNlaXZlZCB1bmtub3duIFNTSCBjb21tYW5kIHswfSBmcm9tIHsxfSAoezJ9KQogcHVia2V5QXV0aFdyb25nS2V5PVB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gcmVjZWl2ZWQgd3Jvbmcga2V5OyBzZW50IHswfSwgZ290IGJhY2sgezF9IGZyb20gezJ9ICh7M30pCiBwdWJrZXlBdXRoV3JvbmdTaWduYXR1cmVBbGdvcml0aG09UHVibGljIGtleSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0ZWQgc2lnbmF0dXJlIHR5cGUgezB9IGJ1dCBnb3QgYmFjayB7MX0gZnJvbSB7Mn0gKHszfSkKQEAgLTg1LDkgKzg4LDEzIEBACiBzZXJ2ZXJJZFdpdGhOdWw9U2VydmVyIGlkZW50aWZpY2F0aW9uIGNvbnRhaW5zIGEgTlVMIGNoYXJhY3RlcjogezB9CiBzZXNzaW9uQ2xvc2VGYWlsZWQ9Q2xvc2luZyB0aGUgc2Vzc2lvbiBmYWlsZWQKIHNlc3Npb25XaXRob3V0VXNlcm5hbWU9U1NIIHNlc3Npb24gY3JlYXRlZCB3aXRob3V0IHVzZXIgbmFtZTsgY2Fubm90IGF1dGhlbnRpY2F0ZQorc3NoQWdlbnRFZERTQUZvcm1hdEVycm9yPUNhbm5vdCBhZGQgZWQyNTUxOSBrZXkgdG8gdGhlIFNTSCBhZ2VudCBiZWNhdXNlIGl0IGlzIGVuY29kZWQgYXMgezB9IGluc3RlYWQgb2YgUEtDUyM4Citzc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvcj1FeHBlY3RlZCB7MCxjaG9pY2UsMCNubyBieXRlc3wxI29uZSBieXRlfDE8ezB9IGJ5dGVzfSBidXQgZ290IHsxfQogc3NoQWdlbnRSZXBseUxlbmd0aEVycm9yPUludmFsaWQgU1NIIGFnZW50IHJlcGx5IG1lc3NhZ2UgbGVuZ3RoIHswfSBhZnRlciBjb21tYW5kIHsxfQogc3NoQWdlbnRSZXBseVVuZXhwZWN0ZWQ9VW5leHBlY3RlZCByZXBseSBmcm9tIHNzaC1hZ2VudDogezB9CiBzc2hBZ2VudFNob3J0UmVhZEJ1ZmZlcj1TaG9ydCByZWFkIGZyb20gU1NIIGFnZW50Citzc2hBZ2VudFVua25vd25LZXk9U1NIIGFnZW50IGRlbGl2ZXJlZCBhIGtleSB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkCitzc2hBZ2VudFdyb25nS2V5TGVuZ3RoPVNTSCBhZ2VudCBkZWxpdmVyZWQgaWxsb2dpY2FsIGtleSBsZW5ndGggezB9IGF0IG9mZnNldCB7MX0gaW4gYnVmZmVyIG9mIGxlbmd0aCB7Mn0KIHNzaEFnZW50V3JvbmdOdW1iZXJPZktleXM9SW52YWxpZCBudW1iZXIgb2YgU1NIIGFnZW50IGtleXM6IHswfQogc3NoQ2xvc2luZ0Rvd249QXBhY2hlIE1JTkEgc3NoZCBzZXNzaW9uIGZhY3RvcnkgaXMgY2xvc2luZyBkb3duOyBjYW5ub3QgY3JlYXRlIG5ldyBzc2ggc2Vzc2lvbnMgb24gdGhpcyBmYWN0b3J5CiBzc2hDb21tYW5kVGltZW91dD17MH0gdGltZWQgb3V0IGFmdGVyIHsxfSBzZWNvbmRzIHdoaWxlIG9wZW5pbmcgdGhlIGNoYW5uZWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0Q2xpZW50U2Vzc2lvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKaW5kZXggZTJkYmI0Yy4uNTEwMGJjOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKQEAgLTQyLDcgKzQyLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmlvLklvV3JpdGVGdXR1cmU7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguQnVpbHRpbkRIRmFjdG9yaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LkRIRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5LZXhQcm9wb3NhbE9wdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5LZXlFeGNoYW5nZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLktleEV4dGVuc2lvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLktleEV4dGVuc2lvbkhhbmRsZXIuQXZhaWxhYmlsaXR5UGhhc2U7CkBAIC0xOTksMjQgKzE5OCw2IEBAIHB1YmxpYyB2b2lkIG1lc3NhZ2VSZWNlaXZlZChSZWFkYWJsZSBidWZmZXIpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAJfQogCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIE1hcDxLZXhQcm9wb3NhbE9wdGlvbiwgU3RyaW5nPiBzZXROZWdvdGlhdGlvblJlc3VsdCgKLQkJCU1hcDxLZXhQcm9wb3NhbE9wdGlvbiwgU3RyaW5nPiBndWVzcykgewotCQlNYXA8S2V4UHJvcG9zYWxPcHRpb24sIFN0cmluZz4gcmVzdWx0ID0gc3VwZXIuc2V0TmVnb3RpYXRpb25SZXN1bHQoCi0JCQkJZ3Vlc3MpOwotCQkvLyBUaGlzIHNob3VsZCBiZSBkb2FibGUgd2l0aCBhIFNlc3Npb25MaXN0ZW5lciwgdG9vLCBidXQgSSBkb24ndCBzZWUKLQkJLy8gaG93IHRvIGFkZCBhIGxpc3RlbmVyIGluIHRpbWUgdG8gY2F0Y2ggdGhlIG5lZ290aWF0aW9uIGVuZCBmb3Igc3VyZQotCQkvLyBnaXZlbiB0aGF0IHRoZSBzdXBlci1jb25zdHJ1Y3RvciBhbHJlYWR5IHN0YXJ0cyBLRVguCi0JCS8vCi0JCS8vIFRPRE86IFRoaXMgb3ZlcnJpZGUgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSB1c2Ugc3NoZCAyLjguMC4KLQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7Ci0JCQlyZXN1bHQuZm9yRWFjaCgob3B0aW9uLCB2YWx1ZSkgLT4gbG9nLmRlYnVnKAotCQkJCQkic2V0TmVnb3RpYXRpb25SZXN1bHQoe30pIEtleDoge30gPSB7fSIsIHRoaXMsIC8vJE5PTi1OTFMtMSQKLQkJCQkJb3B0aW9uLmdldERlc2NyaXB0aW9uKCksIHZhbHVlKSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KIAlTZXQ8U3RyaW5nPiBnZXRBbGxBdmFpbGFibGVTaWduYXR1cmVBbGdvcml0aG1zKCkgewogCQlTZXQ8U3RyaW5nPiBhbGxBdmFpbGFibGUgPSBuZXcgSGFzaFNldDw+KCk7CiAJCUJ1aWx0aW5TaWduYXR1cmVzLlZBTFVFUy5mb3JFYWNoKHMgLT4gYWxsQXZhaWxhYmxlLmFkZChzLmdldE5hbWUoKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhCmluZGV4IGMwODJhOWEuLjk2ZGEwY2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uLmphdmEKQEAgLTEyLDI1ICsxMiw2OCBAQAogaW1wb3J0IHN0YXRpYyBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50cy5QVUJLRVlfQUNDRVBURURfQUxHT1JJVEhNUzsKIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5JbnZhbGlkUGF0aEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkxpbmtPcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS5zZWN1cml0eS5HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlQYWlyOworaW1wb3J0IGphdmEuc2VjdXJpdHkuUHVibGljS2V5OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmFnZW50LlNzaEFnZW50RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRLZXlDb25zdHJhaW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5wdWJrZXkuS2V5QWdlbnRJZGVudGl0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucHVia2V5LlB1YmxpY0tleUlkZW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5wdWJrZXkuVXNlckF1dGhQdWJsaWNLZXk7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleS5Vc2VyQXV0aFB1YmxpY0tleUl0ZXJhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuY29uZmlnLmhvc3RzLkhvc3RDb25maWdFbnRyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uQ2xpZW50U2Vzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLkZhY3RvcnlNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uTmFtZWRGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuQXV0aG9yaXplZEtleUVudHJ5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuS2V5VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5cy5QdWJsaWNLZXlFbnRyeVJlc29sdmVyOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMudTJmLlNlY3VyaXR5S2V5UHVibGljS2V5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlLlNpZ25hdHVyZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZS5TaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaC5PcGVuU3NoQ29uZmlnRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5DcmVkZW50aWFsSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5DcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5VUklpc2g7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN0cmluZ1V0aWxzOwogCiAvKioKICAqIEN1c3RvbSB7QGxpbmsgVXNlckF1dGhQdWJsaWNLZXl9IGltcGxlbWVudGF0aW9uIGZvciBoYW5kbGluZyBTU0ggY29uZmlnCi0gKiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMuCisgKiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIFNTSCBhZ2VudC4KICAqLwogcHVibGljIGNsYXNzIEpHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbiBleHRlbmRzIFVzZXJBdXRoUHVibGljS2V5IHsKIAorCXByaXZhdGUgU3NoQWdlbnQgYWdlbnQ7CisKKwlwcml2YXRlIEhvc3RDb25maWdFbnRyeSBob3N0Q29uZmlnOworCisJcHJpdmF0ZSBib29sZWFuIGFkZEtleXNUb0FnZW50OworCisJcHJpdmF0ZSBib29sZWFuIGFza0JlZm9yZUFkZGluZzsKKworCXByaXZhdGUgU3RyaW5nIHNrUHJvdmlkZXI7CisKKwlwcml2YXRlIFNzaEFnZW50S2V5Q29uc3RyYWludFtdIGNvbnN0cmFpbnRzOworCiAJSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uKExpc3Q8TmFtZWRGYWN0b3J5PFNpZ25hdHVyZT4+IGZhY3RvcmllcykgewogCQlzdXBlcihmYWN0b3JpZXMpOwogCX0KQEAgLTQzLDcgKzg2LDcgQEAgcHVibGljIHZvaWQgaW5pdChDbGllbnRTZXNzaW9uIHJhd1Nlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCQkJCQkrIHJhd1Nlc3Npb24uZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkpOwogCQl9CiAJCUpHaXRDbGllbnRTZXNzaW9uIHNlc3Npb24gPSAoSkdpdENsaWVudFNlc3Npb24pIHJhd1Nlc3Npb247Ci0JCUhvc3RDb25maWdFbnRyeSBob3N0Q29uZmlnID0gc2Vzc2lvbi5nZXRIb3N0Q29uZmlnRW50cnkoKTsKKwkJaG9zdENvbmZpZyA9IHNlc3Npb24uZ2V0SG9zdENvbmZpZ0VudHJ5KCk7CiAJCS8vIFNldCBzaWduYXR1cmUgYWxnb3JpdGhtcyBmb3IgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbgogCQlTdHJpbmcgcHVia2V5QWxnb3MgPSBob3N0Q29uZmlnLmdldFByb3BlcnR5KFBVQktFWV9BQ0NFUFRFRF9BTEdPUklUSE1TKTsKIAkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHB1YmtleUFsZ29zKSkgewpAQCAtNjQsNDYgKzEwNywyOTEgQEAgcHVibGljIHZvaWQgaW5pdChDbGllbnRTZXNzaW9uIHJhd1Nlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCQkvLyBJZiB3ZSBkb24ndCBzZXQgc2lnbmF0dXJlIGZhY3RvcmllcyBoZXJlLCB0aGUgZGVmYXVsdCBvbmVzIGZyb20gdGhlCiAJCS8vIHNlc3Npb24gd2lsbCBiZSB1c2VkLgogCQlzdXBlci5pbml0KHNlc3Npb24sIHNlcnZpY2UpOwotCQkvLyBJbiBzc2hkIDIuNy4wLCB3ZSBlbmQgdXAgbm93IHdpdGggYSBrZXkgaXRlcmF0b3IgdGhhdCB1c2VzIGtleXMKLQkJLy8gcHJvdmlkZWQgYnkgYW4gc3NoLWFnZW50IGV2ZW4gaWYgSWRlbnRpdGllc09ubHkgaXMgdHJ1ZS4gU28gaWYKLQkJLy8gbmVlZGVkLCBmaWx0ZXIgb3V0IGFueSBLZXlBZ2VudElkZW50aXR5LgotCQlpZiAoaG9zdENvbmZpZy5pc0lkZW50aXRpZXNPbmx5KCkpIHsKLQkJCUl0ZXJhdG9yPFB1YmxpY0tleUlkZW50aXR5PiBvcmlnaW5hbCA9IGtleXM7Ci0JCQkvLyBUaGUgb3JpZ2luYWwgaXRlcmF0b3Igd2lsbCBhbHJlYWR5IGhhdmUgZ290dGVuIHRoZSBpZGVudGl0aWVzCi0JCQkvLyBmcm9tIHRoZSBhZ2VudC4gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0Ci0JCQkvLyB0aGF0OyBpdCdsbCBoYXZlIHRvIGJlIGZpeGVkIHVwc3RyZWFtLiAoQXMgd2lsbCwgdWx0aW1hdGVseSwKLQkJCS8vIHJlc3BlY3RpbmcgaXNJZGVudGl0aWVzT25seSgpLikgQXQgbGVhc3Qgd2UgY2FuIHNpbXBseSBub3QKLQkJCS8vIHVzZSB0aGUga2V5cyB0aGUgYWdlbnQgcHJvdmlkZWQuCi0JCQkvLwotCQkJLy8gU2VlIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvU1NIRC0xMjE4Ci0JCQlrZXlzID0gbmV3IEl0ZXJhdG9yPD4oKSB7CisJfQogCi0JCQkJcHJpdmF0ZSBQdWJsaWNLZXlJZGVudGl0eSB2YWx1ZTsKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSXRlcmF0b3I8UHVibGljS2V5SWRlbnRpdHk+IGNyZWF0ZVB1YmxpY0tleUl0ZXJhdG9yKAorCQkJQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLCBTaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyIG1hbmFnZXIpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWdlbnQgPSBnZXRBZ2VudChzZXNzaW9uKTsKKwkJaWYgKGFnZW50ICE9IG51bGwpIHsKKwkJCXBhcnNlQWRkS2V5cyhob3N0Q29uZmlnKTsKKwkJCWlmIChhZGRLZXlzVG9BZ2VudCkgeworCQkJCXNrUHJvdmlkZXIgPSBob3N0Q29uZmlnLmdldFByb3BlcnR5KFNzaENvbnN0YW50cy5TRUNVUklUWV9LRVlfUFJPVklERVIpOworCQkJfQorCQl9CisJCXJldHVybiBuZXcgS2V5SXRlcmF0b3Ioc2Vzc2lvbiwgbWFuYWdlcik7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFB1YmxpY0tleUlkZW50aXR5IHJlc29sdmVBdHRlbXB0ZWRQdWJsaWNLZXlJZGVudGl0eSgKKwkJCUNsaWVudFNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIHNlcnZpY2UpIHRocm93cyBFeGNlcHRpb24geworCQlQdWJsaWNLZXlJZGVudGl0eSByZXN1bHQgPSBnZXROZXh0S2V5KHNlc3Npb24sIHNlcnZpY2UpOworCQkvLyBUaGlzIGZpeGVzIFNTSEQtMTIzMS4gQ2FuIGJlIHJlbW92ZWQgb25jZSB3ZSdyZSB1c2luZyBBcGFjaGUgTUlOQQorCQkvLyBzc2hkID4gMi44LjAuCisJCS8vCisJCS8vIFNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1NTSEQtMTIzMQorCQljdXJyZW50QWxnb3JpdGhtcy5jbGVhcigpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXByaXZhdGUgUHVibGljS2V5SWRlbnRpdHkgZ2V0TmV4dEtleShDbGllbnRTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVB1YmxpY0tleUlkZW50aXR5IGlkID0gc3VwZXIucmVzb2x2ZUF0dGVtcHRlZFB1YmxpY0tleUlkZW50aXR5KHNlc3Npb24sCisJCQkJc2VydmljZSk7CisJCWlmIChhZGRLZXlzVG9BZ2VudCAmJiBpZCAhPSBudWxsICYmICEoaWQgaW5zdGFuY2VvZiBLZXlBZ2VudElkZW50aXR5KSkgeworCQkJS2V5UGFpciBrZXkgPSBpZC5nZXRLZXlJZGVudGl0eSgpOworCQkJaWYgKGtleSAhPSBudWxsICYmIGtleS5nZXRQdWJsaWMoKSAhPSBudWxsCisJCQkJCSYmIGtleS5nZXRQcml2YXRlKCkgIT0gbnVsbCkgeworCQkJCS8vIFdlJ3ZlIGp1c3Qgc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhIGtleSB0aGF0IHdhc24ndCBpbiB0aGUKKwkJCQkvLyBhZ2VudC4gQWRkIGl0IHRvIHRoZSBhZ2VudC4KKwkJCQkvLworCQkJCS8vIEtleXMgYXJlIGFkZGVkIGFmdGVyIGxvYWRpbmcsIGFzIGluIE9wZW5TU0guIFRoZSBhbHRlcm5hdGl2ZQorCQkJCS8vIG1pZ2h0IGJlIHRvIGFkZCBhIGtleSBvbmx5IGFmdGVyIChwYXJ0aWFsbHkpIHN1Y2Nlc3NmdWwKKwkJCQkvLyBhdXRoZW50aWNhdGlvbj8KKwkJCQlQdWJsaWNLZXkgcGsgPSBrZXkuZ2V0UHVibGljKCk7CisJCQkJU3RyaW5nIGZpbmdlcnByaW50ID0gS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQocGspOworCQkJCVN0cmluZyBrZXlUeXBlID0gS2V5VXRpbHMuZ2V0S2V5VHlwZShrZXkpOworCQkJCXRyeSB7CisJCQkJCS8vIENoZWNrIHRoYXQgdGhlIGtleSBpcyBub3QgaW4gdGhlIGFnZW50IGFscmVhZHkuCisJCQkJCWlmIChhZ2VudEhhc0tleShwaykpIHsKKwkJCQkJCXJldHVybiBpZDsKKwkJCQkJfQorCQkJCQlpZiAoYXNrQmVmb3JlQWRkaW5nCisJCQkJCQkJJiYgKHNlc3Npb24gaW5zdGFuY2VvZiBKR2l0Q2xpZW50U2Vzc2lvbikpIHsKKwkJCQkJCUNyZWRlbnRpYWxzUHJvdmlkZXIgcHJvdmlkZXIgPSAoKEpHaXRDbGllbnRTZXNzaW9uKSBzZXNzaW9uKQorCQkJCQkJCQkuZ2V0Q3JlZGVudGlhbHNQcm92aWRlcigpOworCQkJCQkJQ3JlZGVudGlhbEl0ZW0uWWVzTm9UeXBlIHF1ZXN0aW9uID0gbmV3IENyZWRlbnRpYWxJdGVtLlllc05vVHlwZSgKKwkJCQkJCQkJZm9ybWF0KFNzaGRUZXh0CisJCQkJCQkJCQkJLmdldCgpLnB1YmtleUF1dGhBZGRLZXlUb0FnZW50UXVlc3Rpb24sCisJCQkJCQkJCQkJa2V5VHlwZSwgZmluZ2VycHJpbnQpKTsKKwkJCQkJCWJvb2xlYW4gcmVzdWx0ID0gcHJvdmlkZXIgIT0gbnVsbAorCQkJCQkJCQkmJiBwcm92aWRlci5zdXBwb3J0cyhxdWVzdGlvbikKKwkJCQkJCQkJJiYgcHJvdmlkZXIuZ2V0KGdldFVyaSgpLCBxdWVzdGlvbik7CisJCQkJCQlpZiAoIXJlc3VsdCB8fCAhcXVlc3Rpb24uZ2V0VmFsdWUoKSkgeworCQkJCQkJCS8vIERvbid0IGFkZCB0aGUga2V5LgorCQkJCQkJCXJldHVybiBpZDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlTc2hBZ2VudEtleUNvbnN0cmFpbnRbXSBydWxlcyA9IGNvbnN0cmFpbnRzOworCQkJCQlpZiAocGsgaW5zdGFuY2VvZiBTZWN1cml0eUtleVB1YmxpY0tleSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChza1Byb3ZpZGVyKSkgeworCQkJCQkJcnVsZXMgPSBBcnJheXMuY29weU9mKHJ1bGVzLCBydWxlcy5sZW5ndGggKyAxKTsKKwkJCQkJCXJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdID0KKwkJCQkJCQkJbmV3IFNzaEFnZW50S2V5Q29uc3RyYWludC5GaWRvUHJvdmlkZXJFeHRlbnNpb24oc2tQcm92aWRlcik7CisJCQkJCX0KKwkJCQkJLy8gVW5mb3J0dW5hdGVseSBhIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgaXMgbG9zdAorCQkJCQkvLyBieSBBcGFjaGUgTUlOQSBzc2hkLCBhbmQgdGhlcmUgaXMgYWxzbyBubyB3YXkgdG8gZ2V0IHRoZQorCQkJCQkvLyBvcmlnaW5hbCBmaWxlIG5hbWUgZm9yIGtleXMgbG9hZGVkIGZyb20gYSBmaWxlLiBTbyBhZGQgaXQKKwkJCQkJLy8gd2l0aG91dCBjb21tZW50LgorCQkJCQlhZ2VudC5hZGRJZGVudGl0eShrZXksIG51bGwsIHJ1bGVzKTsKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIERvIG5vdCByZS10aHJvdzogd2UgZG9uJ3Qgd2FudCBhdXRoZW50aWNhdGlvbiB0byBmYWlsIGlmCisJCQkJCS8vIHdlIGNhbm5vdCBhZGQgdGhlIGtleSB0byB0aGUgYWdlbnQuCisJCQkJCWxvZy5lcnJvcigKKwkJCQkJCQlmb3JtYXQoU3NoZFRleHQuZ2V0KCkucHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvciwKKwkJCQkJCQkJCWtleVR5cGUsIGZpbmdlcnByaW50KSwKKwkJCQkJCQllKTsKKwkJCQkJLy8gTm90ZSB0aGF0IGFzIG9mIFdpbjMyLU9wZW5TU0ggOC42IGFuZCBQYWdlYW50IDAuNzYsCisJCQkJCS8vIG5laXRoZXIgY2FuIGhhbmRsZSBrZXkgY29uc3RyYWludHMuIFBhZ2VhbnQgZmFpbHMKKwkJCQkJLy8gZ3JhY2VmdWxseSwgbm90IGFkZGluZyB0aGUga2V5IGFuZCByZXR1cm5pbmcKKwkJCQkJLy8gU1NIX0FHRU5UX0ZBSUxVUkUuIFdpbjMyLU9wZW5TU0ggY2xvc2VzIHRoZSBjb25uZWN0aW9uCisJCQkJCS8vIHdpdGhvdXQgZXZlbiByZXR1cm5pbmcgYSBmYWlsdXJlIG1lc3NhZ2UsIHdoaWNoIHZpb2xhdGVzCisJCQkJCS8vIHRoZSBTU0ggYWdlbnQgcHJvdG9jb2wgYW5kIG1ha2VzIGFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzCisJCQkJCS8vIHRvIHRoZSBhZ2VudCBmYWlsLgorCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gaWQ7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIGFnZW50SGFzS2V5KFB1YmxpY0tleSBwaykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJSXRlcmFibGU8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGlkcyA9IGFnZW50CisJCQkJLmdldElkZW50aXRpZXMoKTsKKwkJaWYgKGlkcyA9PSBudWxsKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJSXRlcmF0b3I8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGl0ZXIgPSBpZHMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlpZiAoS2V5VXRpbHMuY29tcGFyZUtleXMoaXRlci5uZXh0KCkuZ2V0S2V5KCksIHBrKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIFVSSWlzaCBnZXRVcmkoKSB7CisJCVN0cmluZyB1cmkgPSBTc2hDb25zdGFudHMuU1NIX1NDSEVNRSArICI6Ly8iOyAvLyROT04tTkxTLTEkCisJCVN0cmluZyB1c2VyTmFtZSA9IGhvc3RDb25maWcuZ2V0VXNlcm5hbWUoKTsKKwkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHVzZXJOYW1lKSkgeworCQkJdXJpICs9IHVzZXJOYW1lICsgJ0AnOworCQl9CisJCXVyaSArPSBob3N0Q29uZmlnLmdldEhvc3QoKTsKKwkJaW50IHBvcnQgPSBob3N0Q29uZmlnLmdldFBvcnQoKTsKKwkJaWYgKHBvcnQgPiAwICYmIHBvcnQgIT0gU3NoQ29uc3RhbnRzLlNTSF9ERUZBVUxUX1BPUlQpIHsKKwkJCXVyaSArPSAiOiIgKyBwb3J0OyAvLyROT04tTkxTLTEkCisJCX0KKwkJdHJ5IHsKKwkJCXJldHVybiBuZXcgVVJJaXNoKHVyaSk7CisJCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisJCQlsb2cuZXJyb3IoZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCksIGUpOworCQl9CisJCXJldHVybiBuZXcgVVJJaXNoKCk7CisJfQorCisJcHJpdmF0ZSBTc2hBZ2VudCBnZXRBZ2VudChDbGllbnRTZXNzaW9uIHNlc3Npb24pIHRocm93cyBFeGNlcHRpb24geworCQlGYWN0b3J5TWFuYWdlciBtYW5hZ2VyID0gT2JqZWN0cy5yZXF1aXJlTm9uTnVsbCgKKwkJCQlzZXNzaW9uLmdldEZhY3RvcnlNYW5hZ2VyKCksICJObyBzZXNzaW9uIGZhY3RvcnkgbWFuYWdlciIpOyAvLyROT04tTkxTLTEkCisJCVNzaEFnZW50RmFjdG9yeSBmYWN0b3J5ID0gbWFuYWdlci5nZXRBZ2VudEZhY3RvcnkoKTsKKwkJaWYgKGZhY3RvcnkgPT0gbnVsbCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJcmV0dXJuIGZhY3RvcnkuY3JlYXRlQ2xpZW50KHNlc3Npb24sIG1hbmFnZXIpOworCX0KKworCXByaXZhdGUgdm9pZCBwYXJzZUFkZEtleXMoSG9zdENvbmZpZ0VudHJ5IGNvbmZpZykgeworCQlTdHJpbmcgdmFsdWUgPSBjb25maWcuZ2V0UHJvcGVydHkoU3NoQ29uc3RhbnRzLkFERF9LRVlTX1RPX0FHRU5UKTsKKwkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwodmFsdWUpKSB7CisJCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJCVN0cmluZ1tdIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKwkJTGlzdDxTc2hBZ2VudEtleUNvbnN0cmFpbnQ+IHJ1bGVzID0gbmV3IEFycmF5TGlzdDw+KDIpOworCQlzd2l0Y2ggKHZhbHVlc1swXSkgeworCQljYXNlICJ5ZXMiOiAvLyROT04tTkxTLTEkCisJCQlhZGRLZXlzVG9BZ2VudCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAibm8iOiAvLyROT04tTkxTLTEkCisJCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgImFzayI6IC8vJE5PTi1OTFMtMSQKKwkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCWFza0JlZm9yZUFkZGluZyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAiY29uZmlybSI6IC8vJE5PTi1OTFMtMSQKKwkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCXJ1bGVzLmFkZChTc2hBZ2VudEtleUNvbnN0cmFpbnQuQ09ORklSTSk7CisJCQlpZiAodmFsdWVzLmxlbmd0aCA+IDEpIHsKKwkJCQlpbnQgc2Vjb25kcyA9IE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKHZhbHVlc1sxXSk7CisJCQkJaWYgKHNlY29uZHMgPiAwKSB7CisJCQkJCXJ1bGVzLmFkZChuZXcgU3NoQWdlbnRLZXlDb25zdHJhaW50LkxpZmVUaW1lKHNlY29uZHMpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWludCBzZWNvbmRzID0gT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWModmFsdWVzWzBdKTsKKwkJCWlmIChzZWNvbmRzID4gMCkgeworCQkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCQlydWxlcy5hZGQobmV3IFNzaEFnZW50S2V5Q29uc3RyYWludC5MaWZlVGltZShzZWNvbmRzKSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljb25zdHJhaW50cyA9IHJ1bGVzLnRvQXJyYXkobmV3IFNzaEFnZW50S2V5Q29uc3RyYWludFswXSk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcmVsZWFzZUtleXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQlhc2tCZWZvcmVBZGRpbmcgPSBmYWxzZTsKKwkJc2tQcm92aWRlciA9IG51bGw7CisJCWNvbnN0cmFpbnRzID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWlmIChhZ2VudCAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJYWdlbnQuY2xvc2UoKTsKKwkJCQl9IGZpbmFsbHkgeworCQkJCQlhZ2VudCA9IG51bGw7CisJCQkJfQorCQkJfQorCQl9IGZpbmFsbHkgeworCQkJc3VwZXIucmVsZWFzZUtleXMoKTsKKwkJfQorCX0KKworCXByaXZhdGUgY2xhc3MgS2V5SXRlcmF0b3IgZXh0ZW5kcyBVc2VyQXV0aFB1YmxpY0tleUl0ZXJhdG9yIHsKKworCQlwcml2YXRlIEl0ZXJhYmxlPD8gZXh0ZW5kcyBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBhZ2VudEtleXM7CisKKwkJLy8gSWYgbm9uLW51bGwsIGFsbCB0aGUgcHVibGljIGtleXMgZnJvbSBleHBsaWNpdGx5IGdpdmVuIGtleSBmaWxlcy4gQW55CisJCS8vIGFnZW50IGtleSBub3QgbWF0Y2hpbmcgb25lIG9mIHRoZXNlIHB1YmxpYyBrZXlzIHdpbGwgYmUgaWdub3JlZCBpbgorCQkvLyBnZXRJZGVudGl0aWVzKCkuCisJCXByaXZhdGUgQ29sbGVjdGlvbjxQdWJsaWNLZXk+IGlkZW50aXR5RmlsZXM7CisKKwkJcHVibGljIEtleUl0ZXJhdG9yKENsaWVudFNlc3Npb24gc2Vzc2lvbiwKKwkJCQlTaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyIG1hbmFnZXIpCisJCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlcihzZXNzaW9uLCBtYW5hZ2VyKTsKKwkJfQorCisJCXByaXZhdGUgTGlzdDxQdWJsaWNLZXk+IGdldEV4cGxpY2l0S2V5cygKKwkJCQlDb2xsZWN0aW9uPFN0cmluZz4gZXhwbGljaXRGaWxlcykgeworCQkJaWYgKGV4cGxpY2l0RmlsZXMgPT0gbnVsbCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJcmV0dXJuIGV4cGxpY2l0RmlsZXMuc3RyZWFtKCkubWFwKHMgLT4geworCQkJCXRyeSB7CisJCQkJCVBhdGggcCA9IFBhdGhzLmdldChzICsgIi5wdWIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlpZiAoRmlsZXMuaXNSZWd1bGFyRmlsZShwLCBMaW5rT3B0aW9uLk5PRk9MTE9XX0xJTktTKSkgeworCQkJCQkJcmV0dXJuIEF1dGhvcml6ZWRLZXlFbnRyeS5yZWFkQXV0aG9yaXplZEtleXMocCkuZ2V0KDApCisJCQkJCQkJCS5yZXNvbHZlUHVibGljS2V5KG51bGwsCisJCQkJCQkJCQkJUHVibGljS2V5RW50cnlSZXNvbHZlci5JR05PUklORyk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChJbnZhbGlkUGF0aEV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uCisJCQkJCQl8IEdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisJCQkJCWxvZy53YXJuKGZvcm1hdChTc2hkVGV4dC5nZXQoKS5jYW5ub3RSZWFkUHVibGljS2V5LCBzKSwgZSk7CisJCQkJfQorCQkJCXJldHVybiBudWxsOworCQkJfSkuZmlsdGVyKE9iamVjdHM6Om5vbk51bGwpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEl0ZXJhYmxlPEtleUFnZW50SWRlbnRpdHk+IGluaXRpYWxpemVBZ2VudElkZW50aXRpZXMoCisJCQkJQ2xpZW50U2Vzc2lvbiBzZXNzaW9uKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJaWYgKGFnZW50ID09IG51bGwpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCWFnZW50S2V5cyA9IGFnZW50LmdldElkZW50aXRpZXMoKTsKKwkJCWlmIChob3N0Q29uZmlnICE9IG51bGwgJiYgaG9zdENvbmZpZy5pc0lkZW50aXRpZXNPbmx5KCkpIHsKKwkJCQlpZGVudGl0eUZpbGVzID0gZ2V0RXhwbGljaXRLZXlzKGhvc3RDb25maWcuZ2V0SWRlbnRpdGllcygpKTsKKwkJCX0KKwkJCXJldHVybiAoKSAtPiBuZXcgSXRlcmF0b3I8PigpIHsKKworCQkJCXByaXZhdGUgZmluYWwgSXRlcmF0b3I8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGl0ZXIgPSBhZ2VudEtleXMKKwkJCQkJCS5pdGVyYXRvcigpOworCisJCQkJcHJpdmF0ZSBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+IG5leHQ7CiAKIAkJCQlAT3ZlcnJpZGUKIAkJCQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotCQkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCX0KLQkJCQkJUHVibGljS2V5SWRlbnRpdHkgbmV4dCA9IG51bGw7Ci0JCQkJCXdoaWxlIChvcmlnaW5hbC5oYXNOZXh0KCkpIHsKLQkJCQkJCW5leHQgPSBvcmlnaW5hbC5uZXh0KCk7Ci0JCQkJCQlpZiAoIShuZXh0IGluc3RhbmNlb2YgS2V5QWdlbnRJZGVudGl0eSkpIHsKLQkJCQkJCQl2YWx1ZSA9IG5leHQ7CisJCQkJCXdoaWxlIChuZXh0ID09IG51bGwgJiYgaXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCU1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4gdmFsID0gaXRlci5uZXh0KCk7CisJCQkJCQlQdWJsaWNLZXkgcGsgPSB2YWwuZ2V0S2V5KCk7CisJCQkJCQkvLyBUaGlzIGNoZWNrcyBhZ2FpbnN0IGFsbCBleHBsaWNpdCBrZXlzIGZvciBhbnkgYWdlbnQKKwkJCQkJCS8vIGtleSwgYnV0IHNpbmNlIGlkZW50aXR5RmlsZXMuc2l6ZSgpIGlzIHR5cGljYWxseSAxLAorCQkJCQkJLy8gaXQgc2hvdWxkIGJlIGZpbmUuCisJCQkJCQlpZiAoaWRlbnRpdHlGaWxlcyA9PSBudWxsIHx8IGlkZW50aXR5RmlsZXMuc3RyZWFtKCkKKwkJCQkJCQkJLmFueU1hdGNoKGsgLT4gS2V5VXRpbHMuY29tcGFyZUtleXMoaywgcGspKSkgeworCQkJCQkJCW5leHQgPSB2YWw7CiAJCQkJCQkJcmV0dXJuIHRydWU7CiAJCQkJCQl9CisJCQkJCQlpZiAobG9nLmlzVHJhY2VFbmFibGVkKCkpIHsKKwkJCQkJCQlsb2cudHJhY2UoCisJCQkJCQkJCQkiSWdub3JpbmcgU1NIIGFnZW50IHt9IGtleSBub3QgaW4gZXhwbGljaXQgSWRlbnRpdHlGaWxlIGluIFNTSCBjb25maWc6IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJS2V5VXRpbHMuZ2V0S2V5VHlwZShwayksCisJCQkJCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChwaykpOworCQkJCQkJfQogCQkJCQl9Ci0JCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmV0dXJuIG5leHQgIT0gbnVsbDsKIAkJCQl9CiAKIAkJCQlAT3ZlcnJpZGUKLQkJCQlwdWJsaWMgUHVibGljS2V5SWRlbnRpdHkgbmV4dCgpIHsKLQkJCQkJaWYgKGhhc05leHQoKSkgewotCQkJCQkJUHVibGljS2V5SWRlbnRpdHkgcmVzdWx0ID0gdmFsdWU7Ci0JCQkJCQl2YWx1ZSA9IG51bGw7Ci0JCQkJCQlyZXR1cm4gcmVzdWx0OworCQkJCXB1YmxpYyBLZXlBZ2VudElkZW50aXR5IG5leHQoKSB7CisJCQkJCWlmICghaGFzTmV4dCgpKSB7CisJCQkJCQl0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwogCQkJCQl9Ci0JCQkJCXRocm93IG5ldyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKCk7CisJCQkJCUtleUFnZW50SWRlbnRpdHkgcmVzdWx0ID0gbmV3IEtleUFnZW50SWRlbnRpdHkoYWdlbnQsCisJCQkJCQkJbmV4dC5nZXRLZXkoKSwgbmV4dC5nZXRWYWx1ZSgpKTsKKwkJCQkJbmV4dCA9IG51bGw7CisJCQkJCXJldHVybiByZXN1bHQ7CiAJCQkJfQogCQkJfTsKIAkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQppbmRleCAwMGVlNjJkLi4xOWFkODVjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQpAQCAtMzAsNiArMzAsNyBAQCBwdWJsaWMgc3RhdGljIFNzaGRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGF1dGhlbnRpY2F0aW9uQ2FuY2VsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhdXRoZW50aWNhdGlvbk9uQ2xvc2VkU2Vzc2lvbjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNsb3NlTGlzdGVuZXJGYWlsZWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBjYW5ub3RSZWFkUHVibGljS2V5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29uZmlnSW52YWxpZFBhdGg7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb25maWdJbnZhbGlkUGF0dGVybjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNvbmZpZ0ludmFsaWRQb3NpdGl2ZTsKQEAgLTk4LDYgKzk5LDggQEAgcHVibGljIHN0YXRpYyBTc2hkVGV4dCBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZE1lc3NhZ2U7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZFZlcnNpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVXNlcm5hbWVUb29Mb25nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvcjsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1YmtleUF1dGhBZGRLZXlUb0FnZW50UXVlc3Rpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBwdWJrZXlBdXRoV3JvbmdDb21tYW5kOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aFdyb25nS2V5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aFdyb25nU2lnbmF0dXJlQWxnb3JpdGhtOwpAQCAtMTA2LDkgKzEwOSwxMyBAQCBwdWJsaWMgc3RhdGljIFNzaGRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlcnZlcklkV2l0aE51bDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlc3Npb25DbG9zZUZhaWxlZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlc3Npb25XaXRob3V0VXNlcm5hbWU7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudEVkRFNBRm9ybWF0RXJyb3I7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaEFnZW50UmVwbHlMZW5ndGhFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaEFnZW50UmVwbHlVbmV4cGVjdGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQWdlbnRTaG9ydFJlYWRCdWZmZXI7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFVua25vd25LZXk7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFdyb25nS2V5TGVuZ3RoOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQWdlbnRXcm9uZ051bWJlck9mS2V5czsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaENsb3NpbmdEb3duOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQ29tbWFuZFRpbWVvdXQ7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvSkdpdFNzaEFnZW50RmFjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L0pHaXRTc2hBZ2VudEZhY3RvcnkuamF2YQppbmRleCAxZWQyYWI5Li5hMGZmZDU0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvSkdpdFNzaEFnZW50RmFjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9KR2l0U3NoQWdlbnRGYWN0b3J5LmphdmEKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudDsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudFNlcnZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNvbmZpZy5ob3N0cy5Ib3N0Q29uZmlnRW50cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5GYWN0b3J5TWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWwuQ2hhbm5lbEZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uLkNvbm5lY3Rpb25TZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbi5TZXNzaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkpHaXRDbGllbnRTZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3Rvcnk7CiAKIC8qKgpAQCAtNDksMTggKzUzLDI0IEBAIHB1YmxpYyBKR2l0U3NoQWdlbnRGYWN0b3J5KEBOb25OdWxsIENvbm5lY3RvckZhY3RvcnkgZmFjdG9yeSwKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgTGlzdDxDaGFubmVsRmFjdG9yeT4gZ2V0Q2hhbm5lbEZvcndhcmRpbmdGYWN0b3JpZXMoCiAJCQlGYWN0b3J5TWFuYWdlciBtYW5hZ2VyKSB7Ci0JCS8vIE5vIGFnZW50IGZvcndhcmRpbmcgc3VwcG9ydGVkIHlldC4KKwkJLy8gTm8gYWdlbnQgZm9yd2FyZGluZyBzdXBwb3J0ZWQuCiAJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKIAl9CiAKIAlAT3ZlcnJpZGUKLQlwdWJsaWMgU3NoQWdlbnQgY3JlYXRlQ2xpZW50KEZhY3RvcnlNYW5hZ2VyIG1hbmFnZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHNzaGQgMi44LjAgd2lsbCBwYXNzIHVzIHRoZSBzZXNzaW9uIGhlcmUuIEF0IHRoYXQgcG9pbnQsIHdlIGNhbiBnZXQKLQkJLy8gdGhlIEhvc3RDb25maWdFbnRyeSBhbmQgZXh0cmFjdCBhbmQgaGFuZGxlIHRoZSBJZGVudGl0eUFnZW50IHNldHRpbmcuCi0JCS8vIEZvciBub3csIHBhc3MgbnVsbCB0byBsZXQgdGhlIENvbm5lY3RvckZhY3RvcnkgZG8gaXRzIGRlZmF1bHQKLQkJLy8gYmVoYXZpb3IgKFBhZ2VhbnQgb24gV2luZG93cywgU1NIX0FVVEhfU09DSyBvbiBVbml4ZXMgd2l0aCB0aGUKLQkJLy8gamdpdC1idWlsdGluIGZhY3RvcnkpLgotCQlyZXR1cm4gbmV3IFNzaEFnZW50Q2xpZW50KGZhY3RvcnkuY3JlYXRlKG51bGwsIGhvbWVEaXIpKTsKKwlwdWJsaWMgU3NoQWdlbnQgY3JlYXRlQ2xpZW50KFNlc3Npb24gc2Vzc2lvbiwgRmFjdG9yeU1hbmFnZXIgbWFuYWdlcikKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBpZGVudGl0eUFnZW50ID0gbnVsbDsKKwkJaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBKR2l0Q2xpZW50U2Vzc2lvbikgeworCQkJSG9zdENvbmZpZ0VudHJ5IGhvc3RDb25maWcgPSAoKEpHaXRDbGllbnRTZXNzaW9uKSBzZXNzaW9uKQorCQkJCQkuZ2V0SG9zdENvbmZpZ0VudHJ5KCk7CisJCQlpZGVudGl0eUFnZW50ID0gaG9zdENvbmZpZy5nZXRQcm9wZXJ0eShTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQsCisJCQkJCW51bGwpOworCQl9CisJCWlmIChTc2hDb25zdGFudHMuTk9ORS5lcXVhbHMoaWRlbnRpdHlBZ2VudCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBuZXcgU3NoQWdlbnRDbGllbnQoZmFjdG9yeS5jcmVhdGUoaWRlbnRpdHlBZ2VudCwgaG9tZURpcikpOwogCX0KIAogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L1NzaEFnZW50Q2xpZW50LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQppbmRleCAwODQ4M2U0Li5jYmNiNGQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQpAQCAtMTEsMTAgKzExLDEyIEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5UGFpcjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZhdGVLZXk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKQEAgLTIyLDIxICsyNCwyNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmFnZW50LlNzaEFnZW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudENvbnN0YW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRLZXlDb25zdHJhaW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uU3NoRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuS2V5VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlci5LZXlQYWlyUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlci5CeXRlQXJyYXlCdWZmZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlci5rZXlzLkJ1ZmZlclB1YmxpY0tleVBhcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZGVyLkRFUlBhcnNlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLlNzaGRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIC8qKgotICogQSBjbGllbnQgZm9yIGFuIFNTSDIgYWdlbnQuIFRoaXMgY2xpZW50IHN1cHBvcnRzIG9ubHkgcXVlcnlpbmcgaWRlbnRpdGllcyBhbmQKLSAqIHNpZ25hdHVyZSByZXF1ZXN0cy4KKyAqIEEgY2xpZW50IGZvciBhbiBTU0gyIGFnZW50LiBUaGlzIGNsaWVudCBzdXBwb3J0cyBxdWVyeWluZyBpZGVudGl0aWVzLAorICogc2lnbmF0dXJlIHJlcXVlc3RzLCBhbmQgYWRkaW5nIGtleXMgdG8gYW4gYWdlbnQgKHdpdGggb3Igd2l0aG91dAorICogY29uc3RyYWludHMpLiBSZW1vdmluZyBrZXlzIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCB0aGUgb2xkZXIgU1NIMSBwcm90b2NvbCBpcworICogbm90IHN1cHBvcnRlZC4KICAqCiAgKiBAc2VlIDxhIGhyZWY9Imh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1taWxsZXItc3NoLWFnZW50LTA0Ij5TU0gKICAqICAgICAgQWdlbnQgUHJvdG9jb2wsIFJGQyBkcmFmdDwvYT4KQEAgLTcyLDExICs4MCwxOCBAQCBwcml2YXRlIGJvb2xlYW4gb3Blbihib29sZWFuIGRlYnVnZ2luZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCX0KIAkJCXJldHVybiBmYWxzZTsKIAkJfQotCQlib29sZWFuIGNvbm5lY3RlZCA9IGNvbm5lY3RvciAhPSBudWxsICYmIGNvbm5lY3Rvci5jb25uZWN0KCk7Ci0JCWlmICghY29ubmVjdGVkKSB7Ci0JCQlpZiAoZGVidWdnaW5nKSB7Ci0JCQkJTE9HLmRlYnVnKCJObyBTU0ggYWdlbnQgKFNTSF9BVVRIX1NPQ0sgbm90IHNldCkiKTsgLy8kTk9OLU5MUy0xJAorCQlib29sZWFuIGNvbm5lY3RlZDsKKwkJdHJ5IHsKKwkJCWNvbm5lY3RlZCA9IGNvbm5lY3RvciAhPSBudWxsICYmIGNvbm5lY3Rvci5jb25uZWN0KCk7CisJCQlpZiAoIWNvbm5lY3RlZCAmJiBkZWJ1Z2dpbmcpIHsKKwkJCQlMT0cuZGVidWcoIk5vIFNTSCBhZ2VudCIpOyAvLyROT04tTkxTLTEkCiAJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIEFnZW50IG5vdCBydW5uaW5nPworCQkJaWYgKGRlYnVnZ2luZykgeworCQkJCUxPRy5kZWJ1ZygiTm8gU1NIIGFnZW50IiwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJCXRocm93IGU7CiAJCX0KIAkJcmV0dXJuIGNvbm5lY3RlZDsKIAl9CkBAIC0xMjcsMTQgKzE0MiwxNyBAQCBwdWJsaWMgSXRlcmFibGU8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGdldElkZW50aXRpZXMoKQogCQkJTGlzdDxNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBrZXlzID0gbmV3IEFycmF5TGlzdDw+KAogCQkJCQludW1iZXJPZktleXMpOwogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZktleXM7IGkrKykgewotCQkJCVB1YmxpY0tleSBrZXkgPSByZXBseS5nZXRQdWJsaWNLZXkoKTsKKwkJCQlQdWJsaWNLZXkga2V5ID0gcmVhZEtleShyZXBseSk7CiAJCQkJU3RyaW5nIGNvbW1lbnQgPSByZXBseS5nZXRTdHJpbmcoKTsKLQkJCQlpZiAodHJhY2luZykgewotCQkJCQlMT0cudHJhY2UoIkdvdCBTU0ggYWdlbnQge30ga2V5OiB7fSB7fSIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQlLZXlVdGlscy5nZXRLZXlUeXBlKGtleSksCi0JCQkJCQkJS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5KSwgY29tbWVudCk7CisJCQkJaWYgKGtleSAhPSBudWxsKSB7CisJCQkJCWlmICh0cmFjaW5nKSB7CisJCQkJCQlMT0cudHJhY2UoIkdvdCBTU0ggYWdlbnQge30ga2V5OiB7fSB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJS2V5VXRpbHMuZ2V0S2V5VHlwZShrZXkpLAorCQkJCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChrZXkpLCBjb21tZW50KTsKKwkJCQkJfQorCQkJCQlrZXlzLmFkZChuZXcgQWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnk8PihrZXksCisJCQkJCQkJY29tbWVudCkpOwogCQkJCX0KLQkJCQlrZXlzLmFkZChuZXcgQWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnk8PihrZXksIGNvbW1lbnQpKTsKIAkJCX0KIAkJCXJldHVybiBrZXlzOwogCQl9IGNhdGNoIChCdWZmZXJFeGNlcHRpb24gZSkgewpAQCAtMjE2LDYgKzIzNCwyMjIgQEAgcHVibGljIEl0ZXJhYmxlPD8gZXh0ZW5kcyBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBnZXRJZGVudGl0aWVzKCkKIAkJfQogCX0KIAorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZElkZW50aXR5KEtleVBhaXIga2V5LCBTdHJpbmcgY29tbWVudCwKKwkJCVNzaEFnZW50S2V5Q29uc3RyYWludC4uLiBjb25zdHJhaW50cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYm9vbGVhbiBkZWJ1Z2dpbmcgPSBMT0cuaXNEZWJ1Z0VuYWJsZWQoKTsKKwkJaWYgKCFvcGVuKGRlYnVnZ2luZykpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIE5laXRoZXIgUGFnZWFudCAwLjc2IG5vciBXaW4zMi1PcGVuU1NIIDguNiBzdXBwb3J0IGNvbW1hbmQKKwkJLy8gU1NIMl9BR0VOVENfQUREX0lEX0NPTlNUUkFJTkVELiBBZGRpbmcgYSBrZXkgd2l0aCBjb25zdHJhaW50cyB3aWxsCisJCS8vIGZhaWwuIFRoZSBvbmx5IHdvcmstYXJvdW5kIGZvciB1c2VycyBpcyBub3QgdG8gdXNlICJjb25maXJtIiBvciAidGltZQorCQkvLyBzcGVjIiB3aXRoIEFkZEtleXNUb0FnZW50LCBhbmQgbm90IHRvIHVzZSBzay0qIGtleXMuCisJCS8vCisJCS8vIFdpdGggYSB0cnVlIE9wZW5TU0ggU1NIIGFnZW50LCBrZXkgY29uc3RyYWludHMgd29yay4KKwkJYnl0ZSBjbWQgPSAoY29uc3RyYWludHMgIT0gbnVsbCAmJiBjb25zdHJhaW50cy5sZW5ndGggPiAwKQorCQkJCT8gU3NoQWdlbnRDb25zdGFudHMuU1NIMl9BR0VOVENfQUREX0lEX0NPTlNUUkFJTkVECisJCQkJOiBTc2hBZ2VudENvbnN0YW50cy5TU0gyX0FHRU5UQ19BRERfSURFTlRJVFk7CisJCWJ5dGVbXSBtZXNzYWdlID0gbnVsbDsKKwkJQnl0ZUFycmF5QnVmZmVyIG1zZyA9IG5ldyBCeXRlQXJyYXlCdWZmZXIoKTsKKwkJdHJ5IHsKKwkJCW1zZy5wdXRJbnQoMCk7CisJCQltc2cucHV0Qnl0ZShjbWQpOworCQkJU3RyaW5nIGtleVR5cGUgPSBLZXlVdGlscy5nZXRLZXlUeXBlKGtleSk7CisJCQlpZiAoS2V5UGFpclByb3ZpZGVyLlNTSF9FRDI1NTE5LmVxdWFscyhrZXlUeXBlKSkgeworCQkJCS8vIEFwYWNoZSBNSU5BIHNzaGQgMi44LjAgbGFja3Mgc3VwcG9ydCBmb3Igd3JpdGluZyBlZDI1NTE5CisJCQkJLy8gcHJpdmF0ZSBrZXlzIHRvIGEgYnVmZmVyLgorCQkJCXB1dEVkMjU1MTlLZXkobXNnLCBrZXkpOworCQkJfSBlbHNlIHsKKwkJCQltc2cucHV0S2V5UGFpcihrZXkpOworCQkJfQorCQkJbXNnLnB1dFN0cmluZyhjb21tZW50ID09IG51bGwgPyAiIiA6IGNvbW1lbnQpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoY29uc3RyYWludHMgIT0gbnVsbCkgeworCQkJCWZvciAoU3NoQWdlbnRLZXlDb25zdHJhaW50IGNvbnN0cmFpbnQgOiBjb25zdHJhaW50cykgeworCQkJCQljb25zdHJhaW50LnB1dChtc2cpOworCQkJCX0KKwkJCX0KKwkJCWlmIChkZWJ1Z2dpbmcpIHsKKwkJCQlMT0cuZGVidWcoCisJCQkJCQkiYWRkSWRlbnRpdHk6IGFkZGluZyB7fSBrZXkge30gdG8gU1NIIGFnZW50OyBjb21tZW50IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJa2V5VHlwZSwgS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5LmdldFB1YmxpYygpKSwKKwkJCQkJCWNvbW1lbnQpOworCQkJfQorCQkJbWVzc2FnZSA9IG1zZy5nZXRDb21wYWN0RGF0YSgpOworCQl9IGZpbmFsbHkgeworCQkJLy8gVGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHByaXZhdGUga2V5IGRhdGEsIHNvIGNsZWFyIGludGVybWVkaWFyeQorCQkJLy8gZGF0YSBBU0FQLgorCQkJbXNnLmNsZWFyKCk7CisJCX0KKwkJQnVmZmVyIHJlcGx5OworCQl0cnkgeworCQkJcmVwbHkgPSBycGMoY21kLCBtZXNzYWdlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCUFycmF5cy5maWxsKG1lc3NhZ2UsIChieXRlKSAwKTsKKwkJfQorCQlpbnQgcmVwbHlMZW5ndGggPSByZXBseS5hdmFpbGFibGUoKTsKKwkJaWYgKHJlcGx5TGVuZ3RoICE9IDEpIHsKKwkJCXRocm93IG5ldyBTc2hFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVNzaGRUZXh0LmdldCgpLnNzaEFnZW50UmVwbHlVbmV4cGVjdGVkLAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQlTc2hkVGV4dC5nZXQoKS5zc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvciwKKwkJCQkJCQlJbnRlZ2VyLnZhbHVlT2YoMSksIEludGVnZXIudmFsdWVPZihyZXBseUxlbmd0aCkpKSk7CisKKwkJfQorCQljbWQgPSByZXBseS5nZXRCeXRlKCk7CisJCWlmIChjbWQgIT0gU3NoQWdlbnRDb25zdGFudHMuU1NIX0FHRU5UX1NVQ0NFU1MpIHsKKwkJCXRocm93IG5ldyBTc2hFeGNlcHRpb24oCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KFNzaGRUZXh0LmdldCgpLnNzaEFnZW50UmVwbHlVbmV4cGVjdGVkLAorCQkJCQkJCVNzaEFnZW50Q29uc3RhbnRzLmdldENvbW1hbmRNZXNzYWdlTmFtZShjbWQpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBXcml0ZXMgYW4gZWQyNTUxOSB7QGxpbmsgS2V5UGFpcn0gdG8gYSB7QGxpbmsgQnVmZmVyfS4gT3BlblNTSCBzcGVjaWZpZXMKKwkgKiB0aGF0IGl0IGV4cGVjdHMgdGhlIDMyIHB1YmxpYyBrZXkgYnl0ZXMsIGZvbGxvd2VkIGJ5IDY0IGJ5dGVzIGZvcm1lZCBieQorCSAqIGNvbmNhdGVuYXRpbmcgdGhlIDMyIHByaXZhdGUga2V5IGJ5dGVzIHdpdGggdGhlIDMyIHB1YmxpYyBrZXkgYnl0ZXMuCisJICoKKwkgKiBAcGFyYW0gbXNnCisJICogICAgICAgICAgICB7QGxpbmsgQnVmZmVyfSB0byB3cml0ZSB0bworCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHtAbGluayBLZXlQYWlyfSB0byB3cml0ZQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgcHJpdmF0ZSBrZXkgY2Fubm90IGJlIHdyaXR0ZW4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHB1dEVkMjU1MTlLZXkoQnVmZmVyIG1zZywgS2V5UGFpciBrZXkpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlCdWZmZXIgdG1wID0gbmV3IEJ5dGVBcnJheUJ1ZmZlcigzNik7CisJCXRtcC5wdXRSYXdQdWJsaWNLZXlCeXRlcyhrZXkuZ2V0UHVibGljKCkpOworCQlieXRlW10gcHVibGljQnl0ZXMgPSB0bXAuZ2V0Qnl0ZXMoKTsKKwkJbXNnLnB1dFN0cmluZyhLZXlQYWlyUHJvdmlkZXIuU1NIX0VEMjU1MTkpOworCQltc2cucHV0Qnl0ZXMocHVibGljQnl0ZXMpOworCQkvLyBOZXh0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSAzMiBieXRlIHByaXZhdGUga2V5IHZhbHVlIHdpdGggdGhlCisJCS8vIDMyIGJ5dGVzIG9mIHRoZSBwdWJsaWMga2V5LgorCQlQcml2YXRlS2V5IHBrID0ga2V5LmdldFByaXZhdGUoKTsKKwkJU3RyaW5nIGZvcm1hdCA9IHBrLmdldEZvcm1hdCgpOworCQlpZiAoISJQS0NTIzgiLmVxdWFsc0lnbm9yZUNhc2UoZm9ybWF0KSkgeyAvLyROT04tTkxTLTEkCisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkuZm9ybWF0KFNzaGRUZXh0LmdldCgpLnNzaEFnZW50RWREU0FGb3JtYXRFcnJvciwgZm9ybWF0KSk7CisJCX0KKwkJYnl0ZVtdIHByaXZhdGVCeXRlcyA9IG51bGw7CisJCWJ5dGVbXSBlbmNvZGVkID0gcGsuZ2V0RW5jb2RlZCgpOworCQl0cnkgeworCQkJcHJpdmF0ZUJ5dGVzID0gYXNuMVBhcnNlKGVuY29kZWQsIDMyKTsKKwkJCWJ5dGVbXSBjb21iaW5lZCA9IEFycmF5cy5jb3B5T2YocHJpdmF0ZUJ5dGVzLCA2NCk7CisJCQlBcnJheXMuZmlsbChwcml2YXRlQnl0ZXMsIChieXRlKSAwKTsKKwkJCXByaXZhdGVCeXRlcyA9IGNvbWJpbmVkOworCQkJU3lzdGVtLmFycmF5Y29weShwdWJsaWNCeXRlcywgMCwgcHJpdmF0ZUJ5dGVzLCAzMiwgMzIpOworCQkJbXNnLnB1dEJ5dGVzKHByaXZhdGVCeXRlcyk7CisJCX0gZmluYWxseSB7CisJCQlpZiAocHJpdmF0ZUJ5dGVzICE9IG51bGwpIHsKKwkJCQlBcnJheXMuZmlsbChwcml2YXRlQnl0ZXMsIChieXRlKSAwKTsKKwkJCX0KKwkJCUFycmF5cy5maWxsKGVuY29kZWQsIChieXRlKSAwKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEV4dHJhY3RzIHRoZSBwcml2YXRlIGtleSBieXRlcyBmcm9tIGFuIGVuY29kZWQgZWQyNTUxOSBwcml2YXRlIGtleSBieQorCSAqIHBhcnNpbmcgdGhlIGJ5dGVzIGFzIEFTTi4xIGFjY29yZGluZyB0byBSRkMgNTk1OCAoUEtDUyAjOCBlbmNvZGluZyk6CisJICoKKwkgKiA8cHJlPgorCSAqIE9uZUFzeW1tZXRyaWNLZXkgOjo9IFNFUVVFTkNFIHsKKwkgKiAgIHZlcnNpb24gVmVyc2lvbiwKKwkgKiAgIHByaXZhdGVLZXlBbGdvcml0aG0gUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIsCisJICogICBwcml2YXRlS2V5IFByaXZhdGVLZXksCisJICogICAuLi4KKwkgKiB9CisJICoKKwkgKiBWZXJzaW9uIDo6PSBJTlRFR0VSCisJICogUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKwkgKiBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJTkcKKwkgKgorCSAqIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKwkgKiAgIGFsZ29yaXRobSAgIE9CSkVDVCBJREVOVElGSUVSLAorCSAqICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisJICogfQorCSAqIDwvcHJlPgorCSAqIDxwPgorCSAqIGFuZCBSRkMgODQxMDogIi4uLiB3aGVuIGVuY29kaW5nIGEgT25lQXN5bW1ldHJpY0tleSBvYmplY3QsIHRoZSBwcml2YXRlCisJICoga2V5IGlzIHdyYXBwZWQgaW4gYSBDdXJ2ZVByaXZhdGVLZXkgb2JqZWN0IGFuZCB3cmFwcGVkIGJ5IHRoZSBPQ1RFVAorCSAqIFNUUklORyBvZiB0aGUgJ3ByaXZhdGVLZXknIGZpZWxkLiIKKwkgKiA8L3A+CisJICoKKwkgKiA8cHJlPgorCSAqIEN1cnZlUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5HCisJICogPC9wcmU+CisJICoKKwkgKiBAcGFyYW0gZW5jb2RlZAorCSAqICAgICAgICAgICAgZW5jb2RlZCBwcml2YXRlIGtleSB0byBleHRyYWN0IHRoZSBwcml2YXRlIGtleSBieXRlcyBmcm9tCisJICogQHBhcmFtIG4KKwkgKiAgICAgICAgICAgIG51bWJlciBvZiBieXRlcyBleHBlY3RlZAorCSAqIEByZXR1cm4gdGhlIGV4dHJhY3RlZCBwcml2YXRlIGtleSBieXRlczsgb2YgbGVuZ3RoIHtAY29kZSBufQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgcHJpdmF0ZSBrZXkgY2Fubm90IGJlIGV4dHJhY3RlZAorCSAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU5NTgiPlJGQyA1OTU4PC9hPgorCSAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzg0MTAiPlJGQyA4NDEwPC9hPgorCSAqLworCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBhc24xUGFyc2UoYnl0ZVtdIGVuY29kZWQsIGludCBuKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlieXRlW10gcHJpdmF0ZUtleSA9IG51bGw7CisJCXRyeSAoREVSUGFyc2VyIGJ5dGVQYXJzZXIgPSBuZXcgREVSUGFyc2VyKGVuY29kZWQpOworCQkJCURFUlBhcnNlciBvbmVBc3ltbWV0cmljS2V5ID0gYnl0ZVBhcnNlci5yZWFkT2JqZWN0KCkKKwkJCQkJCS5jcmVhdGVQYXJzZXIoKSkgeworCQkJb25lQXN5bW1ldHJpY0tleS5yZWFkT2JqZWN0KCk7IC8vIHNraXAgdmVyc2lvbgorCQkJb25lQXN5bW1ldHJpY0tleS5yZWFkT2JqZWN0KCk7IC8vIHNraXAgYWxnb3JpdGhtIGlkZW50aWZpZXIKKwkJCXByaXZhdGVLZXkgPSBvbmVBc3ltbWV0cmljS2V5LnJlYWRPYmplY3QoKS5nZXRWYWx1ZSgpOworCQkJLy8gVGhlIGxhc3QgbiBieXRlcyBvZiB0aGlzIG11c3QgYmUgdGhlIHByaXZhdGUga2V5IGJ5dGVzCisJCQlyZXR1cm4gQXJyYXlzLmNvcHlPZlJhbmdlKHByaXZhdGVLZXksCisJCQkJCXByaXZhdGVLZXkubGVuZ3RoIC0gbiwgcHJpdmF0ZUtleS5sZW5ndGgpOworCQl9IGZpbmFsbHkgeworCQkJaWYgKHByaXZhdGVLZXkgIT0gbnVsbCkgeworCQkJCUFycmF5cy5maWxsKHByaXZhdGVLZXksIChieXRlKSAwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEEgc2FmZSB2ZXJzaW9uIG9mIHtAbGluayBCdWZmZXIjZ2V0UHVibGljS2V5KCl9LiBVcG9uIHJldHVybiB0aGUKKwkgKiBidWZmZXJzJ3MgcmVhZCBwb3NpdGlvbiBpcyBhbHdheXMgYWZ0ZXIgdGhlIGtleSBibG9iOyBhbnkgZXhjZXB0aW9ucworCSAqIHRocm93biBieSB0cnlpbmcgdG8gcmVhZCB0aGUga2V5IGFyZSBsb2dnZWQgYW5kIDxlbT5ub3Q8L2VtPiBwcm9wYWdhdGVkLgorCSAqIDxwPgorCSAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYW4gU1NIIGFnZW50IG1pZ2h0IGNvbnRhaW4gYW5kIGRlbGl2ZXIga2V5cyB0aGF0CisJICogd2UgY2Fubm90IGhhbmRsZSAoZm9yIGluc3RhbmNlIGVkNDQ4IGtleXMpLgorCSAqIDwvcD4KKwkgKgorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRvIHJlYWQgdGhlIGtleSBmcm9tCisJICogQHJldHVybiB0aGUge0BsaW5rIFB1YmxpY0tleX0sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUga2V5IGNvdWxkIG5vdCBiZQorCSAqICAgICAgICAgcmVhZAorCSAqIEB0aHJvd3MgQnVmZmVyRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGJsb2IgY2Fubm90IGJlIHJlYWQgb3IgaXMgY29ycnVwdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUHVibGljS2V5IHJlYWRLZXkoQnVmZmVyIGJ1ZmZlcikgdGhyb3dzIEJ1ZmZlckV4Y2VwdGlvbiB7CisJCWludCBlbmRPZkJ1ZmZlciA9IGJ1ZmZlci53cG9zKCk7CisJCWludCBrZXlMZW5ndGggPSBidWZmZXIuZ2V0SW50KCk7CisJCWludCBhZnRlcktleSA9IGJ1ZmZlci5ycG9zKCkgKyBrZXlMZW5ndGg7CisJCWlmIChrZXlMZW5ndGggPD0gMCB8fCBhZnRlcktleSA+IGVuZE9mQnVmZmVyKSB7CisJCQl0aHJvdyBuZXcgQnVmZmVyRXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChTc2hkVGV4dC5nZXQoKS5zc2hBZ2VudFdyb25nS2V5TGVuZ3RoLAorCQkJCQkJCUludGVnZXIudG9TdHJpbmcoa2V5TGVuZ3RoKSwKKwkJCQkJCQlJbnRlZ2VyLnRvU3RyaW5nKGJ1ZmZlci5ycG9zKCkpLAorCQkJCQkJCUludGVnZXIudG9TdHJpbmcoZW5kT2ZCdWZmZXIpKSk7CisJCX0KKwkJLy8gTGltaXQgc3Vic2VxdWVudCByZWFkcyB0byB0aGUgcHVibGljIGtleSBibG9iCisJCWJ1ZmZlci53cG9zKGFmdGVyS2V5KTsKKwkJdHJ5IHsKKwkJCXJldHVybiBidWZmZXIuZ2V0UmF3UHVibGljS2V5KEJ1ZmZlclB1YmxpY0tleVBhcnNlci5ERUZBVUxUKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCUxPRy53YXJuKFNzaGRUZXh0LmdldCgpLnNzaEFnZW50VW5rbm93bktleSwgZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSBmaW5hbGx5IHsKKwkJCS8vIFJlc3RvcmUgcmVhbCBidWZmZXIgZW5kCisJCQlidWZmZXIud3BvcyhlbmRPZkJ1ZmZlcik7CisJCQkvLyBTZXQgdGhlIHJlYWQgcG9zaXRpb24gdG8gYWZ0ZXIgdGhpcyBrZXksIGV2ZW4gaWYgZmFpbGVkCisJCQlidWZmZXIucnBvcyhhZnRlcktleSk7CisJCX0KKwl9CisKIAlwcml2YXRlIEJ1ZmZlciBycGMoYnl0ZSBjb21tYW5kLCBieXRlW10gbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJcmV0dXJuIG5ldyBCeXRlQXJyYXlCdWZmZXIoY29ubmVjdG9yLnJwYyhjb21tYW5kLCBtZXNzYWdlKSk7CiAJfQpAQCAtMjMwLDExICs0NjQsNiBAQCBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKSB7CiAJfQogCiAJQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgYWRkSWRlbnRpdHkoS2V5UGFpciBrZXksIFN0cmluZyBjb21tZW50KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCByZW1vdmVJZGVudGl0eShQdWJsaWNLZXkga2V5KSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvU3NoZFNlc3Npb24uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCmluZGV4IGMyNzBiNDQuLmI3NDJmNWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCkBAIC01MSw2ICs1MSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uLlNmdHBFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5Ob25OdWxsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2guT3BlblNzaENvbmZpZ0ZpbGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5KR2l0U3NoQ2xpZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuU3NoZFRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuRnRwQ2hhbm5lbDsKQEAgLTEzOCw3ICsxMzksMTEgQEAgcHJpdmF0ZSBDbGllbnRTZXNzaW9uIGNvbm5lY3QoVVJJaXNoIHRhcmdldCwgTGlzdDxVUklpc2g+IGp1bXBzLAogCQkJCQkJSkdpdFNzaENsaWVudC5MT0NBTF9GT1JXQVJEX0FERFJFU1MsCiAJCQkJCQlwb3J0Rm9yd2FyZC5nZXRCb3VuZEFkZHJlc3MoKSk7CiAJCQl9Ci0JCQlyZXN1bHRTZXNzaW9uID0gY29ubmVjdChob3N0Q29uZmlnLCBjb250ZXh0LCB0aW1lb3V0KTsKKwkJCWludCB0aW1lb3V0SW5TZWMgPSBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygKKwkJCQkJaG9zdENvbmZpZy5nZXRQcm9wZXJ0eShTc2hDb25zdGFudHMuQ09OTkVDVF9USU1FT1VUKSk7CisJCQlyZXN1bHRTZXNzaW9uID0gY29ubmVjdChob3N0Q29uZmlnLCBjb250ZXh0LAorCQkJCQl0aW1lb3V0SW5TZWMgPiAwID8gRHVyYXRpb24ub2ZTZWNvbmRzKHRpbWVvdXRJblNlYykKKwkJCQkJCQk6IHRpbWVvdXQpOwogCQkJaWYgKHByb3h5U2Vzc2lvbiAhPSBudWxsKSB7CiAJCQkJZmluYWwgUG9ydEZvcndhcmRpbmdUcmFja2VyIHRyYWNrZXIgPSBwb3J0Rm9yd2FyZDsKIAkJCQlmaW5hbCBDbGllbnRTZXNzaW9uIHBTZXNzaW9uID0gcHJveHlTZXNzaW9uOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDUyZTY5YmQuLjRhMDg5NDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTggKzMsMTggQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBjb20uamNyYWZ0LmpzY2g7dmVyc2lvbj0iWzAuMS41NCwwLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCmluZGV4IDZmMTk5ZTYuLmNhMWU3NDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZWQ5OTdmYi4uMzMyZDk4MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDE5ICszLDE5IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g7c2luZ2xldG9uOj10cnVlCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNi4wLjEsNi4xLjApIgorRnJhZ21lbnQtSG9zdDogb3JnLmVjbGlwc2UuamdpdDtidW5kbGUtdmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iNi4wLjEiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iNi4xLjEiCiBJbXBvcnQtUGFja2FnZTogY29tLmpjcmFmdC5qc2NoO3ZlcnNpb249IlswLjEuMzcsMC4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDNjM2YyYjEuLmI1NmJiN2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2ggLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbAppbmRleCAyYTVmOWI4Li4zYjZkNjZjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9CVUlMRAppbmRleCA5ZTc4N2ZlLi5lNjNjMDJjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvQlVJTEQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L0JVSUxECkBAIC0xMyw2ICsxMyw3IEBACiApICsgW1BLRyArIGMgZm9yIGMgaW4gWwogICAgICJhcGkvQWJzdHJhY3RSZW1vdGVDb21tYW5kVGVzdC5qYXZhIiwKICAgICAiZGlmZi9BYnN0cmFjdERpZmZUZXN0Q2FzZS5qYXZhIiwKKyAgICAiaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbFRvb2xUZXN0Q2FzZS5qYXZhIiwKICAgICAiaW50ZXJuYWwvcmV2d2Fsay9PYmplY3RSZWFjaGFiaWxpdHlUZXN0Q2FzZS5qYXZhIiwKICAgICAiaW50ZXJuYWwvcmV2d2Fsay9SZWFjaGFiaWxpdHlDaGVja2VyVGVzdENhc2UuamF2YSIsCiAgICAgImludGVybmFsL3N0b3JhZ2UvZmlsZS9HY1Rlc3RDYXNlLmphdmEiLApAQCAtNTAsNiArNTEsMjMgQEAKICAgICBleGNsdWRlID0gSEVMUEVSUyArIERBVEEgKyBFWENMVURFRCwKICkpCiAKKyMgTm9uIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB1c2VkIGZvciB0ZXN0cyBieSBvdGhlciB0ZXN0IGNsYXNzZXMKK0JBU0UgPSBbCisgICAgUEtHICsgImludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVwb3NpdG9yeUJ1aWxkZXJUZXN0LmphdmEiLAorICAgIFBLRyArICJpbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhIiwKK10KKworamF2YV9saWJyYXJ5KAorICAgIG5hbWUgPSAiYmFzZSIsCisgICAgdGVzdG9ubHkgPSAxLAorICAgIHNyY3MgPSBCQVNFLAorICAgIGRlcHMgPSBbCisgICAgICAgICIvL2xpYjpqdW5pdCIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQ6anVuaXQiLAorICAgIF0sCispCisKIGphdmFfbGlicmFyeSgKICAgICBuYW1lID0gImhlbHBlcnMiLAogICAgIHRlc3Rvbmx5ID0gMSwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwNDY5MTEzLi41ODEzOTVkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQudGVzdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQpAQCAtMTYsNjAgKzE2LDYxIEBACiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmNvbXByZXNzb3JzLmd6aXA7dmVyc2lvbj0iWzEuMTUuMCwyLjApIiwKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMueHo7dmVyc2lvbj0iWzEuMTUuMCwyLjApIiwKICBvcmcuYXNzZXJ0ai5jb3JlLmFwaTt2ZXJzaW9uPSJbMy4xNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlLmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5mc2NrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuY29ubmVjdGl2aXR5O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxvZ2dpbmc7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5jb25uZWN0aXZpdHk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5wYXJzZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC50aW1lO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTE7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLmhhbWNyZXN0O3ZlcnNpb249IlsxLjEuMCwzLjAuMCkiLAogIG9yZy5oYW1jcmVzdC5jb2xsZWN0aW9uO3ZlcnNpb249IlsxLjEuMCwzLjAuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAppbmRleCAzY2FiMzYyLi42YjY2OTE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90ZXN0cy5iemwgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdGVzdHMuYnpsCmluZGV4IGUyMDFiZGIuLjE3MGJmMGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90ZXN0cy5iemwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3Rlc3RzLmJ6bApAQCAtNTIsNiArNTIsMTIgQEAKICAgICAgICAgICAgICAgICAiLy9saWI6eHoiLAogICAgICAgICAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTpqZ2l0LWFyY2hpdmUiLAogICAgICAgICAgICAgXQorICAgICAgICBpZiBzcmMuZW5kc3dpdGgoIkZpbGVSZXBvc2l0b3J5QnVpbGRlckFmdGVyT3BlbkNvbmZpZ1Rlc3QuamF2YSIpIG9yIFwKKyAgICAgICAgICAgc3JjLmVuZHN3aXRoKCJSZWZEaXJlY3RvcnlBZnRlck9wZW5Db25maWdUZXN0LmphdmEiKSBvciBcCisgICAgICAgICAgIHNyYy5lbmRzd2l0aCgiU25hcHNob3R0aW5nUmVmRGlyZWN0b3J5VGVzdC5qYXZhIik6CisgICAgICAgICAgICBhZGRpdGlvbmFsX2RlcHMgPSBbCisgICAgICAgICAgICAgICAgIjpiYXNlIiwKKyAgICAgICAgICAgIF0KICAgICAgICAgaGVhcF9zaXplID0gIi1YbXgyNTZtIgogICAgICAgICBpZiBzcmMuZW5kc3dpdGgoIkh1Z2VDb21taXRNZXNzYWdlVGVzdC5qYXZhIik6CiAgICAgICAgICAgICBoZWFwX3NpemUgPSAiLVhteDUxMm0iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCmluZGV4IDg2NzMxMGIuLjU4NGQxNDkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCkBAIC0zMiw2ICszMiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCkBAIC00MDIsNyArNDAzLDkgQEAgcHVibGljIHZvaWQgdGVzdE1vZGlmeVcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0QWRkTTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiTTEiLCBmYWxzZSwgdHJ1ZSk7CiAJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApLmNhbkV4ZWN1dGUoKSk7CisJCWlmIChGUy5ERVRFQ1RFRC5zdXBwb3J0c0V4ZWN1dGUoKSkgeworCQkJYXNzZXJ0VHJ1ZShGUy5ERVRFQ1RFRC5jYW5FeGVjdXRlKHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpKTsKKwkJfQogCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgIk0xIiksCiAJCQkJYi5nZXRTdHJpbmcoMCwgYi5zaXplKCksIGZhbHNlKSk7CiAJfQpAQCAtNDExLDcgKzQxNCw5IEBAIHB1YmxpYyB2b2lkIHRlc3RBZGRNMSgpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RNb2RpZnlNMigpIHRocm93cyBFeGNlcHRpb24gewogCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJNMiIsIHRydWUsIHRydWUpOwogCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7Ci0JCWFzc2VydFRydWUocmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKS5jYW5FeGVjdXRlKCkpOworCQlpZiAoRlMuREVURUNURUQuc3VwcG9ydHNFeGVjdXRlKCkpIHsKKwkJCWFzc2VydFRydWUoRlMuREVURUNURUQuY2FuRXhlY3V0ZShyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKSk7CisJCX0KIAkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJNMiIpLAogCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOwogCX0KQEAgLTQyMCw3ICs0MjUsMTAgQEAgcHVibGljIHZvaWQgdGVzdE1vZGlmeU0yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdE1vZGlmeU0zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoIk0zIiwgdHJ1ZSwgdHJ1ZSk7CiAJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RmFsc2UocmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKS5jYW5FeGVjdXRlKCkpOworCQlpZiAoRlMuREVURUNURUQuc3VwcG9ydHNFeGVjdXRlKCkpIHsKKwkJCWFzc2VydEZhbHNlKAorCQkJCQlGUy5ERVRFQ1RFRC5jYW5FeGVjdXRlKHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpKTsKKwkJfQogCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgIk0zIiksCiAJCQkJYi5nZXRTdHJpbmcoMCwgYi5zaXplKCksIGZhbHNlKSk7CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9CcmFuY2hDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9CcmFuY2hDb21tYW5kVGVzdC5qYXZhCmluZGV4IGU3ZWQxMDIuLjg3YmU4MTMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQnJhbmNoQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0JyYW5jaENvbW1hbmRUZXN0LmphdmEKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCXByaXZhdGUgR2l0IHNldFVwUmVwb1dpdGhSZW1vdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmVwb3NpdG9yeSByZW1vdGVSZXBvc2l0b3J5ID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UocmVtb3RlUmVwb3NpdG9yeSk7CiAJCXRyeSAoR2l0IHJlbW90ZUdpdCA9IG5ldyBHaXQocmVtb3RlUmVwb3NpdG9yeSkpIHsKIAkJCS8vIGNvbW1pdCBzb21ldGhpbmcKIAkJCXdyaXRlVHJhc2hGaWxlKCJUZXN0LnR4dCIsICJIZWxsbyB3b3JsZCIpOwpAQCAtODUsNiArODYsNyBAQCBwcml2YXRlIEdpdCBzZXRVcFJlcG9XaXRoUmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQlydXAuZm9yY2VVcGRhdGUoKTsKIAogCQkJUmVwb3NpdG9yeSBsb2NhbFJlcG9zaXRvcnkgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQkJYWRkUmVwb1RvQ2xvc2UobG9jYWxSZXBvc2l0b3J5KTsKIAkJCUdpdCBsb2NhbEdpdCA9IG5ldyBHaXQobG9jYWxSZXBvc2l0b3J5KTsKIAkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBsb2NhbFJlcG9zaXRvcnkuZ2V0Q29uZmlnKCk7CiAJCQlSZW1vdGVDb25maWcgcmMgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgIm9yaWdpbiIpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVja291dENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZWNrb3V0Q29tbWFuZFRlc3QuamF2YQppbmRleCBlNTIwNzMyLi5hYjAxODRiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZWNrb3V0Q29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZWNrb3V0Q29tbWFuZFRlc3QuamF2YQpAQCAtMjkyLDYgKzI5Miw3IEBAIHB1YmxpYyB2b2lkIHRlc3RDaGVja291dEFubm90YXRlZFRhZygpIHRocm93cyBFeGNlcHRpb24gewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdENoZWNrb3V0UmVtb3RlVHJhY2tpbmdXaXRoVXBzdHJlYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmVwb3NpdG9yeSBkYjIgPSBjcmVhdGVSZXBvc2l0b3J5V2l0aFJlbW90ZSgpOworCQlhZGRSZXBvVG9DbG9zZShkYjIpOwogCiAJCUdpdC53cmFwKGRiMikuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgidGVzdCIpCiAJCQkJLnNldFN0YXJ0UG9pbnQoIm9yaWdpbi90ZXN0IikKQEAgLTMxMSw2ICszMTIsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRSZW1vdGVUcmFja2luZ1dpdGhVcHN0cmVhbSgpIHRocm93cyBFeGNlcHRpb24gewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdENoZWNrb3V0UmVtb3RlVHJhY2tpbmdXaXRob3V0TG9jYWxCcmFuY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmVwb3NpdG9yeSBkYjIgPSBjcmVhdGVSZXBvc2l0b3J5V2l0aFJlbW90ZSgpOworCQlhZGRSZXBvVG9DbG9zZShkYjIpOwogCiAJCS8vIGNoZWNrb3V0IHJlbW90ZSB0cmFja2luZyBicmFuY2ggaW4gc2Vjb25kIHJlcG9zaXRvcnkKIAkJLy8gKG5vIGxvY2FsIGJyYW5jaGVzIGV4aXN0IHlldCBpbiBzZWNvbmQgcmVwb3NpdG9yeSkKQEAgLTg2OCw3ICs4NzAsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Tm9uRGVsZXRhYmxlRmlsZXNPbldpbmRvd3MoKQogCQkJY29Db21tYW5kLnNldE5hbWUoY3J1ZENvbW1pdC5nZXROYW1lKCkpLmNhbGwoKTsKIAkJCUNoZWNrb3V0UmVzdWx0IHJlc3VsdCA9IGNvQ29tbWFuZC5nZXRSZXN1bHQoKTsKIAkJCWFzc2VydEVxdWFscyhTdGF0dXMuTk9OREVMRVRFRCwgcmVzdWx0LmdldFN0YXR1cygpKTsKLQkJCWFzc2VydEVxdWFscygiW1Rlc3QudHh0LCB0b0JlRGVsZXRlZC50eHRdIiwKKwkJCWFzc2VydEVxdWFscygiW3RvQmVEZWxldGVkLnR4dF0iLAogCQkJCQlyZXN1bHQuZ2V0UmVtb3ZlZExpc3QoKS50b1N0cmluZygpKTsKIAkJCWFzc2VydEVxdWFscygiW3RvQmVDcmVhdGVkLnR4dCwgdG9CZU1vZGlmaWVkLnR4dF0iLAogCQkJCQlyZXN1bHQuZ2V0TW9kaWZpZWRMaXN0KCkudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZFRlc3QuamF2YQppbmRleCBmNGYwZWNkLi4wZDM4MTk3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmRUZXN0LmphdmEKQEAgLTE3NSw3ICsxNzUsOCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja0NvbmZsaWN0UmVzb2x1dGlvbigpIHRocm93cyBFeGNlcHRpb24gewogCiAJCQlhc3NlcnRFcXVhbHMoQ2hlcnJ5UGlja1N0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldFN0YXR1cygpKTsKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5NRVJHRV9NU0cpLmV4aXN0cygpKTsKLQkJCWFzc2VydEVxdWFscygic2lkZVxuXG5Db25mbGljdHM6XG5cdGFcbiIsIGRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKKwkJCWFzc2VydEVxdWFscygic2lkZVxuXG4jIENvbmZsaWN0czpcbiNcdGFcbiIsCisJCQkJCWRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5DSEVSUllfUElDS19IRUFEKQogCQkJCQkuZXhpc3RzKCkpOwogCQkJYXNzZXJ0RXF1YWxzKHNpZGVDb21taXQuZ2V0SWQoKSwgZGIucmVhZENoZXJyeVBpY2tIZWFkKCkpOwpAQCAtMjA3LDcgKzIwOCw3IEBAIHB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrQ29uZmxpY3RSZXNvbHV0aW9uTm9Db21taXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJU3RyaW5nIGV4cGVjdGVkID0gIjw8PDw8PDwgbWFzdGVyXG5hKG1hc3Rlcilcbj09PT09PT1cbmEoc2lkZSlcbj4+Pj4+Pj4gNTI3NDYwYSBzaWRlXG4iOwogCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHJlYWQoImEiKSk7CiAJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5NRVJHRV9NU0cpLmV4aXN0cygpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzaWRlXG5cbkNvbmZsaWN0czpcblx0YVxuIiwgZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOworCQlhc3NlcnRFcXVhbHMoInNpZGVcblxuIyBDb25mbGljdHM6XG4jXHRhXG4iLCBkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CiAJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuQ0hFUlJZX1BJQ0tfSEVBRCkKIAkJCQkuZXhpc3RzKCkpOwogCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZFRlc3QuamF2YQppbmRleCA4MDg0NTA1Li4zNWRlNzNlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kVGVzdC5qYXZhCkBAIC00Niw2ICs0Niw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmbG9nRW50cnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TdG9yZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0Q29uZmlnLkNsZWFudXBNb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGUuRmlsZUJhc2VkQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlLlN1Ym1vZHVsZVdhbGs7CkBAIC01MTUsNiArNTE2LDYyIEBAIHB1YmxpYyB2b2lkIGNvbW1pdEFtZW5kV2l0aEF1dGhvclNob3VsZFVzZUl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCBjb21taXRNZXNzYWdlVmVyYmF0aW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlMSIsICJmaWxlMSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXR0ZWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiI2luaXRpYWwgY29tbWl0IikKKwkJCQkJLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKCIjaW5pdGlhbCBjb21taXQiLCBjb21taXR0ZWQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNvbW1pdE1lc3NhZ2VTdHJpcCgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUxIiwgImZpbGUxIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUxIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdHRlZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKAorCQkJCQkiI0NvbW1lbnRcbmluaXRpYWwgY29tbWl0XHRcblxuIGNvbW1pdCBib2R5IFxuIFx0I2Fub3RoZXIgY29tbWVudCIpCisJCQkJCS5zZXRDbGVhbnVwTW9kZShDbGVhbnVwTW9kZS5TVFJJUCkuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMoImluaXRpYWwgY29tbWl0XG5cbiBjb21taXQgYm9keSIsCisJCQkJCWNvbW1pdHRlZC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY29tbWl0TWVzc2FnZURlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlMSIsICJmaWxlMSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXR0ZWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgKKwkJCQkJIiNDb21tZW50XG5pbml0aWFsIGNvbW1pdFx0XG5cbiBjb21taXQgYm9keSBcblxuXG4gXHQjYW5vdGhlciBjb21tZW50ICAiKQorCQkJCQkuc2V0Q2xlYW51cE1vZGUoQ2xlYW51cE1vZGUuREVGQVVMVCkuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMoImluaXRpYWwgY29tbWl0XG5cbiBjb21taXQgYm9keSIsCisJCQkJCWNvbW1pdHRlZC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY29tbWl0TWVzc2FnZURlZmF1bHRXaGl0ZXNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0dGVkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoCisJCQkJCSIjQ29tbWVudFxuaW5pdGlhbCBjb21taXRcdFxuXG4gY29tbWl0IGJvZHkgXG5cblxuIFx0I2Fub3RoZXIgY29tbWVudCAgIikKKwkJCQkJLnNldENsZWFudXBNb2RlKENsZWFudXBNb2RlLkRFRkFVTFQpLnNldERlZmF1bHRDbGVhbihmYWxzZSkKKwkJCQkJLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKAorCQkJCQkiI0NvbW1lbnRcbmluaXRpYWwgY29tbWl0XG5cbiBjb21taXQgYm9keVxuXG4gXHQjYW5vdGhlciBjb21tZW50IiwKKwkJCQkJY29tbWl0dGVkLmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCBjb21taXRFbXB0eUNvbW1pdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0Rlc2NyaWJlQ29tbWFuZFRlc3QuamF2YQppbmRleCBiNDYwZTNmLi5hYjg3ZmE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0Rlc2NyaWJlQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0Rlc2NyaWJlQ29tbWFuZFRlc3QuamF2YQpAQCAtMTAsOSArMTAsMTAgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hcGk7CiAKIGltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKQEAgLTEwMCw2ICsxMDEsMTIgQEAgcHVibGljIHZvaWQgdGVzdERlc2NyaWJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQlhc3NlcnRFcXVhbHMoImFsaWNlLXQxLTItZzNlNTYzYzUiLCBkZXNjcmliZShjNCwgImFsaWNlKiIpKTsKIAkJCWFzc2VydEVxdWFscygiYm9iLXQyLTEtZzNlNTYzYzUiLCBkZXNjcmliZShjNCwgImJvYioiKSk7CiAJCQlhc3NlcnRFcXVhbHMoImJvYi10Mi0xLWczZTU2M2M1IiwgZGVzY3JpYmUoYzQsICJhKiIsICJiKiIsICJjKiIpKTsKKworCQkJYXNzZXJ0RXF1YWxzKCJib2ItdDIiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDApKTsKKwkJCWFzc2VydEVxdWFscygiYm9iLXQyLTEtZzNlNTYiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDEpKTsKKwkJCWFzc2VydEVxdWFscygiYm9iLXQyLTEtZzNlNTYiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIC0xMCkpOworCQkJYXNzZXJ0RXF1YWxzKCJib2ItdDItMS1nM2U1NjNjNTU5Mjc5MDVmMjFlM2JjN2MwMGEzZDgzYTMxYmY0ZWQzYSIsCisJCQkJCWRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSwgNTApKTsKIAkJfSBlbHNlIHsKIAkJCWFzc2VydEVxdWFscyhudWxsLCBkZXNjcmliZShjMikpOwogCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGRlc2NyaWJlKGMzKSk7CkBAIC0xMDgsNiArMTE1LDE4IEBAIHB1YmxpYyB2b2lkIHRlc3REZXNjcmliZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0RXF1YWxzKCIzNzQ3ZGIzIiwgZGVzY3JpYmUoYzIsIGZhbHNlLCB0cnVlKSk7CiAJCQlhc3NlcnRFcXVhbHMoIjQ0NTc5ZWIiLCBkZXNjcmliZShjMywgZmFsc2UsIHRydWUpKTsKIAkJCWFzc2VydEVxdWFscygiM2U1NjNjNSIsIGRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSkpOworCisJCQlhc3NlcnRFcXVhbHMoIjM3NDdkYjMyNjciLCBkZXNjcmliZShjMiwgZmFsc2UsIHRydWUsIDEwKSk7CisJCQlhc3NlcnRFcXVhbHMoIjQ0NTc5ZWJlN2YiLCBkZXNjcmliZShjMywgZmFsc2UsIHRydWUsIDEwKSk7CisJCQlhc3NlcnRFcXVhbHMoIjNlNTYzYzU1OTIiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDEwKSk7CisKKwkJCWFzc2VydEVxdWFscygiM2U1NiIsIGRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSwgLTEwKSk7CisJCQlhc3NlcnRFcXVhbHMoIjNlNTYiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDApKTsKKwkJCWFzc2VydEVxdWFscygiM2U1NiIsIGRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSwgMikpOworCQkJYXNzZXJ0RXF1YWxzKCIzZTU2M2M1NTkyNzkwNWYyMWUzYmM3YzAwYTNkODNhMzFiZjRlZDNhIiwKKwkJCQkJZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCA0MCkpOworCQkJYXNzZXJ0RXF1YWxzKCIzZTU2M2M1NTkyNzkwNWYyMWUzYmM3YzAwYTNkODNhMzFiZjRlZDNhIiwKKwkJCQkJZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCA0MikpOwogCQl9CiAKIAkJLy8gdGVzdCBkZWZhdWx0IHRhcmdldApAQCAtNDc0LDEwICs0OTMsMTUgQEAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0b3VjaChGaWxlIGYsIFN0cmluZyBjb250ZW50cykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKKwlwcml2YXRlIFN0cmluZyBkZXNjcmliZShPYmplY3RJZCBjMSwgYm9vbGVhbiBsb25nRGVzYywgYm9vbGVhbiBhbHdheXMsCisJCQlpbnQgYWJicmV2KSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCXJldHVybiBnaXQuZGVzY3JpYmUoKS5zZXRUYXJnZXQoYzEpLnNldFRhZ3MoZGVzY3JpYmVVc2VBbGxUYWdzKQorCQkJCS5zZXRMb25nKGxvbmdEZXNjKS5zZXRBbHdheXMoYWx3YXlzKS5zZXRBYmJyZXYoYWJicmV2KS5jYWxsKCk7CisJfQorCiAJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpYmUoT2JqZWN0SWQgYzEsIGJvb2xlYW4gbG9uZ0Rlc2MsIGJvb2xlYW4gYWx3YXlzKQogCQkJdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gZ2l0LmRlc2NyaWJlKCkuc2V0VGFyZ2V0KGMxKS5zZXRUYWdzKGRlc2NyaWJlVXNlQWxsVGFncykKLQkJCQkuc2V0TG9uZyhsb25nRGVzYykuc2V0QWx3YXlzKGFsd2F5cykuY2FsbCgpOworCQlyZXR1cm4gZGVzY3JpYmUoYzEsIGxvbmdEZXNjLCBhbHdheXMsIE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCk7CiAJfQogCiAJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpYmUoT2JqZWN0SWQgYzEpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRW9sUmVwb3NpdG9yeVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRW9sUmVwb3NpdG9yeVRlc3QuamF2YQppbmRleCBkMGRmZDFhLi5iOTM3YjFmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0VvbFJlcG9zaXRvcnlUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Fb2xSZXBvc2l0b3J5VGVzdC5qYXZhCkBAIC0xLDQwICsxLDExIEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCBJdmFuIE1vdHNjaCA8aXZhbi5tb3RzY2hAYnNpYWcuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDIyIEl2YW4gTW90c2NoIDxpdmFuLm1vdHNjaEBic2lhZy5jb20+IGFuZCBvdGhlcnMKICAqCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKLSAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKLSAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KICAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKLSAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZwotICogY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKLSAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotICogICB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0gKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLSAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCkBAIC0xNzMsMTUgKzE0NCwyMiBAQCBwcml2YXRlIHN0YXRpYyBjbGFzcyBBY3R1YWxFbnRyeSB7CiAKIAlwcml2YXRlIERpckNhY2hlIGRpckNhY2hlOwogCisJcHJpdmF0ZSBib29sZWFuIGlzRGVmYXVsdENyTGYoKSB7CisJCVN0cmluZyBlb2wgPSBtb2NrU3lzdGVtUmVhZGVyLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOworCQlyZXR1cm4gIlxyXG4iLmVxdWFscyhlb2wpOworCX0KKwogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdERlZmF1bHRTZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBmb3IgRU9MIHRvIHdvcmssIHRoZSB0ZXh0IGF0dHJpYnV0ZSBtdXN0IGJlIHNldAogCQlzZXR1cEdpdEFuZERvSGFyZFJlc2V0KG51bGwsIG51bGwsIG51bGwsIG51bGwsICIqIHRleHQ9YXV0byIpOwogCQljb2xsZWN0UmVwb3NpdG9yeVN0YXRlKCk7CiAJCWFzc2VydEVxdWFscygidGV4dD1hdXRvIiwgZW50cnlDUkxGLmF0dHJzKTsKLQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TWl4ZWQsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOworCQkvLyBlb2w9bmF0aXZlIGlzIHRoZSBkZWZhdWx0IQorCQlTdHJpbmcgZXhwZWN0ZWQgPSBpc0RlZmF1bHRDckxmKCkgPyBDT05URU5UX0NSTEYgOiBDT05URU5UX0xGOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlMRiwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CiAJfQogCiAJcHVibGljIHZvaWQgY2hlY2tFbnRyeUNvbnRlbnQoQWN0dWFsRW50cnkgZW50cnksIFN0cmluZyBmaWxlQ29udGVudCwKQEAgLTE5OSw5ICsxNzcsMTEgQEAgcHVibGljIHZvaWQgdGVzdF9Db25maWdBdXRvQ1JMRl9mYWxzZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlzZXR1cEdpdEFuZERvSGFyZFJlc2V0KEF1dG9DUkxGLkZBTFNFLCBudWxsLCBudWxsLCBudWxsLCAiKiB0ZXh0PWF1dG8iKTsKIAkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwogCQlhc3NlcnRFcXVhbHMoInRleHQ9YXV0byIsIGVudHJ5Q1JMRi5hdHRycyk7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKKwkJLy8gZW9sPW5hdGl2ZSBpcyB0aGUgZGVmYXVsdCEKKwkJU3RyaW5nIGV4cGVjdGVkID0gaXNEZWZhdWx0Q3JMZigpID8gQ09OVEVOVF9DUkxGIDogQ09OVEVOVF9MRjsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOwogCX0KIAogCUBUZXN0CkBAIC0yNTAsMzQgKzIzMCwyNCBAQCBwdWJsaWMgdm9pZCB0ZXN0X0NvbmZpZ0VPTF9jcmxmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RfQ29uZmlnRU9MX25hdGl2ZV93aW5kb3dzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBvcmlnTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCAiXG4iKTsKLQkJU3lzdGVtLnNldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcclxuIik7Ci0JCXRyeSB7Ci0JCQkvLyBmb3IgRU9MIHRvIHdvcmssIHRoZSB0ZXh0IGF0dHJpYnV0ZSBtdXN0IGJlIHNldAotCQkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChudWxsLCBFT0wuTkFUSVZFLCAiKi50eHQgdGV4dCIsIG51bGwsIG51bGwpOwotCQkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwotCQkJYXNzZXJ0RXF1YWxzKCJ0ZXh0IiwgZW50cnlDUkxGLmF0dHJzKTsKLQkJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJfSBmaW5hbGx5IHsKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCBvcmlnTGluZVNlcGFyYXRvcik7Ci0JCX0KKwkJbW9ja1N5c3RlbVJlYWRlci5zZXRXaW5kb3dzKCk7CisJCS8vIGZvciBFT0wgdG8gd29yaywgdGhlIHRleHQgYXR0cmlidXRlIG11c3QgYmUgc2V0CisJCXNldHVwR2l0QW5kRG9IYXJkUmVzZXQobnVsbCwgRU9MLk5BVElWRSwgIioudHh0IHRleHQiLCBudWxsLCBudWxsKTsKKwkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOworCQlhc3NlcnRFcXVhbHMoInRleHQiLCBlbnRyeUNSTEYuYXR0cnMpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfQ1JMRiwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfQ1JMRiwgQ09OVEVOVF9MRik7CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0X0NvbmZpZ0VPTF9uYXRpdmVfeG5peCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgb3JpZ0xpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgIlxuIik7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCAiXG4iKTsKLQkJdHJ5IHsKLQkJCS8vIGZvciBFT0wgdG8gd29yaywgdGhlIHRleHQgYXR0cmlidXRlIG11c3QgYmUgc2V0Ci0JCQlzZXR1cEdpdEFuZERvSGFyZFJlc2V0KG51bGwsIEVPTC5OQVRJVkUsICIqLnR4dCB0ZXh0IiwgbnVsbCwgbnVsbCk7Ci0JCQljb2xsZWN0UmVwb3NpdG9yeVN0YXRlKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInRleHQiLCBlbnRyeUNSTEYuYXR0cnMpOwotCQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQl9IGZpbmFsbHkgewotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsIG9yaWdMaW5lU2VwYXJhdG9yKTsKLQkJfQorCQltb2NrU3lzdGVtUmVhZGVyLnNldFVuaXgoKTsKKwkJLy8gZm9yIEVPTCB0byB3b3JrLCB0aGUgdGV4dCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQKKwkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChudWxsLCBFT0wuTkFUSVZFLCAiKi50eHQgdGV4dCIsIG51bGwsIG51bGwpOworCQljb2xsZWN0UmVwb3NpdG9yeVN0YXRlKCk7CisJCWFzc2VydEVxdWFscygidGV4dCIsIGVudHJ5Q1JMRi5hdHRycyk7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwogCX0KIAogCUBUZXN0CkBAIC0yOTcsOSArMjY3LDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RfQ29uZmlnQXV0b0NSTEZfZmFsc2VfQ29uZmlnRU9MX25hdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlzZXR1cEdpdEFuZERvSGFyZFJlc2V0KEF1dG9DUkxGLkZBTFNFLCBFT0wuTkFUSVZFLCAiKi50eHQgdGV4dCIsIG51bGwsIG51bGwpOwogCQljb2xsZWN0UmVwb3NpdG9yeVN0YXRlKCk7CiAJCWFzc2VydEVxdWFscygidGV4dCIsIGVudHJ5Q1JMRi5hdHRycyk7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKKwkJU3RyaW5nIGV4cGVjdGVkID0gaXNEZWZhdWx0Q3JMZigpID8gQ09OVEVOVF9DUkxGIDogQ09OVEVOVF9MRjsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOwogCX0KIAogCUBUZXN0CkBAIC01MjQsOSArNDk1LDEyIEBAIHB1YmxpYyB2b2lkIHRlc3RfR2xvYmFsRU9MX2xmX0luZm9FT0xfdW5zcGVjX1Jvb3RFT0xfY3JsZigpCiAJCS8vIGluZm8gb3ZlcnJpZGVzIGFsbAogCQljb2xsZWN0UmVwb3NpdG9yeVN0YXRlKCk7CiAJCWFzc2VydEVxdWFscygidGV4dCIsIGVudHJ5Q1JMRi5hdHRycyk7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKKwkJLy8gIWVvbCBtZWFucyB1bnNwZWNpZmllZCwgc28gdXNlIHRoZSBkZWZhdWx0IG9mIGNvcmUuZW9sLCB3aGljaCBpcworCQkvLyBuYXRpdmUuCisJCVN0cmluZyBleHBlY3RlZCA9IGlzRGVmYXVsdENyTGYoKSA/IENPTlRFTlRfQ1JMRiA6IENPTlRFTlRfTEY7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TWl4ZWQsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKIAl9CiAKIAlAVGVzdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9GZXRjaEFuZFB1bGxDb21tYW5kc1JlY3Vyc2VTdWJtb2R1bGVzVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9GZXRjaEFuZFB1bGxDb21tYW5kc1JlY3Vyc2VTdWJtb2R1bGVzVGVzdC5qYXZhCmluZGV4IDM2YmE3Y2UuLjllYTY0ZWYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRmV0Y2hBbmRQdWxsQ29tbWFuZHNSZWN1cnNlU3VibW9kdWxlc1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0ZldGNoQW5kUHVsbENvbW1hbmRzUmVjdXJzZVN1Ym1vZHVsZXNUZXN0LmphdmEKQEAgLTI1OSw3ICsyNTksOCBAQCBwcml2YXRlIFJldkNvbW1pdCB1cGRhdGVTdWJtb2R1bGVSZXZpc2lvbigpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyB0aGUgY29tbWl0IHRoYXQgd2FzIGNyZWF0ZWQKIAkJdHJ5IChTdWJtb2R1bGVXYWxrIHcgPSBTdWJtb2R1bGVXYWxrLmZvckluZGV4KGdpdC5nZXRSZXBvc2l0b3J5KCkpKSB7CiAJCQlhc3NlcnRUcnVlKHcubmV4dCgpKTsKLQkJCXRyeSAoR2l0IGcgPSBuZXcgR2l0KHcuZ2V0UmVwb3NpdG9yeSgpKSkgeworCQkJdHJ5IChSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSB3LmdldFJlcG9zaXRvcnkoKTsKKwkJCQkJR2l0IGcgPSBuZXcgR2l0KHJlcG9zaXRvcnkpKSB7CiAJCQkJZy5mZXRjaCgpLnNldFJlbW90ZShSRU1PVEUpLnNldFJlZlNwZWNzKFJFRlNQRUMpLmNhbGwoKTsKIAkJCQlnLnJlc2V0KCkuc2V0TW9kZShSZXNldFR5cGUuSEFSRCkuc2V0UmVmKGNvbW1pdDEubmFtZSgpKS5jYWxsKCk7CiAJCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCmluZGV4IGJjNGU5NDAuLjY0NDc1ZjUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCkBAIC01NTQsNyArNTU0LDcgQEAgcHVibGljIHZvaWQgdGVzdE1lcmdlTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJZ2l0Lm1lcmdlKCkuaW5jbHVkZShzaWRlQnJhbmNoKQogCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKS5jYWxsKCk7CiAKLQkJCWFzc2VydEVxdWFscygiTWVyZ2UgYnJhbmNoICdzaWRlJ1xuXG5Db25mbGljdHM6XG5cdGFcbiIsCisJCQlhc3NlcnRFcXVhbHMoIk1lcmdlIGJyYW5jaCAnc2lkZSdcblxuIyBDb25mbGljdHM6XG4jXHRhXG4iLAogCQkJCQlkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CiAJCX0KIApAQCAtMTc4Nyw3ICsxNzg3LDcgQEAgcHVibGljIHZvaWQgdGVzdFNxdWFzaE1lcmdlQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQkJCQkrIGRhdGVGb3JtYXR0ZXIuZm9ybWF0RGF0ZSh0aGlyZAogCQkJCQkJCQkJLmdldEF1dGhvcklkZW50KCkpICsgIlxuXG5cdHRoaXJkIGNvbW1pdFxuIiwKIAkJCQkJZGIucmVhZFNxdWFzaENvbW1pdE1zZygpKTsKLQkJCWFzc2VydEVxdWFscygiXG5Db25mbGljdHM6XG5cdGZpbGUyXG4iLCBkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CisJCQlhc3NlcnRFcXVhbHMoIlxuIyBDb25mbGljdHM6XG4jXHRmaWxlMlxuIiwgZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOwogCiAJCQlTdGF0dXMgc3RhdCA9IGdpdC5zdGF0dXMoKS5jYWxsKCk7CiAJCQlhc3NlcnRFcXVhbHMoU2V0cy5vZigiZmlsZTIiKSwgc3RhdC5nZXRDb25mbGljdGluZygpKTsKQEAgLTE4ODEsNiArMTg4MSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RGYXN0Rm9yd2FyZE9ubHlOb3RQb3NzaWJsZSgpIHRocm93cyBFeGNlcHRpb24gewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJlY3Vyc2l2ZU1lcmdlV2l0aENvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gZGJfdCA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJQnJhbmNoQnVpbGRlciBtYXN0ZXIgPSBkYl90LmJyYW5jaCgibWFzdGVyIik7CiAJCQlSZXZDb21taXQgbTAgPSBtYXN0ZXIuY29tbWl0KCkKIAkJCQkJLmFkZCgiZiIsICIxXG4yXG4zXG40XG41XG42XG43XG44XG45XG4iKS5tZXNzYWdlKCJtMCIpCkBAIC0yMDEyLDcgKzIwMTMsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VDb25mbGljdFdpdGhNZXNzYWdlT3B0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQlnaXQubWVyZ2UoKS5pbmNsdWRlKHNpZGVCcmFuY2gpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkKIAkJCQkJLnNldE1lc3NhZ2UoInVzZXIgbWVzc2FnZSIpLmNhbGwoKTsKIAotCQkJYXNzZXJ0RXF1YWxzKCJ1c2VyIG1lc3NhZ2VcblxuQ29uZmxpY3RzOlxuXHRhXG4iLAorCQkJYXNzZXJ0RXF1YWxzKCJ1c2VyIG1lc3NhZ2VcblxuIyBDb25mbGljdHM6XG4jXHRhXG4iLAogCQkJCQlkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YQppbmRleCA5YWY3N2FhLi42YTg0ZjBhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRUZXN0LmphdmEKQEAgLTU2Nyw2ICs1NjcsNyBAQCBwcml2YXRlIHZvaWQgZG9UZXN0UHVsbFdpdGhSZWJhc2UoQ2FsbGFibGU8UHVsbFJlc3VsdD4gcHVsbFNldHVwLAogCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXN1cGVyLnNldFVwKCk7CiAJCWRiVGFyZ2V0ID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGJUYXJnZXQpOwogCQlzb3VyY2UgPSBuZXcgR2l0KGRiKTsKIAkJdGFyZ2V0ID0gbmV3IEdpdChkYlRhcmdldCk7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFdpdGhSZWJhc2VUZXN0LmphdmEKaW5kZXggY2NlMDRmNC4uZTJkNzkyMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFdpdGhSZWJhc2VUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFdpdGhSZWJhc2VUZXN0LmphdmEKQEAgLTMyMyw2ICszMjMsNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlkYlRhcmdldCA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CiAJCXNvdXJjZSA9IG5ldyBHaXQoZGIpOwogCQl0YXJnZXQgPSBuZXcgR2l0KGRiVGFyZ2V0KTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGJUYXJnZXQpOwogCiAJCS8vIHB1dCBzb21lIGZpbGUgaW4gdGhlIHNvdXJjZSByZXBvCiAJCXNvdXJjZUZpbGUgPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiU29tZUZpbGUudHh0Iik7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZFRlc3QuamF2YQppbmRleCBhNzg2MDY1Li42ZjdhYTYzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmRUZXN0LmphdmEKQEAgLTEwLDcgKzEwLDkgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hcGk7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwogCkBAIC0xOSwxMCArMjEsMTMgQEAKIGltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuRGV0YWNoZWRIZWFkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkludmFsaWRSZWZOYW1lRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5NaXNzaW5nT2JqZWN0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vUmVtb3RlUmVwb3NpdG9yeUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLlByZVB1c2hIb29rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuSkdpdFRlc3RVdGlsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOwpAQCAtMzIsNiArMzcsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENvbmZpZy5QdXNoRGVmYXVsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoUmVzdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlZkxlYXNlU3BlYzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWZTcGVjOwpAQCAtNTAsNiArNTYsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaCgpIHRocm93cyBKR2l0SW50ZXJuYWxFeGNlcHRpb24sIElPRXhjZXB0aW9uLAogCiAJCS8vIGNyZWF0ZSBvdGhlciByZXBvc2l0b3J5CiAJCVJlcG9zaXRvcnkgZGIyID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGIyKTsKIAkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZzIgPSBkYjIuZ2V0Q29uZmlnKCk7CiAKIAkJLy8gdGhpcyB0ZXN0cyB0aGF0IHRoaXMgY29uZmlnIGNhbiBiZSBwYXJzZWQgcHJvcGVybHkKQEAgLTI4OSw2ICsyOTYsNzcwIEBAIHB1YmxpYyB2b2lkIHRlc3RQdXNoV2l0aG91dFB1c2hSZWZTcGVjKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoaW5nIGZyb20gYSBkZXRhY2hlZCBIRUFEIHdpdGhvdXQgcmVmc3BlYyB0aHJvd3MgYQorCSAqIERldGFjaGVkSGVhZEV4Y2VwdGlvbi4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHREZXRhY2hlZEhlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlmaW5hbCBTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGNvbW1pdC5nZXROYW1lKCkpLmNhbGwoKTsKKwkJCVN0cmluZyBoZWFkID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRGdWxsQnJhbmNoKCk7CisJCQlhc3NlcnRUcnVlKE9iamVjdElkLmlzSWQoaGVhZCkpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXROYW1lKCksIGhlYWQpOworCQkJYXNzZXJ0VGhyb3dzKERldGFjaGVkSGVhZEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCkpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9bm90aGluZyB3aXRob3V0IHJlZnNwZWMgdGhyb3dzIGFuCisJICogSW52YWxpZFJlZk5hbWVFeGNlcHRpb24uCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0Tm90aGluZygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0VGhyb3dzKEludmFsaWRSZWZOYW1lRXhjZXB0aW9uLmNsYXNzLAorCQkJCQkoKSAtPiBnaXQucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpCisJCQkJCQkJLnNldFB1c2hEZWZhdWx0KFB1c2hEZWZhdWx0Lk5PVEhJTkcpLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD1tYXRjaGluZyB3aXRob3V0IHJlZnNwZWMgcHVzaGVzIGFsbCBtYXRjaGluZworCSAqIGJyYW5jaGVzLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdE1hdGNoaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJLy8gcHVzaCBtYXN0ZXIgYW5kIGJyYW5jaHRvcHVzaAorCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRSZWZTcGVjcygKKwkJCQkJbmV3IFJlZlNwZWMoInJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyIiksCisJCQkJCW5ldyBSZWZTcGVjKAorCQkJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaDpyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJLy8gQ3JlYXRlIHR3byBkaWZmZXJlbnQgY29tbWl0cyBvbiB0aGVzZSB0d28gYnJhbmNoZXMKKwkJCXdyaXRlVHJhc2hGaWxlKCJiIiwgIm9uIGJyYW5jaHRvcHVzaCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGJDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgib24gYnJhbmNodG9wdXNoIikKKwkJCQkJLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJtIiwgIm9uIG1hc3RlciIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJtIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IG1Db21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgib24gbWFzdGVyIikuY2FsbCgpOworCQkJLy8gTm93IHB1c2ggd2l0aCBtb2RlICJtYXRjaGluZyI6IHNob3VsZCBwdXNoIGJvdGggYnJhbmNoZXMuCisJCQlJdGVyYWJsZTxQdXNoUmVzdWx0PiByZXN1bHQgPSBnaXQucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpCisJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5NQVRDSElORykKKwkJCQkJLmNhbGwoKTsKKwkJCWludCBuID0gMDsKKwkJCWZvciAoUHVzaFJlc3VsdCByIDogcmVzdWx0KSB7CisJCQkJbisrOworCQkJCWFzc2VydEVxdWFscygxLCBuKTsKKwkJCQlhc3NlcnRFcXVhbHMoMiwgci5nZXRSZW1vdGVVcGRhdGVzKCkuc2l6ZSgpKTsKKwkJCQlmb3IgKFJlbW90ZVJlZlVwZGF0ZSB1cGRhdGUgOiByLmdldFJlbW90ZVVwZGF0ZXMoKSkgeworCQkJCQlhc3NlcnRGYWxzZSh1cGRhdGUuaXNNYXRjaGluZygpKTsKKwkJCQkJYXNzZXJ0VHJ1ZSh1cGRhdGUuZ2V0U3JjUmVmKCkKKwkJCQkJCQkuZXF1YWxzKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpCisJCQkJCQkJfHwgdXBkYXRlLmdldFNyY1JlZigpLmVxdWFscygicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQkJCWFzc2VydEVxdWFscyhSZW1vdGVSZWZVcGRhdGUuU3RhdHVzLk9LLCB1cGRhdGUuZ2V0U3RhdHVzKCkpOworCQkJCX0KKwkJCX0KKwkJCWFzc2VydEVxdWFscyhiQ29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhtQ29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKGJDb21taXQuZ2V0SWQoKSwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG1Db21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0LmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaC5kZWZhdWx0PXVwc3RyZWFtIHdpdGhvdXQgcmVmc3BlYyBwdXNoZXMgb25seSB0aGUgY3VycmVudAorCSAqIGJyYW5jaCB0byB0aGUgY29uZmlndXJlZCB1cHN0cmVhbS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRVcHN0cmVhbSgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5VUFNUUkVBTSkKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD11cHN0cmVhbSB3aXRob3V0IHJlZnNwZWMgdGhyb3dzIGFuCisJICogSW52YWxpZFJlZk5hbWVFeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhhcyBubyB1cHN0cmVhbS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRVcHN0cmVhbU5vVHJhY2tpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5VUFNUUkVBTSkuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaC5kZWZhdWx0PXVwc3RyZWFtIHdpdGhvdXQgcmVmc3BlYyB0aHJvd3MgYW4KKwkgKiBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbiBpZiB0aGUgcHVzaCByZW1vdGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBmZXRjaAorCSAqIHJlbW90ZS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRVcHN0cmVhbVRyaWFuZ3VsYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCS8vIERvbid0IGNvbmZpZ3VyZSBhIHJlbW90ZTsgaXQnbGwgZGVmYXVsdCB0byAib3JpZ2luIi4KKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkidXBzdHJlYW1icmFuY2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5VUFNUUkVBTSkuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaC5kZWZhdWx0PXNpbXBsZSB3aXRob3V0IHJlZnNwZWMgcHVzaGVzIG9ubHkgdGhlIGN1cnJlbnQKKwkgKiBicmFuY2ggdG8gdGhlIGNvbmZpZ3VyZWQgdXBzdHJlYW0gbmFtZS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5TSU1QTEUpCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD1zaW1wbGUgd2l0aG91dCByZWZzcGVjIHB1c2hlcyBvbmx5IHRoZSBjdXJyZW50CisJICogYnJhbmNoIHRvIGEgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBhIHRyaWFuZ3VsYXIgd29ya2Zsb3cuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0U2ltcGxlVHJpYW5ndWxhcigpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCS8vIERvbid0IHNldCByZW1vdGUsIGl0J2xsIGRlZmF1bHQgdG8gIm9yaWdpbiIuIENvbmZpZ3VyZSBhCisJCQkvLyBkaWZmZXJlbnQgYnJhbmNoIG5hbWU7IHNob3VsZCBiZSBpZ25vcmVkLgorCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJtZXJnZSIsCisJCQkJCSJyZWZzL2hlYWRzL3Vwc3RyZWFtYnJhbmNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlnaXQucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpLnNldFB1c2hEZWZhdWx0KFB1c2hEZWZhdWx0LlNJTVBMRSkKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNodG9wdXNoIikpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9c2ltcGxlIHdpdGhvdXQgcmVmc3BlYyB0aHJvd3MgYW4KKwkgKiBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBicmFuY2ggaGFzIG5vIHVwc3RyZWFtLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdFNpbXBsZU5vVHJhY2tpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5TSU1QTEUpLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD1zaW1wbGUgd2l0aG91dCByZWZzcGVjIHRocm93cyBhbgorCSAqIEludmFsaWRSZWZOYW1lRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBoYXMgYW4gdXBzdHJlYW0gd2l0aCBhCisJICogZGlmZmVyZW50IG5hbWUuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0U2ltcGxlRGlmZmVyZW50VHJhY2tpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0VGhyb3dzKEludmFsaWRSZWZOYW1lRXhjZXB0aW9uLmNsYXNzLAorCQkJCQkoKSAtPiBnaXQucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpCisJCQkJCQkJLnNldFB1c2hEZWZhdWx0KFB1c2hEZWZhdWx0LlNJTVBMRSkuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgaWYgbm8gUHVzaERlZmF1bHQgaXMgc2V0LCB0aGUgdmFsdWUgaXMgcmVhZCBmcm9tIHRoZSBnaXQKKwkgKiBjb25maWcuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0RnJvbUNvbmZpZygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2V0U3RyaW5nKCJwdXNoIiwgbnVsbCwgImRlZmF1bHQiLCAidXBzdHJlYW0iKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQljb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJyZW1vdGUiLCAidGVzdCIpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJtZXJnZSIsCisJCQkJCSJyZWZzL2hlYWRzL3Vwc3RyZWFtYnJhbmNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlQdXNoQ29tbWFuZCBjbWQgPSBnaXQucHVzaCgpOworCQkJY21kLnNldFJlbW90ZSgidGVzdCIpLnNldFB1c2hEZWZhdWx0KG51bGwpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhQdXNoRGVmYXVsdC5VUFNUUkVBTSwgY21kLmdldFB1c2hEZWZhdWx0KCkpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL3Vwc3RyZWFtYnJhbmNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLCBnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaHRvcHVzaCIpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgaWYgbm8gUHVzaERlZmF1bHQgaXMgc2V0IGFuZCBub25lIGlzIHNldCBpbiB0aGUgZ2l0IGNvbmZpZywgaXQKKwkgKiBkZWZhdWx0cyB0byAic2ltcGxlIi4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRGcm9tQ29uZmlnRGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlQdXNoQ29tbWFuZCBjbWQgPSBnaXQucHVzaCgpOworCQkJY21kLnNldFJlbW90ZSgidGVzdCIpLnNldFB1c2hEZWZhdWx0KG51bGwpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhQdXNoRGVmYXVsdC5TSU1QTEUsIGNtZC5nZXRQdXNoRGVmYXVsdCgpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLCBnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaHRvcHVzaCIpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgYnJhbmNoLjxuYW1lPi5wdXNoUmVtb3RlIG92ZXJyaWRlcyBhbnl0aGluZyBlbHNlLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCcmFuY2hQdXNoUmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoInJlbW90ZSIsIG51bGwsICJwdXNoRGVmYXVsdCIsICJ0ZXN0Iik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQljb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJyZW1vdGUiLCAidGVzdCIpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJwdXNocmVtb3RlIiwgIm9yaWdpbiIpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJtZXJnZSIsCisJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0VGhyb3dzKEludmFsaWRSZWZOYW1lRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiBnaXQucHVzaCgpCisJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5VUFNUUkVBTSkuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcmVtb3RlLnB1c2hEZWZhdWx0IG92ZXJyaWRlcyBicmFuY2guPG5hbWU+LnJlbW90ZQorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZW1vdGVQdXNoRGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2V0U3RyaW5nKCJyZW1vdGUiLCBudWxsLCAicHVzaERlZmF1bHQiLCAib3JpZ2luIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQljb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJyZW1vdGUiLCAidGVzdCIpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJtZXJnZSIsCisJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0VGhyb3dzKEludmFsaWRSZWZOYW1lRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiBnaXQucHVzaCgpCisJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5VUFNUUkVBTSkuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgdWx0aW1hdGVseSB3ZSBmYWxsIGJhY2sgdG8gIm9yaWdpbiIuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlZmF1bHRSZW1vdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCVB1c2hDb21tYW5kIGNtZCA9IGdpdC5wdXNoKCkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pOworCQkJVHJhbnNwb3J0RXhjZXB0aW9uIGUgPSBhc3NlcnRUaHJvd3MoVHJhbnNwb3J0RXhjZXB0aW9uLmNsYXNzLAorCQkJCQkoKSAtPiBjbWQuY2FsbCgpKTsKKwkJCWFzc2VydEVxdWFscyhOb1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb24uY2xhc3MsCisJCQkJCWUuZ2V0Q2F1c2UoKS5nZXRDbGFzcygpKTsKKwkJCWFzc2VydEVxdWFscygib3JpZ2luIiwgY21kLmdldFJlbW90ZSgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgYSBwdXNoIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJlbW90ZSBvciBtb2RlIG9yIGFueXRoaW5nIGNhbgorCSAqIHN1Y2NlZWQgaWYgdGhlIGdpdCBjb25maWcgaXMgY29ycmVjdC4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdFB1c2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJLy8gU2hvdWxkIHVzZSByZW1vdGUgInRlc3QiLCBwdXNoLmRlZmF1bHQ9Y3VycmVudAorCQkJUHVzaENvbW1hbmQgY21kID0gZ2l0LnB1c2goKTsKKwkJCWNtZC5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoInRlc3QiLCBjbWQuZ2V0UmVtb3RlKCkpOworCQkJYXNzZXJ0RXF1YWxzKFB1c2hEZWZhdWx0LkNVUlJFTlQsIGNtZC5nZXRQdXNoRGVmYXVsdCgpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLCBnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaHRvcHVzaCIpKTsKKwkJfQorCX0KKworCS8qKgogCSAqIENoZWNrIHRoYXQgbWlzc2luZyByZWZzIGRvbid0IGNhdXNlIGVycm9ycyBkdXJpbmcgcHVzaAogCSAqCiAJICogQHRocm93cyBFeGNlcHRpb24KQEAgLTI5Nyw2ICsxMDY4LDcgQEAgcHVibGljIHZvaWQgdGVzdFB1c2hXaXRob3V0UHVzaFJlZlNwZWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0UHVzaEFmdGVyR0MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gY3JlYXRlIG90aGVyIHJlcG9zaXRvcnkKIAkJUmVwb3NpdG9yeSBkYjIgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShkYjIpOwogCiAJCS8vIHNldHVwIHRoZSBmaXJzdCByZXBvc2l0b3J5CiAJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKQEAgLTM2MCw2ICsxMTMyLDcgQEAgcHVibGljIHZvaWQgdGVzdFB1c2hXaXRoTGVhc2UoKSB0aHJvd3MgSkdpdEludGVybmFsRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwKIAogCQkvLyBjcmVhdGUgb3RoZXIgcmVwb3NpdG9yeQogCQlSZXBvc2l0b3J5IGRiMiA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGRiMik7CiAKIAkJLy8gc2V0dXAgdGhlIGZpcnN0IHJlcG9zaXRvcnkKIAkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kVGVzdC5qYXZhCmluZGV4IDg2MjM5MDIuLmM2NGZmMGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmRUZXN0LmphdmEKQEAgLTI5MjcsOCArMjkyNyw4IEBAIHB1YmxpYyBTdHJpbmcgbW9kaWZ5Q29tbWl0TWVzc2FnZShTdHJpbmcgY29tbWl0KSB7CiAJCX0KIAl9CiAKLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEJsYW5rTGluZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlwcml2YXRlIHZvaWQgc2ltcGxlRml4dXAoU3RyaW5nIGZpcnN0TWVzc2FnZSwgU3RyaW5nIHNlY29uZE1lc3NhZ2UpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gY3JlYXRlIGZpbGUxIG9uIG1hc3RlcgogCQl3cml0ZVRyYXNoRmlsZShGSUxFMSwgRklMRTEpOwogCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oRklMRTEpLmNhbGwoKTsKQEAgLTI5MzgsMTMgKzI5MzgsMTMgQEAgcHVibGljIHZvaWQgdGVzdFJlYmFzZUludGVyYWN0aXZlRml4dXBXaXRoQmxhbmtMaW5lcygpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBjcmVhdGUgZmlsZTIgb24gbWFzdGVyCiAJCXdyaXRlVHJhc2hGaWxlKCJmaWxlMiIsICJmaWxlMiIpOwogCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUyIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQWRkIGZpbGUyIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZShmaXJzdE1lc3NhZ2UpLmNhbGwoKTsKIAkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZmlsZTIiKS5leGlzdHMoKSk7CiAKIAkJLy8gdXBkYXRlIEZJTEUxIG9uIG1hc3RlcgogCQl3cml0ZVRyYXNoRmlsZShGSUxFMSwgImJsYWgiKTsKIAkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEUxKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJ1cGRhdGVkIGZpbGUxIG9uIG1hc3RlclxuXG5zb21lIHRleHQiKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKHNlY29uZE1lc3NhZ2UpLmNhbGwoKTsKIAogCQlnaXQucmViYXNlKCkuc2V0VXBzdHJlYW0oIkhFQUR+MiIpCiAJCQkJLnJ1bkludGVyYWN0aXZlbHkobmV3IEludGVyYWN0aXZlSGFuZGxlcigpIHsKQEAgLTI5NjgsOSArMjk2OCwzMSBAQCBwdWJsaWMgU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIGNvbW1pdCkgewogCQl0cnkgKFJldldhbGsgd2FsayA9IG5ldyBSZXZXYWxrKGRiKSkgewogCQkJT2JqZWN0SWQgaGVhZElkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCk7CiAJCQlSZXZDb21taXQgaGVhZENvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZElkKTsKLQkJCWFzc2VydEVxdWFscygiQWRkIGZpbGUyIiwKLQkJCQkJaGVhZENvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscyhmaXJzdE1lc3NhZ2UsIGhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CiAJCX0KKworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJlYmFzZUludGVyYWN0aXZlRml4dXBXaXRoQmxhbmtMaW5lcygpIHRocm93cyBFeGNlcHRpb24geworCQlzaW1wbGVGaXh1cCgiQWRkIGZpbGUyIiwgInVwZGF0ZWQgZmlsZTEgb24gbWFzdGVyXG5cbnNvbWUgdGV4dCIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJlYmFzZUludGVyYWN0aXZlRml4dXBXaXRoQmxhbmtMaW5lczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2ltcGxlRml4dXAoIkFkZCBmaWxlMlxuXG5Cb2R5XG4iLAorCQkJCSJ1cGRhdGVkIGZpbGUxIG9uIG1hc3RlclxuXG5zb21lIHRleHQiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEhhc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2ltcGxlRml4dXAoIiNBZGQgZmlsZTIiLCAidXBkYXRlZCBmaWxlMSBvbiBtYXN0ZXIiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEhhc2gyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNpbXBsZUZpeHVwKCIjQWRkIGZpbGUyXG5cbkhlYWRlciBoYXMgaGFzaFxuIiwKKwkJCQkiI3VwZGF0ZWQgZmlsZTEgb24gbWFzdGVyIik7CiAJfQogCiAJQFRlc3QoZXhwZWN0ZWQgPSBJbnZhbGlkUmViYXNlU3RlcEV4Y2VwdGlvbi5jbGFzcykKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YQppbmRleCBjZmE4NDg2Li4xYzdiOGQxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kVGVzdC5qYXZhCkBAIC05LDYgKzksNyBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CkBAIC0xNjYsNyArMTY3LDkgQEAgcHVibGljIHZvaWQgdGVzdFJldmVydE11bHRpcGxlV2l0aEZhaWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAKIAkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiZmlyc3RcbiIKIAkJCQkJKyAiPDw8PDw8PCBtYXN0ZXJcbiIgKyAic2Vjb25kXG4iICsgInRoaXJkXG4iICsgIj09PT09PT1cbiIKLQkJCQkJKyAiPj4+Pj4+PiAiICsgc2Vjb25kQ29tbWl0LmdldElkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkKKwkJCQkJKyAiPj4+Pj4+PiAiCisJCQkJCSsgc2Vjb25kQ29tbWl0LmdldElkKCkKKwkJCQkJCQkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpLm5hbWUoKQogCQkJCQkrICIgYWRkIHNlY29uZFxuIik7CiAJCQlJdGVyYXRvcjxSZXZDb21taXQ+IGhpc3RvcnkgPSBnaXQubG9nKCkuY2FsbCgpLml0ZXJhdG9yKCk7CiAJCQlSZXZDb21taXQgcmV2ZXJ0Q29tbWl0ID0gaGlzdG9yeS5uZXh0KCk7CkBAIC0yMzIsNyArMjM1LDcgQEAgcHVibGljIHZvaWQgdGVzdFJldmVydENvbmZsaWN0UmVzb2x1dGlvbigpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLk1FUkdFX01TRykuZXhpc3RzKCkpOwogCQkJYXNzZXJ0RXF1YWxzKCJSZXZlcnQgXCIiICsgc2lkZUNvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKQogCQkJCQkrICJcIlxuXG5UaGlzIHJldmVydHMgY29tbWl0ICIgKyBzaWRlQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpCi0JCQkJCSsgIi5cblxuQ29uZmxpY3RzOlxuXHRhXG4iLAorCQkJCQkrICIuXG5cbiMgQ29uZmxpY3RzOlxuI1x0YVxuIiwKIAkJCQkJZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOwogCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLlJFVkVSVF9IRUFEKQogCQkJCQkuZXhpc3RzKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGF0dXNDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGF0dXNDb21tYW5kVGVzdC5qYXZhCmluZGV4IDUzMTFlZGIuLjE5MjgxZjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3RhdHVzQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXR1c0NvbW1hbmRUZXN0LmphdmEKQEAgLTIxLDggKzIxLDEwIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLk5vRmlsZXBhdHRlcm5FeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm9Xb3JrVHJlZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlNldHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGUuRmlsZUJhc2VkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVSZXBvc2l0b3J5QnVpbGRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlM7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKQEAgLTE4MSw0ICsxODMsMzEgQEAgcHVibGljIHZvaWQgdGVzdEZvbGRlclByZWZpeCgpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAJfQogCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkQ29tbWl0dGVkR2l0UmVwb0FuZFBhdGhGaWx0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY29tbWl0RmlsZSgiZmlsZS50eHQiLCAiZmlsZSIsICJtYXN0ZXIiKTsKKwkJdHJ5IChSZXBvc2l0b3J5IGlubmVyID0gbmV3IEZpbGVSZXBvc2l0b3J5QnVpbGRlcigpCisJCQkJLnNldFdvcmtUcmVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJzdWJnaXQiKSkuYnVpbGQoKSkgeworCQkJaW5uZXIuY3JlYXRlKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgic3ViZ2l0L3N1Yi50eHQiLCAic3ViIik7CisJCQl0cnkgKEdpdCBvdXRlckdpdCA9IG5ldyBHaXQoZGIpOyBHaXQgaW5uZXJHaXQgPSBuZXcgR2l0KGlubmVyKSkgeworCQkJCWlubmVyR2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJzdWIudHh0IikuY2FsbCgpOworCQkJCWlubmVyR2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIklubmVyIGNvbW1pdCIpLmNhbGwoKTsKKwkJCQlvdXRlckdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigic3ViZ2l0IikuY2FsbCgpOworCQkJCW91dGVyR2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk91dGVyIGNvbW1pdCIpLmNhbGwoKTsKKwkJCQlhc3NlcnRUcnVlKGlubmVyR2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQkJCWFzc2VydFRydWUob3V0ZXJHaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCQkJd3JpdGVUcmFzaEZpbGUoInN1YmdpdC9zdWIudHh0IiwgInN1YjIiKTsKKwkJCQlhc3NlcnRGYWxzZShpbm5lckdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJCQlhc3NlcnRGYWxzZShvdXRlckdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJCQlhc3NlcnRUcnVlKAorCQkJCQkJb3V0ZXJHaXQuc3RhdHVzKCkuYWRkUGF0aCgiZmlsZS50eHQiKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJCQlhc3NlcnRUcnVlKG91dGVyR2l0LnN0YXR1cygpLmFkZFBhdGgoImRvZXNudGV4aXN0IikuY2FsbCgpCisJCQkJCQkuaXNDbGVhbigpKTsKKwkJCQlhc3NlcnRGYWxzZSgKKwkJCQkJCW91dGVyR2l0LnN0YXR1cygpLmFkZFBhdGgoInN1YmdpdCIpLmNhbGwoKS5pc0NsZWFuKCkpOworCQkJfQorCQl9CisJfQorCiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9CYXJlU3VwZXJwcm9qZWN0V3JpdGVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vQmFyZVN1cGVycHJvamVjdFdyaXRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I5Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vQmFyZVN1cGVycHJvamVjdFdyaXRlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgR29vZ2xlIEluYy4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvOworCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5jb250YWluc0luQW55T3JkZXI7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5pczsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLndoZW47CisKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5CYXJlU3VwZXJwcm9qZWN0V3JpdGVyLkJhcmVXcml0ZXJDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Db21tYW5kLlJlbW90ZVJlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RSZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgQmFyZVN1cGVycHJvamVjdFdyaXRlclRlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQTFfQSA9ICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjsKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB3cml0ZV9zZXRHaXRNb2R1bGVzQ29udGVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkgeworCQkJUmVwb1Byb2plY3QgcmVwb1Byb2plY3QgPSBuZXcgUmVwb1Byb2plY3QoInN1YnByb2plY3RYIiwgInBhdGgvdG8iLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2gteCIsICJyZW1vdGUiLCAiIik7CisJCQlyZXBvUHJvamVjdC5zZXRVcmwoImh0dHA6Ly9leGFtcGxlLmNvbS9hIik7CisKKwkJCVJlbW90ZVJlYWRlciBtb2NrUmVtb3RlUmVhZGVyID0gbW9jayhSZW1vdGVSZWFkZXIuY2xhc3MpOworCQkJd2hlbihtb2NrUmVtb3RlUmVhZGVyLnNoYTEoImh0dHA6Ly9leGFtcGxlLmNvbS9hIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNoLXgiKSkKKwkJCQkJCQkudGhlblJldHVybihPYmplY3RJZC5mcm9tU3RyaW5nKFNIQTFfQSkpOworCisJCQlCYXJlU3VwZXJwcm9qZWN0V3JpdGVyIHcgPSBuZXcgQmFyZVN1cGVycHJvamVjdFdyaXRlcihiYXJlUmVwbywKKwkJCQkJbnVsbCwgInJlZnMvaGVhZHMvbWFzdGVyIiwgYXV0aG9yLCBtb2NrUmVtb3RlUmVhZGVyLAorCQkJCQlCYXJlV3JpdGVyQ29uZmlnLmdldERlZmF1bHQoKSwgTGlzdC5vZigpKTsKKworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IHcud3JpdGUoQXJyYXlzLmFzTGlzdChyZXBvUHJvamVjdCkpOworCisJCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoYmFyZVJlcG8sIGNvbW1pdCwgIi5naXRtb2R1bGVzIik7CisJCQlMaXN0PFN0cmluZz4gY29udGVudExpbmVzID0gQXJyYXlzCisJCQkJCS5hc0xpc3QoY29udGVudHMuc3BsaXQoIlxuIikpOworCQkJYXNzZXJ0VGhhdChjb250ZW50TGluZXMuZ2V0KDApLAorCQkJCQlpcygiW3N1Ym1vZHVsZSBcInN1YnByb2plY3RYXCJdIikpOworCQkJYXNzZXJ0VGhhdChjb250ZW50TGluZXMuc3ViTGlzdCgxLCBjb250ZW50TGluZXMuc2l6ZSgpKSwKKwkJCQkJY29udGFpbnNJbkFueU9yZGVyKGlzKCJcdGJyYW5jaCA9IHJlZnMvaGVhZHMvYnJhbmNoLXgiKSwKKwkJCQkJCQlpcygiXHRwYXRoID0gcGF0aC90byIpLAorCQkJCQkJCWlzKCJcdHVybCA9IGh0dHA6Ly9leGFtcGxlLmNvbS9hIikpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgd3JpdGVfc2V0RXh0cmFDb250ZW50cygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKFJlcG9zaXRvcnkgYmFyZVJlcG8gPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSB7CisJCQlSZXBvUHJvamVjdCByZXBvUHJvamVjdCA9IG5ldyBSZXBvUHJvamVjdCgic3VicHJvamVjdFgiLCAicGF0aC90byIsCisJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaC14IiwgInJlbW90ZSIsICIiKTsKKwkJCXJlcG9Qcm9qZWN0LnNldFVybCgiaHR0cDovL2V4YW1wbGUuY29tL2EiKTsKKworCQkJUmVtb3RlUmVhZGVyIG1vY2tSZW1vdGVSZWFkZXIgPSBtb2NrKFJlbW90ZVJlYWRlci5jbGFzcyk7CisJCQl3aGVuKG1vY2tSZW1vdGVSZWFkZXIuc2hhMSgiaHR0cDovL2V4YW1wbGUuY29tL2EiLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2gteCIpKQorCQkJCQkJCS50aGVuUmV0dXJuKE9iamVjdElkLmZyb21TdHJpbmcoU0hBMV9BKSk7CisKKwkJCUJhcmVTdXBlcnByb2plY3RXcml0ZXIgdyA9IG5ldyBCYXJlU3VwZXJwcm9qZWN0V3JpdGVyKGJhcmVSZXBvLAorCQkJCQludWxsLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCBhdXRob3IsIG1vY2tSZW1vdGVSZWFkZXIsCisJCQkJCUJhcmVXcml0ZXJDb25maWcuZ2V0RGVmYXVsdCgpLAorCQkJCQlMaXN0Lm9mKG5ldyBCYXJlU3VwZXJwcm9qZWN0V3JpdGVyLkV4dHJhQ29udGVudCgieCIsCisJCQkJCQkJImV4dHJhLWNvbnRlbnQiKSkpOworCisJCQlSZXZDb21taXQgY29tbWl0ID0gdy53cml0ZShBcnJheXMuYXNMaXN0KHJlcG9Qcm9qZWN0KSk7CisKKwkJCVN0cmluZyBjb250ZW50cyA9IHJlYWRDb250ZW50cyhiYXJlUmVwbywgY29tbWl0LCAieCIpOworCQkJYXNzZXJ0VGhhdChjb250ZW50cywgaXMoImV4dHJhLWNvbnRlbnQiKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIFN0cmluZyByZWFkQ29udGVudHMoUmVwb3NpdG9yeSByZXBvLCBSZXZDb21taXQgY29tbWl0LAorCQkJU3RyaW5nIHBhdGgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgaWRTdHIgPSBjb21taXQuZ2V0SWQoKS5uYW1lKCkgKyAiOiIgKyBwYXRoOworCQlPYmplY3RJZCBtb2RJZCA9IHJlcG8ucmVzb2x2ZShpZFN0cik7CisJCXRyeSAoT2JqZWN0UmVhZGVyIHJlYWRlciA9IHJlcG8ubmV3T2JqZWN0UmVhZGVyKCkpIHsKKwkJCXJldHVybiBuZXcgU3RyaW5nKAorCQkJCQlyZWFkZXIub3Blbihtb2RJZCkuZ2V0Q2FjaGVkQnl0ZXMoSW50ZWdlci5NQVhfVkFMVUUpLAorCQkJCQlTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKKworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQppbmRleCA1MDlhZGMyLi4zZTZkMTNhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQpAQCAtMTUsNiArMTUsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzdW1lLmFzc3VtZVRydWU7CiAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CkBAIC01NDYsMjQgKzU0NywyOSBAQCBwdWJsaWMgdm9pZCB0ZXN0UmVwb01hbmlmZXN0Q29weUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVGhlIG9yaWdpbmFsIGZpbGUgc2hvdWxkIGV4aXN0CiAJCUZpbGUgaGVsbG8gPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksICJmb28vaGVsbG8udHh0Iik7CiAJCWFzc2VydFRydWUoIlRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBleGlzdCIsIGhlbGxvLmV4aXN0cygpKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBub3QgYmUgZXhlY3V0YWJsZSIsCi0JCQkJaGVsbG8uY2FuRXhlY3V0ZSgpKTsKKwkJaWYgKEZTLkRFVEVDVEVELnN1cHBvcnRzRXhlY3V0ZSgpKSB7CisJCQlhc3NlcnRGYWxzZSgiVGhlIG9yaWdpbmFsIGZpbGUgc2hvdWxkIG5vdCBiZSBleGVjdXRhYmxlIiwKKwkJCQkJRlMuREVURUNURUQuY2FuRXhlY3V0ZShoZWxsbykpOworCQl9CiAJCWFzc2VydENvbnRlbnRzKGhlbGxvLnRvUGF0aCgpLCAibWFzdGVyIHdvcmxkIik7CiAJCS8vIFRoZSBkZXN0IGZpbGUgc2hvdWxkIGFsc28gZXhpc3QKIAkJaGVsbG8gPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksICJIZWxsbyIpOwogCQlhc3NlcnRUcnVlKCJUaGUgZGVzdGluYXRpb24gZmlsZSBzaG91bGQgZXhpc3QiLCBoZWxsby5leGlzdHMoKSk7Ci0JCWFzc2VydEZhbHNlKCJUaGUgZGVzdGluYXRpb24gZmlsZSBzaG91bGQgbm90IGJlIGV4ZWN1dGFibGUiLAotCQkJCWhlbGxvLmNhbkV4ZWN1dGUoKSk7CisJCWlmIChGUy5ERVRFQ1RFRC5zdXBwb3J0c0V4ZWN1dGUoKSkgeworCQkJYXNzZXJ0RmFsc2UoIlRoZSBkZXN0aW5hdGlvbiBmaWxlIHNob3VsZCBub3QgYmUgZXhlY3V0YWJsZSIsCisJCQkJCUZTLkRFVEVDVEVELmNhbkV4ZWN1dGUoaGVsbG8pKTsKKwkJfQogCQlhc3NlcnRDb250ZW50cyhoZWxsby50b1BhdGgoKSwgIm1hc3RlciB3b3JsZCIpOwogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJlcG9NYW5pZmVzdENvcHlGaWxlX2V4ZWN1dGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzdW1lVHJ1ZShGUy5ERVRFQ1RFRC5zdXBwb3J0c0V4ZWN1dGUoKSk7CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGVmYXVsdERiKSkgewogCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOwogCQkJRmlsZSBmID0gSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGRlZmF1bHREYiwgImhlbGxvLnNoIiwKIAkJCQkJImNvbnRlbnQgb2YgdGhlIGV4ZWN1dGFibGUgZmlsZSIpOwotCQkJZi5zZXRFeGVjdXRhYmxlKHRydWUpOworCQkJRlMuREVURUNURUQuc2V0RXhlY3V0ZShmLCB0cnVlKTsKIAkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiaGVsbG8uc2giKS5jYWxsKCk7CiAJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQWRkIGJpbmFyeSBmaWxlIikuY2FsbCgpOwogCQl9CkBAIC01ODgsNyArNTk0LDggQEAgcHVibGljIHZvaWQgdGVzdFJlcG9NYW5pZmVzdENvcHlGaWxlX2V4ZWN1dGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVGhlIG9yaWdpbmFsIGZpbGUgc2hvdWxkIGV4aXN0IGFuZCBiZSBhbiBleGVjdXRhYmxlCiAJCUZpbGUgaGVsbG8gPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksICJmb28vaGVsbG8uc2giKTsKIAkJYXNzZXJ0VHJ1ZSgiVGhlIG9yaWdpbmFsIGZpbGUgc2hvdWxkIGV4aXN0IiwgaGVsbG8uZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKCJUaGUgb3JpZ2luYWwgZmlsZSBtdXN0IGJlIGV4ZWN1dGFibGUiLCBoZWxsby5jYW5FeGVjdXRlKCkpOworCQlhc3NlcnRUcnVlKCJUaGUgb3JpZ2luYWwgZmlsZSBtdXN0IGJlIGV4ZWN1dGFibGUiLAorCQkJCUZTLkRFVEVDVEVELmNhbkV4ZWN1dGUoaGVsbG8pKTsKIAkJdHJ5IChCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBGaWxlcy5uZXdCdWZmZXJlZFJlYWRlcihoZWxsby50b1BhdGgoKSwKIAkJCQlVVEZfOCkpIHsKIAkJCVN0cmluZyBjb250ZW50ID0gcmVhZGVyLnJlYWRMaW5lKCk7CkBAIC02MDAsNyArNjA3LDcgQEAgcHVibGljIHZvaWQgdGVzdFJlcG9NYW5pZmVzdENvcHlGaWxlX2V4ZWN1dGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJaGVsbG8gPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksICJjb3B5LWhlbGxvLnNoIik7CiAJCWFzc2VydFRydWUoIlRoZSBkZXN0aW5hdGlvbiBmaWxlIHNob3VsZCBleGlzdCIsIGhlbGxvLmV4aXN0cygpKTsKIAkJYXNzZXJ0VHJ1ZSgiVGhlIGRlc3RpbmF0aW9uIGZpbGUgbXVzdCBiZSBleGVjdXRhYmxlIiwKLQkJCQloZWxsby5jYW5FeGVjdXRlKCkpOworCQkJCUZTLkRFVEVDVEVELmNhbkV4ZWN1dGUoaGVsbG8pKTsKIAkJdHJ5IChCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBGaWxlcy5uZXdCdWZmZXJlZFJlYWRlcihoZWxsby50b1BhdGgoKSwKIAkJCQlVVEZfOCkpIHsKIAkJCVN0cmluZyBjb250ZW50ID0gcmVhZGVyLnJlYWRMaW5lKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbERpZmZUb29sVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxEaWZmVG9vbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWViZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxEaWZmVG9vbFRlc3QuamF2YQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxLCBTaW1lb24gQW5kcmVldiA8c2ltZW9uLmRhbmFpbG92LmFuZHJlZXZAZ21haWwuY29tPiBhbmQgb3RoZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfRElGRlRPT0xfU0VDVElPTjsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQ01EOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9HVUlUT09MOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QQVRIOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QUk9NUFQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNUX0VYSVRfQ09ERTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbC5Cb29sZWFuVHJpU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGUuRmlsZUJhc2VkQ29uZmlnOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIFRlc3RpbmcgZXh0ZXJuYWwgZGlmZiB0b29scy4KKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGlmZlRvb2xUZXN0IGV4dGVuZHMgRXh0ZXJuYWxUb29sVGVzdENhc2UgeworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9vbE5hbWVzKCkgeworCQlEaWZmVG9vbHMgbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCQlTZXQ8U3RyaW5nPiBhY3R1YWxUb29sTmFtZXMgPSBtYW5hZ2VyLmdldFRvb2xOYW1lcygpOworCQlTZXQ8U3RyaW5nPiBleHBlY3RlZFRvb2xOYW1lcyA9IENvbGxlY3Rpb25zLmVtcHR5U2V0KCk7CisJCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IHNldCBvZiBleHRlcm5hbCBkaWZmIHRvb2wgbmFtZXMiLAorCQkJCWV4cGVjdGVkVG9vbE5hbWVzLCBhY3R1YWxUb29sTmFtZXMpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEFsbFRvb2xzKCkgeworCQlEaWZmVG9vbHMgbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCQlTZXQ8U3RyaW5nPiBhY3R1YWxUb29sTmFtZXMgPSBtYW5hZ2VyLmdldEF2YWlsYWJsZVRvb2xzKCkua2V5U2V0KCk7CisJCVNldDxTdHJpbmc+IGV4cGVjdGVkVG9vbE5hbWVzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOworCQlDb21tYW5kTGluZURpZmZUb29sW10gZGVmYXVsdFRvb2xzID0gQ29tbWFuZExpbmVEaWZmVG9vbC52YWx1ZXMoKTsKKwkJZm9yIChDb21tYW5kTGluZURpZmZUb29sIGRlZmF1bHRUb29sIDogZGVmYXVsdFRvb2xzKSB7CisJCQlTdHJpbmcgdG9vbE5hbWUgPSBkZWZhdWx0VG9vbC5uYW1lKCk7CisJCQlleHBlY3RlZFRvb2xOYW1lcy5hZGQodG9vbE5hbWUpOworCQl9CisJCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IHNldCBvZiBleHRlcm5hbCBkaWZmIHRvb2xzIiwgZXhwZWN0ZWRUb29sTmFtZXMsCisJCQkJYWN0dWFsVG9vbE5hbWVzKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZVByZWRlZmluZWRUb29sUGF0aCgpIHsKKwkJU3RyaW5nIHRvb2xOYW1lID0gQ29tbWFuZExpbmVEaWZmVG9vbC5ndWlmZnkubmFtZSgpOworCQlTdHJpbmcgY3VzdG9tVG9vbFBhdGggPSAiL3Vzci9iaW4vZWNobyI7CisKKwkJRmlsZUJhc2VkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQljb25maWcuc2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCB0b29sTmFtZSwgQ09ORklHX0tFWV9DTUQsCisJCQkJImVjaG8iKTsKKwkJY29uZmlnLnNldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgdG9vbE5hbWUsIENPTkZJR19LRVlfUEFUSCwKKwkJCQljdXN0b21Ub29sUGF0aCk7CisKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKwkJTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gdG9vbHMgPSBtYW5hZ2VyLmdldFVzZXJEZWZpbmVkVG9vbHMoKTsKKwkJRXh0ZXJuYWxEaWZmVG9vbCBkaWZmVG9vbCA9IHRvb2xzLmdldCh0b29sTmFtZSk7CisJCWFzc2VydE5vdE51bGwoIkV4cGVjdGVkIHRvb2wgXCIiICsgdG9vbE5hbWUgKyAiXCIgdG8gYmUgdXNlciBkZWZpbmVkIiwKKwkJCQlkaWZmVG9vbCk7CisKKwkJU3RyaW5nIHRvb2xQYXRoID0gZGlmZlRvb2wuZ2V0UGF0aCgpOworCQlhc3NlcnRFcXVhbHMoIkV4cGVjdGVkIGV4dGVybmFsIGRpZmYgdG9vbCB0byBoYXZlIGFuIG92ZXJyaWRlbiBwYXRoIiwKKwkJCQljdXN0b21Ub29sUGF0aCwgdG9vbFBhdGgpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFVzZXJEZWZpbmVkVG9vbHMoKSB7CisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJU3RyaW5nIGN1c3RvbVRvb2xuYW1lID0gImN1c3RvbVRvb2wiOworCQljb25maWcuc2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCBjdXN0b21Ub29sbmFtZSwKKwkJCQlDT05GSUdfS0VZX0NNRCwgImVjaG8iKTsKKwkJY29uZmlnLnNldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgY3VzdG9tVG9vbG5hbWUsCisJCQkJQ09ORklHX0tFWV9QQVRILCAiL3Vzci9iaW4vZWNobyIpOworCQljb25maWcuc2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCBjdXN0b21Ub29sbmFtZSwKKwkJCQlDT05GSUdfS0VZX1BST01QVCwgIi0tbm8tcHJvbXB0Iik7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIGN1c3RvbVRvb2xuYW1lLAorCQkJCUNPTkZJR19LRVlfR1VJVE9PTCwgIi0tbm8tZ3VpIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIGN1c3RvbVRvb2xuYW1lLAorCQkJCUNPTkZJR19LRVlfVFJVU1RfRVhJVF9DT0RFLCAiLS1uby10cnVzdC1leGl0LWNvZGUiKTsKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKwkJU2V0PFN0cmluZz4gYWN0dWFsVG9vbE5hbWVzID0gbWFuYWdlci5nZXRVc2VyRGVmaW5lZFRvb2xzKCkua2V5U2V0KCk7CisJCVNldDxTdHJpbmc+IGV4cGVjdGVkVG9vbE5hbWVzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOworCQlleHBlY3RlZFRvb2xOYW1lcy5hZGQoY3VzdG9tVG9vbG5hbWUpOworCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBzZXQgb2YgZXh0ZXJuYWwgZGlmZiB0b29scyIsIGV4cGVjdGVkVG9vbE5hbWVzLAorCQkJCWFjdHVhbFRvb2xOYW1lcyk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Tm90QXZhaWxhYmxlVG9vbHMoKSB7CisJCURpZmZUb29scyBtYW5hZ2VyID0gbmV3IERpZmZUb29scyhkYik7CisJCVNldDxTdHJpbmc+IGFjdHVhbFRvb2xOYW1lcyA9IG1hbmFnZXIuZ2V0Tm90QXZhaWxhYmxlVG9vbHMoKS5rZXlTZXQoKTsKKwkJU2V0PFN0cmluZz4gZXhwZWN0ZWRUb29sTmFtZXMgPSBDb2xsZWN0aW9ucy5lbXB0eVNldCgpOworCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBzZXQgb2Ygbm90IGF2YWlsYWJsZSBleHRlcm5hbCBkaWZmIHRvb2xzIiwKKwkJCQlleHBlY3RlZFRvb2xOYW1lcywgYWN0dWFsVG9vbE5hbWVzKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb21wYXJlKCkgeworCQlEaWZmVG9vbHMgbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCisJCVN0cmluZyBuZXdQYXRoID0gIiI7CisJCVN0cmluZyBvbGRQYXRoID0gIiI7CisJCVN0cmluZyBuZXdJZCA9ICIiOworCQlTdHJpbmcgb2xkSWQgPSAiIjsKKwkJU3RyaW5nIHRvb2xOYW1lID0gIiI7CisJCUJvb2xlYW5UcmlTdGF0ZSBwcm9tcHQgPSBCb29sZWFuVHJpU3RhdGUuVU5TRVQ7CisJCUJvb2xlYW5UcmlTdGF0ZSBndWkgPSBCb29sZWFuVHJpU3RhdGUuVU5TRVQ7CisJCUJvb2xlYW5UcmlTdGF0ZSB0cnVzdEV4aXRDb2RlID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCisJCWludCBleHBlY3RlZENvbXBhcmVSZXN1bHQgPSAwOworCQlpbnQgY29tcGFyZVJlc3VsdCA9IG1hbmFnZXIuY29tcGFyZShuZXdQYXRoLCBvbGRQYXRoLCBuZXdJZCwgb2xkSWQsCisJCQkJdG9vbE5hbWUsIHByb21wdCwgZ3VpLCB0cnVzdEV4aXRDb2RlKTsKKwkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgY29tcGFyZSByZXN1bHQgZm9yIGV4dGVybmFsIGRpZmYgdG9vbCIsCisJCQkJZXhwZWN0ZWRDb21wYXJlUmVzdWx0LCBjb21wYXJlUmVzdWx0KTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0VG9vbCgpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlQmFzZWRDb25maWcgY29uZmlnID0gZGIuZ2V0Q29uZmlnKCk7CisJCS8vIHRoZSBkZWZhdWx0IGRpZmYgdG9vbCBpcyBjb25maWd1cmVkIHdpdGhvdXQgYSBzdWJzZWN0aW9uCisJCVN0cmluZyBzdWJzZWN0aW9uID0gbnVsbDsKKwkJY29uZmlnLnNldFN0cmluZygiZGlmZiIsIHN1YnNlY3Rpb24sICJ0b29sIiwgImN1c3RvbVRvb2wiKTsKKworCQlEaWZmVG9vbHMgbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCQlCb29sZWFuVHJpU3RhdGUgZ3VpID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCQlTdHJpbmcgZGVmYXVsdFRvb2xOYW1lID0gbWFuYWdlci5nZXREZWZhdWx0VG9vbE5hbWUoZ3VpKTsKKwkJYXNzZXJ0RXF1YWxzKAorCQkJCSJFeHBlY3RlZCBjb25maWd1cmVkIGRpZmZ0b29sIHRvIGJlIHRoZSBkZWZhdWx0IGV4dGVybmFsIGRpZmYgdG9vbCIsCisJCQkJIm15X2RlZmF1bHRfdG9vbG5hbWUiLCBkZWZhdWx0VG9vbE5hbWUpOworCisJCWd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCQlTdHJpbmcgZGVmYXVsdEd1aVRvb2xOYW1lID0gbWFuYWdlci5nZXREZWZhdWx0VG9vbE5hbWUoZ3VpKTsKKwkJYXNzZXJ0RXF1YWxzKAorCQkJCSJFeHBlY3RlZCBjb25maWd1cmVkIGRpZmZ0b29sIHRvIGJlIHRoZSBkZWZhdWx0IGV4dGVybmFsIGRpZmYgdG9vbCIsCisJCQkJIm15X2d1aV90b29sIiwgZGVmYXVsdEd1aVRvb2xOYW1lKTsKKworCQljb25maWcuc2V0U3RyaW5nKCJkaWZmIiwgc3Vic2VjdGlvbiwgImd1aXRvb2wiLCAiY3VzdG9tR3VpVG9vbCIpOworCQltYW5hZ2VyID0gbmV3IERpZmZUb29scyhkYik7CisJCWRlZmF1bHRHdWlUb29sTmFtZSA9IG1hbmFnZXIuZ2V0RGVmYXVsdFRvb2xOYW1lKGd1aSk7CisJCWFzc2VydEVxdWFscygKKwkJCQkiRXhwZWN0ZWQgY29uZmlndXJlZCBkaWZmdG9vbCB0byBiZSB0aGUgZGVmYXVsdCBleHRlcm5hbCBkaWZmIGd1aXRvb2wiLAorCQkJCSJteV9ndWlfdG9vbCIsIGRlZmF1bHRHdWlUb29sTmFtZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxUb29sVGVzdENhc2UuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsVG9vbFRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjMTI5NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsVG9vbFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxLCBTaW1lb24gQW5kcmVldiA8c2ltZW9uLmRhbmFpbG92LmFuZHJlZXZAZ21haWwuY29tPiBhbmQgb3RoZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTX1BPU0lYOworaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKK2ltcG9ydCBvcmcuanVuaXQuQXNzdW1lOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CisKKy8qKgorICogQmFzZSB0ZXN0IGNhc2UgZm9yIGV4dGVybmFsIG1lcmdlIGFuZCBkaWZmIHRvb2wgdGVzdHMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBFeHRlcm5hbFRvb2xUZXN0Q2FzZSBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NPTlRFTlQgPSAibGluZTEiOworCisJcHJvdGVjdGVkIEZpbGUgbG9jYWxGaWxlOworCisJcHJvdGVjdGVkIEZpbGUgcmVtb3RlRmlsZTsKKworCXByb3RlY3RlZCBGaWxlIG1lcmdlZEZpbGU7CisKKwlwcm90ZWN0ZWQgRmlsZSBiYXNlRmlsZTsKKworCXByb3RlY3RlZCBGaWxlIGNvbW1hbmRSZXN1bHQ7CisKKwlAQmVmb3JlCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKworCQlsb2NhbEZpbGUgPSB3cml0ZVRyYXNoRmlsZSgibG9jYWxGaWxlLnR4dCIsIERFRkFVTFRfQ09OVEVOVCArICJcbiIpOworCQlsb2NhbEZpbGUuZGVsZXRlT25FeGl0KCk7CisJCXJlbW90ZUZpbGUgPSB3cml0ZVRyYXNoRmlsZSgicmVtb3RlRmlsZS50eHQiLCBERUZBVUxUX0NPTlRFTlQgKyAiXG4iKTsKKwkJcmVtb3RlRmlsZS5kZWxldGVPbkV4aXQoKTsKKwkJbWVyZ2VkRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJtZXJnZWRGaWxlLnR4dCIsICIiKTsKKwkJbWVyZ2VkRmlsZS5kZWxldGVPbkV4aXQoKTsKKwkJYmFzZUZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYmFzZUZpbGUudHh0IiwgIiIpOworCQliYXNlRmlsZS5kZWxldGVPbkV4aXQoKTsKKwkJY29tbWFuZFJlc3VsdCA9IHdyaXRlVHJhc2hGaWxlKCJjb21tYW5kUmVzdWx0LnR4dCIsICIiKTsKKwkJY29tbWFuZFJlc3VsdC5kZWxldGVPbkV4aXQoKTsKKwl9CisKKwlAQWZ0ZXIKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlcy5kZWxldGUobG9jYWxGaWxlLnRvUGF0aCgpKTsKKwkJRmlsZXMuZGVsZXRlKHJlbW90ZUZpbGUudG9QYXRoKCkpOworCQlGaWxlcy5kZWxldGUobWVyZ2VkRmlsZS50b1BhdGgoKSk7CisJCUZpbGVzLmRlbGV0ZShiYXNlRmlsZS50b1BhdGgoKSk7CisJCUZpbGVzLmRlbGV0ZShjb21tYW5kUmVzdWx0LnRvUGF0aCgpKTsKKworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFzc3VtZVBvc2l4UGxhdGZvcm0oKSB7CisJCUFzc3VtZS5hc3N1bWVUcnVlKAorCQkJCSJUaGlzIHRlc3QgY2FuIHJ1biBvbmx5IGluIExpbnV4IHRlc3RzIiwKKwkJCQlGUy5ERVRFQ1RFRCBpbnN0YW5jZW9mIEZTX1BPU0lYKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlVGVzdC5qYXZhCmluZGV4IDRmMTMxNDAuLmFiNTg4Y2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlVGVzdC5qYXZhCkBAIC0xNSwxNiArMTUsMTkgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAoraW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uTG9uZ1N0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmcy5EZnNCbG9ja0NhY2hlQ29uZmlnLkluZGV4RXZlbnRDb25zdW1lcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjay5QYWNrRXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuVGVzdFJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5UZXN0Um5nOwpAQCAtMTU0LDYgKzE1NywxMTkgQEAgcHVibGljIHZvaWQgaGFzQ2FjaGVIb3RNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCBoYXNJbmRleEV2ZW50Q29uc3VtZXJPbmx5TG9hZGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUF0b21pY0ludGVnZXIgbG9hZGVkID0gbmV3IEF0b21pY0ludGVnZXIoKTsKKwkJSW5kZXhFdmVudENvbnN1bWVyIGluZGV4RXZlbnRDb25zdW1lciA9IG5ldyBJbmRleEV2ZW50Q29uc3VtZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIGFjY2VwdFJlcXVlc3RlZEV2ZW50KGludCBwYWNrRXh0UG9zLCBib29sZWFuIGNhY2hlSGl0LAorCQkJCQlsb25nIGxvYWRNaWNyb3MsIGxvbmcgYnl0ZXMsCisJCQkJCUR1cmF0aW9uIGxhc3RFdmljdGlvbkR1cmF0aW9uKSB7CisJCQkJYXNzZXJ0RXF1YWxzKFBhY2tFeHQuSU5ERVguZ2V0UG9zaXRpb24oKSwgcGFja0V4dFBvcyk7CisJCQkJYXNzZXJ0VHJ1ZShjYWNoZUhpdCk7CisJCQkJYXNzZXJ0VHJ1ZShsYXN0RXZpY3Rpb25EdXJhdGlvbi5pc1plcm8oKSk7CisJCQkJbG9hZGVkLmluY3JlbWVudEFuZEdldCgpOworCQkJfQorCQl9OworCisJCURmc0Jsb2NrQ2FjaGUucmVjb25maWd1cmUobmV3IERmc0Jsb2NrQ2FjaGVDb25maWcoKS5zZXRCbG9ja1NpemUoNTEyKQorCQkJCS5zZXRCbG9ja0xpbWl0KDUxMiAqIDQpCisJCQkJLnNldEluZGV4RXZlbnRDb25zdW1lcihpbmRleEV2ZW50Q29uc3VtZXIpKTsKKwkJY2FjaGUgPSBEZnNCbG9ja0NhY2hlLmdldEluc3RhbmNlKCk7CisKKwkJRGZzUmVwb3NpdG9yeURlc2NyaXB0aW9uIHJlcG8gPSBuZXcgRGZzUmVwb3NpdG9yeURlc2NyaXB0aW9uKCJ0ZXN0Iik7CisJCUluTWVtb3J5UmVwb3NpdG9yeSByMSA9IG5ldyBJbk1lbW9yeVJlcG9zaXRvcnkocmVwbyk7CisJCWJ5dGVbXSBjb250ZW50ID0gcm5nLm5leHRCeXRlcyg0MjQyNDIpOworCQlPYmplY3RJZCBpZDsKKwkJdHJ5IChPYmplY3RJbnNlcnRlciBpbnMgPSByMS5uZXdPYmplY3RJbnNlcnRlcigpKSB7CisJCQlpZCA9IGlucy5pbnNlcnQoT0JKX0JMT0IsIGNvbnRlbnQpOworCQkJaW5zLmZsdXNoKCk7CisJCX0KKworCQl0cnkgKE9iamVjdFJlYWRlciByZHIgPSByMS5uZXdPYmplY3RSZWFkZXIoKSkgeworCQkJYnl0ZVtdIGFjdHVhbCA9IHJkci5vcGVuKGlkLCBPQkpfQkxPQikuZ2V0Qnl0ZXMoKTsKKwkJCWFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhjb250ZW50LCBhY3R1YWwpKTsKKwkJfQorCQkvLyBBbGwgY2FjaGUgZW50cmllcyBhcmUgaG90IGFuZCBjYWNoZSBpcyBhdCBjYXBhY2l0eS4KKwkJYXNzZXJ0VHJ1ZShMb25nU3RyZWFtLm9mKGNhY2hlLmdldEhpdENvdW50KCkpLnN1bSgpID4gMCk7CisJCWFzc2VydEVxdWFscyg5OSwgY2FjaGUuZ2V0RmlsbFBlcmNlbnRhZ2UoKSk7CisKKwkJSW5NZW1vcnlSZXBvc2l0b3J5IHIyID0gbmV3IEluTWVtb3J5UmVwb3NpdG9yeShyZXBvKTsKKwkJY29udGVudCA9IHJuZy5uZXh0Qnl0ZXMoNDI0MjQyKTsKKwkJdHJ5IChPYmplY3RJbnNlcnRlciBpbnMgPSByMi5uZXdPYmplY3RJbnNlcnRlcigpKSB7CisJCQlpbnMuaW5zZXJ0KE9CSl9CTE9CLCBjb250ZW50KTsKKwkJCWlucy5mbHVzaCgpOworCQl9CisJCWFzc2VydFRydWUoY2FjaGUuZ2V0RXZpY3Rpb25zKClbUGFja0V4dC5QQUNLLmdldFBvc2l0aW9uKCldID4gMCk7CisJCWFzc2VydEVxdWFscygxLCBjYWNoZS5nZXRFdmljdGlvbnMoKVtQYWNrRXh0LklOREVYLmdldFBvc2l0aW9uKCldKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGxvYWRlZC5nZXQoKSk7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGhhc0luZGV4RXZlbnRDb25zdW1lckxvYWRlZEFuZEV2aWN0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQXRvbWljSW50ZWdlciBsb2FkZWQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworCQlBdG9taWNJbnRlZ2VyIGV2aWN0ZWQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworCQlJbmRleEV2ZW50Q29uc3VtZXIgaW5kZXhFdmVudENvbnN1bWVyID0gbmV3IEluZGV4RXZlbnRDb25zdW1lcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgYWNjZXB0UmVxdWVzdGVkRXZlbnQoaW50IHBhY2tFeHRQb3MsIGJvb2xlYW4gY2FjaGVIaXQsCisJCQkJCWxvbmcgbG9hZE1pY3JvcywgbG9uZyBieXRlcywKKwkJCQkJRHVyYXRpb24gbGFzdEV2aWN0aW9uRHVyYXRpb24pIHsKKwkJCQlhc3NlcnRFcXVhbHMoUGFja0V4dC5JTkRFWC5nZXRQb3NpdGlvbigpLCBwYWNrRXh0UG9zKTsKKwkJCQlhc3NlcnRUcnVlKGNhY2hlSGl0KTsKKwkJCQlhc3NlcnRUcnVlKGxhc3RFdmljdGlvbkR1cmF0aW9uLmlzWmVybygpKTsKKwkJCQlsb2FkZWQuaW5jcmVtZW50QW5kR2V0KCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgYWNjZXB0RXZpY3RlZEV2ZW50KGludCBwYWNrRXh0UG9zLCBsb25nIGJ5dGVzLAorCQkJCQlpbnQgdG90YWxDYWNoZUhpdENvdW50LCBEdXJhdGlvbiBsYXN0RXZpY3Rpb25EdXJhdGlvbikgeworCQkJCWFzc2VydEVxdWFscyhQYWNrRXh0LklOREVYLmdldFBvc2l0aW9uKCksIHBhY2tFeHRQb3MpOworCQkJCWFzc2VydFRydWUodG90YWxDYWNoZUhpdENvdW50ID4gMCk7CisJCQkJYXNzZXJ0VHJ1ZShsYXN0RXZpY3Rpb25EdXJhdGlvbi5pc1plcm8oKSk7CisJCQkJZXZpY3RlZC5pbmNyZW1lbnRBbmRHZXQoKTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBzaG91bGRSZXBvcnRFdmljdGVkRXZlbnQoKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX07CisKKwkJRGZzQmxvY2tDYWNoZS5yZWNvbmZpZ3VyZShuZXcgRGZzQmxvY2tDYWNoZUNvbmZpZygpLnNldEJsb2NrU2l6ZSg1MTIpCisJCQkJLnNldEJsb2NrTGltaXQoNTEyICogNCkKKwkJCQkuc2V0SW5kZXhFdmVudENvbnN1bWVyKGluZGV4RXZlbnRDb25zdW1lcikpOworCQljYWNoZSA9IERmc0Jsb2NrQ2FjaGUuZ2V0SW5zdGFuY2UoKTsKKworCQlEZnNSZXBvc2l0b3J5RGVzY3JpcHRpb24gcmVwbyA9IG5ldyBEZnNSZXBvc2l0b3J5RGVzY3JpcHRpb24oInRlc3QiKTsKKwkJSW5NZW1vcnlSZXBvc2l0b3J5IHIxID0gbmV3IEluTWVtb3J5UmVwb3NpdG9yeShyZXBvKTsKKwkJYnl0ZVtdIGNvbnRlbnQgPSBybmcubmV4dEJ5dGVzKDQyNDI0Mik7CisJCU9iamVjdElkIGlkOworCQl0cnkgKE9iamVjdEluc2VydGVyIGlucyA9IHIxLm5ld09iamVjdEluc2VydGVyKCkpIHsKKwkJCWlkID0gaW5zLmluc2VydChPQkpfQkxPQiwgY29udGVudCk7CisJCQlpbnMuZmx1c2goKTsKKwkJfQorCisJCXRyeSAoT2JqZWN0UmVhZGVyIHJkciA9IHIxLm5ld09iamVjdFJlYWRlcigpKSB7CisJCQlieXRlW10gYWN0dWFsID0gcmRyLm9wZW4oaWQsIE9CSl9CTE9CKS5nZXRCeXRlcygpOworCQkJYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGNvbnRlbnQsIGFjdHVhbCkpOworCQl9CisJCS8vIEFsbCBjYWNoZSBlbnRyaWVzIGFyZSBob3QgYW5kIGNhY2hlIGlzIGF0IGNhcGFjaXR5LgorCQlhc3NlcnRUcnVlKExvbmdTdHJlYW0ub2YoY2FjaGUuZ2V0SGl0Q291bnQoKSkuc3VtKCkgPiAwKTsKKwkJYXNzZXJ0RXF1YWxzKDk5LCBjYWNoZS5nZXRGaWxsUGVyY2VudGFnZSgpKTsKKworCQlJbk1lbW9yeVJlcG9zaXRvcnkgcjIgPSBuZXcgSW5NZW1vcnlSZXBvc2l0b3J5KHJlcG8pOworCQljb250ZW50ID0gcm5nLm5leHRCeXRlcyg0MjQyNDIpOworCQl0cnkgKE9iamVjdEluc2VydGVyIGlucyA9IHIyLm5ld09iamVjdEluc2VydGVyKCkpIHsKKwkJCWlucy5pbnNlcnQoT0JKX0JMT0IsIGNvbnRlbnQpOworCQkJaW5zLmZsdXNoKCk7CisJCX0KKwkJYXNzZXJ0VHJ1ZShjYWNoZS5nZXRFdmljdGlvbnMoKVtQYWNrRXh0LlBBQ0suZ2V0UG9zaXRpb24oKV0gPiAwKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGNhY2hlLmdldEV2aWN0aW9ucygpW1BhY2tFeHQuSU5ERVguZ2V0UG9zaXRpb24oKV0pOworCQlhc3NlcnRFcXVhbHMoMSwgbG9hZGVkLmdldCgpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGV2aWN0ZWQuZ2V0KCkpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgbm9Db25jdXJyZW5jeVNlcmlhbGl6ZWRSZWFkc19vbmVSZXBvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUluTWVtb3J5UmVwb3NpdG9yeSByMSA9IGNyZWF0ZVJlcG9XaXRoQml0bWFwKCJ0ZXN0Iik7CiAJCS8vIFJlc2V0IGNhY2hlIHdpdGggY29uY3VycmVuY3kgTGV2ZWwgYXQgMSBpLmUuIG5vIGNvbmN1cnJlbmN5LgpAQCAtMjY3LDcgKzM4Myw2IEBAIHB1YmxpYyB2b2lkIGxvd0NvbmN1cnJlbmN5UGFyYWxsZWxSZWFkc190d29SZXBvc0FuZEluZGV4KCkKIAkJYXNzZXJ0RXF1YWxzKDIsIGNhY2hlLmdldE1pc3NDb3VudCgpWzBdKTsKIAl9CiAKLQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQogCUBUZXN0CiAJcHVibGljIHZvaWQgaGlnaENvbmN1cnJlbmN5UGFyYWxsZWxSZWFkc19vbmVSZXBvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUluTWVtb3J5UmVwb3NpdG9yeSByMSA9IGNyZWF0ZVJlcG9XaXRoQml0bWFwKCJ0ZXN0Iik7CkBAIC0yOTAsNiArNDA1LDMwIEBAIHB1YmxpYyB2b2lkIGhpZ2hDb25jdXJyZW5jeVBhcmFsbGVsUmVhZHNfb25lUmVwbygpIHRocm93cyBFeGNlcHRpb24gewogCQlhc3NlcnRFcXVhbHMoMSwgY2FjaGUuZ2V0TWlzc0NvdW50KClbMF0pOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgaGlnaENvbmN1cnJlbmN5UGFyYWxsZWxSZWFkc19vbmVSZXBvUGFyYWxsZWxSZXZlcnNlSW5kZXgoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUluTWVtb3J5UmVwb3NpdG9yeSByMSA9IGNyZWF0ZVJlcG9XaXRoQml0bWFwKCJ0ZXN0Iik7CisJCXJlc2V0Q2FjaGUoKTsKKworCQlEZnNSZWFkZXIgcmVhZGVyID0gKERmc1JlYWRlcikgcjEubmV3T2JqZWN0UmVhZGVyKCk7CisJCXJlYWRlci5nZXRPcHRpb25zKCkuc2V0TG9hZFJldkluZGV4SW5QYXJhbGxlbCh0cnVlKTsKKwkJZm9yIChEZnNQYWNrRmlsZSBwYWNrIDogcjEuZ2V0T2JqZWN0RGF0YWJhc2UoKS5nZXRQYWNrcygpKSB7CisJCQkvLyBPbmx5IGxvYWQgbm9uLWdhcmJhZ2UgcGFjayB3aXRoIGJpdG1hcC4KKwkJCWlmIChwYWNrLmlzR2FyYmFnZSgpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhc3luY1J1bigoKSAtPiBwYWNrLmdldEJpdG1hcEluZGV4KHJlYWRlcikpOworCQkJYXN5bmNSdW4oKCkgLT4gcGFjay5nZXRQYWNrSW5kZXgocmVhZGVyKSk7CisJCQlhc3luY1J1bigoKSAtPiBwYWNrLmdldEJpdG1hcEluZGV4KHJlYWRlcikpOworCQl9CisJCXdhaXRGb3JFeGVjdXRvclBvb2xUZXJtaW5hdGlvbigpOworCisJCWFzc2VydEVxdWFscygxLCBjYWNoZS5nZXRNaXNzQ291bnQoKVtQYWNrRXh0LkJJVE1BUF9JTkRFWC5vcmRpbmFsKCldKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGNhY2hlLmdldE1pc3NDb3VudCgpW1BhY2tFeHQuSU5ERVgub3JkaW5hbCgpXSk7CisJCWFzc2VydEVxdWFscygxLCBjYWNoZS5nZXRNaXNzQ291bnQoKVswXSk7CisJfQorCiAJcHJpdmF0ZSB2b2lkIHJlc2V0Q2FjaGUoKSB7CiAJCXJlc2V0Q2FjaGUoMzIpOwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQmF0Y2hSZWZVcGRhdGVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0JhdGNoUmVmVXBkYXRlVGVzdC5qYXZhCmluZGV4IDYzNTdhMGIuLmRhZjQzODIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQmF0Y2hSZWZVcGRhdGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9CYXRjaFJlZlVwZGF0ZVRlc3QuamF2YQpAQCAtNDIsNiArNDIsOCBAQAogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jazsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uUHJlZGljYXRlOworaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50cy5MaXN0ZW5lckhhbmRsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50cy5SZWZzQ2hhbmdlZExpc3RlbmVyOwpAQCAtMTI3LDYgKzEyOSw3IEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCX0KIAogCQlkaXNrUmVwbyA9IGZpbGVSZXBvOworCQlhZGRSZXBvVG9DbG9zZShkaXNrUmVwbyk7CiAJCXNldExvZ0FsbFJlZlVwZGF0ZXModHJ1ZSk7CiAKIAkJaWYgKCF1c2VSZWZ0YWJsZSkgewpAQCAtMTE5MCw3ICsxMTkzLDggQEAgcHJpdmF0ZSB2b2lkIGFzc2VydFJlZnMoT2JqZWN0Li4uIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCX0KIAogCQlNYXA8U3RyaW5nLCBSZWY+IHJlZnMgPSBkaXNrUmVwby5nZXRSZWZEYXRhYmFzZSgpCi0JCQkJLmdldFJlZnMoUmVmRGF0YWJhc2UuQUxMKTsKKwkJCQkuZ2V0UmVmc0J5UHJlZml4KFJlZkRhdGFiYXNlLkFMTCkuc3RyZWFtKCkKKwkJCQkuY29sbGVjdChDb2xsZWN0b3JzLnRvTWFwKFJlZjo6Z2V0TmFtZSwgRnVuY3Rpb24uaWRlbnRpdHkoKSkpOwogCQlSZWYgYWN0dWFsSGVhZCA9IHJlZnMucmVtb3ZlKENvbnN0YW50cy5IRUFEKTsKIAkJaWYgKGFjdHVhbEhlYWQgIT0gbnVsbCkgewogCQkJU3RyaW5nIGFjdHVhbExlYWZOYW1lID0gYWN0dWFsSGVhZC5nZXRMZWFmKCkuZ2V0TmFtZSgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFja1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlZnRhYmxlU3RhY2tUZXN0LmphdmEKaW5kZXggNmM3NGYwMC4uNmM3OTkyNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFja1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZWZ0YWJsZVN0YWNrVGVzdC5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzdW1lLmFzc3VtZUZhbHNlOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtMzIsMTAgKzMzLDEyIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWRSZWY7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN5c3RlbVJlYWRlcjsKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAorCiBwdWJsaWMgY2xhc3MgRmlsZVJlZnRhYmxlU3RhY2tUZXN0IHsKIAogCXByaXZhdGUgc3RhdGljIFJlZiBuZXdSZWYoU3RyaW5nIG5hbWUsIE9iamVjdElkIGlkKSB7CkBAIC0xMTUsOSArMTE4LDEyIEBAIHB1YmxpYyB2b2lkIHRlc3RDb21wYWN0aW9uMTAyNCgpIHRocm93cyBFeGNlcHRpb24gewogCQl0ZXN0Q29tcGFjdGlvbigxMDI0KTsKIAl9CiAKLQlAU3VwcHJlc3NXYXJuaW5ncyh7ICJyZXNvdXJjZSIsICJ1bnVzZWQiIH0pCisJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKIAlAVGVzdAogCXB1YmxpYyB2b2lkIG1pc3NpbmdSZWZ0YWJsZSgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBDYW4ndCBkZWxldGUgaW4tdXNlIGZpbGVzIG9uIFdpbmRvd3MuCisJCWFzc3VtZUZhbHNlKFN5c3RlbVJlYWRlci5nZXRJbnN0YW5jZSgpLmlzV2luZG93cygpKTsKKwogCQl0cnkgKEZpbGVSZWZ0YWJsZVN0YWNrIHN0YWNrID0gbmV3IEZpbGVSZWZ0YWJsZVN0YWNrKAogCQkJCW5ldyBGaWxlKHJlZnRhYmxlRGlyLCAicmVmcyIpLCByZWZ0YWJsZURpciwgbnVsbCwKIAkJCQkoKSAtPiBuZXcgQ29uZmlnKCkpKSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZXBvc2l0b3J5QnVpbGRlckFmdGVyT3BlbkNvbmZpZ1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlcG9zaXRvcnlCdWlsZGVyQWZ0ZXJPcGVuQ29uZmlnVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMGJkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZXBvc2l0b3J5QnVpbGRlckFmdGVyT3BlbkNvbmZpZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIzIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db3JlQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlN0b3JlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3lzdGVtUmVhZGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CisKK3B1YmxpYyBjbGFzcyBGaWxlUmVwb3NpdG9yeUJ1aWxkZXJBZnRlck9wZW5Db25maWdUZXN0IGV4dGVuZHMgRmlsZVJlcG9zaXRvcnlCdWlsZGVyVGVzdCB7CisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAQmVmb3JlCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJU3RvcmVkQ29uZmlnIHVzZXJDb25maWcgPSBTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5nZXRVc2VyQ29uZmlnKCk7CisJCXVzZXJDb25maWcuc2V0RW51bShDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9UUlVTVF9QQUNLRURfUkVGU19TVEFULAorCQkJCUNvcmVDb25maWcuVHJ1c3RQYWNrZWRSZWZzU3RhdC5BRlRFUl9PUEVOKTsKKwkJdXNlckNvbmZpZy5zYXZlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HY1Rlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQppbmRleCBiZmIyMzNmLi40OGY2ZTA2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCUBPdmVycmlkZQogCUBBZnRlcgogCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyLmNsb3NlKCk7CiAJCXN1cGVyLnRlYXJEb3duKCk7CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEKaW5kZXggMWZmMjI2NC4uM2ZlOGY1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrV3JpdGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja1dyaXRlclRlc3QuamF2YQpAQCAtNzIyLDYgKzcyMiw3IEBAIHB1YmxpYyB2b2lkIHRlc3RQYXJ0aWFsUGFja0ZpbGVzU2NhbldoZW5Eb2luZ1NlYXJjaEZvclJldXNlVGltZW91dENoZWNrKCkKIAkgKi8KIAlwcml2YXRlIEZpbGVSZXBvc2l0b3J5IHNldFVwUmVwb1dpdGhNdWx0aXBsZVBhY2tmaWxlcygpIHRocm93cyBFeGNlcHRpb24gewogCQlGaWxlUmVwb3NpdG9yeSBmaWxlUmVwb3NpdG9yeSA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGZpbGVSZXBvc2l0b3J5KTsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChmaWxlUmVwb3NpdG9yeSkpIHsKIAkJCS8vIENyZWF0ZXMgMiBvYmplY3RzIChDMSA9IGNvbW1pdCwgVDEgPSB0cmVlKQogCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkZpcnN0IGNvbW1pdCIpLmNhbGwoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5QWZ0ZXJPcGVuQ29uZmlnVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9SZWZEaXJlY3RvcnlBZnRlck9wZW5Db25maWdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzMDRlMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5QWZ0ZXJPcGVuQ29uZmlnVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TeXN0ZW1SZWFkZXI7CisKK3B1YmxpYyBjbGFzcyBSZWZEaXJlY3RvcnlBZnRlck9wZW5Db25maWdUZXN0IGV4dGVuZHMgUmVmRGlyZWN0b3J5VGVzdCB7CisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZEaXJlY3RvcnlTZXR1cCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdG9yZWRDb25maWcgdXNlckNvbmZpZyA9IFN5c3RlbVJlYWRlci5nZXRJbnN0YW5jZSgpLmdldFVzZXJDb25maWcoKTsKKwkJdXNlckNvbmZpZy5zZXRFbnVtKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNUX1BBQ0tFRF9SRUZTX1NUQVQsCisJCQkJQ29yZUNvbmZpZy5UcnVzdFBhY2tlZFJlZnNTdGF0LkFGVEVSX09QRU4pOworCQl1c2VyQ29uZmlnLnNhdmUoKTsKKwkJc3VwZXIucmVmRGlyZWN0b3J5U2V0dXAoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCmluZGV4IDM4YzU0NWUuLjRiODBmMTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCkBAIC03Miw3ICs3MiwxMCBAQCBwdWJsaWMgY2xhc3MgUmVmRGlyZWN0b3J5VGVzdCBleHRlbmRzIExvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZSB7CiAJQEJlZm9yZQogCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXN1cGVyLnNldFVwKCk7CisJCXJlZkRpcmVjdG9yeVNldHVwKCk7CisJfQogCisJcHVibGljIHZvaWQgcmVmRGlyZWN0b3J5U2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJZGlza1JlcG8gPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOwogCQlyZWZkaXIgPSAoUmVmRGlyZWN0b3J5KSBkaXNrUmVwby5nZXRSZWZEYXRhYmFzZSgpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9pby9DYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTdjMGIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9pby9DYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbVRlc3QuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgVGVuY2VudC4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pby5DYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbS5CWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8uTnVsbE91dHB1dFN0cmVhbTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2FuY2VsbGVkVGVzdE1vbml0b3IgaW1wbGVtZW50cyBQcm9ncmVzc01vbml0b3IgeworCisJCXByaXZhdGUgYm9vbGVhbiBjYW5jZWxsZWQgPSBmYWxzZTsKKworCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxsZWQoYm9vbGVhbiBjYW5jZWxsZWQpIHsKKwkJCXRoaXMuY2FuY2VsbGVkID0gY2FuY2VsbGVkOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KGludCB0b3RhbFRhc2tzKSB7CisJCQkvLyBub3QgaW1wbGVtZW50ZWQKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIHRpdGxlLCBpbnQgdG90YWxXb3JrKSB7CisJCQkvLyBub3QgaW1wbGVtZW50ZWQKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCB1cGRhdGUoaW50IGNvbXBsZXRlZCkgeworCQkJLy8gbm90IGltcGxlbWVudGVkCisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW5kVGFzaygpIHsKKwkJCS8vIG5vdCBpbXBsZW1lbnRlZAorCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgeworCQkJcmV0dXJuIGNhbmNlbGxlZDsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENhbmNlbEluUHJvY2VzcygpIHRocm93cyBFeGNlcHRpb24geworCQlDYW5jZWxsZWRUZXN0TW9uaXRvciBtID0gbmV3IENhbmNlbGxlZFRlc3RNb25pdG9yKCk7CisJCXRyeSAoQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtKAorCQkJCW0sIE51bGxPdXRwdXRTdHJlYW0uSU5TVEFOQ0UpKSB7CisJCQlieXRlW10gS0IgPSBuZXcgYnl0ZVsxMDI0XTsKKwkJCWludCB0cmlnZ2VyQ2FuY2VsV3JpdGVDbnQgPSBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLCisJCQkJCS8gS0IubGVuZ3RoOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmlnZ2VyQ2FuY2VsV3JpdGVDbnQgKyAxOyBpKyspIHsKKwkJCQlvdXQud3JpdGUoS0IpOworCQkJfQorCQkJYXNzZXJ0VHJ1ZShvdXQubGVuZ3RoKCkgPiBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLKTsKKwkJCW0uc2V0Q2FuY2VsbGVkKHRydWUpOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHRyaWdnZXJDYW5jZWxXcml0ZUNudCAtIDE7IGkrKykgeworCQkJCW91dC53cml0ZShLQik7CisJCQl9CisKKwkJCWxvbmcgbGFzdExlbmd0aCA9IG91dC5sZW5ndGgoKTsKKwkJCWFzc2VydFRocm93cyhJbnRlcnJ1cHRlZElPRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiB7CisJCQkJb3V0LndyaXRlKDEpOworCQkJfSk7CisJCQlhc3NlcnRFcXVhbHMobGFzdExlbmd0aCwgb3V0Lmxlbmd0aCgpKTsKKworCQkJYXNzZXJ0VGhyb3dzKEludGVycnVwdGVkSU9FeGNlcHRpb24uY2xhc3MsICgpIC0+IHsKKwkJCQlvdXQud3JpdGUobmV3IGJ5dGVbMV0pOworCQkJfSk7CisJCQlhc3NlcnRFcXVhbHMobGFzdExlbmd0aCwgb3V0Lmxlbmd0aCgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRyaWdnZXJDaGVja0FmdGVyU2luZ2xlQnl0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQ2FuY2VsbGVkVGVzdE1vbml0b3IgbSA9IG5ldyBDYW5jZWxsZWRUZXN0TW9uaXRvcigpOworCQl0cnkgKENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtIG91dCA9IG5ldyBDYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbSgKKwkJCQltLCBOdWxsT3V0cHV0U3RyZWFtLklOU1RBTkNFKSkgeworCisJCQlieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVtCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLICsgMV07CisJCQltLnNldENhbmNlbGxlZCh0cnVlKTsKKworCQkJYXNzZXJ0VGhyb3dzKEludGVycnVwdGVkSU9FeGNlcHRpb24uY2xhc3MsICgpIC0+IHsKKwkJCQlvdXQud3JpdGUoYnl0ZXMpOworCQkJfSk7CisJCQlhc3NlcnRFcXVhbHMoQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSywgb3V0Lmxlbmd0aCgpKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2gvT3BlblNzaENvbmZpZ0ZpbGVUZXN0LmphdmEKaW5kZXggMTE3NDFiNC4uZDA2NTI4MCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2gvT3BlblNzaENvbmZpZ0ZpbGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2gvT3BlblNzaENvbmZpZ0ZpbGVUZXN0LmphdmEKQEAgLTM2OSwyMCArMzY5LDIxIEBAIHB1YmxpYyB2b2lkIHRlc3RIb3N0Q2FzZUluc2Vuc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RMaXN0VmFsdWVTaW5nbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IG9yY3pcblVzZXJLbm93bkhvc3RzRmlsZSAvZm9vL2JhclxuIik7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5Vc2VyS25vd25Ib3N0c0ZpbGUgfi9mb28vYmFyXG4iKTsKIAkJZmluYWwgSG9zdENvbmZpZyBjID0gbG9va3VwKCJvcmN6Iik7CiAJCWFzc2VydE5vdE51bGwoYyk7Ci0JCWFzc2VydEVxdWFscygiL2Zvby9iYXIiLCBjLmdldFZhbHVlKCJVc2VyS25vd25Ib3N0c0ZpbGUiKSk7CisJCWFzc2VydEVxdWFscyhuZXcgRmlsZShob21lLCAiZm9vL2JhciIpLmdldFBhdGgoKSwKKwkJCQljLmdldFZhbHVlKCJVc2VyS25vd25Ib3N0c0ZpbGUiKSk7CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0TGlzdFZhbHVlTXVsdGlwbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVGlsZGUgZXhwYW5zaW9uIG9jY3VycyB3aXRoaW4gdGhlIHBhcnNlcgotCQljb25maWcoIkhvc3Qgb3JjelxuVXNlcktub3duSG9zdHNGaWxlIFwifi9mb28vYmEgelwiIC9mb28vYmFyIFxuIik7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5Vc2VyS25vd25Ib3N0c0ZpbGUgXCJ+L2Zvby9iYSB6XCIgfi9mb28vYmFyIFxuIik7CiAJCWZpbmFsIEhvc3RDb25maWcgYyA9IGxvb2t1cCgib3JjeiIpOwogCQlhc3NlcnROb3ROdWxsKGMpOwogCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgT2JqZWN0W10geyBuZXcgRmlsZShob21lLCAiZm9vL2JhIHoiKS5nZXRQYXRoKCksCi0JCQkJIi9mb28vYmFyIiB9LAorCQkJCW5ldyBGaWxlKGhvbWUsICJmb28vYmFyIikuZ2V0UGF0aCgpIH0sCiAJCQkJYy5nZXRWYWx1ZXMoIlVzZXJLbm93bkhvc3RzRmlsZSIpLnRvQXJyYXkoKSk7CiAJfQogCkBAIC00MDMsMjIgKzQwNCwyMyBAQCBwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0ZWRMb29rdXBzV2l0aE1vZGlmaWNhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0SWRlbnRpdHlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWNvbmZpZygiSG9zdCBvcmN6XG5JZGVudGl0eUZpbGUgXCJ+L2Zvby9iYSB6XCJcbklkZW50aXR5RmlsZSAvZm9vL2JhciIpOworCQljb25maWcoIkhvc3Qgb3JjelxuSWRlbnRpdHlGaWxlIFwifi9mb28vYmEgelwiXG5JZGVudGl0eUZpbGUgfi9mb28vYmFyIik7CiAJCWZpbmFsIEhvc3RDb25maWcgaCA9IGxvb2t1cCgib3JjeiIpOwogCQlhc3NlcnROb3ROdWxsKGgpOwogCQkvLyBEb2VzIHRpbGRlIHJlcGxhY2VtZW50CiAJCWFzc2VydEFycmF5RXF1YWxzKG5ldyBPYmplY3RbXSB7IG5ldyBGaWxlKGhvbWUsICJmb28vYmEgeiIpLmdldFBhdGgoKSwKLQkJCQkiL2Zvby9iYXIiIH0sCisJCQkJbmV3IEZpbGUoaG9tZSwgImZvby9iYXIiKS5nZXRQYXRoKCkgfSwKIAkJCQloLmdldFZhbHVlcyhTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkudG9BcnJheSgpKTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RNdWx0aUlkZW50aXR5RmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQljb25maWcoIklkZW50aXR5RmlsZSBcIn4vZm9vL2JhIHpcIlxuSG9zdCBvcmN6XG5JZGVudGl0eUZpbGUgL2Zvby9iYXJcbkhPU1QgKlxuSWRlbnRpdHlGaWxlIC9mb28vYmF6Iik7CisJCWNvbmZpZygiSWRlbnRpdHlGaWxlIFwifi9mb28vYmEgelwiXG5Ib3N0IG9yY3pcbklkZW50aXR5RmlsZSB+L2Zvby9iYXJcbkhPU1QgKlxuSWRlbnRpdHlGaWxlIH4vZm9vL2JheiIpOwogCQlmaW5hbCBIb3N0Q29uZmlnIGggPSBsb29rdXAoIm9yY3oiKTsKIAkJYXNzZXJ0Tm90TnVsbChoKTsKIAkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgbmV3IEZpbGUoaG9tZSwgImZvby9iYSB6IikuZ2V0UGF0aCgpLAotCQkJCSIvZm9vL2JhciIsICIvZm9vL2JheiIgfSwKKwkJCQluZXcgRmlsZShob21lLCAiZm9vL2JhciIpLmdldFBhdGgoKSwKKwkJCQluZXcgRmlsZShob21lLCAiZm9vL2JheiIpLmdldFBhdGgoKSB9LAogCQkJCWguZ2V0VmFsdWVzKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKS50b0FycmF5KCkpOwogCX0KIApAQCAtNDM0LDIzICs0MzYsMjMgQEAgcHVibGljIHZvaWQgdGVzdE5lZ2F0ZWRQYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RQYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWNvbmZpZygiSG9zdCByZXBvLm9yLmN6XG5JZGVudGl0eUZpbGUgfi9mb28vYmFyXG5IT1NUICoub3IuY3pcbklkZW50aXR5RmlsZSAvZm9vL2JheiIpOworCQljb25maWcoIkhvc3QgcmVwby5vci5jelxuSWRlbnRpdHlGaWxlIH4vZm9vL2JhclxuSE9TVCAqLm9yLmN6XG5JZGVudGl0eUZpbGUgfi9mb28vYmF6Iik7CiAJCWZpbmFsIEhvc3RDb25maWcgaCA9IGxvb2t1cCgicmVwby5vci5jeiIpOwogCQlhc3NlcnROb3ROdWxsKGgpOwogCQlhc3NlcnRJZGVudGl0eShuZXcgRmlsZShob21lLCAiZm9vL2JhciIpLCBoKTsKIAkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgbmV3IEZpbGUoaG9tZSwgImZvby9iYXIiKS5nZXRQYXRoKCksCi0JCQkJIi9mb28vYmF6IiB9LAorCQkJCW5ldyBGaWxlKGhvbWUsICJmb28vYmF6IikuZ2V0UGF0aCgpIH0sCiAJCQkJaC5nZXRWYWx1ZXMoU3NoQ29uc3RhbnRzLklERU5USVRZX0ZJTEUpLnRvQXJyYXkoKSk7CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlIb3N0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWNvbmZpZygiSG9zdCBvcmN6ICoub3IuY3pcbklkZW50aXR5RmlsZSB+L2Zvby9iYXJcbkhPU1QgKi5vci5jelxuSWRlbnRpdHlGaWxlIC9mb28vYmF6Iik7CisJCWNvbmZpZygiSG9zdCBvcmN6ICoub3IuY3pcbklkZW50aXR5RmlsZSB+L2Zvby9iYXJcbkhPU1QgKi5vci5jelxuSWRlbnRpdHlGaWxlIH4vZm9vL2JheiIpOwogCQlmaW5hbCBIb3N0Q29uZmlnIGgxID0gbG9va3VwKCJyZXBvLm9yLmN6Iik7CiAJCWFzc2VydE5vdE51bGwoaDEpOwogCQlhc3NlcnRJZGVudGl0eShuZXcgRmlsZShob21lLCAiZm9vL2JhciIpLCBoMSk7CiAJCWFzc2VydEFycmF5RXF1YWxzKG5ldyBPYmplY3RbXSB7IG5ldyBGaWxlKGhvbWUsICJmb28vYmFyIikuZ2V0UGF0aCgpLAotCQkJCSIvZm9vL2JheiIgfSwKKwkJCQluZXcgRmlsZShob21lLCAiZm9vL2JheiIpLmdldFBhdGgoKSB9LAogCQkJCWgxLmdldFZhbHVlcyhTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkudG9BcnJheSgpKTsKIAkJZmluYWwgSG9zdENvbmZpZyBoMiA9IGxvb2t1cCgib3JjeiIpOwogCQlhc3NlcnROb3ROdWxsKGgyKTsKQEAgLTU0NywxOCArNTQ5LDM2IEBAIHB1YmxpYyB2b2lkIHRlc3RFb2xDb21tZW50cygpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0RW5WYXJTdWJzdGl0dXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IG9yY3pcbklkZW50aXR5RmlsZSAvdG1wLyR7VFNUX1ZBUn1cbiIKLQkJCQkrICJDZXJ0aWZpY2F0ZUZpbGUgL3RtcC8ke30vZm9vXG5Vc2VyICR7VFNUX1ZBUn1cbklkZW50aXR5QWdlbnQgL3RtcC8ke1RTVF9WQVIvYmFyIik7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5JZGVudGl0eUZpbGUgfi90bXAvJHtUU1RfVkFSfVxuIgorCQkJCSsgIkNlcnRpZmljYXRlRmlsZSB+L3RtcC8ke30vZm9vXG5Vc2VyICR7VFNUX1ZBUn1cbklkZW50aXR5QWdlbnQgfi90bXAvJHtUU1RfVkFSL2JhciIpOwogCQlIb3N0Q29uZmlnIGggPSBsb29rdXAoIm9yY3oiKTsKIAkJYXNzZXJ0Tm90TnVsbChoKTsKLQkJYXNzZXJ0RXF1YWxzKCIvdG1wL1RFU1QiLAorCQlGaWxlIHRtcCA9IG5ldyBGaWxlKGhvbWUsICJ0bXAiKTsKKwkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKHRtcCwgIlRFU1QiKS5nZXRQYXRoKCksCiAJCQkJaC5nZXRWYWx1ZShTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkpOwogCQkvLyBObyB2YXJpYWJsZSBuYW1lCi0JCWFzc2VydEVxdWFscygiL3RtcC8ke30vZm9vIiwgaC5nZXRWYWx1ZShTc2hDb25zdGFudHMuQ0VSVElGSUNBVEVfRklMRSkpOworCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUobmV3IEZpbGUodG1wLCAiJHt9IiksICJmb28iKS5nZXRQYXRoKCksCisJCQkJaC5nZXRWYWx1ZShTc2hDb25zdGFudHMuQ0VSVElGSUNBVEVfRklMRSkpOwogCQkvLyBVc2VyIGRvZXNuJ3QgZ2V0IGVudiB2YXIgc3Vic3RpdHV0aW9uOgogCQlhc3NlcnRVc2VyKCIke1RTVF9WQVJ9IiwgaCk7CiAJCS8vIFVudGVybWluYXRlZDoKLQkJYXNzZXJ0RXF1YWxzKCIvdG1wLyR7VFNUX1ZBUi9iYXIiLAorCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUobmV3IEZpbGUodG1wLCAiJHtUU1RfVkFSIiksICJiYXIiKS5nZXRQYXRoKCksCisJCQkJaC5nZXRWYWx1ZShTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eUFnZW50Tm9uZSgpIHRocm93cyBFeGNlcHRpb24geworCQljb25maWcoIkhvc3Qgb3JjelxuSWRlbnRpdHlBZ2VudCBub25lXG4iKTsKKwkJSG9zdENvbmZpZyBoID0gbG9va3VwKCJvcmN6Iik7CisJCWFzc2VydEVxdWFscyhTc2hDb25zdGFudHMuTk9ORSwKKwkJCQloLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdElkZW50aXR5QWdlbnRTc2hBdXRoU29jaygpIHRocm93cyBFeGNlcHRpb24geworCQljb25maWcoIkhvc3Qgb3JjelxuSWRlbnRpdHlBZ2VudCBTU0hfQVVUSF9TT0NLXG4iKTsKKwkJSG9zdENvbmZpZyBoID0gbG9va3VwKCJvcmN6Iik7CisJCWFzc2VydEVxdWFscyhTc2hDb25zdGFudHMuRU5WX1NTSF9BVVRIX1NPQ0tFVCwKIAkJCQloLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCkpOwogCX0KIApAQCAtNjA3LDEzICs2MjcsMTYgQEAgcHVibGljIHZvaWQgdGVzdE5vTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdE11bHRpcGxlTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IGZvby5iYXJcblBvcnQgMjk0MThcbklkZW50aXR5RmlsZSAvZm9vXG5cbiIKLQkJCQkrICJIb3N0ICouYmFyXG5Qb3J0IDIyXG5JZGVudGl0eUZpbGUgL2JhclxuIgotCQkJCSsgIkhvc3QgZm9vLmJhclxuUG9ydCA0N1xuSWRlbnRpdHlGaWxlIC9iYXpcbiIpOworCQljb25maWcoIkhvc3QgZm9vLmJhclxuUG9ydCAyOTQxOFxuSWRlbnRpdHlGaWxlIH4vZm9vXG5cbiIKKwkJCQkrICJIb3N0ICouYmFyXG5Qb3J0IDIyXG5JZGVudGl0eUZpbGUgfi9iYXJcbiIKKwkJCQkrICJIb3N0IGZvby5iYXJcblBvcnQgNDdcbklkZW50aXR5RmlsZSB+L2JhelxuIik7CiAJCUhvc3RDb25maWcgaCA9IGxvb2t1cCgiZm9vLmJhciIpOwogCQlhc3NlcnROb3ROdWxsKGgpOwogCQlhc3NlcnRQb3J0KDI5NDE4LCBoKTsKLQkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgIi9mb28iLCAiL2JhciIsICIvYmF6IiB9LAorCQlhc3NlcnRBcnJheUVxdWFscygKKwkJCQluZXcgT2JqZWN0W10geyBuZXcgRmlsZShob21lLCAiZm9vIikuZ2V0UGF0aCgpLAorCQkJCQkJbmV3IEZpbGUoaG9tZSwgImJhciIpLmdldFBhdGgoKSwKKwkJCQkJCW5ldyBGaWxlKGhvbWUsICJiYXoiKS5nZXRQYXRoKCkgfSwKIAkJCQloLmdldFZhbHVlcyhTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkudG9BcnJheSgpKTsKIAl9CiAKQEAgLTYzMyw0ICs2NTYsNjEgQEAgcHVibGljIHZvaWQgdGVzdFdoaXRlc3BhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0Tm90TnVsbChoKTsKIAkJYXNzZXJ0UG9ydCgyMiwgaCk7CiAJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VGltZVNwZWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYyhudWxsKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiICAiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoInMiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiAgcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiICtzIikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgLXMiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFtcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjYwMCIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjYwMHMiKSk7CisJCWFzc2VydEVxdWFscyg2MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgIDYwMHMiKSk7CisJCWFzc2VydEVxdWFscyg2MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgIDYwMHMgICIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIlx0NjAwcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiBcdDYwMCAgIikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgIDYwMCBzICAiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjYwMCBzIikpOworCQlhc3NlcnRFcXVhbHMoNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMTBtIikpOworCQlhc3NlcnRFcXVhbHMoNTQwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoMzBtIikpOworCQlhc3NlcnRFcXVhbHMoNTQwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoIDMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDU0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxaCBcdDMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDU0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxaCszMG0iKSk7CisJCWFzc2VydEVxdWFscyg1NDAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWggKzMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWggKyAzMG0iKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoIC0zMG0iKSk7CisJCWFzc2VydEVxdWFscygzNjMwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWgzMHMiKSk7CisJCWFzc2VydEVxdWFscyg1NDAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMzBtIDFoIikpOworCQlhc3NlcnRFcXVhbHMoMzYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjMwbSAzMG0iKSk7CisJCWFzc2VydEVxdWFscyg2MCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjMwIDMwIikpOworCQlhc3NlcnRFcXVhbHMoMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjAiKSk7CisJCWFzc2VydEVxdWFscygxLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxUyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMU0iKSk7CisJCWFzc2VydEVxdWFscyg2MCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFtIikpOworCQlhc3NlcnRFcXVhbHMoMzYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFIIikpOworCQlhc3NlcnRFcXVhbHMoMzYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoIikpOworCQlhc3NlcnRFcXVhbHMoODY0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxRCIpKTsKKwkJYXNzZXJ0RXF1YWxzKDg2NDAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWQiKSk7CisJCWFzc2VydEVxdWFscyg2MDQ4MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxVyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwNDgwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjF3IikpOworCQlhc3NlcnRFcXVhbHMoMTcyODAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMmQiKSk7CisJCWFzc2VydEVxdWFscyg2MDQ4MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxdyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwNDgwMCArIDE3MjgwMCArIDMgKiAzNjAwICsgMzAgKiA2MCArIDEwLAorCQkJCU9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxdzJkM2gzMG0xMHMiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIi03IikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCItOWQiKSk7CisJCWFzc2VydEVxdWFscyhJbnRlZ2VyLk1BWF9WQUxVRSwgT3BlblNzaENvbmZpZ0ZpbGUKKwkJCQkudGltZVNwZWMoSW50ZWdlci50b1N0cmluZyhJbnRlZ2VyLk1BWF9WQUxVRSkpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZQorCQkJCS50aW1lU3BlYyhMb25nLnRvU3RyaW5nKEludGVnZXIuTUFYX1ZBTFVFICsgMUwpKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUKKwkJCQkudGltZVNwZWMoSW50ZWdlci50b1N0cmluZyhJbnRlZ2VyLk1BWF9WQUxVRSAvIDYwICsgMSkgKyAnTScpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMHciKSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9BYmJyZXZDb25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFjZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9BYmJyZXZDb25maWdUZXN0LmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5saWI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlQmFzZWRDb25maWc7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBBYmJyZXZDb25maWdUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKDcsIHRlc3RDb3JlQWJicmV2KG51bGwpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RBdXRvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscyg3LCB0ZXN0Q29yZUFiYnJldigiYXV0byIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RObygpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoNDAsIHRlc3RDb3JlQWJicmV2KCJubyIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RWYWxpZE1pbigpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoNCwgdGVzdENvcmVBYmJyZXYoIjQiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VmFsaWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKDIyLCB0ZXN0Q29yZUFiYnJldigiMjIiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRNYXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKDQwLCB0ZXN0Q29yZUFiYnJldigiNDAiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZCgpIHsKKwkJYXNzZXJ0VGhyb3dzKEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uLmNsYXNzLAorCQkJCSgpIC0+IHRlc3RDb3JlQWJicmV2KCJmb28iKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZDIoKSB7CisJCWFzc2VydFRocm93cyhJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiB0ZXN0Q29yZUFiYnJldigiMmsiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZE5lZ2F0aXZlKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoIi0xMDAwIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEludmFsaWRCZWxvd1JhbmdlKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoIjMiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEJlbG93UmFuZ2UyKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoIi0xIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEludmFsaWRBYm92ZVJhbmdlKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoIjQxIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEludmFsaWRBYm92ZVJhbmdlMigpIHsKKwkJYXNzZXJ0VGhyb3dzKEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uLmNsYXNzLAorCQkJCSgpIC0+IHRlc3RDb3JlQWJicmV2KCIxMDAwMDAiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmdObygpCisJCQl0aHJvd3MgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKCI0MCIsIHNldENvcmVBYmJyZXYoIm5vIikudG9TdHJpbmcoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmcoKQorCQkJdGhyb3dzIEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscygiNyIsIHNldENvcmVBYmJyZXYoImF1dG8iKS50b1N0cmluZygpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZzEyKCkKKwkJCXRocm93cyBJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoIjEyIiwgc2V0Q29yZUFiYnJldigiMTIiKS50b1N0cmluZygpKTsKKwl9CisKKwlwcml2YXRlIGludCB0ZXN0Q29yZUFiYnJldihTdHJpbmcgdmFsdWUpCisJCQl0aHJvd3MgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJcmV0dXJuIHNldENvcmVBYmJyZXYodmFsdWUpLmdldCgpOworCX0KKworCXByaXZhdGUgQWJicmV2Q29uZmlnIHNldENvcmVBYmJyZXYoU3RyaW5nIHZhbHVlKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7CisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BQkJSRVYsIHZhbHVlKTsKKwkJY29uZmlnLnNhdmUoKTsKKwkJcmV0dXJuIEFiYnJldkNvbmZpZy5wYXJzZUZyb21Db25maWcoZGIpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTVkNzgxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWdUZXN0LmphdmEKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGliOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkNvbmZpZ0ludmFsaWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0Q29uZmlnLkNsZWFudXBNb2RlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgQ29tbWl0Q29uZmlnVGVzdCB7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24geworCQlDb21taXRDb25maWcgY2ZnID0gcGFyc2UoIiIpOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgY2xlYW4tdXAgbW9kZSIsIENsZWFudXBNb2RlLkRFRkFVTFQsCisJCQkJY2ZnLmdldENsZWFudXBNb2RlKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvbW1pdENsZWFudXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nW10gdmFsdWVzID0geyAic3RyaXAiLCAid2hpdGVzcGFjZSIsICJ2ZXJiYXRpbSIsICJzY2lzc29ycyIsCisJCQkJImRlZmF1bHQiIH07CisJCUNsZWFudXBNb2RlW10gZXhwZWN0ZWQgPSB7IENsZWFudXBNb2RlLlNUUklQLCBDbGVhbnVwTW9kZS5XSElURVNQQUNFLAorCQkJCUNsZWFudXBNb2RlLlZFUkJBVElNLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywKKwkJCQlDbGVhbnVwTW9kZS5ERUZBVUxUIH07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CisJCQlDb21taXRDb25maWcgY2ZnID0gcGFyc2UoIltjb21taXRdXG5cdGNsZWFudXAgPSAiICsgdmFsdWVzW2ldKTsKKwkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBjbGVhbi11cCBtb2RlIiwgZXhwZWN0ZWRbaV0sCisJCQkJCWNmZy5nZXRDbGVhbnVwTW9kZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJlc29sdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nW10gdmFsdWVzID0geyAic3RyaXAiLCAid2hpdGVzcGFjZSIsICJ2ZXJiYXRpbSIsICJzY2lzc29ycyIsCisJCQkJImRlZmF1bHQiIH07CisJCUNsZWFudXBNb2RlW10gZXhwZWN0ZWQgPSB7IENsZWFudXBNb2RlLlNUUklQLCBDbGVhbnVwTW9kZS5XSElURVNQQUNFLAorCQkJCUNsZWFudXBNb2RlLlZFUkJBVElNLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywKKwkJCQlDbGVhbnVwTW9kZS5ERUZBVUxUIH07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CisJCQlDb21taXRDb25maWcgY2ZnID0gcGFyc2UoIltjb21taXRdXG5cdGNsZWFudXAgPSAiICsgdmFsdWVzW2ldKTsKKwkJCWZvciAoQ2xlYW51cE1vZGUgbW9kZSA6IENsZWFudXBNb2RlLnZhbHVlcygpKSB7CisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspIHsKKwkJCQkJQ2xlYW51cE1vZGUgcmVzb2x2ZWQgPSBjZmcucmVzb2x2ZShtb2RlLCBqID09IDApOworCQkJCQlpZiAobW9kZSAhPSBDbGVhbnVwTW9kZS5ERUZBVUxUKSB7CisJCQkJCQlhc3NlcnRFcXVhbHMoIkNsZWFuLXVwIG1vZGUgc2hvdWxkIGJlIHVuY2hhbmdlZCIsIG1vZGUsCisJCQkJCQkJCXJlc29sdmVkKTsKKwkJCQkJfSBlbHNlIGlmIChpICsgMSA8IHZhbHVlcy5sZW5ndGgpIHsKKwkJCQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBjbGVhbi11cCBtb2RlIiwgZXhwZWN0ZWRbaV0sCisJCQkJCQkJCXJlc29sdmVkKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBjbGVhbi11cCBtb2RlIiwKKwkJCQkJCQkJaiA9PSAwID8gQ2xlYW51cE1vZGUuU1RSSVAKKwkJCQkJCQkJCQk6IENsZWFudXBNb2RlLldISVRFU1BBQ0UsCisJCQkJCQkJCXJlc29sdmVkKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuRGVmYXVsdFRocm93cygpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRUaHJvd3MoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzLCAoKSAtPiBDb21taXRDb25maWcKKwkJCQkuY2xlYW5UZXh0KCJXaGF0ZXZlciIsIENsZWFudXBNb2RlLkRFRkFVTFQsICcjJykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuVmVyYmF0aW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiXG4gIFxuV2hhdGV2ZXIgIFxuXG5cbiMgQSBjb21tZW50XG5cbk1vcmVcdCBcblxuXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCBtZXNzYWdlLAorCQkJCUNvbW1pdENvbmZpZy5jbGVhblRleHQobWVzc2FnZSwgQ2xlYW51cE1vZGUuVkVSQkFUSU0sICcjJykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuV2hpdGVzcGFjZSgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBBIGNvbW1lbnRcblxuTW9yZVx0IFxuXG5cbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsCisJCQkJIldoYXRldmVyXG5cbiMgQSBjb21tZW50XG5cbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5XSElURVNQQUNFLCAnIycpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblN0cmlwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlxuICBcbldoYXRldmVyICBcblxuXG4jIEEgY29tbWVudFxuXG5Nb3JlXHQgXG5cblxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwgIldoYXRldmVyXG5cbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TVFJJUCwgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TdHJpcEN1c3RvbUNoYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiXG4gIFxuV2hhdGV2ZXIgIFxuXG5cbiMgTm90IGEgY29tbWVudFxuXG4gICA8QSBjb21tZW50XG5Nb3JlXHQgXG5cblxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwKKwkJCQkiV2hhdGV2ZXJcblxuIyBOb3QgYSBjb21tZW50XG5cbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TVFJJUCwgJzwnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29ycygpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcdCBcblxuXG4iCisJCQkJKyAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJCQkJKyAiTW9yZVxuTW9yZVxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwKKwkJCQkiV2hhdGV2ZXJcblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc0N1c3RvbUNoYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiXG4gIFxuV2hhdGV2ZXIgIFxuXG5cbiMgTm90IGEgY29tbWVudFxuXG4gICA8QSBjb21tZW50XG5Nb3JlXHQgXG5cblxuIgorCQkJCSsgIjwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkJCSsgIk1vcmVcbk1vcmVcbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsCisJCQkJIldoYXRldmVyXG5cbiMgTm90IGEgY29tbWVudFxuXG4gICA8QSBjb21tZW50XG5Nb3JlXG4iLAorCQkJCUNvbW1pdENvbmZpZy5jbGVhblRleHQobWVzc2FnZSwgQ2xlYW51cE1vZGUuU0NJU1NPUlMsICc8JykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuU2Npc3NvcnNBdFRvcCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkJCQkrICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcdCBcblxuXG4iCisJCQkJKyAiTW9yZVxuTW9yZVxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwgIiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc05vU2Npc3NvcigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBBIGNvbW1lbnRcblxuTW9yZVx0IFxuXG5cbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsCisJCQkJIldoYXRldmVyXG5cbiMgQSBjb21tZW50XG5cbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc05vU2Npc3NvcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiVGV4dFxuIgorCQkJCSsgIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkJCQkrICJNb3JlXG5Nb3JlXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCBtZXNzYWdlLAorCQkJCUNvbW1pdENvbmZpZy5jbGVhblRleHQobWVzc2FnZSwgQ2xlYW51cE1vZGUuU0NJU1NPUlMsICcjJykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuU2Npc3NvcnNOb1NjaXNzb3IzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlRleHRcbiIKKwkJCQkvLyBXcm9uZyBudW1iZXIgb2YgZGFzaGVzCisJCQkJKyAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkJCQkrICJNb3JlXG5Nb3JlXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCBtZXNzYWdlLAorCQkJCUNvbW1pdENvbmZpZy5jbGVhblRleHQobWVzc2FnZSwgQ2xlYW51cE1vZGUuU0NJU1NPUlMsICcjJykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuU2Npc3NvcnNBdEVuZCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJUZXh0XG4iCisJCQkJKyAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCAiVGV4dFxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNDSVNTT1JTLCAnIycpKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBDb21taXRDb25maWcgcGFyc2UoU3RyaW5nIGNvbnRlbnQpCisJCQl0aHJvd3MgQ29uZmlnSW52YWxpZEV4Y2VwdGlvbiB7CisJCUNvbmZpZyBjID0gbmV3IENvbmZpZygpOworCQljLmZyb21UZXh0KGNvbnRlbnQpOworCQlyZXR1cm4gYy5nZXQoQ29tbWl0Q29uZmlnLktFWSk7CisJfQorCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdFRlbXBsYXRlQ29uZmlnVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRUZW1wbGF0ZUNvbmZpZ1Rlc3QuamF2YQppbmRleCA2ZGJlMzBhLi40MmJhZmI2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdFRlbXBsYXRlQ29uZmlnVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29tbWl0VGVtcGxhdGVDb25maWdUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIFNBUCBTRSBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgU0FQIFNFIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTQ3LDggKzQ3LDcgQEAgcHVibGljIHZvaWQgdGVzdENvbW1pdFRlbXBsYXRlUGF0aEluSG9tZURpcmVjb3J5KCkKIAkJCQkiLnRtcCIsIG5ldyBGaWxlKGhvbWVEaXIpKTsKIAkJdGVtcEZpbGVJbkhvbWVEaXJlY3RvcnkuZGVsZXRlT25FeGl0KCk7CiAJCUpHaXRUZXN0VXRpbC53cml0ZSh0ZW1wRmlsZUluSG9tZURpcmVjdG9yeSwgdGVtcGxhdGVDb250ZW50KTsKLQkJU3RyaW5nIGV4cGVjdGVkVGVtcGxhdGVQYXRoID0gdGVtcEZpbGVJbkhvbWVEaXJlY3RvcnkuZ2V0UGF0aCgpCi0JCQkJLnJlcGxhY2UoaG9tZURpciwgIn4iKTsKKwkJU3RyaW5nIGV4cGVjdGVkVGVtcGxhdGVQYXRoID0gIn4vIiArIHRlbXBGaWxlSW5Ib21lRGlyZWN0b3J5LmdldE5hbWUoKTsKIAkJY29uZmlnID0gQ29uZmlnVGVzdAogCQkJCS5wYXJzZSgiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiICsgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggKyAiXG4iKTsKIAkJU3RyaW5nIHRlbXBsYXRlUGF0aCA9IGNvbmZpZy5nZXQoQ29tbWl0Q29uZmlnLktFWSkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdUZXN0LmphdmEKaW5kZXggOWI4MmMyYS4uYTg1YTRmNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdUZXN0LmphdmEKQEAgLTE0ODgsNyArMTQ4OCw4IEBAIHB1YmxpYyB2b2lkIHRlc3RDb21taXRUZW1wbGF0ZUNvbmZpZygpCiAJCVN0cmluZyBleHBlY3RlZFRlbXBsYXRlUGF0aCA9IHRlbXBGaWxlLmdldFBhdGgoKTsKIAogCQlDb25maWcgY29uZmlnID0gcGFyc2UoCi0JCQkJIltjb21taXRdXG5cdHRlbXBsYXRlID0gIiArIGV4cGVjdGVkVGVtcGxhdGVQYXRoICsgIlxuIik7CisJCQkJIltjb21taXRdXG5cdHRlbXBsYXRlID0gIgorCQkJCQkJKyBDb25maWcuZXNjYXBlVmFsdWUoZXhwZWN0ZWRUZW1wbGF0ZVBhdGgpICsgIlxuIik7CiAKIAkJU3RyaW5nIHRlbXBsYXRlUGF0aCA9IGNvbmZpZy5nZXQoQ29tbWl0Q29uZmlnLktFWSkKIAkJCQkuZ2V0Q29tbWl0VGVtcGxhdGVQYXRoKCk7CkBAIC0xNTM3LDcgKzE1MzgsOCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0VGVtcGxhdGVFbmNvZGluZygpCiAJCUpHaXRUZXN0VXRpbC53cml0ZSh0ZW1wRmlsZSwgdGVtcGxhdGVDb250ZW50KTsKIAkJU3RyaW5nIGV4cGVjdGVkVGVtcGxhdGVQYXRoID0gdGVtcEZpbGUuZ2V0UGF0aCgpOwogCQljb25maWcgPSBwYXJzZSgiW2kxOG5dXG5cdGNvbW1pdEVuY29kaW5nID0gdXRmLThcbiIKLQkJCQkrICJbY29tbWl0XVxuXHR0ZW1wbGF0ZSA9ICIgKyBleHBlY3RlZFRlbXBsYXRlUGF0aCArICJcbiIpOworCQkJCSsgIltjb21taXRdXG5cdHRlbXBsYXRlID0gIgorCQkJCSsgQ29uZmlnLmVzY2FwZVZhbHVlKGV4cGVjdGVkVGVtcGxhdGVQYXRoKSArICJcbiIpOwogCQlhc3NlcnRFcXVhbHModGVtcGxhdGVDb250ZW50LAogCQkJCWNvbmZpZy5nZXQoQ29tbWl0Q29uZmlnLktFWSkuZ2V0Q29tbWl0VGVtcGxhdGVDb250ZW50KHJlcG8pKTsKIAkJU3RyaW5nIGNvbW1pdEVuY29kaW5nID0gY29uZmlnLmdldChDb21taXRDb25maWcuS0VZKQpAQCAtMTU1Niw3ICsxNTU4LDggQEAgcHVibGljIHZvaWQgdGVzdENvbW1pdFRlbXBsYXRlV2l0aEludmFsaWRFbmNvZGluZygpCiAJCVN0cmluZyB0ZW1wbGF0ZUNvbnRlbnQgPSAiY29udGVudCBvZiB0aGUgdGVtcGxhdGUiOwogCQlKR2l0VGVzdFV0aWwud3JpdGUodGVtcEZpbGUsIHRlbXBsYXRlQ29udGVudCk7CiAJCWNvbmZpZyA9IHBhcnNlKCJbaTE4bl1cblx0Y29tbWl0RW5jb2RpbmcgPSBpbnZhbGlkRWNvZGluZ1xuIgotCQkJCSsgIltjb21taXRdXG5cdHRlbXBsYXRlID0gIiArIHRlbXBGaWxlLmdldFBhdGgoKSArICJcbiIpOworCQkJCSsgIltjb21taXRdXG5cdHRlbXBsYXRlID0gIgorCQkJCSsgQ29uZmlnLmVzY2FwZVZhbHVlKHRlbXBGaWxlLmdldFBhdGgoKSkgKyAiXG4iKTsKIAkJY29uZmlnLmdldChDb21taXRDb25maWcuS0VZKS5nZXRDb21taXRUZW1wbGF0ZUNvbnRlbnQocmVwbyk7CiAJfQogCkBAIC0xNTcwLDcgKzE1NzMsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0VGVtcGxhdGVXaXRoSW52YWxpZFBhdGgoKQogCQlTdHJpbmcgdGVtcGxhdGVDb250ZW50ID0gImNvbnRlbnQgb2YgdGhlIHRlbXBsYXRlIjsKIAkJSkdpdFRlc3RVdGlsLndyaXRlKHRlbXBGaWxlLCB0ZW1wbGF0ZUNvbnRlbnQpOwogCQkvLyBjb21taXQgbWVzc2FnZSBlbmNvZGluZwotCQlTdHJpbmcgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggPSAiL25vbkV4aXN0aW5nVGVtcGxhdGUiOworCQlTdHJpbmcgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggPSAifi9ub25FeGlzdGluZ1RlbXBsYXRlIjsKIAkJY29uZmlnID0gcGFyc2UoIltjb21taXRdXG5cdHRlbXBsYXRlID0gIiArIGV4cGVjdGVkVGVtcGxhdGVQYXRoICsgIlxuIik7CiAJCVN0cmluZyB0ZW1wbGF0ZVBhdGggPSBjb25maWcuZ2V0KENvbW1pdENvbmZpZy5LRVkpCiAJCQkJLmdldENvbW1pdFRlbXBsYXRlUGF0aCgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EaXJDYWNoZUNoZWNrb3V0VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EaXJDYWNoZUNoZWNrb3V0VGVzdC5qYXZhCmluZGV4IGFmOGE1OGYuLjBmYWZjZDYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvRGlyQ2FjaGVDaGVja291dFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0RpckNhY2hlQ2hlY2tvdXRUZXN0LmphdmEKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIERhdmUgV2F0c29uIDxkd2F0c29uQG1pbXZpc3RhLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExLCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSwgUm9iaW4gUm9zZW5iZXJnIDxyb2Jpbi5yb3NlbmJlcmdAZGV3aXJlLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAyMCBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAyMiBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI0Miw2ICsyNDIsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbENoZWNrb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUxpc3RlbmVySGFuZGxlIGhhbmRsZSA9IG51bGw7CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwogCQkJCVRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IGRiX3QgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCWhhbmRsZSA9IGRiLmdldExpc3RlbmVyTGlzdCgpCiAJCQkJCS5hZGRXb3JraW5nVHJlZU1vZGlmaWVkTGlzdGVuZXIocmVjb3JkZXIpOwogCQkJQnJhbmNoQnVpbGRlciBtYXN0ZXIgPSBkYl90LmJyYW5jaCgibWFzdGVyIik7CkBAIC0yNjEsNiArMjYyLDcgQEAgcHJpdmF0ZSB2b2lkIGNoZWNrb3V0TGluZUVuZGluZ3MoU3RyaW5nIGluSW5kZXgsIFN0cmluZyBleHBlY3RlZCwKIAkJCVN0cmluZyBhdHRyaWJ1dGVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CiAJCQkJVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gZGJfdCA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJQnJhbmNoQnVpbGRlciBtYXN0ZXIgPSBkYl90LmJyYW5jaCgibWFzdGVyIik7CiAJCQltYXN0ZXIuY29tbWl0KCkuYWRkKCJmIiwgaW5JbmRleCkubWVzc2FnZSgibTAiKS5jcmVhdGUoKTsKIAkJCWlmICghU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChhdHRyaWJ1dGVzKSkgewpAQCAtMzEzLDggKzMxNSw5IEBAIHB1YmxpYyB2b2lkIHRlc3RDaGVja291dFdpdGhMRigpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRXaXRoTEZBdXRvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWNoZWNrb3V0TGluZUVuZGluZ3MoImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lXG4iLAotCQkJCSJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZVxuIiwgImYgdGV4dD1hdXRvIik7CisJCVN0cmluZyBleHBlY3RlZCA9IFN0cmluZy5mb3JtYXQoImZpcnN0IGxpbmUlbnNlY29uZCBsaW5lJW4iKTsKKwkJY2hlY2tvdXRMaW5lRW5kaW5ncygiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbiIsIGV4cGVjdGVkLAorCQkJCSJmIHRleHQ9YXV0byIpOwogCX0KIAogCUBUZXN0CkBAIC0zMjUsOSArMzI4LDkgQEAgcHVibGljIHZvaWQgdGVzdENoZWNrb3V0V2l0aExGQXV0b0VvbExmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFdpdGhMRkF1dG9Fb2xOYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGV4cGVjdGVkID0gU3RyaW5nLmZvcm1hdCgiZmlyc3QgbGluZSVuc2Vjb25kIGxpbmUlbiIpOwogCQljaGVja291dExpbmVFbmRpbmdzKAotCQkJCSJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZVxuIiwgImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lXG4iCi0JCQkJCQkucmVwbGFjZUFsbCgiXG4iLCBTeXN0ZW0ubGluZVNlcGFyYXRvcigpKSwKKwkJCQkiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbiIsIGV4cGVjdGVkLAogCQkJCSJmIHRleHQ9YXV0byBlb2w9bmF0aXZlIik7CiAJfQogCkBAIC0yMDY0LDYgKzIwNjcsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UmVzZXRXaXRoQ2hhbmdlSW5HaXRpZ25vcmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRXaXRoRW1wdHlJbmRleERvZXNudE92ZXJ3cml0ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKIAkJCQlUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkYl90ID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQkvLyBwcmVwYXJlIHRoZSBjb21taXRzCiAJCQlCcmFuY2hCdWlsZGVyIG1hc3RlciA9IGRiX3QuYnJhbmNoKCJtYXN0ZXIiKTsKIAkJCVJldkNvbW1pdCBtZXJnZUNvbW1pdCA9IG1hc3Rlci5jb21taXQoKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9UMDAwMV9QZXJzb25JZGVudFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUGVyc29uSWRlbnRUZXN0LmphdmEKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9UMDAwMV9QZXJzb25JZGVudFRlc3QuamF2YQpyZW5hbWUgdG8gb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9QZXJzb25JZGVudFRlc3QuamF2YQppbmRleCBlOWJhYjdjLi45N2RhMTc1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1QwMDAxX1BlcnNvbklkZW50VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUGVyc29uSWRlbnRUZXN0LmphdmEKQEAgLTEzLDEyICsxMywxNCBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCitpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLlpvbmVJZDsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotcHVibGljIGNsYXNzIFQwMDAxX1BlcnNvbklkZW50VGVzdCB7CitwdWJsaWMgY2xhc3MgUGVyc29uSWRlbnRUZXN0IHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdDAwMV9OZXdJZGVudCgpIHsKQEAgLTQyLDYgKzQ0LDM0IEBAIHB1YmxpYyB2b2lkIHRlc3QwMDJfTmV3SWRlbnQoKSB7CiAJCQkJcC50b0V4dGVybmFsU3RyaW5nKCkpOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5ld0lkZW50SW5zdGFudCgpIHsKKwkJUGVyc29uSWRlbnQgcCA9IG5ldyBQZXJzb25JZGVudCgiQSBVIFRob3IiLCAiYXV0aG9yQGV4YW1wbGUuY29tIiwKKwkJCQlJbnN0YW50Lm9mRXBvY2hNaWxsaSgxMTQyODc4NTAxMDAwTCksCisJCQkJWm9uZUlkLm9mKCJBbWVyaWNhL05ld19Zb3JrIikpOworCQlhc3NlcnRFcXVhbHMoIkEgVSBUaG9yIiwgcC5nZXROYW1lKCkpOworCQlhc3NlcnRFcXVhbHMoImF1dGhvckBleGFtcGxlLmNvbSIsIHAuZ2V0RW1haWxBZGRyZXNzKCkpOworCQlhc3NlcnRFcXVhbHMoSW5zdGFudC5vZkVwb2NoTWlsbGkoMTE0Mjg3ODUwMTAwMEwpLAorCQkJCXAuZ2V0V2hlbkFzSW5zdGFudCgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTQyODc4NTAxIC0wNTAwIiwKKwkJCQlwLnRvRXh0ZXJuYWxTdHJpbmcoKSk7CisJCWFzc2VydEVxdWFscyhab25lSWQub2YoIkdNVC0wNTowMCIpLCBwLmdldFpvbmVJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROZXdJZGVudEluc3RhbnQyKCkgeworCQlmaW5hbCBQZXJzb25JZGVudCBwID0gbmV3IFBlcnNvbklkZW50KCJBIFUgVGhvciIsICJhdXRob3JAZXhhbXBsZS5jb20iLAorCQkJCUluc3RhbnQub2ZFcG9jaE1pbGxpKDExNDI4Nzg1MDEwMDBMKSwKKwkJCQlab25lSWQub2YoIkFzaWEvS29sa2F0YSIpKTsKKwkJYXNzZXJ0RXF1YWxzKCJBIFUgVGhvciIsIHAuZ2V0TmFtZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJhdXRob3JAZXhhbXBsZS5jb20iLCBwLmdldEVtYWlsQWRkcmVzcygpKTsKKwkJYXNzZXJ0RXF1YWxzKEluc3RhbnQub2ZFcG9jaE1pbGxpKDExNDI4Nzg1MDEwMDBMKSwKKwkJCQlwLmdldFdoZW5Bc0luc3RhbnQoKSk7CisJCWFzc2VydEVxdWFscygiQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTE0Mjg3ODUwMSArMDUzMCIsCisJCQkJcC50b0V4dGVybmFsU3RyaW5nKCkpOworCQlhc3NlcnRFcXVhbHMoWm9uZUlkLm9mKCJHTVQrMDU6MzAiKSwgcC5nZXRab25lSWQoKSk7CisJfQorCiAJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAJQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCiAJcHVibGljIHZvaWQgbnVsbEZvck5hbWVTaG91bGRUaHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VNZXNzYWdlRm9ybWF0dGVyVGVzdC5qYXZhCmluZGV4IGRlZGI1NmMuLmEyNTc2Y2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlTWVzc2FnZUZvcm1hdHRlclRlc3QuamF2YQpAQCAtMTMsNiArMTMsNyBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWRSZWY7CkBAIC0xNTcsOCArMTU4LDggQEAgcHVibGljIHZvaWQgdGVzdEludG9TeW1ib2xpY1JlZkhlYWRQb2ludGluZ1RvTWFzdGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0V2l0aENvbmZsaWN0c05vRm9vdGVyKCkgewogCQlTdHJpbmcgb3JpZ2luYWxNZXNzYWdlID0gIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG4iOwogCQlTdHJpbmcgbWVzc2FnZSA9IGZvcm1hdHRlci5mb3JtYXRXaXRoQ29uZmxpY3RzKG9yaWdpbmFsTWVzc2FnZSwKLQkJCQlBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7ICJwYXRoMSIgfSkpOwotCQlhc3NlcnRFcXVhbHMoIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5cbkNvbmZsaWN0czpcblx0cGF0aDFcbiIsCisJCQkJTGlzdC5vZigicGF0aDEiKSwgJyMnKTsKKwkJYXNzZXJ0RXF1YWxzKCJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuXG4jIENvbmZsaWN0czpcbiNcdHBhdGgxXG4iLAogCQkJCW1lc3NhZ2UpOwogCX0KIApAQCAtMTY2LDggKzE2NywxNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0V2l0aENvbmZsaWN0c05vRm9vdGVyKCkgewogCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzTm9Gb290ZXJOb0xpbmVCcmVhaygpIHsKIAkJU3RyaW5nIG9yaWdpbmFsTWVzc2FnZSA9ICJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keSI7CiAJCVN0cmluZyBtZXNzYWdlID0gZm9ybWF0dGVyLmZvcm1hdFdpdGhDb25mbGljdHMob3JpZ2luYWxNZXNzYWdlLAotCQkJCUFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgInBhdGgxIiB9KSk7Ci0JCWFzc2VydEVxdWFscygiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuQ29uZmxpY3RzOlxuXHRwYXRoMVxuIiwKKwkJCQlMaXN0Lm9mKCJwYXRoMSIpLCAnIycpOworCQlhc3NlcnRFcXVhbHMoIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5cbiMgQ29uZmxpY3RzOlxuI1x0cGF0aDFcbiIsCisJCQkJbWVzc2FnZSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0V2l0aENvbmZsaWN0c0N1c3RvbUNoYXJhY3RlcigpIHsKKwkJU3RyaW5nIG9yaWdpbmFsTWVzc2FnZSA9ICJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keSI7CisJCVN0cmluZyBtZXNzYWdlID0gZm9ybWF0dGVyLmZvcm1hdFdpdGhDb25mbGljdHMob3JpZ2luYWxNZXNzYWdlLAorCQkJCUxpc3Qub2YoInBhdGgxIiksICc7Jyk7CisJCWFzc2VydEVxdWFscygiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuOyBDb25mbGljdHM6XG47XHRwYXRoMVxuIiwKIAkJCQltZXNzYWdlKTsKIAl9CiAKQEAgLTE3Niw5ICsxODYsOSBAQCBwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0V2l0aENvbmZsaWN0c1dpdGhGb290ZXJzKCkgewogCQlTdHJpbmcgb3JpZ2luYWxNZXNzYWdlID0gIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5cbkNoYW5nZUlkOiIKIAkJCQkrICIgSTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OVxuQnVnOjEyMzQ1NjdcbiI7CiAJCVN0cmluZyBtZXNzYWdlID0gZm9ybWF0dGVyLmZvcm1hdFdpdGhDb25mbGljdHMob3JpZ2luYWxNZXNzYWdlLAotCQkJCUFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgInBhdGgxIiB9KSk7CisJCQkJTGlzdC5vZigicGF0aDEiKSwgJyMnKTsKIAkJYXNzZXJ0RXF1YWxzKAotCQkJCSJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuXG5Db25mbGljdHM6XG5cdHBhdGgxXG5cbiIKKwkJCQkiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuIyBDb25mbGljdHM6XG4jXHRwYXRoMVxuXG4iCiAJCQkJCQkrICJDaGFuZ2VJZDogSTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OVxuQnVnOjEyMzQ1NjdcbiIsCiAJCQkJbWVzc2FnZSk7CiAJfQpAQCAtMTg4LDkgKzE5OCw5IEBAIHB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzV2l0aEZvb3Rlcmxpa2VMaW5lSW5Cb2R5KCkgewogCQlTdHJpbmcgb3JpZ2luYWxNZXNzYWdlID0gIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5CdWc6MTIzNDU2N1xuTW9yZSBCb2R5XG5cbkNoYW5nZUlkOiIKIAkJCQkrICIgSTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OVxuQnVnOjEyMzQ1NjdcbiI7CiAJCVN0cmluZyBtZXNzYWdlID0gZm9ybWF0dGVyLmZvcm1hdFdpdGhDb25mbGljdHMob3JpZ2luYWxNZXNzYWdlLAotCQkJCUFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgInBhdGgxIiB9KSk7CisJCQkJTGlzdC5vZigicGF0aDEiKSwgJyMnKTsKIAkJYXNzZXJ0RXF1YWxzKAotCQkJCSJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuQnVnOjEyMzQ1Njdcbk1vcmUgQm9keVxuXG5Db25mbGljdHM6XG5cdHBhdGgxXG5cbiIKKwkJCQkiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcbkJ1ZzoxMjM0NTY3XG5Nb3JlIEJvZHlcblxuIyBDb25mbGljdHM6XG4jXHRwYXRoMVxuXG4iCiAJCQkJCQkrICJDaGFuZ2VJZDogSTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OVxuQnVnOjEyMzQ1NjdcbiIsCiAJCQkJbWVzc2FnZSk7CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZXJUZXN0LmphdmEKaW5kZXggZGQ4NTczZC4uY2JhY2FlZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VyVGVzdC5qYXZhCkBAIC0xODEwLDYgKzE4MTAsNyBAQCBwcml2YXRlIHZvaWQgY2hlY2tNb2RpZmljYXRpb25UaW1lU3RhbXBPcmRlcihTdHJpbmcuLi4gcGF0aGVzKSB7CiAJcHJpdmF0ZSBTdHJpbmcgcmVhZEJsb2IoT2JqZWN0SWQgdHJlZWlzaCwgU3RyaW5nIHBhdGgpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PD8+IHRyID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oZGIpOwogCQkJCVJldldhbGsgcncgPSB0ci5nZXRSZXZXYWxrKCkpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCVJldlRyZWUgdHJlZSA9IHJ3LnBhcnNlVHJlZSh0cmVlaXNoKTsKIAkJCVJldk9iamVjdCBvYmogPSB0ci5nZXQodHJlZSwgcGF0aCk7CiAJCQlpZiAob2JqID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlV2Fsa1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlV2Fsa1Rlc3QuamF2YQppbmRleCBlYTk5NGYwLi5mNDQ2ZDA3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvc3VibW9kdWxlL1N1Ym1vZHVsZVdhbGtUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3N1Ym1vZHVsZS9TdWJtb2R1bGVXYWxrVGVzdC5qYXZhCkBAIC0yMTcsNyArMjE3LDYgQEAgcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKIAkJCQlhc3NlcnRFcXVhbHNGaWxlKG1vZHVsZXNHaXREaXIsIHN1YlJlcG8uZ2V0RGlyZWN0b3J5KCkpOwogCQkJCWFzc2VydEVxdWFsc0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCksCiAJCQkJCQlzdWJSZXBvLmdldFdvcmtUcmVlKCkpOwotCQkJCXN1YlJlcG8uY2xvc2UoKTsKIAkJCQlhc3NlcnRGYWxzZShnZW4ubmV4dCgpKTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9CdW5kbGVXcml0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0J1bmRsZVdyaXRlclRlc3QuamF2YQppbmRleCAwNTRlYjljLi5iYjYyYTBkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0J1bmRsZVdyaXRlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0J1bmRsZVdyaXRlclRlc3QuamF2YQpAQCAtODAsNiArODAsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVTaW5nbGVSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVGhlbiB3ZSBjbG9uZSBhIG5ldyByZXBvIGZyb20gdGhhdCBidW5kbGUgYW5kIGRvIGEgc2ltcGxlIHRlc3QuIFRoaXMKIAkJLy8gbWFrZXMgc3VyZSB3ZSBjb3VsZCByZWFkIHRoZSBidW5kbGUgd2UgY3JlYXRlZC4KIAkJUmVwb3NpdG9yeSBuZXdSZXBvID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UobmV3UmVwbyk7CiAJCUZldGNoUmVzdWx0IGZldGNoUmVzdWx0ID0gZmV0Y2hGcm9tQnVuZGxlKG5ld1JlcG8sIGJ1bmRsZSk7CiAJCVJlZiBhZHZlcnRpc2VkUmVmID0gZmV0Y2hSZXN1bHQKIAkJCQkuZ2V0QWR2ZXJ0aXNlZFJlZigicmVmcy9oZWFkcy9maXJzdGNvbW1pdCIpOwpAQCAtMTE2LDYgKzExNyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RJbmNyZW1lbnRhbEJ1bmRsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBtYWtlcyBzdXJlCiAJCS8vIHdlIGNvdWxkIHJlYWQgdGhlIGJ1bmRsZSB3ZSBjcmVhdGVkLgogCQlSZXBvc2l0b3J5IG5ld1JlcG8gPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShuZXdSZXBvKTsKIAkJRmV0Y2hSZXN1bHQgZmV0Y2hSZXN1bHQgPSBmZXRjaEZyb21CdW5kbGUobmV3UmVwbywgYnVuZGxlKTsKIAkJUmVmIGFkdmVydGlzZWRSZWYgPSBmZXRjaFJlc3VsdC5nZXRBZHZlcnRpc2VkUmVmKCJyZWZzL2hlYWRzL2FhIik7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUGFja1BhcnNlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUGFja1BhcnNlclRlc3QuamF2YQppbmRleCA2MGI4MDk4Li45M2JlZGIzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1BhY2tQYXJzZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QYWNrUGFyc2VyVGVzdC5qYXZhCkBAIC0xMTAsNiArMTEwLDcgQEAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgIElPRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0VGlueVRoaW5QYWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJldkJsb2IgYTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYSA9IGQuYmxvYigiYSIpOwogCQl9CiAKQEAgLTEzMiw2ICsxMzMsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0VGlueVRoaW5QYWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdFBhY2tXaXRoRHVwbGljYXRlQmxvYigpIHRocm93cyBFeGNlcHRpb24gewogCQlmaW5hbCBieXRlW10gZGF0YSA9IENvbnN0YW50cy5lbmNvZGUoIjAxMjM0NTY3ODlhYmNkZWZnIik7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYXNzZXJ0VHJ1ZShkYi5nZXRPYmplY3REYXRhYmFzZSgpLmhhcyhkLmJsb2IoZGF0YSkpKTsKIAkJfQogCkBAIC0xNTEsNiArMTUzLDcgQEAgcHVibGljIHZvaWQgdGVzdFBhY2tXaXRoRHVwbGljYXRlQmxvYigpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RQYWNrV2l0aFRyYWlsaW5nR2FyYmFnZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlSZXZCbG9iIGE7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnkgZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCWEgPSBkLmJsb2IoImEiKTsKIAkJfQogCkBAIC0xODAsNiArMTgzLDcgQEAgcHVibGljIHZvaWQgdGVzdFBhY2tXaXRoVHJhaWxpbmdHYXJiYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdE1heE9iamVjdFNpemVGdWxsQmxvYigpIHRocm93cyBFeGNlcHRpb24gewogCQlmaW5hbCBieXRlW10gZGF0YSA9IENvbnN0YW50cy5lbmNvZGUoIjAxMjM0NTY3ODkiKTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJZC5ibG9iKGRhdGEpOwogCQl9CiAKQEAgLTIxMyw2ICsyMTcsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZUZ1bGxCbG9iKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdE1heE9iamVjdFNpemVEZWx0YUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJldkJsb2IgYTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYSA9IGQuYmxvYigiYSIpOwogCQl9CiAKQEAgLTI0Niw2ICsyNTEsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZURlbHRhQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZURlbHRhUmVzdWx0U2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlSZXZCbG9iIGE7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnkgZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCWEgPSBkLmJsb2IoIjAxMjM0NTY3ODkiKTsKIAkJfQogCkBAIC0yNzgsNiArMjg0LDcgQEAgcHVibGljIHZvaWQgdGVzdE1heE9iamVjdFNpemVEZWx0YVJlc3VsdFNpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0Tm9uTWFya2luZ0lucHV0U3RyZWFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJldkJsb2IgYTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYSA9IGQuYmxvYigiYSIpOwogCQl9CiAKQEAgLTMxOCw2ICszMjUsNyBAQCBwdWJsaWMgdm9pZCBtYXJrKGludCBtYXhsZW5ndGgpIHsKIAlwdWJsaWMgdm9pZCB0ZXN0RGF0YUFmdGVyUGFja0Zvb3RlclNpbmdsZVJlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmV2QmxvYiBhOwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5IGQgPSBuZXcgVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhID0gZC5ibG9iKCJhIik7CiAJCX0KIApAQCAtMzc5LDYgKzM4Nyw3IEBAIHB1YmxpYyB2b2lkIHRlc3REYXRhQWZ0ZXJQYWNrRm9vdGVyU3BsaXRIZWFkZXJSZWFkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWZpbmFsIGJ5dGVbXSBkYXRhID0gQ29uc3RhbnRzLmVuY29kZSgiYSIpOwogCQlSZXZCbG9iIGI7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnkgZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCWIgPSBkLmJsb2IoZGF0YSk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnVGVzdC5qYXZhCmluZGV4IDYxMDlkNmMuLmNiYzFkNTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaENvbmZpZ1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWdUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LCBEYXZpZCBQdXJzZWhvdXNlIDxkYXZpZC5wdXJzZWhvdXNlQGdtYWlsLmNvbT4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIyIERhdmlkIFB1cnNlaG91c2UgPGRhdmlkLnB1cnNlaG91c2VAZ21haWwuY29tPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xNCwxMCArMTQsMTMgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25maWcuUHVzaERlZmF1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENvbmZpZy5QdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCiBwdWJsaWMgY2xhc3MgUHVzaENvbmZpZ1Rlc3QgeworCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBwdXNoUmVjdXJzZVN1Ym1vZHVsZU1hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWFzc2VydFRydWUoUHVzaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZS5DSEVDSy5tYXRjaENvbmZpZ1ZhbHVlKCJjaGVjayIpKTsKQEAgLTUyLDQgKzU1LDU5IEBAIHB1YmxpYyB2b2lkIHB1c2hSZWN1cnNlU3VibW9kdWxlVG9Db25maWdWYWx1ZSgpIHsKIAkJYXNzZXJ0RXF1YWxzKCJjaGVjayIsIFB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUuQ0hFQ0sudG9Db25maWdWYWx1ZSgpKTsKIAkJYXNzZXJ0RXF1YWxzKCJmYWxzZSIsIFB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUuTk8udG9Db25maWdWYWx1ZSgpKTsKIAl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHB1c2hEZWZhdWx0TWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5OT1RISU5HLm1hdGNoQ29uZmlnVmFsdWUoIm5vdGhpbmciKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuTk9USElORy5tYXRjaENvbmZpZ1ZhbHVlKCJOT1RISU5HIikpOworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0LkNVUlJFTlQubWF0Y2hDb25maWdWYWx1ZSgiY3VycmVudCIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5DVVJSRU5ULm1hdGNoQ29uZmlnVmFsdWUoIkNVUlJFTlQiKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuVVBTVFJFQU0ubWF0Y2hDb25maWdWYWx1ZSgidXBzdHJlYW0iKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuVVBTVFJFQU0ubWF0Y2hDb25maWdWYWx1ZSgiVVBTVFJFQU0iKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuVVBTVFJFQU0ubWF0Y2hDb25maWdWYWx1ZSgidHJhY2tpbmciKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuVVBTVFJFQU0ubWF0Y2hDb25maWdWYWx1ZSgiVFJBQ0tJTkciKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuU0lNUExFLm1hdGNoQ29uZmlnVmFsdWUoInNpbXBsZSIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5TSU1QTEUubWF0Y2hDb25maWdWYWx1ZSgiU0lNUExFIikpOworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0Lk1BVENISU5HLm1hdGNoQ29uZmlnVmFsdWUoIm1hdGNoaW5nIikpOworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0Lk1BVENISU5HLm1hdGNoQ29uZmlnVmFsdWUoIk1BVENISU5HIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgcHVzaERlZmF1bHROb01hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydEZhbHNlKFB1c2hEZWZhdWx0Lk5PVEhJTkcubWF0Y2hDb25maWdWYWx1ZSgibiIpKTsKKwkJYXNzZXJ0RmFsc2UoUHVzaERlZmF1bHQuQ1VSUkVOVC5tYXRjaENvbmZpZ1ZhbHVlKCIiKSk7CisJCWFzc2VydEZhbHNlKFB1c2hEZWZhdWx0LlVQU1RSRUFNLm1hdGNoQ29uZmlnVmFsdWUoInRyYWNrIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgcHVzaERlZmF1bHRUb0NvbmZpZ1ZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscygibm90aGluZyIsIFB1c2hEZWZhdWx0Lk5PVEhJTkcudG9Db25maWdWYWx1ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJjdXJyZW50IiwgUHVzaERlZmF1bHQuQ1VSUkVOVC50b0NvbmZpZ1ZhbHVlKCkpOworCQlhc3NlcnRFcXVhbHMoInVwc3RyZWFtIiwgUHVzaERlZmF1bHQuVVBTVFJFQU0udG9Db25maWdWYWx1ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJzaW1wbGUiLCBQdXNoRGVmYXVsdC5TSU1QTEUudG9Db25maWdWYWx1ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJtYXRjaGluZyIsIFB1c2hEZWZhdWx0Lk1BVENISU5HLnRvQ29uZmlnVmFsdWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlDb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUHVzaENvbmZpZyBjZmcgPSBwYXJzZSgiIik7CisJCWFzc2VydEVxdWFscyhQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlLk5PLCBjZmcuZ2V0UmVjdXJzZVN1Ym1vZHVsZXMoKSk7CisJCWFzc2VydEVxdWFscyhQdXNoRGVmYXVsdC5TSU1QTEUsIGNmZy5nZXRQdXNoRGVmYXVsdCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUHVzaENvbmZpZyBjZmcgPSBwYXJzZSgKKwkJCQkiW3B1c2hdXG5cdGRlZmF1bHQgPSB0cmFja2luZ1xuXHRyZWN1cnNlU3VibW9kdWxlcyA9IG9uLWRlbWFuZFxuIik7CisJCWFzc2VydEVxdWFscyhQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlLk9OX0RFTUFORCwKKwkJCQljZmcuZ2V0UmVjdXJzZVN1Ym1vZHVsZXMoKSk7CisJCWFzc2VydEVxdWFscyhQdXNoRGVmYXVsdC5VUFNUUkVBTSwgY2ZnLmdldFB1c2hEZWZhdWx0KCkpOworCX0KKworCXByaXZhdGUgc3RhdGljIFB1c2hDb25maWcgcGFyc2UoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBFeGNlcHRpb24geworCQlDb25maWcgYyA9IG5ldyBDb25maWcoKTsKKwkJYy5mcm9tVGV4dChjb250ZW50KTsKKwkJcmV0dXJuIGMuZ2V0KFB1c2hDb25maWc6Om5ldyk7CisJfQorCiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoUHJvY2Vzc1Rlc3QuamF2YQppbmRleCA2OTI4ODU5Li4yZThiMzBmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3NUZXN0LmphdmEKQEAgLTE0LDE0ICsxNCwxOSBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAoraW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5BYm9ydGVkQnlIb29rRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5UcmFuc3BvcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ob29rcy5QcmVQdXNoSG9vazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZFJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CkBAIC0zMSw2ICszNiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuVGV4dFByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QucmVzb3VyY2VzLlNhbXBsZURhdGFSZXBvc2l0b3J5VGVzdENhc2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVtb3RlUmVmVXBkYXRlLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8uTnVsbE91dHB1dFN0cmVhbTsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCkBAIC0yMjAsNyArMjI2LDE3IEBAIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVVbmV4cGVjdGVkUmVtb3RlVnNGb3JjZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCQkJCQkuZnJvbVN0cmluZygiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIpKTsKIAkJZmluYWwgUmVmIHJlZiA9IG5ldyBPYmplY3RJZFJlZi5VbnBlZWxlZChSZWYuU3RvcmFnZS5MT09TRSwgInJlZnMvaGVhZHMvbWFzdGVyIiwKIAkJCQlPYmplY3RJZC5mcm9tU3RyaW5nKCJhYzdlN2U0NGMxODg1ZWZiNDcyYWQ1NGE3ODMyN2Q2NmJmYzRlY2VmIikpOwotCQl0ZXN0T25lVXBkYXRlU3RhdHVzKHJydSwgcmVmLCBTdGF0dXMuUkVKRUNURURfUkVNT1RFX0NIQU5HRUQsIG51bGwpOworCQl0cnkgKEJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCQlQcmludFN0cmVhbSBvdXQgPSBuZXcgUHJpbnRTdHJlYW0oYnl0ZXMsIHRydWUsCisJCQkJCQlTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKKwkJCQlQcmludFN0cmVhbSBlcnIgPSBuZXcgUHJpbnRTdHJlYW0oTnVsbE91dHB1dFN0cmVhbS5JTlNUQU5DRSkpIHsKKwkJCU1vY2tQcmVQdXNoSG9vayBob29rID0gbmV3IE1vY2tQcmVQdXNoSG9vayhkYiwgb3V0LCBlcnIpOworCQkJdGVzdE9uZVVwZGF0ZVN0YXR1cyhycnUsIHJlZiwgU3RhdHVzLlJFSkVDVEVEX1JFTU9URV9DSEFOR0VELCBudWxsLAorCQkJCQlob29rKTsKKwkJCW91dC5mbHVzaCgpOworCQkJU3RyaW5nIHJlc3VsdCA9IG5ldyBTdHJpbmcoYnl0ZXMudG9TdHJpbmcoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworCQkJYXNzZXJ0RXF1YWxzKCIiLCByZXN1bHQpOworCQl9CiAJfQogCiAJLyoqCkBAIC0yNTYsMTAgKzI3MiwyMiBAQCBwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlTWl4ZWRDYXNlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXJlZlVwZGF0ZXMuYWRkKHJydU9rKTsKIAkJcmVmVXBkYXRlcy5hZGQocnJ1UmVqZWN0KTsKIAkJYWR2ZXJ0aXNlZFJlZnMuYWRkKHJlZlRvQ2hhbmdlKTsKLQkJZXhlY3V0ZVB1c2goKTsKLQkJYXNzZXJ0RXF1YWxzKFN0YXR1cy5PSywgcnJ1T2suZ2V0U3RhdHVzKCkpOwotCQlhc3NlcnRUcnVlKHJydU9rLmlzRmFzdEZvcndhcmQoKSk7Ci0JCWFzc2VydEVxdWFscyhTdGF0dXMuTk9OX0VYSVNUSU5HLCBycnVSZWplY3QuZ2V0U3RhdHVzKCkpOworCQl0cnkgKEJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCQlQcmludFN0cmVhbSBvdXQgPSBuZXcgUHJpbnRTdHJlYW0oYnl0ZXMsIHRydWUsCisJCQkJCQlTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKKwkJCQlQcmludFN0cmVhbSBlcnIgPSBuZXcgUHJpbnRTdHJlYW0oTnVsbE91dHB1dFN0cmVhbS5JTlNUQU5DRSkpIHsKKwkJCU1vY2tQcmVQdXNoSG9vayBob29rID0gbmV3IE1vY2tQcmVQdXNoSG9vayhkYiwgb3V0LCBlcnIpOworCQkJZXhlY3V0ZVB1c2goaG9vayk7CisJCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk9LLCBycnVPay5nZXRTdGF0dXMoKSk7CisJCQlhc3NlcnRUcnVlKHJydU9rLmlzRmFzdEZvcndhcmQoKSk7CisJCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk5PTl9FWElTVElORywgcnJ1UmVqZWN0LmdldFN0YXR1cygpKTsKKwkJCW91dC5mbHVzaCgpOworCQkJU3RyaW5nIHJlc3VsdCA9IG5ldyBTdHJpbmcoYnl0ZXMudG9TdHJpbmcoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworCQkJYXNzZXJ0RXF1YWxzKAorCQkJCQkibnVsbCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICIKKwkJCQkJCQkrICJyZWZzL2hlYWRzL21hc3RlciAyYzM0OTMzNWI3Zjc5NzA3MmNmNzI5YzRmM2JiMDkxNGVjYjZkZWM5XG4iLAorCQkJCQlyZXN1bHQpOworCQl9CiAJfQogCiAJLyoqCkBAIC0zNDYsMTAgKzM3NCwxOCBAQCBwcml2YXRlIFB1c2hSZXN1bHQgdGVzdE9uZVVwZGF0ZVN0YXR1cyhmaW5hbCBSZW1vdGVSZWZVcGRhdGUgcnJ1LAogCQkJZmluYWwgUmVmIGFkdmVydGlzZWRSZWYsIGZpbmFsIFN0YXR1cyBleHBlY3RlZFN0YXR1cywKIAkJCUJvb2xlYW4gZmFzdEZvcndhcmQpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24sCiAJCQlUcmFuc3BvcnRFeGNlcHRpb24geworCQlyZXR1cm4gdGVzdE9uZVVwZGF0ZVN0YXR1cyhycnUsIGFkdmVydGlzZWRSZWYsIGV4cGVjdGVkU3RhdHVzLAorCQkJCWZhc3RGb3J3YXJkLCBudWxsKTsKKwl9CisKKwlwcml2YXRlIFB1c2hSZXN1bHQgdGVzdE9uZVVwZGF0ZVN0YXR1cyhmaW5hbCBSZW1vdGVSZWZVcGRhdGUgcnJ1LAorCQkJZmluYWwgUmVmIGFkdmVydGlzZWRSZWYsIGZpbmFsIFN0YXR1cyBleHBlY3RlZFN0YXR1cywKKwkJCUJvb2xlYW4gZmFzdEZvcndhcmQsIFByZVB1c2hIb29rIGhvb2spCisJCQl0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24gewogCQlyZWZVcGRhdGVzLmFkZChycnUpOwogCQlpZiAoYWR2ZXJ0aXNlZFJlZiAhPSBudWxsKQogCQkJYWR2ZXJ0aXNlZFJlZnMuYWRkKGFkdmVydGlzZWRSZWYpOwotCQlmaW5hbCBQdXNoUmVzdWx0IHJlc3VsdCA9IGV4ZWN1dGVQdXNoKCk7CisJCWZpbmFsIFB1c2hSZXN1bHQgcmVzdWx0ID0gZXhlY3V0ZVB1c2goaG9vayk7CiAJCWFzc2VydEVxdWFscyhleHBlY3RlZFN0YXR1cywgcnJ1LmdldFN0YXR1cygpKTsKIAkJaWYgKGZhc3RGb3J3YXJkICE9IG51bGwpCiAJCQlhc3NlcnRFcXVhbHMoZmFzdEZvcndhcmQsIEJvb2xlYW4udmFsdWVPZihycnUuaXNGYXN0Rm9yd2FyZCgpKSk7CkBAIC0zNTgsNyArMzk0LDEyIEBAIHByaXZhdGUgUHVzaFJlc3VsdCB0ZXN0T25lVXBkYXRlU3RhdHVzKGZpbmFsIFJlbW90ZVJlZlVwZGF0ZSBycnUsCiAKIAlwcml2YXRlIFB1c2hSZXN1bHQgZXhlY3V0ZVB1c2goKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uLAogCQkJVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJcHJvY2VzcyA9IG5ldyBQdXNoUHJvY2Vzcyh0cmFuc3BvcnQsIHJlZlVwZGF0ZXMpOworCQlyZXR1cm4gZXhlY3V0ZVB1c2gobnVsbCk7CisJfQorCisJcHJpdmF0ZSBQdXNoUmVzdWx0IGV4ZWN1dGVQdXNoKFByZVB1c2hIb29rIGhvb2spCisJCQl0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24geworCQlwcm9jZXNzID0gbmV3IFB1c2hQcm9jZXNzKHRyYW5zcG9ydCwgcmVmVXBkYXRlcywgaG9vayk7CiAJCXJldHVybiBwcm9jZXNzLmV4ZWN1dGUobmV3IFRleHRQcm9ncmVzc01vbml0b3IoKSk7CiAJfQogCkBAIC00MTYsNCArNDU3LDIwIEBAIHB1YmxpYyB2b2lkIHB1c2goUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsCiAJCQl9CiAJCX0KIAl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrUHJlUHVzaEhvb2sgZXh0ZW5kcyBQcmVQdXNoSG9vayB7CisKKwkJcHJpdmF0ZSBmaW5hbCBQcmludFN0cmVhbSBvdXRwdXQ7CisKKwkJcHVibGljIE1vY2tQcmVQdXNoSG9vayhSZXBvc2l0b3J5IHJlcG8sIFByaW50U3RyZWFtIG91dCwKKwkJCQlQcmludFN0cmVhbSBlcnIpIHsKKwkJCXN1cGVyKHJlcG8sIG91dCwgZXJyKTsKKwkJCW91dHB1dCA9IG91dDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBkb1J1bigpIHRocm93cyBBYm9ydGVkQnlIb29rRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCQlvdXRwdXQucHJpbnQoZ2V0U3RkaW5BcmdzKCkpOworCQl9CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWNlaXZlUGFja0FkdmVydGlzZVJlZnNIb29rVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWNlaXZlUGFja0FkdmVydGlzZVJlZnNIb29rVGVzdC5qYXZhCmluZGV4IGQxZTU0NDYuLmE5MWJjOTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVjZWl2ZVBhY2tBZHZlcnRpc2VSZWZzSG9va1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlY2VpdmVQYWNrQWR2ZXJ0aXNlUmVmc0hvb2tUZXN0LmphdmEKQEAgLTczLDExICs3MywxNCBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlzdXBlci5zZXRVcCgpOwogCiAJCXNyYyA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKHNyYyk7CiAJCWRzdCA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGRzdCk7CiAKIAkJLy8gRmlsbCBkc3Qgd2l0aCBhIHNvbWUgY29tbW9uIGhpc3RvcnkuCiAJCS8vCiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGRzdCkpIHsKKwkJCWRzdC5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhID0gZC5ibG9iKCJhIik7CiAJCQlBID0gZC5jb21taXQoZC50cmVlKGQuZmlsZSgiYSIsIGEpKSk7CiAJCQlCID0gZC5jb21taXQoKS5wYXJlbnQoQSkuY3JlYXRlKCk7CkBAIC0xMDYsOSArMTA5LDYgQEAgcHVibGljIHZvaWQgdGVzdEZpbHRlckhpZGVzUHJpdmF0ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJCWRzdC5nZXREaXJlY3RvcnkoKSkgewogCQkJQE92ZXJyaWRlCiAJCQlSZWNlaXZlUGFjayBjcmVhdGVSZWNlaXZlUGFjayhSZXBvc2l0b3J5IGRiKSB7Ci0JCQkJZGIuY2xvc2UoKTsKLQkJCQlkc3QuaW5jcmVtZW50T3BlbigpOwotCiAJCQkJZmluYWwgUmVjZWl2ZVBhY2sgcnAgPSBzdXBlci5jcmVhdGVSZWNlaXZlUGFjayhkc3QpOwogCQkJCXJwLnNldEFkdmVydGlzZVJlZnNIb29rKG5ldyBIaWRlUHJpdmF0ZUhvb2soKSk7CiAJCQkJcmV0dXJuIHJwOwpAQCAtMTM2LDggKzEzNiw2IEBAIHB1YmxpYyB2b2lkIHJlc2V0c0hhdmVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJZHN0LmdldERpcmVjdG9yeSgpKSB7CiAJCQlAT3ZlcnJpZGUKIAkJCVJlY2VpdmVQYWNrIGNyZWF0ZVJlY2VpdmVQYWNrKFJlcG9zaXRvcnkgZGIpIHsKLQkJCQlkc3QuaW5jcmVtZW50T3BlbigpOwotCiAJCQkJUmVjZWl2ZVBhY2sgcnAgPSBzdXBlci5jcmVhdGVSZWNlaXZlUGFjayhkc3QpOwogCQkJCXJwLnNldEFkdmVydGlzZVJlZnNIb29rKG5ldyBBZHZlcnRpc2VSZWZzSG9vaygpIHsKIAkJCQkJQE92ZXJyaWRlCkBAIC0xNzMsOSArMTcxLDYgQEAgcHJpdmF0ZSBUcmFuc3BvcnRMb2NhbCBuZXdUcmFuc3BvcnRMb2NhbFdpdGhTdHJpY3RWYWxpZGF0aW9uKCkKIAkJcmV0dXJuIG5ldyBUcmFuc3BvcnRMb2NhbChzcmMsIHVyaU9mKGRzdCksIGRzdC5nZXREaXJlY3RvcnkoKSkgewogCQkJQE92ZXJyaWRlCiAJCQlSZWNlaXZlUGFjayBjcmVhdGVSZWNlaXZlUGFjayhSZXBvc2l0b3J5IGRiKSB7Ci0JCQkJZGIuY2xvc2UoKTsKLQkJCQlkc3QuaW5jcmVtZW50T3BlbigpOwotCiAJCQkJZmluYWwgUmVjZWl2ZVBhY2sgcnAgPSBzdXBlci5jcmVhdGVSZWNlaXZlUGFjayhkc3QpOwogCQkJCXJwLnNldENoZWNrUmVjZWl2ZWRPYmplY3RzKHRydWUpOwogCQkJCXJwLnNldENoZWNrUmVmZXJlbmNlZE9iamVjdHNBcmVSZWFjaGFibGUodHJ1ZSk7CkBAIC0yMTEsNiArMjA2LDcgQEAgcHVibGljIHZvaWQgdGVzdFN1Y2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gTm93IHVzZSBiIGJ1dCBpbiBhIGRpZmZlcmVudCBjb21taXQgdGhhbiB3aGF0IGlzIGhpZGRlbi4KIAkJLy8KIAkJdHJ5IChUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBzID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oc3JjKSkgeworCQkJc3JjLmluY3JlbWVudE9wZW4oKTsKIAkJCVJldkNvbW1pdCBOID0gcy5jb21taXQoKS5wYXJlbnQoQikuYWRkKCJxIiwgYikuY3JlYXRlKCk7CiAJCQlzLnVwZGF0ZShSX01BU1RFUiwgTik7CiAKQEAgLTIyOCw3ICsyMjQsNiBAQCBwdWJsaWMgdm9pZCB0ZXN0U3VjY2VzcygpIHRocm93cyBFeGNlcHRpb24gewogCQkJdHJ5IChUcmFuc3BvcnRMb2NhbCB0ID0gbmV3VHJhbnNwb3J0TG9jYWxXaXRoU3RyaWN0VmFsaWRhdGlvbigpKSB7CiAJCQkJdC5zZXRQdXNoVGhpbih0cnVlKTsKIAkJCQlyID0gdC5wdXNoKFBNLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24odSkpOwotCQkJCWRzdC5jbG9zZSgpOwogCQkJfQogCiAJCQlhc3NlcnROb3ROdWxsKCJoYXZlIHJlc3VsdCIsIHIpOwpAQCAtMjkwLDYgKzI4NSw3IEBAIHByaXZhdGUgc3RhdGljIHZvaWQgcmVjZWl2ZShmaW5hbCBSZWNlaXZlUGFjayBycCwKIAlwdWJsaWMgdm9pZCB0ZXN0VXNpbmdIaWRkZW5EZWx0YUJhc2VGYWlscygpIHRocm93cyBFeGNlcHRpb24gewogCQlieXRlW10gZGVsdGEgPSB7IDB4MSwgMHgxLCAweDEsICdjJyB9OwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IHMgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihzcmMpKSB7CisJCQlzcmMuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKQogCQkJCQkuYWRkKCJxIiwKIAkJCQkJCQlzLmJsb2IoQmluYXJ5RGVsdGEuYXBwbHkoCkBAIC0zNDgsNiArMzQ0LDcgQEAgcHVibGljIHZvaWQgdGVzdFVzaW5nSGlkZGVuQ29tbW9uQmxvYkZhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIFRyeSB0byB1c2UgdGhlICdiJyBibG9iIHRoYXQgaXMgaGlkZGVuLgogCQkvLwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IHMgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihzcmMpKSB7CisJCQlzcmMuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKS5hZGQoInEiLCBzLmJsb2IoImIiKSkuY3JlYXRlKCk7CiAKIAkJCS8vIEJ1dCBkb24ndCBpbmNsdWRlIGl0IGluIHRoZSBwYWNrLgpAQCAtNDAxLDYgKzM5OCw3IEBAIHB1YmxpYyB2b2lkIHRlc3RVc2luZ1Vua25vd25CbG9iRmFpbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVHJ5IHRvIHVzZSB0aGUgJ24nIGJsb2IgdGhhdCBpcyBub3Qgb24gdGhlIHNlcnZlci4KIAkJLy8KIAkJdHJ5IChUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBzID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oc3JjKSkgeworCQkJc3JjLmluY3JlbWVudE9wZW4oKTsKIAkJCVJldkJsb2IgbiA9IHMuYmxvYigibiIpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKS5hZGQoInEiLCBuKS5jcmVhdGUoKTsKIApAQCAtNDkxLDYgKzQ4OSw3IEBAIHByaXZhdGUgVGVtcG9yYXJ5QnVmZmVyLkhlYXAgc2V0dXBTb3VyY2VSZXBvSW52YWxpZEdpdG1vZHVsZXMoKQogCQkJCS50b1N0cmluZygpOwogCiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gcyA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KHNyYykpIHsKKwkJCXNyYy5pbmNyZW1lbnRPcGVuKCk7CiAJCQlSZXZCbG9iIGJsb2IgPSBzLmJsb2IoZmFrZUdpdG1vZHVsZXMpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKS5hZGQoIi5naXRtb2R1bGVzIiwgYmxvYikKIAkJCQkJLmNyZWF0ZSgpOwpAQCAtNTE3LDYgKzUxNiw3IEBAIHByaXZhdGUgVGVtcG9yYXJ5QnVmZmVyLkhlYXAgc2V0dXBTb3VyY2VSZXBvSW52YWxpZEdpdG1vZHVsZXMoKQogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFVzaW5nVW5rbm93blRyZWVGYWlscygpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IHMgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihzcmMpKSB7CisJCQlzcmMuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKS5hZGQoInEiLCBzLmJsb2IoImEiKSkuY3JlYXRlKCk7CiAJCQlSZXZUcmVlIHQgPSBzLnBhcnNlQm9keShOKS5nZXRUcmVlKCk7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlY1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlY1Rlc3QuamF2YQppbmRleCA1NTY5YmNhLi5iNTYzMDhjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlZlNwZWNUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjVGVzdC5qYXZhCkBAIC00NjYsNCArNDY2LDE4IEBAIHB1YmxpYyB2b2lkIG9ubHlXaWxkQ2FyZCgpIHsKIAkJYXNzZXJ0VHJ1ZShhLm1hdGNoU291cmNlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKIAkJYXNzZXJ0TnVsbChhLmdldERlc3RpbmF0aW9uKCkpOwogCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgbWF0Y2hpbmcoKSB7CisJCVJlZlNwZWMgYSA9IG5ldyBSZWZTcGVjKCI6Iik7CisJCWFzc2VydFRydWUoYS5pc01hdGNoaW5nKCkpOworCQlhc3NlcnRGYWxzZShhLmlzRm9yY2VVcGRhdGUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBtYXRjaGluZ0ZvcmNlZCgpIHsKKwkJUmVmU3BlYyBhID0gbmV3IFJlZlNwZWMoIis6Iik7CisJCWFzc2VydFRydWUoYS5pc01hdGNoaW5nKCkpOworCQlhc3NlcnRUcnVlKGEuaXNGb3JjZVVwZGF0ZSgpKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9GaWx0ZXJDb21tYW5kc1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbHRlckNvbW1hbmRzVGVzdC5qYXZhCmluZGV4IDM2Zjk0ZmIuLjg5ZDMxYzMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbHRlckNvbW1hbmRzVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbHRlckNvbW1hbmRzVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiwgQ2hyaXN0aWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjIgQ2hyaXN0aWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xMCwxMiArMTAsMTcgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC51dGlsOwogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogCitpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLk1lcmdlUmVzdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkZpbHRlckNvbW1hbmQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkZpbHRlckNvbW1hbmRGYWN0b3J5OwpAQCAtODYsNiArOTEsMTQgQEAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIlNlY29uZCBjb21taXQiKS5jYWxsKCk7CiAJfQogCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU2V0PFN0cmluZz4gZXhpc3RpbmdGaWx0ZXJzID0gbmV3IEhhc2hTZXQ8PigKKwkJCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZEZpbHRlckNvbW1hbmRzKCkpOworCQlleGlzdGluZ0ZpbHRlcnMuZm9yRWFjaChGaWx0ZXJDb21tYW5kUmVnaXN0cnk6OnVucmVnaXN0ZXIpOworCQlzdXBlci50ZWFyRG93bigpOworCX0KKwogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEJ1aWx0aW5DbGVhbkZpbHRlcigpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7CkBAIC0yMTcsNCArMjMwLDEzMyBAQCBwdWJsaWMgdm9pZCB0ZXN0QnVpbHRpbkNsZWFuQW5kU211ZGdlRmlsdGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpbwogCQljb25maWcuc2F2ZSgpOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJyYW5jaFN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgYnVpbHRpbkNvbW1hbmRQcmVmaXggPSAiamdpdDovL2J1aWx0aW4vdGVzdC8iOworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAic211ZGdlIiwKKwkJCQluZXcgVGVzdENvbW1hbmRGYWN0b3J5KCdzJykpOworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAiY2xlYW4iLAorCQkJCW5ldyBUZXN0Q29tbWFuZEZhY3RvcnkoJ2MnKSk7CisJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQljb25maWcuc2V0U3RyaW5nKCJmaWx0ZXIiLCAidGVzdCIsICJzbXVkZ2UiLAorCQkJCWJ1aWx0aW5Db21tYW5kUHJlZml4ICsgInNtdWRnZSIpOworCQljb25maWcuc2V0U3RyaW5nKCJmaWx0ZXIiLCAidGVzdCIsICJjbGVhbiIsCisJCQkJYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAiY2xlYW4iKTsKKwkJY29uZmlnLnNhdmUoKTsKKwkJLy8gV2UncmUgb24gdGhlIHRlc3QgYnJhbmNoCisJCUZpbGUgYUZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiYSIpOworCQl3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLCAiYS50eHQgZmlsdGVyPXRlc3QiKTsKKwkJRmlsZSBjRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJjYy9jLnR4dCIsICJDIik7CisJCXdyaXRlVHJhc2hGaWxlKCJjYy8uZ2l0YXR0cmlidXRlcyIsICJjLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiB0ZXN0IikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCWdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgib3RoZXIiKS5jYWxsKCk7CisJCXdyaXRlVHJhc2hGaWxlKCJiLnR4dCIsICJiIik7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJiLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiBvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgidGVzdCIpLmNhbGwoKTsKKwkJY2hlY2tGaWxlKGFGaWxlLCAic2NzYSIpOworCQljaGVja0ZpbGUoY0ZpbGUsICJzY3NDIik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRTaW5nbGVGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBidWlsdGluQ29tbWFuZFByZWZpeCA9ICJqZ2l0Oi8vYnVpbHRpbi90ZXN0LyI7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiLAorCQkJCW5ldyBUZXN0Q29tbWFuZEZhY3RvcnkoJ3MnKSk7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgnYycpKTsKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgInNtdWRnZSIsCisJCQkJYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAic211ZGdlIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgImNsZWFuIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIpOworCQljb25maWcuc2F2ZSgpOworCQkvLyBXZSdyZSBvbiB0aGUgdGVzdCBicmFuY2gKKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLnR4dCIsICJhIik7CisJCUZpbGUgYXR0cmlidXRlcyA9IHdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiB0ZXN0IikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCWdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgib3RoZXIiKS5jYWxsKCk7CisJCXdyaXRlVHJhc2hGaWxlKCJiLnR4dCIsICJiIik7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJiLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiBvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQlhc3NlcnRGYWxzZShhRmlsZS5leGlzdHMoKSk7CisJCWFzc2VydEZhbHNlKGF0dHJpYnV0ZXMuZXhpc3RzKCkpOworCQlnaXQuY2hlY2tvdXQoKS5zZXRTdGFydFBvaW50KCJ0ZXN0IikuYWRkUGF0aCgiYS50eHQiKS5jYWxsKCk7CisJCWNoZWNrRmlsZShhRmlsZSwgInNjc2EiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFNpbmdsZUZpbGUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBidWlsdGluQ29tbWFuZFByZWZpeCA9ICJqZ2l0Oi8vYnVpbHRpbi90ZXN0LyI7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiLAorCQkJCW5ldyBUZXN0Q29tbWFuZEZhY3RvcnkoJ3MnKSk7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgnYycpKTsKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgInNtdWRnZSIsCisJCQkJYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAic211ZGdlIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgImNsZWFuIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIpOworCQljb25maWcuc2F2ZSgpOworCQkvLyBXZSdyZSBvbiB0aGUgdGVzdCBicmFuY2gKKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLnR4dCIsICJhIik7CisJCUZpbGUgYXR0cmlidXRlcyA9IHdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiB0ZXN0IikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCWdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgib3RoZXIiKS5jYWxsKCk7CisJCXdyaXRlVHJhc2hGaWxlKCJiLnR4dCIsICJiIik7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJiLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPbiBvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQlhc3NlcnRGYWxzZShhRmlsZS5leGlzdHMoKSk7CisJCWFzc2VydEZhbHNlKGF0dHJpYnV0ZXMuZXhpc3RzKCkpOworCQl3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLCAiIik7CisJCWdpdC5jaGVja291dCgpLnNldFN0YXJ0UG9pbnQoInRlc3QiKS5hZGRQYXRoKCJhLnR4dCIpLmNhbGwoKTsKKwkJY2hlY2tGaWxlKGFGaWxlLCAic2NzYSIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE1lcmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBidWlsdGluQ29tbWFuZFByZWZpeCA9ICJqZ2l0Oi8vYnVpbHRpbi90ZXN0LyI7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiLAorCQkJCW5ldyBUZXN0Q29tbWFuZEZhY3RvcnkoJ3MnKSk7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgnYycpKTsKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgInNtdWRnZSIsCisJCQkJYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAic211ZGdlIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgImNsZWFuIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIpOworCQljb25maWcuc2F2ZSgpOworCQkvLyBXZSdyZSBvbiB0aGUgdGVzdCBicmFuY2guIFNldCB1cCB0d28gYnJhbmNoZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KKwkJLy8gbWVyZ2UgY2xlYW5seS4KKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLnR4dCIsICJhIik7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCVJldkNvbW1pdCBhQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIHRlc3QiKS5jYWxsKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJYXNzZXJ0RmFsc2UoYUZpbGUuZXhpc3RzKCkpOworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgib3RoZXIiKS5jYWxsKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm90aGVyIikuY2FsbCgpOworCQl3cml0ZVRyYXNoRmlsZSgiYi9iLnR4dCIsICJiIik7CisJCXdyaXRlVHJhc2hGaWxlKCJiLy5naXRhdHRyaWJ1dGVzIiwgImIudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIG90aGVyIikuY2FsbCgpOworCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKGFDb21taXQpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKE1lcmdlUmVzdWx0Lk1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCQljaGVja0ZpbGUoYUZpbGUsICJzY3NhIik7CisJfQorCiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA1N2E4YmVlLi43YmFhMjE1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTQsMTQgKzQsMTQgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC51aQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC51aQotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249IjYuMC4xIgotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSI2LjEuMSIKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCAzMzVjMTU3Li43NWYzZDIxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnVpIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC51aS5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQudWk7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnVpO3ZlcnNpb249IjYuMS4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL3BvbS54bWwKaW5kZXggYzRhM2UyYS4uMTI1ZTEyMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC51aS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudWk8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMgYi9vcmcuZWNsaXBzZS5qZ2l0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExYzM2MAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpAQCAtMCwwICsxLDI5MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8Y29tcG9uZW50IGlkPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSIyIj4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0dhcmJhZ2VDb2xsZWN0Q29tbWFuZC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmFwaS5HYXJiYWdlQ29sbGVjdENvbW1hbmQiPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4zIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldFBhY2tLZXB0T2JqZWN0cyhib29sZWFuKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvZXJyb3JzL05vUmVtb3RlUmVwb3NpdG9yeUV4Y2VwdGlvbi5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb24iPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4xIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Ik5vUmVtb3RlUmVwb3NpdG9yeUV4Y2VwdGlvbihVUklpc2gsIFN0cmluZywgVGhyb3dhYmxlKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvZXJyb3JzL1BhY2tNaXNtYXRjaEV4Y2VwdGlvbi5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5QYWNrTWlzbWF0Y2hFeGNlcHRpb24iPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS45LjEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iaXNQZXJtYW5lbnQoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjkuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRQZXJtYW5lbnQoYm9vbGVhbikiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdDb25zdGFudHMuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMTE0Mjk0Nzg0MyI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IjUuMTMuMiIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT05GSUdfS0VZX0JJVE1BUF9FWENMVURFRF9SRUZTX1BSRUZJWEVTIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iMTE0Mjk0Nzg0MyI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IjUuMTMuMiIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT05GSUdfS0VZX1BSRVNFUlZFX09MRF9QQUNLUyIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iQ09ORklHX0tFWV9QUlVORV9QUkVTRVJWRUQiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkNPTkZJR19LRVlfU0tJUEhBU0giLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IlNIQTFfSU1QTEVNRU5UQVRJT04iLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4zIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkNPTkZJR19LRVlfUEFDS19LRVBUX09CSkVDVFMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4zIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkNPTkZJR19SRVBBQ0tfU0VDVElPTiIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjEuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT05GSUdfS0VZX1RSVVNUX1BBQ0tFRF9SRUZTX1NUQVQiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db3JlQ29uZmlnLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWckVHJ1c3RQYWNrZWRSZWZzU3RhdCI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjEuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJUcnVzdFBhY2tlZFJlZnNTdGF0Ii8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0RGF0YWJhc2UuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0RGF0YWJhc2UiPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2OTUzMzciPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3REYXRhYmFzZSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZXBvc2l0b3J5LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnkiPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldFJlZmxvZ1JlYWRlcihSZWYpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvVHlwZWRDb25maWdHZXR0ZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuVHlwZWRDb25maWdHZXR0ZXIiPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MDM3NjczMzYiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJVTlNFVF9JTlQiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRJbnRJblJhbmdlKENvbmZpZywgU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgaW50LCBpbnQsIGludCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImFkZENoZWNrb3V0TWV0YWRhdGEoU3RyaW5nLCBBdHRyaWJ1dGVzKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhZGRUb0NoZWNrb3V0KFN0cmluZywgRGlyQ2FjaGVFbnRyeSwgQXR0cmlidXRlcykiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3OTI1NDYiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLlJlc29sdmVNZXJnZXIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0icHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIsIENhbm9uaWNhbFRyZWVQYXJzZXIsIENhbm9uaWNhbFRyZWVQYXJzZXIsIERpckNhY2hlQnVpbGRJdGVyYXRvciwgV29ya2luZ1RyZWVJdGVyYXRvciwgYm9vbGVhbiwgQXR0cmlidXRlcykiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3N0b3JhZ2UvcGFjay9QYWNrQ29uZmlnLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLlBhY2tDb25maWciPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2NTg0ODEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjay5QYWNrQ29uZmlnIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkRFRkFVTFRfQklUTUFQX0VYQ0xVREVEX1JFRlNfUFJFRklYRVMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2NTg0ODEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjay5QYWNrQ29uZmlnIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkRFRkFVTFRfUEFDS19LRVBUX09CSkVDVFMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkRFRkFVTFRfQklUTUFQX0VYQ0xVREVEX1JFRlNfUFJFRklYRVMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldEJpdG1hcEV4Y2x1ZGVkUmVmc1ByZWZpeGVzKCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldEJpdG1hcEV4Y2x1ZGVkUmVmc1ByZWZpeGVzKFN0cmluZ1tdKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjMiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iREVGQVVMVF9QQUNLX0tFUFRfT0JKRUNUUyIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjMiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iaXNQYWNrS2VwdE9iamVjdHMoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjMiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0UGFja0tlcHRPYmplY3RzKGJvb2xlYW4pIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQXdzUmVxdWVzdFNpZ25lclY0LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LkF3c1JlcXVlc3RTaWduZXJWNCI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExMDkzOTM0MTEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuQXdzUmVxdWVzdFNpZ25lclY0Ii8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQmFzZVBhY2tQdXNoQ29ubmVjdGlvbi5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5CYXNlUGFja1B1c2hDb25uZWN0aW9uIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuQmFzZVBhY2tQdXNoQ29ubmVjdGlvbiIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJub1JlcG9zaXRvcnkoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWcuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENvbmZpZyI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjMzODcyMjkwNyI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25maWciLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iUHVzaENvbmZpZygpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydCI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idXJsRW5jb2RlKFN0cmluZywgYm9vbGVhbikiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvc2hhMS9TSEExLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzc3NjQ0MTgiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkaWdlc3QoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGlnZXN0KE11dGFibGVPYmplY3RJZCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTA1NDkiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Imhhc0NvbGxpc2lvbigpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJyZXNldCgpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXREZXRlY3RDb2xsaXNpb24oYm9vbGVhbikiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTA1NDkiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InRvT2JqZWN0SWQoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idXBkYXRlKGJ5dGUpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ1cGRhdGUoYnl0ZVtdKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idXBkYXRlKGJ5dGVbXSwgaW50LCBpbnQpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL3NoYTEvU0hBMS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExJFNoYTFJbXBsZW1lbnRhdGlvbiI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iU2hhMUltcGxlbWVudGF0aW9uIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4N2I1OGUxLi44MDhkNWQzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTIgKzMsMTIgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogRWNsaXBzZS1FeHRlbnNpYmxlQVBJOiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5ub3RlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCkBAIC0yMywxOCArMjMsMTggQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lLAogICAgb3JnLmVjbGlwc2UuamdpdC5tZXJnZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycyIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtNDIsNDQgKzQyLDQ4IEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5ldmVudHMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAotIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcueG1sLnNheC5oZWxwZXJzLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGksCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy54bWwuc2F4IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSI2LjAuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249IjYuMS4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAorIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDt2ZXJzaW9uPSI2LjEuMSI7CisgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKKyAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QsCisgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5mc2NrO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwucmV2d2Fsazt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAsCkBAIC04OCwzMiArOTIsMzIgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0LAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdWJtb2R1bGU7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuY29ubmVjdGl2aXR5O3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN1Ym1vZHVsZTt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5jb25uZWN0aXZpdHk7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMSwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCkBAIC0xMjcsMTAgKzEzMSwxMSBAQAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLAogICAgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiOwotICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiOworICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCisgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCisgb3JnLmVjbGlwc2UuamdpdC5sb2dnaW5nO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKQEAgLTEzOSw0MCArMTQ0LDQwIEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcyIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UiLAotIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlmZiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbCIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN1Ym1vZHVsZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJqYXZheC5jcnlwdG8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKQEAgLTE4NSwyMSArMTkwLDIxIEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLAogICAgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0iamF2YXgubmV0LnNzbCIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaG9va3MsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCkBAIC0yMTIsMTIgKzIxNywxMiBAQAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2FsaywKICAgIGphdmF4Lm5ldC5zc2wsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWU7dmVyc2lvbj0iNi4wLjEiCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTE7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249IjYuMS4xIgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQogSW1wb3J0LVBhY2thZ2U6IGNvbS5nb29nbGVjb2RlLmphdmFld2FoO3ZlcnNpb249IlsxLjEuNiwyLjAuMCkiLAogIGphdmF4LmNyeXB0bywKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggMzAyYzQ1NC4uMzNlNjE1NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdCAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0O3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdDt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sCmluZGV4IGU3ODIyNzIuLmYwZTkyYjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3BvbS54bWwKQEAgLTIwLDcgKzIwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5wcm9wZXJ0aWVzCmluZGV4IGM4ODdjNmQuLjU1MzRhMGEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMKQEAgLTM1OSw2ICszNTksOCBAQAogaW5NZW1vcnlCdWZmZXJMaW1pdEV4Y2VlZGVkPUluLW1lbW9yeSBidWZmZXIgbGltaXQgZXhjZWVkZWQKIGlucHV0RGlkbnRNYXRjaExlbmd0aD1JbnB1dCBkaWQgbm90IG1hdGNoIHN1cHBsaWVkIGxlbmd0aC4gezB9IGJ5dGVzIGFyZSBtaXNzaW5nLgogaW5wdXRTdHJlYW1NdXN0U3VwcG9ydE1hcms9SW5wdXRTdHJlYW0gbXVzdCBzdXBwb3J0IG1hcmsoKQoraW50ZWdlclZhbHVlTm90SW5SYW5nZT1JbnRlZ2VyIHZhbHVlIHswfS57MX0gPSB7Mn0gbm90IGluIHJhbmdlIHszfS4uezR9CitpbnRlZ2VyVmFsdWVOb3RJblJhbmdlU3ViU2VjdGlvbj1JbnRlZ2VyIHZhbHVlIHswfS57MX0uezJ9ID0gezN9IG5vdCBpbiByYW5nZSB7NH0uLns1fQogaW50ZWdlclZhbHVlT3V0T2ZSYW5nZT1JbnRlZ2VyIHZhbHVlIHswfS57MX0gb3V0IG9mIHJhbmdlCiBpbnRlcm5hbFJldmlzaW9uRXJyb3I9aW50ZXJuYWwgcmV2aXNpb24gZXJyb3IKIGludGVybmFsU2VydmVyRXJyb3I9aW50ZXJuYWwgc2VydmVyIGVycm9yCkBAIC0zNzAsNiArMzcyLDcgQEAKIGludmFsaWRCb29sZWFuVmFsdWU9SW52YWxpZCBib29sZWFuIHZhbHVlOiB7MH0uezF9PXsyfQogaW52YWxpZENoYW5uZWw9SW52YWxpZCBjaGFubmVsIHswfQogaW52YWxpZENvbW1pdFBhcmVudE51bWJlcj1JbnZhbGlkIGNvbW1pdCBwYXJlbnQgbnVtYmVyCitpbnZhbGlkQ29yZUFiYnJldj1JbnZhbGlkIHZhbHVlIHswfSBvZiBvcHRpb24gY29yZS5hYmJyZXYKIGludmFsaWREZXB0aD1JbnZhbGlkIGRlcHRoOiB7MH0KIGludmFsaWRFbmNvZGluZz1JbnZhbGlkIGVuY29kaW5nIGZyb20gZ2l0IGNvbmZpZyBpMThuLmNvbW1pdEVuY29kaW5nOiB7MH0KIGludmFsaWRFbmNyeXB0aW9uPUludmFsaWQgZW5jcnlwdGlvbgpAQCAtNTcxLDYgKzU3NCwxMSBAQAogcHVzaENlcnRpZmljYXRlSW52YWxpZEZpZWxkVmFsdWU9UHVzaCBjZXJ0aWZpY2F0ZSBoYXMgbWlzc2luZyBvciBpbnZhbGlkIHZhbHVlIGZvciB7MH06IHsxfQogcHVzaENlcnRpZmljYXRlSW52YWxpZEhlYWRlcj1QdXNoIGNlcnRpZmljYXRlIGhhcyBpbnZhbGlkIGhlYWRlciBmb3JtYXQKIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRTaWduYXR1cmU9UHVzaCBjZXJ0aWZpY2F0ZSBoYXMgaW52YWxpZCBzaWduYXR1cmUgZm9ybWF0CitwdXNoRGVmYXVsdE5vdGhpbmc9Tm8gcmVmc3BlYyBnaXZlbiBhbmQgcHVzaC5kZWZhdWx0PW5vdGhpbmc7IG5vIHVwc3RyZWFtIGJyYW5jaCBjYW4gYmUgZGV0ZXJtaW5lZAorcHVzaERlZmF1bHROb1Vwc3RyZWFtPU5vIHVwc3RyZWFtIGJyYW5jaCBmb3VuZCBmb3IgbG9jYWwgYnJhbmNoICcnezB9JycKK3B1c2hEZWZhdWx0U2ltcGxlPXB1c2guZGVmYXVsdD1zaW1wbGUgcmVxdWlyZXMgbG9jYWwgYnJhbmNoIG5hbWUgJyd7MH0nJyB0byBiZSBlcXVhbCB0byB1cHN0cmVhbSB0cmFja2VkIGJyYW5jaCBuYW1lICcnezF9JycKK3B1c2hEZWZhdWx0VHJpYW5ndWxhclVwc3RyZWFtPXB1c2guZGVmYXVsdD11cHN0cmVhbSBjYW5ub3QgYmUgdXNlZCB3aGVuIHRoZSBwdXNoIHJlbW90ZSAnJ3swfScnIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmZXRjaCByZW1vdGUgJyd7MX0nJworcHVzaERlZmF1bHRVbmtub3duPVVua25vd24gcHVzaC5kZWZhdWx0PXswfTsgY2Fubm90IHB1c2gKIHB1c2hJc05vdFN1cHBvcnRlZEZvckJ1bmRsZVRyYW5zcG9ydD1QdXNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGJ1bmRsZSB0cmFuc3BvcnQKIHB1c2hOb3RQZXJtaXR0ZWQ9cHVzaCBub3QgcGVybWl0dGVkCiBwdXNoT3B0aW9uc05vdFN1cHBvcnRlZD1QdXNoIG9wdGlvbnMgbm90IHN1cHBvcnRlZDsgcmVjZWl2ZWQgezB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YQppbmRleCA3OTIyZjllLi5mODgxNzlhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kLmphdmEKQEAgLTksNiArOSw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hcGk7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CkBAIC0xMjQsNyArMTI2LDcgQEAgcHVibGljIENoZXJyeVBpY2tSZXN1bHQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIE5vTWVzc2FnZUV4Y2VwdGlvbiwKIAkJCQlmaW5hbCBSZXZDb21taXQgc3JjUGFyZW50ID0gZ2V0UGFyZW50Q29tbWl0KHNyY0NvbW1pdCwgcmV2V2Fsayk7CiAKIAkJCQlTdHJpbmcgb3VyTmFtZSA9IGNhbGN1bGF0ZU91ck5hbWUoaGVhZFJlZik7Ci0JCQkJU3RyaW5nIGNoZXJyeVBpY2tOYW1lID0gc3JjQ29tbWl0LmdldElkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkKKwkJCQlTdHJpbmcgY2hlcnJ5UGlja05hbWUgPSBzcmNDb21taXQuZ2V0SWQoKS5hYmJyZXZpYXRlKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkubmFtZSgpCiAJCQkJCQkrICIgIiArIHNyY0NvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKTsgLy8kTk9OLU5MUy0xJAogCiAJCQkJTWVyZ2VyIG1lcmdlciA9IHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvKTsKQEAgLTE4Myw3ICsxODUsNyBAQCBwdWJsaWMgQ2hlcnJ5UGlja1Jlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgTm9NZXNzYWdlRXhjZXB0aW9uLAogCQkJCQlpZiAodW5tZXJnZWRQYXRocyAhPSBudWxsKSB7CiAJCQkJCQltZXNzYWdlID0gbmV3IE1lcmdlTWVzc2FnZUZvcm1hdHRlcigpCiAJCQkJCQkJLmZvcm1hdFdpdGhDb25mbGljdHMoc3JjQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCksCi0JCQkJCQkJCQkJdW5tZXJnZWRQYXRocyk7CisJCQkJCQkJCQkJdW5tZXJnZWRQYXRocywgJyMnKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCW1lc3NhZ2UgPSBzcmNDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKTsKIAkJCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZC5qYXZhCmluZGV4IDM3ZjFkNDguLjdhNTkxYWEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQ2FuY2VsZWRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkNvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb247CkBAIC00Niw2ICs0Nyw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ob29rcy5QcmVDb21taXRIb29rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0Q29uZmlnLkNsZWFudXBNb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5HcGdDb25maWc7CkBAIC0xMzMsNiArMTM2LDEyIEBAIHB1YmxpYyBjbGFzcyBDb21taXRDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxSZXZDb21taXQ+IHsKIAogCXByaXZhdGUgQ3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyOwogCisJcHJpdmF0ZSBATm9uTnVsbCBDbGVhbnVwTW9kZSBjbGVhbnVwTW9kZSA9IENsZWFudXBNb2RlLlZFUkJBVElNOworCisJcHJpdmF0ZSBib29sZWFuIGNsZWFuRGVmYXVsdElzU3RyaXAgPSB0cnVlOworCisJcHJpdmF0ZSBDaGFyYWN0ZXIgY29tbWVudENoYXI7CisKIAkvKioKIAkgKiBDb25zdHJ1Y3RvciBmb3IgQ29tbWl0Q29tbWFuZAogCSAqCkBAIC0yMDAsNyArMjA5LDcgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbiwKIAkJCQl0aHJvdyBuZXcgV3JvbmdSZXBvc2l0b3J5U3RhdGVFeGNlcHRpb24oCiAJCQkJCQlKR2l0VGV4dC5nZXQoKS5jb21taXRBbWVuZE9uSW5pdGlhbE5vdFBvc3NpYmxlKTsKIAotCQkJaWYgKGhlYWRJZCAhPSBudWxsKQorCQkJaWYgKGhlYWRJZCAhPSBudWxsKSB7CiAJCQkJaWYgKGFtZW5kKSB7CiAJCQkJCVJldkNvbW1pdCBwcmV2aW91c0NvbW1pdCA9IHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCk7CiAJCQkJCWZvciAoUmV2Q29tbWl0IHAgOiBwcmV2aW91c0NvbW1pdC5nZXRQYXJlbnRzKCkpCkBAIC0yMTAsNyArMjE5LDcgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbiwKIAkJCQl9IGVsc2UgewogCQkJCQlwYXJlbnRzLmFkZCgwLCBoZWFkSWQpOwogCQkJCX0KLQorCQkJfQogCQkJaWYgKCFub1ZlcmlmeSkgewogCQkJCW1lc3NhZ2UgPSBIb29rcwogCQkJCQkJLmNvbW1pdE1zZyhyZXBvLApAQCAtMjE5LDYgKzIyOCwxOSBAQCBwdWJsaWMgUmV2Q29tbWl0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBBYm9ydGVkQnlIb29rRXhjZXB0aW9uLAogCQkJCQkJLnNldENvbW1pdE1lc3NhZ2UobWVzc2FnZSkuY2FsbCgpOwogCQkJfQogCisJCQlDb21taXRDb25maWcgY29uZmlnID0gbnVsbDsKKwkJCWlmIChDbGVhbnVwTW9kZS5ERUZBVUxULmVxdWFscyhjbGVhbnVwTW9kZSkpIHsKKwkJCQljb25maWcgPSByZXBvLmdldENvbmZpZygpLmdldChDb21taXRDb25maWcuS0VZKTsKKwkJCQljbGVhbnVwTW9kZSA9IGNvbmZpZy5yZXNvbHZlKGNsZWFudXBNb2RlLCBjbGVhbkRlZmF1bHRJc1N0cmlwKTsKKwkJCX0KKwkJCWNoYXIgY29tbWVudHM7CisJCQlpZiAoY29tbWVudENoYXIgPT0gbnVsbCkgeworCQkJCWNvbW1lbnRzID0gJyMnOyAvLyBUT0RPIHVzZSBnaXQgY29uZmlnIGNvcmUuY29tbWVudENoYXIKKwkJCX0gZWxzZSB7CisJCQkJY29tbWVudHMgPSBjb21tZW50Q2hhci5jaGFyVmFsdWUoKTsKKwkJCX0KKwkJCW1lc3NhZ2UgPSBDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIGNsZWFudXBNb2RlLCBjb21tZW50cyk7CisKIAkJCVJldkNvbW1pdCByZXZDb21taXQ7CiAJCQlEaXJDYWNoZSBpbmRleCA9IHJlcG8ubG9ja0RpckNhY2hlKCk7CiAJCQl0cnkgKE9iamVjdEluc2VydGVyIG9kaSA9IHJlcG8ubmV3T2JqZWN0SW5zZXJ0ZXIoKSkgewpAQCAtNjU4LDYgKzY4MCw1NyBAQCBwdWJsaWMgQ29tbWl0Q29tbWFuZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7CiAJfQogCiAJLyoqCisJICogU2V0cyB0aGUge0BsaW5rIENsZWFudXBNb2RlfSB0byBhcHBseSB0byB0aGUgY29tbWl0IG1lc3NhZ2UuIElmIG5vdAorCSAqIGNhbGxlZCwge0BsaW5rIENvbW1pdENvbW1hbmR9IGFwcGxpZXMge0BsaW5rIENsZWFudXBNb2RlI1ZFUkJBVElNfS4KKwkgKgorCSAqIEBwYXJhbSBtb2RlCisJICogICAgICAgICAgICB7QGxpbmsgQ2xlYW51cE1vZGV9IHRvIHNldAorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBDb21taXRDb21tYW5kIHNldENsZWFudXBNb2RlKEBOb25OdWxsIENsZWFudXBNb2RlIG1vZGUpIHsKKwkJY2hlY2tDYWxsYWJsZSgpOworCQl0aGlzLmNsZWFudXBNb2RlID0gbW9kZTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZGVmYXVsdCBjbGVhbiBtb2RlIGlmIHtAbGluayAjc2V0Q2xlYW51cE1vZGUoQ2xlYW51cE1vZGUpCisJICogc2V0Q2xlYW51cE1vZGUoQ2xlYW51cE1vZGUuREVGQVVMVCl9IGlzIHNldCBhbmQgZ2l0IGNvbmZpZworCSAqIHtAY29kZSBjb21taXQuY2xlYW51cCA9IGRlZmF1bHR9IG9yIGlzIG5vdCBzZXQuCisJICoKKwkgKiBAcGFyYW0gc3RyaXAKKwkgKiAgICAgICAgICAgIGlmIHtAY29kZSB0cnVlfSwgZGVmYXVsdCB0byB7QGxpbmsgQ2xlYW51cE1vZGUjU1RSSVB9OworCSAqICAgICAgICAgICAgb3RoZXJ3aXNlIGRlZmF1bHQgdG8ge0BsaW5rIENsZWFudXBNb2RlI1dISVRFU1BBQ0V9CisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIENvbW1pdENvbW1hbmQgc2V0RGVmYXVsdENsZWFuKGJvb2xlYW4gc3RyaXApIHsKKwkJY2hlY2tDYWxsYWJsZSgpOworCQl0aGlzLmNsZWFuRGVmYXVsdElzU3RyaXAgPSBzdHJpcDsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgY29tbWVudCBjaGFyYWN0ZXIgdG8gYXBwbHkgd2hlbiBjbGVhbmluZyBhIGNvbW1pdCBtZXNzYWdlLiBJZgorCSAqIHtAY29kZSBudWxsfSAodGhlIGRlZmF1bHQpIGFuZCB0aGUge0BsaW5rICNzZXRDbGVhbnVwTW9kZShDbGVhbnVwTW9kZSkKKwkgKiBjbGVhbi11cCBtb2RlfSBpcyB7QGxpbmsgQ2xlYW51cE1vZGUjU1RSSVB9IG9yCisJICoge0BsaW5rIENsZWFudXBNb2RlI1NDSVNTT1JTfSwgdGhlIHZhbHVlIG9mIGdpdCBjb25maWcKKwkgKiB7QGNvZGUgY29yZS5jb21tZW50Q2hhcn0gd2lsbCBiZSB1c2VkLgorCSAqCisJICogQHBhcmFtIGNvbW1lbnRDaGFyCisJICogICAgICAgICAgICB0aGUgY29tbWVudCBjaGFyYWN0ZXIsIG9yIHtAY29kZSBudWxsfSB0byB1c2UgdGhlIHZhbHVlIGZyb20KKwkgKiAgICAgICAgICAgIHRoZSBnaXQgY29uZmlnCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIENvbW1pdENvbW1hbmQgc2V0Q29tbWVudENoYXJhY3RlcihDaGFyYWN0ZXIgY29tbWVudENoYXIpIHsKKwkJY2hlY2tDYWxsYWJsZSgpOworCQl0aGlzLmNvbW1lbnRDaGFyID0gY29tbWVudENoYXI7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgogCSAqIFNldCB3aGV0aGVyIHRvIGFsbG93IHRvIGNyZWF0ZSBhbiBlbXB0eSBjb21taXQKIAkgKgogCSAqIEBwYXJhbSBhbGxvd0VtcHR5CkBAIC04MDYsNyArODc5LDcgQEAgcHVibGljIENvbW1pdENvbW1hbmQgc2V0QWxsKGJvb2xlYW4gYWxsKSB7CiAJICogY29tbWFuZCBsaW5lLgogCSAqCiAJICogQHBhcmFtIGFtZW5kCi0JICogICAgICAgICAgICB3aGV0aGVyIHRvIGFtbWVuZCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorCSAqICAgICAgICAgICAgd2hldGhlciB0byBhbWVuZCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaAogCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CiAJICovCiAJcHVibGljIENvbW1pdENvbW1hbmQgc2V0QW1lbmQoYm9vbGVhbiBhbWVuZCkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGVzY3JpYmVDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmQuamF2YQppbmRleCAxZTUyNGZhLi44MDVhODg2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmQuamF2YQpAQCAtMTEsNiArMTEsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1JFRlM7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1RBR1M7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLlR5cGVkQ29uZmlnR2V0dGVyLlVOU0VUX0lOVDsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CkBAIC0zMyw2ICszNCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTWlzc2luZ09iamVjdEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2guRmlsZU5hbWVNYXRjaGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQWJicmV2Q29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CkBAIC04OSw2ICs5MSwxMSBAQCBwdWJsaWMgY2xhc3MgRGVzY3JpYmVDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxTdHJpbmc+IHsKIAlwcml2YXRlIGJvb2xlYW4gYWx3YXlzOwogCiAJLyoqCisJICogVGhlIHByZWZpeCBsZW5ndGggdG8gdXNlIHdoZW4gYWJicmV2aWF0aW5nIGEgY29tbWl0IGhhc2guCisJICovCisJcHJpdmF0ZSBpbnQgYWJicmV2ID0gVU5TRVRfSU5UOworCisJLyoqCiAJICogQ29uc3RydWN0b3IgZm9yIERlc2NyaWJlQ29tbWFuZC4KIAkgKgogCSAqIEBwYXJhbSByZXBvCkBAIC0yMDUsMTIgKzIxMiwzMyBAQCBwdWJsaWMgRGVzY3JpYmVDb21tYW5kIHNldEFsd2F5cyhib29sZWFuIGFsd2F5cykgewogCQlyZXR1cm4gdGhpczsKIAl9CiAKKwkvKioKKwkgKiBTZXRzIHRoZSBwcmVmaXggbGVuZ3RoIHRvIHVzZSB3aGVuIGFiYnJldmlhdGluZyBhbiBvYmplY3QgU0hBLTEuCisJICoKKwkgKiBAcGFyYW0gYWJicmV2CisJICogICAgICAgICAgICBtaW5pbXVtIGxlbmd0aCBvZiB0aGUgYWJicmV2aWF0ZWQgc3RyaW5nLiBNdXN0IGJlIGluIHRoZSByYW5nZQorCSAqICAgICAgICAgICAgW3tAdmFsdWUgQWJicmV2Q29uZmlnI01JTl9BQkJSRVZ9LAorCSAqICAgICAgICAgICAge0B2YWx1ZSBDb25zdGFudHMjT0JKRUNUX0lEX1NUUklOR19MRU5HVEh9XS4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgRGVzY3JpYmVDb21tYW5kIHNldEFiYnJldihpbnQgYWJicmV2KSB7CisJCWlmIChhYmJyZXYgPT0gMCkgeworCQkJdGhpcy5hYmJyZXYgPSAwOworCQl9IGVsc2UgeworCQkJdGhpcy5hYmJyZXYgPSBBYmJyZXZDb25maWcuY2FwQWJicmV2KGFiYnJldik7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfQorCiAJcHJpdmF0ZSBTdHJpbmcgbG9uZ0Rlc2NyaXB0aW9uKFJlZiB0YWcsIGludCBkZXB0aCwgT2JqZWN0SWQgdGlwKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIFN0cmluZy5mb3JtYXQoCi0JCQkJIiVzLSVkLWclcyIsIGZvcm1hdFJlZk5hbWUodGFnLmdldE5hbWUoKSksIC8vJE5PTi1OTFMtMSQKLQkJCQlJbnRlZ2VyLnZhbHVlT2YoZGVwdGgpLCB3LmdldE9iamVjdFJlYWRlcigpLmFiYnJldmlhdGUodGlwKQotCQkJCQkJLm5hbWUoKSk7CisJCWlmIChhYmJyZXYgPT0gMCkgeworCQkJcmV0dXJuIGZvcm1hdFJlZk5hbWUodGFnLmdldE5hbWUoKSk7CisJCX0KKwkJcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVzLSVkLWclcyIsIGZvcm1hdFJlZk5hbWUodGFnLmdldE5hbWUoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQlJbnRlZ2VyLnZhbHVlT2YoZGVwdGgpLAorCQkJCXcuZ2V0T2JqZWN0UmVhZGVyKCkuYWJicmV2aWF0ZSh0aXAsIGFiYnJldikubmFtZSgpKTsKIAl9CiAKIAkvKioKQEAgLTMwMiw2ICszMzAsOSBAQCBwdWJsaWMgU3RyaW5nIGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uIHsKIAkJCWlmICh0YXJnZXQgPT0gbnVsbCkgewogCQkJCXNldFRhcmdldChDb25zdGFudHMuSEVBRCk7CiAJCQl9CisJCQlpZiAoYWJicmV2ID09IFVOU0VUX0lOVCkgeworCQkJCWFiYnJldiA9IEFiYnJldkNvbmZpZy5wYXJzZUZyb21Db25maWcocmVwbykuZ2V0KCk7CisJCQl9CiAKIAkJCUNvbGxlY3Rpb248UmVmPiB0YWdMaXN0ID0gcmVwby5nZXRSZWZEYXRhYmFzZSgpCiAJCQkJCS5nZXRSZWZzQnlQcmVmaXgodXNlQWxsID8gUl9SRUZTIDogUl9UQUdTKTsKQEAgLTQxMyw3ICs0NDQsMTIgQEAgU3RyaW5nIGRlc2NyaWJlKE9iamVjdElkIHRpcCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAogCQkJLy8gaWYgYWxsIHRoZSBub2RlcyBhcmUgZG9taW5hdGVkIGJ5IGFsbCB0aGUgdGFncywgdGhlIHdhbGsgc3RvcHMKIAkJCWlmIChjYW5kaWRhdGVzLmlzRW1wdHkoKSkgewotCQkJCXJldHVybiBhbHdheXMgPyB3LmdldE9iamVjdFJlYWRlcigpLmFiYnJldmlhdGUodGFyZ2V0KS5uYW1lKCkgOiBudWxsOworCQkJCXJldHVybiBhbHdheXMKKwkJCQkJCT8gdy5nZXRPYmplY3RSZWFkZXIoKQorCQkJCQkJCQkuYWJicmV2aWF0ZSh0YXJnZXQsCisJCQkJCQkJCQkJQWJicmV2Q29uZmlnLmNhcEFiYnJldihhYmJyZXYpKQorCQkJCQkJCQkubmFtZSgpCisJCQkJCQk6IG51bGw7CiAJCQl9CiAKIAkJCUNhbmRpZGF0ZSBiZXN0ID0gQ29sbGVjdGlvbnMubWluKGNhbmRpZGF0ZXMsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZC5qYXZhCmluZGV4IGVmNTZkODAuLmNlMDY4YjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZC5qYXZhCkBAIC00MDUsNyArNDA1LDcgQEAgcHVibGljIE1lcmdlUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb0hlYWRFeGNlcHRpb24sCiAJCQkJCQkJZmFpbGluZ1BhdGhzLCBudWxsKTsKIAkJCQl9CiAJCQkJU3RyaW5nIG1lcmdlTWVzc2FnZVdpdGhDb25mbGljdHMgPSBuZXcgTWVyZ2VNZXNzYWdlRm9ybWF0dGVyKCkKLQkJCQkJCS5mb3JtYXRXaXRoQ29uZmxpY3RzKG1lcmdlTWVzc2FnZSwgdW5tZXJnZWRQYXRocyk7CisJCQkJCQkuZm9ybWF0V2l0aENvbmZsaWN0cyhtZXJnZU1lc3NhZ2UsIHVubWVyZ2VkUGF0aHMsICcjJyk7CiAJCQkJcmVwby53cml0ZU1lcmdlQ29tbWl0TXNnKG1lcmdlTWVzc2FnZVdpdGhDb25mbGljdHMpOwogCQkJCXJldHVybiBuZXcgTWVyZ2VSZXN1bHQobnVsbCwgbWVyZ2VyLmdldEJhc2VDb21taXRJZCgpLAogCQkJCQkJbmV3IE9iamVjdElkW10geyBoZWFkQ29tbWl0LmdldElkKCksCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmQuamF2YQppbmRleCBhYTVhNjM0Li4wODM1M2RmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBDaHJpcyBBbmlzemN6eWsgPGNhbmlzemN6eWtAZ21haWwuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMjIgQ2hyaXMgQW5pc3pjenlrIDxjYW5pc3pjenlrQGdtYWlsLmNvbT4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjEsNyArMjEsOSBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuRGV0YWNoZWRIZWFkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkludmFsaWRSZWZOYW1lRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwpAQCAtMjksMTEgKzMxLDE2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuVG9vTGFyZ2VQYWNrRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkJyYW5jaENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5OdWxsUHJvZ3Jlc3NNb25pdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25maWcuUHVzaERlZmF1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaFJlc3VsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWZMZWFzZVNwZWM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVmU3BlYzsKQEAgLTUyLDcgKzU5LDcgQEAKIHB1YmxpYyBjbGFzcyBQdXNoQ29tbWFuZCBleHRlbmRzCiAJCVRyYW5zcG9ydENvbW1hbmQ8UHVzaENvbW1hbmQsIEl0ZXJhYmxlPFB1c2hSZXN1bHQ+PiB7CiAKLQlwcml2YXRlIFN0cmluZyByZW1vdGUgPSBDb25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTsKKwlwcml2YXRlIFN0cmluZyByZW1vdGU7CiAKIAlwcml2YXRlIGZpbmFsIExpc3Q8UmVmU3BlYz4gcmVmU3BlY3M7CiAKQEAgLTcxLDYgKzc4LDEwIEBAIHB1YmxpYyBjbGFzcyBQdXNoQ29tbWFuZCBleHRlbmRzCiAKIAlwcml2YXRlIExpc3Q8U3RyaW5nPiBwdXNoT3B0aW9uczsKIAorCS8vIExlZ2FjeSBiZWhhdmlvciBhcyBkZWZhdWx0LiBVc2Ugc2V0UHVzaERlZmF1bHQobnVsbCkgdG8gZGV0ZXJtaW5lIHRoZQorCS8vIHZhbHVlIGZyb20gdGhlIGdpdCBjb25maWcuCisJcHJpdmF0ZSBQdXNoRGVmYXVsdCBwdXNoRGVmYXVsdCA9IFB1c2hEZWZhdWx0LkNVUlJFTlQ7CisKIAkvKioKIAkgKiA8cD4KIAkgKiBDb25zdHJ1Y3RvciBmb3IgUHVzaENvbW1hbmQuCkBAIC05OCwxOSArMTA5LDIwIEBAIHB1YmxpYyBJdGVyYWJsZTxQdXNoUmVzdWx0PiBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwKIAkJCUludmFsaWRSZW1vdGVFeGNlcHRpb24sCiAJCQlvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuVHJhbnNwb3J0RXhjZXB0aW9uIHsKIAkJY2hlY2tDYWxsYWJsZSgpOworCQlzZXRDYWxsYWJsZShmYWxzZSk7CiAKIAkJQXJyYXlMaXN0PFB1c2hSZXN1bHQ+IHB1c2hSZXN1bHRzID0gbmV3IEFycmF5TGlzdDw+KDMpOwogCiAJCXRyeSB7CisJCQlDb25maWcgY29uZmlnID0gcmVwby5nZXRDb25maWcoKTsKKwkJCXJlbW90ZSA9IGRldGVybWluZVJlbW90ZShjb25maWcsIHJlbW90ZSk7CiAJCQlpZiAocmVmU3BlY3MuaXNFbXB0eSgpKSB7Ci0JCQkJUmVtb3RlQ29uZmlnIGNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcocmVwby5nZXRDb25maWcoKSwKKwkJCQlSZW1vdGVDb25maWcgcmMgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywKIAkJCQkJCWdldFJlbW90ZSgpKTsKLQkJCQlyZWZTcGVjcy5hZGRBbGwoY29uZmlnLmdldFB1c2hSZWZTcGVjcygpKTsKLQkJCX0KLQkJCWlmIChyZWZTcGVjcy5pc0VtcHR5KCkpIHsKLQkJCQlSZWYgaGVhZCA9IHJlcG8uZXhhY3RSZWYoQ29uc3RhbnRzLkhFQUQpOwotCQkJCWlmIChoZWFkICE9IG51bGwgJiYgaGVhZC5pc1N5bWJvbGljKCkpCi0JCQkJCXJlZlNwZWNzLmFkZChuZXcgUmVmU3BlYyhoZWFkLmdldExlYWYoKS5nZXROYW1lKCkpKTsKKwkJCQlyZWZTcGVjcy5hZGRBbGwocmMuZ2V0UHVzaFJlZlNwZWNzKCkpOworCQkJCWlmIChyZWZTcGVjcy5pc0VtcHR5KCkpIHsKKwkJCQkJZGV0ZXJtaW5lRGVmYXVsdFJlZlNwZWNzKGNvbmZpZyk7CisJCQkJfQogCQkJfQogCiAJCQlpZiAoZm9yY2UpIHsKQEAgLTExOCw4ICsxMzAsOCBAQCBwdWJsaWMgSXRlcmFibGU8UHVzaFJlc3VsdD4gY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sCiAJCQkJCXJlZlNwZWNzLnNldChpLCByZWZTcGVjcy5nZXQoaSkuc2V0Rm9yY2VVcGRhdGUodHJ1ZSkpOwogCQkJfQogCi0JCQlmaW5hbCBMaXN0PFRyYW5zcG9ydD4gdHJhbnNwb3J0czsKLQkJCXRyYW5zcG9ydHMgPSBUcmFuc3BvcnQub3BlbkFsbChyZXBvLCByZW1vdGUsIFRyYW5zcG9ydC5PcGVyYXRpb24uUFVTSCk7CisJCQlMaXN0PFRyYW5zcG9ydD4gdHJhbnNwb3J0cyA9IFRyYW5zcG9ydC5vcGVuQWxsKHJlcG8sIHJlbW90ZSwKKwkJCQkJVHJhbnNwb3J0Lk9wZXJhdGlvbi5QVVNIKTsKIAkJCWZvciAoQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikgLy8gRXhwbGljaXRseSBjbG9zZWQgaW4gZmluYWxseQogCQkJCQlmaW5hbCBUcmFuc3BvcnQgdHJhbnNwb3J0IDogdHJhbnNwb3J0cykgewogCQkJCXRyYW5zcG9ydC5zZXRQdXNoVGhpbih0aGluKTsKQEAgLTE3MSw2ICsxODMsMTAyIEBAIHB1YmxpYyBJdGVyYWJsZTxQdXNoUmVzdWx0PiBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwKIAkJcmV0dXJuIHB1c2hSZXN1bHRzOwogCX0KIAorCXByaXZhdGUgU3RyaW5nIGRldGVybWluZVJlbW90ZShDb25maWcgY29uZmlnLCBTdHJpbmcgcmVtb3RlTmFtZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChyZW1vdGVOYW1lICE9IG51bGwpIHsKKwkJCXJldHVybiByZW1vdGVOYW1lOworCQl9CisJCVJlZiBoZWFkID0gcmVwby5leGFjdFJlZihDb25zdGFudHMuSEVBRCk7CisJCVN0cmluZyBlZmZlY3RpdmVSZW1vdGUgPSBudWxsOworCQlCcmFuY2hDb25maWcgYnJhbmNoQ2ZnID0gbnVsbDsKKwkJaWYgKGhlYWQgIT0gbnVsbCAmJiBoZWFkLmlzU3ltYm9saWMoKSkgeworCQkJU3RyaW5nIGN1cnJlbnRCcmFuY2ggPSBoZWFkLmdldExlYWYoKS5nZXROYW1lKCk7CisJCQlicmFuY2hDZmcgPSBuZXcgQnJhbmNoQ29uZmlnKGNvbmZpZywKKwkJCQkJUmVwb3NpdG9yeS5zaG9ydGVuUmVmTmFtZShjdXJyZW50QnJhbmNoKSk7CisJCQllZmZlY3RpdmVSZW1vdGUgPSBicmFuY2hDZmcuZ2V0UHVzaFJlbW90ZSgpOworCQl9CisJCWlmIChlZmZlY3RpdmVSZW1vdGUgPT0gbnVsbCkgeworCQkJZWZmZWN0aXZlUmVtb3RlID0gY29uZmlnLmdldFN0cmluZygKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19SRU1PVEVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUFVTSF9ERUZBVUxUKTsKKwkJCWlmIChlZmZlY3RpdmVSZW1vdGUgPT0gbnVsbCAmJiBicmFuY2hDZmcgIT0gbnVsbCkgeworCQkJCWVmZmVjdGl2ZVJlbW90ZSA9IGJyYW5jaENmZy5nZXRSZW1vdGUoKTsKKwkJCX0KKwkJfQorCQlpZiAoZWZmZWN0aXZlUmVtb3RlID09IG51bGwpIHsKKwkJCWVmZmVjdGl2ZVJlbW90ZSA9IENvbnN0YW50cy5ERUZBVUxUX1JFTU9URV9OQU1FOworCQl9CisJCXJldHVybiBlZmZlY3RpdmVSZW1vdGU7CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0Q3VycmVudEJyYW5jaCgpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIERldGFjaGVkSGVhZEV4Y2VwdGlvbiB7CisJCVJlZiBoZWFkID0gcmVwby5leGFjdFJlZihDb25zdGFudHMuSEVBRCk7CisJCWlmIChoZWFkICE9IG51bGwgJiYgaGVhZC5pc1N5bWJvbGljKCkpIHsKKwkJCXJldHVybiBoZWFkLmdldExlYWYoKS5nZXROYW1lKCk7CisJCX0KKwkJdGhyb3cgbmV3IERldGFjaGVkSGVhZEV4Y2VwdGlvbigpOworCX0KKworCXByaXZhdGUgdm9pZCBkZXRlcm1pbmVEZWZhdWx0UmVmU3BlY3MoQ29uZmlnIGNvbmZpZykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKKwkJaWYgKHB1c2hEZWZhdWx0ID09IG51bGwpIHsKKwkJCXB1c2hEZWZhdWx0ID0gY29uZmlnLmdldChQdXNoQ29uZmlnOjpuZXcpLmdldFB1c2hEZWZhdWx0KCk7CisJCX0KKwkJc3dpdGNoIChwdXNoRGVmYXVsdCkgeworCQljYXNlIENVUlJFTlQ6CisJCQlyZWZTcGVjcy5hZGQobmV3IFJlZlNwZWMoZ2V0Q3VycmVudEJyYW5jaCgpKSk7CisJCQlicmVhazsKKwkJY2FzZSBNQVRDSElORzoKKwkJCXJlZlNwZWNzLmFkZChuZXcgUmVmU3BlYygiOiIpKTsgLy8kTk9OLU5MUy0xJAorCQkJYnJlYWs7CisJCWNhc2UgTk9USElORzoKKwkJCXRocm93IG5ldyBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbigKKwkJCQkJSkdpdFRleHQuZ2V0KCkucHVzaERlZmF1bHROb3RoaW5nKTsKKwkJY2FzZSBTSU1QTEU6CisJCWNhc2UgVVBTVFJFQU06CisJCQlTdHJpbmcgY3VycmVudEJyYW5jaCA9IGdldEN1cnJlbnRCcmFuY2goKTsKKwkJCUJyYW5jaENvbmZpZyBicmFuY2hDZmcgPSBuZXcgQnJhbmNoQ29uZmlnKGNvbmZpZywKKwkJCQkJUmVwb3NpdG9yeS5zaG9ydGVuUmVmTmFtZShjdXJyZW50QnJhbmNoKSk7CisJCQlTdHJpbmcgZmV0Y2hSZW1vdGUgPSBicmFuY2hDZmcuZ2V0UmVtb3RlKCk7CisJCQlpZiAoZmV0Y2hSZW1vdGUgPT0gbnVsbCkgeworCQkJCWZldGNoUmVtb3RlID0gQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7CisJCQl9CisJCQlib29sZWFuIGlzVHJpYW5ndWxhciA9ICFmZXRjaFJlbW90ZS5lcXVhbHMocmVtb3RlKTsKKwkJCWlmIChpc1RyaWFuZ3VsYXIpIHsKKwkJCQlpZiAoUHVzaERlZmF1bHQuVVBTVFJFQU0uZXF1YWxzKHB1c2hEZWZhdWx0KSkgeworCQkJCQl0aHJvdyBuZXcgSW52YWxpZFJlZk5hbWVFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkucHVzaERlZmF1bHRUcmlhbmd1bGFyVXBzdHJlYW0sCisJCQkJCQkJcmVtb3RlLCBmZXRjaFJlbW90ZSkpOworCQkJCX0KKwkJCQkvLyBTdHJhbmdlLCBidXQgY29uc2lzdGVudCB3aXRoIEMgZ2l0OiAic2ltcGxlIiBkb2Vzbid0IGV2ZW4KKwkJCQkvLyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgY29uZmlndXJlZCB1cHN0cmVhbSwgYW5kIGlmIHNvLCB0aGF0CisJCQkJLy8gaXQgaXMgZXF1YWwgdG8gdGhlIGxvY2FsIGJyYW5jaCBuYW1lLiBJdCBqdXN0IGJlY29tZXMKKwkJCQkvLyAiY3VycmVudCIuCisJCQkJcmVmU3BlY3MuYWRkKG5ldyBSZWZTcGVjKGN1cnJlbnRCcmFuY2gpKTsKKwkJCX0gZWxzZSB7CisJCQkJU3RyaW5nIHRyYWNrZWRCcmFuY2ggPSBicmFuY2hDZmcuZ2V0TWVyZ2UoKTsKKwkJCQlpZiAoYnJhbmNoQ2ZnLmlzUmVtb3RlTG9jYWwoKSB8fCB0cmFja2VkQnJhbmNoID09IG51bGwKKwkJCQkJCXx8ICF0cmFja2VkQnJhbmNoLnN0YXJ0c1dpdGgoQ29uc3RhbnRzLlJfSEVBRFMpKSB7CisJCQkJCXRocm93IG5ldyBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQlKR2l0VGV4dC5nZXQoKS5wdXNoRGVmYXVsdE5vVXBzdHJlYW0sCisJCQkJCQkJY3VycmVudEJyYW5jaCkpOworCQkJCX0KKwkJCQlpZiAoUHVzaERlZmF1bHQuU0lNUExFLmVxdWFscyhwdXNoRGVmYXVsdCkKKwkJCQkJCSYmICF0cmFja2VkQnJhbmNoLmVxdWFscyhjdXJyZW50QnJhbmNoKSkgeworCQkJCQl0aHJvdyBuZXcgSW52YWxpZFJlZk5hbWVFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkucHVzaERlZmF1bHRTaW1wbGUsIGN1cnJlbnRCcmFuY2gsCisJCQkJCQkJdHJhY2tlZEJyYW5jaCkpOworCQkJCX0KKwkJCQlyZWZTcGVjcy5hZGQobmV3IFJlZlNwZWMoY3VycmVudEJyYW5jaCArICc6JyArIHRyYWNrZWRCcmFuY2gpKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IEludmFsaWRSZWZOYW1lRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJLmZvcm1hdChKR2l0VGV4dC5nZXQoKS5wdXNoRGVmYXVsdFVua25vd24sIHB1c2hEZWZhdWx0KSk7CisJCX0KKwl9CisKIAkvKioKIAkgKiBUaGUgcmVtb3RlICh1cmkgb3IgbmFtZSkgdXNlZCBmb3IgdGhlIHB1c2ggb3BlcmF0aW9uLiBJZiBubyByZW1vdGUgaXMKIAkgKiBzZXQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxjb2RlPkNvbnN0YW50cy5ERUZBVUxUX1JFTU9URV9OQU1FPC9jb2RlPiB3aWxsCkBAIC0zMzYsOSArNDQ0LDM3IEBAIHB1YmxpYyBQdXNoQ29tbWFuZCBzZXRSZWZTcGVjcyhMaXN0PFJlZlNwZWM+IHNwZWNzKSB7CiAJfQogCiAJLyoqCisJICogUmV0cmlldmVzIHRoZSB7QGxpbmsgUHVzaERlZmF1bHR9IGN1cnJlbnRseSBzZXQuCisJICoKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgUHVzaERlZmF1bHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgbm90IHNldAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgUHVzaERlZmF1bHQgZ2V0UHVzaERlZmF1bHQoKSB7CisJCXJldHVybiBwdXNoRGVmYXVsdDsKKwl9CisKKwkvKioKKwkgKiBTZXRzIGFuIGV4cGxpY2l0IHtAbGluayBQdXNoRGVmYXVsdH0uIFRoZSBkZWZhdWx0IHVzZWQgaWYgdGhpcyBpcyBub3QKKwkgKiBjYWxsZWQgaXMge0BsaW5rIFB1c2hEZWZhdWx0I0NVUlJFTlR9IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2l0aAorCSAqIGVhcmxpZXIgSkdpdCB2ZXJzaW9ucy4KKwkgKgorCSAqIEBwYXJhbSBwdXNoRGVmYXVsdAorCSAqICAgICAgICAgICAge0BsaW5rIFB1c2hEZWZhdWx0fSB0byBzZXQ7IGlmIHtAY29kZSBudWxsfSB0aGUgdmFsdWUgZGVmaW5lZAorCSAqICAgICAgICAgICAgaW4gdGhlIGdpdCBjb25maWcgd2lsbCBiZSB1c2VkLgorCSAqCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFB1c2hDb21tYW5kIHNldFB1c2hEZWZhdWx0KFB1c2hEZWZhdWx0IHB1c2hEZWZhdWx0KSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5wdXNoRGVmYXVsdCA9IHB1c2hEZWZhdWx0OworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBQdXNoIGFsbCBicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzLyouCiAJICoKLQkgKiBAcmV0dXJuIHtjb2RlIHRoaXN9CisJICogQHJldHVybiB7QGNvZGUgdGhpc30KIAkgKi8KIAlwdWJsaWMgUHVzaENvbW1hbmQgc2V0UHVzaEFsbCgpIHsKIAkJcmVmU3BlY3MuYWRkKFRyYW5zcG9ydC5SRUZTUEVDX1BVU0hfQUxMKTsKQEAgLTM0OCw3ICs0ODQsNyBAQCBwdWJsaWMgUHVzaENvbW1hbmQgc2V0UHVzaEFsbCgpIHsKIAkvKioKIAkgKiBQdXNoIGFsbCB0YWdzIHVuZGVyIHJlZnMvdGFncy8qLgogCSAqCi0JICogQHJldHVybiB7Y29kZSB0aGlzfQorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CiAJICovCiAJcHVibGljIFB1c2hDb21tYW5kIHNldFB1c2hUYWdzKCkgewogCQlyZWZTcGVjcy5hZGQoVHJhbnNwb3J0LlJFRlNQRUNfVEFHUyk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEKaW5kZXggYTI2ZmZjMi4uMmIwZDhjZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmQuamF2YQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5Ob25OdWxsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlJlYmFzZVJlc3VsdC5TdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuUmVzZXRDb21tYW5kLlJlc2V0VHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQ2hlY2tvdXRDb25mbGljdEV4Y2VwdGlvbjsKQEAgLTUyLDYgKzUzLDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFiYnJldmlhdGVkT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0Q29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdENvbmZpZy5DbGVhbnVwTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk51bGxQcm9ncmVzc01vbml0b3I7CkBAIC0yMDUsNiArMjA4LDggQEAgcHVibGljIGVudW0gT3BlcmF0aW9uIHsKIAogCXByaXZhdGUgSW50ZXJhY3RpdmVIYW5kbGVyIGludGVyYWN0aXZlSGFuZGxlcjsKIAorCXByaXZhdGUgQ29tbWl0Q29uZmlnIGNvbW1pdENvbmZpZzsKKwogCXByaXZhdGUgYm9vbGVhbiBzdG9wQWZ0ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogCiAJcHJpdmF0ZSBSZXZDb21taXQgbmV3SGVhZDsKQEAgLTI0Niw2ICsyNTEsNyBAQCBwdWJsaWMgUmViYXNlUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb0hlYWRFeGNlcHRpb24sCiAJCWxhc3RTdGVwV2FzRm9yd2FyZCA9IGZhbHNlOwogCQljaGVja0NhbGxhYmxlKCk7CiAJCWNoZWNrUGFyYW1ldGVycygpOworCQljb21taXRDb25maWcgPSByZXBvLmdldENvbmZpZygpLmdldChDb21taXRDb25maWcuS0VZKTsKIAkJdHJ5IHsKIAkJCXN3aXRjaCAob3BlcmF0aW9uKSB7CiAJCQljYXNlIEFCT1JUOgpAQCAtNDQxLDExICs0NDcsMTYgQEAgcHJpdmF0ZSBSZWJhc2VSZXN1bHQgcHJvY2Vzc1N0ZXAoUmViYXNlVG9kb0xpbmUgc3RlcCwgYm9vbGVhbiBzaG91bGRQaWNrKQogCQkJcmV0dXJuIG51bGw7IC8vIGNvbnRpbnVlIHJlYmFzZSBwcm9jZXNzIG9uIHBpY2sgY29tbWFuZAogCQljYXNlIFJFV09SRDoKIAkJCVN0cmluZyBvbGRNZXNzYWdlID0gY29tbWl0VG9QaWNrLmdldEZ1bGxNZXNzYWdlKCk7Ci0JCQlTdHJpbmcgbmV3TWVzc2FnZSA9IGludGVyYWN0aXZlSGFuZGxlcgotCQkJCQkubW9kaWZ5Q29tbWl0TWVzc2FnZShvbGRNZXNzYWdlKTsKKwkJCUNsZWFudXBNb2RlIG1vZGUgPSBjb21taXRDb25maWcucmVzb2x2ZShDbGVhbnVwTW9kZS5ERUZBVUxULCB0cnVlKTsKKwkJCWJvb2xlYW5bXSBkb0NoYW5nZUlkID0geyBmYWxzZSB9OworCQkJU3RyaW5nIG5ld01lc3NhZ2UgPSBlZGl0Q29tbWl0TWVzc2FnZShkb0NoYW5nZUlkLCBvbGRNZXNzYWdlLCBtb2RlKTsKIAkJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQocmVwbykpIHsKLQkJCQluZXdIZWFkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UobmV3TWVzc2FnZSkuc2V0QW1lbmQodHJ1ZSkKLQkJCQkJCS5zZXROb1ZlcmlmeSh0cnVlKS5jYWxsKCk7CisJCQkJbmV3SGVhZCA9IGdpdC5jb21taXQoKQorCQkJCQkJLnNldE1lc3NhZ2UobmV3TWVzc2FnZSkKKwkJCQkJCS5zZXRBbWVuZCh0cnVlKQorCQkJCQkJLnNldE5vVmVyaWZ5KHRydWUpCisJCQkJCQkuc2V0SW5zZXJ0Q2hhbmdlSWQoZG9DaGFuZ2VJZFswXSkKKwkJCQkJCS5jYWxsKCk7CiAJCQl9CiAJCQlyZXR1cm4gbnVsbDsKIAkJY2FzZSBFRElUOgpAQCAtNDYwLDE3ICs0NzEsNDkgQEAgcHJpdmF0ZSBSZWJhc2VSZXN1bHQgcHJvY2Vzc1N0ZXAoUmViYXNlVG9kb0xpbmUgc3RlcCwgYm9vbGVhbiBzaG91bGRQaWNrKQogCQkJcmVzZXRTb2Z0VG9QYXJlbnQoKTsKIAkJCUxpc3Q8UmViYXNlVG9kb0xpbmU+IHN0ZXBzID0gcmVwby5yZWFkUmViYXNlVG9kbygKIAkJCQkJcmViYXNlU3RhdGUuZ2V0UGF0aChHSVRfUkVCQVNFX1RPRE8pLCBmYWxzZSk7Ci0JCQlSZWJhc2VUb2RvTGluZSBuZXh0U3RlcCA9IHN0ZXBzLmlzRW1wdHkoKSA/IG51bGwgOiBzdGVwcy5nZXQoMCk7CisJCQlib29sZWFuIGlzTGFzdCA9IHN0ZXBzLmlzRW1wdHkoKTsKKwkJCWlmICghaXNMYXN0KSB7CisJCQkJc3dpdGNoIChzdGVwcy5nZXQoMCkuZ2V0QWN0aW9uKCkpIHsKKwkJCQljYXNlIEZJWFVQOgorCQkJCWNhc2UgU1FVQVNIOgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlpc0xhc3QgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCQlGaWxlIG1lc3NhZ2VGaXh1cEZpbGUgPSByZWJhc2VTdGF0ZS5nZXRGaWxlKE1FU1NBR0VfRklYVVApOwogCQkJRmlsZSBtZXNzYWdlU3F1YXNoRmlsZSA9IHJlYmFzZVN0YXRlLmdldEZpbGUoTUVTU0FHRV9TUVVBU0gpOwotCQkJaWYgKGlzU3F1YXNoICYmIG1lc3NhZ2VGaXh1cEZpbGUuZXhpc3RzKCkpCisJCQlpZiAoaXNTcXVhc2ggJiYgbWVzc2FnZUZpeHVwRmlsZS5leGlzdHMoKSkgewogCQkJCW1lc3NhZ2VGaXh1cEZpbGUuZGVsZXRlKCk7Ci0JCQluZXdIZWFkID0gZG9TcXVhc2hGaXh1cChpc1NxdWFzaCwgY29tbWl0VG9QaWNrLCBuZXh0U3RlcCwKKwkJCX0KKwkJCW5ld0hlYWQgPSBkb1NxdWFzaEZpeHVwKGlzU3F1YXNoLCBjb21taXRUb1BpY2ssIGlzTGFzdCwKIAkJCQkJbWVzc2FnZUZpeHVwRmlsZSwgbWVzc2FnZVNxdWFzaEZpbGUpOwogCQl9CiAJCXJldHVybiBudWxsOwogCX0KIAorCXByaXZhdGUgU3RyaW5nIGVkaXRDb21taXRNZXNzYWdlKGJvb2xlYW5bXSBkb0NoYW5nZUlkLCBTdHJpbmcgbWVzc2FnZSwKKwkJCUBOb25OdWxsIENsZWFudXBNb2RlIG1vZGUpIHsKKwkJU3RyaW5nIG5ld01lc3NhZ2U7CisJCUNvbW1pdENvbmZpZy5DbGVhbnVwTW9kZSBjbGVhbnVwOworCQlpZiAoaW50ZXJhY3RpdmVIYW5kbGVyIGluc3RhbmNlb2YgSW50ZXJhY3RpdmVIYW5kbGVyMikgeworCQkJSW50ZXJhY3RpdmVIYW5kbGVyMi5Nb2RpZnlSZXN1bHQgbW9kaWZpY2F0aW9uID0gKChJbnRlcmFjdGl2ZUhhbmRsZXIyKSBpbnRlcmFjdGl2ZUhhbmRsZXIpCisJCQkJCS5lZGl0Q29tbWl0TWVzc2FnZShtZXNzYWdlLCBtb2RlLCAnIycpOworCQkJbmV3TWVzc2FnZSA9IG1vZGlmaWNhdGlvbi5nZXRNZXNzYWdlKCk7CisJCQljbGVhbnVwID0gbW9kaWZpY2F0aW9uLmdldENsZWFudXBNb2RlKCk7CisJCQlpZiAoQ2xlYW51cE1vZGUuREVGQVVMVC5lcXVhbHMoY2xlYW51cCkpIHsKKwkJCQljbGVhbnVwID0gbW9kZTsKKwkJCX0KKwkJCWRvQ2hhbmdlSWRbMF0gPSBtb2RpZmljYXRpb24uc2hvdWxkQWRkQ2hhbmdlSWQoKTsKKwkJfSBlbHNlIHsKKwkJCW5ld01lc3NhZ2UgPSBpbnRlcmFjdGl2ZUhhbmRsZXIubW9kaWZ5Q29tbWl0TWVzc2FnZShtZXNzYWdlKTsKKwkJCWNsZWFudXAgPSBDb21taXRDb25maWcuQ2xlYW51cE1vZGUuU1RSSVA7CisJCQlkb0NoYW5nZUlkWzBdID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuIENvbW1pdENvbmZpZy5jbGVhblRleHQobmV3TWVzc2FnZSwgY2xlYW51cCwgJyMnKTsKKwl9CisKIAlwcml2YXRlIFJlYmFzZVJlc3VsdCBjaGVycnlQaWNrQ29tbWl0KFJldkNvbW1pdCBjb21taXRUb1BpY2spCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiwgTm9NZXNzYWdlRXhjZXB0aW9uLAogCQkJVW5tZXJnZWRQYXRoc0V4Y2VwdGlvbiwgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbiwKQEAgLTcwNyw3ICs3NTAsNyBAQCBwcml2YXRlIHZvaWQgY2hlY2tTdGVwcyhMaXN0PFJlYmFzZVRvZG9MaW5lPiBzdGVwcykKIAl9CiAKIAlwcml2YXRlIFJldkNvbW1pdCBkb1NxdWFzaEZpeHVwKGJvb2xlYW4gaXNTcXVhc2gsIFJldkNvbW1pdCBjb21taXRUb1BpY2ssCi0JCQlSZWJhc2VUb2RvTGluZSBuZXh0U3RlcCwgRmlsZSBtZXNzYWdlRml4dXAsIEZpbGUgbWVzc2FnZVNxdWFzaCkKKwkJCWJvb2xlYW4gaXNMYXN0LCBGaWxlIG1lc3NhZ2VGaXh1cCwgRmlsZSBtZXNzYWdlU3F1YXNoKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb24gewogCiAJCWlmICghbWVzc2FnZVNxdWFzaC5leGlzdHMoKSkgewpAQCAtNzE3LDI0ICs3NjAsMjAgQEAgcHJpdmF0ZSBSZXZDb21taXQgZG9TcXVhc2hGaXh1cChib29sZWFuIGlzU3F1YXNoLCBSZXZDb21taXQgY29tbWl0VG9QaWNrLAogCiAJCQlpbml0aWFsaXplU3F1YXNoRml4dXBGaWxlKE1FU1NBR0VfU1FVQVNILAogCQkJCQlwcmV2aW91c0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJCWlmICghaXNTcXVhc2gpCi0JCQkJaW5pdGlhbGl6ZVNxdWFzaEZpeHVwRmlsZShNRVNTQUdFX0ZJWFVQLAotCQkJCQlwcmV2aW91c0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWlmICghaXNTcXVhc2gpIHsKKwkJCQlyZWJhc2VTdGF0ZS5jcmVhdGVGaWxlKE1FU1NBR0VfRklYVVAsCisJCQkJCQlwcmV2aW91c0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCX0KIAkJfQotCQlTdHJpbmcgY3VyclNxdWFzaE1lc3NhZ2UgPSByZWJhc2VTdGF0ZQotCQkJCS5yZWFkRmlsZShNRVNTQUdFX1NRVUFTSCk7CisJCVN0cmluZyBjdXJyU3F1YXNoTWVzc2FnZSA9IHJlYmFzZVN0YXRlLnJlYWRGaWxlKE1FU1NBR0VfU1FVQVNIKTsKIAogCQlpbnQgY291bnQgPSBwYXJzZVNxdWFzaEZpeHVwU2VxdWVuY2VDb3VudChjdXJyU3F1YXNoTWVzc2FnZSkgKyAxOwogCiAJCVN0cmluZyBjb250ZW50ID0gY29tcG9zZVNxdWFzaE1lc3NhZ2UoaXNTcXVhc2gsCiAJCQkJY29tbWl0VG9QaWNrLCBjdXJyU3F1YXNoTWVzc2FnZSwgY291bnQpOwogCQlyZWJhc2VTdGF0ZS5jcmVhdGVGaWxlKE1FU1NBR0VfU1FVQVNILCBjb250ZW50KTsKLQkJaWYgKG1lc3NhZ2VGaXh1cC5leGlzdHMoKSkKLQkJCXJlYmFzZVN0YXRlLmNyZWF0ZUZpbGUoTUVTU0FHRV9GSVhVUCwgY29udGVudCk7CiAKLQkJcmV0dXJuIHNxdWFzaEludG9QcmV2aW91cygKLQkJCQkhbWVzc2FnZUZpeHVwLmV4aXN0cygpLAotCQkJCW5leHRTdGVwKTsKKwkJcmV0dXJuIHNxdWFzaEludG9QcmV2aW91cyghbWVzc2FnZUZpeHVwLmV4aXN0cygpLCBpc0xhc3QpOwogCX0KIAogCXByaXZhdGUgdm9pZCByZXNldFNvZnRUb1BhcmVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiwKQEAgLTc1NiwyNiArNzk1LDMwIEBAIHByaXZhdGUgdm9pZCByZXNldFNvZnRUb1BhcmVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiwKIAl9CiAKIAlwcml2YXRlIFJldkNvbW1pdCBzcXVhc2hJbnRvUHJldmlvdXMoYm9vbGVhbiBzZXF1ZW5jZUNvbnRhaW5zU3F1YXNoLAotCQkJUmViYXNlVG9kb0xpbmUgbmV4dFN0ZXApCisJCQlib29sZWFuIGlzTGFzdCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKIAkJUmV2Q29tbWl0IHJldE5ld0hlYWQ7Ci0JCVN0cmluZyBjb21taXRNZXNzYWdlID0gcmViYXNlU3RhdGUKLQkJCQkucmVhZEZpbGUoTUVTU0FHRV9TUVVBU0gpOwotCisJCVN0cmluZyBjb21taXRNZXNzYWdlOworCQlpZiAoIWlzTGFzdCB8fCBzZXF1ZW5jZUNvbnRhaW5zU3F1YXNoKSB7CisJCQljb21taXRNZXNzYWdlID0gcmViYXNlU3RhdGUucmVhZEZpbGUoTUVTU0FHRV9TUVVBU0gpOworCQl9IGVsc2UgeworCQkJY29tbWl0TWVzc2FnZSA9IHJlYmFzZVN0YXRlLnJlYWRGaWxlKE1FU1NBR0VfRklYVVApOworCQl9CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQocmVwbykpIHsKLQkJCWlmIChuZXh0U3RlcCA9PSBudWxsIHx8ICgobmV4dFN0ZXAuZ2V0QWN0aW9uKCkgIT0gQWN0aW9uLkZJWFVQKQotCQkJCQkmJiAobmV4dFN0ZXAuZ2V0QWN0aW9uKCkgIT0gQWN0aW9uLlNRVUFTSCkpKSB7Ci0JCQkJLy8gdGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoaXMgc2VxdWVuY2UKKwkJCWlmIChpc0xhc3QpIHsKKwkJCQlib29sZWFuW10gZG9DaGFuZ2VJZCA9IHsgZmFsc2UgfTsKIAkJCQlpZiAoc2VxdWVuY2VDb250YWluc1NxdWFzaCkgewotCQkJCQljb21taXRNZXNzYWdlID0gaW50ZXJhY3RpdmVIYW5kbGVyCi0JCQkJCQkJLm1vZGlmeUNvbW1pdE1lc3NhZ2UoY29tbWl0TWVzc2FnZSk7CisJCQkJCWNvbW1pdE1lc3NhZ2UgPSBlZGl0Q29tbWl0TWVzc2FnZShkb0NoYW5nZUlkLCBjb21taXRNZXNzYWdlLAorCQkJCQkJCUNsZWFudXBNb2RlLlNUUklQKTsKIAkJCQl9CiAJCQkJcmV0TmV3SGVhZCA9IGdpdC5jb21taXQoKQotCQkJCQkJLnNldE1lc3NhZ2Uoc3RyaXBDb21tZW50TGluZXMoY29tbWl0TWVzc2FnZSkpCi0JCQkJCQkuc2V0QW1lbmQodHJ1ZSkuc2V0Tm9WZXJpZnkodHJ1ZSkuY2FsbCgpOworCQkJCQkJLnNldE1lc3NhZ2UoY29tbWl0TWVzc2FnZSkKKwkJCQkJCS5zZXRBbWVuZCh0cnVlKQorCQkJCQkJLnNldE5vVmVyaWZ5KHRydWUpCisJCQkJCQkuc2V0SW5zZXJ0Q2hhbmdlSWQoZG9DaGFuZ2VJZFswXSkKKwkJCQkJCS5jYWxsKCk7CiAJCQkJcmViYXNlU3RhdGUuZ2V0RmlsZShNRVNTQUdFX1NRVUFTSCkuZGVsZXRlKCk7CiAJCQkJcmViYXNlU3RhdGUuZ2V0RmlsZShNRVNTQUdFX0ZJWFVQKS5kZWxldGUoKTsKLQogCQkJfSBlbHNlIHsKIAkJCQkvLyBOZXh0IHN0ZXAgaXMgZWl0aGVyIFNxdWFzaCBvciBGaXh1cAogCQkJCXJldE5ld0hlYWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZShjb21taXRNZXNzYWdlKQpAQCAtNzg1LDIxICs4MjgsNiBAQCBwcml2YXRlIFJldkNvbW1pdCBzcXVhc2hJbnRvUHJldmlvdXMoYm9vbGVhbiBzZXF1ZW5jZUNvbnRhaW5zU3F1YXNoLAogCQlyZXR1cm4gcmV0TmV3SGVhZDsKIAl9CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyaXBDb21tZW50TGluZXMoU3RyaW5nIGNvbW1pdE1lc3NhZ2UpIHsKLQkJU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlmb3IgKFN0cmluZyBsaW5lIDogY29tbWl0TWVzc2FnZS5zcGxpdCgiXG4iKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpZiAoIWxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgLy8kTk9OLU5MUy0xJAotCQkJCXJlc3VsdC5hcHBlbmQobGluZSkuYXBwZW5kKCJcbiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKCFjb21taXRNZXNzYWdlLmVuZHNXaXRoKCJcbiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWludCBidWZmZXJTaXplID0gcmVzdWx0Lmxlbmd0aCgpOwotCQkJaWYgKGJ1ZmZlclNpemUgPiAwICYmIHJlc3VsdC5jaGFyQXQoYnVmZmVyU2l6ZSAtIDEpID09ICdcbicpIHsKLQkJCQlyZXN1bHQuZGVsZXRlQ2hhckF0KGJ1ZmZlclNpemUgLSAxKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCiAJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCiAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbXBvc2VTcXVhc2hNZXNzYWdlKGJvb2xlYW4gaXNTcXVhc2gsCiAJCQlSZXZDb21taXQgY29tbWl0VG9QaWNrLCBTdHJpbmcgY3VyclNxdWFzaE1lc3NhZ2UsIGludCBjb3VudCkgewpAQCAtMTYyNSwyNiArMTY1MywxMDYgQEAgcHVibGljIFJlYmFzZUNvbW1hbmQgc2V0UHJlc2VydmVNZXJnZXMoYm9vbGVhbiBwcmVzZXJ2ZSkgewogCX0KIAogCS8qKgotCSAqIEFsbG93cyBjb25maWd1cmUgcmViYXNlIGludGVyYWN0aXZlIHByb2Nlc3MgYW5kIG1vZGlmeSBjb21taXQgbWVzc2FnZQorCSAqIEFsbG93cyB0byBjb25maWd1cmUgdGhlIGludGVyYWN0aXZlIHJlYmFzZSBwcm9jZXNzIHN0ZXBzIGFuZCB0byBtb2RpZnkKKwkgKiBjb21taXQgbWVzc2FnZXMuCiAJICovCiAJcHVibGljIGludGVyZmFjZSBJbnRlcmFjdGl2ZUhhbmRsZXIgeworCiAJCS8qKgotCQkgKiBHaXZlbiBsaXN0IG9mIHtAY29kZSBzdGVwc30gc2hvdWxkIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byB1c2VyCi0JCSAqIHJlYmFzZSBjb25maWd1cmF0aW9uCisJCSAqIENhbGxiYWNrIEFQSSB0byBtb2RpZnkgdGhlIGluaXRpYWwgbGlzdCBvZiBpbnRlcmFjdGl2ZSByZWJhc2Ugc3RlcHMuCisJCSAqCiAJCSAqIEBwYXJhbSBzdGVwcwotCQkgKiAgICAgICAgICAgIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiByZWJhc2UgaW50ZXJhY3RpdmUKKwkJICogICAgICAgICAgICBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgaW50ZXJhY3RpdmUgcmViYXNlCiAJCSAqLwogCQl2b2lkIHByZXBhcmVTdGVwcyhMaXN0PFJlYmFzZVRvZG9MaW5lPiBzdGVwcyk7CiAKIAkJLyoqCi0JCSAqIFVzZWQgZm9yIGVkaXRpbmcgY29tbWl0IG1lc3NhZ2Ugb24gUkVXT1JECisJCSAqIFVzZWQgZm9yIGVkaXRpbmcgY29tbWl0IG1lc3NhZ2Ugb24gUkVXT1JEIG9yIFNRVUFTSC4KIAkJICoKLQkJICogQHBhcmFtIGNvbW1pdAorCQkgKiBAcGFyYW0gbWVzc2FnZQorCQkgKiAgICAgICAgICAgIGV4aXN0aW5nIGNvbW1pdCBtZXNzYWdlCiAJCSAqIEByZXR1cm4gbmV3IGNvbW1pdCBtZXNzYWdlCiAJCSAqLwotCQlTdHJpbmcgbW9kaWZ5Q29tbWl0TWVzc2FnZShTdHJpbmcgY29tbWl0KTsKKwkJU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpOwogCX0KIAorCS8qKgorCSAqIEV4dGVuZHMge0BsaW5rIEludGVyYWN0aXZlSGFuZGxlcn0gd2l0aCBhbiBlbmhhbmNlZCBjYWxsYmFjayBmb3IgZWRpdGluZworCSAqIGNvbW1pdCBtZXNzYWdlcy4KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIEludGVyYWN0aXZlSGFuZGxlcjIgZXh0ZW5kcyBJbnRlcmFjdGl2ZUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBDYWxsYmFjayBBUEkgZm9yIGVkaXRpbmcgYSBjb21taXQgbWVzc2FnZSBvbiBSRVdPUkQgb3IgU1FVQVNILgorCQkgKiA8cD4KKwkJICogVGhlIGNhbGxiYWNrIGdldHMgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIGN1cnJlbnRseSBzZXQsIGFuZCB0aGUKKwkJICogY2xlYW4tdXAgbW9kZS4gSXQgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHdoZW4gcHJlc2VudGluZyB0aGUKKwkJICogbWVzc2FnZSB0byB0aGUgdXNlciwgYW5kIGl0IGFsc28gaGFzIHRoZSBwb3NzaWJpbGl0eSB0byBjbGVhbiB0aGUKKwkJICogbWVzc2FnZSBpdHNlbGYgKGluIHdoaWNoIGNhc2UgdGhlIHJldHVybmVkIHtAbGluayBNb2RpZnlSZXN1bHR9CisJCSAqIHNob3VsZCBoYXZlIHtAbGluayBDbGVhbnVwTW9kZSNWRVJCQVRJTX0gc2V0IGxlc3QgSkdpdCBjbGVhbnMgdGhlCisJCSAqIG1lc3NhZ2UgYWdhaW4pLiBJdCBjYW4gYWxzbyBvdmVycmlkZSB0aGUgaW5pdGlhbCBjbGVhbi11cCBtb2RlIGJ5CisJCSAqIHJldHVybmluZyBjbGVhbi11cCBtb2RlIG90aGVyIHRoYW4ge0BsaW5rIENsZWFudXBNb2RlI0RFRkFVTFR9LiBJZiBpdAorCQkgKiBkb2VzIHJldHVybiB7QGNvZGUgREVGQVVMVH0sIHRoZSBwYXNzZWQtaW4ge0Bjb2RlIG1vZGV9IHdpbGwgYmUKKwkJICogYXBwbGllZC4KKwkJICogPC9wPgorCQkgKgorCQkgKiBAcGFyYW0gbWVzc2FnZQorCQkgKiAgICAgICAgICAgIGV4aXN0aW5nIGNvbW1pdCBtZXNzYWdlCisJCSAqIEBwYXJhbSBtb2RlCisJCSAqICAgICAgICAgICAge0BsaW5rIENsZWFudXBNb2RlfSBjdXJyZW50bHkgc2V0CisJCSAqIEBwYXJhbSBjb21tZW50Q2hhcgorCQkgKiAgICAgICAgICAgIGNvbW1lbnQgY2hhcmFjdGVyIHVzZWQKKwkJICogQHJldHVybiBhIHtAbGluayBNb2RpZnlSZXN1bHR9CisJCSAqLworCQlATm9uTnVsbAorCQlNb2RpZnlSZXN1bHQgZWRpdENvbW1pdE1lc3NhZ2UoQE5vbk51bGwgU3RyaW5nIG1lc3NhZ2UsCisJCQkJQE5vbk51bGwgQ2xlYW51cE1vZGUgbW9kZSwgY2hhciBjb21tZW50Q2hhcik7CisKKwkJQE92ZXJyaWRlCisJCWRlZmF1bHQgU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKwkJCS8vIFNob3VsZCBhY3R1YWxseSBub3QgYmUgY2FsbGVkOyBidXQgZG8gc29tZXRoaW5nIHJlYXNvbmFibGUgYW55d2F5CisJCQlNb2RpZnlSZXN1bHQgcmVzdWx0ID0gZWRpdENvbW1pdE1lc3NhZ2UoCisJCQkJCW1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgQ2xlYW51cE1vZGUuU1RSSVAsIC8vJE5PTi1OTFMtMSQKKwkJCQkJJyMnKTsKKwkJCXJldHVybiByZXN1bHQuZ2V0TWVzc2FnZSgpOworCQl9CisKKwkJLyoqCisJCSAqIERlc2NyaWJlcyB0aGUgcmVzdWx0IG9mIGVkaXRpbmcgYSBjb21taXQgbWVzc2FnZTogdGhlIG5ldyBtZXNzYWdlLAorCQkgKiBhbmQgaG93IGl0IHNob3VsZCBiZSBjbGVhbmVkLgorCQkgKi8KKwkJaW50ZXJmYWNlIE1vZGlmeVJlc3VsdCB7CisKKwkJCS8qKgorCQkJICogUmV0cmlldmVzIHRoZSBuZXcgY29tbWl0IG1lc3NhZ2UuCisJCQkgKgorCQkJICogQHJldHVybiB0aGUgbWVzc2FnZQorCQkJICovCisJCQlATm9uTnVsbAorCQkJU3RyaW5nIGdldE1lc3NhZ2UoKTsKKworCQkJLyoqCisJCQkgKiBUZWxscyBob3cgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRNZXNzYWdlKCl9IHNob3VsZCBiZQorCQkJICogY2xlYW5lZC4KKwkJCSAqCisJCQkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQ2xlYW51cE1vZGV9CisJCQkgKi8KKwkJCUBOb25OdWxsCisJCQlDbGVhbnVwTW9kZSBnZXRDbGVhbnVwTW9kZSgpOworCisJCQkvKioKKwkJCSAqIFRlbGxzIHdoZXRoZXIgYSBHZXJyaXQgQ2hhbmdlLUlkIHNob3VsZCBiZSBjb21wdXRlZCBhbmQgYWRkZWQgdG8KKwkJCSAqIHRoZSBjb21taXQgbWVzc2FnZSwgYXMgd2l0aAorCQkJICoge0BsaW5rIENvbW1pdENvbW1hbmQjc2V0SW5zZXJ0Q2hhbmdlSWQoYm9vbGVhbil9LgorCQkJICoKKwkJCSAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGEgQ2hhbmdlLUlkIHNob3VsZCBiZSBoYW5kbGVkLAorCQkJICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorCQkJICovCisJCQlib29sZWFuIHNob3VsZEFkZENoYW5nZUlkKCk7CisJCX0KKwl9CiAKIAlQZXJzb25JZGVudCBwYXJzZUF1dGhvcihieXRlW10gcmF3KSB7CiAJCWlmIChyYXcubGVuZ3RoID09IDApCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kLmphdmEKaW5kZXggMjJlZjRkMC4uZGI4OGFkOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmQuamF2YQpAQCAtOSw2ICs5LDggQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKQEAgLTEyOCw4ICsxMzAsOSBAQCBwdWJsaWMgUmV2Q29tbWl0IGNhbGwoKSB0aHJvd3MgTm9NZXNzYWdlRXhjZXB0aW9uLCBVbm1lcmdlZFBhdGhzRXhjZXB0aW9uLAogCQkJCXJldldhbGsucGFyc2VIZWFkZXJzKHNyY1BhcmVudCk7CiAKIAkJCQlTdHJpbmcgb3VyTmFtZSA9IGNhbGN1bGF0ZU91ck5hbWUoaGVhZFJlZik7Ci0JCQkJU3RyaW5nIHJldmVydE5hbWUgPSBzcmNDb21taXQuZ2V0SWQoKS5hYmJyZXZpYXRlKDcpLm5hbWUoKQotCQkJCQkJKyAiICIgKyBzcmNDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQlTdHJpbmcgcmV2ZXJ0TmFtZSA9IHNyY0NvbW1pdC5nZXRJZCgpCisJCQkJCQkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpLm5hbWUoKSArICIgIiAvLyROT04tTkxTLTEkCisJCQkJCQkrIHNyY0NvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKTsKIAogCQkJCVJlc29sdmVNZXJnZXIgbWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvKTsKIAkJCQltZXJnZXIuc2V0V29ya2luZ1RyZWVJdGVyYXRvcihuZXcgRmlsZVRyZWVJdGVyYXRvcihyZXBvKSk7CkBAIC0xODMsOCArMTg2LDggQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIE5vTWVzc2FnZUV4Y2VwdGlvbiwgVW5tZXJnZWRQYXRoc0V4Y2VwdGlvbiwKIAkJCQkJCQkJbWVyZ2VyLmdldE1lcmdlUmVzdWx0cygpLCBmYWlsaW5nUGF0aHMsIG51bGwpOwogCQkJCQlpZiAoIW1lcmdlci5mYWlsZWQoKSAmJiAhdW5tZXJnZWRQYXRocy5pc0VtcHR5KCkpIHsKIAkJCQkJCVN0cmluZyBtZXNzYWdlID0gbmV3IE1lcmdlTWVzc2FnZUZvcm1hdHRlcigpCi0JCQkJCQkuZm9ybWF0V2l0aENvbmZsaWN0cyhuZXdNZXNzYWdlLAotCQkJCQkJCQltZXJnZXIuZ2V0VW5tZXJnZWRQYXRocygpKTsKKwkJCQkJCQkJLmZvcm1hdFdpdGhDb25mbGljdHMobmV3TWVzc2FnZSwKKwkJCQkJCQkJCQltZXJnZXIuZ2V0VW5tZXJnZWRQYXRocygpLCAnIycpOwogCQkJCQkJcmVwby53cml0ZVJldmVydEhlYWQoc3JjQ29tbWl0LmdldElkKCkpOwogCQkJCQkJcmVwby53cml0ZU1lcmdlQ29tbWl0TXNnKG1lc3NhZ2UpOwogCQkJCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaENyZWF0ZUNvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQ3JlYXRlQ29tbWFuZC5qYXZhCmluZGV4IDM1ZmQ4OTkuLmY3YTFmNGUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQ3JlYXRlQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQ3JlYXRlQ29tbWFuZC5qYXZhCkBAIC05LDYgKzksOCBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CisKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwpAQCAtMzAyLDcgKzMwNCw4IEBAIHB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7CiAJCQkJYnVpbGRlci5zZXRQYXJlbnRJZChoZWFkQ29tbWl0KTsKIAkJCQlidWlsZGVyLnNldFRyZWVJZChjYWNoZS53cml0ZVRyZWUoaW5zZXJ0ZXIpKTsKIAkJCQlidWlsZGVyLnNldE1lc3NhZ2UoTWVzc2FnZUZvcm1hdC5mb3JtYXQoaW5kZXhNZXNzYWdlLCBicmFuY2gsCi0JCQkJCQloZWFkQ29tbWl0LmFiYnJldmlhdGUoNykubmFtZSgpLAorCQkJCQkJaGVhZENvbW1pdC5hYmJyZXZpYXRlKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkKKwkJCQkJCQkJLm5hbWUoKSwKIAkJCQkJCWhlYWRDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpKTsKIAkJCQlPYmplY3RJZCBpbmRleENvbW1pdCA9IGluc2VydGVyLmluc2VydChidWlsZGVyKTsKIApAQCAtMzE5LDcgKzMyMiwxMCBAQCBwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewogCQkJCQlidWlsZGVyLnNldFBhcmVudElkcyhuZXcgT2JqZWN0SWRbMF0pOwogCQkJCQlidWlsZGVyLnNldFRyZWVJZCh1bnRyYWNrZWREaXJDYWNoZS53cml0ZVRyZWUoaW5zZXJ0ZXIpKTsKIAkJCQkJYnVpbGRlci5zZXRNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1TR19VTlRSQUNLRUQsCi0JCQkJCQkJYnJhbmNoLCBoZWFkQ29tbWl0LmFiYnJldmlhdGUoNykubmFtZSgpLAorCQkJCQkJCWJyYW5jaCwKKwkJCQkJCQloZWFkQ29tbWl0CisJCQkJCQkJCQkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpCisJCQkJCQkJCQkubmFtZSgpLAogCQkJCQkJCWhlYWRDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpKTsKIAkJCQkJdW50cmFja2VkQ29tbWl0ID0gaW5zZXJ0ZXIuaW5zZXJ0KGJ1aWxkZXIpOwogCQkJCX0KQEAgLTMzOSw3ICszNDUsOCBAQCBwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewogCQkJCQlidWlsZGVyLmFkZFBhcmVudElkKHVudHJhY2tlZENvbW1pdCk7CiAJCQkJYnVpbGRlci5zZXRNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAogCQkJCQkJd29ya2luZ0RpcmVjdG9yeU1lc3NhZ2UsIGJyYW5jaCwKLQkJCQkJCWhlYWRDb21taXQuYWJicmV2aWF0ZSg3KS5uYW1lKCksCisJCQkJCQloZWFkQ29tbWl0LmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKQorCQkJCQkJCQkubmFtZSgpLAogCQkJCQkJaGVhZENvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKSkpOwogCQkJCWJ1aWxkZXIuc2V0VHJlZUlkKGNhY2hlLndyaXRlVHJlZShpbnNlcnRlcikpOwogCQkJCWNvbW1pdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KGJ1aWxkZXIpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YQppbmRleCA2MzhkZDgyLi43ZWM3ODU5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YQpAQCAtMSw0MyArMSwxMSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgSXZhbiBNb3RzY2ggPGl2YW4ubW90c2NoQGJzaWFnLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAyMiBJdmFuIE1vdHNjaCA8aXZhbi5tb3RzY2hAYnNpYWcuY29tPiBhbmQgb3RoZXJzCiAgKgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCi0gKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCi0gKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCiAgKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCi0gKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKLSAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCi0gKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi0gKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLSAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAotICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKLSAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7CiAKQEAgLTQ2LDYgKzE0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlLlN0YXRlOwpAQCAtODQsNiArNTMsOCBAQCBwdWJsaWMgY2xhc3MgQXR0cmlidXRlc0hhbmRsZXIgewogCiAJcHJpdmF0ZSBmaW5hbCBUcmVlV2FsayB0cmVlV2FsazsKIAorCXByaXZhdGUgZmluYWwgU3VwcGxpZXI8Q2Fub25pY2FsVHJlZVBhcnNlcj4gYXR0cmlidXRlc1RyZWU7CisKIAlwcml2YXRlIGZpbmFsIEF0dHJpYnV0ZXNOb2RlIGdsb2JhbE5vZGU7CiAKIAlwcml2YXRlIGZpbmFsIEF0dHJpYnV0ZXNOb2RlIGluZm9Ob2RlOwpAQCAtOTgsMjIgKzY5LDQxIEBAIHB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzSGFuZGxlciB7CiAJICogQHBhcmFtIHRyZWVXYWxrCiAJICogICAgICAgICAgICBhIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrfQogCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorCSAqIEBkZXByZWNhdGVkIHNpbmNlIDYuMSwgdXNlIHtAbGluayAjQXR0cmlidXRlc0hhbmRsZXIoVHJlZVdhbGssIFN1cHBsaWVyKX0KKwkgKiAgICAgICAgICAgICBpbnN0ZWFkCiAJICovCisJQERlcHJlY2F0ZWQKIAlwdWJsaWMgQXR0cmlidXRlc0hhbmRsZXIoVHJlZVdhbGsgdHJlZVdhbGspIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXModHJlZVdhbGssICgpIC0+IHRyZWVXYWxrLmdldFRyZWUoQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcykpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZXNIYW5kbGVyfSB3aXRoCisJICogZGVmYXVsdCBydWxlcyBhcyB3ZWxsIGFzIG1lcmdlZCBydWxlcyBmcm9tIGdsb2JhbCwgaW5mbyBhbmQgd29ya3RyZWUgcm9vdAorCSAqIGF0dHJpYnV0ZXMKKwkgKgorCSAqIEBwYXJhbSB0cmVlV2FsaworCSAqICAgICAgICAgICAgYSB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2Fsa30KKwkgKiBAcGFyYW0gYXR0cmlidXRlc1RyZWUKKwkgKiAgICAgICAgICAgIHRoZSB0cmVlIHRvIHJlYWQgLmdpdGF0dHJpYnV0ZXMgZnJvbQorCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgQXR0cmlidXRlc0hhbmRsZXIoVHJlZVdhbGsgdHJlZVdhbGssCisJCQlTdXBwbGllcjxDYW5vbmljYWxUcmVlUGFyc2VyPiBhdHRyaWJ1dGVzVHJlZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJdGhpcy50cmVlV2FsayA9IHRyZWVXYWxrOwotCQlBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPXRyZWVXYWxrLmdldEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIoKTsKKwkJdGhpcy5hdHRyaWJ1dGVzVHJlZSA9IGF0dHJpYnV0ZXNUcmVlOworCQlBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPSB0cmVlV2FsaworCQkJCS5nZXRBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyKCk7CiAJCXRoaXMuZ2xvYmFsTm9kZSA9IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgIT0gbnVsbAogCQkJCT8gYXR0cmlidXRlc05vZGVQcm92aWRlci5nZXRHbG9iYWxBdHRyaWJ1dGVzTm9kZSgpIDogbnVsbDsKIAkJdGhpcy5pbmZvTm9kZSA9IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgIT0gbnVsbAogCQkJCT8gYXR0cmlidXRlc05vZGVQcm92aWRlci5nZXRJbmZvQXR0cmlidXRlc05vZGUoKSA6IG51bGw7CiAKIAkJQXR0cmlidXRlc05vZGUgcm9vdE5vZGUgPSBhdHRyaWJ1dGVzTm9kZSh0cmVlV2FsaywKLQkJCQlyb290T2YoCi0JCQkJCQl0cmVlV2Fsay5nZXRUcmVlKFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpKSwKLQkJCQlyb290T2YoCi0JCQkJCQl0cmVlV2Fsay5nZXRUcmVlKERpckNhY2hlSXRlcmF0b3IuY2xhc3MpKSwKLQkJCQlyb290T2YodHJlZVdhbGsKLQkJCQkJCS5nZXRUcmVlKENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpKSk7CisJCQkJcm9vdE9mKHRyZWVXYWxrLmdldFRyZWUoV29ya2luZ1RyZWVJdGVyYXRvci5jbGFzcykpLAorCQkJCXJvb3RPZih0cmVlV2Fsay5nZXRUcmVlKERpckNhY2hlSXRlcmF0b3IuY2xhc3MpKSwKKwkJCQlyb290T2YoYXR0cmlidXRlc1RyZWUuZ2V0KCkpKTsKIAogCQlleHBhbnNpb25zLnB1dChCSU5BUllfUlVMRV9LRVksIEJJTkFSWV9SVUxFX0FUVFJJQlVURVMpOwogCQlmb3IgKEF0dHJpYnV0ZXNOb2RlIG5vZGUgOiBuZXcgQXR0cmlidXRlc05vZGVbXSB7IGdsb2JhbE5vZGUsIHJvb3ROb2RlLApAQCAtMTUyLDcgKzE0Miw3IEBAIHB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQkJCWlzRGlyZWN0b3J5LAogCQkJCXRyZWVXYWxrLmdldFRyZWUoV29ya2luZ1RyZWVJdGVyYXRvci5jbGFzcyksCiAJCQkJdHJlZVdhbGsuZ2V0VHJlZShEaXJDYWNoZUl0ZXJhdG9yLmNsYXNzKSwKLQkJCQl0cmVlV2Fsay5nZXRUcmVlKENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpLAorCQkJCWF0dHJpYnV0ZXNUcmVlLmdldCgpLAogCQkJCWF0dHJpYnV0ZXMpOwogCiAJCS8vIEdldHMgdGhlIGF0dHJpYnV0ZXMgbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIGF0dHJpYnV0ZSBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkZvcm1hdHRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXIuamF2YQppbmRleCA0OWRhOTVjLi4xYTVmNzRmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkZvcm1hdHRlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9EaWZmRm9ybWF0dGVyLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5DaGFuZ2VUeXBlLlJFTkFNRTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5TaWRlLk5FVzsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5TaWRlLk9MRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLmVuY29kZTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLmVuY29kZUFTQ0lJOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZS5HSVRMSU5LOwpAQCAtOTAsNyArOTEsNyBAQCBwdWJsaWMgY2xhc3MgRGlmZkZvcm1hdHRlciBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgewogCiAJcHJpdmF0ZSBpbnQgY29udGV4dCA9IDM7CiAKLQlwcml2YXRlIGludCBhYmJyZXZpYXRpb25MZW5ndGggPSA3OworCXByaXZhdGUgaW50IGFiYnJldmlhdGlvbkxlbmd0aCA9IE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKIAogCXByaXZhdGUgRGlmZkFsZ29yaXRobSBkaWZmQWxnb3JpdGhtOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpcmNhY2hlL0RpckNhY2hlQ2hlY2tvdXQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCmluZGV4IGM5MDRhNzguLjNkNTBhODIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCkBAIC00LDcgKzQsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LCBSb2dlciBDLiBTb2FyZXMgPHJvZ2Vyc29hcmVzQGludGVsaW5ldC5jb20uYnI+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgQ2hyaXNpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMCwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMiwgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI5OSw3ICszMDAsNyBAQCBwdWJsaWMgdm9pZCBwcmVTY2FuVHdvVHJlZXMoKSB0aHJvd3MgQ29ycnVwdE9iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQl3YWxrID0gbmV3IE5hbWVDb25mbGljdFRyZWVXYWxrKHJlcG8pOwogCQlidWlsZGVyID0gZGMuYnVpbGRlcigpOwogCi0JCWFkZFRyZWUod2FsaywgaGVhZENvbW1pdFRyZWUpOworCQl3YWxrLnNldEhlYWQoYWRkVHJlZSh3YWxrLCBoZWFkQ29tbWl0VHJlZSkpOwogCQlhZGRUcmVlKHdhbGssIG1lcmdlQ29tbWl0VHJlZSk7CiAJCWludCBkY2lQb3MgPSB3YWxrLmFkZFRyZWUobmV3IERpckNhY2hlQnVpbGRJdGVyYXRvcihidWlsZGVyKSk7CiAJCXdhbGsuYWRkVHJlZSh3b3JraW5nVHJlZSk7CkBAIC0zMTUsMTMgKzMxNiw2IEBAIHB1YmxpYyB2b2lkIHByZVNjYW5Ud29UcmVlcygpIHRocm93cyBDb3JydXB0T2JqZWN0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKLQlwcml2YXRlIHZvaWQgYWRkVHJlZShUcmVlV2FsayB0dywgT2JqZWN0SWQgaWQpIHRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLCBJbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChpZCA9PSBudWxsKQotCQkJdHcuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7Ci0JCWVsc2UKLQkJCXR3LmFkZFRyZWUoaWQpOwotCX0KLQogCS8qKgogCSAqIFNjYW4gaW5kZXggYW5kIG1lcmdlIHRyZWUgKG5vIEhFQUQpLiBVc2VkIGUuZy4gZm9yIGluaXRpYWwgY2hlY2tvdXQgd2hlbgogCSAqIHRoZXJlIGlzIG5vIGhlYWQgeWV0LgpAQCAtMzQxLDcgKzMzNSw3IEBAIHB1YmxpYyB2b2lkIHByZXNjYW5PbmVUcmVlKCkKIAkJYnVpbGRlciA9IGRjLmJ1aWxkZXIoKTsKIAogCQl3YWxrID0gbmV3IE5hbWVDb25mbGljdFRyZWVXYWxrKHJlcG8pOwotCQlhZGRUcmVlKHdhbGssIG1lcmdlQ29tbWl0VHJlZSk7CisJCXdhbGsuc2V0SGVhZChhZGRUcmVlKHdhbGssIG1lcmdlQ29tbWl0VHJlZSkpOwogCQlpbnQgZGNpUG9zID0gd2Fsay5hZGRUcmVlKG5ldyBEaXJDYWNoZUJ1aWxkSXRlcmF0b3IoYnVpbGRlcikpOwogCQl3YWxrLmFkZFRyZWUod29ya2luZ1RyZWUpOwogCQl3b3JraW5nVHJlZS5zZXREaXJDYWNoZUl0ZXJhdG9yKHdhbGssIGRjaVBvcyk7CkBAIC0zNTYsNiArMzUwLDE0IEBAIHB1YmxpYyB2b2lkIHByZXNjYW5PbmVUcmVlKCkKIAkJY29uZmxpY3RzLnJlbW92ZUFsbChyZW1vdmVkKTsKIAl9CiAKKwlwcml2YXRlIGludCBhZGRUcmVlKFRyZWVXYWxrIHR3LCBPYmplY3RJZCBpZCkgdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sCisJCQlJbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWlmIChpZCA9PSBudWxsKSB7CisJCQlyZXR1cm4gdHcuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIHR3LmFkZFRyZWUoaWQpOworCX0KKwogCS8qKgogCSAqIFByb2Nlc3NpbmcgYW4gZW50cnkgaW4gdGhlIGNvbnRleHQgb2Yge0BsaW5rICNwcmVzY2FuT25lVHJlZSgpfSB3aGVuIG9ubHkKIAkgKiBvbmUgdHJlZSBpcyBnaXZlbgpAQCAtMzgyLDE3ICszODQsMTQgQEAgdm9pZCBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBtLCBEaXJDYWNoZUJ1aWxkSXRlcmF0b3IgaSwKIAkJCQkJCS8vIGZhaWxPbkNvbmZsaWN0IGlzIGZhbHNlLiBQdXR0aW5nIHNvbWV0aGluZyB0byBjb25mbGljdHMKIAkJCQkJCS8vIHdvdWxkIG1lYW4gd2UgZGVsZXRlIGl0LiBJbnN0ZWFkIHdlIHdhbnQgdGhlIG1lcmdlQ29tbWl0CiAJCQkJCQkvLyBjb250ZW50IHRvIGJlIGNoZWNrZWQgb3V0LgotCQkJCQkJdXBkYXRlKG0uZ2V0RW50cnlQYXRoU3RyaW5nKCksIG0uZ2V0RW50cnlPYmplY3RJZCgpLAotCQkJCQkJCQltLmdldEVudHJ5RmlsZU1vZGUoKSk7CisJCQkJCQl1cGRhdGUobSk7CiAJCQkJCX0KIAkJCQl9IGVsc2UKLQkJCQkJdXBkYXRlKG0uZ2V0RW50cnlQYXRoU3RyaW5nKCksIG0uZ2V0RW50cnlPYmplY3RJZCgpLAotCQkJCQkJbS5nZXRFbnRyeUZpbGVNb2RlKCkpOworCQkJCQl1cGRhdGUobSk7CiAJCQl9IGVsc2UgaWYgKGYgPT0gbnVsbCB8fCAhbS5pZEVxdWFsKGkpKSB7CiAJCQkJLy8gVGhlIHdvcmtpbmcgdHJlZSBmaWxlIGlzIG1pc3Npbmcgb3IgdGhlIG1lcmdlIGNvbnRlbnQgZGlmZmVycwogCQkJCS8vIGZyb20gaW5kZXggY29udGVudAotCQkJCXVwZGF0ZShtLmdldEVudHJ5UGF0aFN0cmluZygpLCBtLmdldEVudHJ5T2JqZWN0SWQoKSwKLQkJCQkJCW0uZ2V0RW50cnlGaWxlTW9kZSgpKTsKKwkJCQl1cGRhdGUobSk7CiAJCQl9IGVsc2UgaWYgKGkuZ2V0RGlyQ2FjaGVFbnRyeSgpICE9IG51bGwpIHsKIAkJCQkvLyBUaGUgaW5kZXggY29udGFpbnMgYSBmaWxlIChhbmQgbm90IGEgZm9sZGVyKQogCQkJCWlmIChmLmlzTW9kaWZpZWQoaS5nZXREaXJDYWNoZUVudHJ5KCksIHRydWUsCkBAIC00MDAsOCArMzk5LDcgQEAgdm9pZCBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBtLCBEaXJDYWNoZUJ1aWxkSXRlcmF0b3IgaSwKIAkJCQkJCXx8IGkuZ2V0RGlyQ2FjaGVFbnRyeSgpLmdldFN0YWdlKCkgIT0gMCkKIAkJCQkJLy8gVGhlIHdvcmtpbmcgdHJlZSBmaWxlIGlzIGRpcnR5IG9yIHRoZSBpbmRleCBjb250YWlucyBhCiAJCQkJCS8vIGNvbmZsaWN0Ci0JCQkJCXVwZGF0ZShtLmdldEVudHJ5UGF0aFN0cmluZygpLCBtLmdldEVudHJ5T2JqZWN0SWQoKSwKLQkJCQkJCQltLmdldEVudHJ5RmlsZU1vZGUoKSk7CisJCQkJCXVwZGF0ZShtKTsKIAkJCQllbHNlIHsKIAkJCQkJLy8gdXBkYXRlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IHdpdGggdGhlIG9uZSBmcm9tIHRoZQogCQkJCQkvLyBmaWxlIGlmIG5vdCBzZXQsIGFzIHdlIGFyZSBzdXJlIHRvIGJlIGluIHN5bmMgaGVyZS4KQEAgLTgwMiw3ICs4MDAsNyBAQCB2b2lkIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGgsIENhbm9uaWNhbFRyZWVQYXJzZXIgbSwKIAkJCQlpZiAoZiAhPSBudWxsICYmIGlzTW9kaWZpZWRTdWJ0cmVlX0luZGV4V29ya2luZ3RyZWUobmFtZSkpIHsKIAkJCQkJY29uZmxpY3QobmFtZSwgZGNlLCBoLCBtKTsgLy8gMQogCQkJCX0gZWxzZSB7Ci0JCQkJCXVwZGF0ZShuYW1lLCBtSWQsIG1Nb2RlKTsgLy8gMgorCQkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7IC8vIDIKIAkJCQl9CiAKIAkJCQlicmVhazsKQEAgLTgyOCw3ICs4MjYsNyBAQCB2b2lkIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGgsIENhbm9uaWNhbFRyZWVQYXJzZXIgbSwKIAkJCQkvLyBhcmUgZm91bmQgbGF0ZXIKIAkJCQlicmVhazsKIAkJCWNhc2UgMHhEMEY6IC8vIDE5Ci0JCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOworCQkJCXVwZGF0ZSgxLCBuYW1lLCBtSWQsIG1Nb2RlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHhERjA6IC8vIGNvbmZsaWN0IHdpdGhvdXQgYSBydWxlCiAJCQljYXNlIDB4MEZEOiAvLyAxNQpAQCAtODM5LDcgKzgzNyw3IEBAIHZvaWQgcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgaCwgQ2Fub25pY2FsVHJlZVBhcnNlciBtLAogCQkJCQlpZiAoaXNNb2RpZmllZFN1YnRyZWVfSW5kZXhXb3JraW5ndHJlZShuYW1lKSkKIAkJCQkJCWNvbmZsaWN0KG5hbWUsIGRjZSwgaCwgbSk7IC8vIDgKIAkJCQkJZWxzZQotCQkJCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOyAvLyA3CisJCQkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7IC8vIDcKIAkJCQl9IGVsc2UKIAkJCQkJY29uZmxpY3QobmFtZSwgZGNlLCBoLCBtKTsgLy8gOQogCQkJCWJyZWFrOwpAQCAtODU5LDcgKzg1Nyw3IEBAIHZvaWQgcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgaCwgQ2Fub25pY2FsVHJlZVBhcnNlciBtLAogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBERjogLy8gMTYgMTcKIAkJCQlpZiAoIWlzTW9kaWZpZWRTdWJ0cmVlX0luZGV4V29ya2luZ3RyZWUobmFtZSkpCi0JCQkJCXVwZGF0ZShuYW1lLCBtSWQsIG1Nb2RlKTsKKwkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOwogCQkJCWVsc2UKIAkJCQkJY29uZmxpY3QobmFtZSwgZGNlLCBoLCBtKTsKIAkJCQlicmVhazsKQEAgLTkyOSw3ICs5MjcsNyBAQCB2b2lkIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGgsIENhbm9uaWNhbFRyZWVQYXJzZXIgbSwKIAkJCQkvLyBBdCBsZWFzdCBvbmUgb2YgSGVhZCwgSW5kZXgsIE1lcmdlIGlzIG5vdCBlbXB0eQogCQkJCS8vIC0+IG9ubHkgTWVyZ2UgY29udGFpbnMgc29tZXRoaW5nIGZvciB0aGlzIHBhdGguIFVzZSBpdCEKIAkJCQkvLyBQb3RlbnRpYWxseSB1cGRhdGUgdGhlIGZpbGUKLQkJCQl1cGRhdGUobmFtZSwgbUlkLCBtTW9kZSk7IC8vIDEKKwkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7IC8vIDEKIAkJCWVsc2UgaWYgKG0gPT0gbnVsbCkKIAkJCQkvLyBOb3RoaW5nIGluIE1lcmdlCiAJCQkJLy8gU29tZXRoaW5nIGluIEhlYWQKQEAgLTk0Nyw3ICs5NDUsNyBAQCBlbHNlIGlmIChtID09IG51bGwpCiAJCQkJLy8gZmluZCBpbiBNZXJnZS4gUG90ZW50aWFsbHkgdXBkYXRlcyB0aGUgZmlsZS4KIAkJCQlpZiAoZXF1YWxJZEFuZE1vZGUoaElkLCBoTW9kZSwgbUlkLCBtTW9kZSkpIHsKIAkJCQkJaWYgKGluaXRpYWxDaGVja291dCB8fCBmb3JjZSkgewotCQkJCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOworCQkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOwogCQkJCQl9IGVsc2UgewogCQkJCQkJa2VlcChuYW1lLCBkY2UsIGYpOwogCQkJCQl9CkBAIC0xMTMxLDcgKzExMjksNyBAQCAmJiBpc01vZGlmaWVkX0luZGV4VHJlZShuYW1lLCBpSWQsIGlNb2RlLCBtSWQsIG1Nb2RlLAogCiAJCQkJCQkvLyBUT0RPIGNoZWNrIHRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIHNvbWUgdW5zYXZlZAogCQkJCQkJLy8gZmlsZSBjb250ZW50Ci0JCQkJCQl1cGRhdGUobmFtZSwgbUlkLCBtTW9kZSk7CisJCQkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7CiAJCQkJCX0gZWxzZSBpZiAoZGNlICE9IG51bGwKIAkJCQkJCQkmJiAoZiAhPSBudWxsICYmIGYuaXNNb2RpZmllZChkY2UsIHRydWUsCiAJCQkJCQkJCQl0aGlzLndhbGsuZ2V0T2JqZWN0UmVhZGVyKCkpKSkgewpAQCAtMTE1MCw3ICsxMTQ4LDcgQEAgJiYgaXNNb2RpZmllZF9JbmRleFRyZWUobmFtZSwgaUlkLCBpTW9kZSwgbUlkLCBtTW9kZSwKIAkJCQkJCS8vIC0+IFN0YW5kYXJkIGNhc2Ugd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlczoKIAkJCQkJCS8vIE5vdGhpbmcgbmV3IGluIGluZGV4IGJ1dCBzb21ldGhpbmcgZGlmZmVyZW50IGluCiAJCQkJCQkvLyBNZXJnZS4gVXBkYXRlIGluZGV4IGFuZCBmaWxlCi0JCQkJCQl1cGRhdGUobmFtZSwgbUlkLCBtTW9kZSk7CisJCQkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQkvLyBIZWFkIGRpZmZlcnMgZnJvbSBpbmRleCBvciBtZXJnZSBpcyBzYW1lIGFzIGluZGV4CkBAIC0xMjM3LDEyICsxMjM1LDE3IEBAIHByaXZhdGUgdm9pZCByZW1vdmUoU3RyaW5nIHBhdGgpIHsKIAkJcmVtb3ZlZC5hZGQocGF0aCk7CiAJfQogCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZShTdHJpbmcgcGF0aCwgT2JqZWN0SWQgbUlkLCBGaWxlTW9kZSBtb2RlKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwlwcml2YXRlIHZvaWQgdXBkYXRlKENhbm9uaWNhbFRyZWVQYXJzZXIgdHJlZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdXBkYXRlKDAsIHRyZWUuZ2V0RW50cnlQYXRoU3RyaW5nKCksIHRyZWUuZ2V0RW50cnlPYmplY3RJZCgpLAorCQkJCXRyZWUuZ2V0RW50cnlGaWxlTW9kZSgpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgdXBkYXRlKGludCBpbmRleCwgU3RyaW5nIHBhdGgsIE9iamVjdElkIG1JZCwKKwkJCUZpbGVNb2RlIG1vZGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWlmICghRmlsZU1vZGUuVFJFRS5lcXVhbHMobW9kZSkpIHsKIAkJCXVwZGF0ZWQucHV0KHBhdGgsIG5ldyBDaGVja291dE1ldGFkYXRhKAotCQkJCQl3YWxrLmdldEVvbFN0cmVhbVR5cGUoQ0hFQ0tPVVRfT1ApLAotCQkJCQl3YWxrLmdldEZpbHRlckNvbW1hbmQoQ29uc3RhbnRzLkFUVFJfRklMVEVSX1RZUEVfU01VREdFKSkpOworCQkJCQl3YWxrLmdldENoZWNrb3V0RW9sU3RyZWFtVHlwZShpbmRleCksCisJCQkJCXdhbGsuZ2V0U211ZGdlQ29tbWFuZChpbmRleCkpKTsKIAogCQkJRGlyQ2FjaGVFbnRyeSBlbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KHBhdGgsIERpckNhY2hlRW50cnkuU1RBR0VfMCk7CiAJCQllbnRyeS5zZXRPYmplY3RJZChtSWQpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL0JhcmVTdXBlcnByb2plY3RXcml0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9CYXJlU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2MjZhZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9CYXJlU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzsKKworaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1RBR1M7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5Db25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkpHaXRJbnRlcm5hbEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVFbnRyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb0NvbW1hbmQuTWFuaWZlc3RFcnJvckV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb0NvbW1hbmQuUmVtb3RlRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb0NvbW1hbmQuUmVtb3RlUmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvQ29tbWFuZC5SZW1vdGVVbmF2YWlsYWJsZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb1Byb2plY3QuQ29weUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Qcm9qZWN0LkxpbmtGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbC5SZXBvVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJbnNlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5QZXJzb25JZGVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZVcGRhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlLlJlc3VsdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKKworLyoqCisgKiBXcml0ZXMgLmdpdG1vZHVsZXMgYW5kIGdpdGxpbmtzIG9mIHBhcnNlZCBtYW5pZmVzdCBwcm9qZWN0cyBpbnRvIGEgYmFyZQorICogcmVwb3NpdG9yeS4KKyAqCisgKiBUbyB3cml0ZSBvbiBhIHJlZ3VsYXIgcmVwb3NpdG9yeSwgc2VlIHtAbGluayBSZWd1bGFyU3VwZXJwcm9qZWN0V3JpdGVyfS4KKyAqLworY2xhc3MgQmFyZVN1cGVycHJvamVjdFdyaXRlciB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NQVhfUkVUUklFUyA9IDU7CisKKwkvLyBSZXRyeSBleHBvbmVudGlhbGx5IHdpdGggZGVsYXlzIGluIHRoaXMgcmFuZ2UKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01JTl9SRVRSWV9ERUxBWV9NSUxMSVMgPSA1MDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJZX0RFTEFZX01JTExJUyA9IDUwMDA7CisKKwlwcml2YXRlIGZpbmFsIFJlcG9zaXRvcnkgcmVwbzsKKworCXByaXZhdGUgZmluYWwgVVJJIHRhcmdldFVyaTsKKworCXByaXZhdGUgZmluYWwgU3RyaW5nIHRhcmdldEJyYW5jaDsKKworCXByaXZhdGUgZmluYWwgUmVtb3RlUmVhZGVyIGNhbGxiYWNrOworCisJcHJpdmF0ZSBmaW5hbCBCYXJlV3JpdGVyQ29uZmlnIGNvbmZpZzsKKworCXByaXZhdGUgZmluYWwgUGVyc29uSWRlbnQgYXV0aG9yOworCisJcHJpdmF0ZSBMaXN0PEV4dHJhQ29udGVudD4gZXh0cmFDb250ZW50czsKKworCXN0YXRpYyBjbGFzcyBCYXJlV3JpdGVyQ29uZmlnIHsKKwkJYm9vbGVhbiBpZ25vcmVSZW1vdGVGYWlsdXJlcyA9IGZhbHNlOworCisJCWJvb2xlYW4gcmVjb3JkUmVtb3RlQnJhbmNoID0gdHJ1ZTsKKworCQlib29sZWFuIHJlY29yZFN1Ym1vZHVsZUxhYmVscyA9IHRydWU7CisKKwkJYm9vbGVhbiByZWNvcmRTaGFsbG93U3VibW9kdWxlcyA9IHRydWU7CisKKwkJc3RhdGljIEJhcmVXcml0ZXJDb25maWcgZ2V0RGVmYXVsdCgpIHsKKwkJCXJldHVybiBuZXcgQmFyZVdyaXRlckNvbmZpZygpOworCQl9CisKKwkJcHJpdmF0ZSBCYXJlV3JpdGVyQ29uZmlnKCkgeworCQl9CisJfQorCisJc3RhdGljIGNsYXNzIEV4dHJhQ29udGVudCB7CisJCWZpbmFsIFN0cmluZyBwYXRoOworCisJCWZpbmFsIFN0cmluZyBjb250ZW50OworCisJCUV4dHJhQ29udGVudChTdHJpbmcgcGF0aCwgU3RyaW5nIGNvbnRlbnQpIHsKKwkJCXRoaXMucGF0aCA9IHBhdGg7CisJCQl0aGlzLmNvbnRlbnQgPSBjb250ZW50OworCQl9CisJfQorCisJQmFyZVN1cGVycHJvamVjdFdyaXRlcihSZXBvc2l0b3J5IHJlcG8sIFVSSSB0YXJnZXRVcmksCisJCQlTdHJpbmcgdGFyZ2V0QnJhbmNoLAorCQkJUGVyc29uSWRlbnQgYXV0aG9yLCBSZW1vdGVSZWFkZXIgY2FsbGJhY2ssCisJCQlCYXJlV3JpdGVyQ29uZmlnIGNvbmZpZywKKwkJCUxpc3Q8RXh0cmFDb250ZW50PiBleHRyYUNvbnRlbnRzKSB7CisJCWFzc2VydCAocmVwby5pc0JhcmUoKSk7CisJCXRoaXMucmVwbyA9IHJlcG87CisJCXRoaXMudGFyZ2V0VXJpID0gdGFyZ2V0VXJpOworCQl0aGlzLnRhcmdldEJyYW5jaCA9IHRhcmdldEJyYW5jaDsKKwkJdGhpcy5hdXRob3IgPSBhdXRob3I7CisJCXRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJdGhpcy5jb25maWcgPSBjb25maWc7CisJCXRoaXMuZXh0cmFDb250ZW50cyA9IGV4dHJhQ29udGVudHM7CisJfQorCisJUmV2Q29tbWl0IHdyaXRlKExpc3Q8UmVwb1Byb2plY3Q+IHJlcG9Qcm9qZWN0cykKKwkJCXRocm93cyBHaXRBUElFeGNlcHRpb24geworCQlEaXJDYWNoZSBpbmRleCA9IERpckNhY2hlLm5ld0luQ29yZSgpOworCQlPYmplY3RJbnNlcnRlciBpbnNlcnRlciA9IHJlcG8ubmV3T2JqZWN0SW5zZXJ0ZXIoKTsKKworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhyZXBvKSkgeworCQkJcHJlcGFyZUluZGV4KHJlcG9Qcm9qZWN0cywgaW5kZXgsIGluc2VydGVyKTsKKwkJCU9iamVjdElkIHRyZWVJZCA9IGluZGV4LndyaXRlVHJlZShpbnNlcnRlcik7CisJCQlsb25nIHByZXZEZWxheSA9IDA7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IExPQ0tfRkFJTFVSRV9NQVhfUkVUUklFUyAtIDE7IGkrKykgeworCQkJCXRyeSB7CisJCQkJCXJldHVybiBjb21taXRUcmVlT25DdXJyZW50VGlwKGluc2VydGVyLCBydywgdHJlZUlkKTsKKwkJCQl9IGNhdGNoIChDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uIGUpIHsKKwkJCQkJcHJldkRlbGF5ID0gRmlsZVV0aWxzLmRlbGF5KHByZXZEZWxheSwKKwkJCQkJCQlMT0NLX0ZBSUxVUkVfTUlOX1JFVFJZX0RFTEFZX01JTExJUywKKwkJCQkJCQlMT0NLX0ZBSUxVUkVfTUFYX1JFVFJZX0RFTEFZX01JTExJUyk7CisJCQkJCVRocmVhZC5zbGVlcChwcmV2RGVsYXkpOworCQkJCQlyZXBvLmdldFJlZkRhdGFiYXNlKCkucmVmcmVzaCgpOworCQkJCX0KKwkJCX0KKwkJCS8vIEluIHRoZSBsYXN0IHRyeSwganVzdCBwcm9wYWdhdGUgdGhlIGV4Y2VwdGlvbnMKKwkJCXJldHVybiBjb21taXRUcmVlT25DdXJyZW50VGlwKGluc2VydGVyLCBydywgdHJlZUlkKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gfCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgTWFuaWZlc3RFcnJvckV4Y2VwdGlvbihlKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBwcmVwYXJlSW5kZXgoTGlzdDxSZXBvUHJvamVjdD4gcHJvamVjdHMsIERpckNhY2hlIGluZGV4LAorCQkJT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKKwkJQ29uZmlnIGNmZyA9IG5ldyBDb25maWcoKTsKKwkJU3RyaW5nQnVpbGRlciBhdHRyaWJ1dGVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJRGlyQ2FjaGVCdWlsZGVyIGJ1aWxkZXIgPSBpbmRleC5idWlsZGVyKCk7CisJCWZvciAoUmVwb1Byb2plY3QgcHJvaiA6IHByb2plY3RzKSB7CisJCQlTdHJpbmcgbmFtZSA9IHByb2ouZ2V0TmFtZSgpOworCQkJU3RyaW5nIHBhdGggPSBwcm9qLmdldFBhdGgoKTsKKwkJCVN0cmluZyB1cmwgPSBwcm9qLmdldFVybCgpOworCQkJT2JqZWN0SWQgb2JqZWN0SWQ7CisJCQlpZiAoT2JqZWN0SWQuaXNJZChwcm9qLmdldFJldmlzaW9uKCkpKSB7CisJCQkJb2JqZWN0SWQgPSBPYmplY3RJZC5mcm9tU3RyaW5nKHByb2ouZ2V0UmV2aXNpb24oKSk7CisJCQl9IGVsc2UgeworCQkJCW9iamVjdElkID0gY2FsbGJhY2suc2hhMSh1cmwsIHByb2ouZ2V0UmV2aXNpb24oKSk7CisJCQkJaWYgKG9iamVjdElkID09IG51bGwgJiYgIWNvbmZpZy5pZ25vcmVSZW1vdGVGYWlsdXJlcykgeworCQkJCQl0aHJvdyBuZXcgUmVtb3RlVW5hdmFpbGFibGVFeGNlcHRpb24odXJsKTsKKwkJCQl9CisJCQkJaWYgKGNvbmZpZy5yZWNvcmRSZW1vdGVCcmFuY2gpIHsKKwkJCQkJLy8gImJyYW5jaCIgZmllbGQgaXMgb25seSBmb3Igbm9uLXRhZyByZWZlcmVuY2VzLgorCQkJCQkvLyBLZWVwIHRhZ3MgaW4gInJlZiIgZmllbGQgYXMgaGludCBmb3Igb3RoZXIgdG9vbHMuCisJCQkJCVN0cmluZyBmaWVsZCA9IHByb2ouZ2V0UmV2aXNpb24oKS5zdGFydHNXaXRoKFJfVEFHUykgPyAicmVmIiAvLyROT04tTkxTLTEkCisJCQkJCQkJOiAiYnJhbmNoIjsgLy8kTk9OLU5MUy0xJAorCQkJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCBmaWVsZCwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXByb2ouZ2V0UmV2aXNpb24oKSk7CisJCQkJfQorCisJCQkJaWYgKGNvbmZpZy5yZWNvcmRTaGFsbG93U3VibW9kdWxlcworCQkJCQkJJiYgcHJvai5nZXRSZWNvbW1lbmRTaGFsbG93KCkgIT0gbnVsbCkgeworCQkJCQkvLyBUaGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiBpcyBsb3NpbmcgaW5mb3JtYXRpb24uCisJCQkJCS8vIEFzIHRoZSByZXBvIG1hbmlmZXN0cyBzdG9yZXMgdGhlIHJlY29tbWVuZGVkCisJCQkJCS8vIGRlcHRoIGluIHRoZSAnY2xvbmUtZGVwdGgnIGZpZWxkLCB3aGlsZQorCQkJCQkvLyBnaXQgY29yZSBvbmx5IHVzZXMgYSBiaW5hcnkgJ3NoYWxsb3cgPSB0cnVlL2ZhbHNlJworCQkJCQkvLyBoaW50LCB3ZSdsbCBtYXAgYW55IGRlcHRoIHRvICdzaGFsbG93ID0gdHJ1ZScKKwkJCQkJY2ZnLnNldEJvb2xlYW4oInN1Ym1vZHVsZSIsIG5hbWUsICJzaGFsbG93IiwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJdHJ1ZSk7CisJCQkJfQorCQkJfQorCQkJaWYgKGNvbmZpZy5yZWNvcmRTdWJtb2R1bGVMYWJlbHMpIHsKKwkJCQlTdHJpbmdCdWlsZGVyIHJlYyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkJcmVjLmFwcGVuZCgiLyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmVjLmFwcGVuZChwYXRoKTsKKwkJCQlmb3IgKFN0cmluZyBncm91cCA6IHByb2ouZ2V0R3JvdXBzKCkpIHsKKwkJCQkJcmVjLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCisJCQkJCXJlYy5hcHBlbmQoZ3JvdXApOworCQkJCX0KKwkJCQlyZWMuYXBwZW5kKCJcbiIpOyAvLyROT04tTkxTLTEkCisJCQkJYXR0cmlidXRlcy5hcHBlbmQocmVjLnRvU3RyaW5nKCkpOworCQkJfQorCisJCQlVUkkgc3VibW9kVXJsID0gVVJJLmNyZWF0ZSh1cmwpOworCQkJaWYgKHRhcmdldFVyaSAhPSBudWxsKSB7CisJCQkJc3VibW9kVXJsID0gUmVwb0NvbW1hbmQucmVsYXRpdml6ZSh0YXJnZXRVcmksIHN1Ym1vZFVybCk7CisJCQl9CisJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCAicGF0aCIsIHBhdGgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCWNmZy5zZXRTdHJpbmcoInN1Ym1vZHVsZSIsIG5hbWUsICJ1cmwiLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJc3VibW9kVXJsLnRvU3RyaW5nKCkpOworCisJCQkvLyBjcmVhdGUgZ2l0bGluaworCQkJaWYgKG9iamVjdElkICE9IG51bGwpIHsKKwkJCQlEaXJDYWNoZUVudHJ5IGRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShwYXRoKTsKKwkJCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKKwkJCQlkY0VudHJ5LnNldEZpbGVNb2RlKEZpbGVNb2RlLkdJVExJTkspOworCQkJCWJ1aWxkZXIuYWRkKGRjRW50cnkpOworCisJCQkJZm9yIChDb3B5RmlsZSBjb3B5ZmlsZSA6IHByb2ouZ2V0Q29weUZpbGVzKCkpIHsKKwkJCQkJUmVtb3RlRmlsZSByZiA9IGNhbGxiYWNrLnJlYWRGaWxlV2l0aE1vZGUodXJsLAorCQkJCQkJCXByb2ouZ2V0UmV2aXNpb24oKSwgY29weWZpbGUuc3JjKTsKKwkJCQkJb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAorCQkJCQkJCXJmLmdldENvbnRlbnRzKCkpOworCQkJCQlkY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkoY29weWZpbGUuZGVzdCk7CisJCQkJCWRjRW50cnkuc2V0T2JqZWN0SWQob2JqZWN0SWQpOworCQkJCQlkY0VudHJ5LnNldEZpbGVNb2RlKHJmLmdldEZpbGVNb2RlKCkpOworCQkJCQlidWlsZGVyLmFkZChkY0VudHJ5KTsKKwkJCQl9CisJCQkJZm9yIChMaW5rRmlsZSBsaW5rZmlsZSA6IHByb2ouZ2V0TGlua0ZpbGVzKCkpIHsKKwkJCQkJU3RyaW5nIGxpbms7CisJCQkJCWlmIChsaW5rZmlsZS5kZXN0LmNvbnRhaW5zKCIvIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJbGluayA9IEZpbGVVdGlscy5yZWxhdGl2aXplR2l0UGF0aCgKKwkJCQkJCQkJbGlua2ZpbGUuZGVzdC5zdWJzdHJpbmcoMCwKKwkJCQkJCQkJCQlsaW5rZmlsZS5kZXN0Lmxhc3RJbmRleE9mKCcvJykpLAorCQkJCQkJCQlwcm9qLmdldFBhdGgoKSArICIvIiArIGxpbmtmaWxlLnNyYyk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWxpbmsgPSBwcm9qLmdldFBhdGgoKSArICIvIiArIGxpbmtmaWxlLnNyYzsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisKKwkJCQkJb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAorCQkJCQkJCWxpbmsuZ2V0Qnl0ZXMoVVRGXzgpKTsKKwkJCQkJZGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KGxpbmtmaWxlLmRlc3QpOworCQkJCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKKwkJCQkJZGNFbnRyeS5zZXRGaWxlTW9kZShGaWxlTW9kZS5TWU1MSU5LKTsKKwkJCQkJYnVpbGRlci5hZGQoZGNFbnRyeSk7CisJCQkJfQorCQkJfQorCQl9CisJCVN0cmluZyBjb250ZW50ID0gY2ZnLnRvVGV4dCgpOworCisJCS8vIGNyZWF0ZSBhIG5ldyBEaXJDYWNoZUVudHJ5IGZvciAuZ2l0bW9kdWxlcyBmaWxlLgorCQlEaXJDYWNoZUVudHJ5IGRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeSgKKwkJCQlDb25zdGFudHMuRE9UX0dJVF9NT0RVTEVTKTsKKwkJT2JqZWN0SWQgb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAorCQkJCWNvbnRlbnQuZ2V0Qnl0ZXMoVVRGXzgpKTsKKwkJZGNFbnRyeS5zZXRPYmplY3RJZChvYmplY3RJZCk7CisJCWRjRW50cnkuc2V0RmlsZU1vZGUoRmlsZU1vZGUuUkVHVUxBUl9GSUxFKTsKKwkJYnVpbGRlci5hZGQoZGNFbnRyeSk7CisKKwkJaWYgKGNvbmZpZy5yZWNvcmRTdWJtb2R1bGVMYWJlbHMpIHsKKwkJCS8vIGNyZWF0ZSBhIG5ldyBEaXJDYWNoZUVudHJ5IGZvciAuZ2l0YXR0cmlidXRlcyBmaWxlLgorCQkJRGlyQ2FjaGVFbnRyeSBkY0VudHJ5QXR0ciA9IG5ldyBEaXJDYWNoZUVudHJ5KAorCQkJCQlDb25zdGFudHMuRE9UX0dJVF9BVFRSSUJVVEVTKTsKKwkJCU9iamVjdElkIGF0dHJJZCA9IGluc2VydGVyLmluc2VydChDb25zdGFudHMuT0JKX0JMT0IsCisJCQkJCWF0dHJpYnV0ZXMudG9TdHJpbmcoKS5nZXRCeXRlcyhVVEZfOCkpOworCQkJZGNFbnRyeUF0dHIuc2V0T2JqZWN0SWQoYXR0cklkKTsKKwkJCWRjRW50cnlBdHRyLnNldEZpbGVNb2RlKEZpbGVNb2RlLlJFR1VMQVJfRklMRSk7CisJCQlidWlsZGVyLmFkZChkY0VudHJ5QXR0cik7CisJCX0KKworCQlmb3IgKEV4dHJhQ29udGVudCBlYyA6IGV4dHJhQ29udGVudHMpIHsKKwkJCURpckNhY2hlRW50cnkgZXh0cmFEY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkoZWMucGF0aCk7CisKKwkJCU9iamVjdElkIG9pZCA9IGluc2VydGVyLmluc2VydChDb25zdGFudHMuT0JKX0JMT0IsCisJCQkJCWVjLmNvbnRlbnQuZ2V0Qnl0ZXMoVVRGXzgpKTsKKwkJCWV4dHJhRGNFbnRyeS5zZXRPYmplY3RJZChvaWQpOworCQkJZXh0cmFEY0VudHJ5LnNldEZpbGVNb2RlKEZpbGVNb2RlLlJFR1VMQVJfRklMRSk7CisJCQlidWlsZGVyLmFkZChleHRyYURjRW50cnkpOworCQl9CisKKwkJYnVpbGRlci5maW5pc2goKTsKKwl9CisKKwlwcml2YXRlIFJldkNvbW1pdCBjb21taXRUcmVlT25DdXJyZW50VGlwKE9iamVjdEluc2VydGVyIGluc2VydGVyLAorCQkJUmV2V2FsayBydywgT2JqZWN0SWQgdHJlZUlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgaGVhZElkID0gcmVwby5yZXNvbHZlKHRhcmdldEJyYW5jaCArICJee2NvbW1pdH0iKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoaGVhZElkICE9IG51bGwKKwkJCQkmJiBydy5wYXJzZUNvbW1pdChoZWFkSWQpLmdldFRyZWUoKS5nZXRJZCgpLmVxdWFscyh0cmVlSWQpKSB7CisJCQkvLyBObyBjaGFuZ2UuIERvIG5vdGhpbmcuCisJCQlyZXR1cm4gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJfQorCisJCUNvbW1pdEJ1aWxkZXIgY29tbWl0ID0gbmV3IENvbW1pdEJ1aWxkZXIoKTsKKwkJY29tbWl0LnNldFRyZWVJZCh0cmVlSWQpOworCQlpZiAoaGVhZElkICE9IG51bGwpIHsKKwkJCWNvbW1pdC5zZXRQYXJlbnRJZHMoaGVhZElkKTsKKwkJfQorCQljb21taXQuc2V0QXV0aG9yKGF1dGhvcik7CisJCWNvbW1pdC5zZXRDb21taXR0ZXIoYXV0aG9yKTsKKwkJY29tbWl0LnNldE1lc3NhZ2UoUmVwb1RleHQuZ2V0KCkucmVwb0NvbW1pdE1lc3NhZ2UpOworCisJCU9iamVjdElkIGNvbW1pdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KGNvbW1pdCk7CisJCWluc2VydGVyLmZsdXNoKCk7CisKKwkJUmVmVXBkYXRlIHJ1ID0gcmVwby51cGRhdGVSZWYodGFyZ2V0QnJhbmNoKTsKKwkJcnUuc2V0TmV3T2JqZWN0SWQoY29tbWl0SWQpOworCQlydS5zZXRFeHBlY3RlZE9sZE9iamVjdElkKGhlYWRJZCAhPSBudWxsID8gaGVhZElkIDogT2JqZWN0SWQuemVyb0lkKCkpOworCQlSZXN1bHQgcmMgPSBydS51cGRhdGUocncpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgTkVXOgorCQljYXNlIEZPUkNFRDoKKwkJY2FzZSBGQVNUX0ZPUldBUkQ6CisJCQkvLyBTdWNjZXNzZnVsLiBEbyBub3RoaW5nLgorCQkJYnJlYWs7CisJCWNhc2UgUkVKRUNURUQ6CisJCWNhc2UgTE9DS19GQUlMVVJFOgorCQkJdGhyb3cgbmV3IENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUpHaXRUZXh0LmdldCgpLmNhbm5vdExvY2ssIHRhcmdldEJyYW5jaCksIHJ1LmdldFJlZigpLCByYyk7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSkdpdEludGVybmFsRXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChKR2l0VGV4dC5nZXQoKS51cGRhdGluZ1JlZkZhaWxlZCwKKwkJCQkJCQl0YXJnZXRCcmFuY2gsIGNvbW1pdElkLm5hbWUoKSwgcmMpKTsKKwkJfQorCisJCXJldHVybiBydy5wYXJzZUNvbW1pdChjb21taXRJZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlZ3VsYXJTdXBlcnByb2plY3RXcml0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZWd1bGFyU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhYjk5NAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZWd1bGFyU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfUkVNT1RFUzsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5HaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuU3VibW9kdWxlQWRkQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuR2l0QVBJRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvQ29tbWFuZC5NYW5pZmVzdEVycm9yRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvUHJvamVjdC5Db3B5RmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb1Byb2plY3QuTGlua0ZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLmludGVybmFsLlJlcG9UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CisKKy8qKgorICogV3JpdGVzIC5naXRtb2R1bGVzIGFuZCBnaXRsaW5rcyBvZiBwYXJzZWQgbWFuaWZlc3QgcHJvamVjdHMgaW50byBhIHJlZ3VsYXIKKyAqIHJlcG9zaXRvcnkgKHVzaW5nIGdpdCBzdWJtb2R1bGUgY29tbWFuZHMpCisgKgorICogVG8gd3JpdGUgb24gYSBiYXJlIHJlcG9zaXRvcnksIHVzZSB7QGxpbmsgQmFyZVN1cGVycHJvamVjdFdyaXRlcn0KKyAqLworY2xhc3MgUmVndWxhclN1cGVycHJvamVjdFdyaXRlciB7CisKKwlwcml2YXRlIFJlcG9zaXRvcnkgcmVwbzsKKworCXByaXZhdGUgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3I7CisKKwlSZWd1bGFyU3VwZXJwcm9qZWN0V3JpdGVyKFJlcG9zaXRvcnkgcmVwbywgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJdGhpcy5yZXBvID0gcmVwbzsKKwkJdGhpcy5tb25pdG9yID0gbW9uaXRvcjsKKwl9CisKKwlSZXZDb21taXQgd3JpdGUoTGlzdDxSZXBvUHJvamVjdD4gcmVwb1Byb2plY3RzKQorCQkJdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQocmVwbykpIHsKKwkJCWZvciAoUmVwb1Byb2plY3QgcHJvaiA6IHJlcG9Qcm9qZWN0cykgeworCQkJCWFkZFN1Ym1vZHVsZShwcm9qLmdldE5hbWUoKSwgcHJvai5nZXRVcmwoKSwgcHJvai5nZXRQYXRoKCksCisJCQkJCQlwcm9qLmdldFJldmlzaW9uKCksIHByb2ouZ2V0Q29weUZpbGVzKCksCisJCQkJCQlwcm9qLmdldExpbmtGaWxlcygpLCBnaXQpOworCQkJfQorCQkJcmV0dXJuIGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKFJlcG9UZXh0LmdldCgpLnJlcG9Db21taXRNZXNzYWdlKQorCQkJCQkuY2FsbCgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgTWFuaWZlc3RFcnJvckV4Y2VwdGlvbihlKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBhZGRTdWJtb2R1bGUoU3RyaW5nIG5hbWUsIFN0cmluZyB1cmwsIFN0cmluZyBwYXRoLAorCQkJU3RyaW5nIHJldmlzaW9uLCBMaXN0PENvcHlGaWxlPiBjb3B5ZmlsZXMsIExpc3Q8TGlua0ZpbGU+IGxpbmtmaWxlcywKKwkJCUdpdCBnaXQpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJYXNzZXJ0ICghcmVwby5pc0JhcmUoKSk7CisJCWFzc2VydCAoZ2l0ICE9IG51bGwpOworCQlpZiAoIWxpbmtmaWxlcy5pc0VtcHR5KCkpIHsKKwkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKKwkJCQkJSkdpdFRleHQuZ2V0KCkubm9uQmFyZUxpbmtGaWxlc05vdFN1cHBvcnRlZCk7CisJCX0KKworCQlTdWJtb2R1bGVBZGRDb21tYW5kIGFkZCA9IGdpdC5zdWJtb2R1bGVBZGQoKS5zZXROYW1lKG5hbWUpLnNldFBhdGgocGF0aCkKKwkJCQkuc2V0VVJJKHVybCk7CisJCWlmIChtb25pdG9yICE9IG51bGwpIHsKKwkJCWFkZC5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcik7CisJCX0KKworCQlSZXBvc2l0b3J5IHN1YlJlcG8gPSBhZGQuY2FsbCgpOworCQlpZiAocmV2aXNpb24gIT0gbnVsbCkgeworCQkJdHJ5IChHaXQgc3ViID0gbmV3IEdpdChzdWJSZXBvKSkgeworCQkJCXN1Yi5jaGVja291dCgpLnNldE5hbWUoZmluZFJlZihyZXZpc2lvbiwgc3ViUmVwbykpLmNhbGwoKTsKKwkJCX0KKwkJCXN1YlJlcG8uY2xvc2UoKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihwYXRoKS5jYWxsKCk7CisJCX0KKwkJZm9yIChDb3B5RmlsZSBjb3B5ZmlsZSA6IGNvcHlmaWxlcykgeworCQkJY29weWZpbGUuY29weSgpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKGNvcHlmaWxlLmRlc3QpLmNhbGwoKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBmaW5kUmVmKFN0cmluZyByZWYsIFJlcG9zaXRvcnkgcmVwbykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmICghT2JqZWN0SWQuaXNJZChyZWYpKSB7CisJCQlSZWYgciA9IHJlcG8uZXhhY3RSZWYoUl9SRU1PVEVTICsgREVGQVVMVF9SRU1PVEVfTkFNRSArICIvIiArIHJlZik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChyICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gci5nZXROYW1lKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlZjsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZC5qYXZhCmluZGV4IGUwYTgyMjQuLjZlOTQzZTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZC5qYXZhCkBAIC05LDExICs5LDYgQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87CiAKLWltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OwotaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTsKLWltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfUkVNT1RFUzsKLWltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfVEFHUzsKLQogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMzEsMzQgKzI2LDIxIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5HaXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5TdWJtb2R1bGVBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5Db25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkludmFsaWRSZWZOYW1lRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLkJhcmVTdXBlcnByb2plY3RXcml0ZXIuRXh0cmFDb250ZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5NYW5pZmVzdFBhcnNlci5JbmNsdWRlZEZpbGVSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Qcm9qZWN0LkNvcHlGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvUHJvamVjdC5MaW5rRmlsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uaW50ZXJuYWwuUmVwb1RleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SW5zZXJ0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUGVyc29uSWRlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUHJvZ3Jlc3NNb25pdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZEYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZVcGRhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlLlJlc3VsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOwogCkBAIC04MCwxMiArNjIsNyBAQAogICogQHNpbmNlIDMuNAogICovCiBwdWJsaWMgY2xhc3MgUmVwb0NvbW1hbmQgZXh0ZW5kcyBHaXRDb21tYW5kPFJldkNvbW1pdD4gewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJJRVMgPSA1OwogCi0JLy8gUmV0cnkgZXhwb25lbnRpYWxseSB3aXRoIGRlbGF5cyBpbiB0aGlzIHJhbmdlCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NSU5fUkVUUllfREVMQVlfTUlMTElTID0gNTA7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01BWF9SRVRSWV9ERUxBWV9NSUxMSVMgPSA1MDAwOwogCiAJcHJpdmF0ZSBTdHJpbmcgbWFuaWZlc3RQYXRoOwogCXByaXZhdGUgU3RyaW5nIGJhc2VVcmk7CkBAIC05MywxNyArNzAsMTggQEAgcHVibGljIGNsYXNzIFJlcG9Db21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxSZXZDb21taXQ+IHsKIAlwcml2YXRlIFN0cmluZyBncm91cHNQYXJhbTsKIAlwcml2YXRlIFN0cmluZyBicmFuY2g7CiAJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0QnJhbmNoID0gQ29uc3RhbnRzLkhFQUQ7Ci0JcHJpdmF0ZSBib29sZWFuIHJlY29yZFJlbW90ZUJyYW5jaCA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIHJlY29yZFN1Ym1vZHVsZUxhYmVscyA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIHJlY29yZFNoYWxsb3dTdWJtb2R1bGVzID0gdHJ1ZTsKIAlwcml2YXRlIFBlcnNvbklkZW50IGF1dGhvcjsKIAlwcml2YXRlIFJlbW90ZVJlYWRlciBjYWxsYmFjazsKIAlwcml2YXRlIElucHV0U3RyZWFtIGlucHV0U3RyZWFtOwogCXByaXZhdGUgSW5jbHVkZWRGaWxlUmVhZGVyIGluY2x1ZGVkUmVhZGVyOwotCXByaXZhdGUgYm9vbGVhbiBpZ25vcmVSZW1vdGVGYWlsdXJlcyA9IGZhbHNlOworCisJcHJpdmF0ZSBCYXJlU3VwZXJwcm9qZWN0V3JpdGVyLkJhcmVXcml0ZXJDb25maWcgYmFyZVdyaXRlckNvbmZpZyA9IEJhcmVTdXBlcnByb2plY3RXcml0ZXIuQmFyZVdyaXRlckNvbmZpZworCQkJLmdldERlZmF1bHQoKTsKIAogCXByaXZhdGUgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3I7CiAKKwlwcml2YXRlIGZpbmFsIExpc3Q8RXh0cmFDb250ZW50PiBleHRyYUNvbnRlbnRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKIAkvKioKIAkgKiBBIGNhbGxiYWNrIHRvIGdldCByZWYgc2hhMSBvZiBhIHJlcG9zaXRvcnkgZnJvbSBpdHMgdXJpLgogCSAqCkBAIC0yNjksMTQgKzI0NywxNCBAQCBwdWJsaWMgUmVtb3RlRmlsZSByZWFkRmlsZVdpdGhNb2RlKFN0cmluZyB1cmksIFN0cmluZyByZWYsIFN0cmluZyBwYXRoKQogCX0KIAogCUBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQotCXByaXZhdGUgc3RhdGljIGNsYXNzIE1hbmlmZXN0RXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBHaXRBUElFeGNlcHRpb24geworCXN0YXRpYyBjbGFzcyBNYW5pZmVzdEVycm9yRXhjZXB0aW9uIGV4dGVuZHMgR2l0QVBJRXhjZXB0aW9uIHsKIAkJTWFuaWZlc3RFcnJvckV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKIAkJCXN1cGVyKFJlcG9UZXh0LmdldCgpLmludmFsaWRNYW5pZmVzdCwgY2F1c2UpOwogCQl9CiAJfQogCiAJQFN1cHByZXNzV2FybmluZ3MoInNlcmlhbCIpCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVtb3RlVW5hdmFpbGFibGVFeGNlcHRpb24gZXh0ZW5kcyBHaXRBUElFeGNlcHRpb24geworCXN0YXRpYyBjbGFzcyBSZW1vdGVVbmF2YWlsYWJsZUV4Y2VwdGlvbiBleHRlbmRzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCVJlbW90ZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFN0cmluZyB1cmkpIHsKIAkJCXN1cGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJlcG9UZXh0LmdldCgpLmVycm9yUmVtb3RlVW5hdmFpbGFibGUsIHVyaSkpOwogCQl9CkBAIC00MjEsNyArMzk5LDcgQEAgcHVibGljIFJlcG9Db21tYW5kIHNldFRhcmdldEJyYW5jaChTdHJpbmcgYnJhbmNoKSB7CiAJICogQHNpbmNlIDQuMgogCSAqLwogCXB1YmxpYyBSZXBvQ29tbWFuZCBzZXRSZWNvcmRSZW1vdGVCcmFuY2goYm9vbGVhbiBlbmFibGUpIHsKLQkJdGhpcy5yZWNvcmRSZW1vdGVCcmFuY2ggPSBlbmFibGU7CisJCXRoaXMuYmFyZVdyaXRlckNvbmZpZy5yZWNvcmRSZW1vdGVCcmFuY2ggPSBlbmFibGU7CiAJCXJldHVybiB0aGlzOwogCX0KIApAQCAtNDM2LDcgKzQxNCw3IEBAIHB1YmxpYyBSZXBvQ29tbWFuZCBzZXRSZWNvcmRSZW1vdGVCcmFuY2goYm9vbGVhbiBlbmFibGUpIHsKIAkgKiBAc2luY2UgNC40CiAJICovCiAJcHVibGljIFJlcG9Db21tYW5kIHNldFJlY29yZFN1Ym1vZHVsZUxhYmVscyhib29sZWFuIGVuYWJsZSkgewotCQl0aGlzLnJlY29yZFN1Ym1vZHVsZUxhYmVscyA9IGVuYWJsZTsKKwkJdGhpcy5iYXJlV3JpdGVyQ29uZmlnLnJlY29yZFN1Ym1vZHVsZUxhYmVscyA9IGVuYWJsZTsKIAkJcmV0dXJuIHRoaXM7CiAJfQogCkBAIC00NTEsNyArNDI5LDcgQEAgcHVibGljIFJlcG9Db21tYW5kIHNldFJlY29yZFN1Ym1vZHVsZUxhYmVscyhib29sZWFuIGVuYWJsZSkgewogCSAqIEBzaW5jZSA0LjQKIAkgKi8KIAlwdWJsaWMgUmVwb0NvbW1hbmQgc2V0UmVjb21tZW5kU2hhbGxvdyhib29sZWFuIGVuYWJsZSkgewotCQl0aGlzLnJlY29yZFNoYWxsb3dTdWJtb2R1bGVzID0gZW5hYmxlOworCQl0aGlzLmJhcmVXcml0ZXJDb25maWcucmVjb3JkU2hhbGxvd1N1Ym1vZHVsZXMgPSBlbmFibGU7CiAJCXJldHVybiB0aGlzOwogCX0KIApAQCAtNDg1LDcgKzQ2Myw3IEBAIHB1YmxpYyBSZXBvQ29tbWFuZCBzZXRQcm9ncmVzc01vbml0b3IoUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKIAkgKiBAc2luY2UgNC4zCiAJICovCiAJcHVibGljIFJlcG9Db21tYW5kIHNldElnbm9yZVJlbW90ZUZhaWx1cmVzKGJvb2xlYW4gaWdub3JlKSB7Ci0JCXRoaXMuaWdub3JlUmVtb3RlRmFpbHVyZXMgPSBpZ25vcmU7CisJCXRoaXMuYmFyZVdyaXRlckNvbmZpZy5pZ25vcmVSZW1vdGVGYWlsdXJlcyA9IGlnbm9yZTsKIAkJcmV0dXJuIHRoaXM7CiAJfQogCkBAIC01MzQsNiArNTEyLDIyIEBAIHB1YmxpYyBSZXBvQ29tbWFuZCBzZXRJbmNsdWRlZEZpbGVSZWFkZXIoSW5jbHVkZWRGaWxlUmVhZGVyIHJlYWRlcikgewogCQlyZXR1cm4gdGhpczsKIAl9CiAKKwkvKioKKwkgKiBDcmVhdGUgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQgaW4gdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnkKKwkgKgorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB3aGVyZSB0byBjcmVhdGUgdGhlIGZpbGUgaW4gdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnkKKwkgKiBAcGFyYW0gY29udGVudHMKKwkgKiAgICAgICAgICAgIGNvbnRlbnQgZm9yIHRoZSBjcmVhdGUgZmlsZQorCSAqIEByZXR1cm4gdGhpcyBjb21tYW5kCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFJlcG9Db21tYW5kIGFkZFRvRGVzdGluYXRpb24oU3RyaW5nIHBhdGgsIFN0cmluZyBjb250ZW50cykgeworCQl0aGlzLmV4dHJhQ29udGVudHMuYWRkKG5ldyBFeHRyYUNvbnRlbnQocGF0aCwgY29udGVudHMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgUmV2Q29tbWl0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uIHsKQEAgLTU3MCwyNDAgKzU2NCwxOCBAQCBwdWJsaWMgUmV2Q29tbWl0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uIHsKIAkJfQogCiAJCWlmIChyZXBvLmlzQmFyZSgpKSB7Ci0JCQlpZiAoYXV0aG9yID09IG51bGwpCi0JCQkJYXV0aG9yID0gbmV3IFBlcnNvbklkZW50KHJlcG8pOwotCQkJaWYgKGNhbGxiYWNrID09IG51bGwpCi0JCQkJY2FsbGJhY2sgPSBuZXcgRGVmYXVsdFJlbW90ZVJlYWRlcigpOwogCQkJTGlzdDxSZXBvUHJvamVjdD4gcmVuYW1lZFByb2plY3RzID0gcmVuYW1lUHJvamVjdHMoZmlsdGVyZWRQcm9qZWN0cyk7Ci0KLQkJCURpckNhY2hlIGluZGV4ID0gRGlyQ2FjaGUubmV3SW5Db3JlKCk7Ci0JCQlPYmplY3RJbnNlcnRlciBpbnNlcnRlciA9IHJlcG8ubmV3T2JqZWN0SW5zZXJ0ZXIoKTsKLQotCQkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsocmVwbykpIHsKLQkJCQlwcmVwYXJlSW5kZXgocmVuYW1lZFByb2plY3RzLCBpbmRleCwgaW5zZXJ0ZXIpOwotCQkJCU9iamVjdElkIHRyZWVJZCA9IGluZGV4LndyaXRlVHJlZShpbnNlcnRlcik7Ci0JCQkJbG9uZyBwcmV2RGVsYXkgPSAwOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgTE9DS19GQUlMVVJFX01BWF9SRVRSSUVTIC0gMTsgaSsrKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlyZXR1cm4gY29tbWl0VHJlZU9uQ3VycmVudFRpcCgKLQkJCQkJCQlpbnNlcnRlciwgcncsIHRyZWVJZCk7Ci0JCQkJCX0gY2F0Y2ggKENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24gZSkgewotCQkJCQkJcHJldkRlbGF5ID0gRmlsZVV0aWxzLmRlbGF5KHByZXZEZWxheSwKLQkJCQkJCQkJTE9DS19GQUlMVVJFX01JTl9SRVRSWV9ERUxBWV9NSUxMSVMsCi0JCQkJCQkJCUxPQ0tfRkFJTFVSRV9NQVhfUkVUUllfREVMQVlfTUlMTElTKTsKLQkJCQkJCVRocmVhZC5zbGVlcChwcmV2RGVsYXkpOwotCQkJCQkJcmVwby5nZXRSZWZEYXRhYmFzZSgpLnJlZnJlc2goKTsKLQkJCQkJfQotCQkJCX0KLQkJCQkvLyBJbiB0aGUgbGFzdCB0cnksIGp1c3QgcHJvcGFnYXRlIHRoZSBleGNlcHRpb25zCi0JCQkJcmV0dXJuIGNvbW1pdFRyZWVPbkN1cnJlbnRUaXAoaW5zZXJ0ZXIsIHJ3LCB0cmVlSWQpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gfCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJdGhyb3cgbmV3IE1hbmlmZXN0RXJyb3JFeGNlcHRpb24oZSk7Ci0JCQl9Ci0JCX0KLQkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChyZXBvKSkgewotCQkJZm9yIChSZXBvUHJvamVjdCBwcm9qIDogZmlsdGVyZWRQcm9qZWN0cykgewotCQkJCWFkZFN1Ym1vZHVsZShwcm9qLmdldE5hbWUoKSwgcHJvai5nZXRVcmwoKSwgcHJvai5nZXRQYXRoKCksCi0JCQkJCQlwcm9qLmdldFJldmlzaW9uKCksIHByb2ouZ2V0Q29weUZpbGVzKCksCi0JCQkJCQlwcm9qLmdldExpbmtGaWxlcygpLCBnaXQpOwotCQkJfQotCQkJcmV0dXJuIGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKFJlcG9UZXh0LmdldCgpLnJlcG9Db21taXRNZXNzYWdlKQotCQkJCQkuY2FsbCgpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgTWFuaWZlc3RFcnJvckV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmVwYXJlSW5kZXgoTGlzdDxSZXBvUHJvamVjdD4gcHJvamVjdHMsIERpckNhY2hlIGluZGV4LAotCQkJT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKLQkJQ29uZmlnIGNmZyA9IG5ldyBDb25maWcoKTsKLQkJU3RyaW5nQnVpbGRlciBhdHRyaWJ1dGVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJRGlyQ2FjaGVCdWlsZGVyIGJ1aWxkZXIgPSBpbmRleC5idWlsZGVyKCk7Ci0JCWZvciAoUmVwb1Byb2plY3QgcHJvaiA6IHByb2plY3RzKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IHByb2ouZ2V0TmFtZSgpOwotCQkJU3RyaW5nIHBhdGggPSBwcm9qLmdldFBhdGgoKTsKLQkJCVN0cmluZyB1cmwgPSBwcm9qLmdldFVybCgpOwotCQkJT2JqZWN0SWQgb2JqZWN0SWQ7Ci0JCQlpZiAoT2JqZWN0SWQuaXNJZChwcm9qLmdldFJldmlzaW9uKCkpKSB7Ci0JCQkJb2JqZWN0SWQgPSBPYmplY3RJZC5mcm9tU3RyaW5nKHByb2ouZ2V0UmV2aXNpb24oKSk7Ci0JCQl9IGVsc2UgewotCQkJCW9iamVjdElkID0gY2FsbGJhY2suc2hhMSh1cmwsIHByb2ouZ2V0UmV2aXNpb24oKSk7Ci0JCQkJaWYgKG9iamVjdElkID09IG51bGwgJiYgIWlnbm9yZVJlbW90ZUZhaWx1cmVzKSB7Ci0JCQkJCXRocm93IG5ldyBSZW1vdGVVbmF2YWlsYWJsZUV4Y2VwdGlvbih1cmwpOwotCQkJCX0KLQkJCQlpZiAocmVjb3JkUmVtb3RlQnJhbmNoKSB7Ci0JCQkJCS8vICJicmFuY2giIGZpZWxkIGlzIG9ubHkgZm9yIG5vbi10YWcgcmVmZXJlbmNlcy4KLQkJCQkJLy8gS2VlcCB0YWdzIGluICJyZWYiIGZpZWxkIGFzIGhpbnQgZm9yIG90aGVyIHRvb2xzLgotCQkJCQlTdHJpbmcgZmllbGQgPSBwcm9qLmdldFJldmlzaW9uKCkuc3RhcnRzV2l0aChSX1RBR1MpID8gInJlZiIgLy8kTk9OLU5MUy0xJAotCQkJCQkJCTogImJyYW5jaCI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJY2ZnLnNldFN0cmluZygic3VibW9kdWxlIiwgbmFtZSwgZmllbGQsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQlwcm9qLmdldFJldmlzaW9uKCkpOwotCQkJCX0KLQotCQkJCWlmIChyZWNvcmRTaGFsbG93U3VibW9kdWxlcwotCQkJCQkJJiYgcHJvai5nZXRSZWNvbW1lbmRTaGFsbG93KCkgIT0gbnVsbCkgewotCQkJCQkvLyBUaGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiBpcyBsb3NpbmcgaW5mb3JtYXRpb24uCi0JCQkJCS8vIEFzIHRoZSByZXBvIG1hbmlmZXN0cyBzdG9yZXMgdGhlIHJlY29tbWVuZGVkCi0JCQkJCS8vIGRlcHRoIGluIHRoZSAnY2xvbmUtZGVwdGgnIGZpZWxkLCB3aGlsZQotCQkJCQkvLyBnaXQgY29yZSBvbmx5IHVzZXMgYSBiaW5hcnkgJ3NoYWxsb3cgPSB0cnVlL2ZhbHNlJwotCQkJCQkvLyBoaW50LCB3ZSdsbCBtYXAgYW55IGRlcHRoIHRvICdzaGFsbG93ID0gdHJ1ZScKLQkJCQkJY2ZnLnNldEJvb2xlYW4oInN1Ym1vZHVsZSIsIG5hbWUsICJzaGFsbG93IiwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJCQkJdHJ1ZSk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHJlY29yZFN1Ym1vZHVsZUxhYmVscykgewotCQkJCVN0cmluZ0J1aWxkZXIgcmVjID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJCQlyZWMuYXBwZW5kKCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlyZWMuYXBwZW5kKHBhdGgpOwotCQkJCWZvciAoU3RyaW5nIGdyb3VwIDogcHJvai5nZXRHcm91cHMoKSkgewotCQkJCQlyZWMuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJcmVjLmFwcGVuZChncm91cCk7Ci0JCQkJfQotCQkJCXJlYy5hcHBlbmQoIlxuIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlhdHRyaWJ1dGVzLmFwcGVuZChyZWMudG9TdHJpbmcoKSk7Ci0JCQl9Ci0KLQkJCVVSSSBzdWJtb2RVcmwgPSBVUkkuY3JlYXRlKHVybCk7Ci0JCQlpZiAodGFyZ2V0VXJpICE9IG51bGwpIHsKLQkJCQlzdWJtb2RVcmwgPSByZWxhdGl2aXplKHRhcmdldFVyaSwgc3VibW9kVXJsKTsKLQkJCX0KLQkJCWNmZy5zZXRTdHJpbmcoInN1Ym1vZHVsZSIsIG5hbWUsICJwYXRoIiwgcGF0aCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJY2ZnLnNldFN0cmluZygic3VibW9kdWxlIiwgbmFtZSwgInVybCIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCQlzdWJtb2RVcmwudG9TdHJpbmcoKSk7Ci0KLQkJCS8vIGNyZWF0ZSBnaXRsaW5rCi0JCQlpZiAob2JqZWN0SWQgIT0gbnVsbCkgewotCQkJCURpckNhY2hlRW50cnkgZGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KHBhdGgpOwotCQkJCWRjRW50cnkuc2V0T2JqZWN0SWQob2JqZWN0SWQpOwotCQkJCWRjRW50cnkuc2V0RmlsZU1vZGUoRmlsZU1vZGUuR0lUTElOSyk7Ci0JCQkJYnVpbGRlci5hZGQoZGNFbnRyeSk7Ci0KLQkJCQlmb3IgKENvcHlGaWxlIGNvcHlmaWxlIDogcHJvai5nZXRDb3B5RmlsZXMoKSkgewotCQkJCQlSZW1vdGVGaWxlIHJmID0gY2FsbGJhY2sucmVhZEZpbGVXaXRoTW9kZSh1cmwsCi0JCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpLCBjb3B5ZmlsZS5zcmMpOwotCQkJCQlvYmplY3RJZCA9IGluc2VydGVyLmluc2VydChDb25zdGFudHMuT0JKX0JMT0IsCi0JCQkJCQkJcmYuZ2V0Q29udGVudHMoKSk7Ci0JCQkJCWRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShjb3B5ZmlsZS5kZXN0KTsKLQkJCQkJZGNFbnRyeS5zZXRPYmplY3RJZChvYmplY3RJZCk7Ci0JCQkJCWRjRW50cnkuc2V0RmlsZU1vZGUocmYuZ2V0RmlsZU1vZGUoKSk7Ci0JCQkJCWJ1aWxkZXIuYWRkKGRjRW50cnkpOwotCQkJCX0KLQkJCQlmb3IgKExpbmtGaWxlIGxpbmtmaWxlIDogcHJvai5nZXRMaW5rRmlsZXMoKSkgewotCQkJCQlTdHJpbmcgbGluazsKLQkJCQkJaWYgKGxpbmtmaWxlLmRlc3QuY29udGFpbnMoIi8iKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlsaW5rID0gRmlsZVV0aWxzLnJlbGF0aXZpemVHaXRQYXRoKAotCQkJCQkJCQlsaW5rZmlsZS5kZXN0LnN1YnN0cmluZygwLAotCQkJCQkJCQkJCWxpbmtmaWxlLmRlc3QubGFzdEluZGV4T2YoJy8nKSksCi0JCQkJCQkJCXByb2ouZ2V0UGF0aCgpICsgIi8iICsgbGlua2ZpbGUuc3JjKTsgLy8kTk9OLU5MUy0xJAotCQkJCQl9IGVsc2UgewotCQkJCQkJbGluayA9IHByb2ouZ2V0UGF0aCgpICsgIi8iICsgbGlua2ZpbGUuc3JjOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQotCQkJCQlvYmplY3RJZCA9IGluc2VydGVyLmluc2VydChDb25zdGFudHMuT0JKX0JMT0IsCi0JCQkJCQkJbGluay5nZXRCeXRlcyhVVEZfOCkpOwotCQkJCQlkY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkobGlua2ZpbGUuZGVzdCk7Ci0JCQkJCWRjRW50cnkuc2V0T2JqZWN0SWQob2JqZWN0SWQpOwotCQkJCQlkY0VudHJ5LnNldEZpbGVNb2RlKEZpbGVNb2RlLlNZTUxJTkspOwotCQkJCQlidWlsZGVyLmFkZChkY0VudHJ5KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIGNvbnRlbnQgPSBjZmcudG9UZXh0KCk7Ci0KLQkJLy8gY3JlYXRlIGEgbmV3IERpckNhY2hlRW50cnkgZm9yIC5naXRtb2R1bGVzIGZpbGUuCi0JCURpckNhY2hlRW50cnkgZGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KAotCQkJCUNvbnN0YW50cy5ET1RfR0lUX01PRFVMRVMpOwotCQlPYmplY3RJZCBvYmplY3RJZCA9IGluc2VydGVyLmluc2VydChDb25zdGFudHMuT0JKX0JMT0IsCi0JCQkJY29udGVudC5nZXRCeXRlcyhVVEZfOCkpOwotCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKLQkJZGNFbnRyeS5zZXRGaWxlTW9kZShGaWxlTW9kZS5SRUdVTEFSX0ZJTEUpOwotCQlidWlsZGVyLmFkZChkY0VudHJ5KTsKLQotCQlpZiAocmVjb3JkU3VibW9kdWxlTGFiZWxzKSB7Ci0JCQkvLyBjcmVhdGUgYSBuZXcgRGlyQ2FjaGVFbnRyeSBmb3IgLmdpdGF0dHJpYnV0ZXMgZmlsZS4KLQkJCURpckNhY2hlRW50cnkgZGNFbnRyeUF0dHIgPSBuZXcgRGlyQ2FjaGVFbnRyeSgKLQkJCQkJQ29uc3RhbnRzLkRPVF9HSVRfQVRUUklCVVRFUyk7Ci0JCQlPYmplY3RJZCBhdHRySWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAotCQkJCQlhdHRyaWJ1dGVzLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoVVRGXzgpKTsKLQkJCWRjRW50cnlBdHRyLnNldE9iamVjdElkKGF0dHJJZCk7Ci0JCQlkY0VudHJ5QXR0ci5zZXRGaWxlTW9kZShGaWxlTW9kZS5SRUdVTEFSX0ZJTEUpOwotCQkJYnVpbGRlci5hZGQoZGNFbnRyeUF0dHIpOworCQkJQmFyZVN1cGVycHJvamVjdFdyaXRlciB3cml0ZXIgPSBuZXcgQmFyZVN1cGVycHJvamVjdFdyaXRlcihyZXBvLCB0YXJnZXRVcmksCisJCQkJCXRhcmdldEJyYW5jaCwKKwkJCQkJYXV0aG9yID09IG51bGwgPyBuZXcgUGVyc29uSWRlbnQocmVwbykgOiBhdXRob3IsCisJCQkJCWNhbGxiYWNrID09IG51bGwgPyBuZXcgRGVmYXVsdFJlbW90ZVJlYWRlcigpIDogY2FsbGJhY2ssCisJCQkJCWJhcmVXcml0ZXJDb25maWcsIGV4dHJhQ29udGVudHMpOworCQkJcmV0dXJuIHdyaXRlci53cml0ZShyZW5hbWVkUHJvamVjdHMpOwogCQl9CiAKLQkJYnVpbGRlci5maW5pc2goKTsKLQl9CiAKLQlwcml2YXRlIFJldkNvbW1pdCBjb21taXRUcmVlT25DdXJyZW50VGlwKE9iamVjdEluc2VydGVyIGluc2VydGVyLAotCQkJUmV2V2FsayBydywgT2JqZWN0SWQgdHJlZUlkKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uIHsKLQkJT2JqZWN0SWQgaGVhZElkID0gcmVwby5yZXNvbHZlKHRhcmdldEJyYW5jaCArICJee2NvbW1pdH0iKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoaGVhZElkICE9IG51bGwgJiYgcncucGFyc2VDb21taXQoaGVhZElkKS5nZXRUcmVlKCkuZ2V0SWQoKS5lcXVhbHModHJlZUlkKSkgewotCQkJLy8gTm8gY2hhbmdlLiBEbyBub3RoaW5nLgotCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCk7Ci0JCX0KLQotCQlDb21taXRCdWlsZGVyIGNvbW1pdCA9IG5ldyBDb21taXRCdWlsZGVyKCk7Ci0JCWNvbW1pdC5zZXRUcmVlSWQodHJlZUlkKTsKLQkJaWYgKGhlYWRJZCAhPSBudWxsKQotCQkJY29tbWl0LnNldFBhcmVudElkcyhoZWFkSWQpOwotCQljb21taXQuc2V0QXV0aG9yKGF1dGhvcik7Ci0JCWNvbW1pdC5zZXRDb21taXR0ZXIoYXV0aG9yKTsKLQkJY29tbWl0LnNldE1lc3NhZ2UoUmVwb1RleHQuZ2V0KCkucmVwb0NvbW1pdE1lc3NhZ2UpOwotCi0JCU9iamVjdElkIGNvbW1pdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KGNvbW1pdCk7Ci0JCWluc2VydGVyLmZsdXNoKCk7Ci0KLQkJUmVmVXBkYXRlIHJ1ID0gcmVwby51cGRhdGVSZWYodGFyZ2V0QnJhbmNoKTsKLQkJcnUuc2V0TmV3T2JqZWN0SWQoY29tbWl0SWQpOwotCQlydS5zZXRFeHBlY3RlZE9sZE9iamVjdElkKGhlYWRJZCAhPSBudWxsID8gaGVhZElkIDogT2JqZWN0SWQuemVyb0lkKCkpOwotCQlSZXN1bHQgcmMgPSBydS51cGRhdGUocncpOwotCQlzd2l0Y2ggKHJjKSB7Ci0JCQljYXNlIE5FVzoKLQkJCWNhc2UgRk9SQ0VEOgotCQkJY2FzZSBGQVNUX0ZPUldBUkQ6Ci0JCQkJLy8gU3VjY2Vzc2Z1bC4gRG8gbm90aGluZy4KLQkJCQlicmVhazsKLQkJCWNhc2UgUkVKRUNURUQ6Ci0JCQljYXNlIExPQ0tfRkFJTFVSRToKLQkJCQl0aHJvdyBuZXcgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0Ci0JCQkJCQkuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmNhbm5vdExvY2ssIHRhcmdldEJyYW5jaCksCi0JCQkJCQlydS5nZXRSZWYoKSwgcmMpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSkdpdEludGVybmFsRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJSkdpdFRleHQuZ2V0KCkudXBkYXRpbmdSZWZGYWlsZWQsCi0JCQkJCQl0YXJnZXRCcmFuY2gsIGNvbW1pdElkLm5hbWUoKSwgcmMpKTsKLQkJfQotCi0JCXJldHVybiBydy5wYXJzZUNvbW1pdChjb21taXRJZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFN1Ym1vZHVsZShTdHJpbmcgbmFtZSwgU3RyaW5nIHVybCwgU3RyaW5nIHBhdGgsCi0JCQlTdHJpbmcgcmV2aXNpb24sIExpc3Q8Q29weUZpbGU+IGNvcHlmaWxlcywgTGlzdDxMaW5rRmlsZT4gbGlua2ZpbGVzLAotCQkJR2l0IGdpdCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlhc3NlcnQgKCFyZXBvLmlzQmFyZSgpKTsKLQkJYXNzZXJ0IChnaXQgIT0gbnVsbCk7Ci0JCWlmICghbGlua2ZpbGVzLmlzRW1wdHkoKSkgewotCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotCQkJCQlKR2l0VGV4dC5nZXQoKS5ub25CYXJlTGlua0ZpbGVzTm90U3VwcG9ydGVkKTsKLQkJfQotCi0JCVN1Ym1vZHVsZUFkZENvbW1hbmQgYWRkID0gZ2l0LnN1Ym1vZHVsZUFkZCgpLnNldE5hbWUobmFtZSkuc2V0UGF0aChwYXRoKQotCQkJCS5zZXRVUkkodXJsKTsKLQkJaWYgKG1vbml0b3IgIT0gbnVsbCkKLQkJCWFkZC5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcik7Ci0KLQkJUmVwb3NpdG9yeSBzdWJSZXBvID0gYWRkLmNhbGwoKTsKLQkJaWYgKHJldmlzaW9uICE9IG51bGwpIHsKLQkJCXRyeSAoR2l0IHN1YiA9IG5ldyBHaXQoc3ViUmVwbykpIHsKLQkJCQlzdWIuY2hlY2tvdXQoKS5zZXROYW1lKGZpbmRSZWYocmV2aXNpb24sIHN1YlJlcG8pKS5jYWxsKCk7Ci0JCQl9Ci0JCQlzdWJSZXBvLmNsb3NlKCk7Ci0JCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4ocGF0aCkuY2FsbCgpOwotCQl9Ci0JCWZvciAoQ29weUZpbGUgY29weWZpbGUgOiBjb3B5ZmlsZXMpIHsKLQkJCWNvcHlmaWxlLmNvcHkoKTsKLQkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihjb3B5ZmlsZS5kZXN0KS5jYWxsKCk7Ci0JCX0KKwkJUmVndWxhclN1cGVycHJvamVjdFdyaXRlciB3cml0ZXIgPSBuZXcgUmVndWxhclN1cGVycHJvamVjdFdyaXRlcihyZXBvLCBtb25pdG9yKTsKKwkJcmV0dXJuIHdyaXRlci53cml0ZShmaWx0ZXJlZFByb2plY3RzKTsKIAl9CiAKIAkvKioKQEAgLTkxMCwxMyArNjgyLDQgQEAgc3RhdGljIFVSSSByZWxhdGl2aXplKFVSSSBjdXJyZW50LCBVUkkgdGFyZ2V0KSB7CiAJCXJldHVybiBVUkkuY3JlYXRlKGoudG9TdHJpbmcoKSk7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZpbmRSZWYoU3RyaW5nIHJlZiwgUmVwb3NpdG9yeSByZXBvKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKCFPYmplY3RJZC5pc0lkKHJlZikpIHsKLQkJCVJlZiByID0gcmVwby5leGFjdFJlZihSX1JFTU9URVMgKyBERUZBVUxUX1JFTU9URV9OQU1FICsgIi8iICsgcmVmKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHIgIT0gbnVsbCkKLQkJCQlyZXR1cm4gci5nZXROYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIHJlZjsKLQl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEKaW5kZXggNjFhMmU4Ny4uMmFkZGUwYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQuamF2YQpAQCAtMzg3LDYgKzM4Nyw4IEBAIHB1YmxpYyBzdGF0aWMgSkdpdFRleHQgZ2V0KCkgewogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5NZW1vcnlCdWZmZXJMaW1pdEV4Y2VlZGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5wdXREaWRudE1hdGNoTGVuZ3RoOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5wdXRTdHJlYW1NdXN0U3VwcG9ydE1hcms7CisJLyoqKi8gcHVibGljIFN0cmluZyBpbnRlZ2VyVmFsdWVOb3RJblJhbmdlOworCS8qKiovIHB1YmxpYyBTdHJpbmcgaW50ZWdlclZhbHVlTm90SW5SYW5nZVN1YlNlY3Rpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnRlZ2VyVmFsdWVPdXRPZlJhbmdlOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW50ZXJuYWxSZXZpc2lvbkVycm9yOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW50ZXJuYWxTZXJ2ZXJFcnJvcjsKQEAgLTM5OCw2ICs0MDAsNyBAQCBwdWJsaWMgc3RhdGljIEpHaXRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRCb29sZWFuVmFsdWU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkQ2hhbm5lbDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRDb21taXRQYXJlbnROdW1iZXI7CisJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkQ29yZUFiYnJldjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWREZXB0aDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRFbmNvZGluZzsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRFbmNyeXB0aW9uOwpAQCAtNTk5LDYgKzYwMiwxMSBAQCBwdWJsaWMgc3RhdGljIEpHaXRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRGaWVsZFZhbHVlOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaENlcnRpZmljYXRlSW52YWxpZEhlYWRlcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRTaWduYXR1cmU7CisJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoRGVmYXVsdE5vdGhpbmc7CisJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoRGVmYXVsdE5vVXBzdHJlYW07CisJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoRGVmYXVsdFNpbXBsZTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hEZWZhdWx0VHJpYW5ndWxhclVwc3RyZWFtOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaERlZmF1bHRVbmtub3duOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaElzTm90U3VwcG9ydGVkRm9yQnVuZGxlVHJhbnNwb3J0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaE5vdFBlcm1pdHRlZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hPcHRpb25zTm90U3VwcG9ydGVkOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0NvbW1hbmRMaW5lRGlmZlRvb2wuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Db21tYW5kTGluZURpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NTE1YwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Db21tYW5kTGluZURpZmZUb29sLmphdmEKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCisvKioKKyAqIFByZS1kZWZpbmVkIGNvbW1hbmQgbGluZSBkaWZmIHRvb2xzLgorICoKKyAqIEFkZHMgc2FtZSBkaWZmIHRvb2xzIGFzIGFsc28gcHJlLWRlZmluZWQgaW4gQy1HaXQKKyAqIDxwPgorICogc2VlICJnaXQtY29yZVxtZXJnZXRvb2xzXCIKKyAqIDwvcD4KKyAqIDxwPgorICogc2VlIGxpbmtzIHRvIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb24gZm9yIHRoZSB0b29scworICogPC9wPgorICoKKyAqIDxwcmU+CisgKiBhcmF4aXMKKyAqIGJjCisgKiBiYzMKKyAqIGNvZGVjb21wYXJlCisgKiBkZWx0YXdhbGtlcgorICogZGlmZm1lcmdlCisgKiBkaWZmdXNlCisgKiBlY21lcmdlCisgKiBlbWVyZ2UKKyAqIGV4YW1kaWZmCisgKiBndWlmZnkKKyAqIGd2aW1kaWZmCisgKiBndmltZGlmZjIKKyAqIGd2aW1kaWZmMworICoga2RpZmYzCisgKiBrb21wYXJlCisgKiBtZWxkCisgKiBvcGVuZGlmZgorICogcDRtZXJnZQorICogdGtkaWZmCisgKiB2aW1kaWZmCisgKiB2aW1kaWZmMgorICogdmltZGlmZjMKKyAqIHdpbm1lcmdlCisgKiB4eGRpZmYKKyAqIDwvcHJlPgorICoKKyAqLworQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCitwdWJsaWMgZW51bSBDb21tYW5kTGluZURpZmZUb29sIHsKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LmFyYXhpcy5jb20vbWVyZ2UvZG9jdW1lbnRhdGlvbi13aW5kb3dzL2NvbW1hbmQtbGluZS5lbiI+aHR0cHM6Ly93d3cuYXJheGlzLmNvbS9tZXJnZS9kb2N1bWVudGF0aW9uLXdpbmRvd3MvY29tbWFuZC1saW5lLmVuPC9hPgorCSAqLworCWFyYXhpcygiY29tcGFyZSIsICItd2FpdCAtMiBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5zY29vdGVyc29mdHdhcmUuY29tL3Y0aGVscC9pbmRleC5odG1sP2NvbW1hbmRfbGluZV9yZWZlcmVuY2UuaHRtbCI+aHR0cHM6Ly93d3cuc2Nvb3RlcnNvZnR3YXJlLmNvbS92NGhlbHAvaW5kZXguaHRtbD9jb21tYW5kX2xpbmVfcmVmZXJlbmNlLmh0bWw8L2E+CisJICovCisJYmMoImJjb21wIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LnNjb290ZXJzb2Z0d2FyZS5jb20vdjRoZWxwL2luZGV4Lmh0bWw/Y29tbWFuZF9saW5lX3JlZmVyZW5jZS5odG1sIj5odHRwczovL3d3dy5zY29vdGVyc29mdHdhcmUuY29tL3Y0aGVscC9pbmRleC5odG1sP2NvbW1hbmRfbGluZV9yZWZlcmVuY2UuaHRtbDwvYT4KKwkgKi8KKwliYzMoImJjb21wYXJlIiwgYmMpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly93d3cuZGV2YXJ0LmNvbS9jb2RlY29tcGFyZS9kb2NzL2luZGV4Lmh0bWw/Y29tcGFyaW5nX3ZpYV9jb21tYW5kX2xpbmUuaHRtIj5odHRwczovL3d3dy5kZXZhcnQuY29tL2NvZGVjb21wYXJlL2RvY3MvaW5kZXguaHRtbD9jb21wYXJpbmdfdmlhX2NvbW1hbmRfbGluZS5odG08L2E+CisJICovCisJY29kZWNvbXBhcmUoIkNvZGVDb21wYXJlIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LmRlbHRhd2Fsa2VyLmNvbS9pbnRlZ3JhdGUvY29tbWFuZC1saW5lIj5odHRwczovL3d3dy5kZWx0YXdhbGtlci5jb20vaW50ZWdyYXRlL2NvbW1hbmQtbGluZTwvYT4KKwkgKi8KKwlkZWx0YXdhbGtlcigiRGVsdGFXYWxrZXIiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly9zb3VyY2VnZWFyLmNvbS9kaWZmbWVyZ2Uvd2ViaGVscC9zZWNfX2NsYXJnc19fZGlmZi5odG1sIj5odHRwczovL3NvdXJjZWdlYXIuY29tL2RpZmZtZXJnZS93ZWJoZWxwL3NlY19fY2xhcmdzX19kaWZmLmh0bWw8L2E+CisJICovCisJZGlmZm1lcmdlKCJkaWZmbWVyZ2UiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cDovL2RpZmZ1c2Uuc291cmNlZm9yZ2UubmV0L21hbnVhbC5odG1sI2ludHJvZHVjdGlvbi11c2FnZSI+aHR0cDovL2RpZmZ1c2Uuc291cmNlZm9yZ2UubmV0L21hbnVhbC5odG1sI2ludHJvZHVjdGlvbi11c2FnZTwvYT4KKwkgKi8KKwlkaWZmdXNlKCJkaWZmdXNlIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly93d3cuZWxsaWVjb21wdXRpbmcuY29tL2VuL09ubGluZURvYy9lY21lcmdlX2VuLzQ0MjA1MTY3LmFzcCI+aHR0cDovL3d3dy5lbGxpZWNvbXB1dGluZy5jb20vZW4vT25saW5lRG9jL2VjbWVyZ2VfZW4vNDQyMDUxNjcuYXNwPC9hPgorCSAqLworCWVjbWVyZ2UoImVjbWVyZ2UiLCAiLS1kZWZhdWx0IC0tbW9kZT1kaWZmMiBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25vZGUvZW1hY3MvT3ZlcnZpZXctb2YtRW1lcmdlLmh0bWwiPmh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvbWFudWFsL2h0bWxfbm9kZS9lbWFjcy9PdmVydmlldy1vZi1FbWVyZ2UuaHRtbDwvYT4KKwkgKi8KKwllbWVyZ2UoImVtYWNzIiwgIi1mIGVtZXJnZS1maWxlcy1jb21tYW5kIFwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LnByZXN0b3NvZnQuY29tL3BzLmFzcD9wYWdlPWh0bWxoZWxwL2VkcC9jb21tYW5kX2xpbmVfb3B0aW9ucyI+aHR0cHM6Ly93d3cucHJlc3Rvc29mdC5jb20vcHMuYXNwP3BhZ2U9aHRtbGhlbHAvZWRwL2NvbW1hbmRfbGluZV9vcHRpb25zPC9hPgorCSAqLworCWV4YW1kaWZmKCJFeGFtRGlmZiIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIC1uaCIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly93d3cuZ3VpZmZ5LmNvbS9oZWxwL0d1aWZmeUhlbHAvR3VpZmZ5Q21kLmh0bWwiPmh0dHBzOi8vd3d3Lmd1aWZmeS5jb20vaGVscC9HdWlmZnlIZWxwL0d1aWZmeUNtZC5odG1sPC9hPgorCSAqLworCWd1aWZmeSgiZ3VpZmZ5IiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwlndmltZGlmZigiZ3ZpZXdkaWZmIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwlndmltZGlmZjIoZ3ZpbWRpZmYpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWwiPmh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sPC9hPgorCSAqLworCWd2aW1kaWZmMyhndmltZGlmZiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8va2RpZmYzLnNvdXJjZWZvcmdlLm5ldC9kb2MvZG9jdW1lbnRhdGlvbi5odG1sIj5odHRwOi8va2RpZmYzLnNvdXJjZWZvcmdlLm5ldC9kb2MvZG9jdW1lbnRhdGlvbi5odG1sPC9hPgorCSAqLworCWtkaWZmMygia2RpZmYzIiwKKwkJCSItLUwxIFwiJE1FUkdFRCAoQSlcIiAtLUwyIFwiJE1FUkdFRCAoQilcIiBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL2RvY3Mua2RlLm9yZy90cnVuazUvZW4va2Rlc2RrL2tvbXBhcmUvY29tbWFuZGxpbmUtb3B0aW9ucy5odG1sIj5odHRwczovL2RvY3Mua2RlLm9yZy90cnVuazUvZW4va2Rlc2RrL2tvbXBhcmUvY29tbWFuZGxpbmUtb3B0aW9ucy5odG1sPC9hPgorCSAqLworCWtvbXBhcmUoImtvbXBhcmUiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAidHRwOi8vbWVsZG1lcmdlLm9yZy9oZWxwL2ZpbGUtbW9kZS5odG1sIj5odHRwOi8vbWVsZG1lcmdlLm9yZy9oZWxwL2ZpbGUtbW9kZS5odG1sPC9hPgorCSAqLworCW1lbGQoIm1lbGQiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cDovL3d3dy5tYW5wYWdlei5jb20vbWFuLzEvb3BlbmRpZmYvIj5odHRwOi8vd3d3Lm1hbnBhZ2V6LmNvbS9tYW4vMS9vcGVuZGlmZi88L2E+CisJICogPHA+CisJICogSGludDogY2hlY2sgdGhlICcgfCBjYXQnIGZvciB0aGUgY2FsbAorCSAqIDwvcD4KKwkgKi8KKwlvcGVuZGlmZigib3BlbmRpZmYiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly93d3cucGVyZm9yY2UuY29tL21hbnVhbHMvdjE1LjEvY21kcmVmL3A0X21lcmdlLmh0bWwiPmh0dHBzOi8vd3d3LnBlcmZvcmNlLmNvbS9tYW51YWxzL3YxNS4xL2NtZHJlZi9wNF9tZXJnZS5odG1sPC9hPgorCSAqLworCXA0bWVyZ2UoInA0bWVyZ2UiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cDovL2xpbnV4Lm1hdGgudGlmci5yZXMuaW4vbWFudWFscy9tYW4vdGtkaWZmLmh0bWwiPmh0dHA6Ly9saW51eC5tYXRoLnRpZnIucmVzLmluL21hbnVhbHMvbWFuL3RrZGlmZi5odG1sPC9hPgorCSAqLworCXRrZGlmZigidGtkaWZmIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwl2aW1kaWZmKCJ2aWV3ZGlmZiIsIGd2aW1kaWZmKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwl2aW1kaWZmMih2aW1kaWZmKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwl2aW1kaWZmMyh2aW1kaWZmKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly9tYW51YWwud2lubWVyZ2Uub3JnL0NvbW1hbmRfbGluZS5odG1sIj5odHRwOi8vbWFudWFsLndpbm1lcmdlLm9yZy9Db21tYW5kX2xpbmUuaHRtbDwvYT4KKwkgKiA8cD4KKwkgKiBIaW50OiBjaGVjayBob3cgJ21lcmdldG9vbF9maW5kX3dpbjMyX2NtZCAiV2luTWVyZ2VVLmV4ZSIgIldpbk1lcmdlIicKKwkgKiB3b3JrcworCSAqIDwvcD4KKwkgKi8KKwl3aW5tZXJnZSgiV2luTWVyZ2VVIiwgIi11IC1lIFwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly9mdXJpdXMuY2EveHhkaWZmL2RvYy94eGRpZmYtZG9jLmh0bWwiPmh0dHA6Ly9mdXJpdXMuY2EveHhkaWZmL2RvYy94eGRpZmYtZG9jLmh0bWw8L2E+CisJICovCisJeHhkaWZmKCJ4eGRpZmYiLAorCQkJIi1SICdBY2NlbC5TZWFyY2g6IFwiQ3RybCtGXCInIC1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiBcIkN0cmwrR1wiJyBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIik7CisKKwlDb21tYW5kTGluZURpZmZUb29sKFN0cmluZyBwYXRoLCBTdHJpbmcgcGFyYW1ldGVycykgeworCQl0aGlzLnBhdGggPSBwYXRoOworCQl0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOworCX0KKworCUNvbW1hbmRMaW5lRGlmZlRvb2woQ29tbWFuZExpbmVEaWZmVG9vbCBmcm9tKSB7CisJCXRoaXMoZnJvbS5nZXRQYXRoKCksIGZyb20uZ2V0UGFyYW1ldGVycygpKTsKKwl9CisKKwlDb21tYW5kTGluZURpZmZUb29sKFN0cmluZyBwYXRoLCBDb21tYW5kTGluZURpZmZUb29sIGZyb20pIHsKKwkJdGhpcyhwYXRoLCBmcm9tLmdldFBhcmFtZXRlcnMoKSk7CisJfQorCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGF0aDsKKworCXByaXZhdGUgZmluYWwgU3RyaW5nIHBhcmFtZXRlcnM7CisKKwkvKioKKwkgKiBAcmV0dXJuIHBhdGgKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFBhdGgoKSB7CisJCXJldHVybiBwYXRoOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gcGFyYW1ldGVycyBhcyBvbmUgc3RyaW5nCisJICovCisJcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJzKCkgeworCQlyZXR1cm4gcGFyYW1ldGVyczsKKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9EaWZmVG9vbENvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0RpZmZUb29sQ29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxZjYzNAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9EaWZmVG9vbENvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0RJRkZUT09MX1NFQ1RJT047CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfRElGRl9TRUNUSU9OOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9DTUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0dVSVRPT0w7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1BBVEg7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1BST01QVDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVE9PTDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RfRVhJVF9DT0RFOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZy5TZWN0aW9uUGFyc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsLkJvb2xlYW5UcmlTdGF0ZTsKKworLyoqCisgKiBLZWVwcyB0cmFjayBvZiBkaWZmdG9vbCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIERpZmZUb29sQ29uZmlnIHsKKworCS8qKiBLZXkgZm9yIHtAbGluayBDb25maWcjZ2V0KFNlY3Rpb25QYXJzZXIpfS4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvbmZpZy5TZWN0aW9uUGFyc2VyPERpZmZUb29sQ29uZmlnPiBLRVkgPSBEaWZmVG9vbENvbmZpZzo6bmV3OworCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdG9vbE5hbWU7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBndWlUb29sTmFtZTsKKworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBwcm9tcHQ7CisKKwlwcml2YXRlIGZpbmFsIEJvb2xlYW5UcmlTdGF0ZSB0cnVzdEV4aXRDb2RlOworCisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiB0b29sczsKKworCXByaXZhdGUgRGlmZlRvb2xDb25maWcoQ29uZmlnIHJjKSB7CisJCXRvb2xOYW1lID0gcmMuZ2V0U3RyaW5nKENPTkZJR19ESUZGX1NFQ1RJT04sIG51bGwsIENPTkZJR19LRVlfVE9PTCk7CisJCWd1aVRvb2xOYW1lID0gcmMuZ2V0U3RyaW5nKENPTkZJR19ESUZGX1NFQ1RJT04sIG51bGwsCisJCQkJQ09ORklHX0tFWV9HVUlUT09MKTsKKwkJcHJvbXB0ID0gcmMuZ2V0Qm9vbGVhbihDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgQ09ORklHX0tFWV9QUk9NUFQsCisJCQkJdHJ1ZSk7CisJCVN0cmluZyB0cnVzdFN0ciA9IHJjLmdldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgbnVsbCwKKwkJCQlDT05GSUdfS0VZX1RSVVNUX0VYSVRfQ09ERSk7CisJCWlmICh0cnVzdFN0ciAhPSBudWxsKSB7CisJCQl0cnVzdEV4aXRDb2RlID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4odHJ1c3RTdHIpCisJCQkJCT8gQm9vbGVhblRyaVN0YXRlLlRSVUUKKwkJCQkJOiBCb29sZWFuVHJpU3RhdGUuRkFMU0U7CisJCX0gZWxzZSB7CisJCQl0cnVzdEV4aXRDb2RlID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCQl9CisJCXRvb2xzID0gbmV3IEhhc2hNYXA8PigpOworCQlTZXQ8U3RyaW5nPiBzdWJzZWN0aW9ucyA9IHJjLmdldFN1YnNlY3Rpb25zKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OKTsKKwkJZm9yIChTdHJpbmcgbmFtZSA6IHN1YnNlY3Rpb25zKSB7CisJCQlTdHJpbmcgY21kID0gcmMuZ2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCBuYW1lLAorCQkJCQlDT05GSUdfS0VZX0NNRCk7CisJCQlTdHJpbmcgcGF0aCA9IHJjLmdldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgbmFtZSwKKwkJCQkJQ09ORklHX0tFWV9QQVRIKTsKKwkJCWlmICgoY21kICE9IG51bGwpIHx8IChwYXRoICE9IG51bGwpKSB7CisJCQkJdG9vbHMucHV0KG5hbWUsIG5ldyBVc2VyRGVmaW5lZERpZmZUb29sKG5hbWUsIHBhdGgsIGNtZCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBkaWZmIHRvb2wgbmFtZSAoZGlmZi50b29sKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFRvb2xOYW1lKCkgeworCQlyZXR1cm4gdG9vbE5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBHVUkgZGlmZiB0b29sIG5hbWUgKGRpZmYuZ3VpdG9vbCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRHdWlUb29sTmFtZSgpIHsKKwkJcmV0dXJuIGd1aVRvb2xOYW1lOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRpZmYgdG9vbCAicHJvbXB0IiBvcHRpb24gKGRpZmZ0b29sLnByb21wdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1Byb21wdCgpIHsKKwkJcmV0dXJuIHByb21wdDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaWZmIHRvb2wgInRydXN0IGV4aXQgY29kZSIgb3B0aW9uIChkaWZmdG9vbC50cnVzdEV4aXRDb2RlKQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzVHJ1c3RFeGl0Q29kZSgpIHsKKwkJcmV0dXJuIHRydXN0RXhpdENvZGUgPT0gQm9vbGVhblRyaVN0YXRlLlRSVUU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgdG9vbHMgbWFwCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIEV4dGVybmFsRGlmZlRvb2w+IGdldFRvb2xzKCkgeworCQlyZXR1cm4gdG9vbHM7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgdG9vbCBuYW1lcworCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRUb29sTmFtZXMoKSB7CisJCXJldHVybiB0b29scy5rZXlTZXQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRGlmZlRvb2xzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRGlmZlRvb2xzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MjlhNAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9EaWZmVG9vbHMuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxLCBBbmRyZSBCb3NzZXJ0IDxhbmRyZS5ib3NzZXJ0QHNpZW1lbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmRpZmZtZXJnZXRvb2w7CisKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbC5Cb29sZWFuVHJpU3RhdGU7CisKKy8qKgorICogTWFuYWdlcyBkaWZmIHRvb2xzLgorICovCitwdWJsaWMgY2xhc3MgRGlmZlRvb2xzIHsKKworCXByaXZhdGUgZmluYWwgRGlmZlRvb2xDb25maWcgY29uZmlnOworCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiBwcmVkZWZpbmVkVG9vbHM7CisKKwlwcml2YXRlIE1hcDxTdHJpbmcsIEV4dGVybmFsRGlmZlRvb2w+IHVzZXJEZWZpbmVkVG9vbHM7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBleHRlcm5hbCBkaWZmLXRvb2xzIG1hbmFnZXIgZm9yIGdpdmVuIHJlcG9zaXRvcnkuCisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkKKwkgKi8KKwlwdWJsaWMgRGlmZlRvb2xzKFJlcG9zaXRvcnkgcmVwbykgeworCQljb25maWcgPSByZXBvLmdldENvbmZpZygpLmdldChEaWZmVG9vbENvbmZpZy5LRVkpOworCQlzZXR1cFByZWRlZmluZWRUb29scygpOworCQlzZXR1cFVzZXJEZWZpbmVkVG9vbHMoKTsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHR3byB2ZXJzaW9ucyBvZiBhIGZpbGUuCisJICoKKwkgKiBAcGFyYW0gbmV3UGF0aAorCSAqICAgICAgICAgICAgdGhlIG5ldyBmaWxlIHBhdGgKKwkgKiBAcGFyYW0gb2xkUGF0aAorCSAqICAgICAgICAgICAgdGhlIG9sZCBmaWxlIHBhdGgKKwkgKiBAcGFyYW0gbmV3SWQKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgb2JqZWN0IElECisJICogQHBhcmFtIG9sZElkCisJICogICAgICAgICAgICB0aGUgb2xkIG9iamVjdCBJRAorCSAqIEBwYXJhbSB0b29sTmFtZQorCSAqICAgICAgICAgICAgdGhlIHNlbGVjdGVkIHRvb2wgbmFtZSAoY2FuIGJlIG51bGwpCisJICogQHBhcmFtIHByb21wdAorCSAqICAgICAgICAgICAgdGhlIHByb21wdCBvcHRpb24KKwkgKiBAcGFyYW0gZ3VpCisJICogICAgICAgICAgICB0aGUgR1VJIG9wdGlvbgorCSAqIEBwYXJhbSB0cnVzdEV4aXRDb2RlCisJICogICAgICAgICAgICB0aGUgInRydXN0IGV4aXQgY29kZSIgb3B0aW9uCisJICogQHJldHVybiB0aGUgcmV0dXJuIGNvZGUgZnJvbSBleGVjdXRlZCB0b29sCisJICovCisJcHVibGljIGludCBjb21wYXJlKFN0cmluZyBuZXdQYXRoLCBTdHJpbmcgb2xkUGF0aCwgU3RyaW5nIG5ld0lkLAorCQkJU3RyaW5nIG9sZElkLCBTdHJpbmcgdG9vbE5hbWUsIEJvb2xlYW5UcmlTdGF0ZSBwcm9tcHQsCisJCQlCb29sZWFuVHJpU3RhdGUgZ3VpLCBCb29sZWFuVHJpU3RhdGUgdHJ1c3RFeGl0Q29kZSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0b29sIG5hbWVzCisJICovCisJcHVibGljIFNldDxTdHJpbmc+IGdldFRvb2xOYW1lcygpIHsKKwkJcmV0dXJuIGNvbmZpZy5nZXRUb29sTmFtZXMoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1c2VyIGRlZmluZWQgdG9vbHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gZ2V0VXNlckRlZmluZWRUb29scygpIHsKKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcCh1c2VyRGVmaW5lZFRvb2xzKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBhdmFpbGFibGUgcHJlZGVmaW5lZCB0b29scworCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiBnZXRBdmFpbGFibGVUb29scygpIHsKKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChwcmVkZWZpbmVkVG9vbHMpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIE5PVCBhdmFpbGFibGUgcHJlZGVmaW5lZCB0b29scworCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiBnZXROb3RBdmFpbGFibGVUb29scygpIHsKKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChuZXcgVHJlZU1hcDw+KCkpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBndWkKKwkgKiAgICAgICAgICAgIHVzZSB0aGUgZGlmZi5ndWl0b29sIHNldHRpbmcgPworCSAqIEByZXR1cm4gdGhlIGRlZmF1bHQgdG9vbCBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXREZWZhdWx0VG9vbE5hbWUoQm9vbGVhblRyaVN0YXRlIGd1aSkgeworCQlyZXR1cm4gZ3VpICE9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVCA/ICJteV9ndWlfdG9vbCIgLy8kTk9OLU5MUy0xJAorCQkJCTogIm15X2RlZmF1bHRfdG9vbG5hbWUiOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHJldHVybiBpcyBpbnRlcmFjdGl2ZSAoY29uZmlnIHByb21wdCBlbmFibGVkKSA/CisJICovCisJcHVibGljIGJvb2xlYW4gaXNJbnRlcmFjdGl2ZSgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByaXZhdGUgdm9pZCBzZXR1cFByZWRlZmluZWRUb29scygpIHsKKwkJcHJlZGVmaW5lZFRvb2xzID0gbmV3IFRyZWVNYXA8PigpOworCQlmb3IgKENvbW1hbmRMaW5lRGlmZlRvb2wgdG9vbCA6IENvbW1hbmRMaW5lRGlmZlRvb2wudmFsdWVzKCkpIHsKKwkJCXByZWRlZmluZWRUb29scy5wdXQodG9vbC5uYW1lKCksIG5ldyBQcmVEZWZpbmVkRGlmZlRvb2wodG9vbCkpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIHNldHVwVXNlckRlZmluZWRUb29scygpIHsKKwkJdXNlckRlZmluZWRUb29scyA9IG5ldyBUcmVlTWFwPD4oKTsKKwkJTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gdXNlclRvb2xzID0gY29uZmlnLmdldFRvb2xzKCk7CisJCWZvciAoU3RyaW5nIG5hbWUgOiB1c2VyVG9vbHMua2V5U2V0KCkpIHsKKwkJCUV4dGVybmFsRGlmZlRvb2wgdXNlclRvb2wgPSB1c2VyVG9vbHMuZ2V0KG5hbWUpOworCQkJLy8gaWYgZGlmZnRvb2wuPG5hbWU+LmNtZCBpcyBkZWZpbmVkIHdlIGhhdmUgdXNlciBkZWZpbmVkIHRvb2wKKwkJCWlmICh1c2VyVG9vbC5nZXRDb21tYW5kKCkgIT0gbnVsbCkgeworCQkJCXVzZXJEZWZpbmVkVG9vbHMucHV0KG5hbWUsIHVzZXJUb29sKTsKKwkJCX0gZWxzZSBpZiAodXNlclRvb2wuZ2V0UGF0aCgpICE9IG51bGwpIHsKKwkJCQkvLyBpZiBkaWZmdG9vbC48bmFtZT4ucGF0aCBpcyBkZWZpbmVkIHdlIGp1c3Qgb3ZlcmxvYWQgdGhlIHBhdGgKKwkJCQkvLyBvZiBwcmVkZWZpbmVkIHRvb2wKKwkJCQlQcmVEZWZpbmVkRGlmZlRvb2wgcHJlZGVmVG9vbCA9IChQcmVEZWZpbmVkRGlmZlRvb2wpIHByZWRlZmluZWRUb29scworCQkJCQkJLmdldChuYW1lKTsKKwkJCQlpZiAocHJlZGVmVG9vbCAhPSBudWxsKSB7CisJCQkJCXByZWRlZlRvb2wuc2V0UGF0aCh1c2VyVG9vbC5nZXRQYXRoKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsRGlmZlRvb2wuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbERpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkN2U4MgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbERpZmZUb29sLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxLCBBbmRyZSBCb3NzZXJ0IDxhbmRyZS5ib3NzZXJ0QHNpZW1lbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmRpZmZtZXJnZXRvb2w7CisKKy8qKgorICogVGhlIGV4dGVybmFsIHRvb2wgaW50ZXJmYWNlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4dGVybmFsRGlmZlRvb2wgeworCisJLyoqCisJICogQHJldHVybiB0aGUgdG9vbCBuYW1lCisJICovCisJU3RyaW5nIGdldE5hbWUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvb2wgcGF0aAorCSAqLworCVN0cmluZyBnZXRQYXRoKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0b29sIGNvbW1hbmQKKwkgKi8KKwlTdHJpbmcgZ2V0Q29tbWFuZCgpOworCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvUHJlRGVmaW5lZERpZmZUb29sLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvUHJlRGVmaW5lZERpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2OWZiNAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9QcmVEZWZpbmVkRGlmZlRvb2wuamF2YQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworLyoqCisgKiBUaGUgcHJlLWRlZmluZWQgZGlmZiB0b29sLgorICovCitwdWJsaWMgY2xhc3MgUHJlRGVmaW5lZERpZmZUb29sIGV4dGVuZHMgVXNlckRlZmluZWREaWZmVG9vbCB7CisKKwkvKioKKwkgKiBDcmVhdGUgYSBwcmUtZGVmaW5lZCBkaWZmIHRvb2wKKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZQorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aAorCSAqIEBwYXJhbSBwYXJhbWV0ZXJzCisJICogICAgICAgICAgICB0aGUgdG9vbCBwYXJhbWV0ZXJzIGFzIG9uZSBzdHJpbmcgdGhhdCBpcyB1c2VkIHRvZ2V0aGVyIHdpdGgKKwkgKiAgICAgICAgICAgIHBhdGggYXMgY29tbWFuZAorCSAqLworCXB1YmxpYyBQcmVEZWZpbmVkRGlmZlRvb2woU3RyaW5nIG5hbWUsIFN0cmluZyBwYXRoLCBTdHJpbmcgcGFyYW1ldGVycykgeworCQlzdXBlcihuYW1lLCBwYXRoLCBwYXJhbWV0ZXJzKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBwcmUtZGVmaW5lZCBkaWZmIHRvb2wKKwkgKgorCSAqIEBwYXJhbSB0b29sCisJICogICAgICAgICAgICB0aGUgY29tbWFuZCBsaW5lIGRpZmYgdG9vbAorCSAqCisJICovCisJcHVibGljIFByZURlZmluZWREaWZmVG9vbChDb21tYW5kTGluZURpZmZUb29sIHRvb2wpIHsKKwkJdGhpcyh0b29sLm5hbWUoKSwgdG9vbC5nZXRQYXRoKCksIHRvb2wuZ2V0UGFyYW1ldGVycygpKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcGF0aAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFBhdGgoU3RyaW5nIHBhdGgpIHsKKwkJLy8gaGFuZGxpbmcgb2Ygc3BhY2VzIGluIHBhdGgKKwkJaWYgKHBhdGguY29udGFpbnMoIiAiKSkgeyAvLyROT04tTkxTLTEkCisJCQkvLyBhZGQgcXVvdGVzIGJlZm9yZSBpZiBuZWVkZWQKKwkJCWlmICghcGF0aC5zdGFydHNXaXRoKCJcIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlwYXRoID0gIlwiIiArIHBhdGg7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJCS8vIGFkZCBxdW90ZXMgYWZ0ZXIgaWYgbmVlZGVkCisJCQlpZiAoIXBhdGguZW5kc1dpdGgoIlwiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBhdGggPSBwYXRoICsgIlwiIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJCXN1cGVyLnNldFBhdGgocGF0aCk7CisJfQorCisJLyoqCisJICoge0Bpbmhlcml0RG9jfQorCSAqCisJICogQHJldHVybiB0aGUgY29uY2F0ZW5hdGVkIHBhdGggYW5kIGNvbW1hbmQgb2YgdGhlIHByZS1kZWZpbmVkIGRpZmYgdG9vbAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0Q29tbWFuZCgpIHsKKwkJcmV0dXJuIGdldFBhdGgoKSArICIgIiArIHN1cGVyLmdldENvbW1hbmQoKTsgLy8kTk9OLU5MUy0xJAorCX0KKworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL1VzZXJEZWZpbmVkRGlmZlRvb2wuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Vc2VyRGVmaW5lZERpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyMjk2ZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Vc2VyRGVmaW5lZERpZmZUb29sLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCisvKioKKyAqIFRoZSB1c2VyLWRlZmluZWQgZGlmZiB0b29sLgorICovCitwdWJsaWMgY2xhc3MgVXNlckRlZmluZWREaWZmVG9vbCBpbXBsZW1lbnRzIEV4dGVybmFsRGlmZlRvb2wgeworCisJLyoqCisJICogdGhlIGRpZmYgdG9vbCBuYW1lCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKKworCS8qKgorCSAqIHRoZSBkaWZmIHRvb2wgcGF0aAorCSAqLworCXByaXZhdGUgU3RyaW5nIHBhdGg7CisKKwkvKioKKwkgKiB0aGUgZGlmZiB0b29sIGNvbW1hbmQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBjbWQ7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkaWZmIHRvb2wKKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZQorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aAorCSAqIEBwYXJhbSBjbWQKKwkgKiAgICAgICAgICAgIHRoZSBjb21tYW5kCisJICovCisJcHVibGljIFVzZXJEZWZpbmVkRGlmZlRvb2woU3RyaW5nIG5hbWUsIFN0cmluZyBwYXRoLCBTdHJpbmcgY21kKSB7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMucGF0aCA9IHBhdGg7CisJCXRoaXMuY21kID0gY21kOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRpZmYgdG9vbCBuYW1lCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgcGF0aCBvZiB0aGUgZGlmZiB0b29sLgorCSAqCisJICogPHA+CisJICogVGhlIHBhdGggdG8gYSBwcmUtZGVmaW5lZCBleHRlcm5hbCBkaWZmIHRvb2wgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKwkgKiBzcGVjaWZ5aW5nIHtAY29kZSBkaWZmdG9vbC48dG9vbD4ucGF0aH0gaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisJICogPC9wPgorCSAqIDxwPgorCSAqIEZvciBhIHVzZXIgZGVmaW5lZCBkaWZmIHRvb2wgKHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgYSBwcmUtZGVmaW5lZCBkaWZmCisJICogdG9vbCksIHRoZSBwYXRoIGlzIGlnbm9yZWQgd2hlbiBpbnZva2luZyB0aGUgdG9vbC4KKwkgKiA8L3A+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBkaWZmIHRvb2wgcGF0aAorCSAqCisJICogQHNlZSA8YSBocmVmPQorCSAqICAgICAgImh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2wiPmh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2w8L2E+CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRQYXRoKCkgeworCQlyZXR1cm4gcGF0aDsKKwl9CisKKwkvKioKKwkgKiBUaGUgY29tbWFuZCBvZiB0aGUgZGlmZiB0b29sLgorCSAqCisJICogPHA+CisJICogQSBwcmUtZGVmaW5lZCBleHRlcm5hbCBkaWZmIHRvb2wgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIHRvb2xzIG5hbWUKKwkgKiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG92ZXJ3cml0dGVuIHRvb2wgaXMgdGhlbiBhIHVzZXIgZGVmaW5lZCB0b29sCisJICogYW5kIHRoZSBjb21tYW5kIG9mIHRoZSBkaWZmIHRvb2wgaXMgc3BlY2lmaWVkIHdpdGgKKwkgKiB7QGNvZGUgZGlmZnRvb2wuPHRvb2w+LmNtZH0uIFRoaXMgY29tbWFuZCBtdXN0IHdvcmsgd2l0aG91dCBwcmVwZW5kaW5nCisJICogdGhlIHZhbHVlIG9mIHtAbGluayAjZ2V0UGF0aCgpfSBhbmQgY2FuIHNvbWV0aW1lcyBpbmNsdWRlIHRvb2wKKwkgKiBwYXJhbWV0ZXJzLgorCSAqIDwvcD4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGRpZmYgdG9vbCBjb21tYW5kCisJICoKKwkgKiBAc2VlIDxhIGhyZWY9CisJICogICAgICAiaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1kaWZmdG9vbCI+aHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1kaWZmdG9vbDwvYT4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldENvbW1hbmQoKSB7CisJCXJldHVybiBjbWQ7CisJfQorCisJLyoqCisJICogT3ZlcnJpZGVzIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gRXF1aXZhbGVudCB0byBzZXR0aW5nCisJICoge0Bjb2RlIGRpZmZ0b29sLjx0b29sPi5wYXRofS4KKwkgKgorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB0aGUgbmV3IGRpZmYgdG9vbCBwYXRoCisJICoKKwkgKiBAc2VlIDxhIGhyZWY9CisJICogICAgICAiaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1kaWZmdG9vbCI+aHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1kaWZmdG9vbDwvYT4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXRoKFN0cmluZyBwYXRoKSB7CisJCXRoaXMucGF0aCA9IHBhdGg7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGUuamF2YQppbmRleCA1NGM1MjdjLi5iMzBkNTA5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGUuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGUuamF2YQpAQCAtMTIsNiArMTIsMTAgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0xvbmc7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlQXJyYXk7CkBAIC0xNjYsNiArMTcwLDEyIEBAIHB1YmxpYyBzdGF0aWMgRGZzQmxvY2tDYWNoZSBnZXRJbnN0YW5jZSgpIHsKIAkvKiogTGltaXRzIG9mIGNhY2hlIGhvdCBjb3VudCBwZXIgcGFjayBmaWxlIGV4dGVuc2lvbi4gKi8KIAlwcml2YXRlIGZpbmFsIGludFtdIGNhY2hlSG90TGltaXRzID0gbmV3IGludFtQYWNrRXh0LnZhbHVlcygpLmxlbmd0aF07CiAKKwkvKiogQ29uc3VtZXIgb2YgbG9hZGluZyBhbmQgZXZpY3Rpb24gZXZlbnRzIG9mIGluZGV4ZXMuICovCisJcHJpdmF0ZSBmaW5hbCBEZnNCbG9ja0NhY2hlQ29uZmlnLkluZGV4RXZlbnRDb25zdW1lciBpbmRleEV2ZW50Q29uc3VtZXI7CisKKwkvKiogU3RvcmVzIHRpbWVzdGFtcHMgb2YgdGhlIGxhc3QgZXZpY3Rpb24gb2YgaW5kZXhlcy4gKi8KKwlwcml2YXRlIGZpbmFsIE1hcDxFdmljdEtleSwgTG9uZz4gaW5kZXhFdmljdGlvbk1hcCA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDw+KCk7CisKIAlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKIAlwcml2YXRlIERmc0Jsb2NrQ2FjaGUoRGZzQmxvY2tDYWNoZUNvbmZpZyBjZmcpIHsKIAkJdGFibGVTaXplID0gdGFibGVTaXplKGNmZyk7CkBAIC0yMTMsNiArMjIzLDcgQEAgcHJpdmF0ZSBEZnNCbG9ja0NhY2hlKERmc0Jsb2NrQ2FjaGVDb25maWcgY2ZnKSB7CiAJCQkJY2FjaGVIb3RMaW1pdHNbaV0gPSBEZnNCbG9ja0NhY2hlQ29uZmlnLkRFRkFVTFRfQ0FDSEVfSE9UX01BWDsKIAkJCX0KIAkJfQorCQlpbmRleEV2ZW50Q29uc3VtZXIgPSBjZmcuZ2V0SW5kZXhFdmVudENvbnN1bWVyKCk7CiAJfQogCiAJYm9vbGVhbiBzaG91bGRDb3B5VGhyb3VnaENhY2hlKGxvbmcgbGVuZ3RoKSB7CkBAIC00NjEsNiArNDcyLDcgQEAgcHJpdmF0ZSB2b2lkIHJlc2VydmVTcGFjZShsb25nIHJlc2VydmUsIERmc1N0cmVhbUtleSBrZXkpIHsKIAkJCQkJbGl2ZSAtPSBkZWFkLnNpemU7CiAJCQkJCWdldFN0YXQobGl2ZUJ5dGVzLCBkZWFkLmtleSkuYWRkQW5kR2V0KC1kZWFkLnNpemUpOwogCQkJCQlnZXRTdGF0KHN0YXRFdmljdCwgZGVhZC5rZXkpLmluY3JlbWVudEFuZEdldCgpOworCQkJCQlyZXBvcnRJbmRleEV2aWN0ZWQoZGVhZCk7CiAJCQkJfSB3aGlsZSAobWF4Qnl0ZXMgPCBsaXZlKTsKIAkJCQljbG9ja0hhbmQgPSBwcmV2OwogCQkJfQpAQCAtNTE1LDExICs1MjcsMTMgQEAgdm9pZCBwdXQoRGZzQmxvY2sgdikgewogCTxUPiBSZWY8VD4gZ2V0T3JMb2FkUmVmKAogCQkJRGZzU3RyZWFtS2V5IGtleSwgbG9uZyBwb3NpdGlvbiwgUmVmTG9hZGVyPFQ+IGxvYWRlcikKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKIAkJaW50IHNsb3QgPSBzbG90KGtleSwgcG9zaXRpb24pOwogCQlIYXNoRW50cnkgZTEgPSB0YWJsZS5nZXQoc2xvdCk7CiAJCVJlZjxUPiByZWYgPSBzY2FuUmVmKGUxLCBrZXksIHBvc2l0aW9uKTsKIAkJaWYgKHJlZiAhPSBudWxsKSB7CiAJCQlnZXRTdGF0KHN0YXRIaXQsIGtleSkuaW5jcmVtZW50QW5kR2V0KCk7CisJCQlyZXBvcnRJbmRleFJlcXVlc3RlZChyZWYsIHRydWUgLyogY2FjaGVIaXQgKi8sIHN0YXJ0KTsKIAkJCXJldHVybiByZWY7CiAJCX0KIApAQCAtNTMyLDYgKzU0Niw4IEBAIDxUPiBSZWY8VD4gZ2V0T3JMb2FkUmVmKAogCQkJCXJlZiA9IHNjYW5SZWYoZTIsIGtleSwgcG9zaXRpb24pOwogCQkJCWlmIChyZWYgIT0gbnVsbCkgewogCQkJCQlnZXRTdGF0KHN0YXRIaXQsIGtleSkuaW5jcmVtZW50QW5kR2V0KCk7CisJCQkJCXJlcG9ydEluZGV4UmVxdWVzdGVkKHJlZiwgdHJ1ZSAvKiBjYWNoZUhpdCAqLywKKwkJCQkJCQlzdGFydCk7CiAJCQkJCXJldHVybiByZWY7CiAJCQkJfQogCQkJfQpAQCAtNTU2LDYgKzU3Miw3IEBAIDxUPiBSZWY8VD4gZ2V0T3JMb2FkUmVmKAogCQl9IGZpbmFsbHkgewogCQkJcmVnaW9uTG9jay51bmxvY2soKTsKIAkJfQorCQlyZXBvcnRJbmRleFJlcXVlc3RlZChyZWYsIGZhbHNlIC8qIGNhY2hlSGl0ICovLCBzdGFydCk7CiAJCXJldHVybiByZWY7CiAJfQogCkBAIC02ODIsOCArNjk5LDkgQEAgcHJpdmF0ZSBzdGF0aWMgQXRvbWljTG9uZyBnZXRTdGF0KEF0b21pY1JlZmVyZW5jZTxBdG9taWNMb25nW10+IHN0YXRzLAogCX0KIAogCXByaXZhdGUgc3RhdGljIEhhc2hFbnRyeSBjbGVhbihIYXNoRW50cnkgdG9wKSB7Ci0JCXdoaWxlICh0b3AgIT0gbnVsbCAmJiB0b3AucmVmLm5leHQgPT0gbnVsbCkKKwkJd2hpbGUgKHRvcCAhPSBudWxsICYmIHRvcC5yZWYubmV4dCA9PSBudWxsKSB7CiAJCQl0b3AgPSB0b3AubmV4dDsKKwkJfQogCQlpZiAodG9wID09IG51bGwpIHsKIAkJCXJldHVybiBudWxsOwogCQl9CkBAIC02OTEsNiArNzA5LDQ0IEBAIHByaXZhdGUgc3RhdGljIEhhc2hFbnRyeSBjbGVhbihIYXNoRW50cnkgdG9wKSB7CiAJCXJldHVybiBuID09IHRvcC5uZXh0ID8gdG9wIDogbmV3IEhhc2hFbnRyeShuLCB0b3AucmVmKTsKIAl9CiAKKwlwcml2YXRlIHZvaWQgcmVwb3J0SW5kZXhSZXF1ZXN0ZWQoUmVmPD8+IHJlZiwgYm9vbGVhbiBjYWNoZUhpdCwKKwkJCWxvbmcgc3RhcnQpIHsKKwkJaWYgKGluZGV4RXZlbnRDb25zdW1lciA9PSBudWxsCisJCQkJfHwgIWlzSW5kZXhPckJpdG1hcEV4dFBvcyhyZWYua2V5LnBhY2tFeHRQb3MpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJRXZpY3RLZXkgZXZpY3RLZXkgPSBuZXcgRXZpY3RLZXkocmVmKTsKKwkJTG9uZyBwcmV2RXZpY3RlZFRpbWUgPSBpbmRleEV2aWN0aW9uTWFwLmdldChldmljdEtleSk7CisJCWxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisJCWxvbmcgc2luY2VMYXN0RXZpY3Rpb25OYW5vcyA9IHByZXZFdmljdGVkVGltZSA9PSBudWxsID8gMEwKKwkJCQk6IG5vdyAtIHByZXZFdmljdGVkVGltZS5sb25nVmFsdWUoKTsKKwkJaW5kZXhFdmVudENvbnN1bWVyLmFjY2VwdFJlcXVlc3RlZEV2ZW50KHJlZi5rZXkucGFja0V4dFBvcywgY2FjaGVIaXQsCisJCQkJKG5vdyAtIHN0YXJ0KSAvIDEwMDBMIC8qIG1pY3JvcyAqLywgcmVmLnNpemUsCisJCQkJRHVyYXRpb24ub2ZOYW5vcyhzaW5jZUxhc3RFdmljdGlvbk5hbm9zKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJlcG9ydEluZGV4RXZpY3RlZChSZWY8Pz4gZGVhZCkgeworCQlpZiAoaW5kZXhFdmVudENvbnN1bWVyID09IG51bGwKKwkJCQl8fCAhaW5kZXhFdmVudENvbnN1bWVyLnNob3VsZFJlcG9ydEV2aWN0ZWRFdmVudCgpCisJCQkJfHwgIWlzSW5kZXhPckJpdG1hcEV4dFBvcyhkZWFkLmtleS5wYWNrRXh0UG9zKSkgeworCQkJcmV0dXJuOworCQl9CisJCUV2aWN0S2V5IGV2aWN0S2V5ID0gbmV3IEV2aWN0S2V5KGRlYWQpOworCQlMb25nIHByZXZFdmljdGVkVGltZSA9IGluZGV4RXZpY3Rpb25NYXAuZ2V0KGV2aWN0S2V5KTsKKwkJbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKwkJbG9uZyBzaW5jZUxhc3RFdmljdGlvbk5hbm9zID0gcHJldkV2aWN0ZWRUaW1lID09IG51bGwgPyAwTAorCQkJCTogbm93IC0gcHJldkV2aWN0ZWRUaW1lLmxvbmdWYWx1ZSgpOworCQlpbmRleEV2aWN0aW9uTWFwLnB1dChldmljdEtleSwgTG9uZy52YWx1ZU9mKG5vdykpOworCQlpbmRleEV2ZW50Q29uc3VtZXIuYWNjZXB0RXZpY3RlZEV2ZW50KGRlYWQua2V5LnBhY2tFeHRQb3MsIGRlYWQuc2l6ZSwKKwkJCQlkZWFkLnRvdGFsSGl0Q291bnQuZ2V0KCksCisJCQkJRHVyYXRpb24ub2ZOYW5vcyhzaW5jZUxhc3RFdmljdGlvbk5hbm9zKSk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luZGV4T3JCaXRtYXBFeHRQb3MoaW50IHBhY2tFeHRQb3MpIHsKKwkJcmV0dXJuIHBhY2tFeHRQb3MgPT0gUGFja0V4dC5JTkRFWC5nZXRQb3NpdGlvbigpCisJCQkJfHwgcGFja0V4dFBvcyA9PSBQYWNrRXh0LkJJVE1BUF9JTkRFWC5nZXRQb3NpdGlvbigpOworCX0KKwogCXByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEhhc2hFbnRyeSB7CiAJCS8qKiBOZXh0IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlJ3MgY2hhaW4gbGlzdC4gKi8KIAkJZmluYWwgSGFzaEVudHJ5IG5leHQ7CkBAIC03MTIsNiArNzY4LDcgQEAgc3RhdGljIGZpbmFsIGNsYXNzIFJlZjxUPiB7CiAJCVJlZiBuZXh0OwogCiAJCXByaXZhdGUgdm9sYXRpbGUgaW50IGhvdENvdW50OworCQlwcml2YXRlIEF0b21pY0ludGVnZXIgdG90YWxIaXRDb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CiAKIAkJUmVmKERmc1N0cmVhbUtleSBrZXksIGxvbmcgcG9zaXRpb24sIGxvbmcgc2l6ZSwgVCB2KSB7CiAJCQl0aGlzLmtleSA9IGtleTsKQEAgLTczNiw2ICs3OTMsNyBAQCB2b2lkIG1hcmtIb3R0ZXIoKSB7CiAJCQlpbnQgY2FwID0gRGZzQmxvY2tDYWNoZQogCQkJCQkuZ2V0SW5zdGFuY2UoKS5jYWNoZUhvdExpbWl0c1trZXkucGFja0V4dFBvc107CiAJCQlob3RDb3VudCA9IE1hdGgubWluKGNhcCwgaG90Q291bnQgKyAxKTsKKwkJCXRvdGFsSGl0Q291bnQuaW5jcmVtZW50QW5kR2V0KCk7CiAJCX0KIAogCQl2b2lkIG1hcmtDb2xkZXIoKSB7CkBAIC03NDcsNiArODA1LDM0IEBAIGJvb2xlYW4gaXNIb3QoKSB7CiAJCX0KIAl9CiAKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBFdmljdEtleSB7CisJCXByaXZhdGUgZmluYWwgaW50IGtleUhhc2g7CisJCXByaXZhdGUgZmluYWwgaW50IHBhY2tFeHRQb3M7CisJCXByaXZhdGUgZmluYWwgbG9uZyBwb3NpdGlvbjsKKworCQlFdmljdEtleShSZWY8Pz4gcmVmKSB7CisJCQlrZXlIYXNoID0gcmVmLmtleS5oYXNoOworCQkJcGFja0V4dFBvcyA9IHJlZi5rZXkucGFja0V4dFBvczsKKwkJCXBvc2l0aW9uID0gcmVmLnBvc2l0aW9uOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqZWN0KSB7CisJCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRXZpY3RLZXkpIHsKKwkJCQlFdmljdEtleSBvdGhlciA9IChFdmljdEtleSkgb2JqZWN0OworCQkJCXJldHVybiBrZXlIYXNoID09IG90aGVyLmtleUhhc2gKKwkJCQkJCSYmIHBhY2tFeHRQb3MgPT0gb3RoZXIucGFja0V4dFBvcworCQkJCQkJJiYgcG9zaXRpb24gPT0gb3RoZXIucG9zaXRpb247CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJCXJldHVybiBEZnNCbG9ja0NhY2hlLmdldEluc3RhbmNlKCkuaGFzaChrZXlIYXNoLCBwb3NpdGlvbik7CisJCX0KKwl9CisKIAlARnVuY3Rpb25hbEludGVyZmFjZQogCWludGVyZmFjZSBSZWZMb2FkZXI8VD4gewogCQlSZWY8VD4gbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbjsKQEAgLTc2Myw0ICs4NDksNCBAQCBpbnRlcmZhY2UgUmVhZGFibGVDaGFubmVsU3VwcGxpZXIgewogCQkgKi8KIAkJUmVhZGFibGVDaGFubmVsIGdldCgpIHRocm93cyBJT0V4Y2VwdGlvbjsKIAl9Ci19Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlQ29uZmlnLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGVDb25maWcuamF2YQppbmRleCAyNzE2Zjc5Li42OWEzNzA1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGVDb25maWcuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGVDb25maWcuamF2YQpAQCAtMTgsNiArMTgsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9TVFJFQU1fUkFUSU87CiAKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnRpbWUuRHVyYXRpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkNvbnN1bWVyOwpAQCAtNDYsOSArNDcsMTAgQEAgcHVibGljIGNsYXNzIERmc0Jsb2NrQ2FjaGVDb25maWcgewogCXByaXZhdGUgaW50IGNvbmN1cnJlbmN5TGV2ZWw7CiAKIAlwcml2YXRlIENvbnN1bWVyPExvbmc+IHJlZkxvY2s7Ci0KIAlwcml2YXRlIE1hcDxQYWNrRXh0LCBJbnRlZ2VyPiBjYWNoZUhvdE1hcDsKIAorCXByaXZhdGUgSW5kZXhFdmVudENvbnN1bWVyIGluZGV4RXZlbnRDb25zdW1lcjsKKwogCS8qKgogCSAqIENyZWF0ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KIAkgKi8KQEAgLTIxNiw2ICsyMTgsMjggQEAgcHVibGljIERmc0Jsb2NrQ2FjaGVDb25maWcgc2V0Q2FjaGVIb3RNYXAoCiAJfQogCiAJLyoqCisJICogR2V0IHRoZSBjb25zdW1lciBvZiBjYWNoZSBpbmRleCBldmVudHMuCisJICoKKwkgKiBAcmV0dXJuIGNvbnN1bWVyIG9mIGNhY2hlIGluZGV4IGV2ZW50cy4KKwkgKi8KKwlwdWJsaWMgSW5kZXhFdmVudENvbnN1bWVyIGdldEluZGV4RXZlbnRDb25zdW1lcigpIHsKKwkJcmV0dXJuIGluZGV4RXZlbnRDb25zdW1lcjsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIGNvbnN1bWVyIG9mIGNhY2hlIGluZGV4IGV2ZW50cy4KKwkgKgorCSAqIEBwYXJhbSBpbmRleEV2ZW50Q29uc3VtZXIKKwkgKiAgICAgICAgICAgIGNvbnN1bWVyIG9mIGNhY2hlIGluZGV4IGV2ZW50cy4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqLworCXB1YmxpYyBEZnNCbG9ja0NhY2hlQ29uZmlnIHNldEluZGV4RXZlbnRDb25zdW1lcigKKwkJCUluZGV4RXZlbnRDb25zdW1lciBpbmRleEV2ZW50Q29uc3VtZXIpIHsKKwkJdGhpcy5pbmRleEV2ZW50Q29uc3VtZXIgPSBpbmRleEV2ZW50Q29uc3VtZXI7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgogCSAqIFVwZGF0ZSBwcm9wZXJ0aWVzIGJ5IHNldHRpbmcgZmllbGRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCiAJICogPHA+CiAJICogSWYgYSBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlbiBpdCBpcyBsZWZ0CkBAIC0yNzIsNCArMjk2LDUyIEBAIHB1YmxpYyBEZnNCbG9ja0NhY2hlQ29uZmlnIGZyb21Db25maWcoQ29uZmlnIHJjKSB7CiAJCX0KIAkJcmV0dXJuIHRoaXM7CiAJfQotfQorCisJLyoqIENvbnN1bWVyIG9mIERmc0Jsb2NrQ2FjaGUgbG9hZGluZyBhbmQgZXZpY3Rpb24gZXZlbnRzIGZvciBpbmRleGVzLiAqLworCXB1YmxpYyBpbnRlcmZhY2UgSW5kZXhFdmVudENvbnN1bWVyIHsKKwkJLyoqCisJCSAqIEFjY2VwdCBhbiBldmVudCBvZiBhbiBpbmRleCByZXF1ZXN0ZWQuIEl0IGNvdWxkIGJlIGxvYWRlZCBmcm9tIGVpdGhlcgorCQkgKiBjYWNoZSBvciBzdG9yYWdlLgorCQkgKgorCQkgKiBAcGFyYW0gcGFja0V4dFBvcworCQkgKiAgICAgICAgICAgIHBvc2l0aW9uIGluIHtAY29kZSBQYWNrRXh0fSBlbnVtCisJCSAqIEBwYXJhbSBjYWNoZUhpdAorCQkgKiAgICAgICAgICAgIHRydWUgaWYgYW4gaW5kZXggd2FzIGFscmVhZHkgaW4gY2FjaGUuIE90aGVyd2lzZSwgdGhlCisJCSAqICAgICAgICAgICAgaW5kZXggd2FzIGxvYWRlZCBmcm9tIHN0b3JhZ2UgaW50byB0aGUgY2FjaGUgaW4gdGhlCisJCSAqICAgICAgICAgICAgY3VycmVudCByZXF1ZXN0LAorCQkgKiBAcGFyYW0gbG9hZE1pY3JvcworCQkgKiAgICAgICAgICAgIHRpbWUgdG8gbG9hZCBhbiBpbmRleCBmcm9tIGNhY2hlIG9yIHN0b3JhZ2UgaW4KKwkJICogICAgICAgICAgICBtaWNyb3NlY29uZHMKKwkJICogQHBhcmFtIGJ5dGVzCisJCSAqICAgICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGxvYWRlZAorCQkgKiBAcGFyYW0gbGFzdEV2aWN0aW9uRHVyYXRpb24KKwkJICogICAgICAgICAgICB0aW1lIHNpbmNlIGxhc3QgZXZpY3Rpb24sIDAgaWYgd2FzIG5vdCBldmljdGVkIHlldAorCQkgKi8KKwkJdm9pZCBhY2NlcHRSZXF1ZXN0ZWRFdmVudChpbnQgcGFja0V4dFBvcywgYm9vbGVhbiBjYWNoZUhpdCwKKwkJCQlsb25nIGxvYWRNaWNyb3MsIGxvbmcgYnl0ZXMsIER1cmF0aW9uIGxhc3RFdmljdGlvbkR1cmF0aW9uKTsKKworCQkvKioKKwkJICogQWNjZXB0IGFuIGV2ZW50IG9mIGFuIGluZGV4IGV2aWN0ZWQgZnJvbSBjYWNoZS4KKwkJICoKKwkJICogQHBhcmFtIHBhY2tFeHRQb3MKKwkJICogICAgICAgICAgICBwb3NpdGlvbiBpbiB7QGNvZGUgUGFja0V4dH0gZW51bQorCQkgKiBAcGFyYW0gYnl0ZXMKKwkJICogICAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgZXZpY3RlZAorCQkgKiBAcGFyYW0gdG90YWxDYWNoZUhpdENvdW50CisJCSAqICAgICAgICAgICAgbnVtYmVyIG9mIHRpbWVzIGFuIGluZGV4IHdhcyBhY2Nlc3NlZCB3aGlsZSBpbiBjYWNoZQorCQkgKiBAcGFyYW0gbGFzdEV2aWN0aW9uRHVyYXRpb24KKwkJICogICAgICAgICAgICB0aW1lIHNpbmNlIGxhc3QgZXZpY3Rpb24sIDAgaWYgd2FzIG5vdCBldmljdGVkIHlldAorCQkgKi8KKwkJZGVmYXVsdCB2b2lkIGFjY2VwdEV2aWN0ZWRFdmVudChpbnQgcGFja0V4dFBvcywgbG9uZyBieXRlcywKKwkJCQlpbnQgdG90YWxDYWNoZUhpdENvdW50LCBEdXJhdGlvbiBsYXN0RXZpY3Rpb25EdXJhdGlvbikgeworCQkJLy8gT2ZmIGJ5IGRlZmF1bHQuCisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0cnVlIGlmIHJlcG9ydGluZyBldmljdGVkIGV2ZW50cyBpcyBlbmFibGVkLgorCQkgKi8KKwkJZGVmYXVsdCBib29sZWFuIHNob3VsZFJlcG9ydEV2aWN0ZWRFdmVudCgpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1BhY2tGaWxlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1BhY2tGaWxlLmphdmEKaW5kZXggYmI3NmRmMS4uZjdhMmM5NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNQYWNrRmlsZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzUGFja0ZpbGUuamF2YQpAQCAtMTA2MSw3ICsxMDYxLDggQEAgcHJpdmF0ZSBEZnNCbG9ja0NhY2hlLlJlZjxQYWNrQml0bWFwSW5kZXg+IGxvYWRCaXRtYXBJbmRleChEZnNSZWFkZXIgY3R4LAogCQkJCX0KIAkJCQlpbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGluLCBicyk7CiAJCQkJYm1pZHggPSBQYWNrQml0bWFwSW5kZXgucmVhZChpbiwgKCkgLT4gaWR4KGN0eCksCi0JCQkJCQkoKSAtPiBnZXRSZXZlcnNlSWR4KGN0eCkpOworCQkJCQkJKCkgLT4gZ2V0UmV2ZXJzZUlkeChjdHgpLAorCQkJCQkJY3R4LmdldE9wdGlvbnMoKS5zaG91bGRMb2FkUmV2SW5kZXhJblBhcmFsbGVsKCkpOwogCQkJfSBmaW5hbGx5IHsKIAkJCQlzaXplID0gcmMucG9zaXRpb24oKTsKIAkJCQljdHguc3RhdHMucmVhZEJpdG1hcElkeEJ5dGVzICs9IHNpemU7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1JlYWRlck9wdGlvbnMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzUmVhZGVyT3B0aW9ucy5qYXZhCmluZGV4IDg5ZGU1MzQuLjE0NmY3NjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzUmVhZGVyT3B0aW9ucy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzUmVhZGVyT3B0aW9ucy5qYXZhCkBAIC0zNCw2ICszNCw4IEBAIHB1YmxpYyBjbGFzcyBEZnNSZWFkZXJPcHRpb25zIHsKIAogCXByaXZhdGUgaW50IHN0cmVhbVBhY2tCdWZmZXJTaXplOwogCisJcHJpdmF0ZSBib29sZWFuIGxvYWRSZXZJbmRleEluUGFyYWxsZWw7CisKIAkvKioKIAkgKiBDcmVhdGUgYSBkZWZhdWx0IHJlYWRlciBjb25maWd1cmF0aW9uLgogCSAqLwpAQCAtMTEzLDYgKzExNSwyOCBAQCBwdWJsaWMgRGZzUmVhZGVyT3B0aW9ucyBzZXRTdHJlYW1QYWNrQnVmZmVyU2l6ZShpbnQgYnVmc3opIHsKIAl9CiAKIAkvKioKKwkgKiBDaGVjayBpZiByZXZlcnNlIGluZGV4IHNob3VsZCBiZSBsb2FkZWQgaW4gcGFyYWxsZWwuCisJICoKKwkgKiBAcmV0dXJuIHRydWUgaWYgcmV2ZXJzZSBpbmRleCBpcyBsb2FkZWQgaW4gcGFyYWxsZWwgZm9yIGJpdG1hcCBpbmRleC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzaG91bGRMb2FkUmV2SW5kZXhJblBhcmFsbGVsKCkgeworCQlyZXR1cm4gbG9hZFJldkluZGV4SW5QYXJhbGxlbDsKKwl9CisKKwkvKioKKwkgKiBFbmFibGUgKG9yIGRpc2FibGUpIHBhcmFsbGVsIGxvYWRpbmcgb2YgcmV2ZXJzZSBpbmRleC4KKwkgKgorCSAqIEBwYXJhbSBsb2FkUmV2SW5kZXhJblBhcmFsbGVsCisJICogICAgICAgICAgICB3aGV0aGVyIHRvIGxvYWQgcmV2ZXJzZSBpbmRleCBpbiBwYXJhbGxlbC4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqLworCXB1YmxpYyBEZnNSZWFkZXJPcHRpb25zIHNldExvYWRSZXZJbmRleEluUGFyYWxsZWwoCisJCQlib29sZWFuIGxvYWRSZXZJbmRleEluUGFyYWxsZWwpIHsKKwkJdGhpcy5sb2FkUmV2SW5kZXhJblBhcmFsbGVsID0gbG9hZFJldkluZGV4SW5QYXJhbGxlbDsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogVXBkYXRlIHByb3BlcnRpZXMgYnkgc2V0dGluZyBmaWVsZHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbi4KIAkgKiA8cD4KIAkgKiBJZiBhIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uLCB0aGVuIGl0IGlzIGxlZnQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvSW5NZW1vcnlSZXBvc2l0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0luTWVtb3J5UmVwb3NpdG9yeS5qYXZhCmluZGV4IDViNjg5NGQuLjk5ZGEyMjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvSW5NZW1vcnlSZXBvc2l0b3J5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9Jbk1lbW9yeVJlcG9zaXRvcnkuamF2YQpAQCAtMTY1LDYgKzE2NSwxNSBAQCBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKIAkJCQl9CiAJCQl9OwogCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBsb25nIGdldEFwcHJveGltYXRlT2JqZWN0Q291bnQoKSB7CisJCQlsb25nIGNvdW50ID0gMDsKKwkJCWZvciAoRGZzUGFja0Rlc2NyaXB0aW9uIHAgOiBwYWNrcykgeworCQkJCWNvdW50ICs9IHAuZ2V0T2JqZWN0Q291bnQoKTsKKwkJCX0KKwkJCXJldHVybiBjb3VudDsKKwkJfQogCX0KIAogCXByaXZhdGUgc3RhdGljIGNsYXNzIE1lbVBhY2sgZXh0ZW5kcyBEZnNQYWNrRGVzY3JpcHRpb24gewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9MYXJnZVBhY2tlZFdob2xlT2JqZWN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0xhcmdlUGFja2VkV2hvbGVPYmplY3QuamF2YQppbmRleCBiMDYxMmY5Li5jZDRmMTY4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0xhcmdlUGFja2VkV2hvbGVPYmplY3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0xhcmdlUGFja2VkV2hvbGVPYmplY3QuamF2YQpAQCAtNzMsNyArNzMsNiBAQCBwdWJsaWMgYm9vbGVhbiBpc0xhcmdlKCkgewogCXB1YmxpYyBPYmplY3RTdHJlYW0gb3BlblN0cmVhbSgpIHRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCVBhY2tJbnB1dFN0cmVhbSBwYWNrSW47CiAJCS8vIGN0eCBpcyBjbG9zZWQgYnkgUGFja0lucHV0U3RyZWFtLCBvciBleHBsaWNpdGx5IGluIHRoZSBmaW5hbGx5IGJsb2NrCi0JCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCiAJCURmc1JlYWRlciBjdHggPSBkYi5uZXdSZWFkZXIoKTsKIAkJdHJ5IHsKIAkJCXRyeSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DYWNoZWRPYmplY3REaXJlY3RvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0NhY2hlZE9iamVjdERpcmVjdG9yeS5qYXZhCmluZGV4IDdkZWRlYjUuLjA5NGZkYzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0NhY2hlZE9iamVjdERpcmVjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0NhY2hlZE9iamVjdERpcmVjdG9yeS5qYXZhCkBAIC0yNjMsNCArMjYzLDE3IEBAIHByaXZhdGUgc3RhdGljIGNsYXNzIFVucGFja2VkT2JqZWN0SWQgZXh0ZW5kcyBPYmplY3RJZE93bmVyTWFwLkVudHJ5IHsKIAlwcml2YXRlIEFsdGVybmF0ZUhhbmRsZS5JZCBnZXRBbHRlcm5hdGVJZCgpIHsKIAkJcmV0dXJuIHdyYXBwZWQuZ2V0QWx0ZXJuYXRlSWQoKTsKIAl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgbG9uZyBnZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCkgeworCQlsb25nIGNvdW50ID0gMDsKKwkJZm9yIChQYWNrIHAgOiBnZXRQYWNrcygpKSB7CisJCQl0cnkgeworCQkJCWNvdW50ICs9IHAuZ2V0T2JqZWN0Q291bnQoKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZWZ0YWJsZVN0YWNrLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFjay5qYXZhCmluZGV4IGYwMmM4NjEuLjUxNTIzNjcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZWZ0YWJsZVN0YWNrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlZnRhYmxlU3RhY2suamF2YQpAQCAtNDAsNiArNDAsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZS5SZWZ0YWJsZVdyaXRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3lzdGVtUmVhZGVyOwogCiAvKioKICAqIEEgbXV0YWJsZSBzdGFjayBvZiByZWZ0YWJsZXMgb24gbG9jYWwgZmlsZXN5c3RlbSBzdG9yYWdlLiBOb3QgdGhyZWFkLXNhZmUuCkBAIC01MjcsMTEgKzUyOCwxOSBAQCBib29sZWFuIGNvbXBhY3RSYW5nZShpbnQgZmlyc3QsIGludCBsYXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIAorCQkJcmVsb2FkKCk7CiAJCQlmb3IgKEZpbGUgZiA6IGRlbGV0ZU9uU3VjY2VzcykgewotCQkJCUZpbGVzLmRlbGV0ZShmLnRvUGF0aCgpKTsKKwkJCQl0cnkgeworCQkJCQlGaWxlcy5kZWxldGUoZi50b1BhdGgoKSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmU6IHRoaXMgY2FuIGhhcHBlbiBvbiBXaW5kb3dzIGluIGNhc2Ugb2YgY29uY3VycmVudCBwcm9jZXNzZXMuCisJCQkJCS8vIGxlYXZlIHRoZSBnYXJiYWdlIGFuZCBjb250aW51ZS4KKwkJCQkJaWYgKCFTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5pc1dpbmRvd3MoKSkgeworCQkJCQkJdGhyb3cgZTsKKwkJCQkJfQorCQkJCX0KIAkJCX0KIAotCQkJcmVsb2FkKCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBmaW5hbGx5IHsKIAkJCWlmICh0bXBUYWJsZSAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVwb3NpdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlcG9zaXRvcnkuamF2YQppbmRleCBiMzcxNTU3Li4zZTkyY2RkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVwb3NpdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZXBvc2l0b3J5LmphdmEKQEAgLTY3MiwxOCArNjcyLDIwIEBAIHZvaWQgY29udmVydFRvUGFja2VkUmVmcyhib29sZWFuIHdyaXRlTG9ncywgYm9vbGVhbiBiYWNrdXApIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKIAkJCWlmICh3cml0ZUxvZ3MpIHsKIAkJCQlMaXN0PFJlZmxvZ0VudHJ5PiBsb2dzID0gb2xkRGIuZ2V0UmVmbG9nUmVhZGVyKHIuZ2V0TmFtZSgpKQotCQkJCQkuZ2V0UmV2ZXJzZUVudHJpZXMoKTsKKwkJCQkJCS5nZXRSZXZlcnNlRW50cmllcygpOwogCQkJCUNvbGxlY3Rpb25zLnJldmVyc2UobG9ncyk7CiAJCQkJZm9yIChSZWZsb2dFbnRyeSBlIDogbG9ncykgewogCQkJCQlsb2dXcml0ZXIubG9nKHIuZ2V0TmFtZSgpLCBlKTsKIAkJCQl9Ci0JCX0KKwkJCX0KIAkJfQogCiAJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKHRoaXMpKSB7CiAJCQlicnUuZXhlY3V0ZShydywgTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSk7CiAJCX0KIAorCQlvbGREYi5jbG9zZSgpOworCiAJCUxpc3Q8U3RyaW5nPiBmYWlsZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJZm9yIChSZWNlaXZlQ29tbWFuZCBjbWQgOiBicnUuZ2V0Q29tbWFuZHMoKSkgewogCQkJaWYgKGNtZC5nZXRSZXN1bHQoKSAhPSBSZWNlaXZlQ29tbWFuZC5SZXN1bHQuT0spIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0xvb3NlT2JqZWN0cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvTG9vc2VPYmplY3RzLmphdmEKaW5kZXggMzM2MjFhMS4uYjlhZjgzZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvTG9vc2VPYmplY3RzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvTG9vc2VPYmplY3RzLmphdmEKQEAgLTE0LDYgKzE0LDcgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKIGltcG9ydCBqYXZhLm5pby5maWxlLk5vU3VjaEZpbGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5TdGFuZGFyZENvcHlPcHRpb247CkBAIC0yNCw2ICsyNSw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGUuRmlsZU9iamVjdERhdGFiYXNlLkluc2VydExvb3NlT2JqZWN0UmVzdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFiYnJldmlhdGVkT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0TG9hZGVyOwpAQCAtNTIsMTUgKzU1LDIyIEBAIGNsYXNzIExvb3NlT2JqZWN0cyB7CiAKIAlwcml2YXRlIGZpbmFsIFVucGFja2VkT2JqZWN0Q2FjaGUgdW5wYWNrZWRPYmplY3RDYWNoZTsKIAorCXByaXZhdGUgZmluYWwgYm9vbGVhbiB0cnVzdEZvbGRlclN0YXQ7CisKIAkvKioKIAkgKiBJbml0aWFsaXplIGEgcmVmZXJlbmNlIHRvIGFuIG9uLWRpc2sgb2JqZWN0IGRpcmVjdG9yeS4KIAkgKgorCSAqIEBwYXJhbSBjb25maWcKKwkgKiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb29zZSBvYmplY3RzIGhhbmRsZXIuCiAJICogQHBhcmFtIGRpcgogCSAqICAgICAgICAgICAgdGhlIGxvY2F0aW9uIG9mIHRoZSA8Y29kZT5vYmplY3RzPC9jb2RlPiBkaXJlY3RvcnkuCiAJICovCi0JTG9vc2VPYmplY3RzKEZpbGUgZGlyKSB7CisJTG9vc2VPYmplY3RzKENvbmZpZyBjb25maWcsIEZpbGUgZGlyKSB7CiAJCWRpcmVjdG9yeSA9IGRpcjsKIAkJdW5wYWNrZWRPYmplY3RDYWNoZSA9IG5ldyBVbnBhY2tlZE9iamVjdENhY2hlKCk7CisJCXRydXN0Rm9sZGVyU3RhdCA9IGNvbmZpZy5nZXRCb29sZWFuKAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNURk9MREVSU1RBVCwgdHJ1ZSk7CiAJfQogCiAJLyoqCkBAIC05OCw2ICsxMDgsMTkgQEAgYm9vbGVhbiBoYXNDYWNoZWQoQW55T2JqZWN0SWQgaWQpIHsKIAkgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBzdG9yZWQgYXMgYSBsb29zZSBvYmplY3QuCiAJICovCiAJYm9vbGVhbiBoYXMoQW55T2JqZWN0SWQgb2JqZWN0SWQpIHsKKwkJYm9vbGVhbiBleGlzdHMgPSBoYXNXaXRob3V0UmVmcmVzaChvYmplY3RJZCk7CisJCWlmICh0cnVzdEZvbGRlclN0YXQgfHwgZXhpc3RzKSB7CisJCQlyZXR1cm4gZXhpc3RzOworCQl9CisJCXRyeSAoSW5wdXRTdHJlYW0gc3RyZWFtID0gRmlsZXMubmV3SW5wdXRTdHJlYW0oZGlyZWN0b3J5LnRvUGF0aCgpKSkgeworCQkJLy8gcmVmcmVzaCBkaXJlY3RvcnkgdG8gd29yayBhcm91bmQgTkZTIGNhY2hpbmcgaXNzdWUKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiBoYXNXaXRob3V0UmVmcmVzaChvYmplY3RJZCk7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIGhhc1dpdGhvdXRSZWZyZXNoKEFueU9iamVjdElkIG9iamVjdElkKSB7CiAJCXJldHVybiBmaWxlRm9yKG9iamVjdElkKS5leGlzdHMoKTsKIAl9CiAKQEAgLTE4Myw2ICsyMDYsMjIgQEAgT2JqZWN0TG9hZGVyIG9wZW4oV2luZG93Q3Vyc29yIGN1cnMsIEFueU9iamVjdElkIGlkKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCSAqLwogCU9iamVjdExvYWRlciBnZXRPYmplY3RMb2FkZXIoV2luZG93Q3Vyc29yIGN1cnMsIEZpbGUgcGF0aCwgQW55T2JqZWN0SWQgaWQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgeworCQkJcmV0dXJuIGdldE9iamVjdExvYWRlcldpdGhvdXRSZWZyZXNoKGN1cnMsIHBhdGgsIGlkKTsKKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCWlmICh0cnVzdEZvbGRlclN0YXQpIHsKKwkJCQl0aHJvdyBlOworCQkJfQorCQkJdHJ5IChJbnB1dFN0cmVhbSBzdHJlYW0gPSBGaWxlcworCQkJCQkubmV3SW5wdXRTdHJlYW0oZGlyZWN0b3J5LnRvUGF0aCgpKSkgeworCQkJCS8vIHJlZnJlc2ggZGlyZWN0b3J5IHRvIHdvcmsgYXJvdW5kIE5GUyBjYWNoaW5nIGlzc3VlcworCQkJfQorCQkJcmV0dXJuIGdldE9iamVjdExvYWRlcldpdGhvdXRSZWZyZXNoKGN1cnMsIHBhdGgsIGlkKTsKKwkJfQorCX0KKworCXByaXZhdGUgT2JqZWN0TG9hZGVyIGdldE9iamVjdExvYWRlcldpdGhvdXRSZWZyZXNoKFdpbmRvd0N1cnNvciBjdXJzLAorCQkJRmlsZSBwYXRoLCBBbnlPYmplY3RJZCBpZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJdHJ5IChGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHBhdGgpKSB7CiAJCQl1bnBhY2tlZE9iamVjdENhY2hlKCkuYWRkKGlkKTsKIAkJCXJldHVybiBVbnBhY2tlZE9iamVjdC5vcGVuKGluLCBwYXRoLCBpZCwgY3Vycyk7CkBAIC0yMDMsMTYgKzI0MiwzNCBAQCBVbnBhY2tlZE9iamVjdENhY2hlIHVucGFja2VkT2JqZWN0Q2FjaGUoKSB7CiAJfQogCiAJbG9uZyBnZXRTaXplKFdpbmRvd0N1cnNvciBjdXJzLCBBbnlPYmplY3RJZCBpZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBnZXRTaXplV2l0aG91dFJlZnJlc2goY3VycywgaWQpOworCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gbm9GaWxlKSB7CisJCQl0cnkgeworCQkJCWlmICh0cnVzdEZvbGRlclN0YXQpIHsKKwkJCQkJdGhyb3cgbm9GaWxlOworCQkJCX0KKwkJCQl0cnkgKElucHV0U3RyZWFtIHN0cmVhbSA9IEZpbGVzCisJCQkJCQkubmV3SW5wdXRTdHJlYW0oZGlyZWN0b3J5LnRvUGF0aCgpKSkgeworCQkJCQkvLyByZWZyZXNoIGRpcmVjdG9yeSB0byB3b3JrIGFyb3VuZCBORlMgY2FjaGluZyBpc3N1ZQorCQkJCX0KKwkJCQlyZXR1cm4gZ2V0U2l6ZVdpdGhvdXRSZWZyZXNoKGN1cnMsIGlkKTsKKwkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkJaWYgKGZpbGVGb3IoaWQpLmV4aXN0cygpKSB7CisJCQkJCXRocm93IG5vRmlsZTsKKwkJCQl9CisJCQkJdW5wYWNrZWRPYmplY3RDYWNoZSgpLnJlbW92ZShpZCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBsb25nIGdldFNpemVXaXRob3V0UmVmcmVzaChXaW5kb3dDdXJzb3IgY3VycywgQW55T2JqZWN0SWQgaWQpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlGaWxlIGYgPSBmaWxlRm9yKGlkKTsKIAkJdHJ5IChGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpKSB7CiAJCQl1bnBhY2tlZE9iamVjdENhY2hlKCkuYWRkKGlkKTsKIAkJCXJldHVybiBVbnBhY2tlZE9iamVjdC5nZXRTaXplKGluLCBpZCwgY3Vycyk7Ci0JCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBub0ZpbGUpIHsKLQkJCWlmIChmLmV4aXN0cygpKSB7Ci0JCQkJdGhyb3cgbm9GaWxlOwotCQkJfQotCQkJdW5wYWNrZWRPYmplY3RDYWNoZSgpLnJlbW92ZShpZCk7Ci0JCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvT2JqZWN0RGlyZWN0b3J5LmphdmEKaW5kZXggYTNjZTMxNS4uYWMzYTU1MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvT2JqZWN0RGlyZWN0b3J5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvT2JqZWN0RGlyZWN0b3J5LmphdmEKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWMgT2JqZWN0RGlyZWN0b3J5KGZpbmFsIENvbmZpZyBjZmcsIGZpbmFsIEZpbGUgZGlyLAogCQlGaWxlIHBhY2tEaXJlY3RvcnkgPSBuZXcgRmlsZShvYmplY3RzLCAicGFjayIpOyAvLyROT04tTkxTLTEkCiAJCUZpbGUgcHJlc2VydmVkRGlyZWN0b3J5ID0gbmV3IEZpbGUocGFja0RpcmVjdG9yeSwgInByZXNlcnZlZCIpOyAvLyROT04tTkxTLTEkCiAJCWFsdGVybmF0ZXNGaWxlID0gbmV3IEZpbGUob2JqZWN0cywgQ29uc3RhbnRzLklORk9fQUxURVJOQVRFUyk7Ci0JCWxvb3NlID0gbmV3IExvb3NlT2JqZWN0cyhvYmplY3RzKTsKKwkJbG9vc2UgPSBuZXcgTG9vc2VPYmplY3RzKGNvbmZpZywgb2JqZWN0cyk7CiAJCXBhY2tlZCA9IG5ldyBQYWNrRGlyZWN0b3J5KGNvbmZpZywgcGFja0RpcmVjdG9yeSk7CiAJCXByZXNlcnZlZCA9IG5ldyBQYWNrRGlyZWN0b3J5KGNvbmZpZywgcHJlc2VydmVkRGlyZWN0b3J5KTsKIAkJdGhpcy5mcyA9IGZzOwpAQCAtMjEzLDYgKzIxMywyMCBAQCBwdWJsaWMgQ29sbGVjdGlvbjxQYWNrPiBnZXRQYWNrcygpIHsKIAkJcmV0dXJuIHBhY2tlZC5nZXRQYWNrcygpOwogCX0KIAorCS8qKiB7QGluaGVyaXREb2N9ICovCisJQE92ZXJyaWRlCisJcHVibGljIGxvbmcgZ2V0QXBwcm94aW1hdGVPYmplY3RDb3VudCgpIHsKKwkJbG9uZyBjb3VudCA9IDA7CisJCWZvciAoUGFjayBwIDogZ2V0UGFja3MoKSkgeworCQkJdHJ5IHsKKwkJCQljb3VudCArPSBwLmdldEluZGV4KCkuZ2V0T2JqZWN0Q291bnQoKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KKwogCS8qKgogCSAqIHtAaW5oZXJpdERvY30KIAkgKiA8cD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4LmphdmEKaW5kZXggODQwMWYwNy4uOGZiMTdmYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4LmphdmEKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljIHN0YXRpYyBQYWNrQml0bWFwSW5kZXggb3BlbihGaWxlIGlkeEZpbGUsIFBhY2tJbmRleCBwYWNrSW5kZXgsCiAJICovCiAJcHVibGljIHN0YXRpYyBQYWNrQml0bWFwSW5kZXggcmVhZChJbnB1dFN0cmVhbSBmZCwgUGFja0luZGV4IHBhY2tJbmRleCwKIAkJCVBhY2tSZXZlcnNlSW5kZXggcmV2ZXJzZUluZGV4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFBhY2tCaXRtYXBJbmRleFYxKGZkLCAoKSAtPiBwYWNrSW5kZXgsICgpIC0+IHJldmVyc2VJbmRleCk7CisJCXJldHVybiBuZXcgUGFja0JpdG1hcEluZGV4VjEoZmQsIHBhY2tJbmRleCwgcmV2ZXJzZUluZGV4KTsKIAl9CiAKIAkvKioKQEAgLTExNCw2ICsxMTQsOCBAQCBwdWJsaWMgc3RhdGljIFBhY2tCaXRtYXBJbmRleCByZWFkKElucHV0U3RyZWFtIGZkLCBQYWNrSW5kZXggcGFja0luZGV4LAogCSAqIEBwYXJhbSByZXZlcnNlSW5kZXhTdXBwbGllcgogCSAqICAgICAgICAgICAgdGhlIHN1cHBsaWVyIGZvciBwYWNrIHJldmVyc2UgaW5kZXggZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBhY2sKIAkgKiAgICAgICAgICAgIGZpbGUuCisJICogQHBhcmFtIGxvYWRQYXJhbGxlbFJldkluZGV4CisJICogICAgICAgICAgICB3aGV0aGVyIHJldmVyc2UgaW5kZXggc2hvdWxkIGJlIGxvYWRlZCBpbiBwYXJhbGxlbAogCSAqIEByZXR1cm4gYSBjb3B5IG9mIHRoZSBpbmRleCBpbi1tZW1vcnkuCiAJICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCiAJICogICAgICAgICAgICAgdGhlIHN0cmVhbSBjYW5ub3QgYmUgcmVhZC4KQEAgLTEyMiwxMCArMTI0LDExIEBAIHB1YmxpYyBzdGF0aWMgUGFja0JpdG1hcEluZGV4IHJlYWQoSW5wdXRTdHJlYW0gZmQsIFBhY2tJbmRleCBwYWNrSW5kZXgsCiAJICovCiAJcHVibGljIHN0YXRpYyBQYWNrQml0bWFwSW5kZXggcmVhZChJbnB1dFN0cmVhbSBmZCwKIAkJCVN1cHBsaWVyV2l0aElPRXhjZXB0aW9uPFBhY2tJbmRleD4gcGFja0luZGV4U3VwcGxpZXIsCi0JCQlTdXBwbGllcldpdGhJT0V4Y2VwdGlvbjxQYWNrUmV2ZXJzZUluZGV4PiByZXZlcnNlSW5kZXhTdXBwbGllcikKKwkJCVN1cHBsaWVyV2l0aElPRXhjZXB0aW9uPFBhY2tSZXZlcnNlSW5kZXg+IHJldmVyc2VJbmRleFN1cHBsaWVyLAorCQkJYm9vbGVhbiBsb2FkUGFyYWxsZWxSZXZJbmRleCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXJldHVybiBuZXcgUGFja0JpdG1hcEluZGV4VjEoZmQsIHBhY2tJbmRleFN1cHBsaWVyLAotCQkJCXJldmVyc2VJbmRleFN1cHBsaWVyKTsKKwkJCQlyZXZlcnNlSW5kZXhTdXBwbGllciwgbG9hZFBhcmFsbGVsUmV2SW5kZXgpOwogCX0KIAogCS8qKiBGb290ZXIgY2hlY2tzdW0gYXBwbGllZCBvbiB0aGUgYm90dG9tIG9mIHRoZSBwYWNrIGZpbGUuICovCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrQml0bWFwSW5kZXhWMS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4VjEuamF2YQppbmRleCA2ODQ2ZTNiLi4yMWFiYTNlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrQml0bWFwSW5kZXhWMS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleFYxLmphdmEKQEAgLTE3LDYgKzE3LDEyIEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRGYWN0b3J5OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwpAQCAtNDAsNiArNDYsMjMgQEAgY2xhc3MgUGFja0JpdG1hcEluZGV4VjEgZXh0ZW5kcyBCYXNlUGFja0JpdG1hcEluZGV4IHsKIAogCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfWE9SX09GRlNFVCA9IDEyNjsKIAorCXByaXZhdGUgc3RhdGljIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciA9IEV4ZWN1dG9ycworCQkJLm5ld0NhY2hlZFRocmVhZFBvb2wobmV3IFRocmVhZEZhY3RvcnkoKSB7CisJCQkJcHJpdmF0ZSBmaW5hbCBUaHJlYWRGYWN0b3J5IGJhc2VGYWN0b3J5ID0gRXhlY3V0b3JzCisJCQkJCQkuZGVmYXVsdFRocmVhZEZhY3RvcnkoKTsKKworCQkJCXByaXZhdGUgZmluYWwgQXRvbWljSW50ZWdlciB0aHJlYWROdW1iZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyBUaHJlYWQgbmV3VGhyZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7CisJCQkJCVRocmVhZCB0aHJlYWQgPSBiYXNlRmFjdG9yeS5uZXdUaHJlYWQocnVubmFibGUpOworCQkJCQl0aHJlYWQuc2V0TmFtZSgiSkdpdC1QYWNrQml0bWFwSW5kZXhWMS0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrIHRocmVhZE51bWJlci5nZXRBbmRJbmNyZW1lbnQoKSk7CisJCQkJCXRocmVhZC5zZXREYWVtb24odHJ1ZSk7CisJCQkJCXJldHVybiB0aHJlYWQ7CisJCQkJfQorCQkJfSk7CisKIAlwcml2YXRlIGZpbmFsIFBhY2tJbmRleCBwYWNrSW5kZXg7CiAJcHJpdmF0ZSBmaW5hbCBQYWNrUmV2ZXJzZUluZGV4IHJldmVyc2VJbmRleDsKIAlwcml2YXRlIGZpbmFsIEVXQUhDb21wcmVzc2VkQml0bWFwIGNvbW1pdHM7CkBAIC00OSwxNSArNzIsMjggQEAgY2xhc3MgUGFja0JpdG1hcEluZGV4VjEgZXh0ZW5kcyBCYXNlUGFja0JpdG1hcEluZGV4IHsKIAogCXByaXZhdGUgZmluYWwgT2JqZWN0SWRPd25lck1hcDxTdG9yZWRCaXRtYXA+IGJpdG1hcHM7CiAKKwlQYWNrQml0bWFwSW5kZXhWMShmaW5hbCBJbnB1dFN0cmVhbSBmZCwgUGFja0luZGV4IHBhY2tJbmRleCwKKwkJCVBhY2tSZXZlcnNlSW5kZXggcmV2ZXJzZUluZGV4KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzKGZkLCAoKSAtPiBwYWNrSW5kZXgsICgpIC0+IHJldmVyc2VJbmRleCwgZmFsc2UpOworCX0KKwogCVBhY2tCaXRtYXBJbmRleFYxKGZpbmFsIElucHV0U3RyZWFtIGZkLAogCQkJU3VwcGxpZXJXaXRoSU9FeGNlcHRpb248UGFja0luZGV4PiBwYWNrSW5kZXhTdXBwbGllciwKLQkJCVN1cHBsaWVyV2l0aElPRXhjZXB0aW9uPFBhY2tSZXZlcnNlSW5kZXg+IHJldmVyc2VJbmRleFN1cHBsaWVyKQorCQkJU3VwcGxpZXJXaXRoSU9FeGNlcHRpb248UGFja1JldmVyc2VJbmRleD4gcmV2ZXJzZUluZGV4U3VwcGxpZXIsCisJCQlib29sZWFuIGxvYWRQYXJhbGxlbFJldkluZGV4KQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJLy8gQW4gZW50cnkgaXMgb2JqZWN0IGlkLCB4b3Igb2Zmc2V0LCBmbGFnIGJ5dGUsIGFuZCBhIGxlbmd0aCBlbmNvZGVkCiAJCS8vIGJpdG1hcC4gVGhlIG9iamVjdCBpZCBpcyBhbiBpbnQzMiBvZiB0aGUgbnRoIHBvc2l0aW9uIHNvcnRlZCBieSBuYW1lLgogCQlzdXBlcihuZXcgT2JqZWN0SWRPd25lck1hcDxTdG9yZWRCaXRtYXA+KCkpOwogCQl0aGlzLmJpdG1hcHMgPSBnZXRCaXRtYXBzKCk7CiAKKwkJLy8gT3B0aW9uYWxseSBzdGFydCBsb2FkaW5nIHJldmVyc2UgaW5kZXggaW4gcGFyYWxsZWwgdG8gbG9hZGluZyBiaXRtYXAKKwkJLy8gZnJvbSBzdG9yYWdlLgorCQlGdXR1cmU8UGFja1JldmVyc2VJbmRleD4gcmV2ZXJzZUluZGV4RnV0dXJlID0gbnVsbDsKKwkJaWYgKGxvYWRQYXJhbGxlbFJldkluZGV4KSB7CisJCQlyZXZlcnNlSW5kZXhGdXR1cmUgPSBleGVjdXRvci5zdWJtaXQocmV2ZXJzZUluZGV4U3VwcGxpZXI6OmdldCk7CisJCX0KKwogCQlmaW5hbCBieXRlW10gc2NyYXRjaCA9IG5ldyBieXRlWzMyXTsKIAkJSU8ucmVhZEZ1bGx5KGZkLCBzY3JhdGNoLCAwLCBzY3JhdGNoLmxlbmd0aCk7CiAKQEAgLTE2NCw3ICsyMDAsMTggQEAgY2xhc3MgUGFja0JpdG1hcEluZGV4VjEgZXh0ZW5kcyBCYXNlUGFja0JpdG1hcEluZGV4IHsKIAkJCWJpdG1hcHMuYWRkKHNiKTsKIAkJfQogCi0JCXRoaXMucmV2ZXJzZUluZGV4ID0gcmV2ZXJzZUluZGV4U3VwcGxpZXIuZ2V0KCk7CisJCVBhY2tSZXZlcnNlSW5kZXggY29tcHV0ZWRSZXZlcnNlSW5kZXg7CisJCWlmIChsb2FkUGFyYWxsZWxSZXZJbmRleCAmJiByZXZlcnNlSW5kZXhGdXR1cmUgIT0gbnVsbCkgeworCQkJdHJ5IHsKKwkJCQljb21wdXRlZFJldmVyc2VJbmRleCA9IHJldmVyc2VJbmRleEZ1dHVyZS5nZXQoKTsKKwkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIHwgRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBGYWxsYmFjayB0byBsb2FkaW5nIHJldmVyc2UgaW5kZXggdGhyb3VnaCBhIHN1cHBsaWVyLgorCQkJCWNvbXB1dGVkUmV2ZXJzZUluZGV4ID0gcmV2ZXJzZUluZGV4U3VwcGxpZXIuZ2V0KCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb21wdXRlZFJldmVyc2VJbmRleCA9IHJldmVyc2VJbmRleFN1cHBsaWVyLmdldCgpOworCQl9CisJCXRoaXMucmV2ZXJzZUluZGV4ID0gY29tcHV0ZWRSZXZlcnNlSW5kZXg7CiAJfQogCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tEaXJlY3RvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tEaXJlY3RvcnkuamF2YQppbmRleCAyMjk3N2QzLi42YTk5Y2IzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrRGlyZWN0b3J5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0RpcmVjdG9yeS5qYXZhCkBAIC02NSwxMiArNjUsMTIgQEAgY2xhc3MgUGFja0RpcmVjdG9yeSB7CiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGFja0xpc3QgTk9fUEFDS1MgPSBuZXcgUGFja0xpc3QoRmlsZVNuYXBzaG90LkRJUlRZLAogCQkJbmV3IFBhY2tbMF0pOwogCi0JcHJpdmF0ZSBmaW5hbCBDb25maWcgY29uZmlnOwotCiAJcHJpdmF0ZSBmaW5hbCBGaWxlIGRpcmVjdG9yeTsKIAogCXByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPFBhY2tMaXN0PiBwYWNrTGlzdDsKIAorCXByaXZhdGUgZmluYWwgYm9vbGVhbiB0cnVzdEZvbGRlclN0YXQ7CisKIAkvKioKIAkgKiBJbml0aWFsaXplIGEgcmVmZXJlbmNlIHRvIGFuIG9uLWRpc2sgJ3BhY2snIGRpcmVjdG9yeS4KIAkgKgpAQCAtODAsOSArODAsMTYgQEAgY2xhc3MgUGFja0RpcmVjdG9yeSB7CiAJICogICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHtAY29kZSBwYWNrfSBkaXJlY3RvcnkuCiAJICovCiAJUGFja0RpcmVjdG9yeShDb25maWcgY29uZmlnLCBGaWxlIGRpcmVjdG9yeSkgewotCQl0aGlzLmNvbmZpZyA9IGNvbmZpZzsKIAkJdGhpcy5kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7CiAJCXBhY2tMaXN0ID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KE5PX1BBQ0tTKTsKKworCQkvLyBXaGV0aGVyIHRvIHRydXN0IHRoZSBwYWNrIGZvbGRlcidzIG1vZGlmaWNhdGlvbiB0aW1lLiBJZiBzZXQgdG8gZmFsc2UKKwkJLy8gd2Ugd2lsbCBhbHdheXMgc2NhbiB0aGUgLmdpdC9vYmplY3RzL3BhY2sgZm9sZGVyIHRvIGNoZWNrIGZvciBuZXcKKwkJLy8gcGFjayBmaWxlcy4gSWYgc2V0IHRvIHRydWUgKGRlZmF1bHQpIHdlIHVzZSB0aGUgZm9sZGVyJ3Mgc2l6ZSwKKwkJLy8gbW9kaWZpY2F0aW9uIHRpbWUsIGFuZCBrZXkgKGlub2RlKSBhbmQgYXNzdW1lIHRoYXQgbm8gbmV3IHBhY2sgZmlsZXMKKwkJLy8gY2FuIGJlIGluIHRoaXMgZm9sZGVyIGlmIHRoZXNlIGF0dHJpYnV0ZXMgaGF2ZSBub3QgY2hhbmdlZC4KKwkJdHJ1c3RGb2xkZXJTdGF0ID0gY29uZmlnLmdldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RGT0xERVJTVEFULCB0cnVlKTsKIAl9CiAKIAkvKioKQEAgLTM1MCwxNiArMzU3LDYgQEAgcHJpdmF0ZSBib29sZWFuIGRvTG9nRXhwb25lbnRpYWxCYWNrb2ZmKGludCBuKSB7CiAJfQogCiAJYm9vbGVhbiBzZWFyY2hQYWNrc0FnYWluKFBhY2tMaXN0IG9sZCkgewotCQkvLyBXaGV0aGVyIHRvIHRydXN0IHRoZSBwYWNrIGZvbGRlcidzIG1vZGlmaWNhdGlvbiB0aW1lLiBJZiBzZXQKLQkJLy8gdG8gZmFsc2Ugd2Ugd2lsbCBhbHdheXMgc2NhbiB0aGUgLmdpdC9vYmplY3RzL3BhY2sgZm9sZGVyIHRvCi0JCS8vIGNoZWNrIGZvciBuZXcgcGFjayBmaWxlcy4gSWYgc2V0IHRvIHRydWUgKGRlZmF1bHQpIHdlIHVzZSB0aGUKLQkJLy8gbGFzdG1vZGlmaWVkIGF0dHJpYnV0ZSBvZiB0aGUgZm9sZGVyIGFuZCBhc3N1bWUgdGhhdCBubyBuZXcKLQkJLy8gcGFjayBmaWxlcyBjYW4gYmUgaW4gdGhpcyBmb2xkZXIgaWYgaGlzIG1vZGlmaWNhdGlvbiB0aW1lIGhhcwotCQkvLyBub3QgY2hhbmdlZC4KLQkJYm9vbGVhbiB0cnVzdEZvbGRlclN0YXQgPSBjb25maWcuZ2V0Qm9vbGVhbigKLQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwKLQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9UUlVTVEZPTERFUlNUQVQsIHRydWUpOwotCiAJCXJldHVybiAoKCF0cnVzdEZvbGRlclN0YXQpIHx8IG9sZC5zbmFwc2hvdC5pc01vZGlmaWVkKGRpcmVjdG9yeSkpCiAJCQkJJiYgb2xkICE9IHNjYW5QYWNrcyhvbGQpOwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5LmphdmEKaW5kZXggZmJmMGFlOS4uMWRiNGY3NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5LmphdmEKQEAgLTMwLDEwICszMCwxMiBAQAogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5pby5maWxlLkRpcmVjdG9yeU5vdEVtcHR5RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5Ob1N1Y2hGaWxlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LkRpZ2VzdElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKQEAgLTYwLDYgKzYyLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29yZUNvbmZpZy5UcnVzdFBhY2tlZFJlZnNTdGF0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKQEAgLTE3Nyw2ICsxODAsMTAgQEAgcHVibGljIGNsYXNzIFJlZkRpcmVjdG9yeSBleHRlbmRzIFJlZkRhdGFiYXNlIHsKIAogCXByaXZhdGUgTGlzdDxJbnRlZ2VyPiByZXRyeVNsZWVwTXMgPSBSRVRSWV9TTEVFUF9NUzsKIAorCXByaXZhdGUgZmluYWwgYm9vbGVhbiB0cnVzdEZvbGRlclN0YXQ7CisKKwlwcml2YXRlIGZpbmFsIFRydXN0UGFja2VkUmVmc1N0YXQgdHJ1c3RQYWNrZWRSZWZzU3RhdDsKKwogCVJlZkRpcmVjdG9yeShGaWxlUmVwb3NpdG9yeSBkYikgewogCQlmaW5hbCBGUyBmcyA9IGRiLmdldEZTKCk7CiAJCXBhcmVudCA9IGRiOwpAQCAtMTg4LDYgKzE5NSwxMyBAQCBwdWJsaWMgY2xhc3MgUmVmRGlyZWN0b3J5IGV4dGVuZHMgUmVmRGF0YWJhc2UgewogCiAJCWxvb3NlUmVmcy5zZXQoUmVmTGlzdC48TG9vc2VSZWY+IGVtcHR5TGlzdCgpKTsKIAkJcGFja2VkUmVmcy5zZXQoTk9fUEFDS0VEX1JFRlMpOworCQl0cnVzdEZvbGRlclN0YXQgPSBkYi5nZXRDb25maWcoKQorCQkJCS5nZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLAorCQkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RGT0xERVJTVEFULCB0cnVlKTsKKwkJdHJ1c3RQYWNrZWRSZWZzU3RhdCA9IGRiLmdldENvbmZpZygpCisJCQkJLmdldEVudW0oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9UUlVTVF9QQUNLRURfUkVGU19TVEFULAorCQkJCQkJVHJ1c3RQYWNrZWRSZWZzU3RhdC5VTlNFVCk7CiAJfQogCiAJUmVwb3NpdG9yeSBnZXRSZXBvc2l0b3J5KCkgewpAQCAtODg5LDEzICs5MDMsMzAgQEAgZWxzZSBpZiAoMCA8PSAoaWR4ID0gcGFja2VkLmZpbmQoZHN0LmdldE5hbWUoKSkpKQogCX0KIAogCVBhY2tlZFJlZkxpc3QgZ2V0UGFja2VkUmVmcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0ID0gZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpLmdldEJvb2xlYW4oCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RGT0xERVJTVEFULCB0cnVlKTsKLQogCQlmaW5hbCBQYWNrZWRSZWZMaXN0IGN1ckxpc3QgPSBwYWNrZWRSZWZzLmdldCgpOwotCQlpZiAodHJ1c3RGb2xkZXJTdGF0ICYmICFjdXJMaXN0LnNuYXBzaG90LmlzTW9kaWZpZWQocGFja2VkUmVmc0ZpbGUpKSB7Ci0JCQlyZXR1cm4gY3VyTGlzdDsKKworCQlzd2l0Y2ggKHRydXN0UGFja2VkUmVmc1N0YXQpIHsKKwkJY2FzZSBORVZFUjoKKwkJCWJyZWFrOworCQljYXNlIEFGVEVSX09QRU46CisJCQl0cnkgKElucHV0U3RyZWFtIHN0cmVhbSA9IEZpbGVzCisJCQkJCS5uZXdJbnB1dFN0cmVhbShwYWNrZWRSZWZzRmlsZS50b1BhdGgoKSkpIHsKKwkJCQkvLyBvcGVuIHRoZSBmaWxlIHRvIHJlZnJlc2ggYXR0cmlidXRlcyAob24gc29tZSBORlMgY2xpZW50cykKKwkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB8IE5vU3VjaEZpbGVFeGNlcHRpb24gZSkgeworCQkJCS8vIElnbm9yZSBhcyBwYWNrZWQtcmVmcyBtYXkgbm90IGV4aXN0CisJCQl9CisJCQkvLyRGQUxMLVRIUk9VR0gkCisJCWNhc2UgQUxXQVlTOgorCQkJaWYgKCFjdXJMaXN0LnNuYXBzaG90LmlzTW9kaWZpZWQocGFja2VkUmVmc0ZpbGUpKSB7CisJCQkJcmV0dXJuIGN1ckxpc3Q7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVTlNFVDoKKwkJCWlmICh0cnVzdEZvbGRlclN0YXQKKwkJCQkJJiYgIWN1ckxpc3Quc25hcHNob3QuaXNNb2RpZmllZChwYWNrZWRSZWZzRmlsZSkpIHsKKwkJCQlyZXR1cm4gY3VyTGlzdDsKKwkJCX0KKwkJCWJyZWFrOwogCQl9CiAKIAkJZmluYWwgUGFja2VkUmVmTGlzdCBuZXdMaXN0ID0gcmVhZFBhY2tlZFJlZnMoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9pby9DYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyMDk1ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9pby9DYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyLCBUZW5jZW50LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkludGVycnVwdGVkSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OworCisvKioKKyAqIEFuIE91dHB1dFN0cmVhbSB0aGF0IGtlZXBzIGEgZGlnZXN0IGFuZCBjaGVja3MgZXZlcnkgTiBieXRlcyBmb3IKKyAqIGNhbmNlbGxhdGlvbi4KKyAqLworcHVibGljIGNsYXNzIENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtIHsKKworCS8qKiBUaGUgT3V0cHV0U3RyZWFtIGNoZWNrcyBldmVyeSB0aGlzIHZhbHVlIGZvciBjYW5jZWxsYXRpb24gKiovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSyA9IDEyOCAqIDEwMjQ7CisKKwlwcml2YXRlIGZpbmFsIFByb2dyZXNzTW9uaXRvciB3cml0ZU1vbml0b3I7CisKKwlwcml2YXRlIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQ7CisKKwlwcml2YXRlIGZpbmFsIE1lc3NhZ2VEaWdlc3QgbWQgPSBDb25zdGFudHMubmV3TWVzc2FnZURpZ2VzdCgpOworCisJcHJpdmF0ZSBsb25nIGNvdW50OworCisJcHJpdmF0ZSBsb25nIGNoZWNrQ2FuY2VsQXQ7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGEgQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0uCisJICoKKwkgKiBAcGFyYW0gd3JpdGVNb25pdG9yCisJICogICAgICAgICAgICBtb25pdG9yIHRvIHVwZGF0ZSBvbiBvdXRwdXQgcHJvZ3Jlc3MgYW5kIGNoZWNrIGNhbmNlbC4KKwkgKiBAcGFyYW0gb3V0CisJICogICAgICAgICAgICB0YXJnZXQgc3RyZWFtIHRvIHJlY2VpdmUgYWxsIGNvbnRlbnRzLgorCSAqLworCXB1YmxpYyBDYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbShQcm9ncmVzc01vbml0b3Igd3JpdGVNb25pdG9yLAorCQkJT3V0cHV0U3RyZWFtIG91dCkgeworCQl0aGlzLndyaXRlTW9uaXRvciA9IHdyaXRlTW9uaXRvcjsKKwkJdGhpcy5vdXQgPSBvdXQ7CisJCXRoaXMuY2hlY2tDYW5jZWxBdCA9IEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBtb25pdG9yIHdoaWNoIGlzIHVzZWQgdG8gdXBkYXRlIG9uIG91dHB1dCBwcm9ncmVzcyBhbmQgY2hlY2sKKwkgKiBjYW5jZWwuCisJICoKKwkgKiBAcmV0dXJuIHRoZSBtb25pdG9yCisJICovCisJcHVibGljIGZpbmFsIFByb2dyZXNzTW9uaXRvciBnZXRXcml0ZU1vbml0b3IoKSB7CisJCXJldHVybiB3cml0ZU1vbml0b3I7CisJfQorCisJLyoqCisJICogT2J0YWluIHRoZSBjdXJyZW50IFNIQS0xIGRpZ2VzdC4KKwkgKgorCSAqIEByZXR1cm4gU0hBLTEgZGlnZXN0CisJICovCisJcHVibGljIGZpbmFsIGJ5dGVbXSBnZXREaWdlc3QoKSB7CisJCXJldHVybiBtZC5kaWdlc3QoKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gc2luY2Ugc3RyZWFtIHN0YXJ0LgorCSAqCisJICogQHJldHVybiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzaW5jZSBzdHJlYW0gc3RhcnQuCisJICovCisJcHVibGljIGZpbmFsIGxvbmcgbGVuZ3RoKCkgeworCQlyZXR1cm4gY291bnQ7CisJfQorCisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShpbnQgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGNoZWNrQ2FuY2VsQXQgPD0gY291bnQpIHsKKwkJCWlmICh3cml0ZU1vbml0b3IuaXNDYW5jZWxsZWQoKSkgeworCQkJCXRocm93IG5ldyBJbnRlcnJ1cHRlZElPRXhjZXB0aW9uKCk7CisJCQl9CisJCQljaGVja0NhbmNlbEF0ID0gY291bnQgKyBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLOworCQl9CisKKwkJb3V0LndyaXRlKGIpOworCQltZC51cGRhdGUoKGJ5dGUpIGIpOworCQljb3VudCsrOworCX0KKworCS8qKiB7QGluaGVyaXREb2N9ICovCisJQE92ZXJyaWRlCisJcHVibGljIGZpbmFsIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXdoaWxlICgwIDwgbGVuKSB7CisJCQlpZiAoY2hlY2tDYW5jZWxBdCA8PSBjb3VudCkgeworCQkJCWlmICh3cml0ZU1vbml0b3IuaXNDYW5jZWxsZWQoKSkgeworCQkJCQl0aHJvdyBuZXcgSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbigpOworCQkJCX0KKwkJCQljaGVja0NhbmNlbEF0ID0gY291bnQgKyBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLOworCQkJfQorCisJCQlpbnQgbiA9IE1hdGgubWluKGxlbiwgQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSyk7CisJCQlvdXQud3JpdGUoYiwgb2ZmLCBuKTsKKwkJCW1kLnVwZGF0ZShiLCBvZmYsIG4pOworCQkJY291bnQgKz0gbjsKKworCQkJb2ZmICs9IG47CisJCQlsZW4gLT0gbjsKKwkJfQorCX0KKworCS8qKiB7QGluaGVyaXREb2N9ICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlvdXQuZmx1c2goKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcGFjay9QYWNrT3V0cHV0U3RyZWFtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcGFjay9QYWNrT3V0cHV0U3RyZWFtLmphdmEKaW5kZXggNzEwNGI5NC4uMmQwZmUyOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3BhY2svUGFja091dHB1dFN0cmVhbS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9wYWNrL1BhY2tPdXRwdXRTdHJlYW0uamF2YQpAQCAtMTcsMTAgKzE3LDggQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvLkNhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuTkI7CiAKQEAgLTI4LDI1ICsyNiwxNCBAQAogICogQ3VzdG9tIG91dHB1dCBzdHJlYW0gdG8gc3VwcG9ydAogICoge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrLlBhY2tXcml0ZXJ9LgogICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFja091dHB1dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0sgPSAxMjggKiAxMDI0OwotCi0JcHJpdmF0ZSBmaW5hbCBQcm9ncmVzc01vbml0b3Igd3JpdGVNb25pdG9yOwotCi0JcHJpdmF0ZSBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0OworcHVibGljIGZpbmFsIGNsYXNzIFBhY2tPdXRwdXRTdHJlYW0gZXh0ZW5kcyBDYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbSB7CiAKIAlwcml2YXRlIGZpbmFsIFBhY2tXcml0ZXIgcGFja1dyaXRlcjsKIAotCXByaXZhdGUgZmluYWwgTWVzc2FnZURpZ2VzdCBtZCA9IENvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCk7Ci0KLQlwcml2YXRlIGxvbmcgY291bnQ7Ci0KIAlwcml2YXRlIGZpbmFsIGJ5dGVbXSBoZWFkZXJCdWZmZXIgPSBuZXcgYnl0ZVszMl07CiAKIAlwcml2YXRlIGZpbmFsIGJ5dGVbXSBjb3B5QnVmZmVyID0gbmV3IGJ5dGVbNjQgPDwgMTBdOwogCi0JcHJpdmF0ZSBsb25nIGNoZWNrQ2FuY2VsQXQ7Ci0KIAlwcml2YXRlIGJvb2xlYW4gb2ZzRGVsdGE7CiAKIAkvKioKQEAgLTY2LDQ4ICs1Myw4IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBQYWNrT3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtIHsKIAkgKi8KIAlwdWJsaWMgUGFja091dHB1dFN0cmVhbShmaW5hbCBQcm9ncmVzc01vbml0b3Igd3JpdGVNb25pdG9yLAogCQkJZmluYWwgT3V0cHV0U3RyZWFtIG91dCwgZmluYWwgUGFja1dyaXRlciBwdykgewotCQl0aGlzLndyaXRlTW9uaXRvciA9IHdyaXRlTW9uaXRvcjsKLQkJdGhpcy5vdXQgPSBvdXQ7CisJCXN1cGVyKHdyaXRlTW9uaXRvciwgb3V0KTsKIAkJdGhpcy5wYWNrV3JpdGVyID0gcHc7Ci0JCXRoaXMuY2hlY2tDYW5jZWxBdCA9IEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7Ci0JfQotCi0JLyoqIHtAaW5oZXJpdERvY30gKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShpbnQgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJY291bnQrKzsKLQkJb3V0LndyaXRlKGIpOwotCQltZC51cGRhdGUoKGJ5dGUpIGIpOwotCX0KLQotCS8qKiB7QGluaGVyaXREb2N9ICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGZpbmFsIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQl3aGlsZSAoMCA8IGxlbikgewotCQkJZmluYWwgaW50IG4gPSBNYXRoLm1pbihsZW4sIEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0spOwotCQkJY291bnQgKz0gbjsKLQotCQkJaWYgKGNoZWNrQ2FuY2VsQXQgPD0gY291bnQpIHsKLQkJCQlpZiAod3JpdGVNb25pdG9yLmlzQ2FuY2VsbGVkKCkpIHsKLQkJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKAotCQkJCQkJCUpHaXRUZXh0LmdldCgpLnBhY2tpbmdDYW5jZWxsZWREdXJpbmdPYmplY3RzV3JpdGluZyk7Ci0JCQkJfQotCQkJCWNoZWNrQ2FuY2VsQXQgPSBjb3VudCArIEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7Ci0JCQl9Ci0KLQkJCW91dC53cml0ZShiLCBvZmYsIG4pOwotCQkJbWQudXBkYXRlKGIsIG9mZiwgbik7Ci0KLQkJCW9mZiArPSBuOwotCQkJbGVuIC09IG47Ci0JCX0KLQl9Ci0KLQkvKioge0Bpbmhlcml0RG9jfSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGZsdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJb3V0LmZsdXNoKCk7CiAJfQogCiAJZmluYWwgdm9pZCB3cml0ZUZpbGVIZWFkZXIoaW50IHZlcnNpb24sIGxvbmcgb2JqZWN0Q291bnQpCkBAIC0xNjAsNyArMTA3LDcgQEAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVIZWFkZXIoT2JqZWN0VG9QYWNrIG90cCwgbG9uZyByYXdMZW5ndGgpCiAJCU9iamVjdFRvUGFjayBiID0gb3RwLmdldERlbHRhQmFzZSgpOwogCQlpZiAoYiAhPSBudWxsICYmIChiLmlzV3JpdHRlbigpICYgb2ZzRGVsdGEpKSB7IC8vIE5vbi1zaG9ydC1jaXJjdWl0IGxvZ2ljIGlzIGludGVudGlvbmFsCiAJCQlpbnQgbiA9IG9iamVjdEhlYWRlcihyYXdMZW5ndGgsIE9CSl9PRlNfREVMVEEsIGhlYWRlckJ1ZmZlcik7Ci0JCQluID0gb2ZzRGVsdGEoY291bnQgLSBiLmdldE9mZnNldCgpLCBoZWFkZXJCdWZmZXIsIG4pOworCQkJbiA9IG9mc0RlbHRhKGxlbmd0aCgpIC0gYi5nZXRPZmZzZXQoKSwgaGVhZGVyQnVmZmVyLCBuKTsKIAkJCXdyaXRlKGhlYWRlckJ1ZmZlciwgMCwgbik7CiAJCX0gZWxzZSBpZiAob3RwLmlzRGVsdGFSZXByZXNlbnRhdGlvbigpKSB7CiAJCQlpbnQgbiA9IG9iamVjdEhlYWRlcihyYXdMZW5ndGgsIE9CSl9SRUZfREVMVEEsIGhlYWRlckJ1ZmZlcik7CkBAIC0yMDksMjAgKzE1Niw2IEBAIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBvZnNEZWx0YVZhckludExlbmd0aChsb25nIHYpIHsKIAl9CiAKIAl2b2lkIGVuZE9iamVjdCgpIHsKLQkJd3JpdGVNb25pdG9yLnVwZGF0ZSgxKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gc2luY2Ugc3RyZWFtIHN0YXJ0LgotCSAqCi0JICogQHJldHVybiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzaW5jZSBzdHJlYW0gc3RhcnQuCi0JICovCi0JcHVibGljIGZpbmFsIGxvbmcgbGVuZ3RoKCkgewotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JLyoqIEByZXR1cm4gb2J0YWluIHRoZSBjdXJyZW50IFNIQS0xIGRpZ2VzdC4gKi8KLQlmaW5hbCBieXRlW10gZ2V0RGlnZXN0KCkgewotCQlyZXR1cm4gbWQuZGlnZXN0KCk7CisJCWdldFdyaXRlTW9uaXRvcigpLnVwZGF0ZSgxKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2gvT3BlblNzaENvbmZpZ0ZpbGUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhCmluZGV4IDY0OGQ0YTEuLjY1OWNjYjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhCkBAIC01MDIsNiArNTAyLDk4IEBAIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBmbGFnKFN0cmluZyB2YWx1ZSkgewogCX0KIAogCS8qKgorCSAqIENvbnZlcnRzIGFuIE9wZW5TU0ggdGltZSB2YWx1ZSBpbnRvIGEgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBmb3JtYXQgaXMKKwkgKiBkZWZpbmVkIGJ5IE9wZW5TU0ggYXMgYSBzZXF1ZW5jZSBvZiAocG9zaXRpdmUpIGludGVnZXJzIHdpdGggc3VmZml4ZXMgZm9yCisJICogc2Vjb25kcywgbWludXRlcywgaG91cnMsIGRheXMsIGFuZCB3ZWVrcy4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdG8gY29udmVydAorCSAqIEByZXR1cm4gdGhlIHBhcnNlZCB2YWx1ZSBhcyBhIG51bWJlciBvZiBzZWNvbmRzLCBvciAtMSBpZiB0aGUgdmFsdWUgaXMKKwkgKiAgICAgICAgIG5vdCBhIHZhbGlkIE9wZW5TU0ggdGltZSB2YWx1ZQorCSAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly9tYW4ub3BlbmJzZC5vcmcvc3NoZF9jb25maWcuNSNUSU1FX0ZPUk1BVFMiPk9wZW5CU0QKKwkgKiAgICAgIG1hbiA1IHNzaGRfY29uZmlnLCBzZWN0aW9uIFRJTUUgRk9STUFUUzwvYT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCB0aW1lU3BlYyhTdHJpbmcgdmFsdWUpIHsKKwkJaWYgKHZhbHVlID09IG51bGwpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl0cnkgeworCQkJaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOworCQkJaW50IGkgPSAwOworCQkJaW50IHNlY29uZHMgPSAwOworCQkJYm9vbGVhbiB2YWx1ZVNlZW4gPSBmYWxzZTsKKwkJCXdoaWxlIChpIDwgbGVuZ3RoKSB7CisJCQkJLy8gU2tpcCB3aGl0ZXNwYWNlCisJCQkJY2hhciBjaCA9IHZhbHVlLmNoYXJBdChpKTsKKwkJCQlpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaCkpIHsKKwkJCQkJaSsrOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGNoID09ICcrJykgeworCQkJCQkvLyBPcGVuU1NIIHVzZXMgc3RydG9sIHdpdGggYmFzZSAxMDogYSBsZWFkaW5nIHBsdXMgc2lnbiBpcworCQkJCQkvLyBhbGxvd2VkLgorCQkJCQlpKys7CisJCQkJfQorCQkJCWludCB2YWwgPSAwOworCQkJCWludCBqID0gaTsKKwkJCQl3aGlsZSAoaiA8IGxlbmd0aCkgeworCQkJCQljaCA9IHZhbHVlLmNoYXJBdChqKyspOworCQkJCQlpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworCQkJCQkJdmFsID0gTWF0aC5hZGRFeGFjdChNYXRoLm11bHRpcGx5RXhhY3QodmFsLCAxMCksCisJCQkJCQkJCWNoIC0gJzAnKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWotLTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChpID09IGopIHsKKwkJCQkJLy8gTm8gZGlnaXRzIHNlZW4KKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlpID0gajsKKwkJCQlpbnQgbXVsdGlwbGllciA9IDE7CisJCQkJaWYgKGkgPCBsZW5ndGgpIHsKKwkJCQkJY2ggPSB2YWx1ZS5jaGFyQXQoaSsrKTsKKwkJCQkJc3dpdGNoIChjaCkgeworCQkJCQljYXNlICdzJzoKKwkJCQkJY2FzZSAnUyc6CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAnbSc6CisJCQkJCWNhc2UgJ00nOgorCQkJCQkJbXVsdGlwbGllciA9IDYwOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgJ2gnOgorCQkJCQljYXNlICdIJzoKKwkJCQkJCW11bHRpcGxpZXIgPSAzNjAwOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgJ2QnOgorCQkJCQljYXNlICdEJzoKKwkJCQkJCW11bHRpcGxpZXIgPSAyNCAqIDM2MDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAndyc6CisJCQkJCWNhc2UgJ1cnOgorCQkJCQkJbXVsdGlwbGllciA9IDcgKiAyNCAqIDM2MDA7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWlmIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoKSkgeworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJLy8gSW52YWxpZCB0aW1lIHNwZWMKKwkJCQkJCXJldHVybiAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCQlzZWNvbmRzID0gTWF0aC5hZGRFeGFjdChzZWNvbmRzLAorCQkJCQkJTWF0aC5tdWx0aXBseUV4YWN0KHZhbCwgbXVsdGlwbGllcikpOworCQkJCXZhbHVlU2VlbiA9IHRydWU7CisJCQl9CisJCQlyZXR1cm4gdmFsdWVTZWVuID8gc2Vjb25kcyA6IC0xOworCQl9IGNhdGNoIChBcml0aG1ldGljRXhjZXB0aW9uIGUpIHsKKwkJCS8vIE92ZXJmbG93CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKioKIAkgKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIHVzZXIgbmFtZSBhcyBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAJICoKIAkgKiBAcmV0dXJuIHRoZSB1c2VyIG5hbWUKQEAgLTU0OSw2ICs2NDEsNyBAQCBwdWJsaWMgc3RhdGljIGNsYXNzIEhvc3RFbnRyeSBpbXBsZW1lbnRzIFNzaENvbmZpZ1N0b3JlLkhvc3RDb25maWcgewogCQkJTElTVF9LRVlTLmFkZChTc2hDb25zdGFudHMuR0xPQkFMX0tOT1dOX0hPU1RTX0ZJTEUpOwogCQkJTElTVF9LRVlTLmFkZChTc2hDb25zdGFudHMuU0VORF9FTlYpOwogCQkJTElTVF9LRVlTLmFkZChTc2hDb25zdGFudHMuVVNFUl9LTk9XTl9IT1NUU19GSUxFKTsKKwkJCUxJU1RfS0VZUy5hZGQoU3NoQ29uc3RhbnRzLkFERF9LRVlTX1RPX0FHRU5UKTsgLy8gY29uZmlybSB0aW1lU3BlYwogCQl9CiAKIAkJLyoqCkBAIC04NzEsNyArOTY0LDggQEAgdm9pZCBzdWJzdGl0dXRlKFN0cmluZyBvcmlnaW5hbEhvc3ROYW1lLCBpbnQgcG9ydCwgU3RyaW5nIHVzZXJOYW1lLAogCQkJaWYgKG9wdGlvbnMgIT0gbnVsbCkgewogCQkJCS8vIEhPU1ROQU1FIGFscmVhZHkgZG9uZSBhYm92ZQogCQkJCVN0cmluZyB2YWx1ZSA9IG9wdGlvbnMuZ2V0KFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCk7Ci0JCQkJaWYgKHZhbHVlICE9IG51bGwpIHsKKwkJCQlpZiAodmFsdWUgIT0gbnVsbCAmJiAhU3NoQ29uc3RhbnRzLk5PTkUuZXF1YWxzKHZhbHVlKQorCQkJCQkJJiYgIVNzaENvbnN0YW50cy5FTlZfU1NIX0FVVEhfU09DS0VULmVxdWFscyh2YWx1ZSkpIHsKIAkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsIFJlcGxhY2VyLkRFRkFVTFRfVE9LRU5TLCB0cnVlKTsKIAkJCQkJdmFsdWUgPSB0b0ZpbGUodmFsdWUsIGhvbWUpLmdldFBhdGgoKTsKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5ULCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9BYmJyZXZDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDljZmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9BYmJyZXZDb25maWcuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5saWI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuVHlwZWRDb25maWdHZXR0ZXIuVU5TRVRfSU5UOworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKKworLyoqCisgKiBHaXQgY29uZmlndXJhdGlvbiBvcHRpb24gPGEKKyAqIGhyZWY9aHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1jb25maWcjRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dC1jb3JlYWJicmV2Ij4KKyAqIGNvcmUuYWJicmV2PC9hPgorICoKKyAqIEBzaW5jZSA2LjEKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEFiYnJldkNvbmZpZyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX05PID0gIm5vIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0FVVE8gPSAiYXV0byI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBtaW5pbXVtIHZhbHVlIG9mIGFiYnJldgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9BQkJSRVYgPSA0OworCisJLyoqCisJICogQ2FwIGNvbmZpZ3VyZWQgY29yZS5hYmJyZXYgdG8gcmFuZ2UgYmV0d2VlbiBtaW5pbXVtIG9mIDQgYW5kIG51bWJlciBvZgorCSAqIGhleC1kaWdpdHMgb2YgYSBmdWxsIG9iamVjdCBpZC4KKwkgKgorCSAqIEBwYXJhbSBsZW4KKwkgKiAgICAgICAgICAgIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIGhleC1kaWdpdHMgdG8gYWJicmV2aWF0ZSBvYmplY3QgaWRzIHRvCisJICogQHJldHVybiBjb3JlLmFiYnJldiBjYXBwZWQgdG8gcmFuZ2UgYmV0d2VlbiBtaW5pbXVtIG9mIDQgYW5kIG51bWJlciBvZgorCSAqICAgICAgICAgaGV4LWRpZ2l0cyBvZiBhIGZ1bGwgb2JqZWN0IGlkCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgY2FwQWJicmV2KGludCBsZW4pIHsKKwkJcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KE1JTl9BQkJSRVYsIGxlbiksCisJCQkJQ29uc3RhbnRzLk9CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKTsKKwl9CisKKwkvKioKKwkgKiBObyBhYmJyZXZpYXRpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIEFiYnJldkNvbmZpZyBOTyA9IG5ldyBBYmJyZXZDb25maWcoCisJCQlDb25zdGFudHMuT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpOworCisJLyoqCisJICogUGFyc2Ugc3RyaW5nIHZhbHVlIG9mIGNvcmUuYWJicmV2IGdpdCBvcHRpb24gZm9yIGEgZ2l2ZW4gcmVwb3NpdG9yeQorCSAqCisJICogQHBhcmFtIHJlcG8KKwkgKiAgICAgICAgICAgIHJlcG9zaXRvcnkKKwkgKiBAcmV0dXJuIHRoZSBwYXJzZWQgQWJicmV2Q29uZmlnCisJICogQHRocm93cyBJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHZhbHVlIG9mIGNvcmUuYWJicmV2IGlzIGludmFsaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFiYnJldkNvbmZpZyBwYXJzZUZyb21Db25maWcoUmVwb3NpdG9yeSByZXBvKQorCQkJdGhyb3dzIEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKwkJQ29uZmlnIGNvbmZpZyA9IHJlcG8uZ2V0Q29uZmlnKCk7CisJCVN0cmluZyB2YWx1ZSA9IGNvbmZpZy5nZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sCisJCQkJbnVsbCwgQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQUJCUkVWKTsKKwkJaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuZXF1YWxzSWdub3JlQ2FzZShWQUxVRV9BVVRPKSkgeworCQkJcmV0dXJuIGF1dG8ocmVwbyk7CisJCX0KKwkJaWYgKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoVkFMVUVfTk8pKSB7CisJCQlyZXR1cm4gTk87CisJCX0KKwkJdHJ5IHsKKwkJCWludCBsZW4gPSBjb25maWcuZ2V0SW50SW5SYW5nZShDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQUJCUkVWLCBNSU5fQUJCUkVWLAorCQkJCQlDb25zdGFudHMuT0JKRUNUX0lEX1NUUklOR19MRU5HVEgsIFVOU0VUX0lOVCk7CisJCQlpZiAobGVuID09IFVOU0VUX0lOVCkgeworCQkJCS8vIFVuc2V0IHdhcyBjaGVja2VkIGFib3ZlLiBJZiB3ZSBnZXQgVU5TRVRfSU5UIGhlcmUsIHRoZW4KKwkJCQkvLyBlaXRoZXIgdGhlIHZhbHVlIHdhcyBVTlNFVF9JTlQsIG9yIGl0IHdhcyBhbiBpbnZhbGlkIHZhbHVlCisJCQkJLy8gKG5vdCBhbiBpbnRlZ2VyLCBvciBvdXQgb2YgcmFuZ2UpLCBhbmQgRUdpdCdzCisJCQkJLy8gUmVwb3J0aW5nVHlwZWRHZXR0ZXIgY2F1Z2h0IHRoZSBleGNlcHRpb24gYW5kIGhhcyBsb2dnZWQgYQorCQkJCS8vIHdhcm5pbmcuIEluIGVpdGhlciBjYXNlIHdlIHNob3VsZCBmYWxsIGJhY2sgdG8gc29tZSBzYW5lCisJCQkJLy8gZGVmYXVsdC4KKwkJCQlsZW4gPSBPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CisJCQl9CisJCQlyZXR1cm4gbmV3IEFiYnJldkNvbmZpZyhsZW4pOworCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJLmZvcm1hdChKR2l0VGV4dC5nZXQoKS5pbnZhbGlkQ29yZUFiYnJldiwgdmFsdWUpLCBlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEFuIGFwcHJvcHJpYXRlIHZhbHVlIGlzIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YKKwkgKiBwYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnksIHdoaWNoIGhvcGVmdWxseSBpcyBlbm91Z2ggZm9yIGFiYnJldmlhdGVkCisJICogb2JqZWN0IG5hbWVzIHRvIHN0YXkgdW5pcXVlIGZvciBzb21lIHRpbWUuCisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqIEByZXR1cm4gYXBwcm9wcmlhdGUgdmFsdWUgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGFwcHJveGltYXRlIG51bWJlciBvZgorCSAqICAgICAgICAgcGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgQWJicmV2Q29uZmlnIGF1dG8oUmVwb3NpdG9yeSByZXBvKSB7CisJCWxvbmcgY291bnQgPSByZXBvLmdldE9iamVjdERhdGFiYXNlKCkuZ2V0QXBwcm94aW1hdGVPYmplY3RDb3VudCgpOworCQlpZiAoY291bnQgPT0gLTEpIHsKKwkJCXJldHVybiBuZXcgQWJicmV2Q29uZmlnKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCk7CisJCX0KKwkJLy8gZmluZCBtc2IsIHJvdW5kIHRvIG5leHQgcG93ZXIgb2YgMgorCQlpbnQgbGVuID0gNjMgLSBMb25nLm51bWJlck9mTGVhZGluZ1plcm9zKGNvdW50KSArIDE7CisJCS8vIFdpdGggdGhlIG9yZGVyIG9mIDJebGVuIG9iamVjdHMsIHdlIGV4cGVjdCBhIGNvbGxpc2lvbiBhdAorCQkvLyAyXihsZW4vMikuIEJ1dCB3ZSBhbHNvIGNhcmUgYWJvdXQgaGV4IGNoYXJzLCBub3QgYml0cywgYW5kCisJCS8vIHRoZXJlIGFyZSA0IGJpdHMgcGVyIGhleC4gU28gYWxsIHRvZ2V0aGVyIHdlIG5lZWQgdG8gZGl2aWRlCisJCS8vIGJ5IDI7IGJ1dCB3ZSBhbHNvIHdhbnQgdG8gcm91bmQgb2RkIG51bWJlcnMgdXAsIGhlbmNlIGFkZGluZworCQkvLyBvbmUgYmVmb3JlIGRpdmlkaW5nLgorCQlsZW4gPSAobGVuICsgMSkgLyAyOworCQkvLyBmb3Igc21hbGwgcmVwb3MgdXNlIGF0IGxlYXN0IGZhbGxiYWNrIGxlbmd0aAorCQlyZXR1cm4gbmV3IEFiYnJldkNvbmZpZyhNYXRoLm1heChsZW4sIE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkpOworCX0KKworCS8qKgorCSAqIEFsbCBvdGhlciBwb3NzaWJsZSBhYmJyZXZpYXRpb24gbGVuZ3Rocy4gVmFsaWQgcmFuZ2UgNCB0byBudW1iZXIgb2YKKwkgKiBoZXgtZGlnaXRzIG9mIGFuIHVuYWJicmV2aWF0ZWQgb2JqZWN0IGlkICg0MCBmb3IgU0hBMSBvYmplY3QgaWRzLCBqZ2l0CisJICogZG9lc24ndCBzdXBwb3J0IFNIQTI1NiB5ZXQpLgorCSAqLworCXByaXZhdGUgaW50IGFiYnJldjsKKworCS8qKgorCSAqIEBwYXJhbSBhYmJyZXYKKwkgKi8KKwlwcml2YXRlIEFiYnJldkNvbmZpZyhpbnQgYWJicmV2KSB7CisJCXRoaXMuYWJicmV2ID0gY2FwQWJicmV2KGFiYnJldik7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBjb25maWd1cmVkIGFiYnJldmlhdGlvbiBsZW5ndGggZm9yIG9iamVjdCBpZHMuCisJICoKKwkgKiBAcmV0dXJuIHRoZSBjb25maWd1cmVkIGFiYnJldmlhdGlvbiBsZW5ndGggZm9yIG9iamVjdCBpZHMKKwkgKi8KKwlwdWJsaWMgaW50IGdldCgpIHsKKwkJcmV0dXJuIGFiYnJldjsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gSW50ZWdlci50b1N0cmluZyhhYmJyZXYpOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9CcmFuY2hDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0JyYW5jaENvbmZpZy5qYXZhCmluZGV4IDZkYTZmMTIuLmFhNjEzZDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0JyYW5jaENvbmZpZy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0JyYW5jaENvbmZpZy5qYXZhCkBAIC0xMzgsNiArMTM4LDE4IEBAIHB1YmxpYyBTdHJpbmcgZ2V0UmVtb3RlKCkgewogCX0KIAogCS8qKgorCSAqIEdldCB0aGUgcmVtb3RlIHRoaXMgYnJhbmNoIGlzIGNvbmZpZ3VyZWQgdG8gcHVzaCB0by4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHJlbW90ZSB0aGlzIGJyYW5jaCBpcyBjb25maWd1cmVkIHRvIHB1c2ggdG8sIG9yIHtAY29kZSBudWxsfQorCSAqICAgICAgICAgaWYgbm90IGRlZmluZWQKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFN0cmluZyBnZXRQdXNoUmVtb3RlKCkgeworCQlyZXR1cm4gY29uZmlnLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0JSQU5DSF9TRUNUSU9OLAorCQkJCWJyYW5jaE5hbWUsIENvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1BVU0hfUkVNT1RFKTsKKwl9CisKKwkvKioKIAkgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHVwc3RyZWFtIGJyYW5jaCBhcyBpdCBpcyBjYWxsZWQgb24gdGhlIHJlbW90ZQogCSAqCiAJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgdXBzdHJlYW0gYnJhbmNoIGFzIGl0IGlzIGNhbGxlZCBvbiB0aGUgcmVtb3RlLCBvcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29tbWl0Q29uZmlnLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWcuamF2YQppbmRleCAyMmUxZjk4Li41NWNjMDI2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWcuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWcuamF2YQpAQCAtMTgsMTEgKzE4LDEzIEBACiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Db25maWdJbnZhbGlkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnLkNvbmZpZ0VudW07CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnLlNlY3Rpb25QYXJzZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5JTzsKQEAgLTM0LDIyICszNiw3NiBAQAogICogQHNpbmNlIDUuMTMKICAqLwogcHVibGljIGNsYXNzIENvbW1pdENvbmZpZyB7CisKIAkvKioKIAkgKiBLZXkgZm9yIHtAbGluayBDb25maWcjZ2V0KFNlY3Rpb25QYXJzZXIpfS4KIAkgKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIENvbmZpZy5TZWN0aW9uUGFyc2VyPENvbW1pdENvbmZpZz4gS0VZID0gQ29tbWl0Q29uZmlnOjpuZXc7CiAKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1VUID0gIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBIb3cgdG8gY2xlYW4gdXAgY29tbWl0IG1lc3NhZ2VzIHdoZW4gY29tbWl0dGluZy4KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgZW51bSBDbGVhbnVwTW9kZSBpbXBsZW1lbnRzIENvbmZpZ0VudW0geworCisJCS8qKgorCQkgKiB7QGxpbmsgI1dISVRFU1BBQ0V9LCBhZGRpdGlvbmFsbHkgcmVtb3ZlIGNvbW1lbnQgbGluZXMuCisJCSAqLworCQlTVFJJUCwKKworCQkvKioKKwkJICogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGxpbmVzOworCQkgKiBjb2xsYXBzZSBtdWx0aXBsZSBlbXB0eSBsaW5lcyB0byBhIHNpbmdsZSBvbmUuCisJCSAqLworCQlXSElURVNQQUNFLAorCisJCS8qKgorCQkgKiBNYWtlIG5vIGNoYW5nZXMuCisJCSAqLworCQlWRVJCQVRJTSwKKworCQkvKioKKwkJICogT21pdCBldmVyeXRoaW5nIGZyb20gdGhlIGZpcnN0ICJzY2lzc29yIiBsaW5lIG9uLCB0aGVuIGFwcGx5CisJCSAqIHtAbGluayAjV0hJVEVTUEFDRX0uCisJCSAqLworCQlTQ0lTU09SUywKKworCQkvKioKKwkJICogVXNlIHtAbGluayAjU1RSSVB9IGZvciB1c2VyLWVkaXRlZCBtZXNzYWdlcywgb3RoZXJ3aXNlCisJCSAqIHtAbGluayAjV0hJVEVTUEFDRX0sIHVubGVzcyBvdmVycmlkZGVuIGJ5IGEgZ2l0IGNvbmZpZyBzZXR0aW5nIG90aGVyCisJCSAqIHRoYW4gREVGQVVMVC4KKwkJICovCisJCURFRkFVTFQ7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9Db25maWdWYWx1ZSgpIHsKKwkJCXJldHVybiBuYW1lKCkudG9Mb3dlckNhc2UoTG9jYWxlLlJPT1QpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIG1hdGNoQ29uZmlnVmFsdWUoU3RyaW5nIGluKSB7CisJCQlyZXR1cm4gdG9Db25maWdWYWx1ZSgpLmVxdWFscyhpbik7CisJCX0KKwl9CisKIAlwcml2YXRlIGZpbmFsIHN0YXRpYyBDaGFyc2V0IERFRkFVTFRfQ09NTUlUX01FU1NBR0VfRU5DT0RJTkcgPSBTdGFuZGFyZENoYXJzZXRzLlVURl84OwogCiAJcHJpdmF0ZSBTdHJpbmcgaTE4bkNvbW1pdEVuY29kaW5nOwogCiAJcHJpdmF0ZSBTdHJpbmcgY29tbWl0VGVtcGxhdGVQYXRoOwogCisJcHJpdmF0ZSBDbGVhbnVwTW9kZSBjbGVhbnVwTW9kZTsKKwogCXByaXZhdGUgQ29tbWl0Q29uZmlnKENvbmZpZyByYykgewogCQljb21taXRUZW1wbGF0ZVBhdGggPSByYy5nZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT01NSVRfU0VDVElPTiwKIAkJCQludWxsLCBDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9DT01NSVRfVEVNUExBVEUpOwogCQlpMThuQ29tbWl0RW5jb2RpbmcgPSByYy5nZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0kxOE4sCiAJCQkJbnVsbCwgQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQ09NTUlUX0VOQ09ESU5HKTsKKwkJY2xlYW51cE1vZGUgPSByYy5nZXRFbnVtKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09NTUlUX1NFQ1RJT04sIG51bGwsCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQ0xFQU5VUCwgQ2xlYW51cE1vZGUuREVGQVVMVCk7CiAJfQogCiAJLyoqCkBAIC03NSw2ICsxMzEsNDggQEAgcHVibGljIFN0cmluZyBnZXRDb21taXRFbmNvZGluZygpIHsKIAl9CiAKIAkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIHtAbGluayBDbGVhbnVwTW9kZX0gYXMgZ2l2ZW4gYnkgZ2l0IGNvbmZpZworCSAqIHtAY29kZSBjb21taXQuY2xlYW51cH0uCisJICoKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQ2xlYW51cE1vZGV9OyB7QGxpbmsgQ2xlYW51cE1vZGUjREVGQVVMVH0gaWYgdGhlIGdpdAorCSAqICAgICAgICAgY29uZmlnIGlzIG5vdCBzZXQKKwkgKiBAc2luY2UgNi4xCisJICovCisJQE5vbk51bGwKKwlwdWJsaWMgQ2xlYW51cE1vZGUgZ2V0Q2xlYW51cE1vZGUoKSB7CisJCXJldHVybiBjbGVhbnVwTW9kZTsKKwl9CisKKwkvKioKKwkgKiBDb21wdXRlcyBhIG5vbi1kZWZhdWx0IHtAbGluayBDbGVhbnVwTW9kZX0gZnJvbSB0aGUgZ2l2ZW4gbW9kZSBhbmQgdGhlCisJICogZ2l0IGNvbmZpZy4KKwkgKgorCSAqIEBwYXJhbSBtb2RlCisJICogICAgICAgICAgICB7QGxpbmsgQ2xlYW51cE1vZGV9IHRvIHJlc29sdmUKKwkgKiBAcGFyYW0gZGVmYXVsdFN0cmlwCisJICogICAgICAgICAgICBpZiB7QGNvZGUgdHJ1ZX0gcmV0dXJuIHtAbGluayBDbGVhbnVwTW9kZSNTVFJJUH0gaWYgdGhlIGdpdAorCSAqICAgICAgICAgICAgY29uZmlnIGlzIGFsc28gImRlZmF1bHQiLCBvdGhlcndpc2UgcmV0dXJuCisJICogICAgICAgICAgICB7QGxpbmsgQ2xlYW51cE1vZGUjV0hJVEVTUEFDRX0KKwkgKiBAcmV0dXJuIHRoZSB7QGNvZGUgbW9kZX0sIGlmIGl0IGlzIG5vdCB7QGxpbmsgQ2xlYW51cE1vZGUjREVGQVVMVH0sCisJICogICAgICAgICBvdGhlcndpc2UgdGhlIHJlc29sdmVkIG1vZGUsIHdoaWNoIGlzIG5ldmVyCisJICogICAgICAgICB7QGxpbmsgQ2xlYW51cE1vZGUjREVGQVVMVH0KKwkgKiBAc2luY2UgNi4xCisJICovCisJQE5vbk51bGwKKwlwdWJsaWMgQ2xlYW51cE1vZGUgcmVzb2x2ZShATm9uTnVsbCBDbGVhbnVwTW9kZSBtb2RlLAorCQkJYm9vbGVhbiBkZWZhdWx0U3RyaXApIHsKKwkJaWYgKENsZWFudXBNb2RlLkRFRkFVTFQgPT0gbW9kZSkgeworCQkJQ2xlYW51cE1vZGUgZGVmYXVsdE1vZGUgPSBnZXRDbGVhbnVwTW9kZSgpOworCQkJaWYgKENsZWFudXBNb2RlLkRFRkFVTFQgPT0gZGVmYXVsdE1vZGUpIHsKKwkJCQlyZXR1cm4gZGVmYXVsdFN0cmlwID8gQ2xlYW51cE1vZGUuU1RSSVAKKwkJCQkJCTogQ2xlYW51cE1vZGUuV0hJVEVTUEFDRTsKKwkJCX0KKwkJCXJldHVybiBkZWZhdWx0TW9kZTsKKwkJfQorCQlyZXR1cm4gbW9kZTsKKwl9CisKKwkvKioKIAkgKiBHZXQgdGhlIGNvbnRlbnQgdG8gdGhlIGNvbW1pdCB0ZW1wbGF0ZSBhcyBkZWZpbmVkIGluCiAJICoge0Bjb2RlIGNvbW1pdC50ZW1wbGF0ZX0uIElmIG5vIHtAY29kZSBpMThuLmNvbW1pdEVuY29kaW5nfSBpcyBzcGVjaWZpZWQsCiAJICogVVRGLTggZmFsbGJhY2sgaXMgdXNlZC4KQEAgLTEzNSw0ICsyMzMsODYgQEAgcHJpdmF0ZSBDaGFyc2V0IGdldEVuY29kaW5nKCkgdGhyb3dzIENvbmZpZ0ludmFsaWRFeGNlcHRpb24gewogCiAJCXJldHVybiBjb21taXRNZXNzYWdlRW5jb2Rpbmc7CiAJfQorCisJLyoqCisJICogUHJvY2Vzc2VzIGEgdGV4dCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHtAbGluayBDbGVhbnVwTW9kZX0uCisJICoKKwkgKiBAcGFyYW0gdGV4dAorCSAqICAgICAgICAgICAgdGV4dCB0byBwcm9jZXNzCisJICogQHBhcmFtIG1vZGUKKwkgKiAgICAgICAgICAgIHtAbGluayBDbGVhbnVwTW9kZX0gdG8gdXNlCisJICogQHBhcmFtIGNvbW1lbnRDaGFyCisJICogICAgICAgICAgICBjb21tZW50IGNoYXJhY3RlciAobm9ybWFsbHkge0Bjb2RlICN9KSB0byB1c2UgaWYge0Bjb2RlIG1vZGV9CisJICogICAgICAgICAgICBpcyB7QGxpbmsgQ2xlYW51cE1vZGUjU1RSSVB9IG9yIHtAbGluayBDbGVhbnVwTW9kZSNTQ0lTU09SU30KKwkgKiBAcmV0dXJuIHRoZSBwcm9jZXNzZWQgdGV4dAorCSAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYge0Bjb2RlIG1vZGV9IGlzIHtAbGluayBDbGVhbnVwTW9kZSNERUZBVUxUfSAodXNlCisJICogICAgICAgICAgICAge0BsaW5rICNyZXNvbHZlKENsZWFudXBNb2RlLCBib29sZWFuKX0gZmlyc3QpCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNsZWFuVGV4dChATm9uTnVsbCBTdHJpbmcgdGV4dCwKKwkJCUBOb25OdWxsIENsZWFudXBNb2RlIG1vZGUsIGNoYXIgY29tbWVudENoYXIpIHsKKwkJU3RyaW5nIHRvUHJvY2VzcyA9IHRleHQ7CisJCWJvb2xlYW4gc3RyaXAgPSBmYWxzZTsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgVkVSQkFUSU06CisJCQlyZXR1cm4gdGV4dDsKKwkJY2FzZSBTQ0lTU09SUzoKKwkJCVN0cmluZyBjdXQgPSBjb21tZW50Q2hhciArIENVVDsKKwkJCWlmICh0ZXh0LnN0YXJ0c1dpdGgoY3V0KSkgeworCQkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQkJaW50IGN1dFBvcyA9IHRleHQuaW5kZXhPZignXG4nICsgY3V0KTsKKwkJCWlmIChjdXRQb3MgPj0gMCkgeworCQkJCXRvUHJvY2VzcyA9IHRleHQuc3Vic3RyaW5nKDAsIGN1dFBvcyArIDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RSSVA6CisJCQlzdHJpcCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBXSElURVNQQUNFOgorCQkJYnJlYWs7CisJCWNhc2UgREVGQVVMVDoKKwkJZGVmYXVsdDoKKwkJCS8vIEludGVybmFsIGVycm9yOyBubyB0cmFuc2xhdGlvbgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjbGVhbi11cCBtb2RlICIgKyBtb2RlKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCS8vIFdISVRFU1BBQ0UKKwkJU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlib29sZWFuIGxhc3RXYXNFbXB0eSA9IHRydWU7CisJCWZvciAoU3RyaW5nIGxpbmUgOiB0b1Byb2Nlc3Muc3BsaXQoIlxuIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJbGluZSA9IGxpbmUuc3RyaXBUcmFpbGluZygpOworCQkJaWYgKGxpbmUuaXNFbXB0eSgpKSB7CisJCQkJaWYgKCFsYXN0V2FzRW1wdHkpIHsKKwkJCQkJcmVzdWx0LmFwcGVuZCgnXG4nKTsKKwkJCQkJbGFzdFdhc0VtcHR5ID0gdHJ1ZTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFzdHJpcCB8fCAhaXNDb21tZW50KGxpbmUsIGNvbW1lbnRDaGFyKSkgeworCQkJCWxhc3RXYXNFbXB0eSA9IGZhbHNlOworCQkJCXJlc3VsdC5hcHBlbmQobGluZSkuYXBwZW5kKCdcbicpOworCQkJfQorCQl9CisJCWludCBidWZmZXJTaXplID0gcmVzdWx0Lmxlbmd0aCgpOworCQlpZiAobGFzdFdhc0VtcHR5ICYmIGJ1ZmZlclNpemUgPiAwKSB7CisJCQlidWZmZXJTaXplLS07CisJCQlyZXN1bHQuc2V0TGVuZ3RoKGJ1ZmZlclNpemUpOworCQl9CisJCWlmIChidWZmZXJTaXplID4gMCAmJiAhdG9Qcm9jZXNzLmVuZHNXaXRoKCJcbiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChyZXN1bHQuY2hhckF0KGJ1ZmZlclNpemUgLSAxKSA9PSAnXG4nKSB7CisJCQkJcmVzdWx0LnNldExlbmd0aChidWZmZXJTaXplIC0gMSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDb21tZW50KFN0cmluZyB0ZXh0LCBjaGFyIGNvbW1lbnRDaGFyKSB7CisJCWludCBsZW4gPSB0ZXh0Lmxlbmd0aCgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQljaGFyIGNoID0gdGV4dC5jaGFyQXQoaSk7CisJCQlpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2gpKSB7CisJCQkJcmV0dXJuIGNoID09IGNvbW1lbnRDaGFyOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWcuamF2YQppbmRleCAxY2UzZTMxLi5kMWQ2NmQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWcuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWcuamF2YQpAQCAtMjc4LDYgKzI3OCw1NCBAQCBwdWJsaWMgaW50IGdldEludChmaW5hbCBTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sCiAJfQogCiAJLyoqCisJICogT2J0YWluIGFuIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJhdGlvbiB3aGljaCBtdXN0IGJlIGluc2lkZSBnaXZlbgorCSAqIHJhbmdlLgorCSAqCisJICogQHBhcmFtIHNlY3Rpb24KKwkgKiAgICAgICAgICAgIHNlY3Rpb24gdGhlIGtleSBpcyBncm91cGVkIHdpdGhpbi4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUga2V5IHRvIGdldC4KKwkgKiBAcGFyYW0gbWluVmFsdWUKKwkgKiAgICAgICAgICAgIG1pbmltdW0gdmFsdWUKKwkgKiBAcGFyYW0gbWF4VmFsdWUKKwkgKiAgICAgICAgICAgIG1heGltdW0gdmFsdWUKKwkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlCisJICogICAgICAgICAgICBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiBubyB2YWx1ZSB3YXMgcHJlc2VudC4KKwkgKiBAcmV0dXJuIGFuIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJhdGlvbiwgb3IgZGVmYXVsdFZhbHVlLgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgaW50IGdldEludEluUmFuZ2UoU3RyaW5nIHNlY3Rpb24sIFN0cmluZyBuYW1lLCBpbnQgbWluVmFsdWUsCisJCQlpbnQgbWF4VmFsdWUsIGludCBkZWZhdWx0VmFsdWUpIHsKKwkJcmV0dXJuIHR5cGVkR2V0dGVyLmdldEludEluUmFuZ2UodGhpcywgc2VjdGlvbiwgbnVsbCwgbmFtZSwgbWluVmFsdWUsCisJCQkJbWF4VmFsdWUsIGRlZmF1bHRWYWx1ZSk7CisJfQorCisJLyoqCisJICogT2J0YWluIGFuIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJhdGlvbiB3aGljaCBtdXN0IGJlIGluc2lkZSBnaXZlbgorCSAqIHJhbmdlLgorCSAqCisJICogQHBhcmFtIHNlY3Rpb24KKwkgKiAgICAgICAgICAgIHNlY3Rpb24gdGhlIGtleSBpcyBncm91cGVkIHdpdGhpbi4KKwkgKiBAcGFyYW0gc3Vic2VjdGlvbgorCSAqICAgICAgICAgICAgc3Vic2VjdGlvbiBuYW1lLCBzdWNoIGEgcmVtb3RlIG9yIGJyYW5jaCBuYW1lLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBuYW1lIG9mIHRoZSBrZXkgdG8gZ2V0LgorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqICAgICAgICAgICAgbWluaW11bSB2YWx1ZQorCSAqIEBwYXJhbSBtYXhWYWx1ZQorCSAqICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIG5vIHZhbHVlIHdhcyBwcmVzZW50LgorCSAqIEByZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCBvciBkZWZhdWx0VmFsdWUuCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBpbnQgZ2V0SW50SW5SYW5nZShTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sIFN0cmluZyBuYW1lLAorCQkJaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsIGludCBkZWZhdWx0VmFsdWUpIHsKKwkJcmV0dXJuIHR5cGVkR2V0dGVyLmdldEludEluUmFuZ2UodGhpcywgc2VjdGlvbiwgc3Vic2VjdGlvbiwgbmFtZSwKKwkJCQltaW5WYWx1ZSwgbWF4VmFsdWUsIGRlZmF1bHRWYWx1ZSk7CisJfQorCisJLyoqCiAJICogT2J0YWluIGFuIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJhdGlvbi4KIAkgKgogCSAqIEBwYXJhbSBzZWN0aW9uCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdDb25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCmluZGV4IDYwNWI0NGIuLjJkODM1NDkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgTWF0aGlhcyBLaW56bGVyIDxtYXRoaWFzLmtpbnpsZXJAc2FwLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgQ2hyaXMgQW5pc3pjenlrIDxjYW5pc3pjenlrQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAyMCwgUm9iaW4gUm9zZW5iZXJnIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCBSb2JpbiBSb3NlbmJlcmcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxLCBBbmRyZSBCb3NzZXJ0IDxhbmRyZS5ib3NzZXJ0QHNpZW1lbnMuY29tPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yOSw2ICszMCw0OCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ29uZmlnQ29uc3RhbnRzIHsKIAkvKiogVGhlICJkaWZmIiBzZWN0aW9uICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0RJRkZfU0VDVElPTiA9ICJkaWZmIjsKIAorCS8qKgorCSAqIFRoZSAidG9vbCIga2V5IHdpdGhpbiAiZGlmZiIgc2VjdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfVE9PTCA9ICJ0b29sIjsKKworCS8qKgorCSAqIFRoZSAiZ3VpdG9vbCIga2V5IHdpdGhpbiAiZGlmZiIgc2VjdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfR1VJVE9PTCA9ICJndWl0b29sIjsKKworCS8qKgorCSAqIFRoZSAiZGlmZnRvb2wiIHNlY3Rpb24KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfRElGRlRPT0xfU0VDVElPTiA9ICJkaWZmdG9vbCI7CisKKwkvKioKKwkgKiBUaGUgInByb21wdCIga2V5IHdpdGhpbiAiZGlmZnRvb2wiIHNlY3Rpb24KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX1BST01QVCA9ICJwcm9tcHQiOworCisJLyoqCisJICogVGhlICJ0cnVzdEV4aXRDb2RlIiBrZXkgd2l0aGluICJkaWZmdG9vbCIgc2VjdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfVFJVU1RfRVhJVF9DT0RFID0gInRydXN0RXhpdENvZGUiOworCisJLyoqCisJICogVGhlICJjbWQiIGtleSB3aXRoaW4gImRpZmZ0b29sLiouIiBzZWN0aW9uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9DTUQgPSAiY21kIjsKKwogCS8qKiBUaGUgImRmcyIgc2VjdGlvbiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19ERlNfU0VDVElPTiA9ICJkZnMiOwogCkBAIC0xNDUsNiArMTg4LDEzIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25maWdDb25zdGFudHMgewogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19UQUdfU0VDVElPTiA9ICJ0YWciOwogCiAJLyoqCisJICogVGhlICJjbGVhbnVwIiBrZXkKKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX0NMRUFOVVAgPSAiY2xlYW51cCI7CisKKwkvKioKIAkgKiBUaGUgImdwZ1NpZ24iIGtleQogCSAqCiAJICogQHNpbmNlIDUuMgpAQCAtMjg1LDYgKzMzNSwyMCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ29uZmlnQ29uc3RhbnRzIHsKIAkvKiogVGhlICJyZW1vdGUiIGtleSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfUkVNT1RFID0gInJlbW90ZSI7CiAKKwkvKioKKwkgKiBUaGUgInB1c2hSZW1vdGUiIGtleS4KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX1BVU0hfUkVNT1RFID0gInB1c2hSZW1vdGUiOworCisJLyoqCisJICogVGhlICJwdXNoRGVmYXVsdCIga2V5LgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfUFVTSF9ERUZBVUxUID0gInB1c2hEZWZhdWx0IjsKKwogCS8qKiBUaGUgIm1lcmdlIiBrZXkgKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX01FUkdFID0gIm1lcmdlIjsKIApAQCAtNzkxLDYgKzg1NSwzNCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ29uZmlnQ29uc3RhbnRzIHsKIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX1NFQVJDSF9GT1JfUkVVU0VfVElNRU9VVCA9ICJzZWFyY2hmb3JyZXVzZXRpbWVvdXQiOwogCiAJLyoqCisJICogVGhlICJwdXNoIiBzZWN0aW9uLgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19QVVNIX1NFQ1RJT04gPSAicHVzaCI7CisKKwkvKioKKwkgKiBUaGUgImRlZmF1bHQiIGtleS4KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX0RFRkFVTFQgPSAiZGVmYXVsdCI7CisKKwkvKioKKwkgKiBUaGUgImFiYnJldiIga2V5CisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9BQkJSRVYgPSAiYWJicmV2IjsKKworCS8qKgorCSAqIFRoZSAidHJ1c3RQYWNrZWRSZWZzU3RhdCIga2V5CisJICoKKwkgKiBAc2luY2UgNi4xLjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX1RSVVNUX1BBQ0tFRF9SRUZTX1NUQVQgPSAidHJ1c3RQYWNrZWRSZWZzU3RhdCI7CisKKwkvKioKIAkgKiBUaGUgInBhY2sucHJlc2VydmVPbGRQYWNrcyIga2V5CiAJICoKIAkgKiBAc2luY2UgNS4xMy4yCkBAIC04MDMsNSArODk1LDQgQEAgcHVibGljIGZpbmFsIGNsYXNzIENvbmZpZ0NvbnN0YW50cyB7CiAJICogQHNpbmNlIDUuMTMuMgogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfUFJVTkVfUFJFU0VSVkVEID0gInBydW5lcHJlc2VydmVkIjsKLQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uc3RhbnRzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25zdGFudHMuamF2YQppbmRleCA5MjM2N2ViLi5jZjJlNjlkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25zdGFudHMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25zdGFudHMuamF2YQpAQCAtNDgsNiArNDgsMTUgQEAgcHVibGljIGZpbmFsIGNsYXNzIENvbnN0YW50cyB7CiAJICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0JKRUNUX0lEX1NUUklOR19MRU5HVEggPSBPQkpFQ1RfSURfTEVOR1RIICogMjsKIAorCS8qKgorCSAqIFRoZSBoaXN0b3JpYyBsZW5ndGggb2YgYW4gYWJicmV2aWF0ZWQgR2l0IG9iamVjdCBoYXNoIHN0cmluZy4gR2l0IDIuMTEKKwkgKiBjaGFuZ2VkIHRoaXMgc3RhdGljIG51bWJlciB0byBhIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgb25lIHRoYXQgc2NhbGVzCisJICogYXMgdGhlIHJlcG9zaXRvcnkgZ3Jvd3MuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIID0gNzsKKwogCS8qKiBTcGVjaWFsIG5hbWUgZm9yIHRoZSAiSEVBRCIgc3ltYm9saWMtcmVmLiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQUQgPSAiSEVBRCI7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvcmVDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvcmVDb25maWcuamF2YQppbmRleCBmMjNjNmUwLi5mYzgyYTVmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db3JlQ29uZmlnLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29yZUNvbmZpZy5qYXZhCkBAIC0xMTYsNiArMTE2LDI3IEBAIHB1YmxpYyBlbnVtIExvZ1JlZlVwZGF0ZXMgewogCQlBTFdBWVMKIAl9CiAKKwkvKioKKwkgKiBQZXJtaXNzaWJsZSB2YWx1ZXMgZm9yIHtAY29kZSBjb3JlLnRydXN0UGFja2VkUmVmc1N0YXR9LgorCSAqCisJICogQHNpbmNlIDYuMS4xCisJICovCisJcHVibGljIGVudW0gVHJ1c3RQYWNrZWRSZWZzU3RhdCB7CisJCS8qKiBEbyBub3QgdHJ1c3QgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBwYWNrZWQtcmVmcyBmaWxlLiAqLworCQlORVZFUiwKKworCQkvKiogVHJ1c3QgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBwYWNrZWQtcmVmcyBmaWxlLiAqLworCQlBTFdBWVMsCisKKwkJLyoqIE9wZW4gYW5kIGNsb3NlIHRoZSBwYWNrZWQtcmVmcyBmaWxlIHRvIHJlZnJlc2ggaXRzIGZpbGUgYXR0cmlidXRlcworCQkgKiBhbmQgdGhlbiB0cnVzdCBpdC4gKi8KKwkJQUZURVJfT1BFTiwKKworCQkvKioge0Bjb2RlIGNvcmUudHJ1c3RQYWNrZWRSZWZzU3RhdH0gZGVmYXVsdHMgdG8gdGhpcyB3aGVuIGl0IGlzCisJCSAqIG5vdCBzZXQgKi8KKwkJVU5TRVQKKwl9CisKIAlwcml2YXRlIGZpbmFsIGludCBjb21wcmVzc2lvbjsKIAogCXByaXZhdGUgZmluYWwgaW50IHBhY2tJbmRleFZlcnNpb247CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EZWZhdWx0VHlwZWRDb25maWdHZXR0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0RlZmF1bHRUeXBlZENvbmZpZ0dldHRlci5qYXZhCmluZGV4IDlmOTZiY2UuLjg2NDA5NDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0RlZmF1bHRUeXBlZENvbmZpZ0dldHRlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0RlZmF1bHRUeXBlZENvbmZpZ0dldHRlci5qYXZhCkBAIC0xMjAsNiArMTIwLDI2IEBAIHB1YmxpYyBpbnQgZ2V0SW50KENvbmZpZyBjb25maWcsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwKIAogCS8qKiB7QGluaGVyaXREb2N9ICovCiAJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXRJbnRJblJhbmdlKENvbmZpZyBjb25maWcsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwKKwkJCVN0cmluZyBuYW1lLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwgaW50IGRlZmF1bHRWYWx1ZSkgeworCQlpbnQgdmFsID0gZ2V0SW50KGNvbmZpZywgc2VjdGlvbiwgc3Vic2VjdGlvbiwgbmFtZSwgZGVmYXVsdFZhbHVlKTsKKwkJaWYgKCh2YWwgPj0gbWluVmFsdWUgJiYgdmFsIDw9IG1heFZhbHVlKSB8fCB2YWwgPT0gVU5TRVRfSU5UKSB7CisJCQlyZXR1cm4gdmFsOworCQl9CisJCWlmIChzdWJzZWN0aW9uID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUpHaXRUZXh0LmdldCgpLmludGVnZXJWYWx1ZU5vdEluUmFuZ2UsIHNlY3Rpb24sIG5hbWUsCisJCQkJCUludGVnZXIudmFsdWVPZih2YWwpLCBJbnRlZ2VyLnZhbHVlT2YobWluVmFsdWUpLAorCQkJCQlJbnRlZ2VyLnZhbHVlT2YobWF4VmFsdWUpKSk7CisJCX0KKwkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQlKR2l0VGV4dC5nZXQoKS5pbnRlZ2VyVmFsdWVOb3RJblJhbmdlU3ViU2VjdGlvbiwgc2VjdGlvbiwKKwkJCQlzdWJzZWN0aW9uLCBuYW1lLCBJbnRlZ2VyLnZhbHVlT2YodmFsKSwKKwkJCQlJbnRlZ2VyLnZhbHVlT2YobWluVmFsdWUpLCBJbnRlZ2VyLnZhbHVlT2YobWF4VmFsdWUpKSk7CisJfQorCisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAT3ZlcnJpZGUKIAlwdWJsaWMgbG9uZyBnZXRMb25nKENvbmZpZyBjb25maWcsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwKIAkJCVN0cmluZyBuYW1lLCBsb25nIGRlZmF1bHRWYWx1ZSkgewogCQlmaW5hbCBTdHJpbmcgc3RyID0gY29uZmlnLmdldFN0cmluZyhzZWN0aW9uLCBzdWJzZWN0aW9uLCBuYW1lKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0luZGV4RGlmZi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvSW5kZXhEaWZmLmphdmEKaW5kZXggMjhlYTkyNy4uZGY5ZmQ0NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvSW5kZXhEaWZmLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvSW5kZXhEaWZmLmphdmEKQEAgLTU2OCw2ICs1NjgsOSBAQCBwdWJsaWMgYm9vbGVhbiBkaWZmKFByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBpbnQgZXN0V29ya1RyZWVTaXplLAogCQlpZiAoaWdub3JlU3VibW9kdWxlTW9kZSAhPSBJZ25vcmVTdWJtb2R1bGVNb2RlLkFMTCkgewogCQkJdHJ5IChTdWJtb2R1bGVXYWxrIHNtdyA9IG5ldyBTdWJtb2R1bGVXYWxrKHJlcG9zaXRvcnkpKSB7CiAJCQkJc213LnNldFRyZWUobmV3IERpckNhY2hlSXRlcmF0b3IoZGlyQ2FjaGUpKTsKKwkJCQlpZiAoZmlsdGVyICE9IG51bGwpIHsKKwkJCQkJc213LnNldEZpbHRlcihmaWx0ZXIpOworCQkJCX0KIAkJCQlzbXcuc2V0QnVpbGRlckZhY3RvcnkoZmFjdG9yeSk7CiAJCQkJd2hpbGUgKHNtdy5uZXh0KCkpIHsKIAkJCQkJSWdub3JlU3VibW9kdWxlTW9kZSBsb2NhbElnbm9yZVN1Ym1vZHVsZU1vZGUgPSBpZ25vcmVTdWJtb2R1bGVNb2RlOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0RGF0YWJhc2UuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdERhdGFiYXNlLmphdmEKaW5kZXggMDQyNjJjMC4uNzAwMDljYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0RGF0YWJhc2UuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3REYXRhYmFzZS5qYXZhCkBAIC0xNTUsNCArMTU1LDE0IEBAIHB1YmxpYyBPYmplY3RMb2FkZXIgb3BlbihBbnlPYmplY3RJZCBvYmplY3RJZCwgaW50IHR5cGVIaW50KQogCXB1YmxpYyBPYmplY3REYXRhYmFzZSBuZXdDYWNoZWREYXRhYmFzZSgpIHsKIAkJcmV0dXJuIHRoaXM7CiAJfQorCisJLyoqCisJICogR2V0IGEgcXVpY2ssIHJvdWdoIGNvdW50IG9mIG9iamVjdHMgaW4gdGhpcyByZXBvc2l0b3J5LiBJZ25vcmVzIGxvb3NlCisJICogb2JqZWN0cy4gUmV0dXJucyB7QGNvZGUgLTF9IGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisJICoKKwkgKiBAcmV0dXJuIHF1aWNrLCByb3VnaCBjb3VudCBvZiBvYmplY3RzIGluIHRoaXMgcmVwb3NpdG9yeSwge0Bjb2RlIC0xfSBpZgorCSAqICAgICAgICAgYW4gZXhjZXB0aW9uIG9jY3VycworCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgbG9uZyBnZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCk7CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3RSZWFkZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdFJlYWRlci5qYXZhCmluZGV4IGEyYzczODEuLjI2YzNmZjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdFJlYWRlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdFJlYWRlci5qYXZhCkBAIC0xMCw2ICsxMCw4IEBACiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5saWI7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKQEAgLTc2LDcgKzc4LDcgQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIE9iamVjdFJlYWRlciBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgewogCSAqLwogCXB1YmxpYyBBYmJyZXZpYXRlZE9iamVjdElkIGFiYnJldmlhdGUoQW55T2JqZWN0SWQgb2JqZWN0SWQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gYWJicmV2aWF0ZShvYmplY3RJZCwgNyk7CisJCXJldHVybiBhYmJyZXZpYXRlKG9iamVjdElkLCBPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUGVyc29uSWRlbnQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1BlcnNvbklkZW50LmphdmEKaW5kZXggNDI4YTZiOS4uOTM3MTAyOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUGVyc29uSWRlbnQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9QZXJzb25JZGVudC5qYXZhCkBAIC0xNCw2ICsxNCw4IEBACiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK2ltcG9ydCBqYXZhLnRpbWUuWm9uZUlkOwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwpAQCAtMjA2LDYgKzIwOCwyMCBAQCBwdWJsaWMgUGVyc29uSWRlbnQoUGVyc29uSWRlbnQgcGksIERhdGUgYVdoZW4pIHsKIAl9CiAKIAkvKioKKwkgKiBDb3B5IGEge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQubGliLlBlcnNvbklkZW50fSwgYnV0IGFsdGVyIHRoZSBjbG9uZSdzCisJICogdGltZSBzdGFtcAorCSAqCisJICogQHBhcmFtIHBpCisJICogICAgICAgICAgICBvcmlnaW5hbCB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC5saWIuUGVyc29uSWRlbnR9CisJICogQHBhcmFtIGFXaGVuCisJICogICAgICAgICAgICBsb2NhbCB0aW1lIGFzIEluc3RhbnQKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFBlcnNvbklkZW50KFBlcnNvbklkZW50IHBpLCBJbnN0YW50IGFXaGVuKSB7CisJCXRoaXMocGkuZ2V0TmFtZSgpLCBwaS5nZXRFbWFpbEFkZHJlc3MoKSwgYVdoZW4udG9FcG9jaE1pbGxpKCksIHBpLnR6T2Zmc2V0KTsKKwl9CisKKwkvKioKIAkgKiBDb25zdHJ1Y3QgYSBQZXJzb25JZGVudCBmcm9tIHNpbXBsZSBkYXRhCiAJICoKIAkgKiBAcGFyYW0gYU5hbWUgYSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gb2JqZWN0LgpAQCAtMjIyLDYgKzIzOCwyNyBAQCBwdWJsaWMgUGVyc29uSWRlbnQoZmluYWwgU3RyaW5nIGFOYW1lLCBmaW5hbCBTdHJpbmcgYUVtYWlsQWRkcmVzcywKIAl9CiAKIAkvKioKKwkgKiBDb25zdHJ1Y3QgYSBQZXJzb25JZGVudCBmcm9tIHNpbXBsZSBkYXRhCisJICoKKwkgKiBAcGFyYW0gYU5hbWUKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IG9iamVjdC4KKwkgKiBAcGFyYW0gYUVtYWlsQWRkcmVzcworCSAqICAgICAgICAgICAgYSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gb2JqZWN0LgorCSAqIEBwYXJhbSBhV2hlbgorCSAqICAgICAgICAgICAgbG9jYWwgdGltZSBzdGFtcAorCSAqIEBwYXJhbSB6b25lSWQKKwkgKiAgICAgICAgICAgIHRpbWUgem9uZSBpZAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgUGVyc29uSWRlbnQoZmluYWwgU3RyaW5nIGFOYW1lLCBTdHJpbmcgYUVtYWlsQWRkcmVzcywgSW5zdGFudCBhV2hlbiwKKwkJCVpvbmVJZCB6b25lSWQpIHsKKwkJdGhpcyhhTmFtZSwgYUVtYWlsQWRkcmVzcywgYVdoZW4udG9FcG9jaE1pbGxpKCksCisJCQkJVGltZVpvbmUuZ2V0VGltZVpvbmUoem9uZUlkKQorCQkJCQkJLmdldE9mZnNldChhV2hlbgorCQkJCS50b0Vwb2NoTWlsbGkoKSkgLyAoNjAgKiAxMDAwKSk7CisJfQorCisJLyoqCiAJICogQ29weSBhIFBlcnNvbklkZW50LCBidXQgYWx0ZXIgdGhlIGNsb25lJ3MgdGltZSBzdGFtcAogCSAqCiAJICogQHBhcmFtIHBpCkBAIC0zMDQsNiArMzQxLDE2IEBAIHB1YmxpYyBEYXRlIGdldFdoZW4oKSB7CiAJfQogCiAJLyoqCisJICogR2V0IHdoZW4gYXR0cmlidXRlIGFzIGluc3RhbnQKKwkgKgorCSAqIEByZXR1cm4gdGltZXN0YW1wCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBJbnN0YW50IGdldFdoZW5Bc0luc3RhbnQoKSB7CisJCXJldHVybiBJbnN0YW50Lm9mRXBvY2hNaWxsaSh3aGVuKTsKKwl9CisKKwkvKioKIAkgKiBHZXQgdGhpcyBwZXJzb24ncyBkZWNsYXJlZCB0aW1lIHpvbmUKIAkgKgogCSAqIEByZXR1cm4gdGhpcyBwZXJzb24ncyBkZWNsYXJlZCB0aW1lIHpvbmU7IG51bGwgaWYgdGltZSB6b25lIGlzIHVua25vd24uCkBAIC0zMTMsNiArMzYwLDE2IEBAIHB1YmxpYyBUaW1lWm9uZSBnZXRUaW1lWm9uZSgpIHsKIAl9CiAKIAkvKioKKwkgKiBHZXQgdGhlIHRpbWUgem9uZSBpZAorCSAqCisJICogQHJldHVybiB0aGUgdGltZSB6b25lIGlkCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBab25lSWQgZ2V0Wm9uZUlkKCkgeworCQlyZXR1cm4gZ2V0VGltZVpvbmUoKS50b1pvbmVJZCgpOworCX0KKworCS8qKgogCSAqIEdldCB0aGlzIHBlcnNvbidzIGRlY2xhcmVkIHRpbWUgem9uZSBhcyBtaW51dGVzIGVhc3Qgb2YgVVRDLgogCSAqCiAJICogQHJldHVybiB0aGlzIHBlcnNvbidzIGRlY2xhcmVkIHRpbWUgem9uZSBhcyBtaW51dGVzIGVhc3Qgb2YgVVRDLiBJZiB0aGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1R5cGVkQ29uZmlnR2V0dGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9UeXBlZENvbmZpZ0dldHRlci5qYXZhCmluZGV4IDBmMmY2Y2YuLmM0ZWI4ZjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1R5cGVkQ29uZmlnR2V0dGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvVHlwZWRDb25maWdHZXR0ZXIuamF2YQpAQCAtMjksNiArMjksMTMgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVHlwZWRDb25maWdHZXR0ZXIgewogCiAJLyoqCisJICogVXNlIHtAY29kZSBJbnRlZ2VyI01JTl9WQUxVRX0gYXMgdW5zZXQgaW50IHZhbHVlCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5TRVRfSU5UID0gSW50ZWdlci5NSU5fVkFMVUU7CisKKwkvKioKIAkgKiBHZXQgYSBib29sZWFuIHZhbHVlIGZyb20gYSBnaXQge0BsaW5rIENvbmZpZ30uCiAJICoKIAkgKiBAcGFyYW0gY29uZmlnCkBAIC04Nyw2ICs5NCwzMiBAQCBpbnQgZ2V0SW50KENvbmZpZyBjb25maWcsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwgU3RyaW5nIG5hbWUsCiAJCQlpbnQgZGVmYXVsdFZhbHVlKTsKIAogCS8qKgorCSAqIE9idGFpbiBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gYSBnaXQge0BsaW5rIENvbmZpZ30gd2hpY2ggbXVzdCBiZSBpbiBnaXZlbgorCSAqIHJhbmdlLgorCSAqCisJICogQHBhcmFtIGNvbmZpZworCSAqICAgICAgICAgICAgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tCisJICogQHBhcmFtIHNlY3Rpb24KKwkgKiAgICAgICAgICAgIHNlY3Rpb24gdGhlIGtleSBpcyBncm91cGVkIHdpdGhpbi4KKwkgKiBAcGFyYW0gc3Vic2VjdGlvbgorCSAqICAgICAgICAgICAgc3Vic2VjdGlvbiBuYW1lLCBzdWNoIGEgcmVtb3RlIG9yIGJyYW5jaCBuYW1lLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBuYW1lIG9mIHRoZSBrZXkgdG8gZ2V0LgorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqICAgICAgICAgICAgbWluaW1hbCB2YWx1ZQorCSAqIEBwYXJhbSBtYXhWYWx1ZQorCSAqICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIG5vIHZhbHVlIHdhcyBwcmVzZW50LiBVc2UKKwkgKiAgICAgICAgICAgIHtAY29kZSAjVU5TRVRfSU5UfSB0byBzZXQgdGhlIGRlZmF1bHQgdG8gdW5zZXQuCisJICogQHJldHVybiBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24sIG9yIGRlZmF1bHRWYWx1ZS4KKwkgKiAgICAgICAgIHtAY29kZSAjVU5TRVRfSU5UfSBpZiB1bnNldC4KKwkgKiBAc2luY2UgNi4xCisJICovCisJaW50IGdldEludEluUmFuZ2UoQ29uZmlnIGNvbmZpZywgU3RyaW5nIHNlY3Rpb24sIFN0cmluZyBzdWJzZWN0aW9uLAorCQkJU3RyaW5nIG5hbWUsIGludCBtaW5WYWx1ZSwgaW50IG1heFZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKTsKKworCS8qKgogCSAqIE9idGFpbiBhIGxvbmcgdmFsdWUgZnJvbSBhIGdpdCB7QGxpbmsgQ29uZmlnfS4KIAkgKgogCSAqIEBwYXJhbSBjb25maWcKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL2ludGVybmFsL0Jvb2xlYW5UcmlTdGF0ZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvaW50ZXJuYWwvQm9vbGVhblRyaVN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkM2JiMwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL2ludGVybmFsL0Jvb2xlYW5UcmlTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU2ltZW9uIEFuZHJlZXYgPHNpbWVvbi5kYW5haWxvdi5hbmRyZWV2QGdtYWlsLmNvbT4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7CisKKy8qKgorICogQSBib29sZWFuIHZhbHVlIHRoYXQgY2FuIGFsc28gaGF2ZSBhbiB1bnNldCBzdGF0ZS4KKyAqLworcHVibGljIGVudW0gQm9vbGVhblRyaVN0YXRlIHsKKwkvKioKKwkgKiBWYWx1ZSBlcXVpdmFsZW50IHRvIHtAY29kZSB0cnVlfS4KKwkgKi8KKwlUUlVFLAorCS8qKgorCSAqIFZhbHVlIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIGZhbHNlfS4KKwkgKi8KKwlGQUxTRSwKKwkvKioKKwkgKiBWYWx1ZSBpcyBub3Qgc2V0LgorCSAqLworCVVOU0VUOworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VNZXNzYWdlRm9ybWF0dGVyLmphdmEKaW5kZXggZjc5NjZhMi4uZTBjMDgzZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlTWVzc2FnZUZvcm1hdHRlci5qYXZhCkBAIC05MiwzNiArOTIsNjIgQEAgcHVibGljIFN0cmluZyBmb3JtYXQoTGlzdDxSZWY+IHJlZnNUb01lcmdlLCBSZWYgdGFyZ2V0KSB7CiAJfQogCiAJLyoqCi0JICogQWRkIHNlY3Rpb24gd2l0aCBjb25mbGljdGluZyBwYXRocyB0byBtZXJnZSBtZXNzYWdlLgorCSAqIEFkZCBzZWN0aW9uIHdpdGggY29uZmxpY3RpbmcgcGF0aHMgdG8gbWVyZ2UgbWVzc2FnZS4gTGluZXMgYXJlIHByZWZpeGVkCisJICogd2l0aCBhIGhhc2guCiAJICoKIAkgKiBAcGFyYW0gbWVzc2FnZQogCSAqICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG1lcmdlIG1lc3NhZ2UKIAkgKiBAcGFyYW0gY29uZmxpY3RpbmdQYXRocwogCSAqICAgICAgICAgICAgdGhlIHBhdGhzIHdpdGggY29uZmxpY3RzCiAJICogQHJldHVybiBtZXJnZSBtZXNzYWdlIHdpdGggY29uZmxpY3RpbmcgcGF0aHMgYWRkZWQKKwkgKiBAZGVwcmVjYXRlZCBzaW5jZSA2LjE7IHVzZQorCSAqICAgICAgICAgICAgIHtAbGluayAjZm9ybWF0V2l0aENvbmZsaWN0cyhTdHJpbmcsIEl0ZXJhYmxlLCBjaGFyKX0gaW5zdGVhZAogCSAqLworCUBEZXByZWNhdGVkCiAJcHVibGljIFN0cmluZyBmb3JtYXRXaXRoQ29uZmxpY3RzKFN0cmluZyBtZXNzYWdlLAogCQkJTGlzdDxTdHJpbmc+IGNvbmZsaWN0aW5nUGF0aHMpIHsKKwkJcmV0dXJuIGZvcm1hdFdpdGhDb25mbGljdHMobWVzc2FnZSwgY29uZmxpY3RpbmdQYXRocywgJyMnKTsKKwl9CisKKwkvKioKKwkgKiBBZGQgc2VjdGlvbiB3aXRoIGNvbmZsaWN0aW5nIHBhdGhzIHRvIG1lcmdlIG1lc3NhZ2UuCisJICoKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG1lcmdlIG1lc3NhZ2UKKwkgKiBAcGFyYW0gY29uZmxpY3RpbmdQYXRocworCSAqICAgICAgICAgICAgdGhlIHBhdGhzIHdpdGggY29uZmxpY3RzCisJICogQHBhcmFtIGNvbW1lbnRDaGFyCisJICogICAgICAgICAgICBjb21tZW50IGNoYXJhY3RlciB0byB1c2UgZm9yIHByZWZpeGluZyB0aGUgY29uZmxpY3QgbGluZXMKKwkgKiBAcmV0dXJuIG1lcmdlIG1lc3NhZ2Ugd2l0aCBjb25mbGljdGluZyBwYXRocyBhZGRlZAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGZvcm1hdFdpdGhDb25mbGljdHMoU3RyaW5nIG1lc3NhZ2UsCisJCQlJdGVyYWJsZTxTdHJpbmc+IGNvbmZsaWN0aW5nUGF0aHMsIGNoYXIgY29tbWVudENoYXIpIHsKIAkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAJCVN0cmluZ1tdIGxpbmVzID0gbWVzc2FnZS5zcGxpdCgiXG4iKTsgLy8kTk9OLU5MUy0xJAogCQlpbnQgZmlyc3RGb290ZXJMaW5lID0gQ2hhbmdlSWRVdGlsLmluZGV4T2ZGaXJzdEZvb3RlckxpbmUobGluZXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGZpcnN0Rm9vdGVyTGluZTsgaSsrKQorCQlmb3IgKGludCBpID0gMDsgaSA8IGZpcnN0Rm9vdGVyTGluZTsgaSsrKSB7CiAJCQlzYi5hcHBlbmQobGluZXNbaV0pLmFwcGVuZCgnXG4nKTsKLQkJaWYgKGZpcnN0Rm9vdGVyTGluZSA9PSBsaW5lcy5sZW5ndGggJiYgbWVzc2FnZS5sZW5ndGgoKSAhPSAwKQorCQl9CisJCWlmIChmaXJzdEZvb3RlckxpbmUgPT0gbGluZXMubGVuZ3RoICYmIG1lc3NhZ2UubGVuZ3RoKCkgIT0gMCkgewogCQkJc2IuYXBwZW5kKCdcbicpOwotCQlhZGRDb25mbGljdHNNZXNzYWdlKGNvbmZsaWN0aW5nUGF0aHMsIHNiKTsKLQkJaWYgKGZpcnN0Rm9vdGVyTGluZSA8IGxpbmVzLmxlbmd0aCkKKwkJfQorCQlhZGRDb25mbGljdHNNZXNzYWdlKGNvbmZsaWN0aW5nUGF0aHMsIHNiLCBjb21tZW50Q2hhcik7CisJCWlmIChmaXJzdEZvb3RlckxpbmUgPCBsaW5lcy5sZW5ndGgpIHsKIAkJCXNiLmFwcGVuZCgnXG4nKTsKLQkJZm9yIChpbnQgaSA9IGZpcnN0Rm9vdGVyTGluZTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKQorCQl9CisJCWZvciAoaW50IGkgPSBmaXJzdEZvb3RlckxpbmU7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewogCQkJc2IuYXBwZW5kKGxpbmVzW2ldKS5hcHBlbmQoJ1xuJyk7CisJCX0KIAkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRDb25mbGljdHNNZXNzYWdlKExpc3Q8U3RyaW5nPiBjb25mbGljdGluZ1BhdGhzLAotCQkJU3RyaW5nQnVpbGRlciBzYikgewotCQlzYi5hcHBlbmQoIkNvbmZsaWN0czpcbiIpOyAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRDb25mbGljdHNNZXNzYWdlKEl0ZXJhYmxlPFN0cmluZz4gY29uZmxpY3RpbmdQYXRocywKKwkJCVN0cmluZ0J1aWxkZXIgc2IsIGNoYXIgY29tbWVudENoYXIpIHsKKwkJc2IuYXBwZW5kKGNvbW1lbnRDaGFyKS5hcHBlbmQoIiBDb25mbGljdHM6XG4iKTsgLy8kTk9OLU5MUy0xJAogCQlmb3IgKFN0cmluZyBjb25mbGljdGluZ1BhdGggOiBjb25mbGljdGluZ1BhdGhzKSB7Ci0JCQlzYi5hcHBlbmQoJ1x0JykuYXBwZW5kKGNvbmZsaWN0aW5nUGF0aCkuYXBwZW5kKCdcbicpOworCQkJc2IuYXBwZW5kKGNvbW1lbnRDaGFyKS5hcHBlbmQoJ1x0JykuYXBwZW5kKGNvbmZsaWN0aW5nUGF0aCkKKwkJCQkJLmFwcGVuZCgnXG4nKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZXNvbHZlTWVyZ2VyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YQppbmRleCA3NzY3NjYyLi5iOWFiMWQxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YQpAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEyLCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIE9iZW8gKG1hdGhpZXUuY2FydGF1ZEBvYmVvLmZyKQotICogQ29weXJpZ2h0IChDKSAyMDE4LCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDIyIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yNzYsMTEgKzI3NiwxNSBAQCBwdWJsaWMgZW51bSBNZXJnZUZhaWx1cmVSZWFzb24gewogCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5ID0gQ29udGVudE1lcmdlU3RyYXRlZ3kuQ09ORkxJQ1Q7CiAKIAkvKioKLQkgKiBLZWVwcyB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0gZm9yIHtAbGluayAjY2hlY2tvdXQoKX0gYW5kCi0JICoge0BsaW5rICNjbGVhblVwKCl9LgorCSAqIEtlZXBzIHtAbGluayBDaGVja291dE1ldGFkYXRhfSBmb3Ige0BsaW5rICNjaGVja291dCgpfS4KIAkgKi8KIAlwcml2YXRlIE1hcDxTdHJpbmcsIENoZWNrb3V0TWV0YWRhdGE+IGNoZWNrb3V0TWV0YWRhdGE7CiAKKwkvKioKKwkgKiBLZWVwcyB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0gZm9yIHtAbGluayAjY2xlYW5VcCgpfS4KKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIENoZWNrb3V0TWV0YWRhdGE+IGNsZWFudXBNZXRhZGF0YTsKKwogCXByaXZhdGUgc3RhdGljIE1lcmdlQWxnb3JpdGhtIGdldE1lcmdlQWxnb3JpdGhtKENvbmZpZyBjb25maWcpIHsKIAkJU3VwcG9ydGVkQWxnb3JpdGhtIGRpZmZBbGcgPSBjb25maWcuZ2V0RW51bSgKIAkJCQlDT05GSUdfRElGRl9TRUNUSU9OLCBudWxsLCBDT05GSUdfS0VZX0FMR09SSVRITSwKQEAgLTM4MywxMiArMzg3LDE0IEBAIHByb3RlY3RlZCBib29sZWFuIG1lcmdlSW1wbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCX0KIAkJaWYgKCFpbkNvcmUpIHsKIAkJCWNoZWNrb3V0TWV0YWRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CisJCQljbGVhbnVwTWV0YWRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CiAJCX0KIAkJdHJ5IHsKIAkJCXJldHVybiBtZXJnZVRyZWVzKG1lcmdlQmFzZSgpLCBzb3VyY2VUcmVlc1swXSwgc291cmNlVHJlZXNbMV0sCiAJCQkJCWZhbHNlKTsKIAkJfSBmaW5hbGx5IHsKIAkJCWNoZWNrb3V0TWV0YWRhdGEgPSBudWxsOworCQkJY2xlYW51cE1ldGFkYXRhID0gbnVsbDsKIAkJCWlmIChpbXBsaWNpdERpckNhY2hlKSB7CiAJCQkJZGlyY2FjaGUudW5sb2NrKCk7CiAJCQl9CkBAIC00NDcsNyArNDUzLDcgQEAgcHJvdGVjdGVkIHZvaWQgY2xlYW5VcCgpIHRocm93cyBOb1dvcmtUcmVlRXhjZXB0aW9uLAogCQkJRGlyQ2FjaGVFbnRyeSBlbnRyeSA9IGRjLmdldEVudHJ5KG1wYXRoKTsKIAkJCWlmIChlbnRyeSAhPSBudWxsKSB7CiAJCQkJRGlyQ2FjaGVDaGVja291dC5jaGVja291dEVudHJ5KGRiLCBlbnRyeSwgcmVhZGVyLCBmYWxzZSwKLQkJCQkJCWNoZWNrb3V0TWV0YWRhdGEuZ2V0KG1wYXRoKSk7CisJCQkJCQljbGVhbnVwTWV0YWRhdGEuZ2V0KG1wYXRoKSk7CiAJCQl9CiAJCQltcGF0aHNJdC5yZW1vdmUoKTsKIAkJfQpAQCAtNTAxLDIyICs1MDcsMjYgQEAgcHJpdmF0ZSBEaXJDYWNoZUVudHJ5IGtlZXAoRGlyQ2FjaGVFbnRyeSBlKSB7CiAJICogUmVtZW1iZXJzIHRoZSB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0gZm9yIHRoZSBnaXZlbiBwYXRoOyBpdCBtYXkgYmUKIAkgKiBuZWVkZWQgaW4ge0BsaW5rICNjaGVja291dCgpfSBvciBpbiB7QGxpbmsgI2NsZWFuVXAoKX0uCiAJICoKKwkgKiBAcGFyYW0gbWFwCisJICogICAgICAgICAgICB0byBhZGQgdGhlIG1ldGFkYXRhIHRvCiAJICogQHBhcmFtIHBhdGgKIAkgKiAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IG5vZGUKIAkgKiBAcGFyYW0gYXR0cmlidXRlcwotCSAqICAgICAgICAgICAgZm9yIHRoZSBjdXJyZW50IG5vZGUKKwkgKiAgICAgICAgICAgIHRvIHVzZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIG1ldGFkYXRhCiAJICogQHRocm93cyBJT0V4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIGlmIHRoZSBzbXVkZ2UgZmlsdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCi0JICogQHNpbmNlIDUuMQorCSAqIEBzaW5jZSA2LjEKIAkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBhZGRDaGVja291dE1ldGFkYXRhKFN0cmluZyBwYXRoLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisJcHJvdGVjdGVkIHZvaWQgYWRkQ2hlY2tvdXRNZXRhZGF0YShNYXA8U3RyaW5nLCBDaGVja291dE1ldGFkYXRhPiBtYXAsCisJCQlTdHJpbmcgcGF0aCwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGNoZWNrb3V0TWV0YWRhdGEgIT0gbnVsbCkgeworCQlpZiAobWFwICE9IG51bGwpIHsKIAkJCUVvbFN0cmVhbVR5cGUgZW9sID0gRW9sU3RyZWFtVHlwZVV0aWwuZGV0ZWN0U3RyZWFtVHlwZSgKLQkJCQkJT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCwgd29ya2luZ1RyZWVPcHRpb25zLCBhdHRyaWJ1dGVzKTsKKwkJCQkJT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCwgd29ya2luZ1RyZWVPcHRpb25zLAorCQkJCQlhdHRyaWJ1dGVzKTsKIAkJCUNoZWNrb3V0TWV0YWRhdGEgZGF0YSA9IG5ldyBDaGVja291dE1ldGFkYXRhKGVvbCwKLQkJCQkJdHcuZ2V0RmlsdGVyQ29tbWFuZChDb25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9TTVVER0UpKTsKLQkJCWNoZWNrb3V0TWV0YWRhdGEucHV0KHBhdGgsIGRhdGEpOworCQkJCQl0dy5nZXRTbXVkZ2VDb21tYW5kKGF0dHJpYnV0ZXMpKTsKKwkJCW1hcC5wdXQocGF0aCwgZGF0YSk7CiAJCX0KIAl9CiAKQEAgLTUyOSwxNSArNTM5LDE3IEBAIHByb3RlY3RlZCB2b2lkIGFkZENoZWNrb3V0TWV0YWRhdGEoU3RyaW5nIHBhdGgsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIAkgKiBAcGFyYW0gZW50cnkKIAkgKiAgICAgICAgICAgIHRvIGFkZAogCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCi0JICogICAgICAgICAgICBmb3IgdGhlIGN1cnJlbnQgZW50cnkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQXR0cmlidXRlc30gb2YgdGhlIHRyZWVzCiAJICogQHRocm93cyBJT0V4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIGlmIHRoZSB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0gY2Fubm90IGJlIGRldGVybWluZWQKLQkgKiBAc2luY2UgNS4xCisJICogQHNpbmNlIDYuMQogCSAqLwogCXByb3RlY3RlZCB2b2lkIGFkZFRvQ2hlY2tvdXQoU3RyaW5nIHBhdGgsIERpckNhY2hlRW50cnkgZW50cnksCi0JCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlBdHRyaWJ1dGVzW10gYXR0cmlidXRlcykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRvQmVDaGVja2VkT3V0LnB1dChwYXRoLCBlbnRyeSk7Ci0JCWFkZENoZWNrb3V0TWV0YWRhdGEocGF0aCwgYXR0cmlidXRlcyk7CisJCWFkZENoZWNrb3V0TWV0YWRhdGEoY2xlYW51cE1ldGFkYXRhLCBwYXRoLCBhdHRyaWJ1dGVzW1RfT1VSU10pOworCQlhZGRDaGVja291dE1ldGFkYXRhKGNoZWNrb3V0TWV0YWRhdGEsIHBhdGgsIGF0dHJpYnV0ZXNbVF9USEVJUlNdKTsKIAl9CiAKIAkvKioKQEAgLTU0OSw3ICs1NjEsNyBAQCBwcm90ZWN0ZWQgdm9pZCBhZGRUb0NoZWNrb3V0KFN0cmluZyBwYXRoLCBEaXJDYWNoZUVudHJ5IGVudHJ5LAogCSAqIEBwYXJhbSBpc0ZpbGUKIAkgKiAgICAgICAgICAgIHdoZXRoZXIgaXQgaXMgYSBmaWxlCiAJICogQHBhcmFtIGF0dHJpYnV0ZXMKLQkgKiAgICAgICAgICAgIGZvciB0aGUgZW50cnkKKwkgKiAgICAgICAgICAgIHRvIHVzZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHtAbGluayBDaGVja291dE1ldGFkYXRhfQogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKiAgICAgICAgICAgICBpZiB0aGUge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGNhbm5vdCBiZSBkZXRlcm1pbmVkCiAJICogQHNpbmNlIDUuMQpAQCAtNTU4LDcgKzU3MCw3IEBAIHByb3RlY3RlZCB2b2lkIGFkZERlbGV0aW9uKFN0cmluZyBwYXRoLCBib29sZWFuIGlzRmlsZSwKIAkJCUF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJdG9CZURlbGV0ZWQuYWRkKHBhdGgpOwogCQlpZiAoaXNGaWxlKSB7Ci0JCQlhZGRDaGVja291dE1ldGFkYXRhKHBhdGgsIGF0dHJpYnV0ZXMpOworCQkJYWRkQ2hlY2tvdXRNZXRhZGF0YShjbGVhbnVwTWV0YWRhdGEsIHBhdGgsIGF0dHJpYnV0ZXMpOwogCQl9CiAJfQogCkBAIC01OTksNyArNjExLDcgQEAgcHJvdGVjdGVkIHZvaWQgYWRkRGVsZXRpb24oU3RyaW5nIHBhdGgsIGJvb2xlYW4gaXNGaWxlLAogCSAqICAgICAgICAgICAgc2VlCiAJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyI21lcmdlVHJlZXMoQWJzdHJhY3RUcmVlSXRlcmF0b3IsIFJldlRyZWUsIFJldlRyZWUsIGJvb2xlYW4pfQogCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCi0JICogICAgICAgICAgICB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGZvciB0aGlzIGVudHJ5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEF0dHJpYnV0ZXN9IGZvciB0aGUgdGhyZWUgdHJlZXMKIAkgKiBAcmV0dXJuIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgbWVyZ2Ugd2lsbCBmYWlsIGJlY2F1c2UgdGhlIGluZGV4IGVudHJ5CiAJICogICAgICAgICBkaWRuJ3QgbWF0Y2ggb3VycyBvciB0aGUgd29ya2luZy1kaXIgZmlsZSB3YXMgZGlydHkgYW5kIGEKIAkgKiAgICAgICAgIGNvbmZsaWN0IG9jY3VycmVkCkBAIC02MDcsMTIgKzYxOSwxMiBAQCBwcm90ZWN0ZWQgdm9pZCBhZGREZWxldGlvbihTdHJpbmcgcGF0aCwgYm9vbGVhbiBpc0ZpbGUsCiAJICogQHRocm93cyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5JbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uCiAJICogQHRocm93cyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Db3JydXB0T2JqZWN0RXhjZXB0aW9uCiAJICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCi0JICogQHNpbmNlIDQuOQorCSAqIEBzaW5jZSA2LjEKIAkgKi8KIAlwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJQ2Fub25pY2FsVHJlZVBhcnNlciBvdXJzLCBDYW5vbmljYWxUcmVlUGFyc2VyIHRoZWlycywKIAkJCURpckNhY2hlQnVpbGRJdGVyYXRvciBpbmRleCwgV29ya2luZ1RyZWVJdGVyYXRvciB3b3JrLAotCQkJYm9vbGVhbiBpZ25vcmVDb25mbGljdHMsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKwkJCWJvb2xlYW4gaWdub3JlQ29uZmxpY3RzLCBBdHRyaWJ1dGVzW10gYXR0cmlidXRlcykKIAkJCXRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLCBJbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uLAogCQkJQ29ycnVwdE9iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQllbnRlclN1YnRyZWUgPSB0cnVlOwpAQCAtNzI5LDcgKzc0MSw3IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQkJLy8gQmFzZSwgb3VycywgYW5kIHRoZWlycyBhbGwgY29udGFpbiBhIGZvbGRlcjogZG9uJ3QgZGVsZXRlCiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCQlhZGREZWxldGlvbih0dy5nZXRQYXRoU3RyaW5nKCksIG5vblRyZWUobW9kZU8pLCBhdHRyaWJ1dGVzKTsKKwkJCWFkZERlbGV0aW9uKHR3LmdldFBhdGhTdHJpbmcoKSwgbm9uVHJlZShtb2RlTyksIGF0dHJpYnV0ZXNbVF9PVVJTXSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCkBAIC03NzIsNyArNzg0LDcgQEAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJaWYgKG5vblRyZWUobW9kZU8pICYmIG5vblRyZWUobW9kZVQpKSB7CiAJCQkvLyBDaGVjayB3b3JrdHJlZSBiZWZvcmUgbW9kaWZ5aW5nIGZpbGVzCiAJCQlib29sZWFuIHdvcmt0cmVlRGlydHkgPSBpc1dvcmt0cmVlRGlydHkod29yaywgb3VyRGNlKTsKLQkJCWlmICghYXR0cmlidXRlcy5jYW5CZUNvbnRlbnRNZXJnZWQoKSAmJiB3b3JrdHJlZURpcnR5KSB7CisJCQlpZiAoIWF0dHJpYnV0ZXNbVF9PVVJTXS5jYW5CZUNvbnRlbnRNZXJnZWQoKSAmJiB3b3JrdHJlZURpcnR5KSB7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQogCkBAIC03OTEsNyArODAzLDcgQEAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCQltZXJnZVJlc3VsdHMucHV0KHR3LmdldFBhdGhTdHJpbmcoKSwgcmVzdWx0KTsKIAkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwogCQkJCXJldHVybiB0cnVlOwotCQkJfSBlbHNlIGlmICghYXR0cmlidXRlcy5jYW5CZUNvbnRlbnRNZXJnZWQoKSkgeworCQkJfSBlbHNlIGlmICghYXR0cmlidXRlc1tUX09VUlNdLmNhbkJlQ29udGVudE1lcmdlZCgpKSB7CiAJCQkJLy8gRmlsZSBtYXJrZWQgYXMgYmluYXJ5CiAJCQkJc3dpdGNoIChnZXRDb250ZW50TWVyZ2VTdHJhdGVneSgpKSB7CiAJCQkJY2FzZSBPVVJTOgpAQCAtODQyLDEzICs4NTQsMTYgQEAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCWlmIChpZ25vcmVDb25mbGljdHMpIHsKIAkJCQlyZXN1bHQuc2V0Q29udGFpbnNDb25mbGljdHMoZmFsc2UpOwogCQkJfQotCQkJdXBkYXRlSW5kZXgoYmFzZSwgb3VycywgdGhlaXJzLCByZXN1bHQsIGF0dHJpYnV0ZXMpOworCQkJdXBkYXRlSW5kZXgoYmFzZSwgb3VycywgdGhlaXJzLCByZXN1bHQsIGF0dHJpYnV0ZXNbVF9PVVJTXSk7CiAJCQlTdHJpbmcgY3VycmVudFBhdGggPSB0dy5nZXRQYXRoU3RyaW5nKCk7CiAJCQlpZiAocmVzdWx0LmNvbnRhaW5zQ29uZmxpY3RzKCkgJiYgIWlnbm9yZUNvbmZsaWN0cykgewogCQkJCXVubWVyZ2VkUGF0aHMuYWRkKGN1cnJlbnRQYXRoKTsKIAkJCX0KIAkJCW1vZGlmaWVkRmlsZXMuYWRkKGN1cnJlbnRQYXRoKTsKLQkJCWFkZENoZWNrb3V0TWV0YWRhdGEoY3VycmVudFBhdGgsIGF0dHJpYnV0ZXMpOworCQkJYWRkQ2hlY2tvdXRNZXRhZGF0YShjbGVhbnVwTWV0YWRhdGEsIGN1cnJlbnRQYXRoLAorCQkJCQlhdHRyaWJ1dGVzW1RfT1VSU10pOworCQkJYWRkQ2hlY2tvdXRNZXRhZGF0YShjaGVja291dE1ldGFkYXRhLCBjdXJyZW50UGF0aCwKKwkJCQkJYXR0cmlidXRlc1tUX1RIRUlSU10pOwogCQl9IGVsc2UgaWYgKG1vZGVPICE9IG1vZGVUKSB7CiAJCQkvLyBPVVJTIG9yIFRIRUlSUyBoYXMgYmVlbiBkZWxldGVkCiAJCQlpZiAoKChtb2RlTyAhPSAwICYmICF0dy5pZEVxdWFsKFRfQkFTRSwgVF9PVVJTKSkgfHwgKG1vZGVUICE9IDAgJiYgIXR3CkBAIC04ODEsNyArODk2LDggQEAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCQkJCS8vIG1hcmtlcnMpLiBCdXQgYWxzbyBzdGFnZSAwIG9mIHRoZSBpbmRleCBpcyBmaWxsZWQKIAkJCQkJCS8vIHdpdGggdGhhdCBjb250ZW50LgogCQkJCQkJcmVzdWx0LnNldENvbnRhaW5zQ29uZmxpY3RzKGZhbHNlKTsKLQkJCQkJCXVwZGF0ZUluZGV4KGJhc2UsIG91cnMsIHRoZWlycywgcmVzdWx0LCBhdHRyaWJ1dGVzKTsKKwkJCQkJCXVwZGF0ZUluZGV4KGJhc2UsIG91cnMsIHRoZWlycywgcmVzdWx0LAorCQkJCQkJCQlhdHRyaWJ1dGVzW1RfT1VSU10pOwogCQkJCQl9IGVsc2UgewogCQkJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgYmFzZSwgRGlyQ2FjaGVFbnRyeS5TVEFHRV8xLCBFUE9DSCwKIAkJCQkJCQkJMCk7CkBAIC04OTYsMTEgKzkxMiw5IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQkJCQkJaWYgKGlzV29ya3RyZWVEaXJ0eSh3b3JrLCBvdXJEY2UpKSB7CiAJCQkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCQl9Ci0JCQkJCQkJaWYgKG5vblRyZWUobW9kZVQpKSB7Ci0JCQkJCQkJCWlmIChlICE9IG51bGwpIHsKLQkJCQkJCQkJCWFkZFRvQ2hlY2tvdXQodHcuZ2V0UGF0aFN0cmluZygpLCBlLAotCQkJCQkJCQkJCQlhdHRyaWJ1dGVzKTsKLQkJCQkJCQkJfQorCQkJCQkJCWlmIChub25UcmVlKG1vZGVUKSAmJiBlICE9IG51bGwpIHsKKwkJCQkJCQkJYWRkVG9DaGVja291dCh0dy5nZXRQYXRoU3RyaW5nKCksIGUsCisJCQkJCQkJCQkJYXR0cmlidXRlcyk7CiAJCQkJCQkJfQogCQkJCQkJfQogCkBAIC05NDUsMTQgKzk1OSwxNiBAQCBwcml2YXRlIHN0YXRpYyBNZXJnZVJlc3VsdDxTdWJtb2R1bGVDb25mbGljdD4gY3JlYXRlR2l0TGlua3NNZXJnZVJlc3VsdCgKIAkgKi8KIAlwcml2YXRlIE1lcmdlUmVzdWx0PFJhd1RleHQ+IGNvbnRlbnRNZXJnZShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQlDYW5vbmljYWxUcmVlUGFyc2VyIG91cnMsIENhbm9uaWNhbFRyZWVQYXJzZXIgdGhlaXJzLAotCQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBDb250ZW50TWVyZ2VTdHJhdGVneSBzdHJhdGVneSkKKwkJCUF0dHJpYnV0ZXNbXSBhdHRyaWJ1dGVzLCBDb250ZW50TWVyZ2VTdHJhdGVneSBzdHJhdGVneSkKIAkJCXRocm93cyBCaW5hcnlCbG9iRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCS8vIFRXOiBUaGUgYXR0cmlidXRlcyBoZXJlIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgTEZTIHNtdWRnZSBmaWx0ZXIuCisJCS8vIElzIGRvaW5nIGEgY29udGVudCBtZXJnZSBvbiBMRlMgaXRlbXMgcmVhbGx5IGEgZ29vZCBpZGVhPz8KIAkJUmF3VGV4dCBiYXNlVGV4dCA9IGJhc2UgPT0gbnVsbCA/IFJhd1RleHQuRU1QVFlfVEVYVAotCQkJCTogZ2V0UmF3VGV4dChiYXNlLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlcyk7CisJCQkJOiBnZXRSYXdUZXh0KGJhc2UuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzW1RfQkFTRV0pOwogCQlSYXdUZXh0IG91clRleHQgPSBvdXJzID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKLQkJCQk6IGdldFJhd1RleHQob3Vycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOworCQkJCTogZ2V0UmF3VGV4dChvdXJzLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlc1tUX09VUlNdKTsKIAkJUmF3VGV4dCB0aGVpcnNUZXh0ID0gdGhlaXJzID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKLQkJCQk6IGdldFJhd1RleHQodGhlaXJzLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlcyk7CisJCQkJOiBnZXRSYXdUZXh0KHRoZWlycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXNbVF9USEVJUlNdKTsKIAkJbWVyZ2VBbGdvcml0aG0uc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koc3RyYXRlZ3kpOwogCQlyZXR1cm4gbWVyZ2VBbGdvcml0aG0ubWVyZ2UoUmF3VGV4dENvbXBhcmF0b3IuREVGQVVMVCwgYmFzZVRleHQsCiAJCQkJb3VyVGV4dCwgdGhlaXJzVGV4dCk7CkBAIC0xMzQyLDcgKzEzNTgsNyBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBtZXJnZVRyZWVzKEFic3RyYWN0VHJlZUl0ZXJhdG9yIGJhc2VUcmVlLAogCiAJCXR3ID0gbmV3IE5hbWVDb25mbGljdFRyZWVXYWxrKGRiLCByZWFkZXIpOwogCQl0dy5hZGRUcmVlKGJhc2VUcmVlKTsKLQkJdHcuYWRkVHJlZShoZWFkVHJlZSk7CisJCXR3LnNldEhlYWQodHcuYWRkVHJlZShoZWFkVHJlZSkpOwogCQl0dy5hZGRUcmVlKG1lcmdlVHJlZSk7CiAJCWludCBkY2lQb3MgPSB0dy5hZGRUcmVlKGJ1aWxkSXQpOwogCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsKSB7CkBAIC0xNDAzLDYgKzE0MTksMTMgQEAgcHJvdGVjdGVkIGJvb2xlYW4gbWVyZ2VUcmVlV2FsayhUcmVlV2FsayB0cmVlV2FsaywgYm9vbGVhbiBpZ25vcmVDb25mbGljdHMpCiAJCWJvb2xlYW4gaGFzQXR0cmlidXRlTm9kZVByb3ZpZGVyID0gdHJlZVdhbGsKIAkJCQkuZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpICE9IG51bGw7CiAJCXdoaWxlICh0cmVlV2Fsay5uZXh0KCkpIHsKKwkJCUF0dHJpYnV0ZXNbXSBhdHRyaWJ1dGVzID0geyBOT19BVFRSSUJVVEVTLCBOT19BVFRSSUJVVEVTLAorCQkJCQlOT19BVFRSSUJVVEVTIH07CisJCQlpZiAoaGFzQXR0cmlidXRlTm9kZVByb3ZpZGVyKSB7CisJCQkJYXR0cmlidXRlc1tUX0JBU0VdID0gdHJlZVdhbGsuZ2V0QXR0cmlidXRlcyhUX0JBU0UpOworCQkJCWF0dHJpYnV0ZXNbVF9PVVJTXSA9IHRyZWVXYWxrLmdldEF0dHJpYnV0ZXMoVF9PVVJTKTsKKwkJCQlhdHRyaWJ1dGVzW1RfVEhFSVJTXSA9IHRyZWVXYWxrLmdldEF0dHJpYnV0ZXMoVF9USEVJUlMpOworCQkJfQogCQkJaWYgKCFwcm9jZXNzRW50cnkoCiAJCQkJCXRyZWVXYWxrLmdldFRyZWUoVF9CQVNFLCBDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKSwKIAkJCQkJdHJlZVdhbGsuZ2V0VHJlZShUX09VUlMsIENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpLApAQCAtMTQxMCw5ICsxNDMzLDcgQEAgcHJvdGVjdGVkIGJvb2xlYW4gbWVyZ2VUcmVlV2FsayhUcmVlV2FsayB0cmVlV2FsaywgYm9vbGVhbiBpZ25vcmVDb25mbGljdHMpCiAJCQkJCXRyZWVXYWxrLmdldFRyZWUoVF9JTkRFWCwgRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yLmNsYXNzKSwKIAkJCQkJaGFzV29ya2luZ1RyZWVJdGVyYXRvciA/IHRyZWVXYWxrLmdldFRyZWUoVF9GSUxFLAogCQkJCQkJCVdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpIDogbnVsbCwKLQkJCQkJaWdub3JlQ29uZmxpY3RzLCBoYXNBdHRyaWJ1dGVOb2RlUHJvdmlkZXIKLQkJCQkJCQk/IHRyZWVXYWxrLmdldEF0dHJpYnV0ZXMoKQotCQkJCQkJCTogTk9fQVRUUklCVVRFUykpIHsKKwkJCQkJaWdub3JlQ29uZmxpY3RzLCBhdHRyaWJ1dGVzKSkgewogCQkJCWNsZWFuVXAoKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvT2JqZWN0V2Fsay5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL09iamVjdFdhbGsuamF2YQppbmRleCBlNmY5NTgwLi40ZTQ4YTVjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvT2JqZWN0V2Fsay5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9PYmplY3RXYWxrLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAyMiBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWMgdm9pZCB2aXNpdGVkKFJldk9iamVjdCBvKSB7CiAJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSB0aGUgd2Fsa2VyIHdpbGwgb2J0YWluIGRhdGEgZnJvbS4KIAkgKi8KIAlwdWJsaWMgT2JqZWN0V2FsayhSZXBvc2l0b3J5IHJlcG8pIHsKLQkJdGhpcyhyZXBvLm5ld09iamVjdFJlYWRlcigpKTsKKwkJdGhpcyhyZXBvLm5ld09iamVjdFJlYWRlcigpLCB0cnVlKTsKIAl9CiAKIAkvKioKQEAgLTE1MSw3ICsxNTEsMTEgQEAgcHVibGljIE9iamVjdFdhbGsoUmVwb3NpdG9yeSByZXBvKSB7CiAJICogICAgICAgICAgICByZXF1aXJlZC4KIAkgKi8KIAlwdWJsaWMgT2JqZWN0V2FsayhPYmplY3RSZWFkZXIgb3IpIHsKLQkJc3VwZXIob3IpOworCQl0aGlzKG9yLCBmYWxzZSk7CisJfQorCisJcHJpdmF0ZSBPYmplY3RXYWxrKE9iamVjdFJlYWRlciBvciwgYm9vbGVhbiBjbG9zZVJlYWRlcikgeworCQlzdXBlcihvciwgY2xvc2VSZWFkZXIpOwogCQlzZXRSZXRhaW5Cb2R5KGZhbHNlKTsKIAkJcm9vdE9iamVjdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJcGVuZGluZ09iamVjdHMgPSBuZXcgQmxvY2tPYmpRdWV1ZSgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGsuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEKaW5kZXggOGQ1NzFmNS4uYTUwZWFmMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGsuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGljIFJldldhbGsoT2JqZWN0UmVhZGVyIG9yKSB7CiAJCXRoaXMob3IsIGZhbHNlKTsKIAl9CiAKLQlwcml2YXRlIFJldldhbGsoT2JqZWN0UmVhZGVyIG9yLCBib29sZWFuIGNsb3NlUmVhZGVyKSB7CisJUmV2V2FsayhPYmplY3RSZWFkZXIgb3IsIGJvb2xlYW4gY2xvc2VSZWFkZXIpIHsKIAkJcmVhZGVyID0gb3I7CiAJCWlkQnVmZmVyID0gbmV3IE11dGFibGVPYmplY3RJZCgpOwogCQlvYmplY3RzID0gbmV3IE9iamVjdElkT3duZXJNYXA8PigpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaENvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaENvbmZpZy5qYXZhCmluZGV4IGZkYTdhODEuLmM4Nzc0ZDUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWcuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LCBEYXZpZCBQdXJzZWhvdXNlIDxkYXZpZC5wdXJzZWhvdXNlQGdtYWlsLmNvbT4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIyIERhdmlkIFB1cnNlaG91c2UgPGRhdmlkLnB1cnNlaG91c2VAZ21haWwuY29tPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xMCw3ICsxMCwxMCBAQAogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0OwogCitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN0cmluZ1V0aWxzOwogCiAvKioKQEAgLTE5LDggKzIyLDkgQEAKICAqIEBzaW5jZSA0LjkKICAqLwogcHVibGljIGNsYXNzIFB1c2hDb25maWcgeworCiAJLyoqCi0JICogQ29uZmlnIHZhbHVlcyBmb3IgcHVzaC5yZWN1cnNlU3VibW9kdWxlcy4KKwkgKiBHaXQgY29uZmlnIHZhbHVlcyBmb3Ige0Bjb2RlIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXN9LgogCSAqLwogCXB1YmxpYyBlbnVtIFB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUgaW1wbGVtZW50cyBDb25maWcuQ29uZmlnRW51bSB7CiAJCS8qKgpAQCAtNTksNCArNjMsMTAwIEBAIHB1YmxpYyBib29sZWFuIG1hdGNoQ29uZmlnVmFsdWUoU3RyaW5nIHMpIHsKIAkJCQkJfHwgY29uZmlnVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShzKTsKIAkJfQogCX0KKworCS8qKgorCSAqIEdpdCBjb25maWcgdmFsdWVzIGZvciB7QGNvZGUgcHVzaC5kZWZhdWx0fS4KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgZW51bSBQdXNoRGVmYXVsdCBpbXBsZW1lbnRzIENvbmZpZy5Db25maWdFbnVtIHsKKworCQkvKioKKwkJICogRG8gbm90IHB1c2ggaWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IHJlZnNwZWNzLgorCQkgKi8KKwkJTk9USElORywKKworCQkvKioKKwkJICogUHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gYW4gdXBzdHJlYW0gYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUuCisJCSAqLworCQlDVVJSRU5ULAorCisJCS8qKgorCQkgKiBQdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byBhbiB1cHN0cmVhbSBicmFuY2ggZGV0ZXJtaW5lZCBieSBnaXQKKwkJICogY29uZmlnIHtAY29kZSBicmFuY2guPGN1cnJlbnRCcmFuY2g+Lm1lcmdlfS4KKwkJICovCisJCVVQU1RSRUFNKCJ0cmFja2luZyIpLCAvLyROT04tTkxTLTEkCisKKwkJLyoqCisJCSAqIExpa2Uge0BsaW5rICNVUFNUUkVBTX0sIGJ1dCBvbmx5IGlmIHRoZSB1cHN0cmVhbSBuYW1lIGlzIHRoZSBzYW1lIGFzCisJCSAqIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGxvY2FsIGJyYW5jaC4KKwkJICovCisJCVNJTVBMRSwKKworCQkvKioKKwkJICogUHVzaCBhbGwgY3VycmVudCBsb2NhbCBicmFuY2hlcyB0aGF0IG1hdGNoIGEgY29uZmlndXJlZCBwdXNoIHJlZnNwZWMKKwkJICogb2YgdGhlIHJlbW90ZSBjb25maWd1cmF0aW9uLgorCQkgKi8KKwkJTUFUQ0hJTkc7CisKKwkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWxpYXM7CisKKwkJcHJpdmF0ZSBQdXNoRGVmYXVsdCgpIHsKKwkJCWFsaWFzID0gbnVsbDsKKwkJfQorCisJCXByaXZhdGUgUHVzaERlZmF1bHQoU3RyaW5nIGFsaWFzKSB7CisJCQl0aGlzLmFsaWFzID0gYWxpYXM7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b0NvbmZpZ1ZhbHVlKCkgeworCQkJcmV0dXJuIG5hbWUoKS50b0xvd2VyQ2FzZShMb2NhbGUuUk9PVCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gbWF0Y2hDb25maWdWYWx1ZShTdHJpbmcgaW4pIHsKKwkJCXJldHVybiB0b0NvbmZpZ1ZhbHVlKCkuZXF1YWxzSWdub3JlQ2FzZShpbikKKwkJCQkJfHwgKGFsaWFzICE9IG51bGwgJiYgYWxpYXMuZXF1YWxzSWdub3JlQ2FzZShpbikpOworCQl9CisJfQorCisJcHJpdmF0ZSBmaW5hbCBQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlIHJlY3Vyc2VTdWJtb2R1bGVzOworCisJcHJpdmF0ZSBmaW5hbCBQdXNoRGVmYXVsdCBwdXNoRGVmYXVsdDsKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UuCisJICoKKwkgKiBAcGFyYW0gY29uZmlnCisJICogICAgICAgICAgICB7QGxpbmsgQ29uZmlnfSB0byBmaWxsIHRoZSB7QGxpbmsgUHVzaENvbmZpZ30gZnJvbQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgUHVzaENvbmZpZyhDb25maWcgY29uZmlnKSB7CisJCXJlY3Vyc2VTdWJtb2R1bGVzID0gY29uZmlnLmdldEVudW0oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19QVVNIX1NFQ1RJT04sCisJCQkJbnVsbCwgQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUkVDVVJTRV9TVUJNT0RVTEVTLAorCQkJCVB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUuTk8pOworCQlwdXNoRGVmYXVsdCA9IGNvbmZpZy5nZXRFbnVtKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfUFVTSF9TRUNUSU9OLCBudWxsLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0RFRkFVTFQsIFB1c2hEZWZhdWx0LlNJTVBMRSk7CisJfQorCisJLyoqCisJICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBnaXQgY29uZmlnIHtAY29kZSBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzfS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlIGdldFJlY3Vyc2VTdWJtb2R1bGVzKCkgeworCQlyZXR1cm4gcmVjdXJzZVN1Ym1vZHVsZXM7CisJfQorCisJLyoqCisJICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBnaXQgY29uZmlnIHtAY29kZSBwdXNoLmRlZmF1bHR9LgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFB1c2hEZWZhdWx0IGdldFB1c2hEZWZhdWx0KCkgeworCQlyZXR1cm4gcHVzaERlZmF1bHQ7CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3MuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzLmphdmEKaW5kZXggYTI0NGM1NS4uOTQyZGFkNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3MuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoUHJvY2Vzcy5qYXZhCkBAIC0xOCwxMSArMTgsMTUgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5BYm9ydGVkQnlIb29rRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk1pc3NpbmdPYmplY3RFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLlByZVB1c2hIb29rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CkBAIC01OCw2ICs2Miw4IEBAIGNsYXNzIFB1c2hQcm9jZXNzIHsKIAkvKiogQSBsaXN0IG9mIG9wdGlvbiBzdHJpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHB1c2ggKi8KIAlwcml2YXRlIExpc3Q8U3RyaW5nPiBwdXNoT3B0aW9uczsKIAorCXByaXZhdGUgZmluYWwgUHJlUHVzaEhvb2sgcHJlUHVzaDsKKwogCS8qKgogCSAqIENyZWF0ZSBwcm9jZXNzIGZvciBzcGVjaWZpZWQgdHJhbnNwb3J0IGFuZCByZWZzIHVwZGF0ZXMgc3BlY2lmaWNhdGlvbi4KIAkgKgpAQCAtNjYsMTIgKzcyLDE0IEBAIGNsYXNzIFB1c2hQcm9jZXNzIHsKIAkgKiAgICAgICAgICAgIGNvbm5lY3Rpb24uCiAJICogQHBhcmFtIHRvUHVzaAogCSAqICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBvZiByZWZzIHVwZGF0ZXMgKGFuZCBsb2NhbCB0cmFja2luZyBicmFuY2hlcykuCi0JICoKKwkgKiBAcGFyYW0gcHJlUHVzaAorCSAqICAgICAgICAgICAge0BsaW5rIFByZVB1c2hIb29rfSB0byBydW4gYWZ0ZXIgdGhlIHJlbW90ZSBhZHZlcnRpc2VtZW50IGhhcworCSAqICAgICAgICAgICAgYmVlbiBnb3R0ZW4KIAkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgogCSAqLwotCVB1c2hQcm9jZXNzKGZpbmFsIFRyYW5zcG9ydCB0cmFuc3BvcnQsCi0JCQlmaW5hbCBDb2xsZWN0aW9uPFJlbW90ZVJlZlVwZGF0ZT4gdG9QdXNoKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJdGhpcyh0cmFuc3BvcnQsIHRvUHVzaCwgbnVsbCk7CisJUHVzaFByb2Nlc3MoVHJhbnNwb3J0IHRyYW5zcG9ydCwgQ29sbGVjdGlvbjxSZW1vdGVSZWZVcGRhdGU+IHRvUHVzaCwKKwkJCVByZVB1c2hIb29rIHByZVB1c2gpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24geworCQl0aGlzKHRyYW5zcG9ydCwgdG9QdXNoLCBwcmVQdXNoLCBudWxsKTsKIAl9CiAKIAkvKioKQEAgLTgyLDE2ICs5MCwxOSBAQCBjbGFzcyBQdXNoUHJvY2VzcyB7CiAJICogICAgICAgICAgICBjb25uZWN0aW9uLgogCSAqIEBwYXJhbSB0b1B1c2gKIAkgKiAgICAgICAgICAgIHNwZWNpZmljYXRpb24gb2YgcmVmcyB1cGRhdGVzIChhbmQgbG9jYWwgdHJhY2tpbmcgYnJhbmNoZXMpLgorCSAqIEBwYXJhbSBwcmVQdXNoCisJICogICAgICAgICAgICB7QGxpbmsgUHJlUHVzaEhvb2t9IHRvIHJ1biBhZnRlciB0aGUgcmVtb3RlIGFkdmVydGlzZW1lbnQgaGFzCisJICogICAgICAgICAgICBiZWVuIGdvdHRlbgogCSAqIEBwYXJhbSBvdXQKIAkgKiAgICAgICAgICAgIE91dHB1dFN0cmVhbSB0byB3cml0ZSBtZXNzYWdlcyB0bwogCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCiAJICovCi0JUHVzaFByb2Nlc3MoZmluYWwgVHJhbnNwb3J0IHRyYW5zcG9ydCwKLQkJCWZpbmFsIENvbGxlY3Rpb248UmVtb3RlUmVmVXBkYXRlPiB0b1B1c2gsIE91dHB1dFN0cmVhbSBvdXQpCi0JCQl0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKKwlQdXNoUHJvY2VzcyhUcmFuc3BvcnQgdHJhbnNwb3J0LCBDb2xsZWN0aW9uPFJlbW90ZVJlZlVwZGF0ZT4gdG9QdXNoLAorCQkJUHJlUHVzaEhvb2sgcHJlUHVzaCwgT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CiAJCXRoaXMud2Fsa2VyID0gbmV3IFJldldhbGsodHJhbnNwb3J0LmxvY2FsKTsKIAkJdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7CiAJCXRoaXMudG9QdXNoID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworCQl0aGlzLnByZVB1c2ggPSBwcmVQdXNoOwogCQl0aGlzLm91dCA9IG91dDsKIAkJdGhpcy5wdXNoT3B0aW9ucyA9IHRyYW5zcG9ydC5nZXRQdXNoT3B0aW9ucygpOwogCQlmb3IgKFJlbW90ZVJlZlVwZGF0ZSBycnUgOiB0b1B1c2gpIHsKQEAgLTEyOSwxMCArMTQwLDM4IEBAIFB1c2hSZXN1bHQgZXhlY3V0ZShQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKIAkJCQlyZXMuc2V0QWR2ZXJ0aXNlZFJlZnModHJhbnNwb3J0LmdldFVSSSgpLCBjb25uZWN0aW9uCiAJCQkJCQkuZ2V0UmVmc01hcCgpKTsKIAkJCQlyZXMucGVlclVzZXJBZ2VudCA9IGNvbm5lY3Rpb24uZ2V0UGVlclVzZXJBZ2VudCgpOwotCQkJCXJlcy5zZXRSZW1vdGVVcGRhdGVzKHRvUHVzaCk7CiAJCQkJbW9uaXRvci5lbmRUYXNrKCk7CiAKKwkJCQlNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IGV4cGFuZGVkID0gZXhwYW5kTWF0Y2hpbmcoKTsKKwkJCQl0b1B1c2guY2xlYXIoKTsKKwkJCQl0b1B1c2gucHV0QWxsKGV4cGFuZGVkKTsKKworCQkJCXJlcy5zZXRSZW1vdGVVcGRhdGVzKHRvUHVzaCk7CiAJCQkJZmluYWwgTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiBwcmVwcm9jZXNzZWQgPSBwcmVwYXJlUmVtb3RlVXBkYXRlcygpOworCQkJCUxpc3Q8UmVtb3RlUmVmVXBkYXRlPiB3aWxsQmVBdHRlbXB0ZWQgPSBwcmVwcm9jZXNzZWQudmFsdWVzKCkKKwkJCQkJCS5zdHJlYW0oKS5maWx0ZXIodSAtPiB7CisJCQkJCQkJc3dpdGNoICh1LmdldFN0YXR1cygpKSB7CisJCQkJCQkJY2FzZSBOT05fRVhJU1RJTkc6CisJCQkJCQkJY2FzZSBSRUpFQ1RFRF9OT0RFTEVURToKKwkJCQkJCQljYXNlIFJFSkVDVEVEX05PTkZBU1RGT1JXQVJEOgorCQkJCQkJCWNhc2UgUkVKRUNURURfT1RIRVJfUkVBU09OOgorCQkJCQkJCWNhc2UgUkVKRUNURURfUkVNT1RFX0NIQU5HRUQ6CisJCQkJCQkJY2FzZSBVUF9UT19EQVRFOgorCQkJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQkJfQorCQkJCQkJfSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKKwkJCQlpZiAoIXdpbGxCZUF0dGVtcHRlZC5pc0VtcHR5KCkpIHsKKwkJCQkJaWYgKHByZVB1c2ggIT0gbnVsbCkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlwcmVQdXNoLnNldFJlZnMod2lsbEJlQXR0ZW1wdGVkKTsKKwkJCQkJCQlwcmVQdXNoLmNhbGwoKTsKKwkJCQkJCX0gY2F0Y2ggKEFib3J0ZWRCeUhvb2tFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CiAJCQkJaWYgKHRyYW5zcG9ydC5pc0RyeVJ1bigpKQogCQkJCQltb2RpZnlVcGRhdGVzRm9yRHJ5UnVuKCk7CiAJCQkJZWxzZSBpZiAoIXByZXByb2Nlc3NlZC5pc0VtcHR5KCkpCkBAIC0yMDEsMjUgKzI0MCw4IEBAIHByaXZhdGUgTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiBwcmVwYXJlUmVtb3RlVXBkYXRlcygpCiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCS8vIGNoZWNrIGZvciBmYXN0LWZvcndhcmQ6Ci0JCQkvLyAtIGJvdGggb2xkIGFuZCBuZXcgcmVmIG11c3QgcG9pbnQgdG8gY29tbWl0cywgQU5ECi0JCQkvLyAtIGJvdGggb2YgdGhlbSBtdXN0IGJlIGtub3duIGZvciB1cywgZXhpc3QgaW4gcmVwb3NpdG9yeSwgQU5ECi0JCQkvLyAtIG9sZCBjb21taXQgbXVzdCBiZSBhbmNlc3RvciBvZiBuZXcgY29tbWl0Ci0JCQlib29sZWFuIGZhc3RGb3J3YXJkID0gdHJ1ZTsKLQkJCXRyeSB7Ci0JCQkJUmV2T2JqZWN0IG9sZFJldiA9IHdhbGtlci5wYXJzZUFueShhZHZlcnRpc2VkT2xkKTsKLQkJCQlmaW5hbCBSZXZPYmplY3QgbmV3UmV2ID0gd2Fsa2VyLnBhcnNlQW55KHJydS5nZXROZXdPYmplY3RJZCgpKTsKLQkJCQlpZiAoIShvbGRSZXYgaW5zdGFuY2VvZiBSZXZDb21taXQpCi0JCQkJCQl8fCAhKG5ld1JldiBpbnN0YW5jZW9mIFJldkNvbW1pdCkKLQkJCQkJCXx8ICF3YWxrZXIuaXNNZXJnZWRJbnRvKChSZXZDb21taXQpIG9sZFJldiwKLQkJCQkJCQkJKFJldkNvbW1pdCkgbmV3UmV2KSkKLQkJCQkJZmFzdEZvcndhcmQgPSBmYWxzZTsKLQkJCX0gY2F0Y2ggKE1pc3NpbmdPYmplY3RFeGNlcHRpb24geCkgewotCQkJCWZhc3RGb3J3YXJkID0gZmFsc2U7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24geCkgewotCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24odHJhbnNwb3J0LmdldFVSSSgpLCBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJCUpHaXRUZXh0LmdldCgpLnJlYWRpbmdPYmplY3RzRnJvbUxvY2FsUmVwb3NpdG9yeUZhaWxlZCwgeC5nZXRNZXNzYWdlKCkpLCB4KTsKLQkJCX0KKwkJCWJvb2xlYW4gZmFzdEZvcndhcmQgPSBpc0Zhc3RGb3J3YXJkKGFkdmVydGlzZWRPbGQsCisJCQkJCXJydS5nZXROZXdPYmplY3RJZCgpKTsKIAkJCXJydS5zZXRGYXN0Rm9yd2FyZChmYXN0Rm9yd2FyZCk7CiAJCQlpZiAoIWZhc3RGb3J3YXJkICYmICFycnUuaXNGb3JjZVVwZGF0ZSgpKSB7CiAJCQkJcnJ1LnNldFN0YXR1cyhTdGF0dXMuUkVKRUNURURfTk9ORkFTVEZPUldBUkQpOwpAQCAtMjMzLDYgKzI1NSwxMzQgQEAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHByZXBhcmVSZW1vdGVVcGRhdGVzKCkKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKKwkvKioKKwkgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gdXBkYXRlIGZyb20ge0Bjb2RlIG9sZE9pZH0gdG8ge0Bjb2RlIG5ld09pZH0gaXMgYQorCSAqIGZhc3QtZm9yd2FyZCB1cGRhdGU6CisJICogPHVsPgorCSAqIDxsaT5ib3RoIG9sZCBhbmQgbmV3IG11c3QgYmUgY29tbWl0cywgQU5EPC9saT4KKwkgKiA8bGk+Ym90aCBvZiB0aGVtIG11c3QgYmUga25vd24gdG8gdXMgYW5kIGV4aXN0IGluIHRoZSByZXBvc2l0b3J5LAorCSAqIEFORDwvbGk+CisJICogPGxpPnRoZSBvbGQgY29tbWl0IG11c3QgYmUgYW4gYW5jZXN0b3Igb2YgdGhlIG5ldyBjb21taXQuPC9saT4KKwkgKiA8L3VsPgorCSAqCisJICogQHBhcmFtIG9sZE9pZAorCSAqICAgICAgICAgICAge0BsaW5rIE9iamVjdElkfcKgb2YgdGhlIG9sZCBjb21taXQKKwkgKiBAcGFyYW0gbmV3T2lkCisJICogICAgICAgICAgICB7QGxpbmsgT2JqZWN0SWR9wqBvZiB0aGUgbmV3IGNvbW1pdAorCSAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSB1cGRhdGUgZmFzdC1mb3J3YXJkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKwkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0Zhc3RGb3J3YXJkKE9iamVjdElkIG9sZE9pZCwgT2JqZWN0SWQgbmV3T2lkKQorCQkJdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlSZXZPYmplY3Qgb2xkUmV2ID0gd2Fsa2VyLnBhcnNlQW55KG9sZE9pZCk7CisJCQlSZXZPYmplY3QgbmV3UmV2ID0gd2Fsa2VyLnBhcnNlQW55KG5ld09pZCk7CisJCQlpZiAoIShvbGRSZXYgaW5zdGFuY2VvZiBSZXZDb21taXQpIHx8ICEobmV3UmV2IGluc3RhbmNlb2YgUmV2Q29tbWl0KQorCQkJCQl8fCAhd2Fsa2VyLmlzTWVyZ2VkSW50bygoUmV2Q29tbWl0KSBvbGRSZXYsCisJCQkJCQkJKFJldkNvbW1pdCkgbmV3UmV2KSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfSBjYXRjaCAoTWlzc2luZ09iamVjdEV4Y2VwdGlvbiB4KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB4KSB7CisJCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKHRyYW5zcG9ydC5nZXRVUkkoKSwKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoSkdpdFRleHQKKwkJCQkJCQkuZ2V0KCkucmVhZGluZ09iamVjdHNGcm9tTG9jYWxSZXBvc2l0b3J5RmFpbGVkLAorCQkJCQkJCXguZ2V0TWVzc2FnZSgpKSwKKwkJCQkJeCk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogRXhwYW5kcyBhbGwgcGxhY2Vob2xkZXIge0BsaW5rIFJlbW90ZVJlZlVwZGF0ZX1zIGZvciAibWF0Y2hpbmciCisJICoge0BsaW5rIFJlZlNwZWN9cyAiOiIgaW4ge0BsaW5rICN0b1B1c2h9IGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgbWFwIGluCisJICogd2hpY2ggdGhlIHBsYWNlaG9sZGVycyBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgdGhlaXIgZXhwYW5zaW9uLgorCSAqCisJICogQHJldHVybiBhIG5ldyBtYXAgb2Yge0BsaW5rIFJlbW90ZVJlZlVwZGF0ZX1zIGtleWVkIGJ5IHJlbW90ZSBuYW1lCisJICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgZXhwYW5zaW9uIHJlc3VsdHMgaW4gZHVwbGljYXRlIHVwZGF0ZXMKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIFJlbW90ZVJlZlVwZGF0ZT4gZXhwYW5kTWF0Y2hpbmcoKQorCQkJdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJCU1hcDxTdHJpbmcsIFJlbW90ZVJlZlVwZGF0ZT4gcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworCQlib29sZWFuIGhhZE1hdGNoID0gZmFsc2U7CisJCWZvciAoUmVtb3RlUmVmVXBkYXRlIHVwZGF0ZSA6IHRvUHVzaC52YWx1ZXMoKSkgeworCQkJaWYgKHVwZGF0ZS5pc01hdGNoaW5nKCkpIHsKKwkJCQlpZiAoaGFkTWF0Y2gpIHsKKwkJCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQlKR2l0VGV4dC5nZXQoKS5kdXBsaWNhdGVSZW1vdGVSZWZVcGRhdGVJc0lsbGVnYWwsCisJCQkJCQkJIjoiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJZXhwYW5kTWF0Y2hpbmcocmVzdWx0LCB1cGRhdGUpOworCQkJCWhhZE1hdGNoID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAocmVzdWx0LnB1dCh1cGRhdGUuZ2V0UmVtb3RlTmFtZSgpLCB1cGRhdGUpICE9IG51bGwpIHsKKwkJCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSkdpdFRleHQuZ2V0KCkuZHVwbGljYXRlUmVtb3RlUmVmVXBkYXRlSXNJbGxlZ2FsLAorCQkJCQkJdXBkYXRlLmdldFJlbW90ZU5hbWUoKSkpOworCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogRXhwYW5kcyB0aGUgcGxhY2Vob2xkZXIge0BsaW5rIFJlbW90ZVJlZlVwZGF0ZX0ge0Bjb2RlIG1hdGNofSBmb3IgYQorCSAqICJtYXRjaGluZyIge0BsaW5rIFJlZlNwZWN9ICI6IiBvciAiKzoiIGFuZCBwdXRzIHRoZSBleHBhbnNpb24gaW50byB0aGUKKwkgKiBnaXZlbiBtYXAge0Bjb2RlIHVwZGF0ZXN9LgorCSAqCisJICogQHBhcmFtIHVwZGF0ZXMKKwkgKiAgICAgICAgICAgIG1hcCB0byBwdXQgdGhlIGV4cGFuc2lvbiBpbgorCSAqIEBwYXJhbSBtYXRjaAorCSAqICAgICAgICAgICAgdGhlIHBsYWNlaG9sZGVyIHtAbGluayBSZW1vdGVSZWZVcGRhdGV9IHRvIGV4cGFuZAorCSAqCisJICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgZXhwYW5zaW9uIHJlc3VsdHMgaW4gZHVwbGljYXRlIHVwZGF0ZXMsIG9yIHRoZSBsb2NhbAorCSAqICAgICAgICAgICAgIGJyYW5jaGVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisJICovCisJcHJpdmF0ZSB2b2lkIGV4cGFuZE1hdGNoaW5nKE1hcDxTdHJpbmcsIFJlbW90ZVJlZlVwZGF0ZT4gdXBkYXRlcywKKwkJCVJlbW90ZVJlZlVwZGF0ZSBtYXRjaCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlNYXA8U3RyaW5nLCBSZWY+IGFkdmVydGlzZW1lbnQgPSBjb25uZWN0aW9uLmdldFJlZnNNYXAoKTsKKwkJCUNvbGxlY3Rpb248UmVmU3BlYz4gZmV0Y2hTcGVjcyA9IG1hdGNoLmdldEZldGNoU3BlY3MoKTsKKwkJCWJvb2xlYW4gZm9yY2VVcGRhdGUgPSBtYXRjaC5pc0ZvcmNlVXBkYXRlKCk7CisJCQlmb3IgKFJlZiBsb2NhbCA6IHRyYW5zcG9ydC5sb2NhbC5nZXRSZWZEYXRhYmFzZSgpCisJCQkJCS5nZXRSZWZzQnlQcmVmaXgoQ29uc3RhbnRzLlJfSEVBRFMpKSB7CisJCQkJaWYgKGxvY2FsLmlzU3ltYm9saWMoKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJU3RyaW5nIG5hbWUgPSBsb2NhbC5nZXROYW1lKCk7CisJCQkJUmVmIGFkdmVydGlzZWQgPSBhZHZlcnRpc2VtZW50LmdldChuYW1lKTsKKwkJCQlpZiAoYWR2ZXJ0aXNlZCA9PSBudWxsIHx8IGFkdmVydGlzZWQuaXNTeW1ib2xpYygpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlPYmplY3RJZCBvbGRPaWQgPSBhZHZlcnRpc2VkLmdldE9iamVjdElkKCk7CisJCQkJaWYgKG9sZE9pZCA9PSBudWxsIHx8IE9iamVjdElkLnplcm9JZCgpLmVxdWFscyhvbGRPaWQpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlPYmplY3RJZCBuZXdPaWQgPSBsb2NhbC5nZXRPYmplY3RJZCgpOworCQkJCWlmIChuZXdPaWQgPT0gbnVsbCB8fCBPYmplY3RJZC56ZXJvSWQoKS5lcXVhbHMobmV3T2lkKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlSZW1vdGVSZWZVcGRhdGUgcnJ1ID0gbmV3IFJlbW90ZVJlZlVwZGF0ZSh0cmFuc3BvcnQubG9jYWwsIG5hbWUsCisJCQkJCQluZXdPaWQsIG5hbWUsIGZvcmNlVXBkYXRlLAorCQkJCQkJVHJhbnNwb3J0LmZpbmRUcmFja2luZ1JlZk5hbWUobmFtZSwgZmV0Y2hTcGVjcyksCisJCQkJCQlvbGRPaWQpOworCQkJCWlmICh1cGRhdGVzLnB1dChycnUuZ2V0UmVtb3RlTmFtZSgpLCBycnUpICE9IG51bGwpIHsKKwkJCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQlKR2l0VGV4dC5nZXQoKS5kdXBsaWNhdGVSZW1vdGVSZWZVcGRhdGVJc0lsbGVnYWwsCisJCQkJCQkJcnJ1LmdldFJlbW90ZU5hbWUoKSkpOworCQkJCX0KKwkJCX0KKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24geCkgeworCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbih0cmFuc3BvcnQuZ2V0VVJJKCksCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEpHaXRUZXh0CisJCQkJCQkJLmdldCgpLnJlYWRpbmdPYmplY3RzRnJvbUxvY2FsUmVwb3NpdG9yeUZhaWxlZCwKKwkJCQkJCQl4LmdldE1lc3NhZ2UoKSksCisJCQkJCXgpOworCQl9CisJfQorCiAJcHJpdmF0ZSBNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHJlamVjdEFsbCgpIHsKIAkJZm9yIChSZW1vdGVSZWZVcGRhdGUgcnJ1IDogdG9QdXNoLnZhbHVlcygpKSB7CiAJCQlpZiAocnJ1LmdldFN0YXR1cygpID09IFN0YXR1cy5OT1RfQVRURU1QVEVEKSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjLmphdmEKaW5kZXggYWMzNTdhZi4uNTZkMDAzNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlYy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlZlNwZWMuamF2YQpAQCAtMTIsMTEgKzEyLDExIEBACiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuUmVmZXJlbmNlczsKIAogLyoqCiAgKiBEZXNjcmliZXMgaG93IHJlZnMgaW4gb25lIHJlcG9zaXRvcnkgY29weSBpbnRvIGFub3RoZXIgcmVwb3NpdG9yeS4KQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzV2lsZGNhcmQoU3RyaW5nIHMpIHsKIAkvKiogSXMgdGhpcyBzcGVjaWZpY2F0aW9uIGFjdHVhbGx5IGEgd2lsZGNhcmQgbWF0Y2g/ICovCiAJcHJpdmF0ZSBib29sZWFuIHdpbGRjYXJkOwogCisJLyoqIElzIHRoaXMgdGhlIHNwZWNpYWwgIjoiIFJlZlNwZWM/ICovCisJcHJpdmF0ZSBib29sZWFuIG1hdGNoaW5nOworCiAJLyoqCiAJICogSG93IHN0cmljdCB0byBiZSBhYm91dCB3aWxkY2FyZHMuCiAJICoKQEAgLTcxLDYgKzc0LDcgQEAgcHVibGljIGVudW0gV2lsZGNhcmRNb2RlIHsKIAkJICovCiAJCUFMTE9XX01JU01BVENICiAJfQorCiAJLyoqIFdoZXRoZXIgYSB3aWxkY2FyZCBpcyBhbGxvd2VkIG9uIG9uZSBzaWRlIGJ1dCBub3QgdGhlIG90aGVyLiAqLwogCXByaXZhdGUgV2lsZGNhcmRNb2RlIGFsbG93TWlzbWF0Y2hlZFdpbGRjYXJkczsKIApAQCAtODcsNiArOTEsNyBAQCBwdWJsaWMgZW51bSBXaWxkY2FyZE1vZGUgewogCSAqIGFwcGxpY2F0aW9ucywgYXMgYXQgbGVhc3Qgb25lIGZpZWxkIG11c3QgYmUgc2V0IHRvIG1hdGNoIGEgc291cmNlIG5hbWUuCiAJICovCiAJcHVibGljIFJlZlNwZWMoKSB7CisJCW1hdGNoaW5nID0gZmFsc2U7CiAJCWZvcmNlID0gZmFsc2U7CiAJCXdpbGRjYXJkID0gZmFsc2U7CiAJCXNyY05hbWUgPSBDb25zdGFudHMuSEVBRDsKQEAgLTEzMywxNyArMTM4LDI1IEBAIHB1YmxpYyBSZWZTcGVjKFN0cmluZyBzcGVjLCBXaWxkY2FyZE1vZGUgbW9kZSkgewogCQkJcyA9IHMuc3Vic3RyaW5nKDEpOwogCQl9CiAKKwkJYm9vbGVhbiBtYXRjaFB1c2hTcGVjID0gZmFsc2U7CiAJCWZpbmFsIGludCBjID0gcy5sYXN0SW5kZXhPZignOicpOwogCQlpZiAoYyA9PSAwKSB7CiAJCQlzID0gcy5zdWJzdHJpbmcoMSk7Ci0JCQlpZiAoaXNXaWxkY2FyZChzKSkgeworCQkJaWYgKHMuaXNFbXB0eSgpKSB7CisJCQkJbWF0Y2hQdXNoU3BlYyA9IHRydWU7CiAJCQkJd2lsZGNhcmQgPSB0cnVlOwotCQkJCWlmIChtb2RlID09IFdpbGRjYXJkTW9kZS5SRVFVSVJFX01BVENIKSB7Ci0JCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdAotCQkJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuaW52YWxpZFdpbGRjYXJkcywgc3BlYykpOworCQkJCXNyY05hbWUgPSBDb25zdGFudHMuUl9IRUFEUyArICcqJzsKKwkJCQlkc3ROYW1lID0gc3JjTmFtZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGlzV2lsZGNhcmQocykpIHsKKwkJCQkJd2lsZGNhcmQgPSB0cnVlOworCQkJCQlpZiAobW9kZSA9PSBXaWxkY2FyZE1vZGUuUkVRVUlSRV9NQVRDSCkgeworCQkJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0CisJCQkJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuaW52YWxpZFdpbGRjYXJkcywgc3BlYykpOworCQkJCQl9CiAJCQkJfQorCQkJCWRzdE5hbWUgPSBjaGVja1ZhbGlkKHMpOwogCQkJfQotCQkJZHN0TmFtZSA9IGNoZWNrVmFsaWQocyk7CiAJCX0gZWxzZSBpZiAoYyA+IDApIHsKIAkJCVN0cmluZyBzcmMgPSBzLnN1YnN0cmluZygwLCBjKTsKIAkJCVN0cmluZyBkc3QgPSBzLnN1YnN0cmluZyhjICsgMSk7CkBAIC0xNjgsNiArMTgxLDcgQEAgcHVibGljIFJlZlNwZWMoU3RyaW5nIHNwZWMsIFdpbGRjYXJkTW9kZSBtb2RlKSB7CiAJCQl9CiAJCQlzcmNOYW1lID0gY2hlY2tWYWxpZChzKTsKIAkJfQorCQltYXRjaGluZyA9IG1hdGNoUHVzaFNwZWM7CiAJfQogCiAJLyoqCkBAIC0xOTUsNiArMjA5LDcgQEAgcHVibGljIFJlZlNwZWMoU3RyaW5nIHNwZWMpIHsKIAl9CiAKIAlwcml2YXRlIFJlZlNwZWMoUmVmU3BlYyBwKSB7CisJCW1hdGNoaW5nID0gZmFsc2U7CiAJCWZvcmNlID0gcC5pc0ZvcmNlVXBkYXRlKCk7CiAJCXdpbGRjYXJkID0gcC5pc1dpbGRjYXJkKCk7CiAJCXNyY05hbWUgPSBwLmdldFNvdXJjZSgpOwpAQCAtMjAzLDYgKzIxOCwxNyBAQCBwcml2YXRlIFJlZlNwZWMoUmVmU3BlYyBwKSB7CiAJfQogCiAJLyoqCisJICogVGVsbHMgd2hldGhlciB0aGlzIHtAbGluayBSZWZTcGVjfSBpcyB0aGUgc3BlY2lhbCAibWF0Y2hpbmciIFJlZlNwZWMgIjoiCisJICogZm9yIHB1c2hpbmcuCisJICoKKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhICJtYXRjaGluZyIgUmVmU3BlYworCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc01hdGNoaW5nKCkgeworCQlyZXR1cm4gbWF0Y2hpbmc7CisJfQorCisJLyoqCiAJICogQ2hlY2sgaWYgdGhpcyBzcGVjaWZpY2F0aW9uIHdhbnRzIHRvIGZvcmNlZnVsbHkgdXBkYXRlIHRoZSBkZXN0aW5hdGlvbi4KIAkgKgogCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHNwZWNpZmljYXRpb24gYXNrcyBmb3IgdXBkYXRlcyB3aXRob3V0IG1lcmdlIHRlc3RzLgpAQCAtMjIwLDYgKzI0Niw3IEBAIHB1YmxpYyBib29sZWFuIGlzRm9yY2VVcGRhdGUoKSB7CiAJICovCiAJcHVibGljIFJlZlNwZWMgc2V0Rm9yY2VVcGRhdGUoYm9vbGVhbiBmb3JjZVVwZGF0ZSkgewogCQlmaW5hbCBSZWZTcGVjIHIgPSBuZXcgUmVmU3BlYyh0aGlzKTsKKwkJci5tYXRjaGluZyA9IG1hdGNoaW5nOwogCQlyLmZvcmNlID0gZm9yY2VVcGRhdGU7CiAJCXJldHVybiByOwogCX0KQEAgLTMyMiw4ICszNDksNyBAQCBwdWJsaWMgUmVmU3BlYyBzZXREZXN0aW5hdGlvbihTdHJpbmcgZGVzdGluYXRpb24pIHsKIAkgKiAgICAgICAgICAgICBUaGUgd2lsZGNhcmQgc3RhdHVzIG9mIHRoZSBuZXcgc291cmNlIGRpc2FncmVlcyB3aXRoIHRoZQogCSAqICAgICAgICAgICAgIHdpbGRjYXJkIHN0YXR1cyBvZiB0aGUgbmV3IGRlc3RpbmF0aW9uLgogCSAqLwotCXB1YmxpYyBSZWZTcGVjIHNldFNvdXJjZURlc3RpbmF0aW9uKGZpbmFsIFN0cmluZyBzb3VyY2UsCi0JCQlmaW5hbCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKwlwdWJsaWMgUmVmU3BlYyBzZXRTb3VyY2VEZXN0aW5hdGlvbihTdHJpbmcgc291cmNlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKIAkJaWYgKGlzV2lsZGNhcmQoc291cmNlKSAhPSBpc1dpbGRjYXJkKGRlc3RpbmF0aW9uKSkKIAkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oSkdpdFRleHQuZ2V0KCkuc291cmNlRGVzdGluYXRpb25NdXN0TWF0Y2gpOwogCQlmaW5hbCBSZWZTcGVjIHIgPSBuZXcgUmVmU3BlYyh0aGlzKTsKQEAgLTU0MSwzNyArNTY3LDM2IEBAIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAJCWlmICghKG9iaiBpbnN0YW5jZW9mIFJlZlNwZWMpKQogCQkJcmV0dXJuIGZhbHNlOwogCQlmaW5hbCBSZWZTcGVjIGIgPSAoUmVmU3BlYykgb2JqOwotCQlpZiAoaXNGb3JjZVVwZGF0ZSgpICE9IGIuaXNGb3JjZVVwZGF0ZSgpKQorCQlpZiAoaXNGb3JjZVVwZGF0ZSgpICE9IGIuaXNGb3JjZVVwZGF0ZSgpKSB7CiAJCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChpc1dpbGRjYXJkKCkgIT0gYi5pc1dpbGRjYXJkKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmICghZXEoZ2V0U291cmNlKCksIGIuZ2V0U291cmNlKCkpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoIWVxKGdldERlc3RpbmF0aW9uKCksIGIuZ2V0RGVzdGluYXRpb24oKSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZXEoU3RyaW5nIGEsIFN0cmluZyBiKSB7Ci0JCWlmIChSZWZlcmVuY2VzLmlzU2FtZU9iamVjdChhLCBiKSkgewotCQkJcmV0dXJuIHRydWU7CiAJCX0KLQkJaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpCisJCWlmIChpc01hdGNoaW5nKCkpIHsKKwkJCXJldHVybiBiLmlzTWF0Y2hpbmcoKTsKKwkJfSBlbHNlIGlmIChiLmlzTWF0Y2hpbmcoKSkgewogCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gYS5lcXVhbHMoYik7CisJCX0KKwkJcmV0dXJuIGlzV2lsZGNhcmQoKSA9PSBiLmlzV2lsZGNhcmQoKQorCQkJCSYmIE9iamVjdHMuZXF1YWxzKGdldFNvdXJjZSgpLCBiLmdldFNvdXJjZSgpKQorCQkJCSYmIE9iamVjdHMuZXF1YWxzKGdldERlc3RpbmF0aW9uKCksIGIuZ2V0RGVzdGluYXRpb24oKSk7CiAJfQogCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlpZiAoaXNGb3JjZVVwZGF0ZSgpKQorCQlpZiAoaXNGb3JjZVVwZGF0ZSgpKSB7CiAJCQlyLmFwcGVuZCgnKycpOwotCQlpZiAoZ2V0U291cmNlKCkgIT0gbnVsbCkKLQkJCXIuYXBwZW5kKGdldFNvdXJjZSgpKTsKLQkJaWYgKGdldERlc3RpbmF0aW9uKCkgIT0gbnVsbCkgeworCQl9CisJCWlmIChpc01hdGNoaW5nKCkpIHsKIAkJCXIuYXBwZW5kKCc6Jyk7Ci0JCQlyLmFwcGVuZChnZXREZXN0aW5hdGlvbigpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChnZXRTb3VyY2UoKSAhPSBudWxsKSB7CisJCQkJci5hcHBlbmQoZ2V0U291cmNlKCkpOworCQkJfQorCQkJaWYgKGdldERlc3RpbmF0aW9uKCkgIT0gbnVsbCkgeworCQkJCXIuYXBwZW5kKCc6Jyk7CisJCQkJci5hcHBlbmQoZ2V0RGVzdGluYXRpb24oKSk7CisJCQl9CiAJCX0KIAkJcmV0dXJuIHIudG9TdHJpbmcoKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZW1vdGVSZWZVcGRhdGUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlbW90ZVJlZlVwZGF0ZS5qYXZhCmluZGV4IDQzZWFhYzcuLjIxOGU2MmMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlbW90ZVJlZlVwZGF0ZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlbW90ZVJlZlVwZGF0ZS5qYXZhCkBAIC0xMiw3ICsxMiw5IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5Ob25OdWxsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwpAQCAtMTE2LDYgKzExOCwxMiBAQCBwdWJsaWMgZW51bSBTdGF0dXMgewogCXByaXZhdGUgUmVmVXBkYXRlIGxvY2FsVXBkYXRlOwogCiAJLyoqCisJICogSWYgc2V0LCB0aGUgUmVtb3RlUmVmVXBkYXRlIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSAibWF0Y2hpbmciIFJlZlNwZWMKKwkgKiB0byBiZSBleHBhbmRlZCBhZnRlciB0aGUgYWR2ZXJ0aXNlbWVudHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGluIGEgcHVzaC4KKwkgKi8KKwlwcml2YXRlIENvbGxlY3Rpb248UmVmU3BlYz4gZmV0Y2hTcGVjczsKKworCS8qKgogCSAqIENvbnN0cnVjdCByZW1vdGUgcmVmIHVwZGF0ZSByZXF1ZXN0IGJ5IHByb3ZpZGluZyBhbiB1cGRhdGUgc3BlY2lmaWNhdGlvbi4KIAkgKiBPYmplY3QgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQKIAkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVtb3RlUmVmVXBkYXRlLlN0YXR1cyNOT1RfQVRURU1QVEVEfQpAQCAtMTU3LDkgKzE2NSw4IEBAIHB1YmxpYyBlbnVtIFN0YXR1cyB7CiAJICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAJICogICAgICAgICAgICAgaWYgc29tZSByZXF1aXJlZCBwYXJhbWV0ZXIgd2FzIG51bGwKIAkgKi8KLQlwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKGZpbmFsIFJlcG9zaXRvcnkgbG9jYWxEYiwgZmluYWwgU3RyaW5nIHNyY1JlZiwKLQkJCWZpbmFsIFN0cmluZyByZW1vdGVOYW1lLCBmaW5hbCBib29sZWFuIGZvcmNlVXBkYXRlLAotCQkJZmluYWwgU3RyaW5nIGxvY2FsTmFtZSwgZmluYWwgT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkKKwlwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKFJlcG9zaXRvcnkgbG9jYWxEYiwgU3RyaW5nIHNyY1JlZiwgU3RyaW5nIHJlbW90ZU5hbWUsCisJCQlib29sZWFuIGZvcmNlVXBkYXRlLCBTdHJpbmcgbG9jYWxOYW1lLCBPYmplY3RJZCBleHBlY3RlZE9sZE9iamVjdElkKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJdGhpcyhsb2NhbERiLCBzcmNSZWYsIHNyY1JlZiAhPSBudWxsID8gbG9jYWxEYi5yZXNvbHZlKHNyY1JlZikKIAkJCQk6IE9iamVjdElkLnplcm9JZCgpLCByZW1vdGVOYW1lLCBmb3JjZVVwZGF0ZSwgbG9jYWxOYW1lLApAQCAtMjAzLDkgKzIxMCw4IEBAIHB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoZmluYWwgUmVwb3NpdG9yeSBsb2NhbERiLCBmaW5hbCBTdHJpbmcgc3JjUmVmLAogCSAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIGlmIHNvbWUgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBudWxsCiAJICovCi0JcHVibGljIFJlbW90ZVJlZlVwZGF0ZShmaW5hbCBSZXBvc2l0b3J5IGxvY2FsRGIsIGZpbmFsIFJlZiBzcmNSZWYsCi0JCQlmaW5hbCBTdHJpbmcgcmVtb3RlTmFtZSwgZmluYWwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwKLQkJCWZpbmFsIFN0cmluZyBsb2NhbE5hbWUsIGZpbmFsIE9iamVjdElkIGV4cGVjdGVkT2xkT2JqZWN0SWQpCisJcHVibGljIFJlbW90ZVJlZlVwZGF0ZShSZXBvc2l0b3J5IGxvY2FsRGIsIFJlZiBzcmNSZWYsIFN0cmluZyByZW1vdGVOYW1lLAorCQkJYm9vbGVhbiBmb3JjZVVwZGF0ZSwgU3RyaW5nIGxvY2FsTmFtZSwgT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRoaXMobG9jYWxEYiwgc3JjUmVmICE9IG51bGwgPyBzcmNSZWYuZ2V0TmFtZSgpIDogbnVsbCwKIAkJCQlzcmNSZWYgIT0gbnVsbCA/IHNyY1JlZi5nZXRPYmplY3RJZCgpIDogbnVsbCwgcmVtb3RlTmFtZSwKQEAgLTI1NSwyOCArMjYxLDQxIEBAIHB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoZmluYWwgUmVwb3NpdG9yeSBsb2NhbERiLCBmaW5hbCBSZWYgc3JjUmVmLAogCSAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIGlmIHNvbWUgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBudWxsCiAJICovCi0JcHVibGljIFJlbW90ZVJlZlVwZGF0ZShmaW5hbCBSZXBvc2l0b3J5IGxvY2FsRGIsIGZpbmFsIFN0cmluZyBzcmNSZWYsCi0JCQlmaW5hbCBPYmplY3RJZCBzcmNJZCwgZmluYWwgU3RyaW5nIHJlbW90ZU5hbWUsCi0JCQlmaW5hbCBib29sZWFuIGZvcmNlVXBkYXRlLCBmaW5hbCBTdHJpbmcgbG9jYWxOYW1lLAotCQkJZmluYWwgT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHJlbW90ZU5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oSkdpdFRleHQuZ2V0KCkucmVtb3RlTmFtZUNhbm5vdEJlTnVsbCk7Ci0JCWlmIChzcmNJZCA9PSBudWxsICYmIHNyY1JlZiAhPSBudWxsKQotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQlKR2l0VGV4dC5nZXQoKS5zb3VyY2VSZWZEb2VzbnRSZXNvbHZlVG9BbnlPYmplY3QsIHNyY1JlZikpOworCXB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoUmVwb3NpdG9yeSBsb2NhbERiLCBTdHJpbmcgc3JjUmVmLCBPYmplY3RJZCBzcmNJZCwKKwkJCVN0cmluZyByZW1vdGVOYW1lLCBib29sZWFuIGZvcmNlVXBkYXRlLCBTdHJpbmcgbG9jYWxOYW1lLAorCQkJT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdGhpcyhsb2NhbERiLCBzcmNSZWYsIHNyY0lkLCByZW1vdGVOYW1lLCBmb3JjZVVwZGF0ZSwgbG9jYWxOYW1lLCBudWxsLAorCQkJCWV4cGVjdGVkT2xkT2JqZWN0SWQpOworCX0KIAotCQlpZiAoc3JjUmVmICE9IG51bGwpCisJcHJpdmF0ZSBSZW1vdGVSZWZVcGRhdGUoUmVwb3NpdG9yeSBsb2NhbERiLCBTdHJpbmcgc3JjUmVmLCBPYmplY3RJZCBzcmNJZCwKKwkJCVN0cmluZyByZW1vdGVOYW1lLCBib29sZWFuIGZvcmNlVXBkYXRlLCBTdHJpbmcgbG9jYWxOYW1lLAorCQkJQ29sbGVjdGlvbjxSZWZTcGVjPiBmZXRjaFNwZWNzLCBPYmplY3RJZCBleHBlY3RlZE9sZE9iamVjdElkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGZldGNoU3BlY3MgPT0gbnVsbCkgeworCQkJaWYgKHJlbW90ZU5hbWUgPT0gbnVsbCkgeworCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisJCQkJCQlKR2l0VGV4dC5nZXQoKS5yZW1vdGVOYW1lQ2Fubm90QmVOdWxsKTsKKwkJCX0KKwkJCWlmIChzcmNJZCA9PSBudWxsICYmIHNyY1JlZiAhPSBudWxsKSB7CisJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSkdpdFRleHQuZ2V0KCkuc291cmNlUmVmRG9lc250UmVzb2x2ZVRvQW55T2JqZWN0LAorCQkJCQkJc3JjUmVmKSk7CisJCQl9CisJCX0KKwkJaWYgKHNyY1JlZiAhPSBudWxsKSB7CiAJCQl0aGlzLnNyY1JlZiA9IHNyY1JlZjsKLQkJZWxzZSBpZiAoc3JjSWQgIT0gbnVsbCAmJiAhc3JjSWQuZXF1YWxzKE9iamVjdElkLnplcm9JZCgpKSkKKwkJfSBlbHNlIGlmIChzcmNJZCAhPSBudWxsICYmICFzcmNJZC5lcXVhbHMoT2JqZWN0SWQuemVyb0lkKCkpKSB7CiAJCQl0aGlzLnNyY1JlZiA9IHNyY0lkLm5hbWUoKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJdGhpcy5zcmNSZWYgPSBudWxsOwotCi0JCWlmIChzcmNJZCAhPSBudWxsKQorCQl9CisJCWlmIChzcmNJZCAhPSBudWxsKSB7CiAJCQl0aGlzLm5ld09iamVjdElkID0gc3JjSWQ7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXRoaXMubmV3T2JqZWN0SWQgPSBPYmplY3RJZC56ZXJvSWQoKTsKLQorCQl9CisJCXRoaXMuZmV0Y2hTcGVjcyA9IGZldGNoU3BlY3M7CiAJCXRoaXMucmVtb3RlTmFtZSA9IHJlbW90ZU5hbWU7CiAJCXRoaXMuZm9yY2VVcGRhdGUgPSBmb3JjZVVwZGF0ZTsKIAkJaWYgKGxvY2FsTmFtZSAhPSBudWxsICYmIGxvY2FsRGIgIT0gbnVsbCkgewpAQCAtMjkyLDggKzMxMSw5IEBAIGVsc2UgaWYgKHNyY0lkICE9IG51bGwgJiYgIXNyY0lkLmVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSkpCiAJCQkJCQk/IGxvY2FsVXBkYXRlLmdldE9sZE9iamVjdElkKCkKIAkJCQkJCTogT2JqZWN0SWQuemVyb0lkKCksCiAJCQkJCW5ld09iamVjdElkKTsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQl0cmFja2luZ1JlZlVwZGF0ZSA9IG51bGw7CisJCX0KIAkJdGhpcy5sb2NhbERiID0gbG9jYWxEYjsKIAkJdGhpcy5leHBlY3RlZE9sZE9iamVjdElkID0gZXhwZWN0ZWRPbGRPYmplY3RJZDsKIAkJdGhpcy5zdGF0dXMgPSBTdGF0dXMuTk9UX0FUVEVNUFRFRDsKQEAgLTMxNiwxMSArMzM2LDU3IEBAIGVsc2UgaWYgKHNyY0lkICE9IG51bGwgJiYgIXNyY0lkLmVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSkpCiAJICogICAgICAgICAgICAgbG9jYWwgdHJhY2tpbmcgYnJhbmNoIG9yIHNyY1JlZiBvZiBiYXNlIG9iamVjdCBubyBsb25nZXIgY2FuCiAJICogICAgICAgICAgICAgYmUgcmVzb2x2ZWQgdG8gYW55IG9iamVjdC4KIAkgKi8KLQlwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKGZpbmFsIFJlbW90ZVJlZlVwZGF0ZSBiYXNlLAotCQkJZmluYWwgT2JqZWN0SWQgbmV3RXhwZWN0ZWRPbGRPYmplY3RJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGhpcyhiYXNlLmxvY2FsRGIsIGJhc2Uuc3JjUmVmLCBiYXNlLnJlbW90ZU5hbWUsIGJhc2UuZm9yY2VVcGRhdGUsCisJcHVibGljIFJlbW90ZVJlZlVwZGF0ZShSZW1vdGVSZWZVcGRhdGUgYmFzZSwKKwkJCU9iamVjdElkIG5ld0V4cGVjdGVkT2xkT2JqZWN0SWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMoYmFzZS5sb2NhbERiLCBiYXNlLnNyY1JlZiwgYmFzZS5uZXdPYmplY3RJZCwgYmFzZS5yZW1vdGVOYW1lLAorCQkJCWJhc2UuZm9yY2VVcGRhdGUsCiAJCQkJKGJhc2UudHJhY2tpbmdSZWZVcGRhdGUgPT0gbnVsbCA/IG51bGwgOiBiYXNlLnRyYWNraW5nUmVmVXBkYXRlCi0JCQkJCQkuZ2V0TG9jYWxOYW1lKCkpLCBuZXdFeHBlY3RlZE9sZE9iamVjdElkKTsKKwkJCQkJCS5nZXRMb2NhbE5hbWUoKSksCisJCQkJYmFzZS5mZXRjaFNwZWNzLCBuZXdFeHBlY3RlZE9sZE9iamVjdElkKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgInBsYWNlaG9sZGVyIiB1cGRhdGUgZm9yIHRoZSAibWF0Y2hpbmciIFJlZlNwZWMgIjoiLgorCSAqCisJICogQHBhcmFtIGxvY2FsRGIKKwkgKiAgICAgICAgICAgIGxvY2FsIHJlcG9zaXRvcnkgdG8gcHVzaCBmcm9tCisJICogQHBhcmFtIGZvcmNlVXBkYXRlCisJICogICAgICAgICAgICB3aGV0aGVyIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyBzaGFsbCBiZSBhbGxvd2VkCisJICogQHBhcmFtIGZldGNoU3BlY3MKKwkgKiAgICAgICAgICAgIFRoZSBmZXRjaCB7QGxpbmsgUmVmU3BlY31zIHRvIHVzZSB3aGVuIHRoaXMgcGxhY2Vob2xkZXIgaXMKKwkgKiAgICAgICAgICAgIGV4cGFuZGVkIHRvIGRldGVybWluZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIHVwZGF0ZXMKKwkgKi8KKwlSZW1vdGVSZWZVcGRhdGUoUmVwb3NpdG9yeSBsb2NhbERiLCBib29sZWFuIGZvcmNlVXBkYXRlLAorCQkJQE5vbk51bGwgQ29sbGVjdGlvbjxSZWZTcGVjPiBmZXRjaFNwZWNzKSB7CisJCXRoaXMubG9jYWxEYiA9IGxvY2FsRGI7CisJCXRoaXMuZm9yY2VVcGRhdGUgPSBmb3JjZVVwZGF0ZTsKKwkJdGhpcy5mZXRjaFNwZWNzID0gZmV0Y2hTcGVjczsKKwkJdGhpcy50cmFja2luZ1JlZlVwZGF0ZSA9IG51bGw7CisJCXRoaXMuc3JjUmVmID0gbnVsbDsKKwkJdGhpcy5yZW1vdGVOYW1lID0gbnVsbDsKKwkJdGhpcy5uZXdPYmplY3RJZCA9IG51bGw7CisJCXRoaXMuc3RhdHVzID0gU3RhdHVzLk5PVF9BVFRFTVBURUQ7CisJfQorCisJLyoqCisJICogVGVsbHMgd2hldGhlciB0aGlzIHtAbGluayBSZW1vdGVSZWZVcGRhdGV9IGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEKKwkgKiAibWF0Y2hpbmciIHtAbGluayBSZWZTcGVjfS4KKwkgKgorCSAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwbGFjZWhvbGRlciwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGJvb2xlYW4gaXNNYXRjaGluZygpIHsKKwkJcmV0dXJuIGZldGNoU3BlY3MgIT0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZldGNoIHtAbGluayBSZWZTcGVjfXMgb2YgdGhpcyB7QGxpbmsgUmVtb3RlUmVmVXBkYXRlfS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZldGNoIHtAbGluayBSZWZTcGVjfXMsIG9yIHtAY29kZSBudWxsfSBpZgorCSAqICAgICAgICAge0Bjb2RlIHRoaXMufXtAbGluayAjaXNNYXRjaGluZygpfSB7QGNvZGUgPT0gZmFsc2V9CisJICovCisJQ29sbGVjdGlvbjxSZWZTcGVjPiBnZXRGZXRjaFNwZWNzKCkgeworCQlyZXR1cm4gZmV0Y2hTcGVjczsKIAl9CiAKIAkvKioKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKaW5kZXggMjEyYTRlNC4uNDhjYWNmMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDIwIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTQ0LDYgKzQ0LDE0IEBAIHByaXZhdGUgU3NoQ29uc3RhbnRzKCkgewogCiAJLy8gQ29uZmlnIGZpbGUga2V5cwogCisJLyoqCisJICogUHJvcGVydHkgdG8gY29udHJvbCB3aGV0aGVyIHByaXZhdGUga2V5cyBhcmUgYWRkZWQgdG8gYW4gU1NIIGFnZW50LCBpZgorCSAqIG9uZSBpcyBydW5uaW5nLCBhZnRlciBoYXZpbmcgYmVlbiBsb2FkZWQuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREX0tFWVNfVE9fQUdFTlQgPSAiQWRkS2V5c1RvQWdlbnQiOworCiAJLyoqIEtleSBpbiBhbiBzc2ggY29uZmlnIGZpbGUuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFUQ0hfTU9ERSA9ICJCYXRjaE1vZGUiOwogCkBAIC02Miw2ICs3MCwxNSBAQCBwcml2YXRlIFNzaENvbnN0YW50cygpIHsKIAkvKiogS2V5IGluIGFuIHNzaCBjb25maWcgZmlsZS4gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05ORUNUSU9OX0FUVEVNUFRTID0gIkNvbm5lY3Rpb25BdHRlbXB0cyI7CiAKKwkvKioKKwkgKiBBbiBPcGVuU1NIIHRpbWUgdmFsdWUgZm9yIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuIEluIE9wZW5TU0gsIHRoaXMKKwkgKiBpbmNsdWRlcyBldmVyeXRoaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIGluaXRpYWwga2V5IGV4Y2hhbmdlOyBpbiBKR2l0IGl0CisJICogY292ZXJzIG9ubHkgdGhlIHVuZGVybHlpbmcgVENQIGNvbm5lY3QuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVF9USU1FT1VUID0gIkNvbm5lY3RUaW1lb3V0IjsKKwogCS8qKiBLZXkgaW4gYW4gc3NoIGNvbmZpZyBmaWxlLiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRST0xfUEFUSCA9ICJDb250cm9sUGF0aCI7CiAKQEAgLTE1OSw2ICsxNzYsMTQgQEAgcHJpdmF0ZSBTc2hDb25zdGFudHMoKSB7CiAJLyoqIEtleSBpbiBhbiBzc2ggY29uZmlnIGZpbGUuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVNT1RFX0ZPUldBUkQgPSAiUmVtb3RlRm9yd2FyZCI7CiAKKwkvKioKKwkgKiAoQWJzb2x1dGUpIHBhdGggdG8gYSBtaWRkbGV3YXJlIGxpYnJhcnkgdGhlIFNTSCBhZ2VudCBzaGFsbCB1c2UgdG8gbG9hZAorCSAqIFNLIChVMkYpIGtleXMuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVVJJVFlfS0VZX1BST1ZJREVSID0gIlNlY3VyaXR5S2V5UHJvdmlkZXIiOworCiAJLyoqIEtleSBpbiBhbiBzc2ggY29uZmlnIGZpbGUuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VORF9FTlYgPSAiU2VuZEVudiI7CiAKQEAgLTIyOSw0ICsyNTQsMTIgQEAgcHJpdmF0ZSBTc2hDb25zdGFudHMoKSB7CiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBERUZBVUxUX0lERU5USVRJRVMgPSB7IC8vCiAJCQlJRF9SU0EsIElEX0RTQSwgSURfRUNEU0EsIElEX0VEMjU1MTkKIAl9OworCisJLyoqCisJICogTmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaG9sZGluZyB0aGUgVW5peCBkb21haW4gc29ja2V0IGZvcgorCSAqIGNvbW11bmljYXRpb24gd2l0aCBhbiBTU0ggYWdlbnQuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX1NTSF9BVVRIX1NPQ0tFVCA9ICJTU0hfQVVUSF9TT0NLIjsKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYWNraW5nUmVmVXBkYXRlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFja2luZ1JlZlVwZGF0ZS5qYXZhCmluZGV4IDY5NmNhN2MuLjUxYmMwN2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYWNraW5nUmVmVXBkYXRlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhY2tpbmdSZWZVcGRhdGUuamF2YQpAQCAtMTIsNiArMTIsOCBAQAogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0OwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BbnlPYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZVcGRhdGU7CkBAIC0xODQsOSArMTg2LDEzIEBAIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAJCWlmIChmb3JjZVVwZGF0ZSkKIAkJCXNiLmFwcGVuZCgiIChmb3JjZWQpIik7CiAJCXNiLmFwcGVuZCgiICIpOwotCQlzYi5hcHBlbmQob2xkT2JqZWN0SWQgPT0gbnVsbCA/ICIiIDogb2xkT2JqZWN0SWQuYWJicmV2aWF0ZSg3KS5uYW1lKCkpOworCQlzYi5hcHBlbmQob2xkT2JqZWN0SWQgPT0gbnVsbCA/ICIiCisJCQkJOiBvbGRPYmplY3RJZC5hYmJyZXZpYXRlKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkKKwkJCQkJCS5uYW1lKCkpOwogCQlzYi5hcHBlbmQoIi4uIik7Ci0JCXNiLmFwcGVuZChuZXdPYmplY3RJZCA9PSBudWxsID8gIiIgOiBuZXdPYmplY3RJZC5hYmJyZXZpYXRlKDcpLm5hbWUoKSk7CisJCXNiLmFwcGVuZChuZXdPYmplY3RJZCA9PSBudWxsID8gIiIKKwkJCQk6IG5ld09iamVjdElkLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKQorCQkJCQkJLm5hbWUoKSk7CiAJCXNiLmFwcGVuZCgiXSIpOwogCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydC5qYXZhCmluZGV4IDViNzgxYWMuLjBlYWI0NDMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydC5qYXZhCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIE1hcmVrIFphd2lyc2tpIDxtYXJlay56YXdpcnNraUBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFJvYmluIFJvc2VuYmVyZyA8cm9iaW4ucm9zZW5iZXJnQGRld2lyZS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMjAgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMjIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00MCw3ICs0MCw2IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob3RTdXBwb3J0ZWRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuVHJhbnNwb3J0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaG9va3MuSG9va3M7CkBAIC01OTAsNiArNTg5LDExIEBAIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxSZW1vdGVSZWZVcGRhdGU+IGZpbmRSZW1vdGVSZWZVcGRhdGVzRm9yKAogCQlmaW5hbCBDb2xsZWN0aW9uPFJlZlNwZWM+IHByb2NSZWZzID0gZXhwYW5kUHVzaFdpbGRjYXJkc0ZvcihkYiwgc3BlY3MpOwogCiAJCWZvciAoUmVmU3BlYyBzcGVjIDogcHJvY1JlZnMpIHsKKwkJCWlmIChzcGVjLmlzTWF0Y2hpbmcoKSkgeworCQkJCXJlc3VsdC5hZGQobmV3IFJlbW90ZVJlZlVwZGF0ZShkYiwgc3BlYy5pc0ZvcmNlVXBkYXRlKCksCisJCQkJCQlmZXRjaFNwZWNzKSk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlTdHJpbmcgc3JjU3BlYyA9IHNwZWMuZ2V0U291cmNlKCk7CiAJCQlmaW5hbCBSZWYgc3JjUmVmID0gZGIuZmluZFJlZihzcmNTcGVjKTsKIAkJCWlmIChzcmNSZWYgIT0gbnVsbCkKQEAgLTY1NiwxNCArNjYwLDE4IEBAIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxSZW1vdGVSZWZVcGRhdGU+IGZpbmRSZW1vdGVSZWZVcGRhdGVzRm9yKAogCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb248UmVmU3BlYz4gZXhwYW5kUHVzaFdpbGRjYXJkc0ZvcigKIAkJCWZpbmFsIFJlcG9zaXRvcnkgZGIsIGZpbmFsIENvbGxlY3Rpb248UmVmU3BlYz4gc3BlY3MpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBMaXN0PFJlZj4gbG9jYWxSZWZzID0gZGIuZ2V0UmVmRGF0YWJhc2UoKS5nZXRSZWZzKCk7CiAJCWZpbmFsIENvbGxlY3Rpb248UmVmU3BlYz4gcHJvY1JlZnMgPSBuZXcgTGlua2VkSGFzaFNldDw+KCk7CiAKKwkJTGlzdDxSZWY+IGxvY2FsUmVmcyA9IG51bGw7CiAJCWZvciAoUmVmU3BlYyBzcGVjIDogc3BlY3MpIHsKLQkJCWlmIChzcGVjLmlzV2lsZGNhcmQoKSkgeworCQkJaWYgKCFzcGVjLmlzTWF0Y2hpbmcoKSAmJiBzcGVjLmlzV2lsZGNhcmQoKSkgeworCQkJCWlmIChsb2NhbFJlZnMgPT0gbnVsbCkgeworCQkJCQlsb2NhbFJlZnMgPSBkYi5nZXRSZWZEYXRhYmFzZSgpLmdldFJlZnMoKTsKKwkJCQl9CiAJCQkJZm9yIChSZWYgbG9jYWxSZWYgOiBsb2NhbFJlZnMpIHsKLQkJCQkJaWYgKHNwZWMubWF0Y2hTb3VyY2UobG9jYWxSZWYpKQorCQkJCQlpZiAoc3BlYy5tYXRjaFNvdXJjZShsb2NhbFJlZikpIHsKIAkJCQkJCXByb2NSZWZzLmFkZChzcGVjLmV4cGFuZEZyb21Tb3VyY2UobG9jYWxSZWYpKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJvY1JlZnMuYWRkKHNwZWMpOwpAQCAtNjcyLDcgKzY4MCw3IEBAIHByaXZhdGUgc3RhdGljIENvbGxlY3Rpb248UmVmU3BlYz4gZXhwYW5kUHVzaFdpbGRjYXJkc0ZvcigKIAkJcmV0dXJuIHByb2NSZWZzOwogCX0KIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBmaW5kVHJhY2tpbmdSZWZOYW1lKGZpbmFsIFN0cmluZyByZW1vdGVOYW1lLAorCXN0YXRpYyBTdHJpbmcgZmluZFRyYWNraW5nUmVmTmFtZShmaW5hbCBTdHJpbmcgcmVtb3RlTmFtZSwKIAkJCWZpbmFsIENvbGxlY3Rpb248UmVmU3BlYz4gZmV0Y2hTcGVjcykgewogCQkvLyB0cnkgdG8gZmluZCBtYXRjaGluZyB0cmFja2luZyByZWZzCiAJCWZvciAoUmVmU3BlYyBmZXRjaFNwZWMgOiBmZXRjaFNwZWNzKSB7CkBAIC0xMzcxLDE2ICsxMzc5LDkgQEAgcHVibGljIFB1c2hSZXN1bHQgcHVzaChmaW5hbCBQcm9ncmVzc01vbml0b3IgbW9uaXRvciwKIAkJCWlmICh0b1B1c2guaXNFbXB0eSgpKQogCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oSkdpdFRleHQuZ2V0KCkubm90aGluZ1RvUHVzaCk7CiAJCX0KLQkJaWYgKHByZVB1c2ggIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlwcmVQdXNoLnNldFJlZnModG9QdXNoKTsKLQkJCQlwcmVQdXNoLmNhbGwoKTsKLQkJCX0gY2F0Y2ggKEFib3J0ZWRCeUhvb2tFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQl9Ci0JCX0KIAotCQlmaW5hbCBQdXNoUHJvY2VzcyBwdXNoUHJvY2VzcyA9IG5ldyBQdXNoUHJvY2Vzcyh0aGlzLCB0b1B1c2gsIG91dCk7CisJCWZpbmFsIFB1c2hQcm9jZXNzIHB1c2hQcm9jZXNzID0gbmV3IFB1c2hQcm9jZXNzKHRoaXMsIHRvUHVzaCwgcHJlUHVzaCwKKwkJCQlvdXQpOwogCQlyZXR1cm4gcHVzaFByb2Nlc3MuZXhlY3V0ZShtb25pdG9yKTsKIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VwbG9hZFBhY2suamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VwbG9hZFBhY2suamF2YQppbmRleCAwYzIzYzhjLi40NmFiZTM0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9VcGxvYWRQYWNrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVXBsb2FkUGFjay5qYXZhCkBAIC0yMzU4LDcgKzIzNTgsNyBAQCBlbHNlIGlmIChyZWYuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoQ29uc3RhbnRzLlJfSEVBRFMpKQogCQkJCQkJOiByZXEuZ2V0RGVwdGgoKSAtIDE7CiAJCQkJcHcuc2V0U2hhbGxvd1BhY2socmVxLmdldERlcHRoKCksIHVuc2hhbGxvd0NvbW1pdHMpOwogCi0JCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikgLy8gT3duZXJzaGlwIGlzIHRyYW5zZmVycmVkIGJlbG93CisJCQkJLy8gT3duZXJzaGlwIGlzIHRyYW5zZmVycmVkIGJlbG93CiAJCQkJRGVwdGhXYWxrLlJldldhbGsgZHcgPSBuZXcgRGVwdGhXYWxrLlJldldhbGsoCiAJCQkJCQl3YWxrLmdldE9iamVjdFJlYWRlcigpLCB3YWxrRGVwdGgpOwogCQkJCWR3LnNldERlZXBlblNpbmNlKHJlcS5nZXREZWVwZW5TaW5jZSgpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3Jlc29sdmVyL0ZpbGVSZXNvbHZlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvcmVzb2x2ZXIvRmlsZVJlc29sdmVyLmphdmEKaW5kZXggM2QxNWVmNS4uMDQ2ZjM5NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvcmVzb2x2ZXIvRmlsZVJlc29sdmVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvcmVzb2x2ZXIvRmlsZVJlc29sdmVyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyLCBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xOCwxMSArMTgsMTEgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlJlcG9zaXRvcnlOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5Q2FjaGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeUNhY2hlLkZpbGVLZXk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKIAogLyoqCiAgKiBEZWZhdWx0IHJlc29sdmVyIHNlcnZpbmcgZnJvbSB0aGUgbG9jYWwgZmlsZXN5c3RlbS4KQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljIFJlcG9zaXRvcnkgb3BlbihDIHJlcSwgU3RyaW5nIG5hbWUpCiAJCWlmIChpc1VucmVhc29uYWJsZU5hbWUobmFtZSkpCiAJCQl0aHJvdyBuZXcgUmVwb3NpdG9yeU5vdEZvdW5kRXhjZXB0aW9uKG5hbWUpOwogCi0JCVJlcG9zaXRvcnkgZGIgPSBleHBvcnRzLmdldChuYW1lV2l0aERvdEdpdChuYW1lKSk7CisJCVJlcG9zaXRvcnkgZGIgPSBleHBvcnRzLmdldChTdHJpbmdVdGlscy5uYW1lV2l0aERvdEdpdChuYW1lKSk7CiAJCWlmIChkYiAhPSBudWxsKSB7CiAJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlyZXR1cm4gZGI7CkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGljIHZvaWQgc2V0RXhwb3J0QWxsKGJvb2xlYW4gZXhwb3J0KSB7CiAJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBpbnN0YW5jZS4KIAkgKi8KIAlwdWJsaWMgdm9pZCBleHBvcnRSZXBvc2l0b3J5KFN0cmluZyBuYW1lLCBSZXBvc2l0b3J5IGRiKSB7Ci0JCWV4cG9ydHMucHV0KG5hbWVXaXRoRG90R2l0KG5hbWUpLCBkYik7CisJCWV4cG9ydHMucHV0KFN0cmluZ1V0aWxzLm5hbWVXaXRoRG90R2l0KG5hbWUpLCBkYik7CiAJfQogCiAJLyoqCkBAIC0xOTcsMTIgKzE5Nyw2IEBAIGVsc2UgaWYgKGRiLmdldERpcmVjdG9yeSgpICE9IG51bGwpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5hbWVXaXRoRG90R2l0KFN0cmluZyBuYW1lKSB7Ci0JCWlmIChuYW1lLmVuZHNXaXRoKENvbnN0YW50cy5ET1RfR0lUX0VYVCkpCi0JCQlyZXR1cm4gbmFtZTsKLQkJcmV0dXJuIG5hbWUgKyBDb25zdGFudHMuRE9UX0dJVF9FWFQ7Ci0JfQotCiAJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1VucmVhc29uYWJsZU5hbWUoU3RyaW5nIG5hbWUpIHsKIAkJaWYgKG5hbWUubGVuZ3RoKCkgPT0gMCkKIAkJCXJldHVybiB0cnVlOyAvLyBubyBlbXB0eSBwYXRocwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsay5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsay5qYXZhCmluZGV4IDFmNjE0ZTMuLjgyNjk2NjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1RyZWVXYWxrLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIEdvb2dsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMjIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgc3RhdGljIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfODsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CkBAIC03Myw2ICs3NCw3IEBACiAgKiB0aHJlYWRzLgogICovCiBwdWJsaWMgY2xhc3MgVHJlZVdhbGsgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlLCBBdHRyaWJ1dGVzUHJvdmlkZXIgeworCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQWJzdHJhY3RUcmVlSXRlcmF0b3JbXSBOT19UUkVFUyA9IHt9OwogCiAJLyoqCkBAIC05Miw3ICs5NCw3IEBAIHB1YmxpYyBlbnVtIE9wZXJhdGlvblR5cGUgewogCX0KIAogCS8qKgotCSAqICAgICAgICAgICAgVHlwZSBvZiBvcGVyYXRpb24geW91IHdhbnQgdG8gcmV0cmlldmUgdGhlIGdpdCBhdHRyaWJ1dGVzIGZvci4KKwkgKiBUeXBlIG9mIG9wZXJhdGlvbiB5b3Ugd2FudCB0byByZXRyaWV2ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMgZm9yLgogCSAqLwogCXByaXZhdGUgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUDsKIApAQCAtMjg0LDExICsyODYsMjAgQEAgcHVibGljIHN0YXRpYyBUcmVlV2FsayBmb3JQYXRoKGZpbmFsIFJlcG9zaXRvcnkgZGIsIGZpbmFsIFN0cmluZyBwYXRoLAogCiAJQWJzdHJhY3RUcmVlSXRlcmF0b3IgY3VycmVudEhlYWQ7CiAKLQkvKiogQ2FjaGVkIGF0dHJpYnV0ZSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgKi8KLQlwcml2YXRlIEF0dHJpYnV0ZXMgYXR0cnMgPSBudWxsOworCS8qKgorCSAqIENhY2hlZCBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBlbnRyeTsgcGVyIHRyZWUuIEluZGV4IGkrMSBpcyBmb3IgdHJlZQorCSAqIGk7IGluZGV4IDAgaXMgZm9yIHRoZSBkZXByZWNhdGVkIGxlZ2FjeSBiZWhhdmlvci4KKwkgKi8KKwlwcml2YXRlIEF0dHJpYnV0ZXNbXSBhdHRyczsKIAotCS8qKiBDYWNoZWQgYXR0cmlidXRlcyBoYW5kbGVyICovCi0JcHJpdmF0ZSBBdHRyaWJ1dGVzSGFuZGxlciBhdHRyaWJ1dGVzSGFuZGxlcjsKKwkvKioKKwkgKiBDYWNoZWQgYXR0cmlidXRlcyBoYW5kbGVyOyBwZXIgdHJlZS4gSW5kZXggaSsxIGlzIGZvciB0cmVlIGk7IGluZGV4IDAgaXMKKwkgKiBmb3IgdGhlIGRlcHJlY2F0ZWQgbGVnYWN5IGJlaGF2aW9yLgorCSAqLworCXByaXZhdGUgQXR0cmlidXRlc0hhbmRsZXJbXSBhdHRyaWJ1dGVzSGFuZGxlcnM7CisKKwkvKiogQ2FuIGJlIHNldCB0byBpZGVudGlmeSB0aGUgdHJlZSB0byB1c2UgZm9yIHtAbGluayAjZ2V0QXR0cmlidXRlcygpfS4gKi8KKwlwcml2YXRlIGludCBoZWFkSW5kZXggPSAtMTsKIAogCXByaXZhdGUgQ29uZmlnIGNvbmZpZzsKIApAQCAtNTE1LDYgKzUyNiwyNCBAQCBwdWJsaWMgQXR0cmlidXRlc05vZGVQcm92aWRlciBnZXRBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyKCkgewogCX0KIAogCS8qKgorCSAqIElkZW50aWZpZXMgdGhlIHRyZWUgYXQgdGhlIGdpdmVuIGluZGV4IGFzIHRoZSBoZWFkIHRyZWUuIFRoaXMgaXMgdGhlIHRyZWUKKwkgKiB1c2UgYnkgZGVmYXVsdCB0byBkZXRlcm1pbmUgYXR0cmlidXRlcyBhbmQgRU9MIG1vZGVzLgorCSAqCisJICogQHBhcmFtIGluZGV4CisJICogICAgICAgICAgICBvZiB0aGUgdHJlZSB0byB1c2UgYXMgaGVhZAorCSAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIZWFkKGludCBpbmRleCkgeworCQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRyZWVzLmxlbmd0aCkgeworCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSGVhZCBpbmRleCAiICsgaW5kZXggLy8kTk9OLU5MUy0xJAorCQkJCQkrICIgb3V0IG9mIHJhbmdlIFswLCIgKyB0cmVlcy5sZW5ndGggKyAnKScpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJaGVhZEluZGV4ID0gaW5kZXg7CisJfQorCisJLyoqCiAJICoge0Bpbmhlcml0RG9jfQogCSAqIDxwPgogCSAqIFJldHJpZXZlIHRoZSBnaXQgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCkBAIC01NTYsMjUgKzU4NSw1MSBAQCBwdWJsaWMgQXR0cmlidXRlc05vZGVQcm92aWRlciBnZXRBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyKCkgewogCSAqLwogCUBPdmVycmlkZQogCXB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7Ci0JCWlmIChhdHRycyAhPSBudWxsKQotCQkJcmV0dXJuIGF0dHJzOworCQlyZXR1cm4gZ2V0QXR0cmlidXRlcyhoZWFkSW5kZXgpOworCX0KIAorCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZ2l0IGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGdpdmVuIHRyZWUuCisJICoKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKiAgICAgICAgICAgIG9mIHRoZSB0cmVlIHRvIHVzZSBhcyBiYXNlIGZvciB0aGUgYXR0cmlidXRlcworCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZXMKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIEF0dHJpYnV0ZXMgZ2V0QXR0cmlidXRlcyhpbnQgaW5kZXgpIHsKKwkJaW50IGF0dHJJbmRleCA9IGluZGV4ICsgMTsKKwkJQXR0cmlidXRlcyByZXN1bHQgPSBhdHRyc1thdHRySW5kZXhdOworCQlpZiAocmVzdWx0ICE9IG51bGwpIHsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KIAkJaWYgKGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPT0gbnVsbCkgewotCQkJLy8gVGhlIHdvcmsgdHJlZSBzaG91bGQgaGF2ZSBhIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgdG8gYmUgYWJsZSB0bwotCQkJLy8gcmV0cmlldmUgdGhlIGluZm8gYW5kIGdsb2JhbCBhdHRyaWJ1dGVzIG5vZGUKIAkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAJCQkJCSJUaGUgdHJlZSB3YWxrIHNob3VsZCBoYXZlIG9uZSBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHNldCBpbiBvcmRlciB0byBjb21wdXRlIHRoZSBnaXQgYXR0cmlidXRlcy4iKTsgLy8kTk9OLU5MUy0xJAogCQl9CiAKIAkJdHJ5IHsKLQkJCS8vIExhenkgY3JlYXRlIHRoZSBhdHRyaWJ1dGVzSGFuZGxlciBvbiB0aGUgZmlyc3QgYWNjZXNzIG9mCi0JCQkvLyBhdHRyaWJ1dGVzLiBUaGlzIHJlcXVpcmVzIHRoZSBpbmZvLCBnbG9iYWwgYW5kIHJvb3QKLQkJCS8vIGF0dHJpYnV0ZXMgbm9kZXMKLQkJCWlmIChhdHRyaWJ1dGVzSGFuZGxlciA9PSBudWxsKSB7Ci0JCQkJYXR0cmlidXRlc0hhbmRsZXIgPSBuZXcgQXR0cmlidXRlc0hhbmRsZXIodGhpcyk7CisJCQlBdHRyaWJ1dGVzSGFuZGxlciBoYW5kbGVyID0gYXR0cmlidXRlc0hhbmRsZXJzW2F0dHJJbmRleF07CisJCQlpZiAoaGFuZGxlciA9PSBudWxsKSB7CisJCQkJaWYgKGluZGV4IDwgMCkgeworCQkJCQkvLyBMZWdhY3kgYmVoYXZpb3IgKGhlYWRJbmRleCBub3Qgc2V0LCBnZXRBdHRyaWJ1dGVzKCkgYWJvdmUKKwkJCQkJLy8gY2FsbGVkKQorCQkJCQloYW5kbGVyID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHRoaXMsICgpIC0+IHsKKwkJCQkJCXJldHVybiBnZXRUcmVlKENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpOworCQkJCQl9KTsKKwkJCQl9IGVsc2UgeworCQkJCQloYW5kbGVyID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHRoaXMsICgpIC0+IHsKKwkJCQkJCUFic3RyYWN0VHJlZUl0ZXJhdG9yIHRyZWUgPSB0cmVlc1tpbmRleF07CisJCQkJCQlpZiAodHJlZSBpbnN0YW5jZW9mIENhbm9uaWNhbFRyZWVQYXJzZXIpIHsKKwkJCQkJCQlyZXR1cm4gKENhbm9uaWNhbFRyZWVQYXJzZXIpIHRyZWU7CisJCQkJCQl9CisJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJfSk7CisJCQkJfQorCQkJCWF0dHJpYnV0ZXNIYW5kbGVyc1thdHRySW5kZXhdID0gaGFuZGxlcjsKIAkJCX0KLQkJCWF0dHJzID0gYXR0cmlidXRlc0hhbmRsZXIuZ2V0QXR0cmlidXRlcygpOwotCQkJcmV0dXJuIGF0dHJzOworCQkJcmVzdWx0ID0gaGFuZGxlci5nZXRBdHRyaWJ1dGVzKCk7CisJCQlhdHRyc1thdHRySW5kZXhdID0gcmVzdWx0OworCQkJcmV0dXJuIHJlc3VsdDsKIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogCQkJdGhyb3cgbmV3IEpHaXRJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3Igd2hpbGUgcGFyc2luZyBhdHRyaWJ1dGVzIiwgLy8kTk9OLU5MUy0xJAogCQkJCQllKTsKQEAgLTU5NSwxMSArNjUwLDM0IEBAIHB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7CiAJICovCiAJQE51bGxhYmxlCiAJcHVibGljIEVvbFN0cmVhbVR5cGUgZ2V0RW9sU3RyZWFtVHlwZShPcGVyYXRpb25UeXBlIG9wVHlwZSkgewotCQlpZiAoYXR0cmlidXRlc05vZGVQcm92aWRlciA9PSBudWxsIHx8IGNvbmZpZyA9PSBudWxsKQorCQlpZiAoYXR0cmlidXRlc05vZGVQcm92aWRlciA9PSBudWxsIHx8IGNvbmZpZyA9PSBudWxsKSB7CiAJCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIEVvbFN0cmVhbVR5cGVVdGlsLmRldGVjdFN0cmVhbVR5cGUoCi0JCQkJb3BUeXBlICE9IG51bGwgPyBvcFR5cGUgOiBvcGVyYXRpb25UeXBlLAotCQkJCQljb25maWcuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpLCBnZXRBdHRyaWJ1dGVzKCkpOworCQl9CisJCU9wZXJhdGlvblR5cGUgb3AgPSBvcFR5cGUgIT0gbnVsbCA/IG9wVHlwZSA6IG9wZXJhdGlvblR5cGU7CisJCXJldHVybiBFb2xTdHJlYW1UeXBlVXRpbC5kZXRlY3RTdHJlYW1UeXBlKG9wLAorCQkJCWNvbmZpZy5nZXQoV29ya2luZ1RyZWVPcHRpb25zLktFWSksIGdldEF0dHJpYnV0ZXMoKSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBFT0wgc3RyZWFtIHR5cGUgb2YgdGhlIGN1cnJlbnQgZW50cnkgZm9yIGNoZWNraW5nIG91dCB1c2luZyB0aGUKKwkgKiBjb25maWcgYW5kIHtAbGluayAjZ2V0QXR0cmlidXRlcygpfS4KKwkgKgorCSAqIEBwYXJhbSB0cmVlCisJICogICAgICAgICAgICBpbmRleCBvZiB0aGUgdHJlZSB0aGUgY2hlY2stb3V0IGlzIHRvIGJlIGZyb20KKwkgKiBAcmV0dXJuIHRoZSBFT0wgc3RyZWFtIHR5cGUgb2YgdGhlIGN1cnJlbnQgZW50cnkgdXNpbmcgdGhlIGNvbmZpZyBhbmQKKwkgKiAgICAgICAgIHtAbGluayAjZ2V0QXR0cmlidXRlcygpfS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG1heSByZXR1cm4gbnVsbAorCSAqICAgICAgICAgaWYgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrfSBpcyBub3QgYmFzZWQgb24KKwkgKiAgICAgICAgIGEgd29ya2luZyB0cmVlCisJICogQHNpbmNlIDYuMQorCSAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBFb2xTdHJlYW1UeXBlIGdldENoZWNrb3V0RW9sU3RyZWFtVHlwZShpbnQgdHJlZSkgeworCQlpZiAoYXR0cmlidXRlc05vZGVQcm92aWRlciA9PSBudWxsIHx8IGNvbmZpZyA9PSBudWxsKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQlBdHRyaWJ1dGVzIGF0dHIgPSBnZXRBdHRyaWJ1dGVzKHRyZWUpOworCQlyZXR1cm4gRW9sU3RyZWFtVHlwZVV0aWwuZGV0ZWN0U3RyZWFtVHlwZShPcGVyYXRpb25UeXBlLkNIRUNLT1VUX09QLAorCQkJCWNvbmZpZy5nZXQoV29ya2luZ1RyZWVPcHRpb25zLktFWSksIGF0dHIpOwogCX0KIAogCS8qKgpAQCAtNjA3LDcgKzY4NSw4IEBAIHB1YmxpYyBFb2xTdHJlYW1UeXBlIGdldEVvbFN0cmVhbVR5cGUoT3BlcmF0aW9uVHlwZSBvcFR5cGUpIHsKIAkgKi8KIAlwdWJsaWMgdm9pZCByZXNldCgpIHsKIAkJYXR0cnMgPSBudWxsOwotCQlhdHRyaWJ1dGVzSGFuZGxlciA9IG51bGw7CisJCWF0dHJpYnV0ZXNIYW5kbGVycyA9IG51bGw7CisJCWhlYWRJbmRleCA9IC0xOwogCQl0cmVlcyA9IE5PX1RSRUVTOwogCQlhZHZhbmNlID0gZmFsc2U7CiAJCWRlcHRoID0gMDsKQEAgLTY1MSw3ICs3MzAsOSBAQCBwdWJsaWMgdm9pZCByZXNldChBbnlPYmplY3RJZCBpZCkgdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sCiAKIAkJYWR2YW5jZSA9IGZhbHNlOwogCQlkZXB0aCA9IDA7Ci0JCWF0dHJzID0gbnVsbDsKKwkJYXR0cnMgPSBuZXcgQXR0cmlidXRlc1syXTsKKwkJYXR0cmlidXRlc0hhbmRsZXJzID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyWzJdOworCQloZWFkSW5kZXggPSAtMTsKIAl9CiAKIAkvKioKQEAgLTcwMSw3ICs3ODIsMTQgQEAgcHVibGljIHZvaWQgcmVzZXQoQW55T2JqZWN0SWQuLi4gaWRzKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwKIAkJdHJlZXMgPSByOwogCQlhZHZhbmNlID0gZmFsc2U7CiAJCWRlcHRoID0gMDsKLQkJYXR0cnMgPSBudWxsOworCQlpZiAob2xkTGVuID09IG5ld0xlbikgeworCQkJQXJyYXlzLmZpbGwoYXR0cnMsIG51bGwpOworCQkJQXJyYXlzLmZpbGwoYXR0cmlidXRlc0hhbmRsZXJzLCBudWxsKTsKKwkJfSBlbHNlIHsKKwkJCWF0dHJzID0gbmV3IEF0dHJpYnV0ZXNbbmV3TGVuICsgMV07CisJCQlhdHRyaWJ1dGVzSGFuZGxlcnMgPSBuZXcgQXR0cmlidXRlc0hhbmRsZXJbbmV3TGVuICsgMV07CisJCX0KKwkJaGVhZEluZGV4ID0gLTE7CiAJfQogCiAJLyoqCkBAIC03NTgsNiArODQ2LDE2IEBAIHB1YmxpYyBpbnQgYWRkVHJlZShBYnN0cmFjdFRyZWVJdGVyYXRvciBwKSB7CiAJCXAubWF0Y2hTaGlmdCA9IDA7CiAKIAkJdHJlZXMgPSBuZXdUcmVlczsKKwkJaWYgKGF0dHJzID09IG51bGwpIHsKKwkJCWF0dHJzID0gbmV3IEF0dHJpYnV0ZXNbbiArIDJdOworCQl9IGVsc2UgeworCQkJYXR0cnMgPSBBcnJheXMuY29weU9mKGF0dHJzLCBuICsgMik7CisJCX0KKwkJaWYgKGF0dHJpYnV0ZXNIYW5kbGVycyA9PSBudWxsKSB7CisJCQlhdHRyaWJ1dGVzSGFuZGxlcnMgPSBuZXcgQXR0cmlidXRlc0hhbmRsZXJbbiArIDJdOworCQl9IGVsc2UgeworCQkJYXR0cmlidXRlc0hhbmRsZXJzID0gQXJyYXlzLmNvcHlPZihhdHRyaWJ1dGVzSGFuZGxlcnMsIG4gKyAyKTsKKwkJfQogCQlyZXR1cm4gbjsKIAl9CiAKQEAgLTgwMCw3ICs4OTgsNyBAQCBwdWJsaWMgYm9vbGVhbiBuZXh0KCkgdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sCiAJCQl9CiAKIAkJCWZvciAoOzspIHsKLQkJCQlhdHRycyA9IG51bGw7CisJCQkJQXJyYXlzLmZpbGwoYXR0cnMsIG51bGwpOwogCQkJCWZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yIHQgPSBtaW4oKTsKIAkJCQlpZiAodC5lb2YoKSkgewogCQkJCQlpZiAoZGVwdGggPiAwKSB7CkBAIC0xMjU1LDcgKzEzNTMsNyBAQCBwdWJsaWMgYm9vbGVhbiBpc1Bvc3RDaGlsZHJlbigpIHsKIAkgKi8KIAlwdWJsaWMgdm9pZCBlbnRlclN1YnRyZWUoKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwKIAkJCUluY29ycmVjdE9iamVjdFR5cGVFeGNlcHRpb24sIENvcnJ1cHRPYmplY3RFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJYXR0cnMgPSBudWxsOworCQlBcnJheXMuZmlsbChhdHRycywgbnVsbCk7CiAJCWZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yIGNoID0gY3VycmVudEhlYWQ7CiAJCWZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yW10gdG1wID0gbmV3IEFic3RyYWN0VHJlZUl0ZXJhdG9yW3RyZWVzLmxlbmd0aF07CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZXMubGVuZ3RoOyBpKyspIHsKQEAgLTEzNzQsMTEgKzE0NzIsMTIgQEAgcHVibGljIDxUIGV4dGVuZHMgQWJzdHJhY3RUcmVlSXRlcmF0b3I+IFQgZ2V0VHJlZShDbGFzczxUPiB0eXBlKSB7CiAKIAkvKioKIAkgKiBJbnNwZWN0IGNvbmZpZyBhbmQgYXR0cmlidXRlcyB0byByZXR1cm4gYSBmaWx0ZXJjb21tYW5kIGFwcGxpY2FibGUgZm9yCi0JICogdGhlIGN1cnJlbnQgcGF0aCwgYnV0IHdpdGhvdXQgZXhwYW5kaW5nICVmIG9jY3VyZW5jZXMKKwkgKiB0aGUgY3VycmVudCBwYXRoLgogCSAqCiAJICogQHBhcmFtIGZpbHRlckNvbW1hbmRUeXBlCiAJICogICAgICAgICAgICB3aGljaCB0eXBlIG9mIGZpbHRlckNvbW1hbmQgc2hvdWxkIGJlIGV4ZWN1dGVkLiBFLmcuICJjbGVhbiIsCi0JICogICAgICAgICAgICAic211ZGdlIgorCSAqICAgICAgICAgICAgInNtdWRnZSIuIEZvciAic211ZGdlIiBjb25zaWRlciB1c2luZworCSAqICAgICAgICAgICAge3tAbGluayAjZ2V0U211ZGdlQ29tbWFuZChpbnQpfSBpbnN0ZWFkLgogCSAqIEByZXR1cm4gYSBmaWx0ZXIgY29tbWFuZAogCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgogCSAqIEBzaW5jZSA0LjIKQEAgLTE0MDcsNiArMTUwNiw1NCBAQCBwdWJsaWMgU3RyaW5nIGdldEZpbHRlckNvbW1hbmQoU3RyaW5nIGZpbHRlckNvbW1hbmRUeXBlKQogCX0KIAogCS8qKgorCSAqIEluc3BlY3QgY29uZmlnIGFuZCBhdHRyaWJ1dGVzIHRvIHJldHVybiBhIGZpbHRlcmNvbW1hbmQgYXBwbGljYWJsZSBmb3IKKwkgKiB0aGUgY3VycmVudCBwYXRoLgorCSAqCisJICogQHBhcmFtIGluZGV4CisJICogICAgICAgICAgICBvZiB0aGUgdHJlZSB0aGUgaXRlbSB0byBiZSBzbXVkZ2VkIGlzIGluCisJICogQHJldHVybiBhIGZpbHRlciBjb21tYW5kCisJICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U211ZGdlQ29tbWFuZChpbnQgaW5kZXgpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0U211ZGdlQ29tbWFuZChnZXRBdHRyaWJ1dGVzKGluZGV4KSk7CisJfQorCisJLyoqCisJICogSW5zcGVjdCBjb25maWcgYW5kIGF0dHJpYnV0ZXMgdG8gcmV0dXJuIGEgZmlsdGVyY29tbWFuZCBhcHBsaWNhYmxlIGZvcgorCSAqIHRoZSBjdXJyZW50IHBhdGguCisJICoKKwkgKiBAcGFyYW0gYXR0cmlidXRlcworCSAqICAgICAgICAgICAgdG8gdXNlCisJICogQHJldHVybiBhIGZpbHRlciBjb21tYW5kCisJICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U211ZGdlQ29tbWFuZChBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChhdHRyaWJ1dGVzID09IG51bGwpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCUF0dHJpYnV0ZSBmID0gYXR0cmlidXRlcy5nZXQoQ29uc3RhbnRzLkFUVFJfRklMVEVSKTsKKwkJaWYgKGYgPT0gbnVsbCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJU3RyaW5nIGZpbHRlclZhbHVlID0gZi5nZXRWYWx1ZSgpOworCQlpZiAoZmlsdGVyVmFsdWUgPT0gbnVsbCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlTdHJpbmcgZmlsdGVyQ29tbWFuZCA9IGdldEZpbHRlckNvbW1hbmREZWZpbml0aW9uKGZpbHRlclZhbHVlLAorCQkJCUNvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX1NNVURHRSk7CisJCWlmIChmaWx0ZXJDb21tYW5kID09IG51bGwpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBmaWx0ZXJDb21tYW5kLnJlcGxhY2VBbGwoIiVmIiwgLy8kTk9OLU5MUy0xJAorCQkJCU1hdGNoZXIucXVvdGVSZXBsYWNlbWVudCgKKwkJCQkJCVF1b3RlZFN0cmluZy5CT1VSTkUucXVvdGUoKGdldFBhdGhTdHJpbmcoKSkpKSk7CisJfQorCisJLyoqCiAJICogR2V0IHRoZSBmaWx0ZXIgY29tbWFuZCBob3cgaXQgaXMgZGVmaW5lZCBpbiBnaXRjb25maWcuIFRoZSByZXR1cm5lZAogCSAqIHN0cmluZyBtYXkgY29udGFpbiAiJWYiIHdoaWNoIG5lZWRzIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBjdXJyZW50IHBhdGgKIAkgKiBiZWZvcmUgZXhlY3V0aW5nIHRoZSBmaWx0ZXIgY29tbWFuZC4gVGhlc2UgZmlsdGVyIGRlZmluaXRpb25zIGFyZSBjYWNoZWQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvV29ya2luZ1RyZWVJdGVyYXRvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKaW5kZXggNTBjZTE1ZS4uNDI3ZWFjNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgQ2hyaXN0aWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSwgUm9iaW4gUm9zZW5iZXJnIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAyMiwgUm9iaW4gUm9zZW5iZXJnIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTM4Nyw4ICszODcsOCBAQCBwdWJsaWMgYm9vbGVhbiBpc1dvcmtUcmVlKCkgewogCQkJCXN0YXRlLmluaXRpYWxpemVSZWFkQnVmZmVyKCk7CiAKIAkJCQlmaW5hbCBsb25nIGxlbiA9IGUuZ2V0TGVuZ3RoKCk7Ci0JCQkJSW5wdXRTdHJlYW0gZmlsdGVyZWRJcyA9IHBvc3NpYmx5RmlsdGVyZWRJbnB1dFN0cmVhbShlLCBpcywgbGVuLAotCQkJCQkJT3BlcmF0aW9uVHlwZS5DSEVDS0lOX09QKTsKKwkJCQlJbnB1dFN0cmVhbSBmaWx0ZXJlZElzID0gcG9zc2libHlGaWx0ZXJlZElucHV0U3RyZWFtKGUsIGlzLAorCQkJCQkJbGVuKTsKIAkJCQlyZXR1cm4gY29tcHV0ZUhhc2goZmlsdGVyZWRJcywgY2Fub25MZW4pOwogCQkJfSBmaW5hbGx5IHsKIAkJCQlzYWZlQ2xvc2UoaXMpOwpAQCAtNDAwLDIzICs0MDAsMTggQEAgcHVibGljIGJvb2xlYW4gaXNXb3JrVHJlZSgpIHsKIAl9CiAKIAlwcml2YXRlIElucHV0U3RyZWFtIHBvc3NpYmx5RmlsdGVyZWRJbnB1dFN0cmVhbShmaW5hbCBFbnRyeSBlLAotCQkJZmluYWwgSW5wdXRTdHJlYW0gaXMsIGZpbmFsIGxvbmcgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gcG9zc2libHlGaWx0ZXJlZElucHV0U3RyZWFtKGUsIGlzLCBsZW4sIG51bGwpOwotCi0JfQotCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBwb3NzaWJseUZpbHRlcmVkSW5wdXRTdHJlYW0oZmluYWwgRW50cnkgZSwKLQkJCWZpbmFsIElucHV0U3RyZWFtIGlzLCBmaW5hbCBsb25nIGxlbiwgT3BlcmF0aW9uVHlwZSBvcFR5cGUpCisJCQlmaW5hbCBJbnB1dFN0cmVhbSBpcywgZmluYWwgbG9uZyBsZW4pCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlpZiAoZ2V0Q2xlYW5GaWx0ZXJDb21tYW5kKCkgPT0gbnVsbAotCQkJCSYmIGdldEVvbFN0cmVhbVR5cGUob3BUeXBlKSA9PSBFb2xTdHJlYW1UeXBlLkRJUkVDVCkgeworCQkJCSYmIGdldEVvbFN0cmVhbVR5cGUoCisJCQkJCQlPcGVyYXRpb25UeXBlLkNIRUNLSU5fT1ApID09IEVvbFN0cmVhbVR5cGUuRElSRUNUKSB7CiAJCQljYW5vbkxlbiA9IGxlbjsKIAkJCXJldHVybiBpczsKIAkJfQogCiAJCWlmIChsZW4gPD0gTUFYSU1VTV9GSUxFX1NJWkVfVE9fUkVBRF9GVUxMWSkgewogCQkJQnl0ZUJ1ZmZlciByYXdidWYgPSBJTy5yZWFkV2hvbGVTdHJlYW0oaXMsIChpbnQpIGxlbik7Ci0JCQlyYXdidWYgPSBmaWx0ZXJDbGVhbihyYXdidWYuYXJyYXkoKSwgcmF3YnVmLmxpbWl0KCksIG9wVHlwZSk7CisJCQlyYXdidWYgPSBmaWx0ZXJDbGVhbihyYXdidWYuYXJyYXkoKSwgcmF3YnVmLmxpbWl0KCkpOwogCQkJY2Fub25MZW4gPSByYXdidWYubGltaXQoKTsKIAkJCXJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocmF3YnVmLmFycmF5KCksIDAsIChpbnQpIGNhbm9uTGVuKTsKIAkJfQpAQCAtNDI2LDE0ICs0MjEsMTMgQEAgJiYgZ2V0RW9sU3RyZWFtVHlwZShvcFR5cGUpID09IEVvbFN0cmVhbVR5cGUuRElSRUNUKSB7CiAJCQkJcmV0dXJuIGlzOwogCQkJfQogCi0JCWZpbmFsIElucHV0U3RyZWFtIGxlbklzID0gZmlsdGVyQ2xlYW4oZS5vcGVuSW5wdXRTdHJlYW0oKSwKLQkJCQlvcFR5cGUpOworCQkJZmluYWwgSW5wdXRTdHJlYW0gbGVuSXMgPSBmaWx0ZXJDbGVhbihlLm9wZW5JbnB1dFN0cmVhbSgpKTsKIAkJdHJ5IHsKIAkJCWNhbm9uTGVuID0gY29tcHV0ZUxlbmd0aChsZW5Jcyk7CiAJCX0gZmluYWxseSB7CiAJCQlzYWZlQ2xvc2UobGVuSXMpOwogCQl9Ci0JCXJldHVybiBmaWx0ZXJDbGVhbihpcywgb3BUeXBlKTsKKwkJcmV0dXJuIGZpbHRlckNsZWFuKGlzKTsKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyB2b2lkIHNhZmVDbG9zZShJbnB1dFN0cmVhbSBpbikgewpAQCAtNDU1LDIzICs0NDksMjAgQEAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0JpbmFyeShFbnRyeSBlbnRyeSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJfQogCX0KIAotCXByaXZhdGUgQnl0ZUJ1ZmZlciBmaWx0ZXJDbGVhbihieXRlW10gc3JjLCBpbnQgbiwgT3BlcmF0aW9uVHlwZSBvcFR5cGUpCisJcHJpdmF0ZSBCeXRlQnVmZmVyIGZpbHRlckNsZWFuKGJ5dGVbXSBzcmMsIGludCBuKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJSW5wdXRTdHJlYW0gaW4gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oc3JjKTsKIAkJdHJ5IHsKLQkJCXJldHVybiBJTy5yZWFkV2hvbGVTdHJlYW0oZmlsdGVyQ2xlYW4oaW4sIG9wVHlwZSksIG4pOworCQkJcmV0dXJuIElPLnJlYWRXaG9sZVN0cmVhbShmaWx0ZXJDbGVhbihpbiksIG4pOwogCQl9IGZpbmFsbHkgewogCQkJc2FmZUNsb3NlKGluKTsKIAkJfQogCX0KIAotCXByaXZhdGUgSW5wdXRTdHJlYW0gZmlsdGVyQ2xlYW4oSW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBmaWx0ZXJDbGVhbihpbiwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBmaWx0ZXJDbGVhbihJbnB1dFN0cmVhbSBpbiwgT3BlcmF0aW9uVHlwZSBvcFR5cGUpCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBmaWx0ZXJDbGVhbihJbnB1dFN0cmVhbSBpbikKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWluID0gaGFuZGxlQXV0b0NSTEYoaW4sIG9wVHlwZSk7CisJCWluID0gRW9sU3RyZWFtVHlwZVV0aWwud3JhcElucHV0U3RyZWFtKGluLAorCQkJCWdldEVvbFN0cmVhbVR5cGUoT3BlcmF0aW9uVHlwZS5DSEVDS0lOX09QKSk7CiAJCVN0cmluZyBmaWx0ZXJDb21tYW5kID0gZ2V0Q2xlYW5GaWx0ZXJDb21tYW5kKCk7CiAJCWlmIChmaWx0ZXJDb21tYW5kICE9IG51bGwpIHsKIAkJCWlmIChGaWx0ZXJDb21tYW5kUmVnaXN0cnkuaXNSZWdpc3RlcmVkKGZpbHRlckNvbW1hbmQpKSB7CkBAIC01MDksMTEgKzUwMCw2IEBAIGZpbHRlckNvbW1hbmQsIGdldEVudHJ5UGF0aFN0cmluZygpLAogCQlyZXR1cm4gaW47CiAJfQogCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBoYW5kbGVBdXRvQ1JMRihJbnB1dFN0cmVhbSBpbiwgT3BlcmF0aW9uVHlwZSBvcFR5cGUpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gRW9sU3RyZWFtVHlwZVV0aWwud3JhcElucHV0U3RyZWFtKGluLCBnZXRFb2xTdHJlYW1UeXBlKG9wVHlwZSkpOwotCX0KLQogCS8qKgogCSAqIFJldHVybnMgdGhlIHdvcmtpbmcgdHJlZSBvcHRpb25zIHVzZWQgYnkgdGhpcyBpdGVyYXRvci4KIAkgKgpAQCAtNjY0LDcgKzY1MCw4IEBAIHB1YmxpYyBJbnN0YW50IGdldEVudHJ5TGFzdE1vZGlmaWVkSW5zdGFudCgpIHsKIAlwdWJsaWMgSW5wdXRTdHJlYW0gb3BlbkVudHJ5U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJSW5wdXRTdHJlYW0gcmF3aXMgPSBjdXJyZW50KCkub3BlbklucHV0U3RyZWFtKCk7CiAJCWlmIChnZXRDbGVhbkZpbHRlckNvbW1hbmQoKSA9PSBudWxsCi0JCQkJJiYgZ2V0RW9sU3RyZWFtVHlwZSgpID09IEVvbFN0cmVhbVR5cGUuRElSRUNUKSB7CisJCQkJJiYgZ2V0RW9sU3RyZWFtVHlwZSgKKwkJCQkJCU9wZXJhdGlvblR5cGUuQ0hFQ0tJTl9PUCkgPT0gRW9sU3RyZWFtVHlwZS5ESVJFQ1QpIHsKIAkJCXJldHVybiByYXdpczsKIAkJfQogCQlyZXR1cm4gZmlsdGVyQ2xlYW4ocmF3aXMpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZTX1dpbjMyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRlNfV2luMzIuamF2YQppbmRleCBmZjA5NGY2Li5hZTczZDNmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRlNfV2luMzIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRlNfV2luMzIuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVZpc2l0T3B0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVZpc2l0UmVzdWx0OwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5MaW5rT3B0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLm5pby5maWxlLlNpbXBsZUZpbGVWaXNpdG9yOwogaW1wb3J0IGphdmEubmlvLmZpbGUuYXR0cmlidXRlLkJhc2ljRmlsZUF0dHJpYnV0ZXM7CkBAIC05Niw2ICs5Nyw5IEBAIHB1YmxpYyBib29sZWFuIHJldHJ5RmFpbGVkTG9ja0ZpbGVDb21taXQoKSB7CiAJLyoqIHtAaW5oZXJpdERvY30gKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgRW50cnlbXSBsaXN0KEZpbGUgZGlyZWN0b3J5LCBGaWxlTW9kZVN0cmF0ZWd5IGZpbGVNb2RlU3RyYXRlZ3kpIHsKKwkJaWYgKCFGaWxlcy5pc0RpcmVjdG9yeShkaXJlY3RvcnkudG9QYXRoKCksIExpbmtPcHRpb24uTk9GT0xMT1dfTElOS1MpKSB7CisJCQlyZXR1cm4gTk9fRU5UUklFUzsKKwkJfQogCQlMaXN0PEVudHJ5PiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJRlMgZnMgPSB0aGlzOwogCQlib29sZWFuIGNoZWNrRXhlY3V0YWJsZSA9IGZzLnN1cHBvcnRzRXhlY3V0ZSgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1N0cmluZ1V0aWxzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvU3RyaW5nVXRpbHMuamF2YQppbmRleCA4YWIxMzM4Li45MTdhZGQzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvU3RyaW5nVXRpbHMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvU3RyaW5nVXRpbHMuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgR29vZ2xlIEluYy4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTE1LDYgKzE1LDcgQEAKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIAogLyoqCiAgKiBNaXNjZWxsYW5lb3VzIHN0cmluZyBjb21wYXJpc29uIHV0aWxpdHkgbWV0aG9kcy4KQEAgLTM3LDYgKzM4LDEwIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdVdGlscyB7CiAJCQlMQ1tjXSA9IChjaGFyKSAoJ2EnICsgKGMgLSAnQScpKTsKIAl9CiAKKwlwcml2YXRlIFN0cmluZ1V0aWxzKCkgeworCQkvLyBEbyBub3QgY3JlYXRlIGluc3RhbmNlcworCX0KKwogCS8qKgogCSAqIENvbnZlcnQgdGhlIGlucHV0IHRvIGxvd2VyY2FzZS4KIAkgKiA8cD4KQEAgLTI2OSw4ICsyNzQsMjAgQEAgcHVibGljIHN0YXRpYyBTdHJpbmcgam9pbihDb2xsZWN0aW9uPFN0cmluZz4gcGFydHMsIFN0cmluZyBzZXBhcmF0b3IsCiAJCXJldHVybiBzYi50b1N0cmluZygpOwogCX0KIAotCXByaXZhdGUgU3RyaW5nVXRpbHMoKSB7Ci0JCS8vIERvIG5vdCBjcmVhdGUgaW5zdGFuY2VzCisJLyoqCisJICogQXBwZW5kcyB7QGxpbmsgQ29uc3RhbnRzI0RPVF9HSVRfRVhUfSB1bmxlc3MgdGhlIGdpdmVuIG5hbWUgYWxyZWFkeSBlbmRzCisJICogd2l0aCB0aGF0IHN1ZmZpeC4KKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB0byBjb21wbGV0ZQorCSAqIEByZXR1cm4gdGhlIG5hbWUgZW5kaW5nIHdpdGgge0BsaW5rIENvbnN0YW50cyNET1RfR0lUX0VYVH0KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZVdpdGhEb3RHaXQoU3RyaW5nIG5hbWUpIHsKKwkJaWYgKG5hbWUuZW5kc1dpdGgoQ29uc3RhbnRzLkRPVF9HSVRfRVhUKSkgeworCQkJcmV0dXJuIG5hbWU7CisJCX0KKwkJcmV0dXJuIG5hbWUgKyBDb25zdGFudHMuRE9UX0dJVF9FWFQ7CiAJfQogCiAJLyoqCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua0lucHV0U3RyZWFtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua0lucHV0U3RyZWFtLmphdmEKaW5kZXggNGY5NDBkNy4uMmM5NzJiNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rSW5wdXRTdHJlYW0uamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtOTAsNyArOTAsNyBAQCBwcml2YXRlIHZvaWQgZmlsbEJ1ZmZlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWJ5dGVbXSBlbmNvZGVkID0gbmV3IGJ5dGVbQmFzZTg1LmVuY29kZWRMZW5ndGgobGVuZ3RoKV07CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgZW5jb2RlZC5sZW5ndGg7IGkrKykgewogCQkJaW50IGIgPSBpbi5yZWFkKCk7Ci0JCQlpZiAoYiA8IDAgfHwgYiA9PSAnXG4nKSB7CisJCQlpZiAoYiA8IDAgfHwgYiA9PSAnXHInIHx8IGIgPT0gJ1xuJykgewogCQkJCXRocm93IG5ldyBFT0ZFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCiAJCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlIdW5rSW52YWxpZExlbmd0aCwKIAkJCQkJCUludGVnZXIudmFsdWVPZihsaW5lTnVtYmVyKSkpOwpAQCAtOTksNiArOTksMTAgQEAgcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl9CiAJCS8vIE11c3QgYmUgZm9sbG93ZWQgYnkgYSBuZXdsaW5lOyB0b2xlcmF0ZSBFT0YuCiAJCWludCBiID0gaW4ucmVhZCgpOworCQlpZiAoYiA9PSAnXHInKSB7CisJCQkvLyBCZSBsZW5pZW50IGFuZCBhY2NlcHQgQ1ItTEYsIHRvby4KKwkJCWIgPSBpbi5yZWFkKCk7CisJCX0KIAkJaWYgKGIgPj0gMCAmJiBiICE9ICdcbicpIHsKIAkJCXRocm93IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCiAJCQkJCUpHaXRUZXh0LmdldCgpLmJpbmFyeUh1bmtNaXNzaW5nTmV3bGluZSwKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IGM0ODY1NjkuLjgxMDkzYzAgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtMTgsNyArMTgsNyBAQAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogCiAgIDxuYW1lPkpHaXQgLSBQYXJlbnQ8L25hbWU+CiAgIDx1cmw+JHtqZ2l0LXVybH08L3VybD4KQEAgLTE1MCw5ICsxNTAsOSBAQAogICAgIDxqYXZhLnZlcnNpb24+MTE8L2phdmEudmVyc2lvbj4KICAgICA8YnVuZGxlLW1hbmlmZXN0PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L01FVEEtSU5GL01BTklGRVNULk1GPC9idW5kbGUtbWFuaWZlc3Q+CiAKLSAgICA8amdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbj41LjEzLjAuMjAyMTA5MDgwODI3LXI8L2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+CisgICAgPGpnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+Ni4wLjAuMjAyMTExMjkxMDAwLXI8L2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+CiAgICAgPGFudC12ZXJzaW9uPjEuMTAuMTI8L2FudC12ZXJzaW9uPgotICAgIDxhcGFjaGUtc3NoZC12ZXJzaW9uPjIuNy4wPC9hcGFjaGUtc3NoZC12ZXJzaW9uPgorICAgIDxhcGFjaGUtc3NoZC12ZXJzaW9uPjIuOC4wPC9hcGFjaGUtc3NoZC12ZXJzaW9uPgogICAgIDxqc2NoLXZlcnNpb24+MC4xLjU1PC9qc2NoLXZlcnNpb24+CiAgICAgPGp6bGliLXZlcnNpb24+MS4xLjE8L2p6bGliLXZlcnNpb24+CiAgICAgPGphdmFld2FoLXZlcnNpb24+MS4xLjEzPC9qYXZhZXdhaC12ZXJzaW9uPgpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgPHRlc3QtZm9yay1jb3VudD4xQzwvdGVzdC1mb3JrLWNvdW50PgogICAgIDxhcmdzNGotdmVyc2lvbj4yLjMzPC9hcmdzNGotdmVyc2lvbj4KICAgICA8Y29tbW9ucy1jb21wcmVzcy12ZXJzaW9uPjEuMjE8L2NvbW1vbnMtY29tcHJlc3MtdmVyc2lvbj4KLSAgICA8b3NnaS1jb3JlLXZlcnNpb24+NC4zLjE8L29zZ2ktY29yZS12ZXJzaW9uPgorICAgIDxvc2dpLWNvcmUtdmVyc2lvbj42LjAuMDwvb3NnaS1jb3JlLXZlcnNpb24+CiAgICAgPHNlcnZsZXQtYXBpLXZlcnNpb24+NC4wLjA8L3NlcnZsZXQtYXBpLXZlcnNpb24+CiAgICAgPGpldHR5LXZlcnNpb24+MTAuMC42PC9qZXR0eS12ZXJzaW9uPgogICAgIDxqYXBpY21wLXZlcnNpb24+MC4xNS4zPC9qYXBpY21wLXZlcnNpb24+CkBAIC0xNjksOCArMTY5LDggQEAKICAgICA8c2xmNGotdmVyc2lvbj4xLjcuMzA8L3NsZjRqLXZlcnNpb24+CiAgICAgPG1hdmVuLWphdmFkb2MtcGx1Z2luLXZlcnNpb24+My4zLjE8L21hdmVuLWphdmFkb2MtcGx1Z2luLXZlcnNpb24+CiAgICAgPHR5Y2hvLWV4dHJhcy12ZXJzaW9uPjIuNS4wPC90eWNoby1leHRyYXMtdmVyc2lvbj4KLSAgICA8Z3Nvbi12ZXJzaW9uPjIuOC44PC9nc29uLXZlcnNpb24+Ci0gICAgPGJvdW5jeWNhc3RsZS12ZXJzaW9uPjEuNjk8L2JvdW5jeWNhc3RsZS12ZXJzaW9uPgorICAgIDxnc29uLXZlcnNpb24+Mi44Ljk8L2dzb24tdmVyc2lvbj4KKyAgICA8Ym91bmN5Y2FzdGxlLXZlcnNpb24+MS43MDwvYm91bmN5Y2FzdGxlLXZlcnNpb24+CiAgICAgPHNwb3RidWdzLW1hdmVuLXBsdWdpbi12ZXJzaW9uPjQuMy4wPC9zcG90YnVncy1tYXZlbi1wbHVnaW4tdmVyc2lvbj4KICAgICA8bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luLXZlcnNpb24+My4xLjI8L21hdmVuLXByb2plY3QtaW5mby1yZXBvcnRzLXBsdWdpbi12ZXJzaW9uPgogICAgIDxtYXZlbi1qeHItcGx1Z2luLXZlcnNpb24+My4xLjE8L21hdmVuLWp4ci1wbHVnaW4tdmVyc2lvbj4KQEAgLTIwMyw2ICsyMDMsMTQgQEAKICAgICAgIDxpZD5yZXBvLmVjbGlwc2Uub3JnLmNiaS1zbmFwc2hvdHM8L2lkPgogICAgICAgPHVybD5odHRwczovL3JlcG8uZWNsaXBzZS5vcmcvY29udGVudC9yZXBvc2l0b3JpZXMvY2JpLXNuYXBzaG90cy88L3VybD4KICAgICA8L3BsdWdpblJlcG9zaXRvcnk+CisgICAgPHBsdWdpblJlcG9zaXRvcnk+CisgICAgICA8aWQ+cmVwby5lY2xpcHNlLm9yZy5kYXNoLXJlbGVhc2VzPC9pZD4KKyAgICAgIDx1cmw+aHR0cHM6Ly9yZXBvLmVjbGlwc2Uub3JnL2NvbnRlbnQvcmVwb3NpdG9yaWVzL2Rhc2gtbGljZW5zZXMtcmVsZWFzZXMvPC91cmw+CisgICAgPC9wbHVnaW5SZXBvc2l0b3J5PgorICAgIDxwbHVnaW5SZXBvc2l0b3J5PgorICAgICAgPGlkPnJlcG8uZWNsaXBzZS5vcmcuZGFzaC1zbmFwc2hvdHM8L2lkPgorICAgICAgPHVybD5odHRwczovL3JlcG8uZWNsaXBzZS5vcmcvY29udGVudC9yZXBvc2l0b3JpZXMvZGFzaC1saWNlbnNlcy1zbmFwc2hvdHMvPC91cmw+CisgICAgPC9wbHVnaW5SZXBvc2l0b3J5PgogICA8L3BsdWdpblJlcG9zaXRvcmllcz4KIAogICA8YnVpbGQ+CkBAIC0zMzgsNyArMzQ2LDcgQEAKICAgICAgICAgICAgIDxkZXBlbmRlbmN5PjwhLS0gYWRkIHN1cHBvcnQgZm9yIHNzaC9zY3AgLS0+CiAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ud2Fnb248L2dyb3VwSWQ+CiAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPndhZ29uLXNzaDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgPHZlcnNpb24+My40LjM8L3ZlcnNpb24+CisgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNS4xPC92ZXJzaW9uPgogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICA8L3BsdWdpbj4KQEAgLTM4Miw2ICszOTAsMTEgQEAKICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgPHZlcnNpb24+Mi41LjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8cGx1Z2luPgorICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmRhc2g8L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+bGljZW5zZS10b29sLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPC9wbHVnaW4+CiAgICAgICA8L3BsdWdpbnM+CiAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgogCkBAIC01NDAsNiArNTUzLDEwIEBACiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcmVwb3J0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZGFzaDwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bGljZW5zZS10b29sLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KICAgPC9idWlsZD4KIApAQCAtODUzLDcgKzg3MCw3IEBACiAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpkdDwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5lY2o8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+My4yNy4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMjguMDwvdmVyc2lvbj4KICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgICAgPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90b29scy9CVUlMRCBiL3Rvb2xzL0JVSUxECmluZGV4IDE4MjYyNDkuLjFlNjcxMDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL0JVSUxECisrKyBiL3Rvb2xzL0JVSUxECkBAIC0xLDM0ICsxLDI4IEBACiBsb2FkKAogICAgICJAYmF6ZWxfdG9vbHMvL3Rvb2xzL2pkazpkZWZhdWx0X2phdmFfdG9vbGNoYWluLmJ6bCIsCi0gICAgIkpESzlfSlZNX09QVFMiLAogICAgICJkZWZhdWx0X2phdmFfdG9vbGNoYWluIiwKICkKIGxvYWQoIkBydWxlc19qYXZhLy9qYXZhOmRlZnMuYnpsIiwgImphdmFfcGFja2FnZV9jb25maWd1cmF0aW9uIikKIAotSkRLMTFfSlZNX09QVFMgPSBbCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMuYXBpPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5jb2RlPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5jb21wPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5maWxlPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5tYWluPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy50cmVlPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtZXhwb3J0cz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy51dGlsPUFMTC1VTk5BTUVEIiwKLSAgICAiLS1hZGQtb3BlbnM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMuZmlsZT1BTEwtVU5OQU1FRCIsCi0gICAgIi0tcGF0Y2gtbW9kdWxlPWphdmEuY29tcGlsZXI9JChsb2NhdGlvbiBAYmF6ZWxfdG9vbHMvL3Rvb2xzL2pkazpqYXZhX2NvbXBpbGVyX2phcikiLAotICAgICItLXBhdGNoLW1vZHVsZT1qZGsuY29tcGlsZXI9JChsb2NhdGlvbiBAYmF6ZWxfdG9vbHMvL3Rvb2xzL2pkazpqZGtfY29tcGlsZXJfamFyKSIsCi0gICAgIi0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLm5pbz1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmc9QUxMLVVOTkFNRUQiLAotXQotCiBkZWZhdWx0X2phdmFfdG9vbGNoYWluKAotICAgIG5hbWUgPSAiZXJyb3JfcHJvbmVfd2FybmluZ3NfdG9vbGNoYWluIiwKLSAgICBib290Y2xhc3NwYXRoID0gWyJAYmF6ZWxfdG9vbHMvL3Rvb2xzL2pkazpwbGF0Zm9ybWNsYXNzcGF0aC5qYXIiXSwKLSAgICBqdm1fb3B0cyA9IEpESzExX0pWTV9PUFRTLAotICAgIHNvdXJjZV92ZXJzaW9uID0gIjExIiwKLSAgICB0YXJnZXRfdmVyc2lvbiA9ICIxMSIsCisgICAgbmFtZSA9ICJlcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW5famF2YTExIiwKICAgICBwYWNrYWdlX2NvbmZpZ3VyYXRpb24gPSBbCiAgICAgICAgICI6ZXJyb3JfcHJvbmUiLAogICAgIF0sCisgICAgc291cmNlX3ZlcnNpb24gPSAiMTEiLAorICAgIHRhcmdldF92ZXJzaW9uID0gIjExIiwKKyAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCispCisKK2RlZmF1bHRfamF2YV90b29sY2hhaW4oCisgICAgbmFtZSA9ICJlcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW5famF2YTE3IiwKKyAgICBjb25maWd1cmF0aW9uID0gZGljdCgpLAorICAgIGphdmFfcnVudGltZSA9ICJAYmF6ZWxfdG9vbHMvL3Rvb2xzL2pkazpyZW1vdGVqZGtfMTciLAorICAgIHBhY2thZ2VfY29uZmlndXJhdGlvbiA9IFsKKyAgICAgICAgIjplcnJvcl9wcm9uZSIsCisgICAgXSwKKyAgICBzb3VyY2VfdmVyc2lvbiA9ICIxNyIsCisgICAgdGFyZ2V0X3ZlcnNpb24gPSAiMTciLAogICAgIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKICkKIApAQCAtMTA4LDIwICsxMDIsMjUgQEAKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LmFudC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC8uLi4iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvLi4uIiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwLy4uLiIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9odHRwLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQubGZzLy4uLiIsCi0gICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5wZ20vLi4uIiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC8uLi4iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC8uLi4iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0Ly4uLiIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC50ZXN0Ly4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQudWkvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC8uLi4iLApkaWZmIC0tZ2l0IGEvdG9vbHMvYmF6ZWxpc2tfdmVyc2lvbi5iemwgYi90b29scy9iYXplbGlza192ZXJzaW9uLmJ6bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiM2QxMC4uMDAwMDAwMAotLS0gYS90b29scy9iYXplbGlza192ZXJzaW9uLmJ6bAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLV90ZW1wbGF0ZSA9ICIiIgotbG9hZCgiQGJhemVsX3NreWxpYi8vbGliOnZlcnNpb25zLmJ6bCIsICJ2ZXJzaW9ucyIpCi0KLWRlZiBjaGVja19iYXplbF92ZXJzaW9uKCk6Ci0gIHZlcnNpb25zLmNoZWNrKG1pbmltdW1fYmF6ZWxfdmVyc2lvbiA9ICJ7dmVyc2lvbn0iKQotIiIiLnN0cmlwKCkKLQotZGVmIF9pbXBsKHJlcG9zaXRvcnlfY3R4KToKLSAgICByZXBvc2l0b3J5X2N0eC5zeW1saW5rKExhYmVsKCJALy86LmJhemVsdmVyc2lvbiIpLCAiLmJhemVsdmVyc2lvbiIpCi0gICAgYmF6ZWx2ZXJzaW9uID0gcmVwb3NpdG9yeV9jdHgucmVhZCgiLmJhemVsdmVyc2lvbiIpLnN0cmlwKCkKLQotICAgIHJlcG9zaXRvcnlfY3R4LmZpbGUoIkJVSUxEIiwgZXhlY3V0YWJsZSA9IEZhbHNlKQotCi0gICAgcmVwb3NpdG9yeV9jdHguZmlsZSgiY2hlY2suYnpsIiwgZXhlY3V0YWJsZSA9IEZhbHNlLCBjb250ZW50ID0gX3RlbXBsYXRlLmZvcm1hdCh2ZXJzaW9uID0gYmF6ZWx2ZXJzaW9uKSkKLQotYmF6ZWxpc2tfdmVyc2lvbiA9IHJlcG9zaXRvcnlfcnVsZShpbXBsZW1lbnRhdGlvbiA9IF9pbXBsKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVtb3RlLWJhemVscmMgYi90b29scy9yZW1vdGUtYmF6ZWxyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGY3OTRlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVtb3RlLWJhemVscmMKQEAgLTAsMCArMSw2NyBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQmF6ZWwgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIHJlbGVhc2UvYmF6ZWxyYy50cGwgYW5kIHNob3VsZCBub3QgYmUKKyMgbW9kaWZpZWQgZGlyZWN0bHkuCisKKyMgVGhpcyAuYmF6ZWxyYyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgZmxhZ3MgcmVxdWlyZWQgZm9yIHRoZSBwcm92aWRlZAorIyB0b29sY2hhaW4gd2l0aCBSZW1vdGUgQnVpbGQgRXhlY3V0aW9uLgorIworIyBUaGlzIC5iYXplbHJjIGZpbGUgYWxzbyBjb250YWlucyBhbGwgb2YgdGhlIGZsYWdzIHJlcXVpcmVkIGZvciB0aGUgbG9jYWwKKyMgZG9ja2VyIHNhbmRib3hpbmcuCisKKyMgRGVwZW5kaW5nIG9uIGhvdyBtYW55IG1hY2hpbmVzIGFyZSBpbiB0aGUgcmVtb3RlIGV4ZWN1dGlvbiBpbnN0YW5jZSwgc2V0dGluZworIyB0aGlzIGhpZ2hlciBjYW4gbWFrZSBidWlsZHMgZmFzdGVyIGJ5IGFsbG93aW5nIG1vcmUgam9icyB0byBydW4gaW4gcGFyYWxsZWwuCisjIFNldHRpbmcgaXQgdG9vIGhpZ2ggY2FuIHJlc3VsdCBpbiBqb2JzIHRoYXQgdGltZW91dCwgaG93ZXZlciwgd2hpbGUgd2FpdGluZworIyBmb3IgYSByZW1vdGUgbWFjaGluZSB0byBleGVjdXRlIHRoZW0uCitidWlsZDpyZW1vdGUgLS1qb2JzPTIwMAorYnVpbGQ6cmVtb3RlIC0tZGlza19jYWNoZT0KKworIyBTZXQgc2V2ZXJhbCBmbGFncyByZWxhdGVkIHRvIHNwZWNpZnlpbmcgdGhlIHBsYXRmb3JtLCB0b29sY2hhaW4gYW5kIGphdmEKKyMgcHJvcGVydGllcy4KK2J1aWxkOnJlbW90ZSAtLWhvc3RfamF2YWJhc2U9QHJiZV9qZGsxMS8vamF2YTpqZGsKK2J1aWxkOnJlbW90ZSAtLWphdmFiYXNlPUByYmVfamRrMTEvL2phdmE6amRrCitidWlsZDpyZW1vdGUgLS1jcm9zc3Rvb2xfdG9wPUByYmVfamRrMTEvL2NjOnRvb2xjaGFpbgorYnVpbGQ6cmVtb3RlIC0tZXh0cmFfdG9vbGNoYWlucz1AcmJlX2pkazExLy9jb25maWc6Y2MtdG9vbGNoYWluCitidWlsZDpyZW1vdGUgLS1leHRyYV9leGVjdXRpb25fcGxhdGZvcm1zPUByYmVfamRrMTEvL2NvbmZpZzpwbGF0Zm9ybQorYnVpbGQ6cmVtb3RlIC0taG9zdF9wbGF0Zm9ybT1AcmJlX2pkazExLy9jb25maWc6cGxhdGZvcm0KK2J1aWxkOnJlbW90ZSAtLXBsYXRmb3Jtcz1AcmJlX2pkazExLy9jb25maWc6cGxhdGZvcm0KK2J1aWxkOnJlbW90ZSAtLWFjdGlvbl9lbnY9QkFaRUxfRE9fTk9UX0RFVEVDVF9DUFBfVE9PTENIQUlOPTEKKworIyBTZXQgdmFyaW91cyBzdHJhdGVnaWVzIHNvIHRoYXQgYWxsIGFjdGlvbnMgZXhlY3V0ZSByZW1vdGVseS4gTWl4aW5nIHJlbW90ZQorIyBhbmQgbG9jYWwgZXhlY3V0aW9uIHdpbGwgbGVhZCB0byBlcnJvcnMgdW5sZXNzIHRoZSB0b29sY2hhaW4gYW5kIHJlbW90ZQorIyBtYWNoaW5lIGV4YWN0bHkgbWF0Y2ggdGhlIGhvc3QgbWFjaGluZS4KK2J1aWxkOnJlbW90ZSAtLWRlZmluZT1FWEVDVVRPUj1yZW1vdGUKKworIyBFbmFibGUgdGhlIHJlbW90ZSBjYWNoZSBzbyBhY3Rpb24gcmVzdWx0cyBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtYWNoaW5lcywKKyMgZGV2ZWxvcGVycywgYW5kIHdvcmtzcGFjZXMuCitidWlsZDpyZW1vdGUgLS1yZW1vdGVfY2FjaGU9cmVtb3RlYnVpbGRleGVjdXRpb24uZ29vZ2xlYXBpcy5jb20KKworIyBFbmFibGUgcmVtb3RlIGV4ZWN1dGlvbiBzbyBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgb24gdGhlIHJlbW90ZSBzeXN0ZW1zLgorYnVpbGQ6cmVtb3RlIC0tcmVtb3RlX2V4ZWN1dG9yPXJlbW90ZWJ1aWxkZXhlY3V0aW9uLmdvb2dsZWFwaXMuY29tCisKKyMgU2V0IGEgaGlnaGVyIHRpbWVvdXQgdmFsdWUsIGp1c3QgaW4gY2FzZS4KK2J1aWxkOnJlbW90ZSAtLXJlbW90ZV90aW1lb3V0PTM2MDAKKworIyBFbmFibGUgYXV0aGVudGljYXRpb24uIFRoaXMgd2lsbCBwaWNrIHVwIGFwcGxpY2F0aW9uIGRlZmF1bHQgY3JlZGVudGlhbHMgYnkKKyMgZGVmYXVsdC4gWW91IGNhbiB1c2UgLS1hdXRoX2NyZWRlbnRpYWxzPXNvbWVfZmlsZS5qc29uIHRvIHVzZSBhIHNlcnZpY2UKKyMgYWNjb3VudCBjcmVkZW50aWFsIGluc3RlYWQuCitidWlsZDpyZW1vdGUgLS1nb29nbGVfZGVmYXVsdF9jcmVkZW50aWFscworCisjIFRoZSBmb2xsb3dpbmcgZmxhZ3MgZW5hYmxlIHRoZSByZW1vdGUgY2FjaGUgc28gYWN0aW9uIHJlc3VsdHMgY2FuIGJlIHNoYXJlZAorIyBhY3Jvc3MgbWFjaGluZXMsIGRldmVsb3BlcnMsIGFuZCB3b3Jrc3BhY2VzLgorYnVpbGQ6cmVtb3RlLWNhY2hlIC0tcmVtb3RlX2NhY2hlPXJlbW90ZWJ1aWxkZXhlY3V0aW9uLmdvb2dsZWFwaXMuY29tCitidWlsZDpyZW1vdGUtY2FjaGUgLS10bHNfZW5hYmxlZD10cnVlCitidWlsZDpyZW1vdGUtY2FjaGUgLS1yZW1vdGVfdGltZW91dD0zNjAwCitidWlsZDpyZW1vdGUtY2FjaGUgLS1hdXRoX2VuYWJsZWQ9dHJ1ZQo=