ZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTI0YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2MTg0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmUsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiMzlmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhM2QzY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cyIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKEdlbmVyaWNSdW50aW1lVGVzdENhc2UuY2xhc3MpKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoSjJFRU1vZHVsZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoQXBwbGljYXRpb25DbGllbnRUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKENvbm5lY3Rvck1vZHVsZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoRUpCTW9kdWxlVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShXZWJNb2R1bGVUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKEVudGVycHJpc2VBcHBsaWNhdGlvblRlc3RDYXNlLmNsYXNzKSk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKExvb3NlQXJjaGl2ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTG9vc2VBcmNoaXZlU3VwcG9ydFRlc3RDYXNlLmNsYXNzKSk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKEVKQkJlYW5UZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZsZXRUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKEpuZGlPYmplY3RUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKEpuZGlMYXVuY2hhYmxlVGVzdENhc2UuY2xhc3MpKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoQ2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXJUZXN0Q2FzZS5jbGFzcykpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQXBwbGljYXRpb25DbGllbnRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQXBwbGljYXRpb25DbGllbnRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTdhZGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0FwcGxpY2F0aW9uQ2xpZW50VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklBcHBsaWNhdGlvbkNsaWVudE1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0QXBwbGljYXRpb25DbGllbnRNb2R1bGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgQXBwbGljYXRpb25DbGllbnRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElBcHBsaWNhdGlvbkNsaWVudE1vZHVsZSBtb2R1bGU7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoQXBwbGljYXRpb25DbGllbnRUZXN0Q2FzZS5jbGFzcywgIkFwcGxpY2F0aW9uQ2xpZW50VGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCW1vZHVsZSA9IG5ldyBUZXN0QXBwbGljYXRpb25DbGllbnRNb2R1bGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxU3BlY1ZlcnNpb24oKSB7Ci0JCW1vZHVsZS5nZXRKMkVFU3BlY2lmaWNhdGlvblZlcnNpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTG9jYXRpb24oKSB7Ci0JCW1vZHVsZS5nZXRMb2NhdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNCaW5hcnkoKSB7Ci0JCW1vZHVsZS5pc0JpbmFyeSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9DbGFzc3BhdGhSdW50aW1lVGFyZ2V0SGFuZGxlclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9DbGFzc3BhdGhSdW50aW1lVGFyZ2V0SGFuZGxlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjU4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQ2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuQ2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdENsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIENsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBDbGFzc3BhdGhSdW50aW1lVGFyZ2V0SGFuZGxlciBoYW5kbGVyOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoQ2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXJUZXN0Q2FzZS5jbGFzcywgIkNsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCWhhbmRsZXIgPSBuZXcgVGVzdENsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0Q2xhc3NwYXRoQ29udGFpbmVyTGFiZWwoKSB7Ci0JCWhhbmRsZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyTGFiZWwobnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0Q2xhc3NwYXRoRW50cnlJZHMoKSB7Ci0JCWhhbmRsZXIuZ2V0Q2xhc3NwYXRoRW50cnlJZHMoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNSZXNvbHZlQ2xhc3NwYXRoQ29udGFpbmVyKCkgewotCQloYW5kbGVyLnJlc29sdmVDbGFzc3BhdGhDb250YWluZXIobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNFJlc29sdmVDbGFzc3BhdGhDb250YWluZXJJbXBsKCkgewotCQloYW5kbGVyLnJlc29sdmVDbGFzc3BhdGhDb250YWluZXJJbXBsKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVUZXN0QWRkTWV0aG9kcygpIHsKLQkJKChUZXN0Q2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXIpIGhhbmRsZXIpLnRlc3RBZGRNZXRob2RzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNlNldFJ1bnRpbWVUYXJnZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaGFuZGxlci5zZXRSdW50aW1lVGFyZ2V0KG51bGwsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdSZW1vdmVSdW50aW1lVGFyZ2V0KCkgewotCQloYW5kbGVyLnJlbW92ZVJ1bnRpbWVUYXJnZXQobnVsbCwgbnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOUdldERlbGVnYXRlQ2xhc3NwYXRoRW50cmllcygpIHsKLQkJaGFuZGxlci5nZXREZWxlZ2F0ZUNsYXNzcGF0aEVudHJpZXMobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMFJlcXVlc3RDbGFzc3BhdGhDb250YWluZXJVcGRhdGUoKSB7Ci0JCWhhbmRsZXIucmVxdWVzdENsYXNzcGF0aENvbnRhaW5lclVwZGF0ZShudWxsLCBudWxsLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQ29ubmVjdG9yTW9kdWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0Nvbm5lY3Rvck1vZHVsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWNiODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvQ29ubmVjdG9yTW9kdWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklDb25uZWN0b3JNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdENvbm5lY3Rvck1vZHVsZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBDb25uZWN0b3JNb2R1bGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElDb25uZWN0b3JNb2R1bGUgbW9kdWxlOwotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKENvbm5lY3Rvck1vZHVsZVRlc3RDYXNlLmNsYXNzLCAiQ29ubmVjdG9yTW9kdWxlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCW1vZHVsZSA9IG5ldyBUZXN0Q29ubmVjdG9yTW9kdWxlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMVNwZWNWZXJzaW9uKCkgewotCQltb2R1bGUuZ2V0SjJFRVNwZWNpZmljYXRpb25WZXJzaW9uKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkxvY2F0aW9uKCkgewotCQltb2R1bGUuZ2V0TG9jYXRpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzQmluYXJ5KCkgewotCQltb2R1bGUuaXNCaW5hcnkoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0Q2xhc3NwYXRoKCkgewotCQltb2R1bGUuZ2V0Q2xhc3NwYXRoKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0VKQkJlYW5UZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvRUpCQmVhblRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MjljMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvRUpCQmVhblRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5FSkJCZWFuOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEVKQkJlYW5UZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIEVKQkJlYW4gYmVhbjsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShFSkJCZWFuVGVzdENhc2UuY2xhc3MsICJFSkJCZWFuVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCWJlYW4gPSBuZXcgRUpCQmVhbihudWxsLCAidGVzdCIsIGZhbHNlLCB0cnVlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TW9kdWxlKCkgewotCQlhc3NlcnROdWxsKGJlYW4uZ2V0TW9kdWxlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJHZXRKTkRJTmFtZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKGJlYW4uZ2V0Sm5kaU5hbWUoKSwgInRlc3QiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNMb2NhbCgpIHsKLQkJYXNzZXJ0VHJ1ZShiZWFuLmhhc0xvY2FsSW50ZXJmYWNlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRSZW1vdGUoKSB7Ci0JCWFzc2VydEZhbHNlKGJlYW4uaGFzUmVtb3RlSW50ZXJmYWNlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9FSkJNb2R1bGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvRUpCTW9kdWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1NTMwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9FSkJNb2R1bGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuSUVKQk1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0RUpCTW9kdWxlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEVKQk1vZHVsZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSUVKQk1vZHVsZSBtb2R1bGU7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoRUpCTW9kdWxlVGVzdENhc2UuY2xhc3MsICJFSkJNb2R1bGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJbW9kdWxlID0gbmV3IFRlc3RFSkJNb2R1bGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxU3BlY1ZlcnNpb24oKSB7Ci0JCW1vZHVsZS5nZXRKMkVFU3BlY2lmaWNhdGlvblZlcnNpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTG9jYXRpb24oKSB7Ci0JCW1vZHVsZS5nZXRMb2NhdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNCaW5hcnkoKSB7Ci0JCW1vZHVsZS5pc0JpbmFyeSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRFSkJTcGVjVmVyc2lvbigpIHsKLQkJbW9kdWxlLmdldEVKQlNwZWNpZmljYXRpb25WZXJzaW9uKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0VudGVycHJpc2VBcHBsaWNhdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9FbnRlcnByaXNlQXBwbGljYXRpb25UZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWU3YjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0VudGVycHJpc2VBcHBsaWNhdGlvblRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JRW50ZXJwcmlzZUFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RFbnRlcnByaXNlQXBwbGljYXRpb247Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRW50ZXJwcmlzZUFwcGxpY2F0aW9uVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJRW50ZXJwcmlzZUFwcGxpY2F0aW9uIGFwcDsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShFbnRlcnByaXNlQXBwbGljYXRpb25UZXN0Q2FzZS5jbGFzcywgIkVudGVycHJpc2VBcHBsaWNhdGlvblRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQlhcHAgPSBuZXcgVGVzdEVudGVycHJpc2VBcHBsaWNhdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFTcGVjVmVyc2lvbigpIHsKLQkJYXBwLmdldEoyRUVTcGVjaWZpY2F0aW9uVmVyc2lvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJMb2NhdGlvbigpIHsKLQkJYXBwLmdldExvY2F0aW9uKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM01vZHVsZXMoKSB7Ci0JCWFwcC5nZXRNb2R1bGVzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNFVSSSgpIHsKLQkJYXBwLmdldFVSSShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA1TG9vc2VNb2R1bGVzKCkgewotCQlhcHAuY29udGFpbnNMb29zZU1vZHVsZXMoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjMzMzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmludGVybmFsLkphdmFTZXJ2ZXJQbHVnaW47Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKEphdmFTZXJ2ZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0dlbmVyaWNSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0dlbmVyaWNSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0NWMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9HZW5lcmljUnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5HZW5lcmljUnVudGltZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmludGVybmFsLklHZW5lcmljUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSUdlbmVyaWNSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLio7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBHZW5lcmljUnVudGltZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5USU1FX1RZUEVfSUQgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnJ1bnRpbWVUeXBlIjsKLQotCXByb3RlY3RlZCBzdGF0aWMgSVJ1bnRpbWUgcnVudGltZTsKLQlwcm90ZWN0ZWQgc3RhdGljIElSdW50aW1lIHJ1bnRpbWVXQzsKLQlwcm90ZWN0ZWQgc3RhdGljIElHZW5lcmljUnVudGltZSBnZW5lcmljUnVudGltZTsKLQlwcm90ZWN0ZWQgc3RhdGljIElHZW5lcmljUnVudGltZVdvcmtpbmdDb3B5IGdlbmVyaWNSdW50aW1lV0M7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShHZW5lcmljUnVudGltZVRlc3RDYXNlLmNsYXNzLCAiR2VuZXJpY1J1bnRpbWVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVUeXBlIHJ0ID0gU2VydmVyQ29yZS5maW5kUnVudGltZVR5cGUoUlVOVElNRV9UWVBFX0lEKTsKLQkJSVJ1bnRpbWVXb3JraW5nQ29weSB3YyA9IHJ0LmNyZWF0ZVJ1bnRpbWUoImEiLCBudWxsKTsKLQkJd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoImM6Ly90ZXN0IikpOwotCQlydW50aW1lID0gd2Muc2F2ZShmYWxzZSwgbnVsbCk7Ci0JCQotCQlhc3NlcnRUcnVlKCFydW50aW1lLmlzV29ya2luZ0NvcHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxVmFsaWRhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gcnVudGltZS52YWxpZGF0ZShudWxsKTsKLQkJYXNzZXJ0VHJ1ZSghc3RhdHVzLmlzT0soKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMlV0aWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZShHZW5lcmljUnVudGltZVV0aWwuaXNHZW5lcmljSjJFRVJ1bnRpbWUocnVudGltZSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNBZGFwdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlnZW5lcmljUnVudGltZSA9IChJR2VuZXJpY1J1bnRpbWUpIHJ1bnRpbWUuZ2V0QWRhcHRlcihJR2VuZXJpY1J1bnRpbWUuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKGdlbmVyaWNSdW50aW1lKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0QWRhcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0Tm90TnVsbChydW50aW1lLmdldEFkYXB0ZXIoSUdlbmVyaWNSdW50aW1lV29ya2luZ0NvcHkuY2xhc3MpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA1R2V0SlZNKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE5vdE51bGwoZ2VuZXJpY1J1bnRpbWUuZ2V0Vk1JbnN0YWxsKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZBZGFwdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlydW50aW1lV0MgPSBydW50aW1lLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JCWdlbmVyaWNSdW50aW1lV0MgPSAoSUdlbmVyaWNSdW50aW1lV29ya2luZ0NvcHkpIHJ1bnRpbWVXQy5nZXRBZGFwdGVyKElHZW5lcmljUnVudGltZVdvcmtpbmdDb3B5LmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbChnZW5lcmljUnVudGltZVdDKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3QWRhcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0Tm90TnVsbChydW50aW1lV0MuZ2V0QWRhcHRlcihJR2VuZXJpY1J1bnRpbWUuY2xhc3MpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA4U2V0SlZNKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE5vdE51bGwoZ2VuZXJpY1J1bnRpbWVXQy5nZXRWTUluc3RhbGwoKSk7Ci0JCWdlbmVyaWNSdW50aW1lV0Muc2V0Vk1JbnN0YWxsKG51bGwpOwotCQlhc3NlcnROb3ROdWxsKGdlbmVyaWNSdW50aW1lV0MuZ2V0Vk1JbnN0YWxsKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwOURlbGV0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcnVudGltZS5kZWxldGUoKTsKLQkJcnVudGltZSA9IG51bGw7Ci0JCXJ1bnRpbWVXQyA9IG51bGw7Ci0JCWdlbmVyaWNSdW50aW1lID0gbnVsbDsKLQkJZ2VuZXJpY1J1bnRpbWVXQyA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0oyRUVNb2R1bGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvSjJFRU1vZHVsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZDMyODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvSjJFRU1vZHVsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JSjJFRU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0SjJFRU1vZHVsZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBKMkVFTW9kdWxlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJSjJFRU1vZHVsZSBtb2R1bGU7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoSjJFRU1vZHVsZVRlc3RDYXNlLmNsYXNzLCAiSjJFRU1vZHVsZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQltb2R1bGUgPSBuZXcgVGVzdEoyRUVNb2R1bGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxU3BlY1ZlcnNpb24oKSB7Ci0JCW1vZHVsZS5nZXRKMkVFU3BlY2lmaWNhdGlvblZlcnNpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTG9jYXRpb24oKSB7Ci0JCW1vZHVsZS5nZXRMb2NhdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNCaW5hcnkoKSB7Ci0JCW1vZHVsZS5pc0JpbmFyeSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9KbmRpTGF1bmNoYWJsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9KbmRpTGF1bmNoYWJsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ODI4YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvSm5kaUxhdW5jaGFibGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuSm5kaUxhdW5jaGFibGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgSm5kaUxhdW5jaGFibGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIEpuZGlMYXVuY2hhYmxlIGxhdW5jaDsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShKbmRpTGF1bmNoYWJsZVRlc3RDYXNlLmNsYXNzLCAiSm5kaUxhdW5jaGFibGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJbGF1bmNoID0gbmV3IEpuZGlMYXVuY2hhYmxlKG51bGwsICJ0ZXN0Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUdldFByb3BlcnRpZXMoKSB7Ci0JCWFzc2VydE51bGwobGF1bmNoLmdldFByb3BlcnRpZXMoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldEpORElOYW1lKCkgewotCQlhc3NlcnRFcXVhbHMobGF1bmNoLmdldEpORElOYW1lKCksICJ0ZXN0Iik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0puZGlPYmplY3RUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvSm5kaU9iamVjdFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmY0NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvSm5kaU9iamVjdFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5KbmRpT2JqZWN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEpuZGlPYmplY3RUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIEpuZGlPYmplY3Qgb2JqOwotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKEpuZGlPYmplY3RUZXN0Q2FzZS5jbGFzcywgIkpuZGlPYmplY3RUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJb2JqID0gbmV3IEpuZGlPYmplY3QobnVsbCwgInRlc3QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TW9kdWxlKCkgewotCQlhc3NlcnROdWxsKG9iai5nZXRNb2R1bGUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldEpORElOYW1lKCkgewotCQlhc3NlcnRFcXVhbHMob2JqLmdldEpuZGlOYW1lKCksICJ0ZXN0Iik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0xvb3NlQXJjaGl2ZVN1cHBvcnRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvTG9vc2VBcmNoaXZlU3VwcG9ydFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYWNkOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvTG9vc2VBcmNoaXZlU3VwcG9ydFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JTG9vc2VBcmNoaXZlU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0TG9vc2VBcmNoaXZlU3VwcG9ydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBMb29zZUFyY2hpdmVTdXBwb3J0VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJTG9vc2VBcmNoaXZlU3VwcG9ydCBhcmNoaXZlOwotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKExvb3NlQXJjaGl2ZVN1cHBvcnRUZXN0Q2FzZS5jbGFzcywgIkxvb3NlQXJjaGl2ZVN1cHBvcnRUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJYXJjaGl2ZSA9IG5ldyBUZXN0TG9vc2VBcmNoaXZlU3VwcG9ydCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRMb29zZUFyY2hpdmVzKCkgewotCQlhcmNoaXZlLmdldExvb3NlQXJjaGl2ZXMoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0VVJJKCkgewotCQlhcmNoaXZlLmdldFVSSShudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvTG9vc2VBcmNoaXZlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL0xvb3NlQXJjaGl2ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYWI2YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvTG9vc2VBcmNoaXZlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklMb29zZUFyY2hpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdExvb3NlQXJjaGl2ZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBMb29zZUFyY2hpdmVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElMb29zZUFyY2hpdmUgYXJjaGl2ZTsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShMb29zZUFyY2hpdmVUZXN0Q2FzZS5jbGFzcywgIkxvb3NlQXJjaGl2ZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQlhcmNoaXZlID0gbmV3IFRlc3RMb29zZUFyY2hpdmUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxTG9jYXRpb24oKSB7Ci0JCWFyY2hpdmUuZ2V0TG9jYXRpb24oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyQmluYXJ5KCkgewotCQlhcmNoaXZlLmlzQmluYXJ5KCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdhZDhlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1jbGFzcyBPcmRlcmVkVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlewotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQl0aGlzKHRoZUNsYXNzKTsKLQkJc2V0TmFtZShuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShmaW5hbCBDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcigpOwotCQlzZXROYW1lKHRoZUNsYXNzLmdldE5hbWUoKSk7Ci0JCXRyeSB7Ci0JCQlnZXRUZXN0Q29uc3RydWN0b3IodGhlQ2xhc3MpOyAvLyBBdm9pZCBnZW5lcmF0aW5nIG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzCi0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkKLQkJCQkJKyAiIGhhcyBubyBwdWJsaWMgY29uc3RydWN0b3IgVGVzdENhc2UoU3RyaW5nIG5hbWUpIG9yIFRlc3RDYXNlKCkiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKCFNb2RpZmllci5pc1B1YmxpYyh0aGVDbGFzcy5nZXRNb2RpZmllcnMoKSkpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKSArICIgaXMgbm90IHB1YmxpYyIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlDbGFzcyBzdXBlckNsYXNzID0gdGhlQ2xhc3M7Ci0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLQkJd2hpbGUgKFRlc3QuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzdXBlckNsYXNzKSkgewotCQkJTWV0aG9kW10gbWV0aG9kcyA9IHN1cGVyQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCQlpbnQgc2l6ZSA9IG1ldGhvZHMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgaSsrKSB7Ci0JCQkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQkJCWlmIChtZXRob2RzW2ldLmdldE5hbWUoKS5jb21wYXJlVG8obWV0aG9kc1tqXS5nZXROYW1lKCkpID4gMCkgewotCQkJCQkJTWV0aG9kIG0gPSBtZXRob2RzW2ldOwotCQkJCQkJbWV0aG9kc1tpXSA9IG1ldGhvZHNbal07Ci0JCQkJCQltZXRob2RzW2pdID0gbTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJYWRkVGVzdE1ldGhvZChtZXRob2RzW2ldLCBuYW1lcywgdGhlQ2xhc3MpOwotCQkJfQotCQkJc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3MuZ2V0U3VwZXJjbGFzcygpOwotCQl9Ci0JCWlmICghdGVzdHMoKS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCWFkZFRlc3Qod2FybmluZygiTm8gdGVzdHMgZm91bmQgaW4gIiArIHRoZUNsYXNzLmdldE5hbWUoKSkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRUZXN0TWV0aG9kKE1ldGhvZCBtLCBWZWN0b3IgbmFtZXMsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lcy5jb250YWlucyhuYW1lKSkKLQkJCXJldHVybjsKLQkJaWYgKCFpc1B1YmxpY1Rlc3RNZXRob2QobSkpIHsKLQkJCWlmIChpc1Rlc3RNZXRob2QobSkpCi0JCQkJYWRkVGVzdCh3YXJuaW5nKCJUZXN0IG1ldGhvZCBpc24ndCBwdWJsaWM6ICIgKyBtLmdldE5hbWUoKSkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW5hbWVzLmFkZEVsZW1lbnQobmFtZSk7Ci0JCWFkZFRlc3QoY3JlYXRlVGVzdCh0aGVDbGFzcywgbmFtZSkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1B1YmxpY1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJcmV0dXJuIGlzVGVzdE1ldGhvZChtKSAmJiBNb2RpZmllci5pc1B1YmxpYyhtLmdldE1vZGlmaWVycygpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCUNsYXNzW10gcGFyYW1ldGVycyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJQ2xhc3MgcmV0dXJuVHlwZSA9IG0uZ2V0UmV0dXJuVHlwZSgpOwotCQlyZXR1cm4gcGFyYW1ldGVycy5sZW5ndGggPT0gMCAmJiBuYW1lLnN0YXJ0c1dpdGgoInRlc3QiKSAmJiByZXR1cm5UeXBlLmVxdWFscyhWb2lkLlRZUEUpOwotCX0KLQotCXByaXZhdGUgVGVzdCB3YXJuaW5nKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCXJldHVybiBuZXcgVGVzdENhc2UoIndhcm5pbmciKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkgewotCQkJCWZhaWwobWVzc2FnZSk7Ci0JCQl9Ci0JCX07Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZsZXRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmxldFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MTBkOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmxldFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5TZXJ2bGV0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFNlcnZsZXQgc2VydmxldDsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2bGV0VGVzdENhc2UuY2xhc3MsICJTZXJ2bGV0VGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCXNlcnZsZXQgPSBuZXcgU2VydmxldChudWxsLCAiY2xhc3MiLCAiYWxpYXMiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TW9kdWxlKCkgewotCQlhc3NlcnROdWxsKHNlcnZsZXQuZ2V0TW9kdWxlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJHZXRDbGFzc05hbWUoKSB7Ci0JCWFzc2VydEVxdWFscyhzZXJ2bGV0LmdldFNlcnZsZXRDbGFzc05hbWUoKSwgImNsYXNzIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0QWxpYXMoKSB7Ci0JCWFzc2VydEVxdWFscyhzZXJ2bGV0LmdldEFsaWFzKCksICJhbGlhcyIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNUb1N0cmluZygpIHsKLQkJc2VydmxldC50b1N0cmluZygpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0M2UzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL1dlYk1vZHVsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9XZWJNb2R1bGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzE5N2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL1dlYk1vZHVsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JV2ViTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RXZWJNb2R1bGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgV2ViTW9kdWxlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJV2ViTW9kdWxlIG1vZHVsZTsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShXZWJNb2R1bGVUZXN0Q2FzZS5jbGFzcywgIldlYk1vZHVsZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQltb2R1bGUgPSBuZXcgVGVzdFdlYk1vZHVsZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFTcGVjVmVyc2lvbigpIHsKLQkJbW9kdWxlLmdldEoyRUVTcGVjaWZpY2F0aW9uVmVyc2lvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJMb2NhdGlvbigpIHsKLQkJbW9kdWxlLmdldExvY2F0aW9uKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM0JpbmFyeSgpIHsKLQkJbW9kdWxlLmlzQmluYXJ5KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNEpTUFZlcnNpb24oKSB7Ci0JCW1vZHVsZS5nZXRKU1BTcGVjaWZpY2F0aW9uVmVyc2lvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVTZXJ2ZXJWZXJzaW9uKCkgewotCQltb2R1bGUuZ2V0U2VydmxldFNwZWNpZmljYXRpb25WZXJzaW9uKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNkNvbnRleHRSb290KCkgewotCQltb2R1bGUuZ2V0Q29udGV4dFJvb3QoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3UHVibGlzaFJlcXVpcmVkKCkgewotCQltb2R1bGUuaXNQdWJsaXNoUmVxdWlyZWQoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0QXBwbGljYXRpb25DbGllbnRNb2R1bGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdEFwcGxpY2F0aW9uQ2xpZW50TW9kdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MzY5YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0QXBwbGljYXRpb25DbGllbnRNb2R1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuSUFwcGxpY2F0aW9uQ2xpZW50TW9kdWxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEFwcGxpY2F0aW9uQ2xpZW50TW9kdWxlIGV4dGVuZHMgVGVzdEoyRUVNb2R1bGUgaW1wbGVtZW50cyBJQXBwbGljYXRpb25DbGllbnRNb2R1bGUgewotCS8vIG5vIGFkZGl0b25hbCBtZXRob2RzCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0Q2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdENsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTEyMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0Q2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkNsYXNzcGF0aFJ1bnRpbWVUYXJnZXRIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q2xhc3NwYXRoUnVudGltZVRhcmdldEhhbmRsZXIgZXh0ZW5kcyBDbGFzc3BhdGhSdW50aW1lVGFyZ2V0SGFuZGxlciB7Ci0JcHVibGljIFN0cmluZyBnZXRDbGFzc3BhdGhDb250YWluZXJMYWJlbChJUnVudGltZSBydW50aW1lLCBTdHJpbmcgaWQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDbGFzc3BhdGhFbnRyeVtdIHJlc29sdmVDbGFzc3BhdGhDb250YWluZXIoSVJ1bnRpbWUgcnVudGltZSwgU3RyaW5nIGlkKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkTWV0aG9kcygpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewotCQkJYWRkTGlicmFyeUVudHJpZXMobGlzdCwgbnVsbCwgZmFsc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0Q29ubmVjdG9yTW9kdWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RDb25uZWN0b3JNb2R1bGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZWMxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RDb25uZWN0b3JNb2R1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklDb25uZWN0b3JNb2R1bGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29ubmVjdG9yTW9kdWxlIGV4dGVuZHMgVGVzdEoyRUVNb2R1bGUgaW1wbGVtZW50cyBJQ29ubmVjdG9yTW9kdWxlIHsKLQlwdWJsaWMgSVBhdGhbXSBnZXRDbGFzc3BhdGgoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RFSkJNb2R1bGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdEVKQk1vZHVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njc2YzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdEVKQk1vZHVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JRUpCTW9kdWxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVKQk1vZHVsZSBleHRlbmRzIFRlc3RKMkVFTW9kdWxlIGltcGxlbWVudHMgSUVKQk1vZHVsZSB7Ci0JcHVibGljIFN0cmluZyBnZXRFSkJTcGVjaWZpY2F0aW9uVmVyc2lvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdEVudGVycHJpc2VBcHBsaWNhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0RW50ZXJwcmlzZUFwcGxpY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkY2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0RW50ZXJwcmlzZUFwcGxpY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JRW50ZXJwcmlzZUFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5JSjJFRU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLQotcHVibGljIGNsYXNzIFRlc3RFbnRlcnByaXNlQXBwbGljYXRpb24gaW1wbGVtZW50cyBJRW50ZXJwcmlzZUFwcGxpY2F0aW9uIHsKLQlwdWJsaWMgU3RyaW5nIGdldEoyRUVTcGVjaWZpY2F0aW9uVmVyc2lvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSU1vZHVsZVtdIGdldE1vZHVsZXMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VVJJKElKMkVFTW9kdWxlIG1vZHVsZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjb250YWluc0xvb3NlTW9kdWxlcygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RKMkVFTW9kdWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RKMkVFTW9kdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZmI2OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0SjJFRU1vZHVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuSUoyRUVNb2R1bGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0SjJFRU1vZHVsZSBpbXBsZW1lbnRzIElKMkVFTW9kdWxlIHsKLQlwdWJsaWMgU3RyaW5nIGdldEoyRUVTcGVjaWZpY2F0aW9uVmVyc2lvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0JpbmFyeSgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RMb29zZUFyY2hpdmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdExvb3NlQXJjaGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM1ZDVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdExvb3NlQXJjaGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuSUxvb3NlQXJjaGl2ZTsKLQotcHVibGljIGNsYXNzIFRlc3RMb29zZUFyY2hpdmUgaW1wbGVtZW50cyBJTG9vc2VBcmNoaXZlIHsKLQlwdWJsaWMgSVBhdGggZ2V0TG9jYXRpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQmluYXJ5KCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdExvb3NlQXJjaGl2ZVN1cHBvcnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdExvb3NlQXJjaGl2ZVN1cHBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjOWUyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RMb29zZUFyY2hpdmVTdXBwb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklMb29zZUFyY2hpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklMb29zZUFyY2hpdmVTdXBwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdExvb3NlQXJjaGl2ZVN1cHBvcnQgaW1wbGVtZW50cyBJTG9vc2VBcmNoaXZlU3VwcG9ydCB7Ci0JcHVibGljIElNb2R1bGVbXSBnZXRMb29zZUFyY2hpdmVzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFVSSShJTG9vc2VBcmNoaXZlIGFyY2hpdmUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFdlYk1vZHVsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0V2ViTW9kdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMjhjMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0V2ViTW9kdWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLklXZWJNb2R1bGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0V2ViTW9kdWxlIGV4dGVuZHMgVGVzdEoyRUVNb2R1bGUgaW1wbGVtZW50cyBJV2ViTW9kdWxlIHsKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRTcGVjaWZpY2F0aW9uVmVyc2lvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRKU1BTcGVjaWZpY2F0aW9uVmVyc2lvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb250ZXh0Um9vdCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNQdWJsaXNoUmVxdWlyZWQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI2YWUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLnRlc3RzIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dzdC1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS50ZXN0cy5BbGxUZXN0cyIgLz4KLSAgIAk8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1YWMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDc3YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjMDQ0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzNzgwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMuVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC50b21jYXQuY29yZS50ZXN0cy5pbnRlcm5hbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzkxN2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL0Fic3RyYWN0VG9tY2F0UnVudGltZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL0Fic3RyYWN0VG9tY2F0UnVudGltZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNWM0ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9BYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi2gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHQuQWJzdHJhY3RSdW50aW1lVGVzdENhc2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSBleHRlbmRzIEFic3RyYWN0UnVudGltZVRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFJ1bnRpbWVUeXBlSWQoKTsKLQotCXB1YmxpYyBJUnVudGltZSBjcmVhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gY3JlYXRlUnVudGltZShnZXRSdW50aW1lVHlwZUlkKCkpOwotCQkJcmV0dXJuIHdjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVSdW50aW1lKElSdW50aW1lIHJ1bnRpbWUyKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcnVudGltZTIuZGVsZXRlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUnVudGltZVdvcmtpbmdDb3B5IGNyZWF0ZVJ1bnRpbWUoU3RyaW5nIHJ1bnRpbWVUeXBlSWQpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVudGltZVR5cGUgcnQgPSBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lVHlwZShydW50aW1lVHlwZUlkKTsKLQkJSVJ1bnRpbWVXb3JraW5nQ29weSB3YyA9IHJ0LmNyZWF0ZVJ1bnRpbWUobnVsbCwgbnVsbCk7Ci0JCXdjLnNldExvY2F0aW9uKG5ldyBQYXRoKFJ1bnRpbWVMb2NhdGlvbi5ydW50aW1lTG9jYXRpb24pKTsKLQkJcmV0dXJuIHdjOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL0Fic3RyYWN0VG9tY2F0U2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvQWJzdHJhY3RUb21jYXRTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjIzYWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvQWJzdHJhY3RUb21jYXRTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuSVRvbWNhdENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLlRvbWNhdFNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuZXh0LkFic3RyYWN0U2VydmVyVGVzdENhc2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIGV4dGVuZHMgQWJzdHJhY3RTZXJ2ZXJUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoQWJzdHJhY3RUb21jYXRTZXJ2ZXJUZXN0Q2FzZS5jbGFzcywgIlRvbWNhdFNlcnZlclRlc3RDYXNlIik7Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTZXJ2ZXJUeXBlSWQoKTsKLQotCXB1YmxpYyBJU2VydmVyIGNyZWF0ZVNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gY3JlYXRlU2VydmVyKGdldFNlcnZlclR5cGVJZCgpKTsKLQkJCXJldHVybiB3Yy5zYXZlKHRydWUsIG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRlbGV0ZVNlcnZlcihJU2VydmVyIHNlcnZlcjIpIHRocm93cyBFeGNlcHRpb24gewotCQlzZXJ2ZXIyLmdldFJ1bnRpbWUoKS5kZWxldGUoKTsKLQkJc2VydmVyMi5kZWxldGUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVJ1bnRpbWUgY3JlYXRlUnVudGltZSgpIHsKLQkJdHJ5IHsKLQkJCUlTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShnZXRTZXJ2ZXJUeXBlSWQoKSk7Ci0JCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gY3JlYXRlUnVudGltZShzdC5nZXRSdW50aW1lVHlwZSgpKTsKLQkJCXJldHVybiB3Yy5zYXZlKHRydWUsIG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIElSdW50aW1lV29ya2luZ0NvcHkgY3JlYXRlUnVudGltZShJUnVudGltZVR5cGUgcnQpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZShudWxsLCBudWxsKTsKLQkJd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoUnVudGltZUxvY2F0aW9uLnJ1bnRpbWVMb2NhdGlvbikpOwotCQlyZXR1cm4gd2M7Ci0JfQotCQotCXByb3RlY3RlZCBJU2VydmVyV29ya2luZ0NvcHkgY3JlYXRlU2VydmVyKFN0cmluZyBzZXJ2ZXJUeXBlSWQpIHRocm93cyBFeGNlcHRpb24gewotCQlJU2VydmVyVHlwZSBzdCA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJSVJ1bnRpbWUgcnVudGltZSA9IGNyZWF0ZVJ1bnRpbWUoKTsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gc3QuY3JlYXRlU2VydmVyKG51bGwsIG51bGwsIHJ1bnRpbWUsIG51bGwpOwotCQkKLQkJU2VydmVyUG9ydFtdIHBvcnRzID0gd2MuZ2V0U2VydmVyUG9ydHMobnVsbCk7Ci0JCVRvbWNhdFNlcnZlciB0b21jYXRTZXJ2ZXIgPSAoVG9tY2F0U2VydmVyKSB3Yy5nZXRBZGFwdGVyKFRvbWNhdFNlcnZlci5jbGFzcyk7Ci0JCUlUb21jYXRDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbiA9IChJVG9tY2F0Q29uZmlndXJhdGlvbldvcmtpbmdDb3B5KSB0b21jYXRTZXJ2ZXIuZ2V0U2VydmVyQ29uZmlndXJhdGlvbigpOwotCQkvLyBpZiBubyBwb3J0cyBmcm9tIHRoZSBzZXJ2ZXIsIHVzZSB0aGUgY29uZmlndXJhdGlvbgotCQlpZiAocG9ydHMgPT0gbnVsbCB8fCBwb3J0cy5sZW5ndGggPT0gMCkgewotCQkJTGlzdCBwb3J0c0xpc3QgPSBjb25maWd1cmF0aW9uLmdldFNlcnZlclBvcnRzKCk7Ci0JCQlpZiAocG9ydHNMaXN0ICE9IG51bGwgJiYgcG9ydHNMaXN0LnNpemUoKSA+IDApIHsKLQkJCQlwb3J0cyA9IChTZXJ2ZXJQb3J0W10pcG9ydHNMaXN0LnRvQXJyYXkobmV3IFNlcnZlclBvcnRbcG9ydHNMaXN0LnNpemUoKV0pOwotCQkJfQotCQl9Ci0JCWlmIChwb3J0cyAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IHBvcnRzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJY29uZmlndXJhdGlvbi5tb2RpZnlTZXJ2ZXJQb3J0KHBvcnRzW2ldLmdldElkKCksIDIyMTAwICsgaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiB3YzsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTRiNGM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotoCoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QudG9tY2F0LmNvcmUudGVzdHMuaW50ZXJuYWwuVXRpbFRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxUZXN0cyB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0UnVudGltZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCQotCQlTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuMzIiKTsgCi0JCS8vcyA9ICJEOlxcVG9vbHNcXHRvbWNhdFxcamFrYXJ0YS10b21jYXQtMy4yLjQiOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQlSdW50aW1lTG9jYXRpb24ucnVudGltZUxvY2F0aW9uID0gczsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0MzJSdW50aW1lVGVzdENhc2UuY2xhc3MpKTsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0MzJTZXJ2ZXJUZXN0Q2FzZS5jbGFzcykpOwotCQl9Ci0JCQotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MCIpOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQlSdW50aW1lTG9jYXRpb24ucnVudGltZUxvY2F0aW9uID0gczsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0NDBSdW50aW1lVGVzdENhc2UuY2xhc3MpKTsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0NDBTZXJ2ZXJUZXN0Q2FzZS5jbGFzcykpOwotCQl9Ci0JCQotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSIpOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQlSdW50aW1lTG9jYXRpb24ucnVudGltZUxvY2F0aW9uID0gczsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0NDFSdW50aW1lVGVzdENhc2UuY2xhc3MpKTsKLQkJCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoVG9tY2F0NDFTZXJ2ZXJUZXN0Q2FzZS5jbGFzcykpOwotCQl9Ci0JCQotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotCQkvL3MgPSAiRDpcXFRvb2xzXFx0b21jYXRcXGpha2FydGEtdG9tY2F0LTUuMC4xOSI7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCVJ1bnRpbWVMb2NhdGlvbi5ydW50aW1lTG9jYXRpb24gPSBzOwotCQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShUb21jYXQ1MFJ1bnRpbWVUZXN0Q2FzZS5jbGFzcykpOwotCQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShUb21jYXQ1MFNlcnZlclRlc3RDYXNlLmNsYXNzKSk7Ci0JCX0KLQkJCi0JCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1Iik7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCVJ1bnRpbWVMb2NhdGlvbi5ydW50aW1lTG9jYXRpb24gPSBzOwotCQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShUb21jYXQ1NVJ1bnRpbWVUZXN0Q2FzZS5jbGFzcykpOwotCQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShUb21jYXQ1NVNlcnZlclRlc3RDYXNlLmNsYXNzKSk7Ci0JCX0KLQkJCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShVdGlsVGVzdENhc2UuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQwNzM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuVG9tY2F0UGx1Z2luOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJYXNzZXJ0Tm90TnVsbChUb21jYXRQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxODA3NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotY2xhc3MgT3JkZXJlZFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZXsKLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJdGhpcyh0aGVDbGFzcyk7Ci0JCXNldE5hbWUobmFtZSk7Ci0JfQotCi0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoZmluYWwgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIoKTsKLQkJc2V0TmFtZSh0aGVDbGFzcy5nZXROYW1lKCkpOwotCQl0cnkgewotCQkJZ2V0VGVzdENvbnN0cnVjdG9yKHRoZUNsYXNzKTsgLy8gQXZvaWQgZ2VuZXJhdGluZyBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpCi0JCQkJCSsgIiBoYXMgbm8gcHVibGljIGNvbnN0cnVjdG9yIFRlc3RDYXNlKFN0cmluZyBuYW1lKSBvciBUZXN0Q2FzZSgpIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghTW9kaWZpZXIuaXNQdWJsaWModGhlQ2xhc3MuZ2V0TW9kaWZpZXJzKCkpKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkgKyAiIGlzIG5vdCBwdWJsaWMiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3Mgc3VwZXJDbGFzcyA9IHRoZUNsYXNzOwotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCXdoaWxlIChUZXN0LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc3VwZXJDbGFzcykpIHsKLQkJCU1ldGhvZFtdIG1ldGhvZHMgPSBzdXBlckNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOwotCQkJaW50IHNpemUgPSBtZXRob2RzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKykgewotCQkJCWZvciAoaW50IGogPSBpICsgMTsgaiA8IHNpemU7IGorKykgewotCQkJCQlpZiAobWV0aG9kc1tpXS5nZXROYW1lKCkuY29tcGFyZVRvKG1ldGhvZHNbal0uZ2V0TmFtZSgpKSA+IDApIHsKLQkJCQkJCU1ldGhvZCBtID0gbWV0aG9kc1tpXTsKLQkJCQkJCW1ldGhvZHNbaV0gPSBtZXRob2RzW2pdOwotCQkJCQkJbWV0aG9kc1tqXSA9IG07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCWFkZFRlc3RNZXRob2QobWV0aG9kc1tpXSwgbmFtZXMsIHRoZUNsYXNzKTsKLQkJCX0KLQkJCXN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzLmdldFN1cGVyY2xhc3MoKTsKLQkJfQotCQlpZiAoIXRlc3RzKCkuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCQlhZGRUZXN0KHdhcm5pbmcoIk5vIHRlc3RzIGZvdW5kIGluICIgKyB0aGVDbGFzcy5nZXROYW1lKCkpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkVGVzdE1ldGhvZChNZXRob2QgbSwgVmVjdG9yIG5hbWVzLCBDbGFzcyB0aGVDbGFzcykgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlpZiAobmFtZXMuY29udGFpbnMobmFtZSkpCi0JCQlyZXR1cm47Ci0JCWlmICghaXNQdWJsaWNUZXN0TWV0aG9kKG0pKSB7Ci0JCQlpZiAoaXNUZXN0TWV0aG9kKG0pKQotCQkJCWFkZFRlc3Qod2FybmluZygiVGVzdCBtZXRob2QgaXNuJ3QgcHVibGljOiAiICsgbS5nZXROYW1lKCkpKTsKLQkJCXJldHVybjsKLQkJfQotCQluYW1lcy5hZGRFbGVtZW50KG5hbWUpOwotCQlhZGRUZXN0KGNyZWF0ZVRlc3QodGhlQ2xhc3MsIG5hbWUpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNQdWJsaWNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCXJldHVybiBpc1Rlc3RNZXRob2QobSkgJiYgTW9kaWZpZXIuaXNQdWJsaWMobS5nZXRNb2RpZmllcnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlDbGFzc1tdIHBhcmFtZXRlcnMgPSBtLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCUNsYXNzIHJldHVyblR5cGUgPSBtLmdldFJldHVyblR5cGUoKTsKLQkJcmV0dXJuIHBhcmFtZXRlcnMubGVuZ3RoID09IDAgJiYgbmFtZS5zdGFydHNXaXRoKCJ0ZXN0IikgJiYgcmV0dXJuVHlwZS5lcXVhbHMoVm9pZC5UWVBFKTsKLQl9Ci0KLQlwcml2YXRlIFRlc3Qgd2FybmluZyhmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotCQlyZXR1cm4gbmV3IFRlc3RDYXNlKCJ3YXJuaW5nIikgewotCQkJcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpIHsKLQkJCQlmYWlsKG1lc3NhZ2UpOwotCQkJfQotCQl9OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1J1bnRpbWVMb2NhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvY29yZS90ZXN0cy9SdW50aW1lTG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0ZWVmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1J1bnRpbWVMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi2gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVMb2NhdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcnVudGltZUxvY2F0aW9uOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNiNzVmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0MzJSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0MzJSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzNzFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDMyUnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1wdWJsaWMgY2xhc3MgVG9tY2F0MzJSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXRSdW50aW1lVHlwZUlkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuMzIiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDMyU2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0MzJTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdlNzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0MzJTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFRvbWNhdDMyU2VydmVyVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC4zMiI7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDBSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDBSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQyYzY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDQwUnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1wdWJsaWMgY2xhc3MgVG9tY2F0NDBSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXRSdW50aW1lVHlwZUlkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNDAiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDQwU2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDBTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTI4NjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDBTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFRvbWNhdDQwU2VydmVyVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MCI7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDFSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDFSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmNjI0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDQxUnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1wdWJsaWMgY2xhc3MgVG9tY2F0NDFSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXRSdW50aW1lVHlwZUlkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNDEiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDQxU2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDFTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGMyMzRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NDFTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFRvbWNhdDQxU2VydmVyVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSI7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTBSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTBSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQwMTE5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDUwUnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1wdWJsaWMgY2xhc3MgVG9tY2F0NTBSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXRSdW50aW1lVHlwZUlkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDUwU2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTBTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjE2YTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTBTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFRvbWNhdDUwU2VydmVyVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTVSdW50aW1lVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTVSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRiYjQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDU1UnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1wdWJsaWMgY2xhc3MgVG9tY2F0NTVSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXRSdW50aW1lVHlwZUlkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTUiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdDU1U2VydmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTVTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDMwODFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0NTVTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0czsKLQotcHVibGljIGNsYXNzIFRvbWNhdDU1U2VydmVyVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdFRvbWNhdFNlcnZlclRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSI7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0UnVudGltZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC9jb3JlL3Rlc3RzL1RvbWNhdFJ1bnRpbWVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzQ2ODhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L2NvcmUvdGVzdHMvVG9tY2F0UnVudGltZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5pbnRlcm5hbC5JVG9tY2F0UnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLklUb21jYXRSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLio7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUb21jYXRSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfVFlQRV9JRF8zMiA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjMyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOVElNRV9UWVBFX0lEXzQwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNDAiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5USU1FX1RZUEVfSURfNDEgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS40MSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfVFlQRV9JRF81MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOVElNRV9UWVBFX0lEXzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTUiOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUnVudGltZSBydW50aW1lOwotCXByb3RlY3RlZCBzdGF0aWMgSVRvbWNhdFJ1bnRpbWUgdG9tY2F0UnVudGltZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFRvbWNhdFJ1bnRpbWVUZXN0Q2FzZS5jbGFzcywgIlRvbWNhdFJ1bnRpbWVUZXN0Q2FzZSIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgSVJ1bnRpbWVXb3JraW5nQ29weSBjcmVhdGVSdW50aW1lKFN0cmluZyBydW50aW1lVHlwZUlkKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVUeXBlIHJ0ID0gU2VydmVyQ29yZS5maW5kUnVudGltZVR5cGUocnVudGltZVR5cGVJZCk7Ci0JCUlSdW50aW1lV29ya2luZ0NvcHkgd2MgPSBydC5jcmVhdGVSdW50aW1lKCJhIiwgbnVsbCk7Ci0JCXdjLnNldExvY2F0aW9uKG5ldyBQYXRoKCJjOi8vdGVzdCIpKTsKLQkJcmV0dXJuIHdjOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcnVudGltZSA9IGNyZWF0ZVJ1bnRpbWUoUlVOVElNRV9UWVBFX0lEXzMyKS5zYXZlKGZhbHNlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSghcnVudGltZS5pc1dvcmtpbmdDb3B5KCkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBydW50aW1lLnZhbGlkYXRlKG51bGwpOwotCQlhc3NlcnRUcnVlKCFzdGF0dXMuaXNPSygpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgYWRhcHRSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRvbWNhdFJ1bnRpbWUgPSAoSVRvbWNhdFJ1bnRpbWUpIHJ1bnRpbWUuZ2V0QWRhcHRlcihJVG9tY2F0UnVudGltZS5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwodG9tY2F0UnVudGltZSk7Ci0JCWFzc2VydE5vdE51bGwodG9tY2F0UnVudGltZS5nZXRWTUluc3RhbGwoKSk7Ci0JCWFzc2VydE5vdE51bGwodG9tY2F0UnVudGltZS5nZXRSdW50aW1lQ2xhc3NwYXRoKCkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBtb2RpZnlSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdW50aW1lV29ya2luZ0NvcHkgd2MgPSBydW50aW1lLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JCUlUb21jYXRSdW50aW1lV29ya2luZ0NvcHkgdHJ3YyA9IChJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5KSB3Yy5nZXRBZGFwdGVyKElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkuY2xhc3MpOwotCQl0cndjLnNldFZNSW5zdGFsbChudWxsKTsKLQkJd2Muc2F2ZSh0cnVlLCBudWxsKTsKLQkJdG9tY2F0UnVudGltZSA9IChJVG9tY2F0UnVudGltZSkgcnVudGltZS5nZXRBZGFwdGVyKElUb21jYXRSdW50aW1lLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCh0b21jYXRSdW50aW1lLmdldFZNSW5zdGFsbCgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlydW50aW1lLmRlbGV0ZSgpOwotCQlydW50aW1lID0gbnVsbDsKLQkJdG9tY2F0UnVudGltZSA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxVmFsaWRhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXZhbGlkYXRlUnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJBZGFwdFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYWRhcHRSdW50aW1lKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM01vZGlmeVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJbW9kaWZ5UnVudGltZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwNERlbGV0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZXRlUnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBDcmVhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXJ1bnRpbWUgPSBjcmVhdGVSdW50aW1lKFJVTlRJTUVfVFlQRV9JRF80MCkuc2F2ZShmYWxzZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIXJ1bnRpbWUuaXNXb3JraW5nQ29weSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTFWYWxpZGF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdmFsaWRhdGVSdW50aW1lKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMkFkYXB0UnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlhZGFwdFJ1bnRpbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDEzTW9kaWZ5UnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQltb2RpZnlSdW50aW1lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDE0RGVsZXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxldGVSdW50aW1lKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMENyZWF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcnVudGltZSA9IGNyZWF0ZVJ1bnRpbWUoUlVOVElNRV9UWVBFX0lEXzQxKS5zYXZlKGZhbHNlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSghcnVudGltZS5pc1dvcmtpbmdDb3B5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyMVZhbGlkYXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl2YWxpZGF0ZVJ1bnRpbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIyQWRhcHRSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFkYXB0UnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjNNb2RpZnlSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW1vZGlmeVJ1bnRpbWUoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjREZWxldGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGV0ZVJ1bnRpbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDMwQ3JlYXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlydW50aW1lID0gY3JlYXRlUnVudGltZShSVU5USU1FX1RZUEVfSURfNTApLnNhdmUoZmFsc2UsIG51bGwpOwotCQlhc3NlcnRUcnVlKCFydW50aW1lLmlzV29ya2luZ0NvcHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDMxVmFsaWRhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXZhbGlkYXRlUnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MzJBZGFwdFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYWRhcHRSdW50aW1lKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QzM01vZGlmeVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJbW9kaWZ5UnVudGltZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QzNERlbGV0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZXRlUnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0NDBDcmVhdGVSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXJ1bnRpbWUgPSBjcmVhdGVSdW50aW1lKFJVTlRJTUVfVFlQRV9JRF81NSkuc2F2ZShmYWxzZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIXJ1bnRpbWUuaXNXb3JraW5nQ29weSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NDFWYWxpZGF0ZVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdmFsaWRhdGVSdW50aW1lKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3Q0MkFkYXB0UnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlhZGFwdFJ1bnRpbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDQzTW9kaWZ5UnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQltb2RpZnlSdW50aW1lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDQ0RGVsZXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxldGVSdW50aW1lKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC90b21jYXQvY29yZS90ZXN0cy9pbnRlcm5hbC9VdGlsVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC90b21jYXQvY29yZS90ZXN0cy9pbnRlcm5hbC9VdGlsVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyNjU2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvdG9tY2F0L2NvcmUvdGVzdHMvaW50ZXJuYWwvVXRpbFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC50b21jYXQuY29yZS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuVG9tY2F0U2VydmVyQmVoYXZpb3VyOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgVXRpbFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVXRpbFRlc3RDYXNlLmNsYXNzLCAiVXRpbFRlc3RDYXNlIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBcmdNZXJnZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKCIiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoIiIsIG5ldyBTdHJpbmdbXSB7IH0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFyZ01lcmdlMigpIHsKLQkJYXNzZXJ0RXF1YWxzKCJhPWIiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoIiIsIG5ldyBTdHJpbmdbXSB7ICJhPWIifSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXJnTWVyZ2UzKCkgewotCQlhc3NlcnRFcXVhbHMoImE9YiBjPWQiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoIiIsIG5ldyBTdHJpbmdbXSB7ICJhPWIiLCAiYz1kIiB9KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBcmdNZXJnZTQoKSB7Ci0JCWFzc2VydEVxdWFscygiYT1iIGM9ZCIsIFRvbWNhdFNlcnZlckJlaGF2aW91ci5tZXJnZUFyZ3VtZW50cygiYT1iIiwgbmV3IFN0cmluZ1tdIHsgImM9ZCIgfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXJnTWVyZ2U1KCkgewotCQlhc3NlcnRFcXVhbHMoImE9YyIsIFRvbWNhdFNlcnZlckJlaGF2aW91ci5tZXJnZUFyZ3VtZW50cygiYT1iIiwgbmV3IFN0cmluZ1tdIHsgImE9YyIgfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXJnTWVyZ2U2KCkgewotCQlhc3NlcnRFcXVhbHMoImEgYj0yIGQgZT0zIiwgVG9tY2F0U2VydmVyQmVoYXZpb3VyLm1lcmdlQXJndW1lbnRzKCJhIGI9YyBkIiwgbmV3IFN0cmluZ1tdIHsgImI9MiIsICJlPTMiIH0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFyZ01lcmdlNygpIHsKLQkJYXNzZXJ0RXF1YWxzKCJhIGJiPWMgZCBiPTIgZT0zIiwgVG9tY2F0U2VydmVyQmVoYXZpb3VyLm1lcmdlQXJndW1lbnRzKCJhIGJiPWMgZCIsIG5ldyBTdHJpbmdbXSB7ICJiPTIiLCAiZT0zIiB9KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBcmdNZXJnZTgoKSB7Ci0JCWFzc2VydEVxdWFscygiYSIsIFRvbWNhdFNlcnZlckJlaGF2aW91ci5tZXJnZUFyZ3VtZW50cygiYSIsIG5ldyBTdHJpbmdbXSB7IH0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFyZ01lcmdlOSgpIHsKLQkJYXNzZXJ0RXF1YWxzKCJhIGIiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoImEiLCBuZXcgU3RyaW5nW10geyAiYiIgfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXJnTWVyZ2UxMCgpIHsKLQkJYXNzZXJ0RXF1YWxzKCJhIGIgYyBkIiwgVG9tY2F0U2VydmVyQmVoYXZpb3VyLm1lcmdlQXJndW1lbnRzKCJhIGIgIiwgbmV3IFN0cmluZ1tdIHsgImMiLCAiZCIgfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXJnTWVyZ2UxMSgpIHsKLQkJYXNzZXJ0RXF1YWxzKCJhPWIgYz1cImVcIiIsIFRvbWNhdFNlcnZlckJlaGF2aW91ci5tZXJnZUFyZ3VtZW50cygiYT1iIGM9ZCIsIG5ldyBTdHJpbmdbXSB7ICJjPVwiZVwiIiB9KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBcmdNZXJnZTEyKCkgewotCQlhc3NlcnRFcXVhbHMoImE9YiBjPVwiZSBmXCIiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoImE9YiBjPVwiZCBlXCIiLCBuZXcgU3RyaW5nW10geyAiYz1cImUgZlwiIiB9KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBcmdNZXJnZTEzKCkgewotCQlhc3NlcnRFcXVhbHMoImE9YiAtYyBcImVcIiIsIFRvbWNhdFNlcnZlckJlaGF2aW91ci5tZXJnZUFyZ3VtZW50cygiYT1iIC1jIGQiLCBuZXcgU3RyaW5nW10geyAiLWMgXCJlXCIiIH0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFyZ01lcmdlMTQoKSB7Ci0JCWFzc2VydEVxdWFscygiYT1iIC1jIFwiZSBmXCIiLCBUb21jYXRTZXJ2ZXJCZWhhdmlvdXIubWVyZ2VBcmd1bWVudHMoImE9YiAtYyBcImQgZVwiIiwgbmV3IFN0cmluZ1tdIHsgIi1jIFwiZSBmXCIiIH0pKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjFiZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c3QtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy5BbGxUZXN0cyIvPgotICAgCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAJPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0MmU0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwZXJmb3JtYW5jZSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0MWZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1wZXJmb3JtYW5jZS5qYXIKLW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlXzEuMC4wLmphcgotYnVpbGQueG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFhY2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2U8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4ODVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFNlcnZlciBUb21jYXQgUGVyZm9ybWFuY2UgUGx1Zy1pbgotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogcGVyZm9ybWFuY2UuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UudG9tY2F0NTAKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcsCi0gb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYTNiNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwZXJmb3JtYW5jZS5qYXIsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNvdXJjZS5wZXJmb3JtYW5jZS5qYXIgPSBwZXJmb3JtYW5jZS8KLW91dHB1dC5wZXJmb3JtYW5jZS5qYXIgPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODg4OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uKjsKLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL3RvbWNhdDUwL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC90ZXN0cy9wZXJmb3JtYW5jZS90b21jYXQ1MC9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjMwYjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL3RvbWNhdDUwL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlLnRvbWNhdDUwOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlLnRvbWNhdDUwIik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgLypzdWl0ZS5hZGRUZXN0U3VpdGUoR2V0RGVsZWdhdGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW5FZGl0b3JUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFNlcnZlckFjdGlvbnNUZXN0Q2FzZS5jbGFzcyk7Ki8KLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdGVzdHMvcGVyZm9ybWFuY2UvdG9tY2F0NTAvR2V0RGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdGVzdHMvcGVyZm9ybWFuY2UvdG9tY2F0NTAvR2V0RGVsZWdhdGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjkwYmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL3RvbWNhdDUwL0dldERlbGVnYXRlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UudG9tY2F0NTA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLklUb21jYXRSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS5jb21tb24uQWJzdHJhY3RHZXREZWxlZ2F0ZVRlc3RDYXNlOwotcHVibGljIGNsYXNzIEdldERlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdEdldERlbGVnYXRlVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoR2V0RGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIkdldERlbGVnYXRlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJRGltZW5zaW9uW10gZGltcyA9IG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLlVTRURfSkFWQV9IRUFQfTsKLQkJdGFnQXNTdW1tYXJ5KCJDcmVhdGUgVG9tY2F0IHJ1bnRpbWUiLCBkaW1zKTsKLQkJc3VwZXIudGVzdEdldERlbGVnYXRlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElSdW50aW1lV29ya2luZ0NvcHkgY3JlYXRlUnVudGltZShTdHJpbmcgcnVudGltZVR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVUeXBlTG9jYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKHJ1bnRpbWVUeXBlSWQgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLQkJSVJ1bnRpbWVXb3JraW5nQ29weSBydW50aW1lQ29weSA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpLmNyZWF0ZVJ1bnRpbWUocnVudGltZVR5cGVJZCwgbnVsbCk7Ci0JCXJ1bnRpbWVDb3B5LnNldExvY2F0aW9uKG5ldyBQYXRoKHJ1bnRpbWVUeXBlTG9jYXRpb24pKTsKLQkJcnVudGltZUNvcHkuc2V0UmVhZE9ubHkoZmFsc2UpOwotCQlJVk1JbnN0YWxsIHZtSW5zdGFsbCA9IEphdmFSdW50aW1lLmdldERlZmF1bHRWTUluc3RhbGwoKTsKLQkJSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSByd2MgPSAoSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSkgcnVudGltZUNvcHkKLQkJCQkuZ2V0QWRhcHRlcihJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5LmNsYXNzKTsKLQkJcndjLnNldFZNSW5zdGFsbCh2bUluc3RhbGwpOwotCQlydW50aW1lQ29weS5zYXZlKGZhbHNlLCBudWxsKTsKLQkJcmV0dXJuIHJ1bnRpbWVDb3B5OwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UnVudGltZVR5cGVJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFJ1bnRpbWVUeXBlTG9jYXRpb24oKSB7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLQkJYXNzZXJ0Tm90TnVsbChsb2NhdGlvbik7Ci0JCWFzc2VydFRydWUoKG5ldyBGaWxlKGxvY2F0aW9uKSkuZXhpc3RzKCkpOwotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJ2ZXJUeXBlSWQoKSB7Ci0JCXJldHVybiAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC90ZXN0cy9wZXJmb3JtYW5jZS90b21jYXQ1MC9PcGVuRWRpdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL3RvbWNhdDUwL09wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDU4Mzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3Rlc3RzL3BlcmZvcm1hbmNlL3RvbWNhdDUwL09wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS50b21jYXQ1MDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlLmNvbW1vbi5BYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIE9wZW5FZGl0b3JUZXN0Q2FzZSBleHRlbmRzIEFic3RyYWN0T3BlbkVkaXRvclRlc3RDYXNlIHsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKE9wZW5FZGl0b3JUZXN0Q2FzZS5jbGFzcywgIk9wZW5FZGl0b3JUZXN0Q2FzZSIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5FZGl0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBEaW1lbnNpb25bXSBkaW1zID0gbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uVVNFRF9KQVZBX0hFQVB9OwotICAgIHRhZ0FzR2xvYmFsU3VtbWFyeSgiT3BlbiBUb21jYXQgZWRpdG9yIiwgZGltcyk7Ci0gICAgc3VwZXIudGVzdE9wZW5FZGl0b3IoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VydmVyVHlwZUlkKCkgewotICAgIHJldHVybiAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkN2M5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InBlcmZvcm1hbmNlIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4KLQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC50ZXN0cy5wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0icGVyZi10ZXN0cy1maWxlIiB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+Ci0KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfc2VydmVydG9tY2F0X3BlcmZvcm1hbmNlIi8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC4qLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLSAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgcGVyZm9ybWFuY2UgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2Vfc3VpdGUiPgotCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UudG9tY2F0NTAuR2V0RGVsZWdhdGVUZXN0Q2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UudG9tY2F0NTAuT3BlbkVkaXRvclRlc3RDYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICAgIDwhLS0KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudGVzdHMucGVyZm9ybWFuY2UudG9tY2F0NTAuU2VydmVyQWN0aW9uc1Rlc3RDYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICAgIC0tPgotICAgIAotICA8L3RhcmdldD4KLSAgICAKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiIGRlcGVuZHM9ImluaXQscGVyZm9ybWFuY2Vfc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYmE3YjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjczMGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMuVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWksCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZSwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYjM5ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0NjgwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnRlc3RzLlJ1bnRpbWVMb2NhdGlvbjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShFeGlzdGVuY2VUZXN0LmNsYXNzKTsKLQkJU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRvbWNhdDUwRGlyIik7Ci0JCS8vcyA9ICJEOlxcVG9vbHNcXHRvbWNhdFxcamFrYXJ0YS10b21jYXQtMy4yLjQiOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQlSdW50aW1lTG9jYXRpb24ucnVudGltZUxvY2F0aW9uID0gczsKLQkJCXN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuRWRpdG9yVGVzdENhc2UuY2xhc3MpOwotCQl9Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEaWFsb2dzVGVzdENhc2UuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL0RpYWxvZ3NUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL0RpYWxvZ3NUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTAxODEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC91aS90ZXN0cy9EaWFsb2dzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS5pbnRlcm5hbC5lZGl0b3IuTWltZU1hcHBpbmdEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBEaWFsb2dzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWltZU1hcHBpbmdEaWFsb2coKSB7Ci0JCU1pbWVNYXBwaW5nRGlhbG9nIG1tZCA9IG5ldyBNaW1lTWFwcGluZ0RpYWxvZyhnZXRTaGVsbCgpKTsKLQkJVUlUZXN0SGVscGVyLmFzc2VydERpYWxvZyhtbWQpOwotCX0KLQotCS8qcHVibGljIHZvaWQgdGVzdFdlYk1vZHVsZURpYWxvZygpIHsKLQkJV2ViTW9kdWxlRGlhbG9nIHdtZCA9IG5ldyBXZWJNb2R1bGVEaWFsb2coZ2V0U2hlbGwoKSwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7Ci0JCVVJVGVzdEhlbHBlci5hc3NlcnREaWFsb2cod21kKTsKLQl9Ki8KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA0Y2VlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLmludGVybmFsLlRvbWNhdFVJUGx1Z2luOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJYXNzZXJ0Tm90TnVsbChUb21jYXRVSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL09wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL09wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDExOGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC91aS90ZXN0cy9PcGVuRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS50ZXN0cy5Ub21jYXQ1MFNlcnZlclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuQWJzdHJhY3RPcGVuRWRpdG9yVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBBYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZSB7Ci0JcHVibGljIElTZXJ2ZXIgZ2V0U2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBuZXcgVG9tY2F0NTBTZXJ2ZXJUZXN0Q2FzZSgpLmNyZWF0ZVNlcnZlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWxlYXNlU2VydmVyKElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc2VydmVyLmRlbGV0ZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDExNjE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci90b21jYXQvdWkvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1jbGFzcyBPcmRlcmVkVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlewotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQl0aGlzKHRoZUNsYXNzKTsKLQkJc2V0TmFtZShuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShmaW5hbCBDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcigpOwotCQlzZXROYW1lKHRoZUNsYXNzLmdldE5hbWUoKSk7Ci0JCXRyeSB7Ci0JCQlnZXRUZXN0Q29uc3RydWN0b3IodGhlQ2xhc3MpOyAvLyBBdm9pZCBnZW5lcmF0aW5nIG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzCi0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkKLQkJCQkJKyAiIGhhcyBubyBwdWJsaWMgY29uc3RydWN0b3IgVGVzdENhc2UoU3RyaW5nIG5hbWUpIG9yIFRlc3RDYXNlKCkiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKCFNb2RpZmllci5pc1B1YmxpYyh0aGVDbGFzcy5nZXRNb2RpZmllcnMoKSkpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKSArICIgaXMgbm90IHB1YmxpYyIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlDbGFzcyBzdXBlckNsYXNzID0gdGhlQ2xhc3M7Ci0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLQkJd2hpbGUgKFRlc3QuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzdXBlckNsYXNzKSkgewotCQkJTWV0aG9kW10gbWV0aG9kcyA9IHN1cGVyQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCQlpbnQgc2l6ZSA9IG1ldGhvZHMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgaSsrKSB7Ci0JCQkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQkJCWlmIChtZXRob2RzW2ldLmdldE5hbWUoKS5jb21wYXJlVG8obWV0aG9kc1tqXS5nZXROYW1lKCkpID4gMCkgewotCQkJCQkJTWV0aG9kIG0gPSBtZXRob2RzW2ldOwotCQkJCQkJbWV0aG9kc1tpXSA9IG1ldGhvZHNbal07Ci0JCQkJCQltZXRob2RzW2pdID0gbTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJYWRkVGVzdE1ldGhvZChtZXRob2RzW2ldLCBuYW1lcywgdGhlQ2xhc3MpOwotCQkJfQotCQkJc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3MuZ2V0U3VwZXJjbGFzcygpOwotCQl9Ci0JCWlmICghdGVzdHMoKS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCWFkZFRlc3Qod2FybmluZygiTm8gdGVzdHMgZm91bmQgaW4gIiArIHRoZUNsYXNzLmdldE5hbWUoKSkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRUZXN0TWV0aG9kKE1ldGhvZCBtLCBWZWN0b3IgbmFtZXMsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lcy5jb250YWlucyhuYW1lKSkKLQkJCXJldHVybjsKLQkJaWYgKCFpc1B1YmxpY1Rlc3RNZXRob2QobSkpIHsKLQkJCWlmIChpc1Rlc3RNZXRob2QobSkpCi0JCQkJYWRkVGVzdCh3YXJuaW5nKCJUZXN0IG1ldGhvZCBpc24ndCBwdWJsaWM6ICIgKyBtLmdldE5hbWUoKSkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW5hbWVzLmFkZEVsZW1lbnQobmFtZSk7Ci0JCWFkZFRlc3QoY3JlYXRlVGVzdCh0aGVDbGFzcywgbmFtZSkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1B1YmxpY1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJcmV0dXJuIGlzVGVzdE1ldGhvZChtKSAmJiBNb2RpZmllci5pc1B1YmxpYyhtLmdldE1vZGlmaWVycygpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCUNsYXNzW10gcGFyYW1ldGVycyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJQ2xhc3MgcmV0dXJuVHlwZSA9IG0uZ2V0UmV0dXJuVHlwZSgpOwotCQlyZXR1cm4gcGFyYW1ldGVycy5sZW5ndGggPT0gMCAmJiBuYW1lLnN0YXJ0c1dpdGgoInRlc3QiKSAmJiByZXR1cm5UeXBlLmVxdWFscyhWb2lkLlRZUEUpOwotCX0KLQotCXByaXZhdGUgVGVzdCB3YXJuaW5nKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCXJldHVybiBuZXcgVGVzdENhc2UoIndhcm5pbmciKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkgewotCQkJCWZhaWwobWVzc2FnZSk7Ci0JCQl9Ci0JCX07Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC91aS90ZXN0cy9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZmNkZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL1VJVGVzdEhlbHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdG9tY2F0L3VpL3Rlc3RzL1VJVGVzdEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODFlZjAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3RvbWNhdC91aS90ZXN0cy9VSVRlc3RIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRpYWxvZ3MuUHJvcGVydHlEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2VDb250cmlidXRvck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLklXb3JrYmVuY2hBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgVUlUZXN0SGVscGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGNsYXNzIFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyIGV4dGVuZHMgUHJlZmVyZW5jZURpYWxvZyB7Ci0JCXB1YmxpYyBQcmVmZXJlbmNlRGlhbG9nV3JhcHBlcihTaGVsbCBwYXJlbnRTaGVsbCwgUHJlZmVyZW5jZU1hbmFnZXIgbWFuYWdlcikgewotCQkJc3VwZXIocGFyZW50U2hlbGwsIG1hbmFnZXIpOwotCQl9Ci0JCXByb3RlY3RlZCBib29sZWFuIHNob3dQYWdlKElQcmVmZXJlbmNlTm9kZSBub2RlKSB7Ci0JCQlyZXR1cm4gc3VwZXIuc2hvd1BhZ2Uobm9kZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJvcGVydHlEaWFsb2dXcmFwcGVyIGV4dGVuZHMgUHJvcGVydHlEaWFsb2cgewotCQlwdWJsaWMgUHJvcGVydHlEaWFsb2dXcmFwcGVyKFNoZWxsIHBhcmVudFNoZWxsLCBQcmVmZXJlbmNlTWFuYWdlciBtYW5hZ2VyLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJc3VwZXIocGFyZW50U2hlbGwsIG1hbmFnZXIsIHNlbGVjdGlvbik7Ci0JCX0KLQkJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd1BhZ2UoSVByZWZlcmVuY2VOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBzdXBlci5zaG93UGFnZShub2RlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBQcmVmZXJlbmNlRGlhbG9nIGdldFByZWZlcmVuY2VEaWFsb2coU3RyaW5nIGlkKSB7Ci0JCVByZWZlcmVuY2VEaWFsb2dXcmFwcGVyIGRpYWxvZyA9IG51bGw7Ci0JCVByZWZlcmVuY2VNYW5hZ2VyIG1hbmFnZXIgPSBXb3JrYmVuY2hQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0JCWlmIChtYW5hZ2VyICE9IG51bGwpIHsKLQkJCWRpYWxvZyA9IG5ldyBQcmVmZXJlbmNlRGlhbG9nV3JhcHBlcihnZXRTaGVsbCgpLCBtYW5hZ2VyKTsKLQkJCWRpYWxvZy5jcmVhdGUoKTsJCi0KLQkJCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsKLQkJCSAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykKLQkJCXsKLQkJCQlJUHJlZmVyZW5jZU5vZGUgbm9kZSA9IChJUHJlZmVyZW5jZU5vZGUpaXRlcmF0b3IubmV4dCgpOwotCQkJCWlmICggbm9kZS5nZXRJZCgpLmVxdWFscyhpZCkgKSB7Ci0JCQkJCWRpYWxvZy5zaG93UGFnZShub2RlKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBkaWFsb2c7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgUHJvcGVydHlEaWFsb2cgZ2V0UHJvcGVydHlEaWFsb2coU3RyaW5nIGlkLCBJQWRhcHRhYmxlIGVsZW1lbnQpIHsKLQkJUHJvcGVydHlEaWFsb2dXcmFwcGVyIGRpYWxvZyA9IG51bGw7Ci0KLQkJUHJvcGVydHlQYWdlTWFuYWdlciBtYW5hZ2VyID0gbmV3IFByb3BlcnR5UGFnZU1hbmFnZXIoKTsKLQkJU3RyaW5nIHRpdGxlID0gIiI7Ci0JCVN0cmluZyBuYW1lICA9ICIiOwotCi0JCS8vIGxvYWQgcGFnZXMgZm9yIHRoZSBzZWxlY3Rpb24KLQkJLy8gZmlsbCB0aGUgbWFuYWdlciB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgbWF0Y2hpbmcgY29udHJpYnV0b3JzCi0JCVByb3BlcnR5UGFnZUNvbnRyaWJ1dG9yTWFuYWdlci5nZXRNYW5hZ2VyKCkuY29udHJpYnV0ZShtYW5hZ2VyLCBlbGVtZW50KTsKLQkJCi0JCUlXb3JrYmVuY2hBZGFwdGVyIGFkYXB0ZXIgPSAoSVdvcmtiZW5jaEFkYXB0ZXIpZWxlbWVudC5nZXRBZGFwdGVyKElXb3JrYmVuY2hBZGFwdGVyLmNsYXNzKTsKLQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJbmFtZSA9IGFkYXB0ZXIuZ2V0TGFiZWwoZWxlbWVudCk7Ci0JCX0KLQkJCi0JCS8vIHRlc3RpbmcgaWYgdGhlcmUgYXJlIHBhZ2VzIGluIHRoZSBtYW5hZ2VyCi0JCUl0ZXJhdG9yIHBhZ2VzID0gbWFuYWdlci5nZXRFbGVtZW50cyhQcmVmZXJlbmNlTWFuYWdlci5QUkVfT1JERVIpLml0ZXJhdG9yKCk7CQkKLQkJaWYgKCFwYWdlcy5oYXNOZXh0KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCQotCQl0aXRsZSA9IE5MUy5iaW5kKFdvcmtiZW5jaE1lc3NhZ2VzLlByb3BlcnR5RGlhbG9nX3Byb3BlcnR5TWVzc2FnZSwgbmV3IE9iamVjdFtdIHtuYW1lfSk7Ci0JCWRpYWxvZyA9IG5ldyBQcm9wZXJ0eURpYWxvZ1dyYXBwZXIoZ2V0U2hlbGwoKSwgbWFuYWdlciwgbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWxlbWVudCkpOyAKLQkJZGlhbG9nLmNyZWF0ZSgpOwotCQlkaWFsb2cuZ2V0U2hlbGwoKS5zZXRUZXh0KHRpdGxlKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1hbmFnZXIuZ2V0RWxlbWVudHMoUHJlZmVyZW5jZU1hbmFnZXIuUFJFX09SREVSKS5pdGVyYXRvcigpOwotCQkgICAgIGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLQkJCUlQcmVmZXJlbmNlTm9kZSBub2RlID0gKElQcmVmZXJlbmNlTm9kZSlpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAoIG5vZGUuZ2V0SWQoKS5lcXVhbHMoaWQpICkgewotCQkJCWRpYWxvZy5zaG93UGFnZShub2RlKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZGlhbG9nOwotCX0KLQkKLQkvKioKLQkgKiBBdXRvbWF0ZWQgdGVzdCB0aGF0IGNoZWNrcyBhbGwgdGhlIGxhYmVscyBhbmQgYnV0dG9ucyBvZiBhIGRpYWxvZwotCSAqIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBkaXNwbGF5IGFsbCB0aGUgdGV4dC4gIEFueQotCSAqIHRleHQgdGhhdCB3cmFwcyBpcyBvbmx5IGFwcHJveGltYXRlZCBhbmQgaXMgY3VycmVudGx5IG5vdCBhY2N1cmF0ZS4KLQkgKiAKLQkgKiBAcGFyYW0gZGlhbG9nIHRoZSB0ZXN0IGRpYWxvZyB0byBiZSB2ZXJpZmllZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RGlhbG9nKERpYWxvZyBkaWFsb2cpIHsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoZGlhbG9nKTsKLQkJZGlhbG9nLnNldEJsb2NrT25PcGVuKGZhbHNlKTsKLQkJZGlhbG9nLm9wZW4oKTsKLQkJU2hlbGwgc2hlbGwgPSBkaWFsb2cuZ2V0U2hlbGwoKTsKLQkJdmVyaWZ5Q29tcG9zaXRlVGV4dChzaGVsbCk7Ci0JCWRpYWxvZy5jbG9zZSgpOwotCX0KLQotCS8qCi0JICogTG9va3MgYXQgYWxsIHRoZSBjaGlsZCB3aWRnZXRzIG9mIGEgZ2l2ZW4gY29tcG9zaXRlIGFuZAotCSAqIHZlcmlmaWVzIHRoZSB0ZXh0IG9uIGFsbCBsYWJlbHMgYW5kIHdpZGdldHMuCi0JICogQHBhcmFtIGNvbXBvc2l0ZSBUaGUgY29tcG9zaXRlIHRvIGxvb2sgdGhyb3VnaAotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgdmVyaWZ5Q29tcG9zaXRlVGV4dChDb21wb3NpdGUgY29tcG9zaXRlKSB7Ci0JCUNvbnRyb2wgY2hpbGRyZW5bXSA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCS8vdmVyaWZ5IHRoZSB0ZXh0IGlmIHRoZSBjaGlsZCBpcyBhIGJ1dHRvbgotCQkJCXZlcmlmeUJ1dHRvblRleHQoKEJ1dHRvbikgY2hpbGRyZW5baV0pOwotCQkJfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGV4Tm90QnV0dG9uKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJLy9jaGlsZCBpcyBub3QgYSBidXR0b24sIG1heWJlIGEgbGFiZWwKLQkJCQkJdmVyaWZ5TGFiZWxUZXh0KChMYWJlbCkgY2hpbGRyZW5baV0pOwotCQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleE5vdExhYmVsKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQkvL2NoaWxkIGlzIG5vdCBhIGxhYmVsLCBtYWtlIGEgcmVjdXJzaXZlIGNhbGwgaWYgaXQgaXMgYSBjb21wb3NpdGUKLQkJCQkJCXZlcmlmeUNvbXBvc2l0ZVRleHQoKENvbXBvc2l0ZSkgY2hpbGRyZW5baV0pOwotCQkJCQl9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXhOb3RDb21wb3NpdGUpIHsKLQkJCQkJCS8vdGhlIGNoaWxkIGlzIG5vdCBhIGJ1dHRvbiwgbGFiZWwsIG9yIGNvbXBvc2l0ZSAtIGlnbm9yZSBpdC4KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQkvKgotCSAqIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBidXR0b24gaXMgbGFyZ2UgZW5vdWdoIHRvIGRpc3BsYXkgaXRzIHRleHQuCi0JICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIHRvIHZlcmlmeSwKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeUJ1dHRvblRleHQoQnV0dG9uIGJ1dHRvbikgewotCQlTdHJpbmcgd2lkZ2V0ID0gYnV0dG9uLnRvU3RyaW5nKCk7Ci0JCVBvaW50IHNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCi0JCS8vIGNvbXB1dGUgdGhlIHNpemUgd2l0aCBubyBsaW5lIHdyYXBwaW5nCi0JCVBvaW50IHByZWZlcnJlZCA9IGJ1dHRvbi5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotCQkvL2lmIChzaXplLnkvcHJlZmVycmVkLnkpID09IFgsIHRoZW4gbGFiZWwgc3BhbnMgWCBsaW5lcywgc28gZGl2aWRlCi0JCS8vdGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgcHJlZmVycmVkLnggYnkgWAotCQlpZiAocHJlZmVycmVkLnkgKiBzaXplLnkgPiAwKSB7Ci0JCQlwcmVmZXJyZWQueSAvPSBjb3VudExpbmVzKGJ1dHRvbi5nZXRUZXh0KCkpOyAvL2NoZWNrIGZvciAnXG5cJwotCQkJaWYgKHNpemUueSAvIHByZWZlcnJlZC55ID4gMSkgewotCQkJCXByZWZlcnJlZC54IC89IChzaXplLnkgLyBwcmVmZXJyZWQueSk7Ci0JCQl9Ci0JCX0KLQotCQlTdHJpbmcgbWVzc2FnZSA9Ci0JCQluZXcgU3RyaW5nQnVmZmVyKCJXYXJuaW5nOiAiKQotCQkJCS5hcHBlbmQod2lkZ2V0KQotCQkJCS5hcHBlbmQoIlxuXHRBY3R1YWwgV2lkdGggLT4gIikKLQkJCQkuYXBwZW5kKHNpemUueCkKLQkJCQkuYXBwZW5kKCJcblx0UmVjb21tZW5kZWQgV2lkdGggLT4gIikKLQkJCQkuYXBwZW5kKHByZWZlcnJlZC54KQotCQkJCS50b1N0cmluZygpOwotCQlpZiAocHJlZmVycmVkLnggPiBzaXplLngpIHsKLQkJCS8vY2xvc2UgdGhlIGRpYWxvZwotCQkJYnV0dG9uLmdldFNoZWxsKCkuZGlzcG9zZSgpOwotCQkJQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS50b1N0cmluZygpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gbGFiZWwgaXMgbGFyZ2UgZW5vdWdoIHRvIGRpc3BsYXkgaXRzIHRleHQuCi0JICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCB0byB2ZXJpZnksCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlMYWJlbFRleHQoTGFiZWwgbGFiZWwpIHsKLQkJU3RyaW5nIHdpZGdldCA9IGxhYmVsLnRvU3RyaW5nKCk7Ci0JCVBvaW50IHNpemUgPSBsYWJlbC5nZXRTaXplKCk7Ci0KLQkJLy8gY29tcHV0ZSB0aGUgc2l6ZSB3aXRoIG5vIGxpbmUgd3JhcHBpbmcKLQkJUG9pbnQgcHJlZmVycmVkID0gbGFiZWwuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQkJLy9pZiAoc2l6ZS55L3ByZWZlcnJlZC55KSA9PSBYLCB0aGVuIGxhYmVsIHNwYW5zIFggbGluZXMsIHNvIGRpdmlkZQotCQkvL3RoZSBjYWxjdWxhdGVkIHZhbHVlIG9mIHByZWZlcnJlZC54IGJ5IFgKLQkJaWYgKHByZWZlcnJlZC55ICogc2l6ZS55ID4gMCkgewotCQkJcHJlZmVycmVkLnkgLz0gY291bnRMaW5lcyhsYWJlbC5nZXRUZXh0KCkpOwotCQkJaWYgKHNpemUueSAvIHByZWZlcnJlZC55ID4gMSkgewotCQkJCXByZWZlcnJlZC54IC89IChzaXplLnkgLyBwcmVmZXJyZWQueSk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nQnVmZmVyKCJXYXJuaW5nOiAiKS5hcHBlbmQod2lkZ2V0KQotCQkJLmFwcGVuZCgiXG5cdEFjdHVhbCBXaWR0aCAtPiAiKS5hcHBlbmQoc2l6ZS54KQotCQkJLmFwcGVuZCgiXG5cdFJlY29tbWVuZGVkIFdpZHRoIC0+ICIpLmFwcGVuZChwcmVmZXJyZWQueCkudG9TdHJpbmcoKTsKLQkJaWYgKHByZWZlcnJlZC54ID4gc2l6ZS54KSB7Ci0JCQkvL2Nsb3NlIHRoZSBkaWFsb2cKLQkJCWxhYmVsLmdldFNoZWxsKCkuZGlzcG9zZSgpOwotCQkJQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS50b1N0cmluZygpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBDb3VudHMgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGdpdmVuIFN0cmluZy4KLQkgKiBGb3IgZXhhbXBsZSwgaWYgYSBzdHJpbmcgY29udGFpbnMgb25lICgxKSBuZXdsaW5lIGNoYXJhY3RlciwKLQkgKiBhIHZhbHVlIG9mIHR3byAoMikgd291bGQgYmUgcmV0dXJuZWQuCi0JICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyB0byBsb29rIHRocm91Z2guCi0JICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0ZXh0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGludCBjb3VudExpbmVzKFN0cmluZyB0ZXh0KSB7Ci0JCWludCBuZXdMaW5lcyA9IDE7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlpZiAodGV4dC5jaGFyQXQoaSkgPT0gJ1xuJykgewotCQkJCW5ld0xpbmVzKys7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ld0xpbmVzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJkMTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC51aS50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQudWkudGVzdHMuQWxsVGVzdHMiIC8+Ci0gICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDdjMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOGExMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5MTdlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0cy5qYXIKLXNvdXJjZS50ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci91aS90ZXN0cy9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci91aS90ZXN0cy9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2FhZTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxUZXN0cyB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTA2ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS5pbnRlcm5hbC5KYXZhU2VydmVyVUlQbHVnaW47Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKEphdmFTZXJ2ZXJVSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L3NlcnZlci91aS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3VpL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI5NWNhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3VpL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci51aS50ZXN0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1jbGFzcyBPcmRlcmVkVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlewotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQl0aGlzKHRoZUNsYXNzKTsKLQkJc2V0TmFtZShuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShmaW5hbCBDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcigpOwotCQlzZXROYW1lKHRoZUNsYXNzLmdldE5hbWUoKSk7Ci0JCXRyeSB7Ci0JCQlnZXRUZXN0Q29uc3RydWN0b3IodGhlQ2xhc3MpOyAvLyBBdm9pZCBnZW5lcmF0aW5nIG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzCi0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkKLQkJCQkJKyAiIGhhcyBubyBwdWJsaWMgY29uc3RydWN0b3IgVGVzdENhc2UoU3RyaW5nIG5hbWUpIG9yIFRlc3RDYXNlKCkiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKCFNb2RpZmllci5pc1B1YmxpYyh0aGVDbGFzcy5nZXRNb2RpZmllcnMoKSkpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKSArICIgaXMgbm90IHB1YmxpYyIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlDbGFzcyBzdXBlckNsYXNzID0gdGhlQ2xhc3M7Ci0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLQkJd2hpbGUgKFRlc3QuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzdXBlckNsYXNzKSkgewotCQkJTWV0aG9kW10gbWV0aG9kcyA9IHN1cGVyQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCQlpbnQgc2l6ZSA9IG1ldGhvZHMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgaSsrKSB7Ci0JCQkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQkJCWlmIChtZXRob2RzW2ldLmdldE5hbWUoKS5jb21wYXJlVG8obWV0aG9kc1tqXS5nZXROYW1lKCkpID4gMCkgewotCQkJCQkJTWV0aG9kIG0gPSBtZXRob2RzW2ldOwotCQkJCQkJbWV0aG9kc1tpXSA9IG1ldGhvZHNbal07Ci0JCQkJCQltZXRob2RzW2pdID0gbTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJYWRkVGVzdE1ldGhvZChtZXRob2RzW2ldLCBuYW1lcywgdGhlQ2xhc3MpOwotCQkJfQotCQkJc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3MuZ2V0U3VwZXJjbGFzcygpOwotCQl9Ci0JCWlmICghdGVzdHMoKS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCWFkZFRlc3Qod2FybmluZygiTm8gdGVzdHMgZm91bmQgaW4gIiArIHRoZUNsYXNzLmdldE5hbWUoKSkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRUZXN0TWV0aG9kKE1ldGhvZCBtLCBWZWN0b3IgbmFtZXMsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lcy5jb250YWlucyhuYW1lKSkKLQkJCXJldHVybjsKLQkJaWYgKCFpc1B1YmxpY1Rlc3RNZXRob2QobSkpIHsKLQkJCWlmIChpc1Rlc3RNZXRob2QobSkpCi0JCQkJYWRkVGVzdCh3YXJuaW5nKCJUZXN0IG1ldGhvZCBpc24ndCBwdWJsaWM6ICIgKyBtLmdldE5hbWUoKSkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW5hbWVzLmFkZEVsZW1lbnQobmFtZSk7Ci0JCWFkZFRlc3QoY3JlYXRlVGVzdCh0aGVDbGFzcywgbmFtZSkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1B1YmxpY1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJcmV0dXJuIGlzVGVzdE1ldGhvZChtKSAmJiBNb2RpZmllci5pc1B1YmxpYyhtLmdldE1vZGlmaWVycygpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCVN0cmluZyBuYW1lID0gbS5nZXROYW1lKCk7Ci0JCUNsYXNzW10gcGFyYW1ldGVycyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJQ2xhc3MgcmV0dXJuVHlwZSA9IG0uZ2V0UmV0dXJuVHlwZSgpOwotCQlyZXR1cm4gcGFyYW1ldGVycy5sZW5ndGggPT0gMCAmJiBuYW1lLnN0YXJ0c1dpdGgoInRlc3QiKSAmJiByZXR1cm5UeXBlLmVxdWFscyhWb2lkLlRZUEUpOwotCX0KLQotCXByaXZhdGUgVGVzdCB3YXJuaW5nKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCXJldHVybiBuZXcgVGVzdENhc2UoIndhcm5pbmciKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkgewotCQkJCWZhaWwobWVzc2FnZSk7Ci0JCQl9Ci0JCX07Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdWkvdGVzdHMvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9zZXJ2ZXIvdWkvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyZDU4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvc2VydmVyL3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGNiNjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c3QtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dzdC1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudWkudGVzdHMuQWxsVGVzdHMiIC8+Ci0gICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OGE4MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYzMwODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogbW9uaXRvcnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy5leHRlbnNpb24KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOWZjMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgbW9uaXRvcnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IG1vbml0b3J0ZXN0cy5qYXIKLXNvdXJjZS5tb25pdG9ydGVzdHMuamFyID0gc3JjLwotb3V0cHV0Lm1vbml0b3J0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTJkZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9BbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy5leHRlbnNpb24uKjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cyIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ29udGVudEZpbHRlcnNUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9uaXRvclRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9uaXRvckxpc3RlbmVyVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShSZXF1ZXN0VGVzdENhc2UuY2xhc3MpKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoQ29udGVudEZpbHRlclRlc3RDYXNlLmNsYXNzKSk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL0NvbnRlbnRGaWx0ZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9Db250ZW50RmlsdGVyVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjZDljNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL0NvbnRlbnRGaWx0ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5Db250ZW50RmlsdGVyRGVsZWdhdGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBDb250ZW50RmlsdGVyVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBDb250ZW50RmlsdGVyRGVsZWdhdGUgZGVsZWdhdGU7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9uaXRvckxpc3RlbmVyVGVzdENhc2UuY2xhc3MsICJNb25pdG9yVGVzdENhc2UiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRpb24oKSB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RDb250ZW50RmlsdGVyRGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxRmlsdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmZpbHRlcihudWxsLCBmYWxzZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMDhjZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLk1vbml0b3JDb3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL01vbml0b3JMaXN0ZW5lclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL01vbml0b3JMaXN0ZW5lclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTViMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9Nb25pdG9yTGlzdGVuZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuKjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBNb25pdG9yTGlzdGVuZXJUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBJTW9uaXRvciBtb25pdG9yOwotCQotCXByb3RlY3RlZCBzdGF0aWMgSU1vbml0b3IgYWRkRXZlbnQ7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJTW9uaXRvciBjaGFuZ2VFdmVudDsKLQlwcm90ZWN0ZWQgc3RhdGljIElNb25pdG9yIHJlbW92ZUV2ZW50OwotCXByb3RlY3RlZCBzdGF0aWMgaW50IGNvdW50OwotCQotCXByb3RlY3RlZCBzdGF0aWMgSU1vbml0b3JMaXN0ZW5lciBsaXN0ZW5lcjI7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIElNb25pdG9yTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSU1vbml0b3JMaXN0ZW5lcigpIHsKLQkJcHVibGljIHZvaWQgbW9uaXRvckFkZGVkKElNb25pdG9yIG1vbml0b3IyKSB7Ci0JCQlhZGRFdmVudCA9IG1vbml0b3IyOwotCQkJY291bnQrKzsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vbml0b3JDaGFuZ2VkKElNb25pdG9yIG1vbml0b3IyKSB7Ci0JCQljaGFuZ2VFdmVudCA9IG1vbml0b3IyOwotCQkJY291bnQrKzsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vbml0b3JSZW1vdmVkKElNb25pdG9yIG1vbml0b3IyKSB7Ci0JCQlyZW1vdmVFdmVudCA9IG1vbml0b3IyOwotCQkJY291bnQrKzsKLQkJfQotCX07Ci0KLQlwdWJsaWMgTW9uaXRvckxpc3RlbmVyVGVzdENhc2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9uaXRvckxpc3RlbmVyVGVzdENhc2UuY2xhc3MsICJNb25pdG9yTGlzdGVuZXJUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwQWRkTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJTW9uaXRvckNvcmUuYWRkTW9uaXRvckxpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDFBZGRMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQlNb25pdG9yQ29yZS5hZGRNb25pdG9yTGlzdGVuZXIobGlzdGVuZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MkFkZExpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCW1vbml0b3IgPSB3Yy5zYXZlKCk7Ci0JCQotCQlhc3NlcnRUcnVlKGFkZEV2ZW50ID09IG1vbml0b3IpOwotCQlhc3NlcnRUcnVlKGNoYW5nZUV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKHJlbW92ZUV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOwotCQlhZGRFdmVudCA9IG51bGw7Ci0JCWNvdW50ID0gMDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0M0NoYW5nZUxpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBtb25pdG9yLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JCXdjLnNldExvY2FsUG9ydCgxKTsKLQkJbW9uaXRvciA9IHdjLnNhdmUoKTsKLQotCQlhc3NlcnRUcnVlKGFkZEV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKGNoYW5nZUV2ZW50ID09IG1vbml0b3IpOwotCQlhc3NlcnRUcnVlKHJlbW92ZUV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOwotCQljaGFuZ2VFdmVudCA9IG51bGw7Ci0JCWNvdW50ID0gMDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NFJlbW92ZUxpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW1vbml0b3IuZGVsZXRlKCk7Ci0JCQotCQlhc3NlcnRUcnVlKGFkZEV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKGNoYW5nZUV2ZW50ID09IG51bGwpOwotCQlhc3NlcnRUcnVlKHJlbW92ZUV2ZW50ID09IG1vbml0b3IpOwotCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOwotCQlyZW1vdmVFdmVudCA9IG51bGw7Ci0JCWNvdW50ID0gMDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDVSZW1vdmVMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQlNb25pdG9yQ29yZS5yZW1vdmVNb25pdG9yTGlzdGVuZXIobGlzdGVuZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0NlJlbW92ZUxpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU1vbml0b3JDb3JlLnJlbW92ZU1vbml0b3JMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3Q3Q2hlY2tMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQlsaXN0ZW5lcjIgPSBuZXcgSU1vbml0b3JMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIG1vbml0b3JBZGRlZChJTW9uaXRvciBtb25pdG9yMikgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBtb25pdG9yQ2hhbmdlZChJTW9uaXRvciBtb25pdG9yMikgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBtb25pdG9yUmVtb3ZlZChJTW9uaXRvciBtb25pdG9yMikgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCQl9OwotCQkKLQkJbGlzdGVuZXIyLm1vbml0b3JBZGRlZChudWxsKTsKLQkJbGlzdGVuZXIyLm1vbml0b3JDaGFuZ2VkKG51bGwpOwotCQlsaXN0ZW5lcjIubW9uaXRvclJlbW92ZWQobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvTW9uaXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL01vbml0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjRlOWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvTW9uaXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC4qOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLS8qKgotICogTm90ZTogdXNlIHBvcnRzIGJldHdlZW4gMjIxMDAtMjIyMDAgdG8gZW5zdXJlIHRoZXkgYXJlIGZyZWUgb24gdGhlIGJ1aWxkIG1hY2hpbmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNb25pdG9yVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgSU1vbml0b3IgbW9uaXRvcjsKLQotCXB1YmxpYyBNb25pdG9yVGVzdENhc2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9uaXRvckxpc3RlbmVyVGVzdENhc2UuY2xhc3MsICJNb25pdG9yVGVzdENhc2UiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwR2V0TW9uaXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0Tm90TnVsbChNb25pdG9yQ29yZS5nZXRNb25pdG9ycygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDFDcmVhdGVNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCXdjLnNldExvY2FsUG9ydCgyMjE1MCk7Ci0JCXdjLnNldFJlbW90ZUhvc3QoInd3dy5lY2xpcHNlLm9yZyIpOwotCQl3Yy5zZXRSZW1vdGVQb3J0KDgwKTsKLQkJbW9uaXRvciA9IHdjLnNhdmUoKTsKLQkJCi0JCWFzc2VydFRydWUobW9uaXRvciAhPSBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShNb25pdG9yQ29yZS5nZXRNb25pdG9ycygpLmxlbmd0aCA9PSAxKTsKLQkJYXNzZXJ0VHJ1ZSghbW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JCWFzc2VydFRydWUoIW1vbml0b3IuaXNXb3JraW5nQ29weSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDJHZXRNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWludCBjb3VudCA9IDA7Ci0JCUlNb25pdG9yW10gbW9uaXRvcnMgPSBNb25pdG9yQ29yZS5nZXRNb25pdG9ycygpOwotCQlpbnQgc2l6ZSA9IG1vbml0b3JzLmxlbmd0aDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCWlmIChtb25pdG9yLmVxdWFscyhtb25pdG9yc1tpXSkpCi0JCQkJY291bnQrKzsKLQkJfQotCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNTdGFydE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZSghbW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JCW1vbml0b3Iuc3RhcnQoKTsKLQkJYXNzZXJ0VHJ1ZShtb25pdG9yLmlzUnVubmluZygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDRTdGFydE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZShtb25pdG9yLmlzUnVubmluZygpKTsKLQkJbW9uaXRvci5zdGFydCgpOwotCQlhc3NlcnRUcnVlKG1vbml0b3IuaXNSdW5uaW5nKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVTdGFydE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCQl3Yy5zdGFydCgpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiIsIGZhbHNlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA2U3RhcnRNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQkJSU1vbml0b3IgbSA9IHdjLnNhdmUoKTsKLQkJCW0uZGVsZXRlKCk7Ci0JCQltLnN0YXJ0KCk7Ci0JCQlhc3NlcnRUcnVlKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIiwgZmFsc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDdTdG9wTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKG1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQltb25pdG9yLnN0b3AoKTsKLQkJYXNzZXJ0VHJ1ZSghbW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOFN0b3BNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoIW1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQltb25pdG9yLnN0b3AoKTsKLQkJYXNzZXJ0VHJ1ZSghbW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOVJlc3RhcnRNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoIW1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQltb25pdG9yLnN0YXJ0KCk7Ci0JCWFzc2VydFRydWUobW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JCW1vbml0b3Iuc3RvcCgpOwotCQlhc3NlcnRUcnVlKCFtb25pdG9yLmlzUnVubmluZygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDEwU3RvcE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCQl3Yy5zdG9wKCk7Ci0JCQlhc3NlcnRUcnVlKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIiwgZmFsc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExU3RvcE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlNb25pdG9yV29ya2luZ0NvcHkgd2MgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCQlJTW9uaXRvciBtID0gd2Muc2F2ZSgpOwotCQkJbS5kZWxldGUoKTsKLQkJCW0uc3RvcCgpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiIsIGZhbHNlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMlZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKG1vbml0b3IudmFsaWRhdGUoKS5pc09LKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxM01vZGlmeU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IG1vbml0b3IuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJd2Muc2V0TG9jYWxQb3J0KDEpOwotCQl3Yy5zZXRSZW1vdGVIb3N0KCJhIik7Ci0JCXdjLnNldFJlbW90ZVBvcnQoMik7Ci0JCUlNb25pdG9yIG1vbml0b3IyID0gd2Muc2F2ZSgpOwotCQkKLQkJYXNzZXJ0VHJ1ZShtb25pdG9yMiA9PSBtb25pdG9yKTsKLQkJYXNzZXJ0VHJ1ZShtb25pdG9yLmdldExvY2FsUG9ydCgpID09IDEpOwotCQlhc3NlcnRUcnVlKG1vbml0b3IuZ2V0UmVtb3RlSG9zdCgpLmVxdWFscygiYSIpKTsKLQkJYXNzZXJ0VHJ1ZShtb25pdG9yLmdldFJlbW90ZVBvcnQoKSA9PSAyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE0RGVsZXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQltb25pdG9yLmRlbGV0ZSgpOwotCQlhc3NlcnRUcnVlKE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCkubGVuZ3RoID09IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTVEZWxldGVNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW1vbml0b3IuZGVsZXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNkRlbGV0ZU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IE1vbml0b3JDb3JlLmNyZWF0ZU1vbml0b3IoKTsKLQkJd2MuZGVsZXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxN0dldE1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW50IGNvdW50ID0gMDsKLQkJSU1vbml0b3JbXSBtb25pdG9ycyA9IE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCk7Ci0JCWludCBzaXplID0gbW9uaXRvcnMubGVuZ3RoOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJaWYgKG1vbml0b3IuZXF1YWxzKG1vbml0b3JzW2ldKSkKLQkJCQljb3VudCsrOwotCQl9Ci0JCWFzc2VydFRydWUoY291bnQgPT0gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDE4Q3JlYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnQgbnVtID0gTW9uaXRvckNvcmUuZ2V0TW9uaXRvcnMoKS5sZW5ndGg7Ci0JCU1vbml0b3JDb3JlLmNyZWF0ZU1vbml0b3IoKTsKLQkJYXNzZXJ0VHJ1ZShNb25pdG9yQ29yZS5nZXRNb25pdG9ycygpLmxlbmd0aCA9PSBudW0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTlDcmVhdGVNb25pdG9yKCkgewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQl3Yy5zZXRQcm90b2NvbChudWxsKTsKLQkJYXNzZXJ0TnVsbCh3Yy5nZXRPcmlnaW5hbCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjBWYWxpZGF0ZU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IG1vbml0b3IuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJd2Muc2V0TG9jYWxQb3J0KC0xKTsKLQkJd2Muc2V0UmVtb3RlSG9zdCgid3d3LmVjbGlwc2Uub3JnIik7Ci0JCXdjLnNldFJlbW90ZVBvcnQoODApOwotCQlhc3NlcnRUcnVlKCF3Yy52YWxpZGF0ZSgpLmlzT0soKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMVZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODApOwotCQl3Yy5zZXRSZW1vdGVIb3N0KCJ3d3cuZWNsaXBzZS5vcmciKTsKLQkJd2Muc2V0UmVtb3RlUG9ydCgtMSk7Ci0JCWFzc2VydFRydWUoIXdjLnZhbGlkYXRlKCkuaXNPSygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjJWYWxpZGF0ZU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IG1vbml0b3IuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJd2Muc2V0TG9jYWxQb3J0KDgwODApOwotCQl3Yy5zZXRSZW1vdGVIb3N0KG51bGwpOwotCQl3Yy5zZXRSZW1vdGVQb3J0KDgwKTsKLQkJYXNzZXJ0VHJ1ZSghd2MudmFsaWRhdGUoKS5pc09LKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyM1ZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODA4MCk7Ci0JCXdjLnNldFJlbW90ZUhvc3QoIiIpOwotCQl3Yy5zZXRSZW1vdGVQb3J0KDgwKTsKLQkJYXNzZXJ0VHJ1ZSghd2MudmFsaWRhdGUoKS5pc09LKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyNFZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODA4MCk7Ci0JCXdjLnNldFJlbW90ZUhvc3QoIiAgIik7Ci0JCXdjLnNldFJlbW90ZVBvcnQoODApOwotCQlhc3NlcnRUcnVlKCF3Yy52YWxpZGF0ZSgpLmlzT0soKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyNVZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODA4MCk7Ci0JCXdjLnNldFJlbW90ZUhvc3QoImhpJmJ5ZSIpOwotCQl3Yy5zZXRSZW1vdGVQb3J0KDgwKTsKLQkJYXNzZXJ0VHJ1ZSghd2MudmFsaWRhdGUoKS5pc09LKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyNlZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODA4MCk7Ci0JCXdjLnNldFJlbW90ZUhvc3QoInh5ejoiKTsKLQkJd2Muc2V0UmVtb3RlUG9ydCg4MCk7Ci0JCWFzc2VydFRydWUoIXdjLnZhbGlkYXRlKCkuaXNPSygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjdWYWxpZGF0ZU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IG1vbml0b3IuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJd2Muc2V0TG9jYWxQb3J0KDgwKTsKLQkJd2Muc2V0UmVtb3RlSG9zdCgid3d3LmVjbGlwc2Uub3JnIik7Ci0JCXdjLnNldFJlbW90ZVBvcnQoODApOwotCQlhc3NlcnRUcnVlKHdjLnZhbGlkYXRlKCkuaXNPSygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjhWYWxpZGF0ZU1vbml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vbml0b3JXb3JraW5nQ29weSB3YyA9IG1vbml0b3IuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJd2Muc2V0TG9jYWxQb3J0KDgwKTsKLQkJd2Muc2V0UmVtb3RlSG9zdCgibG9jYWxob3N0Iik7Ci0JCXdjLnNldFJlbW90ZVBvcnQoODApOwotCQlhc3NlcnRUcnVlKCF3Yy52YWxpZGF0ZSgpLmlzT0soKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyOVZhbGlkYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gbW9uaXRvci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQl3Yy5zZXRMb2NhbFBvcnQoODApOwotCQl3Yy5zZXRSZW1vdGVIb3N0KCJsb2NhbGhvc3QiKTsKLQkJd2Muc2V0UmVtb3RlUG9ydCg4MCk7Ci0JCUlNb25pdG9yIG1vbml0b3IyID0gd2Muc2F2ZSgpOwotCQl0cnkgewotCQkJbW9uaXRvcjIuc3RhcnQoKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQltb25pdG9yMi5kZWxldGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDMwR2V0SWQoKSB7Ci0JCW1vbml0b3IuZ2V0SWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MzFHZXRQcm90b2NvbCgpIHsKLQkJYXNzZXJ0Tm90TnVsbChtb25pdG9yLmdldFByb3RvY29sKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MzJDaGVja0xpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSZXF1ZXN0TGlzdGVuZXIgbGlzdGVuZXIyID0gbmV3IElSZXF1ZXN0TGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWRkZWQoSU1vbml0b3IgbW9uaXRvcjIsIFJlcXVlc3QgcmVxdWVzdCkgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCByZXF1ZXN0Q2hhbmdlZChJTW9uaXRvciBtb25pdG9yMiwgUmVxdWVzdCByZXF1ZXN0KSB7Ci0JCQkJLy8gaWdub3JlCi0JCQl9Ci0JCX07Ci0JCQotCQlsaXN0ZW5lcjIucmVxdWVzdEFkZGVkKG51bGwsIG51bGwpOwotCQlsaXN0ZW5lcjIucmVxdWVzdENoYW5nZWQobnVsbCwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNzgxYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotY2xhc3MgT3JkZXJlZFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZXsKLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJdGhpcyh0aGVDbGFzcyk7Ci0JCXNldE5hbWUobmFtZSk7Ci0JfQotCi0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoZmluYWwgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIoKTsKLQkJc2V0TmFtZSh0aGVDbGFzcy5nZXROYW1lKCkpOwotCQl0cnkgewotCQkJZ2V0VGVzdENvbnN0cnVjdG9yKHRoZUNsYXNzKTsgLy8gQXZvaWQgZ2VuZXJhdGluZyBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpCi0JCQkJCSsgIiBoYXMgbm8gcHVibGljIGNvbnN0cnVjdG9yIFRlc3RDYXNlKFN0cmluZyBuYW1lKSBvciBUZXN0Q2FzZSgpIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghTW9kaWZpZXIuaXNQdWJsaWModGhlQ2xhc3MuZ2V0TW9kaWZpZXJzKCkpKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkgKyAiIGlzIG5vdCBwdWJsaWMiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3Mgc3VwZXJDbGFzcyA9IHRoZUNsYXNzOwotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCXdoaWxlIChUZXN0LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc3VwZXJDbGFzcykpIHsKLQkJCU1ldGhvZFtdIG1ldGhvZHMgPSBzdXBlckNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOwotCQkJaW50IHNpemUgPSBtZXRob2RzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKykgewotCQkJCWZvciAoaW50IGogPSBpICsgMTsgaiA8IHNpemU7IGorKykgewotCQkJCQlpZiAobWV0aG9kc1tpXS5nZXROYW1lKCkuY29tcGFyZVRvKG1ldGhvZHNbal0uZ2V0TmFtZSgpKSA+IDApIHsKLQkJCQkJCU1ldGhvZCBtID0gbWV0aG9kc1tpXTsKLQkJCQkJCW1ldGhvZHNbaV0gPSBtZXRob2RzW2pdOwotCQkJCQkJbWV0aG9kc1tqXSA9IG07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCWFkZFRlc3RNZXRob2QobWV0aG9kc1tpXSwgbmFtZXMsIHRoZUNsYXNzKTsKLQkJCX0KLQkJCXN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzLmdldFN1cGVyY2xhc3MoKTsKLQkJfQotCQlpZiAoIXRlc3RzKCkuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCQlhZGRUZXN0KHdhcm5pbmcoIk5vIHRlc3RzIGZvdW5kIGluICIgKyB0aGVDbGFzcy5nZXROYW1lKCkpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkVGVzdE1ldGhvZChNZXRob2QgbSwgVmVjdG9yIG5hbWVzLCBDbGFzcyB0aGVDbGFzcykgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlpZiAobmFtZXMuY29udGFpbnMobmFtZSkpCi0JCQlyZXR1cm47Ci0JCWlmICghaXNQdWJsaWNUZXN0TWV0aG9kKG0pKSB7Ci0JCQlpZiAoaXNUZXN0TWV0aG9kKG0pKQotCQkJCWFkZFRlc3Qod2FybmluZygiVGVzdCBtZXRob2QgaXNuJ3QgcHVibGljOiAiICsgbS5nZXROYW1lKCkpKTsKLQkJCXJldHVybjsKLQkJfQotCQluYW1lcy5hZGRFbGVtZW50KG5hbWUpOwotCQlhZGRUZXN0KGNyZWF0ZVRlc3QodGhlQ2xhc3MsIG5hbWUpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNQdWJsaWNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCXJldHVybiBpc1Rlc3RNZXRob2QobSkgJiYgTW9kaWZpZXIuaXNQdWJsaWMobS5nZXRNb2RpZmllcnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlDbGFzc1tdIHBhcmFtZXRlcnMgPSBtLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCUNsYXNzIHJldHVyblR5cGUgPSBtLmdldFJldHVyblR5cGUoKTsKLQkJcmV0dXJuIHBhcmFtZXRlcnMubGVuZ3RoID09IDAgJiYgbmFtZS5zdGFydHNXaXRoKCJ0ZXN0IikgJiYgcmV0dXJuVHlwZS5lcXVhbHMoVm9pZC5UWVBFKTsKLQl9Ci0KLQlwcml2YXRlIFRlc3Qgd2FybmluZyhmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotCQlyZXR1cm4gbmV3IFRlc3RDYXNlKCJ3YXJuaW5nIikgewotCQkJcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpIHsKLQkJCQlmYWlsKG1lc3NhZ2UpOwotCQkJfQotCQl9OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL1JlcXVlc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9SZXF1ZXN0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyYTU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL1JlcXVlc3RUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuKjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0vKioKLSAqIE5vdGU6IHVzZSBwb3J0cyBiZXR3ZWVuIDIyMTAwLTIyMjAwIHRvIGVuc3VyZSB0aGV5IGFyZSBmcmVlIG9uIHRoZSBidWlsZCBtYWNoaW5lLgotICovCi1wdWJsaWMgY2xhc3MgUmVxdWVzdFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIElNb25pdG9yIG1vbml0b3I7Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBJTW9uaXRvciBtb25pdG9yRXZlbnQ7Ci0JcHJvdGVjdGVkIHN0YXRpYyBSZXF1ZXN0IHJlcXVlc3RFdmVudDsKLQlwcm90ZWN0ZWQgc3RhdGljIGludCBhZGRDb3VudDsKLQlwcm90ZWN0ZWQgc3RhdGljIGludCBjaGFuZ2VDb3VudDsKLQotCXByb3RlY3RlZCBzdGF0aWMgSVJlcXVlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJUmVxdWVzdExpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWRkZWQoSU1vbml0b3IgbW9uaXRvcjIsIFJlcXVlc3QgcmVxdWVzdDIpIHsKLQkJCW1vbml0b3JFdmVudCA9IG1vbml0b3IyOwotCQkJcmVxdWVzdEV2ZW50ID0gcmVxdWVzdDI7Ci0JCQlhZGRDb3VudCsrOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVxdWVzdENoYW5nZWQoSU1vbml0b3IgbW9uaXRvcjIsIFJlcXVlc3QgcmVxdWVzdDIpIHsKLQkJCW1vbml0b3JFdmVudCA9IG1vbml0b3IyOwotCQkJcmVxdWVzdEV2ZW50ID0gcmVxdWVzdDI7Ci0JCQljaGFuZ2VDb3VudCsrOwotCQl9Ci0JfTsKLQotCXB1YmxpYyBSZXF1ZXN0VGVzdENhc2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoUmVxdWVzdFRlc3RDYXNlLmNsYXNzLCAiUmVxdWVzdFRlc3RDYXNlIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMEdldE1vbml0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE5vdE51bGwoTW9uaXRvckNvcmUuZ2V0TW9uaXRvcnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxQ3JlYXRlTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJTW9uaXRvcldvcmtpbmdDb3B5IHdjID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQl3Yy5zZXRMb2NhbFBvcnQoMjIxNTIpOwotCQl3Yy5zZXRSZW1vdGVIb3N0KCJ3d3cuZWNsaXBzZS5vcmciKTsKLQkJd2Muc2V0UmVtb3RlUG9ydCg4MCk7Ci0JCW1vbml0b3IgPSB3Yy5zYXZlKCk7Ci0JCQotCQlhc3NlcnRUcnVlKG1vbml0b3IgIT0gbnVsbCk7Ci0JCWFzc2VydFRydWUoTW9uaXRvckNvcmUuZ2V0TW9uaXRvcnMoKS5sZW5ndGggPT0gMSk7Ci0JCWFzc2VydFRydWUoIW1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQlhc3NlcnRUcnVlKCFtb25pdG9yLmlzV29ya2luZ0NvcHkoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM0FkZExpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW1vbml0b3IuYWRkUmVxdWVzdExpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDRBZGRMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQltb25pdG9yLmFkZFJlcXVlc3RMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA1U3RhcnRNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoIW1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQltb25pdG9yLnN0YXJ0KCk7Ci0JCWFzc2VydFRydWUobW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNlBpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6MjIxNTIvIik7Ci0JCS8vVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIik7Ci0JCUh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQljb25uLmNvbm5lY3QoKTsKLQotCQkvLyByZWFkIHRoZSBzZXJ2ZXIncyByZXNwb25zZQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGZyb20gd3d3LmVjbGlwc2Uub3JnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJSW5wdXRTdHJlYW0gaW4gPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0JCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjU2XTsKLQkJaW50IG4gPSBpbi5yZWFkKGIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhiKSk7Ci0JCXdoaWxlIChuID49IDApIHsKLQkJCW4gPSBpbi5yZWFkKGIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmcoYikpOwotCQl9Ci0JCWluLmNsb3NlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRW5kIG9mIHJlc3BvbnNlIGZyb20gd3d3LmVjbGlwc2Uub3JnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwN0NoZWNrTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0RXF1YWxzKGFkZENvdW50LCAxKTsKLQkJYXNzZXJ0RXF1YWxzKG1vbml0b3JFdmVudCwgbW9uaXRvcik7Ci0JCWFzc2VydE5vdE51bGwocmVxdWVzdEV2ZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA4VmVyaWZ5TW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRFcXVhbHMocmVxdWVzdEV2ZW50LmdldE1vbml0b3IoKSwgbW9uaXRvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOVZlcmlmeVByb3RvY29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhyZXF1ZXN0RXZlbnQuZ2V0UHJvdG9jb2woKSwgIkhUVFAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTBWZXJpZnlUaW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHdpdGhpbiBhIG1pbnV0ZQotCQlhc3NlcnRUcnVlKE1hdGguYWJzKHJlcXVlc3RFdmVudC5nZXREYXRlKCkuZ2V0VGltZSgpIC0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpIDwgMTAwMCAqIDYwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExVmVyaWZ5TG9jYWxQb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhyZXF1ZXN0RXZlbnQuZ2V0TG9jYWxQb3J0KCksIDIyMTUyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDEyVmVyaWZ5UmVtb3RlSG9zdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRFcXVhbHMocmVxdWVzdEV2ZW50LmdldFJlbW90ZUhvc3QoKSwgInd3dy5lY2xpcHNlLm9yZyIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTNWZXJpZnlSZW1vdGVQb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhyZXF1ZXN0RXZlbnQuZ2V0UmVtb3RlUG9ydCgpLCA4MCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNFZlcmlmeVJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0Tm90TnVsbChyZXF1ZXN0RXZlbnQuZ2V0UmVxdWVzdChSZXF1ZXN0LkFMTCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTVWZXJpZnlSZXNwb25zZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnROb3ROdWxsKHJlcXVlc3RFdmVudC5nZXRSZXNwb25zZShSZXF1ZXN0LkFMTCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTZWZXJpZnlSZXNwb25zZVRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZShyZXF1ZXN0RXZlbnQuZ2V0UmVzcG9uc2VUaW1lKCkgPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE3Q2hlY2tSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE5vdE51bGwocmVxdWVzdEV2ZW50LmdldE5hbWUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxOENoZWNrUmVxdWVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnROdWxsKHJlcXVlc3RFdmVudC5nZXRQcm9wZXJ0eSgidGVzdCIpKTsKLQl9Ci0KLQkvKnB1YmxpYyB2b2lkIHRlc3QxOUNoZWNrUmVxdWVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnQocmVxdWVzdEV2ZW50LmdldFByb3BlcnR5KCIiKSk7Ci0JfSovCi0JCi0JcHVibGljIHZvaWQgdGVzdDE5QWRkVG9SZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXJlcXVlc3RFdmVudC5hZGRUb1JlcXVlc3QobmV3IGJ5dGVbMF0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjBBZGRUb1Jlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXJlcXVlc3RFdmVudC5hZGRUb1Jlc3BvbnNlKG5ldyBieXRlWzBdKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIxU2V0UHJvcGVydHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcmVxdWVzdEV2ZW50LnNldFByb3BlcnR5KCJ0ZXN0IiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMkdldEFkYXB0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0TnVsbChyZXF1ZXN0RXZlbnQuZ2V0QWRhcHRlcihTdHJpbmcuY2xhc3MpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjNTdG9wTW9uaXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKG1vbml0b3IuaXNSdW5uaW5nKCkpOwotCQltb25pdG9yLnN0b3AoKTsKLQkJYXNzZXJ0VHJ1ZSghbW9uaXRvci5pc1J1bm5pbmcoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyNFJlbW92ZUxpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW1vbml0b3IucmVtb3ZlUmVxdWVzdExpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI1Q3JlYXRlKCkgewotCQluZXcgUmVxdWVzdChudWxsLCBudWxsLCAwLCBudWxsLCAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI2VGVzdFByb3RlY3RlZE1ldGhvZHMoKSB7Ci0JCVJlcXVlc3QgbXIgPSBuZXcgUmVxdWVzdChudWxsLCBudWxsLCAwLCBudWxsLCAwKSB7CQkJCi0JCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYykgewotCQkJCXNldE5hbWUoInRlc3QiKTsKLQkJCQlzZXRSZXF1ZXN0KG51bGwpOwotCQkJCXNldFJlc3BvbnNlKG51bGwpOwotCQkJCWZpcmVDaGFuZ2VkRXZlbnQoKTsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQkJbXIuZ2V0QWRhcHRlcihudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9UZXN0Q29udGVudEZpbHRlckRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL1Rlc3RDb250ZW50RmlsdGVyRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3ZGI0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL1Rlc3RDb250ZW50RmlsdGVyRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5Db250ZW50RmlsdGVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5SZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRGaWx0ZXJEZWxlZ2F0ZSBleHRlbmRzIENvbnRlbnRGaWx0ZXJEZWxlZ2F0ZXsKLQlwdWJsaWMgYnl0ZVtdIGZpbHRlcihSZXF1ZXN0IHJlcXVlc3QsIGJvb2xlYW4gaXNSZXF1ZXN0LCBieXRlW10gY29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMjBiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9Db250ZW50RmlsdGVyc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9Db250ZW50RmlsdGVyc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTYxMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvY29yZS90ZXN0cy9leHRlbnNpb24vQ29udGVudEZpbHRlcnNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwuSUNvbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5Nb25pdG9yUGx1Z2luOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQ29udGVudEZpbHRlcnNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENvbnRlbnRGaWx0ZXJzVGVzdENhc2UuY2xhc3MsICJDb250ZW50RmlsdGVyc1Rlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDFDb250ZW50RmlsdGVyc0V4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlJQ29udGVudEZpbHRlcltdIGNmID0gTW9uaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRGaWx0ZXJzKCk7Ci0JCWlmIChjZiAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IGNmLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjZltpXS5nZXRJZCgpICsgIiAtICIgKyBjZltpXS5nZXROYW1lKCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyQ29udGVudEZpbHRlcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCU1vbml0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5maW5kQ29udGVudEZpbHRlcihudWxsKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QzQ29udGVudEZpbHRlcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUNvbnRlbnRGaWx0ZXIgY2YgPSBNb25pdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZmluZENvbnRlbnRGaWx0ZXIoImFiYy54eXoiKTsKLQkJYXNzZXJ0VHJ1ZShjZiA9PSBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YmFlN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLnRlc3RzLkFsbFRlc3RzIiAvPgotICAgCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MjUxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OThhMzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IG1vbml0b3J0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMuZXh0ZW5zaW9uCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOWZjMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIG1vbml0b3J0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBtb25pdG9ydGVzdHMuamFyCi1zb3VyY2UubW9uaXRvcnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5tb25pdG9ydGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5NGM2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy5leHRlbnNpb24uKjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShFeGlzdGVuY2VUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENvbnRlbnRWaWV3ZXJzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTW9uaXRvclVJQ29yZVRlc3QuY2xhc3MpOwotCQkKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKERpYWxvZ3NUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShQcmVmZXJlbmNlc1Rlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFZpZXdUZXN0Q2FzZS5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvRGlhbG9nc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvRGlhbG9nc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NDQwYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL0RpYWxvZ3NUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi2gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLmludGVybmFsLk1vbml0b3JEaWFsb2c7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRGlhbG9nc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vbml0b3JEaWFsb2coKSB7Ci0JCU1vbml0b3JEaWFsb2cgdGQgPSBuZXcgTW9uaXRvckRpYWxvZyhnZXRTaGVsbCgpKTsKLQkJVUlUZXN0SGVscGVyLmFzc2VydERpYWxvZyh0ZCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTIyNzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkuaW50ZXJuYWwuTW9uaXRvclVJUGx1Z2luOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKE1vbml0b3JVSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL01vbml0b3JVSUNvcmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvTW9uaXRvclVJQ29yZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzNjE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvTW9uaXRvclVJQ29yZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5Nb25pdG9yVUlDb3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgTW9uaXRvclVJQ29yZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFJlcXVlc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKE1vbml0b3JVSUNvcmUuZ2V0UmVxdWVzdHMoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTdlY2Q2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWNsYXNzIE9yZGVyZWRUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGV7Ci0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXRoaXModGhlQ2xhc3MpOwotCQlzZXROYW1lKG5hbWUpOwotCX0KLQotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKGZpbmFsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKCk7Ci0JCXNldE5hbWUodGhlQ2xhc3MuZ2V0TmFtZSgpKTsKLQkJdHJ5IHsKLQkJCWdldFRlc3RDb25zdHJ1Y3Rvcih0aGVDbGFzcyk7IC8vIEF2b2lkIGdlbmVyYXRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKQotCQkJCQkrICIgaGFzIG5vIHB1YmxpYyBjb25zdHJ1Y3RvciBUZXN0Q2FzZShTdHJpbmcgbmFtZSkgb3IgVGVzdENhc2UoKSIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIU1vZGlmaWVyLmlzUHVibGljKHRoZUNsYXNzLmdldE1vZGlmaWVycygpKSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpICsgIiBpcyBub3QgcHVibGljIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUNsYXNzIHN1cGVyQ2xhc3MgPSB0aGVDbGFzczsKLQkJVmVjdG9yIG5hbWVzID0gbmV3IFZlY3RvcigpOwotCQl3aGlsZSAoVGVzdC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHN1cGVyQ2xhc3MpKSB7Ci0JCQlNZXRob2RbXSBtZXRob2RzID0gc3VwZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLQkJCWludCBzaXplID0gbWV0aG9kcy5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKLQkJCQlmb3IgKGludCBqID0gaSArIDE7IGogPCBzaXplOyBqKyspIHsKLQkJCQkJaWYgKG1ldGhvZHNbaV0uZ2V0TmFtZSgpLmNvbXBhcmVUbyhtZXRob2RzW2pdLmdldE5hbWUoKSkgPiAwKSB7Ci0JCQkJCQlNZXRob2QgbSA9IG1ldGhvZHNbaV07Ci0JCQkJCQltZXRob2RzW2ldID0gbWV0aG9kc1tqXTsKLQkJCQkJCW1ldGhvZHNbal0gPSBtOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlhZGRUZXN0TWV0aG9kKG1ldGhvZHNbaV0sIG5hbWVzLCB0aGVDbGFzcyk7Ci0JCQl9Ci0JCQlzdXBlckNsYXNzID0gc3VwZXJDbGFzcy5nZXRTdXBlcmNsYXNzKCk7Ci0JCX0KLQkJaWYgKCF0ZXN0cygpLmhhc01vcmVFbGVtZW50cygpKQotCQkJYWRkVGVzdCh3YXJuaW5nKCJObyB0ZXN0cyBmb3VuZCBpbiAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFRlc3RNZXRob2QoTWV0aG9kIG0sIFZlY3RvciBuYW1lcywgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJaWYgKG5hbWVzLmNvbnRhaW5zKG5hbWUpKQotCQkJcmV0dXJuOwotCQlpZiAoIWlzUHVibGljVGVzdE1ldGhvZChtKSkgewotCQkJaWYgKGlzVGVzdE1ldGhvZChtKSkKLQkJCQlhZGRUZXN0KHdhcm5pbmcoIlRlc3QgbWV0aG9kIGlzbid0IHB1YmxpYzogIiArIG0uZ2V0TmFtZSgpKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbmFtZXMuYWRkRWxlbWVudChuYW1lKTsKLQkJYWRkVGVzdChjcmVhdGVUZXN0KHRoZUNsYXNzLCBuYW1lKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzUHVibGljVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlyZXR1cm4gaXNUZXN0TWV0aG9kKG0pICYmIE1vZGlmaWVyLmlzUHVibGljKG0uZ2V0TW9kaWZpZXJzKCkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbS5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQlDbGFzcyByZXR1cm5UeXBlID0gbS5nZXRSZXR1cm5UeXBlKCk7Ci0JCXJldHVybiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAwICYmIG5hbWUuc3RhcnRzV2l0aCgidGVzdCIpICYmIHJldHVyblR5cGUuZXF1YWxzKFZvaWQuVFlQRSk7Ci0JfQotCi0JcHJpdmF0ZSBUZXN0IHdhcm5pbmcoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZSgid2FybmluZyIpIHsKLQkJCXByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKSB7Ci0JCQkJZmFpbChtZXNzYWdlKTsKLQkJCX0KLQkJfTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1ByZWZlcmVuY2VzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9QcmVmZXJlbmNlc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YjEyZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1ByZWZlcmVuY2VzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZXNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFByZWZlcmVuY2VzVGVzdENhc2UuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBQcmVmZXJlbmNlc1Rlc3RDYXNlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVmZXJlbmNlUGFnZSgpIHsKLQkJRGlhbG9nIGRpYWxvZyA9IFVJVGVzdEhlbHBlci5nZXRQcmVmZXJlbmNlRGlhbG9nKCJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5wcmVmZXJlbmNlUGFnZSIpOwotCQlVSVRlc3RIZWxwZXIuYXNzZXJ0RGlhbG9nKGRpYWxvZyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMWJkMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvVUlUZXN0SGVscGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvVUlUZXN0SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MDg3ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1VJVGVzdEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3BlcnR5UGFnZUNvbnRyaWJ1dG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3BlcnR5UGFnZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuSVdvcmtiZW5jaEFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBVSVRlc3RIZWxwZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJlZmVyZW5jZURpYWxvZ1dyYXBwZXIgZXh0ZW5kcyBQcmVmZXJlbmNlRGlhbG9nIHsKLQkJcHVibGljIFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyKFNoZWxsIHBhcmVudFNoZWxsLCBQcmVmZXJlbmNlTWFuYWdlciBtYW5hZ2VyKSB7Ci0JCQlzdXBlcihwYXJlbnRTaGVsbCwgbWFuYWdlcik7Ci0JCX0KLQkJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd1BhZ2UoSVByZWZlcmVuY2VOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBzdXBlci5zaG93UGFnZShub2RlKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBQcm9wZXJ0eURpYWxvZ1dyYXBwZXIgZXh0ZW5kcyBQcm9wZXJ0eURpYWxvZyB7Ci0JCXB1YmxpYyBQcm9wZXJ0eURpYWxvZ1dyYXBwZXIoU2hlbGwgcGFyZW50U2hlbGwsIFByZWZlcmVuY2VNYW5hZ2VyIG1hbmFnZXIsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCQlzdXBlcihwYXJlbnRTaGVsbCwgbWFuYWdlciwgc2VsZWN0aW9uKTsKLQkJfQotCQlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93UGFnZShJUHJlZmVyZW5jZU5vZGUgbm9kZSkgewotCQkJcmV0dXJuIHN1cGVyLnNob3dQYWdlKG5vZGUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFByZWZlcmVuY2VEaWFsb2cgZ2V0UHJlZmVyZW5jZURpYWxvZyhTdHJpbmcgaWQpIHsKLQkJUHJlZmVyZW5jZURpYWxvZ1dyYXBwZXIgZGlhbG9nID0gbnVsbDsKLQkJUHJlZmVyZW5jZU1hbmFnZXIgbWFuYWdlciA9IFdvcmtiZW5jaFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZU1hbmFnZXIoKTsKLQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotCQkJZGlhbG9nID0gbmV3IFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyKGdldFNoZWxsKCksIG1hbmFnZXIpOwotCQkJZGlhbG9nLmNyZWF0ZSgpOwkKLQotCQkJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1hbmFnZXIuZ2V0RWxlbWVudHMoUHJlZmVyZW5jZU1hbmFnZXIuUFJFX09SREVSKS5pdGVyYXRvcigpOwotCQkJICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KQotCQkJewotCQkJCUlQcmVmZXJlbmNlTm9kZSBub2RlID0gKElQcmVmZXJlbmNlTm9kZSlpdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKCBub2RlLmdldElkKCkuZXF1YWxzKGlkKSApIHsKLQkJCQkJZGlhbG9nLnNob3dQYWdlKG5vZGUpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRpYWxvZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQcm9wZXJ0eURpYWxvZyBnZXRQcm9wZXJ0eURpYWxvZyhTdHJpbmcgaWQsIElBZGFwdGFibGUgZWxlbWVudCkgewotCQlQcm9wZXJ0eURpYWxvZ1dyYXBwZXIgZGlhbG9nID0gbnVsbDsKLQotCQlQcm9wZXJ0eVBhZ2VNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgUHJvcGVydHlQYWdlTWFuYWdlcigpOwotCQlTdHJpbmcgdGl0bGUgPSAiIjsKLQkJU3RyaW5nIG5hbWUgID0gIiI7Ci0KLQkJLy8gbG9hZCBwYWdlcyBmb3IgdGhlIHNlbGVjdGlvbgotCQkvLyBmaWxsIHRoZSBtYW5hZ2VyIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBtYXRjaGluZyBjb250cmlidXRvcnMKLQkJUHJvcGVydHlQYWdlQ29udHJpYnV0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKS5jb250cmlidXRlKG1hbmFnZXIsIGVsZW1lbnQpOwotCQkKLQkJSVdvcmtiZW5jaEFkYXB0ZXIgYWRhcHRlciA9IChJV29ya2JlbmNoQWRhcHRlcillbGVtZW50LmdldEFkYXB0ZXIoSVdvcmtiZW5jaEFkYXB0ZXIuY2xhc3MpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQluYW1lID0gYWRhcHRlci5nZXRMYWJlbChlbGVtZW50KTsKLQkJfQotCQkKLQkJLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgcGFnZXMgaW4gdGhlIG1hbmFnZXIKLQkJSXRlcmF0b3IgcGFnZXMgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsJCQotCQlpZiAoIXBhZ2VzLmhhc05leHQoKSkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJdGl0bGUgPSBOTFMuYmluZChXb3JrYmVuY2hNZXNzYWdlcy5Qcm9wZXJ0eURpYWxvZ19wcm9wZXJ0eU1lc3NhZ2UsIG5ldyBPYmplY3RbXSB7bmFtZX0pOwotCQlkaWFsb2cgPSBuZXcgUHJvcGVydHlEaWFsb2dXcmFwcGVyKGdldFNoZWxsKCksIG1hbmFnZXIsIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVsZW1lbnQpKTsgCi0JCWRpYWxvZy5jcmVhdGUoKTsKLQkJZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dCh0aXRsZSk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsKLQkJICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQlJUHJlZmVyZW5jZU5vZGUgbm9kZSA9IChJUHJlZmVyZW5jZU5vZGUpaXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKCBub2RlLmdldElkKCkuZXF1YWxzKGlkKSApIHsKLQkJCQlkaWFsb2cuc2hvd1BhZ2Uobm9kZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRpYWxvZzsKLQl9Ci0JCi0JLyoqCi0JICogQXV0b21hdGVkIHRlc3QgdGhhdCBjaGVja3MgYWxsIHRoZSBsYWJlbHMgYW5kIGJ1dHRvbnMgb2YgYSBkaWFsb2cKLQkgKiB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gZGlzcGxheSBhbGwgdGhlIHRleHQuICBBbnkKLQkgKiB0ZXh0IHRoYXQgd3JhcHMgaXMgb25seSBhcHByb3hpbWF0ZWQgYW5kIGlzIGN1cnJlbnRseSBub3QgYWNjdXJhdGUuCi0JICogCi0JICogQHBhcmFtIGRpYWxvZyB0aGUgdGVzdCBkaWFsb2cgdG8gYmUgdmVyaWZpZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydERpYWxvZyhEaWFsb2cgZGlhbG9nKSB7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKGRpYWxvZyk7Ci0JCWRpYWxvZy5zZXRCbG9ja09uT3BlbihmYWxzZSk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0JCVNoZWxsIHNoZWxsID0gZGlhbG9nLmdldFNoZWxsKCk7Ci0JCXZlcmlmeUNvbXBvc2l0ZVRleHQoc2hlbGwpOwotCQlkaWFsb2cuY2xvc2UoKTsKLQl9Ci0KLQkvKgotCSAqIExvb2tzIGF0IGFsbCB0aGUgY2hpbGQgd2lkZ2V0cyBvZiBhIGdpdmVuIGNvbXBvc2l0ZSBhbmQKLQkgKiB2ZXJpZmllcyB0aGUgdGV4dCBvbiBhbGwgbGFiZWxzIGFuZCB3aWRnZXRzLgotCSAqIEBwYXJhbSBjb21wb3NpdGUgVGhlIGNvbXBvc2l0ZSB0byBsb29rIHRocm91Z2gKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeUNvbXBvc2l0ZVRleHQoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgewotCQlDb250cm9sIGNoaWxkcmVuW10gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQkvL3ZlcmlmeSB0aGUgdGV4dCBpZiB0aGUgY2hpbGQgaXMgYSBidXR0b24KLQkJCQl2ZXJpZnlCdXR0b25UZXh0KChCdXR0b24pIGNoaWxkcmVuW2ldKTsKLQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleE5vdEJ1dHRvbikgewotCQkJCXRyeSB7Ci0JCQkJCS8vY2hpbGQgaXMgbm90IGEgYnV0dG9uLCBtYXliZSBhIGxhYmVsCi0JCQkJCXZlcmlmeUxhYmVsVGV4dCgoTGFiZWwpIGNoaWxkcmVuW2ldKTsKLQkJCQl9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXhOb3RMYWJlbCkgewotCQkJCQl0cnkgewotCQkJCQkJLy9jaGlsZCBpcyBub3QgYSBsYWJlbCwgbWFrZSBhIHJlY3Vyc2l2ZSBjYWxsIGlmIGl0IGlzIGEgY29tcG9zaXRlCi0JCQkJCQl2ZXJpZnlDb21wb3NpdGVUZXh0KChDb21wb3NpdGUpIGNoaWxkcmVuW2ldKTsKLQkJCQkJfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGV4Tm90Q29tcG9zaXRlKSB7Ci0JCQkJCQkvL3RoZSBjaGlsZCBpcyBub3QgYSBidXR0b24sIGxhYmVsLCBvciBjb21wb3NpdGUgLSBpZ25vcmUgaXQuCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gYnV0dG9uIGlzIGxhcmdlIGVub3VnaCB0byBkaXNwbGF5IGl0cyB0ZXh0LgotCSAqIEBwYXJhbSBidXR0b24gVGhlIGJ1dHRvbiB0byB2ZXJpZnksCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlCdXR0b25UZXh0KEJ1dHRvbiBidXR0b24pIHsKLQkJU3RyaW5nIHdpZGdldCA9IGJ1dHRvbi50b1N0cmluZygpOwotCQlQb2ludCBzaXplID0gYnV0dG9uLmdldFNpemUoKTsKLQotCQkvLyBjb21wdXRlIHRoZSBzaXplIHdpdGggbm8gbGluZSB3cmFwcGluZwotCQlQb2ludCBwcmVmZXJyZWQgPSBidXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQkJLy9pZiAoc2l6ZS55L3ByZWZlcnJlZC55KSA9PSBYLCB0aGVuIGxhYmVsIHNwYW5zIFggbGluZXMsIHNvIGRpdmlkZQotCQkvL3RoZSBjYWxjdWxhdGVkIHZhbHVlIG9mIHByZWZlcnJlZC54IGJ5IFgKLQkJaWYgKHByZWZlcnJlZC55ICogc2l6ZS55ID4gMCkgewotCQkJcHJlZmVycmVkLnkgLz0gY291bnRMaW5lcyhidXR0b24uZ2V0VGV4dCgpKTsgLy9jaGVjayBmb3IgJ1xuXCcKLQkJCWlmIChzaXplLnkgLyBwcmVmZXJyZWQueSA+IDEpIHsKLQkJCQlwcmVmZXJyZWQueCAvPSAoc2l6ZS55IC8gcHJlZmVycmVkLnkpOwotCQkJfQotCQl9Ci0KLQkJU3RyaW5nIG1lc3NhZ2UgPQotCQkJbmV3IFN0cmluZ0J1ZmZlcigiV2FybmluZzogIikKLQkJCQkuYXBwZW5kKHdpZGdldCkKLQkJCQkuYXBwZW5kKCJcblx0QWN0dWFsIFdpZHRoIC0+ICIpCi0JCQkJLmFwcGVuZChzaXplLngpCi0JCQkJLmFwcGVuZCgiXG5cdFJlY29tbWVuZGVkIFdpZHRoIC0+ICIpCi0JCQkJLmFwcGVuZChwcmVmZXJyZWQueCkKLQkJCQkudG9TdHJpbmcoKTsKLQkJaWYgKHByZWZlcnJlZC54ID4gc2l6ZS54KSB7Ci0JCQkvL2Nsb3NlIHRoZSBkaWFsb2cKLQkJCWJ1dHRvbi5nZXRTaGVsbCgpLmRpc3Bvc2UoKTsKLQkJCUFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UudG9TdHJpbmcoKSwgZmFsc2UpOwotCQl9Ci0JfQotCQotCS8qCi0JICogVmVyaWZpZXMgdGhhdCBhIGdpdmVuIGxhYmVsIGlzIGxhcmdlIGVub3VnaCB0byBkaXNwbGF5IGl0cyB0ZXh0LgotCSAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgdG8gdmVyaWZ5LAotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgdmVyaWZ5TGFiZWxUZXh0KExhYmVsIGxhYmVsKSB7Ci0JCVN0cmluZyB3aWRnZXQgPSBsYWJlbC50b1N0cmluZygpOwotCQlQb2ludCBzaXplID0gbGFiZWwuZ2V0U2l6ZSgpOwotCi0JCS8vIGNvbXB1dGUgdGhlIHNpemUgd2l0aCBubyBsaW5lIHdyYXBwaW5nCi0JCVBvaW50IHByZWZlcnJlZCA9IGxhYmVsLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0JCS8vaWYgKHNpemUueS9wcmVmZXJyZWQueSkgPT0gWCwgdGhlbiBsYWJlbCBzcGFucyBYIGxpbmVzLCBzbyBkaXZpZGUKLQkJLy90aGUgY2FsY3VsYXRlZCB2YWx1ZSBvZiBwcmVmZXJyZWQueCBieSBYCi0JCWlmIChwcmVmZXJyZWQueSAqIHNpemUueSA+IDApIHsKLQkJCXByZWZlcnJlZC55IC89IGNvdW50TGluZXMobGFiZWwuZ2V0VGV4dCgpKTsKLQkJCWlmIChzaXplLnkgLyBwcmVmZXJyZWQueSA+IDEpIHsKLQkJCQlwcmVmZXJyZWQueCAvPSAoc2l6ZS55IC8gcHJlZmVycmVkLnkpOwotCQkJfQotCQl9Ci0JCVN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigiV2FybmluZzogIikuYXBwZW5kKHdpZGdldCkKLQkJCS5hcHBlbmQoIlxuXHRBY3R1YWwgV2lkdGggLT4gIikuYXBwZW5kKHNpemUueCkKLQkJCS5hcHBlbmQoIlxuXHRSZWNvbW1lbmRlZCBXaWR0aCAtPiAiKS5hcHBlbmQocHJlZmVycmVkLngpLnRvU3RyaW5nKCk7Ci0JCWlmIChwcmVmZXJyZWQueCA+IHNpemUueCkgewotCQkJLy9jbG9zZSB0aGUgZGlhbG9nCi0JCQlsYWJlbC5nZXRTaGVsbCgpLmRpc3Bvc2UoKTsKLQkJCUFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UudG9TdHJpbmcoKSwgZmFsc2UpOwotCQl9Ci0JfQotCQotCS8qCi0JICogQ291bnRzIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBnaXZlbiBTdHJpbmcuCi0JICogRm9yIGV4YW1wbGUsIGlmIGEgc3RyaW5nIGNvbnRhaW5zIG9uZSAoMSkgbmV3bGluZSBjaGFyYWN0ZXIsCi0JICogYSB2YWx1ZSBvZiB0d28gKDIpIHdvdWxkIGJlIHJldHVybmVkLgotCSAqIEBwYXJhbSB0ZXh0IFRoZSBzdHJpbmcgdG8gbG9vayB0aHJvdWdoLgotCSAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGV4dC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBpbnQgY291bnRMaW5lcyhTdHJpbmcgdGV4dCkgewotCQlpbnQgbmV3TGluZXMgPSAxOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewotCQkJaWYgKHRleHQuY2hhckF0KGkpID09ICdcbicpIHsKLQkJCQluZXdMaW5lcysrOwotCQkJfQotCQl9Ci0JCXJldHVybiBuZXdMaW5lczsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1ZpZXdUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL1ZpZXdUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjkwYzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9WaWV3VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBWaWV3VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdE1vbml0b3JWaWV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJSVZpZXdQYXJ0IHZpZXcgPSBwYWdlLnNob3dWaWV3KCJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci52aWV3Iik7Ci0JCXBhZ2UuaGlkZVZpZXcodmlldyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaW50ZXJuZXQvbW9uaXRvci91aS90ZXN0cy9leHRlbnNpb24vQ29udGVudFZpZXdlcnNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL2V4dGVuc2lvbi9Db250ZW50Vmlld2Vyc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZTFmYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL2V4dGVuc2lvbi9Db250ZW50Vmlld2Vyc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLkNvbnRlbnRWaWV3ZXI7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBDb250ZW50Vmlld2Vyc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgQ29udGVudFZpZXdlciB2aWV3ZXI7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENvbnRlbnRWaWV3ZXJzVGVzdENhc2UuY2xhc3MsICJDb250ZW50Vmlld2Vyc1Rlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQl2aWV3ZXIgPSBuZXcgVGVzdENvbnRlbnRWaWV3ZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0Q29udGVudCgpIHsKLQkJdmlld2VyLmdldENvbnRlbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0RWRpdGFibGUoKSB7Ci0JCXZpZXdlci5nZXRFZGl0YWJsZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNTZXRDb250ZW50KCkgewotCQl2aWV3ZXIuc2V0Q29udGVudChudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0U2V0RWRpdGFibGUoKSB7Ci0JCXZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNUluaXQoKSB7Ci0JCXZpZXdlci5pbml0KG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZEaXNwb3NlKCkgewotCQl2aWV3ZXIuZGlzcG9zZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvZXh0ZW5zaW9uL1Rlc3RDb250ZW50Vmlld2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2ludGVybmV0L21vbml0b3IvdWkvdGVzdHMvZXh0ZW5zaW9uL1Rlc3RDb250ZW50Vmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDZjOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9pbnRlcm5ldC9tb25pdG9yL3VpL3Rlc3RzL2V4dGVuc2lvbi9UZXN0Q29udGVudFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuQ29udGVudFZpZXdlcjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50Vmlld2VyIGV4dGVuZHMgQ29udGVudFZpZXdlciB7Ci0JcHVibGljIHZvaWQgaW5pdChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb250ZW50KGJ5dGVbXSBiKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgYnl0ZVtdIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmMxMjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkudGVzdHMuQWxsVGVzdHMiIC8+Ci0gICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVhYzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3MGQ4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zZXJ2ZXJ0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkNjBkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGYwYzdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHNlcnZlcnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHQsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmV4dGVuc2lvbiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbCwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBiZWE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc2VydmVydGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNlcnZlcnRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgc2VydmVydGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwODA5YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXRlcmF0aW9uIEJpbGlzaW0gQS5TLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiA/IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qIAotKiBDb250cmlidXRvcnM6Ci0qICAgICBEZW5peiBTZWNpbGlyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qIAotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBFVEVSQVRJT04gQS5TLiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEV0ZXJhdGlvbiBCaWxpc2ltIEEuUy4gIEZvciBtb3JlCi0qIGluZm9ybWF0aW9uIG9uIGV0ZXJhdGlvbiwgcGxlYXNlIHNlZQotKiA8aHR0cDovL3d3dy5ldGVyYXRpb24uY29tLz4uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHRlbnNpb24uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbC5IVFRQTGF1bmNoYWJsZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsLk51bGxNb2R1bGVBcnRpZmFjdFRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsLlBpbmdUaHJlYWRUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdE1vZHVsZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsLlNvY2tldFV0aWxUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbC5TdGF0aWNXZWJUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbC5XZWJSZXNvdXJjZVRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxUZXN0cyB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS53dHAud3N0LnNlcnZlci5jb3JlLnRlc3RzIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGFydHVwRXh0ZW5zaW9uVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTW9kdWxlRmFjdG9yaWVzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUnVudGltZVR5cGVzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUnVudGltZVRhcmdldEhhbmRsZXJzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUnVudGltZUxvY2F0b3JzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyVHlwZXNUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTZXJ2ZXJUYXNrc1Rlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFNlcnZlckxvY2F0b3JzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTGF1bmNoYWJsZUFkYXB0ZXJzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2xpZW50c1Rlc3RDYXNlLmNsYXNzKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTZXJ2ZXJDb3JlVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyVXRpbFRlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShQcm9qZWN0UHJvcGVydGllc1Rlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyUHJlZmVyZW5jZXNUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlclBvcnRUZXN0Q2FzZS5jbGFzcykpOwotCQkKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKElNb2R1bGVUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShJTW9kdWxlQXJ0aWZhY3RUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShJTW9kdWxlVHlwZVRlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFB1Ymxpc2hPcGVyYXRpb25UZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShUYXNrTW9kZWxUZXN0Q2FzZS5jbGFzcyk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUnVudGltZUxpZmVjeWNsZUxpc3RlbmVyVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXJUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTZXJ2ZXJMaXN0ZW5lclRlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFJ1bnRpbWVMaWZlY3ljbGVBZGFwdGVyVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyTGlmZWN5Y2xlQWRhcHRlclRlc3RDYXNlLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJFdmVudFRlc3RDYXNlLmNsYXNzKSk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKENsaWVudERlbGVnYXRlVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShSdW50aW1lTG9jYXRvckRlbGVnYXRlVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoUnVudGltZVRhcmdldEhhbmRsZXJzVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShSdW50aW1lRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlckRlbGVnYXRlVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJCZWhhdmlvdXJEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyVGFza0RlbGVnYXRlVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUZpbGVUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUZvbGRlclRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9kdWxlUmVzb3VyY2VUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZVJlc291cmNlRGVsdGFUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZVJlc291cmNlRGVsdGFWaXNpdG9yVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTGF1bmNoYWJsZUFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9kdWxlTGlzdGVuZXJUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUV2ZW50VGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVGYWN0b3J5RXZlbnRUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFBpbmdUaHJlYWRUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFByb2plY3RNb2R1bGVUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5jbGFzcykpOwotCQkKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShIVFRQTGF1bmNoYWJsZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoU3RhdGljV2ViVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShXZWJSZXNvdXJjZVRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoTnVsbE1vZHVsZUFydGlmYWN0VGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFNvY2tldFV0aWxUZXN0Q2FzZS5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWQzYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA0IEV0ZXJhdGlvbiBCaWxpc2ltIEEuUy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gPyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgRGVuaXogU2VjaWxpciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKiAKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgRVRFUkFUSU9OIEEuUy4gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBFdGVyYXRpb24gQmlsaXNpbSBBLlMuICBGb3IgbW9yZQotKiBpbmZvcm1hdGlvbiBvbiBldGVyYXRpb24sIHBsZWFzZSBzZWUKLSogPGh0dHA6Ly93d3cuZXRlcmF0aW9uLmNvbS8+LgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuU2VydmVyUGx1Z2luOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlhc3NlcnROb3ROdWxsKFNlcnZlclBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvSU1vZHVsZUFydGlmYWN0VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL0lNb2R1bGVBcnRpZmFjdFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzU4ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvSU1vZHVsZUFydGlmYWN0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGVBcnRpZmFjdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIElNb2R1bGVBcnRpZmFjdFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSU1vZHVsZUFydGlmYWN0IGFydGlmYWN0OwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZSgpIHsKLQkJYXJ0aWZhY3QgPSBuZXcgSU1vZHVsZUFydGlmYWN0KCkgewotCQkJcHVibGljIElNb2R1bGUgZ2V0TW9kdWxlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9OwotCQkKLQkJYXJ0aWZhY3QuZ2V0TW9kdWxlKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL0lNb2R1bGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvSU1vZHVsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODMwZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvSU1vZHVsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSU1vZHVsZUxpc3RlbmVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgSU1vZHVsZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSU1vZHVsZSBtb2R1bGU7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQltb2R1bGUgPSBuZXcgSU1vZHVsZSgpIHsKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIElNb2R1bGVUeXBlIGdldE1vZHVsZVR5cGUoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBhZGRNb2R1bGVMaXN0ZW5lcihJTW9kdWxlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgcmVtb3ZlTW9kdWxlTGlzdGVuZXIoSU1vZHVsZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQkJLy8gaWdub3JlCi0JCQl9Ci0KLQkJCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBPYmplY3QgbG9hZEFkYXB0ZXIoQ2xhc3MgYWRhcHRlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX07Ci0JCQotCQltb2R1bGUuZ2V0SWQoKTsKLQkJbW9kdWxlLmdldE5hbWUoKTsKLQkJbW9kdWxlLmdldE1vZHVsZVR5cGUoKTsKLQkJbW9kdWxlLmdldFByb2plY3QoKTsKLQkJbW9kdWxlLmdldEFkYXB0ZXIobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL0lNb2R1bGVUeXBlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL0lNb2R1bGVUeXBlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkZjlmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9JTW9kdWxlVHlwZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlVHlwZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIElNb2R1bGVUeXBlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJTW9kdWxlVHlwZSB0eXBlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZSgpIHsKLQkJdHlwZSA9IG5ldyBJTW9kdWxlVHlwZSgpIHsKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9OwotCQkKLQkJdHlwZS5nZXRJZCgpOwotCQl0eXBlLmdldE5hbWUoKTsKLQkJdHlwZS5nZXRWZXJzaW9uKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0MDZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgT3JkZXJlZFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZXsKLQlwdWJsaWMgT3JkZXJlZFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJdGhpcyh0aGVDbGFzcyk7Ci0JCXNldE5hbWUobmFtZSk7Ci0JfQotCi0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoZmluYWwgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIoKTsKLQkJc2V0TmFtZSh0aGVDbGFzcy5nZXROYW1lKCkpOwotCQl0cnkgewotCQkJZ2V0VGVzdENvbnN0cnVjdG9yKHRoZUNsYXNzKTsgLy8gQXZvaWQgZ2VuZXJhdGluZyBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpCi0JCQkJCSsgIiBoYXMgbm8gcHVibGljIGNvbnN0cnVjdG9yIFRlc3RDYXNlKFN0cmluZyBuYW1lKSBvciBUZXN0Q2FzZSgpIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghTW9kaWZpZXIuaXNQdWJsaWModGhlQ2xhc3MuZ2V0TW9kaWZpZXJzKCkpKSB7Ci0JCQlhZGRUZXN0KHdhcm5pbmcoIkNsYXNzICIgKyB0aGVDbGFzcy5nZXROYW1lKCkgKyAiIGlzIG5vdCBwdWJsaWMiKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3Mgc3VwZXJDbGFzcyA9IHRoZUNsYXNzOwotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCXdoaWxlIChUZXN0LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc3VwZXJDbGFzcykpIHsKLQkJCU1ldGhvZFtdIG1ldGhvZHMgPSBzdXBlckNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOwotCQkJaW50IHNpemUgPSBtZXRob2RzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKykgewotCQkJCWZvciAoaW50IGogPSBpICsgMTsgaiA8IHNpemU7IGorKykgewotCQkJCQlpZiAobWV0aG9kc1tpXS5nZXROYW1lKCkuY29tcGFyZVRvKG1ldGhvZHNbal0uZ2V0TmFtZSgpKSA+IDApIHsKLQkJCQkJCU1ldGhvZCBtID0gbWV0aG9kc1tpXTsKLQkJCQkJCW1ldGhvZHNbaV0gPSBtZXRob2RzW2pdOwotCQkJCQkJbWV0aG9kc1tqXSA9IG07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCWFkZFRlc3RNZXRob2QobWV0aG9kc1tpXSwgbmFtZXMsIHRoZUNsYXNzKTsKLQkJCX0KLQkJCXN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzLmdldFN1cGVyY2xhc3MoKTsKLQkJfQotCQlpZiAoIXRlc3RzKCkuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCQlhZGRUZXN0KHdhcm5pbmcoIk5vIHRlc3RzIGZvdW5kIGluICIgKyB0aGVDbGFzcy5nZXROYW1lKCkpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkVGVzdE1ldGhvZChNZXRob2QgbSwgVmVjdG9yIG5hbWVzLCBDbGFzcyB0aGVDbGFzcykgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlpZiAobmFtZXMuY29udGFpbnMobmFtZSkpCi0JCQlyZXR1cm47Ci0JCWlmICghaXNQdWJsaWNUZXN0TWV0aG9kKG0pKSB7Ci0JCQlpZiAoaXNUZXN0TWV0aG9kKG0pKQotCQkJCWFkZFRlc3Qod2FybmluZygiVGVzdCBtZXRob2QgaXNuJ3QgcHVibGljOiAiICsgbS5nZXROYW1lKCkpKTsKLQkJCXJldHVybjsKLQkJfQotCQluYW1lcy5hZGRFbGVtZW50KG5hbWUpOwotCQlhZGRUZXN0KGNyZWF0ZVRlc3QodGhlQ2xhc3MsIG5hbWUpKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNQdWJsaWNUZXN0TWV0aG9kKE1ldGhvZCBtKSB7Ci0JCXJldHVybiBpc1Rlc3RNZXRob2QobSkgJiYgTW9kaWZpZXIuaXNQdWJsaWMobS5nZXRNb2RpZmllcnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlTdHJpbmcgbmFtZSA9IG0uZ2V0TmFtZSgpOwotCQlDbGFzc1tdIHBhcmFtZXRlcnMgPSBtLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCUNsYXNzIHJldHVyblR5cGUgPSBtLmdldFJldHVyblR5cGUoKTsKLQkJcmV0dXJuIHBhcmFtZXRlcnMubGVuZ3RoID09IDAgJiYgbmFtZS5zdGFydHNXaXRoKCJ0ZXN0IikgJiYgcmV0dXJuVHlwZS5lcXVhbHMoVm9pZC5UWVBFKTsKLQl9Ci0KLQlwcml2YXRlIFRlc3Qgd2FybmluZyhmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotCQlyZXR1cm4gbmV3IFRlc3RDYXNlKCJ3YXJuaW5nIikgewotCQkJcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpIHsKLQkJCQlmYWlsKG1lc3NhZ2UpOwotCQkJfQotCQl9OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9Qcm9qZWN0UHJvcGVydGllc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9Qcm9qZWN0UHJvcGVydGllc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhN2NhODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvUHJvamVjdFByb3BlcnRpZXNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JUHJvamVjdFByb3BlcnRpZXNMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuUHJvamVjdFByb3BlcnRpZXM7Ci0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0UHJvcGVydGllc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgcHJvamVjdDsKLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0UHJvcGVydGllcyBwcm9wczsKLQkKLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IHByb2plY3RFdmVudDsKLQlwcm90ZWN0ZWQgc3RhdGljIElTZXJ2ZXIgc2VydmVyRXZlbnQ7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJUnVudGltZSBydW50aW1lRXZlbnQ7Ci0JcHJvdGVjdGVkIHN0YXRpYyBpbnQgY291bnQ7Ci0KLQlwcm90ZWN0ZWQgSVByb2plY3RQcm9wZXJ0aWVzTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVByb2plY3RQcm9wZXJ0aWVzTGlzdGVuZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGRlZmF1bHRTZXJ2ZXJDaGFuZ2VkKElQcm9qZWN0IHByb2plY3QyLCBJU2VydmVyIHNlcnZlcikgewotCQkJcHJvamVjdEV2ZW50ID0gcHJvamVjdDI7Ci0JCQlzZXJ2ZXJFdmVudCA9IHNlcnZlcjsKLQkJCWNvdW50Kys7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW50aW1lVGFyZ2V0Q2hhbmdlZChJUHJvamVjdCBwcm9qZWN0MiwgSVJ1bnRpbWUgcnVudGltZSkgewotCQkJcHJvamVjdEV2ZW50ID0gcHJvamVjdDI7Ci0JCQlydW50aW1lRXZlbnQgPSBydW50aW1lOwotCQkJY291bnQrKzsKLQkJfQotCX07Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShQcm9qZWN0UHJvcGVydGllc1Rlc3RDYXNlLmNsYXNzLCAiQWJzdHJhY3RTZXJ2ZXJUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMEdldFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgidGVzdCIpOwotCQlpZiAocHJvamVjdCAhPSBudWxsICYmICFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkJCXByb2plY3Qub3BlbihudWxsKTsKLQkJfQotCQlwcm9wcyA9IFNlcnZlckNvcmUuZ2V0UHJvamVjdFByb3BlcnRpZXMocHJvamVjdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxQWRkTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJKChQcm9qZWN0UHJvcGVydGllcylwcm9wcykuYWRkUHJvamVjdFByb3BlcnRpZXNMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0U2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE51bGwocHJvcHMuZ2V0RGVmYXVsdFNlcnZlcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNHZXRSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE51bGwocHJvcHMuZ2V0UnVudGltZVRhcmdldCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDRHZXRTZXJ2ZXJQcm9qZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEZhbHNlKCgoUHJvamVjdFByb3BlcnRpZXMpIHByb3BzKS5pc1NlcnZlclByb2plY3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNVRlc3RMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKGNvdW50ID09IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwNlNldFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcm9wcy5zZXREZWZhdWx0U2VydmVyKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdUZXN0TGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gbm8gZXZlbnQgc2luY2Ugd2UgZGlkbid0IGNoYW5nZSBpdAotCQlhc3NlcnRUcnVlKGNvdW50ID09IDApOwotCQljb3VudCA9IDA7Ci0JCXNlcnZlckV2ZW50ID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDhTZXRSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByb3BzLnNldFJ1bnRpbWVUYXJnZXQobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOVRlc3RMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBubyBldmVudCBhZ2FpbgotCQlhc3NlcnRUcnVlKGNvdW50ID09IDApOwotCQljb3VudCA9IDA7Ci0JCXJ1bnRpbWVFdmVudCA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDEwU2V0U2VydmVyUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlQcm9qZWN0UHJvcGVydGllcyBwcCA9IChQcm9qZWN0UHJvcGVydGllcykgcHJvcHM7Ci0JCXBwLnNldFNlcnZlclByb2plY3QodHJ1ZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHAuaXNTZXJ2ZXJQcm9qZWN0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxMVVuc2V0U2VydmVyUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlQcm9qZWN0UHJvcGVydGllcyBwcCA9IChQcm9qZWN0UHJvcGVydGllcykgcHJvcHM7Ci0JCXBwLnNldFNlcnZlclByb2plY3QoZmFsc2UsIG51bGwpOwotCQlhc3NlcnRGYWxzZShwcC5pc1NlcnZlclByb2plY3QoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDEyVGVzdExpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoY291bnQgPT0gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxM1JlbW92ZUxpc3RlbmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCSgoUHJvamVjdFByb3BlcnRpZXMpcHJvcHMpLnJlbW92ZVByb2plY3RQcm9wZXJ0aWVzTGlzdGVuZXIobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxNEVuZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE1Q2hlY2tMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotCQlJUHJvamVjdFByb3BlcnRpZXNMaXN0ZW5lciBsaXN0ZW5lcjIgPSBuZXcgSVByb2plY3RQcm9wZXJ0aWVzTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBkZWZhdWx0U2VydmVyQ2hhbmdlZChJUHJvamVjdCBwcm9qZWN0MiwgSVNlcnZlciBzZXJ2ZXIpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgcnVudGltZVRhcmdldENoYW5nZWQoSVByb2plY3QgcHJvamVjdDIsIElSdW50aW1lIHJ1bnRpbWUpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQkJfTsKLQkJCi0JCWxpc3RlbmVyMi5kZWZhdWx0U2VydmVyQ2hhbmdlZChudWxsLCBudWxsKTsKLQkJbGlzdGVuZXIyLnJ1bnRpbWVUYXJnZXRDaGFuZ2VkKG51bGwsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9SdW50aW1lTGlmZWN5Y2xlQWRhcHRlclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9SdW50aW1lTGlmZWN5Y2xlQWRhcHRlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YjhlMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvUnVudGltZUxpZmVjeWNsZUFkYXB0ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5SdW50aW1lTGlmZWN5Y2xlQWRhcHRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVMaWZlY3ljbGVBZGFwdGVyVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdExpc3RlbmVyKCkgewotCQlSdW50aW1lTGlmZWN5Y2xlQWRhcHRlciBsaXN0ZW5lciA9IG5ldyBSdW50aW1lTGlmZWN5Y2xlQWRhcHRlcigpOwotCQkKLQkJbGlzdGVuZXIucnVudGltZUFkZGVkKG51bGwpOwotCQlsaXN0ZW5lci5ydW50aW1lQ2hhbmdlZChudWxsKTsKLQkJbGlzdGVuZXIucnVudGltZVJlbW92ZWQobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1J1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9SdW50aW1lTGlmZWN5Y2xlTGlzdGVuZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yzk3MGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1J1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lclRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RMaXN0ZW5lcigpIHsKLQkJSVJ1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJUnVudGltZUxpZmVjeWNsZUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgcnVudGltZUFkZGVkKElSdW50aW1lIHJ1bnRpbWUpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgcnVudGltZUNoYW5nZWQoSVJ1bnRpbWUgcnVudGltZSkgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBydW50aW1lUmVtb3ZlZChJUnVudGltZSBydW50aW1lKSB7Ci0JCQkJLy8gaWdub3JlCi0JCQl9Ci0JCX07Ci0JCQotCQlsaXN0ZW5lci5ydW50aW1lQWRkZWQobnVsbCk7Ci0JCWxpc3RlbmVyLnJ1bnRpbWVDaGFuZ2VkKG51bGwpOwotCQlsaXN0ZW5lci5ydW50aW1lUmVtb3ZlZChudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyQ29yZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJDb3JlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI1ZDVmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJDb3JlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5SZXNvdXJjZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDb3JlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJ2ZXJDb3JlVGVzdENhc2UuY2xhc3MsICJSdW50aW1lTG9jYXRvckRlbGVnYXRlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UnVudGltZXNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLQkJaWYgKHJ1bnRpbWVzICE9IG51bGwpIHsKLQkJCWludCBzaXplID0gcnVudGltZXMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKHJ1bnRpbWVzW2ldLmdldElkKCkgKyAiIC0gIiArIHJ1bnRpbWVzW2ldLmdldE5hbWUoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFNlcnZlcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLQkJaWYgKHNlcnZlcnMgIT0gbnVsbCkgewotCQkJaW50IHNpemUgPSBzZXJ2ZXJzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihzZXJ2ZXJzW2ldLmdldElkKCkgKyAiIC0gIiArIHNlcnZlcnNbaV0uZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluZFJ1bnRpbWVzMEV4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJU2VydmVyQ29yZS5maW5kUnVudGltZShudWxsKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluZFJ1bnRpbWVzMUV4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKFNlcnZlckNvcmUuZmluZFJ1bnRpbWUoIngiKSA9PSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmluZFNlcnZlcnMwRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIiwgZmFsc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmluZFNlcnZlcnMxRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoU2VydmVyQ29yZS5maW5kU2VydmVyKCJ4IikgPT0gbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UnVudGltZUV4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlSZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0UnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluZFJ1bnRpbWVUYXJnZXRIYW5kbGVyczBFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCVNlcnZlckNvcmUuZmluZFJ1bnRpbWVUYXJnZXRIYW5kbGVyKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiIsIGZhbHNlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5kUnVudGltZXNUYXJnZXRIYW5kbGVyMUV4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUYXJnZXRIYW5kbGVyKCJ4IikgPT0gbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSdW50aW1lTGlmZWN5Y2xlTGlzdGVuZXIoKSB7Ci0JCVNlcnZlckNvcmUuYWRkUnVudGltZUxpZmVjeWNsZUxpc3RlbmVyKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlUnVudGltZUxpZmVjeWNsZUxpc3RlbmVyKCkgewotCQlTZXJ2ZXJDb3JlLnJlbW92ZVJ1bnRpbWVMaWZlY3ljbGVMaXN0ZW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFkZFNlcnZlckxpZmVjeWNsZUxpc3RlbmVyKCkgewotCQlTZXJ2ZXJDb3JlLmFkZFNlcnZlckxpZmVjeWNsZUxpc3RlbmVyKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXIoKSB7Ci0JCVNlcnZlckNvcmUucmVtb3ZlU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXIobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlckV2ZW50VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlckV2ZW50VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4YTQ2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJFdmVudFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS4qOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyRXZlbnRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBTZXJ2ZXJFdmVudCBldmVudDsKLQkKLQlwcml2YXRlIHN0YXRpYyBpbnQgU0FNUExFX0tJTkQgPSBTZXJ2ZXJFdmVudC5TVEFURV9DSEFOR0U7Ci0JcHJpdmF0ZSBzdGF0aWMgSVNlcnZlciBTQU1QTEVfU0VSVkVSID0gY3JlYXRlU2FtcGxlU2VydmVyKCk7IAotCXByaXZhdGUgc3RhdGljIElNb2R1bGVbXSBTQU1QTEVfTU9EVUxFX1RSRUUgPSBuZXcgSU1vZHVsZVtdIHsgbnVsbCB9OwotCXByaXZhdGUgc3RhdGljIGludCBTQU1QTEVfU1RBVEUgPSAxOwotCXByaXZhdGUgc3RhdGljIGludCBTQU1QTEVfUFVCTElTSElOR19TVEFURSA9IDI7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBTQU1QTEVfUkVTVEFSVF9TVEFURSA9IHRydWU7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyRXZlbnRUZXN0Q2FzZS5jbGFzcywgIlNlcnZlckV2ZW50VGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgY3JlYXRlU2FtcGxlU2VydmVyKCkgewotCQlyZXR1cm4gbmV3IElTZXJ2ZXIoKSB7Ci0JCQlwdWJsaWMgaW50IGdldFNlcnZlclN0YXRlKCkgewotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcHVibGljIFN0cmluZyBnZXRNb2RlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIGludCBnZXRTZXJ2ZXJQdWJsaXNoU3RhdGUoKSB7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwdWJsaWMgaW50IGdldE1vZHVsZVB1Ymxpc2hTdGF0ZShJTW9kdWxlW10gbW9kdWxlKSB7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBhZGRTZXJ2ZXJMaXN0ZW5lcihJU2VydmVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCQkvLyBkbyBub3RoaW5nLgotCQkJfQotCQkJcHVibGljIHZvaWQgYWRkU2VydmVyTGlzdGVuZXIoSVNlcnZlckxpc3RlbmVyIGxpc3RlbmVyLCBpbnQgZXZlbnRNYXNrKSB7Ci0JCQkJLy8gZG8gbm90aGluZy4KLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHJlbW92ZVNlcnZlckxpc3RlbmVyKElTZXJ2ZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJCS8vIGRvIG5vdGhpbmcuCi0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBjYW5QdWJsaXNoKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIGJvb2xlYW4gc2hvdWxkUHVibGlzaCgpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBwdWJsaXNoKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgcHVibGlzaChpbnQga2luZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBjYW5TdGFydChTdHJpbmcgbGF1bmNoTW9kZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElMYXVuY2hDb25maWd1cmF0aW9uIGdldExhdW5jaENvbmZpZ3VyYXRpb24oYm9vbGVhbiBjcmVhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElMYXVuY2ggc3RhcnQoU3RyaW5nIGxhdW5jaE1vZGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElMYXVuY2ggc3luY2hyb25vdXNTdGFydChTdHJpbmcgbGF1bmNoTW9kZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBjYW5SZXN0YXJ0KFN0cmluZyBtb2RlKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgYm9vbGVhbiBnZXRTZXJ2ZXJSZXN0YXJ0U3RhdGUoKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcHVibGljIHZvaWQgcmVzdGFydChTdHJpbmcgbW9kZSkgewotCQkJCS8vIGRvIG5vdGhpbmcuCi0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBzeW5jaHJvbm91c1Jlc3RhcnQoU3RyaW5nIGxhdW5jaE1vZGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIGRvIG5vdGhpbmcuCi0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBjYW5TdG9wKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBzdG9wKGJvb2xlYW4gZm9yY2UpIHsKLQkJCQkvLyBkbyBub3RoaW5nLgotCQkJfQotCQkJcHVibGljIHZvaWQgc3luY2hyb25vdXNTdG9wKGJvb2xlYW4gZm9yY2UpIHsKLQkJCQkvLyBkbyBub3RoaW5nLgotCQkJfQotCQkJcHVibGljIElTdGF0dXMgY2FuUmVzdGFydE1vZHVsZShJTW9kdWxlW10gbW9kdWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBib29sZWFuIGdldE1vZHVsZVJlc3RhcnRTdGF0ZShJTW9kdWxlW10gbW9kdWxlKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcHVibGljIHZvaWQgcmVzdGFydE1vZHVsZShJTW9kdWxlW10gbW9kdWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBkbyBub3RoaW5nLgotCQkJfQotCQkJcHVibGljIHZvaWQgc3luY2hyb25vdXNSZXN0YXJ0TW9kdWxlKElNb2R1bGVbXSBtb2R1bGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIGRvIG5vdGhpbmcuCi0JCQl9Ci0JCQlwdWJsaWMgaW50IGdldE1vZHVsZVN0YXRlKElNb2R1bGVbXSBtb2R1bGUpIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXB1YmxpYyBJTW9kdWxlW10gZ2V0U2VydmVyTW9kdWxlcyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBkZWxldGUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8gZG8gbm90aGluZy4KLQkJCX0KLQkJCXB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcHVibGljIGJvb2xlYW4gaXNQcml2YXRlKCkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCXB1YmxpYyBib29sZWFuIGlzV29ya2luZ0NvcHkoKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcHVibGljIGJvb2xlYW4gaXNEZWxlZ2F0ZUxvYWRlZCgpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGxvYWRBZGFwdGVyKENsYXNzIGMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgdmFsaWRhdGVFZGl0KE9iamVjdCBjb250ZXh0KSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgaW50IGdldFRpbWVzdGFtcCgpIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBJRmlsZSBnZXRGaWxlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElSdW50aW1lIGdldFJ1bnRpbWUoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBJRm9sZGVyIGdldFNlcnZlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgSVNlcnZlcldvcmtpbmdDb3B5IGNyZWF0ZVdvcmtpbmdDb3B5KCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElNb2R1bGVbXSBnZXRNb2R1bGVzKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgY2FuTW9kaWZ5TW9kdWxlcyhJTW9kdWxlW10gYWRkLCBJTW9kdWxlW10gcmVtb3ZlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCXB1YmxpYyBJTW9kdWxlW10gZ2V0Q2hpbGRNb2R1bGVzKElNb2R1bGVbXSBtb2R1bGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIElNb2R1bGVbXSBnZXRSb290TW9kdWxlcyhJTW9kdWxlIG1vZHVsZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlwdWJsaWMgU2VydmVyUG9ydFtdIGdldFNlcnZlclBvcnRzKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTZXJ2ZXJFdmVudCBjcmVhdGVTYW1wbGVTZXJ2ZXJFdmVudCgpIHsKLQkJcmV0dXJuIG5ldyBTZXJ2ZXJFdmVudChTQU1QTEVfS0lORCwgU0FNUExFX1NFUlZFUiwgU0FNUExFX1NUQVRFLCBTQU1QTEVfUFVCTElTSElOR19TVEFURSwgU0FNUExFX1JFU1RBUlRfU1RBVEUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDEwQ3JlYXRlU2VydmVyRXZlbnQoKSB7Ci0JCWV2ZW50ID0gU2VydmVyRXZlbnRUZXN0Q2FzZS5jcmVhdGVTYW1wbGVTZXJ2ZXJFdmVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDExU2VydmVyR2V0S2luZCgpIHsKLQkJYXNzZXJ0VHJ1ZSgoZXZlbnQuZ2V0S2luZCgpICYgKFNlcnZlckV2ZW50LlNFUlZFUl9DSEFOR0UgfCBTQU1QTEVfS0lORCkpICE9IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDEzU2VydmVyR2V0UHVibGlzaGluZ1N0YXRlKCkgewotCQlhc3NlcnRFcXVhbHMoU0FNUExFX1BVQkxJU0hJTkdfU1RBVEUsIGV2ZW50LmdldFB1Ymxpc2hTdGF0ZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxNFNlcnZlckdldFJlc3RhcnRTdGF0ZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKFNBTVBMRV9SRVNUQVJUX1NUQVRFLCBldmVudC5nZXRSZXN0YXJ0U3RhdGUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMTVTZXJ2ZXJHZXRTZXJ2ZXIoKSB7Ci0JCWFzc2VydEVxdWFscyhTQU1QTEVfU0VSVkVSLCBldmVudC5nZXRTZXJ2ZXIoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMTZTZXJ2ZXJHZXRTdGF0ZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKFNBTVBMRV9TVEFURSxldmVudC5nZXRTdGF0ZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExMENyZWF0ZU1vZHVsZUV2ZW50KCkgewotCQl0cnkgewotCQkJZXZlbnQgPSBuZXcgU2VydmVyRXZlbnQoU0FNUExFX0tJTkQsIFNBTVBMRV9TRVJWRVIsIFNBTVBMRV9NT0RVTEVfVFJFRSwgU0FNUExFX1NUQVRFLCBTQU1QTEVfUFVCTElTSElOR19TVEFURSwgU0FNUExFX1JFU1RBUlRfU1RBVEUpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExMU1vZHVsZUdldEtpbmQoKSB7Ci0JCWFzc2VydFRydWUoKGV2ZW50LmdldEtpbmQoKSAmIChTZXJ2ZXJFdmVudC5NT0RVTEVfQ0hBTkdFIHwgU0FNUExFX0tJTkQpKSAhPSAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExMk1vZHVsZUdldE1vZHVsZVRyZWUoKSB7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRFcXVhbHMoU0FNUExFX01PRFVMRV9UUkVFLCBldmVudC5nZXRNb2R1bGUoKSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBhbGxvdyBmYWlsdXJlIGZvciBub3cgLSB3aWxsIG5lZWQgdG8gZml4IHRoaXMgdGVzdAotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDExM01vZHVsZUdldFB1Ymxpc2hpbmdTdGF0ZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKFNBTVBMRV9QVUJMSVNISU5HX1NUQVRFLCBldmVudC5nZXRQdWJsaXNoU3RhdGUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMTRNb2R1bGVHZXRSZXN0YXJ0U3RhdGUoKSB7Ci0JCWFzc2VydEVxdWFscyhTQU1QTEVfUkVTVEFSVF9TVEFURSwgZXZlbnQuZ2V0UmVzdGFydFN0YXRlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTE1TW9kdWxlR2V0U2VydmVyKCkgewotCQlhc3NlcnRFcXVhbHMoU0FNUExFX1NFUlZFUiwgZXZlbnQuZ2V0U2VydmVyKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTE2TW9kdWxlR2V0U3RhdGUoKSB7Ci0JCWFzc2VydEVxdWFscyhTQU1QTEVfU1RBVEUsZXZlbnQuZ2V0U3RhdGUoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlckxpZmVjeWNsZUFkYXB0ZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyTGlmZWN5Y2xlQWRhcHRlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNjM5MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyTGlmZWN5Y2xlQWRhcHRlclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLlNlcnZlckxpZmVjeWNsZUFkYXB0ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJMaWZlY3ljbGVBZGFwdGVyVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdExpc3RlbmVyKCkgewotCQlTZXJ2ZXJMaWZlY3ljbGVBZGFwdGVyIGxpc3RlbmVyID0gbmV3IFNlcnZlckxpZmVjeWNsZUFkYXB0ZXIoKTsKLQkJCi0JCWxpc3RlbmVyLnNlcnZlckFkZGVkKG51bGwpOwotCQlsaXN0ZW5lci5zZXJ2ZXJDaGFuZ2VkKG51bGwpOwotCQlsaXN0ZW5lci5zZXJ2ZXJSZW1vdmVkKG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJMaWZlY3ljbGVMaXN0ZW5lclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJMaWZlY3ljbGVMaXN0ZW5lclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MmQ3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlckxpZmVjeWNsZUxpc3RlbmVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXJUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0TGlzdGVuZXIoKSB7Ci0JCUlTZXJ2ZXJMaWZlY3ljbGVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJU2VydmVyTGlmZWN5Y2xlTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBzZXJ2ZXJBZGRlZChJU2VydmVyIHNlcnZlcikgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBzZXJ2ZXJDaGFuZ2VkKElTZXJ2ZXIgc2VydmVyKSB7Ci0JCQkJLy8gaWdub3JlCi0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHNlcnZlclJlbW92ZWQoSVNlcnZlciBzZXJ2ZXIpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQkJfTsKLQkJCi0JCWxpc3RlbmVyLnNlcnZlckFkZGVkKG51bGwpOwotCQlsaXN0ZW5lci5zZXJ2ZXJDaGFuZ2VkKG51bGwpOwotCQlsaXN0ZW5lci5zZXJ2ZXJSZW1vdmVkKG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJMaXN0ZW5lclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJMaXN0ZW5lclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MzE0YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyTGlzdGVuZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJFdmVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckxpc3RlbmVyVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdExpc3RlbmVyKCkgewotCQlJU2VydmVyTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVNlcnZlckxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgc2VydmVyQ2hhbmdlZChTZXJ2ZXJFdmVudCBldmVudCkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQkJfTsKLQkJbGlzdGVuZXIuc2VydmVyQ2hhbmdlZChudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyUG9ydFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJQb3J0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwOGRhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJQb3J0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclBvcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJQb3J0VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJ2ZXJQb3J0VGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJQb3J0VGVzdENhc2UiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlUG9ydCgpIHRocm93cyBFeGNlcHRpb24gewotCQluZXcgU2VydmVyUG9ydChudWxsLCBudWxsLCAwLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDJDcmVhdGVQb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCW5ldyBTZXJ2ZXJQb3J0KG51bGwsIG51bGwsIDAsIG51bGwsIG51bGwsIGZhbHNlKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvU2VydmVyUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmUzODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlclByZWZlcmVuY2VzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotoCoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJQcmVmZXJlbmNlczsKLQotcHVibGljIGNsYXNzIFNlcnZlclByZWZlcmVuY2VzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTZXJ2ZXJQcmVmZXJlbmNlcyBwcmVmczsJCi0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJQcmVmZXJlbmNlc1Rlc3RDYXNlLmNsYXNzLCAiU2VydmVyUHJlZmVyZW5jZXNUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMEdldFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMgPSBTZXJ2ZXJQcmVmZXJlbmNlcy5nZXRJbnN0YW5jZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMUdldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuaXNBdXRvUHVibGlzaGluZygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuaXNBdXRvUmVzdGFydGluZygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwM0dldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuaXNDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldEF1dG9QdWJsaXNoaW5nKGZhbHNlKTsKLQkJYXNzZXJ0RmFsc2UocHJlZnMuaXNBdXRvUHVibGlzaGluZygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA1U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRBdXRvUHVibGlzaGluZyh0cnVlKTsKLQkJYXNzZXJ0VHJ1ZShwcmVmcy5pc0F1dG9QdWJsaXNoaW5nKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldEF1dG9SZXN0YXJ0aW5nKGZhbHNlKTsKLQkJYXNzZXJ0RmFsc2UocHJlZnMuaXNBdXRvUmVzdGFydGluZygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRBdXRvUmVzdGFydGluZyh0cnVlKTsKLQkJYXNzZXJ0VHJ1ZShwcmVmcy5pc0F1dG9SZXN0YXJ0aW5nKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldENyZWF0ZVJlc291cmNlc0luV29ya3NwYWNlKGZhbHNlKTsKLQkJYXNzZXJ0RmFsc2UocHJlZnMuaXNDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA5U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSh0cnVlKTsKLQkJYXNzZXJ0VHJ1ZShwcmVmcy5pc0NyZWF0ZVJlc291cmNlc0luV29ya3NwYWNlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBEZWZhdWx0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRBdXRvUHVibGlzaGluZyhwcmVmcy5pc0RlZmF1bHRBdXRvUHVibGlzaGluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKHByZWZzLmlzQXV0b1B1Ymxpc2hpbmcoKSwgcHJlZnMuaXNEZWZhdWx0QXV0b1B1Ymxpc2hpbmcoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMURlZmF1bHRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldEF1dG9SZXN0YXJ0aW5nKHByZWZzLmlzRGVmYXVsdEF1dG9SZXN0YXJ0aW5nKCkpOwotCQlhc3NlcnRFcXVhbHMocHJlZnMuaXNBdXRvUmVzdGFydGluZygpLCBwcmVmcy5pc0RlZmF1bHRBdXRvUmVzdGFydGluZygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDEyRGVmYXVsdFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuc2V0Q3JlYXRlUmVzb3VyY2VzSW5Xb3Jrc3BhY2UocHJlZnMuaXNEZWZhdWx0Q3JlYXRlUmVzb3VyY2VzSW5Xb3Jrc3BhY2UoKSk7Ci0JCWFzc2VydEVxdWFscyhwcmVmcy5pc0NyZWF0ZVJlc291cmNlc0luV29ya3NwYWNlKCksIHByZWZzLmlzRGVmYXVsdENyZWF0ZVJlc291cmNlc0luV29ya3NwYWNlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9TZXJ2ZXJVdGlsVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlclV0aWxUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTE5OGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1NlcnZlclV0aWxUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5SZXNvdXJjZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJVdGlsVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJ2ZXJVdGlsVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJVdGlsVGVzdENhc2UiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmRTZXJ2ZXIwRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZU1hbmFnZXIuZmluZFNlcnZlcihudWxsKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaW5kU2VydmVyMUV4dGVuc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJtaXNzaW5ncHJvamVjdC90ZXN0IikpOwotCQlhc3NlcnRUcnVlKFJlc291cmNlTWFuYWdlci5maW5kU2VydmVyKGZpbGUpID09IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2R1bGUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlTZXJ2ZXJVdGlsLmdldE1vZHVsZShudWxsKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kdWxlMigpIHRocm93cyBFeGNlcHRpb24gewotCQlTZXJ2ZXJVdGlsLmdldE1vZHVsZSgieCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kdWxlczAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU2VydmVyVXRpbC5nZXRNb2R1bGVzKChJTW9kdWxlVHlwZVtdKSBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldE1vZHVsZXMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNlcnZlclV0aWwuZ2V0TW9kdWxlcygoSVByb2plY3QpIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kdWxlczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU2VydmVyVXRpbC5nZXRNb2R1bGVzKChTdHJpbmcpIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SXNTdXBwb3J0ZWRNb2R1bGUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlTZXJ2ZXJVdGlsLmlzU3VwcG9ydGVkTW9kdWxlKChJTW9kdWxlVHlwZSkgbnVsbCwgbnVsbCk7Ci0JCQlhc3NlcnRUcnVlKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIiwgZmFsc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzU3VwcG9ydGVkTW9kdWxlMSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTZXJ2ZXJVdGlsLmlzU3VwcG9ydGVkTW9kdWxlKChJTW9kdWxlVHlwZVtdKSBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzU3VwcG9ydGVkTW9kdWxlMigpIHRocm93cyBFeGNlcHRpb24gewotCQlTZXJ2ZXJVdGlsLmlzU3VwcG9ydGVkTW9kdWxlKG51bGwsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TW9kdWxlcygpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKG51bGwsIG51bGwsIG51bGwsIG51bGwpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiIsIGZhbHNlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRTZXJ2ZXJEZWZhdWx0TmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJU2VydmVyVXRpbC5zZXRTZXJ2ZXJEZWZhdWx0TmFtZShudWxsKTsKLQkJCWFzc2VydFRydWUoIlNob3VsZCB0aHJvdyBleGNlcHRpb24iLCBmYWxzZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VW51c2VkU2VydmVyRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJU2VydmVyVXRpbC5nZXRVbnVzZWRTZXJ2ZXJGaWxlKG51bGwsIG51bGwpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiIsIGZhbHNlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRSdW50aW1lcygpIHRocm93cyBFeGNlcHRpb24gewotCQlTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UnVudGltZVR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNlcnZlclV0aWwuZ2V0UnVudGltZVR5cGVzKG51bGwsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXZhaWxhYmxlU2VydmVyc0Zvck1vZHVsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTZXJ2ZXJVdGlsLmdldEF2YWlsYWJsZVNlcnZlcnNGb3JNb2R1bGUobnVsbCwgZmFsc2UsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VydmVyc0J5TW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGFpbnNNb2R1bGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU2VydmVyVXRpbC5jb250YWluc01vZHVsZShudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJU2VydmVyVXRpbC5nZXRTZXJ2ZXIobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVFZGl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlTZXJ2ZXJVdGlsLnZhbGlkYXRlRWRpdChudWxsLCBudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1Rhc2tNb2RlbFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9UYXNrTW9kZWxUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjZmZWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1Rhc2tNb2RlbFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5UYXNrTW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUYXNrTW9kZWxUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFRhc2tNb2RlbCB0YXNrTW9kZWw7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQl0YXNrTW9kZWwgPSBuZXcgVGFza01vZGVsKCk7CQkKLQkJdGFza01vZGVsLmdldE9iamVjdCgidGVzdCIpOwotCQl0YXNrTW9kZWwucHV0T2JqZWN0KCJ0ZXN0IiwgInRlc3QiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MTQyYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNCBFdGVyYXRpb24gQmlsaXNpbSBBLlMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuID8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIERlbml6IFNlY2lsaXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSogCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEVURVJBVElPTiBBLlMuIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgRXRlcmF0aW9uIEJpbGlzaW0gQS5TLiAgRm9yIG1vcmUKLSogaW5mb3JtYXRpb24gb24gZXRlcmF0aW9uLCBwbGVhc2Ugc2VlCi0qIDxodHRwOi8vd3d3LmV0ZXJhdGlvbi5jb20vPi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0L0Fic3RyYWN0UnVudGltZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHQvQWJzdHJhY3RSdW50aW1lVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDliYzNlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHQvQWJzdHJhY3RSdW50aW1lVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuZXh0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5SdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5SdW50aW1lRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci0vKioKLSAqIEFic3RyYWN0IHJ1bnRpbWUgdGVzdCBjYXNlLiBVc2UgdGhpcyBoYXJuZXNzIHRvIHRlc3QgYSBzcGVjaWZpYyBydW50aW1lLgotICogQWxsIHlvdSBoYXZlIHRvIGRvIGlzIGV4dGVuZCB0aGlzIGNsYXNzLCBpbXBsZW1lbnQgdGhlIGFic3RyYWN0Ci0gKiBtZXRob2QocykgYW5kIGFkZCB0aGUgdGVzdCBjYXNlIHRvIHlvdXIgc3VpdGUuCi0gKiA8cD4KLSAqIFlvdSBhcmUgd2VsY29tZSB0byBhZGQgdHlwZS1zcGVjaWZpYyB0ZXN0cyB0byB0aGlzIG1ldGhvZC4gVGhlIHRlc3QKLSAqIG1ldGhvZCBudW1iZXJzIChpLmUuIHRoZSBYWCBpbiB0ZXN0WFgoKSkgc2hvdWxkIGJlIGJldHdlZW4gMjAwIGFuZCAxMDAwLgotICogPC9wPgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSdW50aW1lVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBwcm9qZWN0OwotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3RQcm9wZXJ0aWVzIHByb3BzOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUnVudGltZSBydW50aW1lOwotCXByb3RlY3RlZCBzdGF0aWMgSVJ1bnRpbWVXb3JraW5nQ29weSBydW50aW1lV0M7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShBYnN0cmFjdFJ1bnRpbWVUZXN0Q2FzZS5jbGFzcywgIkFic3RyYWN0UnVudGltZVRlc3RDYXNlIik7Ci0JfQotCi0JcHJvdGVjdGVkIElSdW50aW1lIGdldFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKHJ1bnRpbWUgPT0gbnVsbCkKLQkJCXJ1bnRpbWUgPSBjcmVhdGVSdW50aW1lKCk7Ci0JCQotCQlyZXR1cm4gcnVudGltZTsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3QgSVJ1bnRpbWUgY3JlYXRlUnVudGltZSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JcHVibGljIGFic3RyYWN0IHZvaWQgZGVsZXRlUnVudGltZShJUnVudGltZSBydW50aW1lMikgdGhyb3dzIEV4Y2VwdGlvbjsKLQotCXB1YmxpYyB2b2lkIHRlc3QwMDAwR2V0UHJvcGVydGllcygpIHRocm93cyBFeGNlcHRpb24gewotCQlwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJ0ZXN0Iik7Ci0JCWlmIChwcm9qZWN0ICE9IG51bGwgJiYgIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCQl9Ci0JCXByb3BzID0gU2VydmVyQ29yZS5nZXRQcm9qZWN0UHJvcGVydGllcyhwcm9qZWN0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAwMUdldFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0TnVsbChwcm9wcy5nZXRSdW50aW1lVGFyZ2V0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMDAyU2V0UnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlwcm9wcy5zZXRSdW50aW1lVGFyZ2V0KGdldFJ1bnRpbWUoKSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhwcm9wcy5nZXRSdW50aW1lVGFyZ2V0KCksIGdldFJ1bnRpbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDNVbnNldFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJvcHMuc2V0UnVudGltZVRhcmdldChudWxsLCBudWxsKTsKLQkJYXNzZXJ0TnVsbChwcm9wcy5nZXRSdW50aW1lVGFyZ2V0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMDA0RW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMDA1RGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZ2V0UnVudGltZSgpLmdldEFkYXB0ZXIoUnVudGltZURlbGVnYXRlLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAwNlZhbGlkYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gZ2V0UnVudGltZSgpLnZhbGlkYXRlKG51bGwpOwotCQlhc3NlcnRUcnVlKHN0YXR1cy5pc09LKCkgfHwgc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMDdWYWxpZGF0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gZ2V0UnVudGltZSgpLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JCXdjLnNldExvY2F0aW9uKG51bGwpOwotCQlJU3RhdHVzIHN0YXR1cyA9IHdjLnZhbGlkYXRlKG51bGwpOwotCQlhc3NlcnRUcnVlKCFzdGF0dXMuaXNPSygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAwOE1vZGlmeVJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVXb3JraW5nQ29weSB3YyA9IGdldFJ1bnRpbWUoKS5jcmVhdGVXb3JraW5nQ29weSgpOwotCQlTdHJpbmcgbmFtZSA9IHdjLmdldE5hbWUoKTsKLQkJd2Muc2V0TmFtZShuYW1lICsgIngiKTsKLQkJd2Muc2V0TmFtZShuYW1lKTsKLQkJd2Muc2F2ZShmYWxzZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDlJc1ByaXZhdGUoKSB7Ci0JCSgoUnVudGltZSlydW50aW1lKS5pc1ByaXZhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMTBJc1JlYWRPbmx5KCkgewotCQlydW50aW1lLmlzUmVhZE9ubHkoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAxMkdldFRpbWVzdGFtcCgpIHsKLQkJKChSdW50aW1lKXJ1bnRpbWUpLmdldFRpbWVzdGFtcCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxM0dldFJ1bnRpbWVUeXBlKCkgewotCQlhc3NlcnROb3ROdWxsKHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDE0R2V0TG9jYXRpb24oKSB7Ci0JCWFzc2VydE5vdE51bGwocnVudGltZS5nZXRMb2NhdGlvbigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMTVJc1N0dWIoKSB7Ci0JCXJ1bnRpbWUuaXNTdHViKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDE2Q3JlYXRlV29ya2luZ0NvcHkoKSB7Ci0JCXJ1bnRpbWVXQyA9IHJ1bnRpbWUuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMTdJc0RpcnR5KCkgewotCQlhc3NlcnRGYWxzZShydW50aW1lV0MuaXNEaXJ0eSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMThTZXRSZWFkT25seSgpIHsKLQkJcnVudGltZVdDLnNldFJlYWRPbmx5KHRydWUpOwotCQlydW50aW1lV0Muc2V0UmVhZE9ubHkoZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxOVNldFN0dWIoKSB7Ci0JCXJ1bnRpbWVXQy5zZXRTdHViKHRydWUpOwotCQlydW50aW1lV0Muc2V0U3R1YihmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDE5SXNEaXJ0eSgpIHsKLQkJYXNzZXJ0VHJ1ZShydW50aW1lV0MuaXNEaXJ0eSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjBBZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgewotCQlydW50aW1lV0MuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjBSZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgewotCQlydW50aW1lV0MucmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjFDbGVhcigpIHsKLQkJcnVudGltZVdDID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTAwMURlbGV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxldGVSdW50aW1lKGdldFJ1bnRpbWUoKSk7Ci0JCXJ1bnRpbWUgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHQvQWJzdHJhY3RTZXJ2ZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0L0Fic3RyYWN0U2VydmVyVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkMjk5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHQvQWJzdHJhY3RTZXJ2ZXJUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotoCoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuU2VydmVyQmVoYXZpb3VyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLlNlcnZlckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotLyoqCi0gKiBBYnN0cmFjdCBzZXJ2ZXIgdGVzdCBjYXNlLiBVc2UgdGhpcyBoYXJuZXNzIHRvIHRlc3QgYSBzcGVjaWZpYyBzZXJ2ZXIuCi0gKiBBbGwgeW91IGhhdmUgdG8gZG8gaXMgZXh0ZW5kIHRoaXMgY2xhc3MsIGltcGxlbWVudCB0aGUgYWJzdHJhY3QKLSAqIG1ldGhvZChzKSBhbmQgYWRkIHRoZSB0ZXN0IGNhc2UgdG8geW91ciBzdWl0ZS4KLSAqIDxwPgotICogWW91IGFyZSB3ZWxjb21lIHRvIGFkZCB0eXBlLXNwZWNpZmljIHRlc3RzIHRvIHRoaXMgbWV0aG9kLiBUaGUgdGVzdAotICogbWV0aG9kIG51bWJlcnMgKGkuZS4gdGhlIFhYIGluIHRlc3RYWCgpKSBzaG91bGQgYmUgYmV0d2VlbiAyMDAgYW5kIDEwMDAuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlcnZlclRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgcHJvamVjdDsKLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0UHJvcGVydGllcyBwcm9wczsKLQkKLQlwcm90ZWN0ZWQgc3RhdGljIElTZXJ2ZXIgc2VydmVyOwotCXByb3RlY3RlZCBzdGF0aWMgSVNlcnZlckF0dHJpYnV0ZXMgc2VydmVyQXR0cjsKLQlwcm90ZWN0ZWQgc3RhdGljIElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXQzsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShBYnN0cmFjdFNlcnZlclRlc3RDYXNlLmNsYXNzLCAiQWJzdHJhY3RTZXJ2ZXJUZXN0Q2FzZSIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgSVNlcnZlciBnZXRTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKHNlcnZlciA9PSBudWxsKSB7Ci0JCQlzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTsKLQkJCQotCQkJLy8gdGVzdCBzYXZlIGFsbAotCQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gc2VydmVyLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JCQl3Yy5zYXZlQWxsKGZhbHNlLCBudWxsKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNlcnZlcjsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3QgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGRlbGV0ZVNlcnZlcihJU2VydmVyIHNlcnZlcjIpIHRocm93cyBFeGNlcHRpb247Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAwMEdldFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgidGVzdCIpOwotCQlpZiAocHJvamVjdCAhPSBudWxsICYmICFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkJCXByb2plY3Qub3BlbihudWxsKTsKLQkJfQotCQlwcm9wcyA9IFNlcnZlckNvcmUuZ2V0UHJvamVjdFByb3BlcnRpZXMocHJvamVjdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDFHZXRTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0TnVsbChwcm9wcy5nZXREZWZhdWx0U2VydmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMDAyU2V0U2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByb3BzLnNldERlZmF1bHRTZXJ2ZXIoZ2V0U2VydmVyKCksIG51bGwpOwotCQlhc3NlcnRFcXVhbHMocHJvcHMuZ2V0RGVmYXVsdFNlcnZlcigpLCBnZXRTZXJ2ZXIoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDNVblNldFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcm9wcy5zZXREZWZhdWx0U2VydmVyKG51bGwsIG51bGwpOwotCQlhc3NlcnROdWxsKHByb3BzLmdldERlZmF1bHRTZXJ2ZXIoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDRFbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwMDVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlnZXRTZXJ2ZXIoKS5nZXRBZGFwdGVyKFNlcnZlckRlbGVnYXRlLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDAwNkRlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWdldFNlcnZlcigpLmdldEFkYXB0ZXIoU2VydmVyQmVoYXZpb3VyRGVsZWdhdGUuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAwN1B1Ymxpc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZ2V0U2VydmVyKCkucHVibGlzaChJU2VydmVyLlBVQkxJU0hfRlVMTCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDA4Q2FuUnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUoZ2V0U2VydmVyKCkuY2FuU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUpLmlzT0soKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDA5UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWdldFNlcnZlcigpLnN5bmNocm9ub3VzU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxMENhblN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZShnZXRTZXJ2ZXIoKS5jYW5TdG9wKCkuaXNPSygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMTFTdG9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWdldFNlcnZlcigpLnN5bmNocm9ub3VzU3RvcChmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDEyQ2FuRGVidWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0VHJ1ZShnZXRTZXJ2ZXIoKS5jYW5TdGFydChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFKS5pc09LKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxM0RlYnVnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxNENhblN0b3AoKSB7Ci0JCWFzc2VydFRydWUoc2VydmVyLmNhblN0b3AoKS5pc09LKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxNVN0b3AoKSB7Ci0JCXNlcnZlci5zeW5jaHJvbm91c1N0b3AoZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAxNkdldFNlcnZlclBvcnRzKCkgewotCQlTZXJ2ZXJQb3J0W10gcG9ydHMgPSBzZXJ2ZXIuZ2V0U2VydmVyUG9ydHMobnVsbCk7Ci0JCWlmIChwb3J0cyAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IHBvcnRzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJcG9ydHNbaV0uZ2V0SWQoKTsKLQkJCQlwb3J0c1tpXS5nZXRDb250ZW50VHlwZXMoKTsKLQkJCQlwb3J0c1tpXS5nZXROYW1lKCk7Ci0JCQkJcG9ydHNbaV0uZ2V0UG9ydCgpOwotCQkJCXBvcnRzW2ldLmdldFByb3RvY29sKCk7Ci0JCQkJcG9ydHNbaV0uaXNBZHZhbmNlZCgpOwotCQkJCXBvcnRzW2ldLnRvU3RyaW5nKCk7Ci0JCQkJcG9ydHNbaV0uZXF1YWxzKG51bGwpOwotCQkJCXBvcnRzW2ldLmhhc2hDb2RlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMTdHZXRTZXJ2ZXJTdGF0ZSgpIHsKLQkJc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDE4R2V0U2VydmVyUHVibGlzaFN0YXRlKCkgewotCQlzZXJ2ZXIuZ2V0U2VydmVyUHVibGlzaFN0YXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDE5R2V0U2VydmVyUmVzdGFydFN0YXRlKCkgewotCQlzZXJ2ZXIuZ2V0U2VydmVyUmVzdGFydFN0YXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDIwR2V0TW9kdWxlU3RhdGUoKSB7Ci0JCXNlcnZlci5nZXRNb2R1bGVTdGF0ZShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjFHZXRNb2R1bGVQdWJsaXNoU3RhdGUoKSB7Ci0JCXNlcnZlci5nZXRNb2R1bGVQdWJsaXNoU3RhdGUobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDIyR2V0TW9kdWxlUmVzdGFydFN0YXRlKCkgewotCQlzZXJ2ZXIuZ2V0TW9kdWxlUmVzdGFydFN0YXRlKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAyM0dldE1vZGUoKSB7Ci0JCXNlcnZlci5nZXRNb2RlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDI0Q2FuUHVibGlzaCgpIHsKLQkJc2VydmVyLmNhblB1Ymxpc2goKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjVDYW5SZXN0YXJ0KCkgewotCQlzZXJ2ZXIuY2FuUmVzdGFydCgicnVuIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDI2Q2FuUmVzdGFydE1vZHVsZSgpIHsKLQkJc2VydmVyLmNhblJlc3RhcnRNb2R1bGUobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDI3QWRkU2VydmVyTGlzdGVuZXIoKSB7Ci0JCXNlcnZlci5hZGRTZXJ2ZXJMaXN0ZW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMjhBZGRTZXJ2ZXJMaXN0ZW5lcigpIHsKLQkJc2VydmVyLmFkZFNlcnZlckxpc3RlbmVyKG51bGwsIDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAyOVJlbW92ZVNlcnZlckxpc3RlbmVyKCkgewotCQlzZXJ2ZXIucmVtb3ZlU2VydmVyTGlzdGVuZXIobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDMwR2V0U2VydmVyQXR0cmlidXRlcygpIHsKLQkJc2VydmVyQXR0ciA9IHNlcnZlcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMzFHZXROYW1lKCkgewotCQlzZXJ2ZXJBdHRyLmdldE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwMzJHZXRJZCgpIHsKLQkJc2VydmVyQXR0ci5nZXRJZCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzM0lzUmVhZE9ubHkoKSB7Ci0JCXNlcnZlckF0dHIuaXNSZWFkT25seSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzNElzV29ya2luZ0NvcHkoKSB7Ci0JCXNlcnZlckF0dHIuaXNXb3JraW5nQ29weSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzNUdldEhvc3QoKSB7Ci0JCXNlcnZlckF0dHIuZ2V0SG9zdCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzNkdldFJ1bnRpbWUoKSB7Ci0JCXNlcnZlckF0dHIuZ2V0UnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzN0dldFNlcnZlclR5cGUoKSB7Ci0JCXNlcnZlckF0dHIuZ2V0U2VydmVyVHlwZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzOEdldFNlcnZlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCXNlcnZlckF0dHIuZ2V0U2VydmVyQ29uZmlndXJhdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDAzOUNyZWF0ZVdvcmtpbmdDb3B5KCkgewotCQlzZXJ2ZXJBdHRyLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDQwR2V0TW9kdWxlcygpIHsKLQkJc2VydmVyQXR0ci5nZXRNb2R1bGVzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDQxQ2FuTW9kaWZ5TW9kdWxlcygpIHsKLQkJc2VydmVyQXR0ci5jYW5Nb2RpZnlNb2R1bGVzKG51bGwsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDA0MkdldENoaWxkTW9kdWxlcygpIHsKLQkJc2VydmVyQXR0ci5nZXRDaGlsZE1vZHVsZXMobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDQzR2V0Um9vdE1vZHVsZXMoKSB7Ci0JCXRyeSB7Ci0JCQlzZXJ2ZXJBdHRyLmdldFJvb3RNb2R1bGVzKG51bGwsIG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNDRHZXRTZXJ2ZXJQb3J0cygpIHsKLQkJc2VydmVyQXR0ci5nZXRTZXJ2ZXJQb3J0cyhudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNDVEZWxldGUoKSB7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyQXR0cmlidXRlcyBzYSA9IHNlcnZlckF0dHIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJCXNhLmRlbGV0ZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNDZDcmVhdGVXb3JraW5nQ29weSgpIHsKLQkJc2VydmVyV0MgPSBzZXJ2ZXIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNDdJc0RpcnR5KCkgewotCQlhc3NlcnRGYWxzZShzZXJ2ZXJXQy5pc0RpcnR5KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDA0OFNldE5hbWUoKSB7Ci0JCXNlcnZlcldDLnNldE5hbWUoInRlc3QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNDlTZXRIb3N0KCkgewotCQlzZXJ2ZXJXQy5zZXRIb3N0KCJ3d3cuZWNsaXBzZS5vcmciKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNTBTZXRSZWFkT25seSgpIHsKLQkJc2VydmVyV0Muc2V0UmVhZE9ubHkodHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDUxSXNEaXJ0eSgpIHsKLQkJYXNzZXJ0VHJ1ZShzZXJ2ZXJXQy5pc0RpcnR5KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDA1MkFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCXNlcnZlcldDLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDUzUmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKLQkJc2VydmVyV0MucmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAwNTRHZXRPcmlnaW5hbCgpIHsKLQkJc2VydmVyV0MuZ2V0T3JpZ2luYWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDA1NVNldFNlcnZlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCXNlcnZlcldDLnNldFNlcnZlckNvbmZpZ3VyYXRpb24obnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMDU2TW9kaWZ5TW9kdWxlcygpIHsKLQkJdHJ5IHsKLQkJCXNlcnZlcldDLm1vZGlmeU1vZHVsZXMobnVsbCwgbnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDA1N0NsZWFyKCkgewotCQlzZXJ2ZXJBdHRyID0gbnVsbDsKLQkJc2VydmVyV0MgPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxMDAxRGVsZXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGV0ZVNlcnZlcihnZXRTZXJ2ZXIoKSk7Ci0JCXNlcnZlciA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9DbGllbnRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9DbGllbnRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmMTJhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vQ2xpZW50c1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuZXh0ZW5zaW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuU2VydmVyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50c1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ2xpZW50c1Rlc3RDYXNlLmNsYXNzLCAiQ2xpZW50c1Rlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsaWVudHNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUNsaWVudFtdIGNsaWVudHMgPSBTZXJ2ZXJQbHVnaW4uZ2V0Q2xpZW50cygpOwotCQlpZiAoY2xpZW50cyAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IGNsaWVudHMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKGNsaWVudHNbaV0uZ2V0SWQoKSArICIgLSAiICsgY2xpZW50c1tpXS5nZXROYW1lKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9MYXVuY2hhYmxlQWRhcHRlcnNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL0xhdW5jaGFibGVBZGFwdGVyc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWJhYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL0xhdW5jaGFibGVBZGFwdGVyc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLaAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuZXh0ZW5zaW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSUxhdW5jaGFibGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hhYmxlQWRhcHRlcnNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKExhdW5jaGFibGVBZGFwdGVyc1Rlc3RDYXNlLmNsYXNzLCAiTGF1bmNoYWJsZUFkYXB0ZXJzVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TGF1bmNoYWJsZUFkYXB0ZXJzRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlMYXVuY2hhYmxlQWRhcHRlcltdIGxhID0gU2VydmVyUGx1Z2luLmdldExhdW5jaGFibGVBZGFwdGVycygpOwotCQlpZiAobGEgIT0gbnVsbCkgewotCQkJaW50IHNpemUgPSBsYS5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4obGFbaV0uZ2V0SWQoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL01vZHVsZUZhY3Rvcmllc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vTW9kdWxlRmFjdG9yaWVzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVjZmFmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vTW9kdWxlRmFjdG9yaWVzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlRmFjdG9yaWVzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoTW9kdWxlRmFjdG9yaWVzVGVzdENhc2UuY2xhc3MsICJNb2R1bGVGYWN0b3JpZXNUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2R1bGVGYWN0b3JpZXNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZHVsZXMKLQkJU2VydmVyVXRpbC5nZXRNb2R1bGVzKChJUHJvamVjdCkgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9SdW50aW1lTG9jYXRvcnNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1J1bnRpbWVMb2NhdG9yc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjU3MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1J1bnRpbWVMb2NhdG9yc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHRlbnNpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JUnVudGltZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlclBsdWdpbjsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVMb2NhdG9yc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoUnVudGltZUxvY2F0b3JzVGVzdENhc2UuY2xhc3MsICJSdW50aW1lTG9jYXRvcnNUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdW50aW1lTG9jYXRvcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVMb2NhdG9yW10gcnVudGltZUxvY2F0b3JzID0gU2VydmVyUGx1Z2luLmdldFJ1bnRpbWVMb2NhdG9ycygpOwotCQlpZiAocnVudGltZUxvY2F0b3JzICE9IG51bGwpIHsKLQkJCWludCBzaXplID0gcnVudGltZUxvY2F0b3JzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHJ1bnRpbWVMb2NhdG9yc1tpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1J1bnRpbWVUYXJnZXRIYW5kbGVyc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vUnVudGltZVRhcmdldEhhbmRsZXJzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4M2E3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vUnVudGltZVRhcmdldEhhbmRsZXJzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVGFyZ2V0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVUYXJnZXRIYW5kbGVyc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoUnVudGltZVRhcmdldEhhbmRsZXJzVGVzdENhc2UuY2xhc3MsICJSdW50aW1lVGFyZ2V0SGFuZGxlcnNUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdW50aW1lVGFyZ2V0SGFuZGxlcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVJ1bnRpbWVUYXJnZXRIYW5kbGVyW10gcnRoID0gU2VydmVyQ29yZS5nZXRSdW50aW1lVGFyZ2V0SGFuZGxlcnMoKTsKLQkJaWYgKHJ0aCAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IHJ0aC5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCXJ0aFtpXS5nZXRJZCgpOwotCQkJCXJ0aFtpXS5zdXBwb3J0c1J1bnRpbWVUeXBlKG51bGwpOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9SdW50aW1lVHlwZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1J1bnRpbWVUeXBlc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMTk2MDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1J1bnRpbWVUeXBlc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHRlbnNpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBSdW50aW1lVHlwZXNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFJ1bnRpbWVUeXBlc1Rlc3RDYXNlLmNsYXNzLCAiUnVudGltZVR5cGVzVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UnVudGltZVR5cGVzRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdW50aW1lVHlwZVtdIHJ1bnRpbWVUeXBlcyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZVR5cGVzKCk7Ci0JCWlmIChydW50aW1lVHlwZXMgIT0gbnVsbCkgewotCQkJaW50IHNpemUgPSBydW50aW1lVHlwZXMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlydW50aW1lVHlwZXNbaV0uZ2V0SWQoKTsKLQkJCQlydW50aW1lVHlwZXNbaV0uZ2V0TmFtZSgpOwotCQkJCXJ1bnRpbWVUeXBlc1tpXS5jYW5DcmVhdGUoKTsKLQkJCQlydW50aW1lVHlwZXNbaV0uZ2V0RGVzY3JpcHRpb24oKTsKLQkJCQlydW50aW1lVHlwZXNbaV0uZ2V0VmVuZG9yKCk7Ci0JCQkJcnVudGltZVR5cGVzW2ldLmdldFZlcnNpb24oKTsKLQkJCQlydW50aW1lVHlwZXNbaV0uZ2V0TW9kdWxlVHlwZXMoKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vU2VydmVyTG9jYXRvcnNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1NlcnZlckxvY2F0b3JzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5ZWEwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vU2VydmVyTG9jYXRvcnNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuZXh0ZW5zaW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJMb2NhdG9yc1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoU2VydmVyTG9jYXRvcnNUZXN0Q2FzZS5jbGFzcywgIlNlcnZlckxvY2F0b3JzVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VydmVyTG9jYXRvcnNFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLypJU2VydmVyTG9jYXRvcltdIHNlcnZlckxvY2F0b3JzID0gU2VydmVyQ29yZS5nZXRzZXIoKTsKLQkJaWYgKHJ1bnRpbWVMb2NhdG9ycyAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IHJ1bnRpbWVMb2NhdG9ycy5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocnVudGltZUxvY2F0b3JzW2ldLmdldElkKCkgKyAiIC0gIiArIHJ1bnRpbWVMb2NhdG9yc1tpXS5nZXROYW1lKCkpOwotCQl9Ki8KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1NlcnZlclRhc2tzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9TZXJ2ZXJUYXNrc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZTRiMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1NlcnZlclRhc2tzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklQdWJsaXNoVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuU2VydmVyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyVGFza3NUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNlcnZlclRhc2tzVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJUYXNrc1Rlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlcnZlclRhc2tzRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQdWJsaXNoVGFza1tdIHNlcnZlclRhc2tzID0gU2VydmVyUGx1Z2luLmdldFB1Ymxpc2hUYXNrcygpOwotCQlpZiAoc2VydmVyVGFza3MgIT0gbnVsbCkgewotCQkJaW50IHNpemUgPSBzZXJ2ZXJUYXNrcy5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oc2VydmVyVGFza3NbaV0uZ2V0SWQoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1NlcnZlclR5cGVzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9TZXJ2ZXJUeXBlc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjFlMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvZXh0ZW5zaW9uL1NlcnZlclR5cGVzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmV4dGVuc2lvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyVHlwZXNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNlcnZlclR5cGVzVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJUeXBlc1Rlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlcnZlclR5cGVzRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JCWlmIChzZXJ2ZXJUeXBlcyAhPSBudWxsKSB7Ci0JCQlpbnQgc2l6ZSA9IHNlcnZlclR5cGVzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJc2VydmVyVHlwZXNbaV0uZ2V0SWQoKTsKLQkJCQlzZXJ2ZXJUeXBlc1tpXS5nZXROYW1lKCk7Ci0JCQkJc2VydmVyVHlwZXNbaV0uZ2V0RGVzY3JpcHRpb24oKTsKLQkJCQlzZXJ2ZXJUeXBlc1tpXS5nZXRSdW50aW1lVHlwZSgpOwotCQkJCXNlcnZlclR5cGVzW2ldLmhhc1J1bnRpbWUoKTsKLQkJCQlzZXJ2ZXJUeXBlc1tpXS5oYXNTZXJ2ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQkJc2VydmVyVHlwZXNbaV0uc3VwcG9ydHNMYXVuY2hNb2RlKCJydW4iKTsKLQkJCQlzZXJ2ZXJUeXBlc1tpXS5zdXBwb3J0c1JlbW90ZUhvc3RzKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJc2VydmVyVHlwZXNbaV0uY3JlYXRlU2VydmVyKG51bGwsIG51bGwsIG51bGwpOwotCQkJCQlzZXJ2ZXJUeXBlc1tpXS5jcmVhdGVTZXJ2ZXIobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlCi0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9TdGFydHVwRXh0ZW5zaW9uVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2V4dGVuc2lvbi9TdGFydHVwRXh0ZW5zaW9uVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1Nzg3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9leHRlbnNpb24vU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5leHRlbnNpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFN0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFN0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZS5jbGFzcywgIlN0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFydHVwRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHN0YXJ0dXAKLQkJU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdENsaWVudERlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RDbGllbnREZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWYzMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdENsaWVudERlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5DbGllbnREZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFRlc3RDbGllbnREZWxlZ2F0ZSBleHRlbmRzIENsaWVudERlbGVnYXRlIHsKLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhJU2VydmVyIHNlcnZlciwgT2JqZWN0IGxhdW5jaGFibGUsIFN0cmluZyBsYXVuY2hNb2RlKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBsYXVuY2goSVNlcnZlciBzZXJ2ZXIsIE9iamVjdCBsYXVuY2hhYmxlLCBTdHJpbmcgbGF1bmNoTW9kZSwgSUxhdW5jaCBsYXVuY2gpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdE1vZHVsZURlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmRkOWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdE1vZHVsZURlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGVSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuTW9kdWxlRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kdWxlRGVsZWdhdGUgZXh0ZW5kcyBNb2R1bGVEZWxlZ2F0ZXsKLQlwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElNb2R1bGVbXSBnZXRDaGlsZE1vZHVsZXMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJTW9kdWxlUmVzb3VyY2VbXSBtZW1iZXJzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0TW9kdWxlRmFjdG9yeURlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVGYWN0b3J5RGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0M2VjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVGYWN0b3J5RGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuTW9kdWxlRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLk1vZHVsZUZhY3RvcnlEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2R1bGVGYWN0b3J5RGVsZWdhdGUgZXh0ZW5kcyBNb2R1bGVGYWN0b3J5RGVsZWdhdGUgewotCXB1YmxpYyBNb2R1bGVEZWxlZ2F0ZSBnZXRNb2R1bGVEZWxlZ2F0ZShJTW9kdWxlIG1vZHVsZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSU1vZHVsZVtdIGdldE1vZHVsZXMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkTWV0aG9kcygpIHsKLQkJdHJ5IHsKLQkJCWdldElkKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVMaXN0ZW5lci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0TW9kdWxlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1NTdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JTW9kdWxlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLk1vZHVsZUV2ZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZHVsZUxpc3RlbmVyIGltcGxlbWVudHMgSU1vZHVsZUxpc3RlbmVyIHsKLQlwdWJsaWMgdm9pZCBtb2R1bGVDaGFuZ2VkKE1vZHVsZUV2ZW50IGV2ZW50KSB7Ci0JCS8vIGlnbm9yZQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVSZXNvdXJjZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0TW9kdWxlUmVzb3VyY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4Njg5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVSZXNvdXJjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZVJlc291cmNlOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZHVsZVJlc291cmNlIGltcGxlbWVudHMgSU1vZHVsZVJlc291cmNlIHsKLQlwdWJsaWMgSVBhdGggZ2V0TW9kdWxlUmVsYXRpdmVQYXRoKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVSZXNvdXJjZURlbHRhLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVSZXNvdXJjZURlbHRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZjYxMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0TW9kdWxlUmVzb3VyY2VEZWx0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlUmVzb3VyY2VEZWx0YTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2R1bGVSZXNvdXJjZURlbHRhIGltcGxlbWVudHMgSU1vZHVsZVJlc291cmNlRGVsdGEgewotCXB1YmxpYyBJTW9kdWxlUmVzb3VyY2UgZ2V0TW9kdWxlUmVzb3VyY2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0S2luZCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHVibGljIElNb2R1bGVSZXNvdXJjZURlbHRhW10gZ2V0QWZmZWN0ZWRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldE1vZHVsZVJlbGF0aXZlUGF0aCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdE1vZHVsZVJlc291cmNlRGVsdGFWaXNpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RNb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjM5MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdE1vZHVsZVJlc291cmNlRGVsdGFWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklNb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZVJlc291cmNlRGVsdGE7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJTW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3IgewotCXB1YmxpYyBib29sZWFuIHZpc2l0KElNb2R1bGVSZXNvdXJjZURlbHRhIGRlbHRhKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UHJvamVjdE1vZHVsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UHJvamVjdE1vZHVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY2NTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFByb2plY3RNb2R1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5Qcm9qZWN0TW9kdWxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFByb2plY3RNb2R1bGUgZXh0ZW5kcyBQcm9qZWN0TW9kdWxlIHsKLQlwdWJsaWMgVGVzdFByb2plY3RNb2R1bGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCQotCXB1YmxpYyBUZXN0UHJvamVjdE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXN1cGVyKHByb2plY3QpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlnZXRNb2R1bGVSZXNvdXJjZXMobnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQl1cGRhdGUoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWI1NzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuTW9kdWxlRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuUHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFRlc3RQcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlIGV4dGVuZHMgUHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZSB7Ci0JcHVibGljIFRlc3RQcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYWRkTGlzdGVuZXIoKTsKLQkJZmlyZUdsb2JhbEV2ZW50cygpOwotCQljYWNoZU1vZHVsZXMoKTsKLQkJY3JlYXRlTW9kdWxlcyhudWxsKTsKLQkJZ2V0TGlzdGVuZXJQYXRocygpOwotCQlpc1ZhbGlkTW9kdWxlKG51bGwpOwotCQl0cnkgewotCQkJaGFuZGxlR2xvYmFsUHJvamVjdENoYW5nZShudWxsLCBudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSU1vZHVsZVtdIGNyZWF0ZU1vZHVsZXMoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgTW9kdWxlRGVsZWdhdGUgZ2V0TW9kdWxlRGVsZWdhdGUoSU1vZHVsZSBtb2R1bGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElNb2R1bGVbXSBnZXRNb2R1bGVzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UnVudGltZURlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RSdW50aW1lRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzNGZiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RSdW50aW1lRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuUnVudGltZURlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFJ1bnRpbWVEZWxlZ2F0ZSBleHRlbmRzIFJ1bnRpbWVEZWxlZ2F0ZSB7Ci0JLy8gZG8gbm90aGluZwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFJ1bnRpbWVMb2NhdG9yRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFJ1bnRpbWVMb2NhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkNGVmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RSdW50aW1lTG9jYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5SdW50aW1lTG9jYXRvckRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFJ1bnRpbWVMb2NhdG9yRGVsZWdhdGUgZXh0ZW5kcyBSdW50aW1lTG9jYXRvckRlbGVnYXRlIHsKLQlwdWJsaWMgdm9pZCBzZWFyY2hGb3JSdW50aW1lcyhJUGF0aCBwYXRoLCBJUnVudGltZVNlYXJjaExpc3RlbmVyIGxpc3RlbmVyLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RSdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RSdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NTY1NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0UnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFRlc3RSdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlIGV4dGVuZHMgUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZSB7Ci0JcHVibGljIHZvaWQgc2V0UnVudGltZVRhcmdldChJUHJvamVjdCBwcm9qZWN0LCBJUnVudGltZSBydW50aW1lLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVJ1bnRpbWVUYXJnZXQoSVByb2plY3QgcHJvamVjdCwgSVJ1bnRpbWUgcnVudGltZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyQmVoYXZpb3VyRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFNlcnZlckJlaGF2aW91ckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YmRjNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyQmVoYXZpb3VyRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuU2VydmVyQmVoYXZpb3VyRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U2VydmVyQmVoYXZpb3VyRGVsZWdhdGUgZXh0ZW5kcyBTZXJ2ZXJCZWhhdmlvdXJEZWxlZ2F0ZSB7Ci0JcHVibGljIHZvaWQgc3RvcChib29sZWFuIGZvcmNlKSB7Ci0JCS8vIGlnbm9yZQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkKCkgewotCQl0cnkgewotCQkJaW5pdGlhbGl6ZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQkJCi0JCXRyeSB7Ci0JCQlwdWJsaXNoU3RhcnQobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCXB1Ymxpc2hTZXJ2ZXIoMCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCXB1Ymxpc2hNb2R1bGUoMCwgbnVsbCwgMCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCXB1Ymxpc2hGaW5pc2gobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4ODk2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5TZXJ2ZXJEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFRlc3RTZXJ2ZXJEZWxlZ2F0ZSBleHRlbmRzIFNlcnZlckRlbGVnYXRlIHsKLQlwdWJsaWMgSVN0YXR1cyBjYW5Nb2RpZnlNb2R1bGVzKElNb2R1bGVbXSBhZGQsIElNb2R1bGVbXSByZW1vdmUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElNb2R1bGVbXSBnZXRDaGlsZE1vZHVsZXMoSU1vZHVsZVtdIG1vZHVsZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSU1vZHVsZVtdIGdldFJvb3RNb2R1bGVzKElNb2R1bGUgbW9kdWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIG1vZGlmeU1vZHVsZXMoSU1vZHVsZVtdIGFkZCwgSU1vZHVsZVtdIHJlbW92ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyTG9jYXRvckRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJMb2NhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiOGNlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJMb2NhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU2VydmVyTG9jYXRvckRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFNlcnZlckxvY2F0b3JEZWxlZ2F0ZSBleHRlbmRzIFNlcnZlckxvY2F0b3JEZWxlZ2F0ZSB7Ci0JcHVibGljIHZvaWQgc2VhcmNoRm9yU2VydmVycyhTdHJpbmcgaG9zdCwgSVNlcnZlclNlYXJjaExpc3RlbmVyIGxpc3RlbmVyLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJLy8gaWdub3JlCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFNlcnZlclRhc2tEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyVGFza0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZTRlZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvaW1wbC9UZXN0U2VydmVyVGFza0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLlB1Ymxpc2hPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLlB1Ymxpc2hUYXNrRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U2VydmVyVGFza0RlbGVnYXRlIGV4dGVuZHMgUHVibGlzaFRhc2tEZWxlZ2F0ZSB7Ci0JcHVibGljIFB1Ymxpc2hPcGVyYXRpb25bXSBnZXRUYXNrcyhJU2VydmVyIHNlcnZlciwgTGlzdCBtb2R1bGVzKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9pbXBsL1Rlc3RTdGF0aWNXZWIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFN0YXRpY1dlYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmYxNTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL2ltcGwvVGVzdFN0YXRpY1dlYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLklTdGF0aWNXZWI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RhdGljV2ViIGltcGxlbWVudHMgSVN0YXRpY1dlYiB7Ci0JcHVibGljIFN0cmluZyBnZXRDb250ZXh0Um9vdCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL0NsaWVudERlbGVnYXRlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL0NsaWVudERlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiYTlhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9DbGllbnREZWxlZ2F0ZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5DbGllbnREZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0Q2xpZW50RGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnREZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgQ2xpZW50RGVsZWdhdGUgZGVsZWdhdGU7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShDbGllbnREZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzLCAiQ2xpZW50RGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RDbGllbnREZWxlZ2F0ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFTdXBwb3J0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zdXBwb3J0cyhudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTGF1bmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmxhdW5jaChudWxsLCBudWxsLCBudWxsLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvSVVSTFByb3ZpZGVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL0lVUkxQcm92aWRlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmN2ZiMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvSVVSTFByb3ZpZGVyVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JVVJMUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBJVVJMUHJvdmlkZXJUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElVUkxQcm92aWRlciB1cmxQcm92aWRlcjsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKElVUkxQcm92aWRlclRlc3RDYXNlLmNsYXNzLCAiSVVSTFByb3ZpZGVyVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl1cmxQcm92aWRlciA9IG5ldyBJVVJMUHJvdmlkZXIoKSB7Ci0JCQlwdWJsaWMgVVJMIGdldE1vZHVsZVJvb3RVUkwoSU1vZHVsZSBtb2R1bGUpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TW9kdWxlUm9vdFVSTCgpIHRocm93cyBFeGNlcHRpb24gewotCQl1cmxQcm92aWRlci5nZXRNb2R1bGVSb290VVJMKG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9MYXVuY2hhYmxlQWRhcHRlckRlbGVnYXRlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL0xhdW5jaGFibGVBZGFwdGVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTkxOGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL0xhdW5jaGFibGVBZGFwdGVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5MYXVuY2hhYmxlQWRhcHRlckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoYWJsZUFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgTGF1bmNoYWJsZUFkYXB0ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKExhdW5jaGFibGVBZGFwdGVyRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIkxhdW5jaGFibGVBZGFwdGVyRGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgewotCQlkZWxlZ2F0ZSA9IG5ldyBMYXVuY2hhYmxlQWRhcHRlckRlbGVnYXRlKCkgewotCQkJcHVibGljIE9iamVjdCBnZXRMYXVuY2hhYmxlKElTZXJ2ZXIgc2VydmVyLCBJTW9kdWxlQXJ0aWZhY3QgbW9kdWxlQXJ0aWZhY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TGF1bmNoYWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5nZXRMYXVuY2hhYmxlKG51bGwsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkOGU2YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlQXJ0aWZhY3RBZGFwdGVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5Nb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIE1vZHVsZUFydGlmYWN0QWRhcHRlckRlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBNb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUFydGlmYWN0QWRhcHRlckRlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJNb2R1bGVBcnRpZmFjdEFkYXB0ZXJEZWxlZ2F0ZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRGVsZWdhdGUoKSB7Ci0JCWRlbGVnYXRlID0gbmV3IE1vZHVsZUFydGlmYWN0QWRhcHRlckRlbGVnYXRlKCkgewotCQkJcHVibGljIElNb2R1bGVBcnRpZmFjdCBnZXRNb2R1bGVBcnRpZmFjdChPYmplY3Qgb2JqKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX07Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUdldE1vZHVsZUFydGlmYWN0KCkgewotCQlkZWxlZ2F0ZS5nZXRNb2R1bGVBcnRpZmFjdChudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTJlMzVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZURlbGVnYXRlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLk1vZHVsZURlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RNb2R1bGVEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIE1vZHVsZURlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBNb2R1bGVEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZURlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJNb2R1bGVEZWxlZ2F0ZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUgPSBuZXcgVGVzdE1vZHVsZURlbGVnYXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUluaXRpYWxpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJJbml0aWFsaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmluaXRpYWxpemUobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM0dldENoaWxkTW9kdWxlcygpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5nZXRDaGlsZE1vZHVsZXMoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0TW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldE1vZHVsZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVWYWxpZGF0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS52YWxpZGF0ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZNZW1iZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLm1lbWJlcnMoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRXZlbnRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRXZlbnRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTUyOTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUV2ZW50VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLk1vZHVsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlRXZlbnRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIE1vZHVsZUV2ZW50IGV2ZW50OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9kdWxlRXZlbnRUZXN0Q2FzZS5jbGFzcywgIk1vZHVsZUV2ZW50VGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVFdmVudCgpIHRocm93cyBFeGNlcHRpb24gewotCQlldmVudCA9IG5ldyBNb2R1bGVFdmVudChudWxsLCBmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUdldEFkZGVkQ2hpbGRNb2R1bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWV2ZW50LmdldEFkZGVkQ2hpbGRNb2R1bGVzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldENoYW5nZWRDaGlsZE1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZXZlbnQuZ2V0Q2hhbmdlZENoaWxkTW9kdWxlcygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNHZXRSZW1vdmVkQ2hpbGRNb2R1bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWV2ZW50LmdldFJlbW92ZWRDaGlsZE1vZHVsZXMoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0Q2hhbmdlZEFydGlmYWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlldmVudC5nZXRDaGFuZ2VkQXJ0aWZhY3RzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNUlzQ2hhbmdlZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlldmVudC5pc0NoYW5nZWQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2R2V0TW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWV2ZW50LmdldE1vZHVsZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRmFjdG9yeURlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4Mzc0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuTW9kdWxlRmFjdG9yeURlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RNb2R1bGVGYWN0b3J5RGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzLCAiTW9kdWxlRmFjdG9yeURlbGVnYXRlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZSA9IG5ldyBUZXN0TW9kdWxlRmFjdG9yeURlbGVnYXRlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAxSW5pdGlhbGl6ZSgpIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZShudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDJDcmVhdGVNb2R1bGUoKSB7Ci0JCWRlbGVnYXRlLmNyZWF0ZU1vZHVsZShudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNHZXRNb2R1bGVEZWxlZ2F0ZSgpIHsKLQkJZGVsZWdhdGUuZ2V0TW9kdWxlRGVsZWdhdGUobnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0TW9kdWxlcygpIHsKLQkJZGVsZWdhdGUuZ2V0TW9kdWxlcygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwN1Rlc3RQcm90ZWN0ZWQoKSB7Ci0JCSgoVGVzdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZSlkZWxlZ2F0ZSkudGVzdFByb3RlY3RlZE1ldGhvZHMoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRmFjdG9yeUV2ZW50VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUZhY3RvcnlFdmVudFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZDE4NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRmFjdG9yeUV2ZW50VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLk1vZHVsZUZhY3RvcnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIE1vZHVsZUZhY3RvcnlFdmVudFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgTW9kdWxlRmFjdG9yeUV2ZW50IGV2ZW50OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoTW9kdWxlRmFjdG9yeUV2ZW50VGVzdENhc2UuY2xhc3MsICJNb2R1bGVGYWN0b3J5RXZlbnRUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZUV2ZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWV2ZW50ID0gbmV3IE1vZHVsZUZhY3RvcnlFdmVudChudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRBZGRlZE1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZXZlbnQuZ2V0QWRkZWRNb2R1bGVzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0UmVtb3ZlZE1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZXZlbnQuZ2V0UmVtb3ZlZE1vZHVsZXMoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYzMjA1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLk1vZHVsZUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGVGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlRmlsZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSU1vZHVsZUZpbGUgZGVsZWdhdGU7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVGaWxlVGVzdENhc2UuY2xhc3MsICJNb2R1bGVGaWxlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZSA9IG5ldyBNb2R1bGVGaWxlKCJuYW1lIiwgbnVsbCwgMTQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhkZWxlZ2F0ZS5nZXROYW1lKCksICJuYW1lIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMlBhdGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0TnVsbChkZWxlZ2F0ZS5nZXRNb2R1bGVSZWxhdGl2ZVBhdGgoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM1N0YW1wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhkZWxlZ2F0ZS5nZXRNb2RpZmljYXRpb25TdGFtcCgpLCAxNCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUZvbGRlclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVGb2xkZXJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGRjZDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUZvbGRlclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5Nb2R1bGVGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGVGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBNb2R1bGVGb2xkZXJUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElNb2R1bGVGb2xkZXIgZGVsZWdhdGU7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVGb2xkZXJUZXN0Q2FzZS5jbGFzcywgIk1vZHVsZUZvbGRlclRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUgPSBuZXcgTW9kdWxlRm9sZGVyKCJuYW1lIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0RXF1YWxzKGRlbGVnYXRlLmdldE5hbWUoKSwgIm5hbWUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyUGF0aCgpIHRocm93cyBFeGNlcHRpb24gewotCQlhc3NlcnROdWxsKGRlbGVnYXRlLmdldE1vZHVsZVJlbGF0aXZlUGF0aCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzTWVtYmVycygpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5tZW1iZXJzKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUxpc3RlbmVyVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZUxpc3RlbmVyVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMDA4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVMaXN0ZW5lclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JTW9kdWxlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdE1vZHVsZUxpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlTGlzdGVuZXJUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElNb2R1bGVMaXN0ZW5lciBsaXN0ZW5lcjsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZUxpc3RlbmVyVGVzdENhc2UuY2xhc3MsICJNb2R1bGVMaXN0ZW5lclRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJbGlzdGVuZXIgPSBuZXcgVGVzdE1vZHVsZUxpc3RlbmVyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMU1vZHVsZUNoYW5nZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJbGlzdGVuZXIubW9kdWxlQ2hhbmdlZChudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlUmVzb3VyY2VEZWx0YVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVSZXNvdXJjZURlbHRhVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOTgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVSZXNvdXJjZURlbHRhVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGVSZXNvdXJjZURlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RNb2R1bGVSZXNvdXJjZURlbHRhOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlUmVzb3VyY2VEZWx0YVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgSU1vZHVsZVJlc291cmNlRGVsdGEgZGVsdGE7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVSZXNvdXJjZURlbHRhVGVzdENhc2UuY2xhc3MsICJNb2R1bGVSZXNvdXJjZURlbHRhVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHsKLQkJZGVsdGEgPSBuZXcgVGVzdE1vZHVsZVJlc291cmNlRGVsdGEoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0TW9kdWxlUmVzb3VyY2UoKSB7Ci0JCWFzc2VydE51bGwoZGVsdGEuZ2V0TW9kdWxlUmVzb3VyY2UoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldEFmZmVjdGVkQ2hpbGRyZW4oKSB7Ci0JCWFzc2VydE51bGwoZGVsdGEuZ2V0QWZmZWN0ZWRDaGlsZHJlbigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzR2V0TW9kdWxlUmVsYXRpdmVQYXRoKCkgewotCQlhc3NlcnROdWxsKGRlbHRhLmdldE1vZHVsZVJlbGF0aXZlUGF0aCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0S2luZCgpIHsKLQkJZGVsdGEuZ2V0S2luZCgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZDIwZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvTW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSU1vZHVsZVJlc291cmNlRGVsdGFWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RNb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvcjsKLQotcHVibGljIGNsYXNzIE1vZHVsZVJlc291cmNlRGVsdGFWaXNpdG9yVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJTW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3IgZGVsdGE7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShNb2R1bGVSZXNvdXJjZURlbHRhVmlzaXRvclRlc3RDYXNlLmNsYXNzLCAiTW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3JUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgewotCQlkZWx0YSA9IG5ldyBUZXN0TW9kdWxlUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxVmlzaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsdGEudmlzaXQobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZVJlc291cmNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL01vZHVsZVJlc291cmNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNDMwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9Nb2R1bGVSZXNvdXJjZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdE1vZHVsZVJlc291cmNlOwotCi1wdWJsaWMgY2xhc3MgTW9kdWxlUmVzb3VyY2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElNb2R1bGVSZXNvdXJjZSByZXNvdXJjZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKE1vZHVsZVJlc291cmNlVGVzdENhc2UuY2xhc3MsICJNb2R1bGVSZXNvdXJjZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcmVzb3VyY2UgPSBuZXcgVGVzdE1vZHVsZVJlc291cmNlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0TnVsbChyZXNvdXJjZS5nZXROYW1lKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJQYXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydE51bGwocmVzb3VyY2UuZ2V0TW9kdWxlUmVsYXRpdmVQYXRoKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9QdWJsaXNoT3BlcmF0aW9uVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1B1Ymxpc2hPcGVyYXRpb25UZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDNkN2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1B1Ymxpc2hPcGVyYXRpb25UZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuUHVibGlzaE9wZXJhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFB1Ymxpc2hPcGVyYXRpb25UZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFB1Ymxpc2hPcGVyYXRpb24gdGFzazsKLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGFzayA9IG5ldyBQdWJsaXNoT3BlcmF0aW9uKCkgewotCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIGlnbm9yZQotCQkJfQotCi0JCQlwdWJsaWMgaW50IGdldE9yZGVyKCkgewotCQkJCXJldHVybiAwOwotCQkJfQotCQl9OwotCQl0YXNrLmdldExhYmVsKCk7Ci0JCXRhc2suZ2V0RGVzY3JpcHRpb24oKTsKLQkJdGFzay5nZXRUYXNrTW9kZWwoKTsKLQkJdGFzay5zZXRUYXNrTW9kZWwobnVsbCk7Ci0JCXRhc2suZXhlY3V0ZShudWxsLCBudWxsKTsKLQkJdGFzay5nZXRLaW5kKCk7Ci0JCXRhc2suZ2V0T3JkZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZURlbGVnYXRlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1J1bnRpbWVEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDczYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZURlbGVnYXRlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuUnVudGltZURlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RSdW50aW1lRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBSdW50aW1lRGVsZWdhdGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFJ1bnRpbWVEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFJ1bnRpbWVEZWxlZ2F0ZVRlc3RDYXNlLmNsYXNzLCAiUnVudGltZURlbGVnYXRlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZSA9IG5ldyBUZXN0UnVudGltZURlbGVnYXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUluaXRpYWxpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJJbml0aWFsaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmluaXRpYWxpemUobmV3IFJ1bnRpbWVXb3JraW5nQ29weShuZXcgUnVudGltZShudWxsKSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwM0dldFJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0UnVudGltZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRHZXRSdW50aW1lV29ya2luZ0NvcHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0UnVudGltZVdvcmtpbmdDb3B5KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNVZhbGlkYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnZhbGlkYXRlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA2R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhHZXRBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0QXR0cmlidXRlKCJ0ZXN0IiwgbmV3IEFycmF5TGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA5R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIG5ldyBIYXNoTWFwKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBHZXRBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0QXR0cmlidXRlKCJ0ZXN0IiwgInRlc3QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExRGlzcG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMlNldERlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldERlZmF1bHRzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxM1NldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNFNldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE1U2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldEF0dHJpYnV0ZSgidGVzdCIsIG5ldyBBcnJheUxpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNlNldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCBuZXcgSGFzaE1hcCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE3U2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldEF0dHJpYnV0ZSgidGVzdCIsICJ0ZXN0Iik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1J1bnRpbWVMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZUxvY2F0b3JEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MWM2YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZUxvY2F0b3JEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5SdW50aW1lTG9jYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RSdW50aW1lTG9jYXRvckRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgUnVudGltZUxvY2F0b3JEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgUnVudGltZUxvY2F0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFJ1bnRpbWVMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIlJ1bnRpbWVMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RSdW50aW1lTG9jYXRvckRlbGVnYXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMVNlYXJjaCgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZWFyY2hGb3JSdW50aW1lcyhudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTGlzdGVuZXIoKSB7Ci0JCVJ1bnRpbWVMb2NhdG9yRGVsZWdhdGUuSVJ1bnRpbWVTZWFyY2hMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBSdW50aW1lTG9jYXRvckRlbGVnYXRlLklSdW50aW1lU2VhcmNoTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW50aW1lRm91bmQoSVJ1bnRpbWVXb3JraW5nQ29weSBydW50aW1lKSB7Ci0JCQkJLy8gaWdub3JlCi0JCQl9Ci0JCX07Ci0JCQotCQlsaXN0ZW5lci5ydW50aW1lRm91bmQobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1J1bnRpbWVUYXJnZXRIYW5kbGVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmY3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5SdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RSdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgUnVudGltZVRhcmdldEhhbmRsZXJEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFJ1bnRpbWVUYXJnZXRIYW5kbGVyRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIlJ1bnRpbWVUYXJnZXRIYW5kbGVyRGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RSdW50aW1lVGFyZ2V0SGFuZGxlckRlbGVnYXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUluaXRpYWxpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0UnVudGltZVRhcmdldEhhbmRsZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0UnVudGltZVRhcmdldEhhbmRsZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzU2V0UnVudGltZVRhcmdldCgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRSdW50aW1lVGFyZ2V0KG51bGwsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRSZW1vdmVSdW50aW1lVGFyZ2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnJlbW92ZVJ1bnRpbWVUYXJnZXQobnVsbCwgbnVsbCwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1NlcnZlckJlaGF2aW91ckRlbGVnYXRlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1NlcnZlckJlaGF2aW91ckRlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAzYzAxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9TZXJ2ZXJCZWhhdmlvdXJEZWxlZ2F0ZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuU2VydmVyQmVoYXZpb3VyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdFNlcnZlckJlaGF2aW91ckRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyQmVoYXZpb3VyRGVsZWdhdGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFNlcnZlckJlaGF2aW91ckRlbGVnYXRlIGRlbGVnYXRlOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyQmVoYXZpb3VyRGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIlNlcnZlckJlaGF2aW91ckRlbGVnYXRlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZSA9IG5ldyBUZXN0U2VydmVyQmVoYXZpb3VyRGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAySW5pdGlhbGl6ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5pbml0aWFsaXplKG5ldyBTZXJ2ZXJXb3JraW5nQ29weShuZXcgU2VydmVyKG51bGwpKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAzR2V0U2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldFNlcnZlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDREaXNwb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmRpc3Bvc2UoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA1U2V0TW9kZSgpIHsKLQkJZGVsZWdhdGUuc2V0TW9kZShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2U2V0U2VydmVyU3RhdGUoKSB7Ci0JCWRlbGVnYXRlLnNldFNlcnZlclN0YXRlKDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdTZXRTZXJ2ZXJQdWJsaXNoU3RhdGUoKSB7Ci0JCWRlbGVnYXRlLnNldFNlcnZlclB1Ymxpc2hTdGF0ZSgwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA4U2V0U2VydmVyUmVzdGFydFN0YXRlKCkgewotCQlkZWxlZ2F0ZS5zZXRTZXJ2ZXJSZXN0YXJ0U3RhdGUoZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlTZXRNb2R1bGVTdGF0ZSgpIHsKLQkJZGVsZWdhdGUuc2V0TW9kdWxlU3RhdGUobnVsbCwgMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMFNldE1vZHVsZVB1Ymxpc2hTdGF0ZSgpIHsKLQkJZGVsZWdhdGUuc2V0TW9kdWxlUHVibGlzaFN0YXRlKG51bGwsIDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTFTZXRNb2R1bGVSZXN0YXJ0U3RhdGUoKSB7Ci0JCWRlbGVnYXRlLnNldE1vZHVsZVJlc3RhcnRTdGF0ZShudWxsLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxN1NldHVwTGF1bmNoQ29uZmlndXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXR1cExhdW5jaENvbmZpZ3VyYXRpb24obnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxOFJlc3RhcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCWRlbGVnYXRlLnJlc3RhcnQobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTlSZXN0YXJ0TW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnJlc3RhcnRNb2R1bGUobnVsbCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMENhblJlc3RhcnRNb2R1bGUoKSB7Ci0JCWRlbGVnYXRlLmNhblJlc3RhcnRNb2R1bGUobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMVN0b3AoKSB7Ci0JCWRlbGVnYXRlLnN0b3AoZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjJHZXRQdWJsaXNoZWRSZXNvdXJjZURlbHRhKCkgewotCQlkZWxlZ2F0ZS5nZXRQdWJsaXNoZWRSZXNvdXJjZURlbHRhKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjNHZXRQdWJsaXNoZWRSZXNvdXJjZXMoKSB7Ci0JCWRlbGVnYXRlLmdldFB1Ymxpc2hlZFJlc291cmNlcyhudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI0R2V0VGVtcERpcmVjdG9yeSgpIHsKLQkJZGVsZWdhdGUuZ2V0VGVtcERpcmVjdG9yeSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjVTZXRTZXJ2ZXJTdGF0dXMoKSB7Ci0JCWRlbGVnYXRlLnNldFNlcnZlclN0YXR1cyhudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjZTZXRNb2R1bGVTdGF0dXMoKSB7Ci0JCWRlbGVnYXRlLnNldE1vZHVsZVN0YXR1cyhudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI3VGVzdFByb3RlY3RlZCgpIHsKLQkJKChUZXN0U2VydmVyQmVoYXZpb3VyRGVsZWdhdGUpZGVsZWdhdGUpLnRlc3RQcm90ZWN0ZWQoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvU2VydmVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvU2VydmVyRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDg3NGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL21vZGVsL1NlcnZlckRlbGVnYXRlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLlNlcnZlckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RTZXJ2ZXJEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckRlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTZXJ2ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlckRlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJEZWxlZ2F0ZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUgPSBuZXcgVGVzdFNlcnZlckRlbGVnYXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUluaXRpYWxpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJJbml0aWFsaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmluaXRpYWxpemUobmV3IFNlcnZlcldvcmtpbmdDb3B5KG5ldyBTZXJ2ZXIobnVsbCkpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNHZXRTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0U2VydmVyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNEdldFNlcnZlcldvcmtpbmdDb3B5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldFNlcnZlcldvcmtpbmdDb3B5KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA2R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhHZXRBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0QXR0cmlidXRlKCJ0ZXN0IiwgbmV3IEFycmF5TGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA5R2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldEF0dHJpYnV0ZSgidGVzdCIsIG5ldyBIYXNoTWFwKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBHZXRBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0QXR0cmlidXRlKCJ0ZXN0IiwgInRlc3QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDExRGlzcG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMlNldERlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldERlZmF1bHRzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxM1NldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNFNldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE1U2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldEF0dHJpYnV0ZSgidGVzdCIsIG5ldyBBcnJheUxpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNlNldEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoInRlc3QiLCBuZXcgSGFzaE1hcCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE3U2V0QXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNldEF0dHJpYnV0ZSgidGVzdCIsICJ0ZXN0Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxOENhbk1vZGlmeU1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuY2FuTW9kaWZ5TW9kdWxlcyhudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE5R2V0Q2hpbGRNb2R1bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldENoaWxkTW9kdWxlcyhudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIwR2V0Um9vdE1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0Um9vdE1vZHVsZXMobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMUdldFNlcnZlclBvcnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLmdldFNlcnZlclBvcnRzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMk1vZGlmeU1vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUubW9kaWZ5TW9kdWxlcyhudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIzSW1wb3J0Q29uZmlndXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5pbXBvcnRDb25maWd1cmF0aW9uKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjRJbXBvcnRDb25maWd1cmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNhdmVDb25maWd1cmF0aW9uKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjVDb25maWd1cmF0aW9uQ2hhbmdlZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5jb25maWd1cmF0aW9uQ2hhbmdlZCgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9TZXJ2ZXJMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvU2VydmVyTG9jYXRvckRlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4OTVmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9TZXJ2ZXJMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TZXJ2ZXJMb2NhdG9yRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdFNlcnZlckxvY2F0b3JEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckxvY2F0b3JEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgU2VydmVyTG9jYXRvckRlbGVnYXRlIGRlbGVnYXRlOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyTG9jYXRvckRlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJMb2NhdG9yRGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RTZXJ2ZXJMb2NhdG9yRGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxU2VhcmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlLnNlYXJjaEZvclNlcnZlcnMoImhvc3QiLCBudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyTGlzdGVuZXIoKSB7Ci0JCVNlcnZlckxvY2F0b3JEZWxlZ2F0ZS5JU2VydmVyU2VhcmNoTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgU2VydmVyTG9jYXRvckRlbGVnYXRlLklTZXJ2ZXJTZWFyY2hMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHNlcnZlckZvdW5kKElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXIpIHsKLQkJCQkvLyBpZ25vcmUKLQkJCX0KLQkJfTsKLQkJCi0JCWxpc3RlbmVyLnNlcnZlckZvdW5kKG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9TZXJ2ZXJUYXNrRGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvbW9kZWwvU2VydmVyVGFza0RlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NzZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy9tb2RlbC9TZXJ2ZXJUYXNrRGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuUHVibGlzaFRhc2tEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0U2VydmVyVGFza0RlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyVGFza0RlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBQdWJsaXNoVGFza0RlbGVnYXRlIGRlbGVnYXRlOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyVGFza0RlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJUYXNrRGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RTZXJ2ZXJUYXNrRGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0VGFza3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuZ2V0VGFza3MobnVsbCwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvSFRUUExhdW5jaGFibGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9IVFRQTGF1bmNoYWJsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYzUyOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9IVFRQTGF1bmNoYWJsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuSHR0cExhdW5jaGFibGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgSFRUUExhdW5jaGFibGVUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIEh0dHBMYXVuY2hhYmxlIGxhdW5jaDsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShIVFRQTGF1bmNoYWJsZVRlc3RDYXNlLmNsYXNzLCAiSFRUUExhdW5jaGFibGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJbGF1bmNoID0gbmV3IEh0dHBMYXVuY2hhYmxlKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRVUkwoKSB7Ci0JCWFzc2VydE51bGwobGF1bmNoLmdldFVSTCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyVG9TdHJpbmcoKSB7Ci0JCXRyeSB7Ci0JCQlsYXVuY2gudG9TdHJpbmcoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvTnVsbE1vZHVsZUFydGlmYWN0VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvTnVsbE1vZHVsZUFydGlmYWN0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhOTk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL051bGxNb2R1bGVBcnRpZmFjdFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuTnVsbE1vZHVsZUFydGlmYWN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIE51bGxNb2R1bGVBcnRpZmFjdFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgTnVsbE1vZHVsZUFydGlmYWN0IG5tYTsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShOdWxsTW9kdWxlQXJ0aWZhY3RUZXN0Q2FzZS5jbGFzcywgIk51bGxNb2R1bGVBcnRpZmFjdFRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQlubWEgPSBuZXcgTnVsbE1vZHVsZUFydGlmYWN0KG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRNb2R1bGUoKSB7Ci0JCWFzc2VydE51bGwobm1hLmdldE1vZHVsZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyVG9TdHJpbmcoKSB7Ci0JCW5tYS50b1N0cmluZygpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL1BpbmdUaHJlYWRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9QaW5nVGhyZWFkVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE4OGRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL1BpbmdUaHJlYWRUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLlBpbmdUaHJlYWQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgUGluZ1RocmVhZFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgUGluZ1RocmVhZCBwaW5nOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoUGluZ1RocmVhZFRlc3RDYXNlLmNsYXNzLCAiUGluZ1RocmVhZFRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQlwaW5nID0gbmV3IFBpbmdUaHJlYWQobnVsbCwgbnVsbCwgbnVsbCwgMTApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMVN0b3BQaW5naW5nKCkgewotCQlwaW5nLnN0b3BQaW5naW5nKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMlRlc3RQcm90ZWN0ZWQoKSB7Ci0JCWNsYXNzIE15UGluZ1RocmVhZCBleHRlbmRzIFBpbmdUaHJlYWQgewotCQkJcHVibGljIE15UGluZ1RocmVhZCgpIHsKLQkJCQlzdXBlcihudWxsLCBudWxsLCBudWxsLCAwKTsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWQoKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJcGluZygpOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZQotCQkJCX0KLQkJCX0KLQkJfQotCQlNeVBpbmdUaHJlYWQgbXB0ID0gbmV3IE15UGluZ1RocmVhZCgpOwotCQltcHQudGVzdFByb3RlY3RlZCgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL1Byb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3MGQ0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL1Byb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy5pbXBsLlRlc3RQcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLlByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgUHJvamVjdE1vZHVsZUZhY3RvcnlEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5jbGFzcywgIlByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJZGVsZWdhdGUgPSBuZXcgVGVzdFByb2plY3RNb2R1bGVGYWN0b3J5RGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxSW5pdGlhbGl6ZSgpIHsKLQkJZGVsZWdhdGUuaW5pdGlhbGl6ZShudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDJDcmVhdGVNb2R1bGUoKSB7Ci0JCWRlbGVnYXRlLmNyZWF0ZU1vZHVsZShudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDNHZXRNb2R1bGVEZWxlZ2F0ZSgpIHsKLQkJZGVsZWdhdGUuZ2V0TW9kdWxlRGVsZWdhdGUobnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0TW9kdWxlcygpIHsKLQkJZGVsZWdhdGUuZ2V0TW9kdWxlcygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwNUdldE1vZHVsZXMoKSB7Ci0JCWRlbGVnYXRlLmdldE1vZHVsZXMobnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA2VGVzdFByb3RlY3RlZCgpIHRocm93cyBFeGNlcHRpb24gewotCQkoKFRlc3RQcm9qZWN0TW9kdWxlRmFjdG9yeURlbGVnYXRlKWRlbGVnYXRlKS50ZXN0UHJvdGVjdGVkKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdE1vZHVsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvY29yZS90ZXN0cy91dGlsL1Byb2plY3RNb2R1bGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGFmZjJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdE1vZHVsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLmltcGwuVGVzdFByb2plY3RNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuUHJvamVjdE1vZHVsZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0TW9kdWxlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBQcm9qZWN0TW9kdWxlIHBtOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoUHJvamVjdE1vZHVsZVRlc3RDYXNlLmNsYXNzLCAiUHJvamVjdE1vZHVsZVRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQlwbSA9IG5ldyBUZXN0UHJvamVjdE1vZHVsZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMUNyZWF0ZSgpIHsKLQkJcG0gPSBuZXcgVGVzdFByb2plY3RNb2R1bGUobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkdldFByb2plY3QoKSB7Ci0JCXBtLmdldFByb2plY3QoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzR2V0Um9vdEZvbGRlcigpIHsKLQkJcG0uZ2V0Um9vdEZvbGRlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRHZXRJZCgpIHsKLQkJdHJ5IHsKLQkJCXBtLmdldElkKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVWYWxpZGF0ZSgpIHsKLQkJcG0udmFsaWRhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2TWVtYmVycygpIHsKLQkJdHJ5IHsKLQkJCXBtLm1lbWJlcnMoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwN0dldE5hbWUoKSB7Ci0JCXRyeSB7Ci0JCQlwbS5nZXROYW1lKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhFeGlzdHMoKSB7Ci0JCXBtLmV4aXN0cygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlFcXVhbHMoKSB7Ci0JCXBtLmVxdWFscyhudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTAoKSB7Ci0JCXBtLmdldENoaWxkTW9kdWxlcygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTFUZXN0UHJvdGVjdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCSgoVGVzdFByb2plY3RNb2R1bGUpcG0pLnRlc3RQcm90ZWN0ZWQoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9Tb2NrZXRVdGlsVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvU29ja2V0VXRpbFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNWE3NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9Tb2NrZXRVdGlsVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5Tb2NrZXRVdGlsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU29ja2V0VXRpbFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RGaW5kVW51c2VkUG9ydCgpIHsKLQkJaW50IGkgPSBTb2NrZXRVdGlsLmZpbmRVbnVzZWRQb3J0KDIyMDAwLCAyMjA1MCk7Ci0JCWFzc2VydFRydWUoaSAhPSAtMSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJc0xvY2FsaG9zdCgpIHsKLQkJYXNzZXJ0VHJ1ZShTb2NrZXRVdGlsLmlzTG9jYWxob3N0KCJsb2NhbGhvc3QiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJc0xvY2FsaG9zdDIoKSB7Ci0JCWFzc2VydFRydWUoU29ja2V0VXRpbC5pc0xvY2FsaG9zdCgiMTI3LjAuMC4xIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SXNMb2NhbGhvc3QzKCkgewotCQlhc3NlcnRGYWxzZShTb2NrZXRVdGlsLmlzTG9jYWxob3N0KG51bGwpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzTG9jYWxob3N0NCgpIHsKLQkJYXNzZXJ0RmFsc2UoU29ja2V0VXRpbC5pc0xvY2FsaG9zdCgid3d3Lm5vdC1lY2xpcHNlLmNvbSIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzUG9ydEluVXNlKCkgewotCQlhc3NlcnRGYWxzZShTb2NrZXRVdGlsLmlzUG9ydEluVXNlKDIyMDU0KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJc1BvcnRJblVzZTIoKSB7Ci0JCWFzc2VydEZhbHNlKFNvY2tldFV0aWwuaXNQb3J0SW5Vc2UoMjIwNTQsIDUpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9TdGF0aWNXZWJUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9TdGF0aWNXZWJUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGNhNTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvU3RhdGljV2ViVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMuaW1wbC5UZXN0U3RhdGljV2ViOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLklTdGF0aWNXZWI7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU3RhdGljV2ViVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJU3RhdGljV2ViIHdlYjsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShTdGF0aWNXZWJUZXN0Q2FzZS5jbGFzcywgIlN0YXRpY1dlYlRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlKCkgewotCQl3ZWIgPSBuZXcgVGVzdFN0YXRpY1dlYigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRDb250ZXh0Um9vdCgpIHsKLQkJYXNzZXJ0TnVsbCh3ZWIuZ2V0Q29udGV4dFJvb3QoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci9jb3JlL3Rlc3RzL3V0aWwvV2ViUmVzb3VyY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9XZWJSZXNvdXJjZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWM2NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL2NvcmUvdGVzdHMvdXRpbC9XZWJSZXNvdXJjZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuV2ViUmVzb3VyY2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgV2ViUmVzb3VyY2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFdlYlJlc291cmNlIHdlYjsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShXZWJSZXNvdXJjZVRlc3RDYXNlLmNsYXNzLCAiV2ViUmVzb3VyY2VUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJd2ViID0gbmV3IFdlYlJlc291cmNlKG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDFHZXRNb2R1bGUoKSB7Ci0JCWFzc2VydE51bGwod2ViLmdldE1vZHVsZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0UGF0aCgpIHsKLQkJYXNzZXJ0TnVsbCh3ZWIuZ2V0UGF0aCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzVG9TdHJpbmcoKSB7Ci0JCXdlYi50b1N0cmluZygpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTVjNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c3QtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnRlc3RzLkFsbFRlc3RzIiAvPgotICAgCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQyZTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGVyZm9ybWFuY2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ2M2FmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYmluCi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTE0MTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjY1ODQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHBlcmZvcm1hbmNlLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS5jb21tb24KLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYWZmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBlcmZvcm1hbmNlLmphcixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc291cmNlLnBlcmZvcm1hbmNlLmphciA9IHBlcmZvcm1hbmNlLwotb3V0cHV0LnBlcmZvcm1hbmNlLmphciA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNGZhOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZSIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShNb2R1bGVGYWN0b3JpZXNFeHRlbnNpb25UZXN0Q2FzZS5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdGVzdHMvcGVyZm9ybWFuY2UvTW9kdWxlRmFjdG9yaWVzRXh0ZW5zaW9uVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9Nb2R1bGVGYWN0b3JpZXNFeHRlbnNpb25UZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDU4ZTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9Nb2R1bGVGYWN0b3JpZXNFeHRlbnNpb25UZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLk1vZHVsZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlclBsdWdpbjsKLQotcHVibGljIGNsYXNzIE1vZHVsZUZhY3Rvcmllc0V4dGVuc2lvblRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShNb2R1bGVGYWN0b3JpZXNFeHRlbnNpb25UZXN0Q2FzZS5jbGFzcywgIk1vZHVsZUZhY3Rvcmllc0V4dGVuc2lvblRlc3RDYXNlIik7Ci0JfQotICAKLQlwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlRmFjdG9yaWVzRXh0ZW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCURpbWVuc2lvbltdIGRpbXMgPSBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5VU0VEX0pBVkFfSEVBUH07Ci0JCXRhZ0FzR2xvYmFsU3VtbWFyeSgiTW9kdWxlIEZhY3RvcmllcyIsIGRpbXMpOwotCQlzdGFydE1lYXN1cmluZygpOwotCQlNb2R1bGVGYWN0b3J5W10gZmFjdG9yaWVzID0gU2VydmVyUGx1Z2luLmdldE1vZHVsZUZhY3RvcmllcygpOwotCQlpZiAoZmFjdG9yaWVzICE9IG51bGwpIHsKLQkJCWludCBzaXplID0gZmFjdG9yaWVzLmxlbmd0aDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJZmFjdG9yaWVzW2ldLmdldE1vZHVsZXMoKTsKLQkJCX0KLQkJfQotCQlzdG9wTWVhc3VyaW5nKCk7Ci0JCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCQlhc3NlcnRQZXJmb3JtYW5jZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY5ZjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLio7Ci0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFBlcmZvcm1hbmNlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdGVzdHMvcGVyZm9ybWFuY2UvU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdGVzdHMvcGVyZm9ybWFuY2UvU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NGM3NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL1N0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFN0YXJ0dXBFeHRlbnNpb25UZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlLmNsYXNzLCAiU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YXJ0dXBFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJRGltZW5zaW9uW10gZGltcyA9IG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLlVTRURfSkFWQV9IRUFQfTsKLQkJdGFnQXNHbG9iYWxTdW1tYXJ5KCJSdW50aW1lL1NlcnZlciBzdGFydHVwIiwgZGltcyk7Ci0JCXN0YXJ0TWVhc3VyaW5nKCk7Ci0JCVNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLQkJU2VydmVyQ29yZS5nZXRSdW50aW1lVGFyZ2V0SGFuZGxlcnMoKTsKLQkJU2VydmVyQ29yZS5nZXRSdW50aW1lVHlwZXMoKTsKLQkJU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JCVNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLQkJc3RvcE1lYXN1cmluZygpOwotCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9BYnN0cmFjdEdldERlbGVnYXRlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9jb21tb24vQWJzdHJhY3RHZXREZWxlZ2F0ZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGJjNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9BYnN0cmFjdEdldERlbGVnYXRlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuU2VydmVyRGVsZWdhdGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEdldERlbGVnYXRlVGVzdENhc2UgZXh0ZW5kcyBTZXJ2ZXJQZXJmb3JtYW5jZVRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQljbG9zZUludHJvKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldERlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN0YXJ0TWVhc3VyaW5nKCk7Ci0JCWNyZWF0ZVJ1bnRpbWUoZ2V0UnVudGltZVR5cGVJZCgpLCBnZXRSdW50aW1lVHlwZUxvY2F0aW9uKCkpOwotCQlJU2VydmVyIHNlcnZlciA9IGNyZWF0ZVNlcnZlcihnZXRTZXJ2ZXJUeXBlSWQoKSk7Ci0JCXNlcnZlci5nZXRBZGFwdGVyKFNlcnZlckRlbGVnYXRlLmNsYXNzKTsKLQkJc3RvcE1lYXN1cmluZygpOwotCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQl9Ci0gIAotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UnVudGltZVR5cGVJZCgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UnVudGltZVR5cGVMb2NhdGlvbigpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0U2VydmVyVHlwZUlkKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9BYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9BYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDcwNWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9jb21tb24vQWJzdHJhY3RPcGVuRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuZWRpdG9yLlNlcnZlckVkaXRvcklucHV0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPcGVuRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBTZXJ2ZXJQZXJmb3JtYW5jZVRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfRURJVE9SX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZWRpdG9yIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RPcGVuRWRpdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN0YXJ0TWVhc3VyaW5nKCk7Ci0JCUlTZXJ2ZXIgc2VydmVyID0gZ2V0Rmlyc3RTZXJ2ZXIoZ2V0U2VydmVyVHlwZUlkKCkpOwotCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IHBhZ2Uub3BlbkVkaXRvcihuZXcgU2VydmVyRWRpdG9ySW5wdXQoc2VydmVyLmdldElkKCkpLCBTRVJWRVJfRURJVE9SX0lELCB0cnVlKTsKLQkJc3RvcE1lYXN1cmluZygpOwotCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQkJcGFnZS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFNlcnZlclR5cGVJZCgpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci90ZXN0cy9wZXJmb3JtYW5jZS9jb21tb24vU2VydmVyUGVyZm9ybWFuY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9TZXJ2ZXJQZXJmb3JtYW5jZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYTA4NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3Rlc3RzL3BlcmZvcm1hbmNlL2NvbW1vbi9TZXJ2ZXJQZXJmb3JtYW5jZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VydmVyUGVyZm9ybWFuY2VUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UgewotCXByb3RlY3RlZCB2b2lkIGNsb3NlSW50cm8oKSB7Ci0JCUlJbnRyb01hbmFnZXIgaW50cm9NYW5hZ2VyID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRJbnRyb01hbmFnZXIoKTsKLQkJSUludHJvUGFydCBpbnRyb1BhcnQgPSBpbnRyb01hbmFnZXIuZ2V0SW50cm8oKTsKLQkJaWYgKGludHJvUGFydCAhPSBudWxsKQotCQkJaW50cm9NYW5hZ2VyLmNsb3NlSW50cm8oaW50cm9QYXJ0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVJ1bnRpbWVXb3JraW5nQ29weSBjcmVhdGVSdW50aW1lKFN0cmluZyBydW50aW1lVHlwZUlkLCBTdHJpbmcgcnVudGltZVR5cGVMb2NhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAocnVudGltZVR5cGVJZCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCQlJUnVudGltZVdvcmtpbmdDb3B5IHJ1bnRpbWVDb3B5ID0gU2VydmVyQ29yZS5maW5kUnVudGltZVR5cGUocnVudGltZVR5cGVJZCkuY3JlYXRlUnVudGltZShydW50aW1lVHlwZUlkLCBudWxsKTsKLQkJcnVudGltZUNvcHkuc2V0TG9jYXRpb24obmV3IFBhdGgocnVudGltZVR5cGVMb2NhdGlvbikpOwotCQlydW50aW1lQ29weS5zZXRSZWFkT25seShmYWxzZSk7Ci0JCXJ1bnRpbWVDb3B5LnNhdmUoZmFsc2UsIG51bGwpOwotCQlyZXR1cm4gcnVudGltZUNvcHk7Ci0JfQotCi0JcHJvdGVjdGVkIElTZXJ2ZXIgY3JlYXRlU2VydmVyKFN0cmluZyBzZXJ2ZXJUeXBlSWQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKHNlcnZlclR5cGVJZCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCQlOdWxsUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyQ29weSA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCwgbnVsbCwgbW9uaXRvcik7Ci0JCXJldHVybiBzZXJ2ZXJDb3B5LnNhdmVBbGwoZmFsc2UsIG1vbml0b3IpOwotCX0KLQotCXByb3RlY3RlZCBJU2VydmVyIGdldEZpcnN0U2VydmVyKFN0cmluZyBzZXJ2ZXJUeXBlSWQpIHsKLQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2ZXJzLmxlbmd0aCA+IDApOwotCQlJU2VydmVyIHNlcnZlciA9IHNlcnZlcnNbMF07Ci0JCWFzc2VydE5vdE51bGwoc2VydmVyKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHNlcnZlclR5cGVJZCkpOwotCQlyZXR1cm4gc2VydmVyOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM4MWMxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPgotCi0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwZXJmLXRlc3RzLWZpbGUiIHZhbHVlPSIke3Rlc3REaXJ9L3BlcmZvcm1hbmNlLXRlc3RzLnhtbCIvPgotCi0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3NlcnZlcl9wZXJmb3JtYW5jZSIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZSoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSBwZXJmb3JtYW5jZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZV9zdWl0ZSI+Ci0KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UuU3RhcnR1cEV4dGVuc2lvblRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudGVzdHMucGVyZm9ybWFuY2UuTW9kdWxlRmFjdG9yaWVzRXh0ZW5zaW9uVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLQotICA8L3RhcmdldD4KLSAgICAKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiIGRlcGVuZHM9ImluaXQscGVyZm9ybWFuY2Vfc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci50ZXN0cy5wZXJmb3JtYW5jZSoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1YWMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDc3YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxYjJlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiMmYxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZGlhbG9nLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZWRpdG9yLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuaW1wbCwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLndpemFyZAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuZm9ybXMsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy51aSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5MTdlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0cy5qYXIKLXNvdXJjZS50ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9BYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9BYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDY2MzQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvQWJzdHJhY3RPcGVuRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuZWRpdG9yLlNlcnZlckVkaXRvcklucHV0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPcGVuRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmVkaXRvciI7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShBYnN0cmFjdE9wZW5FZGl0b3JUZXN0Q2FzZS5jbGFzcywgIk9wZW5FZGl0b3JUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPcGVuRWRpdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlTZXJ2ZXIgc2VydmVyID0gZ2V0U2VydmVyKCk7Ci0JCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gcGFnZS5vcGVuRWRpdG9yKG5ldyBTZXJ2ZXJFZGl0b3JJbnB1dChzZXJ2ZXIuZ2V0SWQoKSksIFNFUlZFUl9FRElUT1JfSUQsIHRydWUpOwotCQlwYWdlLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotCQlyZWxlYXNlU2VydmVyKHNlcnZlcik7Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IElTZXJ2ZXIgZ2V0U2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZWxlYXNlU2VydmVyKElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgRXhjZXB0aW9uOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YjE4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmRpYWxvZy5EaWFsb2dzVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5kaWFsb2cuUHJlZmVyZW5jZXNUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmRpYWxvZy5WaWV3VGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5lZGl0b3IuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLndpemFyZC5JV2l6YXJkSGFuZGxlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy53aXphcmQuVGFza1dpemFyZFRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMud2l6YXJkLldpemFyZEZyYWdtZW50VGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3Qgc3VpdGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShFeGlzdGVuY2VUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFNlcnZlclVJUHJlZmVyZW5jZXNUZXN0Q2FzZS5jbGFzcyk7Ci0JCQotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyVUlDb3JlVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2VydmVyVUlVdGlsVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlckxhdW5jaENvbmZpZ3VyYXRpb25UYWJUZXN0Q2FzZS5jbGFzcykpOwotCQkKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShJU2VydmVyRWRpdG9yUGFydElucHV0VGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJFZGl0b3JTZWN0aW9uVGVzdENhc2UuY2xhc3MpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJFZGl0b3JQYXJ0VGVzdENhc2UuY2xhc3MpKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEaWFsb2dzVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUHJlZmVyZW5jZXNUZXN0Q2FzZS5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShWaWV3VGVzdENhc2UuY2xhc3MpOwotCQkKLQkJc3VpdGUuYWRkVGVzdChuZXcgT3JkZXJlZFRlc3RTdWl0ZShJT3JkZXJlZFRlc3RDYXNlLmNsYXNzKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlVGVzdENhc2UuY2xhc3MpKTsKLQkJCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShJV2l6YXJkSGFuZGxlVGVzdENhc2UuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFRhc2tXaXphcmRUZXN0Q2FzZS5jbGFzcykpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBPcmRlcmVkVGVzdFN1aXRlKFdpemFyZEZyYWdtZW50VGVzdENhc2UuY2xhc3MpKTsKLQkJLy8kSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDA3NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLlNlcnZlclVJUGx1Z2luOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJYXNzZXJ0Tm90TnVsbChTZXJ2ZXJVSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9PcmRlcmVkVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2ZWRhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgT3JkZXJlZFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXRoaXModGhlQ2xhc3MpOwotCQlzZXROYW1lKG5hbWUpOwotCX0KLQotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKGZpbmFsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKCk7Ci0JCXNldE5hbWUodGhlQ2xhc3MuZ2V0TmFtZSgpKTsKLQkJdHJ5IHsKLQkJCWdldFRlc3RDb25zdHJ1Y3Rvcih0aGVDbGFzcyk7IC8vIEF2b2lkIGdlbmVyYXRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKQotCQkJCQkrICIgaGFzIG5vIHB1YmxpYyBjb25zdHJ1Y3RvciBUZXN0Q2FzZShTdHJpbmcgbmFtZSkgb3IgVGVzdENhc2UoKSIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIU1vZGlmaWVyLmlzUHVibGljKHRoZUNsYXNzLmdldE1vZGlmaWVycygpKSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpICsgIiBpcyBub3QgcHVibGljIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUNsYXNzIHN1cGVyQ2xhc3MgPSB0aGVDbGFzczsKLQkJVmVjdG9yIG5hbWVzID0gbmV3IFZlY3RvcigpOwotCQl3aGlsZSAoVGVzdC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHN1cGVyQ2xhc3MpKSB7Ci0JCQlNZXRob2RbXSBtZXRob2RzID0gc3VwZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLQkJCWludCBzaXplID0gbWV0aG9kcy5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKLQkJCQlmb3IgKGludCBqID0gaSArIDE7IGogPCBzaXplOyBqKyspIHsKLQkJCQkJaWYgKG1ldGhvZHNbaV0uZ2V0TmFtZSgpLmNvbXBhcmVUbyhtZXRob2RzW2pdLmdldE5hbWUoKSkgPiAwKSB7Ci0JCQkJCQlNZXRob2QgbSA9IG1ldGhvZHNbaV07Ci0JCQkJCQltZXRob2RzW2ldID0gbWV0aG9kc1tqXTsKLQkJCQkJCW1ldGhvZHNbal0gPSBtOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlhZGRUZXN0TWV0aG9kKG1ldGhvZHNbaV0sIG5hbWVzLCB0aGVDbGFzcyk7Ci0JCQl9Ci0JCQlzdXBlckNsYXNzID0gc3VwZXJDbGFzcy5nZXRTdXBlcmNsYXNzKCk7Ci0JCX0KLQkJaWYgKCF0ZXN0cygpLmhhc01vcmVFbGVtZW50cygpKQotCQkJYWRkVGVzdCh3YXJuaW5nKCJObyB0ZXN0cyBmb3VuZCBpbiAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFRlc3RNZXRob2QoTWV0aG9kIG0sIFZlY3RvciBuYW1lcywgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJaWYgKG5hbWVzLmNvbnRhaW5zKG5hbWUpKQotCQkJcmV0dXJuOwotCQlpZiAoIWlzUHVibGljVGVzdE1ldGhvZChtKSkgewotCQkJaWYgKGlzVGVzdE1ldGhvZChtKSkKLQkJCQlhZGRUZXN0KHdhcm5pbmcoIlRlc3QgbWV0aG9kIGlzbid0IHB1YmxpYzogIiArIG0uZ2V0TmFtZSgpKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbmFtZXMuYWRkRWxlbWVudChuYW1lKTsKLQkJYWRkVGVzdChjcmVhdGVUZXN0KHRoZUNsYXNzLCBuYW1lKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzUHVibGljVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlyZXR1cm4gaXNUZXN0TWV0aG9kKG0pICYmIE1vZGlmaWVyLmlzUHVibGljKG0uZ2V0TW9kaWZpZXJzKCkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbS5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQlDbGFzcyByZXR1cm5UeXBlID0gbS5nZXRSZXR1cm5UeXBlKCk7Ci0JCXJldHVybiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAwICYmIG5hbWUuc3RhcnRzV2l0aCgidGVzdCIpICYmIHJldHVyblR5cGUuZXF1YWxzKFZvaWQuVFlQRSk7Ci0JfQotCi0JcHJpdmF0ZSBUZXN0IHdhcm5pbmcoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZSgid2FybmluZyIpIHsKLQkJCXByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKSB7Ci0JCQkJZmFpbChtZXNzYWdlKTsKLQkJCX0KLQkJfTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TY2FuQWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1NjYW5BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY1NDkwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1NjYW5BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotLyoqCi0gKiBUZXN0IHRvIHNjYW4gcGx1Z2lucyBmb3IgbWlzc2luZyBwcm9wZXJ0aWVzLgotICovCi1wdWJsaWMgY2xhc3MgU2NhbkFjdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBTY2FuQWN0aW9uIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFNjYW5BY3Rpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJdCgpIHsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJaWYgKHByb2plY3RzICE9IG51bGwpIHsKLQkJCWludCBzaXplID0gcHJvamVjdHMubGVuZ3RoOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlzY2FuUHJvamVjdChwcm9qZWN0c1tpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzY2FuUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvamVjdDogIiArIHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCi0JCUlGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInBsdWdpbi5wcm9wZXJ0aWVzIik7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgIHBsdWdpbi5wcm9wZXJ0aWVzIG5vdCBmb3VuZCIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQkvL1N5c3RlbS5vdXQucHJpbnQoIiAgUmVhZGluZyBwbHVnaW4ucHJvcGVydGllcy4uLiIpOwotCQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJSW5wdXRTdHJlYW0gaW4gPSBudWxsOwotCQl0cnkgewotCQkJaW4gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQlwcm9wcy5sb2FkKGluKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlyZXR1cm47Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWluLmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vIGlnbm9yZQotCQkJfQotCQl9Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKHByb3BzLnNpemUoKSArICIgZm91bmQiKTsKLQkJCi0JCUxpc3QgcHJvcHNGb3VuZCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCBuZXdQcm9wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCXNjYW5Db250YWluZXIocHJvamVjdCwgcHJvcHMsIHByb3BzRm91bmQsIG5ld1Byb3BzKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiVW51c2VkIHByb3BlcnRpZXM6Iik7Ci0JCWlmIChwcm9wcy5zaXplKCkgPT0gcHJvcHNGb3VuZC5zaXplKCkpCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgTm9uZSIpOwotCQllbHNlIHsKLQkJCUl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvcHMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJpbmcgcyA9IChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlpZiAoIXByb3BzRm91bmQuY29udGFpbnMocykpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAiICsgcyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiTmV3IHByb3BlcnRpZXM6Iik7Ci0JCWlmIChuZXdQcm9wcy5zaXplKCkgPT0gMCkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICBOb25lIik7Ci0JCWVsc2UgewotCQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBuZXdQcm9wcy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCVN0cmluZyBzID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAiICsgcyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2NhbkNvbnRhaW5lcihJQ29udGFpbmVyIGNvbnRhaW5lciwgUHJvcGVydGllcyBwcm9wcywgTGlzdCBwcm9wc0ZvdW5kLCBMaXN0IG5ld1Byb3BzKSB7Ci0JCWlmIChjb250YWluZXIgPT0gbnVsbCB8fCAhY29udGFpbmVyLmV4aXN0cygpKQotCQkJcmV0dXJuOwotCQkKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZVtdIHJlc291cmNlcyA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0JCQlpZiAocmVzb3VyY2VzICE9IG51bGwpIHsKLQkJCQlpbnQgc2l6ZSA9IHJlc291cmNlcy5sZW5ndGg7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQkJaWYgKHJlc291cmNlc1tpXSBpbnN0YW5jZW9mIElGaWxlKSB7Ci0JCQkJCQlTdHJpbmdbXSBmb3VuZCA9IHNjYW5GaWxlKChJRmlsZSkgcmVzb3VyY2VzW2ldKTsKLQkJCQkJCWlmIChmb3VuZCAhPSBudWxsKSB7Ci0JCQkJCQkJaW50IHNpemUyID0gZm91bmQubGVuZ3RoOwotCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTI7IGorKykgewotCQkJCQkJCQlpZiAocHJvcHMuY29udGFpbnNLZXkoZm91bmRbal0pKSB7Ci0JCQkJCQkJCQlpZiAoIXByb3BzRm91bmQuY29udGFpbnMoZm91bmRbal0pKQotCQkJCQkJCQkJCXByb3BzRm91bmQuYWRkKGZvdW5kW2pdKTsKLQkJCQkJCQkJfSBlbHNlCi0JCQkJCQkJCQluZXdQcm9wcy5hZGQoZm91bmRbal0pOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfSBlbHNlIGlmIChyZXNvdXJjZXNbaV0gaW5zdGFuY2VvZiBJQ29udGFpbmVyKSB7Ci0JCQkJCQlzY2FuQ29udGFpbmVyKChJQ29udGFpbmVyKSByZXNvdXJjZXNbaV0sIHByb3BzLCBwcm9wc0ZvdW5kLCBuZXdQcm9wcyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2NhbiBhIGphdmEgZmlsZSBhbmQgcmV0dXJuIGFsbCBvZiB0aGUgIiV4eHgiIGZvdW5kLgotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybiBMaXN0IG9mIG1hdGNoaW5nIHN0cmluZ3MuCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZ1tdIHNjYW5GaWxlKElGaWxlIGZpbGUpIHsKLQkJaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHMoKSkKLQkJCXJldHVybiBuZXcgU3RyaW5nWzBdOwotCQkKLQkJaWYgKCFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiamF2YSIpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgieG1sIikpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1swXTsKLQotCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiICBGaWxlOiAiICsgZmlsZS5nZXROYW1lKCkpOwotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihmaWxlLmdldENvbnRlbnRzKCkpKTsKLQkJCQotCQkJU3RyaW5nIGxpbmUgPSBici5yZWFkTGluZSgpOwotCQkJd2hpbGUgKGxpbmUgIT0gbnVsbCkgewotCQkJCWludCBpbmRleCA9IGxpbmUuaW5kZXhPZigiJSIpOwotCQkJCXdoaWxlIChpbmRleCA+PSAwKSB7Ci0JCQkJCWludCBlbmQgPSBsaW5lLmluZGV4T2YoIlwiIiwgaW5kZXggKyAxKTsKLQkJCQkJaWYgKGVuZCA+PSAwKSB7Ci0JCQkJCQlTdHJpbmcgcyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSwgZW5kKTsKLQkJCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCIgICAgRm91bmQgJyIgKyBzICsgIiciKTsKLQkJCQkJCWxpc3QuYWRkKHMpOwotCQkJCQl9Ci0JCQkJCWluZGV4ID0gbGluZS5pbmRleE9mKCIlIiwgaW5kZXggKyAxKTsKLQkJCQl9Ci0JCQkJbGluZSA9IGJyLnJlYWRMaW5lKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JCX0KLQkJCi0JCVN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW2xpc3Quc2l6ZSgpXTsKLQkJbGlzdC50b0FycmF5KHMpOwotCQlyZXR1cm4gczsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvU2VydmVyTGF1bmNoQ29uZmlndXJhdGlvblRhYlRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YmZjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiIHRhYjsKLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShTZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGVUYWIoKSB7Ci0JCXRhYiA9IG5ldyBTZXJ2ZXJMYXVuY2hDb25maWd1cmF0aW9uVGFiKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMUNyZWF0ZVRhYigpIHsKLQkJdGFiID0gbmV3IFNlcnZlckxhdW5jaENvbmZpZ3VyYXRpb25UYWIobmV3IFN0cmluZ1tdIHsidGVzdCJ9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyQ3JlYXRlQ29udHJvbCgpIHsKLQkJdHJ5IHsKLQkJCXRhYi5jcmVhdGVDb250cm9sKG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzU2V0RGVmYXVsdHMoKSB7Ci0JCXRyeSB7Ci0JCQl0YWIuc2V0RGVmYXVsdHMobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDRJbml0aWFsaXplRnJvbSgpIHsKLQkJdHJ5IHsKLQkJCXRhYi5pbml0aWFsaXplRnJvbShudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNVBlcmZvcm1BcHBseSgpIHsKLQkJdHJ5IHsKLQkJCXRhYi5wZXJmb3JtQXBwbHkobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZJc1ZhbGlkKCkgewotCQl0cnkgewotCQkJdGFiLmlzVmFsaWQobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdHZXRJbWFnZSgpIHsKLQkJdGFiLmdldEltYWdlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOEdldE5hbWUoKSB7Ci0JCXRhYi5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA5VGVzdFByb3RlY3RlZE1ldGhvZHMoKSB7Ci0JCWNsYXNzIE15TGF1bmNoVGFiIGV4dGVuZHMgU2VydmVyTGF1bmNoQ29uZmlndXJhdGlvblRhYiB7Ci0JCQlwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkKCkgewotCQkJCXRyeSB7Ci0JCQkJCWhhbmRsZVNlcnZlclNlbGVjdGlvbigpOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZQotCQkJCX0KLQkJCX0KLQkJfQotCQlNeUxhdW5jaFRhYiBtbHQgPSBuZXcgTXlMYXVuY2hUYWIoKTsKLQkJbWx0LnRlc3RQcm90ZWN0ZWQoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TZXJ2ZXJVSUNvcmVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TZXJ2ZXJVSUNvcmVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWI4NTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvU2VydmVyVUlDb3JlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyVUlDb3JlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFNlcnZlclVJQ29yZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RMYWJlbFByb3ZpZGVyKCkgewotCQlhc3NlcnROb3ROdWxsKFNlcnZlclVJQ29yZS5nZXRMYWJlbFByb3ZpZGVyKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1NlcnZlclVJUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9TZXJ2ZXJVSVByZWZlcmVuY2VzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1ZTcyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1NlcnZlclVJUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5TZXJ2ZXJVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLlNlcnZlclVJUHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJVSVByZWZlcmVuY2VzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTZXJ2ZXJVSVByZWZlcmVuY2VzIHByZWZzOwkKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlclVJUHJlZmVyZW5jZXNUZXN0Q2FzZS5jbGFzcywgIlNlcnZlclVJUHJlZmVyZW5jZXNUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMEdldFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMgPSBTZXJ2ZXJVSVBsdWdpbi5nZXRQcmVmZXJlbmNlcygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMUdldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuZ2V0UHJvbXB0QmVmb3JlSXJyZXZlcnNpYmxlQ2hhbmdlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAyR2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5nZXRTYXZlRWRpdG9ycygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldFByb21wdEJlZm9yZUlycmV2ZXJzaWJsZUNoYW5nZShmYWxzZSk7Ci0JCWFzc2VydEZhbHNlKHByZWZzLmdldFByb21wdEJlZm9yZUlycmV2ZXJzaWJsZUNoYW5nZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRQcm9tcHRCZWZvcmVJcnJldmVyc2libGVDaGFuZ2UodHJ1ZSk7Ci0JCWFzc2VydFRydWUocHJlZnMuZ2V0UHJvbXB0QmVmb3JlSXJyZXZlcnNpYmxlQ2hhbmdlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldFNhdmVFZGl0b3JzKFNlcnZlclVJUHJlZmVyZW5jZXMuU0FWRV9FRElUT1JTX0FVVE8pOwotCQlhc3NlcnRFcXVhbHMocHJlZnMuZ2V0U2F2ZUVkaXRvcnMoKSwgU2VydmVyVUlQcmVmZXJlbmNlcy5TQVZFX0VESVRPUlNfQVVUTyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNlNldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcHJlZnMuc2V0U2F2ZUVkaXRvcnMoU2VydmVyVUlQcmVmZXJlbmNlcy5TQVZFX0VESVRPUlNfTkVWRVIpOwotCQlhc3NlcnRFcXVhbHMocHJlZnMuZ2V0U2F2ZUVkaXRvcnMoKSwgU2VydmVyVUlQcmVmZXJlbmNlcy5TQVZFX0VESVRPUlNfTkVWRVIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXByZWZzLnNldFNhdmVFZGl0b3JzKFNlcnZlclVJUHJlZmVyZW5jZXMuU0FWRV9FRElUT1JTX1BST01QVCk7Ci0JCWFzc2VydEVxdWFscyhwcmVmcy5nZXRTYXZlRWRpdG9ycygpLCBTZXJ2ZXJVSVByZWZlcmVuY2VzLlNBVkVfRURJVE9SU19QUk9NUFQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhEZWZhdWx0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRQcm9tcHRCZWZvcmVJcnJldmVyc2libGVDaGFuZ2UocHJlZnMuZ2V0RGVmYXVsdFByb21wdEJlZm9yZUlycmV2ZXJzaWJsZUNoYW5nZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKHByZWZzLmdldFByb21wdEJlZm9yZUlycmV2ZXJzaWJsZUNoYW5nZSgpLCBwcmVmcy5nZXREZWZhdWx0UHJvbXB0QmVmb3JlSXJyZXZlcnNpYmxlQ2hhbmdlKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlEZWZhdWx0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewotCQlwcmVmcy5zZXRTYXZlRWRpdG9ycyhwcmVmcy5nZXREZWZhdWx0U2F2ZUVkaXRvcnMoKSk7Ci0JCWFzc2VydEVxdWFscyhwcmVmcy5nZXRTYXZlRWRpdG9ycygpLCBwcmVmcy5nZXREZWZhdWx0U2F2ZUVkaXRvcnMoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvU2VydmVyVUlVdGlsVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvU2VydmVyVUlVdGlsVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI2NzYwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1NlcnZlclVJVXRpbFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJVSVV0aWxUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0U2hvd05ld1J1bnRpbWVXaXphcmQoKSB7Ci0JCS8vU2VydmVyVUlVdGlsLnNob3dOZXdSdW50aW1lV2l6YXJkKG51bGwsIG51bGwsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZWU0NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9kaWFsb2cvRGlhbG9nc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2RpYWxvZy9EaWFsb2dzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThkMzQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2RpYWxvZy9EaWFsb2dzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5EZWxldGVTZXJ2ZXJEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5UZXJtaW5hdGlvbkRpYWxvZzsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBEaWFsb2dzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlU2VydmVyRGlhbG9nKCkgewotCQlEZWxldGVTZXJ2ZXJEaWFsb2cgZHNkID0gbmV3IERlbGV0ZVNlcnZlckRpYWxvZyhnZXRTaGVsbCgpLCBuZXcgSVNlcnZlclswXSwgbmV3IElGb2xkZXJbMF0pOwotCQlVSVRlc3RIZWxwZXIuYXNzZXJ0RGlhbG9nKGRzZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRlcm1pbmF0aW9uRGlhbG9nKCkgewotCQlUZXJtaW5hdGlvbkRpYWxvZyB0ZCA9IG5ldyBUZXJtaW5hdGlvbkRpYWxvZyhnZXRTaGVsbCgpLCAiTXlTZXJ2ZXIgd2l0aCBhIHJlYWxseSBsb25nIG5hbWUiKTsKLQkJVUlUZXN0SGVscGVyLmFzc2VydERpYWxvZyh0ZCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZGlhbG9nL1ByZWZlcmVuY2VzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZGlhbG9nL1ByZWZlcmVuY2VzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiZGNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2RpYWxvZy9QcmVmZXJlbmNlc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZGlhbG9nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLQotcHVibGljIGNsYXNzIFByZWZlcmVuY2VzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShQcmVmZXJlbmNlc1Rlc3RDYXNlLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgUHJlZmVyZW5jZXNUZXN0Q2FzZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNlcnZlclByZWZlcmVuY2VQYWdlKCkgewotCQlEaWFsb2cgZGlhbG9nID0gVUlUZXN0SGVscGVyLmdldFByZWZlcmVuY2VEaWFsb2coIm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkucHJlZmVyZW5jZVBhZ2UiKTsKLQkJVUlUZXN0SGVscGVyLmFzc2VydERpYWxvZyhkaWFsb2cpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UnVudGltZVByZWZlcmVuY2VQYWdlKCkgewotCQlEaWFsb2cgZGlhbG9nID0gVUlUZXN0SGVscGVyLmdldFByZWZlcmVuY2VEaWFsb2coIm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkucnVudGltZS5wcmVmZXJlbmNlUGFnZSIpOwotCQlVSVRlc3RIZWxwZXIuYXNzZXJ0RGlhbG9nKGRpYWxvZyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlcnZlclByb3BlcnR5UGFnZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJQcm9wZXJ0eVRlc3QiKTsKLQkJcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JCXByb2plY3Qub3BlbihudWxsKTsKLQotCQlEaWFsb2cgZGlhbG9nID0gVUlUZXN0SGVscGVyLmdldFByb3BlcnR5RGlhbG9nKCJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnByb2plY3QucHJvcGVydGllcyIsIHByb2plY3QpOwotCQlVSVRlc3RIZWxwZXIuYXNzZXJ0RGlhbG9nKGRpYWxvZyk7Ci0JCQotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9kaWFsb2cvVUlUZXN0SGVscGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2RpYWxvZy9VSVRlc3RIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiZWFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2RpYWxvZy9VSVRlc3RIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZGlhbG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRpYWxvZ3MuUHJvcGVydHlEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2VDb250cmlidXRvck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLklXb3JrYmVuY2hBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgVUlUZXN0SGVscGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGNsYXNzIFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyIGV4dGVuZHMgUHJlZmVyZW5jZURpYWxvZyB7Ci0JCXB1YmxpYyBQcmVmZXJlbmNlRGlhbG9nV3JhcHBlcihTaGVsbCBwYXJlbnRTaGVsbCwgUHJlZmVyZW5jZU1hbmFnZXIgbWFuYWdlcikgewotCQkJc3VwZXIocGFyZW50U2hlbGwsIG1hbmFnZXIpOwotCQl9Ci0JCXByb3RlY3RlZCBib29sZWFuIHNob3dQYWdlKElQcmVmZXJlbmNlTm9kZSBub2RlKSB7Ci0JCQlyZXR1cm4gc3VwZXIuc2hvd1BhZ2Uobm9kZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJvcGVydHlEaWFsb2dXcmFwcGVyIGV4dGVuZHMgUHJvcGVydHlEaWFsb2cgewotCQlwdWJsaWMgUHJvcGVydHlEaWFsb2dXcmFwcGVyKFNoZWxsIHBhcmVudFNoZWxsLCBQcmVmZXJlbmNlTWFuYWdlciBtYW5hZ2VyLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJc3VwZXIocGFyZW50U2hlbGwsIG1hbmFnZXIsIHNlbGVjdGlvbik7Ci0JCX0KLQkJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd1BhZ2UoSVByZWZlcmVuY2VOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBzdXBlci5zaG93UGFnZShub2RlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBQcmVmZXJlbmNlRGlhbG9nIGdldFByZWZlcmVuY2VEaWFsb2coU3RyaW5nIGlkKSB7Ci0JCVByZWZlcmVuY2VEaWFsb2dXcmFwcGVyIGRpYWxvZyA9IG51bGw7Ci0JCVByZWZlcmVuY2VNYW5hZ2VyIG1hbmFnZXIgPSBXb3JrYmVuY2hQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0JCWlmIChtYW5hZ2VyICE9IG51bGwpIHsKLQkJCWRpYWxvZyA9IG5ldyBQcmVmZXJlbmNlRGlhbG9nV3JhcHBlcihnZXRTaGVsbCgpLCBtYW5hZ2VyKTsKLQkJCWRpYWxvZy5jcmVhdGUoKTsJCi0KLQkJCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsKLQkJCSAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykKLQkJCXsKLQkJCQlJUHJlZmVyZW5jZU5vZGUgbm9kZSA9IChJUHJlZmVyZW5jZU5vZGUpaXRlcmF0b3IubmV4dCgpOwotCQkJCWlmICggbm9kZS5nZXRJZCgpLmVxdWFscyhpZCkgKSB7Ci0JCQkJCWRpYWxvZy5zaG93UGFnZShub2RlKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBkaWFsb2c7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgUHJvcGVydHlEaWFsb2cgZ2V0UHJvcGVydHlEaWFsb2coU3RyaW5nIGlkLCBJQWRhcHRhYmxlIGVsZW1lbnQpIHsKLQkJUHJvcGVydHlEaWFsb2dXcmFwcGVyIGRpYWxvZyA9IG51bGw7Ci0KLQkJUHJvcGVydHlQYWdlTWFuYWdlciBtYW5hZ2VyID0gbmV3IFByb3BlcnR5UGFnZU1hbmFnZXIoKTsKLQkJU3RyaW5nIHRpdGxlID0gIiI7Ci0JCVN0cmluZyBuYW1lICA9ICIiOwotCi0JCS8vIGxvYWQgcGFnZXMgZm9yIHRoZSBzZWxlY3Rpb24KLQkJLy8gZmlsbCB0aGUgbWFuYWdlciB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgbWF0Y2hpbmcgY29udHJpYnV0b3JzCi0JCVByb3BlcnR5UGFnZUNvbnRyaWJ1dG9yTWFuYWdlci5nZXRNYW5hZ2VyKCkuY29udHJpYnV0ZShtYW5hZ2VyLCBlbGVtZW50KTsKLQkJCi0JCUlXb3JrYmVuY2hBZGFwdGVyIGFkYXB0ZXIgPSAoSVdvcmtiZW5jaEFkYXB0ZXIpZWxlbWVudC5nZXRBZGFwdGVyKElXb3JrYmVuY2hBZGFwdGVyLmNsYXNzKTsKLQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJbmFtZSA9IGFkYXB0ZXIuZ2V0TGFiZWwoZWxlbWVudCk7Ci0JCX0KLQkJCi0JCS8vIHRlc3RpbmcgaWYgdGhlcmUgYXJlIHBhZ2VzIGluIHRoZSBtYW5hZ2VyCi0JCUl0ZXJhdG9yIHBhZ2VzID0gbWFuYWdlci5nZXRFbGVtZW50cyhQcmVmZXJlbmNlTWFuYWdlci5QUkVfT1JERVIpLml0ZXJhdG9yKCk7CQkKLQkJaWYgKCFwYWdlcy5oYXNOZXh0KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCXRpdGxlID0gTkxTLmJpbmQoV29ya2JlbmNoTWVzc2FnZXMuUHJvcGVydHlEaWFsb2dfcHJvcGVydHlNZXNzYWdlLCBuZXcgT2JqZWN0W10ge25hbWV9KTsKLQkJZGlhbG9nID0gbmV3IFByb3BlcnR5RGlhbG9nV3JhcHBlcihnZXRTaGVsbCgpLCBtYW5hZ2VyLCBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlbGVtZW50KSk7IAotCQlkaWFsb2cuY3JlYXRlKCk7Ci0JCWRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWFuYWdlci5nZXRFbGVtZW50cyhQcmVmZXJlbmNlTWFuYWdlci5QUkVfT1JERVIpLml0ZXJhdG9yKCk7Ci0JCSAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCQkJSVByZWZlcmVuY2VOb2RlIG5vZGUgPSAoSVByZWZlcmVuY2VOb2RlKWl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmICggbm9kZS5nZXRJZCgpLmVxdWFscyhpZCkgKSB7Ci0JCQkJZGlhbG9nLnNob3dQYWdlKG5vZGUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBkaWFsb2c7Ci0JfQotCQotCS8qKgotCSAqIEF1dG9tYXRlZCB0ZXN0IHRoYXQgY2hlY2tzIGFsbCB0aGUgbGFiZWxzIGFuZCBidXR0b25zIG9mIGEgZGlhbG9nCi0JICogdG8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIGRpc3BsYXkgYWxsIHRoZSB0ZXh0LiAgQW55Ci0JICogdGV4dCB0aGF0IHdyYXBzIGlzIG9ubHkgYXBwcm94aW1hdGVkIGFuZCBpcyBjdXJyZW50bHkgbm90IGFjY3VyYXRlLgotCSAqIAotCSAqIEBwYXJhbSBkaWFsb2cgdGhlIHRlc3QgZGlhbG9nIHRvIGJlIHZlcmlmaWVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnREaWFsb2coRGlhbG9nIGRpYWxvZykgewotCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChkaWFsb2cpOwotCQlkaWFsb2cuc2V0QmxvY2tPbk9wZW4oZmFsc2UpOwotCQlkaWFsb2cub3BlbigpOwotCQlTaGVsbCBzaGVsbCA9IGRpYWxvZy5nZXRTaGVsbCgpOwotCQl2ZXJpZnlDb21wb3NpdGVUZXh0KHNoZWxsKTsKLQkJZGlhbG9nLmNsb3NlKCk7Ci0JfQotCi0JLyoKLQkgKiBMb29rcyBhdCBhbGwgdGhlIGNoaWxkIHdpZGdldHMgb2YgYSBnaXZlbiBjb21wb3NpdGUgYW5kCi0JICogdmVyaWZpZXMgdGhlIHRleHQgb24gYWxsIGxhYmVscyBhbmQgd2lkZ2V0cy4KLQkgKiBAcGFyYW0gY29tcG9zaXRlIFRoZSBjb21wb3NpdGUgdG8gbG9vayB0aHJvdWdoCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlDb21wb3NpdGVUZXh0KENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKLQkJQ29udHJvbCBjaGlsZHJlbltdID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJLy92ZXJpZnkgdGhlIHRleHQgaWYgdGhlIGNoaWxkIGlzIGEgYnV0dG9uCi0JCQkJdmVyaWZ5QnV0dG9uVGV4dCgoQnV0dG9uKSBjaGlsZHJlbltpXSk7Ci0JCQl9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXhOb3RCdXR0b24pIHsKLQkJCQl0cnkgewotCQkJCQkvL2NoaWxkIGlzIG5vdCBhIGJ1dHRvbiwgbWF5YmUgYSBsYWJlbAotCQkJCQl2ZXJpZnlMYWJlbFRleHQoKExhYmVsKSBjaGlsZHJlbltpXSk7Ci0JCQkJfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGV4Tm90TGFiZWwpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCS8vY2hpbGQgaXMgbm90IGEgbGFiZWwsIG1ha2UgYSByZWN1cnNpdmUgY2FsbCBpZiBpdCBpcyBhIGNvbXBvc2l0ZQotCQkJCQkJdmVyaWZ5Q29tcG9zaXRlVGV4dCgoQ29tcG9zaXRlKSBjaGlsZHJlbltpXSk7Ci0JCQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleE5vdENvbXBvc2l0ZSkgewotCQkJCQkJLy90aGUgY2hpbGQgaXMgbm90IGEgYnV0dG9uLCBsYWJlbCwgb3IgY29tcG9zaXRlIC0gaWdub3JlIGl0LgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCS8qCi0JICogVmVyaWZpZXMgdGhhdCBhIGdpdmVuIGJ1dHRvbiBpcyBsYXJnZSBlbm91Z2ggdG8gZGlzcGxheSBpdHMgdGV4dC4KLQkgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gdG8gdmVyaWZ5LAotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgdmVyaWZ5QnV0dG9uVGV4dChCdXR0b24gYnV0dG9uKSB7Ci0JCVN0cmluZyB3aWRnZXQgPSBidXR0b24udG9TdHJpbmcoKTsKLQkJUG9pbnQgc2l6ZSA9IGJ1dHRvbi5nZXRTaXplKCk7Ci0KLQkJLy8gY29tcHV0ZSB0aGUgc2l6ZSB3aXRoIG5vIGxpbmUgd3JhcHBpbmcKLQkJUG9pbnQgcHJlZmVycmVkID0gYnV0dG9uLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0JCS8vaWYgKHNpemUueS9wcmVmZXJyZWQueSkgPT0gWCwgdGhlbiBsYWJlbCBzcGFucyBYIGxpbmVzLCBzbyBkaXZpZGUKLQkJLy90aGUgY2FsY3VsYXRlZCB2YWx1ZSBvZiBwcmVmZXJyZWQueCBieSBYCi0JCWlmIChwcmVmZXJyZWQueSAqIHNpemUueSA+IDApIHsKLQkJCXByZWZlcnJlZC55IC89IGNvdW50TGluZXMoYnV0dG9uLmdldFRleHQoKSk7IC8vY2hlY2sgZm9yICdcblwnCi0JCQlpZiAoc2l6ZS55IC8gcHJlZmVycmVkLnkgPiAxKSB7Ci0JCQkJcHJlZmVycmVkLnggLz0gKHNpemUueSAvIHByZWZlcnJlZC55KTsKLQkJCX0KLQkJfQotCi0JCVN0cmluZyBtZXNzYWdlID0KLQkJCW5ldyBTdHJpbmdCdWZmZXIoIldhcm5pbmc6ICIpCi0JCQkJLmFwcGVuZCh3aWRnZXQpCi0JCQkJLmFwcGVuZCgiXG5cdEFjdHVhbCBXaWR0aCAtPiAiKQotCQkJCS5hcHBlbmQoc2l6ZS54KQotCQkJCS5hcHBlbmQoIlxuXHRSZWNvbW1lbmRlZCBXaWR0aCAtPiAiKQotCQkJCS5hcHBlbmQocHJlZmVycmVkLngpCi0JCQkJLnRvU3RyaW5nKCk7Ci0JCWlmIChwcmVmZXJyZWQueCA+IHNpemUueCkgewotCQkJLy9jbG9zZSB0aGUgZGlhbG9nCi0JCQlidXR0b24uZ2V0U2hlbGwoKS5kaXNwb3NlKCk7Ci0JCQlBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLnRvU3RyaW5nKCksIGZhbHNlKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBsYWJlbCBpcyBsYXJnZSBlbm91Z2ggdG8gZGlzcGxheSBpdHMgdGV4dC4KLQkgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIHRvIHZlcmlmeSwKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeUxhYmVsVGV4dChMYWJlbCBsYWJlbCkgewotCQlTdHJpbmcgd2lkZ2V0ID0gbGFiZWwudG9TdHJpbmcoKTsKLQkJUG9pbnQgc2l6ZSA9IGxhYmVsLmdldFNpemUoKTsKLQotCQkvLyBjb21wdXRlIHRoZSBzaXplIHdpdGggbm8gbGluZSB3cmFwcGluZwotCQlQb2ludCBwcmVmZXJyZWQgPSBsYWJlbC5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotCQkvL2lmIChzaXplLnkvcHJlZmVycmVkLnkpID09IFgsIHRoZW4gbGFiZWwgc3BhbnMgWCBsaW5lcywgc28gZGl2aWRlCi0JCS8vdGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgcHJlZmVycmVkLnggYnkgWAotCQlpZiAocHJlZmVycmVkLnkgKiBzaXplLnkgPiAwKSB7Ci0JCQlwcmVmZXJyZWQueSAvPSBjb3VudExpbmVzKGxhYmVsLmdldFRleHQoKSk7Ci0JCQlpZiAoc2l6ZS55IC8gcHJlZmVycmVkLnkgPiAxKSB7Ci0JCQkJcHJlZmVycmVkLnggLz0gKHNpemUueSAvIHByZWZlcnJlZC55KTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgbWVzc2FnZSA9IG5ldyBTdHJpbmdCdWZmZXIoIldhcm5pbmc6ICIpLmFwcGVuZCh3aWRnZXQpCi0JCQkuYXBwZW5kKCJcblx0QWN0dWFsIFdpZHRoIC0+ICIpLmFwcGVuZChzaXplLngpCi0JCQkuYXBwZW5kKCJcblx0UmVjb21tZW5kZWQgV2lkdGggLT4gIikuYXBwZW5kKHByZWZlcnJlZC54KS50b1N0cmluZygpOwotCQlpZiAocHJlZmVycmVkLnggPiBzaXplLngpIHsKLQkJCS8vY2xvc2UgdGhlIGRpYWxvZwotCQkJbGFiZWwuZ2V0U2hlbGwoKS5kaXNwb3NlKCk7Ci0JCQlBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLnRvU3RyaW5nKCksIGZhbHNlKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgZ2l2ZW4gU3RyaW5nLgotCSAqIEZvciBleGFtcGxlLCBpZiBhIHN0cmluZyBjb250YWlucyBvbmUgKDEpIG5ld2xpbmUgY2hhcmFjdGVyLAotCSAqIGEgdmFsdWUgb2YgdHdvICgyKSB3b3VsZCBiZSByZXR1cm5lZC4KLQkgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIGxvb2sgdGhyb3VnaC4KLQkgKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRleHQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50TGluZXMoU3RyaW5nIHRleHQpIHsKLQkJaW50IG5ld0xpbmVzID0gMTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKLQkJCWlmICh0ZXh0LmNoYXJBdChpKSA9PSAnXG4nKSB7Ci0JCQkJbmV3TGluZXMrKzsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3TGluZXM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZGlhbG9nL1ZpZXdUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9kaWFsb2cvVmlld1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNzQ3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9kaWFsb2cvVmlld1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgVmlld1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RTZXJ2ZXJWaWV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJSVZpZXdQYXJ0IHZpZXcgPSBwYWdlLnNob3dWaWV3KCJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3Iik7Ci0JCXBhZ2UuaGlkZVZpZXcodmlldyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL0lPcmRlcmVkVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL0lPcmRlcmVkVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5N2Y0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2VkaXRvci9JT3JkZXJlZFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuZWRpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5lZGl0b3IuSU9yZGVyZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuaW1wbC5UZXN0T3JkZXJlZDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIElPcmRlcmVkVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJT3JkZXJlZCBvcmRlcmVkOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoSU9yZGVyZWRUZXN0Q2FzZS5jbGFzcywgIklPcmRlcmVkVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCW9yZGVyZWQgPSBuZXcgVGVzdE9yZGVyZWQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0T3JkZXIoKSB7Ci0JCW9yZGVyZWQuZ2V0T3JkZXIoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2VkaXRvci9JU2VydmVyRWRpdG9yUGFydElucHV0VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL0lTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDY1MGIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL0lTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXRUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmVkaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZWRpdG9yLklTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuaW1wbC5UZXN0U2VydmVyRWRpdG9yUGFydElucHV0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIElTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIElTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXQgaW5wdXQ7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShJU2VydmVyRWRpdG9yUGFydElucHV0VGVzdENhc2UuY2xhc3MsICJJU2VydmVyRWRpdG9yUGFydElucHV0VGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCWlucHV0ID0gbmV3IFRlc3RTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxR2V0U2VydmVyKCkgewotCQlpbnB1dC5nZXRTZXJ2ZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAySXNTZXJ2ZXJSZWFkT25seSgpIHsKLQkJaW5wdXQuaXNTZXJ2ZXJSZWFkT25seSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwNEV4aXN0cygpIHsKLQkJaW5wdXQuZXhpc3RzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNUdldEltYWdlRGVzY3JpcHRvcigpIHsKLQkJaW5wdXQuZ2V0SW1hZ2VEZXNjcmlwdG9yKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNkdldE5hbWUoKSB7Ci0JCWlucHV0LmdldE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA3R2V0UGVyc2lzdGFibGUoKSB7Ci0JCWlucHV0LmdldFBlcnNpc3RhYmxlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOEdldFRvb2xUaXBUZXh0KCkgewotCQlpbnB1dC5nZXRUb29sVGlwVGV4dCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlHZXRBZGFwdGVyKCkgewotCQlpbnB1dC5nZXRBZGFwdGVyKG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2VkaXRvci9TZXJ2ZXJFZGl0b3JBY3Rpb25GYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9lZGl0b3IvU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1YWQxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2VkaXRvci9TZXJ2ZXJFZGl0b3JBY3Rpb25GYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmVkaXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmltcGwuVGVzdFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlIGRlbGVnYXRlOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJFZGl0b3JBY3Rpb25GYWN0b3J5RGVsZWdhdGVUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZURlbGVnYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWRlbGVnYXRlID0gbmV3IFRlc3RTZXJ2ZXJFZGl0b3JBY3Rpb25GYWN0b3J5RGVsZWdhdGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxU2hvdWxkRGlzcGxheSgpIHRocm93cyBFeGNlcHRpb24gewotCQlkZWxlZ2F0ZS5zaG91bGREaXNwbGF5KG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDJDcmVhdGVBY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZGVsZWdhdGUuY3JlYXRlQWN0aW9uKG51bGwsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL1NlcnZlckVkaXRvclBhcnRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9lZGl0b3IvU2VydmVyRWRpdG9yUGFydFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzI4NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9lZGl0b3IvU2VydmVyRWRpdG9yUGFydFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmVkaXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmVkaXRvci5TZXJ2ZXJFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckVkaXRvclBhcnRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFNlcnZlckVkaXRvclBhcnQgZWRpdG9yOwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE9yZGVyZWRUZXN0U3VpdGUoU2VydmVyRWRpdG9yUGFydFRlc3RDYXNlLmNsYXNzLCAiU2VydmVyRWRpdG9yUGFydFRlc3RDYXNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAwQ3JlYXRlRWRpdG9yKCkgewotCQllZGl0b3IgPSBuZXcgU2VydmVyRWRpdG9yUGFydCgpIHsKLQkJCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCQkvLyBkbyBub3RoaW5nCi0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDJEb1NhdmUoKSB7Ci0JCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM1NhdmVBcygpIHsKLQkJZWRpdG9yLmRvU2F2ZUFzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNElzRGlydHkoKSB7Ci0JCWVkaXRvci5pc0RpcnR5KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNUlzU2F2ZUFzQWxsb3dlZCgpIHsKLQkJZWRpdG9yLmlzU2F2ZUFzQWxsb3dlZCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZTZXRFcnJvck1lc3NhZ2UoKSB7Ci0JCWVkaXRvci5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwN1VwZGF0ZUVycm9yTWVzc2FnZSgpIHsKLQkJZWRpdG9yLnVwZGF0ZUVycm9yTWVzc2FnZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDhHZXRFcnJvck1lc3NhZ2UoKSB7Ci0JCXRyeSB7Ci0JCQllZGl0b3IuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlHZXRTYXZlU3RhdHVzKCkgewotCQllZGl0b3IuZ2V0U2F2ZVN0YXR1cygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBJbml0KCkgewotCQl0cnkgewotCQkJZWRpdG9yLmluaXQobnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTFHZXRTZXJ2ZXIoKSB7Ci0JCWVkaXRvci5nZXRTZXJ2ZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDEySW5zZXJ0U2VjdGlvbnMoKSB7Ci0JCWVkaXRvci5pbnNlcnRTZWN0aW9ucyhudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTJEaXNwb3NlKCkgewotCQllZGl0b3IuZGlzcG9zZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxM1Rlc3RQcm90ZWN0ZWRNZXRob2RzKCkgewotCQljbGFzcyBNeVNlcnZlckVkaXRvclBhcnQgZXh0ZW5kcyBTZXJ2ZXJFZGl0b3JQYXJ0IHsKLQkJCXB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWQoKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZ2V0Rm9ybVRvb2xraXQobnVsbCk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlCi0JCQkJfQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQkJLy8gZG8gbm90aGluZwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJCQkvLyBkbyBub3RoaW5nCi0JCQl9Ci0JCX0KLQkJTXlTZXJ2ZXJFZGl0b3JQYXJ0IG1zZXAgPSBuZXcgTXlTZXJ2ZXJFZGl0b3JQYXJ0KCk7Ci0JCW1zZXAudGVzdFByb3RlY3RlZCgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2VkaXRvci9TZXJ2ZXJFZGl0b3JTZWN0aW9uVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL1NlcnZlckVkaXRvclNlY3Rpb25UZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2JkMmNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvZWRpdG9yL1NlcnZlckVkaXRvclNlY3Rpb25UZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmVkaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZWRpdG9yLlNlcnZlckVkaXRvclNlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckVkaXRvclNlY3Rpb25UZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFNlcnZlckVkaXRvclNlY3Rpb24gc2VjdGlvbjsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlckVkaXRvclNlY3Rpb25UZXN0Q2FzZS5jbGFzcywgIlNlcnZlckVkaXRvclNlY3Rpb25UZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJc2VjdGlvbiA9IG5ldyBTZXJ2ZXJFZGl0b3JTZWN0aW9uKCkgewotCQkJLy8gZG8gbm90aGluZwotCQl9OwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMUluaXQoKSB7Ci0JCXNlY3Rpb24uaW5pdChudWxsLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyQ3JlYXRlU2VjdGlvbigpIHsKLQkJc2VjdGlvbi5jcmVhdGVTZWN0aW9uKG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDNEaXNwb3NlKCkgewotCQlzZWN0aW9uLmRpc3Bvc2UoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0RXJyb3JNZXNzYWdlKCkgewotCQlzZWN0aW9uLmdldEVycm9yTWVzc2FnZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDVHZXRTYXZlU3RhdHVzKCkgewotCQlzZWN0aW9uLmdldFNhdmVTdGF0dXMoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2R2V0U2hlbGwoKSB7Ci0JCXRyeSB7Ci0JCQlzZWN0aW9uLmdldFNoZWxsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDdTZXRTZXJ2ZXJFZGl0b3JQYXJ0KCkgewotCQlzZWN0aW9uLnNldFNlcnZlckVkaXRvclBhcnQobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwOFNldEVycm9yTWVzc2FnZSgpIHsKLQkJc2VjdGlvbi5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvaW1wbC9UZXN0T3JkZXJlZC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RPcmRlcmVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMWE1NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RPcmRlcmVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuZWRpdG9yLklPcmRlcmVkOwotCi1wdWJsaWMgY2xhc3MgVGVzdE9yZGVyZWQgaW1wbGVtZW50cyBJT3JkZXJlZCB7Ci0KLQlwdWJsaWMgaW50IGdldE9yZGVyKCkgewotCQlyZXR1cm4gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2ltcGwvVGVzdFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJFZGl0b3JBY3Rpb25GYWN0b3J5RGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmZWI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2ltcGwvVGVzdFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmVkaXRvci5JU2VydmVyRWRpdG9yUGFydElucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuU2VydmVyRWRpdG9yQWN0aW9uRmFjdG9yeURlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZSBleHRlbmRzIFNlcnZlckVkaXRvckFjdGlvbkZhY3RvcnlEZWxlZ2F0ZSB7Ci0KLQlwdWJsaWMgSUFjdGlvbiBjcmVhdGVBY3Rpb24oSUVkaXRvclNpdGUgc2l0ZSwgSVNlcnZlckVkaXRvclBhcnRJbnB1dCBpbnB1dCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2ltcGwvVGVzdFNlcnZlckVkaXRvclBhcnRJbnB1dC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiZmEwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL2ltcGwvVGVzdFNlcnZlckVkaXRvclBhcnRJbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZWRpdG9yLklTZXJ2ZXJFZGl0b3JQYXJ0SW5wdXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U2VydmVyRWRpdG9yUGFydElucHV0IGltcGxlbWVudHMgSVNlcnZlckVkaXRvclBhcnRJbnB1dHsKLQlwdWJsaWMgSVNlcnZlcldvcmtpbmdDb3B5IGdldFNlcnZlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXJSZWFkT25seSgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGV4aXN0cygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJUGVyc2lzdGFibGVFbGVtZW50IGdldFBlcnNpc3RhYmxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RXaXphcmRIYW5kbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvaW1wbC9UZXN0V2l6YXJkSGFuZGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ODgxOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy9pbXBsL1Rlc3RXaXphcmRIYW5kbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5pbXBsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLndpemFyZC5JV2l6YXJkSGFuZGxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFdpemFyZEhhbmRsZSBpbXBsZW1lbnRzIElXaXphcmRIYW5kbGUgewotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2UgPSBudWxsOwotCXByaXZhdGUgaW50IG1lc3NhZ2VUeXBlID0gSU1lc3NhZ2VQcm92aWRlci5OT05FOwotCQotCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJLy8gaWdub3JlCi0JfQotCi0JcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKSB7Ci0JCS8vIGlnbm9yZQotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7Ci0JCS8vIGlnbm9yZQotCX0KLQotCXB1YmxpYyB2b2lkIHNldEltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IgaW1hZ2UpIHsKLQkJLy8gaWdub3JlCi0JfQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbmV3TWVzc2FnZSwgaW50IG5ld1R5cGUpIHsKLQkJbWVzc2FnZSA9IG5ld01lc3NhZ2U7Ci0JCW1lc3NhZ2VUeXBlID0gbmV3VHlwZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oYm9vbGVhbiBmb3JrLCBib29sZWFuIGNhbmNlbGFibGUsIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIHsKLQkJLy8gaWdub3JlCi0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlyZXR1cm4gbWVzc2FnZTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldE1lc3NhZ2VUeXBlKCkgewotCQlyZXR1cm4gbWVzc2FnZVR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy93aXphcmQvSVdpemFyZEhhbmRsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL3dpemFyZC9JV2l6YXJkSGFuZGxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNkNmEwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL3dpemFyZC9JV2l6YXJkSGFuZGxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy53aXphcmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy5PcmRlcmVkVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuaW1wbC5UZXN0V2l6YXJkSGFuZGxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkud2l6YXJkLklXaXphcmRIYW5kbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBJV2l6YXJkSGFuZGxlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBJV2l6YXJkSGFuZGxlIHdpemFyZEhhbmRsZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBzYW1wbGVNZXNzYWdlID0gIlNhbXBsZSBtZXNzYWdlIjsKLQlwcml2YXRlIGZpbmFsIGludCBzYW1wbGVNZXNzYWdlVHlwZSA9IElNZXNzYWdlUHJvdmlkZXIuRVJST1I7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShJV2l6YXJkSGFuZGxlVGVzdENhc2UuY2xhc3MsICJJV2l6YXJkSGFuZGxlVGVzdENhc2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MDBDcmVhdGUoKSB7Ci0JCXdpemFyZEhhbmRsZSA9IG5ldyBUZXN0V2l6YXJkSGFuZGxlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMVJ1bigpIHRocm93cyBFeGNlcHRpb24gewotCQl3aXphcmRIYW5kbGUucnVuKHRydWUsIHRydWUsIG51bGwpOyAKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyU2V0RGVzY3JpcHRpb24oKSB7Ci0JCXdpemFyZEhhbmRsZS5zZXREZXNjcmlwdGlvbihudWxsKTsgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM1NldEltYWdlRGVzY3JpcHRvcigpIHsKLQkJd2l6YXJkSGFuZGxlLnNldEltYWdlRGVzY3JpcHRvcihudWxsKTsgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNFNldE1lc3NhZ2UoKSB7Ci0JCXdpemFyZEhhbmRsZS5zZXRNZXNzYWdlKHNhbXBsZU1lc3NhZ2UsIHNhbXBsZU1lc3NhZ2VUeXBlKTsgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNVNldFRpdGxlKCkgewotCQl3aXphcmRIYW5kbGUuc2V0VGl0bGUobnVsbCk7IAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDZVcGRhdGUoKSB7Ci0JCXdpemFyZEhhbmRsZS51cGRhdGUoKTsgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwN0dldE1lc3NhZ2UoKSB7Ci0JCWFzc2VydEVxdWFscyhzYW1wbGVNZXNzYWdlLCB3aXphcmRIYW5kbGUuZ2V0TWVzc2FnZSgpKTsKLQl9Ci0gICAgCi0JcHVibGljIHZvaWQgdGVzdDA4R2V0TWVzc2FnZVR5cGUoKSB7Ci0JCWFzc2VydEVxdWFscyhzYW1wbGVNZXNzYWdlVHlwZSwgd2l6YXJkSGFuZGxlLmdldE1lc3NhZ2VUeXBlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3VpL3Rlc3RzL3dpemFyZC9UYXNrV2l6YXJkVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvd2l6YXJkL1Rhc2tXaXphcmRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDEwMWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvd2l6YXJkL1Rhc2tXaXphcmRUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy53aXphcmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndpemFyZC5UYXNrV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuT3JkZXJlZFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLndpemFyZC5XaXphcmRGcmFnbWVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRhc2tXaXphcmRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFRhc2tXaXphcmQgd2l6YXJkOwotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFRhc2tXaXphcmRUZXN0Q2FzZS5jbGFzcywgIlRhc2tXaXphcmRUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZSgpIHsKLQkJd2l6YXJkID0gbmV3IFRhc2tXaXphcmQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxQ3JlYXRlKCkgewotCQl3aXphcmQgPSBuZXcgVGFza1dpemFyZCgidGl0bGUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAyQ3JlYXRlKCkgewotCQl3aXphcmQgPSBuZXcgVGFza1dpemFyZCgidGl0bGUiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAzQ3JlYXRlKCkgewotCQl3aXphcmQgPSBuZXcgVGFza1dpemFyZCgoV2l6YXJkRnJhZ21lbnQpbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0Q29udGFpbmVyKCkgewotCQl3aXphcmQuZ2V0Q29udGFpbmVyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNVNldFJvb3RGcmFnbWVudCgpIHsKLQkJd2l6YXJkLnNldFJvb3RGcmFnbWVudChudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2R2V0Um9vdEZyYWdtZW50KCkgewotCQl3aXphcmQuZ2V0Um9vdEZyYWdtZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwN1BlcmZvcm1DYW5jZWwoKSB7Ci0JCXRyeSB7Ci0JCQl3aXphcmQucGVyZm9ybUNhbmNlbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA4UGVyZm9ybUZpbmlzaCgpIHsKLQkJdHJ5IHsKLQkJCXdpemFyZC5wZXJmb3JtRmluaXNoKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MDlBZGRQYWdlKCkgewotCQl0cnkgewotCQkJd2l6YXJkLmFkZFBhZ2UobnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBBZGRQYWdlcygpIHsKLQkJd2l6YXJkLmFkZFBhZ2VzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxMUNhbkZpbmlzaCgpIHsKLQkJd2l6YXJkLmNhbkZpbmlzaCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTJDcmVhdGVQYWdlQ29udHJvbHMoKSB7Ci0JCXdpemFyZC5jcmVhdGVQYWdlQ29udHJvbHMobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxM0Rpc3Bvc2UoKSB7Ci0JCXdpemFyZC5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNEdldERlZmF1bHRQYWdlSW1hZ2UoKSB7Ci0JCXdpemFyZC5nZXREZWZhdWx0UGFnZUltYWdlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxNUdldERpYWxvZ1NldHRpbmdzKCkgewotCQl3aXphcmQuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE2R2V0TmV4dFBhZ2UoKSB7Ci0JCXdpemFyZC5nZXROZXh0UGFnZShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDE3R2V0UGFnZSgpIHsKLQkJd2l6YXJkLmdldFBhZ2UobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QxOEdldFBhZ2VDb3VudCgpIHsKLQkJd2l6YXJkLmdldFBhZ2VDb3VudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTlHZXRQYWdlcygpIHsKLQkJd2l6YXJkLmdldFBhZ2VzKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMEdldFByZXZpb3VzUGFnZSgpIHsKLQkJd2l6YXJkLmdldFByZXZpb3VzUGFnZShudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIxR2V0U3RhcnRpbmdQYWdlKCkgewotCQl3aXphcmQuZ2V0U3RhcnRpbmdQYWdlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMkdldFRpdGxlQmFyQ29sb3IoKSB7Ci0JCXdpemFyZC5nZXRUaXRsZUJhckNvbG9yKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyM0dldFdpbmRvd1RpdGxlKCkgewotCQl3aXphcmQuZ2V0V2luZG93VGl0bGUoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI0SXNIZWxwQXZhaWxhYmxlKCkgewotCQl3aXphcmQuaXNIZWxwQXZhaWxhYmxlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyNU5lZWRzUHJldmlvdXNBbmROZXh0QnV0dG9ucygpIHsKLQkJd2l6YXJkLm5lZWRzUHJldmlvdXNBbmROZXh0QnV0dG9ucygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjZOZWVkc1Byb2dyZXNzTW9uaXRvcigpIHsKLQkJd2l6YXJkLm5lZWRzUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyN1NldENvbnRhaW5lcigpIHsKLQkJd2l6YXJkLnNldENvbnRhaW5lcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI4U2V0RGlhbG9nU2V0dGluZ3MoKSB7Ci0JCXdpemFyZC5zZXREaWFsb2dTZXR0aW5ncyhudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDI5U2V0TmVlZHNQcm9ncmVzc01vbml0b3IoKSB7Ci0JCXdpemFyZC5zZXROZWVkc1Byb2dyZXNzTW9uaXRvcihmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QzMFNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucygpIHsKLQkJd2l6YXJkLnNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucyhmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QzMVNldFdpbmRvd1RpdGxlKCkgewotCQl3aXphcmQuc2V0V2luZG93VGl0bGUoInRpdGxlIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QzMlRlc3RQcm90ZWN0ZWQoKSB7Ci0JCWNsYXNzIE15VGFza1dpemFyZCBleHRlbmRzIFRhc2tXaXphcmQgewotCQkJcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZCgpIHsKLQkJCQl0cnkgewotCQkJCQlleGVjdXRlVGFzayhudWxsLCAoYnl0ZSkwLCBudWxsKTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkvLyBpZ25vcmUKLQkJCQl9Ci0JCQkJZ2V0Q3VycmVudFdpemFyZEZyYWdtZW50KCk7Ci0JCQkJdHJ5IHsKLQkJCQkJc3dpdGNoV2l6YXJkRnJhZ21lbnQobnVsbCk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlCi0JCQkJfQotCQkJCXVwZGF0ZVBhZ2VzKCk7Ci0JCQkJdXNlSm9iKCk7Ci0JCQkJZ2V0Sm9iVGl0bGUoKTsKLQkJCX0KLQkJfQotCQlNeVRhc2tXaXphcmQgbXR3ID0gbmV3IE15VGFza1dpemFyZCgpOwotCQltdHcudGVzdFByb3RlY3RlZCgpOwotCX0JCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy93aXphcmQvV2l6YXJkRnJhZ21lbnRUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91aS90ZXN0cy93aXphcmQvV2l6YXJkRnJhZ21lbnRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzUwNzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdWkvdGVzdHMvd2l6YXJkL1dpemFyZEZyYWdtZW50VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS50ZXN0cy53aXphcmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzLk9yZGVyZWRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS53aXphcmQuV2l6YXJkRnJhZ21lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBXaXphcmRGcmFnbWVudFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBzdGF0aWMgV2l6YXJkRnJhZ21lbnQgZnJhZ21lbnQ7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgT3JkZXJlZFRlc3RTdWl0ZShXaXphcmRGcmFnbWVudFRlc3RDYXNlLmNsYXNzLCAiV2l6YXJkRnJhZ21lbnRUZXN0Q2FzZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwMENyZWF0ZUZyYWdtZW50KCkgewotCQlmcmFnbWVudCA9IG5ldyBXaXphcmRGcmFnbWVudCgpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDAxSGFzQ29tcG9zaXRlKCkgIHsKLQkJZnJhZ21lbnQuaGFzQ29tcG9zaXRlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwMkNyZWF0ZUNvbXBvc2l0ZSgpICB7Ci0JCWZyYWdtZW50LmNyZWF0ZUNvbXBvc2l0ZShudWxsLCBudWxsKTsgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwM1NldFRhc2tNb2RlbCgpICB7Ci0JCWZyYWdtZW50LnNldFRhc2tNb2RlbChudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA0R2V0VGFza01vZGVsKCkgIHsKLQkJZnJhZ21lbnQuZ2V0VGFza01vZGVsKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QwNUVudGVyKCkgIHsKLQkJZnJhZ21lbnQuZW50ZXIoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA2RXhpdCgpICB7Ci0JCWZyYWdtZW50LmV4aXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDA5R2V0Q2hpbGRGcmFnbWVudHMoKSAgewotCQlmcmFnbWVudC5nZXRDaGlsZEZyYWdtZW50cygpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTBJc0NvbXBsZXRlKCkgIHsKLQkJZnJhZ21lbnQuaXNDb21wbGV0ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MTFUZXN0UHJvdGVjdGVkKCkgIHsKLQkJY2xhc3MgTXlXaXphcmRGcmFnbWVudCBleHRlbmRzIFdpemFyZEZyYWdtZW50IHsKLQkJCSBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkKCkgewotCQkJCSB1cGRhdGVDaGlsZEZyYWdtZW50cygpOwotCQkJCSBjcmVhdGVDaGlsZEZyYWdtZW50cyhudWxsKTsKLQkJCQkgc2V0Q29tcGxldGUoZmFsc2UpOwotCQkJIH0KLQkJfQotCQlNeVdpemFyZEZyYWdtZW50IG13ZiA9IG5ldyBNeVdpemFyZEZyYWdtZW50KCk7Ci0JCW13Zi50ZXN0UHJvdGVjdGVkKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTdjNWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c3QtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dzdC1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkudGVzdHMuQWxsVGVzdHMiIC8+Ci0gICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVhYzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwNzdhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTI2YTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYjNhNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMuVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzLmRpYWxvZwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5MTdlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdXRpbC90ZXN0cy9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3YTM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdXRpbC90ZXN0cy9BbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMuZGlhbG9nLlByZWZlcmVuY2VzVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cyIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MpOwkJCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShQcmVmZXJlbmNlc1Rlc3RDYXNlLmNsYXNzKTsKLQkJLy8kSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91dGlsL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91dGlsL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmZWFjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdXRpbC90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC5pbnRlcm5hbC5hdWRpby5BdWRpbzsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBFeGlzdGVuY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCUF1ZGlvLnBsYXlTb3VuZChudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvT3JkZXJlZFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDMwZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91dGlsL3Rlc3RzL09yZGVyZWRUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWNsYXNzIE9yZGVyZWRUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGV7Ci0JcHVibGljIE9yZGVyZWRUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXRoaXModGhlQ2xhc3MpOwotCQlzZXROYW1lKG5hbWUpOwotCX0KLQotCXB1YmxpYyBPcmRlcmVkVGVzdFN1aXRlKGZpbmFsIENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKCk7Ci0JCXNldE5hbWUodGhlQ2xhc3MuZ2V0TmFtZSgpKTsKLQkJdHJ5IHsKLQkJCWdldFRlc3RDb25zdHJ1Y3Rvcih0aGVDbGFzcyk7IC8vIEF2b2lkIGdlbmVyYXRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJCWFkZFRlc3Qod2FybmluZygiQ2xhc3MgIiArIHRoZUNsYXNzLmdldE5hbWUoKQotCQkJCQkrICIgaGFzIG5vIHB1YmxpYyBjb25zdHJ1Y3RvciBUZXN0Q2FzZShTdHJpbmcgbmFtZSkgb3IgVGVzdENhc2UoKSIpKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIU1vZGlmaWVyLmlzUHVibGljKHRoZUNsYXNzLmdldE1vZGlmaWVycygpKSkgewotCQkJYWRkVGVzdCh3YXJuaW5nKCJDbGFzcyAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpICsgIiBpcyBub3QgcHVibGljIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUNsYXNzIHN1cGVyQ2xhc3MgPSB0aGVDbGFzczsKLQkJVmVjdG9yIG5hbWVzID0gbmV3IFZlY3RvcigpOwotCQl3aGlsZSAoVGVzdC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHN1cGVyQ2xhc3MpKSB7Ci0JCQlNZXRob2RbXSBtZXRob2RzID0gc3VwZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLQkJCWludCBzaXplID0gbWV0aG9kcy5sZW5ndGg7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKLQkJCQlmb3IgKGludCBqID0gaSArIDE7IGogPCBzaXplOyBqKyspIHsKLQkJCQkJaWYgKG1ldGhvZHNbaV0uZ2V0TmFtZSgpLmNvbXBhcmVUbyhtZXRob2RzW2pdLmdldE5hbWUoKSkgPiAwKSB7Ci0JCQkJCQlNZXRob2QgbSA9IG1ldGhvZHNbaV07Ci0JCQkJCQltZXRob2RzW2ldID0gbWV0aG9kc1tqXTsKLQkJCQkJCW1ldGhvZHNbal0gPSBtOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlhZGRUZXN0TWV0aG9kKG1ldGhvZHNbaV0sIG5hbWVzLCB0aGVDbGFzcyk7Ci0JCQl9Ci0JCQlzdXBlckNsYXNzID0gc3VwZXJDbGFzcy5nZXRTdXBlcmNsYXNzKCk7Ci0JCX0KLQkJaWYgKCF0ZXN0cygpLmhhc01vcmVFbGVtZW50cygpKQotCQkJYWRkVGVzdCh3YXJuaW5nKCJObyB0ZXN0cyBmb3VuZCBpbiAiICsgdGhlQ2xhc3MuZ2V0TmFtZSgpKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFRlc3RNZXRob2QoTWV0aG9kIG0sIFZlY3RvciBuYW1lcywgQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJaWYgKG5hbWVzLmNvbnRhaW5zKG5hbWUpKQotCQkJcmV0dXJuOwotCQlpZiAoIWlzUHVibGljVGVzdE1ldGhvZChtKSkgewotCQkJaWYgKGlzVGVzdE1ldGhvZChtKSkKLQkJCQlhZGRUZXN0KHdhcm5pbmcoIlRlc3QgbWV0aG9kIGlzbid0IHB1YmxpYzogIiArIG0uZ2V0TmFtZSgpKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbmFtZXMuYWRkRWxlbWVudChuYW1lKTsKLQkJYWRkVGVzdChjcmVhdGVUZXN0KHRoZUNsYXNzLCBuYW1lKSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzUHVibGljVGVzdE1ldGhvZChNZXRob2QgbSkgewotCQlyZXR1cm4gaXNUZXN0TWV0aG9kKG0pICYmIE1vZGlmaWVyLmlzUHVibGljKG0uZ2V0TW9kaWZpZXJzKCkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1Rlc3RNZXRob2QoTWV0aG9kIG0pIHsKLQkJU3RyaW5nIG5hbWUgPSBtLmdldE5hbWUoKTsKLQkJQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbS5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQlDbGFzcyByZXR1cm5UeXBlID0gbS5nZXRSZXR1cm5UeXBlKCk7Ci0JCXJldHVybiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAwICYmIG5hbWUuc3RhcnRzV2l0aCgidGVzdCIpICYmIHJldHVyblR5cGUuZXF1YWxzKFZvaWQuVFlQRSk7Ci0JfQotCi0JcHJpdmF0ZSBUZXN0IHdhcm5pbmcoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZSgid2FybmluZyIpIHsKLQkJCXByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKSB7Ci0JCQkJZmFpbChtZXNzYWdlKTsKLQkJCX0KLQkJfTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91dGlsL3Rlc3RzL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMGY2YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdXRpbC90ZXN0cy9kaWFsb2cvUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvZGlhbG9nL1ByZWZlcmVuY2VzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzNGFhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zZXJ2ZXIvdXRpbC90ZXN0cy9kaWFsb2cvUHJlZmVyZW5jZXNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMuZGlhbG9nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLQotcHVibGljIGNsYXNzIFByZWZlcmVuY2VzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShQcmVmZXJlbmNlc1Rlc3RDYXNlLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgUHJlZmVyZW5jZXNUZXN0Q2FzZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF1ZGlvUHJlZmVyZW5jZVBhZ2UoKSB7Ci0JCURpYWxvZyBkaWFsb2cgPSBVSVRlc3RIZWxwZXIuZ2V0UHJlZmVyZW5jZURpYWxvZygib3JnLmVjbGlwc2Uud3N0LmF1ZGlvLnByZWZlcmVuY2VQYWdlIik7Ci0JCVVJVGVzdEhlbHBlci5hc3NlcnREaWFsb2coZGlhbG9nKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvZGlhbG9nL1VJVGVzdEhlbHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc2VydmVyL3V0aWwvdGVzdHMvZGlhbG9nL1VJVGVzdEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjcxNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NlcnZlci91dGlsL3Rlc3RzL2RpYWxvZy9VSVRlc3RIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm9wZXJ0eURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3BlcnR5UGFnZUNvbnRyaWJ1dG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3BlcnR5UGFnZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuSVdvcmtiZW5jaEFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBVSVRlc3RIZWxwZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJlZmVyZW5jZURpYWxvZ1dyYXBwZXIgZXh0ZW5kcyBQcmVmZXJlbmNlRGlhbG9nIHsKLQkJcHVibGljIFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyKFNoZWxsIHBhcmVudFNoZWxsLCBQcmVmZXJlbmNlTWFuYWdlciBtYW5hZ2VyKSB7Ci0JCQlzdXBlcihwYXJlbnRTaGVsbCwgbWFuYWdlcik7Ci0JCX0KLQkJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd1BhZ2UoSVByZWZlcmVuY2VOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBzdXBlci5zaG93UGFnZShub2RlKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBQcm9wZXJ0eURpYWxvZ1dyYXBwZXIgZXh0ZW5kcyBQcm9wZXJ0eURpYWxvZyB7Ci0JCXB1YmxpYyBQcm9wZXJ0eURpYWxvZ1dyYXBwZXIoU2hlbGwgcGFyZW50U2hlbGwsIFByZWZlcmVuY2VNYW5hZ2VyIG1hbmFnZXIsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCQlzdXBlcihwYXJlbnRTaGVsbCwgbWFuYWdlciwgc2VsZWN0aW9uKTsKLQkJfQotCQlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93UGFnZShJUHJlZmVyZW5jZU5vZGUgbm9kZSkgewotCQkJcmV0dXJuIHN1cGVyLnNob3dQYWdlKG5vZGUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFByZWZlcmVuY2VEaWFsb2cgZ2V0UHJlZmVyZW5jZURpYWxvZyhTdHJpbmcgaWQpIHsKLQkJUHJlZmVyZW5jZURpYWxvZ1dyYXBwZXIgZGlhbG9nID0gbnVsbDsKLQkJUHJlZmVyZW5jZU1hbmFnZXIgbWFuYWdlciA9IFdvcmtiZW5jaFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZU1hbmFnZXIoKTsKLQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotCQkJZGlhbG9nID0gbmV3IFByZWZlcmVuY2VEaWFsb2dXcmFwcGVyKGdldFNoZWxsKCksIG1hbmFnZXIpOwotCQkJZGlhbG9nLmNyZWF0ZSgpOwkKLQotCQkJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1hbmFnZXIuZ2V0RWxlbWVudHMoUHJlZmVyZW5jZU1hbmFnZXIuUFJFX09SREVSKS5pdGVyYXRvcigpOwotCQkJICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KQotCQkJewotCQkJCUlQcmVmZXJlbmNlTm9kZSBub2RlID0gKElQcmVmZXJlbmNlTm9kZSlpdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKCBub2RlLmdldElkKCkuZXF1YWxzKGlkKSApIHsKLQkJCQkJZGlhbG9nLnNob3dQYWdlKG5vZGUpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRpYWxvZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQcm9wZXJ0eURpYWxvZyBnZXRQcm9wZXJ0eURpYWxvZyhTdHJpbmcgaWQsIElBZGFwdGFibGUgZWxlbWVudCkgewotCQlQcm9wZXJ0eURpYWxvZ1dyYXBwZXIgZGlhbG9nID0gbnVsbDsKLQotCQlQcm9wZXJ0eVBhZ2VNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgUHJvcGVydHlQYWdlTWFuYWdlcigpOwotCQlTdHJpbmcgdGl0bGUgPSAiIjsKLQkJU3RyaW5nIG5hbWUgID0gIiI7Ci0KLQkJLy8gbG9hZCBwYWdlcyBmb3IgdGhlIHNlbGVjdGlvbgotCQkvLyBmaWxsIHRoZSBtYW5hZ2VyIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBtYXRjaGluZyBjb250cmlidXRvcnMKLQkJUHJvcGVydHlQYWdlQ29udHJpYnV0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKS5jb250cmlidXRlKG1hbmFnZXIsIGVsZW1lbnQpOwotCQkKLQkJSVdvcmtiZW5jaEFkYXB0ZXIgYWRhcHRlciA9IChJV29ya2JlbmNoQWRhcHRlcillbGVtZW50LmdldEFkYXB0ZXIoSVdvcmtiZW5jaEFkYXB0ZXIuY2xhc3MpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQluYW1lID0gYWRhcHRlci5nZXRMYWJlbChlbGVtZW50KTsKLQkJfQotCQkKLQkJLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgcGFnZXMgaW4gdGhlIG1hbmFnZXIKLQkJSXRlcmF0b3IgcGFnZXMgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsJCQotCQlpZiAoIXBhZ2VzLmhhc05leHQoKSkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJdGl0bGUgPSBOTFMuYmluZChXb3JrYmVuY2hNZXNzYWdlcy5Qcm9wZXJ0eURpYWxvZ19wcm9wZXJ0eU1lc3NhZ2UsIG5ldyBPYmplY3RbXSB7bmFtZX0pOwotCQlkaWFsb2cgPSBuZXcgUHJvcGVydHlEaWFsb2dXcmFwcGVyKGdldFNoZWxsKCksIG1hbmFnZXIsIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVsZW1lbnQpKTsgCi0JCWRpYWxvZy5jcmVhdGUoKTsKLQkJZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dCh0aXRsZSk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBtYW5hZ2VyLmdldEVsZW1lbnRzKFByZWZlcmVuY2VNYW5hZ2VyLlBSRV9PUkRFUikuaXRlcmF0b3IoKTsKLQkJICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQlJUHJlZmVyZW5jZU5vZGUgbm9kZSA9IChJUHJlZmVyZW5jZU5vZGUpaXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKCBub2RlLmdldElkKCkuZXF1YWxzKGlkKSApIHsKLQkJCQlkaWFsb2cuc2hvd1BhZ2Uobm9kZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRpYWxvZzsKLQl9Ci0JCi0JLyoqCi0JICogQXV0b21hdGVkIHRlc3QgdGhhdCBjaGVja3MgYWxsIHRoZSBsYWJlbHMgYW5kIGJ1dHRvbnMgb2YgYSBkaWFsb2cKLQkgKiB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gZGlzcGxheSBhbGwgdGhlIHRleHQuICBBbnkKLQkgKiB0ZXh0IHRoYXQgd3JhcHMgaXMgb25seSBhcHByb3hpbWF0ZWQgYW5kIGlzIGN1cnJlbnRseSBub3QgYWNjdXJhdGUuCi0JICogCi0JICogQHBhcmFtIGRpYWxvZyB0aGUgdGVzdCBkaWFsb2cgdG8gYmUgdmVyaWZpZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydERpYWxvZyhEaWFsb2cgZGlhbG9nKSB7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKGRpYWxvZyk7Ci0JCWRpYWxvZy5zZXRCbG9ja09uT3BlbihmYWxzZSk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0JCVNoZWxsIHNoZWxsID0gZGlhbG9nLmdldFNoZWxsKCk7Ci0JCXZlcmlmeUNvbXBvc2l0ZVRleHQoc2hlbGwpOwotCQlkaWFsb2cuY2xvc2UoKTsKLQl9Ci0KLQkvKgotCSAqIExvb2tzIGF0IGFsbCB0aGUgY2hpbGQgd2lkZ2V0cyBvZiBhIGdpdmVuIGNvbXBvc2l0ZSBhbmQKLQkgKiB2ZXJpZmllcyB0aGUgdGV4dCBvbiBhbGwgbGFiZWxzIGFuZCB3aWRnZXRzLgotCSAqIEBwYXJhbSBjb21wb3NpdGUgVGhlIGNvbXBvc2l0ZSB0byBsb29rIHRocm91Z2gKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeUNvbXBvc2l0ZVRleHQoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgewotCQlDb250cm9sIGNoaWxkcmVuW10gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQkvL3ZlcmlmeSB0aGUgdGV4dCBpZiB0aGUgY2hpbGQgaXMgYSBidXR0b24KLQkJCQl2ZXJpZnlCdXR0b25UZXh0KChCdXR0b24pIGNoaWxkcmVuW2ldKTsKLQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleE5vdEJ1dHRvbikgewotCQkJCXRyeSB7Ci0JCQkJCS8vY2hpbGQgaXMgbm90IGEgYnV0dG9uLCBtYXliZSBhIGxhYmVsCi0JCQkJCXZlcmlmeUxhYmVsVGV4dCgoTGFiZWwpIGNoaWxkcmVuW2ldKTsKLQkJCQl9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXhOb3RMYWJlbCkgewotCQkJCQl0cnkgewotCQkJCQkJLy9jaGlsZCBpcyBub3QgYSBsYWJlbCwgbWFrZSBhIHJlY3Vyc2l2ZSBjYWxsIGlmIGl0IGlzIGEgY29tcG9zaXRlCi0JCQkJCQl2ZXJpZnlDb21wb3NpdGVUZXh0KChDb21wb3NpdGUpIGNoaWxkcmVuW2ldKTsKLQkJCQkJfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGV4Tm90Q29tcG9zaXRlKSB7Ci0JCQkJCQkvL3RoZSBjaGlsZCBpcyBub3QgYSBidXR0b24sIGxhYmVsLCBvciBjb21wb3NpdGUgLSBpZ25vcmUgaXQuCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gYnV0dG9uIGlzIGxhcmdlIGVub3VnaCB0byBkaXNwbGF5IGl0cyB0ZXh0LgotCSAqIEBwYXJhbSBidXR0b24gVGhlIGJ1dHRvbiB0byB2ZXJpZnksCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlCdXR0b25UZXh0KEJ1dHRvbiBidXR0b24pIHsKLQkJU3RyaW5nIHdpZGdldCA9IGJ1dHRvbi50b1N0cmluZygpOwotCQlQb2ludCBzaXplID0gYnV0dG9uLmdldFNpemUoKTsKLQotCQkvLyBjb21wdXRlIHRoZSBzaXplIHdpdGggbm8gbGluZSB3cmFwcGluZwotCQlQb2ludCBwcmVmZXJyZWQgPSBidXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQkJLy9pZiAoc2l6ZS55L3ByZWZlcnJlZC55KSA9PSBYLCB0aGVuIGxhYmVsIHNwYW5zIFggbGluZXMsIHNvIGRpdmlkZQotCQkvL3RoZSBjYWxjdWxhdGVkIHZhbHVlIG9mIHByZWZlcnJlZC54IGJ5IFgKLQkJaWYgKHByZWZlcnJlZC55ICogc2l6ZS55ID4gMCkgewotCQkJcHJlZmVycmVkLnkgLz0gY291bnRMaW5lcyhidXR0b24uZ2V0VGV4dCgpKTsgLy9jaGVjayBmb3IgJ1xuXCcKLQkJCWlmIChzaXplLnkgLyBwcmVmZXJyZWQueSA+IDEpIHsKLQkJCQlwcmVmZXJyZWQueCAvPSAoc2l6ZS55IC8gcHJlZmVycmVkLnkpOwotCQkJfQotCQl9Ci0KLQkJU3RyaW5nIG1lc3NhZ2UgPQotCQkJbmV3IFN0cmluZ0J1ZmZlcigiV2FybmluZzogIikKLQkJCQkuYXBwZW5kKHdpZGdldCkKLQkJCQkuYXBwZW5kKCJcblx0QWN0dWFsIFdpZHRoIC0+ICIpCi0JCQkJLmFwcGVuZChzaXplLngpCi0JCQkJLmFwcGVuZCgiXG5cdFJlY29tbWVuZGVkIFdpZHRoIC0+ICIpCi0JCQkJLmFwcGVuZChwcmVmZXJyZWQueCkKLQkJCQkudG9TdHJpbmcoKTsKLQkJaWYgKHByZWZlcnJlZC54ID4gc2l6ZS54KSB7Ci0JCQkvL2Nsb3NlIHRoZSBkaWFsb2cKLQkJCWJ1dHRvbi5nZXRTaGVsbCgpLmRpc3Bvc2UoKTsKLQkJCUFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UudG9TdHJpbmcoKSwgZmFsc2UpOwotCQl9Ci0JfQotCQotCS8qCi0JICogVmVyaWZpZXMgdGhhdCBhIGdpdmVuIGxhYmVsIGlzIGxhcmdlIGVub3VnaCB0byBkaXNwbGF5IGl0cyB0ZXh0LgotCSAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgdG8gdmVyaWZ5LAotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgdmVyaWZ5TGFiZWxUZXh0KExhYmVsIGxhYmVsKSB7Ci0JCVN0cmluZyB3aWRnZXQgPSBsYWJlbC50b1N0cmluZygpOwotCQlQb2ludCBzaXplID0gbGFiZWwuZ2V0U2l6ZSgpOwotCi0JCS8vIGNvbXB1dGUgdGhlIHNpemUgd2l0aCBubyBsaW5lIHdyYXBwaW5nCi0JCVBvaW50IHByZWZlcnJlZCA9IGxhYmVsLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0JCS8vaWYgKHNpemUueS9wcmVmZXJyZWQueSkgPT0gWCwgdGhlbiBsYWJlbCBzcGFucyBYIGxpbmVzLCBzbyBkaXZpZGUKLQkJLy90aGUgY2FsY3VsYXRlZCB2YWx1ZSBvZiBwcmVmZXJyZWQueCBieSBYCi0JCWlmIChwcmVmZXJyZWQueSAqIHNpemUueSA+IDApIHsKLQkJCXByZWZlcnJlZC55IC89IGNvdW50TGluZXMobGFiZWwuZ2V0VGV4dCgpKTsKLQkJCWlmIChzaXplLnkgLyBwcmVmZXJyZWQueSA+IDEpIHsKLQkJCQlwcmVmZXJyZWQueCAvPSAoc2l6ZS55IC8gcHJlZmVycmVkLnkpOwotCQkJfQotCQl9Ci0JCVN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigiV2FybmluZzogIikuYXBwZW5kKHdpZGdldCkKLQkJCS5hcHBlbmQoIlxuXHRBY3R1YWwgV2lkdGggLT4gIikuYXBwZW5kKHNpemUueCkKLQkJCS5hcHBlbmQoIlxuXHRSZWNvbW1lbmRlZCBXaWR0aCAtPiAiKS5hcHBlbmQocHJlZmVycmVkLngpLnRvU3RyaW5nKCk7Ci0JCWlmIChwcmVmZXJyZWQueCA+IHNpemUueCkgewotCQkJLy9jbG9zZSB0aGUgZGlhbG9nCi0JCQlsYWJlbC5nZXRTaGVsbCgpLmRpc3Bvc2UoKTsKLQkJCUFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UudG9TdHJpbmcoKSwgZmFsc2UpOwotCQl9Ci0JfQotCQotCS8qCi0JICogQ291bnRzIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBnaXZlbiBTdHJpbmcuCi0JICogRm9yIGV4YW1wbGUsIGlmIGEgc3RyaW5nIGNvbnRhaW5zIG9uZSAoMSkgbmV3bGluZSBjaGFyYWN0ZXIsCi0JICogYSB2YWx1ZSBvZiB0d28gKDIpIHdvdWxkIGJlIHJldHVybmVkLgotCSAqIEBwYXJhbSB0ZXh0IFRoZSBzdHJpbmcgdG8gbG9vayB0aHJvdWdoLgotCSAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGV4dC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBpbnQgY291bnRMaW5lcyhTdHJpbmcgdGV4dCkgewotCQlpbnQgbmV3TGluZXMgPSAxOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewotCQkJaWYgKHRleHQuY2hhckF0KGkpID09ICdcbicpIHsKLQkJCQluZXdMaW5lcysrOwotCQkJfQotCQl9Ci0JCXJldHVybiBuZXdMaW5lczsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTNkNDliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudXRpbC50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51dGlsLnRlc3RzIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnV0aWwudGVzdHMuQWxsVGVzdHMiIC8+Ci0gICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==