cGFja2FnZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLmludGVybmFsLnVpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSAyMDAyIElCTSBDb3JwLiBhbmQgb3RoZXJzLgpBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYwLjUKd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjA1Lmh0bWwKoApDb250cmlidXRvcnM6CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwppbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwppbXBvcnQgb3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5pbnRlcm5hbC5jb3JlLlRvb2xNZXNzYWdlczsKCi8qKgogKiBMYWJlbCBwcm92aWRlciBmb3IgdGhlIHRyZWUgdmlld2VyIG9mIHRoZSBMb2cgQ29uc29sZS4KICovCnB1YmxpYyBjbGFzcyBMb2dUcmVlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKCglwcml2YXRlIExvZ0NvbnNvbGVWaWV3IGNvbnNvbGU7CgoJcHVibGljIExvZ1RyZWVMYWJlbFByb3ZpZGVyKExvZ0NvbnNvbGVWaWV3IGNvbnNvbGUpIHsKCQl0aGlzLmNvbnNvbGUgPSBjb25zb2xlOwoJfQoKCS8qKgoJICogQHNlZSBJTGFiZWxQcm92aWRlciNnZXRJbWFnZShPYmplY3QpCgkgKi8KCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogQHNlZSBJTGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCkKCSAqLwoJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7CgkJU3RyaW5nIHRleHQgPSAoKE91dHB1dFN0cnVjdHVyZUVsZW1lbnQpIGVsZW1lbnQpLmdldE5hbWUoKTsKCQlpZiAodGV4dCA9PSBudWxsKQoJCQkvLyB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXIgd3JpdGVzIGEgdGFzayBuYW1lIHRoYXQgZG9lc24ndCBleGlzdCA9PiB0aGUgI3Rhc2tTdGFydGVkIHdpbGwgYmUgdHJpZ2dlcmVkCgkJCS8vIGJ1dCBudWxsIHdpbGwgYmUgZ2l2ZW4gYXMgYSBuYW1lIHRvIHRoZSBjdXJyZW50IHRhc2ssIGFuZCB0aGVuIG9ubHksIHRoZSBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQKCQkJcmV0dXJuIFRvb2xNZXNzYWdlcy5nZXRTdHJpbmcoIkxvZ1RyZWVMYWJlbFByb3ZpZGVyLmludmFsaWRJdGVtTmFtZSIpOyAvLyAkTk9OLU5MUy0xJAoJCXJldHVybiB0ZXh0OwoJfQoKCS8qKgoJICogQHNlZSBJQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKCSAqLwoJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewoJfQoKCS8qKgoJICogQHNlZSBJQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCgkgKi8KCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Cgl9CgoJLyoqCgkgKiBAc2VlIElCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoT2JqZWN0LCBTdHJpbmcpCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgYXJnMCwgU3RyaW5nIGFyZzEpIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBAc2VlIElCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyKQoJICovCglwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Cgl9Cgp9