LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogQGZpbGUgICAgIHN5c3RlbV9YTUM0MjAwLmgNCiAqIEBicmllZiAgICBIZWFkZXIgZmlsZSBmb3IgdGhlIFhNQzQyMDAtU2VyaWVzIHN5c3RlbWluaXQNCiAqICAgICAgICAgICANCiAqIEB2ZXJzaW9uICBWMS4wDQogKiBAZGF0ZSAgICAgMjcuIEF1Z3VzdCAyMDEyDQogKg0KICogQG5vdGUNCiAqIENvcHlyaWdodCAoQykgMjAxMSBJbmZpbmVvbiBUZWNobm9sb2dpZXMgQUcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAqDQogKiBAcGFyDQogKiBJbmZpbmVvbiBUZWNobm9sb2dpZXMgQUcgKEluZmluZW9uKSBpcyBzdXBwbHlpbmcgdGhpcyBzb2Z0d2FyZSBmb3IgdXNlIHdpdGggSW5maW5lb26ScyBtaWNyb2NvbnRyb2xsZXJzLiAgDQogKiBUaGlzIGZpbGUgY2FuIGJlIGZyZWVseSBkaXN0cmlidXRlZCB3aXRoaW4gZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgc3VwcG9ydGluZyBzdWNoIG1pY3JvY29udHJvbGxlcnMuIA0KDQogKg0KICogQHBhcg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLiAgTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEDQogKiBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRS4NCiAqIElORklORU9OIFNIQUxMIE5PVCwgSU4gQU5ZIENJUkNVTVNUQU5DRVMsIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1INCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUywgRk9SIEFOWSBSRUFTT04gV0hBVFNPRVZFUi4NCiAqDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQojaWZuZGVmIF9fU1lTVEVNX1hNQzQyMDBfSA0KI2RlZmluZSBfX1NZU1RFTV9YTUM0MjAwX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiIHsNCiNlbmRpZg0KDQojaW5jbHVkZSA8c3RkaW50Lmg+DQoNCmV4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAgICAvKiE8IFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKENvcmUgQ2xvY2spICAqLw0KDQovKioNCiAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQ0KICoNCiAqIEBwYXJhbSAgbm9uZQ0KICogQHJldHVybiBub25lDQogKg0KICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4NCiAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgU3lzdGVtLg0KICovDQpleHRlcm4gdm9pZCBTeXN0ZW1Jbml0ICh2b2lkKTsNCg0KDQovKioNCiAqIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUNCiAqDQogKiBAcGFyYW0gIG5vbmUNCiAqIEByZXR1cm4gbm9uZQ0KICoNCiAqIEBicmllZiAgVXBkYXRlcyB0aGUgU3lzdGVtQ29yZUNsb2NrIHdpdGggY3VycmVudCBjb3JlIENsb2NrDQogKiAgICAgICAgIHJldHJpZXZlZCBmcm9tIGNwdSByZWdpc3RlcnMuDQogKi8NCmV4dGVybiB2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSAodm9pZCk7DQoNCi8qIHRoaXMgd2VhayBmdW5jdGlvbiBlbmFibGVzIERBVkUzIGNsb2NrIEFwcCB1c2FnZSAqLwkJDQpleHRlcm4gdWludDMyX3QgQWxsb3dQTExJbml0QnlTdGFydHVwKHZvaWQpOwkJDQoJCQkJDQoNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQojZW5kaWYNCg0KDQojZW5kaWYNCg==