LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTIgT3JhY2xlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQ0KICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCBhbmQgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjANCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLg0KICogVGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQogKiBhbmQgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0DQogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuDQogKg0KICogQ29udHJpYnV0b3JzOg0KICogICAgIExpbmRhIERlTWljaGllbCAtIEphdmEgUGVyc2lzdGVuY2UgMi4xDQogKiAgICAgTGluZGEgRGVNaWNoaWVsIC0gSmF2YSBQZXJzaXN0ZW5jZSAyLjANCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCnBhY2thZ2UgamF2YXgucGVyc2lzdGVuY2U7DQoNCg0KaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsNCmltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247DQppbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLkZJRUxEOw0KaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5NRVRIT0Q7DQppbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5SVU5USU1FOw0KDQovKioNCiAqIERlc2lnbmF0ZXMgYSA8Y29kZT5NYW55VG9PbmU8L2NvZGU+IG9yDQogKiA8Y29kZT5PbmVUb09uZTwvY29kZT4gcmVsYXRpb25zaGlwIGF0dHJpYnV0ZSB0aGF0IHByb3ZpZGVzIHRoZQ0KICogbWFwcGluZyBmb3IgYW4ge0BsaW5rIEVtYmVkZGVkSWR9IHByaW1hcnkga2V5LCBhbiBhdHRyaWJ1dGUgd2l0aGluDQogKiBhbiA8Y29kZT5FbWJlZGRlZElkPC9jb2RlPiBwcmltYXJ5IGtleSwgb3IgYSBzaW1wbGUgcHJpbWFyeSBrZXkgb2YNCiAqIHRoZSBwYXJlbnQgZW50aXR5LiBUaGUgPGNvZGU+dmFsdWU8L2NvZGU+IGVsZW1lbnQgc3BlY2lmaWVzIHRoZQ0KICogYXR0cmlidXRlIHdpdGhpbiBhIGNvbXBvc2l0ZSBrZXkgdG8gd2hpY2ggdGhlIHJlbGF0aW9uc2hpcA0KICogYXR0cmlidXRlIGNvcnJlc3BvbmRzLiBJZiB0aGUgZW50aXR5J3MgcHJpbWFyeSBrZXkgaXMgb2YgdGhlIHNhbWUNCiAqIEphdmEgdHlwZSBhcyB0aGUgcHJpbWFyeSBrZXkgb2YgdGhlIGVudGl0eSByZWZlcmVuY2VkIGJ5IHRoZQ0KICogcmVsYXRpb25zaGlwLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuDQogKiANCiAqIDxwcmU+DQogKiAgICBFeGFtcGxlOg0KICoNCiAqICAgIC8vIHBhcmVudCBlbnRpdHkgaGFzIHNpbXBsZSBwcmltYXJ5IGtleQ0KICoNCiAqICAgICYjMDY0O0VudGl0eQ0KICogICAgcHVibGljIGNsYXNzIEVtcGxveWVlIHsNCiAqICAgICAgICYjMDY0O0lkIGxvbmcgZW1wSWQ7DQogKiAgICAgICBTdHJpbmcgbmFtZTsNCiAqICAgICAgIC4uLg0KICogICAgfSANCiAqDQogKiAgICAvLyBkZXBlbmRlbnQgZW50aXR5IHVzZXMgRW1iZWRkZWRJZCBmb3IgY29tcG9zaXRlIGtleQ0KICoNCiAqICAgICYjMDY0O0VtYmVkZGFibGUNCiAqICAgIHB1YmxpYyBjbGFzcyBEZXBlbmRlbnRJZCB7DQogKiAgICAgICBTdHJpbmcgbmFtZTsNCiAqICAgICAgIGxvbmcgZW1waWQ7ICAgLy8gY29ycmVzcG9uZHMgdG8gcHJpbWFyeSBrZXkgdHlwZSBvZiBFbXBsb3llZQ0KICogICAgfQ0KICoNCiAqICAgICYjMDY0O0VudGl0eQ0KICogICAgcHVibGljIGNsYXNzIERlcGVuZGVudCB7DQogKiAgICAgICAmIzA2NDtFbWJlZGRlZElkIERlcGVuZGVudElkIGlkOw0KICogICAgICAgIC4uLg0KICogICAgICAgJiMwNjQ7TWFwc0lkKCJlbXBpZCIpICAvLyAgbWFwcyB0aGUgZW1waWQgYXR0cmlidXRlIG9mIGVtYmVkZGVkIGlkDQogKiAgICAgICAmIzA2NDtNYW55VG9PbmUgRW1wbG95ZWUgZW1wOw0KICogICAgfQ0KICogPC9wcmU+DQogKg0KICogQHNpbmNlIEphdmEgUGVyc2lzdGVuY2UgMi4wDQogKi8NCkBUYXJnZXQoIHsgTUVUSE9ELCBGSUVMRCB9KQ0KQFJldGVudGlvbihSVU5USU1FKQ0KcHVibGljIEBpbnRlcmZhY2UgTWFwc0lkIHsNCg0KICAgIC8qKg0KICAgICAqIChPcHRpb25hbCkgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIGNvbXBvc2l0ZSBrZXkNCiAgICAgKiB0byB3aGljaCB0aGUgcmVsYXRpb25zaGlwIGF0dHJpYnV0ZSBjb3JyZXNwb25kcy4gIElmIG5vdA0KICAgICAqIHN1cHBsaWVkLCB0aGUgcmVsYXRpb25zaGlwIG1hcHMgdGhlIGVudGl0eZJzIHByaW1hcnkNCiAgICAgKiBrZXkuDQogICAgICovDQogICBTdHJpbmcgdmFsdWUoKSBkZWZhdWx0ICIiOyB9DQo=