Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBGaWxlICAgOiAgU1RMX1RpbWVyLmhoCi8vIEF1dGhvciA6ICBMLiBQbGFnbmUgPGxhdXJlbnQucGxhZ25lQGVkZi5mcik+Ci8vIENvcHlyaWdodCAoQykgRURGIFImRCwgIG1hciBk6WMgMyAxODo1OTozNSBDRVQgMjAwMgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLy8gb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAovLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgovLwovLyBTVEwgVGltZXIgQ2xhc3MuIEFkYXB0ZWQgKEwuUC4pIGZyb20gdGhlIHRpbWVyIGNsYXNzIGJ5IE11c3NlciBldCBBbAovLyBkZXNjcmliZWQgaW50IHRoZSBCb29rIDogU1RMIFR1dG9yaWFsIGFuZCByZWZlcmVuY2UgZ3VpZGUuCi8vIERlZmluZSBhIHRpbWVyIGNsYXNzIGZvciBhbmFseXppbmcgYWxnb3JpdGhtIHBlcmZvcm1hbmNlLgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU1RMX1RpbWVyIHsKIHB1YmxpYzoKICBTVExfVGltZXIoKSB7IGJhc2VsaW5lID0gZmFsc2U7IH07ICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yCiAgLy8gU3RhcnQgYSBzZXJpZXMgb2YgciB0cmlhbHM6CiAgdm9pZCBzdGFydCh1bnNpZ25lZCBpbnQgcikgewogICAgcmVwcyA9IHI7CiAgICBjb3VudCA9IDA7CiAgICBpdGVyYXRpb25zLmNsZWFyKCk7CiAgICBpdGVyYXRpb25zLnJlc2VydmUocmVwcyk7CiAgICBpbml0aWFsID0gdGltZSgwKTsKICB9OwogIC8vIFN0YXJ0IGEgc2VyaWVzIG9mIHIgdHJpYWxzIHRvIGRldGVybWluZSBiYXNlbGluZSB0aW1lOgogIHZvaWQgc3RhcnRfYmFzZWxpbmUodW5zaWduZWQgaW50IHIpIHsKICAgIGJhc2VsaW5lID0gdHJ1ZTsKICAgIHN0YXJ0KHIpOwogIH0KICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRyaWFscyBoYXZlIGJlZW4gY29tcGxldGVkLCBlbHNlIGZhbHNlCiAgYm9vbCBjaGVjaygpIHsKICAgICsrY291bnQ7CiAgICBmaW5hbCA9IHRpbWUoMCk7CiAgICBpZiAoaW5pdGlhbCA8IGZpbmFsKSB7CiAgICAgIGl0ZXJhdGlvbnMucHVzaF9iYWNrKGNvdW50KTsKICAgICAgaW5pdGlhbCA9IGZpbmFsOwogICAgICBjb3VudCA9IDA7CiAgICB9CiAgICByZXR1cm4gKGl0ZXJhdGlvbnMuc2l6ZSgpIDwgcmVwcyk7CiAgfTsKICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIGZvciBleHRlcm5hbCB1c2UKICBkb3VibGUgZ2V0X3RpbWUodm9pZCkgewogICAgc29ydChpdGVyYXRpb25zLmJlZ2luKCksIGl0ZXJhdGlvbnMuZW5kKCkpOwogICAgcmV0dXJuIDEuMCAvIGl0ZXJhdGlvbnNbcmVwcyAvIDJdOwogIH07CgogcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgcmVwczsgIC8vIE51bWJlciBvZiB0cmlhbHMKICAvLyBGb3Igc3RvcmluZyBsb29wIGl0ZXJhdGlvbnMgb2YgYSB0cmlhbAogIHZlY3Rvcjxsb25nPiBpdGVyYXRpb25zOwogIC8vIEZvciBzYXZpbmcgaW5pdGlhbCBhbmQgZmluYWwgdGltZXMgb2YgYSB0cmlhbAogIHRpbWVfdCBpbml0aWFsLCBmaW5hbDsKICAvLyBGb3IgY291bnRpbmcgbG9vcCBpdGVyYXRpb25zIG9mIGEgdHJpYWwKICB1bnNpZ25lZCBsb25nIGNvdW50OwogIC8vIHRydWUgaWYgdGhpcyBpcyBhIGJhc2VsaW5lIGNvbXB1dGF0aW9uLCBmYWxzZSBvdGhlcndpc2UKICBib29sIGJhc2VsaW5lOwogIC8vIEZvciByZWNvcmRpbmcgdGhlIGJhc2VsaW5lIHRpbWUKICBkb3VibGUgYmFzZWxpbmVfdGltZTsKfTsK