LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoYykgMjAxMyBDRUEgTElTVC4KICoKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICoKICogQ29udHJpYnV0b3JzOgogKgkJUulnaXMgQ0hFVlJFTDogY2hldnJlbC5yZWdpcyA8YXQ+IGdtYWlsLmNvbQogKgkJQ0VBIExJU1QgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZGlhZ3JhbS5wYXJhbWV0cmljLmNvbW1hbmRzLnN3aXRjaHJlcHJlc2VudGF0aW9uOwoKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwppbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbXBvdW5kQ29tbWFuZDsKaW1wb3J0IG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLmRpYWdyYW0udWkuZWRpdHBhcnRzLkdyYXBoaWNhbEVkaXRQYXJ0OwppbXBvcnQgb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZGlhZ3JhbS51aS5lZGl0cGFydHMuSUdyYXBoaWNhbEVkaXRQYXJ0OwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLnBhcmFtZXRyaWMuZWRpdC5wYXJ0LkN1c3RvbUNvbnN0cmFpbnRCbG9ja1Byb3BlcnR5Q29tcG9zaXRlRWRpdFBhcnQ7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5kaWFncmFtLmNvbW1vbi5oYW5kbGVycy5HcmFwaGljYWxDb21tYW5kSGFuZGxlcjsKCnB1YmxpYyBjbGFzcyBTd2l0Y2hDb25zdHJhaW50UHJvcGVydHlSZXByZXNlbnRhdGlvbkNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR3JhcGhpY2FsQ29tbWFuZEhhbmRsZXIgewoKCUBPdmVycmlkZQoJcHJvdGVjdGVkIENvbW1hbmQgZ2V0Q29tbWFuZCgpIHsKCQlDb21wb3VuZENvbW1hbmQgY29tbWFuZCA9IG5ldyBDb21wb3VuZENvbW1hbmQoIlN3aXRjaCBDb25zdHJhaW50UHJvcGVydHkgUmVwcmVzZW50YXRpb24iKTsKCQlmaW5hbCBMaXN0PElHcmFwaGljYWxFZGl0UGFydD4gc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoKTsKCQlmb3IgKGZpbmFsIElHcmFwaGljYWxFZGl0UGFydCBzZWxlY3RlZEVsZW1lbnQgOiBzZWxlY3RlZEVsZW1lbnRzKSB7CgkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBDdXN0b21Db25zdHJhaW50QmxvY2tQcm9wZXJ0eUNvbXBvc2l0ZUVkaXRQYXJ0KSB7CgkJCQlpZiAoc2VsZWN0ZWRFbGVtZW50LmdldFBhcmVudCgpIGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpIHsKCQkJCQljb21tYW5kLmFkZChuZXcgU3dpdGNoQ29uc3RyYWludFByb3BlcnR5UmVwcmVzZW50YXRpb25Db21tYW5kKHNlbGVjdGVkRWxlbWVudCkpOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBjb21tYW5kOwoJfQoKCn0K