LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogqSAyMDE1IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuCiogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgKKiBNaWNyb2NoaXAgcHJvZHVjdHMuCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4KKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLAoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwKKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUAoqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5ECiogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUwoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLgoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTAoqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRgoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFCiogT0YgVEhFU0UgVEVSTVMuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiBDb250cm9sIEluZm9ybWF0aW9uIChQZXJmb3JjZSkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRSZXZpc2lvbjogIzEgJCAKJERhdGVUaW1lOiAyMDE2LzA0LzA4IDEwOjE4OjI4ICQgCiRBdXRob3I6IHByYW1hbnMgJApMYXN0IENoYW5nZTogIFVwZGF0ZWQgZm9yIHBlcmlwaGVyYWwgZnVuY3Rpb25zIHByZWZpeCBwXwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKiBAZmlsZSBidGltZXIuaAoqIFxicmllZiBIaWJlcm5hdGlvbiBUaW1lciBQZXJpcGhlcmFsIEhlYWRlciBmaWxlCiogXGF1dGhvciBqdmFzYW50aAoqIAoqIFRoaXMgZmlsZSBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIEhpYmVybmF0aW9uIFRpbWVyIFBlcmlwaGVyYWwgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBAZGVmZ3JvdXAgSGliZXJuYXRpb25fVGltZXIKICogIEB7CiAqLwoKI2lmbmRlZiBfSFRJTUVSX0gKI2RlZmluZSBfSFRJTUVSX0gKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKiAgTG9naWNhbCBUaW1lciBJRCBmb3IgQVBJcy4KICogVGhpcyBpcyB0aGUgdGltZXIgSURzIHBhc3NlZCB0byBIaWJlcm5hdGlvbiBUaW1lciBmdW5jdGlvbiBjYWxscyAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmVudW0gX1BJRF9IVElNRVJfCnsKCVBJRF9IVElNRVJfMCwJCglQSURfSFRJTUVSX01BWAkKfTsKCiNkZWZpbmUgSFRJTUVSX01BWF9JTlNUQU5DRQkJCVBJRF9IVElNRVJfTUFYCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICBIaWJlcm5hdGlvbiBUaW1lciBBUElzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiogRW5hYmxlcyBoaWJlcm5hdGlvbiB0aW1lcgogKiBAcGFyYW0gaHRpbWVyX2lkIEhpYmVybmF0aW9uIFRpbWVyIElECiAqIEBwYXJhbSBwcmVsb2FkX3ZhbHVlCS0gMTYtYml0IHByZWxvYWQgdmFsdWUgCiAqIEBwYXJhbSByZXNvbHV0aW9uX21vZGUgMCAtIHJlc29sdXRpb24gb2YgMzAuNXVzIHBlciBMU0IsIAogKiAgICAgICAgMSAtIHJlc29sdXRpb24gb2YgMC4xMjVzIHBlciBMU0IKICovCnZvaWQgaHRpbWVyX2VuYWJsZSh1aW50OF90IGh0aW1lcl9pZCwgdWludDE2X3QgcHJlbG9hZF92YWx1ZSwgdWludDhfdCByZXNvbHV0aW9uX21vZGUpOwoKLyoqIERpc2FibGVzIHRoZSBoaWJlcm5hdGlvbiB0aW1lciBieSBwcm9ncmFtbWluZyB0aGUgcHJlbGFvZCB2YWx1ZSBhcyAwCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQgCiAqLwp2b2lkIGh0aW1lcl9kaXNhYmxlKHVpbnQ4X3QgaHRpbWVyX2lkKTsKCgovKiogUmVsb2FkcyBuZXcgcHJlbG9hZCB2YWx1ZSBmb3IgdGhlIGhpYmVybmF0aW9uIHRpbWVyCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQKICogQHBhcmFtIHJlbG9hZF92YWx1ZQktIDE2LWJpdCBwcmVsb2FkIHZhbHVlIAogKi8Kdm9pZCBodGltZXJfcmVsb2FkKHVpbnQ4X3QgaHRpbWVyX2lkLCB1aW50MTZfdCByZWxvYWRfdmFsdWUpOwoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgIEhpYmVybmF0aW9uIFRpbWVyIFBlcmlwaGVyYWwgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBTZXRzIGhpYmVybmF0aW9uIHRpbWVyIHByZWxvYWQgdmFsdWUKICogQHBhcmFtIGh0aW1lcl9pZCBIaWJlcm5hdGlvbiBUaW1lciBJRAogKiBAcGFyYW0gcHJlbG9hZF92YWx1ZQktIDE2LWJpdCBwcmVsb2FkIHZhbHVlIAogKi8Kdm9pZCBwX2h0aW1lcl9wcmVsb2FkX3NldCh1aW50OF90IGh0aW1lcl9pZCwgdWludDE2X3QgcHJlbG9hZF92YWx1ZSk7CgovKiogU2V0cyBoaWJlcm5hdGlvbiB0aW1lciByZXNvbHV0aW9uCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQKICogQHBhcmFtIHJlc29sdXRpb25fbW9kZSAwIC0gcmVzb2x1dGlvbiBvZiAzMC41dXMgcGVyIExTQiwgCiAqICAgICAgICAxIC0gcmVzb2x1dGlvbiBvZiAwLjEyNXMgcGVyIExTQgogKi8Kdm9pZCBwX2h0aW1lcl9yZXNvbHV0aW9uX3NldCh1aW50OF90IGh0aW1lcl9pZCwgdWludDhfdCByZXNvbHV0aW9uX21vZGUpOwoKCi8qKiBSZXR1cm5zIHRoZSBIaWJlcm5hdGlvbiBUaW1lciBjdXJyZW50IGNvdW50IHZhbHVlCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQKICogQHJldHVybiAxNi1iaXQgY291bnQgdmFsdWUgCiAqLwp1aW50MTZfdCBwX2h0aW1lcl9jb3VudF9nZXQodWludDhfdCBodGltZXJfaWQpOwoKCiNlbmRpZiAvLyAjaWZuZGVmIF9IVElNRVJfSAoKLyogZW5kIGh0aW1lci5oICovCgovKiogICBAfSAvL1BlcmlwaGVyYWxzIEhpYmVybmF0aW9uX1RpbWVyCiAqLwoK