ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiOTZjM2QyLi5iZTM3YjBmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMy5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTA0LnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpAQCAtMTIsOCArMTIsOCBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dDt4LWludGVybmFsOj10cnVlLAogIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUKIFJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDEuNy4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKQEAgLTIxLDcgKzIxLDcgQEAKICBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjMuMCwxLjQuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZS5wcm9wZXJ0aWVzCmluZGV4IDAyMmVkMmYuLmY5ODNmZGEgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmUucHJvcGVydGllcwpAQCAtMSwxMiArMSwxNSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICMKICMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMKQEAgLTM1LDMgKzM4LDUgQEAKICMgTWVzc2FnZXMgY29tbW9uIGZvciBhbGwKICMKIE1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVD1JV0FCMDM5N0UgSmF2YVdTRExQYXJhbSBub3Qgc2V0CitNU0dfRVJST1JfRk9MREVSX05PVF9GT1VORD1PdXRwdXQgZm9sZGVyOiB7MH0gd2FzIG5vdCBmb3VuZC4KKwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhCmluZGV4IGM0M2I3NDAuLjJiZGE4OTggMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLmphdmEKQEAgLTEsMTIgKzEsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogICoKICAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KKyAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTsKIApAQCAtMzEsOCArMzQsOSBAQAogCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVDsKIAlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTU9WRV9SRVNPVVJDRTsKIAlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ1JFQVRFX1RFTVBfRElSOwotCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5EOworICAKIAlzdGF0aWMgewogCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuY2xhc3MpOwogCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtTW9kaWZpZXIuamF2YQppbmRleCA4ZDFiMTQ5Li5lN2JlZWFkIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vSmF2YVdTRExQYXJhbU1vZGlmaWVyLmphdmEKQEAgLTEsMyArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDIwMDcwNDEyICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbjsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpAQCAtNSwxMSArMTgsMTMgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW52aXJvbm1lbnQuZWNsaXBzZS5GaWxlUmVzb3VyY2VVdGlsczsKIAogcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1Nb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7CiAKQEAgLTQwLDI5ICs1NSw3NCBAQAogCQkJfQogCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJKYXZhT3V0cHV0IikpCiAJCQl7CQkJCSAKLQkJCQlqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQoKFN0cmluZylwcm9wZXJ0eU1hcC5nZXQoIkphdmFPdXRwdXQiKSk7CisgICAgICAgICAgICAgIFN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJKYXZhT3V0cHV0Iik7CisgICAgICAgICAgICAgIGludCAgICBpbmRleCAgICAgICAgICA9IG91dHB1dExvY2F0aW9uLmluZGV4T2YoICc6JyApOworICAgICAgICAKKyAgICAgICAgICAgICAgaWYoIGluZGV4ID09IC0xICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgY29sb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyaW5nIHNvIHdlIHdpbGwgYXNzdW1lIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIHdvcmtzcGFjZSByZWxhdGl2ZSB1cmkgZm9yIG5vdy4KKyAgICAgICAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRMb2NhdGlvbiApICk7CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYoIHJlc291cmNlID09IG51bGwgfHwgcmVzb3VyY2UuZ2V0TG9jYXRpb24oKSA9PSBudWxsICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuYmluZCggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uICkgKTsgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOworICAgICAgICAgICAgICB9CisgICAgICAgIAorCQkgICAgICBqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQoIG91dHB1dExvY2F0aW9uICk7CiAJCQl9CiAJCQlpZiAocHJvcGVydHlNYXAuY29udGFpbnNLZXkoIk1ldGhvZHMiKSkKIAkJCXsKLQkJCQkvL2dldCBNZXRob2QgbGlzdCBmcm9tIHRoZSBtYXAKLQkJCQlTdHJpbmcgbWV0aG9kTGlzdCA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNZXRob2RzIik7CisJCQkgIC8vZ2V0IE1ldGhvZCBsaXN0IGZyb20gdGhlIG1hcAorCQkJICBTdHJpbmcgbWV0aG9kTGlzdCA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNZXRob2RzIik7CiAJCQkJCi0JCQkJLy90b2tlbml6ZSB0aGUgbWV0aG9kIGxpc3QKLQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihtZXRob2RMaXN0LCAiICIpOwotCQkJCUhhc2h0YWJsZSBtZXRob2RzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJCXdoaWxlICh0b2suaGFzTW9yZVRva2VucygpKQotCQkJCXsKLQkJCQkJbWV0aG9kcy5wdXQodG9rLm5leHRUb2tlbigpLCBuZXcgQm9vbGVhbih0cnVlKSk7Ci0JCQkJfQkJCQkKLQkJCQlqYXZhV1NETFBhcmFtLnNldE1ldGhvZHMobWV0aG9kcyk7CisJCQkgIC8vdG9rZW5pemUgdGhlIG1ldGhvZCBsaXN0CisJCQkgIFN0cmluZ1Rva2VuaXplciB0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1ldGhvZExpc3QsICIgIik7CisJCQkgIEhhc2h0YWJsZSBtZXRob2RzID0gbmV3IEhhc2h0YWJsZSgpOworCQkJICB3aGlsZSAodG9rLmhhc01vcmVUb2tlbnMoKSkKKwkJCSAgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2QgPSAoU3RyaW5nKXRvay5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiggbWV0aG9kLmluZGV4T2YoICcoJyApID09IC0xICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBtZXRob2QgPSBtZXRob2QgKyAiKCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAKKwkJCQltZXRob2RzLnB1dCggbWV0aG9kLCBuZXcgQm9vbGVhbih0cnVlKSk7CisJCQkgIH0JCQkJCisJCQkgIGphdmFXU0RMUGFyYW0uc2V0TWV0aG9kcyhtZXRob2RzKTsKIAkJCX0KIAkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiTWFwcGluZ3MiKSkKIAkJCXsKLQkJCQkvL2dldCBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaGFzIHRoZSBtYXBwaW5ncyBpbiBpdCBmcm9tIHRoZSBtYXAKLQkJCQlTdHJpbmcgZmlsZW5hbWUgPSAoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiTWFwcGluZ3MiKTsKLQkJCQkvL2dldCB0aGUgbGlzdCBvZiBtYXBwaW5nIGZyb20gdGhlIGZpbGUKLQkJCQkgSGFzaE1hcCBtYXBwaW5ncyA9IHJlYWRNYXBwaW5nc0Zyb21GaWxlKGZpbGVuYW1lKTsKLQkJCQkgamF2YVdTRExQYXJhbS5zZXRNYXBwaW5ncyhtYXBwaW5ncyk7CisJCQkgIC8vZ2V0IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlIG1hcHBpbmdzIGluIGl0IGZyb20gdGhlIG1hcAorCQkJICBTdHJpbmcgZmlsZW5hbWUgPSAoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiTWFwcGluZ3MiKTsKKyAgICAgICAgCisJCQkgIC8vZ2V0IHRoZSBsaXN0IG9mIG1hcHBpbmcgZnJvbSB0aGUgZmlsZQorCQkJICBIYXNoTWFwIG1hcHBpbmdzID0gcmVhZE1hcHBpbmdzRnJvbUZpbGUoZmlsZW5hbWUpOworICAgICAgICAKKwkJCSAgamF2YVdTRExQYXJhbS5zZXRNYXBwaW5ncyhtYXBwaW5ncyk7CisgICAgICAgIAorICAgICAgICAgICAgICBTdHJpbmcgYmVhbk5hbWUgPSBqYXZhV1NETFBhcmFtLmdldEJlYW5OYW1lKCk7CisgICAgICAgIAorICAgICAgICAgICAgICBpZiggYmVhbk5hbWUgIT0gbnVsbCAmJiAhYmVhbk5hbWUuZXF1YWxzKCIiKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgICAgbGFzdERvdCAgICAgPSBiZWFuTmFtZS5sYXN0SW5kZXhPZiggJy4nICk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gbGFzdERvdCA9PSAtMSA/IG51bGwgOiBiZWFuTmFtZS5zdWJzdHJpbmcoIDAsIGxhc3REb3QgKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiggbWFwcGluZ3MgIT0gbnVsbCAmJiBwYWNrYWdlTmFtZSAhPSBudWxsICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBTdHJpbmcgdG5zID0gKFN0cmluZyltYXBwaW5ncy5nZXQoIHBhY2thZ2VOYW1lICk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIGlmKCB0bnMgIT0gbnVsbCApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGphdmFXU0RMUGFyYW0uc2V0TmFtZXNwYWNlKHRucyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICB9CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhZWJlODI5Li43MGM1NzdiIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC0xNiw5ICsxNiw5IEBACiAgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydDt4LWludGVybmFsOj10cnVlCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCiAgb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCiAgb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLApAQCAtMjksNyArMjksNyBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKQEAgLTQzLDUgKzQzLDUgQEAKICBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjMuMCwxLjQuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIKKyBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDMuNS4wKSIKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKaW5kZXggNWUyMTFmNS4uN2M1MGMxNyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbApAQCAtMjIsMjIgKzIyLDcgQEAKICAgICAgICAgICAgICAgcHJvcGVydHk9IkN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgCQk8bWFwCiAgICAgICAgICAgICAgIGtleT0iTWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkRlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gCQk8bWFwCi0gICAgICAgICAgICAgIGtleT0iTWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5TdHViMkJlYW5Db21tYW5kIgorICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ2xpZW50Q29kZUdlbk9wZXJhdGlvbiIKICAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+CiAgIDwvZXh0ZW5zaW9uPiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGNhYTU5YzAuLjFiOWIzY2EgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDUucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KQEAgLTE3LDggKzE3LDggQEAKICBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0O3gtaW50ZXJuYWw6PXRydWUKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCiAgb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKICBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCkBAIC0yOCw3ICsyOCw3IEBACiAgb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbAppbmRleCA3N2FlZjRlLi5hOWU2MDc4IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCkBAIC0xMDYsNTMgKzEwNiw1MyBAQAogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+CiAgICAgICAgIDxtYXAKICAgICAgICAgICAgICAga2V5PSJKYXZhT3V0cHV0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5KYXZhMldTRExDb21tYW5kIgorICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgogICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KICAgICAgICAgPG1hcAogICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5KYXZhMldTRExDb21tYW5kIgorICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgogICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KICAgICAgICAgPG1hcAogICAgICAgICAgICAgICBrZXk9Ik1ldGhvZHMiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkphdmEyV1NETENvbW1hbmQiCisgICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCiAgICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgogICAgICAgICA8bWFwCiAgICAgICAgICAgICAgIGtleT0iU3R5bGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkphdmEyV1NETENvbW1hbmQiCisgICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCiAgICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgogICAgICAgICA8bWFwCiAgICAgICAgICAgICAgIGtleT0iVXNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5KYXZhMldTRExDb21tYW5kIgorICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgogICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKICAgICAgICAKICAgICAgICAgPG1hcAogICAgICAgICAgICAgICBrZXk9IkphdmFPdXRwdXQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQiCisgICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCiAgICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgogICAgICAgICA8bWFwCiAgICAgICAgICAgICAgIGtleT0iTWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQiCisgICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCiAgICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAogICAgICAgICA8bWFwCiAgICAgICAgICAgICAgIGtleT0iTWV0aG9kcyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZCIKKyAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKICAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCiAJCTxtYXAKICAgICAgICAgICAgICAga2V5PSJTdHlsZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZCIKKyAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKICAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCiAgICAgICAgIDxtYXAKICAgICAgICAgICAgICAga2V5PSJVc2UiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQiCisgICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCiAgICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAogICA8L2V4dGVuc2lvbj4gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDM0ZDFhNjYuLmQzOTJhNTggMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTA0LnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDUucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KQEAgLTQwLDE2ICs0MCwxNiBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKICBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamR0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLApAQCAtNjMsNyArNjMsNyBAQAogIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2U7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAorIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDMsMS4xLjApIiwKICBvcmcud3NkbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKICBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCkBAIC03Miw3ICs3Miw3IEBACiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKICBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCisgY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCwzLjUuMCkiLAogIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKKyBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCmluZGV4IGMyYzFhMjcuLjE1MDhhYjkgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTI1LDYgKzI1LDcgQEAKICMgMjAwNjA1MTAgICAxNDExMTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCiAjIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICMgMjAwNjA2MDIgICAxNDUwNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KKyMgMjAwNzA0MjQgICAxNzczNjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjCkBAIC02MTEsNyArNjEyLDcgQEAKIExBQkVMX1NUQVJUX1NFUlZFUl9URVhUMj1PbmNlIHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZCB0aGUgIm5leHQiIGJ1dHRvbiB3aWxsIGJlIGVuYWJsZWQuCiBMQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDM9VGhlICJiYWNrIiBidXR0b24gY2FuIGJlIHVzZWQgd2hpbGUgdGhlIHNlcnZlciBpcyBzdGFydGluZyB0bwogTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQ0PWNoYW5nZSBhbnkgcHJldmlvdXMgc2V0dGluZ3MgaW4gdGhpcyB3aXphcmQuCi1MQUJFTF9TVEFSVF9TRVJWRVJfQlVUVE9OPVN0YXJ0IHNlcnZlcgorTEFCRUxfU1RBUlRfU0VSVkVSX0JVVFRPTj0mU3RhcnQgc2VydmVyCiBUT09MVElQX1NUQVJUX1NFUlZFUl9CVVRUT049U3RhcnQgdGhlIHNlcnZlcgogVEVYVF9TRVJWRVJfU1RBVFVTPUN1cnJlbnRseSB0aGUgc2VydmVyIGlzIHswfS4KIFRFWFRfU0VSVkVSX01TRz1TZXJ2ZXIgezB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9WYWxpZGF0aW9uVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCmluZGV4IGIzOGFmNWMuLmY5YTM5YjMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCkBAIC01NTYsMTEgKzU1NiwxNCBAQAogICAgIHsKICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSAob3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSlpdHIubmV4dCgpOwogICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0gICAgICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwgJiYgcnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVR5cGUuZ2V0SWQoKSkpCisgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKICAgICAgIHsKLSAgICAgICAgLy9mb3VuZCBhIG1hdGNoCi0gICAgICAgIHJldHVybiB0cnVlOworCSAgICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7CisJICAgICAgaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwgJiYgcnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVR5cGUuZ2V0SWQoKSkpCisJICAgICAgeworCSAgICAgICAgLy9mb3VuZCBhIG1hdGNoCisJICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEKaW5kZXggOGMwMzg3MC4uMDZmYjU1YSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXZlbG9wQ29tbWFuZC5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiAgKiAyMDA2MDUxNiAgIDEyNjk2NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqIDIwMDcwMTIzICAgMTY3NDg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCisgKiAyMDA3MDQwMyAgIDE3MzY1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKQEAgLTI1LDYgKzI2LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwpAQCAtMTExLDEyICsxMTMsMTIgQEAKIAogCQkgIC8vIENyZWF0ZSB0aGUgY2xpZW50IG1vZHVsZSBpZiBuZWVkZWQuCiAJCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0Xyk7CisJCSAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkXykuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7CiAJCSAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQogCQkgIHsKIAkJCSAgYm9vbGVhbiBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoY2xpZW50UnVudGltZUlkXywgbW9kdWxlVHlwZV8pOwogCQkJICBpZiAobWF0Y2hlcykKIAkJCSAgeyAgCi0JCQkJICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWRfKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKIAkJCQkgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwogCQkJCSAgY29tbWFuZC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0Xyk7CiAJCQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQobW9kdWxlVHlwZV8pOwpAQCAtMTMwLDYgKzEzMiwxNiBAQAogCQkJCQkgIHJldHVybiBzdGF0dXM7CiAJCQkJICB9ICAgICAgICAKIAkJCSAgfSAgICAgICAgICAgIAorCQkgIH0gZWxzZSB7CisJCQkJLy8gYWRkIGZhY2V0cyByZXF1aXJlZCBieSBXZWIgc2VydmljZSBydW50aW1lCisJCSAgICAgICAgaWYgKHJmdi5sZW5ndGggIT0gMCkgeworCQkgICAgICAgIAlzdGF0dXMgPSBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdiwgbW9uaXRvcik7CisJCSAgICAgICAgCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCisJCSAgICAgICAgCXsKKwkJICAgICAgICAJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7CisJCSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOworCQkgICAgICAgIAl9ICAgICAgCisJCSAgICAgICAgfQogCQkgIH0gICAgICAgIAogCSAgfQogICAgIHJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvblRyZWVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uVHJlZVdpZGdldC5qYXZhCmluZGV4IGM5MmNmZWYuLjI4Y2MxNjMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uVHJlZVdpZGdldC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uVHJlZVdpZGdldC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTEwLDYgKzEwLDcgQEAKICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogMjAwNjA0MTggICAxMzY3MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQorICogMjAwNzAxMzEgICAxNjg3ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdzZGwgdXJsIG9uIHdlYiBzZXJ2aWNlIHdpemFyZCBwYWdlIDEgaXMgbm90IHJlZmxlY3RlZCBpbiBicm93c2UgZGlhbG9nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7CiAKQEAgLTEyOCw4ICsxMjksMTAgQEAKICAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVUkkpCiAgIHsKICAgCXdlYlNlcnZpY2VVUkkgPSB3c1VSSTsKLSAgCXRyZWVDb250ZW50UHJvdmlkZXIuc2V0V2ViU2VydmljZVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgICByZWZyZXNoVHJlZVZpZXdlcigpOworICAJaWYgKCF0cmVlXy5pc0Rpc3Bvc2VkKCkpIHsKKyAgCQl0cmVlQ29udGVudFByb3ZpZGVyLnNldFdlYlNlcnZpY2VVUkkod2ViU2VydmljZVVSSSk7CisgIAkJcmVmcmVzaFRyZWVWaWV3ZXIoKTsKKyAgCX0KICAgfQogCiAgIHB1YmxpYyB2b2lkIHJlZnJlc2hUcmVlVmlld2VyKCkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQppbmRleCAxMjdjNTA5Li5mYTgyMmNlIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCkBAIC00LDEyICs0LDE0IEBACiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCisgKgogICogQ29udHJpYnV0b3JzOgogICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKKyAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCisgKiAyMDA3MDQxMCAgIDE4MTgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwogCkBAIC0zMCwxMyArMzIsMTQgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKIAogcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCiB7CiAgIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXJfID0gbmV3IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcigpOyAgCisgIHByaXZhdGUgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyXyA9IG5ldyBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIoKTsgCiAgIAogICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQogICB7CkBAIC01MywyNCArNTYsMjcgQEAKICAgCSAgICB7CiAgIAkgICAgICB1cmkgPSBpZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7CiAgIAkgICAgfQotICAJICB9Ci0gIAkgIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsKQorICAJICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZUltcGwpCiAgICAgICB7CiAgICAgICAgIFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKWZpcnN0U2VsOwogICAgICAgICB1cmkgPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCk7Ci0gICAgICB9Ci0gIAkgIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCisgICAgICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZVJlZikKICAgICAgIHsKICAgCSAgICBTZXJ2aWNlUmVmIHNlcnZpY2VSZWYgPSAoU2VydmljZVJlZilmaXJzdFNlbDsKICAgICAgICAgdXJpID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoc2VydmljZVJlZik7Ci0gICAgICB9Ci0gIAkgIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCisgICAgICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKICAgCSAgewogICAJICAgIFdTRExSZXNvdXJjZUltcGwgd3NkbFJJID0gKFdTRExSZXNvdXJjZUltcGwpZmlyc3RTZWw7CiAgIAkgICAgdXJpID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkod3NkbFJJKTsKLSAgCSAgfQotICAJICBpZiAoZmlyc3RTZWwgaW5zdGFuY2VvZiBTdHJpbmcpCisgIAkgIH0gZWxzZSBpZiAoZmlyc3RTZWwgaW5zdGFuY2VvZiBTdHJpbmcpCisgIAkgIHsKICAgCSAgICB1cmkgPSAoU3RyaW5nKWZpcnN0U2VsOworICAJICB9IGVsc2UgeworICAJCVN0cmluZyBhZGFwdGVkVXJpID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKGZpcnN0U2VsKTsKKyAgCQlpZiAoYWRhcHRlZFVyaSAhPSBudWxsKSB7CisgIAkJCXVyaSA9IGFkYXB0ZWRVcmk7CisgIAkJfQorICAJICB9CiAgIAkgIAogICAJICB1cmkgPSB0cmFuc2Zvcm1lcl8udG9QYXRoKHVyaSk7CiAgIAl9CkBAIC0xNzQsNiArMTgwLDcgQEAKIAogICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCiAgIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisgIH0gICAgCisgICAgIAorfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKaW5kZXggMjYzMGZkYy4uYjIyZDFlZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCkBAIC00LDEyICs0LDEzIEBACiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCisgKgogICogQ29udHJpYnV0b3JzOgogICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKKyAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwogCkBAIC0yOSw2ICszMCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFQWN0aW9uQWRhcHRlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwogCkBAIC03Niw2ICs3OCwxMSBAQAogICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgQmVhbkxpbmspCiAgICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRXU0RMVVJJKChCZWFuTGluaykgc2VsKSk7CisgICAgICB9IGVsc2UgeworICAgIAkgIFN0cmluZyB3c2RsVVJJID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKHNlbCk7CisgICAgCSAgaWYgKHdzZGxVUkkgIT0gbnVsbCkgeworICAgIAkJICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NkbFVSSSk7CisgICAgCSAgfQogICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdmFsdWU7CkBAIC0xMDgsNCArMTE1LDQgQEAKIAkJICByZXR1cm4gZ2V0V1NETFVSSSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKIAkgIHJldHVybiAiIjsKICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKaW5kZXggMzI0ODVmZi4uMjRiM2EzMCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMjEsOCArMjEsOCBAQAogICogMjAwNjA4MDMgICAxNTI0ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFR5cGluZyBXU0RMIGluIFNlcnZpY2UgZGVmaW5pdGlvbiBmaWVsZCBpcyB2ZXJ5IHNsb3cKICAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKICAqIDIwMDYwODMxICAgMTU1ODgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBzZXJ2aWNlIGltcGwgZmllbGQgZG9lc24ndCB3b3JrIGFmdGVyIHN3aXRjaGluZyBmcm9tIEJVIHRvIFRECi0gKiAyMDA2MTEwNiAgIDE0MjUwMCBkYXZpZC5zY2huZWlkZXJAdW5pc3lzLmNvbSAtIERhdmlkIFNjaG5laWRlciwgV1RQIHByb3BlcnRpZXMgcGFnZXMgZm9udHMgZG9uJ3QgZm9sbG93IEVjbGlwc2UgcHJlZmVyZW5jZXMKICAqIDIwMDYxMjExICAgMTYxNTg5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOUEUgaW4gc2VydmljZSBnZW5lcmF0aW9uIGFmdGVyIG9wZW5pbmcgYW5kIGNhbmNlbGxpbmcgZnJvbSBicm93c2UgZGlhbG9nCisgKiAyMDA3MDEzMSAgIDE2ODc4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd3NkbCB1cmwgb24gd2ViIHNlcnZpY2Ugd2l6YXJkIHBhZ2UgMSBpcyBub3QgcmVmbGVjdGVkIGluIGJyb3dzZSBkaWFsb2cKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7CiAKQEAgLTQxLDcgKzQxLDYgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iTWFuYWdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iQ2hhbmdlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7CkBAIC0yMzcsNyArMjM2LDYgQEAKICAgICAJCX0pOwogICAgIAogICAgIHNldE1lc3NhZ2VTdW1tYXJ5KCk7Ci0gICAgRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOyAgICAKICAgICByZXR1cm4gdGhpczsKICAgfQogICAKQEAgLTcwOCw2ICs3MDYsOCBAQAogCQkKIAkgICAgLy8gcHJpbWUgd2lkZ2V0IGJhc2VkIG9uIHRoZSBzdHJpbmcKIAkgICAgd3NkbFVSSV8gPSB3c1VSSTsKKwkgICAgaWYgKHRyZWUgIT0gbnVsbCkKKwkgICAgICB0cmVlLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwogCSAgICAKIAkgICAgV2ViU2VydmljZUVudGl0eSBlbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpOwogCSAgICBpZiAoZW50aXR5ICE9IG51bGwgJiYgZW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL0NsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKaW5kZXggN2M2MjMzNS4uZTcxZWQxZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAqIDIwMDYwNTIzICAgMTMzNzE0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKICAqIDIwMDYwNTI1ICAgMTQzODQzIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKICAqIDIwMDYwOTA1ICAgMTU2MjMwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBIYW5kbGluZyBwcm9qZWN0cyB3aXRoIG5vIHRhcmdldCBydW50aW1lCi0gKiAyMDA3MDExOSAgIDE1OTQ1OCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KKyAqIDIwMDcwMzI2ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7CiAKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKICAgICBJU2VydmVyW10gY29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShTZXJ2ZXJVdGlscy5nZXRNb2R1bGUoY2xpZW50UHJvamVjdCksIG51bGwpOwogICAgIAotICAgIGlmIChjb25maWd1cmVkU2VydmVycyE9bnVsbCAmJiBjb25maWd1cmVkU2VydmVycy5sZW5ndGg+MCkKKyAgICBpZiAoY29uZmlndXJlZFNlcnZlcnMhPW51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoPjAgJiYgY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpICE9IG51bGwpCiAgICAgewogICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJZChjb25maWd1cmVkU2VydmVyc1swXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7CiAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0SWQoKSk7CkBAIC0zNzYsNyArMzc2LDcgQEAKICAgICBpZiAoY2xpZW50UHJvamVjdC5leGlzdHMoKSkKICAgICB7CiAgICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwpCisgICAgICBpZiAoc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQogICAgICAgewogICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7CiAgICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7CkBAIC0zOTYsNyArMzk2LDcgQEAKICAgICAvL0hhdmVuJ3QgcGlja2VkIGEgc2VydmVyL3NlcnZlciB0eXBlIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdC4gUGljayBhIHNlcnZlci9zZXJ2ZXIgdHlwZQogICAgIC8vdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNsaWVudFJ1bnRpbWVJZC4KICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsKQorICAgIGlmIChzZXJ2ZXIhPW51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQogICAgIHsKICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7CkBAIC00MzUsMjUgKzQzNSwzMSBAQAogICAgICAgICAvL0lmIGEgc2VydmVyIG9mIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgaXMgcHJlc2VudCwgY2hlY2sgdGhhdCBvbmUgZmlyc3QKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2ZXJzLmxlbmd0aDsgaisrKQogICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbal0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0gICAgICAgICAgaWYgKHNlcnZlckZhY3RvcnlJZCA9PSBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpCisgICAgICAgICAgaWYgKHNlcnZlcnNbal0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoY2xpZW50UnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbal07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAgICAgICAgICAgICAgICAKKwkgICAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbal0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7CisJICAgICAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQgPT0gcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKQorCSAgICAgICAgICB7CisJICAgICAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihjbGllbnRSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQorCSAgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2pdOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy9BIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBkaWQgbm90IG1hdGNoLiBDaGVjayBhbGwgdGhlIGV4aXN0aW5nIHNlcnZlcnMuICAgIAogICAgIAkKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKICAgICAgIHsKLSAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0gICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoY2xpZW50UnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOwotICAgICAgICB9CisgICAgCWlmIChzZXJ2ZXJzW2ldICE9IG51bGwgJiYgc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKKyAgICAJeworCSAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7CisJICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0U2VydmVyKGNsaWVudFJ1bnRpbWVJZF8sIHNlcnZlckZhY3RvcnlJZCkpCisJICAgICAgICB7CisJICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOworCSAgICAgICAgfQorCSAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG51bGw7ICAgIApAQCAtNTIwLDE0ICs1MjYsMTUgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKQogICAgICAgICB7CiAgICAgICAgICAgSVNlcnZlciB0aGlzU2VydmVyID0gc2VydmVyc1tpXTsKLSAgICAgICAgICBpZiAodGhpc1NlcnZlci5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWUuZ2V0SWQoKSkpCisgICAgICAgICAgSVJ1bnRpbWUgdGhpc1NlcnZlclJ1bnRpbWUgPSB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKTsKKyAgICAgICAgICBpZiAoIHRoaXNTZXJ2ZXJSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUgIT0gbnVsbCAmJiB0aGlzU2VydmVyUnVudGltZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZS5nZXRJZCgpKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlcj09bnVsbCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlciA9IHRoaXNTZXJ2ZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCisgICAgICAgICAgICBpZiAodGhpc1NlcnZlciAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKICAgICAgICAgICAgIHsKICAgICAgICAgCSAgCiAgICAgICAgICAgICAgIHNlcnZlciA9IHRoaXNTZXJ2ZXI7CkBAIC01ODcsMTUgKzU5NCwxNiBAQAogCSAgICBmb3IgKGludCBqPTA7IGo8c2VydmVycy5sZW5ndGg7IGorKykgICAgICAKIAkgICAgewogCSAgICAgIElTZXJ2ZXIgdGhpc1NlcnZlciA9IHNlcnZlcnNbal07Ci0JICAgICAgaWYgKHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCisJICAgICAgaWYgKHRoaXNTZXJ2ZXIgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKIAkgICAgICB7CisJICAgIAlJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOwogCSAgICAgICAgLy9DaGVjayB0byBzZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHJ1bnRpbWVzLgogCSAgICAgICAgSXRlcmF0b3IgcnVudGltZXNJdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwogCSAgICAgICAgd2hpbGUocnVudGltZXNJdHIuaGFzTmV4dCgpKQogCSAgICAgICAgewogCSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpcnVudGltZXNJdHIubmV4dCgpOwogCSAgICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQorCSAgICAgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCAmJiB0aGlzU2VydmVyUnVudGltZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZS5nZXRJZCgpKSkKIAkgICAgICAgICAgewogCSAgICAgICAgICAgIHNlcnZlciA9IHRoaXNTZXJ2ZXI7CiAJICAgICAgICAgIH0gICAgICAgICAgCkBAIC02MTMsNyArNjIxLDggQEAKIAkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKIAkgICAgICAgIHsKIAkgICAgICAgICAgSVNlcnZlciB0aGlzU2VydmVyID0gc2VydmVyc1tpXTsKLQkgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQorCSAgICAgICAgICBJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOworCSAgICAgICAgICBpZiAodGhpc1NlcnZlclJ1bnRpbWUgIT0gbnVsbCAmJiBzUnVudGltZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQogCSAgICAgICAgICB7CiAJICAgICAgICAgICAgc2VydmVyID0gdGhpc1NlcnZlcjsKIAkgICAgICAgICAgICBicmVhayBvdXRlcjsKQEAgLTY1OCwzMCArNjY3LDM0IEBACiAJICAgIHsKIAkgICAgICAvL0dldCBhIHNlcnZlciB0eXBlIHRoYXQgaGFzIHRoZSBzYW1lIHJ1bnRpbWUgdHlwZS4KIAkgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsgCi0JICAgICAgSVJ1bnRpbWVUeXBlIHNSdW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JICAgICAgSVNlcnZlclR5cGUgZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPSBudWxsOwotCSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKKwkgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKIAkgICAgICB7Ci0JICAgICAgICBJU2VydmVyVHlwZSB0aGlzU2VydmVyVHlwZSA9IHNlcnZlclR5cGVzW2ldOwotCSAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCSAgICAgICAgewotCSAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPT0gbnVsbCkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JICAgICAgICAgIH0KLQkgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXJUeXBlLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgCi0JICAgICAgLy9JZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIHdhcyBub3QgZm91bmQgYnV0Ci0JICAgICAgLy90aGVyZSB3YXMgYSBzZXJ2ZXIgdHlwZSB0aGF0IG1hdGNoZWQsIHJldHVybiB0aGF0IG9uZS4gICAgICAgIAotCSAgICAgIGlmIChzZXJ2ZXJUeXBlID09IG51bGwgJiYgZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgIT0gbnVsbCkKLQkgICAgICB7ICAgICAgICAKLQkgICAgICAgIHNlcnZlclR5cGUgPSBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZTsKKwkJICAgICAgSVJ1bnRpbWVUeXBlIHNSdW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7CisJCSAgICAgIElTZXJ2ZXJUeXBlIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID0gbnVsbDsKKwkJICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQorCQkgICAgICB7CisJCSAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKKwkJICAgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKKwkJICAgICAgICBpZiAoc1J1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlLmdldElkKCkuZXF1YWxzKHNSdW50aW1lVHlwZS5nZXRJZCgpKSkKKwkJICAgICAgICB7CisJCSAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPT0gbnVsbCkKKwkJICAgICAgICAgIHsKKwkJICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKKwkJICAgICAgICAgIH0KKwkJICAgICAgICAgIGlmICh0aGlzU2VydmVyVHlwZS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQorCQkgICAgICAgICAgeworCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgICAgfQorCQkgICAgICAgIH0gICAgIAorCQkgICAgICB9CisJCSAgICAgIAorCQkgICAgICAvL0lmIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgd2FzIG5vdCBmb3VuZCBidXQKKwkJICAgICAgLy90aGVyZSB3YXMgYSBzZXJ2ZXIgdHlwZSB0aGF0IG1hdGNoZWQsIHJldHVybiB0aGF0IG9uZS4gICAgICAgIAorCQkgICAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsICYmIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlICE9IG51bGwpCisJCSAgICAgIHsgICAgICAgIAorCQkgICAgICAgIHNlcnZlclR5cGUgPSBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZTsKKwkJICAgICAgfQogCSAgICAgIH0KIAkgICAgfQogCkBAIC03MjcsNyArNzQwLDggQEAKIAkgICAgZm9yIChpbnQgaj0wOyBqPHNlcnZlclR5cGVzLmxlbmd0aDsgaisrKSAgICAgIAogCSAgICB7CiAJICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tqXTsKLQkgICAgICBpZiAodGhpc1NlcnZlclR5cGUuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKKwkgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7CisJICAgICAgaWYgKHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUgIT0gbnVsbCAmJiB0aGlzU2VydmVyVHlwZS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQogCSAgICAgIHsKIAkgICAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIGl0IG1hdGNoZXMgYW55IG9mIHRoZSBydW50aW1lcy4KIAkgICAgICAgIEl0ZXJhdG9yIHJ1bnRpbWVzSXRyID0gcnVudGltZXMuaXRlcmF0b3IoKTsKQEAgLTczNSwxMSArNzQ5LDE0IEBACiAJICAgICAgICB7CiAJICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSAob3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSlydW50aW1lc0l0ci5uZXh0KCk7CiAJICAgICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotCSAgICAgICAgICBJUnVudGltZVR5cGUgc1J1bnRpbWVUeXBlID0gc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQorCSAgICAgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKIAkgICAgICAgICAgewotCSAgICAgICAgICAgIHNlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKLQkgICAgICAgICAgfSAgICAgICAgICAKKwkgICAgICAgIAkgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOworCQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQorCQkgICAgICAgICAgeworCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7CisJCSAgICAgICAgICB9ICAgICAgICAgIAorCSAgICAgICAgICB9CiAJICAgICAgICB9CiAJICAgICAgfSAgICAgICAgICAgIAogCSAgICB9CkBAIC03NTIsMTUgKzc2OSwyMiBAQAogCSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKSBpdHIKIAkgICAgICAgICAgICAubmV4dCgpOwogCSAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0JICAgICAgICBJUnVudGltZVR5cGUgc1J1bnRpbWVUeXBlID0gc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCisJICAgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKIAkgICAgICAgIHsKLQkgICAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgc2VydmVyVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlOwotCSAgICAgICAgICAgIGJyZWFrIG91dGVyOwotCSAgICAgICAgICB9CisJCSAgICAgICAgSVJ1bnRpbWVUeXBlIHNSdW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7CisJCSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKKwkJICAgICAgICB7CisJCSAgICAgICAgICBJU2VydmVyVHlwZSB0aGlzU2VydmVyVHlwZSA9IHNlcnZlclR5cGVzW2ldOworCQkgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXJUeXBlICE9IG51bGwpCisJCSAgICAgICAgICB7CisJCQkgICAgICAgICAgSVJ1bnRpbWVUeXBlIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUgPSB0aGlzU2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpOworCQkJICAgICAgICAgIGlmIChzUnVudGltZVR5cGUgIT0gbnVsbCAmJiB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZVR5cGUuZ2V0SWQoKSkpCisJCQkgICAgICAgICAgeworCQkJICAgICAgICAgICAgc2VydmVyVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlOworCQkJICAgICAgICAgICAgYnJlYWsgb3V0ZXI7CisJCQkgICAgICAgICAgfQorCQkgICAgICAgICAgfQorCQkgICAgICAgIH0KIAkgICAgICAgIH0KIAkgICAgICB9CiAJICAgIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1R5cGVTZWxlY3Rpb25GaWx0ZXIyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhCmluZGV4IGYzNjJmZDIuLmNkMTBjZmUgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1R5cGVTZWxlY3Rpb25GaWx0ZXIyLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbkZpbHRlcjIuamF2YQpAQCAtMSwxNSArMSwxNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKKyAqCiAgKiBDb250cmlidXRvcnM6CiAgKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogMjAwNjA2MDYgICAxMDUwNDUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uICAgICAgICAgIAorICogMjAwNzAzMjggICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7CkBAIC0yMCw2ICsyMSw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rOworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwpAQCAtOTgsNiArMTAxLDE1IEBACiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfQogICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAvL1RPRE86IEJ1ZyAxNzk3NTEgLSBOZWVkIHRvIG1ha2UgY2hlY2tpbmcgZm9yIHR5cGVzIHJlY29nbml6ZWQgYXMgYm90dG9tLXVwIHRvIGJlIG1vcmUgZXh0ZW5zaWJsZSAgICAgICAgIAorICAgICAgICAgIAorICAgICAgICAgIGlmIChzdXBwb3J0ZWRUeXBlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgCSAgaWYgKGluaXRpYWxPYmplY3QgaW5zdGFuY2VvZiBCZWFuTGluayB8fCBpbml0aWFsT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKSB7CisgICAgICAgIAkJICBzdXBwb3J0ZWRUeXBlcy5hZGQod3N0KTsKKyAgICAgICAgCSAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAvLyBlbmQgb2YgVE9ETyBmb3IgYnVnIDE3OTc1MQogICAgICAgICB9CiAgICAgICB9CiAgICAgICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZTc3OTA3MC4uMDJhZjk4ZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwNC5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IHdzYy5qYXIsCiAgd2Vic2VydmljZXV0aWxzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4KQEAgLTI3LDEyICsyNywxMiBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKICBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCiAgb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCisgb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKICBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCkBAIC01NSw2ICs1NSw2IEBACiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCiAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKKyBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDMuNS4wKSIsCiAgb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCiBFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uLmphdmEKaW5kZXggODhhYTQ1OS4uZmY5OGZiZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZUeXBlVmlzaXRvckFjdGlvbi5qYXZhCkBAIC0xLDIzICsxLDMyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICAqIAogICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwogCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7CkBAIC04Myw2ICs5MiwxMyBAQAogICAgICAgewogCSAgICAgIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KHR5cGVOYXZpZ2F0b3IsZlBhcmVudEVsZW1lbnQpOwogCSAgICB9CisJICAgIGVsc2UgaWYgKGphdmFDbGFzcyAhPSBudWxsICYmICFnZXRSZXR1cm5QYXJhbSgpICYmCisJCQkJLy8gdGhlIGZvbGxvd2luZyBjYXNlcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGZvciBpbnB1dAorCQkJCShqYXZhQ2xhc3MuaXNJbnRlcmZhY2UoKSB8fCBqYXZhQ2xhc3MuaXNBYnN0cmFjdCgpIHx8ICFoYXNEZWZhdWx0Q29uc3RydWN0b3IoamF2YUNsYXNzKSkpIHsKKwkgICAgCQorCSAgICAJRWxlbWVudCBlbGVtZW50ID0gQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQodHlwZU5hdmlnYXRvcixmUGFyZW50RWxlbWVudCk7CisJICAgIAllbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoVHlwZUVsZW1lbnQuTk9OX0lOU1RBTlRJQUJMRSwgQm9vbGVhbi5UUlVFKTsKKwkgICAgfQogCSAgICBlbHNlewogCSAgICAgIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24oZlBhcmVudEVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7CiAJICAgICAgYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwpAQCAtMTExLDQgKzEyNywzMCBAQAogICAgICAvLwogICAgICByZXR1cm4gc3RhdHVzOwogICAgfQorCisgIC8qKgorICAgKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGphdmFDbGFzcyBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgKiBAcGFyYW0gamF2YUNsYXNzIFRoZSBqYXZhIGNsYXNzCisgICAqIEByZXR1cm4gdHJ1ZSBpZiBqYXZhQ2xhc3MgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciwgZmFsc2Ugb3RoZXJ3aXNlCisgICAqLworICBwcml2YXRlIGJvb2xlYW4gaGFzRGVmYXVsdENvbnN0cnVjdG9yKEphdmFDbGFzcyBqYXZhQ2xhc3MpIHsKKwkgICAKKwkgIExpc3QgbWV0aG9kcyA9IGphdmFDbGFzcy5nZXRNZXRob2RzKCk7CisJICBJdGVyYXRvciBpdGVyID0gbWV0aG9kcy5pdGVyYXRvcigpOworCSAgIAorCSAgYm9vbGVhbiBmb3VuZENvbnN0cnVjdG9yID0gZmFsc2U7CisJICAgCisJICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZCkgaXRlci5uZXh0KCk7CisJCSAgIAorCQkgIGlmIChtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhqYXZhQ2xhc3MuZ2V0TmFtZSgpKSkgeworCQkJICBpZiAobWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpLmxlbmd0aCA9PSAwKQorCQkJCSAgcmV0dXJuIG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQzsKKwkJCSAgZm91bmRDb25zdHJ1Y3RvciA9IHRydWU7CisJCSAgfQorCSAgfQorCSAgIAorCSAgLy8gaWYgbm8gY29uc3RydWN0b3IgaXMgZm91bmQgYXQgdGhpcyBwb2ludCwgYSBkZWZhdWx0IG9uZSBpcyBpbXBsaWNpdGx5IHByb3ZpZGVkCisJICByZXR1cm4gIWZvdW5kQ29uc3RydWN0b3I7CisgIH0KIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExUcmVlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEKaW5kZXggMDNiOTQ3OS4uZDc1ZTQ0ZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEKQEAgLTEwLDYgKzEwLDggQEAKICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogMjAwNzAxMTIgICAxNjU3MjEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTREwgaW1wb3J0IGNhbm5vdCB1c2UgcmVsYXRpdmUgaW1wb3J0IHdpdGggdG8gcGFyZW50IGRpcmVjdG9yaWVzCisgKiAyMDA3MDMwOCAgIDE3NjY0OSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ29weVdTRExUcmVlQ29tbWFuZCBkb2VzIG5vdCBoYW5kbGUgIlwiIGNvcnJlY3RseSBpbiBhbiBhYnNvbHV0ZSB3c2RsIFVSTAorICogMjAwNzAzMjYgICAxNzkzMzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFJlZ2VuIHdlYiBzZXJ2aWNlIHNrZWxldG9uIHJlLWNvcGllcyB3c2RsIGFuZCB4c2Qgb250byB0aGVtc2VsdmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwogCkBAIC0xMzQsNyArMTM2LDEzIEBACiAgIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gZGVmKQogICAJCQkJCQl3c2RsUmVsUGF0aCA9IHJlbFBhdGgudG9TdHJpbmcoKTsKIAotICAJCQkJCXdyaXRlWE1MT2JqKGVudmlyb25tZW50LCBiYXNlRGVzdGluYXRpb25VUkksIHJlbFBhdGgudG9TdHJpbmcoKSwgZGVmaW5pdGlvbik7CisgIAkJCQkJU3RyaW5nIGRlc3RVUkkgPSB3cml0ZVhNTE9iaihlbnZpcm9ubWVudCwgYmFzZURlc3RpbmF0aW9uVVJJLCByZWxQYXRoLnRvU3RyaW5nKCksIGRlZmluaXRpb24pOworICAJCQkJCQorICAJCQkJCS8vIGZvciB0aGUgc3RhcnRpbmcgd3NkbCwgaWYgdGhlIHRoZSBzb3VyY2UgcGF0aCBhbmQgZGVzdGluYXRpb24gcGF0aCBhcmUgdGhlIHNhbWUsCisgIAkJCQkJLy8gd2UgZG8gbm90IG5lZWQgdG8gY29weSB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgb250byB0aGVtc2VsdmVzIChidWcgMTc5MzM3KQorICAJCQkJCWlmIChkZWZpbml0aW9uID09IGRlZiAmJiB3c2RsVVJJICE9IG51bGwgJiYKKyAgCQkJCQkJbm9ybWFsaXplKHdzZGxVUkkpLmVxdWFscyhub3JtYWxpemUoZGVzdFVSSSkpKQorICAJCQkJCQlyZXR1cm47CiAgIAkJCQl9CiAgIAkJCQllbHNlCiAgIAkJCQkJd3JpdGVYTUxPYmooZW52aXJvbm1lbnQsIGJhc2VEZXN0aW5hdGlvblVSSSwgcmVsUGF0aC50b1N0cmluZygpLCAoWFNEU2NoZW1hKSBpbmZvLmNvbnRlbnQpOwpAQCAtMTg5LDggKzE5Nyw4IEBACiAgICAgfQogICB9ICAgIAogICAKLSAgLy8gd3JpdGUgYSB3c2RsIGZpbGUKLSAgcHJpdmF0ZSB2b2lkIHdyaXRlWE1MT2JqKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyBkZXN0VVJJLCBTdHJpbmcgZGVzdExvY2FsbmFtZSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSAKKyAgLy8gd3JpdGUgYSB3c2RsIGZpbGUsIHJldHVybnMgdGhlIHVyaSBvZiB0aGUgZmlsZSB3cml0dGVuLgorICBwcml2YXRlIFN0cmluZyB3cml0ZVhNTE9iaihJRW52aXJvbm1lbnQgZW52LCBTdHJpbmcgZGVzdFVSSSwgU3RyaW5nIGRlc3RMb2NhbG5hbWUsIERlZmluaXRpb24gZGVmaW5pdGlvbikgCiAJdGhyb3dzIFdTRExFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBVUklFeGNlcHRpb24gewogCQogCVN0cmluZ0J1ZmZlciBkZXN0aW5hdGlvbkZpbGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGFkZFRyYWlsaW5nU2VwYXJhdG9yKGRlc3RVUkkpKTsKQEAgLTIwMSwxMCArMjA5LDEyIEBACiAgICAgT3V0cHV0U3RyZWFtIG9zID0gZW52LmdldFVSSUZhY3RvcnkoKS5uZXdVUkkoZGVzdGluYXRpb25GaWxlVVJJLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwogICAgIHdzZGxXcml0ZXIud3JpdGVXU0RMKGRlZmluaXRpb24sIG9zKTsKICAgICBvcy5jbG9zZSgpOworICAgIAorICAgIHJldHVybiBkZXN0aW5hdGlvbkZpbGVVUkkudG9TdHJpbmcoKTsKICAgfQogICAKLSAgLy8gd3JpdGUgYW4geHNkIGZpbGUKLSAgcHJpdmF0ZSB2b2lkIHdyaXRlWE1MT2JqKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyBkZXN0VVJJLCBTdHJpbmcgZGVzdExvY2FsbmFtZSwgWFNEU2NoZW1hIHhzZFNjaGVtYSkgCisgIC8vIHdyaXRlIGFuIHhzZCBmaWxlLCByZXR1cm5zIHRoZSB1cmkgb2YgdGhlIGZpbGUgd3JpdHRlbi4KKyAgcHJpdmF0ZSBTdHJpbmcgd3JpdGVYTUxPYmooSUVudmlyb25tZW50IGVudiwgU3RyaW5nIGRlc3RVUkksIFN0cmluZyBkZXN0TG9jYWxuYW1lLCBYU0RTY2hlbWEgeHNkU2NoZW1hKSAKIAl0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBVUklFeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCQogCVN0cmluZ0J1ZmZlciBkZXN0aW5hdGlvbkZpbGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGFkZFRyYWlsaW5nU2VwYXJhdG9yKGRlc3RVUkkpKTsKQEAgLTIxOSw2ICsyMjksOCBAQAogCU91dHB1dFN0cmVhbSBvcyA9IGVudi5nZXRVUklGYWN0b3J5KCkubmV3VVJJKGRlc3RpbmF0aW9uRmlsZVVSSS50b1N0cmluZygpKS5nZXRPdXRwdXRTdHJlYW0oKTsKIAlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3MpKTsKIAlvcy5jbG9zZSgpOworCQorCXJldHVybiBkZXN0aW5hdGlvbkZpbGVVUkkudG9TdHJpbmcoKTsKICAgfSAgCiAgIAogICBwcml2YXRlIHZvaWQgY29weVdTREwoSUVudmlyb25tZW50IGVudiwgU3RyaW5nIHVyaSwgU3RyaW5nIGRlc3RVUkksIFN0cmluZyBkZXN0TG9jYWxuYW1lKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBVUklFeGNlcHRpb24KQEAgLTQ0Myw2ICs0NTUsOCBAQAogCSAgCiAgIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCiAgIHsKKyAgICBpZiAod3NkbFVSSSAhPSBudWxsKQorICAgICAgICB3c2RsVVJJID0gd3NkbFVSSS5yZXBsYWNlKCdcXCcsICcvJyk7CiAgICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKICAgfQogCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRWxlbWVudC5qYXZhCmluZGV4IGYxNTkyZjYuLmFmODBkN2YgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRWxlbWVudC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRWxlbWVudC5qYXZhCkBAIC0xLDEyICsxLDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICAqIAogICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7CkBAIC0yNCw3ICsyNyw3IEBACiAKICAgLy8gQ29weXJpZ2h0CiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX0lOU1RBTlRJQUJMRSA9ICJub25JbnN0YW50aWFibGUiOwogCiAgIHB1YmxpYyBzdGF0aWMgaW50IEJFQU4gPSAwOwogICBwdWJsaWMgc3RhdGljIGludCBTSU1QTEUgPSAxOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQppbmRleCBhZjJkOTRlLi5iMDM1MjFlIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQpAQCAtMTAsNiArMTAsNyBAQAogICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAyMDA2MDYxMiAgIDE0NTQzMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCisgKiAyMDA3MDQxMCAgIDE4MDk1MiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU2FtcGxlIEpTUCBnZW5lcmF0b3IgY2hva2VzIG9uIGludGVyZmFjZXMgYW5kIGFic3RyYWN0IGNsYXNzZXMgCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwogCkBAIC0xNjIsNiArMTYzLDkgQEAKICAgewogICAgICBUeXBlRWxlbWVudCBlbGVtZW50ID0gKFR5cGVFbGVtZW50KW9iamVjdDsKICAgICAgICAgICAKKyAgICAgaWYgKEJvb2xlYW4uVFJVRS5lcXVhbHMoZWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFR5cGVFbGVtZW50Lk5PTl9JTlNUQU5USUFCTEUpKSkKKwkgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisgICAgIAogICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNpbXBsZUVsZW1lbnQpIGZJc1NpbXBsZSA9IHRydWU7CiAgICAgIGVsc2UgZklzU2ltcGxlID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQppbmRleCBmNzhjZDU5Li5kZWE2ODg3IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhCkBAIC0xLDEyICsxLDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICAqIAogICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwpAQCAtNjksMzQgKzcyLDQwIEBACiAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZUVsZW1lbnQuZ2V0TmFtZSgpOyAKICAgICAgICBmVHlwZUlkTmFtZSA9IGlkTmFtZSh0eXBlTmFtZSk7CiAgICAgICAgICAgICAgIAotICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgICAgcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5ydW4odHlwZUVsZW1lbnQscmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcik7Ci0gICAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIgPSBuZXcgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcihmYnVmZmVyKTsKLSAgICAgICByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgICAgZmllbGRWaXNpdG9yLnJ1bih0eXBlRWxlbWVudCxyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMik7Ci0gICAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5nZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICAgIGZidWZmZXIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5nZXRTdHJpbmdCdWZmZXIoKTsKKyAgICAgICBpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHModHlwZUVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFKSkpIHsKKyAgICAgICAKKwkgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKKwkgICAgICAgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlcik7CisJICAgICAgIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOworCSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnJ1bih0eXBlRWxlbWVudCxyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKTsKKwkgICAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7CisJICAgICAgIGZidWZmZXIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOworCQorCSAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOworCSAgICAgICBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyID0gbmV3IFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlcik7CisJICAgICAgIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKKwkgICAgICAgZmllbGRWaXNpdG9yLnJ1bih0eXBlRWxlbWVudCxyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMik7CisJICAgICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKKwkgICAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLmdldFN0cmluZ0J1ZmZlcigpOwogCiAgICAgICAKLSAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8anNwOnVzZUJlYW4gaWQ9XCIiICsgZlR5cGVJZE5hbWUgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiICsgdHlwZU5hbWUgKyAiXCIgLz4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgICAKLSAgICAgICBFbnVtZXJhdGlvbiBlID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRSZXNpZGVudFZlY3RvcigpLmVsZW1lbnRzKCk7Ci0gICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBmVHlwZUlkTmFtZSArICIuIiArIGUubmV4dEVsZW1lbnQoKSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIH0KLQotICAgICAgIEVudW1lcmF0aW9uIGUyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOwotICAgICAgIHdoaWxlKGUyLmhhc01vcmVFbGVtZW50cygpKXsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIGZUeXBlSWROYW1lICsgIi4iICsgZTIubmV4dEVsZW1lbnQoKSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIH0gCisJICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOworCSAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8anNwOnVzZUJlYW4gaWQ9XCIiICsgZlR5cGVJZE5hbWUgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiICsgdHlwZU5hbWUgKyAiXCIgLz4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7CisJICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOworCSAgICAgICAKKwkgICAgICAgRW51bWVyYXRpb24gZSA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOworCSAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKKwkgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBmVHlwZUlkTmFtZSArICIuIiArIGUubmV4dEVsZW1lbnQoKSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOworCSAgICAgICB9CisJCisJICAgICAgIEVudW1lcmF0aW9uIGUyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOworCSAgICAgICB3aGlsZShlMi5oYXNNb3JlRWxlbWVudHMoKSl7CisJICAgICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZlR5cGVJZE5hbWUgKyAiLiIgKyBlMi5uZXh0RWxlbWVudCgpICsgU3RyaW5nVXRpbHMuTkVXTElORSk7CisJICAgICAgIH0gCisJICAgfQorICAgICAgIGVsc2UKKyAgICAJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyB0eXBlTmFtZSArICIgIiArIGZUeXBlSWROYW1lICsgIiA9IG51bGw7IisgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgICAKKyAgICAgICAKICAgICAgICBwdXRSZXNpZGVudFZlY3RvcihmVHlwZUlkTmFtZSk7CiAgICAgICAgLy9lbmQgb2YgY2hhbmdlcwogICAgICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNWQ5M2JhOS4uODUxYTY4ZiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDMucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwNS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpAQCAtMjksOSArMjksOSBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCiAgb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAogIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKICBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKICBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCkBAIC00Myw2ICs0Myw2IEBACiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiCisgb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDMsMS4xLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKaW5kZXggM2NlYmZhZi4uZTI0M2EzZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKQEAgLTE0LDYgKzE0LDcgQEAKICAqIDIwMDYwNTE2ICAgMTI2OTY1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwNzAxMjMgICAxNjc0ODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKKyAqIDIwMDcwNDAzICAgMTczNjU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwpAQCAtMjUsNiArMjYsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKQEAgLTEyNywxMiArMTI5LDEyIEBACiAKIAkJICAvLyBDcmVhdGUgdGhlIHNlcnZpY2UgbW9kdWxlIGlmIG5lZWRlZC4KIAkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKKwkJICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwogCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKIAkJICB7CiAJCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShzZXJ2aWNlUnVudGltZUlkXywgbW9kdWxlVHlwZV8pOwogCQkJICBpZiAobWF0Y2hlcykKLQkJCSAgewotCQkJCSAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWRfKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKKwkJCSAgewkJCQkgIAogCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7CiAJCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKIAkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7CkBAIC0xNDYsNyArMTQ4LDE3IEBACiAJCQkJCSAgcmV0dXJuIHN0YXR1czsKIAkJCQkgIH0gICAgICAgIAogCQkJICB9ICAgICAgICAgICAgCi0JCSAgfSAgICAgICAgICAgICAgICAgICAgCisJCSAgfSBlbHNlIHsKKwkJCS8vIGFkZCBmYWNldHMgcmVxdWlyZWQgYnkgV2ViIHNlcnZpY2UgcnVudGltZQorCQkgICAgICAgIGlmIChyZnYubGVuZ3RoICE9IDApIHsKKwkJICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnYsIG1vbml0b3IpOworCQkgICAgICAgIAlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQorCQkgICAgICAgIAl7CisJCSAgICAgICAgCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOworCQkgICAgICAgIAkJcmV0dXJuIHN0YXR1czsKKwkJICAgICAgICAJfSAgICAgIAorCQkgICAgICAgIH0KKwkJICB9CiAJICB9CiAJICByZXR1cm4gc3RhdHVzOwogCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmluZGV4IDJlOWY2MjIuLmE1ODYxZTcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTExLDYgKzExLDcgQEAKICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCiAgKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgorICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKIApAQCAtMjcsNiArMjgsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKIAogcHVibGljIGNsYXNzIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKIHsgICAgCkBAIC01Niw3ICs1OSwyMiBAQAogICAgIGlmICh0eXBlSWRzIT1udWxsICYmIHR5cGVJZHMubGVuZ3RoPjApCiAgICAgewogICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZCh0eXBlSWRzWzBdKTsKLSAgICB9CisgIH0gZWxzZSB7CisJICBpZiAoaW5pdGlhbFNlbGVjdGlvbl8gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbl8uaXNFbXB0eSgpKQorCSAgeyAKKwkJICBPYmplY3QgaW5pdGlhbE9iamVjdCA9IGluaXRpYWxTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOyAKKwkJICAvLyBpbml0aWFsT2JqZWN0IHdvdWxkIG5vdCBiZSBudWxsIHNpbmNlICFpbml0aWFsU2VsZWN0aW9uXy5pc0VtcHR5KCkKKwkJICBPYmplY3QgYWRhcHRlZE9iamVjdCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkT2JqZWN0KGluaXRpYWxPYmplY3QpOworCQkgIGlmIChhZGFwdGVkT2JqZWN0ICE9IG51bGwpIHsKKwkJCSAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCSAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikpOworCQkJICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7CisJCQkgIGVudHJ5YnVmZi5hcHBlbmQoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIpOworCQkJICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsgICAgIAorCQkJICB0eXBlUnVudGltZVNlcnZlcl8uc2V0VHlwZUlkKGVudHJ5KTsKKwkJICB9CisJICB9CisgIH0KICAgICAKICAgICBzZXJ2aWNlR2VuZXJhdGlvbl8gPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKTsKICAgICAJCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1NlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmluZGV4IDg5Y2VjYjQuLjkwYThmNTIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1NlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1NlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiAgKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5CiAgKiAyMDA2MDUyNSAgIDE0Mzg0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5CiAgKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQorICogMjAwNzAzMTkJICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uIGFkZGVkIGluIHNvbWUgbnVsbCBjaGVja3MKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lOwogCkBAIC0zNjMsMjQgKzM2NCwzMCBAQAogICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGlzIHByZXNlbnQsIGNoZWNrIHRoYXQgb25lIGZpcnN0CiAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZlcnMubGVuZ3RoOyBqKyspCiAgICAgICB7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotICAgICAgICBpZiAoc2VydmVyRmFjdG9yeUlkID09IHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2pdOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAJaWYgKHNlcnZlcnNbal0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQorICAgIAl7CisJICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKKwkgICAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQgPT0gcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKQorCSAgICAgICAgeworCSAgICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFNlcnZlcihzZXJ2aWNlUnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKKwkgICAgICAgICAgeworCSAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2pdOworCSAgICAgICAgICB9CisJICAgICAgICB9ICAKKyAgICAJfQogICAgICAgfQogICAgICAgCiAgICAgICAvL0Egc2VydmVyIG9mIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgY291bGQgbm90IGJlIGZvdW5kIG9yIGRpZCBub3QgbWF0Y2guIENoZWNrIGFsbCB0aGUgZXhpc3Rpbmcgc2VydmVycy4gICAgCiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspCiAgICAgICB7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFNlcnZlcihzZXJ2aWNlUnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOwotICAgICAgICB9CisgICAgCWlmIChzZXJ2ZXJzW2ldICE9IG51bGwgJiYgc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKKyAgICAJeworCSAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7CisJICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFNlcnZlcihzZXJ2aWNlUnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKKwkgICAgICAgIHsKKwkgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbaV07CisJICAgICAgICB9CisgICAgCX0KICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG51bGw7ICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGQ5YmUwYWMuLmU4OTM1NmYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEyLDExICsxMiwxMSBAQAogIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7eC1pbnRlcm5hbDo9dHJ1ZQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIKKyBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDMuNS4wKSIKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGUxNjBkMWIuLjUwYzg0ZDcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAxLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC0yMSwxNCArMjEsMTUgQEAKICBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCiAgb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKICBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCisgb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwNSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKKyBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAzLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BvcHVwL1BvcHVwVGVzdFNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCmluZGV4IDI1YTBkMTEuLjIzNDhhZWYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCkBAIC0xLDE1ICsxLDE2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAorICoKICAqIENvbnRyaWJ1dG9yczoKICAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAyMDA2MDgwMyAgIDE1Mjc5MCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24gKGNyZWF0ZWQgY2xhc3MpCisgKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wb3B1cDsKIApAQCAtMjMsNiArMjQsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREw7CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKIAogCiBwdWJsaWMgY2xhc3MgUG9wdXBUZXN0U2VydmljZSBleHRlbmRzIFBvcHVwVGVzdFdTREwKQEAgLTUxLDYgKzUzLDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICBTZXJ2aWNlUmVmIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VSZWYpb2JqZWN0OwogICAgICAgICAgIHdzZGxVUkwgPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCk7CisgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgIAl3c2RsVVJMID0gKFN0cmluZykgb2JqZWN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAJLy8gT2JqZWN0IGlzIG5vdCBhbnkgdHlwZXMgd2UgcmVjb2duaXplZCwgd3NkbFVSTCBpcyBzdGlsbCBudWxsLgorICAgICAgICAgIAkvLyBUcnkgbG9va2luZyB1cCBhbiBhZGFwdGVyIGZvciB0aGUgb2JqZWN0LgorICAgICAgICAJLy8gSWYgZm91bmQsIHVwZGF0ZSB3c2RsVVJMIGNvbnRhaW5zIHRoZSBhZGFwdGVkIFdTREwgc3RyaW5nLiAgCisgICAgICAgIAkvLyBJZiBub3QgZm91bmQsIHdzZGxVUkwgd291bGQgc3RpbGwgYmUgbnVsbC4KKyAgICAgICAgCXdzZGxVUkwgPSBBZGFwdGVyVXRpbHMuZ2V0QWRhcHRlZFdTREwob2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYWRkTGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zLCB3c2RsVVJMLCBzdGF0ZUxvY2F0aW9uLCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA0N2U2MjU0Li5lMzBkN2QyIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDMucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwNC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC0yNCwxMSArMjQsMTEgQEAKICBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMS4zLjApIiwKICBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKKyBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAogIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKQEAgLTM3LDEwICszNywxMCBAQAogIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCiAgb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKKyBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDMuNS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiCiBFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQppbmRleCBmMjM1MWIwLi4wNjA2N2RlIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0xMCw2ICsxMCw3IEBACiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDYwMjIyICAgMTI4MDk0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKKyAqIDIwMDcwMzA1ICAgMTc1MTk0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbnQgdGFzayBJbml0aWFsU2VsZWN0aW9uIG9ubHkgYWxsb3dzIHdzZGwgd2l0aGluIHRoZSB3b3Jrc3BhY2UKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwogCkBAIC04NCw2ICs4NSwxMCBAQAogCQkJICBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihyZXNvdXJjZSk7CiAJCQl9CiAJCX0KKwkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgJiYgdmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCI6IikgIT0gLTEpIHsKKwkJCS8vIHJlbW90ZSBmaWxlCisJCQlzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih2YWx1ZSk7CisJCX0KIAkJZWxzZQogCQl7CiAJCQkvLyBzdHJpbmcgZG9lc24ndCByZXR1cm4gcmVzb3VyY2UgLSBlcnJvciBjb25kaXRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGRlNDVhYTIuLmNhZWUzZDggMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7eC1pbnRlcm5hbDo9dHJ1ZSwKQEAgLTE0LDYgKzE0LDYgQEAKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS51cmk7eC1pbnRlcm5hbDo9dHJ1ZQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMKaW5kZXggNDI5YzE4ZS4uYzExZDhjMCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMKQEAgLTEsMTggKzEsMjEgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAjCiAjIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KKyMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMjAwNzA0MTggICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjCiAjIENvbW1vbiBNZXNzYWdlcwogIwotTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I9SVdBQjAwMTRFIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VyZWQuCitNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUj1JV0FCMDAxNEUgVW5leHBlY3RlZCBleGNlcHRpb24gb2NjdXJyZWQuCiAKIFRJVExFX1dBUk5JTkc9V2FybmluZzoKIFRJVExFX0VSUk9SPUVycm9yOgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhYmJmZTFjLi5mOGI5MTcxIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbi5FbnZVSVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC0xNyw5ICsxNywxMSBAQAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwO3gtaW50ZXJuYWw6PXRydWUKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKKyBvcmcuZWNsaXBzZS5vc2dpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKKyBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCiBFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZURpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZURpYWxvZy5qYXZhCmluZGV4IGM1ODMwMWIuLmYxYTU1YzcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEKQEAgLTExLDcgKzExLDYgQEAKICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5CiAgKiAyMDA2MDQxOCAgIDEzNjc1OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MTEwNiAgIDE0MjUwMCBkYXZpZC5zY2huZWlkZXJAdW5pc3lzLmNvbSAtIERhdmlkIFNjaG5laWRlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwogCkBAIC02MCw3ICs1OSw3IEBACiAgICAgCiAgICAgLy9DYWxsIGV4dGVuZGVycyBvdmVycmlkZSBvZiB0aGUgY2FsbFNldHRlcnMgbWV0aG9kIHRvIGludGlhbGl6ZSBhbnkgZGF0YSBpbiB3aWRnZXQKICAgICBjYWxsU2V0dGVycygpOyAgIAotICAgIERpYWxvZy5hcHBseURpYWxvZ0ZvbnQocGFyZW50KTsKKyAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoY29udHJvbCk7CiAgICAgcmV0dXJuIGNvbnRyb2w7CiAgIH0gIAogICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEKaW5kZXggMGM3OTVjZS4uNGM1NWVhMSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTEsNiArMTEsNyBAQAogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKKyAqIDIwMDcwMzE5ICAgMTc1NzIxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKIApAQCAtMjM4LDggKzIzOSwxMSBAQAogICB7IAkKICAgCS8vIFdlIG5lZWQgdG8gc2ltdWxhdGUgdGhlIG5leHQgYnV0dG9uIGJlaW5nIHByZXNzZWQgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcGFnZXMuCiAgIAkvLyBJZiBhbiBlcnJvciBvY2N1cnMgd2Ugd2lsbCByZXR1cm4gZmFsc2UgYW5kIHJlc2V0IHRoZSBjb21tYW5kIHN0YWNrIGJhY2sgb3VyIG9yaWdpbmFsIHN0YXRlLgotICAJYm9vbGVhbiAgICBkb25lT2sgICAgPSB0cnVlOwotICAJUGFnZVdpemFyZERhdGFFdmVudHMgc3RhcnRQYWdlID0gY3VycmVudFBhZ2VfOworICAJYm9vbGVhbiAgICAgICAgICAgICAgZG9uZU9rICAgICAgICAgPSB0cnVlOworICAJUGFnZVdpemFyZERhdGFFdmVudHMgc3RhcnRQYWdlICAgICAgPSBjdXJyZW50UGFnZV87CisgICAgaW50ICAgICAgICAgICAgICAgICAgc3RhY2tTdGFja1NpemUgPSB3aWRnZXRTdGFja1N0YWNrXy5zaXplKCk7CisgICAgCisgICAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGN1cnJlbnRGYWN0b3J5ID0gd2lkZ2V0RmFjdG9yeV87CiAgIAkKICAgCS8vIEV4dGVybmFsaXplIHRoZSBjdXJyZW50IHBhZ2UuCiAgIAljdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpLmV4dGVybmFsaXplKCk7CkBAIC0yNTQsMTAgKzI1OCw2IEBACiAgIAkgIAkvLyBBbiBlcnJvciBvY2N1cmVkIGluIG9uZSBvZiB0aGUgY29tbWFuZHMuCiAgIAkgIAlkb25lT2sgPSBmYWxzZTsKICAgCSAgfQotICAJICBlbHNlCi0gIAkgIHsKLSAgCSAgCWN1cnJlbnRQYWdlXyA9IG5leHRQYWdlXzsKLSAgCSAgfQogICAJfQogICAJd2hpbGUoIG5leHRQYWdlXyAhPSBudWxsICYmIGRvbmVPayk7CiAgIAkKQEAgLTI3MiwxMCArMjcyLDMyIEBACiAgIAkgIHsKICAgCSAgICBkb25lID0gZW5naW5lXy51bmRvVG9MYXN0U3RvcCgpOwogICAJICAgIHBhZ2UgPSBnZXRQYWdlKCBsYXN0VW5kb0ZyYWdtZW50XyApOworICAgICAgICAKKyAgICAgICAgaWYoIHBhZ2UgPT0gbnVsbCAmJiAKKyAgICAgICAgICAgIGN1cnJlbnRGYWN0b3J5ICE9IG51bGwgJiYgCisgICAgICAgICAgICBsYXN0VW5kb0ZyYWdtZW50XyAhPSBudWxsICYmCisgICAgICAgICAgICBnZXRXaWRnZXRGYWN0b3J5KCBsYXN0VW5kb0ZyYWdtZW50Xy5nZXRJZCgpICkgPT0gY3VycmVudEZhY3RvcnkgKQorICAgICAgICB7CisgICAgICAgICAgLy8gVGhlIGN1cnJlbnQgd2lkZ2V0IGZhY3RvcnkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXN0IGZyYWdtZW50IHRoYXQgd2FzIHVuZG9uZS4KKyAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIGFyZSBiYWNrIHRvIHdoZXJlIHdlIHN0YXJ0ZWQuCisgICAgICAgICAgZG9uZSA9IHRydWU7ICAgIAorICAgICAgICAgIAorICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHdpZGdldFN0YWNrU3RhY2sgYmFjayB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGJlZm9yZQorICAgICAgICAgIC8vIHJ1bm5pbmcgZm9yd2FyZC4KKyAgICAgICAgICB3aWRnZXRTdGFja1N0YWNrXy5zZXRTaXplKCBzdGFja1N0YWNrU2l6ZSApOworICAgICAgICAgIAorICAgICAgICAgIFN0YWNrRW50cnkgZW50cnkgPSAoU3RhY2tFbnRyeSl3aWRnZXRTdGFja1N0YWNrXy5wZWVrKCk7CisgICAgICAgICAgCisgICAgICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBlbnRyeS5mYWN0b3J5XzsKKyAgICAgICAgICB3aWRnZXRTdGFja18gICA9IGVudHJ5LnN0YWNrXzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBwYWdlICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOworICAgICAgICAgIHdpZGdldFN0YWNrXyA9IG51bGw7CisgICAgICAgIH0KICAgCSAgfQogICAJICB3aGlsZSggcGFnZSAhPSBzdGFydFBhZ2UgJiYgIWRvbmUgKTsgCSAgCi0gIAkgIAotICAJICBjdXJyZW50UGFnZV8gPSBwYWdlOwogICAJfQogICAJCiAgIAlyZXR1cm4gZG9uZU9rOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5leHRlcm5hbFRvb2xCdWlsZGVycy9idWlsZC1hbnR0YXNrcy5sYXVuY2gKaW5kZXggZGIzNmM3ZS4uZTRiNzlhZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaAorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoCkBAIC0xLDE5ICsxLDEzIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UuYW50LkFudExhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmFudC5BbnRCdWlsZGVyTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5BVFRSX0xBVU5DSF9JTl9CQUNLR1JPVU5EIiB2YWx1ZT0iZmFsc2UiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9Im9yZy5lY2xpcHNlLmFudC5pbnRlcm5hbC51aS5hbnRzdXBwb3J0LkludGVybmFsQW50UnVubmVyIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmFudC51aS5ERUZBVUxUX1ZNX0lOU1RBTEwiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkRFRkFVTFRfQ0xBU1NQQVRIIiB2YWx1ZT0idHJ1ZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9SVU5fQlVJTERfS0lORFMiIHZhbHVlPSJmdWxsLGluY3JlbWVudGFsLCIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuQVRUUl9SRUZSRVNIX1NDT1BFIiB2YWx1ZT0iJHtwcm9qZWN0fSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5hbnQudWkuQVRUUl9UQVJHRVRTX1VQREFURUQiIHZhbHVlPSJ0cnVlIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX0xPQ0FUSU9OIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOi9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sfSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvaWJtLXNkay1qYXZhNS0yMDA2MDkxMiIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQ0xBU1NQQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpLkFudENsYXNzcGF0aFByb3ZpZGVyIi8+Ci08bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1BBVEhTIj4KLTxsaXN0RW50cnkgdmFsdWU9Ii9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sIi8+Ci08L2xpc3RBdHRyaWJ1dGU+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmFudC51aS5ERUZBVUxUX1ZNX0lOU1RBTEwiIHZhbHVlPSJ0cnVlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9UUklHR0VSU19DT05GSUdVUkVEIiB2YWx1ZT0idHJ1ZSIvPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmFwcGVuZEVudmlyb25tZW50VmFyaWFibGVzIiB2YWx1ZT0idHJ1ZSIvPgotPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9UWVBFUyI+Ci08bGlzdEVudHJ5IHZhbHVlPSIxIi8+Ci08L2xpc3RBdHRyaWJ1dGU+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0icHJvY2Vzc19mYWN0b3J5X2lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpLnJlbW90ZUFudFByb2Nlc3NGYWN0b3J5Ii8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KIDwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNDIyODBkNi4uNzkzNTk1NyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwNC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KQEAgLTE2LDEwICsxNiwxMCBAQAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKICBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDEuNy4wKSIsCiAgb3JnLmVjbGlwc2UuYW50LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjEuMTAwLDMuMi4wKSIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcwppbmRleCA0MTNkNzAwLi44MTVjMjU1IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudC5wcm9wZXJ0aWVzCkBAIC0xLDEyICsxLDE1IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogIwogIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCisjIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIwMDcwNDE4ICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIwpAQCAtMjMsNyArMjYsNyBAQAogTVNHX0VSUk9SX0ZPTERFUl9IQVNfQ0hJTERSRU49SVdBQjAwMTJFIENhbm5vdCBjcmVhdGUgZm9sZGVyOiB7MH0gdGhhdCBhbHJlYWR5IGhhcyBjaGlsZHJlbi4KIE1TR19FUlJPUl9JTz1JV0FCMDAwNkUgQW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlc291cmNlICJ7MH0iLgogTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUlXQUIwMTY0RSBDYW5ub3QgY3JlYXRlIHRoZSBmaWxlICJ7MX0iIHJlbGF0aXZlIHRvIHRoZSBwYXRoICJ7MH0iIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgb3ZlcndyaXRpbmcgaGFzIG5vdCBiZWVuIGVuYWJsZWQuIERvIHlvdSB3YW50IHRvIGVuYWJsZSBpdCBmb3IgdGhpcyBmaWxlPwotTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I9SVdBQjAwMTRFIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VyZWQuCitNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUj1JV0FCMDAxNEUgVW5leHBlY3RlZCBleGNlcHRpb24gb2NjdXJyZWQuCiBNU0dfRVJST1JfQU5UX0RBVEFfVFJBTlNGT1JNPUV4Y2VwdGlvbiB0cmFuc2Zvcm1pbmcgQW50IHByb3BlcnR5IGtleSB7MH0gdXNpbmcgdHJhbnNmb3JtYXRpb24gezF9LgogTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUj1FeGNlcHRpb24gaW52b2tpbmcgc2V0dGVyIG1ldGhvZCB7MH0gZm9yIEFudCBwcm9wZXJ0eS4KIE1TR19FUlJPUl9BTlRfQ01EX0ZSQUdNRU5UPUV4Y2VwdGlvbiByZXRyaWV2aW5nIEFudCBjb21tYW5kIGZyYWdtZW50IGZyb20gcmVnaXN0cnkuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZQppbmRleCA4MGFhZTNiLi5hOGZkOTk0IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY3ZzaWdub3JlCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jdnNpZ25vcmUKQEAgLTMsNyArMyw3IEBACiB3ZWJhcHBzCiB0ZW1wLmZvbGRlcgogYnVpbGQueG1sCisqLmphcgogKi53YXIKIGV4cGxvcmVyc3JjLnppcAogamF2YUNvbXBpbGVyLiouYXJncwotKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZWNjNGI2My4uZTEzYTg1MCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDQucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwNS5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGV4cGxvcmVyLmphciwKICB3c2V4cGxvcmVyLXByb3BlcnRpZXMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luCkBAIC0xMiwxMyArMTIsMTMgQEAKICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAogIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2UuaGVscC5hcHBzZXJ2ZXI7YnVuZGxlLXZlcnNpb249IlszLjEuMTAwLDMuMi4wKSIsCiAgb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKKyBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIiwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAorIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKQEAgLTMzLDUgKzMzLDYgQEAKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCisgY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCwzLjUuMCkiLAorIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDMsMS4xLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLXdhci54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZC13YXIueG1sCmluZGV4IDhhMjQ5NTEuLjc4ZWM4YjYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLXdhci54bWwKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQtd2FyLnhtbApAQCAtMSwxNSArMSwxNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxwcm9qZWN0IG5hbWU9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIgZGVmYXVsdD0iYnVpbGQud2FycyIgYmFzZWRpcj0iLiI+CiAgICAgCi0gICAgPCEtLSBUaGUgZW52LkpBVkFfNV9IT01FIHZhbHVlcyBzZXQgb24gdGhlCi0gICAgamF2YS9qdm0gYW5kIGphdmFjL2V4ZWN1dGFibGUgYXR0cmlidXRlcyBpbnN1cmUKLSAgICB0aGUgV1NFIHNlcnZsZXRzIGFyZSBjb21waWxlZCB0byB0aGUgSmF2YSA1IGxldmVsIC0tPgorICAgIDwhLS0gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaW1wb3J0YW50IHRvIHNldCBoZXJlLCBhbmQgCisgICAgdG8gaGF2ZSBKQVZBXzRfSE9NRSBzZXQgdG8gc29tZSBKYXZhIDEuNCBTREsgaG9tZSwgCisgICAgc2luY2Ugd2Ugd2FudCB0aGlzIGNvbXBpbGVkIHdpdGggYSAxLjQgdmVyc2lvbiwgYnV0IAorICAgIHRoaXMgb3ZlcmFsbCBidWlsZCBpdHNlbGYgbWlnaHQgYmUgYmVpbmcgcmFuIGluIEphdmEgMS41IC0tPgogICAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPgogICAgIAogCTxwcm9wZXJ0eSBuYW1lPSJ3c2V4cGxvcmVyRGlyIiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3JlciIvPgogCiAJPHRhcmdldCBuYW1lPSJqc3Bjb21waWxlIiB1bmxlc3M9IndzZXhwbG9yZXIud2FyIiBkZXNjcmlwdGlvbj0iUHJlLWNvbXBpbGUgdGhlIEpTUHMgaW4gdGhlIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciBwbHVnaW4iPgotCQk8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUuamFzcGVyLkpzcEMiIGZvcms9InRydWUiIGp2bT0iJHtlbnYuSkFWQV81X0hPTUV9L2Jpbi9qYXZhIj4KKwkJPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmphc3Blci5Kc3BDIiBmb3JrPSJ0cnVlIiBqdm09IiR7ZW52LkpBVkFfNF9IT01FfS9iaW4vamF2YSI+CiAJCQk8YXJnIGxpbmU9Ii13ZWJ4bWwgJHt3c2V4cGxvcmVyRGlyfS9XRUItSU5GL3dlYi54bWwgLWQgJHt3c2V4cGxvcmVyRGlyfSAtd2ViYXBwICR7d3NleHBsb3JlckRpcn0iLz4KIAkJCTxjbGFzc3BhdGg+CiAJCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VMb2NhdGlvbn0vcGx1Z2lucyI+CkBAIC0yMCw3ICsyMSw3IEBACiAJCQkJPC9maWxlc2V0PgogCQkJPC9jbGFzc3BhdGg+CiAJCTwvamF2YT4KLQkJPGphdmFjIGRlc3RkaXI9IiR7d3NleHBsb3JlckRpcn0vV0VCLUlORi9jbGFzc2VzIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGZhaWxvbmVycm9yPSJmYWxzZSIgZXhlY3V0YWJsZT0iJHtlbnYuSkFWQV81X0hPTUV9L2Jpbi9qYXZhYyIgZm9yaz0idHJ1ZSI+CisJCTxqYXZhYyBkZXN0ZGlyPSIke3dzZXhwbG9yZXJEaXJ9L1dFQi1JTkYvY2xhc3NlcyIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBmYWlsb25lcnJvcj0iZmFsc2UiIGV4ZWN1dGFibGU9IiR7ZW52LkpBVkFfNF9IT01FfS9iaW4vamF2YWMiIGZvcms9InRydWUiPgogCQkJPHNyYyBwYXRoPSIke3dzZXhwbG9yZXJEaXJ9Ii8+CiAJCQk8Y2xhc3NwYXRoPgogCQkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucyI+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCmluZGV4IDZjNjBjNjMuLjQ2NjMyNWIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTEyLDYgKzEyLDcgQEAKICAqIDIwMDYwNzIxICAgMTUxNDA5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIFJICiAgKiAyMDA2MDgwMiAgIDE1MDQyOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKICAqIDIwMDYxMjE5ICAgMTY4NjIwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIExpbnV4CisgKiAyMDA3MDIyMCAgIDE2ODYyMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBMaW51eCAoY29udC4pCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwogCkBAIC0xMjAsNyArMTIxLDYgQEAKIAkJCUlXZWJCcm93c2VyIGJyb3dzZXIgPSBudWxsOwogCQkJCiAJCQlpZiAoZm9yY2VMYXVuY2hPdXRzaWRlSURFKSB7Ci0JCQkJYnJvd3NlciA9IGJyb3dzZXJTdXBwb3J0LmdldEV4dGVybmFsQnJvd3NlcigpOwogCQkJCQogCQkJCS8vIGV4dGVybmFsIGJyb3dzZXIgc3VwcG9ydCB1c2VzIHN3dCBQcm9ncmFtLmZpbmRQcm9ncmFtKCkgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlIGJyb3dzZXIgZm9yIEhUTUwgZmlsZXMKIAkJCQkvLyBjZXJ0YWluIHZlcnNpb25zIG9mIHN3dCBQcm9ncmFtIGNsYXNzIG5lZWQgdG8gYmUgcnVuIGZyb20gdGhlIFVJIHRocmVhZCwgb3RoZXJ3aXNlIGZpbmRQcm9ncmFtKCkgZG9lcyBub3QKQEAgLTEzMCwxNCArMTMwLDE2IEBACiAJCQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpID09IG51bGwpIHsKIAkJCQkJCiAJCQkJCS8vIGNyZWF0ZSBhIHJ1bm5hYmxlIHRvIG9wZW4gdGhlIGJyb3dzZXIsIHJ1biBpdCBpbiB0aGUgVUkgdGhyZWFkCi0JCQkJCU9wZW5Ccm93c2VyUnVubmFibGUgcnVubmFibGUgPSBuZXcgT3BlbkJyb3dzZXJSdW5uYWJsZShicm93c2VyLCBuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKKwkJCQkJT3BlbkJyb3dzZXJSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBPcGVuQnJvd3NlclJ1bm5hYmxlKGJyb3dzZXJTdXBwb3J0LCBuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKIAkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMocnVubmFibGUpOwogCQkJCQkKIAkJCQkJaWYgKHJ1bm5hYmxlLmdldEV4Y2VwdGlvbigpICE9IG51bGwpCiAJCQkJCQl0aHJvdyBydW5uYWJsZS5nZXRFeGNlcHRpb24oKTsKIAkJCQl9Ci0JCQkJZWxzZQorCQkJCWVsc2UgeworCQkJCQlicm93c2VyID0gYnJvd3NlclN1cHBvcnQuZ2V0RXh0ZXJuYWxCcm93c2VyKCk7CiAJCQkJCWJyb3dzZXIub3BlblVSTChuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKKwkJCQl9CiAJCQl9CiAJCQllbHNlIHsKIAkJCQkvLyBicm93c2VySWQKQEAgLTI1OCwxOCArMjYwLDE4IEBACiAgKi8KIGNsYXNzIE9wZW5Ccm93c2VyUnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CiAJCi0JcHJpdmF0ZSBJV2ViQnJvd3NlciBicm93c2VyOworCXByaXZhdGUgSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0OwogCXByaXZhdGUgVVJMIHVybDsKIAlwcml2YXRlIEV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOwogCQotCXB1YmxpYyBPcGVuQnJvd3NlclJ1bm5hYmxlKElXZWJCcm93c2VyIGJyb3dzZXIsIFVSTCB1cmwpIHsKLQkJdGhpcy5icm93c2VyID0gYnJvd3NlcjsKKwlwdWJsaWMgT3BlbkJyb3dzZXJSdW5uYWJsZShJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQgYnJvd3NlclN1cHBvcnQsIFVSTCB1cmwpIHsKKwkJdGhpcy5icm93c2VyU3VwcG9ydCA9IGJyb3dzZXJTdXBwb3J0OwogCQl0aGlzLnVybCA9IHVybDsKIAl9CiAJCiAJcHVibGljIHZvaWQgcnVuKCkgewogCQl0cnkgewotCQkJYnJvd3Nlci5vcGVuVVJMKHVybCk7CQkJCisJCQlicm93c2VyU3VwcG9ydC5nZXRFeHRlcm5hbEJyb3dzZXIoKS5vcGVuVVJMKHVybCk7CQkJCiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAJCQlleGNlcHRpb24gPSBlOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0RMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YQppbmRleCA5Yzc3MDAxLi4xODJiNThmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YQpAQCAtMSwxNiArMSwxNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKKyAqCiAgKiBDb250cmlidXRvcnM6CiAgKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogMjAwNjA2MDYgICAxMDUwNjkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCiAgKiAyMDA2MDgwMyAgIDE1Mjc5MCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KKyAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwOwogCkBAIC0zNCw2ICszNSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9uaXRvci5HZXRNb25pdG9yQ29tbWFuZDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwpAQCAtNzMsMjkgKzc1LDMzIEBACiAgICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7CiAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCiAgICAgICAgIHsKLSAgICAgICAgICBGaWxlIHdzZGxGaWxlID0gKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxVUkwgPSB3c2RsRmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbFVSTCA9IHdzZGxGaWxlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKKyAgICAgICAgCUZpbGUgd3NkbEZpbGUgPSAoKElSZXNvdXJjZSlvYmplY3QpLmdldExvY2F0aW9uKCkudG9GaWxlKCk7CisgICAgICAgIAl0cnkKKyAgICAgICAgCXsKKyAgICAgICAgCQl3c2RsVVJMID0gd3NkbEZpbGUudG9VUkwoKS50b1N0cmluZygpOworICAgICAgICAJfQorICAgICAgICAJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKKyAgICAgICAgCXsKKyAgICAgICAgCQl3c2RsVVJMID0gd3NkbEZpbGUudG9TdHJpbmcoKTsKKyAgICAgICAgCX0KKyAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKICAgICAgICAgewotICAgICAgICAgIFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKW9iamVjdDsgICAgICAgICAgCi0gICAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gc2VydmljZUltcGwuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAgICAgICAgCi0gICAgICAgICAgd3NkbFVSTCA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgfSAgICAgICAgCi0KLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCisgICAgICAgIAlTZXJ2aWNlSW1wbCBzZXJ2aWNlSW1wbCA9IChTZXJ2aWNlSW1wbClvYmplY3Q7ICAgICAgICAgIAorICAgICAgICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gc2VydmljZUltcGwuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAgICAgICAgCisgICAgICAgIAl3c2RsVVJMID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCiAgICAgICAgIHsKLSAgICAgICAgICBXU0RMUmVzb3VyY2VJbXBsIFdTRExSSW1wbCA9IChXU0RMUmVzb3VyY2VJbXBsKW9iamVjdDsKLSAgICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMUkltcGwuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAgIHdzZGxVUkwgPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7CisgICAgICAgIAlXU0RMUmVzb3VyY2VJbXBsIFdTRExSSW1wbCA9IChXU0RMUmVzb3VyY2VJbXBsKW9iamVjdDsKKyAgICAgICAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExSSW1wbC5nZXREZWZpbml0aW9uKCk7CisgICAgICAgIAl3c2RsVVJMID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAJd3NkbFVSTCA9IChTdHJpbmcpIG9iamVjdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgCS8vIE9iamVjdCBpcyBub3QgYW55IHR5cGVzIHdlIHJlY29nbml6ZWQsIHdzZGxVUkwgaXMgc3RpbGwgbnVsbC4KKyAgICAgICAgICAJLy8gVHJ5IGxvb2tpbmcgdXAgYW4gYWRhcHRlciBmb3IgdGhlIG9iamVjdC4KKyAgICAgICAgCS8vIElmIGZvdW5kLCB1cGRhdGUgd3NkbFVSTCBjb250YWlucyB0aGUgYWRhcHRlZCBXU0RMIHN0cmluZy4gIAorICAgICAgICAJLy8gSWYgbm90IGZvdW5kLCB3c2RsVVJMIHdvdWxkIHN0aWxsIGJlIG51bGwuCisgICAgICAgIAl3c2RsVVJMID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKG9iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgYWRkTGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zLCB3c2RsVVJMLCBzdGF0ZUxvY2F0aW9uLCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pOyAgICAgICAgCkBAIC0xNDAsNCArMTQ2LDUgQEAKICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCiAgIHsKICAgfQorICAKIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YQppbmRleCA5Mzk2MjNiLi43ZjRkNmEwIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXNyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhCkBAIC0xLDEyICsxLDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICAqIAogICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgorICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDIwMDcwNDA0ICAgMTgxMDY1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3QgaGFuZGxlIHR5cGVzIHJlZmVyZW5jZWQgYWNyb3NzIGlubGluZSBzY2hlbWFzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7CiAKQEAgLTI5LDcgKzMyLDcgQEAKICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwogICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlZEVsZW1lbnQgPSByZXNvbHZlWFNERWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZiA9IGdldFhTRFR5cGVEZWZpbml0aW9uKHJlc29sdmVkRWxlbWVudCk7CisgICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmID0gcmVzb2x2ZVhTRFR5cGVEZWZpbml0aW9uKGdldFhTRFR5cGVEZWZpbml0aW9uKHJlc29sdmVkRWxlbWVudCkpOwogICAgICAgaWYgKHR5cGVEZWYgIT0gbnVsbCkgewogICAgICAgICBpbnQgbWluT2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwogICAgICAgICBpbnQgbWF4T2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NQVhfT0NDVVJTOwpAQCAtNzYsNiArNzksMTcgQEAKICAgICBlbHNlCiAgICAgICByZXR1cm4gZWxlbWVudDsKICAgfQorICAKKyAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlWFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZikgeworCSAgCisJICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZSh0eXBlRGVmKSkgeworCQkgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudCh0eXBlRGVmKTsKKwkJICBpZiAocmVzb2x2ZWRDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKKwkJCSAgcmV0dXJuIChYU0RUeXBlRGVmaW5pdGlvbikgcmVzb2x2ZWRDb21wb25lbnQ7CisJICB9CisJICAKKwkgIHJldHVybiB0eXBlRGVmOworICB9CiAKICAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkgewogICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXNyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhCmluZGV4IDMzZTEzMGMuLjBkZWQ1YzkgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhCkBAIC0xLDEyICsxLDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAorICoKICAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KKyAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyMDA3MDQwNCAgIDE3Mzg3NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKIApAQCAtOTgsOCArMTAxLDcgQEAKICAgICAgICAgICBwYXJhbXNBc3NpZ25lZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihncm91cE1lbWJlckZyYWdzW2pdIGluc3RhbmNlb2YgWFNER3JvdXBGcmFnbWVudCkgewotICAgICAgICAJRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihpbnN0YW5jZURvY3VtZW50cywgaSwgZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldE1heE9jY3VycygpKTsKLSAgICAgICAgICAgCWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VzKTsKKyAgICAgICAgCWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGogPT0gZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGggLSAxKSB7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYTIzZDk2OS4uOWZlNjYwZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTQsNyArMTQsNyBAQAogIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKICBvcmcud3NkbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAogIG9yZy51ZGRpNGo7YnVuZGxlLXZlcnNpb249IlsyLjAuNCwyLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlMmFmNDU2Li5lOWIyYzY2IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KQEAgLTEwLDE1ICsxMCwxNiBAQAogIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAogIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAorIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscywKICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcm9wZXJ0aWVzO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCisgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuMy4wKSIsCiAgb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvdXRpbHMvQWRhcHRlclV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3V0aWxzL0FkYXB0ZXJVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTgxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3V0aWxzL0FkYXB0ZXJVdGlscy5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KKyAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlsczsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKKworLyoqCisgKiBUaGUgQWRhcHRlclV0aWxzIGNsYXNzIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyB0byBnZXQgb2JqZWN0cyBmcm9tIHRoZSBQbGF0Zm9ybSdzIGFkYXB0ZXIgZXh0ZW5zaW9uLgorICoKKyAqLworcHVibGljIGNsYXNzIEFkYXB0ZXJVdGlscyB7CQorCQorCS8qKgorCSAqIEBwYXJhbSBvYmplY3QgT2JqZWN0IHRvIGFkYXB0CisJICogQHJldHVybiBUaGUgYWRhcHRlZCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWxlIG9yIFN0cmluZyBpZiBhbiBhZGFwdGVyIGlzIGZvdW5kLiAKKwkgKiAgICAgICAgIFJldHVybnMgbnVsbCBpZiBhbiBhZGFwdGVyIGlzIG5vdCBmb3VuZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRBZGFwdGVkT2JqZWN0IChPYmplY3Qgb2JqZWN0KSB7IAorCQlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiKTsKKwkJaWYgKGFkYXB0ZWRPYmplY3QgPT0gbnVsbCkgeworCQkJYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpOworCQl9CisJCXJldHVybiBhZGFwdGVkT2JqZWN0OworCX0KKwkKKwkvKioKKwkgICAqIEBwYXJhbSBvYmplY3QgTG9vayB1cCBhbiBhZGFwdGVyIG1hcHBpbmcgdGhlIG9iamVjdCB0byBJRmlsZSBvciBTdHJpbmcuCisJICAgKiBAcmV0dXJuIFRoZSBXU0RMIHVyaSByZXR1cm5lZCBieSB0aGUgYWRhcHRlciBvciBudWxsIGlmIG5vIGFkYXB0ZXIgaXMgZm91bmQuCisJICAgKi8KKwkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFkYXB0ZWRXU0RMIChPYmplY3Qgb2JqZWN0KSB7CisJCSAgU3RyaW5nIHdzZGxVUkkgPSBudWxsOworCQkgIE9iamVjdCBhZGFwdGVkT2JqZWN0ID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRPYmplY3Qob2JqZWN0KTsKKwkJICBpZiAoIGFkYXB0ZWRPYmplY3QgIT0gbnVsbCkgeworCQkJICBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQorCQkJICB7CisJCQkJICBVUkkgdXJpID0gKChJRmlsZSlhZGFwdGVkT2JqZWN0KS5nZXRMb2NhdGlvblVSSSgpOworCQkJCSAgaWYgKHVyaSAhPSBudWxsKSB7CisJCQkJCSAgd3NkbFVSSSA9IHVyaS50b1N0cmluZygpOworCQkJCSAgfQorCQkJCSAgCisJCQkgIH0gZWxzZSBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJCSAgd3NkbFVSSSA9IChTdHJpbmcpIGFkYXB0ZWRPYmplY3Q7CisJCQkgIH0KKwkJICB9CisJCSAgcmV0dXJuIHdzZGxVUkk7CisJICB9CisJCit9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDg0M2ZhMzguLjU1MWQ5NmEgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAxLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KQEAgLTMxLDIwICszMSwyMCBAQAogIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjt4LWludGVybmFsOj10cnVlLAogIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy4zLjApIiwKICBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAogIG9yZy53c2RsNGo7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAogIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi40LjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjMuMCkiLAorIG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMi4zLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDQzODdkYjkuLmQwZTJhM2YgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlX1VJX1BMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjEwMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjEuMTAyLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbgogQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEKaW5kZXggODZkMDMxZS4uMDMxYjcwZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFFbmRQb2ludC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRW5kUG9pbnQuamF2YQpAQCAtMjAsOSArMjAsMTIgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwpAQCAtNTcsNiArNjAsNDMgQEAKICAgICAgICAgfQkKIAkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCiAJfQorCQorCXB1YmxpYyBMaXN0IGdldEFwcGxpY2FibGVQcm90b2NvbCgpIHsKKwkJTGlzdCBwcm90b2NvbHMgPSBuZXcgQXJyYXlMaXN0KCk7CisJCXByb3RvY29scy5hZGQoIlNPQVAiKTsKKwkJcHJvdG9jb2xzLmFkZCgiSFRUUCIpOworCQkKKwkJcmV0dXJuIHByb3RvY29sczsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0UHJvdG9jb2woU3RyaW5nIG5ld1Byb3RvY29sKSB7CisJCVN0cmluZyBjdXJyZW50QWRkcmVzcyA9IGdldEFkZHJlc3MoKTsKKwkJaWYgKG5ld1Byb3RvY29sLmVxdWFscygiU09BUCIpKSB7CisJCQlTT0FQQWRkcmVzcyBzb2FwID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBBZGRyZXNzKCk7CisJCQlzb2FwLnNldExvY2F0aW9uVVJJKGN1cnJlbnRBZGRyZXNzKTsKKwkJCXNldE5ld1Byb3RvY29sKHNvYXApOworCQl9CisJCWVsc2UgaWYgKG5ld1Byb3RvY29sLmVxdWFscygiSFRUUCIpKSB7CisJCQlIVFRQQWRkcmVzcyBodHRwID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBBZGRyZXNzKCk7CisJCQlodHRwLnNldExvY2F0aW9uVVJJKGN1cnJlbnRBZGRyZXNzKTsKKwkJCXNldE5ld1Byb3RvY29sKGh0dHApOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBzZXROZXdQcm90b2NvbChFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtZW50KSB7CisJCVBvcnQgcG9ydCA9IGdldFBvcnQoKTsKKwkJCisJCUxpc3QgZXhpc3RpbmdFbGVtZW50cyA9IHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOworCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpc3RpbmdFbGVtZW50cy5zaXplKCk7IGluZGV4KyspIHsKKwkJCU9iamVjdCBpdGVtID0gZXhpc3RpbmdFbGVtZW50cy5nZXQoaW5kZXgpOworCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyB8fCBpdGVtIGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpIHsKKwkJCQlleGlzdGluZ0VsZW1lbnRzLnJlbW92ZShpbmRleCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGVsZW1lbnQpOworCX0KICAgICAKICAgICBwcm90ZWN0ZWQgTGlzdCBnZXRBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKQogICAgIHsgICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhCmluZGV4IGFkODUxYWYuLjcxMmZjYTIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIGNvbXBOYW1lID0gIioqYW5vbnltb3VzKioiOyAKICAgICB9CiAKLSAgICByZXR1cm4gdGQuZ2V0TmFtZSgpICE9IG51bGwgPyB0ZC5nZXROYW1lKCkgOiBjb21wTmFtZTsKKyAgICByZXR1cm4gKHRkICE9IG51bGwgJiYgdGQuZ2V0TmFtZSgpICE9IG51bGwpID8gdGQuZ2V0TmFtZSgpIDogY29tcE5hbWU7CiAgIH0KICAgCiAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJldmlldygpIHsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YQppbmRleCA2OGE3MDBmLi4yMmRhOTRhIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEJpbmRpbmdDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRCaW5kaW5nQ29tbWFuZC5qYXZhCkBAIC0xMCw4ICsxMCwxOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwogCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwogCiBwdWJsaWMgY2xhc3MgVzExU2V0QmluZGluZ0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKQEAgLTI4LDkgKzM4LDgwIEBACiAJCXRyeSB7CiAJCQliZWdpblJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7CiAJCQlwb3J0LnNldEVCaW5kaW5nKGJpbmRpbmcpOworCisJCQl1cGRhdGVQb3J0UHJvdG9jb2wocG9ydCwgYmluZGluZyk7CiAJCX0KIAkJZmluYWxseSB7CiAJCQllbmRSZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwogCQl9CiAJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVQb3J0UHJvdG9jb2woUG9ydCBwb3J0LCBCaW5kaW5nIGJpbmRpbmcpIHsKKwkJU3RyaW5nIHBvcnRBZGRyZXNzID0gbnVsbDsKKwkJT2JqZWN0IGJpbmRpbmdQcm90b2NvbCA9IGdldEJpbmRpbmdQcm90b2NvbChiaW5kaW5nKTsKKwkJT2JqZWN0IHBvcnRQcm90b2NvbCA9IGdldFBvcnRQcm90b2NvbChwb3J0KTsKKwkJCisJCWlmIChwb3J0UHJvdG9jb2wgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgeworCQkJcG9ydEFkZHJlc3MgPSAoKFNPQVBBZGRyZXNzKSBwb3J0UHJvdG9jb2wpLmdldExvY2F0aW9uVVJJKCk7CisJCX0KKwkJZWxzZSBpZiAocG9ydFByb3RvY29sIGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpIHsKKwkJCXBvcnRBZGRyZXNzID0gKChIVFRQQWRkcmVzcykgcG9ydFByb3RvY29sKS5nZXRMb2NhdGlvblVSSSgpOworCQl9CisKKwkJaWYgKHBvcnRBZGRyZXNzID09IG51bGwpIHsKKwkJCXBvcnRBZGRyZXNzID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciOworCQl9CisJCQorCQlpZiAoYmluZGluZ1Byb3RvY29sIGluc3RhbmNlb2YgU09BUEJpbmRpbmcgJiYgIShwb3J0UHJvdG9jb2wgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykpIHsKKwkJCVNPQVBBZGRyZXNzIHNvYXAgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKKwkJCXNvYXAuc2V0TG9jYXRpb25VUkkocG9ydEFkZHJlc3MpOworCQkJc2V0TmV3UHJvdG9jb2wocG9ydCwgc29hcCk7CisJCX0KKwkJZWxzZSBpZiAoYmluZGluZ1Byb3RvY29sIGluc3RhbmNlb2YgSFRUUEJpbmRpbmcgJiYgIShwb3J0UHJvdG9jb2wgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykpIHsKKwkJCUhUVFBBZGRyZXNzIGh0dHAgPSBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUEFkZHJlc3MoKTsKKwkJCWh0dHAuc2V0TG9jYXRpb25VUkkocG9ydEFkZHJlc3MpOworCQkJc2V0TmV3UHJvdG9jb2wocG9ydCwgaHR0cCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGdldEJpbmRpbmdQcm90b2NvbChCaW5kaW5nIGJpbmRpbmcpIHsKKwkJSXRlcmF0b3IgaXQgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKKwkJCWlmIChpdGVtIGluc3RhbmNlb2YgU09BUEJpbmRpbmcgfHwgaXRlbSBpbnN0YW5jZW9mIEhUVFBCaW5kaW5nKSB7CisJCQkJcmV0dXJuIGl0ZW07CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBudWxsOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBPYmplY3QgZ2V0UG9ydFByb3RvY29sKFBvcnQgcG9ydCkgeworCQkKKwkJSXRlcmF0b3IgaXQgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisgICAgICAgIAlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKKyAgICAgICAgCWlmIChpdGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKKyAgICAgICAgCQlyZXR1cm4gaXRlbTsKKyAgICAgICAgCX0KKyAgICAgICAgCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykgeworICAgICAgICAJCXJldHVybiBpdGVtOworICAgICAgICAJfQorICAgICAgICB9CQorCisJCXJldHVybiBudWxsOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldE5ld1Byb3RvY29sKFBvcnQgcG9ydCwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCkgeworCQlMaXN0IGV4aXN0aW5nRWxlbWVudHMgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKKwkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXN0aW5nRWxlbWVudHMuc2l6ZSgpOyBpbmRleCsrKSB7CisJCQlPYmplY3QgaXRlbSA9IGV4aXN0aW5nRWxlbWVudHMuZ2V0KGluZGV4KTsKKwkJCWlmIChpdGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MgfHwgaXRlbSBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSB7CisJCQkJZXhpc3RpbmdFbGVtZW50cy5yZW1vdmUoaW5kZXgpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChlbGVtZW50KTsKKwl9CiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKaW5kZXggMTZlNzJlZS4uNTgzNDVkYiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpAQCAtMTksMTAgKzE5LDEyIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRCaW5kaW5nQ29tbWFuZDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFCcm93c2VDb21wb25lbnREaWFsb2c7CkBAIC02NSw2ICs2Nyw5IEBACiAJCQlQb3J0IHBvcnQgPSAoUG9ydCkgdzExRW5kUG9pbnQuZ2V0VGFyZ2V0KCk7CiAJCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGlGaWxlLCBnZXREZWZpbml0aW9uKCkpOwogCQkJaGVscGVyLnNldFdTRExDb21wb25lbnQocG9ydCwgImJpbmRpbmciLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgYmluZGluZ09iamVjdCk7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJQmluZGluZyBuZXdCaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOworCQkJVzExU2V0QmluZGluZ0NvbW1hbmQudXBkYXRlUG9ydFByb3RvY29sKHBvcnQsIG5ld0JpbmRpbmcpOwogCQl9CQkKIAkJZWxzZSBpZiAoYmluZGluZ09iamVjdCBpbnN0YW5jZW9mIElCaW5kaW5nKXsKIAkJCUlCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGJpbmRpbmdPYmplY3Q7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEKaW5kZXggYjg4ZDhlZC4uZmRjNzUxMSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VuZFBvaW50U2VjdGlvbi5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YQpAQCAtMTEsMTAgKzExLDEyIEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKQEAgLTM5LDcgKzQxLDcgQEAKIAogcHVibGljIGNsYXNzIEVuZFBvaW50U2VjdGlvbiBleHRlbmRzIFJlZmVyZW5jZVNlY3Rpb24gewogCXByb3RlY3RlZCBUZXh0IGFkZHJlc3NUZXh0OwotCXByb3RlY3RlZCBDTGFiZWwgcHJvdG9jb2xWYWx1ZUxhYmVsOworCXByb3RlY3RlZCBDQ29tYm8gcHJvdG9jb2xDb21ibzsKIAkKIAlwcm90ZWN0ZWQgTGlzdCBiaW5kaW5nc0luQ29tYm8gPSBuZXcgQXJyYXlMaXN0KCk7CiAJCkBAIC03MiwyMSArNzQsMjEgQEAKIAogCQkvLyBQcm90b2NvbCBSb3cKIAkJQ0xhYmVsIHByb3RvY29sTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0wgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcHJvdG9jb2xWYWx1ZUxhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICItLS0tIik7IC8vJE5PTi1OTFMtMSQKLQkJCisJCXByb3RvY29sQ29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7IC8vJE5PTi1OTFMtMSQKKwogCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAJCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlTGFiZWwsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xWYWx1ZUxhYmVsLCAwLCBTV1QuQ0VOVEVSKTsKKwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbENvbWJvLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7CisJCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sQ29tYm8sIDAsIFNXVC5DRU5URVIpOwogCQlwcm90b2NvbExhYmVsLnNldExheW91dERhdGEoZGF0YSk7CiAJCQogCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAJCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwogCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKIAkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkcmVzc1RleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJcHJvdG9jb2xWYWx1ZUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCXByb3RvY29sVmFsdWVMYWJlbC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbFZhbHVlTGFiZWwsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BPUlRfUFJPVE9DT0xfVEVYVCk7CisJCXByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJcHJvdG9jb2xDb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKKwkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQpOwogCiAJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQklORElORyArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAogCQkKQEAgLTk4LDYgKzEwMCw3IEBACiAJICovCiAJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKIAkJcmVtb3ZlTGlzdGVuZXJzKGFkZHJlc3NUZXh0KTsKKwkJcHJvdG9jb2xDb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKIAogCQlzdXBlci5yZWZyZXNoKCk7CiAKQEAgLTEwNywyMSArMTEwLDIzIEBACiAJCQkJYWRkcmVzc1RleHQuc2V0VGV4dChlbmRQb2ludC5nZXRBZGRyZXNzKCkpOwogCQkJfQogCQl9Ci0JCS8vIFRPRE86IHJtYWg6IFdlIHNob3VsZCBub3Qga25vdyBhYm91dCBXMTFFbmRQb2ludC4gIFdlIG5lZWQgdG8gZm9yCi0JCS8vIG5vdyB0byBnZXQgYWNjZXNzIHRvIHRoZSBnZXRQcm90b2NvbCgpIG1ldGhvZC4gIEV2ZW50dWFsbHkgdGhlCi0JCS8vIGdldFByb3RvY29sKCkgbWV0aG9kIHNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSBJRW5kUG9pbnQgaW50ZXJmYWNlCi0JCS8vIHBvc3QgMS41Li4uCisJCQorCQlwcm90b2NvbENvbWJvLnJlbW92ZUFsbCgpOwogCQlpZiAoZW5kUG9pbnQgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewogCQkJU3RyaW5nIHByb3RvY29sVmFsdWUgPSAoKFcxMUVuZFBvaW50KSBlbmRQb2ludCkuZ2V0UHJvdG9jb2woKTsKLQkJCWlmIChwcm90b2NvbFZhbHVlLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCXByb3RvY29sVmFsdWUgPSAiLS0tLSI7IC8vJE5PTi1OTFMtMSQKKwkJCUxpc3QgcHJvdG9jb2xzID0gKChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0QXBwbGljYWJsZVByb3RvY29sKCk7CisJCQlJdGVyYXRvciBpdCA9IHByb3RvY29scy5pdGVyYXRvcigpOworCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJCXByb3RvY29sQ29tYm8uYWRkKChTdHJpbmcpIGl0Lm5leHQoKSk7CiAJCQl9Ci0JCQlwcm90b2NvbFZhbHVlTGFiZWwuc2V0VGV4dChwcm90b2NvbFZhbHVlKTsKKwkJCisJCQlwcm90b2NvbENvbWJvLnNldFRleHQocHJvdG9jb2xWYWx1ZSk7CiAJCX0KIAkJCiAJCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoYWRkcmVzc1RleHQpOwotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKHByb3RvY29sVmFsdWVMYWJlbCk7CisJCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IocHJvdG9jb2xDb21ibyk7CiAJCWFwcGx5VGV4dExpc3RlbmVycyhhZGRyZXNzVGV4dCk7CisJCXByb3RvY29sQ29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7CiAJfQogCQogCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKQEAgLTIxNiw2ICsyMjEsMTQgQEAKIAkJICBDb21tYW5kIGNvbW1hbmQgPSBlbmRQb2ludC5nZXRTZXRBZGRyZXNzQ29tbWFuZChuZXdBZGRyZXNzKTsKIAkJICBleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKIAkgIH0KKwkgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSBwcm90b2NvbENvbWJvICYmICFwcm90b2NvbENvbWJvLmlzRGlzcG9zZWQoKSkgeworCQkgIFN0cmluZyBuZXdQcm90b2NvbCA9IHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpOworCQkgIGlmIChuZXdQcm90b2NvbCAhPSBudWxsICYmIGdldE1vZGVsKCkgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgeworCQkJICBXMTFFbmRQb2ludCBlbmRQb2ludCA9IChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKTsKKwkJCSAgZW5kUG9pbnQuc2V0UHJvdG9jb2wobmV3UHJvdG9jb2wpOworCQkgIH0KKwkgIH0KKwogCSAgZWxzZSB7CiAJCSAgc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7CiAJICB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzExMGQzNy4uNTQwN2MwYSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMjAxLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMS4xMDIucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdGVXU0RMUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpAQCAtMjAsMTIgKzIwLDEyIEBACiAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuc29hcDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAogIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAogIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjMuMCkiLAogIG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMS43LjApIiwKICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKICBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCiAgb3JnLndzZGw0ajtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwyLjkuMCkiO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCisgb3JnLmFwYWNoZS54ZXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQ7YnVuZGxlLXZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuMy4wKSIsCiAgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1VSSVJlc29sdmVyV3JhcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEKaW5kZXggMWZmNjYyNS4uNjIyYzljNiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEKQEAgLTYzLDcgKzYzLDcgQEAKICAgLyoqCiAgICAqIFJlc29sdmUgcGxhdGZvcm0gVVJMcyB0byBzdGFuZGFyZCBVUkxzLiBUaGlzIG1ldGhvZCBoYXMgdGhlCiAgICAqIHByYWN0aWNhbCBlZmZlY3Qgb2YgdHJhbnNmb3JtaW5nIGEgVVJMIHN1Y2ggYXMKLSAgICogcGxhdGZvcm06L3Jlc291cmNlL3Rlc3QvdGVzdC53c2RsCisgICAqIHBsYXRmb3JtOi90ZXN0L3Rlc3Qud3NkbAogICAgKiBpbnRvCiAgICAqIGZpbGU6L2M6L3d0cC93b3Jrc3BhY2UvdGVzdC90ZXN0LndzZGwKICAgICogCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhCmluZGV4IGQyYzA5OGUuLjk5ZmRlZWEgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhCkBAIC0yMyw2ICsyMywxNCBAQAogewogICBwcm90ZWN0ZWQgSGFzaE1hcCB4c2RHcmFtbWFyUG9vbHMgPSBuZXcgSGFzaE1hcCgpOwogICBwcm90ZWN0ZWQgSGFzaE1hcCB4bWxHcmFtbWFyUG9vbHMgPSBuZXcgSGFzaE1hcCgpOworICAKKyAgLyogKG5vbi1KYXZhZG9jKQorICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IjZ2V0VmFsaWRhdG9yTmFtZSgpCisgICAqLworICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvck5hbWUoKSAKKyAgeworCXJldHVybiBXU0RMVmFsaWRhdGlvbk1lc3NhZ2VzLk1lc3NhZ2VfV1NETF92YWxpZGF0aW9uX21lc3NhZ2VfdWk7CisgIH0KIAogICAvKiogCiAgICAqIENyZWF0ZSBhbmQgY29uZmlndXJlIHRoZSB0d28gZ3JhbW1hciBwb29scyBmb3IgdGhpcyBXU0RMIHZhbGlkYXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0aW9uTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0aW9uTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFjMDliCi0tLSAvZGV2L251bGwKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRpb25NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7CisKKy8qKgorICogU3RyaW5ncyB1c2VkIGJ5IFdTREwgVmFsaWRhdGlvbgorICovCitwdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRpb25NZXNzYWdlcyBleHRlbmRzIE5MUyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS53c2RsdmFsaWRhdGlvbiI7Ly8kTk9OLU5MUy0xJAorCisJcHVibGljIHN0YXRpYyBTdHJpbmcgTWVzc2FnZV9XU0RMX3ZhbGlkYXRpb25fbWVzc2FnZV91aTsKKworCXN0YXRpYyB7CisJCS8vIGxvYWQgbWVzc2FnZSB2YWx1ZXMgZnJvbSBidW5kbGUgZmlsZQorCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU0RMVmFsaWRhdGlvbk1lc3NhZ2VzLmNsYXNzKTsKKwl9CisKKwlwcml2YXRlIFdTRExWYWxpZGF0aW9uTWVzc2FnZXMoKSB7CisJCS8vIGNhbm5vdCBjcmVhdGUgbmV3IGluc3RhbmNlCisJfQorfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2Uvd3NkbHZhbGlkYXRpb24ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL3dzZGx2YWxpZGF0aW9uLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkYjUzNAotLS0gL2Rldi9udWxsCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL3dzZGx2YWxpZGF0aW9uLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIS0tIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCisKKyMgdmFsaWRhdGlvbiBzdHJpbmdzCitNZXNzYWdlX1dTRExfdmFsaWRhdGlvbl9tZXNzYWdlX3VpPVdTREwgVmFsaWRhdG9yIHZhbGlkYXRpbmcgezB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMRG9jdW1lbnQuamF2YQppbmRleCAwODgyZWM5Li4xOTEyMmMxIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETERvY3VtZW50LmphdmEKQEAgLTk5Niw3ICs5OTYsNyBAQAogICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICB7CiAgICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50IG5hbWUKLSAgICAgIGVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsICJlbGVtZW50IikpOworICAgICAgZWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCkpOwogICAgIH0KIAogICAgIFFOYW1lIHR5cGVOYW1lOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgewogICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgICAgIHR5cGVOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsICJuYW1lIikpOworICAgICAgdHlwZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwogICAgIH0KIAogICAgIGlmIChuYW1lICE9IG51bGwpCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlZDU5YTk2Li44M2RiNzg4IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAzLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDQucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24KIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUGFydEltcGwuamF2YQppbmRleCAxZTFkYWMwLi5lZTA5ODVmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUGFydEltcGwuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUGFydEltcGwuamF2YQpAQCAtNjM5LDE3ICs2MzksMTcgQEAKICAgewogICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKIAotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlTlMobnVsbCwgIm5hbWUiKTsKKyAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwogICAgIGlmIChuYW1lICE9IG51bGwpCiAgICAgewogICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9CiAKICAgICBTdHJpbmcgZWxlbWVudEF0dHIgPSBXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSk7Ci0gICAgc2V0RWxlbWVudE5hbWUoZWxlbWVudEF0dHIgIT0gbnVsbCA/IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIGVsZW1lbnRBdHRyLCBlbGVtZW50KSA6IG51bGwpOworICAgIHNldEVsZW1lbnROYW1lKGVsZW1lbnRBdHRyICE9IG51bGwgPyBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50QXR0ciwgZWxlbWVudCwgdHJ1ZSkgOiBudWxsKTsKIAkJICAgIAogICAgIFN0cmluZyB0eXBlQXR0ciA9IFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKTsKLSAgICBzZXRUeXBlTmFtZSh0eXBlQXR0ciAhPSBudWxsID8gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgdHlwZUF0dHIsIGVsZW1lbnQpIDogbnVsbCk7CisgICAgc2V0VHlwZU5hbWUodHlwZUF0dHIgIT0gbnVsbCA/IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHR5cGVBdHRyLCBlbGVtZW50LCB0cnVlKSA6IG51bGwpOwogCiAgICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7CiAgIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQppbmRleCBhMzc3NTlmLi5mODNkMmZhIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhCkBAIC0xMDAwLDYgKzEwMDAsMjkgQEAKICAgICovCiAgIHByb3RlY3RlZCBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUsIEVsZW1lbnQgZWxlbWVudCkKICAgeworICAgICByZXR1cm4gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lLCBlbGVtZW50LCBmYWxzZSk7CisgIH0KKyAgCisgIC8qKgorICAgKiBDcmVhdGVzIGEgUU5hbWUgZnJvbSBhIHByZWZpeGVkIG5hbWUuIFRha2VzIGludG8gYWNjb3VudCBsb2NhbGx5IGRlZmluZWQKKyAgICogbmFtZXNwYWNlIHByZWZpeGVzLiBTZWxlY3RpdmVseSBhbGxvd3MgbnVsbCBuYW1lc3BhY2UgVVJJcy4KKyAgICogCisgICAqIEBwYXJhbSBkZWZpbml0aW9uCisgICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbi4gTXVzdCBub3QgYmUgbnVsbC4KKyAgICogQHBhcmFtIHByZWZpeGVkTmFtZQorICAgKiAgICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSB0byBjb252ZXJ0IHRvIFFOYW1lCisgICAqIEBwYXJhbSBlbGVtZW50CisgICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZWxlbWVudC4gTWF5IGJlIG51bGwgaW4gd2hpY2ggY2FzZSB0aGUgcHJlZml4IGlzCisgICAqICAgICAgICAgIG9ubHkgbG9va2VkIHVwIGFtb25nIHRoZSBvbmVzIGRlZmluZWQgYXQgdGhlIGRlZmluaXRpb24gbGV2ZWwuCisgICAqIEBwYXJhbSBhbGxvd051bGxOYW1lc3BhY2VVUkkgaWYgdHJ1ZSBhbmQgdGhlIHByZWZpeGVkIG5hbWUgZG9lcyBub3QgaGF2ZSAKKyAgICogICAgICAgICAgYSBwcmVmaXggYSBRTmFtZSBpcyBjb25zdHJ1Y3RlZCBhbmQgcmV0dXJuZWQgdXNpbmcgCisgICAqICAgICAgICAgIHtAbGluayBYTUxDb25zdGFudHMjTlVMTF9OU19VUkl9IGZvciB0aGUgbmFtZXNwYWNlIFVSSSAgICAgICAgICAKKyAgICogQHJldHVybiB0aGUgUU5hbWUgZXF1aXZhbGVudCBmb3IgdGhlIGdpdmVuIHByZWZpeGVkIG5hbWUsIG9yIG51bGwgaWYgYQorICAgKiAgICAgICAgIG5hbWVzcGFjZSBwcmVmaXggY2Fubm90IGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIFVSSSBvciBpZgorICAgKiAgICAgICAgIHRoZSBwcmVmaXhlZCBuYW1lIGlzIG51bGwuIAorICAgKi8KKyAgcHJvdGVjdGVkIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSwgRWxlbWVudCBlbGVtZW50LCBib29sZWFuIGFsbG93TnVsbE5hbWVzcGFjZVVSSSkKKyAgewogICAgIFFOYW1lIHFuYW1lID0gbnVsbDsKICAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCiAgICAgewpAQCAtMTAxNCw3ICsxMDM3LDcgQEAKICAgICAgICAgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlVVJJRnJvbVByZWZpeChlbGVtZW50LCBwcmVmaXgpOwogICAgICAgfQogICAgICAgCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCisgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgfHwgKGFsbG93TnVsbE5hbWVzcGFjZVVSSSAmJiBwcmVmaXgubGVuZ3RoKCkgPT0gMCkpCiAgICAgICB7CiAgICAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7CiAgICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsgICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzUwYTRmNS4uOTg5MDQwZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDEucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmluZGV4IDFiNDQyZmQuLjZmMTI3ZWQgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcworKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTE1LDQgKzE1LDQgQEAKIF9VSV9XU0lfVkFMSURBVE9SICAgICAgICAgICAgID0gV1MtSSBNZXNzYWdlIFZhbGlkYXRvcgogX1VJX0FDVElPTl9WQUxJREFURSAgICAgICAgICAgPSBWYWxpZGF0ZSBXUy1JIExvZyBGaWxlCiBfVUlfV0laQVJEX1ZBTElEQVRFX0xPR19USVRMRSA9IFZhbGlkYXRlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZQotX1VJX0xPR19FRElUT1IgICAgICAgICAgICAgICAgPSBYTUwgRWRpdG9yCitfVUlfTE9HX0VESVRPUiAgICAgICAgICAgICAgICA9IFdTLUkgTWVzc2FnZSBMb2cgVmlld2VyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sCmluZGV4IDYxYTljNjIuLmY5YjMxMWUgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sCkBAIC01OCw2ICs1OCwyMSBAQAogICAgICAgPC92YWxpZGF0b3I+CiAgICA8L2V4dGVuc2lvbj4KICAgIAorPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPCEtLSBFeHRlbnNpb24gcG9pbnQ6IG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMgICAgICAgICAgICAgICAgIC0tPgorPCEtLSBQdXJwb3NlOiBTcGVjaWZ5IGVkaXRvciBmb3IgZmlsZSB3aXRoIGV4dGVuc2lvbiB3c2ltc2cuIC0tPgorPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgICAgPGVkaXRvcgorICAgICAgICAgICAgbmFtZT0iJV9VSV9MT0dfRURJVE9SIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0id3NpbXNnIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZiIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0IgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJTG9nRWRpdG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisgICAKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzICAtLT4gCiAgICA8IS0tIFB1cnBvc2U6IFNwZWNpZnkgZmlsZSBhc3NvY2lhdGlvbiBmb3Igd3NpbXNnLiAgICAgICAgICAgLS0+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2FkZFByZUJ1aWx0Q29tcG9uZW50cy54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2FkZFByZUJ1aWx0Q29tcG9uZW50cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4N2QzM2UuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9hZGRQcmVCdWlsdENvbXBvbmVudHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIENhbGxiYWNrcyB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGlzIGZlYXR1cmUgICAgICAgICAgICAgICAgCQkgICAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSBidWlsZC5wcm9wZXJ0aWVzIG11c3QgaGF2ZSBhIGxpbmUgdGhhdCBzYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tICAgY3VzdG9tQnVpbGRDYWxsYmFja3M9YWRkUHJlQnVpbHRDb21wb25lbnRzLnhtbCAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHByb2plY3QgbmFtZT0iYWRkUHJlQnVpbHRDb21wb25lbnRzIiBkZWZhdWx0PSJub0RlZmF1bHQiPgotICAgIDwhLS0gCi0gICAgCU5vdGUgdG8gYmUgY3Jvc3MtcGxhdGZvcm0sICJlbnZpcm9ubWVudCB2YXJpYWJsZXMiIGFyZSBvbmx5IGFwcHJvcHJpYXRlIGZvciAKLSAgICAgICAgc29tZSB2YXJpYWJsZXMsIGUuZy4gb25lcyB3ZSBzZXQsIHNpbmNlIHByb3BlcnRpZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLCBldmVuIGlmIAotICAgICAgICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBhcmUgbm90LCBlLmcuIGl0IHdpbGwgCi0gICAgICAgIGJlICR7ZW52LlBhdGh9IG5vdCAke2Vudi5QQVRIfSBvbiBXaW5kb3dzIC0tPgotICAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPgotCi0KLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICA8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICA8IS0tICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIHRoZSBkaXJlY3RvcnkgcGx1Z2lucyB3aWxsIGJlIGNvbGxlY3RlZCB0byAtLT4KLSAgICA8IS0tICBmZWF0dXJlLmRpcmVjdG9yeSAtIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcmVzdWx0aW5nIGZlYXR1cmUgICAtLT4KLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIuYmluLnBhcnRzIj4KLSAgICAgICAgPCEtLSBjb3B5IG91ciBrbm93biwgcHJlLWJ1aWx0LCB1c3VhbGx5IHRoaXJkIHBhcnR5IHByZS1yZXFzIGludG8gdGhpcyBmZWF0dXJlIC0tPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJDdXJyZW50IGJhc2VkaXIgZHVyaW5nIGNhbGxiYWNrOiAke2Jhc2VkaXJ9IiAvPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJDdXJyZW50IGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIGR1cmluZyBjYWxsYmFjazogJHtkZXN0aW5hdGlvbi50ZW1wLmZvbGRlcn0iIC8+Ci0gICAgICAgIDxjb3B5IHRvZGlyPSIke2Rlc3RpbmF0aW9uLnRlbXAuZm9sZGVyfSIKLSAgICAgICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQlVJTERfSE9NRX0vcHJlYnVpbHQvZWNsaXBzZS9wbHVnaW5zLyIKLSAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJvcmcuYXBhY2hlLmNvbW1vbnNfbG9nZ2luZyovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy5hcGFjaGUuamFrYXJ0YV9sb2c0aiovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy5hcGFjaGUud3NpbDRqKi8qKiIgLz4KLSAgICAgICAgPC9jb3B5PgotICAgICAgICA8Y29weSB0b2Rpcj0iJHtkZXN0aW5hdGlvbi50ZW1wLmZvbGRlcn0iCi0gICAgICAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkJVSUxEX0hPTUV9L3ByZWJ1aWx0L2VjbGlwc2UvcGx1Z2lucy8iCi0gICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0ib3JnLnVkZGk0aiovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy53c2RsNGoqLyoqIiAvPgotICAgICAgICA8L2NvcHk+Ci0gICAgICAgIDxjb3B5IHRvZGlyPSIke2Rlc3RpbmF0aW9uLnRlbXAuZm9sZGVyfSIKLSAgICAgICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQlVJTERfSE9NRX0vcHJlYnVpbHQvZWNsaXBzZS9wbHVnaW5zLyIKLSAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJvcmcuYXBhY2hlLmF4aXMqLyoqIiAvPgotICAgICAgICA8L2NvcHk+Ci0KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgPCEtLSAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSB0aGUgZGlyZWN0b3J5IHBsdWdpbnMgd2lsbCBiZSBjb2xsZWN0ZWQgdG8gLS0+Ci0gICAgPCEtLSAgZmVhdHVyZS5kaXJlY3RvcnkgLSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJlc3VsdGluZyBmZWF0dXJlICAgLS0+Ci0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJwb3N0LmdhdGhlci5iaW4ucGFydHMiPgotICAgIDwvdGFyZ2V0PgotCi0KLQotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDwhLS0gTm8gRGVmYXVsdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDx0YXJnZXQgbmFtZT0ibm9EZWZhdWx0Ij4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGhpcyBmaWxlIG11c3QgYmUgY2FsbGVkIHdpdGggZXhwbGljaXQgdGFyZ2V0cyIgLz4KLSAgICA8L3RhcmdldD4KLQotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDgwYTU0Yy4uN2Y0NzY5NCAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMyw0ICszLDMgQEAKICAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCiAgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAogICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCi1jdXN0b21CdWlsZENhbGxiYWNrcz1hZGRQcmVCdWlsdENvbXBvbmVudHMueG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBkZTk2OTBlLi4zZjFmNzA2IDEwMDY0NAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS42LjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMS41LjQucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbj4KQEAgLTIxLDYgKzIxLDIxIEBACiAgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+CiAgICA8L3VybD4KIAorICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuYXBhY2hlLmNvbW1vbnNfbG9nZ2luZy5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuNCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuYXBhY2hlLmpha2FydGFfbG9nNGouZmVhdHVyZSIgdmVyc2lvbj0iMS4yLjgiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmFwYWNoZS5heGlzLmZlYXR1cmUiIHZlcnNpb249IjEuMi4xIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmFwYWNoZS53c2lsNGouZmVhdHVyZSIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcudWRkaTRqLmZlYXR1cmUiIHZlcnNpb249IjIuMC4zIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLndzZGw0ai5mZWF0dXJlIiB2ZXJzaW9uPSIxLjQuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5hcGFjaGUueGVyY2VzLmZlYXR1cmUiIHZlcnNpb249IjIuOC4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UucGxhdGZvcm0iIHZlcnNpb249IjMuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZW1mIiB2ZXJzaW9uPSIyLjIiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLndzdC5jb21tb25fY29yZS5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXJfY29yZS5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLnhzZCIgdmVyc2lvbj0iMi4yIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgPC9yZXF1aXJlcz4KKwogICAgPHBsdWdpbgogICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIKICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCkBAIC01Niw0MyArNzEsNCBAQAogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CiAKLSAgIDwhLS0gdGhlIGZvbGxvd2luZyBpcyBub3QgYnVpbHQsIGJ1dCBkZXBlbmRzIG9uIHRoZSBhZGRQcmVCdWlsdENvbXBvbmVudHMueG1sIAotICAgYWRkaW5nIGl0IHRvIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBhdCB0aGUgcmlnaHQgcG9pbnQuIFRoZSAicHJlLWJ1aWx0IiBwbHVnaW4gaXMgCi0gICB0aGVuIGFkZGVkIHRvIHppcHMgYW5kIHVwZGF0ZSBqYXJzLiAtLT4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9uc19sb2dnaW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5qYWthcnRhX2xvZzRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLndzaWw0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgICAgCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLnVkZGk0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPiAgICAgICAgIAotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLndzZGw0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgICAgCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5heGlzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+ICAgICAgICAgCi0KIDwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggOGZiZTAxOC4uMTI3Y2MyMSAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuNi4wLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjEuNS4zLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggNzBjMWMwMC4uZmY1Yjg2MCAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuNi4wLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjEuNS40LnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24+CkBAIC0yMCwxMCArMjAsNiBAQAogICAgPHVybD4KICAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KICAgIDwvdXJsPgotIAotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgogCiAgICA8aW5jbHVkZXMKICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2UiCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IGIwNGE5ZDEuLjUwNWJkNGEgMTAwNjQ0Ci0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjYuMC5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSIxLjUuMy5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBlYTIxYjcwLi5jMDI1MDIxIDEwMDY0NAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS42LjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMS41LjQucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbj4KQEAgLTI5LDYgKzI5LDExIEBACiAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZSIKICAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CiAKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZ2VmIiB2ZXJzaW9uPSIzLjIiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiIHZlcnNpb249IjEuMC4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgIDwvcmVxdWlyZXM+CisKICAgIDxwbHVnaW4KICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcCIKICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggYjRhNjg0My4uMmIxYjE1OCAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUuc291cmNlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuNi4wLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjEuNS40LnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVmZWF0dXJlUHJvdmlkZXIiPgogCiAgICA8ZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCA2YWI4ZTY4Li4xYTgyM2JmIDEwMDY0NAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS42LjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMS41LjMucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGMyMTM2Y2MuLjMwNjljZDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMAogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0LApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDlhZTdkMDMuLjU0Y2EzYTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDAKIEJ1bmRsZS1DbGFzc1BhdGg6IGF4aXNQZXJmbXNyLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbi5QZXJmb3JtYW5jZVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDQ0Yjc1ZjguLmJlMjA3MjMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEsOCArMSw4IEBACiBNYW5pZmVzdC1WZXJzaW9uOiAxLjAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4wLjEwMQogQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCkBAIC0zOCw1ICszOCw3IEBACiAgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZywKICBvcmcuZWNsaXBzZS5qZHQuZGVidWcudWksCiAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZQorIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLAorIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciwKKyBvcmcuZWNsaXBzZS53c3Qud3NkbAogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwppbmRleCA2ZjA1ODM1Li43ZTM5NDcxIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTEwLDYgKzEwLDcgQEAKICMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KICMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KKyMgMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIwpAQCAtMTcsMyArMTgsOCBAQAogIwogUExVR0lOX05BTUU9SmF2YSBXZWIgU2VydmljZXMgVG9vbHMgVGVzdHMKIFBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZworCitQT1BVUF9URVNUX1dTREw9VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgorQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT049R2VuZXJhdGUgSmF2YSBiZWFuIHNrZWxldG9uCitBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWT1HZW5lcmF0ZSBDbGllbnQKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbAppbmRleCA3YmY2NWZiLi43MzUzODNlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbApAQCAtMiw1ICsyLDgyIEBACiA8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CiA8cGx1Z2luPgogCis8IS0tIE5ldyBwb3B1cCBleHRlbnN0aW9uIHRvIGVuYWJsZXMgIkdlbmVyYXRlIHNrZWxldG9uIiwgIkdlbmVyYXRlIFByb3h5IiBhbmQgIlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIiIG9uIHRoZSAKK1NlcnZsZXRMaW5rIG9iamVjdC4gIFRoaXMgaXMgdGhlIG9iamVjdCB1bmRlciB0aGUgSlNSLTEwOSBXZWIgU2VydmljZXMgYnJhbmNoIG9mIHRoZSBKMkVFIFByb2plY3QgRXhwbG9yZXI6CisKK0pTUi0xMDkgV2ViIFNlcnZpY2VzIAorICBDbGllbnRzCisgIFNlcnZpY2VzCisgICAgIEVjaG9TZXJ2aWNlCisgICAgICAgIEhhbmRsZXJzCisgICAgICAgIFNlcnZpY2UgQ2xhc3NlcworICAgICAgICAgICBTZXJ2aWNlSW1wbDogZWNob19FY2hvICAgICAgIDw9PT09IFRoaXMgaXMgdGhlIFNlcnZsZXRMaW5rCisgIAorICBXaGVuIFNlcnZsZXRMaW5rIGlzIHNlbGVjdGVkLCAiR2VuZXJhdGUgUHJveHkiIGFuZCAiVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgd291bGQgc2VsZWN0IHRoZSBjb3JyZWN0IFdTREwgCisgIHdoZW4gdGhlIHBvcHVwIGlzIGluaXRpYWxpemVkLgorICAKKyAgTm90ZSB0aGF0IHdpdGggYnVnIDE3OTc1MSwgd2UnbGwgaGF2ZSB0byBjb21tZW50IG91dCB0aGUgVE9ETyBmb3IgMTc5NzUxIGluIFR5cGVTZWxlY3Rpb25GaWx0ZXIyLmphdmEgaW4gb3JkZXIgCisgIGZvciAiR2VuZXJhdGUgc2tlbGV0b24iIHBvcHVwIG9uIFNlcnZsZXRMaW5rIHRvIHNlbGVjdCB0b3AtZG93biBvbiB0aGUgc2VsZWN0ZWQgV1NETC4gIFNlcnZsZXRMaW5rIHdvdWxkIGVpdGhlcgorICBhbHdheXMgYmUgcmVjb2duaXplZCBhcyBzZWxlY3RpbmcgYm90dG9tLXVwIG9yIHNlbGVjdGluZyB0b3AtZG93bi4KKy0tPgorCSAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgorICAgICAgICAKKyAgICAgICAgIDxvYmplY3RDb250cmlidXRpb24KKyAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCisgICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEiPgorICAgICAgICAgPGFjdGlvbgorICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCisgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgorICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KKyAgICAgICAgIDwvYWN0aW9uPgorICAgICAgPC9vYmplY3RDb250cmlidXRpb24+CisgICAgICAgICAKKyAgICAgIDxvYmplY3RDb250cmlidXRpb24KKyAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCisgICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+CisgICAgICAgICA8YWN0aW9uCisgICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKKyAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KKyAgICAgICAgIDwvYWN0aW9uPgorICAgICAgPC9vYmplY3RDb250cmlidXRpb24+CisKKyAgICAgIDxvYmplY3RDb250cmlidXRpb24KKyAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCisgICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hY3Rpb24uV1NETEZpbGVNZW51Ij4KKyAgICAgICAgIDxhY3Rpb24KKyAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfVEVTVF9XU0RMIgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIgorICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKKyAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+CisgICAgICAgICA8L2FjdGlvbj4KKyAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgorICAgIAorICAgICAgPC9leHRlbnNpb24+CisKKzwhLS0gRGVmaW5lcyB0aGUgV1NDdXN0b21BZGFwdGVyRmFjdG9yeSBhcyBleHRlbnNpb24gdG8gdGhlIGFkYXB0ZXJzIGZyYW1ld29yayB0byBhZGFwdCBTZXJ2bGV0TGluayB0byBJRmlsZSAtLT4KKworPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KKyAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLldTQ3VzdG9tQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIj4KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICA8L2V4dGVuc2lvbj4KKworPCEtLSBEZWZpbmVzIHRoZSBXU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IGFzIGV4dGVuc2lvbiB0byB0aGUgYWRhcHRlcnMgZnJhbWV3b3JrIHRvIGFkYXB0IFNlcnZsZXRMaW5rIHRvIFN0cmluZyAtLT4KKyAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+CisgICAgICAgICA8ZmFjdG9yeSAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayI+CisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICA8L2V4dGVuc2lvbj4gIAogICAgIAogPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQppbmRleCA0ZTU0MzhjLi40YjU2ZWYzIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKICAgICBpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7CiAgICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggU2VydmVyQ3JlYXRpb25UZXN0cy5zdWl0ZSgpKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBCVUphdmFBeGlzVEM1MC5zdWl0ZSgpICk7CisgICAgICAvL3Rlc3RTdWl0ZS5hZGRUZXN0KCBCVUphdmFBeGlzVEM1MC5zdWl0ZSgpICk7CiAgICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggVERKYXZhQXhpc1RDNTAuc3VpdGUoKSApOwogICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIENsaWVudEF4aXNUQzUwLnN1aXRlKCkgKTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhCmluZGV4IGQ1ZTM1N2QuLmZkNzQ2ZDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0JVSmF2YUF4aXNUQzUwLmphdmEKQEAgLTksNyArOSw4IEBACiAgKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKKyAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQorICogMjAwNzAyMDIgICAxNzI2MTUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwogCkBAIC0xMTgsNiArMTE5LDcgQEAKIAkgIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CiAJICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKIAkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOworCSAgICBKVW5pdFV0aWxzLnNldEJVU2NlbmFyaW9EZWZhdWx0cygpOwogCiAJICAgIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YQppbmRleCA5MzZjNmM2Li5mOGJiZTkxIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9UREphdmFBeGlzVEM1MC5qYXZhCkBAIC05LDcgKzksOCBAQAogICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1CisgKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKKyAqIDIwMDcwMjAyICAgMTcyNjE1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKIApAQCAtMTA2LDkgKzEwNywxMCBAQAogCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24gewogCSAgCiAJICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CisJICBKVW5pdFV0aWxzLnNldFREU2NlbmFyaW9EZWZhdWx0cygpOwogCiAJICBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0KKwkgIAogCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLk9LKQogCQkgIHZlcmlmeU91dHB1dCgpOwogCQllbHNlIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvSlVuaXRVdGlscy5qYXZhCmluZGV4IDI4N2U2YzQuLjMxOGM1YTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YQpAQCAtOSw3ICs5LDggQEAKICAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQorICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1CisgKiAyMDA3MDIwMiAgIDE3MjYxNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKIApAQCAtMzUxLDQgKzM1MiwyNCBAQAogCSAgCiAJfQogCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRCVVNjZW5hcmlvRGVmYXVsdHMoKXsKKwkJU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7CisJCWNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSk7CisJCQorCQljb250ZXh0LnNldEdlbmVyYXRlUHJveHkoZmFsc2UpOworCQljb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKGZhbHNlKTsKKwkJY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoZmFsc2UpOworCQljb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKGZhbHNlKTsKKwkJCisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRURFNjZW5hcmlvRGVmYXVsdHMoKXsKKwkJU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7CisJCWNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSk7CisJCQorCQljb250ZXh0LnNldEdlbmVyYXRlUHJveHkoZmFsc2UpOworCQljb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKGZhbHNlKTsKKwkJY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoZmFsc2UpOworCQljb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKGZhbHNlKTsKKwl9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1dTQ3VzdG9tQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiODRlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KKyAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOworCitpbXBvcnQgamF2YS5uZXQuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOworCisvKioKKyAqIFRoZSBXU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IGlzIGFuIEFkYXB0ZXJGYWN0b3J5IHNpbWlsYXIgdG8gb25lIGFuIGFkb3B0ZXIgd291bGQgcHJvdmlkZSB0byBhZGFwdCBhIGN1c3RvbSBvYmplY3QgCisgKiB0byBhIFdTREwgdXJpIHRoYXQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdvdWxkIHRha2UgYXMgaW5wdXQuICBUaGUgU2VydmxldCBMaW5rLCAKKyAqIHJlcHJlc2VudGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB1bmRlciB0aGUgSlNSLTEwOSBXZWIgc2VydmljZXMgYnJhbmNoIG9mIHRoZSBKMkVFIFByb2plY3QgRXhwbG9yZXIsIGlzIAorICogdXNlZCBhcyB0aGUgImN1c3RvbSBvYmplY3QiIGluIHRoaXMgdGVzdC4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBXU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgSUFkYXB0ZXJGYWN0b3J5IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzW10gdHlwZXMgPSB7CisJCUlGaWxlLmNsYXNzLCBTdHJpbmcuY2xhc3MKKwl9OworCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2bGV0TGluayAmJiAoKGFkYXB0ZXJUeXBlID09IElGaWxlLmNsYXNzICkgfHwgKGFkYXB0ZXJUeXBlID09IFN0cmluZy5jbGFzcykpKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oImdldEFkYXB0ZXIgb24gIithZGFwdGFibGVPYmplY3QudG9TdHJpbmcoKSk7CisJCQlTZXJ2bGV0TGluayBiZWFuTGluayA9IChTZXJ2bGV0TGluaykgYWRhcHRhYmxlT2JqZWN0OworCisJCQlJRmlsZSB3c2RsRmlsZSA9IGdldFdTRExGaWxlKGJlYW5MaW5rKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbEZpbGUgPSAiK3dzZGxGaWxlKTsKKwkJCWlmIChhZGFwdGVyVHlwZSA9PSBJRmlsZS5jbGFzcykgeworCQkJCXJldHVybiB3c2RsRmlsZTsKKwkJCX0gZWxzZSAKKwkJCQlpZiAoYWRhcHRlclR5cGUgPT0gU3RyaW5nLmNsYXNzKSB7CisJCQkJCVVSSSB3c2RsVXJpID0gd3NkbEZpbGUuZ2V0TG9jYXRpb25VUkkoKTsKKwkJCQkJU3RyaW5nIHdzZGxGaWxlU3RyaW5nID0gbnVsbDsKKwkJCQkJaWYgKHdzZGxVcmkgIT0gbnVsbCkgeworCQkJCQkJd3NkbEZpbGVTdHJpbmcgPSB3c2RsVXJpLnRvU3RyaW5nKCk7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxGaWxlU3RyaW5nID0gIit3c2RsRmlsZVN0cmluZyk7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHdzZGxGaWxlU3RyaW5nOworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiBudWxsOworCQkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyTGlzdCgpCisJICovCisJcHVibGljIENsYXNzW10gZ2V0QWRhcHRlckxpc3QoKSB7CisJCXJldHVybiB0eXBlczsKKwl9CisJCisJLyoqCisJICogQHBhcmFtIGJlYW4gVGhlIFNlcnZpY2VJbXBsQmVhbgorCSAqIEByZXR1cm4gVGhlIElGaWxlIHJlcHJlc2VudGluZyB0aGUgV1NETCBmaWxlIGZvciB0aGlzIFNlcnZpY2VJbXBsQmVhbi4KKwkgKi8KKwlwcml2YXRlIElGaWxlIGdldFdTRExGaWxlKFNlcnZpY2VJbXBsQmVhbiBiZWFuKSB7CisJCSAgRU9iamVjdCBlT2JqZWN0ID0gYmVhbi5lQ29udGFpbmVyKCk7CisJCSAgaWYgKGVPYmplY3QgPT0gbnVsbCkKKwkJCSAgcmV0dXJuIG51bGw7CisJICAgICAgICAgIAorCQkgIGVPYmplY3QgPSBlT2JqZWN0LmVDb250YWluZXIoKTsKKwkgICAgICAKKwkJICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXNjcmlwdGlvbikgeworCQkJICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NkID0gKFdlYlNlcnZpY2VEZXNjcmlwdGlvbikgZU9iamVjdDsKKwkJCSAgCisJCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qod3NkKTsgICAgCSAgCisJICAgIAkgIAorCQkJICBJUGF0aCBwYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QpOyAgICAJIAorCQkJICBwYXRoID0gcGF0aC5hcHBlbmQod3NkLmdldFdzZGxGaWxlKCkpOyAKKwkJCSAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUocGF0aCk7IAkgIAorCQkJICAgICAgCSAgICAKKwkJICB9CisJCSAgcmV0dXJuIG51bGw7CisJICB9CisJICAKKwkgIC8qKgorCSAqIEBwYXJhbSBsaW5rIFRoZSBTZXJ2bGV0TGluaworCSAqIEByZXR1cm4gVGhlIElGaWxlIHJlcHJlc2VudGluZyB0aGUgV1NETCBmaWxlIGZvciB0aGlzIFNlcnZsZXRMaW5rCisJICovCisJcHJpdmF0ZSBJRmlsZSBnZXRXU0RMRmlsZShTZXJ2bGV0TGluayBsaW5rKSB7CisJCSAgRU9iamVjdCBlT2JqZWN0ID0gbGluay5lQ29udGFpbmVyKCk7CisJCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCisJCQkgIHJldHVybiBnZXRXU0RMRmlsZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKKwkJICByZXR1cm4gbnVsbDsKKwkgIH0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDYyMGMyZmQuLmI0MTVjNDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xMDAKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGgKaW5kZXggY2U2MTg3MC4uYTdiNDllNCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCkBAIC0yLDYgKzIsMTMgQEAKIDxjbGFzc3BhdGg+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGVyZm9ybWFuY2UiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgorCQk8YWNjZXNzcnVsZXM+CisJCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC8qKiIvPgorCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lDb250ZXh0Ii8+CisJCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+CisJCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC8qKiIvPgorCQk8L2FjY2Vzc3J1bGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+CiA8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZmIwN2UwMC4uMWQ5YzNmMCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEsNiArMSw2IEBACiBNYW5pZmVzdC1WZXJzaW9uOiAxLjAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBXU0RMIFBlcmZvcm1hbmNlIFBsdWctaW4KK0J1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UKIEJ1bmRsZS1WZXJzaW9uOiAxLjAuMQogQnVuZGxlLUNsYXNzUGF0aDogcGVyZm9ybWFuY2UuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YQppbmRleCBmZmI2NGEwLi5jOGI5ZGNiIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKQEAgLTExLDYgKzExLDggQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LldTRExTY2FsYWJpbGl0eVRlc3RzOworCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIApAQCAtMjEsMTEgKzIzLDEyIEBACiAgICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiKTsKICAgICAvLyRKVW5pdC1CRUdJTiQKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MpOwotCXN1aXRlLmFkZFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5jbGFzcyk7Ci0Jc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5jbGFzcyk7CiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0KFdTRExTY2FsYWJpbGl0eVRlc3RzLnN1aXRlKCkpOwogICAgIC8vJEpVbml0LUVORCQKICAgICByZXR1cm4gc3VpdGU7CiAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5qYXZhCmluZGV4IDcwNjdjNzAuLjI1ZjY4NjkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YQpAQCAtNDUsNiArNDUsNyBAQAogICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5VU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyxCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwogCXJlc291cmNlLmxvYWQobWFwKTsgCiAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcmVzb3VyY2UuZ2V0RGVmaW5pdGlvbigpOworCWRlZmluaXRpb24uZ2V0UU5hbWUoKTsKIAkKIAlzdG9wTWVhc3VyaW5nKCk7CiAJY29tbWl0TWVhc3VyZW1lbnRzKCk7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQppbmRleCA1MzJjYWFmLi5lNDcxODg1IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKQEAgLTM3LDYgKzM3LDcgQEAKICAgICBXU0RMRmFjdG9yeUltcGwgZmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKICAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwogICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlYWRlci5yZWFkV1NETCh3c2RsLnRvU3RyaW5nKCksIG5ldyBJbnB1dFNvdXJjZSh3c2RsLm9wZW5TdHJlYW0oKSkpOworICAgIGRlZmluaXRpb24uZ2V0UU5hbWUoKTsKICAgICBzdG9wTWVhc3VyaW5nKCk7CiAJY29tbWl0TWVhc3VyZW1lbnRzKCk7CiAJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UuamF2YQppbmRleCBiOGQyZTJmLi42NWYyMjlhIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7CiAKIApAQCAtNzksNiArNzgsNiBAQAogCiAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVdTREwoU3RyaW5nIGxvY2F0aW9uKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgogICB7Ci0gICAgSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKGxvY2F0aW9uKTsKKyAgICB2YWxpZGF0b3IudmFsaWRhdGUobG9jYXRpb24pOwogICB9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhCmluZGV4IDFjNWRiZjguLjliYzkyNGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7CiAKIHB1YmxpYyBjbGFzcyBWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCkBAIC03OCw2ICs3Nyw2IEBACiAKICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlV1NETChTdHJpbmcgbG9jYXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uCiAgIHsKLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUobG9jYXRpb24pOworICAgIHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbik7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKaW5kZXggNzZlMzRhOC4uNDI2OWJkMyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKIAogcHVibGljIGNsYXNzIFZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKQEAgLTQ3LDE0ICs0NiwxNCBAQAogICAKICAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlU3RvY2tRdW90ZVdTREwoKSB0aHJvd3MgRXhjZXB0aW9uCiAgIHsKLQl2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7CisgICAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwogICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7CiAgICAgU3RyaW5nIHBhdGggPSB3c2RsLnRvU3RyaW5nKCk7Ci0JCisKICAgICBzdGFydE1lYXN1cmluZygpOwotICAgIElWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZShwYXRoKTsKLQlzdG9wTWVhc3VyaW5nKCk7Ci0JY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0JYXNzZXJ0UGVyZm9ybWFuY2UoKTsKKyAgICB2YWxpZGF0b3IudmFsaWRhdGUocGF0aCk7CisgICAgc3RvcE1lYXN1cmluZygpOworICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOworICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5qYXZhCmluZGV4IDAxY2MzMDcuLjQ5YzdjYTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwogCiBwdWJsaWMgY2xhc3MgVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCkBAIC00NywxNCArNDYsMTQgQEAKICAgCiAgIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVN0b2NrUXVvdGVXU0koKSB0aHJvd3MgRXhjZXB0aW9uCiAgIHsKLQl2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7CisgICAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwogICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7CiAgICAgU3RyaW5nIHBhdGggPSB3c2RsLnRvU3RyaW5nKCk7Ci0JCisKICAgICBzdGFydE1lYXN1cmluZygpOwkKLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUocGF0aCk7Ci0Jc3RvcE1lYXN1cmluZygpOwotCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCWFzc2VydFBlcmZvcm1hbmNlKCk7CisgICAgdmFsaWRhdG9yLnZhbGlkYXRlKHBhdGgpOworICAgIHN0b3BNZWFzdXJpbmcoKTsKKyAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKKyAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwogICB9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmluZGV4IGU2YmFmMmMuLjAzNmMxMTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCmluZGV4IDI2YTBmN2QuLmJmMmJmYTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwS0JGaWxlVGVzdENhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHsKICAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQorICAgIGNhdGNoIChFeGNlcHRpb24gdCkKICAgICB7CiAgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEKaW5kZXggZmRkOGVjNi4uNzZjNmQ0MiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHsKICAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQorICAgIGNhdGNoIChFeGNlcHRpb24gdCkKICAgICB7CiAgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMU1CRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMU1CRmlsZVRlc3RDYXNlLmphdmEKaW5kZXggMzM4YjVhOC4uMGZiYzMyNyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xTUJGaWxlVGVzdENhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHsKICAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQorICAgIGNhdGNoIChFeGNlcHRpb24gdCkKICAgICB7CiAgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMjAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmluZGV4IDFmMDA0ZTIuLmZiMmUwZTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW41MDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKaW5kZXggYTlmNjRmMC4uMDI0NGNhNSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5qYXZhCmluZGV4IDJhYzk5NjQuLjU2N2ZkZjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQppbmRleCBlMmQyN2E1Li5jODdhNzE5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHsKICAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQorICAgIGNhdGNoIChFeGNlcHRpb24gdCkKICAgICB7CiAgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuamF2YQppbmRleCBkYWMzM2Q3Li44MmYwMWE2IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YQppbmRleCBmYjEwMjUxLi43NDIzNGQyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHsKICAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQorICAgIGNhdGNoIChFeGNlcHRpb24gdCkKICAgICB7CiAgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhCmluZGV4IDRhMDQxZDQuLjE1ODZkYTEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEKaW5kZXggOGViNDgwMC4uZmU4NGNmNyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmphdmEKaW5kZXggNWQ0MDI3NS4uMDA0NzEzZSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YQppbmRleCAzZWZhYWRmLi5kMmFlMzVlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEKaW5kZXggMTQzZDEwMy4uMDg2MzAxNSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhCmluZGV4IDY4ZTQ2NGQuLmNlNDcxNGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhCmluZGV4IDc3MTMyNmIuLmJiODhmNTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhCmluZGV4IGNlNjliZDkuLmNiODE0MDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IDYzYTk0MTQuLjE2NzU2YjYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAkgICAgewogCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKIAkgICAgfQotCSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisJICAgIGNhdGNoIChFeGNlcHRpb24gdCkKIAkgICAgewogCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogCSAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKaW5kZXggNGZiNzAyNy4uYjk3ZjAyNCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCSAgICB7CiAJICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogCSAgICB9Ci0JICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKwkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogCSAgICB7CiAJICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IDY1NzcwOTQuLmVmMTFmNzAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCSAgICB7CiAJICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogCSAgICB9Ci0JICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKwkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogCSAgICB7CiAJICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YQppbmRleCA1ZDE3OGUxLi5lMGU4OGE0IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKaW5kZXggYjRjYjE3ZS4uYjkzMzEyZCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAkgICAgewogCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKIAkgICAgfQotCSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisJICAgIGNhdGNoIChFeGNlcHRpb24gdCkKIAkgICAgewogCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogCSAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IDE2MWEwMmQuLmYzNjVlY2QgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAJICAgIHsKIAkgICAgICBzdXBlci5leGVjdXRlKCk7CiAJICAgIH0KLQkgICAgY2F0Y2ggKFRocm93YWJsZSB0KQorCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAJICAgIHsKIAkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKIAkgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IDU5ZDJmNWQuLjE3Mjg5NjAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAkgICAgewogCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKIAkgICAgfQotCSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisJICAgIGNhdGNoIChFeGNlcHRpb24gdCkKIAkgICAgewogCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogCSAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCmluZGV4IGZmMmQyNjAuLjZmMTQyMzkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IDdiMWQwZDEuLjkzZDU3YmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCSAgICB7CiAJICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogCSAgICB9Ci0JICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKwkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogCSAgICB7CiAJICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmluZGV4IGJhMjQ3ZDUuLjJmODI1ODggMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCSAgICB7CiAJICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogCSAgICB9Ci0JICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKwkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogCSAgICB7CiAJICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKaW5kZXggNjA5NmI5NC4uNDk5MmZlMSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAkgICAgewogCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKIAkgICAgfQotCSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisJICAgIGNhdGNoIChFeGNlcHRpb24gdCkKIAkgICAgewogCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogCSAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UuamF2YQppbmRleCBmYWE4MGFlLi43NWQ5MzRkIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB7CiAgICAgICBzdXBlci5leGVjdXRlKCk7CiAgICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKKyAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCiAgICAgewogICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlLmphdmEKaW5kZXggYWE0NGMwOC4uZDMyNmNmYSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YQppbmRleCA5NmY0MzM3Li41OGMxNmJiIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YQppbmRleCBiYjU1YmEwLi43MjYyY2YxIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgewogICAgICAgc3VwZXIuZXhlY3V0ZSgpOwogICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQogICAgIHsKICAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1dTRExTY2FsYWJpbGl0eVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjdhOWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKKyCgKgorICogQ29udHJpYnV0b3JzOgorICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CisKK3B1YmxpYyBjbGFzcyBXU0RMU2NhbGFiaWxpdHlUZXN0cworeworCisgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCisgIHsKKyAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eSIpOworICAgIC8vJEpVbml0LUJFR0lOJAorICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjIwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKy8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMU1CRmlsZVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjEwS0JGaWxlVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMUtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7CisvLyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKKy8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7CisgICAgLy8kSlVuaXQtRU5EJAorICAgIHJldHVybiBzdWl0ZTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGJiOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKKyMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZQorQnVuZGxlLU5hbWUuMCA9IFdTREwgUGVyZm9ybWFuY2UgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKaW5kZXggYzEyNTgyMC4uNjAzZWY0NCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKQEAgLTE3MSwxMSArMTcxLDExIEBACiAgIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgogICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KICAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKKzwhLS0gIAkKICAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgogICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+CiAgIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAJCistLT4gCQogICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KICAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+CiAgIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jbGFzc3BhdGgKaW5kZXggNzUxYzhmMi4uY2U3MzkzMyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxjbGFzc3BhdGg+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgogPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkM2MyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDcgQEAKKyNTdW4gQXByIDE1IDAyOjQyOjIzIEVEVCAyMDA3CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZmQ3NDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBXU0RMIEpVbml0IFRlc3QKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzCitCdW5kbGUtVmVyc2lvbjogMS4wLjEKK0J1bmRsZS1DbGFzc1BhdGg6IHdzZGwudGVzdHMuamFyCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW4KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLAorIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uud3N0LndzZGwsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAorIG9yZy5lY2xpcHNlLnhzZCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKKyBvcmcuanVuaXQsCisgb3JnLndzZGw0aiwKKyBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLAorIG9yZy5hcGFjaGUueGVyY2VzCitFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCAzMmVlMjQ0Li5kMjA5MWQ5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTIsNiArMiw3IEBACiAgICAgICAgICAgICAgICB0ZXN0LnhtbCxcCiAgICAgICAgICAgICAgICB3c2RsLnRlc3RzLmphcixcCiAgICAgICAgICAgICAgICBzYW1wbGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCisgICAgICAgICAgICAgICBhYm91dC5odG1sLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLwogc291cmNlLndzZGwudGVzdHMuamFyID0gc3JjLwotamF2YWNXYXJuaW5ncy53c2RsLnRlc3RzLmphcj0tZGlzY291cmFnZWQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitqYXZhY1dhcm5pbmdzLndzZGwudGVzdHMuamFyPS1kaXNjb3VyYWdlZApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3BsdWdpbi54bWwKaW5kZXggYjFkOWVkNi4uN2JmNjVmYiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnhtbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9wbHVnaW4ueG1sCkBAIC0xLDI2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luCi0gICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiCi0gICBuYW1lPSJXU0RMIEpVbml0IFRlc3QiCi0gICB2ZXJzaW9uPSIxLjAuMSIKLSAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW4iPgorPHBsdWdpbj4KIAotICAgPHJ1bnRpbWU+Ci0gICAgICA8bGlicmFyeSBuYW1lPSJ3c2RsLnRlc3RzLmphciI+Ci0gICAgICAgICA8ZXhwb3J0IG5hbWU9IioiLz4KLSAgICAgIDwvbGlicmFyeT4KLSAgIDwvcnVudGltZT4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UueHNkIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuanVuaXQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcud3NkbDRqIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlciIvPgotICAgPC9yZXF1aXJlcz4KLQorICAgIAogPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDA4NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm8ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdkOGFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvIgorCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCisJPHhzZDplbGVtZW50IG5hbWU9InBob25lTnVtYmVyIj4KKwkJPHhzZDpjb21wbGV4VHlwZT4KKwkJCTx4c2Q6c2VxdWVuY2U+CisJCQkJPHhzZDplbGVtZW50IG5hbWU9ImFyZWFDb2RlIiB0eXBlPSJ4c2Q6aW50IiAvPgorCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiIC8+CisJCQk8L3hzZDpzZXF1ZW5jZT4KKwkJPC94c2Q6Y29tcGxleFR5cGU+CisJPC94c2Q6ZWxlbWVudD4KKwkKKwk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFkZHJlc3NUeXBlIj4KKwkJPHhzZDpzZXF1ZW5jZT4KKwkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InhzZDpzdHJpbmciIC8+CisJCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2l0eSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKwkJPC94c2Q6c2VxdWVuY2U+CisJPC94c2Q6Y29tcGxleFR5cGU+CisKKzwveHNkOnNjaGVtYT4KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDljNTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNvbnRhY3RJbmZvU2VydmljZSIKKwl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCisJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIj4KKworCTx3c2RsOnR5cGVzPgorCQk8eHNkOnNjaGVtYQorCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKKwkJCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCisJCQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIgorCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisJCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCisJCQkJc2NoZW1hTG9jYXRpb249IkNvbnRhY3RJbmZvLnhzZCIgLz4KKwkJCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJDb25maXJtYXRpb24ueHNkIiAvPgorCQk8L3hzZDpzY2hlbWE+CisJPC93c2RsOnR5cGVzPgorCisJPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVQaG9uZU51bWJlclJlcXVlc3RNc2ciPgorCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9ImNvbnRhY3Q6cGhvbmVOdW1iZXIiIG5hbWU9ImlucHV0MSIgLz4KKwk8L3dzZGw6bWVzc2FnZT4KKwk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciPgorCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9IkNvbmZpcm1hdGlvbiIgbmFtZT0ib3V0cHV0MSIgLz4KKwk8L3dzZGw6bWVzc2FnZT4KKwk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIj4KKwkJPHdzZGw6cGFydCB0eXBlPSJjb250YWN0OmFkZHJlc3NUeXBlIiBuYW1lPSJpbnB1dDIiIC8+CisJPC93c2RsOm1lc3NhZ2U+CisJPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciPgorCQk8d3NkbDpwYXJ0IHR5cGU9IkNvbmZpcm1hdGlvblR5cGUiIG5hbWU9Im91dHB1dDIiIC8+CisJPC93c2RsOm1lc3NhZ2U+CisKKwk8d3NkbDpwb3J0VHlwZSBuYW1lPSJ0ZXN0UG9ydFR5cGUiPgorCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0idXBkYXRlUGhvbmVOdW1iZXIiPgorCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZVBob25lTnVtYmVyUmVxdWVzdE1zZyIgLz4KKwkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIgLz4KKwkJPC93c2RsOm9wZXJhdGlvbj4KKwkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9InVwZGF0ZUFkZHJlc3MiPgorCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIiAvPgorCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczp1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciIC8+CisJCTwvd3NkbDpvcGVyYXRpb24+CisJPC93c2RsOnBvcnRUeXBlPgorPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YQppbmRleCBmMGIzMDI3Li45OGU4ZDA3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0J1Z0ZpeGVzVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTE3LDYgKzE3LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKK2ltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwpAQCAtMTc3LDYgKzE3OCwxNCBAQAogICAgICAgfQogICAgIH0pOwogCisgICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJBbGxvd051bGxOYW1lc3BhY2VVUkkiKSAvLyROT04tTkxTLTEkCisgICAgeworICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCisgICAgICB7CisgICAgICAgIHRlc3RBbGxvd051bGxOYW1lc3BhY2VVUkkoKTsKKyAgICAgIH0KKyAgICB9KTsKKwogICAgIHJldHVybiBzdWl0ZTsKICAgfQogCkBAIC03NTMsNCArNzYyLDYzIEBACiAKICAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uMywgYWN0dWFsT3BlcmF0aW9uMyk7CiAgIH0KKworICAvKioKKyAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzg1NTUKKyAgICovCisgIHB1YmxpYyB2b2lkIHRlc3RBbGxvd051bGxOYW1lc3BhY2VVUkkoKQorICB7CisgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKKworICAgIHRyeQorICAgIHsKKyAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKyAgICB9CisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCisgICAgeworICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorCisgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSI7IC8vJE5PTi1OTFMtMSQKKworICAgIC8vIFRoZSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciB0aGUgb3V0cHV0IG1lc3NhZ2UgcGFydCBpcyBzcGVjaWZpZWQgaW4gYQorICAgIC8vIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuIEl0IHNob3VsZCByZXNvbHZlIGZpbmUgYW5kIGhhdmUgYSBudWxsCisgICAgLy8gbmFtZXNwYWNlIFVSSS4KKyAgICAKKyAgICBRTmFtZSBvdXRwdXQxUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIpOyAvLyROT04tTkxTLTEkCisgICAgTWVzc2FnZSBvdXRwdXQxTWVzc2FnZSA9IChNZXNzYWdlKSBkZWZpbml0aW9uLmdldE1lc3NhZ2Uob3V0cHV0MVFOYW1lKTsKKyAgICBhc3NlcnROb3ROdWxsKG91dHB1dDFNZXNzYWdlKTsKKworICAgIFBhcnQgcGFydDEgPSAoUGFydCkgb3V0cHV0MU1lc3NhZ2UuZ2V0UGFydCgib3V0cHV0MSIpOyAvLyROT04tTkxTLTEkCisgICAgYXNzZXJ0Tm90TnVsbChwYXJ0MSk7CisKKyAgICBRTmFtZSBvdXRwdXQyRWxlbWVudE5hbWUgPSBwYXJ0MS5nZXRFbGVtZW50TmFtZSgpOworICAgIGFzc2VydE5vdE51bGwob3V0cHV0MkVsZW1lbnROYW1lKTsKKyAgICBhc3NlcnRFcXVhbHMoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLCBvdXRwdXQyRWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOworICAgIAorICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uID0gcGFydDEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7CisgICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uKTsKKyAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGFpbmVyKCkpOworICAgIGFzc2VydE51bGwob3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7CisKKyAgICAvLyBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgb3V0cHV0IG1lc3NhZ2UgcGFydCBpcyBzcGVjaWZpZWQgaW4gYQorICAgIC8vIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuIEl0IHNob3VsZCByZXNvbHZlIGZpbmUgYW5kIGhhdmUgYSBudWxsCisgICAgLy8gbmFtZXNwYWNlIFVSSS4KKyAgICAKKyAgICBRTmFtZSBvdXRwdXQyUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidXBkYXRlQWRkcmVzc1Jlc3BvbnNlTXNnIik7IC8vJE5PTi1OTFMtMSQKKyAgICBNZXNzYWdlIG91dHB1dDJNZXNzYWdlID0gKE1lc3NhZ2UpIGRlZmluaXRpb24uZ2V0TWVzc2FnZShvdXRwdXQyUU5hbWUpOworICAgIGFzc2VydE5vdE51bGwob3V0cHV0Mk1lc3NhZ2UpOworICAgIAorICAgIFBhcnQgcGFydDIgPSAoUGFydCkgb3V0cHV0Mk1lc3NhZ2UuZ2V0UGFydCgib3V0cHV0MiIpOyAvLyROT04tTkxTLTEkCisgICAgYXNzZXJ0Tm90TnVsbChwYXJ0MSk7CisKKyAgICBRTmFtZSBvdXRwdXQyVHlwZU5hbWUgPSBwYXJ0Mi5nZXRUeXBlTmFtZSgpOworICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVOYW1lKTsKKyAgICBhc3NlcnRFcXVhbHMoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLCBvdXRwdXQyVHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOworICAgIAorICAgIFhTRFR5cGVEZWZpbml0aW9uIG91dHB1dDJUeXBlRGVmaW5pdGlvbiA9IHBhcnQyLmdldFR5cGVEZWZpbml0aW9uKCk7CisgICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyVHlwZURlZmluaXRpb24pOworICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVEZWZpbml0aW9uLmdldENvbnRhaW5lcigpKTsKKyAgICBhc3NlcnROdWxsKG91dHB1dDJUeXBlRGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7CisgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==