LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IFRyYWN6eWsgQW5kcmVhcyA8dHJhY3p5ay5hbmRyZWFzQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2luY2x1ZGUgInBjaC5oIg0KDQojaW5jbHVkZSAiQWNjb3VudExpc3RJdGVtLmgiDQoNCnVzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpDb3JlOw0KdXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOw0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkRhdGE6Okpzb247DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OkNvcmU7DQoNCnVzaW5nIG5hbWVzcGFjZSBSaW5nQ2xpZW50VVdQOw0KdXNpbmcgbmFtZXNwYWNlIFJpbmdDbGllbnRVV1A6OkNvbnRyb2xzOw0KdXNpbmcgbmFtZXNwYWNlIFZpZXdNb2RlbDsNCg0KQWNjb3VudExpc3RJdGVtOjpBY2NvdW50TGlzdEl0ZW0oQWNjb3VudF4gYSkNCnsNCiAgICBfYWNjb3VudCA9IGE7DQogICAgX2VkaXRpb25Nb2RlID0gZmFsc2U7DQp9DQoNCnZvaWQNCkFjY291bnRMaXN0SXRlbTo6Tm90aWZ5UHJvcGVydHlDaGFuZ2VkKFN0cmluZ14gcHJvcGVydHlOYW1lKQ0Kew0KICAgIENvcmVBcHBsaWNhdGlvblZpZXdeIHZpZXcgPSBDb3JlQXBwbGljYXRpb246Ok1haW5WaWV3Ow0KICAgIHZpZXctPkNvcmVXaW5kb3ctPkRpc3BhdGNoZXItPlJ1bkFzeW5jKA0KICAgICAgICBDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpIaWdoLA0KICAgICAgICByZWYgbmV3IERpc3BhdGNoZWRIYW5kbGVyKFt0aGlzLCBwcm9wZXJ0eU5hbWVdKCkNCiAgICB7DQogICAgICAgIC8vTVNHXygiQWNjb3VudExpc3RJdGVtOjpOb3RpZnlQcm9wZXJ0eUNoYW5nZWQ6ICIgKyBwcm9wZXJ0eU5hbWUpOw0KICAgICAgICBQcm9wZXJ0eUNoYW5nZWQodGhpcywgcmVmIG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MocHJvcGVydHlOYW1lKSk7DQogICAgfSkpOw0KfQ0KDQp2b2lkDQpBY2NvdW50TGlzdEl0ZW06OnJhaXNlTm90aWZ5UHJvcGVydHlDaGFuZ2VkKFN0cmluZ14gcHJvcGVydHlOYW1lKQ0Kew0KICAgIE5vdGlmeVByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eU5hbWUpOw0KfQ0K