LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2l6YXJkOwoKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS4qOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5TZXJ2ZXJVSVBsdWdpbjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwudGFzay5TYXZlU2VydmVyVGFzazsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2l6YXJkLmZyYWdtZW50Lk1vZGlmeU1vZHVsZXNXaXphcmRGcmFnbWVudDsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2l6YXJkLmZyYWdtZW50LlRhc2tzV2l6YXJkRnJhZ21lbnQ7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLndpemFyZC5UYXNrV2l6YXJkOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS53aXphcmQuV2l6YXJkRnJhZ21lbnQ7Ci8qKgogKiBBIHdpemFyZCB1c2VkIHRvIGFkZCBhbmQgcmVtb3ZlIG1vZHVsZXMuCiAqLwpwdWJsaWMgY2xhc3MgTW9kaWZ5TW9kdWxlc1dpemFyZCBleHRlbmRzIFRhc2tXaXphcmQgewoJc3RhdGljIGNsYXNzIE1vZGlmeU1vZHVsZXNXaXphcmQyIGV4dGVuZHMgV2l6YXJkRnJhZ21lbnQgewoJCXByb3RlY3RlZCBJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyOwoJCQoJCXB1YmxpYyBNb2RpZnlNb2R1bGVzV2l6YXJkMihJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyKSB7CgkJCXRoaXMuc2VydmVyID0gc2VydmVyOwoJCX0KCgkJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2hpbGRGcmFnbWVudHMoTGlzdCBsaXN0KSB7CgkJCWxpc3QuYWRkKG5ldyBXaXphcmRGcmFnbWVudCgpIHsKCQkJCXB1YmxpYyB2b2lkIGVudGVyKCkgewoJCQkJCWdldFRhc2tNb2RlbCgpLnB1dE9iamVjdChJVGFza01vZGVsLlRBU0tfU0VSVkVSLCBzZXJ2ZXIpOwoJCQkJfQoJCQl9KTsKCQkJbGlzdC5hZGQobmV3IE1vZGlmeU1vZHVsZXNXaXphcmRGcmFnbWVudCgpKTsKCQkJbGlzdC5hZGQobmV3IFRhc2tzV2l6YXJkRnJhZ21lbnQoKSk7CgkJCWxpc3QuYWRkKG5ldyBXaXphcmRGcmFnbWVudCgpIHsKCQkJCXB1YmxpYyBJVGFzayBjcmVhdGVGaW5pc2hUYXNrKCkgewoJCQkJCXJldHVybiBuZXcgU2F2ZVNlcnZlclRhc2soKTsKCQkJCX0KCQkJfSk7CgkJfQoJfQoKCS8qKgoJICogTW9kaWZ5TW9kdWxlc1dpemFyZCBjb25zdHJ1Y3RvciBjb21tZW50LgoJICovCglwdWJsaWMgTW9kaWZ5TW9kdWxlc1dpemFyZChJU2VydmVyIHNlcnZlcikgewoJCXN1cGVyKFNlcnZlclVJUGx1Z2luLmdldFJlc291cmNlKCIld2l6TW9kdWxlV2l6YXJkVGl0bGUiKSwgbmV3IE1vZGlmeU1vZHVsZXNXaXphcmQyKHNlcnZlci5jcmVhdGVXb3JraW5nQ29weSgpKSk7CgkKCQlzZXROZWVkc1Byb2dyZXNzTW9uaXRvcih0cnVlKTsKCX0KfQ==