LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwueG1sLnNlcnZlcjQwOwoKaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwueG1sLio7Ci8qKgogKiAKICovCnB1YmxpYyBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBYTUxFbGVtZW50IHsKCXB1YmxpYyBTZXJ2ZXIoKSB7CgkJLy8gZG8gbm90aGluZwoJfQoKCXB1YmxpYyBTdHJpbmcgZ2V0RGVidWcoKSB7CgkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJkZWJ1ZyIpOwoJfQoKCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm5hbWUiKTsKCX0KCQoJcHVibGljIFN0cmluZyBnZXRQb3J0KCkgewoJCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgicG9ydCIpOwoJfQoJCglwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKGludCBpbmRleCkgewoJCXJldHVybiAoU2VydmljZSkgZmluZEVsZW1lbnQoIlNlcnZpY2UiLCBpbmRleCk7Cgl9CgkKCXB1YmxpYyBpbnQgZ2V0U2VydmljZUNvdW50KCkgewoJCXJldHVybiBzaXplT2ZFbGVtZW50KCJTZXJ2aWNlIik7Cgl9CgkKCXB1YmxpYyBTdHJpbmcgZ2V0U2h1dGRvd24oKSB7CgkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJzaHV0ZG93biIpOwoJfQoJCglwdWJsaWMgdm9pZCBzZXREZWJ1ZyhTdHJpbmcgZGVidWcpIHsKCQlzZXRBdHRyaWJ1dGVWYWx1ZSgiZGVidWciLCBkZWJ1Zyk7Cgl9CgkKCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKCQlzZXRBdHRyaWJ1dGVWYWx1ZSgibmFtZSIsIG5hbWUpOwoJfQoJCglwdWJsaWMgdm9pZCBzZXRQb3J0KFN0cmluZyBwb3J0KSB7CgkJc2V0QXR0cmlidXRlVmFsdWUoInBvcnQiLCBwb3J0KTsKCX0KCQoJcHVibGljIHZvaWQgc2V0U2h1dGRvd24oU3RyaW5nIHNodXRkb3duKSB7CgkJc2V0QXR0cmlidXRlVmFsdWUoInNodXRkb3duIiwgc2h1dGRvd24pOwoJfQoKCXB1YmxpYyBMaXN0ZW5lciBnZXRMaXN0ZW5lcihpbnQgaW5kZXgpIHsKCQlyZXR1cm4gKExpc3RlbmVyKSBmaW5kRWxlbWVudCgiTGlzdGVuZXIiLCBpbmRleCk7Cgl9CgkKCXB1YmxpYyBpbnQgZ2V0TGlzdGVuZXJDb3VudCgpIHsKCQlyZXR1cm4gc2l6ZU9mRWxlbWVudCgiTGlzdGVuZXIiKTsKCX0KfQ==