GNU bug report logs - #16472
PD: gzip - tree overflow protection algorithm doubt/suggestion

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: gzip; Reported by: "Krzysztof Rybak" <krzysztofrybak6@HIDDEN>; dated Thu, 16 Jan 2014 23:52:02 UTC; Maintainer for gzip is bug-gzip@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 16 Jan 2014 23:51:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jan 16 18:51:39 2014
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>
To: bug-gzip@HIDDEN
Subject: PD: gzip - tree overflow protection algorithm doubt/suggestion
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-Debbugs-Envelope-To: submit
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
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
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--






Acknowledgement sent to "Krzysztof Rybak" <krzysztofrybak6@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gzip@HIDDEN. Full text available.
Report forwarded to bug-gzip@HIDDEN:
bug#16472; Package gzip. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Fri, 31 Oct 2014 17:00:04 UTC

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