I3ByYWdtYSBvbmNlDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogQ29weXJpZ2h0IChDKSAyMDE2IGJ5IFNhdm9pci1mYWlyZSBMaW51eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IErkZ2VyIE5pY29sYXMgPG5pY29sYXMuamFnZXJAc2F2b2lyZmFpcmVsaW51eC5jb20+ICAgICAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpDb2xsZWN0aW9uczsNCg0KbmFtZXNwYWNlIFJpbmdDbGllbnRVV1ANCnsNCg0KDQpuYW1lc3BhY2UgVmlld01vZGVsIHsNCnB1YmxpYyByZWYgY2xhc3MgQ2FsbHNWaWV3TW9kZWwgc2VhbGVkDQp7DQppbnRlcm5hbDoNCiAgICAvKiBzaW5nbGV0b24gKi8NCiAgICBzdGF0aWMgcHJvcGVydHkgQ2FsbHNWaWV3TW9kZWxeIGluc3RhbmNlDQogICAgew0KICAgICAgICBDYWxsc1ZpZXdNb2RlbF4gZ2V0KCkNCiAgICAgICAgew0KICAgICAgICAgICAgc3RhdGljIENhbGxzVmlld01vZGVsXiBpbnN0YW5jZV8gPSByZWYgbmV3IENhbGxzVmlld01vZGVsKCk7DQogICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VfOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyogZnVuY3Rpb25zICovDQogICAgQ2FsbF4gYWRkTmV3Q2FsbChTdHJpbmdeIGFjY291bnRJZCwgU3RyaW5nXiBjYWxsSWQsIFN0cmluZ14gZnJvbSk7DQoNCiAgICAvKiBwcm9wZXJ0aWVzICovDQogICAgcHJvcGVydHkgVmVjdG9yPENhbGxePl4gQ2FsbHNMaXN0DQogICAgew0KICAgICAgICBWZWN0b3I8Q2FsbF4+XiBnZXQoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gQ2FsbHNMaXN0XzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qIGV2ZW50cyAqLw0KDQpwcml2YXRlOg0KICAgIENhbGxzVmlld01vZGVsKCk7IC8vIHNpbmdsZXRvbg0KICAgIFZlY3RvcjxDYWxsXj5eIENhbGxzTGlzdF87DQoNCn07DQp9DQp9DQo=