LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKgogKiBDb250cmlidXRvcnM6CiAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5icm93c2VyOwovKioKICogCiAqLwpwdWJsaWMgY2xhc3MgQnJvd3NlckRlc2NyaXB0b3JXb3JraW5nQ29weSBleHRlbmRzIEJyb3dzZXJEZXNjcmlwdG9yIGltcGxlbWVudHMgSUJyb3dzZXJEZXNjcmlwdG9yV29ya2luZ0NvcHkgewoJcHJvdGVjdGVkIEJyb3dzZXJEZXNjcmlwdG9yIGJyb3dzZXI7CgoJLy8gY3JlYXRpb24KCXB1YmxpYyBCcm93c2VyRGVzY3JpcHRvcldvcmtpbmdDb3B5KCkgewoJCS8vIGRvIG5vdGhpbmcKCX0KCgkvLyB3b3JraW5nIGNvcHkKCXB1YmxpYyBCcm93c2VyRGVzY3JpcHRvcldvcmtpbmdDb3B5KEJyb3dzZXJEZXNjcmlwdG9yIGJyb3dzZXIpIHsKCQl0aGlzLmJyb3dzZXIgPSBicm93c2VyOwoJCXNldEludGVybmFsKGJyb3dzZXIpOwoJfQoKCS8qIChub24tSmF2YWRvYykKCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuYnJvd3Nlci5JQnJvd3NlckRlc2NyaXB0b3JXb3JraW5nQ29weSNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpCgkgKi8KCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKCQlpZiAobmFtZSA9PSBudWxsKQoJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CgkJdGhpcy5uYW1lID0gbmFtZTsKCX0KCgkvKiAobm9uLUphdmFkb2MpCgkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmJyb3dzZXIuSUJyb3dzZXJEZXNjcmlwdG9yV29ya2luZ0NvcHkjc2V0TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykKCSAqLwoJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKSB7CgkJdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwoJfQoKCS8qIChub24tSmF2YWRvYykKCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuYnJvd3Nlci5JQnJvd3NlckRlc2NyaXB0b3JXb3JraW5nQ29weSNzZXRQYXJhbWV0ZXJzKGphdmEubGFuZy5TdHJpbmcpCgkgKi8KCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlcnMoU3RyaW5nIHBhcmFtcykgewoJCXRoaXMucGFyYW1ldGVycyA9IHBhcmFtczsKCX0KCglwdWJsaWMgYm9vbGVhbiBpc1dvcmtpbmdDb3B5KCkgewoJCXJldHVybiB0cnVlOwoJfQoJCglwdWJsaWMgSUJyb3dzZXJEZXNjcmlwdG9yV29ya2luZ0NvcHkgZ2V0V29ya2luZ0NvcHkoKSB7CgkJcmV0dXJuIHRoaXM7Cgl9CgoJLyogKG5vbi1KYXZhZG9jKQoJICogQHNlZSBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5icm93c2VyLklCcm93c2VyRGVzY3JpcHRvcldvcmtpbmdDb3B5I3NhdmUoKQoJICovCglwdWJsaWMgSUJyb3dzZXJEZXNjcmlwdG9yIHNhdmUoKSB7CgkJaWYgKGJyb3dzZXIgIT0gbnVsbCkgewoJCQlicm93c2VyLnNldEludGVybmFsKHRoaXMpOwoJCQlCcm93c2VyTWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVCcm93c2VycygpOwoJCX0gZWxzZSB7CgkJCWJyb3dzZXIgPSBuZXcgQnJvd3NlckRlc2NyaXB0b3IoKTsKCQkJYnJvd3Nlci5zZXRJbnRlcm5hbCh0aGlzKTsKCQkJQnJvd3Nlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5hZGRCcm93c2VyKGJyb3dzZXIpOwoJCX0KCQlyZXR1cm4gYnJvd3NlcjsKCX0KfQ==