LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUucmVzb3VyY2VzOwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLio7CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlOwovKioKICogCiAqLwpwdWJsaWMgY2xhc3MgUHJvamVjdE1vZHVsZUZvbGRlciBleHRlbmRzIFByb2plY3RNb2R1bGVSZXNvdXJjZSBpbXBsZW1lbnRzIElNb2R1bGVGb2xkZXIgewoJcHVibGljIFByb2plY3RNb2R1bGVGb2xkZXIoSU1vZHVsZSBtb2R1bGUsIElNb2R1bGVGb2xkZXIgcGFyZW50LCBJQ29udGFpbmVyIGNvbnRhaW5lcikgewoJCXN1cGVyKG1vZHVsZSwgcGFyZW50LCBjb250YWluZXIpOwoJfQoKCS8qKgoJICogUmV0dXJucyBhIGxpc3Qgb2YgSU1vZHVsZVJlc291cmNlcyBkaXJlY3RseSBjb250YWluZWQKCSAqIHdpdGhpbiB0aGlzIGZvbGRlci4KCSAqCgkgKiBAcmV0dXJuIGphdmEudXRpbC5MaXN0CgkgKi8KCXB1YmxpYyBJTW9kdWxlUmVzb3VyY2VbXSBtZW1iZXJzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewoJCUlDb250YWluZXIgY29udGFpbmVyID0gKElDb250YWluZXIpIGdldFJlc291cmNlKCk7CgkJSVJlc291cmNlW10gcmVzb3VyY2VzID0gY29udGFpbmVyLm1lbWJlcnMoKTsKCQlpZiAocmVzb3VyY2VzICE9IG51bGwpIHsKCQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwoJCQkKCQkJaW50IHNpemUgPSByZXNvdXJjZXMubGVuZ3RoOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewoJCQkJSVJlc291cmNlIHJlcyA9IHJlc291cmNlc1tpXTsKCQkJCWlmIChyZXMgaW5zdGFuY2VvZiBJQ29udGFpbmVyKSB7CgkJCQkJUHJvamVjdE1vZHVsZUZvbGRlciBwZGYgPSBuZXcgUHJvamVjdE1vZHVsZUZvbGRlcihnZXRNb2R1bGUoKSwgdGhpcywgKElDb250YWluZXIpIHJlcyk7CQoJCQkJCWxpc3QuYWRkKHBkZik7CgkJCQl9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIElGaWxlKSB7CgkJCQkJUHJvamVjdE1vZHVsZUZpbGUgcGRmID0gbmV3IFByb2plY3RNb2R1bGVGaWxlKGdldE1vZHVsZSgpLCB0aGlzLCAoSUZpbGUpIHJlcyk7CgkJCQkJbGlzdC5hZGQocGRmKTsKCQkJCX0KCQkJfQoJCQkKCQkJSU1vZHVsZVJlc291cmNlW10gbW9kdWxlUmVzb3VyY2VzID0gbmV3IElNb2R1bGVSZXNvdXJjZVtsaXN0LnNpemUoKV07CgkJCWxpc3QudG9BcnJheShtb2R1bGVSZXNvdXJjZXMpOwoJCQlyZXR1cm4gbW9kdWxlUmVzb3VyY2VzOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KfQ==