GNU bug report logs - #70898
switching to <stdbit.h> for Emacs bit ops

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: emacs; Reported by: Paul Eggert <eggert@HIDDEN>; Done: Paul Eggert <eggert@HIDDEN>; Maintainer for emacs is bug-gnu-emacs@HIDDEN.
bug closed, send any further explanations to 70898 <at> debbugs.gnu.org and Paul Eggert <eggert@HIDDEN> Request was from Paul Eggert <eggert@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

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


Received: (at 70898) by debbugs.gnu.org; 18 May 2024 17:32:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat May 18 13:32:24 2024
Received: from localhost ([127.0.0.1]:34621 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s8Nux-0002eZ-Pg
	for submit <at> debbugs.gnu.org; Sat, 18 May 2024 13:32:24 -0400
Received: from mail.cs.ucla.edu ([131.179.128.66]:34884)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eggert@HIDDEN>) id 1s8Nuv-0002eR-8f
 for 70898 <at> debbugs.gnu.org; Sat, 18 May 2024 13:32:22 -0400
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 737513C011BE0
 for <70898 <at> debbugs.gnu.org>; Sat, 18 May 2024 10:32:11 -0700 (PDT)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id 4cNbIjd-kX86 for <70898 <at> debbugs.gnu.org>;
 Sat, 18 May 2024 10:32:10 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id DC5323C00FABA
 for <70898 <at> debbugs.gnu.org>; Sat, 18 May 2024 10:32:10 -0700 (PDT)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu DC5323C00FABA
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1716053530;
 bh=DRfCEDzShWRl7GWTAICU47JN4ozuPe44GIwxBM9bwxM=;
 h=Message-ID:Date:MIME-Version:From:To;
 b=pBoBZ/s5PoiK2Vtf3bU4NxQn1ZgpqMdzEG+XCSCoXIGs+M+shLMjhZxqO1A2yUMTT
 ovDr40V7OtQpVBUrMJFbZYndpYYO7jqpb1Ac+blS5WZ7RMAbo+1G785o7M/uP78qcL
 8HjdKmp/B14ThAWABEk3ZQxgpB3seahOHwqQ4hXlmiWs5WWConLrkeSRY15dYneNum
 T2MIW9xdEhYMXzQUd0Je3/VM52LLtuGI1/YkepA+BRE4FNdDRvGb6RumqTNOuVj5nW
 iikvqCsz6lt8OjWNBsC8EBkREHa8ukcB7alLKnatc3mu5gYQ2eQfz5jsoa8Lb+l7Y4
 8ihdkA05+ch5A==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id 3Yxa3YkfpOpt for <70898 <at> debbugs.gnu.org>;
 Sat, 18 May 2024 10:32:10 -0700 (PDT)
Received: from [192.168.254.12] (unknown [47.154.17.165])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id C693F3C011BE0
 for <70898 <at> debbugs.gnu.org>; Sat, 18 May 2024 10:32:10 -0700 (PDT)
Message-ID: <6c650a80-d200-4c51-987d-01e8dc4f1d1d@HIDDEN>
Date: Sat, 18 May 2024 10:32:10 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#70898: switching to <stdbit.h> for Emacs bit ops
From: Paul Eggert <eggert@HIDDEN>
To: 70898 <at> debbugs.gnu.org
References: <69689DCA-4836-49F2-B163-0F5D151FF03F@HIDDEN>
 <b394aa86-5753-4c55-997b-7e32ef491e99@HIDDEN>
Content-Language: en-US
Organization: UCLA Computer Science Department
In-Reply-To: <b394aa86-5753-4c55-997b-7e32ef491e99@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70898
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://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: -1.0 (-)

I installed an updated version of the patch (updated because Gnulib 
mutated) and am closing the bug report.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70898; Package emacs. Full text available.

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


Received: (at 70898) by debbugs.gnu.org; 14 May 2024 11:13:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue May 14 07:13:04 2024
Received: from localhost ([127.0.0.1]:38720 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s6q5g-0006R4-7t
	for submit <at> debbugs.gnu.org; Tue, 14 May 2024 07:13:04 -0400
Received: from mail-lf1-f51.google.com ([209.85.167.51]:54737)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <mattias.engdegard@HIDDEN>) id 1s6q5d-0006Qf-Gs
 for 70898 <at> debbugs.gnu.org; Tue, 14 May 2024 07:13:02 -0400
Received: by mail-lf1-f51.google.com with SMTP id
 2adb3069b0e04-51ef64d051bso6290927e87.1
 for <70898 <at> debbugs.gnu.org>; Tue, 14 May 2024 04:13:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1715685114; x=1716289914; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject
 :date:message-id:reply-to;
 bh=1Bx6K9VmpZi46fuV97hqE4d7qZLrwnrsFNV6oes3a6w=;
 b=FKhlATdse+0OujqpBYyzcJOHBGU2E582fxs2Km02aW/b/fJzTGkEfWbUXFn6fuETt5
 D0Z6STKXm/dVWQPY/Uj5GT0Ez2Ao3ZlDGbR4miO4+y2S3bUV0EI6kOwhr+/rvQIvYABS
 nuP7NwP64PDm414lDjb7sb0A6nf70DDzwMb/FOURNWiN7+45OT12wXcPbVYFo1OndeFg
 WAc5D+VwemIbw9i47AaSXpFP+S55T556157UHzbX217u+vlD/Xf1a3ly0MmDL2sHjz9t
 g8lnfgmy+JNwqv28roMtstajiz8wGEV+VrLxjK31q6woOmLxXD9Wrp99Dp0vdIsEvWrh
 bBrw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1715685114; x=1716289914;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=1Bx6K9VmpZi46fuV97hqE4d7qZLrwnrsFNV6oes3a6w=;
 b=ckeqLrRAb66yNuOVPgkUxCjr5xIIoUEDuMDhCiNinxIKIBjod3h6Q4lxGfmeURBsmw
 DFYXNKxlY/82z5r9t3FB9p/fzmk4q3u0YlqcOqHER+/vG/QC5pBhQ9AhmmQ3KI+C5x0e
 wIvjwHqCxV8pgMDumuY4OAfldVqHCNZQQ0J6KaB9fgxJKxOf6g//tP41ad82VMBMK5yG
 6bEIYcprkI289mc44ybwTHhze+XqjI4YTYRjw3ModJ6TJFmUjYo04BQQXHt0zxwa/6hk
 qHMgzuHfzAlphDgDBuKaFp6HpywYMU5nqy6tbCgfBlPo2aZWr5QeDowCvY7R5x1uNN1A
 Qygw==
X-Gm-Message-State: AOJu0YwKYE1NTN/7JpSkARw513dm2OONykoHEplCYFbO8YYpzl2ZtlmZ
 9vUvzeQlc3ZN/Oy6Co3znsUZ+yn40nfaG5JgboXRO/dsH7vUC7zd
X-Google-Smtp-Source: AGHT+IHctYohHrtF9N1ToC2s0K/IEv7U9sqpS+JxeSOnR48vVmxd0Qj2iXrHDpWQdJhJlzUTje/B0A==
X-Received: by 2002:a05:6512:3130:b0:51d:998e:e0c1 with SMTP id
 2adb3069b0e04-5220fa718d8mr8461491e87.13.1715685114401; 
 Tue, 14 May 2024 04:11:54 -0700 (PDT)
Received: from smtpclient.apple (c80-217-1-132.bredband.tele2.se.
 [80.217.1.132]) by smtp.gmail.com with ESMTPSA id
 2adb3069b0e04-521f35ad3c7sm2117956e87.35.2024.05.14.04.11.53
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 14 May 2024 04:11:53 -0700 (PDT)
Content-Type: text/plain;
	charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\))
Subject: Re: bug#70898: switching to <stdbit.h> for Emacs bit ops
From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
In-Reply-To: <b394aa86-5753-4c55-997b-7e32ef491e99@HIDDEN>
Date: Tue, 14 May 2024 13:11:53 +0200
Content-Transfer-Encoding: quoted-printable
Message-Id: <46D4EAF1-2CD1-43CF-8594-8ECEF8F80850@HIDDEN>
References: <69689DCA-4836-49F2-B163-0F5D151FF03F@HIDDEN>
 <b394aa86-5753-4c55-997b-7e32ef491e99@HIDDEN>
To: Paul Eggert <eggert@HIDDEN>
X-Mailer: Apple Mail (2.3654.120.0.1.15)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70898
Cc: 70898 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://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: -1.0 (-)

13 maj 2024 kl. 18.56 skrev Paul Eggert <eggert@HIDDEN>:

> (porting to theoretical platforms where C integers are wider than 256 =
bits!)

Impressive! Now all we need is a run-time parametrisable C compiler that =
can use arbitrary integer sizes, so that your work can be tested.
(Actually that would be incredibly useful for portability work, if =
only.)

> Yes, that text is weird and I also didn't have a clue as to what it =
meant. So I cloned latest glibc+gcc behavior and hoped for the best.

Indeed I misunderstood the text and the stdc_find_{first,last} functions =
look pretty useless. Good to know.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70898; Package emacs. Full text available.

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


Received: (at 70898) by debbugs.gnu.org; 13 May 2024 16:56:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon May 13 12:56:58 2024
Received: from localhost ([127.0.0.1]:33740 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s6Yyv-0003o6-RD
	for submit <at> debbugs.gnu.org; Mon, 13 May 2024 12:56:58 -0400
Received: from mail.cs.ucla.edu ([131.179.128.66]:35812)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eggert@HIDDEN>) id 1s6Yyr-0003o0-P6
 for 70898 <at> debbugs.gnu.org; Mon, 13 May 2024 12:56:56 -0400
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 196D53C011BC5;
 Mon, 13 May 2024 09:56:47 -0700 (PDT)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id GUA_uIfd_DPT; Mon, 13 May 2024 09:56:46 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id B853F3C011BD4;
 Mon, 13 May 2024 09:56:46 -0700 (PDT)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu B853F3C011BD4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1715619406;
 bh=Vw3nviGIBFdxRMz2jECLifWCfKeefTa1UbuEIlYGNN4=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=EEu/JMj30XziX2NjwuNoJoYhbMzoDd7yZzbKQVwe3NK8/gTLWZNyqnB+ZTfwlxXiY
 YHYPW/Z2jIeiL/XSN5Y4zaYVHAPpqS139z3L2606CVpU1gTtahXanuphRAVf6Y8Yqv
 XTYLenOdNCGhpt6PycmnGtVCFYb8Wt2G9CSUkXA0PqkO53F/qz1Cmvevz6bYEIYvzE
 T4nrKSD/FyMqxO7tF7E/3OF2WEUciwVdKa2KHPcxLENBCG8W8T88PdCo08/B42WggV
 Wv97K8aiBUpAxHpqFD7tXkBTXW/nNZZDgHFbGosqz7riCO6FFyM/e0mtvFLGrnJN8c
 HP5/E0JmItA0w==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id nvo4ZRRpmubM; Mon, 13 May 2024 09:56:46 -0700 (PDT)
Received: from [192.168.254.12] (unknown [47.154.17.165])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 918733C011BC5;
 Mon, 13 May 2024 09:56:46 -0700 (PDT)
Message-ID: <b394aa86-5753-4c55-997b-7e32ef491e99@HIDDEN>
Date: Mon, 13 May 2024 09:56:46 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#70898: switching to <stdbit.h> for Emacs bit ops
To: =?UTF-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
References: <69689DCA-4836-49F2-B163-0F5D151FF03F@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <69689DCA-4836-49F2-B163-0F5D151FF03F@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70898
Cc: 70898 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://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: -1.0 (-)

On 2024-05-13 07:34, Mattias Engdeg=C3=A5rd wrote:
> Has C23 been frozen yet? The most recent accessible draft I could find =
was N3096.

It's not final, but it's pretty frozen. I doubt whether the stdbit spec=20
will change.

Yes, n3096 is the latest public draft.


> Overall happy with the changes but haven't read them in detail.
> Minor things I stumbled upon:
>=20
>> @@ -4269,7 +4263,9 @@ endif
>>   ## begin gnulib module verify
>>   ifeq (,$(OMIT_GNULIB_MODULE_verify))
>>  =20
>> +ifneq (,$(gl_GNULIB_ENABLED_verify_CONDITION))
>>  =20
>> +endif
>=20
> Unfinished work?

That was generated automatically by gnulib-tool and is harmless. That=20
being said, I installed a change to the Gnulib stdbit module for other=20
reasons (porting to theoretical platforms where C integers are wider=20
than 256 bits!) here:

https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=3D9768940fbd11558=
b8dab3453aa419a3433933d50

and I expect that will remove the harmless code by removing the=20
conditional dependency on Gnulib's assert-h module.


>> +/* 1 if supported, -1 if not, 0 if unknown.  */
>> +extern signed char __gl_stdint_popcount_support;
>=20
> `__gl_stdbit_popcount_support`, maybe?

Thanks, fixed here:

https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=3D9deb8e8891e3696=
8deeb93bd666670f7950d1095


> (By the way, in case you are on the WG: the N3096 draft has

Yes, that text is weird and I also didn't have a clue as to what it=20
meant. So I cloned latest glibc+gcc behavior and hoped for the best.

I have avoided dealing with that WG for decades as my political skills,=20
such as they are, are better deployed elsewhere. But you're welcome to=20
file a bug report.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70898; Package emacs. Full text available.

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


Received: (at 70898) by debbugs.gnu.org; 13 May 2024 14:35:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon May 13 10:35:58 2024
Received: from localhost ([127.0.0.1]:33080 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s6WmU-00058A-7r
	for submit <at> debbugs.gnu.org; Mon, 13 May 2024 10:35:58 -0400
Received: from mail-lf1-f45.google.com ([209.85.167.45]:46106)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <mattias.engdegard@HIDDEN>) id 1s6WmR-00057z-Uz
 for 70898 <at> debbugs.gnu.org; Mon, 13 May 2024 10:35:56 -0400
Received: by mail-lf1-f45.google.com with SMTP id
 2adb3069b0e04-5206a5854adso4514860e87.0
 for <70898 <at> debbugs.gnu.org>; Mon, 13 May 2024 07:35:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1715610889; x=1716215689; darn=debbugs.gnu.org;
 h=to:cc:date:message-id:subject:mime-version
 :content-transfer-encoding:from:sender:from:to:cc:subject:date
 :message-id:reply-to;
 bh=R4JlBKO73atYv3TT4o6UpTzOcT3scjPiNtRkTl+oTq0=;
 b=ZZX17CJT3VxihdJ/uByB7o/fXWeYs5sOYX3//9FzrUZZG1Z/LSBy+SxNanU3h5G/Jj
 A+qegaHxp0RTxqx8U68/65jrM4mzP0e6UvV4Ciw4kjQH9S7A35j/b4h0lwQK3y819lNt
 YB6RBR0Zezh0ODg5vEb0NhX6oEh/lUijDDhZSfPECk4uFAyo9FfMJRW+k8QKGu4H8koy
 4ZlPdK2dZhjywTzL71tvpNxBiL68pxFX0rb+kZAkIJff0Jf55mRgnog/cEgTr5Djj21Q
 wIhf7PenXanind65s5VtBOvFEKfFXIN2u6CdFhbC9rj5HVi0dgxZ0A1djIyWpLJ9YbfA
 704A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1715610889; x=1716215689;
 h=to:cc:date:message-id:subject:mime-version
 :content-transfer-encoding:from:sender:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=R4JlBKO73atYv3TT4o6UpTzOcT3scjPiNtRkTl+oTq0=;
 b=uF9CR8VxcP+0/+aA6taOWnY+vISAGlqdq9h/m76sbFlZD+V9m59OIgUllRlbsFzGdP
 UMINMHy2X7jW+xtPLIGLH2Xsw0kf+oWYVehr4vFgqhquMv30DfB9pArVWU4hTK+pAG4l
 h/kftqwkL8CADuB3dcFY1PzhDCNwj5EmexJw/j3IpBZIrsZxeMjAbFnhbZMzHQ8D3rWJ
 rWA8W4d3FmvdFdeRCahECWPpGUMGCgtLBXZVcQPzaUyflU+oGwn2DF0vG36IeUuxVxdn
 4xKBtMxVYEExmQqoIjFa1lmS84CssoJcbkn4xN+89g96qR4dFx25e3Qukak4eRNBR54Y
 gTuw==
X-Gm-Message-State: AOJu0YyHWhAOv+AKtbOCWAVzZJfW4Z7ZzLvM8AjdEgFpHk/WWn2FStoY
 rl63mHfJtS6hzTNmxBd6jdZZ7L54UfOfhBDQhUfly3y0emlrOfex
X-Google-Smtp-Source: AGHT+IGcfi/9OhHFh8FGrCuuKqbgGutxMlb/RjmOoprSZOZ34OtWqQihJogClzJSQcH8/8EjflCBoQ==
X-Received: by 2002:a05:6512:3f08:b0:51d:8882:cd69 with SMTP id
 2adb3069b0e04-5221016e771mr7309036e87.53.1715610888950; 
 Mon, 13 May 2024 07:34:48 -0700 (PDT)
Received: from smtpclient.apple (c80-217-1-132.bredband.tele2.se.
 [80.217.1.132]) by smtp.gmail.com with ESMTPSA id
 2adb3069b0e04-521fd671410sm1639657e87.219.2024.05.13.07.34.48
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 13 May 2024 07:34:48 -0700 (PDT)
From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
Content-Type: text/plain;
	charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\))
Subject: bug#70898: switching to <stdbit.h> for Emacs bit ops
Message-Id: <69689DCA-4836-49F2-B163-0F5D151FF03F@HIDDEN>
Date: Mon, 13 May 2024 16:34:48 +0200
To: Paul Eggert <eggert@HIDDEN>
X-Mailer: Apple Mail (2.3654.120.0.1.15)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70898
Cc: 70898 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://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: -1.0 (-)

Has C23 been frozen yet? The most recent accessible draft I could find =
was N3096.

Overall happy with the changes but haven't read them in detail.
Minor things I stumbled upon:

> @@ -4269,7 +4263,9 @@ endif
>  ## begin gnulib module verify
>  ifeq (,$(OMIT_GNULIB_MODULE_verify))
> =20
> +ifneq (,$(gl_GNULIB_ENABLED_verify_CONDITION))
> =20
> +endif

Unfinished work?

> +/* 1 if supported, -1 if not, 0 if unknown.  */
> +extern signed char __gl_stdint_popcount_support;

`__gl_stdbit_popcount_support`, maybe?


(By the way, in case you are on the WG: the N3096 draft has

> 7.18.8 First Leading One
...
> Returns the most significant index of the first 1 bit in value, plus =
1.

Someone jumbled that sentence. Something like "the index of the most =
significant 1 bit" was probably intended.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70898; Package emacs. Full text available.

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


Received: (at submit) by debbugs.gnu.org; 12 May 2024 22:09:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun May 12 18:09:38 2024
Received: from localhost ([127.0.0.1]:56755 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s6HNv-00024P-F4
	for submit <at> debbugs.gnu.org; Sun, 12 May 2024 18:09:38 -0400
Received: from lists.gnu.org ([209.51.188.17]:53982)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eggert@HIDDEN>) id 1s6HNp-00024J-Sw
 for submit <at> debbugs.gnu.org; Sun, 12 May 2024 18:09:33 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eggert@HIDDEN>)
 id 1s6HNp-0007Fb-DX
 for bug-gnu-emacs@HIDDEN; Sun, 12 May 2024 18:09:29 -0400
Received: from mail.cs.ucla.edu ([131.179.128.66])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eggert@HIDDEN>)
 id 1s6HNj-0003Bp-R8
 for bug-gnu-emacs@HIDDEN; Sun, 12 May 2024 18:09:29 -0400
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 0DE7D3C011BDC
 for <bug-gnu-emacs@HIDDEN>; Sun, 12 May 2024 15:09:21 -0700 (PDT)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id HH2plgCTayI8 for <bug-gnu-emacs@HIDDEN>;
 Sun, 12 May 2024 15:09:18 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 902B13C011BDD
 for <bug-gnu-emacs@HIDDEN>; Sun, 12 May 2024 15:09:18 -0700 (PDT)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 902B13C011BDD
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1715551758;
 bh=bU0PlXrYopQzI9Lea5LuEXa3taMxTo8xR0fwDAS1+t0=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=OMwL6Hdp2jjnpm5t2aKh7dIQ8V70C/KG/KrLQ1NKP+IhT9v5yIiGU8g275wTiVAR1
 +iZrbKNDNvASC4IVWIOW47ulympNZbF2oO+LZHHkJUHBaMU/85ZJNnymZUP9214+jq
 ZWr6tw9g+RhGrXIBVqx9TRjU6obVkmCW6QnNM+bq1kcEWKXifv8zfVuUfTucA6gsBU
 sRbF8X3aMWglixfEqhfesXTqNYOjguVMvRkQqhbOZD5dbbve/bv+Zjs2sRzENolg/D
 uTLoXTV/jz650QR8UqYr0i0awPJc3+cyO+ajZUUmIkZrztCUXsA3SKCuayTQ7AaBWP
 DkfkBm6WIqCtQ==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id d-lfTRKFpwj6 for <bug-gnu-emacs@HIDDEN>;
 Sun, 12 May 2024 15:09:18 -0700 (PDT)
Received: from [192.168.254.12] (unknown [47.154.17.165])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 56D593C011BDC
 for <bug-gnu-emacs@HIDDEN>; Sun, 12 May 2024 15:09:18 -0700 (PDT)
Content-Type: multipart/mixed; boundary="------------vVCz0nb0w5GtZK2vx8iItzns"
Message-ID: <d4343052-d2f4-4615-8a1a-aac76c405fde@HIDDEN>
Date: Sun, 12 May 2024 15:09:17 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
To: Emacs bug reports and feature requests <bug-gnu-emacs@HIDDEN>
From: Paul Eggert <eggert@HIDDEN>
Subject: switching to <stdbit.h> for Emacs bit ops
Organization: UCLA Computer Science Department
Received-SPF: pass client-ip=131.179.128.66; envelope-from=eggert@HIDDEN;
 helo=mail.cs.ucla.edu
X-Spam_score_int: -19
X-Spam_score: -2.0
X-Spam_bar: --
X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://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: -2.3 (--)

This is a multi-part message in MIME format.
--------------vVCz0nb0w5GtZK2vx8iItzns
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Emacs currently uses the Gnulib headers count-trailing-zeros.h and 
count-one-bits.h to do some low-level bit operations efficiently. C23 
has standardized this in a new header <stdbit.h> and I've recently added 
support for a Gnulib <stdbit.h> substitute, taking implementation ideas 
from count-trailing-zeros.h, count-one-bits.h and elsewhere. So I'm 
planning to switch Emacs to the C23 standard way of doing things, using 
the Gnulib substitute on non-C23 platforms.

The first attached patch does this. I plan to test this somewhat more 
before installing, but thought I'd give people a heads-up.

The second attached patch is a minor cleanup to the 32-bit Android code, 
a cleanup made possible by the first attached patch. This cleanup patch 
is optional of course. By the way, I'm surprised to see the code in 
sfmt.c implementing 64-bit arithmetic from pairs of 32-bit words, as I 
thought even ancient 32-bit Android has 64-bit 'unsigned long long', but 
that's a matter for the Android experts I suppose.
--------------vVCz0nb0w5GtZK2vx8iItzns
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-Prefer-stdbit.h-to-count-one-bits.h-etc.patch"
Content-Disposition: attachment;
 filename="0001-Prefer-stdbit.h-to-count-one-bits.h-etc.patch"
Content-Transfer-Encoding: base64

RnJvbSA2NzRlMWFkYWE0MzM1ZTllOWU2MjgzOTRhNjg4ZDJlNjA5MDcxMzU3IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBTdW4sIDEyIE1heSAyMDI0IDE0OjIyOjU4IC0wNzAwClN1YmplY3Q6IFtQQVRD
SCAxLzJdIFByZWZlciBzdGRiaXQuaCB0byBjb3VudC1vbmUtYml0cy5oIGV0YwoKQzIzJ3Mg
PHN0ZGJpdC5oPiBpbiB0aGUgbG9uZyBydW4gc2hvdWxkIGJlIGJldHRlciBzdXBwb3J0ZWQg
dGhhbgpHbnVsaWIncyBjb3VudC1vbmUtYml0cy5oIGFuZCBzaW1pbGFyIGhlYWRlcnMsIHNv
IHN3aXRjaCB0byB0aGUKQzIzIHByaW1pdGl2ZXMsIHdpdGggYSBHbnVsaWIgZmFsbGJhY2sg
Zm9yIHBsYXRmb3JtcyBsYWNraW5nIEMyMy4KKiBhZG1pbi9tZXJnZS1nbnVsaWIgKEdOVUxJ
Ql9NT0RVTEVTKTogUmVtb3ZlIGNvdW50LWxlYWRpbmctemVyb3MsCmNvdW50LW9uZS1iaXRz
LCBjb3VudC10cmFpbGluZy16ZXJvcy4gIEFkZCBzdGRiaXQuCiogbGliL2NvdW50LWxlYWRp
bmctemVyb3MuYywgbGliL2NvdW50LWxlYWRpbmctemVyb3MuaDoKKiBsaWIvY291bnQtb25l
LWJpdHMuYywgbGliL2NvdW50LW9uZS1iaXRzLmg6CiogbGliL2NvdW50LXRyYWlsaW5nLXpl
cm9zLmMsIGxpYi9jb3VudC10cmFpbGluZy16ZXJvcy5oOiBSZW1vdmUuCiogbGliL3N0ZGJp
dC5jLCBsaWIvc3RkYml0LmluLmgsIG00L3N0ZGJpdF9oLm00OgpOZXcgZmlsZXMsIGNvcGll
ZCBmcm9tIEdudWxpYi4KKiBsaWIvZ251bGliLm1rLmluLCBtNC9nbnVsaWItY29tcC5tNDog
UmVnZW5lcmF0ZS4KKiBzcmMvZGF0YS5jOiBEbyBub3QgaW5jbHVkZSBjb3VudC1vbmUtYml0
cy5oLCBjb3VudC10cmFpbGluZy16ZXJvcy5oLgpJbnN0ZWFkLCByZWx5IG9uIGxpc3AuaCBp
bmNsdWRpbmcgc3RkYml0LmguCihGbG9nY291bnQsIEZib29sX3ZlY3Rvcl9jb3VudF9wb3B1
bGF0aW9uKQooRmJvb2xfdmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlKTogVXNlIHN0ZGJpdC5o
IG1hY3JvcyBpbnN0ZWFkIG9mCmNvdW50LW9uZS1iaXRzLmggYW5kIGNvdW50LXRyYWlsaW5n
LXplcm9zLmggbWFjcm9zLgooc2hpZnRfcmlnaHRfdWxsLCBjb3VudF9vbmVfYml0c193b3Jk
LCBwcmVfdmFsdWUpCihjb3VudF90cmFpbGluZ196ZXJvX2JpdHMpOiBSZW1vdmU7IG5vIGxv
bmdlciBuZWVkZWQuCiogc3JjL2xpc3AuaDogSW5jbHVkZSBzdGRiaXQuaCBpbnN0ZWFkIG9m
IGNvdW50LWxlYWRpbmctemVyb3MuaC4KKGVsb2diKTogVXNlIHN0ZGJpdC5oIG1hY3JvIGlu
c3RlYWQgb2YgY291bnQtbGVhZGluZy16ZXJvcy5oIG1hY3JvLgotLS0KIElOU1RBTEwuUkVQ
TyAgICAgICAgICAgICAgIHwgICAyICstCiBhZG1pbi9tZXJnZS1nbnVsaWIgICAgICAgICB8
ICAgNCArLQogbGliL2NvdW50LWxlYWRpbmctemVyb3MuYyAgfCAgMjEgLQogbGliL2NvdW50
LWxlYWRpbmctemVyb3MuaCAgfCAxMzggLS0tLS0tCiBsaWIvY291bnQtb25lLWJpdHMuYyAg
ICAgICB8ICAyNSAtLQogbGliL2NvdW50LW9uZS1iaXRzLmggICAgICAgfCAxNjYgLS0tLS0t
LQogbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMgfCAgMjEgLQogbGliL2NvdW50LXRyYWls
aW5nLXplcm9zLmggfCAxMjggLS0tLS0tCiBsaWIvZ251bGliLm1rLmluICAgICAgICAgICB8
ICA2MiArKy0KIGxpYi9zdGRiaXQuYyAgICAgICAgICAgICAgIHwgIDUxICsrKwogbGliL3N0
ZGJpdC5pbi5oICAgICAgICAgICAgfCA4ODYgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogbTQvZ251bGliLWNvbXAubTQgICAgICAgICAgfCAgMzAgKy0KIG00L3N0
ZGJpdF9oLm00ICAgICAgICAgICAgIHwgIDE5ICsKIHNyYy9kYXRhLmMgICAgICAgICAgICAg
ICAgIHwgIDk1ICstLS0KIHNyYy9saXNwLmggICAgICAgICAgICAgICAgIHwgICA3ICstCiAx
NSBmaWxlcyBjaGFuZ2VkLCAxMDE4IGluc2VydGlvbnMoKyksIDYzNyBkZWxldGlvbnMoLSkK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvY291bnQtbGVhZGluZy16ZXJvcy5jCiBkZWxldGUg
bW9kZSAxMDA2NDQgbGliL2NvdW50LWxlYWRpbmctemVyb3MuaAogZGVsZXRlIG1vZGUgMTAw
NjQ0IGxpYi9jb3VudC1vbmUtYml0cy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliL2NvdW50
LW9uZS1iaXRzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvY291bnQtdHJhaWxpbmctemVy
b3MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYi9jb3VudC10cmFpbGluZy16ZXJvcy5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgbGliL3N0ZGJpdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3N0ZGJpdC5pbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvc3RkYml0X2gubTQKCmRpZmYg
LS1naXQgYS9JTlNUQUxMLlJFUE8gYi9JTlNUQUxMLlJFUE8KaW5kZXggNzdkODE1M2E1YTgu
LjQ2YWM0NDQwYWVlIDEwMDY0NAotLS0gYS9JTlNUQUxMLlJFUE8KKysrIGIvSU5TVEFMTC5S
RVBPCkBAIC04MCw3ICs4MCw3IEBAIGhhbmRsZS4gIFRoZSBtb3N0IHRob3JvdWdoIGNsZWFu
aW5nIGNhbiBiZSBhY2hpZXZlZCBieSAnZ2l0IGNsZWFuIC1mZHgnCiB3aGljaCB3aWxsIGxl
YXZlIHlvdSB3aXRoIG9ubHkgZmlsZXMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnkuICBIZXJl
CiBhcmUgc29tZSBmYXN0ZXIgbWV0aG9kcyBmb3IgYSBjb3VwbGUgb2YgcGFydGljdWxhciBl
cnJvciBjYXNlczoKIAotICAgIC91c3IvYmluL200OmFjbG9jYWwubTQ6OTogY2Fubm90IG9w
ZW4gYG00L2NvdW50LWxlYWRpbmctemVyb3MubTQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0
b3J5CisgICAgL3Vzci9iaW4vbTQ6YWNsb2NhbC5tNDo5OiBjYW5ub3Qgb3BlbiBgbTQvc3Rk
Yml0X2gubTQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiAKIFRoaXMgY2FuIGJlIGZp
eGVkIHdpdGggJ3JtIGFjbG9jYWwubTQnLgogCmRpZmYgLS1naXQgYS9hZG1pbi9tZXJnZS1n
bnVsaWIgYi9hZG1pbi9tZXJnZS1nbnVsaWIKaW5kZXggYzRkYWFkZWQwMTUuLjUyNjE0MWQ4
NmVhIDEwMDc1NQotLS0gYS9hZG1pbi9tZXJnZS1nbnVsaWIKKysrIGIvYWRtaW4vbWVyZ2Ut
Z251bGliCkBAIC0yOSw3ICsyOSw2IEBAIEdOVUxJQl9NT0RVTEVTPQogICBhbGlnbmFzb2Yg
YWxsb2NhLW9wdCBiaW5hcnktaW8gYm9vdC10aW1lIGJ5dGVzd2FwIGMtY3R5cGUgYy1zdHJj
YXNlCiAgIGNhbm9uaWNhbGl6ZS1sZ3BsCiAgIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0g
Y29weS1maWxlLXJhbmdlCi0gIGNvdW50LWxlYWRpbmctemVyb3MgY291bnQtb25lLWJpdHMg
Y291bnQtdHJhaWxpbmctemVyb3MKICAgY3J5cHRvL21kNSBjcnlwdG8vbWQ1LWJ1ZmZlcgog
ICBjcnlwdG8vc2hhMS1idWZmZXIgY3J5cHRvL3NoYTI1Ni1idWZmZXIgY3J5cHRvL3NoYTUx
Mi1idWZmZXIKICAgZC10eXBlIGRpZmZzZXEgZG91YmxlLXNsYXNoLXJvb3QgZHRvYXN0ciBk
dG90aW1lc3BlYyBkdXAyCkBAIC00NCw3ICs0Myw4IEBAIEdOVUxJQl9NT0RVTEVTPQogICBu
YW5vc2xlZXAgbnByb2MgbnN0cmZ0aW1lCiAgIHBhdGhtYXggcGlwZTIgcHNlbGVjdCBwdGhy
ZWFkX3NpZ21hc2sKICAgcWNvcHktYWNsIHJlYWRsaW5rIHJlYWRsaW5rYXQgcmVnZXgKLSAg
c2lnMnN0ciBzaWdkZXNjcl9ucCBzb2NrbGVuIHN0YXQtdGltZSBzdGQtZ251MTEgc3RkYm9v
bCBzdGRja2RpbnQgc3RkZGVmIHN0ZGlvCisgIHNpZzJzdHIgc2lnZGVzY3JfbnAgc29ja2xl
biBzdGF0LXRpbWUgc3RkLWdudTExCisgIHN0ZGJpdCBzdGRib29sIHN0ZGNrZGludCBzdGRk
ZWYgc3RkaW8KICAgc3RwY3B5IHN0cm5sZW4gc3RybmxlbiBzdHJ0b2ltYXggc3ltbGluayBz
eXNfc3RhdCBzeXNfdGltZQogICB0ZW1wbmFtZSB0aW1lLWggdGltZV9yIHRpbWVfcnogdGlt
ZWdtIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YgogICB1cGRhdGUtY29w
eXJpZ2h0IHVubG9ja2VkLWlvIHV0aW1lbnNhdApkaWZmIC0tZ2l0IGEvbGliL2NvdW50LWxl
YWRpbmctemVyb3MuYyBiL2xpYi9jb3VudC1sZWFkaW5nLXplcm9zLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJiYmZkNjc0ODQ5Li4wMDAwMDAwMDAwMAotLS0gYS9saWIv
Y291bnQtbGVhZGluZy16ZXJvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAot
LyogQ291bnQgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAgYml0cyBpbiBhIHdvcmQuCi0KLSAg
IENvcHlyaWdodCAoQykgMjAxMi0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LgotCi0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0g
ICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw
czovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+
Ci0KLSNkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPU19JTkxJTkUgX0dMX0VYVEVSTl9JTkxJ
TkUKLSNpbmNsdWRlICJjb3VudC1sZWFkaW5nLXplcm9zLmgiCmRpZmYgLS1naXQgYS9saWIv
Y291bnQtbGVhZGluZy16ZXJvcy5oIGIvbGliL2NvdW50LWxlYWRpbmctemVyb3MuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1NzQ5ZDZkMjcuLjAwMDAwMDAwMDAwCi0t
LSBhL2xpYi9jb3VudC1sZWFkaW5nLXplcm9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgg
KzAsMCBAQAotLyogY291bnQtbGVhZGluZy16ZXJvcy5oIC0tIGNvdW50cyB0aGUgbnVtYmVy
IG9mIGxlYWRpbmcgMCBiaXRzIGluIGEgd29yZC4KLSAgIENvcHlyaWdodCAoQykgMjAxMi0y
MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMg
ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot
ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vu
c2VzLz4uICAqLwotCi0vKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UuICAqLwotCi0jaWZuZGVm
IENPVU5UX0xFQURJTkdfWkVST1NfSAotI2RlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TX0gg
MQotCi0vKiBUaGlzIGZpbGUgdXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lO
TElORS4gICovCi0jaWYgIV9HTF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNl
IGluY2x1ZGUgY29uZmlnLmggZmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNp
Zm5kZWYgQ09VTlRfTEVBRElOR19aRVJPU19JTkxJTkUKLSMgZGVmaW5lIENPVU5UX0xFQURJ
TkdfWkVST1NfSU5MSU5FIF9HTF9JTkxJTkUKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIEFzc3VtaW5nIHRoZSBHQ0MgYnVpbHRp
biBpcyBCVUlMVElOIGFuZCB0aGUgTVNDIGJ1aWx0aW4gaXMgTVNDX0JVSUxUSU4sCi0gICBl
eHBhbmQgdG8gY29kZSB0aGF0IGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJv
cyBvZiB0aGUgbG9jYWwKLSAgIHZhcmlhYmxlICd4JyBvZiB0eXBlIFRZUEUgKGFuIHVuc2ln
bmVkIGludGVnZXIgdHlwZSkgYW5kIHJldHVybiBpdAotICAgZnJvbSB0aGUgY3VycmVudCBm
dW5jdGlvbi4gICovCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9f
R05VQ19NSU5PUl9fID49IDQpIFwKLSAgICB8fCAoX19jbGFuZ19tYWpvcl9fID49IDQpCi0j
IGRlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TKEJVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBF
KSAgICAgICAgICAgICAgICBcCi0gIHJldHVybiB4ID8gQlVJTFRJTiAoeCkgOiBDSEFSX0JJ
VCAqIHNpemVvZiB4OwotI2VsaWYgX01TQ19WRVIKLSMgcHJhZ21hIGludHJpbnNpYyAoX0Jp
dFNjYW5SZXZlcnNlKQotIyBpZiBkZWZpbmVkIF9NX1g2NAotIyAgcHJhZ21hIGludHJpbnNp
YyAoX0JpdFNjYW5SZXZlcnNlNjQpCi0jIGVuZGlmCi0jIGRlZmluZSBDT1VOVF9MRUFESU5H
X1pFUk9TKEJVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSAgICAgICAgICAgICAgICBcCi0g
ICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2ln
bmVkIGxvbmcgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmIChNU0NfQlVJTFRJTiAoJnJlc3VsdCwgeCkpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmV0dXJuIENIQVJfQklU
ICogc2l6ZW9mIHggLSAxIC0gcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCi0j
ZWxzZQotIyBkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPUyhCVUlMVElOLCBNU0NfQlVJTFRJ
TiwgVFlQRSkgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB1bnNpZ25lZCBp
bnQgbGVhZGluZ18zMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBpZiAoISB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHJldHVybiBDSEFSX0JJVCAqIHNp
emVvZiB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBm
b3IgKGNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgIChsZWFkaW5nXzMyID0gKCh4ID4+IChzaXplb2Yg
KFRZUEUpICogQ0hBUl9CSVQgLSAzMikpICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYgMHhmZmZmZmZmZlUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICBjb3VudCA8IENIQVJfQklUICogc2l6ZW9mIHggLSAzMiAmJiAhbGVh
ZGluZ18zMik7ICAgICAgICAgXAotICAgICAgICAgICAgIGNvdW50ICs9IDMyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHgg
PSB4IDw8IDMxIDw8IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICByZXR1cm4gY291bnQgKyBjb3VudF9sZWFkaW5nX3plcm9zXzMy
IChsZWFkaW5nXzMyKTsgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHdoaWxlICgwKQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBsZWFk
aW5nIHplcm9zIGluIFgsCi0gICB3aGVyZSAwIDwgWCA8IDIqKjMyLiAgKi8KLUNPVU5UX0xF
QURJTkdfWkVST1NfSU5MSU5FIGludAotY291bnRfbGVhZGluZ196ZXJvc18zMiAodW5zaWdu
ZWQgaW50IHgpCi17Ci0gIC8qIDxodHRwczovL2dpdGh1Yi5jb20vZ2lic2pvc2UvQml0SGFj
a3M+Ci0gICAgIDxodHRwczovL3d3dy5maXQudnV0YnIuY3ovfmliYXJpbmEvcHViL2JpdGhh
Y2tzLnBkZj4gKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgZGVfQnJ1aWpuX2xvb2t1cFszMl0g
PSB7Ci0gICAgMzEsIDIyLCAzMCwgMjEsIDE4LCAxMCwgMjksIDIsIDIwLCAxNywgMTUsIDEz
LCA5LCA2LCAyOCwgMSwKLSAgICAyMywgMTksIDExLCAzLCAxNiwgMTQsIDcsIDI0LCAxMiwg
NCwgOCwgMjUsIDUsIDI2LCAyNywgMAotICB9OwotCi0gIHggfD0geCA+PiAxOwotICB4IHw9
IHggPj4gMjsKLSAgeCB8PSB4ID4+IDQ7Ci0gIHggfD0geCA+PiA4OwotICB4IHw9IHggPj4g
MTY7Ci0gIHJldHVybiBkZV9CcnVpam5fbG9va3VwWygoeCAqIDB4MDdjNGFjZGRVKSAmIDB4
ZmZmZmZmZmZVKSA+PiAyN107Ci19Ci0jZW5kaWYKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJu
IHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfTEVBRElOR19a
RVJPU19JTkxJTkUgaW50Ci1jb3VudF9sZWFkaW5nX3plcm9zICh1bnNpZ25lZCBpbnQgeCkK
LXsKLSAgQ09VTlRfTEVBRElOR19aRVJPUyAoX19idWlsdGluX2NseiwgX0JpdFNjYW5SZXZl
cnNlLCB1bnNpZ25lZCBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51
bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIFguICovCi1DT1VOVF9MRUFESU5HX1pFUk9TX0lO
TElORSBpbnQKLWNvdW50X2xlYWRpbmdfemVyb3NfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkK
LXsKLSAgQ09VTlRfTEVBRElOR19aRVJPUyAoX19idWlsdGluX2NsemwsIF9CaXRTY2FuUmV2
ZXJzZSwgdW5zaWduZWQgbG9uZyBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4g
dGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIFguICovCi1DT1VOVF9MRUFESU5HX1pF
Uk9TX0lOTElORSBpbnQKLWNvdW50X2xlYWRpbmdfemVyb3NfbGwgKHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgeCkKLXsKLSNpZiAoZGVmaW5lZCBfTVNDX1ZFUiAmJiAhZGVmaW5lZCBfX2Ns
YW5nX18pICYmICFkZWZpbmVkIF9NX1g2NAotICAvKiAzMi1iaXQgTVNWQyBkb2VzIG5vdCBo
YXZlIF9CaXRTY2FuUmV2ZXJzZTY0LCBvbmx5IF9CaXRTY2FuUmV2ZXJzZS4gICovCi0gIHVu
c2lnbmVkIGxvbmcgcmVzdWx0OwotICBpZiAoX0JpdFNjYW5SZXZlcnNlICgmcmVzdWx0LCAo
dW5zaWduZWQgbG9uZykgKHggPj4gMzIpKSkKLSAgICByZXR1cm4gQ0hBUl9CSVQgKiBzaXpl
b2YgeCAtIDEgLSAzMiAtIHJlc3VsdDsKLSAgaWYgKF9CaXRTY2FuUmV2ZXJzZSAoJnJlc3Vs
dCwgKHVuc2lnbmVkIGxvbmcpIHgpKQotICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4
IC0gMSAtIHJlc3VsdDsKLSAgcmV0dXJuIENIQVJfQklUICogc2l6ZW9mIHg7Ci0jZWxzZQot
ICBDT1VOVF9MRUFESU5HX1pFUk9TIChfX2J1aWx0aW5fY2x6bGwsIF9CaXRTY2FuUmV2ZXJz
ZTY0LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsK
LSNlbmRpZgotfQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1fR0xfSU5M
SU5FX0hFQURFUl9FTkQKLQotI2VuZGlmIC8qIENPVU5UX0xFQURJTkdfWkVST1NfSCAqLwpk
aWZmIC0tZ2l0IGEvbGliL2NvdW50LW9uZS1iaXRzLmMgYi9saWIvY291bnQtb25lLWJpdHMu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiODcwODgwMjguLjAwMDAwMDAw
MDAwCi0tLSBhL2xpYi9jb3VudC1vbmUtYml0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUg
KzAsMCBAQAotLyogQ291bnQgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gYSB3b3JkLgotCi0g
ICBDb3B5cmlnaHQgKEMpIDIwMTItMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KLQotICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gICBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQot
ICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5o
PgotCi0jZGVmaW5lIENPVU5UX09ORV9CSVRTX0lOTElORSBfR0xfRVhURVJOX0lOTElORQot
I2luY2x1ZGUgImNvdW50LW9uZS1iaXRzLmgiCi0KLSNpZiAxNTAwIDw9IF9NU0NfVkVSICYm
IChkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfTV9YNjQpCi1pbnQgcG9wY291bnRfc3Vw
cG9ydCA9IC0xOwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY291bnQtb25lLWJpdHMuaCBi
L2xpYi9jb3VudC1vbmUtYml0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZDY3Zjg3MThhNC4uMDAwMDAwMDAwMDAKLS0tIGEvbGliL2NvdW50LW9uZS1iaXRzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyogY291bnQtb25lLWJpdHMuaCAtLSBj
b3VudHMgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gYSB3b3JkLgotICAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMg
ZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcwotICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLSAgIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgZmlsZSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4gICovCi0KLS8qIFdyaXR0ZW4gYnkgQmVuIFBmYWZmLiAgKi8KLQot
I2lmbmRlZiBDT1VOVF9PTkVfQklUU19ICi0jZGVmaW5lIENPVU5UX09ORV9CSVRTX0ggMQot
Ci0vKiBUaGlzIGZpbGUgdXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lOTElO
RS4gICovCi0jaWYgIV9HTF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNlIGlu
Y2x1ZGUgY29uZmlnLmggZmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNpZm5k
ZWYgQ09VTlRfT05FX0JJVFNfSU5MSU5FCi0jIGRlZmluZSBDT1VOVF9PTkVfQklUU19JTkxJ
TkUgX0dMX0lOTElORQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJD
IiB7Ci0jZW5kaWYKLQotLyogQXNzdW1pbmcgdGhlIEdDQyBidWlsdGluIGlzIEdDQ19CVUlM
VElOIGFuZCB0aGUgTVNDIGJ1aWx0aW4gaXMgTVNDX0JVSUxUSU4sCi0gICBleHBhbmQgdG8g
Y29kZSB0aGF0IGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgMS1iaXRzIG9mIHRoZSBsb2NhbAot
ICAgdmFyaWFibGUgJ3gnIG9mIHR5cGUgVFlQRSAoYW4gdW5zaWduZWQgaW50ZWdlciB0eXBl
KSBhbmQgcmV0dXJuIGl0Ci0gICBmcm9tIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KLSNp
ZiAoX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49
IDQpKSBcCi0gICAgfHwgKF9fY2xhbmdfbWFqb3JfXyA+PSA0KQotIyBkZWZpbmUgQ09VTlRf
T05FX0JJVFMoR0NDX0JVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSBcCi0gICAgcmV0dXJu
IEdDQ19CVUlMVElOICh4KQotI2Vsc2UKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBu
dW1iZXIgb2YgMS1iaXRzIHNldCBpbiB0aGUgbGVhc3QKLSAgIHNpZ25pZmljYW50IDMyIGJp
dHMgb2YgWC4gKi8KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQKLWNvdW50X29uZV9iaXRz
XzMyICh1bnNpZ25lZCBpbnQgeCkKLXsKLSAgeCA9ICgoeCAmIDB4YWFhYWFhYWFVKSA+PiAx
KSArICh4ICYgMHg1NTU1NTU1NVUpOwotICB4ID0gKCh4ICYgMHhjY2NjY2NjY1UpID4+IDIp
ICsgKHggJiAweDMzMzMzMzMzVSk7Ci0gIHggPSAoeCA+PiAxNikgKyAoeCAmIDB4ZmZmZik7
Ci0gIHggPSAoKHggJiAweGYwZjApID4+IDQpICsgKHggJiAweDBmMGYpOwotICByZXR1cm4g
KHggPj4gOCkgKyAoeCAmIDB4MDBmZik7Ci19Ci0KLS8qIEV4cGFuZCB0byBjb2RlIHRoYXQg
Y29tcHV0ZXMgdGhlIG51bWJlciBvZiAxLWJpdHMgb2YgdGhlIGxvY2FsCi0gICB2YXJpYWJs
ZSAneCcgb2YgdHlwZSBUWVBFIChhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUpIGFuZCByZXR1
cm4gaXQKLSAgIGZyb20gdGhlIGN1cnJlbnQgZnVuY3Rpb24uICAqLwotIyBkZWZpbmUgQ09V
TlRfT05FX0JJVFNfR0VORVJJQyhUWVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBpbnQgY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGJp
dHMgPSAwOyBiaXRzIDwgc2l6ZW9mIChUWVBFKSAqIENIQVJfQklUOyBiaXRzICs9IDMyKSAg
ICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgY291bnQgKz0gY291bnRf
b25lX2JpdHNfMzIgKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgeCA9IHggPj4gMzEgPj4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gY291
bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgwKQotCi0jIGlmIDE1MDAgPD0g
X01TQ19WRVIgJiYgKGRlZmluZWQgX01fSVg4NiB8fCBkZWZpbmVkIF9NX1g2NCkKLQotLyog
V2hpbGUgZ2NjIGZhbGxzIGJhY2sgdG8gaXRzIG93biBnZW5lcmljIGNvZGUgaWYgdGhlIG1h
Y2hpbmUKLSAgIG9uIHdoaWNoIGl0J3MgcnVubmluZyBkb2Vzbid0IHN1cHBvcnQgcG9wY291
bnQsIHdpdGggTWljcm9zb2Z0J3MKLSAgIGNvbXBpbGVyIHdlIG5lZWQgdG8gZGV0ZWN0IGFu
ZCBmYWxsYmFjayBvdXJzZWx2ZXMuICAqLwotCi0jICBpZiAwCi0jICAgaW5jbHVkZSA8aW50
cmluLmg+Ci0jICBlbHNlCi0gICAgLyogRG9uJ3QgcG9sbHV0ZSB0aGUgbmFtZXNwYWNlIHdp
dGggdG9vIG1hbnkgTVNWQyBpbnRyaW5zaWNzLiAgKi8KLSMgICBwcmFnbWEgaW50cmluc2lj
IChfX2NwdWlkKQotIyAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250KQotIyAgIGlmIGRl
ZmluZWQgX01fWDY0Ci0jICAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250NjQpCi0jICAg
ZW5kaWYKLSMgIGVuZGlmCi0KLSMgIGlmICFkZWZpbmVkIF9NX1g2NAotc3RhdGljIGlubGlu
ZSBfX3BvcGNudDY0ICh1bnNpZ25lZCBsb25nIGxvbmcgeCkKLXsKLSAgcmV0dXJuIF9fcG9w
Y250ICgodW5zaWduZWQgaW50KSAoeCA+PiAzMikpICsgX19wb3BjbnQgKCh1bnNpZ25lZCBp
bnQpIHgpOwotfQotIyAgZW5kaWYKLQotLyogUmV0dXJuIG5vbnplcm8gaWYgcG9wY291bnQg
aXMgc3VwcG9ydGVkLiAgKi8KLQotLyogMSBpZiBzdXBwb3J0ZWQsIDAgaWYgbm90IHN1cHBv
cnRlZCwgLTEgaWYgdW5rbm93bi4gICovCi1leHRlcm4gaW50IHBvcGNvdW50X3N1cHBvcnQ7
Ci0KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQKLXBvcGNvdW50X3N1cHBvcnRlZCAodm9p
ZCkKLXsKLSAgaWYgKHBvcGNvdW50X3N1cHBvcnQgPCAwKQotICAgIHsKLSAgICAgIC8qIERv
IGFzIGRlc2NyaWJlZCBpbgotICAgICAgICAgPGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29t
L2VuLXVzL2NwcC9pbnRyaW5zaWNzL3BvcGNudDE2LXBvcGNudC1wb3BjbnQ2ND4gKi8KLSAg
ICAgIGludCBjcHVfaW5mb1s0XTsKLSAgICAgIF9fY3B1aWQgKGNwdV9pbmZvLCAxKTsKLSAg
ICAgIHBvcGNvdW50X3N1cHBvcnQgPSAoY3B1X2luZm9bMl0gPj4gMjMpICYgMTsKLSAgICB9
Ci0gIHJldHVybiBwb3Bjb3VudF9zdXBwb3J0OwotfQotCi0jICBkZWZpbmUgQ09VTlRfT05F
X0JJVFMoR0NDX0JVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSBcCi0gICAgIGRvICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICBpZiAocG9wY291bnRfc3VwcG9ydGVkICgpKSAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgIHJldHVybiBNU0NfQlVJTFRJTiAoeCk7ICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgIENPVU5UX09ORV9CSVRTX0dFTkVSSUMgKFRZ
UEUpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHdoaWxlICgwKQotCi0jIGVsc2UK
LQotIyAgZGVmaW5lIENPVU5UX09ORV9CSVRTKEdDQ19CVUlMVElOLCBNU0NfQlVJTFRJTiwg
VFlQRSkgXAotICAgICBDT1VOVF9PTkVfQklUU19HRU5FUklDIChUWVBFKQotCi0jIGVuZGlm
Ci0jZW5kaWYKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgMS1iaXRz
IHNldCBpbiBYLiAqLwotQ09VTlRfT05FX0JJVFNfSU5MSU5FIGludAotY291bnRfb25lX2Jp
dHMgKHVuc2lnbmVkIGludCB4KQotewotICBDT1VOVF9PTkVfQklUUyAoX19idWlsdGluX3Bv
cGNvdW50LCBfX3BvcGNudCwgdW5zaWduZWQgaW50KTsKLX0KLQotLyogQ29tcHV0ZSBhbmQg
cmV0dXJuIHRoZSBudW1iZXIgb2YgMS1iaXRzIHNldCBpbiBYLiAqLwotQ09VTlRfT05FX0JJ
VFNfSU5MSU5FIGludAotY291bnRfb25lX2JpdHNfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkK
LXsKLSAgQ09VTlRfT05FX0JJVFMgKF9fYnVpbHRpbl9wb3Bjb3VudGwsIF9fcG9wY250LCB1
bnNpZ25lZCBsb25nIGludCk7Ci19Ci0KLS8qIENvbXB1dGUgYW5kIHJldHVybiB0aGUgbnVt
YmVyIG9mIDEtYml0cyBzZXQgaW4gWC4gKi8KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQK
LWNvdW50X29uZV9iaXRzX2xsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IHgpCi17Ci0gIENP
VU5UX09ORV9CSVRTIChfX2J1aWx0aW5fcG9wY291bnRsbCwgX19wb3BjbnQ2NCwgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCk7Ci19Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlm
Ci0KLV9HTF9JTkxJTkVfSEVBREVSX0VORAotCi0jZW5kaWYgLyogQ09VTlRfT05FX0JJVFNf
SCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMgYi9saWIvY291
bnQtdHJhaWxpbmctemVyb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEz
Zjc3Nzg4ZGEuLjAwMDAwMDAwMDAwCi0tLSBhL2xpYi9jb3VudC10cmFpbGluZy16ZXJvcy5j
CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogQ291bnQgdGhlIG51bWJlciBv
ZiB0cmFpbGluZyAwIGJpdHMgaW4gYSB3b3JkLgotCi0gICBDb3B5cmlnaHQgMjAxMy0yMDI0
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgZnJl
ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNkZWZpbmUgQ09VTlRfVFJBSUxJ
TkdfWkVST1NfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5FCi0jaW5jbHVkZSAiY291bnQtdHJh
aWxpbmctemVyb3MuaCIKZGlmZiAtLWdpdCBhL2xpYi9jb3VudC10cmFpbGluZy16ZXJvcy5o
IGIvbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVkMWUwMTMxMTQ3Li4wMDAwMDAwMDAwMAotLS0gYS9saWIvY291bnQtdHJhaWxp
bmctemVyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKiBjb3VudC10
cmFpbGluZy16ZXJvcy5oIC0tIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIDAgYml0
cyBpbiBhIHdvcmQuCi0gICBDb3B5cmlnaHQgMjAxMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
LjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v
dCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBXcml0
dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KLQotI2lmbmRlZiBDT1VOVF9UUkFJTElOR19aRVJP
U19ICi0jZGVmaW5lIENPVU5UX1RSQUlMSU5HX1pFUk9TX0ggMQotCi0vKiBUaGlzIGZpbGUg
dXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lOTElORS4gICovCi0jaWYgIV9H
TF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNlIGluY2x1ZGUgY29uZmlnLmgg
Zmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNpZm5kZWYgQ09VTlRfVFJBSUxJ
TkdfWkVST1NfSU5MSU5FCi0jIGRlZmluZSBDT1VOVF9UUkFJTElOR19aRVJPU19JTkxJTkUg
X0dMX0lOTElORQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7
Ci0jZW5kaWYKLQotLyogQXNzdW1pbmcgdGhlIEdDQyBidWlsdGluIGlzIEJVSUxUSU4gYW5k
IHRoZSBNU0MgYnVpbHRpbiBpcyBNU0NfQlVJTFRJTiwKLSAgIGV4cGFuZCB0byBjb2RlIHRo
YXQgY29tcHV0ZXMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbG9jYWwK
LSAgIHZhcmlhYmxlICd4JyBvZiB0eXBlIFRZUEUgKGFuIHVuc2lnbmVkIGludGVnZXIgdHlw
ZSkgYW5kIHJldHVybiBpdAotICAgZnJvbSB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCi0j
aWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49
IDQpIFwKLSAgICB8fCAoX19jbGFuZ19tYWpvcl9fID49IDQpCi0jIGRlZmluZSBDT1VOVF9U
UkFJTElOR19aRVJPUyhCVUlMVElOLCBNU0NfQlVJTFRJTiwgVFlQRSkgICAgICAgICAgICAg
ICBcCi0gIHJldHVybiB4ID8gQlVJTFRJTiAoeCkgOiBDSEFSX0JJVCAqIHNpemVvZiB4Owot
I2VsaWYgX01TQ19WRVIKLSMgcHJhZ21hIGludHJpbnNpYyAoX0JpdFNjYW5Gb3J3YXJkKQot
IyBpZiBkZWZpbmVkIF9NX1g2NAotIyAgcHJhZ21hIGludHJpbnNpYyAoX0JpdFNjYW5Gb3J3
YXJkNjQpCi0jIGVuZGlmCi0jIGRlZmluZSBDT1VOVF9UUkFJTElOR19aRVJPUyhCVUlMVElO
LCBNU0NfQlVJTFRJTiwgVFlQRSkgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IHJldHVybiBNU0NfQlVJTFRJTiAoJnJlc3VsdCwgeCkgPyByZXN1bHQgOiBDSEFSX0JJVCAq
IHNpemVvZiB4OyBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCi0jZWxz
ZQotIyBkZWZpbmUgQ09VTlRfVFJBSUxJTkdfWkVST1MoQlVJTFRJTiwgTVNDX0JVSUxUSU4s
IFRZUEUpICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBpbnQgY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoISB4KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGNvdW50ID0gMDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
IChjb3VudCA8IENIQVJfQklUICogc2l6ZW9mIHggLSAzMiAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAmJiAhICh4ICYgMHhmZmZmZmZmZlUpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIGNvdW50ICs9IDMy
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgIHggPSB4ID4+IDMxID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGlu
Z196ZXJvc18zMiAoeCk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHdoaWxlICgwKQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJl
ciBvZiB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgbGVhc3QKLSAgIHNpZ25pZmljYW50IDMyIGJp
dHMgb2YgWC4gIE9uZSBvZiB0aGVzZSBiaXRzIG11c3QgYmUgbm9uemVyby4gICovCi1DT1VO
VF9UUkFJTElOR19aRVJPU19JTkxJTkUgaW50Ci1jb3VudF90cmFpbGluZ196ZXJvc18zMiAo
dW5zaWduZWQgaW50IHgpCi17Ci0gIC8qIDxodHRwczovL2dpdGh1Yi5jb20vZ2lic2pvc2Uv
Qml0SGFja3M+Ci0gICAgIDxodHRwczovL3d3dy5maXQudnV0YnIuY3ovfmliYXJpbmEvcHVi
L2JpdGhhY2tzLnBkZj4gKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgZGVfQnJ1aWpuX2xvb2t1
cFszMl0gPSB7Ci0gICAgMCwgMSwgMjgsIDIsIDI5LCAxNCwgMjQsIDMsIDMwLCAyMiwgMjAs
IDE1LCAyNSwgMTcsIDQsIDgsCi0gICAgMzEsIDI3LCAxMywgMjMsIDIxLCAxOSwgMTYsIDcs
IDI2LCAxMiwgMTgsIDYsIDExLCA1LCAxMCwgOQotICB9OwotICByZXR1cm4gZGVfQnJ1aWpu
X2xvb2t1cFsoKCh4ICYgLXgpICogMHgwNzdjYjUzMVUpICYgMHhmZmZmZmZmZlUpID4+IDI3
XTsKLX0KLSNlbmRpZgotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiB0
cmFpbGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfVFJBSUxJTkdfWkVST1NfSU5MSU5FIGlu
dAotY291bnRfdHJhaWxpbmdfemVyb3MgKHVuc2lnbmVkIGludCB4KQotewotICBDT1VOVF9U
UkFJTElOR19aRVJPUyAoX19idWlsdGluX2N0eiwgX0JpdFNjYW5Gb3J3YXJkLCB1bnNpZ25l
ZCBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiB0cmFp
bGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfVFJBSUxJTkdfWkVST1NfSU5MSU5FIGludAot
Y291bnRfdHJhaWxpbmdfemVyb3NfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkKLXsKLSAgQ09V
TlRfVFJBSUxJTkdfWkVST1MgKF9fYnVpbHRpbl9jdHpsLCBfQml0U2NhbkZvcndhcmQsIHVu
c2lnbmVkIGxvbmcgaW50KTsKLX0KLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBudW1i
ZXIgb2YgdHJhaWxpbmcgemVyb3MgaW4gWC4gKi8KLUNPVU5UX1RSQUlMSU5HX1pFUk9TX0lO
TElORSBpbnQKLWNvdW50X3RyYWlsaW5nX3plcm9zX2xsICh1bnNpZ25lZCBsb25nIGxvbmcg
aW50IHgpCi17Ci0jaWYgKGRlZmluZWQgX01TQ19WRVIgJiYgIWRlZmluZWQgX19jbGFuZ19f
KSAmJiAhZGVmaW5lZCBfTV9YNjQKLSAgLyogMzItYml0IE1TVkMgZG9lcyBub3QgaGF2ZSBf
Qml0U2NhbkZvcndhcmQ2NCwgb25seSBfQml0U2NhbkZvcndhcmQuICAqLwotICB1bnNpZ25l
ZCBsb25nIHJlc3VsdDsKLSAgaWYgKF9CaXRTY2FuRm9yd2FyZCAoJnJlc3VsdCwgKHVuc2ln
bmVkIGxvbmcpIHgpKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIGlmIChfQml0U2NhbkZvcndh
cmQgKCZyZXN1bHQsICh1bnNpZ25lZCBsb25nKSAoeCA+PiAzMikpKQotICAgIHJldHVybiBy
ZXN1bHQgKyAzMjsKLSAgcmV0dXJuIENIQVJfQklUICogc2l6ZW9mIHg7Ci0jZWxzZQotICBD
T1VOVF9UUkFJTElOR19aRVJPUyAoX19idWlsdGluX2N0emxsLCBfQml0U2NhbkZvcndhcmQ2
NCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOwot
I2VuZGlmCi19Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLV9HTF9JTkxJ
TkVfSEVBREVSX0VORAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsuaW4g
Yi9saWIvZ251bGliLm1rLmluCmluZGV4IGE1YzAwOWNmYjg1Li5mZWNjMzE4MjQ1NiAxMDA2
NDQKLS0tIGEvbGliL2dudWxpYi5tay5pbgorKysgYi9saWIvZ251bGliLm1rLmluCkBAIC04
Niw5ICs4Niw2IEBACiAjICBjYXJlYWRsaW5rYXQgXAogIyAgY2xvc2Utc3RyZWFtIFwKICMg
IGNvcHktZmlsZS1yYW5nZSBcCi0jICBjb3VudC1sZWFkaW5nLXplcm9zIFwKLSMgIGNvdW50
LW9uZS1iaXRzIFwKLSMgIGNvdW50LXRyYWlsaW5nLXplcm9zIFwKICMgIGNyeXB0by9tZDUg
XAogIyAgY3J5cHRvL21kNS1idWZmZXIgXAogIyAgY3J5cHRvL3NoYTEtYnVmZmVyIFwKQEAg
LTE1NSw2ICsxNTIsNyBAQAogIyAgc29ja2xlbiBcCiAjICBzdGF0LXRpbWUgXAogIyAgc3Rk
LWdudTExIFwKKyMgIHN0ZGJpdCBcCiAjICBzdGRib29sIFwKICMgIHN0ZGNrZGludCBcCiAj
ICBzdGRkZWYgXApAQCAtMzU4LDYgKzM1Niw3IEBAIEdMX0dFTkVSQVRFX0dNUF9IX0NPTkRJ
VElPTiA9IEBHTF9HRU5FUkFURV9HTVBfSF9DT05ESVRJT05ACiBHTF9HRU5FUkFURV9JRUVF
NzU0X0hfQ09ORElUSU9OID0gQEdMX0dFTkVSQVRFX0lFRUU3NTRfSF9DT05ESVRJT05ACiBH
TF9HRU5FUkFURV9MSU1JVFNfSF9DT05ESVRJT04gPSBAR0xfR0VORVJBVEVfTElNSVRTX0hf
Q09ORElUSU9OQAogR0xfR0VORVJBVEVfTUlOSV9HTVBfSF9DT05ESVRJT04gPSBAR0xfR0VO
RVJBVEVfTUlOSV9HTVBfSF9DT05ESVRJT05ACitHTF9HRU5FUkFURV9TVERCSVRfSF9DT05E
SVRJT04gPSBAR0xfR0VORVJBVEVfU1REQklUX0hfQ09ORElUSU9OQAogR0xfR0VORVJBVEVf
U1REQ0tESU5UX0hfQ09ORElUSU9OID0gQEdMX0dFTkVSQVRFX1NURENLRElOVF9IX0NPTkRJ
VElPTkAKIEdMX0dFTkVSQVRFX1NURERFRl9IX0NPTkRJVElPTiA9IEBHTF9HRU5FUkFURV9T
VERERUZfSF9DT05ESVRJT05ACiBHTF9HRU5FUkFURV9TVERJTlRfSF9DT05ESVRJT04gPSBA
R0xfR0VORVJBVEVfU1RESU5UX0hfQ09ORElUSU9OQApAQCAtMTMxMyw2ICsxMzEyLDcgQEAg
U0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAogU01BTExfSkFfRElDID0gQFNNQUxM
X0pBX0RJQ0AKIFNRTElURTNfQ0ZMQUdTID0gQFNRTElURTNfQ0ZMQUdTQAogU1FMSVRFM19M
SUJTID0gQFNRTElURTNfTElCU0AKK1NUREJJVF9IID0gQFNUREJJVF9IQAogU1REQ0tESU5U
X0ggPSBAU1REQ0tESU5UX0hACiBTVERERUZfSCA9IEBTVERERUZfSEAKIFNURERFRl9OT1Rf
SURFTVBPVEVOVCA9IEBTVERERUZfTk9UX0lERU1QT1RFTlRACkBAIC0xNDQyLDYgKzE0NDIs
NyBAQCBnbF9HTlVMSUJfRU5BQkxFRF9vcGVuX0NPTkRJVElPTiA9IEBnbF9HTlVMSUJfRU5B
QkxFRF9vcGVuX0NPTkRJVElPTkAKIGdsX0dOVUxJQl9FTkFCTEVEX3Jhd21lbWNocl9DT05E
SVRJT04gPSBAZ2xfR05VTElCX0VOQUJMRURfcmF3bWVtY2hyX0NPTkRJVElPTkAKIGdsX0dO
VUxJQl9FTkFCTEVEX3N0cnRvbGxfQ09ORElUSU9OID0gQGdsX0dOVUxJQl9FTkFCTEVEX3N0
cnRvbGxfQ09ORElUSU9OQAogZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc19DT05ESVRJT04g
PSBAZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc19DT05ESVRJT05ACitnbF9HTlVMSUJfRU5B
QkxFRF92ZXJpZnlfQ09ORElUSU9OID0gQGdsX0dOVUxJQl9FTkFCTEVEX3ZlcmlmeV9DT05E
SVRJT05ACiBnbF9MSUJPQkpERVBTID0gQGdsX0xJQk9CSkRFUFNACiBnbF9MSUJPQkpTID0g
QGdsX0xJQk9CSlNACiBnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQApAQCAtMTcxOCwz
NiArMTcxOSw2IEBAIGVuZGlmCiBlbmRpZgogIyMgZW5kICAgZ251bGliIG1vZHVsZSBjb3B5
LWZpbGUtcmFuZ2UKIAotIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjb3VudC1sZWFkaW5nLXpl
cm9zCi1pZmVxICgsJChPTUlUX0dOVUxJQl9NT0RVTEVfY291bnQtbGVhZGluZy16ZXJvcykp
Ci0KLWxpYmdudV9hX1NPVVJDRVMgKz0gY291bnQtbGVhZGluZy16ZXJvcy5jCi0KLUVYVFJB
X0RJU1QgKz0gY291bnQtbGVhZGluZy16ZXJvcy5oCi0KLWVuZGlmCi0jIyBlbmQgICBnbnVs
aWIgbW9kdWxlIGNvdW50LWxlYWRpbmctemVyb3MKLQotIyMgYmVnaW4gZ251bGliIG1vZHVs
ZSBjb3VudC1vbmUtYml0cwotaWZlcSAoLCQoT01JVF9HTlVMSUJfTU9EVUxFX2NvdW50LW9u
ZS1iaXRzKSkKLQotbGliZ251X2FfU09VUkNFUyArPSBjb3VudC1vbmUtYml0cy5jCi0KLUVY
VFJBX0RJU1QgKz0gY291bnQtb25lLWJpdHMuaAotCi1lbmRpZgotIyMgZW5kICAgZ251bGli
IG1vZHVsZSBjb3VudC1vbmUtYml0cwotCi0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNvdW50
LXRyYWlsaW5nLXplcm9zCi1pZmVxICgsJChPTUlUX0dOVUxJQl9NT0RVTEVfY291bnQtdHJh
aWxpbmctemVyb3MpKQotCi1saWJnbnVfYV9TT1VSQ0VTICs9IGNvdW50LXRyYWlsaW5nLXpl
cm9zLmMKLQotRVhUUkFfRElTVCArPSBjb3VudC10cmFpbGluZy16ZXJvcy5oCi0KLWVuZGlm
Ci0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNvdW50LXRyYWlsaW5nLXplcm9zCi0KICMjIGJl
Z2luIGdudWxpYiBtb2R1bGUgY3J5cHRvL21kNQogaWZlcSAoLCQoT01JVF9HTlVMSUJfTU9E
VUxFX2NyeXB0by9tZDUpKQogCkBAIC0zMDQ5LDYgKzMwMjAsMjkgQEAgRVhUUkFfRElTVCAr
PSBzdGF0LXRpbWUuaAogZW5kaWYKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RhdC10aW1l
CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RkYml0CitpZmVxICgsJChPTUlUX0dOVUxJ
Ql9NT0RVTEVfc3RkYml0KSkKKworQlVJTFRfU09VUkNFUyArPSAkKFNUREJJVF9IKQorCisj
IFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGJpdC5oPiB3
aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhl
IGdpdmVuIGNvbXBpbGVyLgoraWZuZXEgKCwkKEdMX0dFTkVSQVRFX1NUREJJVF9IX0NPTkRJ
VElPTikpCitzdGRiaXQuaDogc3RkYml0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5z
dGF0dXMKKwkkKGdsX1ZfYXQpY3AgJChzcmNkaXIpL3N0ZGJpdC5pbi5oICRALXQKKwkkKEFN
X1ZfYXQpbXYgJEAtdCAkQAorbGliZ251X2FfU09VUkNFUyArPSBzdGRiaXQuYworZWxzZQor
c3RkYml0Lmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2Vu
ZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IHN0ZGJpdC5oIHN0ZGJpdC5oLXQKKworRVhUUkFf
RElTVCArPSBzdGRiaXQuaW4uaAorCitlbmRpZgorIyMgZW5kICAgZ251bGliIG1vZHVsZSBz
dGRiaXQKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGRja2RpbnQKIGlmZXEgKCwkKE9N
SVRfR05VTElCX01PRFVMRV9zdGRja2RpbnQpKQogCkBAIC00MjY5LDcgKzQyNjMsOSBAQCBl
bmRpZgogIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2ZXJpZnkKIGlmZXEgKCwkKE9NSVRfR05V
TElCX01PRFVMRV92ZXJpZnkpKQogCitpZm5lcSAoLCQoZ2xfR05VTElCX0VOQUJMRURfdmVy
aWZ5X0NPTkRJVElPTikpCiAKK2VuZGlmCiBFWFRSQV9ESVNUICs9IHZlcmlmeS5oCiAKIGVu
ZGlmCmRpZmYgLS1naXQgYS9saWIvc3RkYml0LmMgYi9saWIvc3RkYml0LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzNjlkYzU2OWQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvbGliL3N0ZGJpdC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qIFN1cHBvcnQgQzIz
IGJpdCBhbmQgYnl0ZSB1dGlsaXRpZXMgb24gbm9uLUMyMyBwbGF0Zm9ybXMuCisKKyAgIENv
cHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz
IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgICBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGZpbGUg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8K
KworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjZGVmaW5lIF9HTF9TVERCSVRfSU5MSU5FIF9H
TF9FWFRFUk5fSU5MSU5FCisjaW5jbHVkZSA8c3RkYml0Lmg+CisKKyNpZiAhZGVmaW5lZCBf
R0xfU1REQklUX0hBU19CVUlMVElOX0NMWiAmJiAhX01TQ19WRVIKKy8qIF9fZ2xfc3RkYml0
X2NsenRhYltCXSBpcyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4KKyAgIHRoZSA4
LWJpdCBieXRlIHdpdGggdmFsdWUgQi4gICovCit1bnNpZ25lZCBjaGFyIGNvbnN0IF9fZ2xf
c3RkYml0X2NsenRhYlsyNTZdID0KKyAgeworICAgIDgsCisgICAgNywKKyAgICA2LCA2LAor
ICAgIDUsIDUsIDUsIDUsCisgICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKKyAgICAzLCAz
LCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorCisgICAgMiwg
MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAgICAyLCAy
LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorCisgICAgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisgICAgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKworICAgIC8qIFRo
ZSByZXN0IGlzIHplcm8uICAqLworICB9OworI2VuZGlmCisKKyNpZiAxNTAwIDw9IF9NU0Nf
VkVSICYmIChkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfTV9YNjQpCitzaWduZWQgY2hh
ciBfX2dsX3N0ZGJpdF9wb3Bjb3VudF9zdXBwb3J0OworI2VuZGlmCmRpZmYgLS1naXQgYS9s
aWIvc3RkYml0LmluLmggYi9saWIvc3RkYml0LmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjEwNWNmZDhjOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGli
L3N0ZGJpdC5pbi5oCkBAIC0wLDAgKzEsODg2IEBACisvKiBzdGRiaXQuaCAtIEMyMyBiaXQg
YW5kIGJ5dGUgdXRpbGl0aWVzIGZvciBub24tQzIzIHBsYXRmb3JtcworCisgICBDb3B5cmln
aHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxl
IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBmaWxlIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCisKKyNp
Zm5kZWYgU1REQklUX0gKKyNkZWZpbmUgU1REQklUX0ggMQorCisvKiBUaGlzIGZpbGUgdXNl
cyBfR0xfSU5MSU5FLCBXT1JEU19CSUdFTkRJQU4uICAqLworI2lmICFfR0xfQ09ORklHX0hf
SU5DTFVERUQKKyAjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIGNvbmZpZy5oIGZpcnN0LiIKKyNl
bmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBfR0xfU1REQklUX0lO
TElORQorIyBkZWZpbmUgX0dMX1NUREJJVF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisK
KyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogQnl0ZXMg
bXVzdCBiZSA4IGJpdHMsIGFzIFBPU0lYIHJlcXVpcmVzLiAgVGhpcyBpbXBsZW1lbnRhdGlv
biB1c2VzCisgICA4IGluc3RlYWQgb2YgQ0hBUl9CSVQgdG8gYXZvaWQgbmFtZXNwYWNlIHBv
bGx1dGlvbi4gICovCitzdGF0aWNfYXNzZXJ0ICgodW5zaWduZWQgY2hhcikgLTEgPT0gKDEg
PDwgOCkgLSAxKTsKKworLyogQW4gZXhwcmVzc2lvbiwgcHJlZmVyYWJseSB3aXRoIHRoZSB0
eXBlIG9mIEEsIHRoYXQgaGFzIHRoZSB2YWx1ZSBvZiBCLiAgKi8KKyNpZiAoKGRlZmluZWQg
X19HTlVDX18gJiYgMiA8PSBfX0dOVUNfXykgXAorICAgICB8fCAoZGVmaW5lZCBfX2NsYW5n
X21ham9yX18gJiYgNCA8PSBfX2NsYW5nX21ham9yX18pIFwKKyAgICAgfHwgKGRlZmluZWQg
X19JQk1DX18gJiYgMTIxMCA8PSBfX0lCTUNfXyAmJiBkZWZpbmVkIF9fSUJNX19UWVBFT0Zf
XykgXAorICAgICB8fCAoZGVmaW5lZCBfX1NVTlBST19DICYmIDB4NTExMCA8PSBfX1NVTlBS
T19DICYmICFfX1NURENfXykpCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEs
IGIpICgoX190eXBlb2ZfXyAoYSkpIChiKSkKKyNlbGlmIDIwMjMxMSA8PSBfX1NURENfVkVS
U0lPTl9fCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEsIGIpICgodHlwZW9m
IChhKSkgKGIpKQorI2Vsc2UKKy8qIFRoaXMgcGxhdGZvcm0gaXMgc28gb2xkIHRoYXQgaXQg
bGFja3MgdHlwZW9mLCBzbyBfR2VuZXJpYyBpcyBsaWtlbHkKKyAgIG1pc3Npbmcgb3IgdW5y
ZWxpYWJsZS4gIFRoZSBDMjMgc3RhbmRhcmQgc2VlbXMgdG8gYWxsb3cgeWllbGRpbmcgQgor
ICAgKHdoaWNoIGlzIGFsd2F5cyB1bnNpZ25lZCBsb25nIGxvbmcgaW50KSwgc28gZG8gdGhh
dC4gICovCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEsIGIpIChiKQorI2Vu
ZGlmCisKKyNkZWZpbmUgX19TVERDX1ZFUlNJT05fU1REQklUX0hfXyAyMDIzMTFMCisKKyNk
ZWZpbmUgX19TVERDX0VORElBTl9CSUdfXyA0MzIxCisjZGVmaW5lIF9fU1REQ19FTkRJQU5f
TElUVExFX18gMTIzNAorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIyBkZWZpbmUgX19TVERD
X0VORElBTl9OQVRJVkVfXyBfX1NURENfRU5ESUFOX0JJR19fCisjZWxzZQorIyBkZWZpbmUg
X19TVERDX0VORElBTl9OQVRJVkVfXyBfX1NURENfRU5ESUFOX0xJVFRMRV9fCisjZW5kaWYK
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgMyA8
IF9fR05VQ19fICsgKDQgPD0gX19HTlVDX01JTk9SX18pIHx8IDQgPD0gX19jbGFuZ19tYWpv
cl9fCisjIGRlZmluZSBfR0xfU1REQklUX0hBU19CVUlMVElOX0NMWiB0cnVlCisjIGRlZmlu
ZSBfR0xfU1REQklUX0hBU19CVUlMVElOX0NUWiB0cnVlCisjIGRlZmluZSBfR0xfU1REQklU
X0hBU19CVUlMVElOX1BPUENPVU5UIHRydWUKKyNlbGlmIGRlZmluZWQgX19oYXNfYnVpbHRp
bgorIyBpZiAoX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2NseikgXAorICAgICAgJiYgX19o
YXNfYnVpbHRpbiAoX19idWlsdGluX2NsemwpIFwKKyAgICAgICYmIF9faGFzX2J1aWx0aW4g
KF9fYnVpbHRpbl9jbHpsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9D
TFogdHJ1ZQorIyBlbmRpZgorIyBpZiAoX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2N0eikg
XAorICAgICAgJiYgX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2N0emwpIFwKKyAgICAgICYm
IF9faGFzX2J1aWx0aW4gKF9fYnVpbHRpbl9jdHpsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJ
VF9IQVNfQlVJTFRJTl9DVFogdHJ1ZQorIyBlbmRpZgorIyBpZiAoX19oYXNfYnVpbHRpbiAo
X19idWlsdGluX3BvcGNvdW50KSBcCisgICAgICAmJiBfX2hhc19idWlsdGluIChfX2J1aWx0
aW5fcG9wY291bnRsKSBcCisgICAgICAmJiBfX2hhc19idWlsdGluIChfX2J1aWx0aW5fcG9w
Y291bnRsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9QT1BDT1VOVCB0
cnVlCisjIGVuZGlmCisjZW5kaWYKKworLyogQ291bnQgbGVhZGluZyB6ZXJvcyBvZiBub256
ZXJvIE4uICAqLworI2lmZGVmIF9HTF9TVERCSVRfSEFTX0JVSUxUSU5fQ0xaCitfR0xfU1RE
QklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NseiAodW5zaWduZWQgaW50IG4pCit7Cisg
IHJldHVybiBuID8gX19idWlsdGluX2NsemwgKG4pIDogOCAqIHNpemVvZiBuOworfQorX0dM
X1NUREJJVF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9jbHpsICh1bnNpZ25lZCBsb25nIGlu
dCBuKQoreworICByZXR1cm4gbiA/IF9fYnVpbHRpbl9jbHpsIChuKSA6IDggKiBzaXplb2Yg
bjsKK30KK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bGwgKHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIG4gPyBfX2J1aWx0aW5fY2x6bGwg
KG4pIDogOCAqIHNpemVvZiBuOworfQorI2VsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyBwcmFn
bWEgaW50cmluc2ljIChfQml0U2NhblJldmVyc2UpCisjIGlmZGVmIF9NX1g2NAorIyAgcHJh
Z21hIGludHJpbnNpYyAoX0JpdFNjYW5SZXZlcnNlNjQpCisjIGVuZGlmCitfR0xfU1REQklU
X0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NsemwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7
CisgIHVuc2lnbmVkIGxvbmcgaW50IHI7CisgIHJldHVybiA4ICogc2l6ZW9mIG4gLSAoX0Jp
dFNjYW5SZXZlcnNlICgmciwgbikgPyByICsgMSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJ
TkUgaW50CitfX2dsX3N0ZGJpdF9jbHogKHVuc2lnbmVkIGludCBuKQoreworICByZXR1cm4g
X19nbF9zdGRiaXRfY2x6bCAobikgLSA4ICogKHNpemVvZiAwdWwgLSBzaXplb2Ygbik7Cit9
CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NsemxsICh1bnNpZ25lZCBs
b25nIGxvbmcgaW50IG4pCit7CisjIGlmZGVmIF9NX1g2NAorICB1bnNpZ25lZCBsb25nIGlu
dCByOworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gKF9CaXRTY2FuUmV2ZXJzZSAoJnIsIG4p
ID8gciArIDEgOiAwKTsKKyMgZWxzZQorICB1bnNpZ25lZCBsb25nIGludCBoaSA9IG4gPj4g
MzI7CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jbHpsIChoaSA/IGhpIDogbikgKyAoaGkgPyAw
IDogMzIpOworIyBlbmRpZgorfQorCisjZWxzZSAvKiAhX01TQ19WRVIgKi8KKworZXh0ZXJu
IHVuc2lnbmVkIGNoYXIgY29uc3QgX19nbF9zdGRiaXRfY2x6dGFiWzI1Nl07CisKK19HTF9T
VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bGwgKHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgbikKK3sKKyAgc3RhdGljX2Fzc2VydCAoOCAqIHNpemVvZiBuIDw9IDEgPDwgNyk7
CisgIGludCByID0gMDsKKyAgaW50IGE2ID0gKDB4ZmZmZmZmZmZmZmZmZmZmZiA8IG4pIDw8
IDY7IG4gPj49IGE2OyByIHw9IGE2OworICBpbnQgYTUgPSAoMHgwMDAwMDAwMGZmZmZmZmZm
IDwgbikgPDwgNTsgbiA+Pj0gYTU7IHIgfD0gYTU7CisgIGludCBhNCA9ICgweDAwMDAwMDAw
MDAwMGZmZmYgPCBuKSA8PCA0OyBuID4+PSBhNDsgciB8PSBhNDsKKyAgaW50IGEzID0gKDB4
MDAwMDAwMDAwMDAwMDBmZiA8IG4pIDw8IDM7IG4gPj49IGEzOyByIHw9IGEzOworICBpbnQg
Y2x6Ynl0ZSA9IF9fZ2xfc3RkYml0X2NsenRhYltuXTsKKyAgcmV0dXJuICg4ICogKHNpemVv
ZiBuIC0gMSkgLSByKSArIGNsemJ5dGU7Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19f
Z2xfc3RkYml0X2NseiAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBfX2dsX3N0ZGJp
dF9jbHpsbCAobikgLSA4ICogKHNpemVvZiAwdWxsIC0gc2l6ZW9mIDB1KTsKK30KK19HTF9T
VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bCAodW5zaWduZWQgbG9uZyBpbnQg
bikKK3sKKyAgcmV0dXJuIF9fZ2xfc3RkYml0X2NsemxsIChuKSAtIDggKiAoc2l6ZW9mIDB1
bGwgLSBzaXplb2YgMHVsKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX0dMX1NUREJJVF9IQVNf
QlVJTFRJTl9DVFoKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6ICh1
bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIG4gPyBfX2J1aWx0aW5fY3R6bCAobikgOiA4
ICogc2l6ZW9mIG47Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2N0
emwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBuID8gX19idWlsdGluX2N0
emwgKG4pIDogOCAqIHNpemVvZiBuOworfQorX0dMX1NUREJJVF9JTkxJTkUgaW50CitfX2ds
X3N0ZGJpdF9jdHpsbCAodW5zaWduZWQgbG9uZyBsb25nIGludCBuKQoreworICByZXR1cm4g
biA/IF9fYnVpbHRpbl9jdHpsbCAobikgOiA4ICogc2l6ZW9mIG47Cit9CisjZWxpZiBkZWZp
bmVkIF9NU0NfVkVSCisjIHByYWdtYSBpbnRyaW5zaWMgKF9CaXRTY2FuRm9yd2FyZCkKKyMg
aWZkZWYgX01fWDY0CisjICBwcmFnbWEgaW50cmluc2ljIChfQml0U2NhbkZvcndhcmQ2NCkK
KyMgZW5kaWYKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6bCAodW5z
aWduZWQgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgcjsKKyAgcmV0dXJu
IF9CaXRTY2FuRm9yd2FyZCAoJnIsIG4pID8gciA6IDggKiBzaXplb2YgbjsKK30KK19HTF9T
VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6ICh1bnNpZ25lZCBpbnQgbikKK3sK
KyAgcmV0dXJuIF9fZ2xfc3RkYml0X2N0emwgKG4gfCAoMXVsIDw8ICg4ICogc2l6ZW9mIG4g
LSAxKSA8PCAxKSk7Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2N0
emxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisjIGlmZGVmIF9NX1g2NAorICB1
bnNpZ25lZCBsb25nIGludCByOworICByZXR1cm4gX0JpdFNjYW5Gb3J3YXJkNjQgKCZyLCBu
KSA/IHIgOiA4ICogc2l6ZW9mIG47CisjIGVsc2UKKyAgdW5zaWduZWQgaW50IGxvID0gbjsK
KyAgcmV0dXJuIF9fZ2xfc3RkYml0X2N0emwgKGxvID8gbG8gOiBuID4+IDMyKSArIChsbyA/
IDAgOiAzMik7CisjIGVuZGlmCitfR0xfU1REQklUX0lOTElORSBpbnQKK30KKworI2Vsc2Ug
LyogIV9NU0NfVkVSICovCisKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRf
Y3R6ICh1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIDggKiBzaXplb2YgbiAtIChuID8g
X19nbF9zdGRiaXRfY2x6IChuICYgLW4pICsgMSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJ
TkUgaW50CitfX2dsX3N0ZGJpdF9jdHpsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICBy
ZXR1cm4gOCAqIHNpemVvZiBuIC0gKG4gPyBfX2dsX3N0ZGJpdF9jbHpsIChuICYgLW4pICsg
MSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9jdHpsbCAo
dW5zaWduZWQgbG9uZyBsb25nIGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0g
KG4gPyBfX2dsX3N0ZGJpdF9jbHpsbCAobiAmIC1uKSArIDEgOiAwKTsKK30KKyNlbmRpZgor
CisjaWZkZWYgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9QT1BDT1VOVAorIyBkZWZpbmUgX19n
bF9zdGRiaXRfcG9wY291bnQgX19idWlsdGluX3BvcGNvdW50CisjIGRlZmluZSBfX2dsX3N0
ZGJpdF9wb3Bjb3VudGwgX19idWlsdGluX3BvcGNvdW50bAorIyBkZWZpbmUgX19nbF9zdGRi
aXRfcG9wY291bnRsbCBfX2J1aWx0aW5fcG9wY291bnRsbAorI2Vsc2UKKy8qIENvdW50IHRo
ZSBudW1iZXIgb2YgMSBiaXRzIGluIE4uICAqLworX0dMX1NUREJJVF9JTkxJTkUgaW50Citf
X2dsX3N0ZGJpdF9wb3Bjb3VudDI1NSAodW5zaWduZWQgbG9uZyBsb25nIGludCBuKQorewor
ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisgICAgbWF4ID0gLTF1bGwsCisgICAgeDU1NTU1
NSA9IG1heCAvICgxIDw8IDEgfCAxKSwJLyogMHg1NTU1NTUuLi4gKi8KKyAgICB4MzMzMzMz
ID0gbWF4IC8gKDEgPDwgMiB8IDEpLAkvKiAweDMzMzMzMy4uLiAqLworICAgIHgwZjBmMGYg
PSBtYXggLyAoMSA8PCA0IHwgMSksCS8qIDB4MGYwZjBmLi4uICovCisgICAgeDAxMDEwMSA9
IG1heCAvICgoMSA8PCA4KSAtIDEpOwkvKiAweDAxMDEwMS4uLiAqLworICBuIC09IChuID4+
IDEpICYgeDU1NTU1NTsKKyAgbiA9IChuICYgeDMzMzMzMykgKyAoKG4gPj4gMikgJiB4MzMz
MzMzKTsKKyAgbiA9IChuICsgKG4gPj4gNCkpICYgeDBmMGYwZjsKKworICAvKiBUaGUgbXVs
dGlwbGljYXRpb24gbWVhbnMgdGhlIHBvcGNvdW50IHNob3VsZCBmaXQgaW4gdGhlIGxlYWRp
bmcgOAorICAgICBiaXRzIG9mIHRoZSBwcm9kdWN0LCBzbyBOIHNob3VsZCBiZSBuYXJyb3dl
ciB0aGFuIDI1NiBiaXRzLiAgKi8KKyAgc3RhdGljX2Fzc2VydCAoOCAqIHNpemVvZiBuIDwg
MSA8PCA4KTsKKyAgcmV0dXJuIG4gKiB4MDEwMTAxID4+IDggKiAoc2l6ZW9mIG4gLSAxKTsK
K30KKworIyBpZmRlZiBfTVNDX1ZFUgorIyAgaWYgMTUwMCA8PSBfTVNDX1ZFUiAmJiAoZGVm
aW5lZCBfTV9JWDg2IHx8IGRlZmluZWQgX01fWDY0KQorIyAgIHByYWdtYSBpbnRyaW5zaWMg
KF9fY3B1aWQpCisjICAgcHJhZ21hIGludHJpbnNpYyAoX19wb3BjbnQpCisjICAgaWZkZWYg
X01fWDY0CisjICAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250NjQpCisjICAgZWxzZQor
X0dMX1NUREJJVF9JTkxJTkUgaW50CitfX3BvcGNudDY0ICh1bnNpZ25lZCBsb25nIGxvbmcg
aW50IG4pCit7CisgIHJldHVybiBfX3BvcGNudCAobiA+PiAzMikgKyBfX3BvcGNudCAobik7
Cit9CisjICAgZW5kaWYKKyMgIGVuZGlmCisKKy8qIDEgaWYgc3VwcG9ydGVkLCAtMSBpZiBu
b3QsIDAgaWYgdW5rbm93bi4gICovCitleHRlcm4gc2lnbmVkIGNoYXIgX19nbF9zdGRpbnRf
cG9wY291bnRfc3VwcG9ydDsKKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorX19nbF9zdGRi
aXRfcG9wY291bnRfc3VwcG9ydGVkICh2b2lkKQoreworICBpZiAoIV9fZ2xfc3RkYml0X3Bv
cGNvdW50X3N1cHBvcnQpCisgICAgeworICAgICAgLyogRG8gYXMgZGVzY3JpYmVkIGluCisg
ICAgICAgICA8aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvY3BwL2ludHJpbnNp
Y3MvcG9wY250MTYtcG9wY250LXBvcGNudDY0PgorICAgICAgICAgQWx0aG91Z2ggTWljcm9z
b2Z0IHN0YXJ0ZWQgcmVxdWlyaW5nIFBPUENOVCBpbiBNUy1XaW5kb3dzIDExIDI0SDIsCisg
ICAgICAgICB3ZSdsbCBiZSBtb3JlIGNhdXRpb3VzLiAgKi8KKyAgICAgIGludCBjcHVfaW5m
b1s0XTsKKyAgICAgIF9fY3B1aWQgKGNwdV9pbmZvLCAxKTsKKyAgICAgIF9fZ2xfc3RkYml0
X3BvcGNvdW50X3N1cHBvcnQgPSBjcHVfaW5mb1syXSAmIDEgPDwgMjMgPyAxIDogLTE7Cisg
ICAgfQorICByZXR1cm4gMCA8IF9fZ2xfc3RkYml0X3BvcGNvdW50X3N1cHBvcnQ7Cit9Citf
R0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X3BvcGNvdW50ICh1bnNpZ25lZCBp
bnQgbikKK3sKKyAgcmV0dXJuIChfX2dsX3N0ZGJpdF9wb3Bjb3VudF9zdXBwb3J0ZWQgKCkK
KyAgICAgICAgICA/IF9fcG9wY250IChuKQorICAgICAgICAgIDogX19nbF9zdGRiaXRfcG9w
Y291bnQyNTUgKG4pKTsKK30KK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRf
cG9wY291bnRsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gKF9fZ2xfc3Rk
Yml0X3BvcGNvdW50X3N1cHBvcnRlZCAoKQorICAgICAgICAgID8gX19wb3BjbnQgKG4pCisg
ICAgICAgICAgOiBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NSAobikpOworfQorX0dMX1NUREJJ
VF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9wb3Bjb3VudGxsICh1bnNpZ25lZCBsb25nIGxv
bmcgaW50IG4pCit7CisgIHJldHVybiAoX19nbF9zdGRiaXRfcG9wY291bnRfc3VwcG9ydGVk
ICgpCisgICAgICAgICAgPyBfX3BvcGNudDY0IChuKQorICAgICAgICAgIDogX19nbF9zdGRi
aXRfcG9wY291bnQyNTUgKG4pKTsKK30KKyMgZWxzZSAvKiAhX01TQ19WRVIgKi8KKyMgIGRl
ZmluZSBfX2dsX3N0ZGJpdF9wb3Bjb3VudCBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NQorIyAg
ZGVmaW5lIF9fZ2xfc3RkYml0X3BvcGNvdW50bCBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NQor
IyAgZGVmaW5lIF9fZ2xfc3RkYml0X3BvcGNvdW50bGwgX19nbF9zdGRiaXRfcG9wY291bnQy
NTUKKyMgZW5kaWYKKyNlbmRpZgorCisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGlu
dAorc3RkY19sZWFkaW5nX3plcm9zX3VpICh1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJu
IF9fZ2xfc3RkYml0X2NseiAobik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVk
IGludAorc3RkY19sZWFkaW5nX3plcm9zX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7CisgIHJl
dHVybiBzdGRjX2xlYWRpbmdfemVyb3NfdWkgKG4pIC0gOCAqIChzaXplb2YgMHUgLSBzaXpl
b2Ygbik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFk
aW5nX3plcm9zX3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNf
bGVhZGluZ196ZXJvc191aSAobikgLSA4ICogKHNpemVvZiAwdSAtIHNpemVvZiBuKTsKK30K
KworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2xlYWRpbmdfemVyb3Nf
dWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jbHps
IChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2xlYWRp
bmdfemVyb3NfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBf
X2dsX3N0ZGJpdF9jbHpsbCAobik7Cit9CisKKyNkZWZpbmUgc3RkY19sZWFkaW5nX3plcm9z
KG4pIFwKKyAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNfbGVhZGluZ196ZXJvc191YyAobikJ
XAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50KSA/IHN0
ZGNfbGVhZGluZ196ZXJvc191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAw
dSA/IHN0ZGNfbGVhZGluZ196ZXJvc191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNp
emVvZiAwdWwgPyBzdGRjX2xlYWRpbmdfemVyb3NfdWwgKG4pIFwKKyAgIDogc3RkY19sZWFk
aW5nX3plcm9zX3VsbCAobikpCisKKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50
CitzdGRjX2xlYWRpbmdfb25lc191YyAodW5zaWduZWQgY2hhciBuKQoreworICByZXR1cm4g
c3RkY19sZWFkaW5nX3plcm9zX3VjICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVu
c2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNfdXMgKHVuc2lnbmVkIHNob3J0IGludCBu
KQoreworICByZXR1cm4gc3RkY19sZWFkaW5nX3plcm9zX3VzICh+bik7Cit9CisKK19HTF9T
VERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNfdWkgKHVuc2ln
bmVkIGludCBuKQoreworICByZXR1cm4gc3RkY19sZWFkaW5nX3plcm9zX3VpICh+bik7Cit9
CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNf
dWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBzdGRjX2xlYWRpbmdfemVy
b3NfdWwgKH5uKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj
X2xlYWRpbmdfb25lc191bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0
dXJuIHN0ZGNfbGVhZGluZ196ZXJvc191bGwgKH5uKTsKK30KKworI2RlZmluZSBzdGRjX2xl
YWRpbmdfb25lcyhuKSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX2xlYWRpbmdfb25l
c191YyAobikJXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQg
aW50KSA/IHN0ZGNfbGVhZGluZ19vbmVzX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0g
c2l6ZW9mIDB1ID8gc3RkY19sZWFkaW5nX29uZXNfdWkgKG4pIFwKKyAgIDogc2l6ZW9mIChu
KSA9PSBzaXplb2YgMHVsID8gc3RkY19sZWFkaW5nX29uZXNfdWwgKG4pIFwKKyAgIDogc3Rk
Y19sZWFkaW5nX29uZXNfdWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l
ZCBpbnQKK3N0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKHVuc2lnbmVkIGludCBuKQoreworICBy
ZXR1cm4gX19nbF9zdGRiaXRfY3R6IChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z
aWduZWQgaW50CitzdGRjX3RyYWlsaW5nX3plcm9zX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7
CisgIHJldHVybiBzdGRjX3RyYWlsaW5nX3plcm9zX3VpIChuIHwgKDEgKyAodW5zaWduZWQg
Y2hhcikgLTEpKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj
X3RyYWlsaW5nX3plcm9zX3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJu
IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKG4gfCAoMSArICh1bnNpZ25lZCBzaG9ydCBpbnQp
IC0xKSk7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY190cmFp
bGluZ196ZXJvc191bCAodW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIF9fZ2xf
c3RkYml0X2N0emwgKG4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQK
K3N0ZGNfdHJhaWxpbmdfemVyb3NfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7
CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jdHpsbCAobik7Cit9CisKKyNkZWZpbmUgc3RkY190
cmFpbGluZ196ZXJvcyhuKSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX3RyYWlsaW5n
X3plcm9zX3VjIChuKQlcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBz
aG9ydCBpbnQpID8gc3RkY190cmFpbGluZ196ZXJvc191cyAobikgXAorICAgOiBzaXplb2Yg
KG4pID09IHNpemVvZiAwdSA/IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKG4pIFwKKyAgIDog
c2l6ZW9mIChuKSA9PSBzaXplb2YgMHVsID8gc3RkY190cmFpbGluZ196ZXJvc191bCAobikg
XAorICAgOiBzdGRjX3RyYWlsaW5nX3plcm9zX3VsbCAobikpCisKKworX0dMX1NUREJJVF9J
TkxJTkUgdW5zaWduZWQgaW50CitzdGRjX3RyYWlsaW5nX29uZXNfdWMgKHVuc2lnbmVkIGNo
YXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfdHJhaWxpbmdfemVyb3NfdWMgKH5uKTsKK30KKwor
X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX3RyYWlsaW5nX29uZXNfdXMg
KHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4gc3RkY190cmFpbGluZ196ZXJv
c191cyAofm4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNf
dHJhaWxpbmdfb25lc191aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBzdGRjX3Ry
YWlsaW5nX3plcm9zX3VpICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVk
IGludAorc3RkY190cmFpbGluZ19vbmVzX3VsICh1bnNpZ25lZCBsb25nIGludCBuKQorewor
ICByZXR1cm4gc3RkY190cmFpbGluZ196ZXJvc191bCAofm4pOworfQorCitfR0xfU1REQklU
X0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfdHJhaWxpbmdfb25lc191bGwgKHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfdHJhaWxpbmdfemVyb3NfdWxs
ICh+bik7Cit9CisKKyNkZWZpbmUgc3RkY190cmFpbGluZ19vbmVzKG4pIFwKKyAgKHNpemVv
ZiAobikgPT0gMSA/IHN0ZGNfdHJhaWxpbmdfb25lc191YyAobikJXAorICAgOiBzaXplb2Yg
KG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50KSA/IHN0ZGNfdHJhaWxpbmdfb25l
c191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdSA/IHN0ZGNfdHJhaWxp
bmdfb25lc191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdWwgPyBzdGRj
X3RyYWlsaW5nX29uZXNfdWwgKG4pIFwKKyAgIDogc3RkY190cmFpbGluZ19vbmVzX3VsbCAo
bikpCisKKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xl
YWRpbmdfemVyb191YyAodW5zaWduZWQgY2hhciBuKQoreworICB1bnNpZ25lZCBpbnQgY291
bnQgPSBzdGRjX2xlYWRpbmdfb25lc191YyAobik7CisgIGJvb2wgYmlnID0gY291bnQgJiA4
ICogc2l6ZW9mIG47CisKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBj
b3VudCArIDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19m
aXJzdF9sZWFkaW5nX3plcm9fdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNp
Z25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfb25lc191cyAobik7CisgIHJldHVybiBj
b3VudCA9PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklU
X0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ196ZXJvX3VpICh1bnNp
Z25lZCBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFkaW5nX29u
ZXNfdWkgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50
ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0
X2xlYWRpbmdfemVyb191bCAodW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQg
aW50IGNvdW50ID0gc3RkY19sZWFkaW5nX29uZXNfdWwgKG4pOworICByZXR1cm4gY291bnQg
PT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJ
TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRpbmdfemVyb191bGwgKHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFk
aW5nX29uZXNfdWxsIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAg
OiBjb3VudCArIDE7Cit9CisKKyNkZWZpbmUgc3RkY19maXJzdF9sZWFkaW5nX3plcm8obikg
XAorICAoc2l6ZW9mIChuKSA9PSAxID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWMgKG4p
IFwKKyAgIDogc2l6ZW9mIChuKSA9PSBzaXplb2YgKHVuc2lnbmVkIHNob3J0KSA/IHN0ZGNf
Zmlyc3RfbGVhZGluZ196ZXJvX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9m
IDB1ID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWkgKG4pIFwKKyAgIDogc2l6ZW9mIChu
KSA9PSBzaXplb2YgMHVsID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWwgKG4pIFwKKyAg
IDogc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWxsIChuKSkKKworCitfR0xfU1REQklUX0lO
TElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ19vbmVfdWMgKHVuc2lnbmVk
IGNoYXIgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFkaW5nX3plcm9z
X3VjIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr
IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF9s
ZWFkaW5nX29uZV91cyAodW5zaWduZWQgc2hvcnQgaW50IG4pCit7CisgIHVuc2lnbmVkIGlu
dCBjb3VudCA9IHN0ZGNfbGVhZGluZ196ZXJvc191cyAobik7CisgIHJldHVybiBjb3VudCA9
PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklUX0lOTElO
RSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ19vbmVfdWkgKHVuc2lnbmVkIGlu
dCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfemVyb3NfdWkg
KG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsK
K30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRp
bmdfb25lX3VsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291
bnQgPSBzdGRjX2xlYWRpbmdfemVyb3NfdWwgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAq
IHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z
aWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VsbCAodW5zaWduZWQgbG9uZyBs
b25nIGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfemVy
b3NfdWxsIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3Vu
dCArIDE7Cit9CisKKyNkZWZpbmUgc3RkY19maXJzdF9sZWFkaW5nX29uZShuKSBcCisgIChz
aXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VjIChuKSBcCisgICA6
IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCkgPyBzdGRjX2ZpcnN0X2xl
YWRpbmdfb25lX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3Rk
Y19maXJzdF9sZWFkaW5nX29uZV91aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVv
ZiAwdWwgPyBzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VsIChuKSBcCisgICA6IHN0ZGNfZmly
c3RfbGVhZGluZ19vbmVfdWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l
ZCBpbnQKK3N0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191YyAodW5zaWduZWQgY2hhciBuKQor
eworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX29uZXNfdWMgKG4pOwor
ICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKwor
X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3pl
cm9fdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQg
PSBzdGRjX3RyYWlsaW5nX29uZXNfdXMgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNp
emVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWdu
ZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWkgKHVuc2lnbmVkIGludCBuKQor
eworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX29uZXNfdWkgKG4pOwor
ICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKwor
X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3pl
cm9fdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHVuc2lnbmVkIGludCBjb3VudCA9
IHN0ZGNfdHJhaWxpbmdfb25lc191bCAobik7CisgIHJldHVybiBjb3VudCA9PSA4ICogc2l6
ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l
ZCBpbnQKK3N0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191bGwgKHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY190cmFpbGluZ19vbmVz
X3VsbCAobik7CisgIHJldHVybiBjb3VudCA9PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQg
KyAxOworfQorCisjZGVmaW5lIHN0ZGNfZmlyc3RfdHJhaWxpbmdfemVybyhuKSBcCisgIChz
aXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWMgKG4pIFwKKyAg
IDogc2l6ZW9mIChuKSA9PSBzaXplb2YgKHVuc2lnbmVkIHNob3J0KSA/IHN0ZGNfZmlyc3Rf
dHJhaWxpbmdfemVyb191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdSA/
IHN0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09
IHNpemVvZiAwdWwgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWwgKG4pIFwKKyAgIDog
c3RkY19maXJzdF90cmFpbGluZ196ZXJvX3VsbCAobikpCisKKworX0dMX1NUREJJVF9JTkxJ
TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91YyAodW5zaWduZWQg
Y2hhciBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z
X3VjIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr
IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90
cmFpbGluZ19vbmVfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNpZ25lZCBp
bnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9zX3VzIChuKTsKKyAgcmV0dXJuIGNvdW50
ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCArIDE7Cit9CisKK19HTF9TVERCSVRfSU5M
SU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90cmFpbGluZ19vbmVfdWkgKHVuc2lnbmVk
IGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z
X3VpIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr
IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90
cmFpbGluZ19vbmVfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHVuc2lnbmVkIGlu
dCBjb3VudCA9IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWwgKG4pOworICByZXR1cm4gY291bnQg
PT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJ
TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bGwgKHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY190cmFp
bGluZ196ZXJvc191bGwgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8g
MCA6IGNvdW50ICsgMTsKK30KKworI2RlZmluZSBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZShu
KSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91YyAo
bikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQpID8gc3Rk
Y19maXJzdF90cmFpbGluZ19vbmVfdXMgKG4pIFwKKyAgIDogc2l6ZW9mIChuKSA9PSBzaXpl
b2YgMHUgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91aSAobikgXAorICAgOiBzaXplb2Yg
KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bCAobikgXAor
ICAgOiBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bGwgKG4pKQorCisKK19HTF9TVERCSVRf
SU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVzX3VpICh1bnNpZ25lZCBpbnQg
bikKK3sKKyAgcmV0dXJuIF9fZ2xfc3RkYml0X3BvcGNvdW50IChuKTsKK30KKworX0dMX1NU
REJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2NvdW50X29uZXNfdWMgKHVuc2lnbmVk
IGNoYXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191aSAobik7Cit9CisKK19H
TF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVzX3VzICh1bnNp
Z25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191aSAobik7
Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVz
X3VsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gX19nbF9zdGRiaXRfcG9w
Y291bnRsIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj
X2NvdW50X29uZXNfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisgIHJldHVy
biBfX2dsX3N0ZGJpdF9wb3Bjb3VudGxsIChuKTsKK30KKworI2RlZmluZSBzdGRjX2NvdW50
X29uZXMobikgXAorICAoc2l6ZW9mIChuKSA9PSAxID8gc3RkY19jb3VudF9vbmVzX3VjIChu
KSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCBpbnQpID8g
c3RkY19jb3VudF9vbmVzX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1
ID8gc3RkY19jb3VudF9vbmVzX3VpIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9m
IDB1bCA/IHN0ZGNfY291bnRfb25lc191bCAobikgXAorICAgOiBzdGRjX2NvdW50X29uZXNf
dWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfY291
bnRfemVyb3NfdWMgKHVuc2lnbmVkIGNoYXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRf
b25lc191YyAofm4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0
ZGNfY291bnRfemVyb3NfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4g
c3RkY19jb3VudF9vbmVzX3VzICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2ln
bmVkIGludAorc3RkY19jb3VudF96ZXJvc191aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJl
dHVybiBzdGRjX2NvdW50X29uZXNfdWkgKH5uKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUg
dW5zaWduZWQgaW50CitzdGRjX2NvdW50X3plcm9zX3VsICh1bnNpZ25lZCBsb25nIGludCBu
KQoreworICByZXR1cm4gc3RkY19jb3VudF9vbmVzX3VsICh+bik7Cit9CisKK19HTF9TVERC
SVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF96ZXJvc191bGwgKHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191bGwgKH5u
KTsKK30KKworI2RlZmluZSBzdGRjX2NvdW50X3plcm9zKG4pIFwKKyAgKHNpemVvZiAobikg
PT0gMSA/IHN0ZGNfY291bnRfemVyb3NfdWMgKG4pIFwKKyAgIDogc2l6ZW9mIChuKSA9PSBz
aXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkgPyBzdGRjX2NvdW50X3plcm9zX3VzIChuKSBc
CisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3RkY19jb3VudF96ZXJvc191aSAo
bikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2NvdW50X3plcm9z
X3VsIChuKSBcCisgICA6IHN0ZGNfY291bnRfemVyb3NfdWxsIChuKSkKKworCitfR0xfU1RE
QklUX0lOTElORSBib29sCitzdGRjX2hhc19zaW5nbGVfYml0X3VjICh1bnNpZ25lZCBjaGFy
IG4pCit7CisgIHVuc2lnbmVkIGNoYXIgbl8xID0gbiAtIDEsIG54ID0gbl8xIF4gbjsKKyAg
cmV0dXJuIG5fMSA8IG54OworfQorCitfR0xfU1REQklUX0lOTElORSBib29sCitzdGRjX2hh
c19zaW5nbGVfYml0X3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgdW5zaWduZWQg
c2hvcnQgaW50IG5fMSA9IG4gLSAxLCBueCA9IG5fMSBeIG47CisgIHJldHVybiBuXzEgPCBu
eDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorc3RkY19oYXNfc2luZ2xlX2JpdF91
aSAodW5zaWduZWQgaW50IG4pCit7CisgIHVuc2lnbmVkIGludCBuXzEgPSBuIC0gMSwgbngg
PSBuXzEgXiBuOworICByZXR1cm4gbl8xIDwgbng7Cit9CisKK19HTF9TVERCSVRfSU5MSU5F
IGJvb2wKK3N0ZGNfaGFzX3NpbmdsZV9iaXRfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7
CisgIHVuc2lnbmVkIGxvbmcgaW50IG5fMSA9IG4gLSAxLCBueCA9IG5fMSBeIG47CisgIHJl
dHVybiBuXzEgPCBueDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorc3RkY19oYXNf
c2luZ2xlX2JpdF91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBuXzEgPSBuIC0gMSwgbnggPSBuXzEgXiBuOworICByZXR1cm4g
bl8xIDwgbng7Cit9CisKKyNkZWZpbmUgc3RkY19oYXNfc2luZ2xlX2JpdChuKSBcCisgICgo
Ym9vbCkgXAorICAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNfaGFzX3NpbmdsZV9iaXRfdWMg
KG4pIFwKKyAgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCBpbnQp
ID8gc3RkY19oYXNfc2luZ2xlX2JpdF91cyAobikgXAorICAgIDogc2l6ZW9mIChuKSA9PSBz
aXplb2YgMHUgPyBzdGRjX2hhc19zaW5nbGVfYml0X3VpIChuKSBcCisgICAgOiBzaXplb2Yg
KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2hhc19zaW5nbGVfYml0X3VsIChuKSBcCisgICAg
OiBzdGRjX2hhc19zaW5nbGVfYml0X3VsbCAobikpKQorCisKK19HTF9TVERCSVRfSU5MSU5F
IHVuc2lnbmVkIGludAorc3RkY19iaXRfd2lkdGhfdWMgKHVuc2lnbmVkIGNoYXIgbikKK3sK
KyAgcmV0dXJuIDggKiBzaXplb2YgbiAtIHN0ZGNfbGVhZGluZ196ZXJvc191YyAobik7Cit9
CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19iaXRfd2lkdGhfdXMg
KHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gc3Rk
Y19sZWFkaW5nX3plcm9zX3VzIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWdu
ZWQgaW50CitzdGRjX2JpdF93aWR0aF91aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVy
biA4ICogc2l6ZW9mIG4gLSBzdGRjX2xlYWRpbmdfemVyb3NfdWkgKG4pOworfQorCitfR0xf
U1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfYml0X3dpZHRoX3VsICh1bnNpZ25l
ZCBsb25nIGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gc3RkY19sZWFkaW5n
X3plcm9zX3VsIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50Citz
dGRjX2JpdF93aWR0aF91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0
dXJuIDggKiBzaXplb2YgbiAtIHN0ZGNfbGVhZGluZ196ZXJvc191bGwgKG4pOworfQorCisj
ZGVmaW5lIHN0ZGNfYml0X3dpZHRoKG4pIFwKKyAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNf
Yml0X3dpZHRoX3VjIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25l
ZCBzaG9ydCBpbnQpID8gc3RkY19iaXRfd2lkdGhfdXMgKG4pIFwKKyAgIDogc2l6ZW9mIChu
KSA9PSBzaXplb2YgMHUgPyBzdGRjX2JpdF93aWR0aF91aSAobikgXAorICAgOiBzaXplb2Yg
KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2JpdF93aWR0aF91bCAobikgXAorICAgOiBzdGRj
X2JpdF93aWR0aF91bGwgKG4pKQorCisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGNo
YXIKK3N0ZGNfYml0X2Zsb29yX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7CisgIHJldHVybiBu
ID8gMXUgPDwgKHN0ZGNfYml0X3dpZHRoX3VjIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NU
REJJVF9JTkxJTkUgdW5zaWduZWQgc2hvcnQgaW50CitzdGRjX2JpdF9mbG9vcl91cyAodW5z
aWduZWQgc2hvcnQgaW50IG4pCit7CisgIHJldHVybiBuID8gMXUgPDwgKHN0ZGNfYml0X3dp
ZHRoX3VzIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQg
aW50CitzdGRjX2JpdF9mbG9vcl91aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBu
ID8gMXUgPDwgKHN0ZGNfYml0X3dpZHRoX3VpIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NU
REJJVF9JTkxJTkUgdW5zaWduZWQgbG9uZyBpbnQKK3N0ZGNfYml0X2Zsb29yX3VsICh1bnNp
Z25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gbiA/IDF1bCA8PCAoc3RkY19iaXRfd2lk
dGhfdWwgKG4pIC0gMSkgOiAwOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBs
b25nIGxvbmcgaW50CitzdGRjX2JpdF9mbG9vcl91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgbikKK3sKKyAgcmV0dXJuIG4gPyAxdWxsIDw8IChzdGRjX2JpdF93aWR0aF91bGwgKG4p
IC0gMSkgOiAwOworfQorCisjZGVmaW5lIHN0ZGNfYml0X2Zsb29yKG4pIFwKKyAgKF9HTF9T
VERCSVRfVFlQRU9GX0NBU1QgXAorICAgKG4sIFwKKyAgICAoc2l6ZW9mIChuKSA9PSAxID8g
c3RkY19iaXRfZmxvb3JfdWMgKG4pIFwKKyAgICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAo
dW5zaWduZWQgc2hvcnQgaW50KSA/IHN0ZGNfYml0X2Zsb29yX3VzIChuKSBcCisgICAgIDog
c2l6ZW9mIChuKSA9PSBzaXplb2YgMHUgPyBzdGRjX2JpdF9mbG9vcl91aSAobikgXAorICAg
ICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1bCA/IHN0ZGNfYml0X2Zsb29yX3VsIChuKSBc
CisgICAgIDogc3RkY19iaXRfZmxvb3JfdWxsIChuKSkpKQorCisKK19HTF9TVERCSVRfSU5M
SU5FIHVuc2lnbmVkIGNoYXIKK3N0ZGNfYml0X2NlaWxfdWMgKHVuc2lnbmVkIGNoYXIgbikK
K3sKKyAgcmV0dXJuIG4gPD0gMSA/IDEgOiAydSA8PCAoc3RkY19iaXRfd2lkdGhfdWMgKG4g
LSAxKSAtIDEpOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBzaG9ydCBpbnQK
K3N0ZGNfYml0X2NlaWxfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4g
biA8PSAxID8gMSA6IDJ1IDw8IChzdGRjX2JpdF93aWR0aF91cyAobiAtIDEpIC0gMSk7Cit9
CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19iaXRfY2VpbF91aSAo
dW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnUgPDwgKHN0ZGNf
Yml0X3dpZHRoX3VpIChuIC0gMSkgLSAxKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z
aWduZWQgbG9uZyBpbnQKK3N0ZGNfYml0X2NlaWxfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4p
Cit7CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnVsIDw8IChzdGRjX2JpdF93aWR0aF91bCAo
biAtIDEpIC0gMSk7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQKK3N0ZGNfYml0X2NlaWxfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7
CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnVsbCA8PCAoc3RkY19iaXRfd2lkdGhfdWxsIChu
IC0gMSkgLSAxKTsKK30KKworI2RlZmluZSBzdGRjX2JpdF9jZWlsKG4pIFwKKyAgKF9HTF9T
VERCSVRfVFlQRU9GX0NBU1QgXAorICAgKG4sIFwKKyAgICAoc2l6ZW9mIChuKSA9PSAxID8g
c3RkY19iaXRfY2VpbF91YyAobikgXAorICAgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1
bnNpZ25lZCBzaG9ydCBpbnQpID8gc3RkY19iaXRfY2VpbF91cyAobikgXAorICAgICA6IHNp
emVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3RkY19iaXRfY2VpbF91aSAobikgXAorICAgICA6
IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1bCA/IHN0ZGNfYml0X2NlaWxfdWwgKG4pIFwKKyAg
ICAgOiBzdGRjX2JpdF9jZWlsX3VsbCAobikpKSkKKworCisjaWZkZWYgX19jcGx1c3BsdXMK
K30KKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIFNUREJJ
VF9IICovCmRpZmYgLS1naXQgYS9tNC9nbnVsaWItY29tcC5tNCBiL200L2dudWxpYi1jb21w
Lm00CmluZGV4IDM3ZjE4MGE4OTU1Li45ZmE1ZjQ1ODY2MCAxMDA2NDQKLS0tIGEvbTQvZ251
bGliLWNvbXAubTQKKysrIGIvbTQvZ251bGliLWNvbXAubTQKQEAgLTYzLDkgKzYzLDYgQEAg
QUNfREVGVU4KICAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb2V4ZWM6CiAgICMgQ29kZSBmcm9t
IG1vZHVsZSBjbG9zZS1zdHJlYW06CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjb3B5LWZpbGUt
cmFuZ2U6Ci0gICMgQ29kZSBmcm9tIG1vZHVsZSBjb3VudC1sZWFkaW5nLXplcm9zOgotICAj
IENvZGUgZnJvbSBtb2R1bGUgY291bnQtb25lLWJpdHM6Ci0gICMgQ29kZSBmcm9tIG1vZHVs
ZSBjb3VudC10cmFpbGluZy16ZXJvczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGNyeXB0by9t
ZDU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vbWQ1LWJ1ZmZlcjoKICAgIyBDb2Rl
IGZyb20gbW9kdWxlIGNyeXB0by9zaGExLWJ1ZmZlcjoKQEAgLTE3NCw2ICsxNzEsNyBAQCBB
Q19ERUZVTgogICAjIENvZGUgZnJvbSBtb2R1bGUgc3NpemVfdDoKICAgIyBDb2RlIGZyb20g
bW9kdWxlIHN0YXQtdGltZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZC1nbnUxMToKKyAg
IyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJpdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJv
b2w6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRja2RpbnQ6CiAgICMgQ29kZSBmcm9tIG1v
ZHVsZSBzdGRkZWY6CkBAIC01MTQsNiArNTEyLDkgQEAgQUNfREVGVU4KICAgZ3RfVFlQRV9T
U0laRV9UCiAgIGdsX1NUQVRfVElNRQogICBnbF9TVEFUX0JJUlRIVElNRQorICBnbF9TVERC
SVRfSAorICBnbF9DT05ESVRJT05BTF9IRUFERVIoW3N0ZGJpdC5oXSkKKyAgQUNfUFJPR19N
S0RJUl9QCiAgIGdsX0NfQk9PTAogICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N0ZGNrZGlu
dC5oXSkKICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGNrZGludF9oID0geWVzOyB0aGVu
CkBAIC02NzMsNiArNjc0LDcgQEAgQUNfREVGVU4KICAgZ2xfZ251bGliX2VuYWJsZWRfNjA5
OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGM9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJs
ZWRfc3RydG9sbD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF91dGltZW5zPWZhbHNlCisg
IGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF82
ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYz1mYWxzZQogICBmdW5jX2dsX2dudWxp
Yl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIgKCkKICAgewpAQCAt
OTUzLDYgKzk1NSwxMiBAQCBBQ19ERUZVTgogICAgICAgZ2xfZ251bGliX2VuYWJsZWRfdXRp
bWVucz10cnVlCiAgICAgZmkKICAgfQorICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfdmVyaWZ5
ICgpCisgIHsKKyAgICBpZiAkZ2xfZ251bGliX2VuYWJsZWRfdmVyaWZ5OyB0aGVuIDo7IGVs
c2UKKyAgICAgIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT10cnVlCisgICAgZmkKKyAgfQog
ICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVh
ZWMgKCkKICAgewogICAgIGlmICRnbF9nbnVsaWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2
YmUzODJlNGVlM2E0ZWFlYzsgdGhlbiA6OyBlbHNlCkBAIC0xMDE2LDYgKzEwMjQsOSBAQCBB
Q19ERUZVTgogICBpZiBjYXNlICRob3N0X29zIGluIG1pbmd3KiB8IHdpbmRvd3MqKSBmYWxz
ZTs7ICopIHRlc3QgJEhBVkVfR0VUUkFORE9NID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0dFVFJB
TkRPTSA9IDE7OyBlc2FjOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX29wZW4K
ICAgZmkKKyAgaWYgdGVzdCAkUkVQTEFDRV9NS1RJTUUgPSAxOyB0aGVuCisgICAgZnVuY19n
bF9nbnVsaWJfbTRjb2RlX3ZlcmlmeQorICBmaQogICBpZiB0ZXN0ICRIQVZFX1JFQURMSU5L
QVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfUkVBRExJTktBVCA9IDE7IHRoZW4KICAgICBmdW5j
X2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKICAg
ZmkKQEAgLTEwMjUsNiArMTAzNiw5IEBAIEFDX0RFRlVOCiAgIGlmIHRlc3QgJGFjX3VzZV9p
bmNsdWRlZF9yZWdleCA9IHllczsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9m
ZDM4YzdlNDYzYjU0NzQ0Yjc3Yjk4YWVhZmI0ZmE3YwogICBmaQorICBpZiB0ZXN0ICRhY191
c2VfaW5jbHVkZWRfcmVnZXggPSB5ZXM7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNv
ZGVfdmVyaWZ5CisgIGZpCiAgIGlmIHRlc3QgJEhBVkVfREVDTF9TVFJUT0lNQVggPSAwIHx8
IHRlc3QgJFJFUExBQ0VfU1RSVE9JTUFYID0gMTsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGli
X200Y29kZV9zdHJ0b2xsCiAgIGZpCkBAIC0xMDY1LDYgKzEwNzksNyBAQCBBQ19ERUZVTgog
ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5NzM3Zjc1N2RiMzZj
NDdmYTlkOWYwMmU4OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2
YzQ3ZmE5ZDlmMDJlODhjXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVE
X3N0cnRvbGxdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0cnRvbGxdKQogICBBTV9DT05ESVRJ
T05BTChbZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc10sIFskZ2xfZ251bGliX2VuYWJsZWRf
dXRpbWVuc10pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF92ZXJpZnld
LCBbJGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeV0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9H
TlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlY10sIFskZ2xf
Z251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWNdKQogICAj
IEVuZCBvZiBjb2RlIGZyb20gbW9kdWxlcwogICBtNF9pZnZhbChnbF9MSUJTT1VSQ0VTX0xJ
U1QsIFsKQEAgLTEyNzUsMTIgKzEyOTAsNiBAQCBBQ19ERUZVTgogICBsaWIvY2xvc2Utc3Ry
ZWFtLmMKICAgbGliL2Nsb3NlLXN0cmVhbS5oCiAgIGxpYi9jb3B5LWZpbGUtcmFuZ2UuYwot
ICBsaWIvY291bnQtbGVhZGluZy16ZXJvcy5jCi0gIGxpYi9jb3VudC1sZWFkaW5nLXplcm9z
LmgKLSAgbGliL2NvdW50LW9uZS1iaXRzLmMKLSAgbGliL2NvdW50LW9uZS1iaXRzLmgKLSAg
bGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMKLSAgbGliL2NvdW50LXRyYWlsaW5nLXplcm9z
LmgKICAgbGliL2RpZmZzZXEuaAogICBsaWIvZGlyZW50LXByaXZhdGUuaAogICBsaWIvZGly
ZW50LmluLmgKQEAgLTE0MTMsNiArMTQyMiw4IEBAIEFDX0RFRlVOCiAgIGxpYi9zaWduYWwu
aW4uaAogICBsaWIvc3RhdC10aW1lLmMKICAgbGliL3N0YXQtdGltZS5oCisgIGxpYi9zdGRi
aXQuYworICBsaWIvc3RkYml0LmluLmgKICAgbGliL3N0ZGNrZGludC5pbi5oCiAgIGxpYi9z
dGRkZWYuaW4uaAogICBsaWIvc3RkaW50LmluLmgKQEAgLTE1NjYsNiArMTU3Nyw3IEBAIEFD
X0RFRlVOCiAgIG00L3N0YXQtdGltZS5tNAogICBtNC9zdGQtZ251MTEubTQKICAgbTQvc3Rk
YWxpZ24ubTQKKyAgbTQvc3RkYml0X2gubTQKICAgbTQvc3RkZGVmX2gubTQKICAgbTQvc3Rk
aW50Lm00CiAgIG00L3N0ZGlvX2gubTQKZGlmZiAtLWdpdCBhL200L3N0ZGJpdF9oLm00IGIv
bTQvc3RkYml0X2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjNjMDdiZGM2Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RkYml0X2gubTQKQEAgLTAs
MCArMSwxOSBAQAorIyBzdGRiaXRfaC5tNAorIyBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAy
MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBm
cmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMg
dW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2Ru
bCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGlj
ZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBBIHBsYWNlaG9sZGVyIGZvciA8c3RkYml0Lmg+LCBm
b3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisKK0FDX0RFRlVOX09OQ0UoW2dsX1NU
REJJVF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQklHRU5ESUFOXSkKKyAgQUNfQ0hFQ0tf
SEVBREVSU19PTkNFKFtzdGRiaXQuaF0pCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRi
aXRfaCA9IHllczsgdGhlbgorICAgIEdMX0dFTkVSQVRFX1NUREJJVF9IPWZhbHNlCisgIGVs
c2UKKyAgICBHTF9HRU5FUkFURV9TVERCSVRfSD10cnVlCisgIGZpCitdKQpkaWZmIC0tZ2l0
IGEvc3JjL2RhdGEuYyBiL3NyYy9kYXRhLmMKaW5kZXggZWE2MTFhZDFhYmYuLjMwZDhlYWI3
MzU5IDEwMDY0NAotLS0gYS9zcmMvZGF0YS5jCisrKyBiL3NyYy9kYXRhLmMKQEAgLTIzLDgg
KzIzLDYgQEAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2lu
Y2x1ZGUgPGNvdW50LW9uZS1iaXRzLmg+Ci0jaW5jbHVkZSA8Y291bnQtdHJhaWxpbmctemVy
b3MuaD4KICNpbmNsdWRlIDxpbnRwcm9wcy5oPgogCiAjaW5jbHVkZSAibGlzcC5oIgpAQCAt
MzUwMCwxMiArMzQ5OCw4IEBAIERFRlVOICgibG9nY291bnQiLCBGbG9nY291bnQsIFNsb2dj
b3VudCwgMSwgMSwgMCwKICAgICB9CiAKICAgZWFzc3VtZSAoRklYTlVNUCAodmFsdWUpKTsK
LSAgRU1BQ1NfSU5UIHYgPSBYRklYTlVNICh2YWx1ZSkgPCAwID8gLTEgLSBYRklYTlVNICh2
YWx1ZSkgOiBYRklYTlVNICh2YWx1ZSk7Ci0gIHJldHVybiBtYWtlX2ZpeG51bSAoRU1BQ1Nf
VUlOVF9XSURUSCA8PSBVSU5UX1dJRFRICi0JCSAgICAgID8gY291bnRfb25lX2JpdHMgKHYp
Ci0JCSAgICAgIDogRU1BQ1NfVUlOVF9XSURUSCA8PSBVTE9OR19XSURUSAotCQkgICAgICA/
IGNvdW50X29uZV9iaXRzX2wgKHYpCi0JCSAgICAgIDogY291bnRfb25lX2JpdHNfbGwgKHYp
KTsKKyAgRU1BQ1NfVUlOVCB2ID0gWEZJWE5VTSAodmFsdWUpIDwgMCA/IC0xIC0gWEZJWE5V
TSAodmFsdWUpIDogWEZJWE5VTSAodmFsdWUpOworICByZXR1cm4gbWFrZV9maXhudW0gKHN0
ZGNfY291bnRfb25lcyAodikpOwogfQogCiBERUZVTiAoImFzaCIsIEZhc2gsIFNhc2gsIDIs
IDIsIDAsCkBAIC0zNjYyLDM2ICszNjU2LDYgQEAgYm9vbF92ZWN0b3Jfc3BhcmVfbWFzayAo
RU1BQ1NfSU5UIG5yX2JpdHMpCiAgIHJldHVybiAoKChiaXRzX3dvcmQpIDEpIDw8IChucl9i
aXRzICUgQklUU19QRVJfQklUU19XT1JEKSkgLSAxOwogfQogCi0vKiBTaGlmdCBWQUwgcmln
aHQgYnkgdGhlIHdpZHRoIG9mIGFuIHVuc2lnbmVkIGxvbmcgbG9uZy4KLSAgIFVMTE9OR19X
SURUSCBtdXN0IGJlIGxlc3MgdGhhbiBCSVRTX1BFUl9CSVRTX1dPUkQuICAqLwotCi1zdGF0
aWMgYml0c193b3JkCi1zaGlmdF9yaWdodF91bGwgKGJpdHNfd29yZCB3KQotewotICAvKiBQ
YWNpZnkgYm9ndXMgR0NDIHdhcm5pbmcgYWJvdXQgc2hpZnQgY291bnQgZXhjZWVkaW5nIHR5
cGUgd2lkdGguICAqLwotICBpbnQgc2hpZnQgPSBVTExPTkdfV0lEVEggLSBCSVRTX1BFUl9C
SVRTX1dPUkQgPCAwID8gVUxMT05HX1dJRFRIIDogMDsKLSAgcmV0dXJuIHcgPj4gc2hpZnQ7
Ci19Ci0KLS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBpbiBXLiAgKi8KLQotc3Rh
dGljIGludAotY291bnRfb25lX2JpdHNfd29yZCAoYml0c193b3JkIHcpCi17Ci0gIGlmIChC
SVRTX1dPUkRfTUFYIDw9IFVJTlRfTUFYKQotICAgIHJldHVybiBjb3VudF9vbmVfYml0cyAo
dyk7Ci0gIGVsc2UgaWYgKEJJVFNfV09SRF9NQVggPD0gVUxPTkdfTUFYKQotICAgIHJldHVy
biBjb3VudF9vbmVfYml0c19sICh3KTsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCBpID0g
MCwgY291bnQgPSAwOwotICAgICAgd2hpbGUgKGNvdW50ICs9IGNvdW50X29uZV9iaXRzX2xs
ICh3KSwKLQkgICAgIChpICs9IFVMTE9OR19XSURUSCkgPCBCSVRTX1BFUl9CSVRTX1dPUkQp
Ci0JdyA9IHNoaWZ0X3JpZ2h0X3VsbCAodyk7Ci0gICAgICByZXR1cm4gY291bnQ7Ci0gICAg
fQotfQotCiBlbnVtIGJvb2xfdmVjdG9yX29wIHsgYm9vbF92ZWN0b3JfZXhjbHVzaXZlX29y
LAogICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdmVjdG9yX3VuaW9uLAogICAgICAgICAg
ICAgICAgICAgICAgIGJvb2xfdmVjdG9yX2ludGVyc2VjdGlvbiwKQEAgLTM3OTgsNTUgKzM3
NjIsNiBAQCBib29sX3ZlY3Rvcl9iaW5vcF9kcml2ZXIgKExpc3BfT2JqZWN0IGEsCiAgIHJl
dHVybiBkZXN0OwogfQogCi0vKiBQUkVDT05ESVRJT04gbXVzdCBiZSB0cnVlLiAgUmV0dXJu
IFZBTFVFLiAgVGhpcyBvZGQgY29uc3RydWN0aW9uCi0gICB3b3JrcyBhcm91bmQgYSBib2d1
cyBHQ0MgZGlhZ25vc3RpYyAic2hpZnQgY291bnQgPj0gd2lkdGggb2YgdHlwZSIuICAqLwot
Ci1zdGF0aWMgaW50Ci1wcmVfdmFsdWUgKGJvb2wgcHJlY29uZGl0aW9uLCBpbnQgdmFsdWUp
Ci17Ci0gIGVhc3N1bWUgKHByZWNvbmRpdGlvbik7Ci0gIHJldHVybiBwcmVjb25kaXRpb24g
PyB2YWx1ZSA6IDA7Ci19Ci0KLS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6
ZXJvIGJpdHMgaW4gdmFsLiAgSWYgdmFsIGlzIHplcm8sCi0gICByZXR1cm4gdGhlIG51bWJl
ciBvZiBiaXRzIGluIHZhbC4gICovCi1zdGF0aWMgaW50Ci1jb3VudF90cmFpbGluZ196ZXJv
X2JpdHMgKGJpdHNfd29yZCB2YWwpCi17Ci0gIGlmIChCSVRTX1dPUkRfTUFYID09IFVJTlRf
TUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvcyAodmFsKTsKLSAgaWYgKEJJ
VFNfV09SRF9NQVggPT0gVUxPTkdfTUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196
ZXJvc19sICh2YWwpOwotICBpZiAoQklUU19XT1JEX01BWCA9PSBVTExPTkdfTUFYKQotICAg
IHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvc19sbCAodmFsKTsKLQotICAvKiBUaGUgcmVz
dCBvZiB0aGlzIGNvZGUgaXMgZm9yIHRoZSB1bmxpa2VseSBwbGF0Zm9ybSB3aGVyZSBiaXRz
X3dvcmQgZGlmZmVycwotICAgICBpbiB3aWR0aCBmcm9tIHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgbG9uZywgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZy4gICovCi0gIHZhbCB8PSB+IEJJVFNf
V09SRF9NQVg7Ci0gIGlmIChCSVRTX1dPUkRfTUFYIDw9IFVJTlRfTUFYKQotICAgIHJldHVy
biBjb3VudF90cmFpbGluZ196ZXJvcyAodmFsKTsKLSAgaWYgKEJJVFNfV09SRF9NQVggPD0g
VUxPTkdfTUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvc19sICh2YWwpOwot
ICBlbHNlCi0gICAgewotICAgICAgaW50IGNvdW50OwotICAgICAgZm9yIChjb3VudCA9IDA7
Ci0JICAgY291bnQgPCBCSVRTX1BFUl9CSVRTX1dPUkQgLSBVTExPTkdfV0lEVEg7Ci0JICAg
Y291bnQgKz0gVUxMT05HX1dJRFRIKQotCXsKLQkgIGlmICh2YWwgJiBVTExPTkdfTUFYKQot
CSAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGluZ196ZXJvc19sbCAodmFsKTsKLQkg
IHZhbCA9IHNoaWZ0X3JpZ2h0X3VsbCAodmFsKTsKLQl9Ci0KLSAgICAgIGlmIChCSVRTX1BF
Ul9CSVRTX1dPUkQgJSBVTExPTkdfV0lEVEggIT0gMAotCSAgJiYgQklUU19XT1JEX01BWCA9
PSAoYml0c193b3JkKSAtMSkKLQl2YWwgfD0gKGJpdHNfd29yZCkgMSA8PCBwcmVfdmFsdWUg
KFVMT05HX01BWCA8IEJJVFNfV09SRF9NQVgsCi0JCQkJCSAgIEJJVFNfUEVSX0JJVFNfV09S
RCAlIFVMTE9OR19XSURUSCk7Ci0gICAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGlu
Z196ZXJvc19sbCAodmFsKTsKLSAgICB9Ci19Ci0KIERFRlVOICgiYm9vbC12ZWN0b3ItZXhj
bHVzaXZlLW9yIiwgRmJvb2xfdmVjdG9yX2V4Y2x1c2l2ZV9vciwKICAgICAgICBTYm9vbF92
ZWN0b3JfZXhjbHVzaXZlX29yLCAyLCAzLCAwLAogICAgICAgIGRvYzogLyogUmV0dXJuIEEg
XiBCLCBiaXR3aXNlIGV4Y2x1c2l2ZSBvci4KQEAgLTM5NjEsNyArMzg3Niw3IEBAIERFRlVO
ICgiYm9vbC12ZWN0b3ItY291bnQtcG9wdWxhdGlvbiIsIEZib29sX3ZlY3Rvcl9jb3VudF9w
b3B1bGF0aW9uLAogICBhZGF0YSA9IGJvb2xfdmVjdG9yX2RhdGEgKGEpOwogCiAgIGZvciAo
aSA9IDA7IGkgPCBud29yZHM7IGkrKykKLSAgICBjb3VudCArPSBjb3VudF9vbmVfYml0c193
b3JkIChhZGF0YVtpXSk7CisgICAgY291bnQgKz0gc3RkY19jb3VudF9vbmVzIChhZGF0YVtp
XSk7CiAKICAgcmV0dXJuIG1ha2VfZml4bnVtIChjb3VudCk7CiB9CkBAIC00MDA5LDcgKzM5
MjQsNyBAQCBERUZVTiAoImJvb2wtdmVjdG9yLWNvdW50LWNvbnNlY3V0aXZlIiwgRmJvb2xf
dmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlLAogICAgICAgLyogRG8gbm90IGNvdW50IHRoZSBw
YWQgYml0cy4gICovCiAgICAgICBtd29yZCB8PSAoYml0c193b3JkKSAxIDw8IChCSVRTX1BF
Ul9CSVRTX1dPUkQgLSBvZmZzZXQpOwogCi0gICAgICBjb3VudCA9IGNvdW50X3RyYWlsaW5n
X3plcm9fYml0cyAobXdvcmQpOworICAgICAgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z
IChtd29yZCk7CiAgICAgICBwb3MrKzsKICAgICAgIGlmIChjb3VudCArIG9mZnNldCA8IEJJ
VFNfUEVSX0JJVFNfV09SRCkKICAgICAgICAgcmV0dXJuIG1ha2VfZml4bnVtIChjb3VudCk7
CkBAIC00MDI5LDcgKzM5NDQsNyBAQCBERUZVTiAoImJvb2wtdmVjdG9yLWNvdW50LWNvbnNl
Y3V0aXZlIiwgRmJvb2xfdmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlLAogICAgICAgICAgaW4g
dGhlIGN1cnJlbnQgbXdvcmQuICAqLwogICAgICAgbXdvcmQgPSBiaXRzX3dvcmRfdG9faG9z
dF9lbmRpYW4gKGFkYXRhW3Bvc10pOwogICAgICAgbXdvcmQgXj0gdHdpZGRsZTsKLSAgICAg
IGNvdW50ICs9IGNvdW50X3RyYWlsaW5nX3plcm9fYml0cyAobXdvcmQpOworICAgICAgY291
bnQgKz0gc3RkY190cmFpbGluZ196ZXJvcyAobXdvcmQpOwogICAgIH0KICAgZWxzZSBpZiAo
bnJfYml0cyAlIEJJVFNfUEVSX0JJVFNfV09SRCAhPSAwKQogICAgIHsKZGlmZiAtLWdpdCBh
L3NyYy9saXNwLmggYi9zcmMvbGlzcC5oCmluZGV4IDQxZjhhZjM1ZThhLi5kMzNhNzYwYzM3
YSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5oCkBAIC0yMyw2ICsy
Myw3IEBAICNkZWZpbmUgRU1BQ1NfTElTUF9ICiAjaW5jbHVkZSA8YWxsb2NhLmg+CiAjaW5j
bHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkYml0
Lmg+CiAjaW5jbHVkZSA8c3RkY2tkaW50Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5j
bHVkZSA8c3RyaW5nLmg+CkBAIC0zNyw3ICszOCw2IEBAICNkZWZpbmUgRU1BQ1NfTElTUF9I
CiAKICNpbmNsdWRlIDxhdHRyaWJ1dGUuaD4KICNpbmNsdWRlIDxieXRlc3dhcC5oPgotI2lu
Y2x1ZGUgPGNvdW50LWxlYWRpbmctemVyb3MuaD4KICNpbmNsdWRlIDxpbnRwcm9wcy5oPgog
I2luY2x1ZGUgPHZlcmlmeS5oPgogCkBAIC00MTQ4LDExICs0MTQ4LDEyIEBAIGludGVnZXJf
dG9fdWludG1heCAoTGlzcF9PYmplY3QgbnVtLCB1aW50bWF4X3QgKm4pCiAgICAgfQogfQog
Ci0vKiBSZXR1cm4gZmxvb3IgKGxvZzIgKE4pKSBhcyBhbiBpbnQsIHdoZXJlIDAgPCBOIDw9
IFVMTE9OR19NQVguICAqLworLyogUmV0dXJuIGZsb29yIChsb2cyIChOKSkgYXMgYW4gaW50
LiAgSWYgTiBpcyB6ZXJvLCByZXR1cm4gLTEuICAqLwogSU5MSU5FIGludAogZWxvZ2IgKHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKIHsKLSAgcmV0dXJuIFVMTE9OR19XSURUSCAtIDEg
LSBjb3VudF9sZWFkaW5nX3plcm9zX2xsIChuKTsKKyAgaW50IHdpZHRoID0gc3RkY19iaXRf
d2lkdGggKG4pOworICByZXR1cm4gd2lkdGggLSAxOwogfQogCiAvKiBBIG1vZGlmaWNhdGlv
biBjb3VudC4gIFRoZXNlIGFyZSB3aWRlIGVub3VnaCwgYW5kIGluY3JlbWVudGVkCi0tIAoy
LjQ0LjAKCg==
--------------vVCz0nb0w5GtZK2vx8iItzns
Content-Type: text/x-patch; charset=UTF-8;
 name="0002-Simplify-32-bit-Android-bit-fiddling.patch"
Content-Disposition: attachment;
 filename="0002-Simplify-32-bit-Android-bit-fiddling.patch"
Content-Transfer-Encoding: base64

RnJvbSBlZWU0NGUzNWMxMzM1NjE5M2E2MTVmOWNmMjFiNWY0MTdiNDIxMTUyIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBTdW4sIDEyIE1heSAyMDI0IDE0OjI2OjMyIC0wNzAwClN1YmplY3Q6IFtQQVRD
SCAyLzJdIFNpbXBsaWZ5IDMyLWJpdCBBbmRyb2lkIGJpdCBmaWRkbGluZwoKKiBzcmMvc2Zu
dC5jOiBJbmNsdWRlIHN0ZGJpdC5oLgooc2ZudF9jb3VudF9sZWFkaW5nX3plcm9fYml0cykg
WyFJTlQ2NF9NQVhdOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiwKd2hpY2ggd2FzIGNvbmZ1c2lu
Z2x5IG5hbWVkIGFzIGl0IGFjdHVhbGx5IHJldHVybmVkIDMxIG1pbnVzIHRoZQpudW1iZXIg
b2YgbGVhZGluZyB6ZXJvIGJpdHMuCihzZm50X211bHRpcGx5X2RpdmlkZV8yKSBbIUlOVDY0
X01BWF06IFVzZSBzdGRjX2xlYWRpbmdfemVyb3MgaW5zdGVhZC4KLS0tCiBzcmMvc2ZudC5j
IHwgNDIgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp
bGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9zcmMvc2ZudC5jIGIvc3JjL3NmbnQuYwppbmRleCBkOTA5ZmJhNzY3Ny4uMTgzMjA4
MmU0ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50LmMKKysrIGIvc3JjL3NmbnQuYwpAQCAtMjcs
NiArMjcsNyBAQCBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGludHByb3BzLmg+
CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRiaXQuaD4KICNpbmNsdWRl
IDxzdGRja2RpbnQuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5o
PgpAQCAtMzY3OCw0NSArMzY3OSw2IEBAIHNmbnRfbXVsdGlwbHlfZGl2aWRlXzEgKHVuc2ln
bmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwKICAgdmFsdWUtPmhpZ2ggPSBoaTsKIH0KIAot
LyogQ291bnQgdGhlIG51bWJlciBvZiBtb3N0IHNpZ25pZmljYW50IHplcm8gYml0cyBpbiBO
LiAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotc2ZudF9jb3VudF9sZWFkaW5nX3plcm9f
Yml0cyAodW5zaWduZWQgaW50IG4pCi17Ci0gIGludCBzaGlmdDsKLQotICBzaGlmdCA9IDA7
Ci0KLSAgaWYgKG4gJiAweGZmZmYwMDAwdWwpCi0gICAgewotICAgICAgbiA+Pj0gMTY7Ci0g
ICAgICBzaGlmdCArPSAxNjsKLSAgICB9Ci0KLSAgaWYgKG4gJiAweDAwMDBmZjAwdWwpCi0g
ICAgewotICAgICAgbiA+Pj0gODsKLSAgICAgIHNoaWZ0ICs9IDg7Ci0gICAgfQotCi0gIGlm
IChuICYgMHgwMDAwMDBmMHVsKQotICAgIHsKLSAgICAgIG4gPj49IDQ7Ci0gICAgICBzaGlm
dCArPSA0OwotICAgIH0KLQotICBpZiAobiAmIDB4MDAwMDAwMGN1bCkKLSAgICB7Ci0gICAg
ICBuID4+PSAyOwotICAgICAgc2hpZnQgKz0gMjsKLSAgICB9Ci0KLSAgaWYgKG4gJiAweDAw
MDAwMDAydWwpCi0gICAgc2hpZnQgKz0gMTsKLQotICByZXR1cm4gc2hpZnQ7Ci19Ci0KIC8q
IENhbGN1bGF0ZSBBQiAvIEMuICBWYWx1ZSBpcyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2Vy
LiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMzczMCw3ICszNjkyLDcgQEAgc2Zu
dF9tdWx0aXBseV9kaXZpZGVfMiAoc3RydWN0IHNmbnRfbGFyZ2VfaW50ZWdlciAqYWIsCiAg
IGhpID0gYWItPmhpZ2g7CiAgIGxvID0gYWItPmxvdzsKIAotICBpID0gMzEgLSBzZm50X2Nv
dW50X2xlYWRpbmdfemVyb19iaXRzIChoaSk7CisgIGkgPSBzdGRjX2xlYWRpbmdfemVyb3Mg
KGhpKTsKICAgciA9IChoaSA8PCBpKSB8IChsbyA+PiAoMzIgLSBpKSk7CiAgIGxvIDw8PSBp
OwogICBxID0gciAvIGM7Ci0tIAoyLjQ0LjAKCg==

--------------vVCz0nb0w5GtZK2vx8iItzns--




Acknowledgement sent to Paul Eggert <eggert@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#70898; Package emacs. 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: Sat, 18 May 2024 17:45:02 UTC

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