LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogqSAyMDE1IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuCiogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgKKiBNaWNyb2NoaXAgcHJvZHVjdHMuCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4KKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLAoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwKKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUAoqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5ECiogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUwoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLgoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTAoqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRgoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFCiogT0YgVEhFU0UgVEVSTVMuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiBDb250cm9sIEluZm9ybWF0aW9uIChQZXJmb3JjZSkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRSZXZpc2lvbjogIzEgJCAKJERhdGVUaW1lOiAyMDE2LzA0LzA4IDEwOjE4OjI4ICQgCiRBdXRob3I6IHByYW1hbnMgJApMYXN0IENoYW5nZTogVXBkYXRlZCBmb3IgcGVyaXBoZXJhbCBmdW5jdGlvbnMgcHJlZml4IHBfCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqIEBmaWxlIGJ0aW1lcl9wZXJwaGwuYwoqIFxicmllZiBIaWJlcm5hdGlvbiBUaW1lciBQZXJpcGhlcmFsIFNvdXJjZSBmaWxlCiogXGF1dGhvciBqdmFzYW50aAoqIAoqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEhpYmVybmF0aW9uIFRpbWVyIFBlcmlwaGVyYWwgZnVuY3Rpb25zICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqIEBkZWZncm91cCBIaWJlcm5hdGlvbl9UaW1lcgogKiAgQHsKICovCgojaW5jbHVkZSAiY29tbW9uX2xpYi5oIgojaW5jbHVkZSAiaHRpbWVyLmgiCgovKiogSGliZXJuYXRpb24gVGltZXIgSW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8Kc3RhdGljIEhUTV9UeXBlICogY29uc3QgaHRtcl9pbnN0W0hUSU1FUl9NQVhfSU5TVEFOQ0VdID0gewogICAgQ0VDMTMwMl9IVE0gICAgCn07CgovKiogU2V0cyBoaWJlcm5hdGlvbiB0aW1lciBwcmVsb2FkIHZhbHVlCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQKICogQHBhcmFtIHByZWxvYWRfdmFsdWUJLSAxNi1iaXQgcHJlbG9hZCB2YWx1ZSAKICogQG5vdGUgU2V0dGluZyB0aGUgcHJlbG9hZCB3aXRoIGEgbm9uLXplcm8gdmFsdWUgc3RhcnRzIAogKiB0aGUgaGliZXJuYXRpb24gdGltZXIgdG8gZG93biBjb3VudC4gU2V0dGluZyB0aGUgcHJlbG9hZCAKICogdG8gMCBkaXNhYmxlcyB0aGUgaGliZXJuYXRpb24gY291bnRlcgogKi8Kdm9pZCBwX2h0aW1lcl9wcmVsb2FkX3NldCh1aW50OF90IGh0aW1lcl9pZCwgdWludDE2X3QgcHJlbG9hZF92YWx1ZSkKewogICAgaHRtcl9pbnN0W2h0aW1lcl9pZF0tPlBSRUxPQUQgPSBwcmVsb2FkX3ZhbHVlOwkJCQkJCn0KCi8qKiBTZXRzIGhpYmVybmF0aW9uIHRpbWVyIHJlc29sdXRpb24KICogQHBhcmFtIGh0aW1lcl9pZCBIaWJlcm5hdGlvbiBUaW1lciBJRAogKiBAcGFyYW0gcmVzb2x1dGlvbl9tb2RlIDAgLSByZXNvbHV0aW9uIG9mIDMwLjV1cyBwZXIgTFNCLCAKICogICAgICAgIDEgLSByZXNvbHV0aW9uIG9mIDAuMTI1cyBwZXIgTFNCCiAqLwp2b2lkIHBfaHRpbWVyX3Jlc29sdXRpb25fc2V0KHVpbnQ4X3QgaHRpbWVyX2lkLCB1aW50OF90IHJlc29sdXRpb25fbW9kZSkKewogICAgaHRtcl9pbnN0W2h0aW1lcl9pZF0tPkNPTlRST0wgPSByZXNvbHV0aW9uX21vZGU7ICAgIAp9CgovKiogUmV0dXJucyB0aGUgSGliZXJuYXRpb24gVGltZXIgY3VycmVudCBjb3VudCB2YWx1ZQogKiBAcGFyYW0gaHRpbWVyX2lkIEhpYmVybmF0aW9uIFRpbWVyIElECiAqIEByZXR1cm4gMTYtYml0IGNvdW50IHZhbHVlIAogKi8KdWludDE2X3QgcF9odGltZXJfY291bnRfZ2V0KHVpbnQ4X3QgaHRpbWVyX2lkKQp7CiAgICB1aW50MTZfdCBodGltZXJfY291bnQ7CiAgICAKICAgIGh0aW1lcl9jb3VudCA9IGh0bXJfaW5zdFtodGltZXJfaWRdLT5DT1VOVDsKICAgIAogICAgcmV0dXJuIGh0aW1lcl9jb3VudDsKfQoKCi8qIGVuZCBodGltZXJfcGVycGhsLmMgKi8KCi8qKiAgIEB9IC8vUGVyaXBoZXJhbCBIaWJlcm5hdGlvbl9UaW1lcgogKi8KCg==