From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1254 Path: news.gmane.org!not-for-mail From: orc Newsgroups: gmane.linux.lib.musl.general Subject: Re: Hello Date: Fri, 6 Jul 2012 14:06:01 +0800 Message-ID: <20120706140601.252e4e83@sibserver.ru> References: <20120607200123.402a1672@sibserver.ru> <4FD0A902.6070108@barfooze.de> <20120607231831.66c78c33@sibserver.ru> <4FD0D6D9.5080707@barfooze.de> <20120607161928.GE163@brightrain.aerifal.cx> <20120608011516.0b5fca7d@sibserver.ru> <20120608033141.GH163@brightrain.aerifal.cx> <20120706012417.5ae680f0@sibserver.ru> <20120705233457.GR544@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/1vxsYYuOWbxB7sTHmSml975" X-Trace: dough.gmane.org 1341554869 9947 80.91.229.3 (6 Jul 2012 06:07:49 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 6 Jul 2012 06:07:49 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1255-gllmg-musl=m.gmane.org@lists.openwall.com Fri Jul 06 08:07:48 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1Sn1hh-0005mB-Ex for gllmg-musl@plane.gmane.org; Fri, 06 Jul 2012 08:07:45 +0200 Original-Received: (qmail 19492 invoked by uid 550); 6 Jul 2012 06:07:44 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 19460 invoked from network); 6 Jul 2012 06:07:39 -0000 In-Reply-To: <20120705233457.GR544@brightrain.aerifal.cx> X-Mailer: claws-mail Xref: news.gmane.org gmane.linux.lib.musl.general:1254 Archived-At: --MP_/1vxsYYuOWbxB7sTHmSml975 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thu, 5 Jul 2012 19:34:57 -0400 Rich Felker wrote: > On Fri, Jul 06, 2012 at 01:24:17AM +0800, orc wrote: > > On Thu, 7 Jun 2012 23:31:41 -0400 > > Rich Felker wrote: > > > > > > So there is a question: will musl support this configs? Or I > > > > will need patchelf and 'libc6-legacy' for them? > > > > > > It's intended to work, but I don't know whether it does yet. > > > > Did some research there last days: for, example, one that > > proprietary drivers that nvidia ships it was required about 30 > > missing symbols, half of them are one-liners system calls, 5 were > > glibc-specific functions that were easy to add (one of them is > > gnu_get_libc_version() that is designed to return a plain string), > > 4 were missing math functions that already defined as a macros in > > math.h, rest is a forest of weak aliases around already existed > > functions (plus two aliases to objects). That allowed me to run > > plain unmodified X11 applications (not even gtk2 ones) and > > accelerated glxgears without errors (The gtk2 or qt or other such > > libraries compiled against glibc is not my target, just to prove > > that userspace nvidia could be run with musl). If you interested, I > > can put a patch that adds such forest of weak_alias'es to improve > > (partly) glibc compatibility. And separate patch for missing > > syscall wrappers. > > I'm very interested in this. I'm surprised it was that easy to make it > work, and just curious about all the aliases that were involved and > whether they make since or whether they're hacks. Post patches or a > report in whatever form you prefer; I'll review it and hopefully it > can be committed without much additional fuss. Here a patch, attached. It contains both missing syscalls and weak aliases. It does not contain glibc-specific stuff (if you want, I can send it too, but it looks ugly, intended only for 'run it successfully'). Some notes about: - rawmemchr() was taken from uClibc - ioperm() and iopl() were not necessary to make glxgears work, just added them because Xorg will want them - I don't think libc even needs xattr stuff, but glibc includes them. On many systems they are usually duplicated, libattr provides same interface - It seems that every function in src/locale needs it's __underscore alias, to match glibc api - there some ugly __funcname_internal aliases, don't know why glibc defines them in that way Probably you will want to add: - weak_aliases for __underscores - weak_aliases __funcname_internal - rawmemchr() (probably your own implementation, not uClibc one) - some missing syscalls (I really misguessed number of needed syscalls, seems that this was a number of aliases, not syscalls) glibc-specific functions and objects required to make glxgears work: - dlvsym() (wrapper around dlsym(), we don't need ugly symvers) - gnu_get_libc_*() - malloc_usable_size() (returns 0 always, probably there is no code in musl to make it work. Definition in eglibc was cryptic for me, but it clearly seems to be the glibc/ptmalloc feature) - 4 function-wrappers in math code: __isnan(), __isnanf(), __isinf(), __isinff() - __xmknod() - _IO_2_1_stdout_ -> stdout gtk2 will not work that way, I checked. One library in chain requires libstdc++, libstdc++ defines 'unique' symbols (see manual page of binutils nm) which musl linker cannot handle. Additionally, there is much more missing symbols including missing functions. But plain X11 apps worked (I checked xfontsel and xlogo). > > Rich --MP_/1vxsYYuOWbxB7sTHmSml975 Content-Type: application/octet-stream; name=musl-0.9.2-misc-symbols.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=musl-0.9.2-misc-symbols.patch ZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vaW5jbHVkZS9mY250bC5oIG11c2wtMC45LjIvaW5jbHVk ZS9mY250bC5oCi0tLSBtdXNsLTAuOS4yLm8vaW5jbHVkZS9mY250bC5oCTIwMTItMDYtMjUgMDk6 MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAuOS4yL2luY2x1ZGUvZmNudGwuaAkyMDEy LTA3LTA2IDEyOjQ5OjIzLjk1MDc5OTYwMiArMDgwMApAQCAtOCw2ICs4LDggQEAKICNkZWZpbmUg X19ORUVEX29mZl90CiAjZGVmaW5lIF9fTkVFRF9waWRfdAogI2RlZmluZSBfX05FRURfbW9kZV90 CisjZGVmaW5lIF9fTkVFRF9zaXplX3QKKyNkZWZpbmUgX19ORUVEX3NzaXplX3QKIAogI2luY2x1 ZGUgPGJpdHMvYWxsdHlwZXMuaD4KIApAQCAtOTcsNiArOTksNyBAQAogI2RlZmluZSBGX1RFU1Qg IDMKIAogaW50IGxvY2tmKGludCwgaW50LCBvZmZfdCk7Citzc2l6ZV90IHNwbGljZShpbnQsIG9m Zl90LCBpbnQsIG9mZl90LCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiAjZW5kaWYKIAogI2lmIGRl ZmluZWQoX0dOVV9TT1VSQ0UpCmRpZmYgLU5hdXIgbXVzbC0wLjkuMi5vL2luY2x1ZGUvc3RyaW5n LmggbXVzbC0wLjkuMi9pbmNsdWRlL3N0cmluZy5oCi0tLSBtdXNsLTAuOS4yLm8vaW5jbHVkZS9z dHJpbmcuaAkyMDEyLTA2LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0wLjku Mi9pbmNsdWRlL3N0cmluZy5oCTIwMTItMDctMDYgMTI6NTA6MjAuMjU2Nzk5NjAyICswODAwCkBA IC05Miw2ICs5Miw3IEBACiBjaGFyICpzdHJzZXAoY2hhciAqKiwgY29uc3QgY2hhciAqKTsKIHZv aWQgKm1lbXJjaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CiB2b2lkICptZW1wY3B5KHZv aWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwordm9pZCAqcmF3bWVtY2hyKGNvbnN0IHZvaWQg KiwgaW50KTsKICNpZm5kZWYgX19jcGx1c3BsdXMKIGNoYXIgKmJhc2VuYW1lKCk7CiAjZW5kaWYK ZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vaW5jbHVkZS9zeXMvaW8uaCBtdXNsLTAuOS4yL2luY2x1 ZGUvc3lzL2lvLmgKLS0tIG11c2wtMC45LjIuby9pbmNsdWRlL3N5cy9pby5oCTE5NzAtMDEtMDEg MDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyBtdXNsLTAuOS4yL2luY2x1ZGUvc3lzL2lvLmgJ MjAxMi0wNy0wNiAxMjo0OToyMy45NTA3OTk2MDIgKzA4MDAKQEAgLTAsMCArMSwyIEBACitpbnQg aW9wZXJtKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CitpbnQgaW9wbChpbnQp OwpkaWZmIC1OYXVyIG11c2wtMC45LjIuby9pbmNsdWRlL3VuaXN0ZC5oIG11c2wtMC45LjIvaW5j bHVkZS91bmlzdGQuaAotLS0gbXVzbC0wLjkuMi5vL2luY2x1ZGUvdW5pc3RkLmgJMjAxMi0wNi0y NSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvaW5jbHVkZS91bmlzdGQu aAkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1MTc5OTYwMiArMDgwMApAQCAtMzEsNiArMzEsNyBAQAog I2luY2x1ZGUgPGJpdHMvYWxsdHlwZXMuaD4KIAogaW50IHBpcGUoaW50IFsyXSk7CitpbnQgcGlw ZTIoaW50IFsyXSwgaW50KTsKIGludCBjbG9zZShpbnQpOwogaW50IGR1cChpbnQpOwogaW50IGR1 cDIoaW50LCBpbnQpOwpkaWZmIC1OYXVyIG11c2wtMC45LjIuby9zcmMvZmNudGwvZmNudGwuYyBt dXNsLTAuOS4yL3NyYy9mY250bC9mY250bC5jCi0tLSBtdXNsLTAuOS4yLm8vc3JjL2ZjbnRsL2Zj bnRsLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIv c3JjL2ZjbnRsL2ZjbnRsLmMJMjAxMi0wNy0wNiAxMjo0OToyMy45NTE3OTk2MDIgKzA4MDAKQEAg LTI0LDMgKzI0LDUgQEAKIAl9CiAJcmV0dXJuIHN5c2NhbGwoU1lTX2ZjbnRsLCBmZCwgY21kLCBh cmcpOwogfQorCit3ZWFrX2FsaWFzKGZjbnRsLCBfX2ZjbnRsKTsKZGlmZiAtTmF1ciBtdXNsLTAu OS4yLm8vc3JjL2xpbnV4L2lvcGVybS5jIG11c2wtMC45LjIvc3JjL2xpbnV4L2lvcGVybS5jCi0t LSBtdXNsLTAuOS4yLm8vc3JjL2xpbnV4L2lvcGVybS5jCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAw MDAwMDAwICswNzAwCisrKyBtdXNsLTAuOS4yL3NyYy9saW51eC9pb3Blcm0uYwkyMDEyLTA3LTA2 IDEyOjQ5OjIzLjk1MTc5OTYwMiArMDgwMApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlICJzeXNj YWxsLmgiCisKK2ludCBpb3Blcm0odW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIG51 bSwgaW50IHR1cm5fb24pCit7CisJcmV0dXJuIHN5c2NhbGwoU1lTX2lvcGVybSwgZnJvbSwgbnVt LCB0dXJuX29uKTsKK30KZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vc3JjL2xpbnV4L2lvcGwuYyBt dXNsLTAuOS4yL3NyYy9saW51eC9pb3BsLmMKLS0tIG11c2wtMC45LjIuby9zcmMvbGludXgvaW9w bC5jCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyBtdXNsLTAuOS4yL3Ny Yy9saW51eC9pb3BsLmMJMjAxMi0wNy0wNiAxMjo0OToyMy45NTE3OTk2MDIgKzA4MDAKQEAgLTAs MCArMSw2IEBACisjaW5jbHVkZSAic3lzY2FsbC5oIgorCitpbnQgaW9wbChpbnQgbGV2ZWwpCit7 CisJcmV0dXJuIHN5c2NhbGwoU1lTX2lvcGwsIGxldmVsKTsKK30KZGlmZiAtTmF1ciBtdXNsLTAu OS4yLm8vc3JjL2xpbnV4L3NwbGljZS5jIG11c2wtMC45LjIvc3JjL2xpbnV4L3NwbGljZS5jCi0t LSBtdXNsLTAuOS4yLm8vc3JjL2xpbnV4L3NwbGljZS5jCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAw MDAwMDAwICswNzAwCisrKyBtdXNsLTAuOS4yL3NyYy9saW51eC9zcGxpY2UuYwkyMDEyLTA3LTA2 IDEyOjQ5OjIzLjk1MTc5OTYwMiArMDgwMApAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KKyNpbmNsdWRlICJzeXNjYWxsLmgiCisKK3NzaXplX3Qgc3BsaWNlKGludCBmZF9p biwgb2ZmX3QgKm9mZl9pbiwgaW50IGZkX291dCwgb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4s IHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gc3lzY2FsbChTWVNfc3BsaWNlLCBmZF9p biwgb2ZmX2luLCBmZF9vdXQsIG9mZl9vdXQsIGxlbiwgZmxhZ3MpOworfQpkaWZmIC1OYXVyIG11 c2wtMC45LjIuby9zcmMvbGludXgveGF0dHIuYyBtdXNsLTAuOS4yL3NyYy9saW51eC94YXR0ci5j Ci0tLSBtdXNsLTAuOS4yLm8vc3JjL2xpbnV4L3hhdHRyLmMJMTk3MC0wMS0wMSAwNzowMDowMC4w MDAwMDAwMDAgKzA3MDAKKysrIG11c2wtMC45LjIvc3JjL2xpbnV4L3hhdHRyLmMJMjAxMi0wNy0w NiAxMjo0OToyMy45NTE3OTk2MDIgKzA4MDAKQEAgLTAsMCArMSw0NyBAQAorI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgorI2luY2x1ZGUgInN5c2NhbGwuaCIKKworc3NpemVfdCBnZXR4YXR0cihjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUp Cit7CisJcmV0dXJuIHN5c2NhbGwoU1lTX2dldHhhdHRyLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6 ZSk7Cit9CisKK3NzaXplX3QgbGdldHhhdHRyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc3lzY2FsbChTWVNf bGdldHhhdHRyLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7Cit9CisKK3NzaXplX3QgZmdldHhh dHRyKGludCBmaWxlZGVzLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNp emUpCit7CisJcmV0dXJuIHN5c2NhbGwoU1lTX2ZnZXR4YXR0ciwgZmlsZWRlcywgbmFtZSwgdmFs dWUsIHNpemUpOworfQorCitzc2l6ZV90IGxpc3R4YXR0cihjb25zdCBjaGFyICpwYXRoLCBjaGFy ICpsaXN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc3lzY2FsbChTWVNfbGlzdHhhdHRyLCBw YXRoLCBsaXN0LCBzaXplKTsKK30KKworc3NpemVfdCBsbGlzdHhhdHRyKGNvbnN0IGNoYXIgKnBh dGgsIGNoYXIgKmxpc3QsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzeXNjYWxsKFNZU19sbGlz dHhhdHRyLCBwYXRoLCBsaXN0LCBzaXplKTsKK30KKworc3NpemVfdCBmbGlzdHhhdHRyKGludCBm aWxlZGVzLCBjaGFyICpsaXN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc3lzY2FsbChTWVNf Zmxpc3R4YXR0ciwgZmlsZWRlcywgbGlzdCwgc2l6ZSk7Cit9CisKK2ludCBzZXR4YXR0cihjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90 IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gc3lzY2FsbChTWVNfc2V0eGF0dHIsIHBhdGgs IG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Cit9CisKK2ludCBsc2V0eGF0dHIoY29uc3QgY2hh ciAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c2NhbGwoU1lTX2xzZXR4YXR0ciwgcGF0aCwgbmFt ZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworaW50IGZzZXR4YXR0cihpbnQgZmlsZWRlcywg Y29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxh Z3MpCit7CisJcmV0dXJuIHN5c2NhbGwoU1lTX2ZzZXR4YXR0ciwgZmlsZWRlcywgbmFtZSwgdmFs dWUsIHNpemUsIGZsYWdzKTsKK30KZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vc3JjL2xvY2FsZS9k dXBsb2NhbGUuYyBtdXNsLTAuOS4yL3NyYy9sb2NhbGUvZHVwbG9jYWxlLmMKLS0tIG11c2wtMC45 LjIuby9zcmMvbG9jYWxlL2R1cGxvY2FsZS5jCTIwMTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAw ICswODAwCisrKyBtdXNsLTAuOS4yL3NyYy9sb2NhbGUvZHVwbG9jYWxlLmMJMjAxMi0wNy0wNiAx Mjo0OToyMy45NTE3OTk2MDIgKzA4MDAKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8c3RkbGli Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAibG9jYWxlX2ltcGwuaCIKKyNpbmNs dWRlICJsaWJjLmgiCiAKIGxvY2FsZV90IGR1cGxvY2FsZShsb2NhbGVfdCBvbGQpCiB7CkBAIC05 LDMgKzEwLDUgQEAKIAlpZiAobmV3ICYmIG9sZCAhPSBMQ19HTE9CQUxfTE9DQUxFKSBtZW1jcHko bmV3LCBvbGQsIHNpemVvZiAqbmV3KTsKIAlyZXR1cm4gbmV3OwogfQorCit3ZWFrX2FsaWFzKGR1 cGxvY2FsZSwgX19kdXBsb2NhbGUpOwpkaWZmIC1OYXVyIG11c2wtMC45LjIuby9zcmMvbG9jYWxl L2ZyZWVsb2NhbGUuYyBtdXNsLTAuOS4yL3NyYy9sb2NhbGUvZnJlZWxvY2FsZS5jCi0tLSBtdXNs LTAuOS4yLm8vc3JjL2xvY2FsZS9mcmVlbG9jYWxlLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAw MDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL2xvY2FsZS9mcmVlbG9jYWxlLmMJMjAxMi0w Ny0wNiAxMjo0OToyMy45NTI3OTk2MDIgKzA4MDAKQEAgLTEsNyArMSwxMCBAQAogI2luY2x1ZGUg PHN0ZGxpYi5oPgogI2luY2x1ZGUgImxvY2FsZV9pbXBsLmgiCisjaW5jbHVkZSAibGliYy5oIgog CiB2b2lkIGZyZWVsb2NhbGUobG9jYWxlX3QgbCkKIHsKIAlmcmVlKGwpOwogfQorCit3ZWFrX2Fs aWFzKGZyZWVsb2NhbGUsIF9fZnJlZWxvY2FsZSk7CmRpZmYgLU5hdXIgbXVzbC0wLjkuMi5vL3Ny Yy9sb2NhbGUvaXN3Y3R5cGVfbC5jIG11c2wtMC45LjIvc3JjL2xvY2FsZS9pc3djdHlwZV9sLmMK LS0tIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL2lzd2N0eXBlX2wuYwkyMDEyLTA2LTI1IDA5OjAy OjU1LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0wLjkuMi9zcmMvbG9jYWxlL2lzd2N0eXBlX2wu YwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mjc5OTYwMiArMDgwMApAQCAtMSw2ICsxLDkgQEAKICNp bmNsdWRlIDx3Y3R5cGUuaD4KKyNpbmNsdWRlICJsaWJjLmgiCiAKIGludCBpc3djdHlwZV9sKHdp bnRfdCBjLCB3Y3R5cGVfdCB0LCBsb2NhbGVfdCBsKQogewogCXJldHVybiBpc3djdHlwZShjLCB0 KTsKIH0KKword2Vha19hbGlhcyhpc3djdHlwZV9sLCBfX2lzd2N0eXBlX2wpOwpkaWZmIC1OYXVy IG11c2wtMC45LjIuby9zcmMvbG9jYWxlL25ld2xvY2FsZS5jIG11c2wtMC45LjIvc3JjL2xvY2Fs ZS9uZXdsb2NhbGUuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvbmV3bG9jYWxlLmMJMjAx Mi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL2xvY2Fs ZS9uZXdsb2NhbGUuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mjc5OTYwMiArMDgwMApAQCAtMSw2 ICsxLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs dWRlICJsb2NhbGVfaW1wbC5oIgorI2luY2x1ZGUgImxpYmMuaCIKIAogbG9jYWxlX3QgbmV3bG9j YWxlKGludCBtYXNrLCBjb25zdCBjaGFyICpuYW1lLCBsb2NhbGVfdCBiYXNlKQogewpAQCAtOSwz ICsxMCw1IEBACiAJaWYgKCFiYXNlKSBiYXNlID0gY2FsbG9jKDEsIHNpemVvZiAqYmFzZSk7CiAJ cmV0dXJuIGJhc2U7CiB9CisKK3dlYWtfYWxpYXMobmV3bG9jYWxlLCBfX25ld2xvY2FsZSk7CmRp ZmYgLU5hdXIgbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvbmxfbGFuZ2luZm9fbC5jIG11c2wtMC45 LjIvc3JjL2xvY2FsZS9ubF9sYW5naW5mb19sLmMKLS0tIG11c2wtMC45LjIuby9zcmMvbG9jYWxl L25sX2xhbmdpbmZvX2wuYwkyMDEyLTA2LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgwMAorKysg bXVzbC0wLjkuMi9zcmMvbG9jYWxlL25sX2xhbmdpbmZvX2wuYwkyMDEyLTA3LTA2IDEyOjQ5OjIz Ljk1Mjc5OTYwMiArMDgwMApAQCAtMSw3ICsxLDEwIEBACiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAj aW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlICJsaWJjLmgiCiAKIGNoYXIgKm5sX2xhbmdp bmZvX2wobmxfaXRlbSBpdGVtLCBsb2NhbGVfdCBsKQogewogCXJldHVybiBubF9sYW5naW5mbyhp dGVtKTsKIH0KKword2Vha19hbGlhcyhubF9sYW5naW5mb19sLCBfX25sX2xhbmdpbmZvX2wpOwpk aWZmIC1OYXVyIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3N0cmNvbGxfbC5jIG11c2wtMC45LjIv c3JjL2xvY2FsZS9zdHJjb2xsX2wuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvc3RyY29s bF9sLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIv c3JjL2xvY2FsZS9zdHJjb2xsX2wuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mjc5OTYwMiArMDgw MApAQCAtMSw3ICsxLDEwIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bG9jYWxl Lmg+CisjaW5jbHVkZSAibGliYy5oIgogCiBpbnQgc3RyY29sbF9sKGNvbnN0IGNoYXIgKmwsIGNv bnN0IGNoYXIgKnIsIGxvY2FsZV90IGxvYykKIHsKIAlyZXR1cm4gc3RyY29sbChsLCByKTsKIH0K Kword2Vha19hbGlhcyhzdHJjb2xsX2wsIF9fc3RyY29sbF9sKTsKZGlmZiAtTmF1ciBtdXNsLTAu OS4yLm8vc3JjL2xvY2FsZS9zdHJmdGltZV9sLmMgbXVzbC0wLjkuMi9zcmMvbG9jYWxlL3N0cmZ0 aW1lX2wuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvc3RyZnRpbWVfbC5jCTIwMTItMDYt MjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAuOS4yL3NyYy9sb2NhbGUvc3Ry ZnRpbWVfbC5jCTIwMTItMDctMDYgMTI6NDk6MjMuOTUyNzk5NjAyICswODAwCkBAIC0xLDcgKzEs MTAgQEAKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAi bGliYy5oIgogCiBzaXplX3Qgc3RyZnRpbWVfbChjaGFyICpzLCBzaXplX3QgbiwgY29uc3QgY2hh ciAqZiwgY29uc3Qgc3RydWN0IHRtICp0bSwgbG9jYWxlX3QgbCkKIHsKIAlyZXR1cm4gc3RyZnRp bWUocywgbiwgZiwgdG0pOwogfQorCit3ZWFrX2FsaWFzKHN0cmZ0aW1lX2wsIF9fc3RyZnRpbWVf bCk7CmRpZmYgLU5hdXIgbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvc3RyeGZybV9sLmMgbXVzbC0w LjkuMi9zcmMvbG9jYWxlL3N0cnhmcm1fbC5jCi0tLSBtdXNsLTAuOS4yLm8vc3JjL2xvY2FsZS9z dHJ4ZnJtX2wuYwkyMDEyLTA2LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0w LjkuMi9zcmMvbG9jYWxlL3N0cnhmcm1fbC5jCTIwMTItMDctMDYgMTI6NDk6MjMuOTUyNzk5NjAy ICswODAwCkBAIC0xLDYgKzEsOSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxp YmMuaCIKIAogc2l6ZV90IHN0cnhmcm1fbChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNp emVfdCBuLCBsb2NhbGVfdCBsKQogewogCXJldHVybiBzdHJ4ZnJtKGRlc3QsIHNyYywgbik7CiB9 CisKK3dlYWtfYWxpYXMoc3RyeGZybV9sLCBfX3N0cnhmcm1fbCk7CmRpZmYgLU5hdXIgbXVzbC0w LjkuMi5vL3NyYy9sb2NhbGUvdG93bG93ZXJfbC5jIG11c2wtMC45LjIvc3JjL2xvY2FsZS90b3ds b3dlcl9sLmMKLS0tIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3Rvd2xvd2VyX2wuYwkyMDEyLTA2 LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0wLjkuMi9zcmMvbG9jYWxlL3Rv d2xvd2VyX2wuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mjc5OTYwMiArMDgwMApAQCAtMSw2ICsx LDkgQEAKICNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNpbmNsdWRlICJsaWJjLmgiCiAKIHdpbnRfdCB0 b3dsb3dlcl9sKHdpbnRfdCBjLCBsb2NhbGVfdCBsKQogewogCXJldHVybiB0b3dsb3dlcihjKTsK IH0KKword2Vha19hbGlhcyh0b3dsb3dlcl9sLCBfX3Rvd2xvd2VyX2wpOwpkaWZmIC1OYXVyIG11 c2wtMC45LjIuby9zcmMvbG9jYWxlL3Rvd3VwcGVyX2wuYyBtdXNsLTAuOS4yL3NyYy9sb2NhbGUv dG93dXBwZXJfbC5jCi0tLSBtdXNsLTAuOS4yLm8vc3JjL2xvY2FsZS90b3d1cHBlcl9sLmMJMjAx Mi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL2xvY2Fs ZS90b3d1cHBlcl9sLmMJMjAxMi0wNy0wNiAxMjo0OToyMy45NTI3OTk2MDIgKzA4MDAKQEAgLTEs NiArMSw5IEBACiAjaW5jbHVkZSA8d2N0eXBlLmg+CisjaW5jbHVkZSAibGliYy5oIgogCiB3aW50 X3QgdG93dXBwZXJfbCh3aW50X3QgYywgbG9jYWxlX3QgbCkKIHsKIAlyZXR1cm4gdG93dXBwZXIo Yyk7CiB9CisKK3dlYWtfYWxpYXModG93dXBwZXJfbCwgX190b3d1cHBlcl9sKTsKZGlmZiAtTmF1 ciBtdXNsLTAuOS4yLm8vc3JjL2xvY2FsZS91c2Vsb2NhbGUuYyBtdXNsLTAuOS4yL3NyYy9sb2Nh bGUvdXNlbG9jYWxlLmMKLS0tIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3VzZWxvY2FsZS5jCTIw MTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAuOS4yL3NyYy9sb2Nh bGUvdXNlbG9jYWxlLmMJMjAxMi0wNy0wNiAxMjo0OToyMy45NTM3OTk2MDIgKzA4MDAKQEAgLTEs NSArMSw2IEBACiAjaW5jbHVkZSAibG9jYWxlX2ltcGwuaCIKICNpbmNsdWRlICJwdGhyZWFkX2lt cGwuaCIKKyNpbmNsdWRlICJsaWJjLmgiCiAKIGxvY2FsZV90IHVzZWxvY2FsZShsb2NhbGVfdCBs KQogewpAQCAtOCwzICs5LDUgQEAKIAlpZiAobCkgc2VsZi0+bG9jYWxlID0gbDsKIAlyZXR1cm4g b2xkOwogfQorCit3ZWFrX2FsaWFzKHVzZWxvY2FsZSwgX191c2Vsb2NhbGUpOwpkaWZmIC1OYXVy IG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3djc2NvbGxfbC5jIG11c2wtMC45LjIvc3JjL2xvY2Fs ZS93Y3Njb2xsX2wuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvd2NzY29sbF9sLmMJMjAx Mi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL2xvY2Fs ZS93Y3Njb2xsX2wuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mzc5OTYwMiArMDgwMApAQCAtMSw2 ICsxLDkgQEAKICNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxpYmMuaCIKIAogaW50IHdj c2NvbGxfbChjb25zdCB3Y2hhcl90ICpsLCBjb25zdCB3Y2hhcl90ICpyLCBsb2NhbGVfdCBsb2Nh bGUpCiB7CiAJcmV0dXJuIHdjc2NvbGwobCwgcik7CiB9CisKK3dlYWtfYWxpYXMod2NzY29sbF9s LCBfX3djc2NvbGxfbCk7CmRpZmYgLU5hdXIgbXVzbC0wLjkuMi5vL3NyYy9sb2NhbGUvd2NzeGZy bV9sLmMgbXVzbC0wLjkuMi9zcmMvbG9jYWxlL3djc3hmcm1fbC5jCi0tLSBtdXNsLTAuOS4yLm8v c3JjL2xvY2FsZS93Y3N4ZnJtX2wuYwkyMDEyLTA2LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgw MAorKysgbXVzbC0wLjkuMi9zcmMvbG9jYWxlL3djc3hmcm1fbC5jCTIwMTItMDctMDYgMTI6NDk6 MjMuOTUzNzk5NjAyICswODAwCkBAIC0xLDYgKzEsOSBAQAogI2luY2x1ZGUgPHdjaGFyLmg+Cisj aW5jbHVkZSAibGliYy5oIgogCiBzaXplX3Qgd2NzeGZybV9sKHdjaGFyX3QgKmRlc3QsIGNvbnN0 IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4sIGxvY2FsZV90IGxvY2FsZSkKIHsKIAlyZXR1cm4gd2Nz eGZybShkZXN0LCBzcmMsIG4pOwogfQorCit3ZWFrX2FsaWFzKHdjc3hmcm1fbCwgX193Y3N4ZnJt X2wpOwpkaWZmIC1OYXVyIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3djdHlwZV9sLmMgbXVzbC0w LjkuMi9zcmMvbG9jYWxlL3djdHlwZV9sLmMKLS0tIG11c2wtMC45LjIuby9zcmMvbG9jYWxlL3dj dHlwZV9sLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45 LjIvc3JjL2xvY2FsZS93Y3R5cGVfbC5jCTIwMTItMDctMDYgMTI6NDk6MjMuOTUzNzk5NjAyICsw ODAwCkBAIC0xLDYgKzEsOSBAQAogI2luY2x1ZGUgPHdjdHlwZS5oPgorI2luY2x1ZGUgImxpYmMu aCIKIAogd2N0eXBlX3Qgd2N0eXBlX2woY29uc3QgY2hhciAqcywgbG9jYWxlX3QgbCkKIHsKIAly ZXR1cm4gd2N0eXBlKHMpOwogfQorCit3ZWFrX2FsaWFzKHdjdHlwZV9sLCBfX3djdHlwZV9sKTsK ZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vc3JjL21hdGgvX19mcGNsYXNzaWZ5LmMgbXVzbC0wLjku Mi9zcmMvbWF0aC9fX2ZwY2xhc3NpZnkuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9tYXRoL19fZnBj bGFzc2lmeS5jCTIwMTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAu OS4yL3NyYy9tYXRoL19fZnBjbGFzc2lmeS5jCTIwMTItMDctMDYgMTM6MDU6MTEuMzQ0Nzk5NjAy ICswODAwCkBAIC04LDMgKzgsMTAgQEAKIAlpZiAoZT09MHg3ZmYpIHJldHVybiB1LmJpdHM8PDEy ID8gRlBfTkFOIDogRlBfSU5GSU5JVEU7CiAJcmV0dXJuIEZQX05PUk1BTDsKIH0KKworaW50IGZp bml0ZShkb3VibGUgeCkKK3sKKwlyZXR1cm4gaXNmaW5pdGUoeCk7Cit9CisKK3dlYWtfYWxpYXMo ZmluaXRlLCBfX2Zpbml0ZSk7CmRpZmYgLU5hdXIgbXVzbC0wLjkuMi5vL3NyYy9zZWxlY3QvcG9s bC5jIG11c2wtMC45LjIvc3JjL3NlbGVjdC9wb2xsLmMKLS0tIG11c2wtMC45LjIuby9zcmMvc2Vs ZWN0L3BvbGwuYwkyMDEyLTA2LTI1IDA5OjAyOjU1LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0w LjkuMi9zcmMvc2VsZWN0L3BvbGwuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Mzc5OTYwMiArMDgw MApAQCAtNiwzICs2LDUgQEAKIHsKIAlyZXR1cm4gc3lzY2FsbF9jcChTWVNfcG9sbCwgZmRzLCBu LCB0aW1lb3V0KTsKIH0KKword2Vha19hbGlhcyhwb2xsLCBfX3BvbGwpOwpkaWZmIC1OYXVyIG11 c2wtMC45LjIuby9zcmMvc2lnbmFsL2kzODYvc2lnc2V0am1wLnMgbXVzbC0wLjkuMi9zcmMvc2ln bmFsL2kzODYvc2lnc2V0am1wLnMKLS0tIG11c2wtMC45LjIuby9zcmMvc2lnbmFsL2kzODYvc2ln c2V0am1wLnMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45 LjIvc3JjL3NpZ25hbC9pMzg2L3NpZ3NldGptcC5zCTIwMTItMDctMDYgMTI6NDk6MjMuOTUzNzk5 NjAyICswODAwCkBAIC0xLDYgKzEsOSBAQAogLmdsb2JhbCBzaWdzZXRqbXAKIC50eXBlIHNpZ3Nl dGptcCxAZnVuY3Rpb24KKy53ZWFrIF9fc2lnc2V0am1wCisudHlwZSBfX3NpZ3NldGptcCxAZnVu Y3Rpb24KIHNpZ3NldGptcDoKK19fc2lnc2V0am1wOgogCW1vdiA0KCVlc3ApLCVlYXgKIAltb3Yg OCglZXNwKSwlZWN4CiAJbW92ICVlY3gsMjQoJWVheCkKZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8v c3JjL3NpZ25hbC94ODZfNjQvc2lnc2V0am1wLnMgbXVzbC0wLjkuMi9zcmMvc2lnbmFsL3g4Nl82 NC9zaWdzZXRqbXAucwotLS0gbXVzbC0wLjkuMi5vL3NyYy9zaWduYWwveDg2XzY0L3NpZ3NldGpt cC5zCTIwMTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAuOS4yL3Ny Yy9zaWduYWwveDg2XzY0L3NpZ3NldGptcC5zCTIwMTItMDctMDYgMTI6NDk6MjMuOTU1Nzk5NjAy ICswODAwCkBAIC0xLDcgKzEsMTAgQEAKIC8qIENvcHlyaWdodCAyMDExLTIwMTIgTmljaG9sYXMg Si4gS2FpbiwgbGljZW5zZWQgdW5kZXIgc3RhbmRhcmQgTUlUIGxpY2Vuc2UgKi8KIC5nbG9iYWwg c2lnc2V0am1wCiAudHlwZSBzaWdzZXRqbXAsQGZ1bmN0aW9uCisud2VhayBfX3NpZ3NldGptcAor LnR5cGUgX19zaWdzZXRqbXAsQGZ1bmN0aW9uCiBzaWdzZXRqbXA6CitfX3NpZ3NldGptcDoKIAlh bmRsICVlc2ksJWVzaQogCW1vdnEgJXJzaSw2NCglcmRpKQogCWp6IDFmCmRpZmYgLU5hdXIgbXVz bC0wLjkuMi5vL3NyYy9zdGRpby9mc2NhbmYuYyBtdXNsLTAuOS4yL3NyYy9zdGRpby9mc2NhbmYu YwotLS0gbXVzbC0wLjkuMi5vL3NyYy9zdGRpby9mc2NhbmYuYwkyMDEyLTA2LTI1IDA5OjAyOjU1 LjAwMDAwMDAwMCArMDgwMAorKysgbXVzbC0wLjkuMi9zcmMvc3RkaW8vZnNjYW5mLmMJMjAxMi0w Ny0wNiAxMjo0OToyMy45NTU3OTk2MDIgKzA4MDAKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8 c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsaWJjLmgiCiAKIGludCBm c2NhbmYoRklMRSAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC0xMCwzICsxMSw1IEBA CiAJdmFfZW5kKGFwKTsKIAlyZXR1cm4gcmV0OwogfQorCit3ZWFrX2FsaWFzKGZzY2FuZiwgX19p c29jOTlfZnNjYW5mKTsKZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vc3JjL3N0ZGlvL3NzY2FuZi5j IG11c2wtMC45LjIvc3JjL3N0ZGlvL3NzY2FuZi5jCi0tLSBtdXNsLTAuOS4yLm8vc3JjL3N0ZGlv L3NzY2FuZi5jCTIwMTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisrKyBtdXNsLTAu OS4yL3NyYy9zdGRpby9zc2NhbmYuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1NTc5OTYwMiArMDgw MApAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgImxpYmMuaCIKIAogaW50IHNzY2FuZihjb25zdCBjaGFyICpzLCBjb25zdCBj aGFyICpmbXQsIC4uLikKIHsKQEAgLTEwLDMgKzExLDUgQEAKIAl2YV9lbmQoYXApOwogCXJldHVy biByZXQ7CiB9CisKK3dlYWtfYWxpYXMoc3NjYW5mLCBfX2lzb2M5OV9zc2NhbmYpOwpkaWZmIC1O YXVyIG11c2wtMC45LjIuby9zcmMvc3RkbGliL3N0cnRvZC5jIG11c2wtMC45LjIvc3JjL3N0ZGxp Yi9zdHJ0b2QuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9zdGRsaWIvc3RydG9kLmMJMjAxMi0wNi0y NSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL3N0ZGxpYi9zdHJ0 b2QuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1NTc5OTYwMiArMDgwMApAQCAtMiw2ICsyLDcgQEAK ICNpbmNsdWRlICJzaGdldGMuaCIKICNpbmNsdWRlICJmbG9hdHNjYW4uaCIKICNpbmNsdWRlICJz dGRpb19pbXBsLmgiCisjaW5jbHVkZSAibGliYy5oIgogCiBzdGF0aWMgbG9uZyBkb3VibGUgc3Ry dG94KGNvbnN0IGNoYXIgKnMsIGNoYXIgKipwLCBpbnQgcHJlYykKIHsKQEAgLTMwLDMgKzMxLDUg QEAKIHsKIAlyZXR1cm4gc3RydG94KHMsIHAsIDIpOwogfQorCit3ZWFrX2FsaWFzKHN0cnRvZCwg X19zdHJ0b2RfaW50ZXJuYWwpOwpkaWZmIC1OYXVyIG11c2wtMC45LjIuby9zcmMvc3RkbGliL3N0 cnRvbC5jIG11c2wtMC45LjIvc3JjL3N0ZGxpYi9zdHJ0b2wuYwotLS0gbXVzbC0wLjkuMi5vL3Ny Yy9zdGRsaWIvc3RydG9sLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4wMDAwMDAwMDAgKzA4MDAKKysr IG11c2wtMC45LjIvc3JjL3N0ZGxpYi9zdHJ0b2wuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1NTc5 OTYwMiArMDgwMApAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlICJzdGRpb19pbXBsLmgiCiAjaW5j bHVkZSAiaW50c2Nhbi5oIgogI2luY2x1ZGUgInNoZ2V0Yy5oIgorI2luY2x1ZGUgImxpYmMuaCIK IAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3goY29uc3QgY2hhciAqcywgY2hhciAq KnAsIGludCBiYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgbGltKQogewpAQCAtNTEsMyArNTIsOCBA QAogewogCXJldHVybiBzdHJ0b3VsbChzLCBwLCBiYXNlKTsKIH0KKword2Vha19hbGlhcyhzdHJ0 b2xsLCBfX3N0cnRvbGxfaW50ZXJuYWwpOword2Vha19hbGlhcyhzdHJ0b2wsIF9fc3RydG9sX2lu dGVybmFsKTsKK3dlYWtfYWxpYXMoc3RydG91bCwgX19zdHJ0b3VsX2ludGVybmFsKTsKK3dlYWtf YWxpYXMoc3RydG91bGwsIF9fc3RydG91bGxfaW50ZXJuYWwpOwpkaWZmIC1OYXVyIG11c2wtMC45 LjIuby9zcmMvc3RyaW5nL3Jhd21lbWNoci5jIG11c2wtMC45LjIvc3JjL3N0cmluZy9yYXdtZW1j aHIuYwotLS0gbXVzbC0wLjkuMi5vL3NyYy9zdHJpbmcvcmF3bWVtY2hyLmMJMTk3MC0wMS0wMSAw NzowMDowMC4wMDAwMDAwMDAgKzA3MDAKKysrIG11c2wtMC45LjIvc3JjL3N0cmluZy9yYXdtZW1j aHIuYwkyMDEyLTA3LTA2IDEyOjQ5OjIzLjk1Njc5OTYwMiArMDgwMApAQCAtMCwwICsxLDE0IEBA CisvLyBUYWtlbiBmcm9tIHVDbGliYyBsaWJjL3N0cmluZy9yYXdtZW1jaHIuYworI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgImxpYmMuaCIKKwordm9pZCAqcmF3bWVtY2hyKGNvbnN0IHZv aWQgKnMsIGludCBjKQoreworCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnIgPSBzOwor CisJd2hpbGUgKCpyICE9ICgodW5zaWduZWQgY2hhciljKSkgKytyOworCisJcmV0dXJuICh2b2lk ICopIHI7CS8qIHNpbGVuY2UgdGhlIHdhcm5pbmcgKi8KK30KKword2Vha19hbGlhcyhyYXdtZW1j aHIsIF9fcmF3bWVtY2hyKTsKZGlmZiAtTmF1ciBtdXNsLTAuOS4yLm8vc3JjL3N0cmluZy9zdHJu ZHVwLmMgbXVzbC0wLjkuMi9zcmMvc3RyaW5nL3N0cm5kdXAuYwotLS0gbXVzbC0wLjkuMi5vL3Ny Yy9zdHJpbmcvc3RybmR1cC5jCTIwMTItMDYtMjUgMDk6MDI6NTUuMDAwMDAwMDAwICswODAwCisr KyBtdXNsLTAuOS4yL3NyYy9zdHJpbmcvc3RybmR1cC5jCTIwMTItMDctMDYgMTI6NDk6MjMuOTU2 Nzk5NjAyICswODAwCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1 ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxpYmMuaCIKIAogY2hhciAqc3RybmR1cChjb25zdCBj aGFyICpzLCBzaXplX3QgbikKIHsKQEAgLTEwLDMgKzExLDUgQEAKIAlkW2xdID0gMDsKIAlyZXR1 cm4gZDsKIH0KKword2Vha19hbGlhcyhzdHJuZHVwLCBfX3N0cm5kdXApOwpkaWZmIC1OYXVyIG11 c2wtMC45LjIuby9zcmMvdW5pc3RkL3BpcGUuYyBtdXNsLTAuOS4yL3NyYy91bmlzdGQvcGlwZS5j Ci0tLSBtdXNsLTAuOS4yLm8vc3JjL3VuaXN0ZC9waXBlLmMJMjAxMi0wNi0yNSAwOTowMjo1NS4w MDAwMDAwMDAgKzA4MDAKKysrIG11c2wtMC45LjIvc3JjL3VuaXN0ZC9waXBlLmMJMjAxMi0wNy0w NiAxMjo0OToyMy45NTY3OTk2MDIgKzA4MDAKQEAgLTUsMyArNSw4IEBACiB7CiAJcmV0dXJuIHN5 c2NhbGwoU1lTX3BpcGUsIGZkKTsKIH0KKworaW50IHBpcGUyKGludCBmZFsyXSwgaW50IGZsZykK K3sKKwlyZXR1cm4gc3lzY2FsbChTWVNfcGlwZSwgZmQsIGZsZyk7Cit9Cg== --MP_/1vxsYYuOWbxB7sTHmSml975--