LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogqSAyMDE1IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuCiogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgKKiBNaWNyb2NoaXAgcHJvZHVjdHMuCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4KKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLAoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwKKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUAoqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5ECiogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUwoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLgoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTAoqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRgoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFCiogT0YgVEhFU0UgVEVSTVMuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiBDb250cm9sIEluZm9ybWF0aW9uIChQZXJmb3JjZSkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRSZXZpc2lvbjogIzEgJCAKJERhdGVUaW1lOiAyMDE2LzA0LzA4IDEwOjE4OjI4ICQgCiRBdXRob3I6IHByYW1hbnMgJApMYXN0IENoYW5nZToJVXBkYXRlZCBmb3IgdGFicwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKiBAZmlsZSBidGltZXJfcGVycGhsLmMKKiBcYnJpZWYgQmFzaWMgVGltZXIgUGVyaXBoZXJhbCBTb3VyY2UgZmlsZQoqIFxhdXRob3IganZhc2FudGgKKiAKKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQmFzaWMgVGltZXIgUGVyaXBoZXJhbCBmdW5jdGlvbnMgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiogQGRlZmdyb3VwIEJhc2ljX1RpbWVyCiAqICBAewogKi8KCiNpbmNsdWRlICJjb21tb25fbGliLmgiCiNpbmNsdWRlICJidGltZXIuaCIKCi8qKiBCYXNpYyBUaW1lciBJbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLwpzdGF0aWMgVElNRVJfMTZfMF9UeXBlICogY29uc3QgYnRtcl9pbnN0W0JUSU1FUl9NQVhfSU5TVEFOQ0VdID0gewogICAgQ0VDMTMwMl9USU1FUl8xNl8wLAogICAgQ0VDMTMwMl9USU1FUl8xNl8xLAogICAgQ0VDMTMwMl9USU1FUl8xNl8yLAogICAgQ0VDMTMwMl9USU1FUl8xNl8zLAogICAgQ0VDMTMwMl9USU1FUl8zMl8wLAogICAgQ0VDMTMwMl9USU1FUl8zMl8xCn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICBGdW5jdGlvbnMgdG8gc2V0IGFuZCByZWFkIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyoqIFNldHMgdGltZXIgY291bnRlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEBwYXJhbSBjb3VudAktIDMyLWJpdCBjb3VudGVyICAKICovCnZvaWQgcF9idGltZXJfY291bnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCBjb3VudCkKewogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPVU5UID0gY291bnQ7CQkJCQkKfQoKLyoqIFJlYWQgdGhlIHRpbWVyIGNvdW50ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKiBAcmV0dXJuIGNvdW50CS0gMzItYml0IGNvdW50ZXIgIAogKi8KdWludDMyX3QgcF9idGltZXJfY291bnRfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQogICAgcmV0dXJuIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT1VOVDsJCn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gdG8gcHJvZ3JhbSB0aGUgUHJlbG9hZCAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiogU2V0cyBwcmVsb2FkIGZvciB0aGUgY291bnRlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEBwYXJhbSBwcmVsb2FkX2NvdW50CS0gMzItYml0IHByZS1sb2FkIHZhbHVlIAogKi8Kdm9pZCBwX2J0aW1lcl9wcmVsb2FkX3NldCh1aW50OF90IGJ0aW1lcl9pZCwgdWludDMyX3QgcHJlbG9hZF9jb3VudCkKewogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPlBSRV9MT0FEID0gcHJlbG9hZF9jb3VudDsJCn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgRnVuY3Rpb25zIGZvciBiYXNpYyB0aW1lciBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiogUmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgYml0IGluIHRoZSB0aW1lciBibG9jawogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKiBAcmV0dXJuIHN0YXR1cyAtIDEgaWYgaW50ZXJydXB0IHN0YXR1cyBzZXQsIGVsc2UgMAogKi8KdWludDhfdCBwX2J0aW1lcl9pbnRfc3RhdHVzX2dldCh1aW50OF90IGJ0aW1lcl9pZCkKewogICAgcmV0dXJuICh1aW50OF90KShidG1yX2luc3RbYnRpbWVyX2lkXS0+SU5URVJSVVBUX1NUQVRVUyk7Cn0KCi8qKiBDbGVhcnMgaW50ZXJydXB0IHN0YXR1cyBiaXQgaW4gdGhlIHRpbWVyIGJsb2NrCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqLwp2b2lkIHBfYnRpbWVyX2ludF9zdGF0dXNfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKQp7CiAgICAvLyBXcml0ZSAxIHRvIGNsZWFyCiAgICBidG1yX2luc3RbYnRpbWVyX2lkXS0+SU5URVJSVVBUX1NUQVRVUyA9IDE7Cn0KCi8qKiBTZXRzIGludGVycnVwdCBlbmFibGUgYml0IGluIHRoZSB0aW1lciBibG9jawogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEICAKICovCnZvaWQgcF9idGltZXJfaW50X2VuYWJsZV9zZXQodWludDhfdCBidGltZXJfaWQpCnsJCQogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPklOVEVSUlVQVF9FTkFCTEUgPSAxOwp9CgovKiogQ2xlYXJzIGludGVycnVwdCBlbmFibGUgYml0IGZvciB0aGUgdGltZXIgYmxvY2sKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCAgCiAqLwp2b2lkIHBfYnRpbWVyX2ludF9lbmFibGVfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5JTlRFUlJVUFRfRU5BQkxFID0gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICBGdW5jdGlvbnMgZm9yIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qKiBXcml0ZXMgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgMzItYml0cwogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEBwYXJhbSB2YWx1ZQktIDMyLWJpdCB2YWx1ZSB0byBwcm9ncmFtCiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfd3JpdGUodWludDhfdCBidGltZXJfaWQsIHVpbnQzMl90IHZhbHVlKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLncgPSB2YWx1ZTsKfQoKLyoqIFJlYWRzIHRoZSBjb250cm9sIHJlZ2lzdGVyIAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEByZXR1cm4gdWludDMyX3QJLSAzMi1iaXQgdmFsdWUKICovCnVpbnQzMl90IHBfYnRpbWVyX2N0cmxfcmVhZCh1aW50OF90IGJ0aW1lcl9pZCkKewkJCiAgICB1aW50MzJfdCByZXRWYWw7CgogICAgcmV0VmFsID0gYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPTlRST0wudzsKCiAgICByZXR1cm4gcmV0VmFsOwp9CgovKiogU2V0cyBlbmFibGUgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICovCnZvaWQgcF9idGltZXJfY3RybF9lbmFibGVfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gfD0gQlRJTUVSX0NOVExfRU5BQkxFOwp9CgovKiogQ2xlYXJzIGVuYWJsZSBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2VuYWJsZV9jbHIodWludDhfdCBidGltZXJfaWQpCnsJCQogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPTlRST0wuYlswXSAmPSB+QlRJTUVSX0NOVExfRU5BQkxFOwp9CgovKiogU2V0cyBjb3VudGVyIGRpcmVjdGlvbiBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2NvdW50ZXJfZGlyX3NldCh1aW50OF90IGJ0aW1lcl9pZCkKewkJCiAgICBidG1yX2luc3RbYnRpbWVyX2lkXS0+Q09OVFJPTC5iWzBdIHw9IEJUSU1FUl9DTlRMX0NPVU5UX1VQOwp9CgovKiogQ2xlYXJzIGNvdW50ZXIgZGlyZWN0aW9uIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfY291bnRlcl9kaXJfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gJj0gfkJUSU1FUl9DTlRMX0NPVU5UX1VQOwp9CgovKiogU2V0cyBhdXRvIHJlc3RhcnQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICovCnZvaWQgcF9idGltZXJfY3RybF9hdXRvX3Jlc3RhcnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gfD0gQlRJTUVSX0NOVExfQVVUT19SRVNUQVJUOwp9CgovKiogQ2xlYXJzIGF1dG8gcmVzZXRhcnQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICovCnZvaWQgcF9idGltZXJfY3RybF9hdXRvX3Jlc3RhcnRfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gJj0gfkJUSU1FUl9DTlRMX0FVVE9fUkVTVEFSVDsKfQoKLyoqIFNldHMgc29mdCByZXNldCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCAKICovCnZvaWQgcF9idGltZXJfY3RybF9zb2Z0X3Jlc2V0X3NldCh1aW50OF90IGJ0aW1lcl9pZCkKewkJCiAgICBidG1yX2luc3RbYnRpbWVyX2lkXS0+Q09OVFJPTC5iWzBdIHw9IEJUSU1FUl9DTlRMX1NPRlRfUkVTRVQ7Cn0KCi8qKiBSZWFkIFNvZnQgUmVzZXQgYml0IAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEByZXR1cm4gMCBpZiBzb2Z0IHJlc2V0IHN0YXR1cyBiaXQgY2xlYXJlZDsgZWxzZSBub24temVybyB2YWx1ZQogKi8KdWludDhfdCBwX2J0aW1lcl9jdHJsX3NvZnRfcmVzZXRfc3RzX2dldCh1aW50OF90IGJ0aW1lcl9pZCkKewkJCiAgICByZXR1cm4gKGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gJiBCVElNRVJfQ05UTF9TT0ZUX1JFU0VUKTsKfQoKLyoqIFNldHMgc3RhcnQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfc3RhcnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gfD0gQlRJTUVSX0NOVExfU1RBUlQ7Cn0KCi8qKiBSZWFkIHN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKiBAcmV0dXJuIDAgaWYgc3RhcnQgYml0IG5vdCBzZXQ7IGVsc2Ugbm9uLXplcm8gdmFsdWUKICovCnVpbnQ4X3QgcF9idGltZXJfY3RybF9zdGFydF9nZXQodWludDhfdCBidGltZXJfaWQpCnsJCQogICAgcmV0dXJuIChidG1yX2luc3RbYnRpbWVyX2lkXS0+Q09OVFJPTC5iWzBdICYgQlRJTUVSX0NOVExfU1RBUlQpOwp9CgovKiogQ2xlYXJzIHN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX3N0YXJ0X2Nscih1aW50OF90IGJ0aW1lcl9pZCkKewkJCiAgICBidG1yX2luc3RbYnRpbWVyX2lkXS0+Q09OVFJPTC5iWzBdICY9IH5CVElNRVJfQ05UTF9TVEFSVDsKfQoKLyoqIFNldHMgcmVsb2FkIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX3JlbG9hZF9zZXQodWludDhfdCBidGltZXJfaWQpCnsJCQogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPTlRST0wuYlswXSB8PSBCVElNRVJfQ05UTF9SRUxPQUQ7Cn0KCi8qKiBDbGVhcnMgcmVsb2FkIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX3JlbG9hZF9jbHIodWludDhfdCBidGltZXJfaWQpCnsJCQogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPTlRST0wuYlswXSAmPSB+QlRJTUVSX0NOVExfUkVMT0FEOwp9CgovKiogU2V0cyBoYWx0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2hhbHRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gfD0gQlRJTUVSX0NOVExfSEFMVDsKfQoKLyoqIENsZWFycyBoYWx0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2hhbHRfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKQp7CQkKICAgIGJ0bXJfaW5zdFtidGltZXJfaWRdLT5DT05UUk9MLmJbMF0gJj0gfkJUSU1FUl9DTlRMX0hBTFQ7Cn0KCi8qKiBTZXRzIHByZXNjYWxlIHZhbHVlCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICogQHBhcmFtIHByZXNjYWxlcgktIDE2LWJpdCBwcmUtc2NhbGUgdmFsdWUgCiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfcHJlc2NhbGVfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MTZfdCBwcmVzY2FsZXIpCnsJCQogICAgYnRtcl9pbnN0W2J0aW1lcl9pZF0tPkNPTlRST0wuaFsxXSA9IHByZXNjYWxlcjsKfQoKCi8qIGVuZCBidGltZXJfcGVycGhsLmMgKi8KCi8qKiAgIEB9IC8vUGVyaXBoZXJhbCBCYXNpY19UaW1lcgogKi8KCg==