From: *jeffdb AT netzone DOT nospam DOT com (Mikey) Subject: Re: Debugging cygwin.dll with gdb & static libcygwin_g.a 14 Jun 1997 10:35:27 -0700 Approved: cygnus DOT gnu-win32 AT cygnus DOT com Distribution: cygnus Message-ID: <33a3c38f.26759007.cygnus.gnu-win32@smtp.netzone.com> References: <199706080413 DOT VAA14884 AT rtl DOT cygnus DOT com> Reply-To: *jeffdb AT netzone DOT nospam DOT com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="--=_33a2c7cf31032108aad679.MFSBCHJLHS" Original-To: Geoffrey Noer , gnu-win32 AT cygnus DOT com In-Reply-To: <199706080413.VAA14884@rtl.cygnus.com> X-Mailer: Forte Agent 1.01/32.397 Original-Sender: owner-gnu-win32 AT cygnus DOT com ----=_33a2c7cf31032108aad679.MFSBCHJLHS Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The thing that has bugged me the most about gnu-cygwin32 ever since I started using it, is that you couldn't really see what was going on, your code gets to the dll, and it disappears, and writing in your own debugging messages via debug_printf, is a real pain in the tail, so I finally fixed it. Attached are the necessary files, to make a static libcygwin_g.a, along with a specs file that allows you to link with it. All you have to do to link with the static lib, is add -g to your link line. I also added a utility stripdll, so that your production dll will be the usual size, ~320K and fixed the Makefile so it will strip the extra debugging information from libcygwin.a automatically so you (and I ;^) don't have to remember every time. and for those of you who already have the Micros*** SDK I included a better version of lib2def. There are at least two problems with this, the debuggable executables, are huge, ~3M at least, so most people won't want to use this for installed stuff ;^) The libcygwin_g.a is also huge ~11M, so I won't be posting it anywhere, if you're into debugging dll code, you're going to have to build the dll anyway ;^) The other thing is that the by now famous win95 lseek() bug will catch you once in a while, at least I think that's what's happening so if the new .exe will run, but gdb segfaults when loading it, just relink, and try again. But I think that being able to debug the .dll code directly is well worth it ;^))))))). I have built and run /bin/bash.exe linked to /bin/sh "static", ~3M w/debug code, 520K after strip --strip-all and it seems to work fine, with one exception, you can reinvoke sh as many times as you want, but running shell scripts can lockup, I suspect that changes would need to be made to the fork() code, to make this a truly workable alternative for people who want to just send out the executables, without the dll. If you need to make changes to dll startup code in either dcrt0.cc, or libccrt0.cc, like Sergey's patch does, you will want to make those same changes in gcrt0.cc to debug them. WARNING compiling with -g on your link line WILL be seriously hazardous to your free disk space once you do this, YOU HAVE BEEN WARNED!! ;^) If you haven't mounted your filsystems -b already, you really should. the attached files are LF only. you may be able to get away with adding --ignore-whitespace to the patch line below, I don't know. To create libcygwin_g.a BACKUP YOUR SPECS FILE FIRST!!!! replace your .../H-i386-cygwin32/lib/gcc-lib/i386-cygwin32/$VERSION/specs with the attached one. cd into the .../cdk/winsup/ directory, and type patch -p0 < static.dif find -name \*.rej there better not be any. find -name \*.orig or \*.~1~|xargs rm #depending on if you have export VERSION_CONTROL=numbered in .bashrc ..cd into your .../obj dir, and configure and make as usual. I didn't have the static lib install by default, because of it's size. so to get the static lib made and installed you will need to do make prefix=/your/inst/dir exec_prefix=/your/inst/dir/H-i386-cygwin32 install-static or just make libcygwin_g.a and copy it wherever you want. All that being said, have FUN!!! Mikey ../* DECLARATION I, Jeffrey DeBeer, grant to the public domain my entire right, title, and interest (including all rights under copyright) in my changes and enhancements to the Cygwin32 library. These changes and enhancements are herein called the "Work". The Work granted to the public domain shall also include any future revisions of these changes and enhancements hereafter made by me. I represent and warrant that I am the sole author of the Work and that I have the right and power to make this grant. I make no other express or implied warranty (including without limitation, in this disclaimer of warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE). Jeffrey DeBeer 12 June 1997 */ On Sat, 7 Jun 1997 21:13:14 -0700 (PDT), you wrote: >Chris Faylor wrote: >[...] >> I am at a loss, however, as to how to debug this. I've built a cygwin.dll >> from scratch with Sergey's patches, but then, how do I debug it? Attempting >> to invoke gdb remotely hangs due to the problem I mentioned above. >[...] > >A future change that needs to be made is to always build cygwin.dll >and libcygwin.a as well as (new) cygwindebug.dll and libcygwindebug.a. >Everything other than gdb would get linked against cygwin.dll whereas >gdb would be linked against cygwindebug.dll. > >So if you need to debug a non-functional cygwin.dll, you could use any >previously working gdb since it would depend on a working cygwin.dll. >Alternatively, we could somehow statically link the code inside the >cygwin.dll inside gdb. > >-- >Geoffrey Noer >noer AT cygnus DOT com >- >For help on using this list (especially unsubscribing), send a message to >"gnu-win32-request AT cygnus DOT com" with one line of text: "help". > ----=_33a2c7cf31032108aad679.MFSBCHJLHS Content-Type: application/octet-stream; name=static.dif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=static.dif ZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL01ha2VmaWxlLmluIC4vTWFrZWZpbGUuaW4KLS0tIC4u L2Nkay93aW5zdXAvTWFrZWZpbGUuaW4JVGh1IE1heSAwMSAxMDo0NDo0MyAxOTk3CisrKyAuL01h a2VmaWxlLmluCUZyaSBKdW4gMTMgMDk6Mjg6MzUgMTk5NwpAQCAtMzgsMTIgKzM4LDEzIEBACiBJ TlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFM TF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfRElSUyA9IEBJTlNUQUxMQCAt ZAogCiBDQyA9IEBDQ0AKICMgRklYTUU6IFdoaWNoIGlzIGl0LCBDQyBvciBDQ19GT1JfVEFSR0VU PwogQ0NfRk9SX1RBUkdFVCA9ICQoQ0MpCi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1hYRkxBR1MgPSBA Q1hYRkxBR1NACitDRkxBR1MgPSBAQ0ZMQUdTQCAtZworQ1hYRkxBR1MgPSBAQ1hYRkxBR1NAIC1n CiAKIElOQ0xVREVTID0gLUkuL21zaW5jbHVkZSAtSSQoc3JjZGlyKS9pbmNsdWRlIC1JJChzcmNk aXIpIC1JJChzcmNkaXIpLy4uL2xpYnN0ZGMrKy9zdGwgLUkkKHNyY2RpcikvLi4vbGliaW8gLUku Li9saWJpbyAtSSQoc3JjZGlyKS8uLi9uZXdsaWIvbGliYy9pbmNsdWRlIC1ub3N0ZGluYysrCiAK QEAgLTc0LDcgKzc1LDggQEAKIAlBUj0iJChBUikiIFwKIAlSQU5MSUI9IiQoUkFOTElCKSIgXAog CUxEPSIkKExEKSIgXAotCURMTFRPT0w9IiQoRExMVE9PTCkiCisJRExMVE9PTD0iJChETExUT09M KSIgXAorCXByZWZpeD0iJChwcmVmaXgpIgogCiAKICMgVGhpcyBpcyB0aGUgZmluYWwgbmFtZSBv ZiB0aGUgY3lnd2luLmRsbC4KQEAgLTk2LDYgKzk4LDcgQEAKIExJQklCRVJUWU9TPS4uL2xpYmli ZXJ0eS9nZXRvcHQubyAuLi9saWJpYmVydHkvZ2V0b3B0MS5vCiAKIExJQkNPUz1saWJjY3J0MC5v IGxpYmNjdHlwZS5vIGxpYmNlcnIubyBsaWJjbWFpbi5vICQoTElCSUJFUlRZT1MpCitMSUJHT1M9 JChmaWx0ZXItb3V0IGxpYmNjcnQwLm8sJChMSUJDT1MpKQogCiAjIEJ1aWxkIGFzIG1hbnkgLmEg ZmlsZXMgYXMgd2UgaGF2ZSAuZGVmIGZpbGVzCiAKQEAgLTE1MiwyNyArMTU1LDM5IEBACiByZWFk bWUuaW5mbzokKHNyY2RpcikvZG9jL3JlYWRtZS50ZXhpbmZvCiAJJChNQUtFSU5GTykgLUkkKHNy Y2RpcikvZG9jICAkPAogCi1pbnN0YWxsOiAkKFRIRUlSTElCUykgJChMSUJOQU1FKSBuZXctJChE TExOQU1FKSByZWFsLWhlYWRlcnMKK2luc3RhbGwtc3RhdGljOiBsaWJjeWd3aW5fZy5hCisJJChJ TlNUQUxMX0RBVEEpICQ8ICQodG9vbGRpcikvbGliLyQ8CisKK2luc3RhbGwtdGhlaXJsaWJzOiAk KFRIRUlSTElCUykgJChMSUJOQU1FKQogCWZvciBpIGluICQoVEhFSVJMSUJTKSAkKExJQk5BTUUp OyBkbyBcCiAJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJCh0b29sZGlyKS9saWIvJCRpIDsgXAogCWRv bmUKKwlzdHJpcC5leGUgLS1zdHJpcC1kZWJ1ZyAkKHRvb2xkaXIpL2xpYi8kKExJQk5BTUUpCisK K2luc3RhbGwtZGxsOiBuZXctJChETExOQU1FKQogCWZvciBpIGluICQoRExMTkFNRSk7IGRvIFwK LQkgICQoSU5TVEFMTF9EQVRBKSBuZXctJCRpICQodG9vbGRpcikvbGliLyQkaSA7IFwKIAkgIGJp bm5hbWU9YHQ9JyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknOyBlY2hvICIkJGkiIHwgc2VkIC1l ICQkdGAgOyBcCiAJICBlY2hvICJwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSQocHJvZ3JhbV90cmFu c2Zvcm1fbmFtZSksIGk9JCRpLCBiaW5uYW1lPSQkYmlubmFtZSI7IFwKIAkgIHJtIC1mICQoYmlu ZGlyKS8kJGJpbm5hbWUgOyBcCi0JICBsbiAkKHRvb2xkaXIpL2xpYi8kJGkgJChiaW5kaXIpLyQk YmlubmFtZSA+L2Rldi9udWxsIDI+JjEgfHwgJChJTlNUQUxMX0RBVEEpIG5ldy0kJGkgJChiaW5k aXIpLyQkYmlubmFtZSA7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSBuZXctJCRpICQoYmluZGlyKS8k JGJpbm5hbWUgOyBcCiAJZG9uZQorCWZvciBpIGluICQoRExMTkFNRSk7ZG8gdXRpbHMvc3RyaXBk bGwgJChiaW5kaXIpLyQkaTtkb25lCisKK2luc3RhbGwtcmVhbC1oZWFkZXJzOiByZWFsLWhlYWRl cnMKIAlmb3Igc3ViIGluIGluY2x1ZGUgaW5jbHVkZS9hcnBhIGluY2x1ZGUvYXNtIGluY2x1ZGUv V2luZG93czMyIFwKIAkgICBpbmNsdWRlL2N5Z3dpbjMyIGluY2x1ZGUvbmV0IGluY2x1ZGUvbmV0 aW5ldCBpbmNsdWRlL3N5cyA7IGRvIFwKKwkJJChJTlNUQUxMX0RJUlMpICQodG9vbGRpcikvJCRz dWI7IFwKIAkJZm9yIGkgaW4gJChzcmNkaXIpLyQkc3ViLyouaCA7IGRvIFwKIAkJICAkKElOU1RB TExfREFUQSkgJCRpICQodG9vbGRpcikvJCRzdWIvYGJhc2VuYW1lICQkaWAgOyBcCiAJCWRvbmUg OyBcCiAJZG9uZQorCitpbnN0YWxsLXV0aWxzOgogCXJvb3RtZT1gcHdkYCA7IGV4cG9ydCByb290 bWUgOyBcCiAJcm9vdHNyYz1gKGNkICQoc3JjZGlyKSA7IHB3ZClgIDsgZXhwb3J0IHJvb3RzcmMg OyBcCiAJY2QgdXRpbHM7ICQoTUFLRSkgaW5zdGFsbCAkKEZMQUdTX1RPX1BBU1MpCiAKK2luc3Rh bGw6IGluc3RhbGwtdGhlaXJsaWJzIGluc3RhbGwtZGxsIGluc3RhbGwtcmVhbC1oZWFkZXJzIGlu c3RhbGwtdXRpbHMKIAkjIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91J3ZlIG1ha2VkIHN0bXBf bXNfaW5jbHVkZSBiZWxvdy4KIAkjCWlmIFsgLWUgbXNfaW5jbHVkZS93aW5kb3dzLmggXSA7IHRo ZW4gIFwKIAkjCQlmb3IgaSBpbiBtc19pbmNsdWRlLyouaCA7IGRvIFwKQEAgLTI1NCw2ICsyNjks NyBAQAogIyB3ZSBidWlsZCBvdXIgb3duIGltcG9ydCBsaWJyYXJ5IHRvIGdldCBhdCB0aGUgd2lu c29jayBmdW5jdGlvbnMKICMgYnkgZGlmZmVyZW50IG5hbWVzLgogCitTVEFUSUNPUz0kKGZpbHRl ci1vdXQgaW5pdC5vIG1hbGxvYy5vIGRjcnQwLm8sJChETExfT0ZJTEVTKSkKICNsaWJteXdpbnNv Y2suYTpteXdpbnNvY2suZGVmCiAjCSQoRExMVE9PTCkgLS1hcz0kKEFTKSAtayAtLWRsbG5hbWUg d3NvY2szMi5kbGwgLS1vdXRwdXQtbGliIGxpYm15d2luc29jay5hIC0tZGVmICQ8CiAKQEAgLTI5 MSw4ICszMDcsMTggQEAKIAkkKERMTFRPT0wpICQoRExMX1NUVUZGKQogCSQoTEQpIGN5Z3dpbi5l eHAgJChMRF9TVFVGRikKIAorbGliY3lnd2luX2cuYTogZ2NydDAubyBsaWJjeWd3aW4uYSBuZXct JChETExOQU1FKQorCSQoQVIpIGNydnMgbGliY3lnd2luX2cuYSAkKExJQkdPUykgZ2NydDAubyAk KFNUQVRJQ09TKSBnbG9iL2dsb2IubyBnbG9iL2ZubWF0Y2gubworCiBjbGVhbjoKIAktcm0gLWYg Ki5vICouZGxsICouYSAqLmV4cCBqdW5rICouYmFzZQorCSQoTUFLRSkgLUMgZ2xvYiAkQAorCSQo TUFLRSkgLUMgdXRpbHMgJEAKKworZGlzdGNsZWFuOiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZSBj b25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGN5Z3dpbi5kZWYKKwkkKE1BS0Up IC1DIGdsb2IgJEAKKwkkKE1BS0UpIC1DIHV0aWxzICRACiAKIG1haW50YWluZXItY2xlYW4gcmVh bGNsZWFuOiBjbGVhbiAKIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWlu dGFpbmVycyB0byB1c2U7IgpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvY3lnd2luLmRpbiAuL2N5 Z3dpbi5kaW4KLS0tIC4uL2Nkay93aW5zdXAvY3lnd2luLmRpbglGcmkgTWF5IDAyIDExOjU3OjQ3 IDE5OTcKKysrIC4vY3lnd2luLmRpbglGcmkgSnVuIDEzIDA2OjMyOjEzIDE5OTcKQEAgLTk0NSw4 ICs5NDUsNiBAQAogX2Nsb3NlbG9nID0gY2xvc2Vsb2cKIG9wZW5sb2cKIF9vcGVubG9nID0gb3Bl bmxvZwotdGdldGVudAotX3RnZXRlbnQgPSB0Z2V0ZW50CiB2aGFuZ3VwCiBfdmhhbmd1cCA9IHZo YW5ndXAKIG5pY2UKZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL2djcnQwLmNjIC4vZ2NydDAuY2MK LS0tIC4uL2Nkay93aW5zdXAvZ2NydDAuY2MJVGh1IEp1biAxMiAwODo1MjoyMSAxOTk3CisrKyAu L2djcnQwLmNjCUZyaSBKdW4gMTMgMDk6MDQ6NDEgMTk5NwpAQCAtMCwwICsxLDgxMyBAQAorLyog Z2NydDAuY2MgLS0gYSBiaXQgb2YgY3J0MCB0aGF0IGxpdmVzIGluIGxpYmN5Z3dpbl9nLmEKKwor ICAgQ29weXJpZ2h0IDE5OTYsIDE5OTcgQ3lnbnVzIFNvbHV0aW9ucworCitUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs ZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisv KiBtb2RpZmllZCBmcm9tIGRjcnQwLmNjIGxpYmNjcnQwLmNjIGFuZCBtYWxsb2MuY2MgYnkKKygq amVmZmRiQG5ldHpvbmUubm9zcGFtLmNvbSkgTWlrZXkgcmVtb3ZlICombm9zcGFtIHRvIGNvbnRh Y3QKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xBUkFUSU9OCisgCitJLCBKZWZm cmV5IERlQmVlciwgZ3JhbnQgdG8gdGhlIHB1YmxpYyBkb21haW4gbXkgZW50aXJlIHJpZ2h0LCB0 aXRsZSwKK2FuZCBpbnRlcmVzdCAoaW5jbHVkaW5nIGFsbCByaWdodHMgdW5kZXIgY29weXJpZ2h0 KSBpbiBteSBjaGFuZ2VzIGFuZAorZW5oYW5jZW1lbnRzIHRvIHRoZSBDeWd3aW4zMiBsaWJyYXJ5 LiBUaGVzZSBjaGFuZ2VzIGFuZCBlbmhhbmNlbWVudHMgYXJlCitoZXJlaW4gY2FsbGVkIHRoZSAi V29yayIuIFRoZSBXb3JrIGdyYW50ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4gc2hhbGwKK2Fsc28g aW5jbHVkZSBhbnkgZnV0dXJlIHJldmlzaW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBlbmhhbmNl bWVudHMKK2hlcmVhZnRlciBtYWRlIGJ5IG1lLiAKKworSSAgcmVwcmVzZW50IGFuZCB3YXJyYW50 IHRoYXQgSSBhbSB0aGUgc29sZSBhdXRob3Igb2YgdGhlIFdvcmsgYW5kIHRoYXQKK0kgaGF2ZSB0 aGUgcmlnaHQgYW5kIHBvd2VyIHRvIG1ha2UgdGhpcyBncmFudC4gSSBtYWtlIG5vIG90aGVyIGV4 cHJlc3MKK29yIGltcGxpZWQgd2FycmFudHkgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24s IGluIHRoaXMgZGlzY2xhaW1lciBvZgord2FycmFudHksIGFueSB3YXJyYW50eSBvZiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFKS4KKworSmVmZnJl eSBEZUJlZXIKKzEyIEp1bmUgMTk5NworKi8KKworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxyZWVudC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor I2luY2x1ZGUgIndpbnN1cC5oIgorI2luY2x1ZGUgImdsb2IvZ2xvYi5oIgorI2luY2x1ZGUgImV4 Y2VwdGlvbnMuaCIKKworcGVyX3Byb2Nlc3MgKnU7CisKK2V4dGVybiAiQyIKK3sKKyAgLyogVXNl ZCBmb3IgdGhlIGxpYmMgc3R1ZmYgd2hpY2ggdXNlcyBlbnZpcm9uLAorICAgICB3ZSBjb3B5IHRo aXMgaW50byB0aGUgcmVhbCBjcnQwLiAgKi8KKyAgY2hhciAqKmVudmlyb247CisgIC8qIF9fcHJv Z25hbWUgdXNlZCBpbiBnZXRvcHQgZXJyb3IgbWVzc2FnZSAqLworICBjaGFyICpfX3Byb2duYW1l OworICBzdHJ1Y3QgX3JlZW50IHJlZW50X2RhdGE7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGN5 Z3dpbl9kbGxfdmVyc2lvbl9tYWpvciA9IENZR1dJTl9ETExfVkVSU0lPTl9NQUpPUjsKK3N0YXRp YyBjb25zdCBpbnQgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yID0gQ1lHV0lOX0RMTF9WRVJTSU9O X01JTk9SOworc3RhdGljIGNoYXIgKnRpdGxlOworCisKKy8qIHRoaXMgaXMgYSBob3JyaWJsZSBo YWNrIHRvIGF2b2lkIGNoYW5naW5nIHBlcl9wcm9jZXNzICovCisKK3ZvaWQgKgorbWFsbG9jIChz aXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcmVzOworICByZXMgPSBfbWFsbG9jX3IgKF9pbXB1cmVf cHRyLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZAorZnJlZSAodm9pZCAqcCkKK3sK KyAgX2ZyZWVfciAoX2ltcHVyZV9wdHIsIHApOworfQorCit2b2lkICoKK3JlYWxsb2MgKHZvaWQg KnAsIHNpemVfdCBzaXplKQoreworICB2b2lkICpyZXM7CisgIHJlcyA9IF9yZWFsbG9jX3IgKF9p bXB1cmVfcHRyLCBwLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZAorZXhwb3J0X2Zy ZWUgKHZvaWQgKnApCit7CisgIF9mcmVlX3IgKF9pbXB1cmVfcHRyLCBwKTsKK30KKwordm9pZCAq CitleHBvcnRfbWFsbG9jIChpbnQgc2l6ZSkKK3sKKyAgdm9pZCAqcmVzOworICByZXMgPSBfbWFs bG9jX3IgKF9pbXB1cmVfcHRyLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZCAqCitl eHBvcnRfcmVhbGxvYyAodm9pZCAqcCwgaW50IHNpemUpCit7CisgIHZvaWQgKnJlczsKKyAgcmVz ID0gX3JlYWxsb2NfciAoX2ltcHVyZV9wdHIsIHAsIHNpemUpOworICByZXR1cm4gcmVzOworfQor CisvKiB3ZSBuZWVkIHRoaXMgaW5zdGVhZCB0byByZXBsYWNlIHNlbGVjdCBpbiBjeWd3aW4uZXhw ICovCitleHRlcm4gIkMiIHsKKworZXh0ZXJuIGludCBjeWd3aW4zMl9zZWxlY3QoaW50LGZkX3Nl dCAqLGZkX3NldCAqLGZkX3NldCAqLHN0cnVjdCB0aW1ldmFsICopOworCitpbnQgc2VsZWN0IChp bnQgbiwgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAg ICAgICAgZmRfc2V0ICpleGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICp0bykKK3sKK3JldHVybiBj eWd3aW4zMl9zZWxlY3QgKG4sIHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMsIHRvKTsKK30K KworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgbWljcm9zb2Z0IHN0eWxl IGVudiBsaXN0LiAgCisgICAKKyAgIFRoZSAiZW52aXJvbm1lbnQgYmxvY2siIGlzIGEgbnVsbCB0 ZXJtaW5hdGVkIGJsb2NrIG9mIHN0cmluZ3MKKyAgICh0d28gbnVsbHMgdGVybWluYXRlIHRoZSBi bG9jaykuICAqLworCitzdGF0aWMgaW50CitudW1fbXNfZW52X3ZhcnMgKGNvbnN0IGNoYXIgKnJh d2VudikKK3sKKyAgaW50IGkgPSAwOworICBpbnQgY291bnQgPSAwOworICB3aGlsZSAoMSkKKyAg ICB7CisgICAgICBpZiAocmF3ZW52W2ldID09IDApCisJeworCSAgY291bnQrKzsKKwkgIGlmIChy YXdlbnZbaSArIDFdID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGkrKzsKKyAgICB9Cisg IHJldHVybiBjb3VudDsKK30KKworLyogQnVpbGQgYXJndiBmcm9tIHN0cmluZyBwYXNzZWQgZnJv bSBXaW5kb3dzLiAgKi8KKworc3RhdGljIHZvaWQKK2J1aWxkX2FyZ3YgKGNoYXIgKmluLCBjaGFy ICoqb3V0LCBpbnQgbGVuKQoreworICBpbnQgY291bnQgPSAwOworICBjaGFyICplID0gaW4gKyBs ZW47CisgIGNoYXIgKnM7CisKKyAgZm9yIChzID0gaW47IHMgPCBlOyBzKyspCisgICAgeworICAg ICAgZGVidWdfcHJpbnRmICgiYnVpbGRfYXJndjogZmlsbCBpdGVyYXRpb24gJXNcbiIsIHMpOwor CisgICAgICAvKiBEZWxldGUgbGVhZGluZyBzcGFjZXMuICAqLworICAgICAgd2hpbGUgKCpzID09 ICcgJyB8fCAqcyA9PSAnXHQnKQorCXMrKzsKKworICAgICAgaWYgKCEqcykKKwlicmVhazsKKwor ICAgICAgLyogR290IHRvIGFuIGFyZy4gICovCisKKyAgICAgIGNoYXIgKmQ7CisgICAgICBvdXRb Y291bnRdID0gZCA9IHM7CisgICAgICAKKyAgICAgIGlmICgqcyA9PSAnIicpCisJeworCSAgcysr OworCSAgd2hpbGUgKHNbMF0gJiYgKHNbMF0gIT0gJyInIHx8IChzWzBdID09ICciJyAmJiBzWzFd ID09ICciJykpKQorCSAgICB7CisJICAgICAgaWYgKCpzPT0gJyInKQorCQlzKys7CisJICAgICAg KmQrKyA9ICpzKys7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKCpzICYm ICpzICE9ICcgJyAmJiAqcyAhPSAnXHQnKQorCSAgICB7CisJICAgICAgKmQrKyA9ICpzKys7CisJ ICAgIH0KKwl9CisgICAgICAqZCsrID0gMDsKKyAgICAgIGRlYnVnX3ByaW50ZiAoImJ1aWxkX2Fy Z3Y6IGFyZ3ZbJWRdPSVzXG4iLCBjb3VudCwgb3V0W2NvdW50XSk7CisgICAgICBjb3VudCsrOwor ICAgIH0KKyAgb3V0W2NvdW50XSA9IDA7CisKKyAgLyogRklYTUU6IFZlcmlmeSBjb3VudCA9PSBs ZW4/ICAqLworfQorCisvKiBDb21wdXRlIGFyZ2MuCisgICBXaW5kb3dzIHBhc3NlcyBqdXN0IGEg c3RyaW5nIHdoaWNoIHdlIG5lZWQgdG8gYnJlYWsgdXAgaW50byBhcmdjL2FyZ3YuCisgICBUaGlz IHBhc3MgY29tcHV0ZXMgYXJnYy4gICovCisKK3N0YXRpYyBpbnQKK2NvbXB1dGVfYXJnYyAoY2hh ciAqaW4pCit7CisgIGNoYXIgKnNyYzsKKyAgaW50IGNvdW50PTA7CisKKyAgZGVidWdfcHJpbnRm ICgiY29tcHV0ZV9hcmdjICglcylcbiIsIGluKTsKKworICBmb3IgKHNyYyA9IGluOyAqc3JjOyBz cmMrKykKKyAgICB7CisgICAgICB3aGlsZSAoKnNyYyA9PSAnICcgfHwgKnNyYyA9PSAnXHQnICkK KwlzcmMrKzsKKyAgICAgIAorICAgICAgaWYgKCEqc3JjKQorCWJyZWFrOworICAgICAgCisgICAg ICBkZWJ1Z19wcmludGYgKCJjb21wdXRlX2FyZ2M6IHNyYyBpcyBub3cgJXNcbiIsIHNyYyk7Cisg ICAgICBpZiAoKnNyYyA9PSAnIicpCisJeworCSAgc3JjKys7CisJICB3aGlsZSAoc3JjWzBdKQor CSAgICB7CisJICAgICAgaWYgKHNyY1swXSA9PSAnIicpIAorCQl7CisJCSAgc3JjKys7CisJCSAg aWYgKHNyY1swXSAhPSAnIicpIGJyZWFrOworCQl9CisJICAgICAgCisJICAgICAgc3JjKys7CisJ ICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKCpzcmMgIT0gJyAnICYmICpzcmMg IT0gJ1x0JyAmJiAqc3JjICE9IDApCisJICAgIHNyYysrOworCX0KKyAgICAgIGNvdW50Kys7Cisg ICAgfQorICBkZWJ1Z19wcmludGYgKCJjb21wdXRlX2FyZ2M6IGNvdW50IGlzICVkXG4iLCBjb3Vu dCk7CisgIHJldHVybiBjb3VudDsKK30KKworLyogUGVyZm9ybSB2YXJpb3VzIHN0YXJ0IHVwIHNh bml0eSBjaGVja3MuICAqLworCitzdGF0aWMgdm9pZAorY2hlY2tvdXQgKCkKK3sKKyNpZmRlZiBf X1BQQ19fCisgIGptcF9idWYgeDsKKworICBpZiAoc2l6ZW9mICh4KSAhPSAzMio4KQorICAgIHsK KyAgICAgIHNtYWxsX3ByaW50ZiAoIkNvbmZpZ3VyYXRpb24gZXJyb3Igd2l0aCBzZXRqbXBcbiIp OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZ2xvYmlmeSAoaW50ICphY3AsIGNo YXIgKioqYXZwKQoreworICAvKiBZZXMgSSBrbm93IEkgY291bGQgdXNlIHJlZmVyZW5jZXMsIGJ1 dCB0aGV5IGhpZGUgdGhlIHNpZGUgZWZmZWN0cyAqLworICBpbnQgYWMgPSAqYWNwOworICBjaGFy ICoqYXYgPSAqYXZwOworICBnbG9iX3QgZ2xvYnNbYWNdOworICBpbnQgcmNbYWNdOworICBpbnQg aTsKKyAgaW50IG5ld2FjID0gMDsKKyAgaW50IGRvbmVzb21ldGhpbmcgPSAwOworCisgIGZvciAo aSA9IDA7IGkgPCBhYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJwYnJrIChhdltpXSwgIj8q WyIpICE9IE5VTEwpCisJeworCSAgZ2xvYnNbaV0uZ2xfb2ZmcyA9IDA7CisJICByY1tpXSA9IGds b2IgKGF2W2ldLCAKKwkJCUdMT0JfTk9DSEVDSyB8IEdMT0JfTk9FU0NBUEUsCisJCQkwLAorCQkJ Jmdsb2JzW2ldKTsKKwkgIG5ld2FjICs9IHJjW2ldID09IDAgPyBnbG9ic1tpXS5nbF9wYXRoYyA6 IDE7CisJICBkb25lc29tZXRoaW5nID0gcmNbaV0gPT0gMDsKKwl9CisgICAgICBlbHNlCisJewor CSAgcmNbaV0gPSAtMTsgLyogZ2xvYiBub3QgY2FsbGVkICovCisJICArK25ld2FjOworCX0KKyAg ICB9CisgIAorICBpZiAoZG9uZXNvbWV0aGluZykKKyAgICB7CisgICAgICBjaGFyICoqbmV3YXYg PSAoY2hhciAqKiltYWxsb2MgKHNpemVvZiAoY2hhciAqKikgKiAobmV3YWMgKyAxKSk7CisgICAg ICBpbnQgZCA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgYWM7IGkrKykKKwl7CisJICBpZiAo cmNbaV0gPT0gMCkKKwkgICAgeworCSAgICAgIGRlYnVnX3ByaW50ZiAoImdsb2I6IGAlcycgY29u dmVydGVkIHRvOiIsIGF2W2ldKTsKKwkgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdsb2JzW2ld LmdsX3BhdGhjOyBqKyspCisJCXsKKwkJICBkZWJ1Z19wcmludGYgKCIgJXMiLCBnbG9ic1tpXS5n bF9wYXRodltqXSk7CisJCSAgbmV3YXZbZCsrXSA9IGdsb2JzW2ldLmdsX3BhdGh2W2pdOworCQl9 CisJICAgICAgZGVidWdfcHJpbnRmICgiXG4iKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJ ICAgICAgZGVidWdfcHJpbnRmICgiZ2xvYjogYCVzJyBub3QgY29udmVydGVkLCBnbG9iIHJjID0g MHgleFxuIiwKKwkJCSAgICBhdltpXSwgcmNbaV0pOworCSAgICAgIG5ld2F2W2QrK10gPSBhdltp XTsKKwkgICAgfQorCX0KKyAgICAgIG5ld2F2W2RdID0gMDsKKyAgICAgICphY3AgPSBuZXdhYzsK KyAgICAgICphdnAgPSBuZXdhdjsKKyAgICB9Cit9CisKKy8qIFV0aWxpdHkgdG8gcHJvYmUgdGhl IHN0YWNrLiAgKi8KKworc3RhdGljIHZvaWQKK3JlY3VyICh2b2lkICpwLCB2b2lkICopCit7Cisg IGNoYXIgYlsxMDAwXTsKKyAgaW50IHg7CisKKyAgaWYgKCZ4ID4gcCkKKyAgICByZWN1ciAocCwg Yik7Cit9CisKKy8qIExpc3Qgb2YgbmFtZXMgd2hpY2ggYXJlIGNvbnZlcnRlZCBmcm9tIGRvcyB0 byB1bml4CisgICBvbiB0aGUgd2F5IGluIGFuZCBiYWNrIGFnYWluIG9uIHRoZSB3YXkgb3V0Lgor CisgICBQQVRIIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSBDcmVhdGVQcm9jZXNzIHVzZXMgaXQg YW5kIGdkYiB1c2VzCisgICBDcmVhdGVQcm9jZXNzLiAgSGF2aW5nIHRvbyBtYW55IG1vcmUgaGVy ZSBpcyBkdWJpb3VzLiAgKi8KKworY29uc3QgY2hhciAqY29udl9wYXRoX25hbWVzW10gPQorewor ICAiUEFUSD0iLAorICAwCit9OworCit2b2lkCitfX2RvX2dsb2JhbF9kdG9ycyAoKQoreworICBp bnQgaTsKKyAgdm9pZCAoKipwZnVuYykoKSA9IHUtPmR0b3JzOworCisgIC8qIFJ1biBkdG9ycyBi YWNrd2FyZHMsIHNvIHNraXAgdGhlIGZpcnN0IGVudHJ5IGFuZCBmaW5kIGhvdyBtYW55CisgICAg IHRoZXJlIGFyZSwgdGhlbiBydW4gdGhlbS4gICovCisgIAorICBpZiAocGZ1bmMpIAorICAgIHsK KyAgICAgIGZvciAoaSA9IDE7IHBmdW5jW2ldOyBpKyspIAorCTsKKyAgICAgIGZvciAoaSA9IGkg LSAxOyBpID4gMDsgaS0tKQorCXsKKwkgIChwZnVuY1tpXSkoKTsKKwl9CisgICAgfQorfQorCit2 b2lkCitfX2RvX2dsb2JhbF9jdG9ycyAoKQoreworICBpbnQgaTsKKyAgdm9pZCAoKipwZnVuYyko KSA9IHUtPmN0b3JzOworICAKKyAgZm9yIChpID0gMTsgcGZ1bmNbaV07IGkrKykKKyAgICB7Cisg ICAgICAocGZ1bmNbaV0pKCk7CisgICAgfQorICBhdGV4aXQgKF9fZG9fZ2xvYmFsX2R0b3JzKTsK K30KKwordm9pZAorX19tYWluICgpCit7CisgIGlmICghIHUtPnJ1bl9jdG9yc19wKQorICAgIHsK KyAgICAgIHUtPnJ1bl9jdG9yc19wID0gMTsKKyAgICAgIF9fZG9fZ2xvYmFsX2N0b3JzICgpOwor ICAgIH0KK30KKwordm9pZAorX2V4aXQgKGludCBuKQoreworICBzeXNjYWxsX3ByaW50ZiAoIl9l eGl0ICglZClcbiIsIG4pOworICBzeXNjYWxsX3ByaW50ZiAoIlRlcm1pbmF0aW5nLlxuIik7Cisg IC8qIHJlc3RvcmUgY29uc29sZSB0aXRsZSAqLworICBpZiAodGl0bGUpCisgICAgU2V0Q29uc29s ZVRpdGxlICh0aXRsZSk7CisKKyAgaWYodS0+c2VsZi0+cGlkICE9IHUtPnNlbGYtPnBwaWQpCisg IGtpbGwodS0+c2VsZi0+cHBpZCwgU0lHQ0hMRCk7CisgIGNsb3NlX2FsbF9maWxlcyAoKTsKKyAg dS0+c2VsZi0+dGVybWluYXRlICgpOworICBzaGFyZWRfdGVybWluYXRlICgpOworICBmb3JrX3Rl cm1pbmF0ZSAoKTsKKworICAvKiBNdXN0IGJlIGRvbmUgbGFzdCAqLworICB1LT5zZWxmLT5yZWNv cmRfZGVhdGgoKTsKKworICBkZXN0cm95X3BpbmZvX2xvY2soKTsKKyAgRXhpdFByb2Nlc3MgKG4p OworfQorCit2b2lkCithcGlfZmF0YWwgKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgc21hbGxfcHJp bnRmICgiY3lnd2luOiAlc1xuIiwgbXNnKTsKKyAgLyogV2UgYXJlIGdvaW5nIGRvd24gd2l0aG91 dCBtZXJjeSAtIG1ha2Ugc3VyZSB3ZSByZXNldAorICAgICBvdXIgaW51c2VfcC4gKi8KKyAgaWYo KHUgIT0gMCkgJiYgKHUtPnNlbGYgIT0gMCkpCisgICAgdS0+c2VsZi0+cmVjb3JkX2RlYXRoX25v bG9jaygpOworCisgIEV4aXRQcm9jZXNzICgxKTsKK30KKworCisvKiBXcmFwIHRoZSByZWFsIG9u ZSwgb3RoZXJ3aXNlIGdkYiBnZXRzIGNvbmZ1c2VkIGFib3V0CisgICB0d28gc3ltYm9scyB3aXRo IHRoZSBzYW1lIG5hbWUsIGJ1dCBkaWZmZXJlbnQgYWRkcmVzc2VzLgorCisgICBVUFRSIGlzIGEg cG9pbnRlciB0byBnbG9iYWwgZGF0YSB0aGF0IGxpdmVzIG9uIHRoZSBsaWJjIHNpZGUgb2YgdGhl CisgICBsaW5lIFtpZiBvbmUgZGlzdGluZ3Vpc2hlcyB0aGUgYXBwbGljYXRpb24gZnJvbSB0aGUg ZGxsXS4gICovCisKKy8qIFRoaXMgaXMgbmVlZGVkIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBp bXBvcnQgc3R1ZmYgKi8KK2FzbSAoIi5zZWN0aW9uIC5pZGF0YSQzXG4iICIubG9uZyAwLDAsMCww LDAiKTsKKworLyogRm9yIGZvcmsgKi8KKyNpZmRlZiBfUE9XRVIKK2V4dGVybiBjaGFyIF9fZGF0 YV9zdGFydF9fOworZXh0ZXJuIGNoYXIgX19kYXRhX2VuZF9fOworZXh0ZXJuIGNoYXIgX19ic3Nf c3RhcnRfXzsKK2V4dGVybiBjaGFyIF9fYnNzX2VuZF9fOworI2Vsc2UKK2V4dGVybiBjaGFyIF9k YXRhX3N0YXJ0X187CitleHRlcm4gY2hhciBfZGF0YV9lbmRfXzsKK2V4dGVybiBjaGFyIF9ic3Nf c3RhcnRfXzsKK2V4dGVybiBjaGFyIF9ic3NfZW5kX187CisjZW5kaWYKKworZXh0ZXJuICJDIiAK K3sKKy8qICBjaGFyICoqZW52aXJvbjsgKi8KKyAgdm9pZCBjeWd3aW5fY3J0MCgpOworICBleHRl cm4gdm9pZCAoKl9fQ1RPUl9MSVNUX18pKHZvaWQpOworICBleHRlcm4gdm9pZCAoKl9fRFRPUl9M SVNUX18pKHZvaWQpOworICBpbnQgbWFpbiAoaW50LCBjaGFyICoqLCBjaGFyICoqKTsKKyAgc3Ry dWN0IF9yZWVudCAqX2ltcHVyZV9wdHI7CisgIGludCBfZm1vZGU7Cit9OworCitzdGF0aWMgcGVy X3Byb2Nlc3MgY3lnd2luX3N0YXR1OworCisvKiBTZXQgdXAgcG9pbnRlcnMgdG8gdmFyaW91cyBw aWVjZXMgc28gdGhlIGRsbCBjYW4gdGhlbiB1c2UgdGhlbSwKKyAgIGFuZCB0aGVuIGp1bXAgdG8g dGhlIGRsbC4gICovCisKK3ZvaWQgY3lnd2luX2NydDAoKQoreworICAvKiBUaGlzIGlzIHVzZWQg dG8gcmVjb3JkIHdoYXQgdGhlIGluaXRpYWwgc3Agd2FzLiAgVGhlIHZhbHVlIGlzIG5lZWRlZAor ICAgICB3aGVuIGNvcHlpbmcgdGhlIHBhcmVudCdzIHN0YWNrIHRvIHRoZSBjaGlsZCBkdXJpbmcg YSBmb3JrLiAgKi8KKyAgaW50IG9uc3RhY2s7CisKKyAgLyogVGhlIHZlcnNpb24gbnVtYmVycyBh cmUgdGhlIG1haW4gc291cmNlIG9mIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcuCisgICAgIEFzIGEg YmFja3VwIHRvIHRoZW0sIHdlIHVzZSB0aGUgc2l6ZSBvZiB0aGUgcGVyX3Byb2Nlc3Mgc3RydWN0 LiAgKi8KKyAgY3lnd2luX3N0YXR1Lm1hZ2ljX2Jpc2N1aXQgPSBzaXplb2YgKHBlcl9wcm9jZXNz KTsKKworICAvKiBjeWd3aW4uZGxsIHZlcnNpb24gbnVtYmVyIGluIGVmZmVjdCBhdCB0aGUgdGlt ZSB0aGUgYXBwIHdhcyBjcmVhdGVkLiAgKi8KKyAgY3lnd2luX3N0YXR1LnZlcnNpb25fbWFqb3Ig PSBDWUdXSU5fRExMX1ZFUlNJT05fTUFKT1I7CisgIGN5Z3dpbl9zdGF0dS52ZXJzaW9uX21pbm9y ID0gQ1lHV0lOX0RMTF9WRVJTSU9OX01JTk9SOworCisgIGN5Z3dpbl9zdGF0dS5jdG9ycyA9ICZf X0NUT1JfTElTVF9fOworICBjeWd3aW5fc3RhdHUuZHRvcnMgPSAmX19EVE9SX0xJU1RfXzsKKyAg Y3lnd2luX3N0YXR1LmVudnB0ciA9ICZlbnZpcm9uOworICBjeWd3aW5fc3RhdHUuaW1wdXJlX3B0 cl9wdHIgPSAmX2ltcHVyZV9wdHI7CisgIGN5Z3dpbl9zdGF0dS5tYWluID0gJm1haW47CisgIGN5 Z3dpbl9zdGF0dS5mbW9kZV9wdHIgPSAmX2Ztb2RlOworICBjeWd3aW5fc3RhdHUuaW5pdGlhbF9z cCA9IChjaGFyICopICZvbnN0YWNrOworCisgIC8qIFJlbWVtYmVyIHdoYXRldmVyIHRoZSB1c2Vy IGxpbmtlZCBoaXMgYXBwbGljYXRpb24gd2l0aCAtIG9yCisgICAgIHBvaW50IHRvIGVudHJpZXMg aW4gdGhlIGRsbC4gICovCisgIGN5Z3dpbl9zdGF0dS5tYWxsb2MgPSAmbWFsbG9jOyAKKyAgY3ln d2luX3N0YXR1LmZyZWUgPSAmZnJlZTsKKyAgY3lnd2luX3N0YXR1LnJlYWxsb2MgPSAmcmVhbGxv YzsKKworICAvKiBTZXR1cCB0aGUgbW9kdWxlIGhhbmRsZSBzbyBmb3JrIGNhbiBnZXQgdGhlIHBh dGggbmFtZS4gKi8KKyAgY3lnd2luX3N0YXR1Lmhtb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoMCk7 CisKKyAgLyogdmFyaWFibGVzIGZvciBmb3JrICovCisjaWZkZWYgX1BPV0VSCisgIGN5Z3dpbl9z dGF0dS5kYXRhX3N0YXJ0ID0gJl9fZGF0YV9zdGFydF9fOworICBjeWd3aW5fc3RhdHUuZGF0YV9l bmQgPSAmX19kYXRhX2VuZF9fOworICBjeWd3aW5fc3RhdHUuYnNzX3N0YXJ0ID0gJl9fYnNzX3N0 YXJ0X187CisgIGN5Z3dpbl9zdGF0dS5ic3NfZW5kID0gJl9fYnNzX2VuZF9fOworI2Vsc2UKKyAg Y3lnd2luX3N0YXR1LmRhdGFfc3RhcnQgPSAmX2RhdGFfc3RhcnRfXzsKKyAgY3lnd2luX3N0YXR1 LmRhdGFfZW5kID0gJl9kYXRhX2VuZF9fOworICBjeWd3aW5fc3RhdHUuYnNzX3N0YXJ0ID0gJl9i c3Nfc3RhcnRfXzsKKyAgY3lnd2luX3N0YXR1LmJzc19lbmQgPSAmX2Jzc19lbmRfXzsKKyNlbmRp ZgorCisgIC8qIEp1bXAgaW50byB0aGUgZGxsLiAgKi8KK3Blcl9wcm9jZXNzICp1cHRyID0gJmN5 Z3dpbl9zdGF0dTsKKworICBpbnQgYXJnYzsKKyAgY2hhciAqKmFyZ3Y7CisgIGludCBpOworICAv KiBBY2NvcmRpbmcgdG8gb25ub0BzdGFjay51cmMudHVlLm5sLCB0aGUgZXhjZXB0aW9uIGhhbmRs ZXIgcmVjb3JkIG11c3QKKyAgICAgYmUgb24gdGhlIHN0YWNrLiAgKi8KKyAgLyogRklYTUU6IFZl cmlmeSBmb3JrZWQgY2hpbGRyZW4gZ2V0IHRoZWlyIGV4Y2VwdGlvbiBoYW5kbGVyIHNldCB1cCBv ay4gICovCisgIHN0cnVjdCBleGNlcHRpb25fbGlzdCBjeWd3aW5fZXhjZXB0X2VudHJ5OworCisg IC8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZGV2ZWxvcGVycyBkaWRuJ3QgY2hhbmdlIHRo ZSBwZXJfcHJvY2VzcworICAgICBzdHJ1Y3Qgd2l0aG91dCB1cGRhdGluZyBTSVpFT0ZfUEVSX1BS T0NFU1MgW2l0IG1ha2VzIHRoZW0gdGhpbmsgdHdpY2UKKyAgICAgYWJvdXQgY2hhbmdpbmcgaXRd LiAgKi8KKyAgaWYgKHNpemVvZiAocGVyX3Byb2Nlc3MpICE9IFNJWkVPRl9QRVJfUFJPQ0VTUykK KyAgICB7CisgICAgICBzbWFsbF9wcmludGYgKCJwZXJfcHJvY2VzcyBzYW5pdHkgY2hlY2sgZmFp bGVkXG4iKTsKKyAgICAgIEV4aXRQcm9jZXNzICgxKTsKKyAgICB9CisKKyAgLyogTWFrZSBzdXJl IHRoYXQgdGhlIGFwcCBhbmQgdGhlIGRsbCBhcmUgaW4gc3luYy4KKyAgICAgbWFnaWNfYmlzY3Vp dCAhPSAwIGlmIHVzaW5nIHRoZSBvbGQgc3R5bGUgdmVyc2lvbiBudW1iZXJpbmcgc2NoZW1lLiAg Ki8KKyAgaWYgKHVwdHItPm1hZ2ljX2Jpc2N1aXQgIT0gU0laRU9GX1BFUl9QUk9DRVNTCisgICAg ICB8fCB1cHRyLT52ZXJzaW9uX21ham9yICE9IGN5Z3dpbl9kbGxfdmVyc2lvbl9tYWpvcikKKyAg ICB7CisgICAgICBzbWFsbF9wcmludGYgKCJDWUdXSU4gRExMIGFuZCBBUFAgb3V0IG9mIHN5bmMs IHlvdSdsbCBoYXZlIHRvIHJlbGluaywgc29ycnkuXG4iKTsKKyAgICAgIHNtYWxsX3ByaW50ZiAo Im1hZ2ljIG51bWJlcnMgKGFwcCAlZCwgZGxsICVkKVxuIiwKKwkJICAgIHVwdHItPm1hZ2ljX2Jp c2N1aXQsIDApOworICAgICAgaWYgKHVwdHItPm1hZ2ljX2Jpc2N1aXQgPT0gMCkKKwlzbWFsbF9w cmludGYgKCJjeWd3aW4gdmVyc2lvbiBudW1iZXJzIChhcHAgJWQuJWQsIGRsbCAlZC4lZClcbiIs CisJCSAgICAgIHVwdHItPnZlcnNpb25fbWFqb3IsIHVwdHItPnZlcnNpb25fbWlub3IsCisJCSAg ICAgIGN5Z3dpbl9kbGxfdmVyc2lvbl9tYWpvciwgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yKTsK KyAgICAgIEV4aXRQcm9jZXNzICgxKTsKKyAgICB9CisKKyAgLyogU2V0IHRoZSBsb2NhbCBjb3B5 IG9mIHRoZSBwb2ludGVyIGludG8gdGhlIHVzZXIgc3BhY2UuICAqLworICB1ID0gdXB0cjsKKwor ICAvKiBOYXN0eSBzdGF0aWMgc3R1ZmYgbmVlZGVkIGJ5IG5ld2xpYiAgLSBwb2ludCB0byBhCisg ICAgIGxvY2FsIGNvcHkgb2YgdGhlIHJlZW50IHN0dWZmLiAKKyAgICAgTkIuIFRoaXMgTVVTVCBi ZSBkb25lIGhlcmUgKGJlZm9yZSB0aGUgZm9ya2VlIGNvZGUpIGFzIHRoZQorICAgICBmb3JrIGNv cHkgY29kZSBkb2Vzbid0IGNvcHkgdGhlIGRhdGEgaW4gbGliY2NydDAuY2MgKHRoYXQncyB3aHkg d2UKKyAgICAgcGFzcyBpbiB0aGUgcGVyX3Byb2Nlc3Mgc3RydWN0IGludG8gdGhlIC5kbGwgZnJv bSBsaWJjY3J0MCkuCisgICovCisKKyAgKih1LT5pbXB1cmVfcHRyX3B0cikgPSAmcmVlbnRfZGF0 YTsKKyAgX2ltcHVyZV9wdHIgPSAmcmVlbnRfZGF0YTsKKworI2lmIDAKKyAgc21hbGxfcHJpbnRm KCImcmVlbnRfZGF0YSA9ICV4LCAmX2ltcHVyZV9wdHIgPSAleCwgX2ltcHVyZV9wdHIgPSAleFxu IiwKKwkJJnJlZW50X2RhdGEsICZfaW1wdXJlX3B0ciwgX2ltcHVyZV9wdHIpOworI2VuZGlmCisK KyAgLyogRW5hYmxlIHN0cmFjaW5nIGFzIHNvb24gYXMgcG9zc2libGUuICAqLworICBzdHJhY2Vf aW5pdCAoKTsKKworICAvKiBJbml0aWFsaXplIHRoZSBjeWd3aW4zMiBzdWJzeXN0ZW0gaWYgdGhp cyBpcyB0aGUgZmlyc3QgcHJvY2VzcywKKyAgICAgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmUgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcuICAqLworICBzaGFyZWRfaW5pdCAo KTsKKworICAvKiBJbml0aWFsaXplIFNJR1NFR1YgaGFuZGxpbmcsIGV0Yy4KKyAgICAgVGhlIGV4 Y2VwdGlvbiBoYW5kbGVyIHJlZmVyZW5jZXMgZGF0YSBpbiB0aGUgc2hhcmVkIGFyZWEsIHNvIHRo aXMgY2FuJ3QKKyAgICAgYmUgZG9uZSB1bnRpbCBhZnRlciBzaGFyZWRfaW5pdC4gICovCisgIC8q IEZJWE1FOiBGb3IgdGhlIGZvcmtlZSwgb3VyIHN0YWNrZWQgY29weSBvZiBjeWd3aW5fZXhjZXB0 X2VudHJ5IHdpbGwKKyAgICAgZ2V0IG92ZXJ3cml0dGVuLCBidXQgcHJlc3VtYWJseSB3aXRoIHRo ZSBzYW1lIGRhdGEuICBOb3Qgc3VyZSB3aGF0CisgICAgIGhhcHBlbnMgaW4gdGhlIGZvcmtlZSBp ZiBhIFNJR1NFR1YgaGFwcGVucyBiZWZvcmUgbm93LiAgKi8KKyAgaW5pdF9leGNlcHRpb25zICgm Y3lnd2luX2V4Y2VwdF9lbnRyeSk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgZm9yayBtZWNoYW5p c20uICAqLworICBmb3JrX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgaGVhcC4gICov CisgIGhlYXBfaW5pdCAoKTsKKworICBjaGFyICpsaW5lID0gR2V0Q29tbWFuZExpbmVBICgpOwor ICAvKiBTYXZlIGN1cnJlbnQgY29uc29sZSB0aXRsZSBhbmQgc2V0IG5ldyBvbmUgKi8KKyAgdGl0 bGUgPSAoY2hhciAqKSBhbGxvY2EgKFRJVExFU0laRSk7CisgIGlmICghR2V0Q29uc29sZVRpdGxl ICh0aXRsZSwgVElUTEVTSVpFKSkKKyAgICB0aXRsZSA9IE5VTEw7CisgIFNldENvbnNvbGVUaXRs ZSAobGluZSk7CisKKyAgLyogSWYgdGhpcyBpcyBhIGZvcmssIHRoZW4gZG8gdGhhdCBub3cuICBB bGwgdGhlIG90aGVyIHN0dWZmIHdpbGwKKyAgICAgaGF2ZSBiZWVuIHNldCB1cCBieSB0aGUgdGFz ayB0aGF0IGZvcmtlZCB1cy4gICovCisKKyAgaWYgKHUtPmZvcmtlZSkKKyAgICB7CisgICAgICBl bnZpcm9uID0gKnUtPmVudnB0cjsKKworICAgICAgLyogV2hlbiBhIGZvcmtlZCBjaGlsZCBzdGFy dHMsIGl0cyBzdGFjayBpcyBxdWl0ZSBzbWFsbC4KKwkgSG93ZXZlciwgd2hlbiBpdCBsb25nam1w J3MsIHRoZSBzdGFjayBiZWNvbWVzIHRoYXQgb2YgaXRzIHBhcmVudAorCSB3aGljaCBpcyBhcmJp dHJhcmlseSBsYXJnZS4gIFRoaXMgY2FuIGNhdXNlIHRoZSBjaGlsZCB0byBjcmFzaCBzbworCSBw cm9iZSB0aGUgc3RhY2sgb3V0LiAgKi8KKyAgICAgIC8qIEZJWE1FOiBGaXggaGFyZGNvZGluZyBv ZiBzaXplIGFmdGVyIG1pZ3JhdGlvbi4gICovCisgICAgICByZWN1ciAoKGNoYXIgKikmaSAtIDB4 MjAwMDAsIDApOworCisgICAgICBkZWJ1Z19wcmludGYgKCJjaGlsZCBhYm91dCB0byBsb25nam1w XG4iKTsKKyAgICAgIGR1bXBfam1wX2J1ZiAodS0+c2VsZi0+cmVzdG9yZSk7CisKKyAgICAgIC8q IFRoZSBjb3JyZXNwb25kaW5nIHNldGptcCBpcyBpbiBmb3JrLmNjLiAgKi8KKyAgICAgIGxvbmdq bXAgKHUtPnNlbGYtPnJlc3RvcmUsIHUtPmZvcmtlZSk7CisgICAgfQorCisgIC8qIE5hc3R5IHN0 YXRpYyBzdHVmZiBuZWVkZWQgYnkgbmV3bGliIC0gaW5pdGlhbGl6ZSBpdC4gCisgICAgIE5vdGUg dGhhdCBpbXB1cmVfcHRyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoaXMg YWJvdmUKKyAgICAgTkIuIFRoaXMgKk1VU1QqIGJlIGRvbmUgaGVyZSwganVzdCBhZnRlciB0aGUg Zm9ya2VlIGNvZGUgYXMgc29tZQorICAgICBvZiB0aGUgY2FsbHMgYmVsb3cgKGVnLiB1aW5mb19p bml0KSBkbyBzdGRpbyBjYWxscyAtIHRoaXMgYXJlYSBtdXN0CisgICAgIGJlIHNldCB0byB6ZXJv IGJlZm9yZSB0aGVuLgorICAqLworICBtZW1zZXQgKCZyZWVudF9kYXRhLCAwLCBzaXplb2YgKHJl ZW50X2RhdGEpKTsKKyAgcmVlbnRfZGF0YS5fZXJybm8gPSAwOworICByZWVudF9kYXRhLl9zdGRp biA9ICByZWVudF9kYXRhLl9fc2YgKyAwOworICByZWVudF9kYXRhLl9zdGRvdXQgPSByZWVudF9k YXRhLl9fc2YgKyAxOworICByZWVudF9kYXRhLl9zdGRlcnIgPSByZWVudF9kYXRhLl9fc2YgKyAy OworCisgIC8qIFBlcmZvcm0gdmFyaW91cyBzdGFydHVwIHNhbml0eSBjaGVja3MuICAqLworICBj aGVja291dCAoKTsKKworICAvKiBJbml0aWFsaXplIG91ciBwcm9jZXNzIHRhYmxlIGVudHJ5LiAg Ki8KKyAgcGluZm9faW5pdCAoKTsKKworICAvKiBJbml0aWFsaXplIHRoZSBmaWxlIGRlc2NyaXB0 b3IgdGFibGUuICAqLworICBobWFwX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB1aWQsIGdp ZC4gICovCisgIHVpbmZvX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB3aW5zb2NrICovCisg IHNvY2tldF9jaGVja2luaXQoKTsKKworICBzeXNjYWxsX3ByaW50ZiAoIkFwcGxpY2F0aW9uIENZ R1dJTiB2ZXJzaW9uOiAlZC4lZFxuIiwKKwkJICB1LT52ZXJzaW9uX21ham9yLCB1LT52ZXJzaW9u X21pbm9yKTsKKyAgc3lzY2FsbF9wcmludGYgKCJDWUdXSU4gRExMIHZlcnNpb24gICAgICAgIDog JWQuJWRcbiIsCisJCSAgY3lnd2luX2RsbF92ZXJzaW9uX21ham9yLCBjeWd3aW5fZGxsX3ZlcnNp b25fbWlub3IpOworCisgIC8qIFNjYW4gdGhlIGNvbW1hbmQgbGluZSBhbmQgYnVpbGQgYXJndi4g ICovCisgIGludCBsZW4gPSBzdHJsZW4gKGxpbmUpOworICBjaGFyICptaW5lID0gKGNoYXIgKilh bGxvY2EgKGxlbiArIDIpOworICBtZW1jcHkgKG1pbmUsIGxpbmUsIGxlbik7CisgIG1pbmVbbGVu XSA9IDA7CisgIG1pbmVbbGVuKzFdID0gMDsKKyAgYXJnYyA9IGNvbXB1dGVfYXJnYyAobWluZSk7 CisgIGFyZ3YgPShjaGFyICoqKSBhbGxvY2EgKChhcmdjICsgMSkgKiBzaXplb2YgKGNoYXIgKikp OworICBidWlsZF9hcmd2IChtaW5lLCBhcmd2LCBsZW4pOworCisgIC8qIEV4cGFuZCAqLmMsIGV0 Yy4gICovCisgIGlmICghIHUtPnNlbGYtPmN5Z3dpbl9wYXJlbnRfcCkKKyAgICBnbG9iaWZ5ICgm YXJnYywgJmFyZ3YpOworCisgIC8qIERlYWwgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAq LworICB7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IHJhd2VudiA9IEdldEVudmlyb25tZW50U3Ry aW5ncyAoKTsKKworICAgIGludCBlbnZjID0gbnVtX21zX2Vudl92YXJzIChyYXdlbnYpOworCisg ICAgZGVidWdfcHJpbnRmICgiUHJvY2Vzc2luZyAlZCBlbnYgdmFycyAuLi5cbiIsIGVudmMpOwor CisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZXNlICgrIHRoZSB0cmFpbGluZyBOVUxMKS4g ICovCisgICAgKnUtPmVudnB0ciA9IChjaGFyICoqKWFsbG9jYSAoKGVudmMgKyAxKSAqIHNpemVv ZiAoY2hhciAqKSk7CisKKyAgICAvKiBDdXJyZW50IGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBpcyBy ZWNvcmRlZCBhcyB2YXJpYWJsZXMgb2YgdGhlCisgICAgICAgZm9ybSAiPVg6PVg6XGZvb1xiYXI7 IHRoZXNlIG11c3QgYmUgY2hhbmdlZCBpbnRvIHNvbWV0aGluZyBsZWdhbAorICAgICAgICh3ZSBj b3VsZCBqdXN0IGlnbm9yZSB0aGVtIGJ1dCBtYXliZSBhbiBhcHBsaWNhdGlvbiB3aWxsCisgICAg ICAgZXZlbnR1YWxseSB3YW50IHRvIHVzZSB0aGVtKS4gICovCisgICAgaW50IGkgPSAwOworICAg IGludCBuID0gMDsKKyAgICB3aGlsZSAocmF3ZW52W2ldKQorICAgICAgeworCWNoYXIgKmM7CisJ YyA9IChjaGFyICopYWxsb2NhIChzdHJsZW4gKHJhd2VudiArIGkpICsgMSk7CisJc3RyY3B5IChj LCByYXdlbnYgKyBpKTsKKwlpZiAoY1swXSA9PSAnPScpCisJICBjWzBdID0gJyEnOworCQorCSgq dS0+ZW52cHRyKVtuXSA9IGM7CisJCisJLyogU2tpcCB0byB0aGUgbmV4dCBvbmUuICAqLworCXdo aWxlIChyYXdlbnZbaV0pCisJICArK2k7CisJKytpOworCSsrbjsKKyAgICAgIH0KKyAgICAoKnUt PmVudnB0cilbbl0gPSAwOworCisgICAgLyogQW1hemluZ2x5LCBOVCBoYXMgYSBjYXNlIHNlbnNp dGl2ZSBlbnZpcm9ubWVudCBuYW1lIGxpc3QsCisgICAgICAgb25seSBzb21ldGltZXMuCisgICAg ICAgZWcsIGl0J3Mgbm9ybWFsIHRvIGhhdmUgTlQgc2V0IHlvdXIgIlBhdGgiIHRvIHNvbWV0aGlu Zy4KKyAgICAgICBMYXRlciwgeW91IHNldCAiUEFUSCIgdG8gc29tZXRoaW5nIGVsc2UuICBUaGlz IGFsdGVycyAiUGF0aCIuCisgICAgICAgQnV0IGlmIHlvdSB0cnkgYW5kIGRvIGEgbmFpdmUgZ2V0 ZW52IG9uICJQQVRIIiB5b3UnbGwgZ2V0IG5vdGhpbmcuIAorICAgICAgIAorICAgICAgIFNvIHdl IHVwcGVyIGNhc2UgdGhlIGxhYmVscyBoZXJlIHRvIHByZXZlbnQgY29uZnVzaW9uIGxhdGVyLgor ICAgICAgIFdlIGRvIGl0IG9ubHkgZm9yIHRoZSBmaXJzdCBwcm9jZXNzIGluIGEgc2Vzc2lvbiBn cm91cCAqLworICAgIAorICAgIGlmICh1LT5zZWxmLT5waWQgPT0gdS0+c2VsZi0+cHBpZCkKKyAg ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIHsKKwkgIGNoYXIgKnA7CisJICBm b3IgKHAgPSAoKnUtPmVudnB0cilbaV07ICpwICE9ICc9JyAmJiAqcDsgcCsrKQorCSAgICBpZiAo aXNsb3dlciAoKnApKQorCSAgICAgICpwID0gdG91cHBlciAoKnApOworICAgICAgICB9CisKKyAg ICAvKiBJZiB3ZSdyZSB1c2luZyBwb3NpeCBwYXRocywgd2UgZG8gYSBzcGVjaWFsIHRoaW5nIGZv ciB0aGUgUEFUSAorICAgICAgIFthbmQgcG90ZW50aWFsbHkgb3RoZXJzXS4gIFRoZXkgbWlnaHQg YmUgaW4gbmF0aXZlIGZvcm1hdCBzbyB3ZSB0dXJuCisgICAgICAgdGhlbSBpbnRvIHRoZWlyIHBv c2l4IGVxdWl2YWxlbnQuICAqLworCisgICAgaWYgKHMtPm1vdW50LnBvc2l4X3BhdGhfcCAoKSkK KyAgICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCSAgeworCSAgICBmb3IgKGludCBq ID0gMDsgY29udl9wYXRoX25hbWVzW2pdOyBqKyspIAorCSAgICAgIHsKKwkJY2hhciAqc3JjID0g KCp1LT5lbnZwdHIpW2ldOworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbiAoY29udl9wYXRoX25hbWVz W2pdKTsKKworCQlpZiAoc3RybmNhc2VjbXAgKHNyYywgY29udl9wYXRoX25hbWVzW2pdLCBuYW1l bGVuKSAhPSAwKQorCQkgIGNvbnRpbnVlOworCisJCS8qIFR1cm4gYWxsIHRoZSBpdGVtcyBpbiBo ZXJlIGZyb20gYzo8Zm9vPjs8YmFyPiBpbnRvIHRoZWlyIAorCQkgICBtb3VudGVkIGVxdWl2YWxl bnRzIC0gaWYgdGhleSBoYXZlIG9uZS4gICovCisJCWNoYXIgKnZhbHVlID0gc3JjICsgbmFtZWxl bjsKKwkJY2hhciAqZW52dmFyID0gKGNoYXIgKikgYWxsb2NhICh3aW4zMl90b19wb3NpeF9wYXRo X2xpc3RfYnVmX3NpemUgKHZhbHVlKSk7CisJCWNoYXIgKm91dGVudiA9IGVudnZhcjsKKworCQlk ZWJ1Z19wcmludGYgKCJuZWVkIHRvIGNvbnZlcnQgJWQgJXNcbiIsIGksIHNyYyk7CisKKwkJbWVt Y3B5IChvdXRlbnYsIGNvbnZfcGF0aF9uYW1lc1tqXSwgbmFtZWxlbik7CisJCW91dGVudiArPSBu YW1lbGVuOworCisjaWYgMCAvKiBXb3VsZCByYXRoZXIgbm90IGhhdmUgdGhpcywgYnV0IG1heSBo YXZlIHRvLiAgKi8KKwkJLyogUEFUSCBpbiB3aW4zMiBhbHdheXMgaGFzIGEgdmlydHVhbCAiOiIg YXQgdGhlIGZyb250CisJCSAgICh0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYWx3YXlzIHNlYXJj aGVkIGZpcnN0KS4gIEVuc3VyZQorCQkgICBQQVRIIGhhcyBhIGxlYWRpbmcgIjoiLiAgKi8KKwkJ aWYgKHN0cmNtcCAoY29udl9wYXRoX25hbWVzW2pdLCAiUEFUSD0iKSA9PSAwKQorCQkgIHsKKwkJ ICAgIGlmICgqdmFsdWUgIT0gJzsnCisJCQkmJiAhKHZhbHVlWzBdID09ICcuJyAmJiB2YWx1ZVsx XSA9PSAnOycpKQorCQkgICAgICAqb3V0ZW52KysgPSAnOic7CisJCSAgfQorI2VuZGlmCisKKwkJ d2luMzJfdG9fcG9zaXhfcGF0aF9saXN0ICh2YWx1ZSwgb3V0ZW52KTsKKworCQlkZWJ1Z19wcmlu dGYgKCJlbnYgdmFyIGNvbnZlcnRlZCB0byAlc1xuIiwgZW52dmFyKTsKKwkJKCp1LT5lbnZwdHIp W2ldID0gZW52dmFyOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgIC8qIEZJWE1FOiBT b21ldGltZXMgdGhlIGRsbCB1c2VzIEdldEVudmlyb25tZW50VmFyaWFibGUsCisgICAgICAgc29t ZXRpbWVzIGl0IHVzZXMgZ2V0ZW52LiAgTmVlZCB0byBwaWNrICpvbmUqLiAgKi8KKyAgICBlbnZp cm9uID0gKnUtPmVudnB0cjsKKyAgICBGcmVlRW52aXJvbm1lbnRTdHJpbmdzQSAoKGNoYXIgKikg cmF3ZW52KTsKKyAgfQorCisgIC8qIFNhdmUgdGhlIHByb2dyYW0gbmFtZS4gIEl0J3MgdXNlZCBp biBkZWJ1Z2dpbmcgbWVzc2FnZXMgYW5kIGJ5CisgICAgIHRoZSBmb3JrIGNvZGUgKGZvcmtpbmcg c3Bhd25zIGEgY29weSBvZiB1cykuICBDb3B5IGl0IGludG8gYSB0ZW1wIGFuZAorICAgICB0aGVu IGludG8gdGhlIGZpbmFsIHNwb3QgYmVjYXVzZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdXNlCisgICAg IHUtPnNlbGYtPnByb2duYW1lLiBUcnkgZ2V0dGluZyB0aGUgYWJzb2x1dGUgcGF0aCBmcm9tIHRo ZQorICAgICBtb2R1bGUgaGFuZGxlLCBpZiB0aGlzIGZhaWxzIGdldCB0aGUgbmFtZSBmcm9tIHRo ZSBwYXRoLgorICAgICBUaGlzIGNhbGwgcmVmZXJlbmNlcyAkUEFUSCBzbyB3ZSBjYW4ndCBkbyB0 aGlzIHVudGlsIHRoZSBlbnZpcm9ubWVudAorICAgICB2YXJzIGFyZSBzZXQgdXAuICAqLworICAv KiBGSVhNRTogV2hhdCBpZiBhcmd2WzBdIGlzIHJlbGF0aXZlLCAkUEFUSCBjaGFuZ2VzLCBhbmQg dGhlbiB0aGUgcHJvZ3JhbQorICAgICB0cmllcyB0byBkbyBhIGZvcms/ICAqLworICB7CisgICAg Y2hhciB0bXBbTUFYX1BBVEhdOworCisgICAgaWYodS0+aG1vZHVsZSAhPSAwKQorICAgICAgewor ICAgICAgICBpZihHZXRNb2R1bGVGaWxlTmFtZSh1LT5obW9kdWxlLCB0bXAsIE1BWF9QQVRIKT09 MCkKKyAgICAgICAgICBmaW5kX2V4ZWMgKGFyZ3ZbMF0sIHRtcCk7CisgICAgICB9CisgICAgZWxz ZQorICAgICAgZmluZF9leGVjIChhcmd2WzBdLCB0bXApOworICAgIHN0cmNweSAodS0+c2VsZi0+ cHJvZ25hbWUsIHRtcCk7CisgIH0KKworICAvKiBDb252ZXJ0IGFyZ3ZbMF0gdG8gcG9zaXggcnVs ZXMgaWYgd2UncmUgdXNpbmcgdGhlbSBhbmQgaXQncyBjdXJyZW50bHkKKyAgICAgYmxhdGFudGx5 IHdpbjMyIHN0eWxlLiAgKi8KKyAgaWYgKHMtPm1vdW50LnBvc2l4X3BhdGhfcCAoKQorICAgICAg JiYgKHN0cmNociAoYXJndlswXSwgJzonKSB8fCBzdHJjaHIgKGFyZ3ZbMF0sICdcXCcpKSkKKyAg ICB7CisgICAgICBjaGFyICpuZXdfYXJndjAgPSAoY2hhciAqKSBhbGxvY2EgKE1BWF9QQVRIKTsK KyAgICAgIGNvbnZfdG9fcG9zaXhfcGF0aCAoYXJndlswXSwgbmV3X2FyZ3YwKTsKKyAgICAgIGFy Z3ZbMF0gPSBuZXdfYXJndjA7CisgICAgfQorCisgIC8qIFNldCB1cCBfX3Byb2duYW1lIGZvciBn ZXRvcHQgZXJyb3IgY2FsbCAqLworICBfX3Byb2duYW1lID0gYXJndlswXTsKKworICBpZiAodS0+ c3RyYWNlX21hc2sgJiAoX1NUUkFDRV9TVEFSVFVQIHwgX1NUUkFDRV9BTEwpKQorICAgIHsKKyAg ICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyArK2kpCisJX19zeXNfcHJpbnRmICgiYXJndlslZF0g PSAlc1xuIiwgaSwgYXJndltpXSk7CisgICAgICBmb3IgKGkgPSAwOyAoKnUtPmVudnB0cilbaV07 ICsraSkKKwlfX3N5c19wcmludGYgKCJlbnZwWyVkXSA9ICV4ICVzXG4iLCBpLCAoKnUtPmVudnB0 cilbaV0sICgqdS0+ZW52cHRyKVtpXSk7CisgICAgfQorCisgIHN5c2NhbGxfcHJpbnRmICgiQ1lH V0lOIFJlbGVhc2UgJWQuJWQsIGNvbXBpbGVkICVzICVzXG4iLAorCQkgIGN5Z3dpbl9kbGxfdmVy c2lvbl9tYWpvciwgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yLAorCQkgIF9fREFURV9fLCBfX1RJ TUVfXyk7CisKKyAgZXhpdCAodS0+bWFpbiAoYXJnYywgYXJndiwgZW52aXJvbikpOworfQorCisv KiBUaGlzIGlzIG5lZWRlZCB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2YgaW5wb3J0IHN0dWZmICov CisvKiBGSVhNRTogRG9lc24ndCB0aGUgcHBjIHBvcnQgaGFuZGxlIHRoaXMgZGlmZmVyZW50bHk/ ICBTdGFuZGFyZGl6ZS4gICovCithc20gKCIuc2VjdGlvbiAuaWRhdGEkM1xuIiAiLmxvbmcgMCww LDAsMCwwLDAsMCwwIik7CisKZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL21pc2MuY2MgLi9taXNj LmNjCi0tLSAuLi9jZGsvd2luc3VwL21pc2MuY2MJVGh1IEFwciAyNCAxNjo0NTozNyAxOTk3Cisr KyAuL21pc2MuY2MJRnJpIEp1biAxMyAwNToxMjo0NyAxOTk3CkBAIC0xMDMsMTMgKzEwMyw2IEBA CiAKIGV4dGVybiAiQyIKIGludAotdGdldGVudCAoKQotewotICByZXR1cm4gLTE7Ci19Ci0KLWV4 dGVybiAiQyIKLWludAogdmhhbmd1cCAoKQogewogICBzZXRfZXJybm8gKEVOT1NZUyk7Ck9ubHkg aW4gLjogc3RhdGljLmRpZgpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRpbHMvTWFrZWZpbGUu aW4gLi91dGlscy9NYWtlZmlsZS5pbgotLS0gLi4vY2RrL3dpbnN1cC91dGlscy9NYWtlZmlsZS5p bglUaHUgQXByIDI0IDE2OjQ2OjAzIDE5OTcKKysrIC4vdXRpbHMvTWFrZWZpbGUuaW4JRnJpIEp1 biAxMyAwNDoyMjo1NSAxOTk3CkBAIC0zMyw4ICszMyw4IEBACiAKIENDID0gQENDQAogCi1DRkxB R1MgPSBAQ0ZMQUdTQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitvdmVycmlkZSBDRkxBR1MgPSBA Q0ZMQUdTQAorb3ZlcnJpZGUgQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiAKICMgJChzcmNkaXIpLy4u Ly4uL2luY2x1ZGUgaXMgZm9yIGdldG9wdC5oCiBJTkNMVURFUyA9IC1JJChzcmNkaXIpLy4uIC1J JChzcmNkaXIpLy4uL2luY2x1ZGUgLUkkKHNyY2RpcikvLi4vLi4vaW5jbHVkZQpAQCAtNDYsMTAg KzQ2LDEwIEBACiBFWEVfTERGTEFHUyA9CiAKIFBST0dTID0gbW91bnQgdW1vdW50IHBzIGtpbGwg Y3lnd2luIG1rcGFzc3dkIG1rZ3JvdXAKLQorU0NSSVBUUyA9IHN0cmlwZGxsIGxpYjJkZWYKIFdJ TlNVUF9ERVBTID0gJChzcmNkaXIpLy4uL3dpbnN1cC5oCiAKLWFsbDogJChQUk9HUykKK2FsbDog JChQUk9HUykgJChTQ1JJUFRTKQogCiBtb3VudDogbW91bnQuY2MgJChXSU5TVVBfREVQUykKIAkk KENDKSAtbyAkQCAkKHNyY2RpcikvbW91bnQuY2MgJChBTExfQ1hYRkxBR1MpICQoRVhFX0xERkxB R1MpCkBAIC03Miw2ICs3MiwxMiBAQAogbWtncm91cDogbWtncm91cC5jICQoV0lOU1VQX0RFUFMp CiAJJChDQykgLW8gJEAgJChzcmNkaXIpL21rZ3JvdXAuYyAkKEFMTF9DWFhGTEFHUykgJChFWEVf TERGTEFHUykgLWxuZXRhcGkzMiAtbGFkdmFwaTMyCiAKK3N0cmlwZGxsOiBzdHJpcGRsbC5zaAor CWNhdCAkKHNyY2Rpcikvc3RyaXBkbGwuc2ggPiAkQAorCitsaWIyZGVmOiBsaWIyZGVmLnNoCisJ Y2F0ICQoc3JjZGlyKS9saWIyZGVmLnNoID4gJEAKKwogY2xlYW46CiAJcm0gLWYgKi5vICQoUFJP R1MpCiAKQEAgLTc5LDcgKzg1LDcgQEAKIAlybSAtZiAgTWFrZWZpbGUgY29uZmlnLmNhY2hlIAog CiBpbnN0YWxsOgotCWZvciBmIGluICQoUFJPR1MpIDsgXAorCWZvciBmIGluICQoUFJPR1MpICQo U0NSSVBUUyk7IFwKIAlkbyBcCiAJICAkKElOU1RBTExfWEZPUk0pICQkZiAkKGJpbmRpcikgOyBc CiAJZG9uZQpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRpbHMvbGliMmRlZi5zaCAuL3V0aWxz L2xpYjJkZWYuc2gKLS0tIC4uL2Nkay93aW5zdXAvdXRpbHMvbGliMmRlZi5zaAlUaHUgSnVuIDEy IDEwOjM0OjQzIDE5OTcKKysrIC4vdXRpbHMvbGliMmRlZi5zaAlGcmkgSnVuIDEzIDA0OjIyOjU1 IDE5OTcKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rsb3coKXsKK2VjaG8gJDF8dHIg QS1aIGEtegorfQorCitpZiBbIHgiJDEiID0geCIiIF07dGhlbgorICBlY2hvICJzaGVsbCBzY3Jp cHQgdG8gZ2VuZXJhdGUgLmRlZiBmaWxlcyBmcm9tIC5MSUIgZmlsZXMKKyAgJDAgZmlsZW5hbWUg Li4uIgorICBleGl0IDAKK2Vsc2UKKyAgZWNobyBMSUJSQVJZIGBiYXNlbmFtZSAkMSAubGliYCAK KyAgZWNobyBFWFBPUlRTCisgIG5tIC0tZXh0ZXJuLW9ubHkgJDF8ZWdyZXAgJ14uLi4uLi4uLiBb VFJdJyBcCisgIHxmZ3JlcCAtdiAnJEFBJ1wKKyAgfGZncmVwIC12ICdDQF8wJ1wKKyAgfGZncmVw IC12ICdAQCcgXAorICB8c29ydCBcCisgIHxzZWQgLWUgJ3MvW15fXSpfLy8nIC1lICdzL1teP10q Py8vJyAKK2ZpCisKKyMgVD0gLnRleHQgc2VjdGlvbiBSPSByZWFkb25seSAuZGF0YSBzZWN0aW9u IChleHBvcnRlZCB2YXJpYWJsZXMpCisjICRBQSBDQF8wIEBAIGV4cG9ydGVkIHN0cnVjdHVyZS9p bnRlcm5hbCBmdW5jdGlvbiBkZWZpbml0aW9ucwpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRp bHMvc3RyaXBkbGwuc2ggLi91dGlscy9zdHJpcGRsbC5zaAotLS0gLi4vY2RrL3dpbnN1cC91dGls cy9zdHJpcGRsbC5zaAlUaHUgSnVuIDEyIDA4OjUyOjMxIDE5OTcKKysrIC4vdXRpbHMvc3RyaXBk bGwuc2gJRnJpIEp1biAxMyAwNDoyMjo1NSAxOTk3CkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9z aAorI3NldCAteHYgI2RlYnVnaW5nCisjIHRoaXMgYXNzdW1lcyAudGV4dCAuYnNzIC5kYXRhIC5l ZGF0YSAuaWRhdGEgLnN0YWIgLnN0YWJzdHIgLnJlbG9jIC5yc3JjCisjIG9yZGVyIGZvciBzZWN0 aW9ucywgd2hpY2ggaGFzIGJlZW4gdHJ1ZSBmb3IgYWxsIHRoZSBvbmVzIEkndmUgc2VlbgorIyBh bmQgYWNjb3JkaW5nIHRvIE1yLiBOb2VyIHRoaXMgd2lsbCBiZSBuZWVkZWQgdW50aWwgQjE4KyBj b21lcyBvdXQKK1NFQ1RJT049LnJlbG9jCitpZiBbIHgiJDEiID0geCIiIC1vIHgiJDIiICE9IHgi IiBdO3RoZW4KKyAgZWNobyB1c2FnZSAkMCBkbGxuYW1lLmRsbCAxPiYyICMgZXJyb3JzIHRvIHN0 ZGVycgorICBleGl0IDE7CitlbGlmICEgeyBEVU1QPWBvYmpkdW1wIC0taGVhZGVycyAkMWAgJiYg ZWNobyAkRFVNUCB8Z3JlcCBwZWktaTM4NiAmPi9kZXYvbnVsbCA7fTt0aGVuCisgIGVjaG8gJDA6 IG5vdCBhbiBvYmplY3QgZmlsZSAxPiYyCisgIGV4aXQgMTsgIyBub3QgYW4gZXhlIGRsbCAuYSBv ciAubyBmaWxlIAorZWxpZiAhIGVjaG8gJERVTVB8Z3JlcCAiNSAuIiAmPi9kZXYvbnVsbCA7dGhl bgorICBleGl0IDA7ICMgYWxyZWFkeSBzdHJpcGVkIHN0YXRpYworZWxpZiBlY2hvICREVU1QfGdy ZXAgIjUgLnJlbG9jICIgJj4vZGV2L251bGwgO3RoZW4KKyAgZXhpdCAwOyAjIGFscmVhZHkgc3Ry aXBlZCAucmVsb2MKK2VsaWYgZWNobyAkRFVNUHxncmVwICIucnNyYyIgJj4vZGV2L251bGwgO3Ro ZW4KKyAgaWYgZWNobyAkRFVNUHxncmVwICI3IC5yZWxvYyAiICY+L2Rldi9udWxsIDt0aGVuCisg ICAgZWNobyAkMDogUGxlYXNlIGFkanVzdCAucnNyYyBWTUEgYnkgaGFuZCBtYXAgaXMgaW4gYGRp cm5hbWUgJDFgL3N0cmlwbWFwLiQkIDE+JjIKKyAgICBvYmpkdW1wIC0taGVhZGVycyAkMSAmPiAg YGRpcm5hbWUgJDFgL3N0cmlwbWFwLiQkCisgIGVsc2UKKyAgICBTRUNUSU9OPS5yc3JjCisgIGZp CitmaQoraWYgISBlY2hvICREVU1QfGdyZXAgIjcgLnJlbG9jICIgJj4vZGV2L251bGwgO3RoZW4K KyAgaWYgZWNobyAkRFVNUHxncmVwICI1IC5zdGFiICIgJj4vZGV2L251bGwgO3RoZW4KKyAgICBz dHJpcCAkMSAjIHN0YXRpYyAuZGxsCisgICAgZXhpdCAwOworICBlbHNlCisgICAgZWNobyAkMDog dW5rbm93biBFcnJvciAxPiYyCisgICAgZXhpdCAxOyAjIG5vIGNsdWUKKyAgZmkKK2Vsc2UKKyAg TkVXVk1BPWBvYmpkdW1wIC0taGVhZGVycyAkMXxncmVwICI1IC5zdGFiICJ8Z2F3ayAtLXRyYWRp dGlvbmFsICd7cHJpbnQgJDR9J2AKKyAgaWYgWyB4IiRORVdWTUEiICE9IHgiIiBdO3RoZW4KKyAg ICBvYmpjb3B5IC1TIC0tYWRqdXN0LXNlY3Rpb24tdm1hICRTRUNUSU9OPTB4JE5FV1ZNQSAkMTsK KyAgICBleGl0IDA7CisgIGVsc2UKKyAgICBlY2hvICQwOiB1bmtub3duIEVycm9yIDE+JjIKKyAg ICBleGl0IDE7ICMgbm8gY2x1ZQorICBmaQorZmkKK1sgLWYgYGRpcm5hbWUgJDFgL3N0cmlwbWFw LiQkIF0gJiYgY2F0IHN0cmlwbWFwLiQkICYmIC0tb2JqZHVtcCAtLWhlYWRlcnMgJDEgJiYgZWNo byBvYmpjb3B5IC1TIC0tYWRqdXN0LXNlY3Rpb24tdm1hIC5yc3JjPTB4TkVXVk1BICQxCg== ----=_33a2c7cf31032108aad679.MFSBCHJLHS Content-Type: application/octet-stream; name=specs Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=specs KmFzbToKCgoqYXNtX2ZpbmFsOgoKCipjcHA6CiUoY3BwX2NwdSkgJVtjcHBfY3B1XSAle3Bvc2l4 Oi1EX1BPU0lYX1NPVVJDRX0gJXtjb25zb2xlOi1JL3Vzci9sb2NhbC9pbmNsdWRlL3dpbjMyfSAl e3dpbmRvd3M6LUkvdXNyL2xvY2FsL2luY2x1ZGUvd2luMzJ9CgoqY2MxOgoleyFtY3B1KjogJXtt Mzg2Oi1tY3B1PWkzODYgLW1hcmNoPWkzODZ9ICV7bW5vLTQ4NjotbWNwdT1pMzg2IC1tYXJjaD1p Mzg2fSAle200ODY6LW1jcHU9aTQ4NiAtbWFyY2g9aTQ4Nn0gJXttbm8tMzg2Oi1tY3B1PWk0ODYg LW1hcmNoPWk0ODZ9ICV7bW5vLXBlbnRpdW06LW1jcHU9aTQ4NiAtbWFyY2g9aTQ4Nn0gJXttcGVu dGl1bTotbWNwdT1wZW50aXVtfSAle21uby1wZW50aXVtcHJvOi1tY3B1PXBlbnRpdW19ICV7bXBl bnRpdW1wcm86LW1jcHU9cGVudGl1bXByb319CgoqY2MxcGx1czoKCgoqZW5kZmlsZToKCgoqbGlu azoKJXttd2luZG93czotLXN1YnN5c3RlbSB3aW5kb3dzfSAle3dpbmRvd3M6LS1zdWJzeXN0ZW0g d2luZG93c30gJXtkbGw6LS1kbGwgLWUgX2RsbF9lbnRyeUAxMn0KCipsaWI6CiV7ZzotbHVzZXIz MiAtbGdkaTMyIC1sYWR2YXBpMzIgLWxjb21kbGczMiAtbHdzb2NrMzIgLWxuZXRhcGkzMiAtbGcg LWxtfSAleyFnOi1sY3lnd2lufSAle3dpbmRvd3M6LWx1c2VyMzIgLWxnZGkzMiAtbGNvbWRsZzMy fSAle2NvbnNvbGU6LWx1c2VyMzJ9ICV7bXdpbmRvd3M6LWx1c2VyMzIgLWxnZGkzMiAtbGNvbWRs ZzMyfSAtbGtlcm5lbDMyCgoqbGliZ2NjOgole2c6LWxjeWd3aW5fZ30gLWxnY2MKCipzdGFydGZp bGU6CmNydDAlTyVzICV7ZGxsOi91c3IvbG9jYWwvbGliL2ZpeHVwLm99Cgoqc3dpdGNoZXNfbmVl ZF9zcGFjZXM6CgoKKnNpZ25lZF9jaGFyOgole2Z1bnNpZ25lZC1jaGFyOi1EX19DSEFSX1VOU0lH TkVEX199CgoqcHJlZGVmaW5lczoKLURpMzg2IC1EX1dJTjMyICAgLURQT1NJWCAtRF9fQ1lHV0lO MzJfXyAtRFdJTk5UICAtRF9YODZfPTEgLURfX1NURENfXz0xICAtRF9fc3RkY2FsbD1fX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpICAgLURfX2NkZWNsPV9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpICAgLUFzeXN0ZW0od2lubnQpIC1BY3B1KGkzODYpIC1BbWFjaGluZShpMzg2KQoKKmNyb3Nz X2NvbXBpbGU6CjEKCip2ZXJzaW9uOgpjeWdudXMtMi43LjItOTcwNDA0CgoqbXVsdGlsaWI6Ci4g OwoKKm11bHRpbGliX2RlZmF1bHRzOgoKCiptdWx0aWxpYl9leHRyYToKCgoqbXVsdGlsaWJfbWF0 Y2hlczoKCgoqY3BwX2NwdToKLURpMzg2ICAtQXN5c3RlbSh1bml4KSAtQWNwdShpMzg2KSAtQW1h Y2hpbmUoaTM4NikgJXttY3B1PWk0ODY6LURpNDg2fSAle200ODY6LURpNDg2fSAle21wZW50aXVt Oi1EcGVudGl1bSAtRGk1ODZ9ICV7bWNwdT1wZW50aXVtOi1EcGVudGl1bSAtRGk1ODZ9ICV7bXBl bnRpdW1wcm86LURwZW50aXVtcHJvIC1EaTY4Nn0gJXttY3B1PXBlbnRpdW1wcm86LURwZW50aXVt cHJvIC1EaTY4Nn0KCg== ----=_33a2c7cf31032108aad679.MFSBCHJLHS-- - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".