From mboxrd@z Thu Jan 1 00:00:00 1970 From: reentrant To: pthreads-win32@sourceware.cygnus.com Subject: Application Programming errors hidden by pthreads library Date: Sun, 30 Jan 2000 08:58:00 -0000 Message-id: <20000130165839.5273.qmail@web1403.mail.yahoo.com> X-SW-Source: 2000/msg00012.html Content-type: multipart/mixed; boundary="----------=_1583534833-35001-1" This is a multi-part message in MIME format... ------------=_1583534833-35001-1 Content-length: 2813 I just joined the list, so forgive me if this has been discussed prior. Is there an archive of this mailing list publically available somewhere? I've run into an oddity in the pthread library. After many hours debugging extremely mysterious behavior of my application I discovered that the pthread library catches all exceptions that a thread entry point function could throw (which on NT also includes Access Violations and such). The result of the pthread library catching exceptions that it did not throw is to mask and hide programming errors in the application using the pthread library. It's also inconsistent with the behavior of all other pthread implementations I've worked with. None of them catch any exceptions they didn't throw (nor hide access violations, but of course I don't know of a Unix where an access violation IS an exception). For instance, if I call pthread_create with function EntryPoint, and some function that EntryPoint calls throws an exception that it is not caught (a programming error), the C++ standard says that the function terminate() should be called. Instead, the pthread library happily catches all exceptions, and silently stops the thread. So the behavior I see as a programmer is instead of "abnormal program termination" I see my thread mysteriously stopped for no apparent reason! Also, even worse if I call pthread_create with function EntryPoint, and some function it calls has an Access Violation, obviously the program should "crash." But again, as a programmer I see my thread mysteriously stopped for no apparent reason and have no idea that the reason is because an access violation occurred! To avoid the above mentioned pitfalls of catch( ... ) (and the equivalent when using __except in MSVC) I suggest never using catch( ... ) in the pthread library at all, and if you absolutely must, rethrow the exception at the bottom of the catch block with a "throw;" or in the case of __except to do the equivalent of a rethrow returning EXCEPTION_CONTINUE_SEARCH instead of EXCEPTION_EXECUTE_HANDLER. Granted there are times when all uncaught exceptions are desired to be caught, and even access violations trapped, but that's the responsibility of the application, not the pthread library. For reference I include private.c where I implemented this in one case in the pthread library (and there are a few others that also need attention). Other than this oddity, I must admit that my experience has been that the quality and functionality of this library is stellar. Every contributor deserves a pats on the back. Excellent work. I can't express my gratitude and respect with mere words! Dave __________________________________________________ Do You Yahoo!? Talk to your friends online with Yahoo! Messenger. http://im.yahoo.com private.c ------------=_1583534833-35001-1 Content-Type: text/x-c; charset=us-ascii; name="private.c" Content-Disposition: inline; filename="private.c" Content-Transfer-Encoding: base64 Content-Length: 22888 LyoKICogcHJpdmF0ZS5jCiAqCiAqIERlc2NyaXB0aW9uOgogKiBUaGlzIHRy YW5zbGF0aW9uIHVuaXQgaW1wbGVtZW50cyByb3V0aW5lcyB3aGljaCBhcmUg cHJpdmF0ZSB0bwogKiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIG1heSBiZSB1 c2VkIHRocm91Z2hvdXQgaXQuCiAqCiAqIFB0aHJlYWRzLXdpbjMyIC0gUE9T SVggVGhyZWFkcyBMaWJyYXJ5IGZvciBXaW4zMgogKiBDb3B5cmlnaHQgKEMp IDE5OTgKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp YwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgog KgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGlicmFyeSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl bmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKICogU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBC b3N0b24sCiAqIE1BIDAyMTExLTEzMDcsIFVTQQogKi8KCiNpZiAhZGVmaW5l ZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpICYmIGRlZmlu ZWQoX19HTlVDX18pCgojd2FybmluZyBDb21waWxlIF9fRklMRV9fIGFzIEMr KyBvciB0aHJlYWQgY2FuY2VsbGF0aW9uIHdpbGwgbm90IHdvcmsgcHJvcGVy bHkuCgojZW5kaWYgLyogIV9NU0NfVkVSICYmICFfX2NwbHVzcGx1cyAmJiBf X0dOVUNfXyAqLwoKI2luY2x1ZGUgPHN5cy90aW1lYi5oPgojaW5jbHVkZSAi cHRocmVhZC5oIgojaW5jbHVkZSAic2VtYXBob3JlLmgiCiNpbmNsdWRlICJp bXBsZW1lbnQuaCIKCgppbnQKX3B0aHJlYWRfcHJvY2Vzc0luaXRpYWxpemUg KHZvaWQpCiAgICAgLyoKICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKiBET0NQ UklWQVRFCiAgICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHBy b2Nlc3Mgd2lkZSBpbml0aWFsaXphdGlvbiBmb3IKICAgICAgKiAgICAgIHRo ZSBwdGhyZWFkIGxpYnJhcnkuCiAgICAgICoKICAgICAgKiBQQVJBTUVURVJT CiAgICAgICogICAgICBOL0EKICAgICAgKgogICAgICAqIERFU0NSSVBUSU9O CiAgICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHByb2Nlc3Mg d2lkZSBpbml0aWFsaXphdGlvbiBmb3IKICAgICAgKiAgICAgIHRoZSBwdGhy ZWFkIGxpYnJhcnkuCiAgICAgICogICAgICBJZiBzdWNjZXNzZnVsLCB0aGlz IHJvdXRpbmUgc2V0cyB0aGUgZ2xvYmFsIHZhcmlhYmxlCiAgICAgICogICAg ICBfcHRocmVhZF9wcm9jZXNzSW5pdGlhbGl6ZWQgdG8gVFJVRS4KICAgICAg KgogICAgICAqIFJFU1VMVFMKICAgICAgKiAgICAgICAgICAgICAgVFJVRSAg ICBpZiBzdWNjZXNzZnVsLAogICAgICAqICAgICAgICAgICAgICBGQUxTRSAg IG90aGVyd2lzZQogICAgICAqCiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICov CnsKICBfcHRocmVhZF9wcm9jZXNzSW5pdGlhbGl6ZWQgPSBUUlVFOwoKICAv KgogICAqIEluaXRpYWxpemUgS2V5cwogICAqLwogIGlmICgocHRocmVhZF9r ZXlfY3JlYXRlICgmX3B0aHJlYWRfc2VsZlRocmVhZEtleSwgTlVMTCkgIT0g MCkgfHwKICAgICAgKHB0aHJlYWRfa2V5X2NyZWF0ZSAoJl9wdGhyZWFkX2Ns ZWFudXBLZXksIE5VTEwpICE9IDApKQogICAgewoKICAgICAgX3B0aHJlYWRf cHJvY2Vzc1Rlcm1pbmF0ZSAoKTsKICAgIH0KCiAgLyogCiAgICogU2V0IHVw IHRoZSBnbG9iYWwgdGVzdCBhbmQgaW5pdCBjaGVjayBsb2Nrcy4KICAgKi8K ICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZfcHRocmVhZF9tdXRleF90 ZXN0X2luaXRfbG9jayk7CiAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigm X3B0aHJlYWRfY29uZF90ZXN0X2luaXRfbG9jayk7CiAgSW5pdGlhbGl6ZUNy aXRpY2FsU2VjdGlvbigmX3B0aHJlYWRfcndsb2NrX3Rlc3RfaW5pdF9sb2Nr KTsKCiAgcmV0dXJuIChfcHRocmVhZF9wcm9jZXNzSW5pdGlhbGl6ZWQpOwoK fQkJCQkvKiBwcm9jZXNzSW5pdGlhbGl6ZSAqLwoKdm9pZApfcHRocmVhZF9w cm9jZXNzVGVybWluYXRlICh2b2lkKQogICAgIC8qCiAgICAgICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgICAgICogRE9DUFJJVkFURQogICAgICAqICAgICAgVGhpcyBmdW5j dGlvbiBwZXJmb3JtcyBwcm9jZXNzIHdpZGUgdGVybWluYXRpb24gZm9yCiAg ICAgICogICAgICB0aGUgcHRocmVhZCBsaWJyYXJ5LgogICAgICAqCiAgICAg ICogUEFSQU1FVEVSUwogICAgICAqICAgICAgTi9BCiAgICAgICoKICAgICAg KiBERVNDUklQVElPTgogICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBwZXJm b3JtcyBwcm9jZXNzIHdpZGUgdGVybWluYXRpb24gZm9yCiAgICAgICogICAg ICB0aGUgcHRocmVhZCBsaWJyYXJ5LgogICAgICAqICAgICAgVGhpcyByb3V0 aW5lIHNldHMgdGhlIGdsb2JhbCB2YXJpYWJsZQogICAgICAqICAgICAgX3B0 aHJlYWRfcHJvY2Vzc0luaXRpYWxpemVkIHRvIEZBTFNFCiAgICAgICoKICAg ICAgKiBSRVNVTFRTCiAgICAgICogICAgICAgICAgICAgIE4vQQogICAgICAq CiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICovCnsKICBpZiAoX3B0aHJlYWRf cHJvY2Vzc0luaXRpYWxpemVkKQogICAgewoKICAgICAgaWYgKF9wdGhyZWFk X3NlbGZUaHJlYWRLZXkgIT0gTlVMTCkKCXsKCSAgLyoKCSAgICogUmVsZWFz ZSBfcHRocmVhZF9zZWxmVGhyZWFkS2V5CgkgICAqLwoJICBwdGhyZWFkX2tl eV9kZWxldGUgKF9wdGhyZWFkX3NlbGZUaHJlYWRLZXkpOwoKCSAgX3B0aHJl YWRfc2VsZlRocmVhZEtleSA9IE5VTEw7Cgl9CgogICAgICBpZiAoX3B0aHJl YWRfY2xlYW51cEtleSAhPSBOVUxMKQoJewoJICAvKgoJICAgKiBSZWxlYXNl IF9wdGhyZWFkX2NsZWFudXBLZXkKCSAgICovCgkgIHB0aHJlYWRfa2V5X2Rl bGV0ZSAoX3B0aHJlYWRfY2xlYW51cEtleSk7CgoJICBfcHRocmVhZF9jbGVh bnVwS2V5ID0gTlVMTDsKCX0KCiAgICAgIC8qIAogICAgICAgKiBEZXN0cm95 IHRoZSBnbG9iYWwgdGVzdCBhbmQgaW5pdCBjaGVjayBsb2Nrcy4KICAgICAg ICovCiAgICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmX3B0aHJlYWRfcnds b2NrX3Rlc3RfaW5pdF9sb2NrKTsKICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0 aW9uKCZfcHRocmVhZF9jb25kX3Rlc3RfaW5pdF9sb2NrKTsKICAgICAgRGVs ZXRlQ3JpdGljYWxTZWN0aW9uKCZfcHRocmVhZF9tdXRleF90ZXN0X2luaXRf bG9jayk7CgogICAgICBfcHRocmVhZF9wcm9jZXNzSW5pdGlhbGl6ZWQgPSBG QUxTRTsKICAgIH0KCn0JCQkJLyogcHJvY2Vzc1Rlcm1pbmF0ZSAqLwoKI2lm ZGVmIF9NU0NfVkVSCgpzdGF0aWMgRFdPUkQKRXhjZXB0aW9uRmlsdGVyIChF WENFUFRJT05fUE9JTlRFUlMgKiBlcCwgRFdPUkQgKiBlaSwgRFdPUkQgZWMp CnsKICBEV09SRCBwYXJhbTsKICBEV09SRCBudW1QYXJhbXMgPSBlcC0+RXhj ZXB0aW9uUmVjb3JkLT5OdW1iZXJQYXJhbWV0ZXJzOwogIAogIG51bVBhcmFt cyA9IChudW1QYXJhbXMgPiAzKSA/IDMgOiBudW1QYXJhbXM7CgogIGZvciAo cGFyYW0gPSAwOyBwYXJhbSA8IG51bVBhcmFtczsgcGFyYW0rKykKICAgIHsK ICAgICAgZWlbcGFyYW1dID0gZXAtPkV4Y2VwdGlvblJlY29yZC0+RXhjZXB0 aW9uSW5mb3JtYXRpb25bcGFyYW1dOwogICAgfQoKI2lmZGVmIE9MRAogIC8v IE9yaWdpbmFsIHZlcnNpb24uCiAgcmV0dXJuIEVYQ0VQVElPTl9FWEVDVVRF X0hBTkRMRVI7CiNlbHNlCiAgICAvLyBUaGlzIGFkZGVkIGZvciBwcm9wZXIg dW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsaW5nLiAgKGRiYyAxLzI4LzAwKS4K ICAgIGlmIChlYyA9PSBFWENFUFRJT05fUFRIUkVBRF9TRVJWSUNFUykKICAg IHsKICAgICAgICAvLyBBbGxvdyBzcGVjaWZpYyBwdGhyZWFkIGV4Y2VwdGlv bnMgdG8gYmUgaGFuZGxlZC4KICAgICAgICByZXR1cm4gRVhDRVBUSU9OX0VY RUNVVEVfSEFORExFUjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAv LyAiUmV0aHJvdyIgdXNlciBleGNlcHRpb25zIGFuZCBzeXN0ZW0vaGFyZHdh cmUgZXhjZXB0aW9ucwogICAgICAgIC8vIGxpa2UgYWNjZXNzIHZpb2xhdGlv bnMuCiAgICAgICAgcmV0dXJuIEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0g7 CiAgICB9CiNlbmRpZgp9CgojZW5kaWYgLyogX01TQ19WRVIgKi8KCiNpZiAh IGRlZmluZWQgKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkIChfX01TVkNSVF9f KQp1bnNpZ25lZCBQVF9TVERDQUxMCiNlbHNlCnZvaWQKI2VuZGlmCl9wdGhy ZWFkX3RocmVhZFN0YXJ0IChUaHJlYWRQYXJtcyAqIHRocmVhZFBhcm1zKQp7 CiAgcHRocmVhZF90IHNlbGY7CiAgdm9pZCAqKCpzdGFydCkgKHZvaWQgKik7 CiAgdm9pZCAqYXJnOwoKI2lmZGVmIF9NU0NfVkVSCgogIERXT1JEIGVpWzNd OwoKI2VuZGlmCgogIHZvaWQgKiBzdGF0dXM7CgogIHNlbGYgPSB0aHJlYWRQ YXJtcy0+dGlkOwogIHN0YXJ0ID0gdGhyZWFkUGFybXMtPnN0YXJ0OwogIGFy ZyA9IHRocmVhZFBhcm1zLT5hcmc7CgojaWYgZGVmaW5lZCAoX19NSU5HVzMy X18pICYmICEgZGVmaW5lZCAoX19NU1ZDUlRfXykKICAvKiBiZWdpbnRocmVh ZCBkb2VzIG5vdCByZXR1cm4gdGhlIHRocmVhZCBpZCwgYW5kIHNvIHdlIGRv IGl0IGhlcmUuICovCiAgc2VsZi0+dGhyZWFkID0gR2V0Q3VycmVudFRocmVh ZElkICgpOwojZW5kaWYKCiAgZnJlZSAodGhyZWFkUGFybXMpOwoKICBwdGhy ZWFkX3NldHNwZWNpZmljIChfcHRocmVhZF9zZWxmVGhyZWFkS2V5LCBzZWxm KTsKCiNpZmRlZiBfTVNDX1ZFUgoKICBfX3RyeQogIHsKICAgIC8qCiAgICAg KiBSdW4gdGhlIGNhbGxlcidzIHJvdXRpbmU7CiAgICAgKi8KICAgIHN0YXR1 cyA9ICgqc3RhcnQpIChhcmcpOwogIH0KICBfX2V4Y2VwdCAoRXhjZXB0aW9u RmlsdGVyKEdldEV4Y2VwdGlvbkluZm9ybWF0aW9uKCksIGVpLCBHZXRFeGNl cHRpb25Db2RlKCkpKQogIHsKICAgIERXT1JEIGVjID0gR2V0RXhjZXB0aW9u Q29kZSgpOwoKICAgIGlmIChlYyA9PSBFWENFUFRJT05fUFRIUkVBRF9TRVJW SUNFUykKICAgICAgewoJc3dpdGNoIChlaVswXSkKCSAgewoJICBjYXNlIF9Q VEhSRUFEX0VQU19DQU5DRUw6CgkgICAgc3RhdHVzID0gUFRIUkVBRF9DQU5D RUxFRDsKCSAgICBicmVhazsKCSAgY2FzZSBfUFRIUkVBRF9FUFNfRVhJVDoK CSAgICBzdGF0dXMgPSAodm9pZCAqKSBlaVsxXTsKCSAgICBicmVhazsKCSAg ZGVmYXVsdDoKCSAgICBzdGF0dXMgPSBQVEhSRUFEX0NBTkNFTEVEOwoJICB9 CiAgICAgIH0KI2lmZGVmIE9MRAogICAgZWxzZQogICAgICB7CgkvKgoJICog QSBzeXN0ZW0gdW5leHBlY3RlZCBleGNlcHRpb24gaGFkIG9jY3VycmVkIHJ1 bm5pbmcgdGhlIHVzZXIncwoJICogcm91dGluZS4gV2UgZ2V0IGNvbnRyb2wg YmFjayB3aXRoaW4gdGhpcyBibG9jay4KCSAqLwoJc3RhdHVzID0gUFRIUkVB RF9DQU5DRUxFRDsKICAgICAgfQojZW5kaWYKICB9CgojZWxzZSAvKiBfTVND X1ZFUiAqLwoKI2lmZGVmIF9fY3BsdXNwbHVzCgogIHRyeQogIHsKICAgIC8q CiAgICAgKiBSdW4gdGhlIGNhbGxlcidzIHJvdXRpbmU7CiAgICAgKi8KICAg IHN0YXR1cyA9IHNlbGYtPmV4aXRTdGF0dXMgPSAoKnN0YXJ0KSAoYXJnKTsK ICB9CiAgY2F0Y2ggKFB0aHJlYWRfZXhjZXB0aW9uX2NhbmNlbCkKICAgIHsK ICAgICAgLyoKICAgICAgICogVGhyZWFkIHdhcyBjYW5jZWxsZWQuCiAgICAg ICAqLwogICAgICBzdGF0dXMgPSBQVEhSRUFEX0NBTkNFTEVEOwogICAgfQog IGNhdGNoIChQdGhyZWFkX2V4Y2VwdGlvbl9leGl0KQogICAgewogICAgICAv KgogICAgICAgKiBUaHJlYWQgd2FzIGV4aXRlZCB2aWEgcHRocmVhZF9leGl0 KCkuCiAgICAgICAqLwogICAgICBzdGF0dXMgPSBzZWxmLT5leGl0U3RhdHVz OwogICAgfQogIGNhdGNoICguLi4pCiAgICB7CiAgICAgIC8qCiAgICAgICAq IEEgc3lzdGVtIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGhhZCBvY2N1cnJlZCBy dW5uaW5nIHRoZSB1c2VyJ3MKICAgICAgICogcm91dGluZS4gV2UgZ2V0IGNv bnRyb2wgYmFjayB3aXRoaW4gdGhpcyBibG9jay4KICAgICAgICovCiAgICAg IHN0YXR1cyA9IFBUSFJFQURfQ0FOQ0VMRUQ7CiAgICAgIHRocm93OwogICAg fQoKI2Vsc2UgLyogX19jcGx1c3BsdXMgKi8KCiAgLyoKICAgKiBSdW4gdGhl IGNhbGxlcidzIHJvdXRpbmU7IG5vIGNhbmNlbGF0aW9uIG9yIG90aGVyIGV4 Y2VwdGlvbnMgd2lsbAogICAqIGJlIGhvbm91cmVkLgogICAqLwogIHN0YXR1 cyA9ICgqc3RhcnQpIChhcmcpOwoKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICov CgojZW5kaWYgLyogX01TQ19WRVIgKi8KCiAgX3B0aHJlYWRfY2FsbFVzZXJE ZXN0cm95Um91dGluZXMoc2VsZik7CgojaWYgISBkZWZpbmVkIChfX01JTkdX MzJfXykgfHwgZGVmaW5lZCAoX19NU1ZDUlRfXykKICBfZW5kdGhyZWFkZXgg KCh1bnNpZ25lZCkgc3RhdHVzKTsKI2Vsc2UKICBfZW5kdGhyZWFkICgpOwoj ZW5kaWYKCiAgLyoKICAgKiBOZXZlciByZWFjaGVkLgogICAqLwoKI2lmICEg ZGVmaW5lZCAoX19NSU5HVzMyX18pIHx8IGRlZmluZWQgKF9fTVNWQ1JUX18p CiAgcmV0dXJuICh1bnNpZ25lZCkgc3RhdHVzOwojZW5kaWYKCn0JCQkJLyog X3B0aHJlYWRfdGhyZWFkU3RhcnQgKi8KCnZvaWQKX3B0aHJlYWRfdGhyZWFk RGVzdHJveSAocHRocmVhZF90IHRocmVhZCkKewogIGlmICh0aHJlYWQgIT0g TlVMTCkKICAgIHsKICAgICAgX3B0aHJlYWRfY2FsbFVzZXJEZXN0cm95Um91 dGluZXMgKHRocmVhZCk7CgogICAgICBpZiAodGhyZWFkLT5jYW5jZWxFdmVu dCAhPSBOVUxMKQoJewoJICBDbG9zZUhhbmRsZSAodGhyZWFkLT5jYW5jZWxF dmVudCk7Cgl9CgojaWYgISBkZWZpbmVkIChfX01JTkdXMzJfXykgfHwgZGVm aW5lZCAoX19NU1ZDUlRfXykKICAgICAgLyogU2VlIGRvY3VtZW50YXRpb24g Zm9yIGVuZHRocmVhZCB2cyBlbmR0aHJlYWRleC4gKi8KICAgICAgaWYoIHRo cmVhZC0+dGhyZWFkSCAhPSAwICkKCXsKCSAgQ2xvc2VIYW5kbGUoIHRocmVh ZC0+dGhyZWFkSCApOwoJfQojZW5kaWYKCiAgICAgIGZyZWUgKHRocmVhZCk7 CiAgICB9Cgp9CQkJCS8qIF9wdGhyZWFkX3RocmVhZERlc3Ryb3kgKi8KCmlu dApfcHRocmVhZF90a0Fzc29jQ3JlYXRlIChUaHJlYWRLZXlBc3NvYyAqKiBh c3NvY1AsCgkJCXB0aHJlYWRfdCB0aHJlYWQsCgkJCXB0aHJlYWRfa2V5X3Qg a2V5KQogICAgIC8qCiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICAgICAqIFRoaXMgcm91dGluZSBjcmVhdGVzIGFuIGFzc29jaWF0aW9uIHRo YXQKICAgICAgKiBpcyB1bmlxdWUgZm9yIHRoZSBnaXZlbiAodGhyZWFkLGtl eSkgY29tYmluYXRpb24uVGhlIGFzc29jaWF0aW9uIAogICAgICAqIGlzIHJl ZmVyZW5jZWQgYnkgYm90aCB0aGUgdGhyZWFkIGFuZCB0aGUga2V5LgogICAg ICAqIFRoaXMgYXNzb2NpYXRpb24gYWxsb3dzIHVzIHRvIGRldGVybWluZSB3 aGF0IGtleXMgdGhlCiAgICAgICogY3VycmVudCB0aHJlYWQgcmVmZXJlbmNl cyBhbmQgd2hhdCB0aHJlYWRzIGEgZ2l2ZW4ga2V5CiAgICAgICogcmVmZXJl bmNlcy4KICAgICAgKiBTZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uCiAg ICAgICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgZm9yIGZ1cnRo ZXIgZGV0YWlscy4KICAgICAgKgogICAgICAqIE5vdGVzOgogICAgICAqICAg ICAgMSkgICAgICBOZXcgYXNzb2NpYXRpb25zIGFyZSBwdXNoZWQgdG8gdGhl IGJlZ2lubmluZyBvZiB0aGUKICAgICAgKiAgICAgICAgICAgICAgY2hhaW4g c28gdGhhdCB0aGUgaW50ZXJuYWwgX3B0aHJlYWRfc2VsZlRocmVhZEtleSBh c3NvY2lhdGlvbgogICAgICAqICAgICAgICAgICAgICBpcyBhbHdheXMgbGFz dCwgdGh1cyBhbGxvd2luZyBzZWxmVGhyZWFkRXhpdCB0bwogICAgICAqICAg ICAgICAgICAgICBiZSBpbXBsaWNpdGx5IGNhbGxlZCBieSBwdGhyZWFkX2V4 aXQgbGFzdC4KICAgICAgKgogICAgICAqIFBhcmFtZXRlcnM6CiAgICAgICog ICAgICAgICAgICAgIGFzc29jUAogICAgICAqICAgICAgICAgICAgICAgICAg ICAgIGFkZHJlc3MgaW50byB3aGljaCB0aGUgYXNzb2NpYXRpb24gaXMgcmV0 dXJuZWQuCiAgICAgICogICAgICAgICAgICAgIHRocmVhZAogICAgICAqICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgcnVubmluZyB0aHJlYWQuIElm IE5VTEwsIHRoZW4gYXNzb2NpYXRpb24KICAgICAgKiAgICAgICAgICAgICAg ICAgICAgICBpcyBvbmx5IGFkZGVkIHRvIHRoZSBrZXkuIEEgTlVMTCB0aHJl YWQgaW5kaWNhdGVzCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgdGhh dCB0aGUgdXNlciBjYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYyBwcmlvcgog ICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0aW5nIGEgdGhy ZWFkLiBUaGF0J3Mgb2suCiAgICAgICogICAgICAgICAgICAgIGtleQogICAg ICAqICAgICAgICAgICAgICAgICAgICAgIGtleSBvbiB3aGljaCB0byBjcmVh dGUgYW4gYXNzb2NpYXRpb24uCiAgICAgICogUmV0dXJuczoKICAgICAgKiAg ICAgICAwICAgICAgICAgICAgICAtIGlmIHN1Y2Nlc3NmdWwsCiAgICAgICog ICAgICAtMSAgICAgICAgICAgICAgLSBnZW5lcmFsIGVycm9yCiAgICAgICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqLwp7CiAgaW50IHJlc3Vs dDsKICBUaHJlYWRLZXlBc3NvYyAqYXNzb2M7CgogIC8qCiAgICogSGF2ZSB0 byBjcmVhdGUgYW4gYXNzb2NpYXRpb24gYW5kIGFkZCBpdAogICAqIHRvIGJv dGggdGhlIGtleSBhbmQgdGhlIHRocmVhZC4KICAgKi8KICBhc3NvYyA9IChU aHJlYWRLZXlBc3NvYyAqKQogICAgY2FsbG9jICgxLCBzaXplb2YgKCphc3Nv YykpOwoKICBpZiAoYXNzb2MgPT0gTlVMTCkKICAgIHsKICAgICAgcmVzdWx0 ID0gLTE7CiAgICAgIGdvdG8gRkFJTDA7CiAgICB9CgogIGlmICgocmVzdWx0 ID0gcHRocmVhZF9tdXRleF9pbml0ICgmKGFzc29jLT5sb2NrKSwgTlVMTCkp ICE9CiAgICAgIDApCiAgICB7CiAgICAgIGdvdG8gRkFJTDE7CiAgICB9Cgog IGFzc29jLT50aHJlYWQgPSB0aHJlYWQ7CiAgYXNzb2MtPmtleSA9IGtleTsK CiAgLyoKICAgKiBSZWdpc3RlciBhc3NvYyB3aXRoIGtleQogICAqLwogIGlm ICgocmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrICgmKGtleS0+dGhyZWFk c0xvY2spKSkgIT0KICAgICAgMCkKICAgIHsKICAgICAgZ290byBGQUlMMjsK ICAgIH0KCiAgYXNzb2MtPm5leHRUaHJlYWQgPSAoVGhyZWFkS2V5QXNzb2Mg Kikga2V5LT50aHJlYWRzOwogIGtleS0+dGhyZWFkcyA9ICh2b2lkICopIGFz c29jOwoKICBwdGhyZWFkX211dGV4X3VubG9jayAoJihrZXktPnRocmVhZHNM b2NrKSk7CgogIGlmICh0aHJlYWQgIT0gTlVMTCkKICAgIHsKICAgICAgLyoK ICAgICAgICogUmVnaXN0ZXIgYXNzb2Mgd2l0aCB0aHJlYWQKICAgICAgICov CiAgICAgIGFzc29jLT5uZXh0S2V5ID0gKFRocmVhZEtleUFzc29jICopIHRo cmVhZC0+a2V5czsKICAgICAgdGhyZWFkLT5rZXlzID0gKHZvaWQgKikgYXNz b2M7CiAgICB9CgogICphc3NvY1AgPSBhc3NvYzsKCiAgcmV0dXJuIChyZXN1 bHQpOwoKICAvKgogICAqIC0tLS0tLS0tLS0tLS0KICAgKiBGYWlsdXJlIENv ZGUKICAgKiAtLS0tLS0tLS0tLS0tCiAgICovCkZBSUwyOgogIHB0aHJlYWRf bXV0ZXhfZGVzdHJveSAoJihhc3NvYy0+bG9jaykpOwoKRkFJTDE6CiAgZnJl ZSAoYXNzb2MpOwoKRkFJTDA6CgogIHJldHVybiAocmVzdWx0KTsKCn0JCQkJ LyogX3B0aHJlYWRfdGtBc3NvY0NyZWF0ZSAqLwoKCnZvaWQKX3B0aHJlYWRf dGtBc3NvY0Rlc3Ryb3kgKFRocmVhZEtleUFzc29jICogYXNzb2MpCiAgICAg LyoKICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICogVGhp cyByb3V0aW5lIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBnaXZl biBUaHJlYWRLZXlBc3NvYwogICAgICAqIG9uY2UgaXQgaXMgbm8gbG9uZ2Vy IGJlaW5nIHJlZmVyZW5jZWQKICAgICAgKiBpZSkgYm90aCB0aGUga2V5IGFu ZCB0aHJlYWQgaGF2ZSBzdG9wcGVkIHJlZmVyZW5jaW5nIGl0LgogICAgICAq CiAgICAgICogUGFyYW1ldGVyczoKICAgICAgKiAgICAgICAgICAgICAgYXNz b2MKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBv ZiBUaHJlYWRLZXlBc3NvYy4KICAgICAgKiBSZXR1cm5zOgogICAgICAqICAg ICAgTi9BCiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAq Lwp7CgogIGlmICgoYXNzb2MgIT0gTlVMTCkgJiYKICAgICAgKGFzc29jLT5r ZXkgPT0gTlVMTCAmJiBhc3NvYy0+dGhyZWFkID09IE5VTEwpKQogICAgewoK ICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95ICgmKGFzc29jLT5sb2NrKSk7 CgogICAgICBmcmVlIChhc3NvYyk7CiAgICB9Cgp9CQkJCS8qIF9wdGhyZWFk X3RrQXNzb2NEZXN0cm95ICovCgoKdm9pZApfcHRocmVhZF9jYWxsVXNlckRl c3Ryb3lSb3V0aW5lcyAocHRocmVhZF90IHRocmVhZCkKICAgICAvKgogICAg ICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKiBET0NQUklWQVRF CiAgICAgICoKICAgICAgKiBUaGlzIHRoZSByb3V0aW5lIHJ1bnMgdGhyb3Vn aCBhbGwgdGhyZWFkIGtleXMgYW5kIGNhbGxzCiAgICAgICogdGhlIGRlc3Ry b3kgcm91dGluZXMgb24gdGhlIHVzZXIncyBkYXRhIGZvciB0aGUgY3VycmVu dCB0aHJlYWQuCiAgICAgICogSXQgc2ltdWxhdGVzIHRoZSBiZWhhdmlvdXIg b2YgUE9TSVggVGhyZWFkcy4KICAgICAgKgogICAgICAqIFBBUkFNRVRFUlMK ICAgICAgKiAgICAgICAgICAgICAgdGhyZWFkCiAgICAgICogICAgICAgICAg ICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgcHRocmVhZF90CiAgICAgICoK ICAgICAgKiBSRVRVUk5TCiAgICAgICogICAgICAgICAgICAgIE4vQQogICAg ICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKi8KewogIFRocmVh ZEtleUFzc29jICoqbmV4dFA7CiAgVGhyZWFkS2V5QXNzb2MgKmFzc29jOwoK ICBpZiAodGhyZWFkICE9IE5VTEwpCiAgICB7CiAgICAgIC8qCiAgICAgICAq IFJ1biB0aHJvdWdoIGFsbCBUaHJlYWQ8LS0+S2V5IGFzc29jaWF0aW9ucwog ICAgICAgKiBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLgogICAgICAgKiBJZiB0 aGUgcHRocmVhZF9rZXlfdCBzdGlsbCBleGl0cyAoaWUgdGhlIGFzc29jLT5r ZXkKICAgICAgICogaXMgbm90IE5VTEwpIHRoZW4gY2FsbCB0aGUgdXNlcidz IFRTRCBkZXN0cm95IHJvdXRpbmUuCiAgICAgICAqIE5vdGVzOgogICAgICAg KiAgICAgIElmIGFzc29jLT5rZXkgaXMgTlVMTCwgdGhlbiB0aGUgdXNlciBw cmV2aW91c2x5IGNhbGxlZAogICAgICAgKiAgICAgIFBUaHJlYWRLZXlEZXN0 cm95LiBUaGUgYXNzb2NpYXRpb24gaXMgbm93IG9ubHkgcmVmZXJlbmNlZAog ICAgICAgKiAgICAgIGJ5IHRoZSBjdXJyZW50IHRocmVhZCBhbmQgbXVzdCBi ZSByZWxlYXNlZDsgb3RoZXJ3aXNlCiAgICAgICAqICAgICAgdGhlIGFzc29j IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gdGhlIGtleSBpcyBkZXN0cm95ZWQu CiAgICAgICAqLwogICAgICBuZXh0UCA9IChUaHJlYWRLZXlBc3NvYyAqKikg JiAodGhyZWFkLT5rZXlzKTsKICAgICAgYXNzb2MgPSAqbmV4dFA7CgogICAg ICB3aGlsZSAoYXNzb2MgIT0gTlVMTCkKCXsKCgkgIGlmIChwdGhyZWFkX211 dGV4X2xvY2sgKCYoYXNzb2MtPmxvY2spKSA9PSAwKQoJICAgIHsKCSAgICAg IHB0aHJlYWRfa2V5X3QgazsKCSAgICAgIGlmICgoayA9IGFzc29jLT5rZXkp ICE9IE5VTEwpCgkJewoJCSAgLyoKCQkgICAqIEtleSBzdGlsbCBhY3RpdmU7 IHB0aHJlYWRfa2V5X2RlbGV0ZQoJCSAgICogd2lsbCBibG9jayBvbiB0aGlz IHNhbWUgbXV0ZXggYmVmb3JlCgkJICAgKiBpdCBjYW4gcmVsZWFzZSBhY3R1 YWwga2V5OyB0aGVyZWZvcmUsCgkJICAgKiBrZXkgaXMgdmFsaWQgYW5kIHdl IGNhbiBjYWxsIHRoZSBkZXN0cm95CgkJICAgKiByb3V0aW5lOwoJCSAgICov CgkJICB2b2lkICp2YWx1ZSA9IE5VTEw7CgoJCSAgdmFsdWUgPSBwdGhyZWFk X2dldHNwZWNpZmljIChrKTsKCQkgIGlmICh2YWx1ZSAhPSBOVUxMICYmIGst PmRlc3RydWN0b3IgIT0gTlVMTCkKCQkgICAgewoKI2lmZGVmIF9NU0NfVkVS CgoJCSAgICAgIF9fdHJ5CgkJICAgICAgewoJCQkvKgoJCQkgKiBSdW4gdGhl IGNhbGxlcidzIGNsZWFudXAgcm91dGluZS4KCQkJICovCgkJCSgqKGstPmRl c3RydWN0b3IpKSAodmFsdWUpOwoJCSAgICAgIH0KCQkgICAgICBfX2V4Y2Vw dCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikKCQkgICAgICB7CgkJCS8q CgkJCSAqIEEgc3lzdGVtIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGhhZCBvY2N1 cnJlZAoJCQkgKiBydW5uaW5nIHRoZSB1c2VyJ3MgZGVzdHJ1Y3Rvci4KCQkJ ICogV2UgZ2V0IGNvbnRyb2wgYmFjayB3aXRoaW4gdGhpcyBibG9jay4KCQkJ ICovCgkJICAgICAgfQoKI2Vsc2UgIC8qIF9NU0NfVkVSICovCiNpZmRlZiBf X2NwbHVzcGx1cwoKCQkgICAgICB0cnkKCQkgICAgICB7CgkJCS8qCgkJCSAq IFJ1biB0aGUgY2FsbGVyJ3MgY2xlYW51cCByb3V0aW5lLgoJCQkgKi8KCQkJ KCooay0+ZGVzdHJ1Y3RvcikpICh2YWx1ZSk7CgkJICAgICAgfQoJCSAgICAg IGNhdGNoICguLi4pCgkJICAgICAgewoJCQkvKgoJCQkgKiBBIHN5c3RlbSB1 bmV4cGVjdGVkIGV4Y2VwdGlvbiBoYWQgb2NjdXJyZWQKCQkJICogcnVubmlu ZyB0aGUgdXNlcidzIGRlc3RydWN0b3IuCgkJCSAqIFdlIGdldCBjb250cm9s IGJhY2sgd2l0aGluIHRoaXMgYmxvY2suCgkJCSAqLwoJCSAgICAgIH0KCiNl bHNlICAvKiBfX2NwbHVzcGx1cyAqLwoKCQkJLyoKCQkJICogUnVuIHRoZSBj YWxsZXIncyBjbGVhbnVwIHJvdXRpbmUuCgkJCSAqLwoJCQkoKihrLT5kZXN0 cnVjdG9yKSkgKHZhbHVlKTsKCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoj ZW5kaWYgLyogX01TQ19WRVIgKi8KCQkgICAgfQoJCX0KCgkgICAgICAvKgoJ ICAgICAgICogbWFyayBhc3NvYy0+dGhyZWFkIGFzIE5VTEwgdG8gaW5kaWNh dGUgdGhlCgkgICAgICAgKiB0aHJlYWQgbm8gbG9uZ2VyIHJlZmVyZW5jZXMg dGhpcyBhc3NvY2lhdGlvbgoJICAgICAgICovCgkgICAgICBhc3NvYy0+dGhy ZWFkID0gTlVMTDsKCgkgICAgICAvKgoJICAgICAgICogUmVtb3ZlIGFzc29j aWF0aW9uIGZyb20gdGhlIHB0aHJlYWRfdCBjaGFpbgoJICAgICAgICovCgkg ICAgICAqbmV4dFAgPSBhc3NvYy0+bmV4dEtleTsKCgkgICAgICBwdGhyZWFk X211dGV4X3VubG9jayAoJihhc3NvYy0+bG9jaykpOwoKCSAgICAgIF9wdGhy ZWFkX3RrQXNzb2NEZXN0cm95IChhc3NvYyk7CgoJICAgICAgYXNzb2MgPSAq bmV4dFA7CgkgICAgfQoJfQogICAgfQoKfQkJCQkvKiBfcHRocmVhZF9jYWxs VXNlckRlc3Ryb3lSb3V0aW5lcyAqLwoKCmludApfcHRocmVhZF9zZW1fdGlt ZWR3YWl0IChzZW1fdCAqIHNlbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICog YWJzdGltZSkKICAgICAvKgogICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqIERP Q1BVQkxJQwogICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBh IHNlbWFwaG9yZSBwb3NzaWJseSB1bnRpbAogICAgICAqICAgICAgJ2Fic3Rp bWUnIHRpbWUuCiAgICAgICoKICAgICAgKiBQQVJBTUVURVJTCiAgICAgICog ICAgICBzZW0KICAgICAgKiAgICAgICAgICAgICAgcG9pbnRlciB0byBhbiBp bnN0YW5jZSBvZiBzZW1fdAogICAgICAqCiAgICAgICogICAgICBhYnN0aW1l CiAgICAgICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2Ug b2Ygc3RydWN0IHRpbWVzcGVjCiAgICAgICoKICAgICAgKiBERVNDUklQVElP TgogICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhIHNlbWFw aG9yZS4gSWYgdGhlCiAgICAgICogICAgICBzZW1hcGhvcmUgdmFsdWUgaXMg Z3JlYXRlciB0aGFuIHplcm8sIGl0IGRlY3JlYXNlcwogICAgICAqICAgICAg aXRzIHZhbHVlIGJ5IG9uZS4gSWYgdGhlIHNlbWFwaG9yZSB2YWx1ZSBpcyB6 ZXJvLCB0aGVuCiAgICAgICogICAgICB0aGUgY2FsbGluZyB0aHJlYWQgKG9y IHByb2Nlc3MpIGlzIGJsb2NrZWQgdW50aWwgaXQgY2FuCiAgICAgICogICAg ICBzdWNjZXNzZnVsbHkgZGVjcmVhc2UgdGhlIHZhbHVlIG9yIHVudGlsIGlu dGVycnVwdGVkIGJ5CiAgICAgICogICAgICBhIHNpZ25hbC4KICAgICAgKgog ICAgICAqICAgICAgSWYgJ2Fic3RpbWUnIGlzIGEgTlVMTCBwb2ludGVyIHRo ZW4gdGhpcyBmdW5jdGlvbiB3aWxsCiAgICAgICogICAgICBibG9jayB1bnRp bCBpdCBjYW4gc3VjY2Vzc2Z1bGx5IGRlY3JlYXNlIHRoZSB2YWx1ZSBvcgog ICAgICAqICAgICAgdW50aWwgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCiAg ICAgICoKICAgICAgKiBSRVNVTFRTCiAgICAgICogICAgICAgICAgICAgIDAg ICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgZGVjcmVhc2VkIHNlbWFwaG9y ZSwKICAgICAgKiAgICAgICAgICAgICAgLTEgICAgICAgICAgICAgIGZhaWxl ZCwgZXJyb3IgaW4gZXJybm8KICAgICAgKiBFUlJOTwogICAgICAqICAgICAg ICAgICAgICBFSU5WQUwgICAgICAgICAgJ3NlbScgaXMgbm90IGEgdmFsaWQg c2VtYXBob3JlLAogICAgICAqICAgICAgICAgICAgICBFTk9TWVMgICAgICAg ICAgc2VtYXBob3JlcyBhcmUgbm90IHN1cHBvcnRlZCwKICAgICAgKiAgICAg ICAgICAgICAgRUlOVFIgICAgICAgICAgIHRoZSBmdW5jdGlvbiB3YXMgaW50 ZXJydXB0ZWQgYnkgYSBzaWduYWwsCiAgICAgICogICAgICAgICAgICAgIEVE RUFETEsgICAgICAgICBhIGRlYWRsb2NrIGNvbmRpdGlvbiB3YXMgZGV0ZWN0 ZWQuCiAgICAgICogICAgICAgICAgICAgIEVUSU1FRE9VVCAgICAgICBhYnN0 aW1lIGVsYXBzZWQgYmVmb3JlIHN1Y2Nlc3MuCiAgICAgICoKICAgICAgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAgICAgKi8KewogIGludCByZXN1bHQgPSAwOwoKI2lmIGRl ZmluZWQoX19NSU5HVzMyX18pCgogIHN0cnVjdCB0aW1lYiBjdXJyU3lzVGlt ZTsKCiNlbHNlCgogIHN0cnVjdCBfdGltZWIgY3VyclN5c1RpbWU7CgojZW5k aWYKCiAgY29uc3QgRFdPUkQgTkFOT1NFQ19QRVJfTUlMTElTRUMgPSAxMDAw MDAwOwogIGNvbnN0IERXT1JEIE1JTExJU0VDX1BFUl9TRUMgPSAxMDAwOwog IERXT1JEIG1pbGxpc2Vjb25kczsKCiAgaWYgKHNlbSA9PSBOVUxMKQogICAg ewogICAgICByZXN1bHQgPSBFSU5WQUw7CiAgICB9CiAgZWxzZQogICAgewog ICAgICBpZiAoYWJzdGltZSA9PSBOVUxMKQoJewoJICBtaWxsaXNlY29uZHMg PSBJTkZJTklURTsKCX0KICAgICAgZWxzZQoJewoJICAvKiAKCSAgICogQ2Fs Y3VsYXRlIHRpbWVvdXQgYXMgbWlsbGlzZWNvbmRzIGZyb20gY3VycmVudCBz eXN0ZW0gdGltZS4gCgkgICAqLwoKCSAgLyogZ2V0IGN1cnJlbnQgc3lzdGVt IHRpbWUgKi8KCSAgX2Z0aW1lKCZjdXJyU3lzVGltZSk7CgoJICAvKiBzdWJ0 cmFjdCBjdXJyZW50IHN5c3RlbSB0aW1lIGZyb20gYWJzdGltZSAqLwoJICBt aWxsaXNlY29uZHMgPSAoYWJzdGltZS0+dHZfc2VjIC0gY3VyclN5c1RpbWUu dGltZSkgKiBNSUxMSVNFQ19QRVJfU0VDOwoJICBtaWxsaXNlY29uZHMgKz0g KGFic3RpbWUtPnR2X25zZWMgLyBOQU5PU0VDX1BFUl9NSUxMSVNFQykgLQoJ ICAgIGN1cnJTeXNUaW1lLm1pbGxpdG07CgoJICBpZiAoKChpbnQpIG1pbGxp c2Vjb25kcykgPCAwKQoJICAgIG1pbGxpc2Vjb25kcyA9IDA7Cgl9CgogICAg ICByZXN1bHQgPSAocHRocmVhZENhbmNlbGFibGVUaW1lZFdhaXQgKCpzZW0s IG1pbGxpc2Vjb25kcykpOwogICAgfQoKICBpZiAocmVzdWx0ICE9IDApCiAg ICB7CgogICAgICBlcnJubyA9IHJlc3VsdDsKICAgICAgcmV0dXJuIC0xOwoK ICAgIH0KCiAgcmV0dXJuIDA7Cgp9CQkJCS8qIF9wdGhyZWFkX3NlbV90aW1l ZHdhaXQgKi8K ------------=_1583534833-35001-1--