From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Fabrice Popineau Newsgroups: gmane.emacs.devel Subject: Re: Windows 64 port Date: Tue, 28 Feb 2012 22:32:03 +0100 Message-ID: References: <20120219211800.0000558f@unknown> <834numv7js.fsf@gnu.org> <83ty2ltep0.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=00151740295c6ddbd504ba0cf6f7 X-Trace: dough.gmane.org 1330478029 5296 80.91.229.3 (29 Feb 2012 01:13:49 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 29 Feb 2012 01:13:49 +0000 (UTC) Cc: ajmr@ilovetortilladepatatas.com, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Feb 29 02:13:47 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1S2Y6z-0004R4-GW for ged-emacs-devel@m.gmane.org; Wed, 29 Feb 2012 02:13:46 +0100 Original-Received: from localhost ([::1]:41956 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S2Y6y-0000NT-Nz for ged-emacs-devel@m.gmane.org; Tue, 28 Feb 2012 20:13:44 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:49311) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S2Uew-0004Zo-AH for emacs-devel@gnu.org; Tue, 28 Feb 2012 16:32:36 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S2Ueu-0001fk-03 for emacs-devel@gnu.org; Tue, 28 Feb 2012 16:32:33 -0500 Original-Received: from mail-bk0-f41.google.com ([209.85.214.41]:37239) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S2Ueo-0001e8-L0; Tue, 28 Feb 2012 16:32:27 -0500 Original-Received: by bkty12 with SMTP id y12so6451424bkt.0 for ; Tue, 28 Feb 2012 13:32:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=onYxqAoXqjpkB2UPvtP1v4rWphWoTqp2H9Vw/6hLZak=; b=YYQlG5nOqvutiUUE3j84gYmhc3kLwhyi/r2DWqXRSqCFnmued5QmvPbUhAUk+7vW3u 6SA2FG43kaoxRKABRtEtT8Vf7C/VAi+K3ZNigdQRGZd+3F/3grnEWBjY5F2DzJPnoBop 63nEMO9IFcgXRJNZ7xeqU8z0GPOqDBj+eqo4Y= Original-Received: by 10.205.121.138 with SMTP id gc10mr7890478bkc.23.1330464743610; Tue, 28 Feb 2012 13:32:23 -0800 (PST) Original-Received: by 10.204.60.3 with HTTP; Tue, 28 Feb 2012 13:32:03 -0800 (PST) In-Reply-To: <83ty2ltep0.fsf@gnu.org> X-Google-Sender-Auth: A3WHUbWuRYCtWcUg3kBZthjUI1k X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.214.41 X-Mailman-Approved-At: Tue, 28 Feb 2012 20:13:40 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:148833 Archived-At: --00151740295c6ddbd504ba0cf6f7 Content-Type: multipart/alternative; boundary=00151740295c6ddbcf04ba0cf6f5 --00151740295c6ddbcf04ba0cf6f5 Content-Type: text/plain; charset=ISO-8859-1 > > Can you tell which parts of the current scheme need to be reworked, > and why do you think so? > > > === modified file 'lib/strftime.c' > > --- lib/strftime.c 2011-03-31 04:24:03 +0000 > > +++ lib/strftime.c 2011-12-05 13:09:35 +0000 > > @@ -36,9 +36,13 @@ > > #include > > #include > > > > +#ifdef _MSC_VER > > +#define tzname _tzname > > +#else > > #if HAVE_TZNAME && !HAVE_DECL_TZNAME > > extern char *tzname[]; > > #endif > > +#endif > > This seems to be unrelated to 64-bit hosts. Why is it needed, when > s/ms-w32.h has the same #define (which your patch #ifdef's away)? > What is the issue here? > I compile with USE_CRT_DLL=1. If I define tzname as _tzname is ms-w32.h, I get an error when including MS time.h on some function returning an array. If I don't define it this way in strftime, I get on error when linking because msvcrt has _tzname, not tzname. > > === modified file 'src/editfns.c' > > --- src/editfns.c 2012-01-19 07:21:25 +0000 > > +++ src/editfns.c 2012-02-05 20:06:34 +0000 > > @@ -82,6 +82,8 @@ > > > > #ifdef WINDOWSNT > > extern Lisp_Object w32_get_internal_run_time (void); > > + > > +extern struct tm *localtime (const time_t *t); > > #endif > > Why is this needed? It seems also unrelated to 64-bit Windows. To remove a warning on localtime not define, hence supposed to return an int which has not the same size as a pointer (now). > > -internal_lisp_condition_case (volatile Lisp_Object var, Lisp_Object > bodyform, > > +internal_lisp_condition_case (/* volatile */ Lisp_Object var, > Lisp_Object bodyform, > > Does MSVC have problems with the `volatile' qualifier? > > Nope. A leftover. Sorry. > > --- src/frame.c 2012-01-19 07:21:25 +0000 > > +++ src/frame.c 2012-02-05 20:06:34 +0000 > > @@ -812,6 +812,7 @@ > > #ifdef HAVE_WINDOW_SYSTEM > > if (track && FRAME_WINDOW_P (XFRAME (frame))) > > { > > + extern Lisp_Object x_get_focus_frame(struct frame *); > > This should go into w32term.h (it is already in xterm.h and nsterm.h). > > > --- src/m/amdx86-64.h 2012-01-19 07:21:25 +0000 > > +++ src/m/amdx86-64.h 2012-02-05 20:06:34 +0000 > > @@ -17,7 +17,8 @@ > > You should have received a copy of the GNU General Public License > > along with GNU Emacs. If not, see . */ > > > > -#define BITS_PER_LONG 64 > > +#define BITS_PER_LONG 32 > > Here Windows and Posix systems differ, so it's wrong to do this > unconditionally. Does the 64-bit Windows define _LLP64 or some such > somewhere on its headers? If so, perhaps we could condition the above > on that macro, vs _LP64 on Posix hosts. I have added WIN64 and _WIN64 as symbols in nmake.defs because this is the way MS does it (they used WIN32 and _WIN32). The latter is defined by the compiler when targetting x64. I have attached a more complete version of my patch. It fixes many compilation warnings too in several ways : - including headers in various places (w32.h mostly), check - const problems in regex.c (large patch, but harmless) - errno error codes in sys/socket.h that are already defined by the system errno.h - turn off compiler warnings of 3 kinds (harmless, but frequent in emacs code) It will also fix link time warnings about malloc; realloc and free by preventing their libc counterparts to be declared by the standard headers (given we use gmalloc on Windows, I hope it is not a problem). Finally, there are the 64 bits patches. As I said, the heap allocation scheme should probably be rewritten. I did the simplest thing : limit the heap to 32Gb (else it was trying allocate a heap of 2^61 - base adress bytes, failing to do that, it tried again by diminishing the size 1Mb by 1Mb!). There are many ways to compile emacs for windows (mingw, msvc, msvcrt, libc etc.). I can't check all of them so feel free to use veto any part. I'll try to find other ways to achieve the same effect. Best regards, Fabrice --00151740295c6ddbcf04ba0cf6f5 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Can you tell whic= h parts of the current scheme need to be reworked,
and why do you think so?

> =3D=3D=3D modified file 'lib/strftime.c'
> --- lib/strftime.c =A0 =A02011-03-31 04:24:03 +0000
> +++ lib/strftime.c =A0 =A02011-12-05 13:09:35 +0000
> @@ -36,9 +36,13 @@
> =A0#include <ctype.h>
> =A0#include <time.h>
>
> +#ifdef _MSC_VER
> +#define tzname _tzname
> +#else
> =A0#if HAVE_TZNAME && !HAVE_DECL_TZNAME
> =A0extern char *tzname[];
> =A0#endif
> +#endif

This seems to be unrelated to 64-bit hosts. =A0Why is it needed, when
s/ms-w32.h has the same #define (which your patch #ifdef's away)?
What is the issue here?

I compile with = USE_CRT_DLL=3D1. If I define tzname as _tzname is ms-w32.h, I get an error = when including MS time.h
on some function returning an array. If = I don't define it this way in strftime, I get on error when linking bec= ause msvcrt has _tzname, not tzname.

=A0
> =3D=3D=3D modified file 'src/editfns.c'
> --- src/editfns.c =A0 =A0 2012-01-19 07:21:25 +0000
> +++ src/editfns.c =A0 =A0 2012-02-05 20:06:34 +0000
> @@ -82,6 +82,8 @@
>
> =A0#ifdef WINDOWSNT
> =A0extern Lisp_Object w32_get_internal_run_time (void);
> +
> +extern struct tm *localtime (const time_t *t);
> =A0#endif

Why is this needed? =A0It seems also unrelated to 64-bit Windows.

To remove a warning on localtime not define, hence s= upposed to return an int=A0
which has not the same size as a poin= ter (now).

=A0
=A0
> -internal_lisp_condition_case (volatile Lisp_Object var, Lisp_Object b= odyform,
> +internal_lisp_condition_case (/* volatile */ Lisp_Object var, Lisp_Ob= ject bodyform,

Does MSVC have problems with the `volatile' qualifier?


Nope. A leftover. Sorry.
=A0=
> --- src/frame.c =A0 =A0 =A0 2012-01-19 07:21:25 +0000
> +++ src/frame.c =A0 =A0 =A0 2012-02-05 20:06:34 +0000
> @@ -812,6 +812,7 @@
> =A0#ifdef HAVE_WINDOW_SYSTEM
> =A0 =A0if (track && FRAME_WINDOW_P (XFRAME (frame)))
> =A0 =A0 =A0{
> + =A0 =A0 =A0extern Lisp_Object x_get_focus_frame(struct frame *);

This should go into w32term.h (it is already in xterm.h and nsterm.h).

> --- src/m/amdx86-64.h 2012-01-19 07:21:25 +0000
> +++ src/m/amdx86-64.h 2012-02-05 20:06:34 +0000
> @@ -17,7 +17,8 @@
> =A0You should have received a copy of the GNU General Public License > =A0along with GNU Emacs. =A0If not, see <http://www.gnu.org/licenses/>. =A0*= /
>
> -#define BITS_PER_LONG =A0 =A0 =A0 =A0 =A0 64
> +#define BITS_PER_LONG =A0 =A0 =A0 =A0 =A0 32

Here Windows and Posix systems differ, so it's wrong to do this
unconditionally. =A0Does the 64-bit Windows define _LLP64 or some such
somewhere on its headers? =A0If so, perhaps we could condition the above on that macro, vs _LP64 on Posix hosts.

I h= ave added WIN64 and _WIN64 as symbols in nmake.defs because this is the way= MS does it=A0
(they used WIN32 and _WIN32). The latter is define= d by the compiler when targetting x64.

I have attached a more complete version of my patch. It= fixes many compilation warnings too in several ways :
- includin= g headers in various places (w32.h mostly), check
- const problem= s in regex.c (large patch, but harmless)
- errno error codes in sys/socket.h that are already defined by the sy= stem errno.h
- turn off compiler warnings of 3 kinds (harmless, b= ut frequent in emacs code)

It will also fix link t= ime warnings about malloc; realloc and free by preventing their libc counte= rparts
to be declared by the standard headers (given we use gmalloc on Window= s, I hope it is not a problem).

Finally, there are= the 64 bits patches. As I said, the heap allocation scheme should probably= be rewritten.
I did the simplest thing : limit the heap to 32Gb (else it was trying = allocate a heap of 2^61 - base adress bytes,=A0
failing to do tha= t,=A0it tried again by diminishing the size 1Mb by 1Mb!).

There are many ways to compile emacs for windows =A0(mingw, msvc, msvc= rt, libc etc.). I can't check all
of them so feel free to use= veto any part. I'll try to find other ways to achieve the same effect.=

Best regards,

Fabrice


--00151740295c6ddbcf04ba0cf6f5-- --00151740295c6ddbd504ba0cf6f7 Content-Type: application/octet-stream; name="64bits.patch" Content-Disposition: attachment; filename="64bits.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gz7g7mjh0 PT09IG1vZGlmaWVkIGZpbGUgJ2xpYi1zcmMvZXRhZ3MuYycNCi0tLSBsaWItc3JjL2V0YWdzLmMJ MjAxMi0wMS0xOSAwNzoyMToyNSArMDAwMA0KKysrIGxpYi1zcmMvZXRhZ3MuYwkyMDEyLTAyLTI3 IDIzOjMzOjE3ICswMDAwDQpAQCAtMTQwLDYgKzE0MCw3IEBADQogI2lmZGVmIFdJTkRPV1NOVA0K ICMgaW5jbHVkZSA8ZmNudGwuaD4NCiAjIGluY2x1ZGUgPGRpcmVjdC5oPg0KKyMgZGVmaW5lIGdl dGN3ZCBfZ2V0Y3dkDQogIyBpbmNsdWRlIDxpby5oPg0KICMgZGVmaW5lIE1BWFBBVEhMRU4gX01B WF9QQVRIDQogIyB1bmRlZiBIQVZFX05UR1VJDQoNCj09PSBtb2RpZmllZCBmaWxlICdsaWIvc3Ry ZnRpbWUuYycNCi0tLSBsaWIvc3RyZnRpbWUuYwkyMDExLTAzLTMxIDA0OjI0OjAzICswMDAwDQor KysgbGliL3N0cmZ0aW1lLmMJMjAxMS0xMi0wNSAxMzowOTozNSArMDAwMA0KQEAgLTM2LDkgKzM2 LDEzIEBADQogI2luY2x1ZGUgPGN0eXBlLmg+DQogI2luY2x1ZGUgPHRpbWUuaD4NCiANCisjaWZk ZWYgX01TQ19WRVINCisjZGVmaW5lIHR6bmFtZSBfdHpuYW1lDQorI2Vsc2UNCiAjaWYgSEFWRV9U Wk5BTUUgJiYgIUhBVkVfREVDTF9UWk5BTUUNCiBleHRlcm4gY2hhciAqdHpuYW1lW107DQogI2Vu ZGlmDQorI2VuZGlmDQogDQogLyogRG8gbXVsdGlieXRlIHByb2Nlc3NpbmcgaWYgbXVsdGlieXRl cyBhcmUgc3VwcG9ydGVkLCB1bmxlc3MNCiAgICBtdWx0aWJ5dGUgc2VxdWVuY2VzIGFyZSBzYWZl IGluIGZvcm1hdHMuICBNdWx0aWJ5dGUgc2VxdWVuY2VzIGFyZQ0KDQo9PT0gbW9kaWZpZWQgZmls ZSAnbGlzcC90ZXJtL3czMi13aW4uZWwnDQotLS0gbGlzcC90ZXJtL3czMi13aW4uZWwJMjAxMi0w MS0xOSAwNzoyMToyNSArMDAwMA0KKysrIGxpc3AvdGVybS93MzItd2luLmVsCTIwMTItMDItMDUg MjA6MDY6MzQgKzAwMDANCkBAIC0xOTIsMjAgKzE5MiwyMCBAQA0KIDs7OyBTZXQgZGVmYXVsdCBr bm93biBuYW1lcyBmb3IgZXh0ZXJuYWwgbGlicmFyaWVzDQogKHNldHEgZHluYW1pYy1saWJyYXJ5 LWFsaXN0DQogICAgICAgKGxpc3QNCi0gICAgICAgJyh4cG0gImxpYnhwbS5kbGwiICJ4cG00LmRs bCIgImxpYlhwbS1ub3g0LmRsbCIpDQorICAgICAgICcoeHBtICJ4dDE5eHBtLmRsbCIgImxpYnhw bS5kbGwiICJ4cG00LmRsbCIgImxpYlhwbS1ub3g0LmRsbCIpDQogICAgICAgIDs7IFZlcnNpb25z IG9mIGxpYnBuZyAxLjQueCBhbmQgbGF0ZXIgYXJlIGluY29tcGF0aWJsZSB3aXRoDQogICAgICAg IDs7IGVhcmxpZXIgdmVyc2lvbnMuICBTZXQgdXAgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIGFjY29y ZGluZyB0bw0KICAgICAgICA7OyB0aGUgdmVyc2lvbiB3ZSB3ZXJlIGNvbXBpbGVkIGFnYWluc3Qu ICAoSWYgd2Ugd2VyZSBjb21waWxlZA0KICAgICAgICA7OyB3aXRob3V0IFBORyBzdXBwb3J0LCBs aWJwbmctdmVyc2lvbidzIHZhbHVlIGlzIC0xLikNCiAgICAgICAgKGlmICg+PSBsaWJwbmctdmVy c2lvbiAxMDQwMCkNCiAJICAgOzsgbGlicG5nMTQtMTQuZGxsIGlzIGxpYnBuZyAxLjQuMyBmcm9t IEdUSysNCi0JICAgJyhwbmcgImxpYnBuZzE0LTE0LmRsbCIgImxpYnBuZzE0LmRsbCIpDQotCSAn KHBuZyAibGlicG5nMTJkLmRsbCIgImxpYnBuZzEyLmRsbCIgImxpYnBuZzMuZGxsIiAibGlicG5n LmRsbCINCisJICAgJyhwbmcgInh0MTlwbmcuZGxsIiAibGlicG5nMTQtMTQuZGxsIiAibGlicG5n MTQuZGxsIikNCisJICcocG5nICJ4dDE5cG5nLmRsbCIgImxpYnBuZzEyZC5kbGwiICJsaWJwbmcx Mi5kbGwiICJsaWJwbmczLmRsbCIgImxpYnBuZy5kbGwiDQogCSAgICAgICA7OyB0aGVzZSBhcmUg bGlicG5nIDEuMi44IGZyb20gR1RLKw0KIAkgICAgICAgImxpYnBuZzEzZC5kbGwiICJsaWJwbmcx My5kbGwiKSkNCi0gICAgICAgJyhqcGVnICJqcGVnNjIuZGxsIiAibGlianBlZy5kbGwiICJqcGVn LTYyLmRsbCIgImpwZWcuZGxsIikNCi0gICAgICAgJyh0aWZmICJsaWJ0aWZmMy5kbGwiICJsaWJ0 aWZmLmRsbCIpDQotICAgICAgICcoZ2lmICJnaWZsaWI0LmRsbCIgImxpYnVuZ2lmNC5kbGwiICJs aWJ1bmdpZi5kbGwiKQ0KKyAgICAgICAnKGpwZWcgInh0MTlqcGVnLmRsbCIgImpwZWc2Mi5kbGwi ICJsaWJqcGVnLmRsbCIgImpwZWctNjIuZGxsIiAianBlZy5kbGwiKQ0KKyAgICAgICAnKHRpZmYg Inh0MTl0aWZmLmRsbCIgImxpYnRpZmYzLmRsbCIgImxpYnRpZmYuZGxsIikNCisgICAgICAgJyhn aWYgInh0MTlnaWYuZGxsIiAiZ2lmbGliNC5kbGwiICJsaWJ1bmdpZjQuZGxsIiAibGlidW5naWYu ZGxsIikNCiAgICAgICAgJyhzdmcgImxpYnJzdmctMi0yLmRsbCIpDQogICAgICAgICcoZ2RrLXBp eGJ1ZiAibGliZ2RrX3BpeGJ1Zi0yLjAtMC5kbGwiKQ0KICAgICAgICAnKGdsaWIgImxpYmdsaWIt Mi4wLTAuZGxsIikNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ250L2FkZHNlY3Rpb24uYycNCi0tLSBu dC9hZGRzZWN0aW9uLmMJMjAxMi0wMS0xOSAwNzoyMToyNSArMDAwMA0KKysrIG50L2FkZHNlY3Rp b24uYwkyMDEyLTAyLTA1IDIwOjA2OjM0ICswMDAwDQpAQCAtMzYsOSArMzYsOSBAQA0KIA0KIFBJ TUFHRV9OVF9IRUFERVJTDQogKF9fc3RkY2FsbCAqIHBmbkNoZWNrU3VtTWFwcGVkRmlsZSkgKExQ Vk9JRCBCYXNlQWRkcmVzcywNCi0JCQkJICAgICBEV09SRCBGaWxlTGVuZ3RoLA0KLQkJCQkgICAg IExQRFdPUkQgSGVhZGVyU3VtLA0KLQkJCQkgICAgIExQRFdPUkQgQ2hlY2tTdW0pOw0KKwkJCQkg ICAgIERXT1JEX1BUUiBGaWxlTGVuZ3RoLA0KKwkJCQkgICAgIFBEV09SRF9QVFIgSGVhZGVyU3Vt LA0KKwkJCQkgICAgIFBEV09SRF9QVFIgQ2hlY2tTdW0pOw0KIA0KICN1bmRlZiBtaW4NCiAjdW5k ZWYgbWF4DQpAQCAtMTY0LDcgKzE2NCw3IEBADQogLyogUmV0dXJuIHBvaW50ZXIgdG8gc2VjdGlv biBoZWFkZXIgZm9yIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2l2ZW4NCiAgICByZWxhdGl2ZSB2 aXJ0dWFsIGFkZHJlc3MuICovDQogSU1BR0VfU0VDVElPTl9IRUFERVIgKg0KLXJ2YV90b19zZWN0 aW9uIChEV09SRCBydmEsIElNQUdFX05UX0hFQURFUlMgKiBudF9oZWFkZXIpDQorcnZhX3RvX3Nl Y3Rpb24gKERXT1JEX1BUUiBydmEsIElNQUdFX05UX0hFQURFUlMgKiBudF9oZWFkZXIpDQogew0K ICAgUElNQUdFX1NFQ1RJT05fSEVBREVSIHNlY3Rpb247DQogICBpbnQgaTsNCkBAIC0xNzksNyAr MTc5LDcgQEANCiAJIHNvbWUgdmVyeSBvbGQgZXhlcyAoZWcuIGd6aXAgZGF0ZWQgRGVjIDE5OTMp LiAgU2luY2UNCiAJIHczMl9leGVjdXRhYmxlX3R5cGUgcmVsaWVzIG9uIHRoaXMgZnVuY3Rpb24g dG8gd29yayByZWxpYWJseSwNCiAJIHdlIG5lZWQgdG8gY29wZSB3aXRoIHRoaXMuICAqLw0KLSAg ICAgIERXT1JEIHJlYWxfc2l6ZSA9IG1heCAoc2VjdGlvbi0+U2l6ZU9mUmF3RGF0YSwNCisgICAg ICBEV09SRF9QVFIgcmVhbF9zaXplID0gbWF4IChzZWN0aW9uLT5TaXplT2ZSYXdEYXRhLA0KIAkJ CSAgICAgc2VjdGlvbi0+TWlzYy5WaXJ0dWFsU2l6ZSk7DQogICAgICAgaWYgKHJ2YSA+PSBzZWN0 aW9uLT5WaXJ0dWFsQWRkcmVzcw0KIAkgICYmIHJ2YSA8IHNlY3Rpb24tPlZpcnR1YWxBZGRyZXNz ICsgcmVhbF9zaXplKQ0KQEAgLTE5Miw3ICsxOTIsNyBAQA0KIC8qIFJldHVybiBwb2ludGVyIHRv IHNlY3Rpb24gaGVhZGVyIGZvciBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdpdmVuDQogICAgb2Zm c2V0IGluIGl0cyByYXcgZGF0YSBhcmVhLiAqLw0KIElNQUdFX1NFQ1RJT05fSEVBREVSICoNCi1v ZmZzZXRfdG9fc2VjdGlvbiAoRFdPUkQgb2Zmc2V0LCBJTUFHRV9OVF9IRUFERVJTICogbnRfaGVh ZGVyKQ0KK29mZnNldF90b19zZWN0aW9uIChEV09SRF9QVFIgb2Zmc2V0LCBJTUFHRV9OVF9IRUFE RVJTICogbnRfaGVhZGVyKQ0KIHsNCiAgIFBJTUFHRV9TRUNUSU9OX0hFQURFUiBzZWN0aW9uOw0K ICAgaW50IGk7DQpAQCAtMjEyLDggKzIxMiw4IEBADQogLyogUmV0dXJuIG9mZnNldCB0byBhbiBv YmplY3QgaW4gZHN0LCBnaXZlbiBvZmZzZXQgaW4gc3JjLiAgV2UgYXNzdW1lDQogICAgdGhlcmUg aXMgYXQgbGVhc3Qgb25lIHNlY3Rpb24gaW4gYm90aCBzcmMgYW5kIGRzdCBpbWFnZXMsIGFuZCB0 aGF0DQogICAgdGhlIHNvbWUgc2VjdGlvbnMgbWF5IGhhdmUgYmVlbiBhZGRlZCB0byBkc3QgKGFm dGVyIHNlY3Rpb25zIGluIHNyYykuICAqLw0KLXN0YXRpYyBEV09SRA0KLXJlbG9jYXRlX29mZnNl dCAoRFdPUkQgb2Zmc2V0LA0KK3N0YXRpYyBEV09SRF9QVFINCityZWxvY2F0ZV9vZmZzZXQgKERX T1JEX1BUUiBvZmZzZXQsDQogCQkgSU1BR0VfTlRfSEVBREVSUyAqIHNyY19udF9oZWFkZXIsDQog CQkgSU1BR0VfTlRfSEVBREVSUyAqIGRzdF9udF9oZWFkZXIpDQogew0KQEAgLTI0NywzMiArMjQ3 LDMyIEBADQogfQ0KIA0KICNkZWZpbmUgT0ZGU0VUX1RPX1JWQShvZmZzZXQsIHNlY3Rpb24pIFwN Ci0JICAoc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MgKyAoKERXT1JEKShvZmZzZXQpIC0gc2VjdGlv bi0+UG9pbnRlclRvUmF3RGF0YSkpDQorCSAgKHNlY3Rpb24tPlZpcnR1YWxBZGRyZXNzICsgKChE V09SRF9QVFIpKG9mZnNldCkgLSBzZWN0aW9uLT5Qb2ludGVyVG9SYXdEYXRhKSkNCiANCiAjZGVm aW5lIFJWQV9UT19PRkZTRVQocnZhLCBzZWN0aW9uKSBcDQotCSAgKHNlY3Rpb24tPlBvaW50ZXJU b1Jhd0RhdGEgKyAoKERXT1JEKShydmEpIC0gc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MpKQ0KKwkg IChzZWN0aW9uLT5Qb2ludGVyVG9SYXdEYXRhICsgKChEV09SRF9QVFIpKHJ2YSkgLSBzZWN0aW9u LT5WaXJ0dWFsQWRkcmVzcykpDQogDQogI2RlZmluZSBSVkFfVE9fU0VDVElPTl9PRkZTRVQocnZh LCBzZWN0aW9uKSBcDQotCSAgKChEV09SRCkocnZhKSAtIHNlY3Rpb24tPlZpcnR1YWxBZGRyZXNz KQ0KKwkgICgoRFdPUkRfUFRSKShydmEpIC0gc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MpDQogDQog LyogQ29udmVydCBhZGRyZXNzIGluIGV4ZWN1dGluZyBpbWFnZSB0byBSVkEuICAqLw0KLSNkZWZp bmUgUFRSX1RPX1JWQShwdHIpICgoRFdPUkQpKHB0cikgLSAoRFdPUkQpIEdldE1vZHVsZUhhbmRs ZSAoTlVMTCkpDQorI2RlZmluZSBQVFJfVE9fUlZBKHB0cikgKChEV09SRF9QVFIpKHB0cikgLSAo RFdPUkRfUFRSKSBHZXRNb2R1bGVIYW5kbGUgKE5VTEwpKQ0KIA0KICNkZWZpbmUgUFRSX1RPX09G RlNFVChwdHIsIHBmaWxlX2RhdGEpIFwNCiAgICAgICAgICAgKCh1bnNpZ25lZCBjb25zdCBjaGFy ICopKHB0cikgLSAocGZpbGVfZGF0YSktPmZpbGVfYmFzZSkNCiANCiAjZGVmaW5lIE9GRlNFVF9U T19QVFIob2Zmc2V0LCBwZmlsZV9kYXRhKSBcDQotICAgICAgICAgICgocGZpbGVfZGF0YSktPmZp bGVfYmFzZSArIChEV09SRCkob2Zmc2V0KSkNCisgICAgICAgICAgKChwZmlsZV9kYXRhKS0+Zmls ZV9iYXNlICsgKERXT1JEX1BUUikob2Zmc2V0KSkNCiANCi0jZGVmaW5lIFJPVU5EX1VQKHAsIGFs aWduKSAgICgoKERXT1JEKShwKSArIChhbGlnbiktMSkgJiB+KChhbGlnbiktMSkpDQotI2RlZmlu ZSBST1VORF9ET1dOKHAsIGFsaWduKSAoKERXT1JEKShwKSAmIH4oKGFsaWduKS0xKSkNCisjZGVm aW5lIFJPVU5EX1VQKHAsIGFsaWduKSAgICgoKERXT1JEX1BUUikocCkgKyAoYWxpZ24pLTEpICYg figoYWxpZ24pLTEpKQ0KKyNkZWZpbmUgUk9VTkRfRE9XTihwLCBhbGlnbikgKChEV09SRF9QVFIp KHApICYgfigoYWxpZ24pLTEpKQ0KIA0KIA0KIHN0YXRpYyB2b2lkDQogY29weV9leGVjdXRhYmxl X2FuZF9hZGRfc2VjdGlvbiAoZmlsZV9kYXRhICpwX2luZmlsZSwNCiAJCQkJIGZpbGVfZGF0YSAq cF9vdXRmaWxlLA0KIAkJCQkgY29uc3QgY2hhciAqbmV3X3NlY3Rpb25fbmFtZSwNCi0JCQkJIERX T1JEIG5ld19zZWN0aW9uX3NpemUpDQorCQkJCSBEV09SRF9QVFIgbmV3X3NlY3Rpb25fc2l6ZSkN CiB7DQogICB1bnNpZ25lZCBjaGFyICpkc3Q7DQogICBQSU1BR0VfRE9TX0hFQURFUiBkb3NfaGVh ZGVyOw0KQEAgLTI4MCw3ICsyODAsNyBAQA0KICAgUElNQUdFX05UX0hFQURFUlMgZHN0X250X2hl YWRlcjsNCiAgIFBJTUFHRV9TRUNUSU9OX0hFQURFUiBzZWN0aW9uOw0KICAgUElNQUdFX1NFQ1RJ T05fSEVBREVSIGRzdF9zZWN0aW9uOw0KLSAgRFdPUkQgb2Zmc2V0Ow0KKyAgRFdPUkRfUFRSIG9m ZnNldDsNCiAgIGludCBpOw0KICAgaW50IGJlX3ZlcmJvc2UgPSBHZXRFbnZpcm9ubWVudFZhcmlh YmxlICgiREVCVUdfRFVNUCIsIE5VTEwsIDApID4gMDsNCiANCkBAIC0zMjQsMTAgKzMyNCwxMCBA QA0KICAgZHN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcF9vdXRmaWxlLT5maWxlX2Jhc2U7DQogDQog ICBDT1BZX0NIVU5LICgiQ29weWluZyBET1MgaGVhZGVyLi4uIiwgZG9zX2hlYWRlciwNCi0JICAg ICAgKERXT1JEKSBudF9oZWFkZXIgLSAoRFdPUkQpIGRvc19oZWFkZXIsIGJlX3ZlcmJvc2UpOw0K KwkgICAgICAoRFdPUkRfUFRSKSBudF9oZWFkZXIgLSAoRFdPUkRfUFRSKSBkb3NfaGVhZGVyLCBi ZV92ZXJib3NlKTsNCiAgIGRzdF9udF9oZWFkZXIgPSAoUElNQUdFX05UX0hFQURFUlMpIGRzdDsN CiAgIENPUFlfQ0hVTksgKCJDb3B5aW5nIE5UIGhlYWRlci4uLiIsIG50X2hlYWRlciwNCi0JICAg ICAgKERXT1JEKSBzZWN0aW9uIC0gKERXT1JEKSBudF9oZWFkZXIsIGJlX3ZlcmJvc2UpOw0KKwkg ICAgICAoRFdPUkRfUFRSKSBzZWN0aW9uIC0gKERXT1JEX1BUUikgbnRfaGVhZGVyLCBiZV92ZXJi b3NlKTsNCiAgIGRzdF9zZWN0aW9uID0gKFBJTUFHRV9TRUNUSU9OX0hFQURFUikgZHN0Ow0KICAg Q09QWV9DSFVOSyAoIkNvcHlpbmcgc2VjdGlvbiB0YWJsZS4uLiIsIHNlY3Rpb24sDQogCSAgICAg IG50X2hlYWRlci0+RmlsZUhlYWRlci5OdW1iZXJPZlNlY3Rpb25zICogc2l6ZW9mICgqc2VjdGlv biksDQpAQCAtNTA5LDggKzUwOSw4IEBADQogICAvKiBQYXRjaCB1cCBoZWFkZXIgZmllbGRzOyBw cm9maWxlciBpcyBwaWNreSBhYm91dCB0aGlzLiAqLw0KICAgew0KICAgICBIQU5ETEUgaEltYWdl aGVscCA9IExvYWRMaWJyYXJ5ICgiaW1hZ2VobHAuZGxsIik7DQotICAgIERXT1JEICBoZWFkZXJz dW07DQotICAgIERXT1JEICBjaGVja3N1bTsNCisgICAgRFdPUkRfUFRSICBoZWFkZXJzdW07DQor ICAgIERXT1JEX1BUUiAgY2hlY2tzdW07DQogDQogICAgIGRvc19oZWFkZXIgPSAoUElNQUdFX0RP U19IRUFERVIpIG91dF9maWxlLmZpbGVfYmFzZTsNCiAgICAgbnRfaGVhZGVyID0gKFBJTUFHRV9O VF9IRUFERVJTKSAoKGNoYXIgKikgZG9zX2hlYWRlciArIGRvc19oZWFkZXItPmVfbGZhbmV3KTsN Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ250L2NvbmZpZy5udCcNCi0tLSBudC9jb25maWcubnQJMjAx Mi0wMi0yNyAwMzoyMDowMCArMDAwMA0KKysrIG50L2NvbmZpZy5udAkyMDEyLTAyLTI4IDA2OjQw OjAxICswMDAwDQpAQCAtNDMzLDcgKzQzMywxMSBAQA0KIA0KICAgIFNlZSBtL3RlbXBsYXRlLmgg Zm9yIGRvY3VtZW50YXRpb24gb24gd3JpdGluZyBtL01BQ0hJTkUuaCBmaWxlcy4gICovDQogI3Vu ZGVmIGNvbmZpZ19tYWNoZmlsZQ0KKyNpZmRlZiBfV0lONjQNCisjaW5jbHVkZSAibS9hbWR4ODYt NjQuaCINCisjZWxzZQ0KICNpbmNsdWRlICJtL2ludGVsMzg2LmgiDQorI2VuZGlmDQogDQogLyog RGVmaW5lIGBzdWJwcm9jZXNzZXMnIHNob3VsZCBiZSBkZWZpbmVkIGlmIHlvdSB3YW50IHRvDQog ICAgaGF2ZSBjb2RlIGZvciBhc3luY2hyb25vdXMgc3VicHJvY2Vzc2VzDQoNCj09PSBtb2RpZmll ZCBmaWxlICdudC9jb25maWd1cmUuYmF0Jw0KLS0tIG50L2NvbmZpZ3VyZS5iYXQJMjAxMi0wMS0x OSAwNzoyMToyNSArMDAwMA0KKysrIG50L2NvbmZpZ3VyZS5iYXQJMjAxMi0wMi0wNSAyMDowNjoz NCArMDAwMA0KQEAgLTk2LDggKzk2LDggQEANCiBzZXQgcHJvZmlsZT1ODQogc2V0IG5vY3lnd2lu PU4NCiBzZXQgQ09NUElMRVI9DQotc2V0IHVzZXJjZmxhZ3M9DQotc2V0IGVzY3VzZXJjZmxhZ3M9 DQorc2V0IHVzZXJjZmxhZ3M9LUkuLi9zcmMgLUkuLi9udC9pbmMgLUkuLi9saWIgLUljOi9zb3Vy Y2UvWEVtVGVYL3NvdXJjZS9saWJzL3czMmNvbXBhdCAtSWM6L3NvdXJjZS9YRW1UZVgvc291cmNl L2xpYnMvemxpYi0xLjIuNSAtSWM6L3NvdXJjZS9YRW1UZVgvc291cmNlL2xpYnMvbGlicG5nLTEu NS40IC1JYzovc291cmNlL1hFbVRlWC9zb3VyY2UvbGlicy9qcGVnLThiIC1JYzovc291cmNlL1hF bVRlWC9zb3VyY2UvbGlicy90aWZmLTMuOS41L2xpYnRpZmYgLUljOi9zb3VyY2UvWEVtVGVYL3Nv dXJjZS9saWJzL2dpZmxpYi00LjEuNi9saWIgLUljOi9zb3VyY2UvWEVtVGVYL3NvdXJjZS9saWJz L3hwbS0zLjRrIC1JYzovc291cmNlL1hFbVRlWC9zb3VyY2UvbGlicy94cG0tMy40ay9saWINCitz ZXQgZXNjdXNlcmNmbGFncz0tSS4uL3NyYyAtSS4uL250L2luYyAtSS4uL2xpYiAtSWM6L3NvdXJj ZS9YRW1UZVgvc291cmNlL2xpYnMvdzMyY29tcGF0IC1JYzovc291cmNlL1hFbVRlWC9zb3VyY2Uv bGlicy96bGliLTEuMi41IC1JYzovc291cmNlL1hFbVRlWC9zb3VyY2UvbGlicy9saWJwbmctMS41 LjQgLUljOi9zb3VyY2UvWEVtVGVYL3NvdXJjZS9saWJzL2pwZWctOGIgLUljOi9zb3VyY2UvWEVt VGVYL3NvdXJjZS9saWJzL3RpZmYtMy45LjUvbGlidGlmZiAtSWM6L3NvdXJjZS9YRW1UZVgvc291 cmNlL2xpYnMvZ2lmbGliLTQuMS42L2xpYiAtSWM6L3NvdXJjZS9YRW1UZVgvc291cmNlL2xpYnMv eHBtLTMuNGsgLUljOi9zb3VyY2UvWEVtVGVYL3NvdXJjZS9saWJzL3hwbS0zLjRrL2xpYg0KIHNl dCBkb2NmbGFncz0NCiBzZXQgdXNlcmxkZmxhZ3M9DQogc2V0IGVzY3VzZXJsZGZsYWdzPQ0KDQo9 PT0gbW9kaWZpZWQgZmlsZSAnbnQvZW1hY3MucmMnDQotLS0gbnQvZW1hY3MucmMJMjAxMi0wMi0y NyAwMzoyMDowMCArMDAwMA0KKysrIG50L2VtYWNzLnJjCTIwMTItMDItMjggMDY6NDA6MDEgKzAw MDANCkBAIC0xLDYgKzEsMTAgQEANCiBFbWFjcyBJQ09OICAgaWNvbnNcZW1hY3MuaWNvDQogMzI2 NDkgQ1VSU09SIGljb25zXGhhbmQuY3VyDQotMSAyNCAiZW1hY3MubWFuaWZlc3QiDQorI2lmZGVm IFdJTjY0DQorMSAyNCAiZW1hY3MteDY0Lm1hbmlmZXN0Ig0KKyNlbHNlDQorMSAyNCAiZW1hY3Mt eDg2Lm1hbmlmZXN0Ig0KKyNlbmRpZg0KIA0KICNpZm5kZWYgVlNfVkVSU0lPTl9JTkZPDQogI2Rl ZmluZSBWU19WRVJTSU9OX0lORk8gMQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvaW5jL3N5cy9z b2NrZXQuaCcNCi0tLSBudC9pbmMvc3lzL3NvY2tldC5oCTIwMTItMDEtMTkgMDc6MjE6MjUgKzAw MDANCisrKyBudC9pbmMvc3lzL3NvY2tldC5oCTIwMTItMDItMjcgMjM6MzM6MTYgKzAwMDANCkBA IC0xMjYsNDIgKzEyNiwxNDcgQEANCiBleHRlcm4gaW50IGhfZXJybm87DQogDQogLyogbWFwIHdp bnNvY2sgZXJyb3IgY29kZXMgdG8gc3RhbmRhcmQgbmFtZXMgKi8NCisjaWYgZGVmaW5lZChFV09V TERCTE9DSykNCisjdW5kZWYgRVdPVUxEQkxPQ0sNCisjZW5kaWYNCiAjZGVmaW5lIEVXT1VMREJM T0NLICAgICAgICAgICAgIFdTQUVXT1VMREJMT0NLDQorI2lmIGRlZmluZWQoRUlOUFJPR1JFU1Mp DQorI3VuZGVmIEVJTlBST0dSRVNTDQorI2VuZGlmDQogI2RlZmluZSBFSU5QUk9HUkVTUyAgICAg ICAgICAgICBXU0FFSU5QUk9HUkVTUw0KKyNpZiBkZWZpbmVkKEVBTFJFQURZKQ0KKyN1bmRlZiBF QUxSRUFEWQ0KKyNlbmRpZg0KICNkZWZpbmUgRUFMUkVBRFkgICAgICAgICAgICAgICAgV1NBRUFM UkVBRFkNCisjaWYgZGVmaW5lZChFTk9UU09DSykNCisjdW5kZWYgRU5PVFNPQ0sNCisjZW5kaWYN CiAjZGVmaW5lIEVOT1RTT0NLICAgICAgICAgICAgICAgIFdTQUVOT1RTT0NLDQorI2lmIGRlZmlu ZWQoRURFU1RBRERSUkVRKQ0KKyN1bmRlZiBFREVTVEFERFJSRVENCisjZW5kaWYNCiAjZGVmaW5l IEVERVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNUQUREUlJFUQ0KKyNpZiBkZWZpbmVkKEVN U0dTSVpFKQ0KKyN1bmRlZiBFTVNHU0laRQ0KKyNlbmRpZg0KICNkZWZpbmUgRU1TR1NJWkUgICAg ICAgICAgICAgICAgV1NBRU1TR1NJWkUNCisjaWYgZGVmaW5lZChFUFJPVE9UWVBFKQ0KKyN1bmRl ZiBFUFJPVE9UWVBFDQorI2VuZGlmDQogI2RlZmluZSBFUFJPVE9UWVBFICAgICAgICAgICAgICBX U0FFUFJPVE9UWVBFDQorI2lmIGRlZmluZWQoRU5PUFJPVE9PUFQpDQorI3VuZGVmIEVOT1BST1RP T1BUDQorI2VuZGlmDQogI2RlZmluZSBFTk9QUk9UT09QVCAgICAgICAgICAgICBXU0FFTk9QUk9U T09QVA0KKyNpZiBkZWZpbmVkKEVQUk9UT05PU1VQUE9SVCkNCisjdW5kZWYgRVBST1RPTk9TVVBQ T1JUDQorI2VuZGlmDQogI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgICAgICAgICBXU0FFUFJPVE9O T1NVUFBPUlQNCisjaWYgZGVmaW5lZChFU09DS1ROT1NVUFBPUlQpDQorI3VuZGVmIEVTT0NLVE5P U1VQUE9SVA0KKyNlbmRpZg0KICNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUICAgICAgICAgV1NBRVNP Q0tUTk9TVVBQT1JUDQorI2lmIGRlZmluZWQoRU9QTk9UU1VQUCkNCisjdW5kZWYgRU9QTk9UU1VQ UA0KKyNlbmRpZg0KICNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAgICAgICAgV1NBRU9QTk9UU1VQ UA0KKyNpZiBkZWZpbmVkKEVQRk5PU1VQUE9SVCkNCisjdW5kZWYgRVBGTk9TVVBQT1JUDQorI2Vu ZGlmDQogI2RlZmluZSBFUEZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQNCisj aWYgZGVmaW5lZChFQUZOT1NVUFBPUlQpDQorI3VuZGVmIEVBRk5PU1VQUE9SVA0KKyNlbmRpZg0K ICNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFGTk9TVVBQT1JUDQorI2lmIGRl ZmluZWQoRUFERFJJTlVTRSkNCisjdW5kZWYgRUFERFJJTlVTRQ0KKyNlbmRpZg0KICNkZWZpbmUg RUFERFJJTlVTRSAgICAgICAgICAgICAgV1NBRUFERFJJTlVTRQ0KKyNpZiBkZWZpbmVkKEVBRERS Tk9UQVZBSUwpDQorI3VuZGVmIEVBRERSTk9UQVZBSUwNCisjZW5kaWYNCiAjZGVmaW5lIEVBRERS Tk9UQVZBSUwgICAgICAgICAgIFdTQUVBRERSTk9UQVZBSUwNCisjaWYgZGVmaW5lZChFTkVURE9X TikNCisjdW5kZWYgRU5FVERPV04NCisjZW5kaWYNCiAjZGVmaW5lIEVORVRET1dOICAgICAgICAg ICAgICAgIFdTQUVORVRET1dODQorI2lmIGRlZmluZWQoRU5FVFVOUkVBQ0gpDQorI3VuZGVmIEVO RVRVTlJFQUNIDQorI2VuZGlmDQogI2RlZmluZSBFTkVUVU5SRUFDSCAgICAgICAgICAgICBXU0FF TkVUVU5SRUFDSA0KKyNpZiBkZWZpbmVkKEVORVRSRVNFVCkNCisjdW5kZWYgRU5FVFJFU0VUDQor I2VuZGlmDQogI2RlZmluZSBFTkVUUkVTRVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQNCisj aWYgZGVmaW5lZChFQ09OTkFCT1JURUQpDQorI3VuZGVmIEVDT05OQUJPUlRFRA0KKyNlbmRpZg0K ICNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAgICAgICAgV1NBRUNPTk5BQk9SVEVEDQorI2lmIGRl ZmluZWQoRUNPTk5SRVNFVCkNCisjdW5kZWYgRUNPTk5SRVNFVA0KKyNlbmRpZg0KICNkZWZpbmUg RUNPTk5SRVNFVCAgICAgICAgICAgICAgV1NBRUNPTk5SRVNFVA0KKyNpZiBkZWZpbmVkKEVOT0JV RlMpDQorI3VuZGVmIEVOT0JVRlMNCisjZW5kaWYNCiAjZGVmaW5lIEVOT0JVRlMgICAgICAgICAg ICAgICAgIFdTQUVOT0JVRlMNCisjaWYgZGVmaW5lZChFSVNDT05OKQ0KKyN1bmRlZiBFSVNDT05O DQorI2VuZGlmDQogI2RlZmluZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FFSVNDT05ODQor I2lmIGRlZmluZWQoRU5PVENPTk4pDQorI3VuZGVmIEVOT1RDT05ODQorI2VuZGlmDQogI2RlZmlu ZSBFTk9UQ09OTiAgICAgICAgICAgICAgICBXU0FFTk9UQ09OTg0KKyNpZiBkZWZpbmVkKEVTSFVU RE9XTikNCisjdW5kZWYgRVNIVVRET1dODQorI2VuZGlmDQogI2RlZmluZSBFU0hVVERPV04gICAg ICAgICAgICAgICBXU0FFU0hVVERPV04NCisjaWYgZGVmaW5lZChFVE9PTUFOWVJFRlMpDQorI3Vu ZGVmIEVUT09NQU5ZUkVGUw0KKyNlbmRpZg0KICNkZWZpbmUgRVRPT01BTllSRUZTICAgICAgICAg ICAgV1NBRVRPT01BTllSRUZTDQorI2lmIGRlZmluZWQoRVRJTUVET1VUKQ0KKyN1bmRlZiBFVElN RURPVVQNCisjZW5kaWYNCiAjZGVmaW5lIEVUSU1FRE9VVCAgICAgICAgICAgICAgIFdTQUVUSU1F RE9VVA0KKyNpZiBkZWZpbmVkKEVDT05OUkVGVVNFRCkNCisjdW5kZWYgRUNPTk5SRUZVU0VEDQor I2VuZGlmDQogI2RlZmluZSBFQ09OTlJFRlVTRUQgICAgICAgICAgICBXU0FFQ09OTlJFRlVTRUQN CisjaWYgZGVmaW5lZChFTE9PUCkNCisjdW5kZWYgRUxPT1ANCisjZW5kaWYNCiAjZGVmaW5lIEVM T09QICAgICAgICAgICAgICAgICAgIFdTQUVMT09QDQogLyogI2RlZmluZSBFTkFNRVRPT0xPTkcg ICAgICAgICAgICBXU0FFTkFNRVRPT0xPTkcgKi8NCisjaWYgZGVmaW5lZChFSE9TVERPV04pDQor I3VuZGVmIEVIT1NURE9XTg0KKyNlbmRpZg0KICNkZWZpbmUgRUhPU1RET1dOICAgICAgICAgICAg ICAgV1NBRUhPU1RET1dODQorI2lmIGRlZmluZWQoRUhPU1RVTlJFQUNIKQ0KKyN1bmRlZiBFSE9T VFVOUkVBQ0gNCisjZW5kaWYNCiAjZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgICAgICAgIFdTQUVI T1NUVU5SRUFDSA0KIC8qICNkZWZpbmUgRU5PVEVNUFRZICAgICAgICAgICAgICAgV1NBRU5PVEVN UFRZICovDQorI2lmIGRlZmluZWQoRVBST0NMSU0pDQorI3VuZGVmIEVQUk9DTElNDQorI2VuZGlm DQogI2RlZmluZSBFUFJPQ0xJTSAgICAgICAgICAgICAgICBXU0FFUFJPQ0xJTQ0KKyNpZiBkZWZp bmVkKEVVU0VSUykNCisjdW5kZWYgRVVTRVJTDQorI2VuZGlmDQogI2RlZmluZSBFVVNFUlMgICAg ICAgICAgICAgICAgICBXU0FFVVNFUlMNCisjaWYgZGVmaW5lZChFRFFVT1QpDQorI3VuZGVmIEVE UVVPVA0KKyNlbmRpZg0KICNkZWZpbmUgRURRVU9UICAgICAgICAgICAgICAgICAgV1NBRURRVU9U DQorI2lmIGRlZmluZWQoRVNUQUxFKQ0KKyN1bmRlZiBFU1RBTEUNCisjZW5kaWYNCiAjZGVmaW5l IEVTVEFMRSAgICAgICAgICAgICAgICAgIFdTQUVTVEFMRQ0KKyNpZiBkZWZpbmVkKEVSRU1PVEUp DQorI3VuZGVmIEVSRU1PVEUNCisjZW5kaWYNCiAjZGVmaW5lIEVSRU1PVEUgICAgICAgICAgICAg ICAgIFdTQUVSRU1PVEUNCiANCiAjZW5kaWYgLyogX1NPQ0tFVF9IXyAqLw0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnbnQvbm1ha2UuZGVmcycNCi0tLSBudC9ubWFrZS5kZWZzCTIwMTItMDItMDUgMjA6 NDA6MzYgKzAwMDANCisrKyBudC9ubWFrZS5kZWZzCTIwMTItMDItMTkgMjE6NTQ6MzMgKzAwMDAN CkBAIC04Niw3ICs4NiwxMSBAQA0KICEgICAgaWYgIiQoUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRSki ID09ICJQUEMiDQogQVJDSAkJPSBwcGMNCiAhICAgIGVsc2UNCi0hICAgICBlcnJvciBVbmtub3du IGFyY2hpdGVjdHVyZSB0eXBlICIkKFBST0NFU1NPUl9BUkNISVRFQ1RVUkUpIg0KKyEgICAgIGlm ICIkKFBST0NFU1NPUl9BUkNISVRFQ1RVUkUpIiA9PSAiQU1ENjQiDQorQVJDSAkJPSBBTUQ2NA0K KyEgICAgIGVsc2UNCishICAgICAgZXJyb3IgVW5rbm93biBhcmNoaXRlY3R1cmUgdHlwZSAiJChQ Uk9DRVNTT1JfQVJDSElURUNUVVJFKSINCishICAgICBlbmRpZg0KICEgICAgZW5kaWYNCiAhICAg ZW5kaWYNCiAhICBlbmRpZg0KQEAgLTEwNSwxMSArMTA5LDExIEBADQogQ0NfT1VUCQk9IC1Gbw0K IExJTksJCT0gbGluaw0KIExJTktfT1VUCT0gLW91dDoNCi1SQwkJPSByYw0KK1JDCQk9IHJjICQo QVJDSF9SQ0ZMQUdTKQ0KIFJDX09VVAkJPSAtRm8NCiBSQ19JTkNMVURFCT0gLWkNCiANCi1VU0Vf Q1JUX0RMTAk9IDENCisjIFVTRV9DUlRfRExMCT0gMQ0KIA0KICFpZmRlZiBVU0VfQ1JUX0RMTA0K IGxpYmMJCT0gbXN2Y3J0JChEKS5saWINCkBAIC0xNTEsMjAgKzE1NSwxNyBAQA0KICFlbmRpZg0K IA0KIENGTEFHUyAgICAgICAgICA9IC1JLiAkKEFSQ0hfQ0ZMQUdTKSBcDQorCQkgIC1EX0NSVF9T RUNVUkVfTk9fV0FSTklOR1MgXA0KIAkJICAkKERFQlVHX0NGTEFHUykgJChDSEVDS0lOR19DRkxB R1MpICQoVVNFUl9DRkxBR1MpICQoTE9DQUxfRkxBR1MpDQogRVNDX0NGTEFHUyAgICAgID0gLUku ICQoQVJDSF9DRkxBR1MpIFwNCisJCSAgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyBcDQogCQkg ICQoREVCVUdfQ0ZMQUdTKSAkKENIRUNLSU5HX0NGTEFHUykgJChFU0NfVVNFUl9DRkxBR1MpICQo TE9DQUxfRkxBR1MpDQogDQogI1NZU19MREZMQUdTCT0gLW5vbG9nbyAtcmVsZWFzZSAtaW5jcmVt ZW50YWw6bm8gLXZlcnNpb246My4xMCAtc3dhcHJ1bjpjZCAtc3dhcHJ1bjpuZXQgc2V0YXJndi5v YmoNCi0haWZkZWYgTk9PUFQNCi1TWVNfTERGTEFHUwk9IC1ub2xvZ28gLW1hbmlmZXN0IC1keW5h bWljYmFzZTpubyAtZGVidWcgLWluY3JlbWVudGFsOm5vIC12ZXJzaW9uOjMuMTAgLXN3YXBydW46 Y2QgLXN3YXBydW46bmV0IHNldGFyZ3Yub2JqDQotIWVsc2UNCi1TWVNfTERGTEFHUwk9IC1ub2xv Z28gLW1hbmlmZXN0IC1keW5hbWljYmFzZTpubyAtcmVsZWFzZSAtaW5jcmVtZW50YWw6bm8gLXZl cnNpb246My4xMCAtc3dhcHJ1bjpjZCAtc3dhcHJ1bjpuZXQgc2V0YXJndi5vYmoNCi0hZW5kaWYN CitTWVNfTERGTEFHUwk9IC1ub2xvZ28gLW1hbmlmZXN0IC1keW5hbWljYmFzZTpubyAtaW5jcmVt ZW50YWw6bm8gLXZlcnNpb246NS4xMCAtc3dhcHJ1bjpjZCAtc3dhcHJ1bjpuZXQgc2V0YXJndi5v YmoNCiANCiAjIHNlZSBjb21tZW50cyBpbiBhbGxvY2F0ZV9oZWFwIGluIHczMmhlYXAuYyBiZWZv cmUgY2hhbmdpbmcgYW55IG9mIHRoZQ0KLSMgLXN0YWNrLCAtaGVhcCwgb3IgLWJhc2Ugc2V0dGlu Z3MuDQotVEVNQUNTX0VYVFJBX0xJTksgPSAtc3RhY2s6MHgwMDgwMDAwMCAtaGVhcDoweDAwMTAw MDAwIC1iYXNlOjB4MDEwMDAwMDAgLXBkYjokKEJMRClcdGVtYWNzLnBkYiAtbWFjaGluZTokKEFS Q0gpICQoU1VCU1lTVEVNX0NPTlNPTEUpIC1lbnRyeTpfc3RhcnQgLW1hcDokKEJMRClcdGVtYWNz Lm1hcCAkKEVYVFJBX0xJTkspDQorVEVNQUNTX0VYVFJBX0xJTksgPSAtc3RhY2s6MHgwMDgwMDAw MCAtaGVhcDoweDAwMTAwMDAwIC1iYXNlOjB4MDEwMDAwMDAgLXBkYjokKEJMRClcdGVtYWNzLnBk YiAtbWFjaGluZTokKFRBUkdFVF9DUFUpICQoU1VCU1lTVEVNX0NPTlNPTEUpIC1lbnRyeTpfc3Rh cnQgLW1hcDokKEJMRClcdGVtYWNzLm1hcCAkKEVYVFJBX0xJTkspDQogDQogIWlmZGVmIE5PT1BU DQogT0JKRElSICAgICAgICAgID0gb2JqDQpAQCAtMTk1LDcgKzE5Niw3IEBADQogDQogIWlmZGVm IE5PREVCVUcNCiBERUJVR19GTEFHID0NCi1ERUJVR19MSU5LID0NCitERUJVR19MSU5LID0gLXJl bGVhc2UNCiBEID0NCiAhZWxzZQ0KIERFQlVHX0ZMQUcgPSAtWmkNCkBAIC0yMzMsMTUgKzIzNCwy OCBAQA0KICFlbHNlDQogIWlmICIkKEFSQ0gpIiA9PSAicHBjIg0KICMgVGhlc2UgZmxhZ3MgYXJl IGEgZ3Vlc3MuLi5pZiB0aGV5IGRvbid0IHdvcmssIHBsZWFzZSBzZW5kIG1lIG1haWwuDQotQVJD SF9DRkxBR1MJPSAtRF9QUENfPTEgLWMgLVplIC1aaSAtVzIgLU9kDQogQVJDSF9MREZMQUdTCT0g JChTWVNfTERGTEFHUykNCiANCiAhZWxzZQ0KKyFpZiAiJChBUkNIKSIgPT0gIkFNRDY0Ig0KKyMg VGhlc2UgZmxhZ3MgYXJlIGEgZ3Vlc3MuLi5pZiB0aGV5IGRvbid0IHdvcmssIHBsZWFzZSBzZW5k IG1lIG1haWwuDQorIWlmZGVmIE5PT1BUDQorI0FSQ0hfQ0ZMQUdTICAgICA9IC1ub2xvZ28gLWMg LVplbCAtVzIgLUg2MyAtT2QgLUczZCAtWnA4ICQoREVCVUdfRkxBRykNCitBUkNIX0NGTEFHUyAg ICAgPSAtbm9sb2dvIC1EX0FNRDY0Xz0xIC1EV0lONjQgLURfV0lONjQgLURXSU4zMiAtRF9XSU4z MiAtYyAtWmwgLVpwOCAtVzIgLU9kIC1HZCAkKERFQlVHX0ZMQUcpDQorIWVsc2UNCisjQVJDSF9D RkxBR1MgICAgID0gLW5vbG9nbyAtYyAtWmVsIC1XMiAtSDYzIC1PeHNiMiAtT3ktIC1HNmRGIC1a cDggJChERUJVR19GTEFHKQ0KK0FSQ0hfQ0ZMQUdTICAgICA9IC1ub2xvZ28gLURfQU1ENjRfPTEg LURXSU42NCAtRF9XSU42NCAtRFdJTjMyIC1EX1dJTjMyIC1jIC1abCAtWnA4IC1XMiAtT2kgLU90 IC1PeS0gLU9iMiAtR0YgLUd5IC1HZCAkKERFQlVHX0ZMQUcpDQorIWVuZGlmDQorQVJDSF9MREZM QUdTCT0gJChTWVNfTERGTEFHUykgLW1hY2hpbmU6eDY0DQorQVJDSF9SQ0ZMQUdTCT0gLURXSU42 NA0KKw0KKyFlbHNlDQogIUVSUk9SIFVua25vd24gYXJjaGl0ZWN0dXJlIHR5cGUgIiQoQVJDSCki Lg0KICFlbmRpZg0KICFlbmRpZg0KICFlbmRpZg0KICFlbmRpZg0KKyFlbmRpZg0KIA0KIExJTktf RkxBR1MJPSAkKEFSQ0hfTERGTEFHUykgJChERUJVR19MSU5LKSAkKFVTRVJfTERGTEFHUykNCiAN Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJw0KLS0tIHNyYy9hbGxvYy5jCTIwMTIt MDItMjYgMDE6MDk6NTkgKzAwMDANCisrKyBzcmMvYWxsb2MuYwkyMDEyLTAyLTI4IDA2OjQwOjAx ICswMDAwDQpAQCAtNjQsNiArNjQsNyBAQA0KIA0KICNpZmRlZiBXSU5ET1dTTlQNCiAjaW5jbHVk ZSAidzMyLmgiDQorI2luY2x1ZGUgInczMmhlYXAuaCINCiAjZW5kaWYNCiANCiAjaWZkZWYgRE9V R19MRUFfTUFMTE9DDQpAQCAtMTE1MCw3ICsxMTUxLDcgQEANCiANCiAgIGlmICgyID4gKGludHB0 cl90KSBBQkxPQ0tTX0JVU1kgKGFiYXNlKSkNCiAgICAgeyAvKiBBbGwgdGhlIGJsb2NrcyBhcmUg ZnJlZS4gICovDQotICAgICAgaW50IGkgPSAwLCBhbGlnbmVkID0gKGludHB0cl90KSBBQkxPQ0tT X0JVU1kgKGFiYXNlKTsNCisgICAgICBpbnQgaSA9IDAsIGFsaWduZWQgPSAoQUJMT0NLU19CVVNZ IChhYmFzZSkgIT0gTlVMTCk7DQogICAgICAgc3RydWN0IGFibG9jayAqKnRlbSA9ICZmcmVlX2Fi bG9jazsNCiAgICAgICBzdHJ1Y3QgYWJsb2NrICphdG9wID0gJmFiYXNlLT5ibG9ja3NbYWxpZ25l ZCA/IEFCTE9DS1NfU0laRSA6IEFCTE9DS1NfU0laRSAtIDFdOw0KIA0KQEAgLTI5ODIsNyArMjk4 Myw3IEBADQogLyogQWxsb2NhdGUgb3RoZXIgdmVjdG9yLWxpa2Ugc3RydWN0dXJlcy4gICovDQog DQogc3RydWN0IExpc3BfVmVjdG9yICoNCi1hbGxvY2F0ZV9wc2V1ZG92ZWN0b3IgKGludCBtZW1s ZW4sIGludCBsaXNwbGVuLCBFTUFDU19JTlQgdGFnKQ0KK2FsbG9jYXRlX3BzZXVkb3ZlY3RvciAo c2l6ZV90IG1lbWxlbiwgc2l6ZV90IGxpc3BsZW4sIEVNQUNTX0lOVCB0YWcpDQogew0KICAgc3Ry dWN0IExpc3BfVmVjdG9yICp2ID0gYWxsb2NhdGVfdmVjdG9ybGlrZSAobWVtbGVuKTsNCiAgIGlu dCBpOw0KQEAgLTUwNTYsMTMgKzUwNTcsMTMgQEANCiAJICAgIC8qIElmIGEgYnVmZmVyJ3MgZ2Fw IHNpemUgaXMgbW9yZSB0aGFuIDEwJSBvZiB0aGUgYnVmZmVyDQogCSAgICAgICBzaXplLCBvciBs YXJnZXIgdGhhbiAyMDAwIGJ5dGVzLCB0aGVuIHNocmluayBpdA0KIAkgICAgICAgYWNjb3JkaW5n bHkuICBLZWVwIGEgbWluaW11bSBzaXplIG9mIDIwIGJ5dGVzLiAgKi8NCi0JICAgIGludCBzaXpl ID0gbWluICgyMDAwLCBtYXggKDIwLCAobmV4dGItPnRleHQtPnpfYnl0ZSAvIDEwKSkpOw0KKwkg ICAgc2l6ZV90IHNpemUgPSBtaW4gKDIwMDAsIG1heCAoMjAsIChuZXh0Yi0+dGV4dC0+el9ieXRl IC8gMTApKSk7DQogDQogCSAgICBpZiAobmV4dGItPnRleHQtPmdhcF9zaXplID4gc2l6ZSkNCiAJ ICAgICAgew0KIAkJc3RydWN0IGJ1ZmZlciAqc2F2ZV9jdXJyZW50ID0gY3VycmVudF9idWZmZXI7 DQogCQljdXJyZW50X2J1ZmZlciA9IG5leHRiOw0KLQkJbWFrZV9nYXAgKC0obmV4dGItPnRleHQt PmdhcF9zaXplIC0gc2l6ZSkpOw0KKwkJbWFrZV9nYXAgKChzaXplIC0gbmV4dGItPnRleHQtPmdh cF9zaXplKSk7DQogCQljdXJyZW50X2J1ZmZlciA9IHNhdmVfY3VycmVudDsNCiAJICAgICAgfQ0K IAkgIH0NCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jb2RpbmcuYycNCi0tLSBzcmMvY29kaW5n LmMJMjAxMi0wMi0wOSAwNzo0ODoyMiArMDAwMA0KKysrIHNyYy9jb2RpbmcuYwkyMDEyLTAyLTI3 IDIzOjMzOjE4ICswMDAwDQpAQCAtMjk4LDYgKzI5OCwxMCBAQA0KICNpbmNsdWRlICJmcmFtZS5o Ig0KICNpbmNsdWRlICJ0ZXJtaG9va3MuaCINCiANCisjaWZkZWYgV0lORE9XU05UDQorI2luY2x1 ZGUgInczMi5oIg0KKyNlbmRpZg0KKw0KIExpc3BfT2JqZWN0IFZjb2Rpbmdfc3lzdGVtX2hhc2hf dGFibGU7DQogDQogc3RhdGljIExpc3BfT2JqZWN0IFFjb2Rpbmdfc3lzdGVtLCBRZW9sX3R5cGU7 DQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZGlzcG5ldy5jJw0KLS0tIHNyYy9kaXNwbmV3LmMJ MjAxMi0wMi0wNCAxMToyOToyOSArMDAwMA0KKysrIHNyYy9kaXNwbmV3LmMJMjAxMi0wMi0yNyAy MzozMzoxOCArMDAwMA0KQEAgLTQ5LDYgKzQ5LDcgQEANCiAjZW5kaWYgLyogSEFWRV9YX1dJTkRP V1MgKi8NCiANCiAjaWZkZWYgSEFWRV9OVEdVSQ0KKyNpbmNsdWRlICJ3MzIuaCINCiAjaW5jbHVk ZSAidzMydGVybS5oIg0KICNlbmRpZiAvKiBIQVZFX05UR1VJICovDQogDQoNCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvZG9zZm5zLmMnDQotLS0gc3JjL2Rvc2Zucy5jCTIwMTItMDEtMTkgMDc6MjE6 MjUgKzAwMDANCisrKyBzcmMvZG9zZm5zLmMJMjAxMi0wMi0wNSAyMDowNjozNCArMDAwMA0KQEAg LTU0Miw3ICs1NDIsNyBAQA0KICAgICAgIGRvdWJsZSBwbWVtOw0KICAgICAgIEVYRlVOIChGZ2V0 X2ludGVybmFsX3J1bl90aW1lLCAwKTsNCiAjaWZuZGVmIFNZU1RFTV9NQUxMT0MNCi0gICAgICBl eHRlcm4gdW5zaWduZWQgbG9uZyByZXRfbGltX2RhdGEgKCk7DQorICAgICAgZXh0ZXJuIHNpemVf dCByZXRfbGltX2RhdGEgKCk7DQogI2VuZGlmDQogDQogICAgICAgdWlkID0gZ2V0dWlkICgpOw0K QEAgLTU3OSw3ICs1NzksNyBAQA0KICNpZm5kZWYgU1lTVEVNX01BTExPQw0KICAgICAgIC8qIHJl dF9saW1fZGF0YSBpcyBvbiB2bS1saW1pdC5jLCB3aGljaCBpcyBub3QgY29tcGlsZWQgaW4gdW5k ZXINCiAJIFNZU1RFTV9NQUxMT0MuICAqLw0KLSAgICAgIHBtZW0gPSAoZG91YmxlKSgodW5zaWdu ZWQgbG9uZykgc2JyayAoMCkpIC8gcmV0X2xpbV9kYXRhICgpICogMTAwLjA7DQorICAgICAgcG1l bSA9IChkb3VibGUpKChzaXplX3QpIHNicmsgKDApKSAvIHJldF9saW1fZGF0YSAoKSAqIDEwMC4w Ow0KICAgICAgIGlmIChwbWVtID4gMTAwKQ0KICNlbmRpZg0KIAlwbWVtID0gMTAwOw0KDQo9PT0g bW9kaWZpZWQgZmlsZSAnc3JjL2VkaXRmbnMuYycNCi0tLSBzcmMvZWRpdGZucy5jCTIwMTItMDEt MTkgMDc6MjE6MjUgKzAwMDANCisrKyBzcmMvZWRpdGZucy5jCTIwMTItMDItMjcgMjM6MzM6MTgg KzAwMDANCkBAIC04MSw2ICs4MSw3IEBADQogI2VuZGlmDQogDQogI2lmZGVmIFdJTkRPV1NOVA0K KyNpbmNsdWRlICJ3MzIuaCINCiBleHRlcm4gTGlzcF9PYmplY3QgdzMyX2dldF9pbnRlcm5hbF9y dW5fdGltZSAodm9pZCk7DQogI2VuZGlmDQogDQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmls ZWlvLmMnDQotLS0gc3JjL2ZpbGVpby5jCTIwMTItMDItMjUgMDk6MDc6MjMgKzAwMDANCisrKyBz cmMvZmlsZWlvLmMJMjAxMi0wMi0yOCAwNjo0MDowMSArMDAwMA0KQEAgLTUyLDYgKzUyLDcgQEAN CiAjZGVmaW5lIE5PTUlOTUFYIDENCiAjaW5jbHVkZSA8d2luZG93cy5oPg0KICNpbmNsdWRlIDxm Y250bC5oPg0KKyNpbmNsdWRlICJ3MzIuaCINCiAjZW5kaWYgLyogbm90IFdJTkRPV1NOVCAqLw0K IA0KICNpZmRlZiBNU0RPUw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZyYW1lLmMnDQotLS0g c3JjL2ZyYW1lLmMJMjAxMi0wMS0xOSAwNzoyMToyNSArMDAwMA0KKysrIHNyYy9mcmFtZS5jCTIw MTItMDItMDUgMjA6MDY6MzQgKzAwMDANCkBAIC04MTIsNiArODEyLDcgQEANCiAjaWZkZWYgSEFW RV9XSU5ET1dfU1lTVEVNDQogICBpZiAodHJhY2sgJiYgRlJBTUVfV0lORE9XX1AgKFhGUkFNRSAo ZnJhbWUpKSkNCiAgICAgew0KKyAgICAgIGV4dGVybiBMaXNwX09iamVjdCB4X2dldF9mb2N1c19m cmFtZShzdHJ1Y3QgZnJhbWUgKik7DQogICAgICAgTGlzcF9PYmplY3QgZm9jdXMsIHhmb2N1czsN CiANCiAgICAgICB4Zm9jdXMgPSB4X2dldF9mb2N1c19mcmFtZSAoWEZSQU1FIChmcmFtZSkpOw0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2dtYWxsb2MuYycNCi0tLSBzcmMvZ21hbGxvYy5jCTIw MTEtMDktMDkgMDE6MDY6NTIgKzAwMDANCisrKyBzcmMvZ21hbGxvYy5jCTIwMTItMDItMjcgMjM6 MzM6MTggKzAwMDANCkBAIC01Niw2ICs1Niw3IEBADQogDQogI2VuZGlmCS8qIF9NQUxMT0NfSU5U RVJOQUwuICAqLw0KIA0KKyNpbmNsdWRlIDx3MzJoZWFwLmg+DQogDQogI2lmZGVmCV9fY3BsdXNw bHVzDQogZXh0ZXJuICJDIg0KQEAgLTQ1OSw3ICs0NjAsNyBAQA0KICAgICAgX19tYWxsb2Nfc2l6 ZV90IHNpemU7DQogew0KICAgX19wdHJfdCByZXN1bHQ7DQotICB1bnNpZ25lZCBsb25nIGludCBh ZGo7DQorICBpbnRwdHJfdCBhZGo7DQogDQogICAvKiBhbGlnbiBhY2NlcHRzIGFuIHVuc2lnbmVk IGFyZ3VtZW50LCBidXQgX19tb3JlY29yZSBhY2NlcHRzIGENCiAgICAgIHNpZ25lZCBvbmUuICBU aGlzIGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBpZiBTSVpFIG92ZXJmbG93cyBhDQpAQCAtNDY5LDgg KzQ3MCw4IEBADQogICAgIHJlc3VsdCA9IDA7DQogICBlbHNlDQogICAgIHJlc3VsdCA9ICgqX19t b3JlY29yZSkgKHNpemUpOw0KLSAgYWRqID0gKHVuc2lnbmVkIGxvbmcgaW50KSAoKHVuc2lnbmVk IGxvbmcgaW50KSAoKGNoYXIgKikgcmVzdWx0IC0NCi0JCQkJCQkgIChjaGFyICopIE5VTEwpKSAl IEJMT0NLU0laRTsNCisgIGFkaiA9IChpbnRwdHJfdCkgKCgoY2hhciAqKSByZXN1bHQgLQ0KKyAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopIE5VTEwpKSAlIEJMT0NLU0laRTsNCiAgIGlmIChh ZGogIT0gMCkNCiAgICAgew0KICAgICAgIF9fcHRyX3QgbmV3Ow0KQEAgLTUzOSw3ICs1NDAsNyBA QA0KICAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uc2l6ZSA9IGJsb2NrczsNCiAgIC8qIExl YXZlIGJhY2stcG9pbnRlcnMgZm9yIG1hbGxvY19maW5kX2FkZHJlc3MuICAqLw0KICAgd2hpbGUg KC0tYmxvY2tzID4gMCkNCi0gICAgX2hlYXBpbmZvW2Jsb2NrICsgYmxvY2tzXS5idXN5LmluZm8u c2l6ZSA9IC1ibG9ja3M7DQorICAgIF9oZWFwaW5mb1tibG9jayArIGJsb2Nrc10uYnVzeS5pbmZv LnNpemUgPSAtKChfX21hbGxvY19wdHJkaWZmX3QpYmxvY2tzKTsNCiB9DQogDQogI2lmZGVmIFVT RV9QVEhSRUFEDQpAQCAtNzE1LDcgKzcxNiw3IEBADQogIAkgIC8qIERpZCBpdCBmYWlsPyAgKi8N CiAgCSAgaWYgKG5ld2luZm8gPT0gTlVMTCkNCiAgCSAgICB7DQotIAkgICAgICAoKl9fbW9yZWNv cmUpICgtc2l6ZSk7DQorIAkgICAgICAoKl9fbW9yZWNvcmUpICgtKChfX21hbGxvY19wdHJkaWZm X3Qpc2l6ZSkpOw0KICAJICAgICAgcmV0dXJuIE5VTEw7DQogIAkgICAgfQ0KIA0KQEAgLTcyNyw3 ICs3MjgsNyBAQA0KICAJICAgIGJyZWFrOw0KIA0KICAJICAvKiBNdXN0IHRyeSBhZ2Fpbi4gIEZp cnN0IGdpdmUgYmFjayBtb3N0IG9mIHdoYXQgd2UganVzdCBnb3QuICAqLw0KLSAJICAoKl9fbW9y ZWNvcmUpICgtIG5ld3NpemUgKiBzaXplb2YgKG1hbGxvY19pbmZvKSk7DQorIAkgICgqX19tb3Jl Y29yZSkgKC0gKChwdHJkaWZmX3QpKG5ld3NpemUgKiBzaXplb2YgKG1hbGxvY19pbmZvKSkpKTsN CiAgCSAgbmV3c2l6ZSAqPSAyOw0KICAgCX0NCiANCkBAIC04MDksOCArODEwLDggQEANCiAJICAg IG5leHQtPm5leHQtPnByZXYgPSBuZXh0LT5wcmV2Ow0KIAkgIGJsb2NrID0gQkxPQ0sgKHJlc3Vs dCk7DQogCSAgaWYgKC0tX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uZnJhZy5uZnJlZSAhPSAw KQ0KLQkgICAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uZnJhZy5maXJzdCA9ICh1bnNpZ25l ZCBsb25nIGludCkNCi0JICAgICAgKCh1bnNpZ25lZCBsb25nIGludCkgKChjaGFyICopIG5leHQt Pm5leHQgLSAoY2hhciAqKSBOVUxMKQ0KKwkgICAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8u ZnJhZy5maXJzdCA9IChpbnRwdHJfdCkNCisJICAgICAgKCgoY2hhciAqKSBuZXh0LT5uZXh0IC0g KGNoYXIgKikgTlVMTCkNCiAJICAgICAgICUgQkxPQ0tTSVpFKSA+PiBsb2c7DQogDQogCSAgLyog VXBkYXRlIHRoZSBzdGF0aXN0aWNzLiAgKi8NCkBAIC05NTEsNyArOTUyLDcgQEANCiAJIGZpcnN0 IHdpdGggYSBuZWdhdGl2ZSBudW1iZXIgc28geW91IGNhbiBmaW5kIHRoZSBmaXJzdCBibG9jayBi eQ0KIAkgYWRkaW5nIHRoYXQgYWRqdXN0bWVudC4gICovDQogICAgICAgd2hpbGUgKC0tYmxvY2tz ID4gMCkNCi0JX2hlYXBpbmZvW2Jsb2NrICsgYmxvY2tzXS5idXN5LmluZm8uc2l6ZSA9IC1ibG9j a3M7DQorCV9oZWFwaW5mb1tibG9jayArIGJsb2Nrc10uYnVzeS5pbmZvLnNpemUgPSAtKChwdHJk aWZmX3QpYmxvY2tzKTsNCiAgICAgfQ0KIA0KICAgUFJPVEVDVF9NQUxMT0NfU1RBVEUgKDEpOw0K QEAgLTEyMjQsNyArMTIyNSw3IEBADQogCSAgICB7DQogCSAgICAgIHJlZ2lzdGVyIF9fbWFsbG9j X3NpemVfdCBieXRlcyA9IGJsb2NrcyAqIEJMT0NLU0laRTsNCiAJICAgICAgX2hlYXBsaW1pdCAt PSBibG9ja3M7DQotCSAgICAgICgqX19tb3JlY29yZSkgKC1ieXRlcyk7DQorCSAgICAgICgqX19t b3JlY29yZSkgKC0oKF9fbWFsbG9jX3B0cmRpZmZfdClieXRlcykpOw0KIAkgICAgICBfaGVhcGlu Zm9bX2hlYXBpbmZvW2Jsb2NrXS5mcmVlLnByZXZdLmZyZWUubmV4dA0KIAkJPSBfaGVhcGluZm9b YmxvY2tdLmZyZWUubmV4dDsNCiAJICAgICAgX2hlYXBpbmZvW19oZWFwaW5mb1tibG9ja10uZnJl ZS5uZXh0XS5mcmVlLnByZXYNCkBAIC0xMjk1LDggKzEyOTYsOCBAQA0KIAkgICAgIGl0IGlzIHRo ZSBmaXJzdCBmcmVlIGZyYWdtZW50IG9mIHRoaXMgYmxvY2suICovDQogCSAgcHJldiA9IChzdHJ1 Y3QgbGlzdCAqKSBwdHI7DQogCSAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uZnJhZy5uZnJl ZSA9IDE7DQotCSAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uZnJhZy5maXJzdCA9ICh1bnNp Z25lZCBsb25nIGludCkNCi0JICAgICgodW5zaWduZWQgbG9uZyBpbnQpICgoY2hhciAqKSBwdHIg LSAoY2hhciAqKSBOVUxMKQ0KKwkgIF9oZWFwaW5mb1tibG9ja10uYnVzeS5pbmZvLmZyYWcuZmly c3QgPSAoaW50cHRyX3QpDQorCSAgICAoKGludHB0cl90KSAoKGNoYXIgKikgcHRyIC0gKGNoYXIg KikgTlVMTCkNCiAJICAgICAlIEJMT0NLU0laRSA+PiB0eXBlKTsNCiAJICBwcmV2LT5uZXh0ID0g X2ZyYWdoZWFkW3R5cGVdLm5leHQ7DQogCSAgcHJldi0+cHJldiA9ICZfZnJhZ2hlYWRbdHlwZV07 DQpAQCAtMTM3Myw2ICsxMzc0LDkgQEANCiAjaW5jbHVkZSA8bWFsbG9jLmg+DQogI2VuZGlmDQog DQorI2lmZGVmIG1pbg0KKyN1bmRlZiBtaW4NCisjZW5kaWYNCiANCiAjZGVmaW5lIG1pbihBLCBC KSAoKEEpIDwgKEIpID8gKEEpIDogKEIpKQ0KIA0KQEAgLTE2ODksNyArMTY5Myw3IEBADQogICAg ICBfX21hbGxvY19zaXplX3Qgc2l6ZTsNCiB7DQogICBfX3B0cl90IHJlc3VsdDsNCi0gIHVuc2ln bmVkIGxvbmcgaW50IGFkaiwgbGFzdGFkajsNCisgIGludHB0cl90IGFkaiwgbGFzdGFkajsNCiAg IF9fcHRyX3QgKCpob29rKSAoX19tYWxsb2Nfc2l6ZV90LCBfX21hbGxvY19zaXplX3QpID0gX19t ZW1hbGlnbl9ob29rOw0KIA0KICAgaWYgKGhvb2spDQpAQCAtMTcwMyw3ICsxNzA3LDcgQEANCiAN CiAgIC8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2Ugd2lsbCBuZWVkIHRvIHBhZCB0aGlzIHBhcnRp Y3VsYXIgYmxvY2sNCiAgICAgIHRvIGFjaGlldmUgdGhlIHJlcXVpcmVkIGFsaWdubWVudC4gICov DQotICBhZGogPSAodW5zaWduZWQgbG9uZyBpbnQpICgoY2hhciAqKSByZXN1bHQgLSAoY2hhciAq KSBOVUxMKSAlIGFsaWdubWVudDsNCisgIGFkaiA9IChpbnRwdHJfdCkgKChjaGFyICopIHJlc3Vs dCAtIChjaGFyICopIE5VTEwpICUgYWxpZ25tZW50Ow0KIA0KICAgZG8NCiAgICAgew0KQEAgLTE3 MTQsNyArMTcxOCw3IEBADQogCXJldHVybiBOVUxMOw0KIA0KICAgICAgIGxhc3RhZGogPSBhZGo7 DQotICAgICAgYWRqID0gKHVuc2lnbmVkIGxvbmcgaW50KSAoKGNoYXIgKikgcmVzdWx0IC0gKGNo YXIgKikgTlVMTCkgJSBhbGlnbm1lbnQ7DQorICAgICAgYWRqID0gKGludHB0cl90KSAoKGNoYXIg KikgcmVzdWx0IC0gKGNoYXIgKikgTlVMTCkgJSBhbGlnbm1lbnQ7DQogICAgICAgLyogSXQncyBj b25jZWl2YWJsZSB3ZSBtaWdodCBoYXZlIGJlZW4gc28gdW5sdWNreSBhcyB0byBnZXQgYQ0KIAkg ZGlmZmVyZW50IGJsb2NrIHdpdGggd2Vha2VyIGFsaWdubWVudC4gIElmIHNvLCB0aGlzIGJsb2Nr IGlzIHRvbw0KIAkgc2hvcnQgdG8gY29udGFpbiBTSVpFIGFmdGVyIGFsaWdubWVudCBjb3JyZWN0 aW9uLiAgU28gd2UgbXVzdA0KQEAgLTE5MDQsNyArMTkwOCw3IEBADQogc3RydWN0IGhkcg0KICAg ew0KICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsJCS8qIEV4YWN0IHNpemUgcmVxdWVzdGVkIGJ5 IHVzZXIuICAqLw0KLSAgICB1bnNpZ25lZCBsb25nIGludCBtYWdpYzsJLyogTWFnaWMgbnVtYmVy IHRvIGNoZWNrIGhlYWRlciBpbnRlZ3JpdHkuICAqLw0KKyAgICB1aW50NjRfdCBtYWdpYzsJLyog TWFnaWMgbnVtYmVyIHRvIGNoZWNrIGhlYWRlciBpbnRlZ3JpdHkuICAqLw0KICAgfTsNCiANCiBz dGF0aWMgZW51bSBtY2hlY2tfc3RhdHVzIGNoZWNraGRyIChjb25zdCBzdHJ1Y3QgaGRyICopOw0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ltYWdlLmMnDQotLS0gc3JjL2ltYWdlLmMJMjAxMi0w Mi0xNSAwNjo0MDowOCArMDAwMA0KKysrIHNyYy9pbWFnZS5jCTIwMTItMDItMTkgMjE6NTQ6MzMg KzAwMDANCkBAIC0xNiw2ICsxNiwxMCBAQA0KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogYWxvbmcgd2l0aCBHTlUgRW1h Y3MuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLw0KIA0K KyNpZmRlZiBfTVNDX1ZFUg0KKyNkZWZpbmUgX1czMkNPTVBBVF9IXyAxDQorI2VuZGlmDQorDQog I2luY2x1ZGUgPGNvbmZpZy5oPg0KICNpbmNsdWRlIDxzdGRpby5oPg0KICNpbmNsdWRlIDxtYXRo Lmg+DQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMva2V5Ym9hcmQuYycNCi0tLSBzcmMva2V5Ym9h cmQuYwkyMDEyLTAyLTI0IDA4OjM0OjA5ICswMDAwDQorKysgc3JjL2tleWJvYXJkLmMJMjAxMi0w Mi0yOCAwNjo0MDowMSArMDAwMA0KQEAgLTY2LDYgKzY2LDcgQEANCiAjZW5kaWYNCiANCiAjaWZk ZWYgSEFWRV9OVEdVSQ0KKyNpbmNsdWRlICJ3MzIuaCINCiAjaW5jbHVkZSAidzMydGVybS5oIg0K ICNlbmRpZiAvKiBIQVZFX05UR1VJICovDQogDQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlz cC5oJw0KLS0tIHNyYy9saXNwLmgJMjAxMi0wMi0yNSAxOTozOTo0MiArMDAwMA0KKysrIHNyYy9s aXNwLmgJMjAxMi0wMi0yOCAwNjo0MDowMSArMDAwMA0KQEAgLTQ4OSw3ICs0ODksNyBAQA0KIC8q IEZvciBpbnRlZ2VycyBrbm93biB0byBiZSBwb3NpdGl2ZSwgWEZBU1RJTlQgcHJvdmlkZXMgZmFz dCByZXRyaWV2YWwNCiAgICBhbmQgWFNFVEZBU1RJTlQgcHJvdmlkZXMgZmFzdCBzdG9yYWdlLiAg VGhpcyB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlDQogICAgZmFjdCB0aGF0IExpc3BfSW50IGlzIDAu ICAqLw0KLSNkZWZpbmUgWEZBU1RJTlQoYSkgKChhKSArIDApDQorI2RlZmluZSBYRkFTVElOVChh KSAoKChhKSArIDApKQ0KICNkZWZpbmUgWFNFVEZBU1RJTlQoYSwgYikgKChhKSA9IChiKSkNCiAN CiAvKiBFeHRyYWN0IHRoZSB2YWx1ZSBvZiBhIExpc3BfT2JqZWN0IGFzIGEgKHVuKXNpZ25lZCBp bnRlZ2VyLiAgKi8NCkBAIC0yODE3LDcgKzI4MTcsNyBAQA0KIEVYRlVOIChGbWFrZV9ib29sX3Zl Y3RvciwgMik7DQogZXh0ZXJuIExpc3BfT2JqZWN0IFFjaGFyX3RhYmxlX2V4dHJhX3Nsb3RzOw0K IGV4dGVybiBzdHJ1Y3QgTGlzcF9WZWN0b3IgKmFsbG9jYXRlX3ZlY3RvciAoRU1BQ1NfSU5UKTsN Ci1leHRlcm4gc3RydWN0IExpc3BfVmVjdG9yICphbGxvY2F0ZV9wc2V1ZG92ZWN0b3IgKGludCBt ZW1sZW4sIGludCBsaXNwbGVuLCBFTUFDU19JTlQgdGFnKTsNCitleHRlcm4gc3RydWN0IExpc3Bf VmVjdG9yICphbGxvY2F0ZV9wc2V1ZG92ZWN0b3IgKHNpemVfdCBtZW1sZW4sIHNpemVfdCBsaXNw bGVuLCBFTUFDU19JTlQgdGFnKTsNCiAjZGVmaW5lIEFMTE9DQVRFX1BTRVVET1ZFQ1RPUih0eXAs ZmllbGQsdGFnKQkJCQlcDQogICAoKHR5cCopCQkJCQkJCQlcDQogICAgYWxsb2NhdGVfcHNldWRv dmVjdG9yCQkJCQkJXA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xyZWFkLmMnDQotLS0gc3Jj L2xyZWFkLmMJMjAxMi0wMS0yNiAwNjozMDo0OSArMDAwMA0KKysrIHNyYy9scmVhZC5jCTIwMTIt MDItMjcgMjM6MzM6MTggKzAwMDANCkBAIC00NCw2ICs0NCwxMCBAQA0KICNpbmNsdWRlICJtc2Rv cy5oIg0KICNlbmRpZg0KIA0KKyNpZmRlZiBXSU5ET1dTTlQNCisjaW5jbHVkZSAidzMyLmgiDQor I2VuZGlmDQorDQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICNpbmNsdWRlIDxtYXRoLmg+DQogDQoN Cj09PSBtb2RpZmllZCBmaWxlICdzcmMvbS9hbWR4ODYtNjQuaCcNCi0tLSBzcmMvbS9hbWR4ODYt NjQuaAkyMDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwDQorKysgc3JjL20vYW1keDg2LTY0LmgJMjAx Mi0wMi0yOCAwNzowMDozMCArMDAwMA0KQEAgLTE3LDcgKzE3LDEzIEBADQogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiBh bG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovDQogDQotI2RlZmluZSBCSVRTX1BFUl9MT05HICAgICAgICAgICA2NA0KKyNp ZmRlZiBfV0lONjQNCisjIGRlZmluZSBCSVRTX1BFUl9MT05HICAgICAgICAgICAzMg0KKyMgZGVm aW5lIEJJVFNfUEVSX0xPTkdfTE9ORyAgICAgIDY0DQorI2Vsc2UNCisjIGRlZmluZSBCSVRTX1BF Ul9MT05HICAgICAgICAgICA2NA0KKyNlbmRpZg0KKw0KICNkZWZpbmUgQklUU19QRVJfRU1BQ1Nf SU5UICAgICAgNjQNCiANCiAvKiBOb3cgZGVmaW5lIGEgc3ltYm9sIGZvciB0aGUgY3B1IHR5cGUs IGlmIHlvdXIgY29tcGlsZXINCkBAIC0yNyw5ICszMywxNyBAQA0KIC8qIF9feDg2XzY0IGRlZmlu ZWQgYXV0b21hdGljYWxseS4gICovDQogDQogLyogRGVmaW5lIHRoZSB0eXBlIHRvIHVzZS4gICov DQotI2RlZmluZSBFTUFDU19JTlQgICAgICAgICAgICAgICBsb25nDQotI2RlZmluZSBwSQkJCSJs Ig0KLSNkZWZpbmUgRU1BQ1NfVUlOVCAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZw0KKyNpZmRl ZiBfV0lONjQNCisjIGRlZmluZSBFTUFDU19JTlQgICAgICAgICAgICAgICBfX2ludDY0DQorIyBk ZWZpbmUgRU1BQ1NfVUlOVCAgICAgICAgICAgICAgdW5zaWduZWQgX19pbnQ2NA0KKyMgZGVmaW5l IHBJCQkJImxsIg0KKyMgZGVmaW5lIFZJUlRfQUREUl9WQVJJRVMNCisjIGRlZmluZSBEQVRBX1NU QVJUIAlnZXRfZGF0YV9zdGFydCAoKQ0KKyNlbHNlDQorIyBkZWZpbmUgRU1BQ1NfSU5UICAgICAg ICAgICAgICAgbG9uZw0KKyMgZGVmaW5lIHBJCQkJImwiDQorIyBkZWZpbmUgRU1BQ1NfVUlOVCAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZw0KKyNlbmRpZg0KIA0KIC8qIERlZmluZSBYUE5UUiB0 byBhdm9pZCBvcidpbmcgd2l0aCBEQVRBX1NFR19CSVRTICovDQogI3VuZGVmIERBVEFfU0VHX0JJ VFMNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9tYWtlZmlsZS53MzItaW4nDQotLS0gc3JjL21h a2VmaWxlLnczMi1pbgkyMDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwDQorKysgc3JjL21ha2VmaWxl LnczMi1pbgkyMDEyLTAyLTA1IDIwOjA2OjM0ICswMDAwDQpAQCAtMjUsNyArMjUsNyBAQA0KIEVN QUNTTE9BRFBBVEg9JChDVVJESVIpLy4uL2xpc3ANCiANCiAjIFNpemUgaW4gTUJzIG9mIHRoZSBz dGF0aWMgaGVhcCBpbiB0ZW1hY3MuZXhlLg0KLUhFQVBTSVpFID0gMjcNCitIRUFQU0laRSA9IDQy DQogDQogIw0KICMgSEFWRV9DT05GSUdfSCBpcyByZXF1aXJlZCBieSBzb21lIGdlbmVyaWMgZ251 IHNvdXJjZXMgc3R1Y2sgaW50bw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3JhbGxvYy5jJw0K LS0tIHNyYy9yYWxsb2MuYwkyMDEyLTAyLTAxIDE2OjUxOjIwICswMDAwDQorKysgc3JjL3JhbGxv Yy5jCTIwMTItMDItMjcgMjM6MzM6MTggKzAwMDANCkBAIC0yNCw2ICsyNCw4IEBADQogDQogI2lm ZGVmIGVtYWNzDQogDQorI2RlZmluZSBTSVpFIEVTSVpFDQorDQogI2luY2x1ZGUgPGNvbmZpZy5o Pg0KICNpbmNsdWRlIDxzZXRqbXAuaD4NCiAjaW5jbHVkZSAibGlzcC5oIgkJLyogTmVlZGVkIGZv ciBWQUxCSVRTLiAgKi8NCkBAIC03Niw3ICs3OCw3IEBADQogLyogRGVjbGFyYXRpb25zIGZvciB3 b3JraW5nIHdpdGggdGhlIG1hbGxvYywgcmFsbG9jLCBhbmQgc3lzdGVtIGJyZWFrcy4gICovDQog DQogLyogRnVuY3Rpb24gdG8gc2V0IHRoZSByZWFsIGJyZWFrIHZhbHVlLiAgKi8NCi1QT0lOVEVS ICgqcmVhbF9tb3JlY29yZSkgKGxvbmcgaW50KTsNCitQT0lOVEVSICgqcmVhbF9tb3JlY29yZSkg KGludHB0cl90KTsNCiANCiAvKiBUaGUgYnJlYWsgdmFsdWUsIGFzIHNlZW4gYnkgbWFsbG9jLiAg Ki8NCiBzdGF0aWMgUE9JTlRFUiB2aXJ0dWFsX2JyZWFrX3ZhbHVlOw0KQEAgLTk1LDIwICs5Nywy MCBAQA0KIC8qIE1hY3JvcyBmb3Igcm91bmRpbmcuICBOb3RlIHRoYXQgcm91bmRpbmcgdG8gYW55 IHZhbHVlIGlzIHBvc3NpYmxlDQogICAgYnkgY2hhbmdpbmcgdGhlIGRlZmluaXRpb24gb2YgUEFH RS4gICovDQogI2RlZmluZSBQQUdFIChnZXRwYWdlc2l6ZSAoKSkNCi0jZGVmaW5lIEFMSUdORUQo YWRkcikgKCgodW5zaWduZWQgbG9uZyBpbnQpIChhZGRyKSAmIChwYWdlX3NpemUgLSAxKSkgPT0g MCkNCi0jZGVmaW5lIFJPVU5EVVAoc2l6ZSkgKCgodW5zaWduZWQgbG9uZyBpbnQpIChzaXplKSAr IHBhZ2Vfc2l6ZSAtIDEpIFwNCisjZGVmaW5lIEFMSUdORUQoYWRkcikgKCgoaW50cHRyX3QpIChh ZGRyKSAmIChwYWdlX3NpemUgLSAxKSkgPT0gMCkNCisjZGVmaW5lIFJPVU5EVVAoc2l6ZSkgKCgo aW50cHRyX3QpIChzaXplKSArIHBhZ2Vfc2l6ZSAtIDEpIFwNCiAJCSAgICAgICAmIH4ocGFnZV9z aXplIC0gMSkpDQogI2RlZmluZSBST1VORF9UT19QQUdFKGFkZHIpIChhZGRyICYgKH4ocGFnZV9z aXplIC0gMSkpKQ0KIA0KICNkZWZpbmUgTUVNX0FMSUdOIHNpemVvZiAoZG91YmxlKQ0KLSNkZWZp bmUgTUVNX1JPVU5EVVAoYWRkcikgKCgodW5zaWduZWQgbG9uZyBpbnQpKGFkZHIpICsgTUVNX0FM SUdOIC0gMSkgXA0KKyNkZWZpbmUgTUVNX1JPVU5EVVAoYWRkcikgKCgoaW50cHRyX3QpKGFkZHIp ICsgTUVNX0FMSUdOIC0gMSkgXA0KIAkJCQkgICAmIH4oTUVNX0FMSUdOIC0gMSkpDQogDQogLyog VGhlIGhvb2sgYG1hbGxvYycgdXNlcyBmb3IgdGhlIGZ1bmN0aW9uIHdoaWNoIGdldHMgbW9yZSBz cGFjZQ0KICAgIGZyb20gdGhlIHN5c3RlbS4gICovDQogDQogI2lmbmRlZiBTWVNURU1fTUFMTE9D DQotZXh0ZXJuIFBPSU5URVIgKCpfX21vcmVjb3JlKSAobG9uZyBpbnQpOw0KK2V4dGVybiBQT0lO VEVSICgqX19tb3JlY29yZSkgKGludHB0cl90KTsNCiAjZW5kaWYNCiANCiANCkBAIC0zMTUsNyAr MzE3LDcgQEANCiByZWxpbnF1aXNoICh2b2lkKQ0KIHsNCiAgIHJlZ2lzdGVyIGhlYXBfcHRyIGg7 DQotICBsb25nIGV4Y2VzcyA9IDA7DQorICBwdHJkaWZmX3QgZXhjZXNzID0gMDsNCiANCiAgIC8q IEFkZCB0aGUgYW1vdW50IG9mIHNwYWNlIGJleW9uZCBicmVha192YWx1ZQ0KICAgICAgaW4gYWxs IGhlYXBzIHdoaWNoIGhhdmUgZXh0ZW5kIGJleW9uZCBicmVha192YWx1ZSBhdCBhbGwuICAqLw0K QEAgLTM3MCw3ICszNzIsNyBAQA0KIC8qIFJldHVybiB0aGUgdG90YWwgc2l6ZSBpbiB1c2UgYnkg cmVsb2NhdGluZyBhbGxvY2F0b3IsDQogICAgYWJvdmUgd2hlcmUgbWFsbG9jIGdldHMgc3BhY2Uu ICAqLw0KIA0KLWxvbmcNCitpbnRwdHJfdA0KIHJfYWxsb2Nfc2l6ZV9pbl91c2UgKHZvaWQpDQog ew0KICAgcmV0dXJuIChjaGFyICopIGJyZWFrX3ZhbHVlIC0gKGNoYXIgKikgdmlydHVhbF9icmVh a192YWx1ZTsNCkBAIC03NDksNyArNzUxLDcgQEANCiAgICBHTlUgbWFsbG9jIHBhY2thZ2UuICAq Lw0KIA0KIFBPSU5URVINCi1yX2FsbG9jX3NicmsgKGxvbmcgaW50IHNpemUpDQorcl9hbGxvY19z YnJrIChwdHJkaWZmX3Qgc2l6ZSkNCiB7DQogICByZWdpc3RlciBibG9jX3B0ciBiOw0KICAgUE9J TlRFUiBhZGRyZXNzOw0KQEAgLTEwMjAsNyArMTAyMiw3IEBADQogICAgbWFsbG9jIG11c3QgcmV0 dXJuIGEgbnVsbCBwb2ludGVyLiAgKi8NCiANCiB2b2lkDQotcl9hbGxvY19mcmVlemUgKGxvbmcg aW50IHNpemUpDQorcl9hbGxvY19mcmVlemUgKGludHB0cl90IHNpemUpDQogew0KICAgaWYgKCEg cl9hbGxvY19pbml0aWFsaXplZCkNCiAgICAgcl9hbGxvY19pbml0ICgpOw0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL3JlZ2V4LmMnDQotLS0gc3JjL3JlZ2V4LmMJMjAxMi0wMS0xOSAwNzoyMToy NSArMDAwMA0KKysrIHNyYy9yZWdleC5jCTIwMTItMDItMjcgMjM6MzM6MTggKzAwMDANCkBAIC0x NjEsOCArMTYxLDggQEANCiAgIGRvIHsJCQkJCQkJCQkgICAgIFwNCiAgICAgaWYgKHRhcmdldF9t dWx0aWJ5dGUpCQkJCQkJICAgICBcDQogICAgICAgewkJCQkJCQkJCSAgICAgXA0KLQlyZV9jaGFy ICpkdGVtcCA9IChwKSA9PSAoc3RyMikgPyAoZW5kMSkgOiAocCk7CQkJICAgICBcDQotCXJlX2No YXIgKmRsaW1pdCA9ICgocCkgPiAoc3RyMikgJiYgKHApIDw9IChlbmQyKSkgPyAoc3RyMikgOiAo c3RyMSk7IFwNCisJY29uc3QgcmVfY2hhciAqZHRlbXAgPSAocCkgPT0gKHN0cjIpID8gKGVuZDEp IDogKHApOwkJCSAgICAgXA0KKwljb25zdCByZV9jaGFyICpkbGltaXQgPSAoKHApID4gKHN0cjIp ICYmIChwKSA8PSAoZW5kMikpID8gKHN0cjIpIDogKHN0cjEpOyBcDQogCXdoaWxlIChkdGVtcC0t ID4gZGxpbWl0ICYmICFDSEFSX0hFQURfUCAoKmR0ZW1wKSk7CQkgICAgIFwNCiAJYyA9IFNUUklO R19DSEFSIChkdGVtcCk7CQkJCQkgICAgIFwNCiAgICAgICB9CQkJCQkJCQkJICAgICBcDQpAQCAt NTQxLDggKzU0MSw4IEBADQogI2RlZmluZSB0cnVlIDENCiANCiBzdGF0aWMgcmVnb2ZmX3QgcmVf bWF0Y2hfMl9pbnRlcm5hbCBfUkVfQVJHUyAoKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVm cCwNCi0JCQkJCSAgICAgICByZV9jaGFyICpzdHJpbmcxLCBzaXplX3Qgc2l6ZTEsDQotCQkJCQkg ICAgICAgcmVfY2hhciAqc3RyaW5nMiwgc2l6ZV90IHNpemUyLA0KKwkJCQkJICAgICAgIGNvbnN0 IHJlX2NoYXIgKnN0cmluZzEsIHNpemVfdCBzaXplMSwNCisJCQkJCSAgICAgICBjb25zdCByZV9j aGFyICpzdHJpbmcyLCBzaXplX3Qgc2l6ZTIsDQogCQkJCQkgICAgICAgc3NpemVfdCBwb3MsDQog CQkJCQkgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywNCiAJCQkJCSAgICAgICBzc2l6 ZV90IHN0b3ApKTsNCkBAIC04MjUsOCArODI1LDggQEANCiAgIGRvCQkJCQkJCQkJXA0KICAgICB7 CQkJCQkJCQkJXA0KICAgICAgIHJlX3djaGFyX3QgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsJCQkJ XA0KLSAgICAgIHJlX2NoYXIgKnJ0cDsJCQkJCQkJXA0KLSAgICAgIHJlX2NoYXIgKnJhbmdlX3Rh YmxlX2VuZAkJCQkJCVwNCisgICAgICBjb25zdCByZV9jaGFyICpydHA7CQkJCQkJCVwNCisgICAg ICBjb25zdCByZV9jaGFyICpyYW5nZV90YWJsZV9lbmQJCQkJCQlcDQogCT0gQ0hBUlNFVF9SQU5H RV9UQUJMRV9FTkQgKChyYW5nZV90YWJsZSksIChjb3VudCkpOwkJXA0KIAkJCQkJCQkJCVwNCiAg ICAgICBmb3IgKHJ0cCA9IChyYW5nZV90YWJsZSk7IHJ0cCA8IHJhbmdlX3RhYmxlX2VuZDsgcnRw ICs9IDIgKiAzKQlcDQpAQCAtMTM2OCw3ICsxMzY4LDcgQEANCiANCiB1bmlvbiBmYWlsX3N0YWNr X2VsdA0KIHsNCi0gIHJlX2NoYXIgKnBvaW50ZXI7DQorICBjb25zdCByZV9jaGFyICpwb2ludGVy Ow0KICAgLyogVGhpcyBzaG91bGQgYmUgdGhlIGJpZ2dlc3QgYGludCcgdGhhdCdzIG5vIGJpZ2dl ciB0aGFuIGEgcG9pbnRlci4gICovDQogICBsb25nIGludGVnZXI7DQogfTsNCkBAIC0xNjU5LDcg KzE2NTksNyBAQA0KIAwNCiAvKiBTdWJyb3V0aW5lIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm9zIGZv ciByZWdleF9jb21waWxlLiAgKi8NCiANCi1zdGF0aWMgcmVnX2VycmNvZGVfdCByZWdleF9jb21w aWxlIF9SRV9BUkdTICgocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsDQorc3RhdGljIHJl Z19lcnJjb2RlX3QgcmVnZXhfY29tcGlsZSBfUkVfQVJHUyAoKGNvbnN0IHJlX2NoYXIgKnBhdHRl cm4sIHNpemVfdCBzaXplLA0KIAkJCQkJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwNCiAJCQkJ CSAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkpOw0KIHN0YXRpYyB2b2lkIHN0 b3JlX29wMSBfUkVfQVJHUyAoKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2MsIGlu dCBhcmcpKTsNCkBAIC0xNjY5LDE0ICsxNjY5LDE0IEBADQogCQkJCSAgaW50IGFyZywgdW5zaWdu ZWQgY2hhciAqZW5kKSk7DQogc3RhdGljIHZvaWQgaW5zZXJ0X29wMiBfUkVfQVJHUyAoKHJlX29w Y29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2MsDQogCQkJCSAgaW50IGFyZzEsIGludCBhcmcy LCB1bnNpZ25lZCBjaGFyICplbmQpKTsNCi1zdGF0aWMgYm9vbGVhbiBhdF9iZWdsaW5lX2xvY19w IF9SRV9BUkdTICgocmVfY2hhciAqcGF0dGVybiwNCi0JCQkJCSAgIHJlX2NoYXIgKnAsDQotCQkJ CQkgICByZWdfc3ludGF4X3Qgc3ludGF4KSk7DQotc3RhdGljIGJvb2xlYW4gYXRfZW5kbGluZV9s b2NfcCBfUkVfQVJHUyAoKHJlX2NoYXIgKnAsDQotCQkJCQkgICByZV9jaGFyICpwZW5kLA0KLQkJ CQkJICAgcmVnX3N5bnRheF90IHN5bnRheCkpOw0KLXN0YXRpYyByZV9jaGFyICpza2lwX29uZV9j aGFyIF9SRV9BUkdTICgocmVfY2hhciAqcCkpOw0KLXN0YXRpYyBpbnQgYW5hbHlzZV9maXJzdCBf UkVfQVJHUyAoKHJlX2NoYXIgKnAsIHJlX2NoYXIgKnBlbmQsDQorc3RhdGljIGJvb2xlYW4gYXRf YmVnbGluZV9sb2NfcCBfUkVfQVJHUyAoKGNvbnN0IHJlX2NoYXIgKnBhdHRlcm4sDQorCQkJCQkg ICBjb25zdCByZV9jaGFyICpwLA0KKwkJCQkJICAgcmVnX3N5bnRheF90IHN5bnRheCkpOw0KK3N0 YXRpYyBib29sZWFuIGF0X2VuZGxpbmVfbG9jX3AgX1JFX0FSR1MgKChjb25zdCByZV9jaGFyICpw LA0KKwkJCQkJICAgY29uc3QgcmVfY2hhciAqcGVuZCwNCisJCQkJCSAgIHJlZ19zeW50YXhfdCBz eW50YXgpKTsNCitzdGF0aWMgY29uc3QgcmVfY2hhciAqc2tpcF9vbmVfY2hhciBfUkVfQVJHUyAo KGNvbnN0IHJlX2NoYXIgKnApKTsNCitzdGF0aWMgaW50IGFuYWx5c2VfZmlyc3QgX1JFX0FSR1Mg KChjb25zdCByZV9jaGFyICpwLCBjb25zdCByZV9jaGFyICpwZW5kLA0KIAkJCQkgICAgY2hhciAq ZmFzdG1hcCwgY29uc3QgaW50IG11bHRpYnl0ZSkpOw0KIA0KIC8qIEZldGNoIHRoZSBuZXh0IGNo YXJhY3RlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLCB3aXRoIG5vDQpAQCAtMjQ4NCw5ICsy NDg0LDkgQEANCiAgIC8qIGBjb25zdCcgbWFrZXMgQUlYIGNvbXBpbGVyIGZhaWwuICAqLw0KICAg dW5zaWduZWQgY2hhciAqcCA9IHBhdHRlcm47DQogI2Vsc2UNCi0gIHJlX2NoYXIgKnAgPSBwYXR0 ZXJuOw0KKyAgY29uc3QgcmVfY2hhciAqcCA9IHBhdHRlcm47DQogI2VuZGlmDQotICByZV9jaGFy ICpwZW5kID0gcGF0dGVybiArIHNpemU7DQorICBjb25zdCByZV9jaGFyICpwZW5kID0gcGF0dGVy biArIHNpemU7DQogDQogICAvKiBIb3cgdG8gdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGluIHRo ZSBwYXR0ZXJuLiAgKi8NCiAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRy YW5zbGF0ZTsNCkBAIC0yNTA3LDcgKzI1MDcsNyBAQA0KIA0KICAgLyogUGxhY2UgaW4gdGhlIHVu Y29tcGlsZWQgcGF0dGVybiAoaS5lLiwgdGhlIHspIHRvDQogICAgICB3aGljaCB0byBnbyBiYWNr IGlmIHRoZSBpbnRlcnZhbCBpcyBpbnZhbGlkLiAgKi8NCi0gIHJlX2NoYXIgKmJlZ19pbnRlcnZh bDsNCisgIGNvbnN0IHJlX2NoYXIgKmJlZ19pbnRlcnZhbDsNCiANCiAgIC8qIEFkZHJlc3Mgb2Yg dGhlIHBsYWNlIHdoZXJlIGEgZm9yd2FyZCBqdW1wIHNob3VsZCBnbyB0byB0aGUgZW5kIG9mDQog ICAgICB0aGUgY29udGFpbmluZyBleHByZXNzaW9uLiAgRWFjaCBhbHRlcm5hdGl2ZSBvZiBhbiBg b3InIC0tIGV4Y2VwdCB0aGUNCkBAIC0yNTI1LDkgKzI1MjUsOSBAQA0KIA0KICAgLyogVGhlc2Ug aG9sZCB0aGUgdmFsdWVzIG9mIHAsIHBhdHRlcm4sIGFuZCBwZW5kIGZyb20gdGhlIG1haW4NCiAg ICAgIHBhdHRlcm4gd2hlbiB3ZSBoYXZlIHB1c2hlZCBpbnRvIGEgc3VicGF0dGVybi4gICovDQot ICByZV9jaGFyICptYWluX3AgSUZfTElOVCAoPSBOVUxMKTsNCi0gIHJlX2NoYXIgKm1haW5fcGF0 dGVybiBJRl9MSU5UICg9IE5VTEwpOw0KLSAgcmVfY2hhciAqbWFpbl9wZW5kIElGX0xJTlQgKD0g TlVMTCk7DQorICBjb25zdCByZV9jaGFyICptYWluX3AgSUZfTElOVCAoPSBOVUxMKTsNCisgIGNv bnN0IHJlX2NoYXIgKm1haW5fcGF0dGVybiBJRl9MSU5UICg9IE5VTEwpOw0KKyAgY29uc3QgcmVf Y2hhciAqbWFpbl9wZW5kIElGX0xJTlQgKD0gTlVMTCk7DQogDQogI2lmZGVmIERFQlVHDQogICBk ZWJ1ZysrOw0KQEAgLTI2MTYsNyArMjYxNiw3IEBADQogCXsNCiAJY2FzZSAnICc6DQogCSAgew0K LQkgICAgcmVfY2hhciAqcDEgPSBwOw0KKwkgICAgY29uc3QgcmVfY2hhciAqcDEgPSBwOw0KIA0K IAkgICAgLyogSWYgdGhlcmUncyBubyBzcGVjaWFsIHdoaXRlc3BhY2UgcmVnZXhwLCB0cmVhdA0K IAkgICAgICAgc3BhY2VzIG5vcm1hbGx5LiAgQW5kIGRvbid0IHRyeSB0byBkbyB0aGlzIHJlY3Vy c2l2ZWx5LiAgKi8NCkBAIC0yODM3LDcgKzI4MzcsNyBAQA0KIA0KIAljYXNlICdbJzoNCiAJICB7 DQotCSAgICByZV9jaGFyICpwMTsNCisJICAgIGNvbnN0IHJlX2NoYXIgKnAxOw0KIA0KIAkgICAg Q0xFQVJfUkFOR0VfVEFCTEVfV09SS19VU0VEIChyYW5nZV90YWJsZV93b3JrKTsNCiANCkBAIC0z MjE1LDcgKzMyMTUsNyBAQA0KIAkJICB9DQogCQllbHNlDQogCQkgIC8qIEl0J3MgcmVhbGx5IHNo eS4gICovDQotCQkgIHJlZ251bSA9IC0gYnVmcC0+cmVfbnN1YjsNCisJCSAgcmVnbnVtID0gLSAo KGludClidWZwLT5yZV9uc3ViKTsNCiANCiAJCWlmIChDT01QSUxFX1NUQUNLX0ZVTEwpDQogCQkg IHsNCkBAIC0zODMxLDcgKzM4MzEsNyBAQA0KIHN0YXRpYyBib29sZWFuDQogYXRfYmVnbGluZV9s b2NfcCAoY29uc3QgcmVfY2hhciAqcGF0dGVybiwgY29uc3QgcmVfY2hhciAqcCwgcmVnX3N5bnRh eF90IHN5bnRheCkNCiB7DQotICByZV9jaGFyICpwcmV2ID0gcCAtIDI7DQorICBjb25zdCByZV9j aGFyICpwcmV2ID0gcCAtIDI7DQogICBib29sZWFuIHByZXZfcHJldl9iYWNrc2xhc2ggPSBwcmV2 ID4gcGF0dGVybiAmJiBwcmV2Wy0xXSA9PSAnXFwnOw0KIA0KICAgcmV0dXJuDQpAQCAtMzg1Myw5 ICszODUzLDkgQEANCiBzdGF0aWMgYm9vbGVhbg0KIGF0X2VuZGxpbmVfbG9jX3AgKGNvbnN0IHJl X2NoYXIgKnAsIGNvbnN0IHJlX2NoYXIgKnBlbmQsIHJlZ19zeW50YXhfdCBzeW50YXgpDQogew0K LSAgcmVfY2hhciAqbmV4dCA9IHA7DQorICBjb25zdCByZV9jaGFyICpuZXh0ID0gcDsNCiAgIGJv b2xlYW4gbmV4dF9iYWNrc2xhc2ggPSAqbmV4dCA9PSAnXFwnOw0KLSAgcmVfY2hhciAqbmV4dF9u ZXh0ID0gcCArIDEgPCBwZW5kID8gcCArIDEgOiAwOw0KKyAgY29uc3QgcmVfY2hhciAqbmV4dF9u ZXh0ID0gcCArIDEgPCBwZW5kID8gcCArIDEgOiAwOw0KIA0KICAgcmV0dXJuDQogICAgICAgIC8q IEJlZm9yZSBhIHN1YmV4cHJlc3Npb24/ICAqLw0KQEAgLTM5MzEsNyArMzkzMSw3IEBADQogCSAg ICAzLi45OiA8Ym9keT4NCiAJICAgIDEwOiBvbl9mYWlsdXJlX2p1bXAgMw0KIAkgYXMgdXNlZCBm b3IgdGhlICo/IG9wZXJhdG9yLiAgKi8NCi0gICAgICByZV9jaGFyICpwMSA9IHA7DQorICAgICAg Y29uc3QgcmVfY2hhciAqcDEgPSBwOw0KIA0KICAgICAgIHN3aXRjaCAoU1dJVENIX0VOVU1fQ0FT VCAoKHJlX29wY29kZV90KSAqcCsrKSkNCiAJew0KQEAgLTQ1MjEsOSArNDUyMSw5IEBADQogCSAg LyogVXBkYXRlIFNUQVJUUE9TIHRvIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgYm91bmRhcnkuICAq Lw0KIAkgIGlmIChtdWx0aWJ5dGUpDQogCSAgICB7DQotCSAgICAgIHJlX2NoYXIgKnAgPSBQT1Nf QUREUl9WU1RSSU5HIChzdGFydHBvcykgKyAxOw0KLQkgICAgICByZV9jaGFyICpwMCA9IHA7DQot CSAgICAgIHJlX2NoYXIgKnBoZWFkID0gSEVBRF9BRERSX1ZTVFJJTkcgKHN0YXJ0cG9zKTsNCisJ ICAgICAgY29uc3QgcmVfY2hhciAqcCA9IFBPU19BRERSX1ZTVFJJTkcgKHN0YXJ0cG9zKSArIDE7 DQorCSAgICAgIGNvbnN0IHJlX2NoYXIgKnAwID0gcDsNCisJICAgICAgY29uc3QgcmVfY2hhciAq cGhlYWQgPSBIRUFEX0FERFJfVlNUUklORyAoc3RhcnRwb3MpOw0KIA0KIAkgICAgICAvKiBGaW5k IHRoZSBoZWFkIG9mIG11bHRpYnl0ZSBmb3JtLiAgKi8NCiAJICAgICAgUFJFVl9DSEFSX0JPVU5E QVJZIChwLCBwaGVhZCk7DQpAQCAtNDU0MSw3ICs0NTQxLDcgQEANCiAMDQogLyogRGVjbGFyYXRp b25zIGFuZCBtYWNyb3MgZm9yIHJlX21hdGNoXzIuICAqLw0KIA0KLXN0YXRpYyBpbnQgYmNtcF90 cmFuc2xhdGUgX1JFX0FSR1MgKChyZV9jaGFyICpzMSwgcmVfY2hhciAqczIsDQorc3RhdGljIGlu dCBiY21wX3RyYW5zbGF0ZSBfUkVfQVJHUyAoKGNvbnN0IHJlX2NoYXIgKnMxLCBjb25zdCByZV9j aGFyICpzMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIg c3NpemVfdCBsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFX1RS QU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgaW50IG11bHRpYnl0ZSkpOw0KQEAgLTQ2MzgsNyArNDYzOCw3IEBADQogDQog LyogSWYgdGhlIG9wZXJhdGlvbiBpcyBhIG1hdGNoIGFnYWluc3Qgb25lIG9yIG1vcmUgY2hhcnMs DQogICAgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24sIGVsc2UgcmV0dXJu IE5VTEwuICAqLw0KLXN0YXRpYyByZV9jaGFyICoNCitzdGF0aWMgY29uc3QgcmVfY2hhciAqDQog c2tpcF9vbmVfY2hhciAoY29uc3QgcmVfY2hhciAqcCkNCiB7DQogICBzd2l0Y2ggKFNXSVRDSF9F TlVNX0NBU1QgKCpwKyspKQ0KQEAgLTQ2ODAsNyArNDY4MCw3IEBADQogDQogDQogLyogSnVtcCBv dmVyIG5vbi1tYXRjaGluZyBvcGVyYXRpb25zLiAgKi8NCi1zdGF0aWMgcmVfY2hhciAqDQorc3Rh dGljIGNvbnN0IHJlX2NoYXIgKg0KIHNraXBfbm9vcHMgKGNvbnN0IHJlX2NoYXIgKnAsIGNvbnN0 IHJlX2NoYXIgKnBlbmQpDQogew0KICAgaW50IG1jbnQ7DQpAQCAtNDk3NiwyNCArNDk3NiwyNCBA QA0KICAgc2l6ZV90IHJlZzsNCiANCiAgIC8qIEp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb3Jy ZXNwb25kaW5nIHN0cmluZy4gICovDQotICByZV9jaGFyICplbmQxLCAqZW5kMjsNCisgIGNvbnN0 IHJlX2NoYXIgKmVuZDEsICplbmQyOw0KIA0KICAgLyogUG9pbnRlcnMgaW50byBzdHJpbmcxIGFu ZCBzdHJpbmcyLCBqdXN0IHBhc3QgdGhlIGxhc3QgY2hhcmFjdGVycyBpbg0KICAgICAgZWFjaCB0 byBjb25zaWRlciBtYXRjaGluZy4gICovDQotICByZV9jaGFyICplbmRfbWF0Y2hfMSwgKmVuZF9t YXRjaF8yOw0KKyAgY29uc3QgcmVfY2hhciAqZW5kX21hdGNoXzEsICplbmRfbWF0Y2hfMjsNCiAN CiAgIC8qIFdoZXJlIHdlIGFyZSBpbiB0aGUgZGF0YSwgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJl bnQgc3RyaW5nLiAgKi8NCi0gIHJlX2NoYXIgKmQsICpkZW5kOw0KKyAgY29uc3QgcmVfY2hhciAq ZCwgKmRlbmQ7DQogDQogICAvKiBVc2VkIHNvbWV0aW1lcyB0byByZW1lbWJlciB3aGVyZSB3ZSB3 ZXJlIGJlZm9yZSBzdGFydGluZyBtYXRjaGluZw0KICAgICAgYW4gb3BlcmF0b3Igc28gdGhhdCB3 ZSBjYW4gZ28gYmFjayBpbiBjYXNlIG9mIGZhaWx1cmUuICBUaGlzICJhdG9taWMiDQogICAgICBi ZWhhdmlvciBvZiBtYXRjaGluZyBvcGNvZGVzIGlzIGluZGlzcGVuc2FibGUgdG8gdGhlIGNvcnJl Y3RuZXNzDQogICAgICBvZiB0aGUgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIG9wdGltaXph dGlvbi4gICovDQotICByZV9jaGFyICpkZmFpbDsNCisgIGNvbnN0IHJlX2NoYXIgKmRmYWlsOw0K IA0KICAgLyogV2hlcmUgd2UgYXJlIGluIHRoZSBwYXR0ZXJuLCBhbmQgdGhlIGVuZCBvZiB0aGUg cGF0dGVybi4gICovDQotICByZV9jaGFyICpwID0gYnVmcC0+YnVmZmVyOw0KLSAgcmVfY2hhciAq cGVuZCA9IHAgKyBidWZwLT51c2VkOw0KKyAgY29uc3QgcmVfY2hhciAqcCA9IGJ1ZnAtPmJ1ZmZl cjsNCisgIGNvbnN0IHJlX2NoYXIgKnBlbmQgPSBwICsgYnVmcC0+dXNlZDsNCiANCiAgIC8qIFdl IHVzZSB0aGlzIHRvIG1hcCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4JKi8NCiAgIFJF X1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsNCkBAIC01MDM3LDcg KzUwMzcsNyBAQA0KICAgICAgc3RvcHBlZCBtYXRjaGluZyB0aGUgcmVnbnVtLXRoIHN1YmV4cHJl c3Npb24uICAoVGhlIHplcm90aCByZWdpc3Rlcg0KICAgICAga2VlcHMgdHJhY2sgb2Ygd2hhdCB0 aGUgd2hvbGUgcGF0dGVybiBtYXRjaGVzLikgICovDQogI2lmZGVmIE1BVENIX01BWV9BTExPQ0FU RSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLw0KLSAgcmVfY2hhciAqKnJlZ3N0 YXJ0LCAqKnJlZ2VuZDsNCisgIGNvbnN0IHJlX2NoYXIgKipyZWdzdGFydCwgKipyZWdlbmQ7DQog I2VuZGlmDQogDQogICAvKiBUaGUgZm9sbG93aW5nIHJlY29yZCB0aGUgcmVnaXN0ZXIgaW5mbyBh cyBmb3VuZCBpbiB0aGUgYWJvdmUNCkBAIC01MDQ2LDcgKzUwNDYsNyBAQA0KICAgICAgdHVybiBo YXBwZW5zIG9ubHkgaWYgd2UgaGF2ZSBub3QgeWV0IG1hdGNoZWQgdGhlIGVudGlyZSBzdHJpbmcu ICovDQogICB1bnNpZ25lZCBiZXN0X3JlZ3Nfc2V0ID0gZmFsc2U7DQogI2lmZGVmIE1BVENIX01B WV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLw0KLSAgcmVfY2hh ciAqKmJlc3RfcmVnc3RhcnQsICoqYmVzdF9yZWdlbmQ7DQorICBjb25zdCByZV9jaGFyICoqYmVz dF9yZWdzdGFydCwgKipiZXN0X3JlZ2VuZDsNCiAjZW5kaWYNCiANCiAgIC8qIExvZ2ljYWxseSwg dGhpcyBpcyBgYmVzdF9yZWdlbmRbMF0nLiAgQnV0IHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0bw0K QEAgLTUwNTcsNyArNTA1Nyw3IEBADQogICAgICB0aGUgZW5kIG9mIHRoZSBiZXN0IG1hdGNoIHNv IGZhciBpbiBhIHNlcGFyYXRlIHZhcmlhYmxlLiAgV2UNCiAgICAgIGluaXRpYWxpemUgdGhpcyB0 byBOVUxMIHNvIHRoYXQgd2hlbiB3ZSBiYWNrdHJhY2sgdGhlIGZpcnN0IHRpbWUNCiAgICAgIGFu ZCBuZWVkIHRvIHRlc3QgaXQsIGl0J3Mgbm90IGdhcmJhZ2UuICAqLw0KLSAgcmVfY2hhciAqbWF0 Y2hfZW5kID0gTlVMTDsNCisgIGNvbnN0IHJlX2NoYXIgKm1hdGNoX2VuZCA9IE5VTEw7DQogDQog I2lmZGVmIERFQlVHDQogICAvKiBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMg cHVzaGVkLiAgKi8NCkBAIC01NDg0LDcgKzU0ODQsNyBAQA0KIA0KIAkgICAgLyogU3RhcnQgb2Yg YWN0dWFsIHJhbmdlX3RhYmxlLCBvciBlbmQgb2YgYml0bWFwIGlmIHRoZXJlIGlzIG5vDQogCSAg ICAgICByYW5nZSB0YWJsZS4gICovDQotCSAgICByZV9jaGFyICpyYW5nZV90YWJsZSBJRl9MSU5U ICg9IE5VTEwpOw0KKwkgICAgY29uc3QgcmVfY2hhciAqcmFuZ2VfdGFibGUgSUZfTElOVCAoPSBO VUxMKTsNCiANCiAJICAgIC8qIE5vbnplcm8gaWYgdGhlcmUgaXMgYSByYW5nZSB0YWJsZS4gICov DQogCSAgICBpbnQgcmFuZ2VfdGFibGVfZXhpc3RzOw0KQEAgLTU2MjYsNyArNTYyNiw3IEBADQog CSAgIGZvbGxvd2VkIGJ5IHRoZSBudW1lcmljIHZhbHVlIG9mIDxkaWdpdD4gYXMgdGhlIHJlZ2lz dGVyIG51bWJlci4gICovDQogCWNhc2UgZHVwbGljYXRlOg0KIAkgIHsNCi0JICAgIHJlZ2lzdGVy IHJlX2NoYXIgKmQyLCAqZGVuZDI7DQorCSAgICBjb25zdCByZWdpc3RlciByZV9jaGFyICpkMiwg KmRlbmQyOw0KIAkgICAgaW50IHJlZ25vID0gKnArKzsJLyogR2V0IHdoaWNoIHJlZ2lzdGVyIHRv IG1hdGNoIGFnYWluc3QuICAqLw0KIAkgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGR1cGxp Y2F0ZSAlZC5cbiIsIHJlZ25vKTsNCiANCkBAIC01ODU0LDcgKzU4NTQsNyBAQA0KIAkgIERFQlVH X1BSSU5UMyAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2p1bXBfc21hcnQgJWQgKHRvICVwKS5cbiIs DQogCQkJbWNudCwgcCArIG1jbnQpOw0KIAkgIHsNCi0JICAgIHJlX2NoYXIgKnAxID0gcDsgLyog TmV4dCBvcGVyYXRpb24uICAqLw0KKwkgICAgY29uc3QgcmVfY2hhciAqcDEgPSBwOyAvKiBOZXh0 IG9wZXJhdGlvbi4gICovDQogCSAgICAvKiBIZXJlLCB3ZSBkaXNjYXJkIGBjb25zdCcsIG1ha2lu ZyByZV9tYXRjaCBub24tcmVlbnRyYW50LiAgKi8NCiAJICAgIHVuc2lnbmVkIGNoYXIgKnAyID0g KHVuc2lnbmVkIGNoYXIqKSBwICsgbWNudDsgLyogSnVtcCBkZXN0LiAgKi8NCiAJICAgIHVuc2ln bmVkIGNoYXIgKnAzID0gKHVuc2lnbmVkIGNoYXIqKSBwIC0gMzsgLyogb3Bjb2RlIGxvY2F0aW9u LiAgKi8NCkBAIC02MjUxLDcgKzYyNTEsNyBAQA0KICAgICAgIElNTUVESUFURV9RVUlUX0NIRUNL Ow0KICAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkNCiAJew0KLQkgIHJlX2NoYXIgKnN0 ciwgKnBhdDsNCisJICBjb25zdCByZV9jaGFyICpzdHIsICpwYXQ7DQogCSAgLyogQSByZXN0YXJ0 IHBvaW50IGlzIGtub3duLiAgUmVzdG9yZSB0byB0aGF0IHN0YXRlLiAgKi8NCiAJICBERUJVR19Q UklOVDEgKCJcbkZBSUw6XG4iKTsNCiAJICBQT1BfRkFJTFVSRV9QT0lOVCAoc3RyLCBwYXQpOw0K QEAgLTYzMDksOSArNjMwOSw5IEBADQogYmNtcF90cmFuc2xhdGUgKGNvbnN0IHJlX2NoYXIgKnMx LCBjb25zdCByZV9jaGFyICpzMiwgcmVnaXN0ZXIgc3NpemVfdCBsZW4sDQogCQlSRV9UUkFOU0xB VEVfVFlQRSB0cmFuc2xhdGUsIGNvbnN0IGludCB0YXJnZXRfbXVsdGlieXRlKQ0KIHsNCi0gIHJl Z2lzdGVyIHJlX2NoYXIgKnAxID0gczEsICpwMiA9IHMyOw0KLSAgcmVfY2hhciAqcDFfZW5kID0g czEgKyBsZW47DQotICByZV9jaGFyICpwMl9lbmQgPSBzMiArIGxlbjsNCisgIGNvbnN0IHJlZ2lz dGVyIHJlX2NoYXIgKnAxID0gczEsICpwMiA9IHMyOw0KKyAgY29uc3QgcmVfY2hhciAqcDFfZW5k ID0gczEgKyBsZW47DQorICBjb25zdCByZV9jaGFyICpwMl9lbmQgPSBzMiArIGxlbjsNCiANCiAg IC8qIEZJWE1FOiBDaGVja2luZyBib3RoIHAxIGFuZCBwMiBwcmVzdW1lcyB0aGF0IHRoZSB0d28g c3RyaW5ncyBtaWdodCBoYXZlDQogICAgICBkaWZmZXJlbnQgbGVuZ3RocywgYnV0IHJlbHlpbmcg b24gYSBzaW5nbGUgYGxlbicgd291bGQgYnJlYWsgdGhpcy4gLXNtICAqLw0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL3MvbXMtdzMyLmgnDQotLS0gc3JjL3MvbXMtdzMyLmgJMjAxMi0wMS0xOSAw NzoyMToyNSArMDAwMA0KKysrIHNyYy9zL21zLXczMi5oCTIwMTItMDItMjggMTQ6MDg6MjAgKzAw MDANCkBAIC0xOTEsNiArMTkxLDE0IEBADQogI2luY2x1ZGUgPHN5cy90aW1lYi5oPg0KICNpbmNs dWRlIDxzeXMvc3RhdC5oPg0KICNpbmNsdWRlIDxzaWduYWwuaD4NCisjaW5jbHVkZSA8c3RyaW5n Lmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorZXh0ZXJuIHZvaWQgKmVfbWFsbG9jKHNpemVfdCk7 DQorZXh0ZXJuIHZvaWQgZV9mcmVlKHZvaWQgKik7DQorZXh0ZXJuIHZvaWQgKmVfcmVhbGxvYyh2 b2lkICosIHNpemVfdCk7DQorI2lmbmRlZiBfQ1JUX0FMTE9DQVRJT05fREVGSU5FRA0KKyNkZWZp bmUgX0NSVF9BTExPQ0FUSU9OX0RFRklORUQNCisjZW5kaWYNCiANCiAvKiBNU1ZDIGdldHMgbGlu ay10aW1lIGVycm9ycyB3aXRob3V0IHRoZXNlIHJlZGlyZWN0aW9ucy4gICovDQogI2RlZmluZSBm c3RhdChhLCBiKSBzeXNfZnN0YXQoYSwgYikNCkBAIC0yODEsMTMgKzI4OSwxNCBAQA0KICNkZWZp bmUgdXRpbWJ1ZgkgIF91dGltYnVmDQogI2VuZGlmDQogI2RlZmluZSBzdHJkdXAgICAgX3N0cmR1 cA0KKyNkZWZpbmUgc3RydG9sbCAgIF9zdHJ0b2k2NA0KICNkZWZpbmUgc3RydXByICAgIF9zdHJ1 cHINCiAjZGVmaW5lIHN0cm5pY21wICBfc3RybmljbXANCiAjZGVmaW5lIHN0cmljbXAgICBfc3Ry aWNtcA0KICNkZWZpbmUgdHpzZXQgICAgIF90enNldA0KIA0KKyNpZiAhZGVmaW5lZCAoX01TQ19W RVIpIC8qIHx8IChfTVNDX1ZFUiA8IDE0MDApICovDQogI2RlZmluZSB0em5hbWUgICAgX3R6bmFt ZQ0KLSNpZiAhZGVmaW5lZCAoX01TQ19WRVIpIHx8IChfTVNDX1ZFUiA8IDE0MDApDQogI3VuZGVm ICB1dGltZQ0KICNkZWZpbmUgdXRpbWUJICBfdXRpbWUNCiAjZW5kaWYNCkBAIC00MDYsNSArNDE1 LDEyIEBADQogI2RlZmluZSBEZWJQcmludChzdHVmZikNCiAjZW5kaWYNCiANCisjaWZkZWYgX01T Q19WRVINCisjaWYgX01TQ19WRVIgPj0gODAwICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQ0KKyNw cmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMTYpDQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDcx NSkNCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KQ0KKyNlbmRpZg0KKyNlbmRpZg0KIA0K IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSAqLw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3VuZXh3MzIuYycNCi0tLSBzcmMv dW5leHczMi5jCTIwMTItMDEtMTkgMDc6MjE6MjUgKzAwMDANCisrKyBzcmMvdW5leHczMi5jCTIw MTItMDItMDUgMjA6MDY6MzQgKzAwMDANCkBAIC02NywxOCArNjcsMTggQEANCiAvKiBDYWNoZWQg aW5mbyBhYm91dCB0aGUgLmRhdGEgc2VjdGlvbiBpbiB0aGUgZXhlY3V0YWJsZS4gICovDQogUElN QUdFX1NFQ1RJT05fSEVBREVSIGRhdGFfc2VjdGlvbjsNCiBQQ0hBUiAgZGF0YV9zdGFydCA9IDA7 DQotRFdPUkQgIGRhdGFfc2l6ZSA9IDA7DQorRFdPUkRfUFRSICBkYXRhX3NpemUgPSAwOw0KIA0K IC8qIENhY2hlZCBpbmZvIGFib3V0IHRoZSAuYnNzIHNlY3Rpb24gaW4gdGhlIGV4ZWN1dGFibGUu ICAqLw0KIFBJTUFHRV9TRUNUSU9OX0hFQURFUiBic3Nfc2VjdGlvbjsNCiBQQ0hBUiAgYnNzX3N0 YXJ0ID0gMDsNCi1EV09SRCAgYnNzX3NpemUgPSAwOw0KLURXT1JEICBleHRyYV9ic3Nfc2l6ZSA9 IDA7DQorRFdPUkRfUFRSICBic3Nfc2l6ZSA9IDA7DQorRFdPUkRfUFRSICBleHRyYV9ic3Nfc2l6 ZSA9IDA7DQogLyogYnNzIGRhdGEgdGhhdCBpcyBzdGF0aWMgbWlnaHQgYmUgZGlzY29udGlndW91 cyBmcm9tIG5vbi1zdGF0aWMuICAqLw0KIFBJTUFHRV9TRUNUSU9OX0hFQURFUiBic3Nfc2VjdGlv bl9zdGF0aWM7DQogUENIQVIgIGJzc19zdGFydF9zdGF0aWMgPSAwOw0KLURXT1JEICBic3Nfc2l6 ZV9zdGF0aWMgPSAwOw0KLURXT1JEICBleHRyYV9ic3Nfc2l6ZV9zdGF0aWMgPSAwOw0KK0RXT1JE X1BUUiAgYnNzX3NpemVfc3RhdGljID0gMDsNCitEV09SRF9QVFIgIGV4dHJhX2Jzc19zaXplX3N0 YXRpYyA9IDA7DQogDQogUElNQUdFX1NFQ1RJT05fSEVBREVSIGhlYXBfc2VjdGlvbjsNCiANCkBA IC0yMzEsNyArMjMxLDcgQEANCiAvKiBSZXR1cm4gcG9pbnRlciB0byBzZWN0aW9uIGhlYWRlciBm b3Igc2VjdGlvbiBjb250YWluaW5nIHRoZSBnaXZlbg0KICAgIHJlbGF0aXZlIHZpcnR1YWwgYWRk cmVzcy4gKi8NCiBJTUFHRV9TRUNUSU9OX0hFQURFUiAqDQotcnZhX3RvX3NlY3Rpb24gKERXT1JE IHJ2YSwgSU1BR0VfTlRfSEVBREVSUyAqIG50X2hlYWRlcikNCitydmFfdG9fc2VjdGlvbiAoRFdP UkRfUFRSIHJ2YSwgSU1BR0VfTlRfSEVBREVSUyAqIG50X2hlYWRlcikNCiB7DQogICBQSU1BR0Vf U0VDVElPTl9IRUFERVIgc2VjdGlvbjsNCiAgIGludCBpOw0KQEAgLTI0Niw3ICsyNDYsNyBAQA0K IAkgc29tZSB2ZXJ5IG9sZCBleGVzIChlZy4gZ3ppcCBkYXRlZCBEZWMgMTk5MykuICBTaW5jZQ0K IAkgdzMyX2V4ZWN1dGFibGVfdHlwZSByZWxpZXMgb24gdGhpcyBmdW5jdGlvbiB0byB3b3JrIHJl bGlhYmx5LA0KIAkgd2UgbmVlZCB0byBjb3BlIHdpdGggdGhpcy4gICovDQotICAgICAgRFdPUkQg cmVhbF9zaXplID0gbWF4IChzZWN0aW9uLT5TaXplT2ZSYXdEYXRhLA0KKyAgICAgIERXT1JEX1BU UiByZWFsX3NpemUgPSBtYXggKHNlY3Rpb24tPlNpemVPZlJhd0RhdGEsDQogCQkJICAgICBzZWN0 aW9uLT5NaXNjLlZpcnR1YWxTaXplKTsNCiAgICAgICBpZiAocnZhID49IHNlY3Rpb24tPlZpcnR1 YWxBZGRyZXNzDQogCSAgJiYgcnZhIDwgc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MgKyByZWFsX3Np emUpDQpAQCAtMjU5LDcgKzI1OSw3IEBADQogLyogUmV0dXJuIHBvaW50ZXIgdG8gc2VjdGlvbiBo ZWFkZXIgZm9yIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2l2ZW4NCiAgICBvZmZzZXQgaW4gaXRz IHJhdyBkYXRhIGFyZWEuICovDQogSU1BR0VfU0VDVElPTl9IRUFERVIgKg0KLW9mZnNldF90b19z ZWN0aW9uIChEV09SRCBvZmZzZXQsIElNQUdFX05UX0hFQURFUlMgKiBudF9oZWFkZXIpDQorb2Zm c2V0X3RvX3NlY3Rpb24gKERXT1JEX1BUUiBvZmZzZXQsIElNQUdFX05UX0hFQURFUlMgKiBudF9o ZWFkZXIpDQogew0KICAgUElNQUdFX1NFQ1RJT05fSEVBREVSIHNlY3Rpb247DQogICBpbnQgaTsN CkBAIC0yNzksOCArMjc5LDggQEANCiAvKiBSZXR1cm4gb2Zmc2V0IHRvIGFuIG9iamVjdCBpbiBk c3QsIGdpdmVuIG9mZnNldCBpbiBzcmMuICBXZSBhc3N1bWUNCiAgICB0aGVyZSBpcyBhdCBsZWFz dCBvbmUgc2VjdGlvbiBpbiBib3RoIHNyYyBhbmQgZHN0IGltYWdlcywgYW5kIHRoYXQNCiAgICB0 aGUgc29tZSBzZWN0aW9ucyBtYXkgaGF2ZSBiZWVuIGFkZGVkIHRvIGRzdCAoYWZ0ZXIgc2VjdGlv bnMgaW4gc3JjKS4gICovDQotRFdPUkQNCi1yZWxvY2F0ZV9vZmZzZXQgKERXT1JEIG9mZnNldCwN CitEV09SRF9QVFINCityZWxvY2F0ZV9vZmZzZXQgKERXT1JEX1BUUiBvZmZzZXQsDQogCQkgSU1B R0VfTlRfSEVBREVSUyAqIHNyY19udF9oZWFkZXIsDQogCQkgSU1BR0VfTlRfSEVBREVSUyAqIGRz dF9udF9oZWFkZXIpDQogew0KQEAgLTMxNCwxNiArMzE0LDE2IEBADQogfQ0KIA0KICNkZWZpbmUg T0ZGU0VUX1RPX1JWQShvZmZzZXQsIHNlY3Rpb24pIFwNCi0JICAoc2VjdGlvbi0+VmlydHVhbEFk ZHJlc3MgKyAoKERXT1JEKShvZmZzZXQpIC0gc2VjdGlvbi0+UG9pbnRlclRvUmF3RGF0YSkpDQor CSAgKHNlY3Rpb24tPlZpcnR1YWxBZGRyZXNzICsgKChEV09SRF9QVFIpKG9mZnNldCkgLSBzZWN0 aW9uLT5Qb2ludGVyVG9SYXdEYXRhKSkNCiANCiAjZGVmaW5lIFJWQV9UT19PRkZTRVQocnZhLCBz ZWN0aW9uKSBcDQotCSAgKHNlY3Rpb24tPlBvaW50ZXJUb1Jhd0RhdGEgKyAoKERXT1JEKShydmEp IC0gc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MpKQ0KKwkgIChzZWN0aW9uLT5Qb2ludGVyVG9SYXdE YXRhICsgKChEV09SRF9QVFIpKHJ2YSkgLSBzZWN0aW9uLT5WaXJ0dWFsQWRkcmVzcykpDQogDQog I2RlZmluZSBSVkFfVE9fU0VDVElPTl9PRkZTRVQocnZhLCBzZWN0aW9uKSBcDQotCSAgKChEV09S RCkocnZhKSAtIHNlY3Rpb24tPlZpcnR1YWxBZGRyZXNzKQ0KKwkgICgoRFdPUkRfUFRSKShydmEp IC0gc2VjdGlvbi0+VmlydHVhbEFkZHJlc3MpDQogDQogLyogQ29udmVydCBhZGRyZXNzIGluIGV4 ZWN1dGluZyBpbWFnZSB0byBSVkEuICAqLw0KLSNkZWZpbmUgUFRSX1RPX1JWQShwdHIpICgoRFdP UkQpKHB0cikgLSAoRFdPUkQpIEdldE1vZHVsZUhhbmRsZSAoTlVMTCkpDQorI2RlZmluZSBQVFJf VE9fUlZBKHB0cikgKChEV09SRF9QVFIpKHB0cikgLSAoRFdPUkRfUFRSKSBHZXRNb2R1bGVIYW5k bGUgKE5VTEwpKQ0KIA0KICNkZWZpbmUgUlZBX1RPX1BUUih2YXIsc2VjdGlvbixmaWxlZGF0YSkg XA0KIAkgICgodm9pZCAqKShSVkFfVE9fT0ZGU0VUICh2YXIsc2VjdGlvbikgKyAoZmlsZWRhdGEp LmZpbGVfYmFzZSkpDQpAQCAtMzMyLDcgKzMzMiw3IEBADQogICAgICAgICAgICgodW5zaWduZWQg Y2hhciAqKShwdHIpIC0gKHBmaWxlX2RhdGEpLT5maWxlX2Jhc2UpDQogDQogI2RlZmluZSBPRkZT RVRfVE9fUFRSKG9mZnNldCwgcGZpbGVfZGF0YSkgXA0KLSAgICAgICAgICAoKHBmaWxlX2RhdGEp LT5maWxlX2Jhc2UgKyAoRFdPUkQpKG9mZnNldCkpDQorICAgICAgICAgICgocGZpbGVfZGF0YSkt PmZpbGVfYmFzZSArIChEV09SRF9QVFIpKG9mZnNldCkpDQogDQogDQogLyogRmxpcCB0aHJvdWdo IHRoZSBleGVjdXRhYmxlIGFuZCBjYWNoZSB0aGUgaW5mbyBuZWNlc3NhcnkgZm9yIGR1bXBpbmcu ICAqLw0KQEAgLTM0OSw3ICszNDksNyBAQA0KICAgICAgIHByaW50ZiAoIlVua25vd24gRVhFIGhl YWRlciBpbiAlcy4uLmJhaWxpbmcuXG4iLCBwX2luZmlsZS0+bmFtZSk7DQogICAgICAgZXhpdCAo MSk7DQogICAgIH0NCi0gIG50X2hlYWRlciA9IChQSU1BR0VfTlRfSEVBREVSUykgKCgodW5zaWdu ZWQgbG9uZykgZG9zX2hlYWRlcikgKw0KKyAgbnRfaGVhZGVyID0gKFBJTUFHRV9OVF9IRUFERVJT KSAoKChEV09SRF9QVFIpIGRvc19oZWFkZXIpICsNCiAJCQkJICAgZG9zX2hlYWRlci0+ZV9sZmFu ZXcpOw0KICAgaWYgKG50X2hlYWRlciA9PSBOVUxMKQ0KICAgICB7DQpAQCAtNDg4LDcgKzQ4OCw3 IEBADQogICBQSU1BR0VfTlRfSEVBREVSUyBkc3RfbnRfaGVhZGVyOw0KICAgUElNQUdFX1NFQ1RJ T05fSEVBREVSIHNlY3Rpb247DQogICBQSU1BR0VfU0VDVElPTl9IRUFERVIgZHN0X3NlY3Rpb247 DQotICBEV09SRCBvZmZzZXQ7DQorICBEV09SRF9QVFIgb2Zmc2V0Ow0KICAgaW50IGk7DQogICBp bnQgYmVfdmVyYm9zZSA9IEdldEVudmlyb25tZW50VmFyaWFibGUgKCJERUJVR19EVU1QIiwgTlVM TCwgMCkgPiAwOw0KIA0KQEAgLTU0MSwxNyArNTQxLDE3IEBADQogICAgICBOb3RlIHRoYXQgZHN0 IGlzIHVwZGF0ZWQgaW1wbGljaXRseSBieSBlYWNoIENPUFlfQ0hVTksuICAqLw0KIA0KICAgZG9z X2hlYWRlciA9IChQSU1BR0VfRE9TX0hFQURFUikgcF9pbmZpbGUtPmZpbGVfYmFzZTsNCi0gIG50 X2hlYWRlciA9IChQSU1BR0VfTlRfSEVBREVSUykgKCgodW5zaWduZWQgbG9uZykgZG9zX2hlYWRl cikgKw0KKyAgbnRfaGVhZGVyID0gKFBJTUFHRV9OVF9IRUFERVJTKSAoKChEV09SRF9QVFIpIGRv c19oZWFkZXIpICsNCiAJCQkJICAgZG9zX2hlYWRlci0+ZV9sZmFuZXcpOw0KICAgc2VjdGlvbiA9 IElNQUdFX0ZJUlNUX1NFQ1RJT04gKG50X2hlYWRlcik7DQogDQogICBkc3QgPSAodW5zaWduZWQg Y2hhciAqKSBwX291dGZpbGUtPmZpbGVfYmFzZTsNCiANCiAgIENPUFlfQ0hVTksgKCJDb3B5aW5n IERPUyBoZWFkZXIuLi4iLCBkb3NfaGVhZGVyLA0KLQkgICAgICAoRFdPUkQpIG50X2hlYWRlciAt IChEV09SRCkgZG9zX2hlYWRlciwgYmVfdmVyYm9zZSk7DQorCSAgICAgIChEV09SRF9QVFIpIG50 X2hlYWRlciAtIChEV09SRF9QVFIpIGRvc19oZWFkZXIsIGJlX3ZlcmJvc2UpOw0KICAgZHN0X250 X2hlYWRlciA9IChQSU1BR0VfTlRfSEVBREVSUykgZHN0Ow0KICAgQ09QWV9DSFVOSyAoIkNvcHlp bmcgTlQgaGVhZGVyLi4uIiwgbnRfaGVhZGVyLA0KLQkgICAgICAoRFdPUkQpIHNlY3Rpb24gLSAo RFdPUkQpIG50X2hlYWRlciwgYmVfdmVyYm9zZSk7DQorCSAgICAgIChEV09SRF9QVFIpIHNlY3Rp b24gLSAoRFdPUkRfUFRSKSBudF9oZWFkZXIsIGJlX3ZlcmJvc2UpOw0KICAgZHN0X3NlY3Rpb24g PSAoUElNQUdFX1NFQ1RJT05fSEVBREVSKSBkc3Q7DQogICBDT1BZX0NIVU5LICgiQ29weWluZyBz ZWN0aW9uIHRhYmxlLi4uIiwgc2VjdGlvbiwNCiAJICAgICAgbnRfaGVhZGVyLT5GaWxlSGVhZGVy Lk51bWJlck9mU2VjdGlvbnMgKiBzaXplb2YgKCpzZWN0aW9uKSwNCkBAIC02MjcsOCArNjI3LDgg QEANCiAJfQ0KICAgICAgIGlmIChzZWN0aW9uID09IGhlYXBfc2VjdGlvbikNCiAJew0KLQkgIERX T1JEIGhlYXBfc3RhcnQgPSAoRFdPUkQpIGdldF9oZWFwX3N0YXJ0ICgpOw0KLQkgIERXT1JEIGhl YXBfc2l6ZSA9IGdldF9jb21taXR0ZWRfaGVhcF9zaXplICgpOw0KKwkgIERXT1JEX1BUUiBoZWFw X3N0YXJ0ID0gKERXT1JEX1BUUikgZ2V0X2hlYXBfc3RhcnQgKCk7DQorCSAgRFdPUkRfUFRSIGhl YXBfc2l6ZSA9IGdldF9jb21taXR0ZWRfaGVhcF9zaXplICgpOw0KIA0KIAkgIC8qIER1bXAgdGhl IHVzZWQgcG9ydGlvbiBvZiB0aGUgcHJlZHVtcCBoZWFwLCBhZGp1c3RpbmcgdGhlDQogICAgICAg ICAgICAgIHNlY3Rpb24ncyBzaXplIHRvIHRoZSBhcHByb3ByaWF0ZSBzaXplLiAgKi8NCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy92bS1saW1pdC5jJw0KLS0tIHNyYy92bS1saW1pdC5jCTIwMTIt MDEtMTkgMDc6MjE6MjUgKzAwMDANCisrKyBzcmMvdm0tbGltaXQuYwkyMDEyLTAyLTA1IDIwOjA2 OjM0ICswMDAwDQpAQCAtMjAsNyArMjAsNyBAQA0KICNpbmNsdWRlIDxzZXRqbXAuaD4NCiAjaW5j bHVkZSAibGlzcC5oIg0KICNpbmNsdWRlICJtZW0tbGltaXRzLmgiDQotDQorI2luY2x1ZGUgIncz MmhlYXAuaCINCiAvKg0KICAgTGV2ZWwgbnVtYmVyIG9mIHdhcm5pbmdzIGFscmVhZHkgaXNzdWVk Lg0KICAgMCAtLSBubyB3YXJuaW5ncyBpc3N1ZWQuDQpAQCAtNDEsNyArNDEsNyBAQA0KIHN0YXRp YyBQT0lOVEVSIGRhdGFfc3BhY2Vfc3RhcnQ7DQogDQogLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHdy aXRhYmxlIG1lbW9yeSB3ZSBjYW4gZXhwZWN0IHRvIGJlIGFibGUgdG8gZ2V0LiAgKi8NCi1zdGF0 aWMgdW5zaWduZWQgbG9uZyBsaW1fZGF0YTsNCitzdGF0aWMgc2l6ZV90IGxpbV9kYXRhOw0KIAwN CiANCiAjaWYgZGVmaW5lZCAoSEFWRV9HRVRSTElNSVQpICYmIGRlZmluZWQgKFJMSU1JVF9BUykN CkBAIC03OSw3ICs3OSw3IEBADQogICAgIGxpbV9kYXRhID0gVUxJTUlUX0JSRUFLX1ZBTFVFOw0K ICNlbmRpZg0KIA0KLSAgbGltX2RhdGEgLT0gKGxvbmcpIGRhdGFfc3BhY2Vfc3RhcnQ7DQorICBs aW1fZGF0YSAtPSAoaW50cHRyX3QpIGRhdGFfc3BhY2Vfc3RhcnQ7DQogfQ0KIA0KICNlbHNlIC8q IG5vdCBVU0cgKi8NCkBAIC04OCw3ICs4OCw3IEBADQogc3RhdGljIHZvaWQNCiBnZXRfbGltX2Rh dGEgKHZvaWQpDQogew0KLSAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaGVhcF9zaXpl Ow0KKyAgZXh0ZXJuIHNpemVfdCByZXNlcnZlZF9oZWFwX3NpemU7DQogICBsaW1fZGF0YSA9IHJl c2VydmVkX2hlYXBfc2l6ZTsNCiB9DQogDQpAQCAtMTI3LDcgKzEyNyw3IEBADQogICAgIGxpbV9k YXRhID0gNTEyVSAqIDEwMjRVICogMTAyNFU7DQogfQ0KIA0KLXVuc2lnbmVkIGxvbmcNCitzaXpl X3QNCiByZXRfbGltX2RhdGEgKHZvaWQpDQogew0KICAgZ2V0X2xpbV9kYXRhICgpOw0KQEAgLTE2 NiwxMyArMTY2LDEzIEBADQogY2hlY2tfbWVtb3J5X2xpbWl0cyAodm9pZCkNCiB7DQogI2lmZGVm IFJFTF9BTExPQw0KLSAgZXh0ZXJuIFBPSU5URVIgKCpyZWFsX21vcmVjb3JlKSAobG9uZyk7DQor ICBleHRlcm4gUE9JTlRFUiAoKnJlYWxfbW9yZWNvcmUpIChfX21hbGxvY19wdHJkaWZmX3QpOw0K ICNlbmRpZg0KLSAgZXh0ZXJuIFBPSU5URVIgKCpfX21vcmVjb3JlKSAobG9uZyk7DQorICBleHRl cm4gUE9JTlRFUiAoKl9fbW9yZWNvcmUpIChfX21hbGxvY19wdHJkaWZmX3QpOw0KIA0KICAgcmVn aXN0ZXIgUE9JTlRFUiBjcDsNCi0gIHVuc2lnbmVkIGxvbmcgZml2ZV9wZXJjZW50Ow0KLSAgdW5z aWduZWQgbG9uZyBkYXRhX3NpemU7DQorICBzaXplX3QgZml2ZV9wZXJjZW50Ow0KKyAgc2l6ZV90 IGRhdGFfc2l6ZTsNCiAgIGVudW0gd2FybmxldmVsIG5ld193YXJubGV2ZWw7DQogDQogICBpZiAo bGltX2RhdGEgPT0gMCkNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzIuYycNCi0tLSBzcmMv dzMyLmMJMjAxMi0wMi0wNCAxMzo0ODozOCArMDAwMA0KKysrIHNyYy93MzIuYwkyMDEyLTAyLTI3 IDIzOjMzOjE4ICswMDAwDQpAQCAtMTksNiArMTksOSBAQA0KIC8qDQogICAgR2VvZmYgVm9lbGtl ciAodm9lbGtlckBjcy53YXNoaW5ndG9uLmVkdSkgICAgICAgICAgICAgICAgICAgICAgICAgNy0y OS05NA0KICovDQorDQorI2RlZmluZSBfQ1JUX0FMTE9DQVRJT05fREVGSU5FRA0KKw0KICNpbmNs dWRlIDxzdGRkZWYuaD4gLyogZm9yIG9mZnNldG9mICovDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0K ICNpbmNsdWRlIDxzdGRpby5oPg0KQEAgLTE3MDMsNyArMTcwNiw4IEBADQogICAgICAgLyogRklY TUU6IHNob3VsZCB1c2Ugc3Vic3RyaW5nIG9mIGdldF9lbWFjc19jb25maWd1cmF0aW9uICgpLg0K IAkgQnV0IEkgZG9uJ3QgdGhpbmsgdGhlIFdpbmRvd3MgYnVpbGQgc3VwcG9ydHMgYWxwaGEsIG1p cHMgZXRjDQogICAgICAgICAgYW55bW9yZSwgc28gaGF2ZSB0YWtlbiB0aGUgZWFzeSBvcHRpb24g Zm9yIG5vdy4gICovDQotICAgICAgZWxzZSBpZiAocCAmJiB4c3RyY2FzZWNtcCAocCwgIlxcaTM4 NiIpID09IDApDQorICAgICAgZWxzZSBpZiAocCAmJiAoeHN0cmNhc2VjbXAgKHAsICJcXGkzODYi KSA9PSAwDQorICAgICAgICAgICAgICAgICAgICAgfHwgeHN0cmNhc2VjbXAgKHAsICJcXEFNRDY0 IikgPT0gMCkpDQogCXsNCiAJICAqcCA9IDA7DQogCSAgcCA9IHN0cnJjaHIgKG1vZG5hbWUsICdc XCcpOw0KQEAgLTE4NjEsNyArMTg2NSwxMiBAQA0KICAgICBjYXNlIFBST0NFU1NPUl9JTlRFTF8z ODY6DQogICAgIGNhc2UgUFJPQ0VTU09SX0lOVEVMXzQ4NjoNCiAgICAgY2FzZSBQUk9DRVNTT1Jf SU5URUxfUEVOVElVTToNCisgICAgY2FzZSBQUk9DRVNTT1JfQU1EX1g4NjY0Og0KKyNpZmRlZiBf V0lONjQNCisgICAgICBhcmNoID0gImFtZDY0IjsNCisjZWxzZQ0KICAgICAgIGFyY2ggPSAiaTM4 NiI7DQorI2VuZGlmDQogICAgICAgYnJlYWs7DQogI2VuZGlmDQogDQpAQCAtMjQwMCw3ICsyNDA5 LDcgQEANCiAJcmV0dXJuIE5VTEw7DQogICAgIH0NCiANCi0gIGlmICghKGRpcnAgPSAoRElSICop IG1hbGxvYyAoc2l6ZW9mIChESVIpKSkpDQorICBpZiAoIShkaXJwID0gKERJUiAqKSB4bWFsbG9j IChzaXplb2YgKERJUikpKSkNCiAgICAgcmV0dXJuIE5VTEw7DQogDQogICBkaXJwLT5kZF9mZCA9 IDA7DQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMyLmgnDQotLS0gc3JjL3czMi5oCTIwMTIt MDEtMTkgMDc6MjE6MjUgKzAwMDANCisrKyBzcmMvdzMyLmgJMjAxMi0wMi0yNyAyMzozMzoxOCAr MDAwMA0KQEAgLTE1OSw1ICsxNTksOSBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkKiBidWYsIHNpemVfdCBzeik7DQogI2VuZGlmIC8qIEhBVkVfR05VVExT ICovDQogDQorZXh0ZXJuIHN0cnVjdCB0bSAqc3lzX2xvY2FsdGltZSAoY29uc3QgdGltZV90ICp0 KTsNCitleHRlcm4gY2hhciAqc3lzX3N0cmVycm9yKGludCBlcnJvcl9ubyk7DQorZXh0ZXJuIEZJ TEUgKnN5c19mb3BlbiAoY29uc3QgY2hhciAqIHBhdGgsIGNvbnN0IGNoYXIgKiBtb2RlKTsNCisN CiAjZW5kaWYgLyogRU1BQ1NfVzMyX0ggKi8NCiANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93 MzJmbnMuYycNCi0tLSBzcmMvdzMyZm5zLmMJMjAxMi0wMS0xOSAwNzoyMToyNSArMDAwMA0KKysr IHNyYy93MzJmbnMuYwkyMDEyLTAyLTI3IDIzOjMzOjE4ICswMDAwDQpAQCAtNzQsNyArNzQsNiBA QA0KIHZvaWQgZ2xvYmFsc19vZl93MzJmbnMgKHZvaWQpOw0KIA0KIGV4dGVybiB2b2lkIGZyZWVf ZnJhbWVfbWVudWJhciAoc3RydWN0IGZyYW1lICopOw0KLWV4dGVybiBkb3VibGUgYXRvZiAoY29u c3QgY2hhciAqKTsNCiBleHRlcm4gaW50IHczMl9jb25zb2xlX3RvZ2dsZV9sb2NrX2tleSAoaW50 LCBMaXNwX09iamVjdCk7DQogZXh0ZXJuIHZvaWQgdzMyX21lbnVfZGlzcGxheV9oZWxwIChIV05E LCBITUVOVSwgVUlOVCwgVUlOVCk7DQogZXh0ZXJuIHZvaWQgdzMyX2ZyZWVfbWVudV9zdHJpbmdz IChIV05EKTsNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJoZWFwLmMnDQotLS0gc3JjL3cz MmhlYXAuYwkyMDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwDQorKysgc3JjL3czMmhlYXAuYwkyMDEy LTAyLTI4IDE0OjAzOjAzICswMDAwDQpAQCAtMjcsNyArMjcsNyBAQA0KICNpbmNsdWRlICJ3MzJo ZWFwLmgiDQogI2luY2x1ZGUgImxpc3AuaCIgIC8qIGZvciBWQUxNQVNLICovDQogDQotI2RlZmlu ZSBSVkFfVE9fUFRSKHJ2YSkgKCh1bnNpZ25lZCBjaGFyICopKChEV09SRCkocnZhKSArIChEV09S RClHZXRNb2R1bGVIYW5kbGUgKE5VTEwpKSkNCisjZGVmaW5lIFJWQV9UT19QVFIocnZhKSAoKHVu c2lnbmVkIGNoYXIgKikoKERXT1JEX1BUUikocnZhKSArIChEV09SRF9QVFIpR2V0TW9kdWxlSGFu ZGxlIChOVUxMKSkpDQogDQogLyogVGhpcyBnaXZlcyB1cyB0aGUgcGFnZSBzaXplIGFuZCB0aGUg c2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiB1bml0IG9uIE5ULiAgKi8NCiBTWVNURU1fSU5GTyBzeXNp bmZvX2NhY2hlOw0KQEAgLTk4LDcgKzk4LDcgQEANCiB1bnNpZ25lZCBjaGFyICpkYXRhX3JlZ2lv bl9iYXNlID0gTlVMTDsNCiB1bnNpZ25lZCBjaGFyICpkYXRhX3JlZ2lvbl9lbmQgPSBOVUxMOw0K IHVuc2lnbmVkIGNoYXIgKnJlYWxfZGF0YV9yZWdpb25fZW5kID0gTlVMTDsNCi11bnNpZ25lZCBs b25nICByZXNlcnZlZF9oZWFwX3NpemUgPSAwOw0KK3NpemVfdCAgcmVzZXJ2ZWRfaGVhcF9zaXpl ID0gMDsNCiANCiAvKiBUaGUgc3RhcnQgb2YgdGhlIGRhdGEgc2VnbWVudC4gICovDQogdW5zaWdu ZWQgY2hhciAqDQpAQCAtMTIyLDE2ICsxMjIsMjAgQEANCiAgICAgIHRoZSBwcmVsb2FkIGhlYXAg c2VjdGlvbiB1cCB0byB0aGUgdXNhYmxlIGFkZHJlc3MgbGltaXQuICBTaW5jZSBHTlUNCiAgICAg IG1hbGxvYyBjYW4gaGFuZGxlIGdhcHMgaW4gdGhlIG1lbW9yeSBpdCBnZXRzIGZyb20gc2Jyaywg d2UgY2FuDQogICAgICBzaW1wbHkgc2V0IHRoZSBzYnJrIHBvaW50ZXIgdG8gdGhlIGJhc2Ugb2Yg dGhlIG5ldyBoZWFwIHJlZ2lvbi4gICovDQotICB1bnNpZ25lZCBsb25nIGJhc2UgPQ0KKyAgRFdP UkRfUFRSIGJhc2UgPQ0KICAgICBST1VORF9VUCAoKFJWQV9UT19QVFIgKHByZWxvYWRfaGVhcF9z ZWN0aW9uLT5WaXJ0dWFsQWRkcmVzcykNCiAJICAgICAgICsgcHJlbG9hZF9oZWFwX3NlY3Rpb24t Pk1pc2MuVmlydHVhbFNpemUpLA0KIAkgICAgICBnZXRfYWxsb2NhdGlvbl91bml0ICgpKTsNCi0g IHVuc2lnbmVkIGxvbmcgZW5kICA9IDEgPDwgVkFMQklUUzsgLyogMjU2TUIgKi8NCisgIERXT1JE X1BUUiBlbmQgID0gKCh1bnNpZ25lZCBfX2ludDY0KTEpIDw8IFZBTEJJVFM7IC8qIDI1Nk1CICov DQogICB2b2lkICpwdHIgPSBOVUxMOw0KIA0KICAgd2hpbGUgKCFwdHIgJiYgKGJhc2UgPCBlbmQp KQ0KICAgICB7DQorI2lmZGVmIF9XSU42NA0KKyAgICAgIHJlc2VydmVkX2hlYXBfc2l6ZSA9IG1p bihlbmQgLSBiYXNlLCAweDgwMDAwMDAwMGk2NCk7IC8qIExpbWl0IHRvIDMyR2IgKi8NCisjZWxz ZQ0KICAgICAgIHJlc2VydmVkX2hlYXBfc2l6ZSA9IGVuZCAtIGJhc2U7DQorI2VuZGlmDQogICAg ICAgcHRyID0gVmlydHVhbEFsbG9jICgodm9pZCAqKSBiYXNlLA0KIAkJCSAgZ2V0X3Jlc2VydmVk X2hlYXBfc2l6ZSAoKSwNCiAJCQkgIE1FTV9SRVNFUlZFLA0KQEAgLTE0NSw3ICsxNDksMTEgQEAN CiBzdGF0aWMgY2hhciAqDQogYWxsb2NhdGVfaGVhcCAodm9pZCkNCiB7DQotICB1bnNpZ25lZCBs b25nIHNpemUgPSAweDgwMDAwMDAwOyAvKiBzdGFydCBieSBhc2tpbmcgZm9yIDJHQiAqLw0KKyNp ZmRlZiBfV0lONjQNCisgIHNpemVfdCBzaXplID0gMHg4MDAwMDAwMDBpNjQ7IC8qIHN0YXJ0IGJ5 IGFza2luZyBmb3IgMzJHQiAqLw0KKyNlbHNlDQorICBzaXplX3Qgc2l6ZSA9IDB4ODAwMDAwMDA7 IC8qIHN0YXJ0IGJ5IGFza2luZyBmb3IgMkdCICovDQorI2VuZGlmDQogICB2b2lkICpwdHIgPSBO VUxMOw0KIA0KICAgd2hpbGUgKCFwdHIgJiYgc2l6ZSA+IDB4MDAxMDAwMDApDQpAQCAtMTY3LDE3 ICsxNzUsMTcgQEANCiAgICBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgX3N0YXJ0XyAobm90IGVuZCkg b2YgdGhlIG5ldyBibG9jayBpbiBjYXNlIG9mDQogICAgc3VjY2VzcywgYW5kIHplcm8gKG5vdCAt MSkgaW4gY2FzZSBvZiBmYWlsdXJlLiAgKi8NCiB2b2lkICoNCi1zYnJrICh1bnNpZ25lZCBsb25n IGluY3JlbWVudCkNCitzYnJrIChzaXplX3QgaW5jcmVtZW50KQ0KIHsNCiAgIHZvaWQgKnJlc3Vs dDsNCi0gIGxvbmcgc2l6ZSA9IChsb25nKSBpbmNyZW1lbnQ7DQorICBwdHJkaWZmX3Qgc2l6ZSA9 IChwdHJkaWZmX3QpaW5jcmVtZW50Ow0KIA0KICAgcmVzdWx0ID0gZGF0YV9yZWdpb25fZW5kOw0K IA0KICAgLyogSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgc2hyaW5rIHRoZSBoZWFwIGJ5IGRlY29tbWl0 dGluZyBwYWdlcy4gICovDQogICBpZiAoc2l6ZSA8IDApDQogICAgIHsNCi0gICAgICBpbnQgbmV3 X3NpemU7DQorICAgICAgcHRyZGlmZl90IG5ld19zaXplOw0KICAgICAgIHVuc2lnbmVkIGNoYXIg Km5ld19kYXRhX3JlZ2lvbl9lbmQ7DQogDQogICAgICAgc2l6ZSA9IC1zaXplOw0KQEAgLTE5MCw3 ICsxOTgsNyBAQA0KIAkgcGFydGlhbCBkZWFsbG9jYXRpb24gW2NnYV0uICAqLw0KICAgICAgIG5l d19kYXRhX3JlZ2lvbl9lbmQgPSAoZGF0YV9yZWdpb25fZW5kIC0gc2l6ZSk7DQogICAgICAgbmV3 X2RhdGFfcmVnaW9uX2VuZCA9ICh1bnNpZ25lZCBjaGFyICopDQotCSgobG9uZykgKG5ld19kYXRh X3JlZ2lvbl9lbmQgKyBzeXNwYWdlX21hc2spICYgfnN5c3BhZ2VfbWFzayk7DQorCSgoRFdPUkRf UFRSKSAobmV3X2RhdGFfcmVnaW9uX2VuZCArIHN5c3BhZ2VfbWFzaykgJiB+c3lzcGFnZV9tYXNr KTsNCiAgICAgICBuZXdfc2l6ZSA9IHJlYWxfZGF0YV9yZWdpb25fZW5kIC0gbmV3X2RhdGFfcmVn aW9uX2VuZDsNCiAgICAgICByZWFsX2RhdGFfcmVnaW9uX2VuZCA9IG5ld19kYXRhX3JlZ2lvbl9l bmQ7DQogICAgICAgaWYgKG5ld19zaXplID4gMCkNCkBAIC0yMjEsNyArMjI5LDcgQEANCiAgICAg ICAvKiBXZSByZWFsbHkgb25seSBjb21taXQgZnVsbCBwYWdlcywgc28gcmVjb3JkIHdoZXJlDQog CSB0aGUgcmVhbCBlbmQgb2YgY29tbWl0dGVkIG1lbW9yeSBpcyBbY2dhXS4gICovDQogICAgICAg cmVhbF9kYXRhX3JlZ2lvbl9lbmQgPSAodW5zaWduZWQgY2hhciAqKQ0KLQkgICgobG9uZykgKGRh dGFfcmVnaW9uX2VuZCArIHN5c3BhZ2VfbWFzaykgJiB+c3lzcGFnZV9tYXNrKTsNCisJICAoKERX T1JEX1BUUikgKGRhdGFfcmVnaW9uX2VuZCArIHN5c3BhZ2VfbWFzaykgJiB+c3lzcGFnZV9tYXNr KTsNCiAgICAgfQ0KIA0KICAgcmV0dXJuIHJlc3VsdDsNCkBAIC0yNDYsNyArMjU0LDcgQEANCiAg IFBJTUFHRV9OVF9IRUFERVJTIG50X2hlYWRlcjsNCiANCiAgIGRvc19oZWFkZXIgPSAoUElNQUdF X0RPU19IRUFERVIpIFJWQV9UT19QVFIgKDApOw0KLSAgbnRfaGVhZGVyID0gKFBJTUFHRV9OVF9I RUFERVJTKSAoKCh1bnNpZ25lZCBsb25nKSBkb3NfaGVhZGVyKSArDQorICBudF9oZWFkZXIgPSAo UElNQUdFX05UX0hFQURFUlMpICgoKERXT1JEX1BUUikgZG9zX2hlYWRlcikgKw0KIAkJCQkgICBk b3NfaGVhZGVyLT5lX2xmYW5ldyk7DQogICBwcmVsb2FkX2hlYXBfc2VjdGlvbiA9IGZpbmRfc2Vj dGlvbiAoIkVNSEVBUCIsIG50X2hlYWRlcik7DQogDQpAQCAtMjYyLDcgKzI3MCw3IEBADQogI2lm ICFkZWZpbmVkIChVU0VfTElTUF9VTklPTl9UWVBFKSAmJiAhZGVmaW5lZCAoVVNFX0xTQl9UQUcp DQogICAgICAgLyogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3NlcyBkb24ndCB1c2UgdGhlIHVwcGVy IHRhZyBiaXRzIHNpbmNlDQogCSB0aGUgTGlzcCB0eXBlIGdvZXMgdGhlcmUuICAqLw0KLSAgICAg IGlmICgoKHVuc2lnbmVkIGxvbmcpIGRhdGFfcmVnaW9uX2Jhc2UgJiB+VkFMTUFTSykgIT0gMCkN CisgICAgICBpZiAoKChEV09SRF9QVFIpIGRhdGFfcmVnaW9uX2Jhc2UgJiB+VkFMTUFTSykgIT0g MCkNCiAJew0KIAkgIHByaW50ZiAoIkVycm9yOiBUaGUgaGVhcCB3YXMgYWxsb2NhdGVkIGluIHVw cGVyIG1lbW9yeS5cbiIpOw0KIAkgIGV4aXQgKDEpOw0KQEAgLTI4NSwxMyArMjkzLDEzIEBADQog DQogLyogUm91bmQgdGhlIGhlYXAgdXAgdG8gdGhlIGdpdmVuIGFsaWdubWVudC4gICovDQogdm9p ZA0KLXJvdW5kX2hlYXAgKHVuc2lnbmVkIGxvbmcgYWxpZ24pDQorcm91bmRfaGVhcCAoRFdPUkRf UFRSIGFsaWduKQ0KIHsNCi0gIHVuc2lnbmVkIGxvbmcgbmVlZHNfdG9fYmU7DQotICB1bnNpZ25l ZCBsb25nIG5lZWRfdG9fYWxsb2M7DQorICBEV09SRF9QVFIgbmVlZHNfdG9fYmU7DQorICBEV09S RF9QVFIgbmVlZF90b19hbGxvYzsNCiANCi0gIG5lZWRzX3RvX2JlID0gKHVuc2lnbmVkIGxvbmcp IFJPVU5EX1VQIChnZXRfaGVhcF9lbmQgKCksIGFsaWduKTsNCi0gIG5lZWRfdG9fYWxsb2MgPSBu ZWVkc190b19iZSAtICh1bnNpZ25lZCBsb25nKSBnZXRfaGVhcF9lbmQgKCk7DQorICBuZWVkc190 b19iZSA9IChEV09SRF9QVFIpIFJPVU5EX1VQIChnZXRfaGVhcF9lbmQgKCksIGFsaWduKTsNCisg IG5lZWRfdG9fYWxsb2MgPSBuZWVkc190b19iZSAtIChEV09SRF9QVFIpIGdldF9oZWFwX2VuZCAo KTsNCiANCiAgIGlmIChuZWVkX3RvX2FsbG9jKQ0KICAgICBzYnJrIChuZWVkX3RvX2FsbG9jKTsN Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJoZWFwLmgnDQotLS0gc3JjL3czMmhlYXAuaAky MDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwDQorKysgc3JjL3czMmhlYXAuaAkyMDEyLTAyLTA1IDIw OjA2OjM0ICswMDAwDQpAQCAtMjQsOCArMjQsOCBAQA0KIA0KICNpbmNsdWRlIDx3aW5kb3dzLmg+ DQogDQotI2RlZmluZSBST1VORF9VUChwLCBhbGlnbikgICAoKChEV09SRCkocCkgKyAoYWxpZ24p LTEpICYgfigoYWxpZ24pLTEpKQ0KLSNkZWZpbmUgUk9VTkRfRE9XTihwLCBhbGlnbikgKChEV09S RCkocCkgJiB+KChhbGlnbiktMSkpDQorI2RlZmluZSBST1VORF9VUChwLCBhbGlnbikgICAoKChE V09SRF9QVFIpKHApICsgKGFsaWduKS0xKSAmIH4oKGFsaWduKS0xKSkNCisjZGVmaW5lIFJPVU5E X0RPV04ocCwgYWxpZ24pICgoRFdPUkRfUFRSKShwKSAmIH4oKGFsaWduKS0xKSkNCiANCiAvKg0K ICAqIEhlYXAgcmVsYXRlZCBzdHVmZi4NCkBAIC00Miw3ICs0Miw3IEBADQogDQogZXh0ZXJuIHVu c2lnbmVkIGNoYXIgKmdldF9kYXRhX3N0YXJ0ICh2b2lkKTsNCiBleHRlcm4gdW5zaWduZWQgY2hh ciAqZ2V0X2RhdGFfZW5kICh2b2lkKTsNCi1leHRlcm4gdW5zaWduZWQgbG9uZyAgcmVzZXJ2ZWRf aGVhcF9zaXplOw0KK2V4dGVybiBzaXplX3QgICAgICAgICByZXNlcnZlZF9oZWFwX3NpemU7DQog ZXh0ZXJuIFNZU1RFTV9JTkZPICAgIHN5c2luZm9fY2FjaGU7DQogZXh0ZXJuIE9TVkVSU0lPTklO Rk8gIG9zaW5mb19jYWNoZTsNCiBleHRlcm4gQk9PTCAgIAkgICAgICB1c2luZ19keW5hbWljX2hl YXA7DQpAQCAtNTgsMTMgKzU4LDEzIEBADQogZXh0ZXJuIGludCBvc19zdWJ0eXBlOw0KIA0KIC8q IEVtdWxhdGlvbiBvZiBVbml4IHNicmsoKS4gICovDQotZXh0ZXJuIHZvaWQgKnNicmsgKHVuc2ln bmVkIGxvbmcgc2l6ZSk7DQorZXh0ZXJuIHZvaWQgKnNicmsgKHNpemVfdCBzaXplKTsNCiANCiAv KiBJbml0aWFsaXplIGhlYXAgc3RydWN0dXJlcyBmb3Igc2JyayBvbiBzdGFydHVwLiAgKi8NCiBl eHRlcm4gdm9pZCBpbml0X2hlYXAgKHZvaWQpOw0KIA0KIC8qIFJvdW5kIHRoZSBoZWFwIHRvIHRo aXMgc2l6ZS4gICovDQotZXh0ZXJuIHZvaWQgcm91bmRfaGVhcCAodW5zaWduZWQgbG9uZyBzaXpl KTsNCitleHRlcm4gdm9pZCByb3VuZF9oZWFwIChzaXplX3Qgc2l6ZSk7DQogDQogLyogQ2FjaGUg c3lzdGVtIGluZm8sIGUuZy4sIHRoZSBOVCBwYWdlIHNpemUuICAqLw0KIGV4dGVybiB2b2lkIGNh Y2hlX3N5c3RlbV9pbmZvICh2b2lkKTsNCkBAIC04OSw3ICs4OSw3IEBADQogDQogLyogUmV0dXJu IHBvaW50ZXIgdG8gc2VjdGlvbiBoZWFkZXIgZm9yIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2l2 ZW4NCiAgICByZWxhdGl2ZSB2aXJ0dWFsIGFkZHJlc3MuICovDQotSU1BR0VfU0VDVElPTl9IRUFE RVIgKiBydmFfdG9fc2VjdGlvbiAoRFdPUkQgcnZhLCBJTUFHRV9OVF9IRUFERVJTICogbnRfaGVh ZGVyKTsNCitJTUFHRV9TRUNUSU9OX0hFQURFUiAqIHJ2YV90b19zZWN0aW9uIChEV09SRF9QVFIg cnZhLCBJTUFHRV9OVF9IRUFERVJTICogbnRfaGVhZGVyKTsNCiANCiAjZW5kaWYgLyogTlRIRUFQ X0hfICovDQogDQoNCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMycHJvYy5jJw0KLS0tIHNyYy93 MzJwcm9jLmMJMjAxMi0wMS0xOSAwNzoyMToyNSArMDAwMA0KKysrIHNyYy93MzJwcm9jLmMJMjAx Mi0wMi0yNyAyMzozMzoxNSArMDAwMA0KQEAgLTIxLDYgKzIxLDggQEANCiAgICAgIEFkYXB0ZWQg ZnJvbSBhbGFybS5jIGJ5IFRpbSBGbGVlaGFydA0KICovDQogDQorI2RlZmluZSBfQ1JUX0FMTE9D QVRJT05fREVGSU5FRA0KKw0KICNpbmNsdWRlIDxzdGRpby5oPg0KICNpbmNsdWRlIDxzdGRsaWIu aD4NCiAjaW5jbHVkZSA8ZXJybm8uaD4NCkBAIC02Myw3ICs2NSw3IEBADQogDQogI2RlZmluZSBS VkFfVE9fUFRSKHZhcixzZWN0aW9uLGZpbGVkYXRhKSBcDQogICAoKHZvaWQgKikoKHNlY3Rpb24p LT5Qb2ludGVyVG9SYXdEYXRhCQkJCQlcDQotCSAgICArICgoRFdPUkQpKHZhcikgLSAoc2VjdGlv biktPlZpcnR1YWxBZGRyZXNzKQkJXA0KKwkgICAgKyAoKERXT1JEX1BUUikodmFyKSAtIChzZWN0 aW9uKS0+VmlydHVhbEFkZHJlc3MpCQlcDQogCSAgICArIChmaWxlZGF0YSkuZmlsZV9iYXNlKSkN CiANCiBMaXNwX09iamVjdCBRaGlnaCwgUWxvdzsNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94 ZmFjZXMuYycNCi0tLSBzcmMveGZhY2VzLmMJMjAxMi0wMi0wNiAwODoxOTowOSArMDAwMA0KKysr IHNyYy94ZmFjZXMuYwkyMDEyLTAyLTI3IDIzOjMzOjE4ICswMDAwDQpAQCAtMjI2LDYgKzIyNiw3 IEBADQogI2VuZGlmDQogDQogI2lmZGVmIFdJTkRPV1NOVA0KKyNpbmNsdWRlICJ3MzIuaCINCiAj aW5jbHVkZSAidzMydGVybS5oIg0KICNpbmNsdWRlICJmb250c2V0LmgiDQogLyogUmVkZWZpbmUg WCBzcGVjaWZpY3MgdG8gVzMyIGVxdWl2YWxlbnRzIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlDQoN Cg== --00151740295c6ddbd504ba0cf6f7--