LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAxNiBGdW5kYWNp824gVGVjbmFsaWEgUmVzZWFyY2ggJiBJbm5vdmF0aW9uLg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMA0KICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCiAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLTIuMC9FUEwtMi4wLmh0bWwNCiAqDQogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KICoNCiAqIENvbnRyaWJ1dG9yczoNCiAqICAgSHVhc2NhciBFc3Bpbm96YSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBBbGVqYW5kcmEgUnXteiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIE1hcmkgQ2FybWVuIFBhbGFjaW9zIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIEFuZ2VsIEzzcGV6IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKg0KICovDQpwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmluZnJhLm1hcHBpbmdzLm1hcHBpbmc7DQoNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY2RvLkNET09iamVjdDsNCg0KLyoqDQogKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWFwIEp1c3RpZmljYXRpb248L2I+PC9lbT4nLg0KICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQogKg0KICogPHA+DQogKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQogKiA8dWw+DQogKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uub3BlbmNlcnQuaW5mcmEubWFwcGluZ3MubWFwcGluZy5NYXBKdXN0aWZpY2F0aW9uI2dldEV4cGxhbmF0aW9uIDxlbT5FeHBsYW5hdGlvbjwvZW0+fTwvbGk+DQogKiA8L3VsPg0KICogPC9wPg0KICoNCiAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQuaW5mcmEubWFwcGluZ3MubWFwcGluZy5NYXBwaW5nUGFja2FnZSNnZXRNYXBKdXN0aWZpY2F0aW9uKCkNCiAqIEBtb2RlbA0KICogQGV4dGVuZHMgQ0RPT2JqZWN0DQogKiBAZ2VuZXJhdGVkDQogKi8NCnB1YmxpYyBpbnRlcmZhY2UgTWFwSnVzdGlmaWNhdGlvbiBleHRlbmRzIENET09iamVjdCB7DQoJLyoqDQoJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXhwbGFuYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCgkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KCSAqIDxwPg0KCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkV4cGxhbmF0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCgkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQoJICogPC9wPg0KCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkV4cGxhbmF0aW9uPC9lbT4nIGF0dHJpYnV0ZS4NCgkgKiBAc2VlICNzZXRFeHBsYW5hdGlvbihTdHJpbmcpDQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5pbmZyYS5tYXBwaW5ncy5tYXBwaW5nLk1hcHBpbmdQYWNrYWdlI2dldE1hcEp1c3RpZmljYXRpb25fRXhwbGFuYXRpb24oKQ0KCSAqIEBtb2RlbA0KCSAqIEBnZW5lcmF0ZWQNCgkgKi8NCglTdHJpbmcgZ2V0RXhwbGFuYXRpb24oKTsNCg0KCS8qKg0KCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmluZnJhLm1hcHBpbmdzLm1hcHBpbmcuTWFwSnVzdGlmaWNhdGlvbiNnZXRFeHBsYW5hdGlvbiA8ZW0+RXhwbGFuYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4NCgkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkV4cGxhbmF0aW9uPC9lbT4nIGF0dHJpYnV0ZS4NCgkgKiBAc2VlICNnZXRFeHBsYW5hdGlvbigpDQoJICogQGdlbmVyYXRlZA0KCSAqLw0KCXZvaWQgc2V0RXhwbGFuYXRpb24oU3RyaW5nIHZhbHVlKTsNCg0KfSAvLyBNYXBKdXN0aWZpY2F0aW9uDQo=