Mailing-List: contact cygwin-developers-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-developers-owner AT cygwin DOT com Delivered-To: mailing list cygwin-developers AT cygwin DOT com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C20316.C551574C" Subject: building a profilable cygwin1.dll X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 content-class: urn:content-classes:message Date: Fri, 24 May 2002 21:33:05 +1000 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: From: "Robert Collins" To: Cc: Note-from-DJ: This may be spam This is a multi-part message in MIME format. ------_=_NextPart_001_01C20316.C551574C Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This is experimental, and not suitable for CVS for a number of reasons. However, I don't have time or inclination to tidy it up just now. The reason for the multiple non-inlining changes was an ill-fated attempt to get the profilable dll runnable under gdb. I'm happy to provide details on what I did and why should anyone want to experiment. For obvious reasons, a gprof profilable .dll is a very useful thing. Rob ------_=_NextPart_001_01C20316.C551574C Content-Type: text/plain; name="how-profiling-works.txt" Content-Transfer-Encoding: base64 Content-Description: how-profiling-works.txt Content-Disposition: attachment; filename="how-profiling-works.txt" KEMpIDIwMDIgUm9iZXJ0IENvbGxpbnMKCkhvdyB0byBwcm9maWxlIGN5Z3dpbjEuZGxsLgoKVGhl IGhhcmQgd2F5OgoKQnVpbGQgbGliYy5hIGFuZCBsaWJtLmEgd2l0aCAtcGcuCkJ1aWxkIGFsbCB0 aGUgY3lnd2luMS5kbGwgc291cmNlIC0gZXhjZXB0IG1jb3VudC5jIC0gd2l0aCAtcGcgYW5kIG5v IC1PMi4KLU8yIGludGVyZmVyZXMgd2l0aCAtcGcgaW4gc29tZSBpbmxpbmVkIGNvZGUuCkxpbmsg bGliZ21vbi5hIGludG8gY3lnd2luMS5kbGwuCgpJIHVzZWQgYSBDQ05PUFJPRiB0YXJnZXQgaW4g TWFrZWZpbGUuaW4gdG8gbWFrZSB0aGlzIHJlbGF0aXZlbHkgZWFzeS4KClZvaWxhLgoKCg== ------_=_NextPart_001_01C20316.C551574C Content-Type: application/octet-stream; name="profiling.diff" Content-Transfer-Encoding: base64 Content-Description: profiling.diff Content-Disposition: attachment; filename="profiling.diff" PyBjeWdzZXJ2ZXJfc2VtLmNjCj8gY3lnc2VydmVyX3NlbS5oCj8gY3lnc3RycHRpbWUucGF0Y2gK PyBkYWVtb25zdGF0ZS5wYXRjaAo/IGRhZW1vbnN0YXRlMi5wYXRjaAo/IGRhZW1vbnN0YXRlMy5w YXRjaAo/IGV4cG9ydGlwYy5wYXRjaAo/IHQKPyBnZXRzZW0ucGF0Y2gKPyBob3ctY3lnd2luLW9w dGlvbnMtd29yay50eHQKPyBrZXlfdC5wYXRjaAo/IGxvY2Fsd29ya2luZ3N0dWZmLnBhdGNoCj8g bWVyZ2UubG9nCj8gbmV3Cj8gc2VtLmNjCj8gcGVydGhyZWFkLmNjCj8gcHJvZmlsaW5nLmRpZmYK PyB0LnQKPyBob3ctcHJvZmlsaW5nLXdvcmtzLnR4dAo/IHJ1bl9kdG9ycy5wYXRjaAo/IGluY2x1 ZGUvc3lzL3NlbS5oCkluZGV4OiBNYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvd2luc3VwL2N5Z3dpbi9NYWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24g MS44NwpkaWZmIC11IC1wIC1yMS44NyBNYWtlZmlsZS5pbgotLS0gTWFrZWZpbGUuaW4JMTggTWF5 IDIwMDIgMDY6MTA6MTYgLTAwMDAJMS44NworKysgTWFrZWZpbGUuaW4JMjQgTWF5IDIwMDIgMTE6 Mjk6MDAgLTAwMDAKQEAgLTQ3LDEzICs0NywxNSBAQCBJTlNUQUxMX1BST0dSQU06PUBJTlNUQUxM X1BST0dSQU1ACiBNVF9TQUZFOj1ATVRfU0FGRUAKIERFRlM6PUBERUZTQAogCi1DQzo9QENDQAor Q0M6PUBDQ0AgLXBnIC1EcmVncGFybVwoeFwpPXVudXNlZAorQ0NOT1BST0Y6PUBDQ0AKICMgRklY TUU6IFdoaWNoIGlzIGl0LCBDQyBvciBDQ19GT1JfVEFSR0VUPwogQ0NfRk9SX1RBUkdFVDo9JChD QykKIENGTEFHUzo9QENGTEFHU0AKIENGTEFHUys9LU1NRCAtZmJ1aWx0aW4KLUNYWDo9QENYWEAK K0NYWDo9QENYWEAgLXBnIC1EcmVncGFybVwoeFwpPXVudXNlZAogQ1hYRkxBR1M6PUBDWFhGTEFH U0AKK0NYWE5PUFJPRjo9QENYWEAKIAogIyBGb3IgbGlua2luZyBtb3VudCwgZXRjLiBjcnQwLm8g aXNuJ3QgYWNjZXNzYWJsZSBpbiBhIGZyZXNoIGJ1aWxkLgogRVhFX0xERkxBR1M6PUBFWEVfTERG TEFHU0AKQEAgLTExMSw2ICsxMTMsOSBAQCBMSUJDT1M6PSR7c29ydCAke2FkZHN1ZmZpeCAubywk e2Jhc2VuYW1lCiAKIEVYVFJBX0RMTF9PRklMRVM6PSR7YWRkc3VmZml4IC5vLCR7YmFzZW5hbWUg JHtub3RkaXIgJHt3aWxkY2FyZCAkKENPTkZJR19ESVIpLyouY319fX0KIAorIyBQcm9maWxlIGN5 Z3dpbjEuZGxsCitFWFRSQV9ETExfT0ZJTEVTKz0gJChMSUJHTU9OX0EpICQoR01PTl9TVEFSVCkK KwogRVhUUkFfT0ZJTEVTPSQoYnVwZGlyMSkvbGliaWJlcnR5L3JhbmRvbS5vICQoYnVwZGlyMSkv bGliaWJlcnR5L3N0cnNpZ25hbC5vCiAKIE1BTExPQ19PRklMRVM9QE1BTExPQ19PRklMRVNACkBA IC0xMjgsOSArMTMzLDEyIEBAIERMTF9PRklMRVM6PWFzc2VydC5vIGF1dG9sb2FkLm8gY3lnaGVh cC4KIAlmaGFuZGxlcl90YXBlLm8gZmhhbmRsZXJfdGVybWlvcy5vIGZoYW5kbGVyX3R0eS5vIGZo YW5kbGVyX3ZpcnR1YWwubyBcCiAJZmhhbmRsZXJfd2luZG93cy5vIGZoYW5kbGVyX3plcm8ubyBm bm1hdGNoLm8gZm9yay5vIGdsb2IubyBncnAubyBcCiAJaGVhcC5vIGluaXQubyBpb2N0bC5vIGlw Yy5vIGxvY2FsdGltZS5vIG1hbGxvYy5vIG1pc2NmdW5jcy5vIG1tYXAubyBcCi0JbmV0Lm8gbnRl YS5vIHBhc3N3ZC5vIHBhdGgubyBwaW5mby5vIHBpcGUubyBwb2xsLm8gcHRocmVhZC5vIHJlZ2Nv bXAubyBcCisJbmV0Lm8gbnRlYS5vIHBhc3N3ZC5vIHBhdGgubyBcCisJcGVydGhyZWFkLm8gXAor CXBpbmZvLm8gcGlwZS5vIHBvbGwubyBwdGhyZWFkLm8gcmVnY29tcC5vIFwKIAlyZWdlcnJvci5v IHJlZ2V4ZWMubyByZWdmcmVlLm8gcmVnaXN0cnkubyByZXNvdXJjZS5vIHNjYW5kaXIubyBzY2hl ZC5vIFwKLQlzZWNfYWNsLm8gc2VjX2hlbHBlci5vIHNlY3VyaXR5Lm8gc2VsZWN0Lm8gc2hhcmVk Lm8gc2htLm8gc2hvcnRjdXQubyBcCisJc2VjX2FjbC5vIHNlY19oZWxwZXIubyBzZW0ubyBzZWN1 cml0eS5vIHNlbGVjdC5vIHNoYXJlZC5vIHNobS5vIFwKKwlzaG9ydGN1dC5vIFwKIAlzaWduYWwu byBzaWdwcm9jLm8gc21hbGxwcmludC5vIHNwYXduLm8gc3RyYWNlLm8gc3Ryc2VwLm8gc3luYy5v IFwKIAlzeXNjYWxscy5vIHN5c2NvbmYubyBzeXNsb2cubyB0ZXJtaW9zLm8gdGhyZWFkLm8gdGlt ZXMubyB0dHkubyB1aW5mby5vIFwKIAl1bmFtZS5vIHY4X3JlZ2V4cC5vIHY4X3JlZ2Vycm9yLm8g djhfcmVnc3ViLm8gd2FpdC5vIHdpbmNhcC5vIHdpbmRvdy5vIFwKQEAgLTEzOCw2ICsxNDYsMTUg QEAgRExMX09GSUxFUzo9YXNzZXJ0Lm8gYXV0b2xvYWQubyBjeWdoZWFwLgogCiBHTU9OX09GSUxF Uzo9Z21vbi5vIG1jb3VudC5vIHByb2ZpbC5vCiAKK21jb3VudC5vOiBtY291bnQuYworCSQoQ0NO T1BST0YpICRjIC1ub3N0ZGluYyAkKEFMTF9DRkxBR1MpICQoR0NDX0lOQ0xVREUpICAtbyAkKEBE KS8kKCpGKSRvICQ8CisKK2dtb24ubzogZ21vbi5jCisJJChDQ05PUFJPRikgJGMgLW5vc3RkaW5j ICQoQUxMX0NGTEFHUykgJChHQ0NfSU5DTFVERSkgIC1vICQoQEQpLyQoKkYpJG8gJDwKKworcHJv ZmlsLm86IHByb2ZpbC5jCisJJChDQ05PUFJPRikgJGMgLW5vc3RkaW5jICQoQUxMX0NGTEFHUykg JChHQ0NfSU5DTFVERSkgIC1vICQoQEQpLyQoKkYpJG8gJDwKKwogT0JTT0xFVEVfRlVOQ1RJT05T Oj1yZWdjb21wIHJlZ2Vycm9yIHJlZ2V4ZWMgcmVnZnJlZSByZWdzdWIKIE5FV19GVU5DVElPTlM6 PXJlZ2NvbXAgcG9zaXhfcmVnY29tcCBcCiAJICAgICAgIHJlZ2Vycm9yIHBvc2l4X3JlZ2Vycm9y IFwKQEAgLTMyMiw3ICszMzksMTAgQEAgY3lnc2VydmVyX2NsaWVudF9vdXRzaWRlLm86IGN5Z3Nl cnZlcl9jbAogY3lnc2VydmVyX3NobS5vOiBjeWdzZXJ2ZXJfc2htLmNjCiAJJChDT01QSUxFX0NY WCkgLURfX09VVFNJREVfQ1lHV0lOX18gLW8gJEAgJDwKIAotY3lnc2VydmVyLmV4ZTogY3lnc2Vy dmVyLm8gY3lnc2VydmVyX3NobS5vIGN5Z3NlcnZlcl90cmFuc3BvcnRfb3V0c2lkZS5vIGN5Z3Nl cnZlcl90cmFuc3BvcnRfcGlwZXNfb3V0c2lkZS5vIGN5Z3NlcnZlcl90cmFuc3BvcnRfc29ja2V0 c19vdXRzaWRlLm8gY3lnc2VydmVyX2NsaWVudF9vdXRzaWRlLm8gY3lnc2VydmVyX3Byb2Nlc3Mu byB0aHJlYWRlZF9xdWV1ZS5vIHdpbmNhcC5vIHZlcnNpb24ubyBzbWFsbHByaW50Lm8KK2N5Z3Nl cnZlcl9zZW0ubzogY3lnc2VydmVyX3NlbS5jYworCSQoQ09NUElMRV9DWFgpIC1EX19PVVRTSURF X0NZR1dJTl9fIC1vICRAICQ8CisKK2N5Z3NlcnZlci5leGU6IGN5Z3NlcnZlci5vIGN5Z3NlcnZl cl9zZW0ubyBjeWdzZXJ2ZXJfc2htLm8gY3lnc2VydmVyX3RyYW5zcG9ydF9vdXRzaWRlLm8gY3ln c2VydmVyX3RyYW5zcG9ydF9waXBlc19vdXRzaWRlLm8gY3lnc2VydmVyX3RyYW5zcG9ydF9zb2Nr ZXRzX291dHNpZGUubyBjeWdzZXJ2ZXJfY2xpZW50X291dHNpZGUubyBjeWdzZXJ2ZXJfcHJvY2Vz cy5vIHRocmVhZGVkX3F1ZXVlLm8gd2luY2FwLm8gdmVyc2lvbi5vIHNtYWxscHJpbnQubyAKIAkk KENYWCkgLW8gJEAgJF4KICNpZmRlZiBWRVJCT1NFCiAjCSQoQ1hYKSAkKE1JTkdXX0NYWEZMQUdT KSAtbyAkQCAke3dvcmRsaXN0IDEsMywkXn0gLUIkKG1pbmd3X2J1aWxkKS8gJChNSU5HV19MREZM QUdTKQpJbmRleDogY2hpbGRfaW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy93aW5zdXAvY3lnd2luL2NoaWxkX2luZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpk aWZmIC11IC1wIC1yMS4yOSBjaGlsZF9pbmZvLmgKLS0tIGNoaWxkX2luZm8uaAkxMCBGZWIgMjAw MiAxMzo1MDoxMyAtMDAwMAkxLjI5CisrKyBjaGlsZF9pbmZvLmgJMjQgTWF5IDIwMDIgMTE6Mjk6 MDEgLTAwMDAKQEAgLTgsNiArOCw5IEBAIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3 b3JrIGxpY2UKIEN5Z3dpbiBsaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhlIGZpbGUgIkNZR1dJ Tl9MSUNFTlNFIiBmb3IKIGRldGFpbHMuICovCiAKKyNpZm5kZWYgX0NISUxEX0lORk9fSF8KKyNk ZWZpbmUgX0NISUxEX0lORk9fSF8KKwogI2luY2x1ZGUgPHNldGptcC5oPgogCiBlbnVtCkBAIC0x MDksMyArMTEyLDUgQEAgcHVibGljOgogdm9pZCBfX3N0ZGNhbGwgaW5pdF9jaGlsZF9pbmZvIChE V09SRCwgY2hpbGRfaW5mbyAqLCBpbnQsIEhBTkRMRSk7CiAKIGV4dGVybiBjaGlsZF9pbmZvX2Zv cmsgKmNoaWxkX3Byb2NfaW5mbzsKKworI2VuZGlmIC8qIF9DSElMRF9JTkZPX0hfICovCkluZGV4 OiBjeWdlcnJuby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy93aW5zdXAvY3ln d2luL2N5Z2Vycm5vLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1yMS43 IGN5Z2Vycm5vLmgKLS0tIGN5Z2Vycm5vLmgJMjIgT2N0IDIwMDEgMjE6MDk6NDEgLTAwMDAJMS43 CisrKyBjeWdlcnJuby5oCTI0IE1heSAyMDAyIDExOjI5OjAxIC0wMDAwCkBAIC04LDYgKzgsOSBA QCBUaGlzIHNvZnR3YXJlIGlzIGEgY29weXJpZ2h0ZWQgd29yayBsaWNlCiBDeWd3aW4gbGljZW5z ZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5TRSIgZm9yCiBkZXRhaWxz LiAqLwogCisjaWZuZGVmIF9DWUdFUlJOT19IXworI2RlZmluZSBfQ1lHRVJSTk9fSF8KKwogdm9p ZCBfX3N0ZGNhbGwgc2V0ZXJybm9fZnJvbV93aW5fZXJyb3IgKGNvbnN0IGNoYXIgKmZpbGUsIGlu dCBsaW5lLCBEV09SRCBjb2RlKSBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgzKSkpOwogdm9pZCBf X3N0ZGNhbGwgc2V0ZXJybm8gKGNvbnN0IGNoYXIgKiwgaW50IGxpbmUpIF9fYXR0cmlidXRlX18g KChyZWdwYXJtKDIpKSk7CiBpbnQgX19zdGRjYWxsIGdldGVycm5vX2Zyb21fd2luX2Vycm9yIChE V09SRCBjb2RlLCBpbnQgZGVmZXJybm8pIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDIpKSk7CkBA IC0zNywzICs0MCw1IEBAIGNsYXNzIHNhdmVfZXJybm8KIAogZXh0ZXJuIGNvbnN0IGNoYXIgKl9f c3BfZm47CiBleHRlcm4gaW50IF9fc3BfbG47CisKKyNlbmRpZiAvKiBfQ1lHRVJSTk9fSF8gKi8K SW5kZXg6IGN5Z2hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3Vw L2N5Z3dpbi9jeWdoZWFwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlmZiAtdSAtcCAt cjEuMzggY3lnaGVhcC5oCi0tLSBjeWdoZWFwLmgJOCBNYXkgMjAwMiAxNDoyMTowOCAtMDAwMAkx LjM4CisrKyBjeWdoZWFwLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MDEgLTAwMDAKQEAgLTgsNiArOCwx NiBAQCBUaGlzIHNvZnR3YXJlIGlzIGEgY29weXJpZ2h0ZWQgd29yayBsaWNlCiBDeWd3aW4gbGlj ZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5TRSIgZm9yCiBkZXRh aWxzLiAqLwogCisjaWZuZGVmIF9DWUdIRUFQX0hfCisjZGVmaW5lIF9DWUdIRUFQX0hfCisKKyNp bmNsdWRlICJwYXRoLmgiCisjaW5jbHVkZSAiZHRhYmxlLmgiCisvKiBmb3Igc2V0X2Vycm5vICov CisjaW5jbHVkZSAiY3lnZXJybm8uaCIKKy8qIGZvciB2YXJpb3VzIGVycm51bWJlcnMgKi8KKyNp bmNsdWRlIDxlcnJuby5oPgorCiAjdW5kZWYgY2ZyZWUKIAogZW51bSBjeWdoZWFwX3R5cGVzCkBA IC0yNzMsMyArMjgzLDUgQEAgY2hhciAqX19zdGRjYWxsIGNzdHJkdXAgKGNvbnN0IGNoYXIgKikg XwogY2hhciAqX19zdGRjYWxsIGNzdHJkdXAxIChjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18g KChyZWdwYXJtKDEpKSk7CiB2b2lkIF9fc3RkY2FsbCBjeWdoZWFwX2luaXQgKCk7CiB9CisKKyNl bmRpZiAvKiBfQ1lHSEVBUF9IXyAqLwpJbmRleDogY3lnc2VydmVyLmNjCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy93aW5zdXAvY3lnd2luL2N5Z3NlcnZlci5jYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQgY3lnc2VydmVyLmNjCi0tLSBjeWdzZXJ2 ZXIuY2MJMTUgTWFyIDIwMDIgMjE6NTI6MDUgLTAwMDAJMS40CisrKyBjeWdzZXJ2ZXIuY2MJMjQg TWF5IDIwMDIgMTE6Mjk6MDIgLTAwMDAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjeWd3 aW4vY3lnc2VydmVyX3Byb2Nlc3MuaCIKICNpbmNsdWRlICJjeWd3aW4vY3lnc2VydmVyLmgiCiAj aW5jbHVkZSAiY3lnc2VydmVyX3NobS5oIgorI2luY2x1ZGUgImN5Z3NlcnZlcl9zZW0uaCIKIAog LyogZm9yIHF1aWV0ZXIgb3BlcmF0aW9uLCBzZXQgdG8gMCAqLwogI2RlZmluZSBERUJVRyAwCkBA IC0xNTgsNiArMTU5LDggQEAgb3V0Ogogdm9pZAogY2xpZW50X3JlcXVlc3Q6OnNlcnZlICh0cmFu c3BvcnRfbGF5ZXJfYmFzZSAqY29ubiwgY2xhc3MgcHJvY2Vzc19jYWNoZSAqY2FjaGUpCiB7Cisg IGlmIChoZWFkZXIucmVxX2lkID09IENZR1NFUlZFUl9SRVFVRVNUX0lOVkFMSUQpCisgICAgcmV0 dXJuOwogICBwcmludGYgKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KlxuIgogCSAgIkEgY2FsbCB0byB0aGUgYmFzZSBjbGllbnRfcmVxdWVzdCBjbGFzcyBoYXMgb2Nj dXJlZFxuIgogCSAgIlRoaXMgaW5kaWNhdGVzIGEgbWlzbWF0Y2ggaW4gYSB2aXJ0dWFsIGZ1bmN0 aW9uIGRlZmluaXRpb24gc29tZXdoZXJlXG4iKTsKQEAgLTM2NSw3ICszNjgsOSBAQCBzZXJ2ZXJf cmVxdWVzdDo6cHJvY2VzcyAoKQogICAgIGNhc2UgQ1lHU0VSVkVSX1JFUVVFU1RfU0hVVERPV046 CiAgICAgICByZXEgPSBuZXcgY2xpZW50X3JlcXVlc3Rfc2h1dGRvd24gKCk7IGJyZWFrOwogICAg IGNhc2UgQ1lHU0VSVkVSX1JFUVVFU1RfU0hNX0dFVDoKLSAgICAgcmVxID0gbmV3IGNsaWVudF9y ZXF1ZXN0X3NobSAoKTsgYnJlYWs7CisgICAgICByZXEgPSBuZXcgY2xpZW50X3JlcXVlc3Rfc2ht ICgpOyBicmVhazsKKyAgICBjYXNlIENZR1NFUlZFUl9SRVFVRVNUX1NFTToKKyAgICAgIHJlcSA9 IG5ldyBjbGllbnRfcmVxdWVzdF9zZW0gKCk7IGJyZWFrOyAKICAgICBkZWZhdWx0OgogICAgICAg cmVxID0gbmV3IGNsaWVudF9yZXF1ZXN0IChDWUdTRVJWRVJfUkVRVUVTVF9JTlZBTElELCAwKTsK ICAgICAgIHJlcS0+aGVhZGVyLmVycm9yX2NvZGUgPSBFTk9TWVM7CkBAIC0zNzQsOCArMzc5LDIy IEBAIHNlcnZlcl9yZXF1ZXN0Ojpwcm9jZXNzICgpCiAKICAgaWYgKHJlcS0+aGVhZGVyLmNiICE9 IHJlcV9wdHItPmNiKQogICAgIHsKLSAgICAgIGRlYnVnX3ByaW50ZiAoIk1pc21hdGNoIGluIHJl cXVlc3QgYnVmZmVyIHNpemVzXG4iKTsKLSAgICAgIGdvdG8gb3V0OworICAgICAgaWYgKHJlcS0+ aGVhZGVyLnJlcV9pZCA9PSBDWUdTRVJWRVJfUkVRVUVTVF9JTlZBTElEKQorCXsKKwkgIC8vIHN1 Y2sgdGhlIGNvbm5lY3Rpb24gZHJ5CisJICBjaGFyIHRlbXBidWZbcmVxX3B0ci0+Y2JdOworCSAg Ynl0ZXNfcmVhZCA9IGNvbm4tPnJlYWQgKCZ0ZW1wYnVmWzBdLCByZXFfcHRyLT5jYik7CisJICBp ZiAoYnl0ZXNfcmVhZCAhPSByZXFfcHRyLT5jYikKKwkgICAgeworCSAgICAgIGRlYnVnX3ByaW50 ZiAoImVycm9yIHJlYWRpbmcgJWxkIC8gJWxkIGZyb20gY29ubmVjdGlvbiAoJWx1KVxuIiwgYnl0 ZXNfcmVhZCxyZXFfcHRyLT5jYiwgR2V0TGFzdEVycm9yICgpKTsKKwkgICAgICBnb3RvIG91dDsK KwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisgICAgICAgICAgZGVidWdfcHJpbnRmICgiTWlz bWF0Y2ggaW4gcmVxdWVzdCBidWZmZXIgc2l6ZXNcbiIpOworICAgICAgICAgIGdvdG8gb3V0Owor CX0KICAgICB9CiAKICAgaWYgKHJlcS0+aGVhZGVyLmNiKQpJbmRleDogY3lnd2luLmRpbgo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5Z3dpbi9jeWd3aW4uZGluLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXUgLXAgLXIxLjQ2IGN5Z3dpbi5kaW4KLS0t IGN5Z3dpbi5kaW4JMTMgTWF5IDIwMDIgMTk6NTM6NDYgLTAwMDAJMS40NgorKysgY3lnd2luLmRp bgkyNCBNYXkgMjAwMiAxMToyOTowMiAtMDAwMApAQCAtMTI1MiwzICsxMjUyLDExIEBAIGFjbHRv dGV4dAogX2FjbHRvdGV4dCA9IGFjbHRvdGV4dAogYWNsZnJvbXRleHQKIF9hY2xmcm9tdGV4dCA9 IGFjbGZyb210ZXh0CitmdG9rCitzaG1hdAorc2htY3RsCitzaG1kdAorc2htZ2V0CitzZW1jdGwK K3NlbWdldAorc2Vtb3AKSW5kZXg6IGRlYnVnLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy93aW5zdXAvY3lnd2luL2RlYnVnLmNjLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMx CmRpZmYgLXUgLXAgLXIxLjMxIGRlYnVnLmNjCi0tLSBkZWJ1Zy5jYwkyMiBGZWIgMjAwMiAxOToz Mzo0MSAtMDAwMAkxLjMxCisrKyBkZWJ1Zy5jYwkyNCBNYXkgMjAwMiAxMToyOTowMiAtMDAwMApA QCAtMzgsNiArMzgsOCBAQCB2b2lkCiB0aHJlYWRuYW1lX2luaXQgKCkKIHsKICAgbmV3X211dG8g KHRocmVhZG5hbWVfbG9jayk7CisvLyAgc3RhdGljIG11dG8gdGhyZWFkbmFtZV9sb2NrIyNfc3Rv cmFnZSBfX2F0dHJpYnV0ZV9fKChub2NvbW1vbikpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5k YXRhX2N5Z3dpbl9ub2NvcHkiKSkpOworLy8gIHRocmVhZG5hbWVfbG9jayA9IHRocmVhZG5hbWVf bG9jayMjX3N0b3JhZ2UgKHRocmVhZG5hbWVfbG9jayk7CiB9CiAKIHZvaWQgX19zdGRjYWxsCklu ZGV4OiBkdGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5 Z3dpbi9kdGFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11IC1wIC1yMS4x NiBkdGFibGUuaAotLS0gZHRhYmxlLmgJMjIgRmViIDIwMDIgMTk6MzM6NDEgLTAwMDAJMS4xNgor KysgZHRhYmxlLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MDIgLTAwMDAKQEAgLTgsNiArOCw5IEBAIFRo aXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3b3JrIGxpY2UKIEN5Z3dpbiBsaWNlbnNlLiAg UGxlYXNlIGNvbnN1bHQgdGhlIGZpbGUgIkNZR1dJTl9MSUNFTlNFIiBmb3IKIGRldGFpbHMuICov CiAKKyNpZm5kZWYgX0RUQUJMRV9IXworI2RlZmluZSBfRFRBQkxFX0hfCisKIC8qIEluaXRpYWwg YW5kIGluY3JlbWVudCB2YWx1ZXMgZm9yIGN5Z3dpbidzIGZkIHRhYmxlICovCiAjZGVmaW5lIE5P RklMRV9JTkNSICAgIDMyCiAKQEAgLTg1LDMgKzg4LDUgQEAgZXh0ZXJuIGR0YWJsZSBmZHRhYjsK IAogZXh0ZXJuICJDIiBpbnQgZ2V0ZmR0YWJzaXplICgpOwogZXh0ZXJuICJDIiB2b2lkIHNldGZk dGFic2l6ZSAoaW50KTsKKworI2VuZGlmIC8qIF9EVEFCTEVfSF8gKi8KSW5kZXg6IGZoYW5kbGVy LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL3dpbnN1cC9jeWd3aW4vZmhhbmRs ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTYKZGlmZiAtdSAtcCAtcjEuMTE2IGZoYW5k bGVyLmgKLS0tIGZoYW5kbGVyLmgJMjIgTWF5IDIwMDIgMjI6MDk6NTcgLTAwMDAJMS4xMTYKKysr IGZoYW5kbGVyLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MDUgLTAwMDAKQEAgLTEyLDYgKzEyLDcgQEAg ZGV0YWlscy4gKi8KICNkZWZpbmUgX0ZIQU5ETEVSX0hfCiAKICNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KKyNpbmNsdWRlICJzZWN1cml0eS5oIgogCiBlbnVtCiB7CkluZGV4OiBnbW9uLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL3dpbnN1cC9jeWd3aW4vZ21vbi5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBnbW9uLmMKLS0tIGdtb24uYwk3IFNl cCAyMDAxIDIxOjMyOjA0IC0wMDAwCTEuNAorKysgZ21vbi5jCTI0IE1heSAyMDAyIDExOjI5OjA1 IC0wMDAwCkBAIC00NCw2ICs0NCw3IEBAIHN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJE9wZW5CU0Q6 IGdtb24uYywKICNpbmNsdWRlIDxnbW9uLmg+CiAKICNpbmNsdWRlIDxwcm9maWwuaD4KKyNpbmNs dWRlIDx3aW5kb3dzLmg+CiAKIC8qIFhYWCBuZWVkZWQ/ICovCiAvL2V4dGVybiBjaGFyICptaW5i cmsgX19hc20gKCJtaW5icmsiKTsKQEAgLTU4LDEwICs1OSwxNyBAQCBzdGF0aWMgaW50CXNfc2Nh bGU7CiAKIHZvaWQJbW9uY29udHJvbCBfX1AoKGludCkpOwogCitIQU5ETEUgZ21vbl9oZWFwID0g SU5WQUxJRF9IQU5ETEVfVkFMVUU7CisKIHN0YXRpYyB2b2lkICoKIGZha2Vfc2JyayhpbnQgc2l6 ZSkKIHsKLSAgICByZXR1cm4gbWFsbG9jKHNpemUpOworLy8gZG9lcyBub3QgcGxheSBuaWNlIHdo ZW4gcHJvZmlsaW5nIGN5Z3dpbiBpdHNlbGYKKy8vICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cisg ICAgdm9pZCAqcnYgPSBIZWFwQWxsb2MoZ21vbl9oZWFwLCAwLCBzaXplKTsKKyAgICBpZiAocnYg PT0gTlVMTCkKKyAgICAgIHJldHVybiAodm9pZCAqKSAtMTsKKyAgICByZXR1cm4gcnY7CiB9CiAK IHZvaWQKQEAgLTcyLDYgKzgwLDggQEAgbW9uc3RhcnR1cChsb3dwYywgaGlnaHBjKQogCXJlZ2lz dGVyIGludCBvOwogCWNoYXIgKmNwOwogCXN0cnVjdCBnbW9ucGFyYW0gKnAgPSAmX2dtb25wYXJh bTsKKworCWdtb25faGVhcCA9IEdldFByb2Nlc3NIZWFwKCk7CiAKIAkvKgogCSAqIHJvdW5kIGxv d3BjIGFuZCBoaWdocGMgdG8gbXVsdGlwbGVzIG9mIHRoZSBkZW5zaXR5IHdlJ3JlIHVzaW5nCklu ZGV4OiBtY291bnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5 Z3dpbi9tY291bnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMg bWNvdW50LmMKLS0tIG1jb3VudC5jCTI0IEp1biAyMDAxIDIyOjI2OjUxIC0wMDAwCTEuMworKysg bWNvdW50LmMJMjQgTWF5IDIwMDIgMTE6Mjk6MDUgLTAwMDAKQEAgLTE2OSw1ICsxNjksMTAgQEAg b3ZlcmZsb3c6CiAgKiBBY3R1YWwgZGVmaW5pdGlvbiBvZiBtY291bnQgZnVuY3Rpb24uICBEZWZp bmVkIGluIDxtYWNoaW5lL3Byb2ZpbGUuaD4sCiAgKiB3aGljaCBpcyBpbmNsdWRlZCBieSA8c3lz L2dtb24uaD4KICAqLwotTUNPVU5UCisvLyBNQ09VTlQKIAorCit2b2lkIG1jb3VudCh2b2lkKQor eworICBfbWNvdW50IChfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MgKDEpLCBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MgKDApKTsKK30KSW5kZXg6IHBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvd2luc3VwL2N5Z3dpbi9wYXRoLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NDEKZGlmZiAtdSAtcCAtcjEuNDEgcGF0aC5oCi0tLSBwYXRoLmgJMTIgTWF5IDIwMDIgMDM6MDg6 NTkgLTAwMDAJMS40MQorKysgcGF0aC5oCTI0IE1heSAyMDAyIDExOjI5OjA1IC0wMDAwCkBAIC04 LDYgKzgsMTEgQEAgVGhpcyBzb2Z0d2FyZSBpcyBhIGNvcHlyaWdodGVkIHdvcmsgbGljZQogQ3ln d2luIGxpY2Vuc2UuICBQbGVhc2UgY29uc3VsdCB0aGUgZmlsZSAiQ1lHV0lOX0xJQ0VOU0UiIGZv cgogZGV0YWlscy4gKi8KIAorI2lmbmRlZiBfUEFUSF9IXworI2RlZmluZSBfUEFUSF9IXworCisj aW5jbHVkZSAiZmhhbmRsZXIuaCIKKwogc3RydWN0IHN1ZmZpeF9pbmZvCiB7CiAgIGNvbnN0IGNo YXIgKm5hbWU7CkBAIC0xOTEsMyArMTk2LDUgQEAgaW50IHBhdGhtYXRjaCAoY29uc3QgY2hhciAq cGF0aDEsIGNvbnN0IAogaW50IHBhdGhubWF0Y2ggKGNvbnN0IGNoYXIgKnBhdGgxLCBjb25zdCBj aGFyICpwYXRoMiwgaW50IGxlbikgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDIpKSk7CiAKIGlu dCBwYXRoX3ByZWZpeF9wIChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIsIGlu dCBsZW4xKSBfX2F0dHJpYnV0ZV9fICgocmVncGFybSAoMykpKTsKKworI2VuZGlmIC8qIF9QQVRI X0hfICovCkluZGV4OiBwZXJ0aHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvd2luc3VwL2N5Z3dpbi9wZXJ0aHJlYWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRp ZmYgLXUgLXAgLXIxLjggcGVydGhyZWFkLmgKLS0tIHBlcnRocmVhZC5oCTMwIE5vdiAyMDAxIDA2 OjE5OjU4IC0wMDAwCTEuOAorKysgcGVydGhyZWFkLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MDUgLTAw MDAKQEAgLTEwLDYgKzEwLDE2IEBAIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3b3Jr IGxpY2UKIEN5Z3dpbiBsaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhlIGZpbGUgIkNZR1dJTl9M SUNFTlNFIiBmb3IKIGRldGFpbHMuICovCiAKKyNpbmNsdWRlICJ3aW5zdXAuaCIKKyNpbmNsdWRl ICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3luYy5oIgorI2luY2x1ZGUgInNpZ3Byb2MuaCIK KyNpbmNsdWRlICJwaW5mby5oIgorI2lmZGVmIE5FRURfVkZPUksKKyNpbmNsdWRlICJjeWdoZWFw LmgiCisjaW5jbHVkZSAiY2hpbGRfaW5mby5oIgorI2VuZGlmCisKICNkZWZpbmUgUFRNQUdJQyAw eDc3MzY2Mzc3CiAKIHN0cnVjdCBfcmVlbnQ7CkBAIC00MSw3ICs1MSw3IEBAIHB1YmxpYzoKIGNs YXNzIHBlcl90aHJlYWRfd2FpdHEgOiBwdWJsaWMgcGVyX3RocmVhZAogewogcHVibGljOgotICBw ZXJfdGhyZWFkX3dhaXRxICgpIDogcGVyX3RocmVhZCAoMCkge30KKyAgcGVyX3RocmVhZF93YWl0 cSAoKTsKICAgdm9pZCAqZ2V0ICgpIHtyZXR1cm4gKHdhaXRxICopIHRoaXMtPnBlcl90aHJlYWQ6 OmdldCAoKTt9CiAgIHZvaWQgKmNyZWF0ZSAoKSB7cmV0dXJuICh3YWl0cSAqKSB0aGlzLT5wZXJf dGhyZWFkOjpjcmVhdGUgKCk7fQogICBzaXplX3Qgc2l6ZSAoKSB7cmV0dXJuIHNpemVvZiAod2Fp dHEpO30KQEAgLTYxLDYgKzcxLDcgQEAgc3RydWN0IHZmb3JrX3NhdmUKIGNsYXNzIHBlcl90aHJl YWRfdmZvcmsgOiBwdWJsaWMgcGVyX3RocmVhZAogewogcHVibGljOgorICBwZXJfdGhyZWFkX3Zm b3JrKCk7CiAgIHZmb3JrX3NhdmUgKnZhbCAoKSB7IHJldHVybiAodmZvcmtfc2F2ZSAqKSB0aGlz LT5wZXJfdGhyZWFkOjpnZXQgKCk7IH0KICAgdmZvcmtfc2F2ZSAqY3JlYXRlICgpIHtyZXR1cm4g KHZmb3JrX3NhdmUgKikgdGhpcy0+cGVyX3RocmVhZDo6Y3JlYXRlICgpO30KICAgc2l6ZV90IHNp emUgKCkge3JldHVybiBzaXplb2YgKHZmb3JrX3NhdmUpO30KQEAgLTg2LDYgKzk3LDcgQEAgc3Ry dWN0IHNpZ25hbF9kaXNwYXRjaAogCiBzdHJ1Y3QgcGVyX3RocmVhZF9zaWduYWxfZGlzcGF0Y2gg OiBwdWJsaWMgcGVyX3RocmVhZAogeworICBwZXJfdGhyZWFkX3NpZ25hbF9kaXNwYXRjaCgpOwog ICBzaWduYWxfZGlzcGF0Y2ggKmdldCAoKSB7IHJldHVybiAoc2lnbmFsX2Rpc3BhdGNoICopIHRo aXMtPnBlcl90aHJlYWQ6OmdldCAoKTsgfQogICBzaWduYWxfZGlzcGF0Y2ggKmNyZWF0ZSAoKSB7 cmV0dXJuIChzaWduYWxfZGlzcGF0Y2ggKikgdGhpcy0+cGVyX3RocmVhZDo6Y3JlYXRlICgpO30K ICAgc2l6ZV90IHNpemUgKCkge3JldHVybiBzaXplb2YgKHNpZ25hbF9kaXNwYXRjaCk7fQpJbmRl eDogcGluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5Z3dp bi9waW5mby5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM3CmRpZmYgLXUgLXAgLXIxLjM3IHBp bmZvLmgKLS0tIHBpbmZvLmgJMTggTWF5IDIwMDIgMjA6Mjc6NDkgLTAwMDAJMS4zNworKysgcGlu Zm8uaAkyNCBNYXkgMjAwMiAxMToyOTowNSAtMDAwMApAQCAtOCw2ICs4LDkgQEAgVGhpcyBzb2Z0 d2FyZSBpcyBhIGNvcHlyaWdodGVkIHdvcmsgbGljZQogQ3lnd2luIGxpY2Vuc2UuICBQbGVhc2Ug Y29uc3VsdCB0aGUgZmlsZSAiQ1lHV0lOX0xJQ0VOU0UiIGZvcgogZGV0YWlscy4gKi8KIAorI2lm bmRlZiBfUElORk9fSF8KKyNkZWZpbmUgX1BJTkZPX0hfCisKIC8qIFNpZ25hbCBjb25zdGFudHMg KGhhdmUgdG8gZGVmaW5lIHRoZW0gaGVyZSwgdW5mb3J0dW5hdGVseSkgKi8KIAogZW51bQpAQCAt MjA2LDMgKzIwOSw1IEBAIGludCBfX3N0ZGNhbGwgZml4dXBfc2htc19hZnRlcl9mb3JrICgpOwog CiB2b2lkIF9fc3RkY2FsbCBmaWxsX3J1c2FnZSAoc3RydWN0IHJ1c2FnZSAqLCBIQU5ETEUpOwog dm9pZCBfX3N0ZGNhbGwgYWRkX3J1c2FnZSAoc3RydWN0IHJ1c2FnZSAqLCBzdHJ1Y3QgcnVzYWdl ICopOworCisjZW5kaWYgLyogX1BJTkZPX0hfICovCkluZGV4OiBzZWN1cml0eS5jYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5Z3dpbi9zZWN1cml0eS5jYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS45MApkaWZmIC11IC1wIC1yMS45MCBzZWN1cml0eS5jYwotLS0g c2VjdXJpdHkuY2MJMjEgTWF5IDIwMDIgMTQ6NTA6MjYgLTAwMDAJMS45MAorKysgc2VjdXJpdHku Y2MJMjQgTWF5IDIwMDIgMTE6Mjk6MDYgLTAwMDAKQEAgLTE2NjMsMyArMTY2MywxMCBAQCBzZXRf ZmlsZV9hdHRyaWJ1dGUgKGludCB1c2VfbnRzZWMsIGNvbnN0CiAJCQkgICAgIG15c2VsZi0+dWlk LCBteXNlbGYtPmdpZCwKIAkJCSAgICAgYXR0cmlidXRlLCBjeWdoZWFwLT51c2VyLmxvZ3NydiAo KSk7CiB9CisKK2N5Z3NpZDo6Y3lnc2lkICgpIDogcHNpZCAoKFBTSUQpIHNidWYpIHt9CitjeWdz aWQ6OmN5Z3NpZCAoY29uc3QgUFNJRCBuc2lkKSB7ICp0aGlzID0gbnNpZDsgfQorY3lnc2lkOjpj eWdzaWQgKGNvbnN0IGNoYXIgKm5zdHJzaWQpIHsgKnRoaXMgPSBuc3Ryc2lkOyB9CisKK2NvbnN0 IFBTSUQgY3lnc2lkOjpvcGVyYXRvcj0gKGNvbnN0IGNoYXIgKm5zaWRzdHIpCisgICAgeyByZXR1 cm4gZ2V0ZnJvbXN0ciAobnNpZHN0cik7IH0KSW5kZXg6IHNlY3VyaXR5LmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL3dpbnN1cC9jeWd3aW4vc2VjdXJpdHkuaCx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBzZWN1cml0eS5oCi0tLSBzZWN1cml0 eS5oCTE2IE1heSAyMDAyIDA5OjMwOjQ4IC0wMDAwCTEuMjMKKysrIHNlY3VyaXR5LmgJMjQgTWF5 IDIwMDIgMTE6Mjk6MDYgLTAwMDAKQEAgLTgsNiArOCw5IEBAIFRoaXMgc29mdHdhcmUgaXMgYSBj b3B5cmlnaHRlZCB3b3JrIGxpY2UKIEN5Z3dpbiBsaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhl IGZpbGUgIkNZR1dJTl9MSUNFTlNFIiBmb3IKIGRldGFpbHMuICovCiAKKyNpZm5kZWYgX1NFQ1VS SVRZX0hfCisjZGVmaW5lIF9TRUNVUklUWV9IXworCiAjZGVmaW5lIERPTlRfSU5IRVJJVCAoMCkK ICNkZWZpbmUgSU5IRVJJVF9BTEwgIChDT05UQUlORVJfSU5IRVJJVF9BQ0V8T0JKRUNUX0lOSEVS SVRfQUNFKQogI2RlZmluZSBJTkhFUklUX09OTFkgKElOSEVSSVRfT05MWV9BQ0V8Q09OVEFJTkVS X0lOSEVSSVRfQUNFfE9CSkVDVF9JTkhFUklUX0FDRSkKQEAgLTQ3LDEyICs1MCwxMSBAQCBwdWJs aWM6CiAgICAgeyByZXR1cm4gYXNzaWduIChuc2lkKTsgfQogICBpbmxpbmUgY29uc3QgUFNJRCBv cGVyYXRvcj0gKGNvbnN0IFBTSUQgbnNpZCkKICAgICB7IHJldHVybiBhc3NpZ24gKG5zaWQpOyB9 Ci0gIGlubGluZSBjb25zdCBQU0lEIG9wZXJhdG9yPSAoY29uc3QgY2hhciAqbnNpZHN0cikKLSAg ICB7IHJldHVybiBnZXRmcm9tc3RyIChuc2lkc3RyKTsgfQorICBjb25zdCBQU0lEIG9wZXJhdG9y PSAoY29uc3QgY2hhciAqbnNpZHN0cik7CiAKLSAgaW5saW5lIGN5Z3NpZCAoKSA6IHBzaWQgKChQ U0lEKSBzYnVmKSB7fQotICBpbmxpbmUgY3lnc2lkIChjb25zdCBQU0lEIG5zaWQpIHsgKnRoaXMg PSBuc2lkOyB9Ci0gIGlubGluZSBjeWdzaWQgKGNvbnN0IGNoYXIgKm5zdHJzaWQpIHsgKnRoaXMg PSBuc3Ryc2lkOyB9CisgIGN5Z3NpZCAoKTsKKyAgY3lnc2lkIChjb25zdCBQU0lEIG5zaWQpOwor ICBjeWdzaWQgKGNvbnN0IGNoYXIgKm5zdHJzaWQpOwogCiAgIGlubGluZSBQU0lEIHNldCAoKSB7 IHJldHVybiBwc2lkID0gKFBTSUQpIHNidWY7IH0KIApAQCAtMjIzLDMgKzIyNSw1IEBAIHNlY191 c2VyIChjaGFyIHNhX2J1ZltdLCBQU0lEIHNpZCA9IE5VTEwKIHsKICAgcmV0dXJuIGFsbG93X250 c2VjID8gX19zZWNfdXNlciAoc2FfYnVmLCBzaWQsIFRSVUUpIDogJnNlY19ub25lX25paDsKIH0K KworI2VuZGlmIC8qIF9TRUNVUklUWV9IXyAqLwpJbmRleDogc2lncHJvYy5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy93aW5zdXAvY3lnd2luL3NpZ3Byb2MuaCx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS40OApkaWZmIC11IC1wIC1yMS40OCBzaWdwcm9jLmgKLS0tIHNpZ3Byb2Mu aAkxMyBKYW4gMjAwMiAyMDowMzowMyAtMDAwMAkxLjQ4CisrKyBzaWdwcm9jLmgJMjQgTWF5IDIw MDIgMTE6Mjk6MDYgLTAwMDAKQEAgLTgsNiArOCw5IEBAIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5 cmlnaHRlZCB3b3JrIGxpY2UKIEN5Z3dpbiBsaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhlIGZp bGUgIkNZR1dJTl9MSUNFTlNFIiBmb3IKIGRldGFpbHMuICovCiAKKyNpZm5kZWYgX1NJR1BST0Nf SF8KKyNkZWZpbmUgX1NJR1BST0NfSF8KKwogI2luY2x1ZGUgPHNpZ25hbC5oPgogCiAjZGVmaW5l IEVYSVRfU0lHTkFMCSAweDAxMDAwMApAQCAtMTI0LDMgKzEyNyw1IEBAIGV4dGVybiBjaGFyIG15 c2VsZl9ub3dhaXRfbm9ubWFpbl9kdW1teVsKIAogI2RlZmluZSBteXNlbGZfbm93YWl0ICgoX3Bp bmZvICopbXlzZWxmX25vd2FpdF9kdW1teSkKICNkZWZpbmUgbXlzZWxmX25vd2FpdF9ub25tYWlu ICgoX3BpbmZvICopbXlzZWxmX25vd2FpdF9ub25tYWluX2R1bW15KQorCisjZW5kaWYgLyogX1NJ R1BST0dfSF8gKi8KSW5kZXg6IHN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvd2luc3VwL2N5Z3dpbi9zeW5jLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAt dSAtcCAtcjEuMjAgc3luYy5oCi0tLSBzeW5jLmgJMjIgRmViIDIwMDIgMTk6MzM6NDEgLTAwMDAJ MS4yMAorKysgc3luYy5oCTI0IE1heSAyMDAyIDExOjI5OjA2IC0wMDAwCkBAIC0xMCw2ICsxMCw5 IEBAIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3b3JrIGxpY2UKIEN5Z3dpbiBsaWNl bnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhlIGZpbGUgIkNZR1dJTl9MSUNFTlNFIiBmb3IKIGRldGFp bHMuICovCiAKKyNpZm5kZWYgX1NZTkNfSF8KKyNkZWZpbmUgX1NZTkNfSF8KKwogLyogRklYTUU6 IE5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBjbGFzcyBjYW5ub3QgYmUgYWxsb2NhdGVkIHZpYSBg bmV3JyBzaW5jZQogICAgdGhlcmUgYXJlIGlzc3VlcyB3aXRoIG1hbGxvYyBhbmQgZm9yay4gKi8K IGNsYXNzIG11dG8KQEAgLTQ3LDMgKzUwLDUgQEAgZXh0ZXJuIG11dG8gbXV0b19zdGFydDsKICAg c3RhdGljIG11dG8gX19uYW1lIyNfc3RvcmFnZSBfX2F0dHJpYnV0ZV9fKChub2NvbW1vbikpIF9f YXR0cmlidXRlX18oKHNlY3Rpb24oIi5kYXRhX2N5Z3dpbl9ub2NvcHkiKSkpOyBcCiAgIF9fbmFt ZSA9IF9fbmFtZSMjX3N0b3JhZ2UuaW5pdCAoI19fbmFtZSk7IFwKIH0pCisKKyNlbmRpZiAvKiBf U1lOQ19IXyAqLwpJbmRleDogdGhyZWFkLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy93aW5zdXAvY3lnd2luL3RocmVhZC5jYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42Ngpk aWZmIC11IC1wIC1yMS42NiB0aHJlYWQuY2MKLS0tIHRocmVhZC5jYwkyIE1heSAyMDAyIDExOjI2 OjIyIC0wMDAwCTEuNjYKKysrIHRocmVhZC5jYwkyNCBNYXkgMjAwMiAxMToyOToxMCAtMDAwMApA QCAtNDgsNiArNDgsMTQgQEAgZGV0YWlscy4gKi8KIAogZXh0ZXJuIGludCB0aHJlYWRzYWZlOwog CisvKiBNVGludGVyZmFjZSAqLworTVRpbnRlcmZhY2U6Ok1UaW50ZXJmYWNlICgpOnJlZW50X2lu ZGV4ICgwKSwgaW5kZXhhbGxvY2F0ZWQgKDApLCB0aHJlYWRjb3VudCAoMSkKK3sKKyAgcHRocmVh ZF9wcmVwYXJlID0gTlVMTDsKKyAgcHRocmVhZF9jaGlsZCAgID0gTlVMTDsKKyAgcHRocmVhZF9w YXJlbnQgID0gTlVMTDsKK30KKwogLypwdGhyZWFkX2tleV9kZXN0cnVjdG9yX2xpc3QgY2xhc3M6 IHRvLWJlIHRocmVhZHNhZmUgc2luZ2xlIGxpbmtlZCBsaXN0CiAgKkZJWE1FOiBQdXQgbWUgaW4g YSBkZWRpY2F0ZWQgZmlsZSwgb3IgYSBsZWFzdCBhIHRvb2xzIGFyZWEgIQogICovCkluZGV4OiB0 aHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvd2luc3VwL2N5Z3dpbi90 aHJlYWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMwpkaWZmIC11IC1wIC1yMS4zMyB0aHJl YWQuaAotLS0gdGhyZWFkLmgJMTAgRmViIDIwMDIgMTM6NTA6MTMgLTAwMDAJMS4zMworKysgdGhy ZWFkLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MTAgLTAwMDAKQEAgLTM4MSwxMiArMzgxLDcgQEAgcHVi bGljOgogICB2b2lkIEluaXQgKGludCk7CiAgIHZvaWQgZml4dXBfYWZ0ZXJfZm9yayAodm9pZCk7 CiAKLSAgICBNVGludGVyZmFjZSAoKTpyZWVudF9pbmRleCAoMCksIGluZGV4YWxsb2NhdGVkICgw KSwgdGhyZWFkY291bnQgKDEpCi0gIHsKLSAgICBwdGhyZWFkX3ByZXBhcmUgPSBOVUxMOwotICAg IHB0aHJlYWRfY2hpbGQgICA9IE5VTEw7Ci0gICAgcHRocmVhZF9wYXJlbnQgID0gTlVMTDsKLSAg fQorICAgIE1UaW50ZXJmYWNlICgpOwogfTsKIAogdm9pZCBfX3B0aHJlYWRfYXRmb3JrcHJlcGFy ZSh2b2lkKTsKSW5kZXg6IHdpbnN1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy93aW5zdXAvY3lnd2luL3dpbnN1cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5CmRpZmYg LXUgLXAgLXIxLjg5IHdpbnN1cC5oCi0tLSB3aW5zdXAuaAkyIE1heSAyMDAyIDA0OjEzOjQ4IC0w MDAwCTEuODkKKysrIHdpbnN1cC5oCTI0IE1heSAyMDAyIDExOjI5OjEwIC0wMDAwCkBAIC04LDYg KzgsOSBAQCBUaGlzIHNvZnR3YXJlIGlzIGEgY29weXJpZ2h0ZWQgd29yayBsaWNlCiBDeWd3aW4g bGljZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5TRSIgZm9yCiBk ZXRhaWxzLiAqLwogCisjaWZuZGVmIF9XSU5TVVBfSF8KKyNkZWZpbmUgX1dJTlNVUF9IXworCiAj aWZkZWYgSEFWRV9DT05GSUdfSAogIyBpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgpAQCAtMjI4 LDkgKzIzMSw2IEBAIGV4dGVybiB2b2lkIG11bHRpcGxlX2N5Z3dpbl9wcm9ibGVtIChjb24KIGV4 dGVybiAiQyIgdm9pZCBfX21hbGxvY19sb2NrIChzdHJ1Y3QgX3JlZW50ICopOwogZXh0ZXJuICJD IiB2b2lkIF9fbWFsbG9jX3VubG9jayAoc3RydWN0IF9yZWVudCAqKTsKIAotZXh0ZXJuICJDIiB2 b2lkIF9fbWFsbG9jX2xvY2sgKHN0cnVjdCBfcmVlbnQgKik7Ci1leHRlcm4gIkMiIHZvaWQgX19t YWxsb2NfdW5sb2NrIChzdHJ1Y3QgX3JlZW50ICopOwotCiBjbGFzcyBwYXRoX2NvbnY7CiBpbnQg X19zdGRjYWxsIHN0YXRfd29ya2VyIChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgX19zdGF0NjQg KmJ1ZiwgaW50IG5vZm9sbG93LAogCQkJICAgcGF0aF9jb252ICpwYyA9IE5VTEwpIF9fYXR0cmli dXRlX18gKChyZWdwYXJtICgzKSkpOwpAQCAtMjg5LDMgKzI4OSw0IEBAIGV4dGVybiBITU9EVUxF IGN5Z3dpbl9obW9kdWxlOwogZXh0ZXJuIHN0cnVjdCBXU0FEYXRhIHdzYWRhdGE7CiAKICNlbmRp ZiAvKiBkZWZpbmVkIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX1dJTlNVUF9IXyAqLwpJbmRl eDogaW5jbHVkZS9jeWd3aW4vY3lnc2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL3dpbnN1cC9jeWd3aW4vaW5jbHVkZS9jeWd3aW4vY3lnc2VydmVyLmgsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGN5Z3NlcnZlci5oCi0tLSBpbmNsdWRl L2N5Z3dpbi9jeWdzZXJ2ZXIuaAkxMyBNYXIgMjAwMiAwMjozNDowNSAtMDAwMAkxLjMKKysrIGlu Y2x1ZGUvY3lnd2luL2N5Z3NlcnZlci5oCTI0IE1heSAyMDAyIDExOjI5OjEwIC0wMDAwCkBAIC0z Myw2ICszMyw3IEBAIHR5cGVkZWYgZW51bSB7CiAgIENZR1NFUlZFUl9SRVFVRVNUX0FUVEFDSF9U VFksCiAgIENZR1NFUlZFUl9SRVFVRVNUX1NIVVRET1dOLAogICBDWUdTRVJWRVJfUkVRVUVTVF9T SE1fR0VULAorICBDWUdTRVJWRVJfUkVRVUVTVF9TRU0sCiAgIENZR1NFUlZFUl9SRVFVRVNUX0xB U1QKIH0gY3lnc2VydmVyX3JlcXVlc3RfY29kZTsKIApJbmRleDogaW5jbHVkZS9jeWd3aW4vY3ln c2VydmVyX3RyYW5zcG9ydF9waXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy93aW5zdXAvY3lnd2luL2luY2x1ZGUvY3lnd2luL2N5Z3NlcnZlcl90cmFuc3BvcnRfcGlwZXMu aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMgY3lnc2VydmVyX3Ry YW5zcG9ydF9waXBlcy5oCi0tLSBpbmNsdWRlL2N5Z3dpbi9jeWdzZXJ2ZXJfdHJhbnNwb3J0X3Bp cGVzLmgJMTMgTWFyIDIwMDIgMDI6MzQ6MDUgLTAwMDAJMS4zCisrKyBpbmNsdWRlL2N5Z3dpbi9j eWdzZXJ2ZXJfdHJhbnNwb3J0X3BpcGVzLmgJMjQgTWF5IDIwMDIgMTE6Mjk6MTAgLTAwMDAKQEAg LTI5LDExICsyOSwxMSBAQCBjbGFzcyB0cmFuc3BvcnRfbGF5ZXJfcGlwZXMgOiBwdWJsaWMgdHJh CiAgIHByaXZhdGU6CiAgICAgLyogZm9yIHBpcGUgYmFzZWQgY29tbXVuaWNhdGlvbnMgKi8KICAg ICB2b2lkIGluaXRfc2VjdXJpdHkgKCk7Ci0gICAgU0VDVVJJVFlfREVTQ1JJUFRPUiBzZDsKLSAg ICBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY19ub25lX25paCwgc2VjX2FsbF9uaWg7CisgICAgdHJh bnNwb3J0X2xheWVyX3BpcGVzIChIQU5ETEUgbmV3X3BpcGUpOwogICAgIGNoYXIgcGlwZV9uYW1l IFtNQVhfUEFUSF07CiAgICAgSEFORExFIHBpcGU7CisgICAgU0VDVVJJVFlfREVTQ1JJUFRPUiBz ZDsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY19ub25lX25paCwgc2VjX2FsbF9uaWg7CiAg ICAgYm9vbCBpbml0ZWQ7Ci0gICAgdHJhbnNwb3J0X2xheWVyX3BpcGVzIChIQU5ETEUgbmV3X3Bp cGUpOwogfTsKICNlbmRpZiAvKiBfQ1lHU0VSVkVSX1RSQU5TUE9SVF9QSVBFU18gKi8K ------_=_NextPart_001_01C20316.C551574C--