Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fhjCg-00028U-Fm for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Jul 2018 22:21:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fhjCb-0007V7-RR for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Jul 2018 22:21:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fhjCb-0007V0-FR for pgsql-hackers@lists.postgresql.org; Mon, 23 Jul 2018 22:21:13 +0000 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1fhjCR-00005R-5E for pgsql-hackers@lists.postgresql.org; Mon, 23 Jul 2018 22:21:12 +0000 Received: by mail-pg1-x544.google.com with SMTP id y5-v6so1360780pgv.1 for ; Mon, 23 Jul 2018 15:21:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:mime-version:to:cc:from:subject:date:importance :in-reply-to:references; bh=IfQTuLoh3x4gHRIGGqHvqZny0m8pQgnxdsGhALyEq4c=; b=F2NFFV0C5af6dJGHOqAMA6Dxd0kbSyp0w5Rl9dbzGip1C7lGsxG5qmg8K1ulkKve3F oNIvTzBhJr6GkSjV9Rr1u3ulRmCg9kFpZ/xzHm4tj9bh/d3m7dM/DYkMmhSb5O9fxNA/ nUqSgs1b9EP9oOuFetQo5E7efKoExJkch8jEXJm8yHCteAXd36rOddoqot6CErtB52so fcztNi3fgQyUnJ4axwB90DwO6smmok/z8W1hDAOfI7CEd4iORrkCDt4NQ6OgNH28Q0QK gxTHGkPt3tFIVP6i72AS7dU2U7jr2TLqvGVGbtjZrY88iGgqeYeQ7cztwxoqphc6LyKA mY+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:mime-version:to:cc:from:subject:date :importance:in-reply-to:references; bh=IfQTuLoh3x4gHRIGGqHvqZny0m8pQgnxdsGhALyEq4c=; b=eZEJPYyJ9+T9aLPSDuFMZDw4DE21BBtGjkitn1dAbvmUmwGWUmB6Hw/fNiTXFKKtLz 5Cz3qSbWEWPIQ/xbOphG0IYYdzTRCw217GxiByusSZaQB3PCj8cU3xREgPwmuJecYUae +VDDGdhiG0wNftKaHyT2FVKO1sfzv/ghgS/DftzsbeDXRFdV3jieOci0v4orf45i0PtY sFVCtYhO19yMgA/ptOzhJl3tISHiodrwDcV0wrTtrfMFTtqQX0bb/jJboV8evxfXlNHh wggKyOh+OCTxM/vWDBP3ZvTbfKQbEs0rIRmzNKH7eccUOHGwbHjPDCq5zdANPEkC58Vg tfVw== X-Gm-Message-State: AOUpUlF5Rw+JWcOXNerTaX4CK+29lrXOW2UybY1fSqdy/O/ugfhdUSe2 jZ3YqzfaUCfbPIIS5KIdD4M= X-Google-Smtp-Source: AAOMgpcvtlh0EZbfe2JTlQluPSWj+iQNCHFGQ0Ce4trhF1j0ATHGpOXUOReFZtxq25YakElpIYfmtA== X-Received: by 2002:a62:4add:: with SMTP id c90-v6mr15082220pfj.23.1532384460823; Mon, 23 Jul 2018 15:21:00 -0700 (PDT) Received: from ?IPv6:::ffff:207.23.180.247? (d207-023-180-247.wireless.sfu.ca. [207.23.180.247]) by smtp.gmail.com with ESMTPSA id h4-v6sm10628614pgp.13.2018.07.23.15.20.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Jul 2018 15:21:00 -0700 (PDT) Message-ID: <5b5654cc.1c69fb81.5ea44.d698@mx.google.com> MIME-Version: 1.0 To: Tomas Vondra Cc: Andrey Borodin , Peter Geoghegan , "alvherre@2ndquadrant.com" , PostgreSQL Hackers From: Kefan Yang Subject: RE: GSOC 2018 Project - A New Sorting Routine Date: Mon, 23 Jul 2018 15:21:01 -0700 Importance: normal X-Priority: 3 In-Reply-To: <58417882-04e3-b23e-b53e-7d0720558335@2ndquadrant.com> References: <57ae7691-6dc8-d6d0-361a-a7269e656273@2ndquadrant.com> <00147235-69d3-d4f0-36c1-198d630af7ad@2ndquadrant.com> <1C5B17F1-D37F-4730-A2E4-EB7288C6DC09@yandex-team.ru> <78b9c822-e127-5250-a01c-4c51a50c82bd@2ndquadrant.com> <5b4fad82.1c69fb81.7a6f6.d32b@mx.google.com> <58417882-04e3-b23e-b53e-7d0720558335@2ndquadrant.com> Content-Type: multipart/mixed; boundary="_BE78F6CF-EC08-4DA1-B0B3-321D51FAF3D2_" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --_BE78F6CF-EC08-4DA1-B0B3-321D51FAF3D2_ Content-Type: multipart/alternative; boundary="_48BBF86A-5354-4318-8DE6-DFD70FECD115_" --_48BBF86A-5354-4318-8DE6-DFD70FECD115_ Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hi Tomas! I did a few tests on my own Linux machine, but the problem is that my resou= rces on AWS(CPU, RAM and even Disk space) are very limited. I considered es= tablishing virtual machine on my own PC but the performance is even worse. My original patch has two main optimizations: (1) switch to heap sort when = depth limit exceeded (2) check whether the array is presorted only once at = the beginning. Now I want to test these optimizations separately. On AWS EC= 2 instance, regressions on CREATE INDEX cases seems to be less significant = if we use (1) only, but I can only test up to 100000 records and 512MB memo= ry using your scripts. So would you mind re-running the tests using the two patches I provided in = the attachment? That will be very helpful Regards, Kefan From: Tomas Vondra Sent: July 18, 2018 2:26 PM To: Kefan Yang Cc: Andrey Borodin; Peter Geoghegan; PostgreSQL Hackers Subject: Re: GSOC 2018 Project - A New Sorting Routine I don't have any script for that - load the files into a spreadsheet, create pivot tables and you're done. regards On 07/18/2018 11:13 PM, Kefan Yang wrote: > Hey Tomas! >=20 > =C2=A0 >=20 > I am trying to reproduce the results on my machine. Could you please > share the script to generate .ods files? >=20 > =C2=A0 >=20 > Regards, >=20 > Kefan >=20 > =C2=A0 >=20 > *From: *Tomas Vondra > *Sent: *July 18, 2018 2:05 AM > *To: *Andrey Borodin > *Cc: *Peter Geoghegan ; Kefan Yang > ; PostgreSQL Hackers > > *Subject: *Re: GSOC 2018 Project - A New Sorting Routine >=20 > =C2=A0 >=20 > =C2=A0 >=20 > =C2=A0 >=20 > On 07/18/2018 07:06 AM, Andrey Borodin wrote: >=20 >> Hi, Tomas! >=20 >> >=20 >>> 15 =D0=B8=D1=8E=D0=BB=D1=8F 2018 =D0=B3., =D0=B2 1:20, Tomas Vondra =20 >>> > =D0=BD=D0=B0=D0=BF=D0=B8=D1=81= =D0=B0=D0=BB(=D0=B0): >=20 >>>=C2=A0 >=20 >>> So I doubt it's this, but I've tweaked the scripts to also set this GUC >=20 >>> and restarted the tests on both machines. Let's see what that does. >=20 >> >=20 >> Do you observe any different results? >=20 >> >=20 > =C2=A0 >=20 > It did change the CREATE INDEX results, depending on the scale. The full >=20 > data is available at [1] and [2], attached is a spreadsheet summary from >=20 > the Xeon box. >=20 > =C2=A0 >=20 > For the largest scale (1M rows) the regressions for CREATE INDEX queries >=20 > mostly disappeared. For 10k rows it still affects CREATE INDEX with a >=20 > text column, and the 100k case behaves just like before (so significant >=20 > regressions for CREATE INDEX). >=20 > =C2=A0 >=20 > I don't have time to investigate this further at the moment, but I'm >=20 > still of the opinion that there's little to gain by replacing our >=20 > current sort algorithm with this. >=20 > =C2=A0 >=20 > =C2=A0 >=20 > [1] https://bitbucket.org/tvondra/sort-intro-sort-xeon/src/master/ >=20 > [2] https://bitbucket.org/tvondra/sort-intro-sort-i5/src/master/ >=20 > =C2=A0 >=20 > regards >=20 > =C2=A0 >=20 > --=20 >=20 > Tomas Vondra=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 http://www.2ndQuadrant.com >=20 > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services >=20 > =C2=A0 >=20 --=20 Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --_48BBF86A-5354-4318-8DE6-DFD70FECD115_ Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="utf-8"

Hi Tomas!

 

I did a few tests on my own Linux m= achine, but the problem is that my resources on AWS(CPU, RAM and even Disk = space) are very limited. I considered establishing virtual machine on my ow= n PC but the performance is even worse.

 =

My original patch has two main optimizations= : (1) switch to heap sort when depth limit exceeded (2) check whether the a= rray is presorted only once at the beginning. Now I want to test these opti= mizations separately. On AWS EC2 instance, regressions on CREATE INDEX case= s seems to be less significant if we use (1) only, but I can only test up t= o 100000 records and 512MB memory using your scripts.

 

So would you mind re-running t= he tests using the two patches I provided in the attachment? That will be v= ery helpful

 

Regards,

Kefan

&nbs= p;

From: Tomas Vondra
Sent: July 18, 2018 2:26 PM
To: Kefan Yang
Cc: <= /b>Andrey Borodin; Peter Geoghegan; PostgreSQL Hackers
Subject: Re: GSOC 2018 P= roject - A New Sorting Routine

 

I don't have any script for that - load the fil= es into a spreadsheet,

create pivot tables and you'= re done.

 

= regards

 

O= n 07/18/2018 11:13 PM, Kefan Yang wrote:

> Hey T= omas!

>

>  

=

>

> I am trying to repr= oduce the results on my machine. Could you please

&= gt; share the script to generate .ods files?

> <= /p>

>  

>

> Regards,

>

> Kefan

>

&g= t;  

>

> *From:= *Tomas Vondra <mailto:tomas.vondra@2ndquadrant.com>

> *Sent: *July 18, 2018 2:05 AM

> *To= : *Andrey Borodin <mailto:x4mmm@yandex-team.ru>

> *Cc: *Peter Geoghegan <mailto:pg@bowt.ie>; Kefan Yang

> <mailto:starordust@gmail.com>; PostgreSQL Hacke= rs

> <mailto:pgsql-hackers@lists.postgresql.o= rg>

> *Subject: *Re: GSOC 2018 Project - A Ne= w Sorting Routine

>

>= ;  

>

>  <= /p>

>

>  

>

> On 07/18/2018 07:06 AM, A= ndrey Borodin wrote:

>

= >> Hi, Tomas!

>

&= gt;> 

>

>>> 15 =D0=B8=D1=8E=D0=BB=D1=8F 2018 =D0=B3., =D0=B2 1:20, Tom= as Vondra <tomas.vondra@2ndquadrant.com

>

>>> <mailto:tomas.vondra@2ndquadrant.com&= gt;> =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0):

>

>>> 

>

>>> So I doubt it's this, but= I've tweaked the scripts to also set this GUC

>=

>>> and restarted the tests on both mach= ines. Let's see what that does.

>

>> 

>

>> Do you observe any different results?

>

>> 

>

>  

>

> It did change the CREATE INDEX= results, depending on the scale. The full

>

> data is available at [1] and [2], attached is a = spreadsheet summary from

>

> the Xeon box.

>

>  

>

> Fo= r the largest scale (1M rows) the regressions for CREATE INDEX queries

<= p class=3DMsoNormal>>

> mostly disappeared. = For 10k rows it still affects CREATE INDEX with a

&= gt;

> text column, and the 100k case behaves ju= st like before (so significant

>

> regressions for CREATE INDEX).

> =

>  

>

> I don't have time to investigate this further at the m= oment, but I'm

>

> s= till of the opinion that there's little to gain by replacing our

>

> current sort algorithm wit= h this.

>

>  

>

>  

>

> [1] https://bitbucket.org/= tvondra/sort-intro-sort-xeon/src/master/

>

<= p class=3DMsoNormal>> [2] https://bitbucket.org/tvondra/sort-intro-sort-= i5/src/master/

>

> &= nbsp;

>

> regards

>

>  

>

> --

>

> Tomas Vondra    &nb= sp;            = http://www.2ndQuadrant.com

>

> PostgreSQL Development, 24x7 Support, Remote DBA, Training &= ; Services

>

>  = ;

>

 

--

Tomas Vondra=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 http://www.2ndQuadrant.com

PostgreS= QL Development, 24x7 Support, Remote DBA, Training & Services

 

= --_48BBF86A-5354-4318-8DE6-DFD70FECD115_-- --_BE78F6CF-EC08-4DA1-B0B3-321D51FAF3D2_ Content-Type: application/octet-stream; name="check_once.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="check_once.diff" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1cGxlLnBsIGIv c3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwKaW5kZXggNjE4NmQwYS4u MjBkN2ZiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVw bGUucGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwKQEAg LTEwOCw2ICsxMDgsOCBAQCBzdWIgZW1pdF9xc29ydF9ib2lsZXJwbGF0ZQogICogd29ydGggdGhl IGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNlZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRvIHN0 YWNrCiAgKiBvdmVycnVuLCBzbyB0aGF0IGp1ZGdtZW50IHNlZW1zIHdyb25nLgogICovCisgCisj aW5jbHVkZSA8bWF0aC5oPgogCiBzdGF0aWMgdm9pZAogc3dhcGZ1bmMoU29ydFR1cGxlICphLCBT b3J0VHVwbGUgKmIsIHNpemVfdCBuKQpAQCAtMTQ2LDcgKzE0OCw3IEBAIG1lZDNfJFNVRkZJWChT b3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgU29ydFR1cGxlICpjJEVYVFJBQVJHUykKIH0KIAog c3RhdGljIHZvaWQKLXFzb3J0XyRTVUZGSVgoU29ydFR1cGxlICphLCBzaXplX3QgbiRFWFRSQUFS R1MpCitxc29ydF9yZWN1cnNpdmVfJFNVRkZJWChTb3J0VHVwbGUgKmEsIHNpemVfdCBuJEVYVFJB QVJHUykKIHsKIAlTb3J0VHVwbGUgICpwYSwKIAkJCSAgICpwYiwKQEAgLTE1Nyw4ICsxNTksNyBA QCBxc29ydF8kU1VGRklYKFNvcnRUdXBsZSAqYSwgc2l6ZV90IG4kRVhUUkFBUkdTKQogCQkJICAg KnBuOwogCXNpemVfdAkJZDEsCiAJCQkJZDI7Ci0JaW50CQkJciwKLQkJCQlwcmVzb3J0ZWQ7CisJ aW50CQkJcjsKIAogbG9vcDoKIAlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAtMTY5LDE4ICsx NzAsNyBAQCBsb29wOgogCQkJCXN3YXAocGwsIHBsIC0gMSk7CiAJCXJldHVybjsKIAl9Ci0JcHJl c29ydGVkID0gMTsKLQlmb3IgKHBtID0gYSArIDE7IHBtIDwgYSArIG47IHBtKyspCi0JewotCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQlpZiAoY21wXyRTVUZGSVgocG0gLSAxLCBwbSRDTVBQ QVJBTVMpID4gMCkKLQkJewotCQkJcHJlc29ydGVkID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQot CWlmIChwcmVzb3J0ZWQpCi0JCXJldHVybjsKKwogCXBtID0gYSArIChuIC8gMik7CiAJaWYgKG4g PiA3KQogCXsKQEAgLTIzOCwxMSArMjI4LDExIEBAIGxvb3A6CiAJewogCQkvKiBSZWN1cnNlIG9u IGxlZnQgcGFydGl0aW9uLCB0aGVuIGl0ZXJhdGUgb24gcmlnaHQgcGFydGl0aW9uICovCiAJCWlm IChkMSA+IDEpCi0JCQlxc29ydF8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsKKwkJCXFzb3J0 X3JlY3Vyc2l2ZV8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsKIAkJaWYgKGQyID4gMSkKIAkJ ewogCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2Ug Ki8KLQkJCS8qIHFzb3J0XyRTVUZGSVgocG4gLSBkMiwgZDIkRVhUUkFQQVJBTVMpOyAqLworCQkJ LyogcXNvcnRfcmVjdXJzaXZlXyRTVUZGSVgocG4gLSBkMiwgZDIkRVhUUkFQQVJBTVMpOyAqLwog CQkJYSA9IHBuIC0gZDI7CiAJCQluID0gZDI7CiAJCQlnb3RvIGxvb3A7CkBAIC0yNTIsMTUgKzI0 MiwzNSBAQCBsb29wOgogCXsKIAkJLyogUmVjdXJzZSBvbiByaWdodCBwYXJ0aXRpb24sIHRoZW4g aXRlcmF0ZSBvbiBsZWZ0IHBhcnRpdGlvbiAqLwogCQlpZiAoZDIgPiAxKQotCQkJcXNvcnRfJFNV RkZJWChwbiAtIGQyLCBkMiRFWFRSQVBBUkFNUyk7CisJCQlxc29ydF9yZWN1cnNpdmVfJFNVRkZJ WChwbiAtIGQyLCBkMiRFWFRSQVBBUkFNUyk7CiAJCWlmIChkMSA+IDEpCiAJCXsKIAkJCS8qIEl0 ZXJhdGUgcmF0aGVyIHRoYW4gcmVjdXJzZSB0byBzYXZlIHN0YWNrIHNwYWNlICovCi0JCQkvKiBx c29ydF8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsgKi8KKwkJCS8qIHFzb3J0X3JlY3Vyc2l2 ZV8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsgKi8KIAkJCW4gPSBkMTsKIAkJCWdvdG8gbG9v cDsKIAkJfQogCX0KIH0KKworc3RhdGljIHZvaWQKK3Fzb3J0XyRTVUZGSVgoU29ydFR1cGxlICph LCBzaXplX3QgbiRFWFRSQUFSR1MpCit7CisgIGludCBwcmVzb3J0ZWQgPSAxOworCVNvcnRUdXBs ZSogcG07CisgIGZvciAocG0gPSBhICsgMTsgcG0gPCBhICsgbjsgcG0rKykKKwl7CisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisJCWlmIChjbXBfJFNVRkZJWChwbSAtIDEsIHBtJENNUFBBUkFN UykgPiAwKQorCQl7CisJCQlwcmVzb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYg KHByZXNvcnRlZCkKKwkJcmV0dXJuOworCXFzb3J0X3JlY3Vyc2l2ZV8kU1VGRklYKGEsIG4kRVhU UkFQQVJBTVMpOworfQorCiBFT00KIH0KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3Fzb3J0LmMgYi9z cmMvcG9ydC9xc29ydC5jCmluZGV4IDFhOGVlMDguLjczNDFhZWQgMTAwNjQ0Ci0tLSBhL3NyYy9w b3J0L3Fzb3J0LmMKKysrIGIvc3JjL3BvcnQvcXNvcnQuYwpAQCAtNDQsNiArNDQsOCBAQAogICog U1VDSCBEQU1BR0UuCiAgKi8KIAorCisjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgImMuaCIK IAogCkBAIC0xMDksNDcgKzExMSwzNSBAQCBtZWQzKGNoYXIgKmEsIGNoYXIgKmIsIGNoYXIgKmMs IGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKIAkJOiAoY21wKGIsIGMp ID4gMCA/IGIgOiAoY21wKGEsIGMpIDwgMCA/IGEgOiBjKSk7CiB9CiAKLXZvaWQKLXBnX3Fzb3J0 KHZvaWQgKmEsIHNpemVfdCBuLCBzaXplX3QgZXMsIGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwg Y29uc3Qgdm9pZCAqKSkKK3N0YXRpYyB2b2lkCitwZ19xc29ydF9yZWN1cnNpdmUodm9pZCAqYSwg c2l6ZV90IG4sIGludCBzd2FwdHlwZSwgc2l6ZV90IGVzLCBpbnQoKmNtcCkgKGNvbnN0IHZvaWQg KiwgY29uc3Qgdm9pZCAqKSkKIHsKIAljaGFyCSAgICpwYSwKLQkJCSAgICpwYiwKLQkJCSAgICpw YywKLQkJCSAgICpwZCwKLQkJCSAgICpwbCwKLQkJCSAgICpwbSwKLQkJCSAgICpwbjsKKwkJKnBi LAorCQkqcGMsCisJCSpwZCwKKwkJKnBsLAorCQkqcG0sCisJCSpwbjsKIAlzaXplX3QJCWQxLAot CQkJCWQyOwotCWludAkJCXIsCi0JCQkJc3dhcHR5cGUsCi0JCQkJcHJlc29ydGVkOworCQlkMjsK KwlpbnQJCQlyOwogCi1sb29wOlNXQVBJTklUKGEsIGVzKTsKK2xvb3A6CiAJaWYgKG4gPCA3KQog CXsKLQkJZm9yIChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVz OyBwbSArPSBlcykKLQkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAt IGVzLCBwbCkgPiAwOwotCQkJCSBwbCAtPSBlcykKKwkJZm9yIChwbSA9IChjaGFyICopYSArIGVz OyBwbSA8IChjaGFyICopYSArIG4gKiBlczsgcG0gKz0gZXMpCisJCQlmb3IgKHBsID0gcG07IHBs ID4oY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCkgPiAwOworCQkJCXBsIC09IGVzKQogCQkJ CXN3YXAocGwsIHBsIC0gZXMpOwogCQlyZXR1cm47CiAJfQotCXByZXNvcnRlZCA9IDE7Ci0JZm9y IChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBl cykKLQl7Ci0JCWlmIChjbXAocG0gLSBlcywgcG0pID4gMCkKLQkJewotCQkJcHJlc29ydGVkID0g MDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChwcmVzb3J0ZWQpCi0JCXJldHVybjsKLQlwbSA9 IChjaGFyICopIGEgKyAobiAvIDIpICogZXM7CisKKwlwbSA9IChjaGFyICopYSArIChuIC8gMikg KiBlczsKIAlpZiAobiA+IDcpCiAJewotCQlwbCA9IChjaGFyICopIGE7Ci0JCXBuID0gKGNoYXIg KikgYSArIChuIC0gMSkgKiBlczsKKwkJcGwgPSAoY2hhciAqKWE7CisJCXBuID0gKGNoYXIgKilh ICsgKG4gLSAxKSAqIGVzOwogCQlpZiAobiA+IDQwKQogCQl7CiAJCQlzaXplX3QJCWQgPSAobiAv IDgpICogZXM7CkBAIC0xNjEsOCArMTUxLDggQEAgbG9vcDpTV0FQSU5JVChhLCBlcyk7CiAJCXBt ID0gbWVkMyhwbCwgcG0sIHBuLCBjbXApOwogCX0KIAlzd2FwKGEsIHBtKTsKLQlwYSA9IHBiID0g KGNoYXIgKikgYSArIGVzOwotCXBjID0gcGQgPSAoY2hhciAqKSBhICsgKG4gLSAxKSAqIGVzOwor CXBhID0gcGIgPSAoY2hhciAqKWEgKyBlczsKKwlwYyA9IHBkID0gKGNoYXIgKilhICsgKG4gLSAx KSAqIGVzOwogCWZvciAoOzspCiAJewogCQl3aGlsZSAocGIgPD0gcGMgJiYgKHIgPSBjbXAocGIs IGEpKSA8PSAwKQpAQCAtMTg5LDggKzE3OSw4IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCQlw YiArPSBlczsKIAkJcGMgLT0gZXM7CiAJfQotCXBuID0gKGNoYXIgKikgYSArIG4gKiBlczsKLQlk MSA9IE1pbihwYSAtIChjaGFyICopIGEsIHBiIC0gcGEpOworCXBuID0gKGNoYXIgKilhICsgbiAq IGVzOworCWQxID0gTWluKHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsKIAl2ZWNzd2FwKGEsIHBi IC0gZDEsIGQxKTsKIAlkMSA9IE1pbihwZCAtIHBjLCBwbiAtIHBkIC0gZXMpOwogCXZlY3N3YXAo cGIsIHBuIC0gZDEsIGQxKTsKQEAgLTIwMCwxMSArMTkwLDExIEBAIGxvb3A6U1dBUElOSVQoYSwg ZXMpOwogCXsKIAkJLyogUmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9u IHJpZ2h0IHBhcnRpdGlvbiAqLwogCQlpZiAoZDEgPiBlcykKLQkJCXBnX3Fzb3J0KGEsIGQxIC8g ZXMsIGVzLCBjbXApOworCQkJcGdfcXNvcnRfcmVjdXJzaXZlKGEsIGQxIC8gZXMsIHN3YXB0eXBl LCBlcywgY21wKTsKIAkJaWYgKGQyID4gZXMpCiAJCXsKIAkJCS8qIEl0ZXJhdGUgcmF0aGVyIHRo YW4gcmVjdXJzZSB0byBzYXZlIHN0YWNrIHNwYWNlICovCi0JCQkvKiBwZ19xc29ydChwbiAtIGQy LCBkMiAvIGVzLCBlcywgY21wKTsgKi8KKwkJCS8qIHBnX3Fzb3J0X3JlY3Vyc2l2ZShwbiAtIGQy LCBkMiAvIGVzLCBlcywgY21wKTsgKi8KIAkJCWEgPSBwbiAtIGQyOwogCQkJbiA9IGQyIC8gZXM7 CiAJCQlnb3RvIGxvb3A7CkBAIC0yMTQsMTcgKzIwNCwzNiBAQCBsb29wOlNXQVBJTklUKGEsIGVz KTsKIAl7CiAJCS8qIFJlY3Vyc2Ugb24gcmlnaHQgcGFydGl0aW9uLCB0aGVuIGl0ZXJhdGUgb24g bGVmdCBwYXJ0aXRpb24gKi8KIAkJaWYgKGQyID4gZXMpCi0JCQlwZ19xc29ydChwbiAtIGQyLCBk MiAvIGVzLCBlcywgY21wKTsKKwkJCXBnX3Fzb3J0X3JlY3Vyc2l2ZShwbiAtIGQyLCBkMiAvIGVz LCBzd2FwdHlwZSwgZXMsIGNtcCk7CiAJCWlmIChkMSA+IGVzKQogCQl7CiAJCQkvKiBJdGVyYXRl IHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2ZSBzdGFjayBzcGFjZSAqLwotCQkJLyogcGdfcXNv cnQoYSwgZDEgLyBlcywgZXMsIGNtcCk7ICovCisJCQkvKiBwZ19xc29ydF9yZWN1cnNpdmUoYSwg ZDEgLyBlcywgZXMsIGNtcCk7ICovCiAJCQluID0gZDEgLyBlczsKIAkJCWdvdG8gbG9vcDsKIAkJ fQogCX0KIH0KIAorCit2b2lkCitwZ19xc29ydCh2b2lkICphLCBjb25zdCBzaXplX3Qgc2l6ZSwg Y29uc3Qgc2l6ZV90IGVzLCBpbnQoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkg eworCWludCBzd2FwdHlwZSwgcHJlc29ydGVkID0gMTsKKwljaGFyKiBwbTsKKwlmb3IgKHBtID0g KGNoYXIgKilhICsgZXM7IHBtIDwgKGNoYXIgKilhICsgc2l6ZSAqIGVzOyBwbSArPSBlcykKKwl7 CisJCWlmIChjbXAocG0gLSBlcywgcG0pID4gMCkKKwkJeworCQkJcHJlc29ydGVkID0gMDsKKwkJ CWJyZWFrOworCQl9CisJfQorCWlmIChwcmVzb3J0ZWQpCisJCXJldHVybjsKKwlTV0FQSU5JVChh LCBlcyk7CisJcGdfcXNvcnRfcmVjdXJzaXZlKGEsIHNpemUsIHN3YXB0eXBlLCBlcywgY21wKTsK K307CisKIC8qCiAgKiBxc29ydCBjb21wYXJhdG9yIHdyYXBwZXIgZm9yIHN0cmNtcC4KICAqLwpk aWZmIC0tZ2l0IGEvc3JjL3BvcnQvcXNvcnRfYXJnLmMgYi9zcmMvcG9ydC9xc29ydF9hcmcuYwpp bmRleCAyNGFjZDJjLi43ZGUzMTY3IDEwMDY0NAotLS0gYS9zcmMvcG9ydC9xc29ydF9hcmcuYwor KysgYi9zcmMvcG9ydC9xc29ydF9hcmcuYwpAQCAtNDQsNiArNDQsOCBAQAogICogU1VDSCBEQU1B R0UuCiAgKi8KIAorCisjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgImMuaCIKIAogCkBAIC0x MDIsNTQgKzEwNCw0MiBAQCBzd2FwZnVuYyhjaGFyICphLCBjaGFyICpiLCBzaXplX3QgbiwgaW50 IHN3YXB0eXBlKQogI2RlZmluZSB2ZWNzd2FwKGEsIGIsIG4pIGlmICgobikgPiAwKSBzd2FwZnVu YyhhLCBiLCBuLCBzd2FwdHlwZSkKIAogc3RhdGljIGNoYXIgKgotbWVkMyhjaGFyICphLCBjaGFy ICpiLCBjaGFyICpjLCBxc29ydF9hcmdfY29tcGFyYXRvciBjbXAsIHZvaWQgKmFyZykKK21lZDMo Y2hhciAqYSwgY2hhciAqYiwgY2hhciAqYywgcXNvcnRfYXJnX2NvbXBhcmF0b3IgY21wLCB2b2lk KiBhcmcpCiB7CiAJcmV0dXJuIGNtcChhLCBiLCBhcmcpIDwgMCA/Ci0JCShjbXAoYiwgYywgYXJn KSA8IDAgPyBiIDogKGNtcChhLCBjLCBhcmcpIDwgMCA/IGMgOiBhKSkKLQkJOiAoY21wKGIsIGMs IGFyZykgPiAwID8gYiA6IChjbXAoYSwgYywgYXJnKSA8IDAgPyBhIDogYykpOworCQkoY21wKGIs IGMgLCBhcmcpIDwgMCA/IGIgOiAoY21wKGEsIGMsIGFyZykgPCAwID8gYyA6IGEpKQorCQk6IChj bXAoYiwgYywgYXJnKSAgPiAwID8gYiA6IChjbXAoYSwgYywgYXJnKSA8IDAgPyBhIDogYykpOwog fQogCi12b2lkCi1xc29ydF9hcmcodm9pZCAqYSwgc2l6ZV90IG4sIHNpemVfdCBlcywgcXNvcnRf YXJnX2NvbXBhcmF0b3IgY21wLCB2b2lkICphcmcpCitzdGF0aWMgdm9pZAorcGdfcXNvcnRfYXJn X3JlY3Vyc2l2ZSh2b2lkICphLCBzaXplX3QgbiwgaW50IHN3YXB0eXBlLCBzaXplX3QgZXMsIHFz b3J0X2FyZ19jb21wYXJhdG9yIGNtcCwgdm9pZCogYXJnKQogewogCWNoYXIJICAgKnBhLAotCQkJ ICAgKnBiLAotCQkJICAgKnBjLAotCQkJICAgKnBkLAotCQkJICAgKnBsLAotCQkJICAgKnBtLAot CQkJICAgKnBuOworCQkqcGIsCisJCSpwYywKKwkJKnBkLAorCQkqcGwsCisJCSpwbSwKKwkJKnBu OwogCXNpemVfdAkJZDEsCi0JCQkJZDI7Ci0JaW50CQkJciwKLQkJCQlzd2FwdHlwZSwKLQkJCQlw cmVzb3J0ZWQ7CisJCWQyOworCWludAkJCXI7CiAKLWxvb3A6U1dBUElOSVQoYSwgZXMpOworbG9v cDoKIAlpZiAobiA8IDcpCiAJewotCQlmb3IgKHBtID0gKGNoYXIgKikgYSArIGVzOyBwbSA8IChj aGFyICopIGEgKyBuICogZXM7IHBtICs9IGVzKQotCQkJZm9yIChwbCA9IHBtOyBwbCA+IChjaGFy ICopIGEgJiYgY21wKHBsIC0gZXMsIHBsLCBhcmcpID4gMDsKLQkJCQkgcGwgLT0gZXMpCisJCWZv ciAocG0gPSAoY2hhciAqKWEgKyBlczsgcG0gPCAoY2hhciAqKWEgKyBuICogZXM7IHBtICs9IGVz KQorCQkJZm9yIChwbCA9IHBtOyBwbCA+KGNoYXIgKikgYSAmJiBjbXAocGwgLSBlcywgcGwsIGFy ZykgPiAwOworCQkJCXBsIC09IGVzKQogCQkJCXN3YXAocGwsIHBsIC0gZXMpOwogCQlyZXR1cm47 CiAJfQotCXByZXNvcnRlZCA9IDE7Ci0JZm9yIChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAo Y2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKLQl7Ci0JCWlmIChjbXAocG0gLSBlcywgcG0s IGFyZykgPiAwKQotCQl7Ci0JCQlwcmVzb3J0ZWQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0J aWYgKHByZXNvcnRlZCkKLQkJcmV0dXJuOwotCXBtID0gKGNoYXIgKikgYSArIChuIC8gMikgKiBl czsKKworCXBtID0gKGNoYXIgKilhICsgKG4gLyAyKSAqIGVzOwogCWlmIChuID4gNykKIAl7Ci0J CXBsID0gKGNoYXIgKikgYTsKLQkJcG4gPSAoY2hhciAqKSBhICsgKG4gLSAxKSAqIGVzOworCQlw bCA9IChjaGFyICopYTsKKwkJcG4gPSAoY2hhciAqKWEgKyAobiAtIDEpICogZXM7CiAJCWlmIChu ID4gNDApCiAJCXsKIAkJCXNpemVfdAkJZCA9IChuIC8gOCkgKiBlczsKQEAgLTE2MSw4ICsxNTEs OCBAQCBsb29wOlNXQVBJTklUKGEsIGVzKTsKIAkJcG0gPSBtZWQzKHBsLCBwbSwgcG4sIGNtcCwg YXJnKTsKIAl9CiAJc3dhcChhLCBwbSk7Ci0JcGEgPSBwYiA9IChjaGFyICopIGEgKyBlczsKLQlw YyA9IHBkID0gKGNoYXIgKikgYSArIChuIC0gMSkgKiBlczsKKwlwYSA9IHBiID0gKGNoYXIgKilh ICsgZXM7CisJcGMgPSBwZCA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKIAlmb3IgKDs7KQog CXsKIAkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gY21wKHBiLCBhLCBhcmcpKSA8PSAwKQpAQCAt MTg5LDggKzE3OSw4IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCQlwYiArPSBlczsKIAkJcGMg LT0gZXM7CiAJfQotCXBuID0gKGNoYXIgKikgYSArIG4gKiBlczsKLQlkMSA9IE1pbihwYSAtIChj aGFyICopIGEsIHBiIC0gcGEpOworCXBuID0gKGNoYXIgKilhICsgbiAqIGVzOworCWQxID0gTWlu KHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsKIAl2ZWNzd2FwKGEsIHBiIC0gZDEsIGQxKTsKIAlk MSA9IE1pbihwZCAtIHBjLCBwbiAtIHBkIC0gZXMpOwogCXZlY3N3YXAocGIsIHBuIC0gZDEsIGQx KTsKQEAgLTIwMCwxMSArMTkwLDExIEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCXsKIAkJLyog UmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9uIHJpZ2h0IHBhcnRpdGlv biAqLwogCQlpZiAoZDEgPiBlcykKLQkJCXFzb3J0X2FyZyhhLCBkMSAvIGVzLCBlcywgY21wLCBh cmcpOworCQkJcGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZShhLCBkMSAvIGVzLCBzd2FwdHlwZSwgZXMs IGNtcCwgYXJnKTsKIAkJaWYgKGQyID4gZXMpCiAJCXsKIAkJCS8qIEl0ZXJhdGUgcmF0aGVyIHRo YW4gcmVjdXJzZSB0byBzYXZlIHN0YWNrIHNwYWNlICovCi0JCQkvKiBxc29ydF9hcmcocG4gLSBk MiwgZDIgLyBlcywgZXMsIGNtcCwgYXJnKTsgKi8KKwkJCS8qIHBnX3Fzb3J0X2FyZ19yZWN1cnNp dmUocG4gLSBkMiwgZDIgLyBlcywgZXMsIGNtcCwgYXJnKTsgKi8KIAkJCWEgPSBwbiAtIGQyOwog CQkJbiA9IGQyIC8gZXM7CiAJCQlnb3RvIGxvb3A7CkBAIC0yMTQsMTMgKzIwNCwzMyBAQCBsb29w OlNXQVBJTklUKGEsIGVzKTsKIAl7CiAJCS8qIFJlY3Vyc2Ugb24gcmlnaHQgcGFydGl0aW9uLCB0 aGVuIGl0ZXJhdGUgb24gbGVmdCBwYXJ0aXRpb24gKi8KIAkJaWYgKGQyID4gZXMpCi0JCQlxc29y dF9hcmcocG4gLSBkMiwgZDIgLyBlcywgZXMsIGNtcCwgYXJnKTsKKwkJCXBnX3Fzb3J0X2FyZ19y ZWN1cnNpdmUocG4gLSBkMiwgZDIgLyBlcywgc3dhcHR5cGUsIGVzLCBjbXAsIGFyZyk7CiAJCWlm IChkMSA+IGVzKQogCQl7CiAJCQkvKiBJdGVyYXRlIHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2 ZSBzdGFjayBzcGFjZSAqLwotCQkJLyogcXNvcnRfYXJnKGEsIGQxIC8gZXMsIGVzLCBjbXAsIGFy Zyk7ICovCisJCQkvKiBwZ19xc29ydF9hcmdfcmVjdXJzaXZlKGEsIGQxIC8gZXMsIGVzLCBjbXAs IGFyZyk7ICovCiAJCQluID0gZDEgLyBlczsKIAkJCWdvdG8gbG9vcDsKIAkJfQogCX0KIH0KKwor Cit2b2lkCitxc29ydF9hcmcodm9pZCAqYSwgY29uc3Qgc2l6ZV90IHNpemUsIGNvbnN0IHNpemVf dCBlcywgcXNvcnRfYXJnX2NvbXBhcmF0b3IgY21wLCB2b2lkKiBhcmcpIHsKKwlpbnQgc3dhcHR5 cGUsIHByZXNvcnRlZCA9IDE7CisJY2hhciogcG07CisJZm9yIChwbSA9IChjaGFyICopYSArIGVz OyBwbSA8IChjaGFyICopYSArIHNpemUgKiBlczsgcG0gKz0gZXMpCisJeworCQlpZiAoY21wKHBt IC0gZXMsIHBtLCBhcmcpID4gMCkKKwkJeworCQkJcHJlc29ydGVkID0gMDsKKwkJCWJyZWFrOwor CQl9CisJfQorCWlmIChwcmVzb3J0ZWQpCisJCXJldHVybjsKKwlTV0FQSU5JVChhLCBlcyk7CisJ cGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZShhLCBzaXplLCBzd2FwdHlwZSwgZXMsIGNtcCwgYXJnKTsK K307CisK --_BE78F6CF-EC08-4DA1-B0B3-321D51FAF3D2_ Content-Type: application/octet-stream; name="use_heap.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="use_heap.diff" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1cGxlLnBsIGIv c3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwKaW5kZXggNjE4NmQwYS4u YTlhZTQ5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVw bGUucGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwKQEAg LTEwOCw2ICsxMDgsOCBAQCBzdWIgZW1pdF9xc29ydF9ib2lsZXJwbGF0ZQogICogd29ydGggdGhl IGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNlZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRvIHN0 YWNrCiAgKiBvdmVycnVuLCBzbyB0aGF0IGp1ZGdtZW50IHNlZW1zIHdyb25nLgogICovCisgCisj aW5jbHVkZSA8bWF0aC5oPgogCiBzdGF0aWMgdm9pZAogc3dhcGZ1bmMoU29ydFR1cGxlICphLCBT b3J0VHVwbGUgKmIsIHNpemVfdCBuKQpAQCAtMTQ1LDggKzE0Nyw2MyBAQCBtZWQzXyRTVUZGSVgo U29ydFR1cGxlICphLCBTb3J0VHVwbGUgKmIsIFNvcnRUdXBsZSAqYyRFWFRSQUFSR1MpCiAJCQko Y21wXyRTVUZGSVgoYSwgYyRDTVBQQVJBTVMpIDwgMCA/IGEgOiBjKSk7CiB9CiAKKy8qIGhlYXAg c29ydDogYmFzZWQgb24gd2lraXBlZGlhICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraGVhcF9z aGlmdF9kb3duXyRTVUZGSVgoU29ydFR1cGxlICphLCBjb25zdCBzaXplX3Qgc3RhcnQsIGNvbnN0 IHNpemVfdCBlbmQkRVhUUkFBUkdTKSB7CisgIHNpemVfdCBjaGlsZCwgcm9vdCA9IHN0YXJ0Owor CisgIHdoaWxlICgocm9vdCA8PCAxKSArIDEgPD0gZW5kKSB7CisgICAgQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKyAgICAKKyAgICBjaGlsZCA9IChyb290IDw8IDEpICsgMTsKKworCQlpZiAoKGNo aWxkIDwgZW5kKSAmJiBjbXBfJFNVRkZJWChhICsgY2hpbGQsIGEgKyAoY2hpbGQgKyAxKSRDTVBQ QVJBTVMpIDwgMCkgeworCQkJY2hpbGQrKzsKKwkJfQorCisJCWlmIChjbXBfJFNVRkZJWChhICsg cm9vdCwgYSArIGNoaWxkJENNUFBBUkFNUykgPCAwKSB7CisJCQlzd2FwKGEgKyByb290LCBhICsg Y2hpbGQpOworCQkJcm9vdCA9IGNoaWxkOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuOworCQl9 CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hlYXBfc29ydF8kU1VGRklYKFNvcnRUdXBs ZSAqYSwgY29uc3Qgc2l6ZV90IHNpemUkRVhUUkFBUkdTKSB7CisKKwlzaXplX3Qgc3RhcnQsIGVu ZDsKKwkvKiBkb24ndCBib3RoZXIgc29ydGluZyBhbiBhcnJheSBvZiBzaXplIDw9IDEgKi8KKwlp ZiAoc2l6ZSA8PSAxKSB7CisJCXJldHVybjsKKwl9CisKKwllbmQgPSBzaXplIC0gMTsKKworCS8q IGhlYXBpZnkgKi8KKwlzdGFydCA9IChlbmQgLSAxKSA+PiAxOworCXdoaWxlICgxKSB7CisJCWhl YXBfc2hpZnRfZG93bl8kU1VGRklYKGEsIHN0YXJ0LCBlbmQkRVhUUkFQQVJBTVMpOworCisJCWlm IChzdGFydCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCXN0YXJ0LS07CisJfQorCisJd2hp bGUgKGVuZCA+IDApIHsKKwkJc3dhcChhICsgZW5kLCBhKTsKKwkJaGVhcF9zaGlmdF9kb3duXyRT VUZGSVgoYSwgMCwgZW5kIC0gMSRFWFRSQVBBUkFNUyk7CisJCWVuZC0tOworCX0KK30KKwogc3Rh dGljIHZvaWQKLXFzb3J0XyRTVUZGSVgoU29ydFR1cGxlICphLCBzaXplX3QgbiRFWFRSQUFSR1Mp Citxc29ydF9yZWN1cnNpdmVfJFNVRkZJWChTb3J0VHVwbGUgKmEsIHNpemVfdCBuLCBzaXplX3Qg ZGVwdGgkRVhUUkFBUkdTKQogewogCVNvcnRUdXBsZSAgKnBhLAogCQkJICAgKnBiLApAQCAtMTU4 LDcgKzIxNSw3IEBAIHFzb3J0XyRTVUZGSVgoU29ydFR1cGxlICphLCBzaXplX3QgbiRFWFRSQUFS R1MpCiAJc2l6ZV90CQlkMSwKIAkJCQlkMjsKIAlpbnQJCQlyLAotCQkJCXByZXNvcnRlZDsKKyAg ICBwcmVzb3J0ZWQ7CiAKIGxvb3A6CiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKQEAgLTE2OSw4 ICsyMjYsOSBAQCBsb29wOgogCQkJCXN3YXAocGwsIHBsIC0gMSk7CiAJCXJldHVybjsKIAl9Ci0J cHJlc29ydGVkID0gMTsKLQlmb3IgKHBtID0gYSArIDE7IHBtIDwgYSArIG47IHBtKyspCisKKyAg cHJlc29ydGVkID0gMTsKKyAgZm9yIChwbSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQogCXsK IAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJaWYgKGNtcF8kU1VGRklYKHBtIC0gMSwgcG0k Q01QUEFSQU1TKSA+IDApCkBAIC0xODEsNiArMjM5LDEzIEBAIGxvb3A6CiAJfQogCWlmIChwcmVz b3J0ZWQpCiAJCXJldHVybjsKKyAKKyAgLyogY29udmVydCB0byBoZWFwIHNvcnQgaWYgZXhjZWVk IGRlcHRoIGxpbWl0ICovCisJaWYgKCFkZXB0aCkgeworCQloZWFwX3NvcnRfJFNVRkZJWChhLCBu JEVYVFJBUEFSQU1TKTsKKyAgICByZXR1cm47CisJfQorCiAJcG0gPSBhICsgKG4gLyAyKTsKIAlp ZiAobiA+IDcpCiAJewpAQCAtMjM4LDEzICszMDMsMTQgQEAgbG9vcDoKIAl7CiAJCS8qIFJlY3Vy c2Ugb24gbGVmdCBwYXJ0aXRpb24sIHRoZW4gaXRlcmF0ZSBvbiByaWdodCBwYXJ0aXRpb24gKi8K IAkJaWYgKGQxID4gMSkKLQkJCXFzb3J0XyRTVUZGSVgoYSwgZDEkRVhUUkFQQVJBTVMpOworCQkJ cXNvcnRfcmVjdXJzaXZlXyRTVUZGSVgoYSwgZDEsIGRlcHRoIC0gMSRFWFRSQVBBUkFNUyk7CiAJ CWlmIChkMiA+IDEpCiAJCXsKIAkJCS8qIEl0ZXJhdGUgcmF0aGVyIHRoYW4gcmVjdXJzZSB0byBz YXZlIHN0YWNrIHNwYWNlICovCi0JCQkvKiBxc29ydF8kU1VGRklYKHBuIC0gZDIsIGQyJEVYVFJB UEFSQU1TKTsgKi8KKwkJCS8qIHFzb3J0X3JlY3Vyc2l2ZV8kU1VGRklYKHBuIC0gZDIsIGQyLCBk ZXB0aCAtIDEkRVhUUkFQQVJBTVMpOyAqLwogCQkJYSA9IHBuIC0gZDI7CiAJCQluID0gZDI7Cisg ICAgICBkZXB0aC0tOwogCQkJZ290byBsb29wOwogCQl9CiAJfQpAQCAtMjUyLDE1ICszMTgsMjMg QEAgbG9vcDoKIAl7CiAJCS8qIFJlY3Vyc2Ugb24gcmlnaHQgcGFydGl0aW9uLCB0aGVuIGl0ZXJh dGUgb24gbGVmdCBwYXJ0aXRpb24gKi8KIAkJaWYgKGQyID4gMSkKLQkJCXFzb3J0XyRTVUZGSVgo cG4gLSBkMiwgZDIkRVhUUkFQQVJBTVMpOworCQkJcXNvcnRfcmVjdXJzaXZlXyRTVUZGSVgocG4g LSBkMiwgZDIsIGRlcHRoIC0gMSRFWFRSQVBBUkFNUyk7CiAJCWlmIChkMSA+IDEpCiAJCXsKIAkJ CS8qIEl0ZXJhdGUgcmF0aGVyIHRoYW4gcmVjdXJzZSB0byBzYXZlIHN0YWNrIHNwYWNlICovCi0J CQkvKiBxc29ydF8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsgKi8KKwkJCS8qIHFzb3J0X3Jl Y3Vyc2l2ZV8kU1VGRklYKGEsIGQxLCBkZXB0aCAtIDEkRVhUUkFQQVJBTVMpOyAqLwogCQkJbiA9 IGQxOworICAgICAgZGVwdGgtLTsKIAkJCWdvdG8gbG9vcDsKIAkJfQogCX0KIH0KKworc3RhdGlj IHZvaWQKK3Fzb3J0XyRTVUZGSVgoU29ydFR1cGxlICphLCBzaXplX3QgbiRFWFRSQUFSR1MpCit7 IAorCXFzb3J0X3JlY3Vyc2l2ZV8kU1VGRklYKGEsIG4sIDIgKiBsb2cobikkRVhUUkFQQVJBTVMp OworfQorCiBFT00KIH0KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3Fzb3J0LmMgYi9zcmMvcG9ydC9x c29ydC5jCmluZGV4IDFhOGVlMDguLjQ5MTc1YTcgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L3Fzb3J0 LmMKKysrIGIvc3JjL3BvcnQvcXNvcnQuYwpAQCAtNDQsNiArNDQsOCBAQAogICogU1VDSCBEQU1B R0UuCiAgKi8KIAorCisjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgImMuaCIKIAogCkBAIC0x MDksMzIgKzExMSw4NSBAQCBtZWQzKGNoYXIgKmEsIGNoYXIgKmIsIGNoYXIgKmMsIGludCAoKmNt cCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKIAkJOiAoY21wKGIsIGMpID4gMCA/IGIg OiAoY21wKGEsIGMpIDwgMCA/IGEgOiBjKSk7CiB9CiAKLXZvaWQKLXBnX3Fzb3J0KHZvaWQgKmEs IHNpemVfdCBuLCBzaXplX3QgZXMsIGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9p ZCAqKSkKKy8qIGhlYXAgc29ydDogYmFzZWQgb24gd2lraXBlZGlhICovCisKK3N0YXRpYyBpbmxp bmUgdm9pZAoraGVhcF9zaGlmdF9kb3duKHZvaWQgKmEsIGNvbnN0IHNpemVfdCBzdGFydCwgY29u c3Qgc2l6ZV90IGVuZCwKKwlpbnQgc3dhcHR5cGUsIGNvbnN0IHNpemVfdCBlcywgaW50KCpjbXAp IChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIHsKKwlzaXplX3Qgcm9vdCA9IHN0YXJ0Owor CisJd2hpbGUgKChyb290IDw8IDEpICsgMSA8PSBlbmQpIHsKKwkJc2l6ZV90IGNoaWxkID0gKHJv b3QgPDwgMSkgKyAxOworCisJCWlmICgoY2hpbGQgPCBlbmQpICYmIGNtcCgoY2hhciopYSArIGNo aWxkICogZXMsIChjaGFyKilhICsgKGNoaWxkICsgMSkqZXMpIDwgMCkgeworCQkJY2hpbGQrKzsK KwkJfQorCisJCWlmIChjbXAoKGNoYXIqKWEgKyByb290ICogZXMsIChjaGFyKilhICsgY2hpbGQg KiBlcykgPCAwKSB7CisJCQlzd2FwKChjaGFyKilhICsgcm9vdCAqIGVzLCAoY2hhciopYSArIGNo aWxkICogZXMpOworCQkJcm9vdCA9IGNoaWxkOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuOwor CQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hlYXBfc29ydCh2b2lkICphLCBjb25z dCBzaXplX3Qgc2l6ZSwgaW50IHN3YXB0eXBlLCBjb25zdCBzaXplX3QgZXMsIGludCgqY21wKSAo Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSB7CisKKwlzaXplX3Qgc3RhcnQsIGVuZDsKKwkv KiBkb24ndCBib3RoZXIgc29ydGluZyBhbiBhcnJheSBvZiBzaXplIDw9IDEgKi8KKwlpZiAoc2l6 ZSA8PSAxKSB7CisJCXJldHVybjsKKwl9CisKKwllbmQgPSBzaXplIC0gMTsKKworCS8qIGhlYXBp ZnkgKi8KKwlzdGFydCA9IChlbmQgLSAxKSA+PiAxOworCXdoaWxlICgxKSB7CisJCWhlYXBfc2hp ZnRfZG93bihhLCBzdGFydCwgZW5kLCBzd2FwdHlwZSwgZXMsIGNtcCk7CisKKwkJaWYgKHN0YXJ0 ID09IDApIHsKKwkJCWJyZWFrOworCQl9CisKKwkJc3RhcnQtLTsKKwl9CisKKwl3aGlsZSAoZW5k ID4gMCkgeworCQlzd2FwKChjaGFyKilhICsgZW5kICogZXMsIChjaGFyKilhKTsKKwkJaGVhcF9z aGlmdF9kb3duKGEsIDAsIGVuZCAtIDEsIHN3YXB0eXBlLCBlcywgY21wKTsKKwkJZW5kLS07CisJ fQorfQorCitzdGF0aWMgdm9pZAorcGdfcXNvcnRfcmVjdXJzaXZlKHZvaWQgKmEsIHNpemVfdCBu LCBzaXplX3QgZGVwdGgsIGludCBzd2FwdHlwZSwgc2l6ZV90IGVzLCBpbnQoKmNtcCkgKGNvbnN0 IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKIHsKIAljaGFyCSAgICpwYSwKLQkJCSAgICpwYiwKLQkJ CSAgICpwYywKLQkJCSAgICpwZCwKLQkJCSAgICpwbCwKLQkJCSAgICpwbSwKLQkJCSAgICpwbjsK KwkJKnBiLAorCQkqcGMsCisJCSpwZCwKKwkJKnBsLAorCQkqcG0sCisJCSpwbjsKIAlzaXplX3QJ CWQxLAotCQkJCWQyOworCQlkMjsKIAlpbnQJCQlyLAotCQkJCXN3YXB0eXBlLAotCQkJCXByZXNv cnRlZDsKKyAgICBwcmVzb3J0ZWQ7CiAKLWxvb3A6U1dBUElOSVQoYSwgZXMpOworbG9vcDoKIAlp ZiAobiA8IDcpCiAJewotCQlmb3IgKHBtID0gKGNoYXIgKikgYSArIGVzOyBwbSA8IChjaGFyICop IGEgKyBuICogZXM7IHBtICs9IGVzKQotCQkJZm9yIChwbCA9IHBtOyBwbCA+IChjaGFyICopIGEg JiYgY21wKHBsIC0gZXMsIHBsKSA+IDA7Ci0JCQkJIHBsIC09IGVzKQorCQlmb3IgKHBtID0gKGNo YXIgKilhICsgZXM7IHBtIDwgKGNoYXIgKilhICsgbiAqIGVzOyBwbSArPSBlcykKKwkJCWZvciAo cGwgPSBwbTsgcGwgPihjaGFyICopIGEgJiYgY21wKHBsIC0gZXMsIHBsKSA+IDA7CisJCQkJcGwg LT0gZXMpCiAJCQkJc3dhcChwbCwgcGwgLSBlcyk7CiAJCXJldHVybjsKIAl9Ci0JcHJlc29ydGVk ID0gMTsKKyAgcHJlc29ydGVkID0gMTsKIAlmb3IgKHBtID0gKGNoYXIgKikgYSArIGVzOyBwbSA8 IChjaGFyICopIGEgKyBuICogZXM7IHBtICs9IGVzKQogCXsKIAkJaWYgKGNtcChwbSAtIGVzLCBw bSkgPiAwKQpAQCAtMTQ1LDExICsyMDAsMTggQEAgbG9vcDpTV0FQSU5JVChhLCBlcyk7CiAJfQog CWlmIChwcmVzb3J0ZWQpCiAJCXJldHVybjsKLQlwbSA9IChjaGFyICopIGEgKyAobiAvIDIpICog ZXM7CisKKwkvKiBjb252ZXJ0IHRvIGhlYXAgc29ydCBpZiBleGNlZWQgZGVwdGggbGltaXQgKi8K KwlpZiAoIWRlcHRoKSB7CisJCWhlYXBfc29ydChhLCBuLCBzd2FwdHlwZSwgZXMsIGNtcCk7CisJ CXJldHVybjsKKwl9CisKKwlwbSA9IChjaGFyICopYSArIChuIC8gMikgKiBlczsKIAlpZiAobiA+ IDcpCiAJewotCQlwbCA9IChjaGFyICopIGE7Ci0JCXBuID0gKGNoYXIgKikgYSArIChuIC0gMSkg KiBlczsKKwkJcGwgPSAoY2hhciAqKWE7CisJCXBuID0gKGNoYXIgKilhICsgKG4gLSAxKSAqIGVz OwogCQlpZiAobiA+IDQwKQogCQl7CiAJCQlzaXplX3QJCWQgPSAobiAvIDgpICogZXM7CkBAIC0x NjEsOCArMjIzLDggQEAgbG9vcDpTV0FQSU5JVChhLCBlcyk7CiAJCXBtID0gbWVkMyhwbCwgcG0s IHBuLCBjbXApOwogCX0KIAlzd2FwKGEsIHBtKTsKLQlwYSA9IHBiID0gKGNoYXIgKikgYSArIGVz OwotCXBjID0gcGQgPSAoY2hhciAqKSBhICsgKG4gLSAxKSAqIGVzOworCXBhID0gcGIgPSAoY2hh ciAqKWEgKyBlczsKKwlwYyA9IHBkID0gKGNoYXIgKilhICsgKG4gLSAxKSAqIGVzOwogCWZvciAo OzspCiAJewogCQl3aGlsZSAocGIgPD0gcGMgJiYgKHIgPSBjbXAocGIsIGEpKSA8PSAwKQpAQCAt MTg5LDggKzI1MSw4IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCQlwYiArPSBlczsKIAkJcGMg LT0gZXM7CiAJfQotCXBuID0gKGNoYXIgKikgYSArIG4gKiBlczsKLQlkMSA9IE1pbihwYSAtIChj aGFyICopIGEsIHBiIC0gcGEpOworCXBuID0gKGNoYXIgKilhICsgbiAqIGVzOworCWQxID0gTWlu KHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsKIAl2ZWNzd2FwKGEsIHBiIC0gZDEsIGQxKTsKIAlk MSA9IE1pbihwZCAtIHBjLCBwbiAtIHBkIC0gZXMpOwogCXZlY3N3YXAocGIsIHBuIC0gZDEsIGQx KTsKQEAgLTIwMCwxMyArMjYyLDE0IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCXsKIAkJLyog UmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9uIHJpZ2h0IHBhcnRpdGlv biAqLwogCQlpZiAoZDEgPiBlcykKLQkJCXBnX3Fzb3J0KGEsIGQxIC8gZXMsIGVzLCBjbXApOwor CQkJcGdfcXNvcnRfcmVjdXJzaXZlKGEsIGQxIC8gZXMsIGRlcHRoIC0gMSwgc3dhcHR5cGUsIGVz LCBjbXApOwogCQlpZiAoZDIgPiBlcykKIAkJewogCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiBy ZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJCS8qIHBnX3Fzb3J0KHBuIC0gZDIsIGQy IC8gZXMsIGVzLCBjbXApOyAqLworCQkJLyogcGdfcXNvcnRfcmVjdXJzaXZlKHBuIC0gZDIsIGQy IC8gZXMsIGRlcHRoIC0gMSwgZXMsIGNtcCk7ICovCiAJCQlhID0gcG4gLSBkMjsKIAkJCW4gPSBk MiAvIGVzOworCQkJZGVwdGgtLTsKIAkJCWdvdG8gbG9vcDsKIAkJfQogCX0KQEAgLTIxNCwxNyAr Mjc3LDI2IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCXsKIAkJLyogUmVjdXJzZSBvbiByaWdo dCBwYXJ0aXRpb24sIHRoZW4gaXRlcmF0ZSBvbiBsZWZ0IHBhcnRpdGlvbiAqLwogCQlpZiAoZDIg PiBlcykKLQkJCXBnX3Fzb3J0KHBuIC0gZDIsIGQyIC8gZXMsIGVzLCBjbXApOworCQkJcGdfcXNv cnRfcmVjdXJzaXZlKHBuIC0gZDIsIGQyIC8gZXMsIGRlcHRoIC0gMSwgc3dhcHR5cGUsIGVzLCBj bXApOwogCQlpZiAoZDEgPiBlcykKIAkJewogCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiByZWN1 cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJCS8qIHBnX3Fzb3J0KGEsIGQxIC8gZXMsIGVz LCBjbXApOyAqLworCQkJLyogcGdfcXNvcnRfcmVjdXJzaXZlKGEsIGQxIC8gZXMsIGRlcHRoIC0g MSwgZXMsIGNtcCk7ICovCiAJCQluID0gZDEgLyBlczsKKwkJCWRlcHRoLS07CiAJCQlnb3RvIGxv b3A7CiAJCX0KIAl9CiB9CiAKKwordm9pZAorcGdfcXNvcnQodm9pZCAqYSwgY29uc3Qgc2l6ZV90 IHNpemUsIGNvbnN0IHNpemVfdCBlcywgaW50KCpjbXApIChjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKikpIHsKKwlpbnQgc3dhcHR5cGU7CisJU1dBUElOSVQoYSwgZXMpOworCXBnX3Fzb3J0X3Jl Y3Vyc2l2ZShhLCBzaXplLCAyICogbG9nKHNpemUpLCBzd2FwdHlwZSwgZXMsIGNtcCk7Cit9Owor CiAvKgogICogcXNvcnQgY29tcGFyYXRvciB3cmFwcGVyIGZvciBzdHJjbXAuCiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9wb3J0L3Fzb3J0X2FyZy5jIGIvc3JjL3BvcnQvcXNvcnRfYXJnLmMKaW5kZXgg MjRhY2QyYy4uYjc4NTc3OCAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvcXNvcnRfYXJnLmMKKysrIGIv c3JjL3BvcnQvcXNvcnRfYXJnLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICAqIFNVQ0ggREFNQUdFLgog ICovCiAKKworI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlICJjLmgiCiAKIApAQCAtMTAyLDM5 ICsxMDQsOTQgQEAgc3dhcGZ1bmMoY2hhciAqYSwgY2hhciAqYiwgc2l6ZV90IG4sIGludCBzd2Fw dHlwZSkKICNkZWZpbmUgdmVjc3dhcChhLCBiLCBuKSBpZiAoKG4pID4gMCkgc3dhcGZ1bmMoYSwg Yiwgbiwgc3dhcHR5cGUpCiAKIHN0YXRpYyBjaGFyICoKLW1lZDMoY2hhciAqYSwgY2hhciAqYiwg Y2hhciAqYywgcXNvcnRfYXJnX2NvbXBhcmF0b3IgY21wLCB2b2lkICphcmcpCittZWQzKGNoYXIg KmEsIGNoYXIgKmIsIGNoYXIgKmMsIHFzb3J0X2FyZ19jb21wYXJhdG9yIGNtcCwgdm9pZCogYXJn KQogewogCXJldHVybiBjbXAoYSwgYiwgYXJnKSA8IDAgPwotCQkoY21wKGIsIGMsIGFyZykgPCAw ID8gYiA6IChjbXAoYSwgYywgYXJnKSA8IDAgPyBjIDogYSkpCi0JCTogKGNtcChiLCBjLCBhcmcp ID4gMCA/IGIgOiAoY21wKGEsIGMsIGFyZykgPCAwID8gYSA6IGMpKTsKKwkJKGNtcChiLCBjICwg YXJnKSA8IDAgPyBiIDogKGNtcChhLCBjLCBhcmcpIDwgMCA/IGMgOiBhKSkKKwkJOiAoY21wKGIs IGMsIGFyZykgID4gMCA/IGIgOiAoY21wKGEsIGMsIGFyZykgPCAwID8gYSA6IGMpKTsKIH0KIAot dm9pZAotcXNvcnRfYXJnKHZvaWQgKmEsIHNpemVfdCBuLCBzaXplX3QgZXMsIHFzb3J0X2FyZ19j b21wYXJhdG9yIGNtcCwgdm9pZCAqYXJnKQorCisvKiBoZWFwIHNvcnQ6IGJhc2VkIG9uIHdpa2lw ZWRpYSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2hlYXBfc2hpZnRfZG93bih2b2lkICphLCBj b25zdCBzaXplX3Qgc3RhcnQsIGNvbnN0IHNpemVfdCBlbmQsCisJaW50IHN3YXB0eXBlLCBjb25z dCBzaXplX3QgZXMsIHFzb3J0X2FyZ19jb21wYXJhdG9yIGNtcCwgdm9pZCogYXJnKSB7CisJc2l6 ZV90IHJvb3QgPSBzdGFydDsKKworCXdoaWxlICgocm9vdCA8PCAxKSArIDEgPD0gZW5kKSB7CisJ CXNpemVfdCBjaGlsZCA9IChyb290IDw8IDEpICsgMTsKKworCQlpZiAoKGNoaWxkIDwgZW5kKSAm JiBjbXAoKGNoYXIqKWEgKyBjaGlsZCAqIGVzLCAoY2hhciopYSArIChjaGlsZCArIDEpKmVzLCBh cmcpIDwgMCkgeworCQkJY2hpbGQrKzsKKwkJfQorCisJCWlmIChjbXAoKGNoYXIqKWEgKyByb290 ICogZXMsIChjaGFyKilhICsgY2hpbGQgKiBlcywgYXJnKSA8IDApIHsKKwkJCXN3YXAoKGNoYXIq KWEgKyByb290ICogZXMsIChjaGFyKilhICsgY2hpbGQgKiBlcyk7CisJCQlyb290ID0gY2hpbGQ7 CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAoraGVhcF9zb3J0KHZvaWQgKmEsIGNvbnN0IHNpemVfdCBzaXplLCBpbnQgc3dhcHR5cGUs IGNvbnN0IHNpemVfdCBlcywgcXNvcnRfYXJnX2NvbXBhcmF0b3IgY21wLCB2b2lkKiBhcmcpIHsK KworCXNpemVfdCBzdGFydCwgZW5kOworCS8qIGRvbid0IGJvdGhlciBzb3J0aW5nIGFuIGFycmF5 IG9mIHNpemUgPD0gMSAqLworCWlmIChzaXplIDw9IDEpIHsKKwkJcmV0dXJuOworCX0KKworCWVu ZCA9IHNpemUgLSAxOworCisJLyogaGVhcGlmeSAqLworCXN0YXJ0ID0gKGVuZCAtIDEpID4+IDE7 CisJd2hpbGUgKDEpIHsKKwkJaGVhcF9zaGlmdF9kb3duKGEsIHN0YXJ0LCBlbmQsIHN3YXB0eXBl LCBlcywgY21wLCBhcmcpOworCisJCWlmIChzdGFydCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQor CisJCXN0YXJ0LS07CisJfQorCisJd2hpbGUgKGVuZCA+IDApIHsKKwkJc3dhcCgoY2hhciopYSAr IGVuZCAqIGVzLCAoY2hhciopYSk7CisJCWhlYXBfc2hpZnRfZG93bihhLCAwLCBlbmQgLSAxLCBz d2FwdHlwZSwgZXMsIGNtcCwgYXJnKTsKKwkJZW5kLS07CisJfQorfQorCitzdGF0aWMgdm9pZAor cGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZSh2b2lkICphLCBzaXplX3Qgbiwgc2l6ZV90IGRlcHRoLCBp bnQgc3dhcHR5cGUsIHNpemVfdCBlcywgcXNvcnRfYXJnX2NvbXBhcmF0b3IgY21wLCB2b2lkKiBh cmcpCiB7CiAJY2hhcgkgICAqcGEsCi0JCQkgICAqcGIsCi0JCQkgICAqcGMsCi0JCQkgICAqcGQs Ci0JCQkgICAqcGwsCi0JCQkgICAqcG0sCi0JCQkgICAqcG47CisJCSpwYiwKKwkJKnBjLAorCQkq cGQsCisJCSpwbCwKKwkJKnBtLAorCQkqcG47CiAJc2l6ZV90CQlkMSwKLQkJCQlkMjsKKwkJZDI7 CiAJaW50CQkJciwKLQkJCQlzd2FwdHlwZSwKLQkJCQlwcmVzb3J0ZWQ7CisgICAgcHJlc29ydGVk OwogCi1sb29wOlNXQVBJTklUKGEsIGVzKTsKK2xvb3A6CiAJaWYgKG4gPCA3KQogCXsKLQkJZm9y IChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBl cykKLQkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCwg YXJnKSA+IDA7Ci0JCQkJIHBsIC09IGVzKQorCQlmb3IgKHBtID0gKGNoYXIgKilhICsgZXM7IHBt IDwgKGNoYXIgKilhICsgbiAqIGVzOyBwbSArPSBlcykKKwkJCWZvciAocGwgPSBwbTsgcGwgPihj aGFyICopIGEgJiYgY21wKHBsIC0gZXMsIHBsLCBhcmcpID4gMDsKKwkJCQlwbCAtPSBlcykKIAkJ CQlzd2FwKHBsLCBwbCAtIGVzKTsKIAkJcmV0dXJuOwogCX0KLQlwcmVzb3J0ZWQgPSAxOworCisg IHByZXNvcnRlZCA9IDE7CiAJZm9yIChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAq KSBhICsgbiAqIGVzOyBwbSArPSBlcykKIAl7CiAJCWlmIChjbXAocG0gLSBlcywgcG0sIGFyZykg PiAwKQpAQCAtMTQ1LDExICsyMDIsMTggQEAgbG9vcDpTV0FQSU5JVChhLCBlcyk7CiAJfQogCWlm IChwcmVzb3J0ZWQpCiAJCXJldHVybjsKLQlwbSA9IChjaGFyICopIGEgKyAobiAvIDIpICogZXM7 CisgICAKKwkvKiBjb252ZXJ0IHRvIGhlYXAgc29ydCBpZiBleGNlZWQgZGVwdGggbGltaXQgKi8K KwlpZiAoIWRlcHRoKSB7CisJCWhlYXBfc29ydChhLCBuLCBzd2FwdHlwZSwgZXMsIGNtcCwgYXJn KTsKKwkJcmV0dXJuOworCX0KKworCXBtID0gKGNoYXIgKilhICsgKG4gLyAyKSAqIGVzOwogCWlm IChuID4gNykKIAl7Ci0JCXBsID0gKGNoYXIgKikgYTsKLQkJcG4gPSAoY2hhciAqKSBhICsgKG4g LSAxKSAqIGVzOworCQlwbCA9IChjaGFyICopYTsKKwkJcG4gPSAoY2hhciAqKWEgKyAobiAtIDEp ICogZXM7CiAJCWlmIChuID4gNDApCiAJCXsKIAkJCXNpemVfdAkJZCA9IChuIC8gOCkgKiBlczsK QEAgLTE2MSw4ICsyMjUsOCBAQCBsb29wOlNXQVBJTklUKGEsIGVzKTsKIAkJcG0gPSBtZWQzKHBs LCBwbSwgcG4sIGNtcCwgYXJnKTsKIAl9CiAJc3dhcChhLCBwbSk7Ci0JcGEgPSBwYiA9IChjaGFy ICopIGEgKyBlczsKLQlwYyA9IHBkID0gKGNoYXIgKikgYSArIChuIC0gMSkgKiBlczsKKwlwYSA9 IHBiID0gKGNoYXIgKilhICsgZXM7CisJcGMgPSBwZCA9IChjaGFyICopYSArIChuIC0gMSkgKiBl czsKIAlmb3IgKDs7KQogCXsKIAkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gY21wKHBiLCBhLCBh cmcpKSA8PSAwKQpAQCAtMTg5LDggKzI1Myw4IEBAIGxvb3A6U1dBUElOSVQoYSwgZXMpOwogCQlw YiArPSBlczsKIAkJcGMgLT0gZXM7CiAJfQotCXBuID0gKGNoYXIgKikgYSArIG4gKiBlczsKLQlk MSA9IE1pbihwYSAtIChjaGFyICopIGEsIHBiIC0gcGEpOworCXBuID0gKGNoYXIgKilhICsgbiAq IGVzOworCWQxID0gTWluKHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsKIAl2ZWNzd2FwKGEsIHBi IC0gZDEsIGQxKTsKIAlkMSA9IE1pbihwZCAtIHBjLCBwbiAtIHBkIC0gZXMpOwogCXZlY3N3YXAo cGIsIHBuIC0gZDEsIGQxKTsKQEAgLTIwMCwxMyArMjY0LDE0IEBAIGxvb3A6U1dBUElOSVQoYSwg ZXMpOwogCXsKIAkJLyogUmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9u IHJpZ2h0IHBhcnRpdGlvbiAqLwogCQlpZiAoZDEgPiBlcykKLQkJCXFzb3J0X2FyZyhhLCBkMSAv IGVzLCBlcywgY21wLCBhcmcpOworCQkJcGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZShhLCBkMSAvIGVz LCBkZXB0aCAtIDEsIHN3YXB0eXBlLCBlcywgY21wLCBhcmcpOwogCQlpZiAoZDIgPiBlcykKIAkJ ewogCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2Ug Ki8KLQkJCS8qIHFzb3J0X2FyZyhwbiAtIGQyLCBkMiAvIGVzLCBlcywgY21wLCBhcmcpOyAqLwor CQkJLyogcGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZShwbiAtIGQyLCBkMiAvIGVzLCBkZXB0aCAtIDEs IGVzLCBjbXAsIGFyZyk7ICovCiAJCQlhID0gcG4gLSBkMjsKIAkJCW4gPSBkMiAvIGVzOworCQkJ ZGVwdGgtLTsKIAkJCWdvdG8gbG9vcDsKIAkJfQogCX0KQEAgLTIxNCwxMyArMjc5LDIzIEBAIGxv b3A6U1dBUElOSVQoYSwgZXMpOwogCXsKIAkJLyogUmVjdXJzZSBvbiByaWdodCBwYXJ0aXRpb24s IHRoZW4gaXRlcmF0ZSBvbiBsZWZ0IHBhcnRpdGlvbiAqLwogCQlpZiAoZDIgPiBlcykKLQkJCXFz b3J0X2FyZyhwbiAtIGQyLCBkMiAvIGVzLCBlcywgY21wLCBhcmcpOworCQkJcGdfcXNvcnRfYXJn X3JlY3Vyc2l2ZShwbiAtIGQyLCBkMiAvIGVzLCBkZXB0aCAtIDEsIHN3YXB0eXBlLCBlcywgY21w LCBhcmcpOwogCQlpZiAoZDEgPiBlcykKIAkJewogCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiBy ZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJCS8qIHFzb3J0X2FyZyhhLCBkMSAvIGVz LCBlcywgY21wLCBhcmcpOyAqLworCQkJLyogcGdfcXNvcnRfYXJnX3JlY3Vyc2l2ZShhLCBkMSAv IGVzLCBkZXB0aCAtIDEsIGVzLCBjbXAsIGFyZyk7ICovCiAJCQluID0gZDEgLyBlczsKKwkJCWRl cHRoLS07CiAJCQlnb3RvIGxvb3A7CiAJCX0KIAl9CiB9CisKKwordm9pZAorcXNvcnRfYXJnKHZv aWQgKmEsIGNvbnN0IHNpemVfdCBzaXplLCBjb25zdCBzaXplX3QgZXMsIHFzb3J0X2FyZ19jb21w YXJhdG9yIGNtcCwgdm9pZCogYXJnKSB7CisJaW50IHN3YXB0eXBlOworCVNXQVBJTklUKGEsIGVz KTsKKwlwZ19xc29ydF9hcmdfcmVjdXJzaXZlKGEsIHNpemUsIDIgKiBsb2coc2l6ZSksIHN3YXB0 eXBlLCBlcywgY21wLCBhcmcpOworfTsKKwo= --_BE78F6CF-EC08-4DA1-B0B3-321D51FAF3D2_--