LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQogKiBDb3B5cmlnaHQgKGMpIDIwMTIgQnVuZGVzaW5zdGl0dXQgZvxyIFJpc2lrb2Jld2VydHVuZy4gDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCiAqIA0KICogQ29udHJpYnV0b3JzOiANCiAqICAgICBCdW5kZXNpbnN0aXR1dCBm/HIgUmlzaWtvYmV3ZXJ0dW5nIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCnBhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcjsNCg0KaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCmltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCg0KaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuR3JhcGhFZGl0b3JDYW52YXM7DQoNCnB1YmxpYyBjbGFzcyBHcmFwaEVkaXRvckNhbnZhc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQoNCglwcm90ZWN0ZWQgR3JhcGhFZGl0b3JDYW52YXMgZml4dHVyZSA9IG51bGw7DQoNCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQoJCVRlc3RSdW5uZXIucnVuKEdyYXBoRWRpdG9yQ2FudmFzVGVzdC5jbGFzcyk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCgkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQoJCXNldEZpeHR1cmUobnVsbCk7DQoJfQ0KDQoJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShHcmFwaEVkaXRvckNhbnZhcyBmaXh0dXJlKSB7DQoJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7DQoJfQ0KDQoJcHJvdGVjdGVkIEdyYXBoRWRpdG9yQ2FudmFzIGdldEZpeHR1cmUoKSB7DQoJCXJldHVybiBmaXh0dXJlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgR3JhcGhFZGl0b3JDYW52YXMgY3JlYXRlRml4dHVyZSgpIHsNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJcHVibGljIHZvaWQgdGVzdEdyYXBoQ2FudmFzKCkgew0KCQlhc3NlcnRUcnVlKHRydWUpOw0KCX0NCg0KfQ0K