LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbDsKCmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKjsKaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyLklPcGVyYXRpb25MaXN0ZW5lcjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJTY2hlZHVsaW5nUnVsZTsKLyoqCiAqIEEgam9iIGZvciByZXN0YXJ0aW5nIGEgc2VydmVyLgogKi8KcHVibGljIGNsYXNzIFJlc3RhcnRTZXJ2ZXJKb2IgZXh0ZW5kcyBEZXBlbmRhbnRKb2IgewoJcHJvdGVjdGVkIFN0cmluZyBsYXVuY2hNb2RlOwoJcHJvdGVjdGVkIGJvb2xlYW4gaXNSZXN0YXJ0Q29tcGxldGVkID0gZmFsc2U7Cglwcm90ZWN0ZWQgSVN0YXR1cyByZXN1bHRTdGF0dXM7CgoJcHVibGljIFJlc3RhcnRTZXJ2ZXJKb2IoSVNlcnZlciBzZXJ2ZXIsIFN0cmluZyBsYXVuY2hNb2RlKSB7CgkJc3VwZXIoTkxTLmJpbmQoTWVzc2FnZXMuam9iUmVzdGFydGluZ1NlcnZlciwgc2VydmVyLmdldE5hbWUoKSksIHNlcnZlcik7CgkJdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7CgkJdGhpcy5sYXVuY2hNb2RlID0gbGF1bmNoTW9kZTsKCQlzZXRSdWxlKG5ldyBTZXJ2ZXJTY2hlZHVsaW5nUnVsZShzZXJ2ZXIpKTsKCX0KCgkvKiAobm9uLUphdmFkb2MpCgkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5JbnRlcm5hbEpvYiNydW4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCgkgKi8KCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKCQlJT3BlcmF0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSU9wZXJhdGlvbkxpc3RlbmVyKCkgewoJCQlwdWJsaWMgdm9pZCBkb25lKElTdGF0dXMgcmVzdWx0KSB7CgkJCQlpc1Jlc3RhcnRDb21wbGV0ZWQgPSB0cnVlOwoJCQkJcmVzdWx0U3RhdHVzID0gcmVzdWx0OwoJCQl9CgkJfTsKCQlzZXJ2ZXIucmVzdGFydChsYXVuY2hNb2RlLCBsaXN0ZW5lcik7CgkJCgkJLy8gYmxvY2sgdXRpbCB0aGUgcmVzdGFydCBpcyBjb21wbGV0ZWQKCQl3aGlsZSAoIWlzUmVzdGFydENvbXBsZXRlZCkgewoJCQl0cnkgewoJCQkJVGhyZWFkLnNsZWVwKDI1MCk7CgkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKCQkJCS8vIERvIG5vdGhpbmcuCgkJCX0KCQl9CgkJCgkJcmV0dXJuIHJlc3VsdFN0YXR1cyA9PSBudWxsID8gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBTZXJ2ZXJQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCkgOiByZXN1bHRTdGF0dXM7Cgl9Cn0=