GNU logs - #16472, boring messages


Message sent to bug-gzip@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#16472: PD: gzip - tree overflow protection algorithm doubt/suggestion
Resent-From: "Krzysztof Rybak" <krzysztofrybak6@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gzip@HIDDEN
Resent-Date: Thu, 16 Jan 2014 23:52:02 +0000
Resent-Message-ID: <handler.16472.B.138991629913234 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 16472
X-GNU-PR-Package: gzip
X-GNU-PR-Keywords: 
To: 16472 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-gzip@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.138991629913234
          (code B ref -1); Thu, 16 Jan 2014 23:52:02 +0000
Received: (at submit) by debbugs.gnu.org; 16 Jan 2014 23:51:39 +0000
Received: from localhost ([127.0.0.1]:54198 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.80)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1W3wim-0003RG-64
	for submit <at> debbugs.gnu.org; Thu, 16 Jan 2014 18:51:38 -0500
Received: from eggs.gnu.org ([208.118.235.92]:47842)
 by debbugs.gnu.org with esmtp (Exim 4.80)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZx-00030T-Ei
 for submit <at> debbugs.gnu.org; Thu, 16 Jan 2014 18:42:33 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZq-0005Co-6W
 for submit <at> debbugs.gnu.org; Thu, 16 Jan 2014 18:42:29 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: *
X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_50,
 FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,T_DKIM_INVALID autolearn=disabled
 version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:38418)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZq-0005Ck-2W
 for submit <at> debbugs.gnu.org; Thu, 16 Jan 2014 18:42:22 -0500
Received: from eggs.gnu.org ([2001:4830:134:3::10]:49550)
 by lists.gnu.org with esmtp (Exim 4.71)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZj-0003w0-PC
 for bug-gzip@HIDDEN; Thu, 16 Jan 2014 18:42:21 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZd-0005BV-La
 for bug-gzip@HIDDEN; Thu, 16 Jan 2014 18:42:15 -0500
Received: from mx3.wp.pl ([212.77.101.7]:60584)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <krzysztofrybak6@HIDDEN>) id 1W3wZc-0005B6-RL
 for bug-gzip@HIDDEN; Thu, 16 Jan 2014 18:42:09 -0500
Received: (wp-smtpd smtp.wp.pl 22258 invoked from network);
 16 Jan 2014 22:55:26 +0100
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wp.pl; s=1024a;
 t=1389909326; bh=MKNIhoFDQL10QkUBa8P81rTVKejLIfcM4ht8i7kZ+uI=;
 h=From:To:Subject;
 b=Hy4M0yOHaoDZLTBVjT0vg6OA4EyBuonOjNP8qRHJKWwzxp/sFpTICXnbEm7aHOpEc
 Cr2UQwx2Y4DXOxIkDUN3y2GKmYm49uVhRvBMHUZ7NGcA2rQbIOoEkOVUrU5Kzpg+A/
 G1MB3eQPmHk/Bl44ivkgAy5+hrO0OE3apYCU2w2k=
Received: from out.poczta.wp.pl ([212.77.101.240])
 (envelope-sender <krzysztofrybak6@HIDDEN>)
 by smtp.wp.pl (WP-SMTPD) with SMTP
 for <bug-gzip@HIDDEN>; 16 Jan 2014 22:55:26 +0100
Date: Thu, 16 Jan 2014 22:55:25 +0100
From: "Krzysztof Rybak" <krzysztofrybak6@HIDDEN>
Message-ID: <52d8554de71410.11082928@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="part52d8554de70428.92881097"
X-Mailer: Interfejs WWW nowej poczty Wirtualnej Polski
X-User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686;
 rv:26.0) Gecko/20100101 Firefox/26.0
Organization: Poznaj Poczte WP http://poczta.wp.pl/info-start.html
X-WP-IP: 79.190.160.34
X-WP-AV: skaner antywirusowy poczty Wirtualnej Polski S. A.
X-WP-SPAM: NO 0000000 [ASMk]                               
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
 (bad octet value).
X-Received-From: 2001:4830:134:3::11
X-Spam-Score: -3.8 (---)
X-Mailman-Approved-At: Thu, 16 Jan 2014 18:51:34 -0500
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.8 (---)

This is a multi-part message in MIME format.

--part52d8554de70428.92881097
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Hi,
I sent a message to the author of gzip but without response. Maybe You can help me with my doubts.

best regards,
Krzysztof

Dnia Czwartek, 2 Stycznia 2014 22:41 Krzysztof Rybak <krzysztofrybak6@HIDDEN> napisał(a) 
> Hello Jean-loup,

> I'm preparing my own algorithm based on Huffman compression method and deflate format. 

> 

> I have doubts if method implemented in gzip program is 100% correct. 

> I mean tree overflow protection:

> just to remind: in deflate (RFC1951) and therefore in gzip there is creating tree for lit/len, dist (maximum length of codes is 15 bits) and code table (maximum length is 7 bits). In case of too long code word, there is tree modification implemented in gen_bitlen(desc) function (trees.c):

> 

>     do {

>         bits = max_length-1;

>         while (bl_count[bits] == 0) bits--;

>         bl_count[bits]--;      /* move one leaf down the tree */

>         bl_count[bits+1] += 2; /* move one overflow item as its brother */

>         bl_count[max_length]--;

>         overflow -= 2;

>     } while (overflow > 0);

> 

> I'm not sure if this method is correct for original code length greater than 8 ( for maximum 7 ) and than 16 ( for maximum 15): even not every time. I couldn't obtain such symbol distribution to generate so long codes on real files indeed as such situation is extremely rare but generated it by modifying software:

> 

> just before mentioned above overflow protection I changed bl_count histogram to one as for Fibonacci numbers (which is the worst for Huffman overflow - the longest codes, please refer to attached image): in my case I modified tree when maximum length is 7 bits (max_length = 7 is for code book compression):

>     bl_count[0] = 1;

>     bl_count[1] = 1;

>     bl_count[2] = 1;

>     bl_count[3] = 1;

>     bl_count[4] = 1;

>     bl_count[5] = 1;

>     bl_count[6] = 1;

>     bl_count[7] = 1;

>     bl_count[8] = 1;

>     bl_count[9] = 1;

>     bl_count[10] = 2;

>     overflow = 4;

> 

> in fact in gzip there is setting length = 7 when it's longer than 7:

> if (bits > max_length){

>         bits = max_length;

>         overflow++;

> }

> 

> ,so my histogram looks like:

>     bl_count[0] = 1;

>     bl_count[1] = 1;

>     bl_count[2] = 1;

>     bl_count[3] = 1;

>     bl_count[4] = 1;

>     bl_count[5] = 1;

>     bl_count[6] = 1;

>     bl_count[7] = 5;

>     bl_count[8] = 0;

>     bl_count[9] = 0;

>     overflow = 4;

> and after overflow protection method from gzip:

>     bl_count[0] = 1

>     bl_count[1] = 1

>     bl_count[2] = 1

>     bl_count[3] = 1

>     bl_count[4] = 1

>     bl_count[5] = 0

>     bl_count[6] = 2

>     bl_count[7] = 5

> , which is incorrect Huffman tree: too many elements. 

> 

> trees.c with my modification and printf() function is attached. I compress obj2 from Calgary corpus.

> I know my description may look unclear, but I hope You will help me/clarify my doubts.  

> 

> best regards,

> Krzysztof Rybak


--part52d8554de70428.92881097
Content-Type: image/png; name="=?iso-8859-2?B?Rmlib25hY2NpLnBuZw==?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?iso-8859-2?B?Rmlib25hY2NpLnBuZw==?="

iVBORw0KGgoAAAANSUhEUgAABQAAAAMgCAYAAAB8mM/7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
WXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3gECFAYUJCZOkwAAIABJREFUeNrs3T1y4trahmH1Vw53
zJAIGcCOiE7EcIh2RNQDIGRIxCfXF5yDj0xjI4F+1np0XVWustsC26s6uut9pV9t27YNAAAAABDp
/xwBAAAAAOQSAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAA
AIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAE
AAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBM
AAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAA
EEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAA
AAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmA
AAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACC
CYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAA
AIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAA
AAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDAB
EAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABA
MAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAA
AEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgAC
AAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgm
AAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAA
CCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAA
AAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRA
AAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADB
BEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAA
AMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgA
AAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgA
CAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAg
mAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAA
ACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwAB
AAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQT
AAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAA
BBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAA
AAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAECwD0cAAPW7Xq8OAZjEZrNxCABQOROAAAAA
ABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAA
AAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACDYhyMAANbicDj8+P3j8eiQAACI86tt29YxAEDdrter
Q/jGs+j3HTEQ/mOz2TgEAKicAAgAAQTAx+7j3+l0+vH6/X7/5WsREARAAEggAAJAAAHwT9349yz8
3euGQBGQtRMAAaB+HgICAMR5J/7dv+bVFWIAACiFAAgARHk3/j16rQgIAEDNBEAAIMZY8e/Re4iA
AADU6sMRAABp7uPf33///cc1v3///vJ1975/3defTqc/Hg4CAAA1EQABgAh9JvTuo98rP8NDQQAA
qI0VYAAgynfTf//8889o7wkAADUxAQgArMK//vWvz8//+eef5q+//vr82oovAADJTAACALH+/e9/
f37++/fvzxXgbgwEAIB0AiAAEOuvv/76Ev66bnHwNv1nzRcAgFQCIACwGt2JwO4KcNN8XQO2EgwA
QBL3AAQAot0eAvL79+8/ol/TfJ38Mw0IAEAiE4AAQJT76b3b+u/ff//9JQa+854AAFCTX23bto4B
AOp2vV4dQtM0h8OhaZrxJ/huAfB4PDpkVmez2TgEAKicCUAAIM6YE3um/wAAqJ0ACADE6E7ojRHu
uu9h+g8AgFoJgABAlLEioPgHAEAKARAAiPNuBBT/AABI4iEgABDAQ0Aeuz0U5ObZw0HuY6H4Bx4C
AgAJBEAACCAAfu8+AvYl/sF/CIAAUD8rwABAtCEhT/QDACDRhyMAAJLdJgDFPQAA1soEIABAxy0U
vro6DAAApREAAYBYpv8AAEAABABCvRP/TAECAJBEAAQA4owx+ScCAgCQQgAEAAAAgGACIAAQZcz7
/pkCBAAggQAIAMTw0A8AAPiTAAgA8ANTgAAA1E4ABAAimP4DAIDHBEAAoHpTxz9TgAAA1EwABADo
QQQEAKBWAiAAUDWrvwAA8DMBEACo1tzxzxQgAAA1EgABgCqZ/AMAgH4EQACAAUwBAgBQGwEQAKjO
0tN/IiAAADURAAGAqlj9BQCAYQRAAIAXmAIEAKAWAiAAUA3TfwAAMJwACABUocT4ZwoQAIAaCIAA
AAAAEEwABACKV/LqrylAAABKJwACAEWr4b5/IiAAACX7cAQAQKnSHvrxLBB6uAkAAFP41bZt6xgA
oG7X6zXub+rGslrC2KNg+epUoBhIKTabjUMAgMoJgAAQoKYAeLlcel13Pp+bpmma3W7X6/rtdrv4
33YfLe/j3+l0+vH1+/3+y9ciICUQAAGgfgIgAARIDIBDlRAAm+bxxN+z8HevGwJFQJYmAAJA/TwE
BABgRPfBbmj8u3+NB4sAAPAuARAAYETdYPdK/Hv0WhEQAIB3CIAAACMZK/49eg8REACAVwmAAAAj
GyP+TfFeAACskwAIABThfD5/Pvm3RnNM6JkCBADgFR+OAABgPI8m9rpP9b2/5qfvdf/t/joAAOjL
BCAAwMROp9PnR9N8jX4/fQ8AAMZgAhAAKEp3DXi32zkQAAB4kwlAAKAooh8AAIzLBCAAwAzu1377
fg8AAN5lAhAAYAY/3efPPQABAJiSAAgAMKIpAp4oCADAOwRAAIARHI/HiJ8BAEAe9wAEAIrQffhH
7Q8C2e/3X+7l92jlt8/3Hn0fAACG+tW2besYAKBu1+u1mt/1crlM8r7b7baIv+9wOHx+/u4DPbrx
z/QfS9lsNg4BACpnBRgAYETdUPfO9J74BwDAWARAAICRvRsBxT8AAMZkBRgAAtS0Arwm3XXgpnm+
EnwfC8U/SmAFGADqJwACQAABsFz3EbAv8Y9SCIAAUD8BEAACCIBl6xsBRT9KJAACQP0EQAAIIACW
6xb/nsW9vtfB3ARAAKifh4AAAAAAQDABEABgIkOm+m7XvHrPQAAA+I4ACAAwASu9AACUQgAEABjZ
q/HPFCAAAFMQAAEAAAAgmAAIADCid1d/TQECADA2ARAAYCTu+wcAQIkEQACAwpgCBABgTAIgAMAI
TP8BAFAqARAA4E1TxD9TgAAAjEUABAAAAIBgAiAAwBumXP01BQgAwBgEQACAF7nvHwAANRAAAQBe
MFf8MwUIAMC7BEAAAAAACCYAAgAMNPfqrylAAADeIQACAAzgvn8AANRGAAQAqIApQAAAXiUAAgD0
ZPoPAIAaCYAAAD2UEP9MAQIA8AoBEAAAAACCCYAAAE+UtPprChAAgKEEQACAH7jvHwAAtfvVtm3r
GACgbtfr1SFMoOT49+x3ezYhKGjS12azcQgAULkPRwAA8KcaV2yH/M7da8VAAIBsJgABIIAJwP4u
l0uv687nc9M0TbPb7Xpdv91uZ/9bulOA9/HvdDr9+Nr9fv/laxGQ75gABID6CYAAEEAA7K9vABxq
yQDY9Sz83euGQBGQRwRAAKifh4AAAFTqPtgNjX/3r/FkYQCATAIgAEClusHulfj36LUiIABAHgEQ
AKBCY8W/R+8hAgIAZBEAAQAqNkb8m+K9AAAox4cjAACoy7MJvfsn/N6Hve73v4t+h8PBQ0EAAEKY
AAQAaJrmfD7/8VG67+Ld6XT6/Giar8Hv9vmj7/30ngAA1EsABABW7xb7drtds9vtHAgAAFEEQAAA
AAAIJgACAIS6X/cFAGCdBEAAgEDiHwAANwIgALB6t/v+1fLwj2fEPwAAugRAAIDmfw8AqekhIPdP
8C31PQEAWJYACACsXm2Tf8fjsdd1+/3+8+PmNhX4bEqw788AAKB8v9q2bR0DANTter06hJ4ul8vD
f78PgEMnAbfb7ax/x+Fw+Px8rFXfbigUALnZbDYOAQAqJwACQAABsL/vAuC75g6ATTNuBBT/+I4A
CAD1swIMAFCpbqh759594h8AQDYBEACgYu9GQPEPACCfFWAACGAFmO46cNM8Xwm+j4XiH9+xAgwA
9RMAASCAAEjT/BkB+xL/+IkACAD1swIMABBiSMg7Ho+f178aDgEAqMOHIwAAyHALeSb6AADoMgEI
ALBipgABAPIJgAAAAUz/AQDwHQEQAKBy78Y/U4AAANkEQACAipn8AwDgGQEQAABTgAAAwQRAAIBK
mf4DAKAPARAAoEJTxD9TgAAAmQRAAAA+iYAAAHkEQACAylj9BQBgCAEQAKAic8Q/U4AAAFkEQAAA
AAAIJgACAFRiztVfU4AAADkEQACACrjvHwAArxIAAQAKt1T8MwUIAJBBAAQAAACAYAIgAEDBll79
NQUIAFA/ARAAoFDu+wcAwBgEQAAAfmQKEACgbgIgAECBSpv+EwEBAOolAAIAFMbqLwAAYxIAAQDo
xRQgAECdBEAAgIKY/gMAYGwCIABAIWqIf6YAAQDq8+EIAACWlzL59ywMmmwEAJjfr7ZtW8cAAHW7
Xq8OoWLdaFZLIOsGy1enAcXAOmw2G4cAAJUTAAEggABYpsvl0uu68/ncNE3T7Ha7Xtdvt9vF/7bv
ot/pdPrxdfv9/svXImD5BEAAqJ8ACAABBMAy9Q2AQ5UQAJvmawR8Fv7udUOgCFg2ARAA6uchIAAA
DPZO/Lt/jQeKAABMSwAEAGCQd+Pfo9eKgAAA07ECDAABrACXKXEF+Kf4d1vr7f77/T3/HgVD68Bl
swIMAPUzAQgAsLDz+fz5UYvv4t+j624f3133zhQhAADPCYAAAAvqPgG471OAl/LTmu5YEc8qMADA
+ARAAAAGmWJizxQgAMB0BEAAgIV0V35rWwEe6tH9AQEAmIcACACwkO7Kbw0rwK8S/wAAliUAAgAw
GfEPAGB5AiAAAAAABPtwBAAATO02Cdg0pgEBAOYmAAIAMMh+v38Y8fr+23fvCQDANKwAAwAsqKaH
fxyPx4ifAQCwNgIgAACDjTmxZ/oPAGBaAiAAAL11J/TGCHfd9zD9BwAwDQEQAIBBxoqA4h8AwDwE
QAAABns3Aop/AADz+dW2besYAKBu1+vVIbCIw+Hw5etnT/29j4XiX/k2m41DAIDKCYAAEEAAZEn3
EbAv8a8OAiAA1E8ABIAAAiBLGxIBhb+6CIAAUD8BEAACCIAs6Rb/+oS9IddSBgEQAOrnISAAAAAA
EEwABADgZUMn+m7XvXrfQAAAhhMAAQB4iXVeAIA6CIAAAAz2TvwzBQgAMC8BEAAAAACCCYAAAAwy
xuqvKUAAgPkIgAAA9Dbmff9EQACAeQiAAAAAABBMAAQAoJcpnvprChAAYHoCIAAAT00R/wAAmIcA
CADAokwBAgBMSwAEAOBHpv8AAOomAAIA8K254p8pQACA6QiAAAA8NPfknwgIADANARAAAAAAggmA
AAD8Yan7/pkCBAAYnwAIAMAXHvoBAJBFAAQAoCimAAEAxiUAAgDwyfQfAEAeARAAgKZpyop/pgAB
AMYjAAIAUCQREABgHAIgAABWfwEAggmAAAArV3L8MwUIAPA+ARAAYMVM/gEA5BMAAQBWqpapOlOA
AADv+XAEAABZLpfLoOt3u12v12y328X/tsPh0DsImmoEAPiPX23bto4BAOp2vV4dAp+GBsC+lg6A
70wAioGv22w2DgEAKmcCEACAKp1Opx+/v9/vPz/vTg4CAKyNCUAACGACkK7ECcDu9N+z8HevGwJF
wOFMAAJA/TwEBACAor0T/+5f40EiAMAaCYAAABTr3fj36LUiIACwNgIgAABFGiv+PXoPERAAWBMB
EACAoo0R/6Z4LwCAWngKMADAipzP58/Pd7tdsb/nswm97oM9bobGPU8GBgDWwgQgAMBK3OLfLfx1
Y2Cpvot6p9Pp82Os9wQASCUAAgCsTA3hDwCA8VgBBgBYmZJXf4e6rQKb6gMA+J4JQAAAAAAIJgAC
AKxE995/tw8AAPJZAQYAWJGk9V8AAPoxAQgAQLFu9/j76XtD7//303sCACQSAAEAKM7xeIz4GQAA
JRAAAQAo2ncTe6fTyfQfAEAPAiAAAEXqTuiNEe6672H6DwBYk19t27aOAQDqdr1eHQKxDofD5+dD
J/5uxL/XbTYbhwAAlTMBCABA0d6dBBT/AIC1MwEIAAFMALIG3UnApvl5GvBRKBT/XmMCEADqJwAC
QAABkLW4j4B9iX+vEwABoH5WgAEAqMYrIU/8AwDW7sMRAABQi9sEYJ+o9+q0IABAGhOAAABEukVC
IRAAWDsBEACAKgyZ/gMA4H8EQAAAivdq/DMFCAAgAAIAUDiTfwAA7xEAAQCIZgoQAFg7ARAAgGKN
Nf0nAgIAayYAAgBQJKu/AADjEAABAFgFU4AAwFoJgAAAFMf0HwDAeARAAACKMmX8MwUIAKyRAAgA
AAAAwQRAAACKMcfqrylAAGBtBEAAAIow533/REAAYE0EQAAAFuehHwAA0xEAAQBYJVOAAMBaCIAA
ACzK9B8AwLQEQAAAFrN0/DMFCACsgQAIAAAAAMEEQAAAFlHK6q8pQAAgnQAIAMDsSrvvnwgIACQT
AAEAAAAgmAAIAMCsSn3qrylAACCVAAgAwGxKjX8AAMl+tW3bOgYAqNv1enUIFK+W+Pfo93w2FZgc
NDebjf+8AFC5D0cAAMDUalyrHfI7d6813QgAlMYEIAAEMAHIUi6XS6/rzudz0zRNs9vtel2/3W4X
/bvu49/pdPrx+v1+/+XrpAhoAhAA6icAAkAAAZCl9A2AQy0ZALvx71n4u9cNgSkRUAAEgPp5CAgA
APzXO/Hv/jWeJgwAlEIABACA5v349+i1IiAAUAIBEACA1Rsr/j16DxEQAFiaAAgAAP/V52Eft493
3wsAYC4CIAAAszifz59PAy7JHBN6pgABgCUJgAAA0EwzsWcKEAAogQAIAAA99Fn7BQAo0YcjAABg
KiWu/AIArI0JQAAAJnGLf7vdrtntdlX/LbfpPyu9AECNBEAAAOipuwZsJRgAqIUVYAAAeKI7+Wca
EACojQlAAABoppnoMyUIAJRAAAQAYBK3+/6dz+eiHwZyPB4HXX86nQZP/w39GQAAY7ICDADAZGp7
+Md+vx9ttdf0HwBQChOAAACsXndCb4xw130P038AwNIEQAAAaMaLgOIfAFAaARAAAP7r3Qgo/gEA
JfrVtm3rGACgbtfr1SHAiA6Hw5evn90X8D4WJsW/zWbjPwQAVE4ABIAAAiCM7z4C9pU2+ScAAkD9
rAADAMADQ0KedV8AoGQmAAEggAlAGN9tAnBI3HvlNaUzAQgA9TMBCAAAAADBBEAAALjz6iTf7fpX
7x8IADAFARAAADreXeMVAQGA0giAAADwX4n38AMAEAABAGBkpgABgJIIgAAA0Jj+AwByCYAAAKze
FPHPFCAAUAoBEAAAJiICAgAlEAABAFg1q78AQDoBEACA1Zoj/pkCBACWJgACAMDEREAAYEkCIAAA
q2T1FwBYCwEQAIDVWSL+mQIEAJYiAAIAsCom/wCAtREAAQBgJqYAAYAlCIAAAKxGCdN/IiAAMDcB
EACAVbD6CwCslQAIAAAzMwUIAMxJAAQAIF6J038iIAAwFwEQAIBoVn8BgLUTAAEAYCGmAAGAOXw4
AgAAUtU0/Xc4HJrj8fg0BppkBACG+tW2besYAKBu1+vVIcCd2uLfK+b42zabjf9MAFA5ARAAAgiA
8FXN8e90Ov14/X6///L11H+jAAgA9RMAASCAAAj/0w1qpQfA7u/6LPzd64bAKf9OARAA6icAAkAA
AZA1uFwuva47n89N0zTNbrfrdf12u13k73kn/t3MEQEFQACon6cAAwAQZbfb9Y5/Sxkj/t2/1pOE
AYDvCIAAADCjseLfo/cQAQGARwRAAABYwBjxb4r3AgDyfDgCAACYR58Jvfun/A6Ne4fDoYqnHwMA
8zEBCAAAM/sp6p1Op8+PpvkzCL7yngDAugmAAAAAABBMAAQAAACAYO4BCABA9c7n85evd7td9X/T
bfXXai8A8C4BEACAqt3iX0L0uxH/AIAxWQEGAICCiH8AwNgEQAAAmFnfJ/su/Z4AQAYBEAAAZnI8
Hntfu9/vPz+m+hkAwDq4ByAAAFXb7XbN+Xz+8iCQGu4HuN/vH675vrL6a/oPAPjJr7ZtW8cAAHW7
Xq8OgXiXy2WS991ut7P/LYfD4fPzd+/1141/U0z/bTYb//kAoHJWgAEAYGbdUPfO9N7U8Q8AyCAA
AgDAAt6NgOIfANCXFWAACGAFmDVIWgHu6q4DN83zleD7WDh1/LMCDAD1EwABIIAAyBqkBsCm+TMC
9jXH5J8ACAD1EwABIIAACPUbGgHnWvsVAAGgfh+OAAAAlnWLf32i3qvTggDAenkICAAAVOQWCYVA
AKAvARAAABY0ZPoPAOAVAiAAACxE/AMA5iAAAgDAAt6Jf9aAAYAhBEAAAAAACCYAAgDAzMZY/TUF
CAD0JQACAMCM3PcPAJibAAgAAAAAwQRAAACYydjTf9aAAYA+BEAAAJiB1V8AYCkCIAAAAAAEEwAB
AGBiU07/WQMGAJ4RAAEAYEJWfwGApQmAAAAwkbninylAAOAnAiAAAAAABBMAAQBgAlZ/AYBSCIAA
ADCyJeKfNWAA4DsCIAAAAAAEEwABAGBEVn8BgNIIgAAAMJKl4581YADgEQEQAAAAAIIJgAAAMIJS
Vn9NAQIA9wRAAAB4k/v+AQAlEwABAOAN4h8AUDoBEAAAXlTqmq01YACg68MRAADAV5fLZdD1u92u
12u22+0sv0/f1776+wAAdREAAQDgRbvdzu8GABTPCjAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAA
AAgmAAIAQA/n87k5n88OAgCojgAIAAAAAME+HAEAANSrO5W42+0cCADwBxOAAAAwwG0VuIR14Nvv
cAt/VpQBgEcEQAAAGKiU4Cb8AQB9CIAAADBASWu29xOAAACPCIAAAAAAEEwABACAynVXgK0DAwD3
PAUYAAAGKOmpu1Z/AYA+BEAAAOhBbAMAamUFGAAAAACCCYAAAAAAEEwABAAAAIBgv9q2bR0DANTt
er06BGASm83GIQBA5UwAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAATzFGAAAAAA
CGYCEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIA
AABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYA
AgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAI
JgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAA
AAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAA
AAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEE
QAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAA
wQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAA
AADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmnQKalAAAELklEQVSAAAAAABBMAAQAAACAYAIgAAAA
AAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAAAIBgAiAA
AAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAEAAAAgGAC
IAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBMAAQAAACA
YAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAAEEwABAAA
AIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAAAAAQTAAE
AAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmAAAAAABBM
AAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACCCYAAAAAA
EEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAAAIIJgAAA
AAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAAAAAAggmA
AAAAABBMAAQAAACAYAIgAAAAAAQTAAEAAAAgmAAIAAAAAMEEQAAAAAAIJgACAAAAQDABEAAAAACC
CYAAAAAAEEwABAAAAIBgAiAAAAAABBMAAQAAACCYAAgAAAAAwQRAAAAAAAgmAAIAAABAMAEQAAAA
AIIJgAAAAAAQTAAEAAAAgGACIAAAAAAEEwABAAAAIJgACAAAAADBBEAAAAAACCYAAgAAAEAwARAA
gP9vxw5kAAAAAAb5W9/jK4wAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgTgAAAAAAwJgABAAAAYEwAAgAAAMCYAAQAAACAMQEIAAAAAGMC
EAAAAADGBCAAAAAAjAlAAAAAABgLpvtOWv0JxzcAAAAASUVORK5CYII=

--part52d8554de70428.92881097
Content-Type: text/x-csrc; name="=?iso-8859-2?B?dHJlZXMuYw==?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?iso-8859-2?B?dHJlZXMuYw==?="

LyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBIdWZmbWFuIGNvZGluZwog
KiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5MyBKZWFuLWxvdXAgR2FpbGx5CiAqIFRoaXMgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRl
ciB0aGUKICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzZWUgdGhl
IGZpbGUgQ09QWUlORy4KICovCgovKgogKiAgUFVSUE9TRQogKgogKiAgICAgIEVuY29kZSB2YXJp
b3VzIHNldHMgb2Ygc291cmNlIHZhbHVlcyB1c2luZyB2YXJpYWJsZS1sZW5ndGgKICogICAgICBi
aW5hcnkgY29kZSB0cmVlcy4KICoKICogIERJU0NVU1NJT04KICoKICogICAgICBUaGUgUEtaSVAg
ImRlZmxhdGlvbiIgcHJvY2VzcyB1c2VzIHNldmVyYWwgSHVmZm1hbiB0cmVlcy4gVGhlIG1vcmUK
ICogICAgICBjb21tb24gc291cmNlIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc2hvcnRlciBi
aXQgc2VxdWVuY2VzLgogKgogKiAgICAgIEVhY2ggY29kZSB0cmVlIGlzIHN0b3JlZCBpbiB0aGUg
WklQIGZpbGUgaW4gYSBjb21wcmVzc2VkIGZvcm0KICogICAgICB3aGljaCBpcyBpdHNlbGYgYSBI
dWZmbWFuIGVuY29kaW5nIG9mIHRoZSBsZW5ndGhzIG9mCiAqICAgICAgYWxsIHRoZSBjb2RlIHN0
cmluZ3MgKGluIGFzY2VuZGluZyBvcmRlciBieSBzb3VyY2UgdmFsdWVzKS4KICogICAgICBUaGUg
YWN0dWFsIGNvZGUgc3RyaW5ncyBhcmUgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSBsZW5ndGhzIGlu
CiAqICAgICAgdGhlIFVOWklQIHByb2Nlc3MsIGFzIGRlc2NyaWJlZCBpbiB0aGUgImFwcGxpY2F0
aW9uIG5vdGUiCiAqICAgICAgKEFQUE5PVEUuVFhUKSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIFBL
V0FSRSdzIFBLWklQIHByb2dyYW0uCiAqCiAqICBSRUZFUkVOQ0VTCiAqCiAqICAgICAgTHluY2gs
IFRob21hcyBKLgogKiAgICAgICAgICBEYXRhIENvbXByZXNzaW9uOiAgVGVjaG5pcXVlcyBhbmQg
QXBwbGljYXRpb25zLCBwcC4gNTMtNTUuCiAqICAgICAgICAgIExpZmV0aW1lIExlYXJuaW5nIFB1
YmxpY2F0aW9ucywgMTk4NS4gIElTQk4gMC01MzQtMDM0MTgtNy4KICoKICogICAgICBTdG9yZXIs
IEphbWVzIEEuCiAqICAgICAgICAgIERhdGEgQ29tcHJlc3Npb246ICBNZXRob2RzIGFuZCBUaGVv
cnksIHBwLiA0OS01MC4KICogICAgICAgICAgQ29tcHV0ZXIgU2NpZW5jZSBQcmVzcywgMTk4OC4g
IElTQk4gMC03MTY3LTgxNTYtNS4KICoKICogICAgICBTZWRnZXdpY2ssIFIuCiAqICAgICAgICAg
IEFsZ29yaXRobXMsIHAyOTAuCiAqICAgICAgICAgIEFkZGlzb24tV2VzbGV5LCAxOTgzLiBJU0JO
IDAtMjAxLTA2NjcyLTYuCiAqCiAqICBJTlRFUkZBQ0UKICoKICogICAgICB2b2lkIGN0X2luaXQg
KHVzaCAqYXR0ciwgaW50ICptZXRob2RwKQogKiAgICAgICAgICBBbGxvY2F0ZSB0aGUgbWF0Y2gg
YnVmZmVyLCBpbml0aWFsaXplIHRoZSB2YXJpb3VzIHRhYmxlcyBhbmQgc2F2ZQogKiAgICAgICAg
ICB0aGUgbG9jYXRpb24gb2YgdGhlIGludGVybmFsIGZpbGUgYXR0cmlidXRlIChhc2NpaS9iaW5h
cnkpIGFuZAogKiAgICAgICAgICBtZXRob2QgKERFRkxBVEUvU1RPUkUpCiAqCiAqICAgICAgdm9p
ZCBjdF90YWxseSAoaW50IGRpc3QsIGludCBsYyk7CiAqICAgICAgICAgIFNhdmUgdGhlIG1hdGNo
IGluZm8gYW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRzLgogKgogKiAgICAgIGxvbmcgZmx1
c2hfYmxvY2sgKGNoYXIgKmJ1ZiwgdWxnIHN0b3JlZF9sZW4sIGludCBlb2YpCiAqICAgICAgICAg
IERldGVybWluZSB0aGUgYmVzdCBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgYmxvY2s6IGR5bmFt
aWMgdHJlZXMsCiAqICAgICAgICAgIHN0YXRpYyB0cmVlcyBvciBzdG9yZSwgYW5kIG91dHB1dCB0
aGUgZW5jb2RlZCBibG9jayB0byB0aGUgemlwCiAqICAgICAgICAgIGZpbGUuIFJldHVybnMgdGhl
IHRvdGFsIGNvbXByZXNzZWQgbGVuZ3RoIGZvciB0aGUgZmlsZSBzbyBmYXIuCiAqCiAqLwoKI2lu
Y2x1ZGUgPGN0eXBlLmg+CgojaW5jbHVkZSAidGFpbG9yLmgiCiNpbmNsdWRlICJnemlwLmgiCgoj
aWZkZWYgUkNTSUQKc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkSWQ6IHRyZWVzLmMsdiAwLjEyIDE5
OTMvMDYvMTAgMTM6Mjc6NTQgamxvdXAgRXhwICQiOwojZW5kaWYKCi8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQogKiBDb25zdGFudHMKICovCgojZGVmaW5lIE1BWF9CSVRTIDE1Ci8qIEFsbCBjb2RlcyBt
dXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwoKI2RlZmluZSBNQVhfQkxfQklUUyA3Ci8q
IEJpdCBsZW5ndGggY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CTF9CSVRTIGJpdHMgKi8KCiNk
ZWZpbmUgTEVOR1RIX0NPREVTIDI5Ci8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3Vu
dGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqLwoKI2RlZmluZSBMSVRFUkFMUyAgMjU2
Ci8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqLwoKI2RlZmluZSBFTkRfQkxPQ0sg
MjU2Ci8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi8KCiNkZWZpbmUgTF9DT0RFUyAoTElU
RVJBTFMrMStMRU5HVEhfQ09ERVMpCi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2Rl
cywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqLwoKI2RlZmluZSBEX0NPREVTICAgMzAK
LyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCgojZGVmaW5lIEJMX0NPREVTICAxOQovKiBu
dW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi8KCgpsb2Nh
bCBpbnQgbmVhciBleHRyYV9sYml0c1tMRU5HVEhfQ09ERVNdIC8qIGV4dHJhIGJpdHMgZm9yIGVh
Y2ggbGVuZ3RoIGNvZGUgKi8KICAgPSB7MCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwz
LDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwfTsKCmxvY2FsIGludCBuZWFyIGV4dHJhX2RiaXRzW0Rf
Q09ERVNdIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2UgY29kZSAqLwogICA9IHswLDAs
MCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEy
LDEzLDEzfTsKCmxvY2FsIGludCBuZWFyIGV4dHJhX2JsYml0c1tCTF9DT0RFU10vKiBleHRyYSBi
aXRzIGZvciBlYWNoIGJpdCBsZW5ndGggY29kZSAqLwogICA9IHswLDAsMCwwLDAsMCwwLDAsMCww
LDAsMCwwLDAsMCwwLDIsMyw3fTsKCiNkZWZpbmUgU1RPUkVEX0JMT0NLIDAKI2RlZmluZSBTVEFU
SUNfVFJFRVMgMQojZGVmaW5lIERZTl9UUkVFUyAgICAyCi8qIFRoZSB0aHJlZSBraW5kcyBvZiBi
bG9jayB0eXBlICovCgojaWZuZGVmIExJVF9CVUZTSVpFCiMgIGlmZGVmIFNNQUxMX01FTQojICAg
IGRlZmluZSBMSVRfQlVGU0laRSAgMHgyMDAwCiMgIGVsc2UKIyAgaWZkZWYgTUVESVVNX01FTQoj
ICAgIGRlZmluZSBMSVRfQlVGU0laRSAgMHg0MDAwCiMgIGVsc2UKIyAgICBkZWZpbmUgTElUX0JV
RlNJWkUgIDB4ODAwMAojICBlbmRpZgojICBlbmRpZgojZW5kaWYKI2lmbmRlZiBESVNUX0JVRlNJ
WkUKIyAgZGVmaW5lIERJU1RfQlVGU0laRSAgTElUX0JVRlNJWkUKI2VuZGlmCi8qIFNpemVzIG9m
IG1hdGNoIGJ1ZmZlcnMgZm9yIGxpdGVyYWxzL2xlbmd0aHMgYW5kIGRpc3RhbmNlcy4gIFRoZXJl
IGFyZQogKiA0IHJlYXNvbnMgZm9yIGxpbWl0aW5nIExJVF9CVUZTSVpFIHRvIDY0SzoKICogICAt
IGZyZXF1ZW5jaWVzIGNhbiBiZSBrZXB0IGluIDE2IGJpdCBjb3VudGVycwogKiAgIC0gaWYgY29t
cHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0
IGRhdGEgaXMKICogICAgIHN0aWxsIGluIHRoZSB3aW5kb3cgc28gd2UgY2FuIHN0aWxsIGVtaXQg
YSBzdG9yZWQgYmxvY2sgZXZlbiB3aGVuIGlucHV0CiAqICAgICBjb21lcyBmcm9tIHN0YW5kYXJk
IGlucHV0LiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmb3IgYWxsIGJsb2NrcyBpZgogKiAgICAg
TElUX0JVRlNJWkUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKQogKiAgIC0gaWYgY29tcHJlc3Np
b24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIGEgZmlsZSBzbWFsbGVyIHRoYW4gNjRLLCB3ZSBjYW4K
ICogICAgIGV2ZW4gZW1pdCBhIHN0b3JlZCBmaWxlIGluc3RlYWQgb2YgYSBzdG9yZWQgYmxvY2sg
KHNhdmluZyA1IGJ5dGVzKS4KICogICAtIGNyZWF0aW5nIG5ldyBIdWZmbWFuIHRyZWVzIGxlc3Mg
ZnJlcXVlbnRseSBtYXkgbm90IHByb3ZpZGUgZmFzdAogKiAgICAgYWRhcHRhdGlvbiB0byBjaGFu
Z2VzIGluIHRoZSBpbnB1dCBkYXRhIHN0YXRpc3RpY3MuIChUYWtlIGZvcgogKiAgICAgZXhhbXBs
ZSBhIGJpbmFyeSBmaWxlIHdpdGggcG9vcmx5IGNvbXByZXNzaWJsZSBjb2RlIGZvbGxvd2VkIGJ5
CiAqICAgICBhIGhpZ2hseSBjb21wcmVzc2libGUgc3RyaW5nIHRhYmxlLikgU21hbGxlciBidWZm
ZXIgc2l6ZXMgZ2l2ZQogKiAgICAgZmFzdCBhZGFwdGF0aW9uIGJ1dCBoYXZlIG9mIGNvdXJzZSB0
aGUgb3ZlcmhlYWQgb2YgdHJhbnNtaXR0aW5nIHRyZWVzCiAqICAgICBtb3JlIGZyZXF1ZW50bHku
CiAqICAgLSBJIGNhbid0IGNvdW50IGFib3ZlIDQKICogVGhlIGN1cnJlbnQgY29kZSBpcyBnZW5l
cmFsIGFuZCBhbGxvd3MgRElTVF9CVUZTSVpFIDwgTElUX0JVRlNJWkUgKHRvIHNhdmUKICogbWVt
b3J5IGF0IHRoZSBleHBlbnNlIG9mIGNvbXByZXNzaW9uKS4gU29tZSBvcHRpbWl6YXRpb25zIHdv
dWxkIGJlIHBvc3NpYmxlCiAqIGlmIHdlIHJlbHkgb24gRElTVF9CVUZTSVpFID09IExJVF9CVUZT
SVpFLgogKi8KI2lmIExJVF9CVUZTSVpFID4gSU5CVUZTSVoKICAgIGVycm9yIGNhbm5vdCBvdmVy
bGF5IGxfYnVmIGFuZCBpbmJ1ZgojZW5kaWYKCiNkZWZpbmUgUkVQXzNfNiAgICAgIDE2Ci8qIHJl
cGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3Vu
dCkgKi8KCiNkZWZpbmUgUkVQWl8zXzEwICAgIDE3Ci8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDMt
MTAgdGltZXMgICgzIGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqLwoKI2RlZmluZSBSRVBaXzExXzEz
OCAgMTgKLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJl
cGVhdCBjb3VudCkgKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBMb2NhbCBkYXRhCiAqLwoK
LyogRGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2YWx1ZSBhbmQgaXRzIGNvZGUg
c3RyaW5nLiAqLwp0eXBlZGVmIHN0cnVjdCBjdF9kYXRhIHsKICAgIHVuaW9uIHsKICAgICAgICB1
c2ggIGZyZXE7ICAgICAgIC8qIGZyZXF1ZW5jeSBjb3VudCAqLwogICAgICAgIHVzaCAgY29kZTsg
ICAgICAgLyogYml0IHN0cmluZyAqLwogICAgfSBmYzsKICAgIHVuaW9uIHsKICAgICAgICB1c2gg
IGRhZDsgICAgICAgIC8qIGZhdGhlciBub2RlIGluIEh1ZmZtYW4gdHJlZSAqLwogICAgICAgIHVz
aCAgbGVuOyAgICAgICAgLyogbGVuZ3RoIG9mIGJpdCBzdHJpbmcgKi8KICAgIH0gZGw7Cn0gY3Rf
ZGF0YTsKCiNkZWZpbmUgRnJlcSBmYy5mcmVxCiNkZWZpbmUgQ29kZSBmYy5jb2RlCiNkZWZpbmUg
RGFkICBkbC5kYWQKI2RlZmluZSBMZW4gIGRsLmxlbgoKI2RlZmluZSBIRUFQX1NJWkUgKDIqTF9D
T0RFUysxKQovKiBtYXhpbXVtIGhlYXAgc2l6ZSAqLwoKbG9jYWwgY3RfZGF0YSBuZWFyIGR5bl9s
dHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0aCB0cmVlICovCmxvY2FsIGN0
X2RhdGEgbmVhciBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovCgps
b2NhbCBjdF9kYXRhIG5lYXIgc3RhdGljX2x0cmVlW0xfQ09ERVMrMl07Ci8qIFRoZSBzdGF0aWMg
bGl0ZXJhbCB0cmVlLiBTaW5jZSB0aGUgYml0IGxlbmd0aHMgYXJlIGltcG9zZWQsIHRoZXJlIGlz
IG5vCiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAg
Y29uc3RydWN0aW9uLiBIb3dldmVyCiAqIFRoZSBjb2RlcyAyODYgYW5kIDI4NyBhcmUgbmVlZGVk
IHRvIGJ1aWxkIGEgY2Fub25pY2FsIHRyZWUgKHNlZSBjdF9pbml0CiAqIGJlbG93KS4KICovCgps
b2NhbCBjdF9kYXRhIG5lYXIgc3RhdGljX2R0cmVlW0RfQ09ERVNdOwovKiBUaGUgc3RhdGljIGRp
c3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNl
CiAqIDUgYml0cy4pCiAqLwoKbG9jYWwgY3RfZGF0YSBuZWFyIGJsX3RyZWVbMipCTF9DT0RFUysx
XTsKLyogSHVmZm1hbiB0cmVlIGZvciB0aGUgYml0IGxlbmd0aHMgKi8KCnR5cGVkZWYgc3RydWN0
IHRyZWVfZGVzYyB7CiAgICBjdF9kYXRhIG5lYXIgKmR5bl90cmVlOyAgICAgIC8qIHRoZSBkeW5h
bWljIHRyZWUgKi8KICAgIGN0X2RhdGEgbmVhciAqc3RhdGljX3RyZWU7ICAgLyogY29ycmVzcG9u
ZGluZyBzdGF0aWMgdHJlZSBvciBOVUxMICovCiAgICBpbnQgICAgIG5lYXIgKmV4dHJhX2JpdHM7
ICAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovCiAgICBpbnQgICAgIGV4
dHJhX2Jhc2U7ICAgICAgICAgIC8qIGJhc2UgaW5kZXggZm9yIGV4dHJhX2JpdHMgKi8KICAgIGlu
dCAgICAgZWxlbXM7ICAgICAgICAgICAgICAgLyogbWF4IG51bWJlciBvZiBlbGVtZW50cyBpbiB0
aGUgdHJlZSAqLwogICAgaW50ICAgICBtYXhfbGVuZ3RoOyAgICAgICAgICAvKiBtYXggYml0IGxl
bmd0aCBmb3IgdGhlIGNvZGVzICovCiAgICBpbnQgICAgIG1heF9jb2RlOyAgICAgICAgICAgIC8q
IGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwp9IHRyZWVfZGVzYzsKCmxv
Y2FsIHRyZWVfZGVzYyBuZWFyIGxfZGVzYyA9CntkeW5fbHRyZWUsIHN0YXRpY19sdHJlZSwgZXh0
cmFfbGJpdHMsIExJVEVSQUxTKzEsIExfQ09ERVMsIE1BWF9CSVRTLCAwfTsKCmxvY2FsIHRyZWVf
ZGVzYyBuZWFyIGRfZGVzYyA9CntkeW5fZHRyZWUsIHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMs
IDAsICAgICAgICAgIERfQ09ERVMsIE1BWF9CSVRTLCAwfTsKCmxvY2FsIHRyZWVfZGVzYyBuZWFy
IGJsX2Rlc2MgPQp7YmxfdHJlZSwgKGN0X2RhdGEgbmVhciAqKTAsIGV4dHJhX2JsYml0cywgMCwg
ICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMsIDB9OwoKCmxvY2FsIHVzaCBuZWFyIGJsX2NvdW50
W01BWF9CSVRTKzFdOwovKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBh
biBvcHRpbWFsIHRyZWUgKi8KCmxvY2FsIHVjaCBuZWFyIGJsX29yZGVyW0JMX0NPREVTXQogICA9
IHsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1fTsKLyogVGhl
IGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGggY29kZXMgYXJlIHNlbnQgaW4gb3JkZXIgb2YgZGVj
cmVhc2luZwogKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhz
IGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy4KICovCgpsb2NhbCBpbnQgbmVhciBoZWFwWzIq
TF9DT0RFUysxXTsgLyogaGVhcCB1c2VkIHRvIGJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzICovCmxv
Y2FsIGludCBoZWFwX2xlbjsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4g
dGhlIGhlYXAgKi8KbG9jYWwgaW50IGhlYXBfbWF4OyAgICAgICAgICAgICAgIC8qIGVsZW1lbnQg
b2YgbGFyZ2VzdCBmcmVxdWVuY3kgKi8KLyogVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsy
Km5dIGFuZCBoZWFwWzIqbisxXS4gaGVhcFswXSBpcyBub3QgdXNlZC4KICogVGhlIHNhbWUgaGVh
cCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy4KICovCgpsb2NhbCB1Y2ggbmVhciBk
ZXB0aFsyKkxfQ09ERVMrMV07Ci8qIERlcHRoIG9mIGVhY2ggc3VidHJlZSB1c2VkIGFzIHRpZSBi
cmVha2VyIGZvciB0cmVlcyBvZiBlcXVhbCBmcmVxdWVuY3kgKi8KCmxvY2FsIHVjaCBsZW5ndGhf
Y29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdOwovKiBsZW5ndGggY29kZSBmb3IgZWFjaCBub3Jt
YWxpemVkIG1hdGNoIGxlbmd0aCAoMCA9PSBNSU5fTUFUQ0gpICovCgpsb2NhbCB1Y2ggZGlzdF9j
b2RlWzUxMl07Ci8qIGRpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNw
b25kIHRvIHRoZSBkaXN0YW5jZXMKICogMyAuLiAyNTgsIHRoZSBsYXN0IDI1NiB2YWx1ZXMgY29y
cmVzcG9uZCB0byB0aGUgdG9wIDggYml0cyBvZgogKiB0aGUgMTUgYml0IGRpc3RhbmNlcy4KICov
Cgpsb2NhbCBpbnQgbmVhciBiYXNlX2xlbmd0aFtMRU5HVEhfQ09ERVNdOwovKiBGaXJzdCBub3Jt
YWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqLwoKbG9jYWwgaW50
IG5lYXIgYmFzZV9kaXN0W0RfQ09ERVNdOwovKiBGaXJzdCBub3JtYWxpemVkIGRpc3RhbmNlIGZv
ciBlYWNoIGNvZGUgKDAgPSBkaXN0YW5jZSBvZiAxKSAqLwoKI2RlZmluZSBsX2J1ZiBpbmJ1Zgov
KiBERUNMQVJFKHVjaCwgbF9idWYsIExJVF9CVUZTSVpFKTsgIGJ1ZmZlciBmb3IgbGl0ZXJhbHMg
b3IgbGVuZ3RocyAqLwoKLyogREVDTEFSRSh1c2gsIGRfYnVmLCBESVNUX0JVRlNJWkUpOyBidWZm
ZXIgZm9yIGRpc3RhbmNlcyAqLwoKbG9jYWwgdWNoIG5lYXIgZmxhZ19idWZbKExJVF9CVUZTSVpF
LzgpXTsKLyogZmxhZ19idWYgaXMgYSBiaXQgYXJyYXkgZGlzdGluZ3Vpc2hpbmcgbGl0ZXJhbHMg
ZnJvbSBsZW5ndGhzIGluCiAqIGxfYnVmLCB0aHVzIGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9y
IGFic2VuY2Ugb2YgYSBkaXN0YW5jZS4KICovCgpsb2NhbCB1bnNpZ25lZCBsYXN0X2xpdDsgICAg
LyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqLwpsb2NhbCB1bnNpZ25lZCBsYXN0X2Rpc3Q7ICAg
LyogcnVubmluZyBpbmRleCBpbiBkX2J1ZiAqLwpsb2NhbCB1bnNpZ25lZCBsYXN0X2ZsYWdzOyAg
LyogcnVubmluZyBpbmRleCBpbiBmbGFnX2J1ZiAqLwpsb2NhbCB1Y2ggZmxhZ3M7ICAgICAgICAg
ICAgLyogY3VycmVudCBmbGFncyBub3QgeWV0IHNhdmVkIGluIGZsYWdfYnVmICovCmxvY2FsIHVj
aCBmbGFnX2JpdDsgICAgICAgICAvKiBjdXJyZW50IGJpdCB1c2VkIGluIGZsYWdzICovCi8qIGJp
dHMgYXJlIGZpbGxlZCBpbiBmbGFncyBzdGFydGluZyBhdCBiaXQgMCAobGVhc3Qgc2lnbmlmaWNh
bnQpLgogKiBOb3RlOiB0aGVzZSBmbGFncyBhcmUgb3ZlcmtpbGwgaW4gdGhlIGN1cnJlbnQgY29k
ZSBzaW5jZSB3ZSBkb24ndAogKiB0YWtlIGFkdmFudGFnZSBvZiBESVNUX0JVRlNJWkUgPT0gTElU
X0JVRlNJWkUuCiAqLwoKbG9jYWwgdWxnIG9wdF9sZW47ICAgICAgICAvKiBiaXQgbGVuZ3RoIG9m
IGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovCmxvY2FsIHVsZyBzdGF0aWNfbGVu
OyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICov
Cgpsb2NhbCB1bGcgY29tcHJlc3NlZF9sZW47IC8qIHRvdGFsIGJpdCBsZW5ndGggb2YgY29tcHJl
c3NlZCBmaWxlICovCgpsb2NhbCB1bGcgaW5wdXRfbGVuOyAgICAgIC8qIHRvdGFsIGJ5dGUgbGVu
Z3RoIG9mIGlucHV0IGZpbGUgKi8KLyogaW5wdXRfbGVuIGlzIGZvciBkZWJ1Z2dpbmcgb25seSBz
aW5jZSB3ZSBjYW4gZ2V0IGl0IGJ5IG90aGVyIG1lYW5zLiAqLwoKdXNoICpmaWxlX3R5cGU7ICAg
ICAgICAvKiBwb2ludGVyIHRvIFVOS05PV04sIEJJTkFSWSBvciBBU0NJSSAqLwppbnQgKmZpbGVf
bWV0aG9kOyAgICAgIC8qIHBvaW50ZXIgdG8gREVGTEFURSBvciBTVE9SRSAqLwoKI2lmZGVmIERF
QlVHCmV4dGVybiB1bGcgYml0c19zZW50OyAgLyogYml0IGxlbmd0aCBvZiB0aGUgY29tcHJlc3Nl
ZCBkYXRhICovCmV4dGVybiBsb25nIGlzaXplOyAgICAgLyogYnl0ZSBsZW5ndGggb2YgaW5wdXQg
ZmlsZSAqLwojZW5kaWYKCmV4dGVybiBsb25nIGJsb2NrX3N0YXJ0OyAgICAgICAvKiB3aW5kb3cg
b2Zmc2V0IG9mIGN1cnJlbnQgYmxvY2sgKi8KZXh0ZXJuIHVuc2lnbmVkIG5lYXIgc3Ryc3RhcnQ7
IC8qIHdpbmRvdyBvZmZzZXQgb2YgY3VycmVudCBzdHJpbmcgKi8KCi8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQogKiBMb2NhbCAoc3RhdGljKSByb3V0aW5lcyBpbiB0aGlzIGZpbGUuCiAqLwoKbG9jYWwg
dm9pZCBpbml0X2Jsb2NrICAgICBPRigodm9pZCkpOwpsb2NhbCB2b2lkIHBxZG93bmhlYXAgICAg
IE9GKChjdF9kYXRhIG5lYXIgKnRyZWUsIGludCBrKSk7CmxvY2FsIHZvaWQgZ2VuX2JpdGxlbiAg
ICAgT0YoKHRyZWVfZGVzYyBuZWFyICpkZXNjKSk7CmxvY2FsIHZvaWQgZ2VuX2NvZGVzICAgICAg
T0YoKGN0X2RhdGEgbmVhciAqdHJlZSwgaW50IG1heF9jb2RlKSk7CmxvY2FsIHZvaWQgYnVpbGRf
dHJlZSAgICAgT0YoKHRyZWVfZGVzYyBuZWFyICpkZXNjKSk7CmxvY2FsIHZvaWQgc2Nhbl90cmVl
ICAgICAgT0YoKGN0X2RhdGEgbmVhciAqdHJlZSwgaW50IG1heF9jb2RlKSk7CmxvY2FsIHZvaWQg
c2VuZF90cmVlICAgICAgT0YoKGN0X2RhdGEgbmVhciAqdHJlZSwgaW50IG1heF9jb2RlKSk7Cmxv
Y2FsIGludCAgYnVpbGRfYmxfdHJlZSAgT0YoKHZvaWQpKTsKbG9jYWwgdm9pZCBzZW5kX2FsbF90
cmVlcyBPRigoaW50IGxjb2RlcywgaW50IGRjb2RlcywgaW50IGJsY29kZXMpKTsKbG9jYWwgdm9p
ZCBjb21wcmVzc19ibG9jayBPRigoY3RfZGF0YSBuZWFyICpsdHJlZSwgY3RfZGF0YSBuZWFyICpk
dHJlZSkpOwpsb2NhbCB2b2lkIHNldF9maWxlX3R5cGUgIE9GKCh2b2lkKSk7CgoKI2lmbmRlZiBE
RUJVRwojICBkZWZpbmUgc2VuZF9jb2RlKGMsIHRyZWUpIHNlbmRfYml0cyh0cmVlW2NdLkNvZGUs
IHRyZWVbY10uTGVuKQogICAvKiBTZW5kIGEgY29kZSBvZiB0aGUgZ2l2ZW4gdHJlZS4gYyBhbmQg
dHJlZSBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwoKI2Vsc2UgLyogREVCVUcgKi8KIyAg
ZGVmaW5lIHNlbmRfY29kZShjLCB0cmVlKSBcCiAgICAgeyBpZiAodmVyYm9zZT4xKSBmcHJpbnRm
KHN0ZGVyciwiXG5jZCAlM2QgIiwoYykpOyBcCiAgICAgICBzZW5kX2JpdHModHJlZVtjXS5Db2Rl
LCB0cmVlW2NdLkxlbik7IH0KI2VuZGlmCgojZGVmaW5lIGRfY29kZShkaXN0KSBcCiAgICgoZGlz
dCkgPCAyNTYgPyBkaXN0X2NvZGVbZGlzdF0gOiBkaXN0X2NvZGVbMjU2KygoZGlzdCk+PjcpXSkK
LyogTWFwcGluZyBmcm9tIGEgZGlzdGFuY2UgdG8gYSBkaXN0YW5jZSBjb2RlLiBkaXN0IGlzIHRo
ZSBkaXN0YW5jZSAtIDEgYW5kCiAqIG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiBkaXN0X2Nv
ZGVbMjU2XSBhbmQgZGlzdF9jb2RlWzI1N10gYXJlIG5ldmVyCiAqIHVzZWQuCiAqLwoKI2RlZmlu
ZSBNQVgoYSxiKSAoYSA+PSBiID8gYSA6IGIpCi8qIHRoZSBhcmd1bWVudHMgbXVzdCBub3QgaGF2
ZSBzaWRlIGVmZmVjdHMgKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBBbGxvY2F0ZSB0aGUg
bWF0Y2ggYnVmZmVyLCBpbml0aWFsaXplIHRoZSB2YXJpb3VzIHRhYmxlcyBhbmQgc2F2ZSB0aGUK
ICogbG9jYXRpb24gb2YgdGhlIGludGVybmFsIGZpbGUgYXR0cmlidXRlIChhc2NpaS9iaW5hcnkp
IGFuZCBtZXRob2QKICogKERFRkxBVEUvU1RPUkUpLgogKi8Kdm9pZCBjdF9pbml0KGF0dHIsIG1l
dGhvZHApCiAgICB1c2ggICphdHRyOyAgIC8qIHBvaW50ZXIgdG8gaW50ZXJuYWwgZmlsZSBhdHRy
aWJ1dGUgKi8KICAgIGludCAgKm1ldGhvZHA7IC8qIHBvaW50ZXIgdG8gY29tcHJlc3Npb24gbWV0
aG9kICovCnsKICAgIGludCBuOyAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciB0cmVlIGVsZW1lbnRz
ICovCiAgICBpbnQgYml0czsgICAgIC8qIGJpdCBjb3VudGVyICovCiAgICBpbnQgbGVuZ3RoOyAg
IC8qIGxlbmd0aCB2YWx1ZSAqLwogICAgaW50IGNvZGU7ICAgICAvKiBjb2RlIHZhbHVlICovCiAg
ICBpbnQgZGlzdDsgICAgIC8qIGRpc3RhbmNlIGluZGV4ICovCgogICAgZmlsZV90eXBlID0gYXR0
cjsKICAgIGZpbGVfbWV0aG9kID0gbWV0aG9kcDsKICAgIGNvbXByZXNzZWRfbGVuID0gaW5wdXRf
bGVuID0gMEw7CiAgICAgICAgCiAgICBpZiAoc3RhdGljX2R0cmVlWzBdLkxlbiAhPSAwKSByZXR1
cm47IC8qIGN0X2luaXQgYWxyZWFkeSBjYWxsZWQgKi8KCiAgICAvKiBJbml0aWFsaXplIHRoZSBt
YXBwaW5nIGxlbmd0aCAoMC4uMjU1KSAtPiBsZW5ndGggY29kZSAoMC4uMjgpICovCiAgICBsZW5n
dGggPSAwOwogICAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUy0xOyBjb2RlKysp
IHsKICAgICAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDsKICAgICAgICBmb3IgKG4gPSAw
OyBuIDwgKDE8PGV4dHJhX2xiaXRzW2NvZGVdKTsgbisrKSB7CiAgICAgICAgICAgIGxlbmd0aF9j
b2RlW2xlbmd0aCsrXSA9ICh1Y2gpY29kZTsKICAgICAgICB9CiAgICB9CiAgICBBc3NlcnQgKGxl
bmd0aCA9PSAyNTYsICJjdF9pbml0OiBsZW5ndGggIT0gMjU2Iik7CiAgICAvKiBOb3RlIHRoYXQg
dGhlIGxlbmd0aCAyNTUgKG1hdGNoIGxlbmd0aCAyNTgpIGNhbiBiZSByZXByZXNlbnRlZAogICAg
ICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwg
c28gd2UKICAgICAqIG92ZXJ3cml0ZSBsZW5ndGhfY29kZVsyNTVdIHRvIHVzZSB0aGUgYmVzdCBl
bmNvZGluZzoKICAgICAqLwogICAgbGVuZ3RoX2NvZGVbbGVuZ3RoLTFdID0gKHVjaCljb2RlOwoK
ICAgIC8qIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgZGlzdCAoMC4uMzJLKSAtPiBkaXN0IGNvZGUg
KDAuLjI5KSAqLwogICAgZGlzdCA9IDA7CiAgICBmb3IgKGNvZGUgPSAwIDsgY29kZSA8IDE2OyBj
b2RlKyspIHsKICAgICAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0OwogICAgICAgIGZvciAobiA9
IDA7IG4gPCAoMTw8ZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHsKICAgICAgICAgICAgZGlzdF9j
b2RlW2Rpc3QrK10gPSAodWNoKWNvZGU7CiAgICAgICAgfQogICAgfQogICAgQXNzZXJ0IChkaXN0
ID09IDI1NiwgImN0X2luaXQ6IGRpc3QgIT0gMjU2Iik7CiAgICBkaXN0ID4+PSA3OyAvKiBmcm9t
IG5vdyBvbiwgYWxsIGRpc3RhbmNlcyBhcmUgZGl2aWRlZCBieSAxMjggKi8KICAgIGZvciAoIDsg
Y29kZSA8IERfQ09ERVM7IGNvZGUrKykgewogICAgICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3Qg
PDwgNzsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKDE8PChleHRyYV9kYml0c1tjb2RlXS03KSk7
IG4rKykgewogICAgICAgICAgICBkaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9ICh1Y2gpY29kZTsK
ICAgICAgICB9CiAgICB9CiAgICBBc3NlcnQgKGRpc3QgPT0gMjU2LCAiY3RfaW5pdDogMjU2K2Rp
c3QgIT0gNTEyIik7CgogICAgLyogQ29uc3RydWN0IHRoZSBjb2RlcyBvZiB0aGUgc3RhdGljIGxp
dGVyYWwgdHJlZSAqLwogICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysr
KSBibF9jb3VudFtiaXRzXSA9IDA7CiAgICBuID0gMDsKICAgIHdoaWxlIChuIDw9IDE0Mykgc3Rh
dGljX2x0cmVlW24rK10uTGVuID0gOCwgYmxfY291bnRbOF0rKzsKICAgIHdoaWxlIChuIDw9IDI1
NSkgc3RhdGljX2x0cmVlW24rK10uTGVuID0gOSwgYmxfY291bnRbOV0rKzsKICAgIHdoaWxlIChu
IDw9IDI3OSkgc3RhdGljX2x0cmVlW24rK10uTGVuID0gNywgYmxfY291bnRbN10rKzsKICAgIHdo
aWxlIChuIDw9IDI4Nykgc3RhdGljX2x0cmVlW24rK10uTGVuID0gOCwgYmxfY291bnRbOF0rKzsK
ICAgIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVk
ZSB0aGVtIGluIHRoZQogICAgICogdHJlZSBjb25zdHJ1Y3Rpb24gdG8gZ2V0IGEgY2Fub25pY2Fs
IEh1ZmZtYW4gdHJlZSAobG9uZ2VzdCBjb2RlCiAgICAgKiBhbGwgb25lcykKICAgICAqLwogICAg
Z2VuX2NvZGVzKChjdF9kYXRhIG5lYXIgKilzdGF0aWNfbHRyZWUsIExfQ09ERVMrMSk7CgogICAg
LyogVGhlIHN0YXRpYyBkaXN0YW5jZSB0cmVlIGlzIHRyaXZpYWw6ICovCiAgICBmb3IgKG4gPSAw
OyBuIDwgRF9DT0RFUzsgbisrKSB7CiAgICAgICAgc3RhdGljX2R0cmVlW25dLkxlbiA9IDU7CiAg
ICAgICAgc3RhdGljX2R0cmVlW25dLkNvZGUgPSBiaV9yZXZlcnNlKG4sIDUpOwogICAgfQoKICAg
IC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqLwogICAg
aW5pdF9ibG9jaygpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbGl6ZSBhIG5l
dyBibG9jay4KICovCmxvY2FsIHZvaWQgaW5pdF9ibG9jaygpCnsKICAgIGludCBuOyAvKiBpdGVy
YXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi8KCiAgICAvKiBJbml0aWFsaXplIHRoZSB0cmVlcy4g
Ki8KICAgIGZvciAobiA9IDA7IG4gPCBMX0NPREVTOyAgbisrKSBkeW5fbHRyZWVbbl0uRnJlcSA9
IDA7CiAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgZHluX2R0cmVlW25dLkZyZXEg
PSAwOwogICAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIGJsX3RyZWVbbl0uRnJlcSA9
IDA7CgogICAgZHluX2x0cmVlW0VORF9CTE9DS10uRnJlcSA9IDE7CiAgICBvcHRfbGVuID0gc3Rh
dGljX2xlbiA9IDBMOwogICAgbGFzdF9saXQgPSBsYXN0X2Rpc3QgPSBsYXN0X2ZsYWdzID0gMDsK
ICAgIGZsYWdzID0gMDsgZmxhZ19iaXQgPSAxOwp9CgojZGVmaW5lIFNNQUxMRVNUIDEKLyogSW5k
ZXggd2l0aGluIHRoZSBoZWFwIGFycmF5IG9mIGxlYXN0IGZyZXF1ZW50IG5vZGUgaW4gdGhlIEh1
ZmZtYW4gdHJlZSAqLwoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBSZW1vdmUgdGhlIHNtYWxs
ZXN0IGVsZW1lbnQgZnJvbSB0aGUgaGVhcCBhbmQgcmVjcmVhdGUgdGhlIGhlYXAgd2l0aAogKiBv
bmUgbGVzcyBlbGVtZW50LiBVcGRhdGVzIGhlYXAgYW5kIGhlYXBfbGVuLgogKi8KI2RlZmluZSBw
cXJlbW92ZSh0cmVlLCB0b3ApIFwKe1wKICAgIHRvcCA9IGhlYXBbU01BTExFU1RdOyBcCiAgICBo
ZWFwW1NNQUxMRVNUXSA9IGhlYXBbaGVhcF9sZW4tLV07IFwKICAgIHBxZG93bmhlYXAodHJlZSwg
U01BTExFU1QpOyBcCn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb21wYXJlcyB0byBzdWJ0
cmVlcywgdXNpbmcgdGhlIHRyZWUgZGVwdGggYXMgdGllIGJyZWFrZXIgd2hlbgogKiB0aGUgc3Vi
dHJlZXMgaGF2ZSBlcXVhbCBmcmVxdWVuY3kuIFRoaXMgbWluaW1pemVzIHRoZSB3b3JzdCBjYXNl
IGxlbmd0aC4KICovCiNkZWZpbmUgc21hbGxlcih0cmVlLCBuLCBtKSBcCiAgICh0cmVlW25dLkZy
ZXEgPCB0cmVlW21dLkZyZXEgfHwgXAogICAodHJlZVtuXS5GcmVxID09IHRyZWVbbV0uRnJlcSAm
JiBkZXB0aFtuXSA8PSBkZXB0aFttXSkpCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogUmVzdG9y
ZSB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3ZpbmcgZG93biB0aGUgdHJlZSBzdGFydGluZyBhdCBu
b2RlIGssCiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28g
c29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nCiAqIHdoZW4gdGhlIGhlYXAgcHJvcGVydHkgaXMg
cmUtZXN0YWJsaXNoZWQgKGVhY2ggZmF0aGVyIHNtYWxsZXIgdGhhbiBpdHMKICogdHdvIHNvbnMp
LgogKi8KbG9jYWwgdm9pZCBwcWRvd25oZWFwKHRyZWUsIGspCiAgICBjdF9kYXRhIG5lYXIgKnRy
ZWU7ICAvKiB0aGUgdHJlZSB0byByZXN0b3JlICovCiAgICBpbnQgazsgICAgICAgICAgICAgICAv
KiBub2RlIHRvIG1vdmUgZG93biAqLwp7CiAgICBpbnQgdiA9IGhlYXBba107CiAgICBpbnQgaiA9
IGsgPDwgMTsgIC8qIGxlZnQgc29uIG9mIGsgKi8KICAgIHdoaWxlIChqIDw9IGhlYXBfbGVuKSB7
CiAgICAgICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi8KICAg
ICAgICBpZiAoaiA8IGhlYXBfbGVuICYmIHNtYWxsZXIodHJlZSwgaGVhcFtqKzFdLCBoZWFwW2pd
KSkgaisrOwoKICAgICAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAq
LwogICAgICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIGhlYXBbal0pKSBicmVhazsKCiAgICAgICAg
LyogRXhjaGFuZ2UgdiB3aXRoIHRoZSBzbWFsbGVzdCBzb24gKi8KICAgICAgICBoZWFwW2tdID0g
aGVhcFtqXTsgIGsgPSBqOwoKICAgICAgICAvKiBBbmQgY29udGludWUgZG93biB0aGUgdHJlZSwg
c2V0dGluZyBqIHRvIHRoZSBsZWZ0IHNvbiBvZiBrICovCiAgICAgICAgaiA8PD0gMTsKICAgIH0K
ICAgIGhlYXBba10gPSB2Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcHV0ZSB0aGUg
b3B0aW1hbCBiaXQgbGVuZ3RocyBmb3IgYSB0cmVlIGFuZCB1cGRhdGUgdGhlIHRvdGFsIGJpdCBs
ZW5ndGgKICogZm9yIHRoZSBjdXJyZW50IGJsb2NrLgogKiBJTiBhc3NlcnRpb246IHRoZSBmaWVs
ZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZAogKiAgICBhYm92ZSBh
cmUgdGhlIHRyZWUgbm9kZXMgc29ydGVkIGJ5IGluY3JlYXNpbmcgZnJlcXVlbmN5LgogKiBPVVQg
YXNzZXJ0aW9uczogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0
aCwgdGhlCiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9y
IGVhY2ggYml0IGxlbmd0aC4KICogICAgIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVkOyBz
dGF0aWNfbGVuIGlzIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcwogKiAgICAgbm90IG51bGwuCiAq
Lwpsb2NhbCB2b2lkIGdlbl9iaXRsZW4oZGVzYykKICAgIHRyZWVfZGVzYyBuZWFyICpkZXNjOyAv
KiB0aGUgdHJlZSBkZXNjcmlwdG9yICovCnsKICAgIGN0X2RhdGEgbmVhciAqdHJlZSAgPSBkZXNj
LT5keW5fdHJlZTsKICAgIGludCBuZWFyICpleHRyYSAgICAgPSBkZXNjLT5leHRyYV9iaXRzOwog
ICAgaW50IGJhc2UgICAgICAgICAgICA9IGRlc2MtPmV4dHJhX2Jhc2U7CiAgICBpbnQgbWF4X2Nv
ZGUgICAgICAgID0gZGVzYy0+bWF4X2NvZGU7CiAgICBpbnQgbWF4X2xlbmd0aCAgICAgID0gZGVz
Yy0+bWF4X2xlbmd0aDsKICAgIGN0X2RhdGEgbmVhciAqc3RyZWUgPSBkZXNjLT5zdGF0aWNfdHJl
ZTsKICAgIGludCBoOyAgICAgICAgICAgICAgLyogaGVhcCBpbmRleCAqLwogICAgaW50IG4sIG07
ICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgZWxlbWVudHMgKi8KICAgIGludCBi
aXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqLwogICAgaW50IHhiaXRzOyAgICAgICAgICAv
KiBleHRyYSBiaXRzICovCiAgICB1c2ggZjsgICAgICAgICAgICAgIC8qIGZyZXF1ZW5jeSAqLwog
ICAgaW50IG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVu
Z3RoIHRvbyBsYXJnZSAqLwoKICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJp
dHMrKykgYmxfY291bnRbYml0c10gPSAwOwoKICAgIHByaW50ZigiXG5nZW5fYml0bGVuIik7CiAg
ICAvKiBJbiBhIGZpcnN0IHBhc3MsIGNvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgKHdo
aWNoIG1heQogICAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJl
ZSkuCiAgICAgKi8KICAgIHRyZWVbaGVhcFtoZWFwX21heF1dLkxlbiA9IDA7IC8qIHJvb3Qgb2Yg
dGhlIGhlYXAgKi8KCiAgICBmb3IgKGggPSBoZWFwX21heCsxOyBoIDwgSEVBUF9TSVpFOyBoKysp
IHsKICAgICAgICBuID0gaGVhcFtoXTsKICAgICAgICBiaXRzID0gdHJlZVt0cmVlW25dLkRhZF0u
TGVuICsgMTsKCiAgICAgICAgaWYgKGJpdHMgPiBtYXhfbGVuZ3RoKXsKICAgICAgICAJYml0cyA9
IG1heF9sZW5ndGg7CiAgICAgICAgCW92ZXJmbG93Kys7CiAgICAgICAgfQogICAgICAgIHRyZWVb
bl0uTGVuID0gKHVzaCliaXRzOwogICAgICAgIC8qIFdlIG92ZXJ3cml0ZSB0cmVlW25dLkRhZCB3
aGljaCBpcyBubyBsb25nZXIgbmVlZGVkICovCgogICAgICAgIGlmIChuID4gbWF4X2NvZGUpIGNv
bnRpbnVlOyAvKiBub3QgYSBsZWFmIG5vZGUgKi8KCiAgICAgICAgYmxfY291bnRbYml0c10rKzsK
CiAgICAgICAgeGJpdHMgPSAwOwogICAgICAgIGlmIChuID49IGJhc2UpIHhiaXRzID0gZXh0cmFb
bi1iYXNlXTsKICAgICAgICBmID0gdHJlZVtuXS5GcmVxOwogICAgICAgIG9wdF9sZW4gKz0gKHVs
ZylmICogKGJpdHMgKyB4Yml0cyk7CiAgICAgICAgaWYgKHN0cmVlKSBzdGF0aWNfbGVuICs9ICh1
bGcpZiAqIChzdHJlZVtuXS5MZW4gKyB4Yml0cyk7CiAgICB9CiAgICBpZiAob3ZlcmZsb3cgPT0g
MCl7CiAgICAJcmV0dXJuOwogICAgfQoKICAgIFRyYWNlKChzdGRlcnIsIlxuYml0IGxlbmd0aCBv
dmVyZmxvd1xuIikpOwogICAgLyogVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIG9uIG9iajIgYW5k
IHBpYyBvZiB0aGUgQ2FsZ2FyeSBjb3JwdXMgKi8KCiAgICAvKiBGaW5kIHRoZSBmaXJzdCBiaXQg
bGVuZ3RoIHdoaWNoIGNvdWxkIGluY3JlYXNlOiAqLwogICAgcHJpbnRmKCJcblxuXG5nZW5fYml0
bGVuIC0gb3ZlcmZsb3ciKTsKCiAgICBvdmVyZmxvdyA9IDM7CiAgICBwcmludGYoIlxub3ZlcmZs
b3cgPSAlZCIsIG92ZXJmbG93KTsKCiAgICBibF9jb3VudFswXSA9IDE7CiAgICBibF9jb3VudFsx
XSA9IDE7CiAgICBibF9jb3VudFsyXSA9IDE7CiAgICBibF9jb3VudFszXSA9IDE7CiAgICBibF9j
b3VudFs0XSA9IDE7CiAgICBibF9jb3VudFs1XSA9IDE7CiAgICBibF9jb3VudFs2XSA9IDE7CiAg
ICBibF9jb3VudFs3XSA9IDU7CgoKICAgIHByaW50ZigiXG5iZWZvcmUiKTsKICAgIGZvciAoaD0w
OyBoPD1tYXhfbGVuZ3RoOyBoKyspewogICAgCXByaW50ZigiXG5ibF9jb3VudFslZF0gPSAlZCIs
IGgsIGJsX2NvdW50W2hdKTsKICAgIH0KCiAgICBkbyB7CiAgICAgICAgYml0cyA9IG1heF9sZW5n
dGgtMTsKICAgICAgICB3aGlsZSAoYmxfY291bnRbYml0c10gPT0gMCkgYml0cy0tOwogICAgICAg
IGJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICov
CiAgICAgICAgYmxfY291bnRbYml0cysxXSArPSAyOyAvKiBtb3ZlIG9uZSBvdmVyZmxvdyBpdGVt
IGFzIGl0cyBicm90aGVyICovCiAgICAgICAgYmxfY291bnRbbWF4X2xlbmd0aF0tLTsKICAgICAg
ICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVw
IHVwLAogICAgICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVu
Z3RoXQogICAgICAgICAqLwogICAgICAgIG92ZXJmbG93IC09IDI7CiAgICB9IHdoaWxlIChvdmVy
ZmxvdyA+IDApOwoKICAgIHByaW50ZigiXG5hZnRlciIpOwogICAgZm9yIChoPTA7IGg8PW1heF9s
ZW5ndGg7IGgrKyl7CiAgICAJcHJpbnRmKCJcbmJsX2NvdW50WyVkXSA9ICVkIiwgaCwgYmxfY291
bnRbaF0pOwogICAgfQoKICAgIC8qIE5vdyByZWNvbXB1dGUgYWxsIGJpdCBsZW5ndGhzLCBzY2Fu
bmluZyBpbiBpbmNyZWFzaW5nIGZyZXF1ZW5jeS4KICAgICAqIGggaXMgc3RpbGwgZXF1YWwgdG8g
SEVBUF9TSVpFLiAoSXQgaXMgc2ltcGxlciB0byByZWNvbnN0cnVjdCBhbGwKICAgICAqIGxlbmd0
aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRh
a2VuCiAgICAgKiBmcm9tICdhcicgd3JpdHRlbiBieSBIYXJ1aGlrbyBPa3VtdXJhLikKICAgICAq
LwogICAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPSAwOyBiaXRzLS0pIHsKICAgICAg
ICBuID0gYmxfY291bnRbYml0c107CiAgICAgICAgd2hpbGUgKG4gIT0gMCkgewogICAgICAgICAg
ICBtID0gaGVhcFstLWhdOwogICAgICAgICAgICBpZiAobSA+IG1heF9jb2RlKSBjb250aW51ZTsK
ICAgICAgICAgICAgaWYgKHRyZWVbbV0uTGVuICE9ICh1bnNpZ25lZCkgYml0cykgewogICAgICAg
ICAgICAgICAgVHJhY2UoKHN0ZGVyciwiY29kZSAlZCBiaXRzICVkLT4lZFxuIiwgbSwgdHJlZVtt
XS5MZW4sIGJpdHMpKTsKICAgICAgICAgICAgICAgIG9wdF9sZW4gKz0gKChsb25nKWJpdHMtKGxv
bmcpdHJlZVttXS5MZW4pKihsb25nKXRyZWVbbV0uRnJlcTsKICAgICAgICAgICAgICAgIHRyZWVb
bV0uTGVuID0gKHVzaCliaXRzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG4tLTsKICAgICAg
ICB9CiAgICB9Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBHZW5lcmF0ZSB0aGUgY29kZXMg
Zm9yIGEgZ2l2ZW4gdHJlZSBhbmQgYml0IGNvdW50cyAod2hpY2ggbmVlZCBub3QgYmUKICogb3B0
aW1hbCkuCiAqIElOIGFzc2VydGlvbjogdGhlIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBi
aXQgbGVuZ3RoIHN0YXRpc3RpY3MgZm9yCiAqIHRoZSBnaXZlbiB0cmVlIGFuZCB0aGUgZmllbGQg
bGVuIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuCiAqIE9VVCBhc3NlcnRpb246IHRoZSBm
aWVsZCBjb2RlIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMgb2Ygbm9uCiAqICAgICB6ZXJv
IGNvZGUgbGVuZ3RoLgogKi8KbG9jYWwgdm9pZCBnZW5fY29kZXMgKHRyZWUsIG1heF9jb2RlKQog
ICAgY3RfZGF0YSBuZWFyICp0cmVlOyAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi8K
ICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6
ZXJvIGZyZXF1ZW5jeSAqLwp7CiAgICB1c2ggbmV4dF9jb2RlW01BWF9CSVRTKzFdOyAvKiBuZXh0
IGNvZGUgdmFsdWUgZm9yIGVhY2ggYml0IGxlbmd0aCAqLwogICAgdXNoIGNvZGUgPSAwOyAgICAg
ICAgICAgICAgLyogcnVubmluZyBjb2RlIHZhbHVlICovCiAgICBpbnQgYml0czsgICAgICAgICAg
ICAgICAgICAvKiBiaXQgaW5kZXggKi8KICAgIGludCBuOyAgICAgICAgICAgICAgICAgICAgIC8q
IGNvZGUgaW5kZXggKi8KCiAgICBwcmludGYoIlxuZ2VuX2NvZGVzIik7CgogICAgLyogVGhlIGRp
c3RyaWJ1dGlvbiBjb3VudHMgYXJlIGZpcnN0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNvZGUgdmFs
dWVzCiAgICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC4KICAgICAqLwogICAgZm9yIChiaXRzID0g
MTsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0g
Y29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKICAgIH0KICAgIC8qIENoZWNr
IHRoYXQgdGhlIGJpdCBjb3VudHMgaW4gYmxfY291bnQgYXJlIGNvbnNpc3RlbnQuIFRoZSBsYXN0
IGNvZGUKICAgICAqIG11c3QgYmUgYWxsIG9uZXMuCiAgICAgKi8KICAgIEFzc2VydCAoY29kZSAr
IGJsX2NvdW50W01BWF9CSVRTXS0xID09ICgxPDxNQVhfQklUUyktMSwKICAgICAgICAgICAgImlu
Y29uc2lzdGVudCBiaXQgY291bnRzIik7CiAgICBUcmFjZXYoKHN0ZGVyciwiXG5nZW5fY29kZXM6
IG1heF9jb2RlICVkICIsIG1heF9jb2RlKSk7CgogICAgZm9yIChuID0gMDsgIG4gPD0gbWF4X2Nv
ZGU7IG4rKykgewogICAgICAgIGludCBsZW4gPSB0cmVlW25dLkxlbjsKICAgICAgICBpZiAobGVu
ID09IDApIGNvbnRpbnVlOwogICAgICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovCiAgICAg
ICAgdHJlZVtuXS5Db2RlID0gYmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLCBsZW4pOwoKICAg
ICAgICBUcmFjZWModHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsIlxubiAlM2QgJWMgbCAl
MmQgYyAlNHggKCV4KSAiLAogICAgICAgICAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwg
bGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTsKICAgIH0KfQoKLyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRo
ZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLgogKiBVcGRhdGUgdGhlIHRvdGFsIGJpdCBs
ZW5ndGggZm9yIHRoZSBjdXJyZW50IGJsb2NrLgogKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZCBm
cmVxIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuCiAqIE9VVCBhc3NlcnRpb25zOiB0aGUg
ZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGgKICog
ICAgIGFuZCBjb3JyZXNwb25kaW5nIGNvZGUuIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVk
OyBzdGF0aWNfbGVuIGlzCiAqICAgICBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXMgbm90IG51bGwu
IFRoZSBmaWVsZCBtYXhfY29kZSBpcyBzZXQuCiAqLwpsb2NhbCB2b2lkIGJ1aWxkX3RyZWUoZGVz
YykKICAgIHRyZWVfZGVzYyBuZWFyICpkZXNjOyAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovCnsK
ICAgIGN0X2RhdGEgbmVhciAqdHJlZSAgID0gZGVzYy0+ZHluX3RyZWU7CiAgICBjdF9kYXRhIG5l
YXIgKnN0cmVlICA9IGRlc2MtPnN0YXRpY190cmVlOwogICAgaW50IGVsZW1zICAgICAgICAgICAg
PSBkZXNjLT5lbGVtczsKICAgIGludCBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVh
cCBlbGVtZW50cyAqLwogICAgaW50IG1heF9jb2RlID0gLTE7IC8qIGxhcmdlc3QgY29kZSB3aXRo
IG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwogICAgaW50IG5vZGUgPSBlbGVtczsgIC8qIG5leHQgaW50
ZXJuYWwgbm9kZSBvZiB0aGUgdHJlZSAqLwoKICAgIHByaW50ZigiXG5idWlsZF90cmVlIik7CiAg
ICAvKiBDb25zdHJ1Y3QgdGhlIGluaXRpYWwgaGVhcCwgd2l0aCBsZWFzdCBmcmVxdWVudCBlbGVt
ZW50IGluCiAgICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVh
cFsyKm5dIGFuZCBoZWFwWzIqbisxXS4KICAgICAqIGhlYXBbMF0gaXMgbm90IHVzZWQuCiAgICAg
Ki8KICAgIGhlYXBfbGVuID0gMCwgaGVhcF9tYXggPSBIRUFQX1NJWkU7CgogICAgZm9yIChuID0g
MDsgbiA8IGVsZW1zOyBuKyspIHsKICAgICAgICBpZiAodHJlZVtuXS5GcmVxICE9IDApIHsKICAg
ICAgICAgICAgaGVhcFsrK2hlYXBfbGVuXSA9IG1heF9jb2RlID0gbjsKICAgICAgICAgICAgZGVw
dGhbbl0gPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyZWVbbl0uTGVuID0gMDsK
ICAgICAgICB9CiAgICB9CgogICAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0
IGxlYXN0IG9uZSBkaXN0YW5jZSBjb2RlIGV4aXN0cywKICAgICAqIGFuZCB0aGF0IGF0IGxlYXN0
IG9uZSBiaXQgc2hvdWxkIGJlIHNlbnQgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZQogICAgICog
cG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9y
Y2UgYXQgbGVhc3QKICAgICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuCiAgICAg
Ki8KICAgIHdoaWxlIChoZWFwX2xlbiA8IDIpIHsKICAgICAgICBpbnQgbmV3ID0gaGVhcFsrK2hl
YXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7CiAgICAgICAgdHJlZVtu
ZXddLkZyZXEgPSAxOwogICAgICAgIGRlcHRoW25ld10gPSAwOwogICAgICAgIG9wdF9sZW4tLTsg
aWYgKHN0cmVlKSBzdGF0aWNfbGVuIC09IHN0cmVlW25ld10uTGVuOwogICAgICAgIC8qIG5ldyBp
cyAwIG9yIDEgc28gaXQgZG9lcyBub3QgaGF2ZSBleHRyYSBiaXRzICovCiAgICB9CiAgICBkZXNj
LT5tYXhfY29kZSA9IG1heF9jb2RlOwoKICAgIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVu
LzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSwKICAgICAqIGVzdGFibGlz
aCBzdWItaGVhcHMgb2YgaW5jcmVhc2luZyBsZW5ndGhzOgogICAgICovCiAgICBmb3IgKG4gPSBo
ZWFwX2xlbi8yOyBuID49IDE7IG4tLSkgcHFkb3duaGVhcCh0cmVlLCBuKTsKCiAgICAvKiBDb25z
dHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBieSByZXBlYXRlZGx5IGNvbWJpbmluZyB0aGUgbGVhc3Qg
dHdvCiAgICAgKiBmcmVxdWVudCBub2Rlcy4KICAgICAqLwogICAgZG8gewogICAgCS8vIHR3b3J6
ZW5pZSBkcnpld2EKICAgICAgICBwcXJlbW92ZSh0cmVlLCBuKTsgICAvKiBuID0gbm9kZSBvZiBs
ZWFzdCBmcmVxdWVuY3kgKi8KICAgICAgICBtID0gaGVhcFtTTUFMTEVTVF07ICAvKiBtID0gbm9k
ZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqLwoKICAgICAgICBoZWFwWy0taGVhcF9tYXhdID0g
bjsgLyoga2VlcCB0aGUgbm9kZXMgc29ydGVkIGJ5IGZyZXF1ZW5jeSAqLwogICAgICAgIGhlYXBb
LS1oZWFwX21heF0gPSBtOwoKICAgICAgICAvKiBDcmVhdGUgYSBuZXcgbm9kZSBmYXRoZXIgb2Yg
biBhbmQgbSAqLwogICAgICAgIHRyZWVbbm9kZV0uRnJlcSA9IHRyZWVbbl0uRnJlcSArIHRyZWVb
bV0uRnJlcTsKICAgICAgICBkZXB0aFtub2RlXSA9ICh1Y2gpIChNQVgoZGVwdGhbbl0sIGRlcHRo
W21dKSArIDEpOwogICAgICAgIHRyZWVbbl0uRGFkID0gdHJlZVttXS5EYWQgPSAodXNoKW5vZGU7
CiNpZmRlZiBEVU1QX0JMX1RSRUUKICAgICAgICBpZiAodHJlZSA9PSBibF90cmVlKSB7CiAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCJcbm5vZGUgJWQoJWQpLCBzb25zICVkKCVkKSAlZCglZCki
LAogICAgICAgICAgICAgICAgICAgIG5vZGUsIHRyZWVbbm9kZV0uRnJlcSwgbiwgdHJlZVtuXS5G
cmVxLCBtLCB0cmVlW21dLkZyZXEpOwogICAgICAgIH0KI2VuZGlmCiAgICAgICAgLyogYW5kIGlu
c2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi8KICAgICAgICBoZWFwW1NNQUxMRVNUXSA9
IG5vZGUrKzsKICAgICAgICBwcWRvd25oZWFwKHRyZWUsIFNNQUxMRVNUKTsKCiAgICB9IHdoaWxl
IChoZWFwX2xlbiA+PSAyKTsKCiAgICBoZWFwWy0taGVhcF9tYXhdID0gaGVhcFtTTUFMTEVTVF07
CgogICAgLyogQXQgdGhpcyBwb2ludCwgdGhlIGZpZWxkcyBmcmVxIGFuZCBkYWQgYXJlIHNldC4g
V2UgY2FuIG5vdwogICAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLgogICAgICovCiAgICBn
ZW5fYml0bGVuKCh0cmVlX2Rlc2MgbmVhciAqKWRlc2MpOwoKICAgIC8qIFRoZSBmaWVsZCBsZW4g
aXMgbm93IHNldCwgd2UgY2FuIGdlbmVyYXRlIHRoZSBiaXQgY29kZXMgKi8KICAgIGdlbl9jb2Rl
cyAoKGN0X2RhdGEgbmVhciAqKXRyZWUsIG1heF9jb2RlKTsKfQoKLyogPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CiAqIFNjYW4gYSBsaXRlcmFsIG9yIGRpc3RhbmNlIHRyZWUgdG8gZGV0ZXJtaW5lIHRoZSBm
cmVxdWVuY2llcyBvZiB0aGUgY29kZXMKICogaW4gdGhlIGJpdCBsZW5ndGggdHJlZS4gVXBkYXRl
cyBvcHRfbGVuIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSByZXBlYXQKICogY291bnRzLiAoVGhl
IGNvbnRyaWJ1dGlvbiBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyB3aWxsIGJlIGFkZGVkIGxhdGVy
CiAqIGR1cmluZyB0aGUgY29uc3RydWN0aW9uIG9mIGJsX3RyZWUuKQogKi8KbG9jYWwgdm9pZCBz
Y2FuX3RyZWUgKHRyZWUsIG1heF9jb2RlKQogICAgY3RfZGF0YSBuZWFyICp0cmVlOyAvKiB0aGUg
dHJlZSB0byBiZSBzY2FubmVkICovCiAgICBpbnQgbWF4X2NvZGU7ICAgICAgIC8qIGFuZCBpdHMg
bGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwp7CiAgICBpbnQgbjsgICAgICAg
ICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovCiAgICBp
bnQgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovCiAgICBp
bnQgY3VybGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBjb2RlICovCiAg
ICBpbnQgbmV4dGxlbiA9IHRyZWVbMF0uTGVuOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovCiAg
ICBpbnQgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJl
bnQgY29kZSAqLwogICAgaW50IG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBj
b3VudCAqLwogICAgaW50IG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3Vu
dCAqLwoKICAgIGlmIChuZXh0bGVuID09IDApIG1heF9jb3VudCA9IDEzOCwgbWluX2NvdW50ID0g
MzsKICAgIHRyZWVbbWF4X2NvZGUrMV0uTGVuID0gKHVzaCkweGZmZmY7IC8qIGd1YXJkICovCgog
ICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgY3VybGVuID0gbmV4
dGxlbjsgbmV4dGxlbiA9IHRyZWVbbisxXS5MZW47CiAgICAgICAgaWYgKCsrY291bnQgPCBtYXhf
Y291bnQgJiYgY3VybGVuID09IG5leHRsZW4pIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewogICAgICAgICAgICBibF90cmVlW2N1
cmxlbl0uRnJlcSArPSBjb3VudDsKICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPSAwKSB7CiAg
ICAgICAgICAgIGlmIChjdXJsZW4gIT0gcHJldmxlbikgYmxfdHJlZVtjdXJsZW5dLkZyZXErKzsK
ICAgICAgICAgICAgYmxfdHJlZVtSRVBfM182XS5GcmVxKys7CiAgICAgICAgfSBlbHNlIGlmIChj
b3VudCA8PSAxMCkgewogICAgICAgICAgICBibF90cmVlW1JFUFpfM18xMF0uRnJlcSsrOwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJsX3RyZWVbUkVQWl8xMV8xMzhdLkZyZXErKzsKICAg
ICAgICB9CiAgICAgICAgY291bnQgPSAwOyBwcmV2bGVuID0gY3VybGVuOwogICAgICAgIGlmIChu
ZXh0bGVuID09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4LCBtaW5fY291bnQgPSAz
OwogICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4
X2NvdW50ID0gNiwgbWluX2NvdW50ID0gMzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBt
YXhfY291bnQgPSA3LCBtaW5fY291bnQgPSA0OwogICAgICAgIH0KICAgIH0KfQoKLyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CiAqIFNlbmQgYSBsaXRlcmFsIG9yIGRpc3RhbmNlIHRyZWUgaW4gY29tcHJl
c3NlZCBmb3JtLCB1c2luZyB0aGUgY29kZXMgaW4KICogYmxfdHJlZS4KICovCmxvY2FsIHZvaWQg
c2VuZF90cmVlICh0cmVlLCBtYXhfY29kZSkKICAgIGN0X2RhdGEgbmVhciAqdHJlZTsgLyogdGhl
IHRyZWUgdG8gYmUgc2Nhbm5lZCAqLwogICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRz
IGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi8KewogICAgaW50IG47ICAgICAg
ICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqLwogICAg
aW50IHByZXZsZW4gPSAtMTsgICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAqLwogICAg
aW50IGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqLwog
ICAgaW50IG5leHRsZW4gPSB0cmVlWzBdLkxlbjsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqLwog
ICAgaW50IGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJy
ZW50IGNvZGUgKi8KICAgIGludCBtYXhfY291bnQgPSA3OyAgICAgICAgIC8qIG1heCByZXBlYXQg
Y291bnQgKi8KICAgIGludCBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291
bnQgKi8KCiAgICAvKiB0cmVlW21heF9jb2RlKzFdLkxlbiA9IC0xOyAqLyAgLyogZ3VhcmQgYWxy
ZWFkeSBzZXQgKi8KICAgIGlmIChuZXh0bGVuID09IDApIG1heF9jb3VudCA9IDEzOCwgbWluX2Nv
dW50ID0gMzsKCiAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICBj
dXJsZW4gPSBuZXh0bGVuOyBuZXh0bGVuID0gdHJlZVtuKzFdLkxlbjsKICAgICAgICBpZiAoKytj
b3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT0gbmV4dGxlbikgewogICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgICAgICAg
IGRvIHsgc2VuZF9jb2RlKGN1cmxlbiwgYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT0gMCk7
CgogICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9IDApIHsKICAgICAgICAgICAgaWYgKGN1cmxl
biAhPSBwcmV2bGVuKSB7CiAgICAgICAgICAgICAgICBzZW5kX2NvZGUoY3VybGVuLCBibF90cmVl
KTsgY291bnQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnQoY291bnQgPj0gMyAm
JiBjb3VudCA8PSA2LCAiIDNfNj8iKTsKICAgICAgICAgICAgc2VuZF9jb2RlKFJFUF8zXzYsIGJs
X3RyZWUpOyBzZW5kX2JpdHMoY291bnQtMywgMik7CgogICAgICAgIH0gZWxzZSBpZiAoY291bnQg
PD0gMTApIHsKICAgICAgICAgICAgc2VuZF9jb2RlKFJFUFpfM18xMCwgYmxfdHJlZSk7IHNlbmRf
Yml0cyhjb3VudC0zLCAzKTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VuZF9jb2Rl
KFJFUFpfMTFfMTM4LCBibF90cmVlKTsgc2VuZF9iaXRzKGNvdW50LTExLCA3KTsKICAgICAgICB9
CiAgICAgICAgY291bnQgPSAwOyBwcmV2bGVuID0gY3VybGVuOwogICAgICAgIGlmIChuZXh0bGVu
ID09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4LCBtaW5fY291bnQgPSAzOwogICAg
ICAgIH0gZWxzZSBpZiAoY3VybGVuID09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4X2NvdW50
ID0gNiwgbWluX2NvdW50ID0gMzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXhfY291
bnQgPSA3LCBtaW5fY291bnQgPSA0OwogICAgICAgIH0KICAgIH0KfQoKLyogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CiAqIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGZvciB0aGUgYml0IGxlbmd0aHMg
YW5kIHJldHVybiB0aGUgaW5kZXggaW4KICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0
aCBjb2RlIHRvIHNlbmQuCiAqLwpsb2NhbCBpbnQgYnVpbGRfYmxfdHJlZSgpCnsKICAgIGludCBt
YXhfYmxpbmRleDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJv
IGZyZXEgKi8KCiAgICBwcmludGYoIlxuYnVpbGRfYmxfdHJlZSIpOwogICAgLyogRGV0ZXJtaW5l
IHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVl
cyAqLwogICAgc2Nhbl90cmVlKChjdF9kYXRhIG5lYXIgKilkeW5fbHRyZWUsIGxfZGVzYy5tYXhf
Y29kZSk7CiAgICBzY2FuX3RyZWUoKGN0X2RhdGEgbmVhciAqKWR5bl9kdHJlZSwgZF9kZXNjLm1h
eF9jb2RlKTsKCiAgICAvKiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlOiAqLwogICAgcHJpbnRm
KCJcbmJ1aWxkX3RyZWUgZnJvbSBidWlsZF9ibF90cmVlIik7CiAgICBidWlsZF90cmVlKCh0cmVl
X2Rlc2MgbmVhciAqKSgmYmxfZGVzYykpOwogICAgLyogb3B0X2xlbiBub3cgaW5jbHVkZXMgdGhl
IGxlbmd0aCBvZiB0aGUgdHJlZSByZXByZXNlbnRhdGlvbnMsIGV4Y2VwdAogICAgICogdGhlIGxl
bmd0aHMgb2YgdGhlIGJpdCBsZW5ndGhzIGNvZGVzIGFuZCB0aGUgNSs1KzQgYml0cyBmb3IgdGhl
IGNvdW50cy4KICAgICAqLwoKICAgIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5n
dGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdAogICAgICogcmVxdWlyZXMgdGhhdCBh
dCBsZWFzdCA0IGJpdCBsZW5ndGggY29kZXMgYmUgc2VudC4gKGFwcG5vdGUudHh0IHNheXMKICAg
ICAqIDMgYnV0IHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpcyA0LikKICAgICAqLwogICAgZm9yICht
YXhfYmxpbmRleCA9IEJMX0NPREVTLTE7IG1heF9ibGluZGV4ID49IDM7IG1heF9ibGluZGV4LS0p
IHsKICAgICAgICBpZiAoYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF1dLkxlbiAhPSAwKSBi
cmVhazsKICAgIH0KICAgIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5n
dGggdHJlZSBhbmQgY291bnRzICovCiAgICBvcHRfbGVuICs9IDMqKG1heF9ibGluZGV4KzEpICsg
NSs1KzQ7CiAgICBUcmFjZXYoKHN0ZGVyciwgIlxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVs
ZCIsIG9wdF9sZW4sIHN0YXRpY19sZW4pKTsKCiAgICByZXR1cm4gbWF4X2JsaW5kZXg7Cn0KCi8q
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQogKiBTZW5kIHRoZSBoZWFkZXIgZm9yIGEgYmxvY2sgdXNpbmcg
ZHluYW1pYyBIdWZmbWFuIHRyZWVzOiB0aGUgY291bnRzLCB0aGUKICogbGVuZ3RocyBvZiB0aGUg
Yml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUu
CiAqIElOIGFzc2VydGlvbjogbGNvZGVzID49IDI1NywgZGNvZGVzID49IDEsIGJsY29kZXMgPj0g
NC4KICovCmxvY2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMobGNvZGVzLCBkY29kZXMsIGJsY29kZXMp
CiAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51bWJlciBvZiBjb2RlcyBmb3Ig
ZWFjaCB0cmVlICovCnsKICAgIGludCByYW5rOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXgg
aW4gYmxfb3JkZXIgKi8KCiAgICBBc3NlcnQgKGxjb2RlcyA+PSAyNTcgJiYgZGNvZGVzID49IDEg
JiYgYmxjb2RlcyA+PSA0LCAibm90IGVub3VnaCBjb2RlcyIpOwogICAgQXNzZXJ0IChsY29kZXMg
PD0gTF9DT0RFUyAmJiBkY29kZXMgPD0gRF9DT0RFUyAmJiBibGNvZGVzIDw9IEJMX0NPREVTLAog
ICAgICAgICAgICAidG9vIG1hbnkgY29kZXMiKTsKICAgIFRyYWNldigoc3RkZXJyLCAiXG5ibCBj
b3VudHM6ICIpKTsKICAgIHNlbmRfYml0cyhsY29kZXMtMjU3LCA1KTsgLyogbm90ICsyNTUgYXMg
c3RhdGVkIGluIGFwcG5vdGUudHh0ICovCiAgICBzZW5kX2JpdHMoZGNvZGVzLTEsICAgNSk7CiAg
ICBzZW5kX2JpdHMoYmxjb2Rlcy00LCAgNCk7IC8qIG5vdCAtMyBhcyBzdGF0ZWQgaW4gYXBwbm90
ZS50eHQgKi8KICAgIGZvciAocmFuayA9IDA7IHJhbmsgPCBibGNvZGVzOyByYW5rKyspIHsKICAg
ICAgICBUcmFjZXYoKHN0ZGVyciwgIlxuYmwgY29kZSAlMmQgIiwgYmxfb3JkZXJbcmFua10pKTsK
ICAgICAgICBzZW5kX2JpdHMoYmxfdHJlZVtibF9vcmRlcltyYW5rXV0uTGVuLCAzKTsKICAgIH0K
ICAgIFRyYWNldigoc3RkZXJyLCAiXG5ibCB0cmVlOiBzZW50ICVsZCIsIGJpdHNfc2VudCkpOwoK
ICAgIHNlbmRfdHJlZSgoY3RfZGF0YSBuZWFyICopZHluX2x0cmVlLCBsY29kZXMtMSk7IC8qIHNl
bmQgdGhlIGxpdGVyYWwgdHJlZSAqLwogICAgVHJhY2V2KChzdGRlcnIsICJcbmxpdCB0cmVlOiBz
ZW50ICVsZCIsIGJpdHNfc2VudCkpOwoKICAgIHNlbmRfdHJlZSgoY3RfZGF0YSBuZWFyICopZHlu
X2R0cmVlLCBkY29kZXMtMSk7IC8qIHNlbmQgdGhlIGRpc3RhbmNlIHRyZWUgKi8KICAgIFRyYWNl
digoc3RkZXJyLCAiXG5kaXN0IHRyZWU6IHNlbnQgJWxkIiwgYml0c19zZW50KSk7Cn0KCi8qID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQogKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBj
dXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWMKICogdHJlZXMgb3Igc3RvcmUsIGFu
ZCBvdXRwdXQgdGhlIGVuY29kZWQgYmxvY2sgdG8gdGhlIHppcCBmaWxlLiBUaGlzIGZ1bmN0aW9u
CiAqIHJldHVybnMgdGhlIHRvdGFsIGNvbXByZXNzZWQgbGVuZ3RoIGZvciB0aGUgZmlsZSBzbyBm
YXIuCiAqLwp1bGcgZmx1c2hfYmxvY2soYnVmLCBzdG9yZWRfbGVuLCBlb2YpCiAgICBjaGFyICpi
dWY7ICAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovCiAgICB1bGcg
c3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KICAgIGludCBlb2Y7ICAg
ICAgICAgIC8qIHRydWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovCnsK
ICAgIHVsZyBvcHRfbGVuYiwgc3RhdGljX2xlbmI7IC8qIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4g
aW4gYnl0ZXMgKi8KICAgIGludCBtYXhfYmxpbmRleDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxl
bmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KCiAgICBmbGFnX2J1ZltsYXN0X2ZsYWdzXSA9
IGZsYWdzOyAvKiBTYXZlIHRoZSBmbGFncyBmb3IgdGhlIGxhc3QgOCBpdGVtcyAqLwoKICAgIHBy
aW50ZigiXG5mbHVzaCBibG9jayIpOwogICAgLy9wcmludGYoIlxuc3RvcmVkX2xlbiA9ICVsdSIs
IHN0b3JlZF9sZW4pOwoKICAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBhc2NpaSBvciBiaW5h
cnkgKi8KICAgIGlmICgqZmlsZV90eXBlID09ICh1c2gpVU5LTk9XTikgc2V0X2ZpbGVfdHlwZSgp
OwoKICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi8KICAg
IHByaW50ZigiXG5idWlsZF90cmVlIGNhbGwgZnJvbSBmbHVzaF9ibG9jayAxIik7CiAgICBidWls
ZF90cmVlKCh0cmVlX2Rlc2MgbmVhciAqKSgmbF9kZXNjKSk7CiAgICBUcmFjZXYoKHN0ZGVyciwg
IlxubGl0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkIiwgb3B0X2xlbiwgc3RhdGljX2xlbikpOwoK
ICAgIHByaW50ZigiXG5idWlsZF90cmVlIGNhbGwgZnJvbSBmbHVzaF9ibG9jayAyIik7CiAgICBi
dWlsZF90cmVlKCh0cmVlX2Rlc2MgbmVhciAqKSgmZF9kZXNjKSk7CiAgICBUcmFjZXYoKHN0ZGVy
ciwgIlxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZCIsIG9wdF9sZW4sIHN0YXRpY19sZW4p
KTsKICAgIC8vcHJpbnRmKCJcbmZsdXNoX2Jsb2NrOiBvcHRfbGVuID0gJWx1ICwgc3RhdGljX2xl
biA9ICVsdSIsIG9wdF9sZW4sIHN0YXRpY19sZW4pOwogICAgLyogQXQgdGhpcyBwb2ludCwgb3B0
X2xlbiBhbmQgc3RhdGljX2xlbiBhcmUgdGhlIHRvdGFsIGJpdCBsZW5ndGhzIG9mCiAgICAgKiB0
aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRp
b25zLgogICAgICovCgogICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFi
b3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXgKICAgICAqIGluIGJsX29yZGVyIG9mIHRo
ZSBsYXN0IGJpdCBsZW5ndGggY29kZSB0byBzZW5kLgogICAgICovCiAgICBwcmludGYoIlxuYnVp
bGRfYmxfdHJlZSBjYWxsIGZyb20gZmx1c2hfYmxvY2siKTsKICAgIG1heF9ibGluZGV4ID0gYnVp
bGRfYmxfdHJlZSgpOwoKICAgIC8qIERldGVybWluZSB0aGUgYmVzdCBlbmNvZGluZy4gQ29tcHV0
ZSBmaXJzdCB0aGUgYmxvY2sgbGVuZ3RoIGluIGJ5dGVzICovCiAgICBvcHRfbGVuYiA9IChvcHRf
bGVuKzMrNyk+PjM7CiAgICBzdGF0aWNfbGVuYiA9IChzdGF0aWNfbGVuKzMrNyk+PjM7CiAgICBp
bnB1dF9sZW4gKz0gc3RvcmVkX2xlbjsgLyogZm9yIGRlYnVnZ2luZyBvbmx5ICovCgogICAgVHJh
Y2UoKHN0ZGVyciwgIlxub3B0ICVsdSglbHUpIHN0YXQgJWx1KCVsdSkgc3RvcmVkICVsdSBsaXQg
JXUgZGlzdCAldSAiLAogICAgICAgICAgICBvcHRfbGVuYiwgb3B0X2xlbiwgc3RhdGljX2xlbmIs
IHN0YXRpY19sZW4sIHN0b3JlZF9sZW4sCiAgICAgICAgICAgIGxhc3RfbGl0LCBsYXN0X2Rpc3Qp
KTsKCiAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIG9wdF9sZW5iID0gc3RhdGljX2xl
bmI7CgogICAgLyogSWYgY29tcHJlc3Npb24gZmFpbGVkIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCBh
bmQgbGFzdCBibG9jaywKICAgICAqIGFuZCBpZiB0aGUgemlwIGZpbGUgY2FuIGJlIHNlZWtlZCAo
dG8gcmV3cml0ZSB0aGUgbG9jYWwgaGVhZGVyKSwKICAgICAqIHRoZSB3aG9sZSBmaWxlIGlzIHRy
YW5zZm9ybWVkIGludG8gYSBzdG9yZWQgZmlsZToKICAgICAqLwojaWZkZWYgRk9SQ0VfTUVUSE9E
CiAgICBpZiAobGV2ZWwgPT0gMSAmJiBlb2YgJiYgY29tcHJlc3NlZF9sZW4gPT0gMEwpIHsgLyog
Zm9yY2Ugc3RvcmVkIGZpbGUgKi8KI2Vsc2UKICAgIGlmIChzdG9yZWRfbGVuIDw9IG9wdF9sZW5i
ICYmIGVvZiAmJiBjb21wcmVzc2VkX2xlbiA9PSAwTCAmJiBzZWVrYWJsZSgpKSB7CiNlbmRpZgog
ICAgICAgIC8qIFNpbmNlIExJVF9CVUZTSVpFIDw9IDIqV1NJWkUsIHRoZSBpbnB1dCBkYXRhIG11
c3QgYmUgdGhlcmU6ICovCiAgICAgICAgaWYgKGJ1ZiA9PSAoY2hhciopMCkgZXJyb3IgKCJibG9j
ayB2YW5pc2hlZCIpOwoKICAgICAgICBjb3B5X2Jsb2NrKGJ1ZiwgKHVuc2lnbmVkKXN0b3JlZF9s
ZW4sIDApOyAvKiB3aXRob3V0IGhlYWRlciAqLwogICAgICAgIGNvbXByZXNzZWRfbGVuID0gc3Rv
cmVkX2xlbiA8PCAzOwogICAgICAgICpmaWxlX21ldGhvZCA9IFNUT1JFRDsKCiNpZmRlZiBGT1JD
RV9NRVRIT0QKICAgIH0gZWxzZSBpZiAobGV2ZWwgPT0gMiAmJiBidWYgIT0gKGNoYXIqKTApIHsg
LyogZm9yY2Ugc3RvcmVkIGJsb2NrICovCiNlbHNlCiAgICB9IGVsc2UgaWYgKHN0b3JlZF9sZW4r
NCA8PSBvcHRfbGVuYiAmJiBidWYgIT0gKGNoYXIqKTApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovCiNlbmRpZgogICAgICAgIC8qIFRo
ZSB0ZXN0IGJ1ZiAhPSBOVUxMIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIExJVF9CVUZTSVpFID4gV1NJ
WkUuCiAgICAgICAgICogT3RoZXJ3aXNlIHdlIGNhbid0IGhhdmUgcHJvY2Vzc2VkIG1vcmUgdGhh
biBXU0laRSBpbnB1dCBieXRlcyBzaW5jZQogICAgICAgICAqIHRoZSBsYXN0IGJsb2NrIGZsdXNo
LCBiZWNhdXNlIGNvbXByZXNzaW9uIHdvdWxkIGhhdmUgYmVlbgogICAgICAgICAqIHN1Y2Nlc3Nm
dWwuIElmIExJVF9CVUZTSVpFIDw9IFdTSVpFLCBpdCBpcyBuZXZlciB0b28gbGF0ZSB0bwogICAg
ICAgICAqIHRyYW5zZm9ybSBhIGJsb2NrIGludG8gYSBzdG9yZWQgYmxvY2suCiAgICAgICAgICov
CiAgICAgICAgc2VuZF9iaXRzKChTVE9SRURfQkxPQ0s8PDEpK2VvZiwgMyk7ICAvKiBzZW5kIGJs
b2NrIHR5cGUgKi8KICAgICAgICBjb21wcmVzc2VkX2xlbiA9IChjb21wcmVzc2VkX2xlbiArIDMg
KyA3KSAmIH43TDsKICAgICAgICBjb21wcmVzc2VkX2xlbiArPSAoc3RvcmVkX2xlbiArIDQpIDw8
IDM7CgogICAgICAgIGNvcHlfYmxvY2soYnVmLCAodW5zaWduZWQpc3RvcmVkX2xlbiwgMSk7IC8q
IHdpdGggaGVhZGVyICovCgojaWZkZWYgRk9SQ0VfTUVUSE9ECiAgICB9IGVsc2UgaWYgKGxldmVs
ID09IDMpIHsgLyogZm9yY2Ugc3RhdGljIHRyZWVzICovCiNlbHNlCiAgICB9IGVsc2UgaWYgKHN0
YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CiNlbmRpZgogICAgICAgIHNlbmRfYml0cygoU1RBVElD
X1RSRUVTPDwxKStlb2YsIDMpOwogICAgICAgIGNvbXByZXNzX2Jsb2NrKChjdF9kYXRhIG5lYXIg
KilzdGF0aWNfbHRyZWUsIChjdF9kYXRhIG5lYXIgKilzdGF0aWNfZHRyZWUpOwogICAgICAgIGNv
bXByZXNzZWRfbGVuICs9IDMgKyBzdGF0aWNfbGVuOwogICAgfSBlbHNlIHsKICAgICAgICBzZW5k
X2JpdHMoKERZTl9UUkVFUzw8MSkrZW9mLCAzKTsKICAgICAgICBzZW5kX2FsbF90cmVlcyhsX2Rl
c2MubWF4X2NvZGUrMSwgZF9kZXNjLm1heF9jb2RlKzEsIG1heF9ibGluZGV4KzEpOwogICAgICAg
IGNvbXByZXNzX2Jsb2NrKChjdF9kYXRhIG5lYXIgKilkeW5fbHRyZWUsIChjdF9kYXRhIG5lYXIg
KilkeW5fZHRyZWUpOwogICAgICAgIGNvbXByZXNzZWRfbGVuICs9IDMgKyBvcHRfbGVuOwogICAg
fQogICAgQXNzZXJ0IChjb21wcmVzc2VkX2xlbiA9PSBiaXRzX3NlbnQsICJiYWQgY29tcHJlc3Nl
ZCBzaXplIik7CiAgICBpbml0X2Jsb2NrKCk7CgogICAgaWYgKGVvZikgewogICAgICAgIEFzc2Vy
dCAoaW5wdXRfbGVuID09IGlzaXplLCAiYmFkIGlucHV0IHNpemUiKTsKICAgICAgICBiaV93aW5k
dXAoKTsKICAgICAgICBjb21wcmVzc2VkX2xlbiArPSA3OyAgLyogYWxpZ24gb24gYnl0ZSBib3Vu
ZGFyeSAqLwogICAgfQogICAgVHJhY2V2KChzdGRlcnIsIlxuY29tcHJsZW4gJWx1KCVsdSkgIiwg
Y29tcHJlc3NlZF9sZW4+PjMsCiAgICAgICAgICAgY29tcHJlc3NlZF9sZW4tNyplb2YpKTsKCiAg
ICAvL3ByaW50ZigiXG5mbHVzaF9ibG9jazogY29tcHJlc3NlZF9sZW4gPSAlbHUiLCBjb21wcmVz
c2VkX2xlbik7CgogICAgcmV0dXJuIGNvbXByZXNzZWRfbGVuID4+IDM7Cn0KCi8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQogKiBTYXZlIHRoZSBtYXRjaCBpbmZvIGFuZCB0YWxseSB0aGUgZnJlcXVlbmN5
IGNvdW50cy4gUmV0dXJuIHRydWUgaWYKICogdGhlIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVz
aGVkLgogKi8KaW50IGN0X3RhbGx5IChkaXN0LCBsYykKICAgIGludCBkaXN0OyAgLyogZGlzdGFu
Y2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICAgIGludCBsYzsgICAgLyogbWF0Y2ggbGVuZ3RoLU1J
Tl9NQVRDSCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdD09MCkgKi8KewogICAgbF9idWZbbGFz
dF9saXQrK10gPSAodWNoKWxjOwogICAgLy9wcmludGYoImN0X3RhbGx5XG4iKTsKICAgIGlmIChk
aXN0ID09IDApIHsKICAgICAgICAvKiBsYyBpcyB0aGUgdW5tYXRjaGVkIGNoYXIgKi8KICAgICAg
ICBkeW5fbHRyZWVbbGNdLkZyZXErKzsKICAgIH0gZWxzZSB7CiAgICAgICAgLyogSGVyZSwgbGMg
aXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqLwogICAgICAgIGRpc3QtLTsgICAgICAg
ICAgICAgLyogZGlzdCA9IG1hdGNoIGRpc3RhbmNlIC0gMSAqLwogICAgICAgIEFzc2VydCgodXNo
KWRpc3QgPCAodXNoKU1BWF9ESVNUICYmCiAgICAgICAgICAgICAgICh1c2gpbGMgPD0gKHVzaCko
TUFYX01BVENILU1JTl9NQVRDSCkgJiYKICAgICAgICAgICAgICAgKHVzaClkX2NvZGUoZGlzdCkg
PCAodXNoKURfQ09ERVMsICAiY3RfdGFsbHk6IGJhZCBtYXRjaCIpOwoKICAgICAgICBkeW5fbHRy
ZWVbbGVuZ3RoX2NvZGVbbGNdK0xJVEVSQUxTKzFdLkZyZXErKzsKICAgICAgICBkeW5fZHRyZWVb
ZF9jb2RlKGRpc3QpXS5GcmVxKys7CgogICAgICAgIGRfYnVmW2xhc3RfZGlzdCsrXSA9ICh1c2gp
ZGlzdDsKICAgICAgICBmbGFncyB8PSBmbGFnX2JpdDsKICAgIH0KICAgIGZsYWdfYml0IDw8PSAx
OwoKICAgIC8qIE91dHB1dCB0aGUgZmxhZ3MgaWYgdGhleSBmaWxsIGEgYnl0ZTogKi8KICAgIGlm
ICgobGFzdF9saXQgJiA3KSA9PSAwKSB7CiAgICAgICAgZmxhZ19idWZbbGFzdF9mbGFncysrXSA9
IGZsYWdzOwogICAgICAgIGZsYWdzID0gMCwgZmxhZ19iaXQgPSAxOwogICAgfQogICAgLyogVHJ5
IHRvIGd1ZXNzIGlmIGl0IGlzIHByb2ZpdGFibGUgdG8gc3RvcCB0aGUgY3VycmVudCBibG9jayBo
ZXJlICovCiAgICBpZiAobGV2ZWwgPiAyICYmIChsYXN0X2xpdCAmIDB4ZmZmKSA9PSAwKSB7CiAg
ICAJcHJpbnRmKCJcbmN0X3RhbGx5IHByw7NiYSB3eXJ6dWNlbmlhIGZsdXNoID0xIik7CiAgICAg
ICAgLyogQ29tcHV0ZSBhbiB1cHBlciBib3VuZCBmb3IgdGhlIGNvbXByZXNzZWQgbGVuZ3RoICov
CiAgICAgICAgdWxnIG91dF9sZW5ndGggPSAodWxnKWxhc3RfbGl0KjhMOwogICAgICAgIHVsZyBp
bl9sZW5ndGggPSAodWxnKXN0cnN0YXJ0LWJsb2NrX3N0YXJ0OwogICAgICAgIGludCBkY29kZTsK
ICAgICAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7CiAgICAg
ICAgICAgIG91dF9sZW5ndGggKz0gKHVsZylkeW5fZHRyZWVbZGNvZGVdLkZyZXEqKDVMK2V4dHJh
X2RiaXRzW2Rjb2RlXSk7CiAgICAgICAgfQogICAgICAgIG91dF9sZW5ndGggPj49IDM7CiAgICAg
ICAgVHJhY2UoKHN0ZGVyciwiXG5sYXN0X2xpdCAldSwgbGFzdF9kaXN0ICV1LCBpbiAlbGQsIG91
dCB+JWxkKCVsZCUlKSAiLAogICAgICAgICAgICAgICBsYXN0X2xpdCwgbGFzdF9kaXN0LCBpbl9s
ZW5ndGgsIG91dF9sZW5ndGgsCiAgICAgICAgICAgICAgIDEwMEwgLSBvdXRfbGVuZ3RoKjEwMEwv
aW5fbGVuZ3RoKSk7CiAgICAgICAgaWYgKGxhc3RfZGlzdCA8IGxhc3RfbGl0LzIgJiYgb3V0X2xl
bmd0aCA8IGluX2xlbmd0aC8yKSB7CiAgICAgICAgCXByaW50ZigiICB1ZGFuYS4iKTsKICAgICAg
ICAJcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAJcHJpbnRmKCIgICBuaWV1ZGFu
YS4iKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxhc3RfbGl0ID09IExJVF9CVUZTSVpFLTEg
fHwgbGFzdF9kaXN0ID09IERJU1RfQlVGU0laRSl7CiAgICAJcHJpbnRmKCJcbmN0X3RhbGx5OiBr
b25pZWMgZnVua2NqaSBzcHJhd2R6ZW5pZSBidWZvcsOzdyBkbGEgcmV0dXJuIDEuIik7CiAgICB9
CiAgICByZXR1cm4gKGxhc3RfbGl0ID09IExJVF9CVUZTSVpFLTEgfHwgbGFzdF9kaXN0ID09IERJ
U1RfQlVGU0laRSk7CiAgICAvKiBXZSBhdm9pZCBlcXVhbGl0eSB3aXRoIExJVF9CVUZTSVpFIGJl
Y2F1c2Ugb2Ygd3JhcGFyb3VuZCBhdCA2NEsKICAgICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQg
YmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvCiAgICAgKiA2NEstMSBieXRl
cy4KICAgICAqLwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU2VuZCB0aGUgYmxvY2sgZGF0
YSBjb21wcmVzc2VkIHVzaW5nIHRoZSBnaXZlbiBIdWZmbWFuIHRyZWVzCiAqLwpsb2NhbCB2b2lk
IGNvbXByZXNzX2Jsb2NrKGx0cmVlLCBkdHJlZSkKICAgIGN0X2RhdGEgbmVhciAqbHRyZWU7IC8q
IGxpdGVyYWwgdHJlZSAqLwogICAgY3RfZGF0YSBuZWFyICpkdHJlZTsgLyogZGlzdGFuY2UgdHJl
ZSAqLwp7CiAgICB1bnNpZ25lZCBkaXN0OyAgICAgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3Ry
aW5nICovCiAgICBpbnQgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNo
ZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqLwogICAgdW5zaWduZWQgbHggPSAwOyAgICAvKiBydW5u
aW5nIGluZGV4IGluIGxfYnVmICovCiAgICB1bnNpZ25lZCBkeCA9IDA7ICAgIC8qIHJ1bm5pbmcg
aW5kZXggaW4gZF9idWYgKi8KICAgIHVuc2lnbmVkIGZ4ID0gMDsgICAgLyogcnVubmluZyBpbmRl
eCBpbiBmbGFnX2J1ZiAqLwogICAgdWNoIGZsYWcgPSAwOyAgICAgICAvKiBjdXJyZW50IGZsYWdz
ICovCiAgICB1bnNpZ25lZCBjb2RlOyAgICAgIC8qIHRoZSBjb2RlIHRvIHNlbmQgKi8KICAgIGlu
dCBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqLwoKICAg
IGlmIChsYXN0X2xpdCAhPSAwKSBkbyB7CiAgICAgICAgaWYgKChseCAmIDcpID09IDApIGZsYWcg
PSBmbGFnX2J1ZltmeCsrXTsKICAgICAgICBsYyA9IGxfYnVmW2x4KytdOwogICAgICAgIGlmICgo
ZmxhZyAmIDEpID09IDApIHsKICAgICAgICAgICAgc2VuZF9jb2RlKGxjLCBsdHJlZSk7IC8qIHNl
bmQgYSBsaXRlcmFsIGJ5dGUgKi8KICAgICAgICAgICAgVHJhY2Vjdihpc2dyYXBoKGxjKSwgKHN0
ZGVyciwiICclYycgIiwgbGMpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBIZXJl
LCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovCiAgICAgICAgICAgIGNvZGUg
PSBsZW5ndGhfY29kZVtsY107CiAgICAgICAgICAgIHNlbmRfY29kZShjb2RlK0xJVEVSQUxTKzEs
IGx0cmVlKTsgLyogc2VuZCB0aGUgbGVuZ3RoIGNvZGUgKi8KICAgICAgICAgICAgZXh0cmEgPSBl
eHRyYV9sYml0c1tjb2RlXTsKICAgICAgICAgICAgaWYgKGV4dHJhICE9IDApIHsKICAgICAgICAg
ICAgICAgIGxjIC09IGJhc2VfbGVuZ3RoW2NvZGVdOwogICAgICAgICAgICAgICAgc2VuZF9iaXRz
KGxjLCBleHRyYSk7ICAgICAgICAvKiBzZW5kIHRoZSBleHRyYSBsZW5ndGggYml0cyAqLwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGRpc3QgPSBkX2J1ZltkeCsrXTsKICAgICAgICAgICAgLyog
SGVyZSwgZGlzdCBpcyB0aGUgbWF0Y2ggZGlzdGFuY2UgLSAxICovCiAgICAgICAgICAgIGNvZGUg
PSBkX2NvZGUoZGlzdCk7CiAgICAgICAgICAgIEFzc2VydCAoY29kZSA8IERfQ09ERVMsICJiYWQg
ZF9jb2RlIik7CgogICAgICAgICAgICBzZW5kX2NvZGUoY29kZSwgZHRyZWUpOyAgICAgICAvKiBz
ZW5kIHRoZSBkaXN0YW5jZSBjb2RlICovCiAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNb
Y29kZV07CiAgICAgICAgICAgIGlmIChleHRyYSAhPSAwKSB7CiAgICAgICAgICAgICAgICBkaXN0
IC09IGJhc2VfZGlzdFtjb2RlXTsKICAgICAgICAgICAgICAgIHNlbmRfYml0cyhkaXN0LCBleHRy
YSk7ICAgLyogc2VuZCB0aGUgZXh0cmEgZGlzdGFuY2UgYml0cyAqLwogICAgICAgICAgICB9CiAg
ICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqLwogICAgICAgIGZsYWcgPj49IDE7
CiAgICB9IHdoaWxlIChseCA8IGxhc3RfbGl0KTsKCiAgICBzZW5kX2NvZGUoRU5EX0JMT0NLLCBs
dHJlZSk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZXQgdGhlIGZpbGUgdHlwZSB0byBB
U0NJSSBvciBCSU5BUlksIHVzaW5nIGEgY3J1ZGUgYXBwcm94aW1hdGlvbjoKICogYmluYXJ5IGlm
IG1vcmUgdGhhbiAyMCUgb2YgdGhlIGJ5dGVzIGFyZSA8PSA2IG9yID49IDEyOCwgYXNjaWkgb3Ro
ZXJ3aXNlLgogKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBvZiBkeW5fbHRyZWUgYXJl
IHNldCBhbmQgdGhlIHRvdGFsIG9mIGFsbAogKiBmcmVxdWVuY2llcyBkb2VzIG5vdCBleGNlZWQg
NjRLICh0byBmaXQgaW4gYW4gaW50IG9uIDE2IGJpdCBtYWNoaW5lcykuCiAqLwpsb2NhbCB2b2lk
IHNldF9maWxlX3R5cGUoKQp7CiAgICBpbnQgbiA9IDA7CiAgICB1bnNpZ25lZCBhc2NpaV9mcmVx
ID0gMDsKICAgIHVuc2lnbmVkIGJpbl9mcmVxID0gMDsKICAgIHdoaWxlIChuIDwgNykgICAgICAg
IGJpbl9mcmVxICs9IGR5bl9sdHJlZVtuKytdLkZyZXE7CiAgICB3aGlsZSAobiA8IDEyOCkgICAg
YXNjaWlfZnJlcSArPSBkeW5fbHRyZWVbbisrXS5GcmVxOwogICAgd2hpbGUgKG4gPCBMSVRFUkFM
UykgYmluX2ZyZXEgKz0gZHluX2x0cmVlW24rK10uRnJlcTsKICAgICpmaWxlX3R5cGUgPSBiaW5f
ZnJlcSA+IChhc2NpaV9mcmVxID4+IDIpID8gQklOQVJZIDogQVNDSUk7CiAgICBpZiAoKmZpbGVf
dHlwZSA9PSBCSU5BUlkgJiYgdHJhbnNsYXRlX2VvbCkgewogICAgICAgIHdhcm4oIi1sIHVzZWQg
b24gYmluYXJ5IGZpbGUiLCAiIik7CiAgICB9Cn0K

--part52d8554de70428.92881097--






Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.503 (Entity 5.503)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: "Krzysztof Rybak" <krzysztofrybak6@HIDDEN>
Subject: bug#16472: Acknowledgement (PD: gzip - tree overflow protection
 algorithm doubt/suggestion)
Message-ID: <handler.16472.B.138991629913234.ack <at> debbugs.gnu.org>
References: <52d8554de71410.11082928@HIDDEN>
X-Gnu-PR-Message: ack 16472
X-Gnu-PR-Package: gzip
Reply-To: 16472 <at> debbugs.gnu.org
Date: Thu, 16 Jan 2014 23:52:03 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gzip@HIDDEN

If you wish to submit further information on this problem, please
send it to 16472 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
16472: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D16472
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems



Last modified: Mon, 25 Nov 2019 12:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.