From owner-freebsd-net@freebsd.org  Sun Nov 27 19:40:55 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 046F8C596DA
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sun, 27 Nov 2016 19:40:55 +0000 (UTC)
 (envelope-from michael.j.knap@gmail.com)
Received: from mail-qk0-x232.google.com (mail-qk0-x232.google.com
 [IPv6:2607:f8b0:400d:c09::232])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id B4E23D6B
 for <freebsd-net@freebsd.org>; Sun, 27 Nov 2016 19:40:54 +0000 (UTC)
 (envelope-from michael.j.knap@gmail.com)
Received: by mail-qk0-x232.google.com with SMTP id x190so121297360qkb.0
 for <freebsd-net@freebsd.org>; Sun, 27 Nov 2016 11:40:54 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:from:date:message-id:subject:to;
 bh=iekxDbtSJmGMdViPuATstA5kG5kAUf/Cx7y1GKofi8w=;
 b=Ur+GlDwX229EYYyeBjnjyhVScwH/wWuSpN+1PSttvnzlX/kE3xDi/a/jPcc1ZU2Hus
 1I82JYA5VoQDkSaHPEepAUGTK8sXSgWLN2sLMugnaf7OQPwsXWYSAFoYmQKDyfBRY6DH
 gzCAd4DuLcFQMo8g8aqFoWly1eTxPNpBqvqSrON0y7o61OkrceZpZNOb1R83fAwEugu7
 ZZYYaoSQysU8X+lPZqd2f0NWrBZBX5PNttMKZk0Z7CBRORygxUUyF6vI0SaVbf5somPk
 imUm+3kfAyejzIIqkgjfjur//FzYTLSRaGWcDH8Kg72cwaYSy0Lkuj6krCkYH+6cKYqi
 nOEA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
 bh=iekxDbtSJmGMdViPuATstA5kG5kAUf/Cx7y1GKofi8w=;
 b=QQTZjVPFsDr1dYM7tdMOgqEbTcVrrjLOgOSNDUm7k7JVgK5ZuGkQDpm5OK/NKxz56S
 6dgCtJqGBh7ikz13GAZj6k/2WOx9qqlXRpjNKPZrksrnKWGe3UHX1vwpttC03sMnqZZQ
 UE/v/URWB/TSAqVTXuBICAGQqTbYl1vheI55d5C6PRd4TAeSjrsmjxn/D0XnvdObnJTr
 6Qgristk9I60CbRl03GMAa4R1ybA2N4wInUaM4UtPAB5EvNOlNw/LbFxIom5pVDZEn3l
 vRF/Utfwi+k6ipu9H4VeWnOB/a1R9h+G70p5VqEz9INotubfHPkBRvQu2fw45v4/7NVy
 HXJg==
X-Gm-Message-State: AKaTC014M7IpM6i5SsEw9S3BwdHJJ1Nl61lwEudHYrueMLOom9jxlZUrZpLJLL4lphZTjFeOuyP1v57JCAZX0A==
X-Received: by 10.55.17.206 with SMTP id 75mr14565445qkr.10.1480275653706;
 Sun, 27 Nov 2016 11:40:53 -0800 (PST)
MIME-Version: 1.0
Received: by 10.140.95.112 with HTTP; Sun, 27 Nov 2016 11:40:53 -0800 (PST)
From: Michael Knap <michael.j.knap@gmail.com>
Date: Sun, 27 Nov 2016 13:40:53 -0600
Message-ID: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
Subject: Intel 82567V-2 using em driver, no carrier or constant link-state
 changes with 1000BaseT
To: freebsd-net@freebsd.org
Content-Type: text/plain; charset=UTF-8
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 27 Nov 2016 19:40:55 -0000

Preface: I've been a long-time linux user, and I am enjoying the BSD
experience. For the following scenario, I have reproduced these results
with 3 or more cables which are known to be good.

Using FreeBSD 10.3 Stable :
FreeBSD 10.3-STABLE #0 r295946+07c41cd(9.10-STABLE): Wed Nov  9 00:19:25
UTC 2016     root@gauntlet
:/freenas-9.10-releng/_BE/objs/freenas-9.10-releng/_BE/os/sys/FreeNAS.amd64

Also, this isn't a NIC, per se, as it is onboard, but I will call it a NIC
or card or whatever.

Using em driver, though I don't know how to determine a driver version (if
there is such a thing).

Basically, the card will not push gigabit, though it will work with
100BaseTX. However, there seems to be more than just that as the chip-set
is advertised as a gigabit Ethernet controller.

When connected to a 100BaseTX switch, everything is good. Leaving it in
autodetect mode, and connecting to a 1000baseTX switch (with good CAT6
cable), the card's link state oscillates from link up and link down:

Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN
Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN

If I issue  ifconfig em0 media 100baseTX mediaopt full-duplex, then I have
no carrier.
Also, ifconfig em0 media 1000baseT gives no carrier.
However, if I ifconfig em0 media 10baseT, then I can get an active link.

Interestingly, man em(4) does not claim to support this chipset, though it
seems that this chipset was once supported in either e1000 or igb for older
freeBSD versions?

Now, at least from the driver's POV, I should be able to handle gigabit, as

ifconfig -m em0
em0: flags=8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
capabilities=5399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO>
ether 00:25:11:59:d4:be
inet 10.42.0.111 netmask 0xffffff00 broadcast 10.42.0.255
nd6 options=9<PERFORMNUD,IFDISABLED>
media: Ethernet 10baseT/UTP (10baseT/UTP <half-duplex>)
status: active
supported media:
media autoselect
media 1000baseT
media 1000baseT mediaopt full-duplex
media 100baseTX mediaopt full-duplex
media 100baseTX
media 10baseT/UTP mediaopt full-duplex
media 10baseT/UTP

However when connected to gigabit switch, any explicit declaration of media
fails except for 10baseT, even the autoselect declaration fails with no
carrier.

But remember, 100baseTX works out of the box on a 100Mbit switch.

So, those more experienced, can you shed some light on what is happening?
I'm especially interested in the man em(4) result even though the chipset
has been supported in the past, and intel does provide drivers for this
chipset, though I'm not sure if I could compile them or not. BTW, my
switches are only consumer grade, unmanaged. Is that where I'm stuck?

Thanks for such an awesome license, operating system, and community.

From owner-freebsd-net@freebsd.org  Sun Nov 27 20:41:19 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 93A01C597F7
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sun, 27 Nov 2016 20:41:19 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 83A741F4B
 for <freebsd-net@FreeBSD.org>; Sun, 27 Nov 2016 20:41:19 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uARKfJeN045391
 for <freebsd-net@FreeBSD.org>; Sun, 27 Nov 2016 20:41:19 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 214832] if_pflog subrulenr incorrectly set
Date: Sun, 27 Nov 2016 20:41:19 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 11.0-RELEASE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Only Me
X-Bugzilla-Who: sbruno@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-214832-2472-WpxC1RrPWu@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-214832-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-214832-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 27 Nov 2016 20:41:19 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214832

Sean Bruno <sbruno@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bz@FreeBSD.org,
                   |                            |kp@freebsd.org,
                   |                            |sbruno@FreeBSD.org

--- Comment #2 from Sean Bruno <sbruno@FreeBSD.org> ---
Adding folks who have done stuff/things in pf

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Sun Nov 27 21:01:03 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 07CAFC59F5D
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sun, 27 Nov 2016 21:01:03 +0000 (UTC)
 (envelope-from bugzilla-noreply@FreeBSD.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id F2767DF6
 for <freebsd-net@FreeBSD.org>; Sun, 27 Nov 2016 21:01:02 +0000 (UTC)
 (envelope-from bugzilla-noreply@FreeBSD.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uARL010v079702
 for <freebsd-net@FreeBSD.org>; Sun, 27 Nov 2016 21:01:02 GMT
 (envelope-from bugzilla-noreply@FreeBSD.org)
Message-Id: <201611272101.uARL010v079702@kenobi.freebsd.org>
From: bugzilla-noreply@FreeBSD.org
To: freebsd-net@FreeBSD.org
Subject: Problem reports for freebsd-net@FreeBSD.org that need special
 attention
Date: Sun, 27 Nov 2016 21:01:02 +0000
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 27 Nov 2016 21:01:03 -0000

To view an individual PR, use:
  https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=(Bug Id).

The following is a listing of current problems submitted by FreeBSD users,
which need special attention. These represent problem reports covering
all versions including experimental development code and obsolete releases.

Status      |    Bug Id | Description
------------+-----------+---------------------------------------------------
In Progress |    203422 | mpd/ppoe not working with re(4) with revision 285 
In Progress |    206581 | bxe_ioctl_nvram handler is faulty                 
New         |    204438 | setsockopt() handling of kern.ipc.maxsockbuf limi 
New         |    205592 | TCP processing in IPSec causes kernel panic       
New         |    206053 | kqueue support code of netmap causes panic        
Open        |    193452 | Dell PowerEdge 210 II -- Kernel panic bce (broadc 
Open        |    194485 | Userland cannot add IPv6 prefix routes            
Open        |    194515 | Fatal Trap 12 Kernel with vimage                  
Open        |    199136 | [if_tap] Added down_on_close sysctl variable to t 
Open        |    206544 | sendmsg(2) (sendto(2) too?) can fail with EINVAL; 
Open        |    211031 | [panic] in ng_uncallout when argument is NULL     
Open        |    211962 | bxe driver queue soft hangs and flooding tx_soft_ 
Open        |    212018 | Enable IPSEC_NAT_T in GENERIC kernel configuratio 

13 problems total for which you should take action.

From owner-freebsd-net@freebsd.org  Mon Nov 28 01:50:26 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3F714C58E75
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 01:50:26 +0000 (UTC)
 (envelope-from frankd@frank-d.info)
Received: from sender163-mail.zoho.com (sender163-mail.zoho.com
 [74.201.84.163])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 19397654E9
 for <freebsd-net@freebsd.org>; Mon, 28 Nov 2016 01:50:25 +0000 (UTC)
 (envelope-from frankd@frank-d.info)
Received: from mail.zoho.com by mx.zohomail.com
 with SMTP id 1480297818650242.91968671420955;
 Sun, 27 Nov 2016 17:50:18 -0800 (PST)
Date: Sun, 27 Nov 2016 17:50:18 -0800
From: Frank DiMitri <frankd@frank-d.info>
To: "" <freebsd-net@freebsd.org>
Message-Id: <158a8a02a14.11c57878d202623.4266299996694963357@frank-d.info>
In-Reply-To: 
Subject: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
MIME-Version: 1.0
X-Priority: Medium
User-Agent: Zoho Mail
X-Mailer: Zoho Mail
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 01:50:26 -0000

Mellanox has no driver for cards earlier than ConnectX4 available for FreeBSD 11.x at the moment.



What I have right now is a quick hack to get the 2.1.6 driver for 10.1 to compile and work under 11.0. It needs some polishing, but it does work. I didn't do anything for the InfiniBand side, only the Ethernet/core.



https://github.com/fdimitri/Mellanox-OFED-ConnectX-FreeBSD11



For anyone looking to run these cards under FreeBSD 11.0, this should work at the least in the interim. The only non-functional part under 11.0-release-p1 are the counters available through sysctl (hw.mlxenX.stat) for packet sizes ie in_gt_1548.



Hopefully this is the right place to send this.



Is there a reason the OFED drivers aren't in-tree? They are dual-licensed under GPL and BSD.



Thanks,

Frank DiMitri




From owner-freebsd-net@freebsd.org  Mon Nov 28 06:00:37 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5C3B5C512F6
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 06:00:37 +0000 (UTC)
 (envelope-from menyy@mellanox.com)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01on0084.outbound.protection.outlook.com [104.47.1.84])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 9ABC210BC
 for <freebsd-net@freebsd.org>; Mon, 28 Nov 2016 06:00:35 +0000 (UTC)
 (envelope-from menyy@mellanox.com)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;
 s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=lkGHT2m5Ywp1/uYVPomdFGTOEPFnwg2p08ZmMMvJ3Ic=;
 b=xaYnvcfjIguVlw/1+l+KNefkJo2M8pmmis1r+nQcWxAIRTqE2OcCLrPSQXXMdUtyBxrv7QyaiaB9+bl4qn9fASLQokOzeE6durXAVTdCyBe8zZEBlpJVjhMhRRpa/cY9OhP6b75R2FhlCEOEVwzLNRgHzYGzSY878Gm19qPmdF8=
Received: from DB5PR05MB1765.eurprd05.prod.outlook.com (10.165.7.23) by
 DB5PR05MB1765.eurprd05.prod.outlook.com (10.165.7.23) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.747.13; Mon, 28 Nov 2016 06:00:26 +0000
Received: from DB5PR05MB1765.eurprd05.prod.outlook.com ([10.165.7.23]) by
 DB5PR05MB1765.eurprd05.prod.outlook.com ([10.165.7.23]) with mapi id
 15.01.0747.013; Mon, 28 Nov 2016 06:00:26 +0000
From: Meny Yossefi <menyy@mellanox.com>
To: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
CC: freebsd-drivers <freebsd-drivers@mellanox.com>
Subject: RE: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
Thread-Topic: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
Thread-Index: AQHSSRnQXhuIFh5pwkGDJE5Ij9BZUaDtoW28gABDENA=
Date: Mon, 28 Nov 2016 06:00:26 +0000
Message-ID: <DB5PR05MB1765FE9C1FDFF9DA7B20B7B4C38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>
References: <158a8a02a14.11c57878d202623.4266299996694963357@frank-d.info>
 <9465895c92a747589c6e343aabc38a54@AM5PR0502MB2916.eurprd05.prod.outlook.com>
In-Reply-To: <9465895c92a747589c6e343aabc38a54@AM5PR0502MB2916.eurprd05.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=menyy@mellanox.com; 
x-originating-ip: [193.47.165.251]
x-ms-office365-filtering-correlation-id: a2610c8e-a34b-4a5b-6929-08d41753d9b0
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR05MB1765;
x-microsoft-exchange-diagnostics: 1; DB5PR05MB1765;
 7:YYMceqKvkjCEvxF5U9g0FcN9U+4KUX8/6fWsYwrmefHxFn42U7lhnDcH/gCRG2fTdS16GRwfHPLyYLNLI0VxKXJVMojKPBsOg3c7n0zRaoVQst47w792Y7pAn7K/Dtd1zZwKqfsaHJDUUnXZYT2rJ4XEfheqsIaIO3wvh1VMy/Vwpiw1class32mCmtW8kYkrUzhhfuh3l4cpbVkKDg23BTTM6YFXItQ0R1OeO0ZaB1slP7fnTWiol2pHm0RP+QZXsKPRmhRyhFWArkc+Rc6STHX2GcN8x3foKvZSBKNr3jPffYwTYTTKOIlH0PBTN4OIDpPp2LHWN3YHzLGCcl9wL/Iz0knv4HN6P75d2frSXYjwOVL8XACDc8Yan2PRWLyTn0Sk1CwSPd0GRCvkZL7WyuugSlQQuyu/PtqnQqvHTuBkICPeoo10ahdWTR5r762PmXu1WZ8TwA7hBjFHLo0IA==
x-microsoft-antispam-prvs: <DB5PR05MB1765858177D164E8A663E292C38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(166708455590820)(75325880899374)(21748063052155); 
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(6060326)(6040361)(6045199)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(6061324)(20161123560025)(20161123555025)(20161123564025)(20161123562025);
 SRVR:DB5PR05MB1765; BCL:0; PCL:0; RULEID:; SRVR:DB5PR05MB1765; 
x-forefront-prvs: 01401330D1
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(7916002)(199003)(377454003)(189002)(450100001)(122556002)(4326007)(9326002)(790700001)(102836003)(6116002)(3846002)(5630700001)(8676002)(81156014)(3660700001)(76576001)(2501003)(33656002)(3280700002)(5640700001)(81166006)(8936002)(101416001)(76176999)(50986999)(54356999)(9686002)(68736007)(105586002)(2906002)(77096006)(4001430100002)(39450400002)(39380400001)(106116001)(106356001)(39410400001)(2351001)(229853002)(39400400001)(38730400001)(6506003)(606004)(7906003)(7846002)(7736002)(5660300001)(2900100001)(74316002)(7696004)(110136003)(97736004)(189998001)(92566002)(2950100002)(6916009)(107886002)(86362001)(66066001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR05MB1765;
 H:DB5PR05MB1765.eurprd05.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords;
 A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: mellanox.com does not designate
 permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: Mellanox.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2016 06:00:26.7093 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1765
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 06:00:37 -0000

Hi,



Not sure how did you reach that conclusion.



We have an updated 11.x inbox driver for ConnectX-3 under /sys/ofed/



Eth: /sys/ofed/drivers/net/mlx4

InfiniBand: /sys/ofed/drivers/infiniband/..



We have recently (12-CURRENT) moved the ConnectX-3 driver to /sys/dev



We'll be happy to assist in case you have more questions.



-Meny



________________________________________

From: owner-freebsd-net@freebsd.orgOn<mailto:owner-freebsd-net@freebsd.orgO=
n> Behalf OfFrank DiMitri

Sent: Monday, November 28, 2016 1:50:18 AM (UTC+00:00) Monrovia, Reykjavik

To: freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org>

Subject: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x



Mellanox has no driver for cards earlier than ConnectX4 available for FreeB=
SD 11.x at the moment.







What I have right now is a quick hack to get the 2.1.6 driver for 10.1 to c=
ompile and work under 11.0. It needs some polishing, but it does work. I di=
dn't do anything for the InfiniBand side, only the Ethernet/core.







https://github.com/fdimitri/Mellanox-OFED-ConnectX-FreeBSD11







For anyone looking to run these cards under FreeBSD 11.0, this should work =
at the least in the interim. The only non-functional part under 11.0-releas=
e-p1 are the counters available through sysctl (hw.mlxenX.stat) for packet =
sizes ie in_gt_1548.







Hopefully this is the right place to send this.







Is there a reason the OFED drivers aren't in-tree? They are dual-licensed u=
nder GPL and BSD.







Thanks,



Frank DiMitri







_______________________________________________

freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org> mailing list

https://lists.freebsd.org/mailman/listinfo/freebsd-net

To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org<mailt=
o:freebsd-net-unsubscribe@freebsd.org>"

From owner-freebsd-net@freebsd.org  Mon Nov 28 06:11:46 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4D859C5184A
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 06:11:46 +0000 (UTC)
 (envelope-from frankd@frank-d.info)
Received: from sender163-mail.zoho.com (sender163-mail.zoho.com
 [74.201.84.163])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 35D5519AC
 for <freebsd-net@freebsd.org>; Mon, 28 Nov 2016 06:11:45 +0000 (UTC)
 (envelope-from frankd@frank-d.info)
Received: from mail.zoho.com by mx.zohomail.com
 with SMTP id 1480313417460491.8606290735262;
 Sun, 27 Nov 2016 22:10:17 -0800 (PST)
Date: Sun, 27 Nov 2016 22:10:17 -0800
From: Frank DiMitri <frankd@frank-d.info>
To: "Meny Yossefi" <menyy@mellanox.com>
Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, 
 "freebsd-drivers" <freebsd-drivers@mellanox.com>
Message-Id: <158a98e2ee9.e28b1c99215641.6054804446440545025@frank-d.info>
In-Reply-To: <DB5PR05MB1765FE9C1FDFF9DA7B20B7B4C38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>
References: <158a8a02a14.11c57878d202623.4266299996694963357@frank-d.info>
 <9465895c92a747589c6e343aabc38a54@AM5PR0502MB2916.eurprd05.prod.outlook.com>
 <DB5PR05MB1765FE9C1FDFF9DA7B20B7B4C38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>
Subject: RE: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
MIME-Version: 1.0
X-Priority: Medium
User-Agent: Zoho Mail
X-Mailer: Zoho Mail
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 06:11:46 -0000

Meny,



Amazingly enough I completely missed that, and nobody was able to point me to them. I was unaware of any in-tree Mellanox drivers.



My (embarrassing) mistake, glad to see they're in the kernel by default.



Thanks!




---- On Sun, 27 Nov 2016 22:00:26 -0800 Meny Yossefi &lt;menyy@mellanox.com&gt; wrote ----




Hi, 

 

 

 

Not sure how did you reach that conclusion. 

 

 

 

We have an updated 11.x inbox driver for ConnectX-3 under /sys/ofed/ 

 

 

 

Eth: /sys/ofed/drivers/net/mlx4 

 

InfiniBand: /sys/ofed/drivers/infiniband/.. 

 

 

 

We have recently (12-CURRENT) moved the ConnectX-3 driver to /sys/dev 

 

 

 

We'll be happy to assist in case you have more questions. 

 

 

 

-Meny 

 

 

 

________________________________________ 

 

From: owner-freebsd-net@freebsd.orgOn&lt;mailto:owner-freebsd-net@freebsd.orgOn&gt; Behalf OfFrank DiMitri 

 

Sent: Monday, November 28, 2016 1:50:18 AM (UTC+00:00) Monrovia, Reykjavik 

 

To: freebsd-net@freebsd.org&lt;mailto:freebsd-net@freebsd.org&gt; 

 

Subject: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x 

 

 

 

Mellanox has no driver for cards earlier than ConnectX4 available for FreeBSD 11.x at the moment. 

 

 

 

 

 

 

 

What I have right now is a quick hack to get the 2.1.6 driver for 10.1 to compile and work under 11.0. It needs some polishing, but it does work. I didn't do anything for the InfiniBand side, only the Ethernet/core. 

 

 

 

 

 

 

 

https://github.com/fdimitri/Mellanox-OFED-ConnectX-FreeBSD11 

 

 

 

 

 

 

 

For anyone looking to run these cards under FreeBSD 11.0, this should work at the least in the interim. The only non-functional part under 11.0-release-p1 are the counters available through sysctl (hw.mlxenX.stat) for packet sizes ie in_gt_1548. 

 

 

 

 

 

 

 

Hopefully this is the right place to send this. 

 

 

 

 

 

 

 

Is there a reason the OFED drivers aren't in-tree? They are dual-licensed under GPL and BSD. 

 

 

 

 

 

 

 

Thanks, 

 

 

 

Frank DiMitri 

 

 

 

 

 

 

 

_______________________________________________ 

 

freebsd-net@freebsd.org&lt;mailto:freebsd-net@freebsd.org&gt; mailing list 

 

https://lists.freebsd.org/mailman/listinfo/freebsd-net 

 

To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org&lt;mailto:freebsd-net-unsubscribe@freebsd.org&gt;" 

_______________________________________________ 

freebsd-net@freebsd.org mailing list 

https://lists.freebsd.org/mailman/listinfo/freebsd-net 

To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" 







From owner-freebsd-net@freebsd.org  Mon Nov 28 09:07:55 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1BC2FC5877A
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 09:07:55 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 0B5511621
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:07:55 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAS97sPZ034437
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:07:54 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 213237] ndis does not create network interface
Date: Mon, 28 Nov 2016 09:07:55 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 11.0-RC1
X-Bugzilla-Keywords: regression
X-Bugzilla-Severity: Affects Only Me
X-Bugzilla-Who: ota@j.email.ne.jp
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-213237-2472-DnH32AzSJz@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 09:07:55 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D213237

--- Comment #2 from ota@j.email.ne.jp ---
(In reply to Andriy Voskoboinyk from comment #1)

$ sysctl net.wlan.devices
net.wlan.devices: ndis0

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 09:10:44 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 896ACC58826
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 09:10:44 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 7980D1718
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:10:44 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAS9AieN055580
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:10:44 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 213237] ndis does not create network interface
Date: Mon, 28 Nov 2016 09:10:44 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 11.0-RC1
X-Bugzilla-Keywords: regression
X-Bugzilla-Severity: Affects Only Me
X-Bugzilla-Who: ota@j.email.ne.jp
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-213237-2472-u3CwHNKbqi@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 09:10:44 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D213237

--- Comment #3 from ota@j.email.ne.jp ---
It looks rev 286410 (due to compile error, I tested with 286416) is when a
problem started.
With rev 286416, kldload crashes the system.

With 11.0-RELEASE, kernel doesn't crash but ndis does not function.

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 09:19:09 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id B7DCFC58C69
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 09:19:09 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id A7CAA1E28
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:19:09 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAS9J93x051880
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:19:09 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 213237] ndis does not create network interface
Date: Mon, 28 Nov 2016 09:19:09 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 11.0-RC1
X-Bugzilla-Keywords: regression
X-Bugzilla-Severity: Affects Only Me
X-Bugzilla-Who: ota@j.email.ne.jp
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-213237-2472-uZsn8o2pkh@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 09:19:09 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D213237

--- Comment #4 from ota@j.email.ne.jp ---
On 11.0-RELEASE, I also see pci-one error as following today. ndis print is=
 the
same as last time.  I reran ndisgen and tried.

$ kldload ./bcmwl5_sys3.ko
pci1: <network> at device 0.0 (no driver attached)
ndis0: <Broadcom 802.11g Network Adapter> mem 0x57100000-0x57103fff irq 16 =
at
device 0.0 on pci1
ndis0: NDIS API version: 5.1

I had booted 10.2-RELEASE and ndis didn't have issues.

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 09:26:03 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id CBF82C58F82
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 09:26:03 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id BB7FC12AC
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:26:03 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAS9Q35l070149
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 09:26:03 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 213237] ndis does not create network interface
Date: Mon, 28 Nov 2016 09:26:04 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 11.0-RC1
X-Bugzilla-Keywords: regression
X-Bugzilla-Severity: Affects Only Me
X-Bugzilla-Who: ota@j.email.ne.jp
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-213237-2472-aSV5jgBF0G@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-213237-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 09:26:03 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D213237

--- Comment #5 from ota@j.email.ne.jp ---
11.0-RELEASE output, typed by hand.

$ pciconf -lv
...
ndis@pci0:1:0:0:    class=3D0x028000 card=3D0xe01b105b chip=3D0x431514e4 re=
v=3D0x01
hdr=3D0x00
    vendor  =3D 'Broadcom Corporation'
    device  =3D 'BCM4312 802.11b/g LP-PHY'
    class   =3D netowork

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 12:46:59 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A666C5875F
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 12:46:59 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 0A0E01EAE
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 12:46:59 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uASCkwgp063486
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 12:46:58 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 208343] [em] wake on lan not working with Intel I219 V2
Date: Mon, 28 Nov 2016 12:46:58 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: CURRENT
X-Bugzilla-Keywords: IntelNetworking
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: madpilot@FreeBSD.org
X-Bugzilla-Status: In Progress
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-208343-2472-aSd1l1kTfm@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-208343-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-208343-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 12:46:59 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D208343

--- Comment #29 from Guido Falsi <madpilot@FreeBSD.org> ---
Hi,

Since I submitted this bug I'm asking what is the policy for accounting it =
as
fixed?

The bug I reported has been fixed in r308643, so my opinion is this bug rep=
ort
could be closed as fixed.

Should I close it, or wait for a src committer to close it? Should I wait f=
or
the MFC or the other commenters to report back?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 12:54:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id CD495C58B8B
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 12:54:00 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id BC856164F
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 12:54:00 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uASCs0AM081057
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 12:54:00 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 208343] [em] wake on lan not working with Intel I219 V2
Date: Mon, 28 Nov 2016 12:54:00 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: CURRENT
X-Bugzilla-Keywords: IntelNetworking
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: koobs@FreeBSD.org
X-Bugzilla-Status: In Progress
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: sbruno@FreeBSD.org
X-Bugzilla-Flags: mfc-stable10? mfc-stable11?
X-Bugzilla-Changed-Fields: flagtypes.name assigned_to
Message-ID: <bug-208343-2472-52zWnzQC4f@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-208343-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-208343-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 12:54:00 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D208343

Kubilay Kocak <koobs@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
              Flags|                            |mfc-stable10?,
                   |                            |mfc-stable11?
           Assignee|freebsd-net@FreeBSD.org     |sbruno@FreeBSD.org

--- Comment #30 from Kubilay Kocak <koobs@FreeBSD.org> ---
(In reply to Guido Falsi from comment #29)

1) Assign to committer resolving (sbruno)

Note: Committers should assign themselves as early as possible and reference
PR: in commit log messages.

2) Set mfc-stableX flags to ? (means request/ask for mfc)

Committer resolving will either:

a) Set + upon MFC to that branch, or
b) Set - with comment outlining why not (unnecessary, breaks kbi, etc)

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Mon Nov 28 20:48:52 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id DDB6BC59426
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 20:48:52 +0000 (UTC)
 (envelope-from menyy@mellanox.com)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01on0074.outbound.protection.outlook.com [104.47.0.74])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 45C761FA0
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 20:48:51 +0000 (UTC)
 (envelope-from menyy@mellanox.com)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;
 s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=e6EEXOtLBJMrUXTtDcoREGkdi3yu+vfJUFD1e1eQalg=;
 b=sgHdhCleQMV0y+ntrAAp9C/I1gWeA7yCQRTMLYPz+soAjiwmxo6gAb9Ky2Y6ByXKLl+Rv1eLkb4a6FaVQU5TonY/46TytqkBzhevlf2cp5IaI9SP3bvReOA2Xm/NIamhi46jnVCspq9mFeHAl+ljqJf21OAJQqQgIrBm3gnOvHA=
Received: from DB5PR05MB1765.eurprd05.prod.outlook.com (10.165.7.23) by
 DB5PR05MB1768.eurprd05.prod.outlook.com (10.165.7.26) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.747.10; Mon, 28 Nov 2016 19:13:21 +0000
Received: from DB5PR05MB1765.eurprd05.prod.outlook.com ([10.165.7.23]) by
 DB5PR05MB1765.eurprd05.prod.outlook.com ([10.165.7.23]) with mapi id
 15.01.0747.013; Mon, 28 Nov 2016 19:13:21 +0000
From: Meny Yossefi <menyy@mellanox.com>
To: "freebsd-net@FreeBSD.org" <freebsd-net@FreeBSD.org>
Subject: RE: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
Thread-Topic: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x
Thread-Index: AQHSSRnQXhuIFh5pwkGDJE5Ij9BZUaDtoW28gABDENCAAAV9gIAAAHlJgADZ3RA=
Date: Mon, 28 Nov 2016 19:13:21 +0000
Message-ID: <DB5PR05MB17656877BC0F19A69238652AC38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>
References: <158a8a02a14.11c57878d202623.4266299996694963357@frank-d.info>
 <9465895c92a747589c6e343aabc38a54@AM5PR0502MB2916.eurprd05.prod.outlook.com>
 <DB5PR05MB1765FE9C1FDFF9DA7B20B7B4C38A0@DB5PR05MB1765.eurprd05.prod.outlook.com>,
 <158a98e2ee9.e28b1c99215641.6054804446440545025@frank-d.info>
 <622a5c2030cd4b4e95ccd818bbb23397@AM5PR0502MB2916.eurprd05.prod.outlook.com>
In-Reply-To: <622a5c2030cd4b4e95ccd818bbb23397@AM5PR0502MB2916.eurprd05.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=menyy@mellanox.com; 
x-originating-ip: [79.177.49.31]
x-ms-office365-filtering-correlation-id: 60437cd6-7911-4926-b4d1-08d417c29e63
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR05MB1768;
x-microsoft-exchange-diagnostics: 1; DB5PR05MB1768;
 7:wpcAtBW+6UB9KNmskZAz7WI4QXdOtebuKv/pKmWD6x5wKsbhPY/oST2xc3D/0qmzMzDLmTRcrRqqgoUdhWAfIl9IjSICnVd/l72siKfSPOdS53U7I+/zPjJSKWW5+GmMiCIQG5Klc92wAd92hMDumHj2gmqMiAq+tEjkFV2q0OtTA6hQfRCQAMq4ga3jJmFiQV9T4YKn39QDtl42rVw7vZlea5BpeKAuRwg9vD2/xO0WiXqlojNkM79gTJZlAhHAJSppaFBZeWUhbi/6h6+88wY1B13J3q1qWVmInnaj2SQg/18WWYtWDF8sQoJezblCBZVzljkzwE2Mu7jPAGKSXgoZFLkpPYBCLky+rkGOsqDx25A/4nhIOTYVKouv7+PNUF/I7JOYImF2YCEqxAyslXaVIaKu6g/qwBqfJFTEmghrMmFFwR+QGyB9ONoPG3Tq3QoTEV3elRJTlYgwnGCblA==
x-microsoft-antispam-prvs: <DB5PR05MB17685D83C2FBEF12D600E2DCC38A0@DB5PR05MB1768.eurprd05.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(166708455590820)(75325880899374);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(6045199)(6060326)(6040361)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(6061324)(20161123560025)(20161123558021)(20161123555025)(20161123564025)(20161123562025);
 SRVR:DB5PR05MB1768; BCL:0; PCL:0; RULEID:; SRVR:DB5PR05MB1768; 
x-forefront-prvs: 01401330D1
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(6009001)(7916002)(189002)(377454003)(199003)(13464003)(7846002)(66066001)(7736002)(74316002)(54356999)(50986999)(76176999)(101416001)(106116001)(229853002)(305945005)(5660300001)(33656002)(106356001)(2906002)(105586002)(102836003)(2351001)(93886004)(2900100001)(8936002)(3900700001)(97736004)(68736007)(6116002)(5640700001)(107886002)(189998001)(3846002)(6506003)(38730400001)(122556002)(92566002)(9686002)(76576001)(450100001)(86362001)(110136003)(3660700001)(8676002)(3280700002)(6916009)(81156014)(39450400002)(81166006)(7696004)(2950100002)(39400400001)(2501003)(77096006)(39380400001)(39410400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR05MB1768;
 H:DB5PR05MB1765.eurprd05.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords;
 MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: mellanox.com does not designate
 permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: Mellanox.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2016 19:13:21.1959 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1768
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 20:48:53 -0000

NP :-)

Let us know if you need further assistance.=20

-Meny


-----Original Message-----
From: freebsd-commits-tracker=20
Sent: Monday, November 28, 2016 8:12 AM
To: Mark Bloch <markb@mellanox.com>; Meny Yossefi <menyy@mellanox.com>; Yuv=
al Bason <yuvalba@mellanox.com>
Subject: FW: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x




________________________________________
From: owner-freebsd-net@freebsd.orgOn Behalf OfFrank DiMitri
Sent: Monday, November 28, 2016 6:10:17 AM (UTC+00:00) Monrovia, Reykjavik
To: Meny Yossefi
Cc: freebsd-net@freebsd.org; freebsd-drivers
Subject: RE: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x

Meny,



Amazingly enough I completely missed that, and nobody was able to point me =
to them. I was unaware of any in-tree Mellanox drivers.



My (embarrassing) mistake, glad to see they're in the kernel by default.



Thanks!




---- On Sun, 27 Nov 2016 22:00:26 -0800 Meny Yossefi &lt;menyy@mellanox.com=
&gt; wrote ----




Hi,







Not sure how did you reach that conclusion.







We have an updated 11.x inbox driver for ConnectX-3 under /sys/ofed/







Eth: /sys/ofed/drivers/net/mlx4



InfiniBand: /sys/ofed/drivers/infiniband/..







We have recently (12-CURRENT) moved the ConnectX-3 driver to /sys/dev







We'll be happy to assist in case you have more questions.







-Meny







________________________________________



From: owner-freebsd-net@freebsd.orgOn&lt;mailto:owner-freebsd-net@freebsd.o=
rgOn&gt; Behalf OfFrank DiMitri



Sent: Monday, November 28, 2016 1:50:18 AM (UTC+00:00) Monrovia, Reykjavik



To: freebsd-net@freebsd.org&lt;mailto:freebsd-net@freebsd.org&gt;



Subject: Mellanox ConnectX/X2/X3 OFED module for FreeBSD 11.x







Mellanox has no driver for cards earlier than ConnectX4 available for FreeB=
SD 11.x at the moment.















What I have right now is a quick hack to get the 2.1.6 driver for 10.1 to c=
ompile and work under 11.0. It needs some polishing, but it does work. I di=
dn't do anything for the InfiniBand side, only the Ethernet/core.















https://github.com/fdimitri/Mellanox-OFED-ConnectX-FreeBSD11















For anyone looking to run these cards under FreeBSD 11.0, this should work =
at the least in the interim. The only non-functional part under 11.0-releas=
e-p1 are the counters available through sysctl (hw.mlxenX.stat) for packet =
sizes ie in_gt_1548.















Hopefully this is the right place to send this.















Is there a reason the OFED drivers aren't in-tree? They are dual-licensed u=
nder GPL and BSD.















Thanks,







Frank DiMitri















_______________________________________________



freebsd-net@freebsd.org&lt;mailto:freebsd-net@freebsd.org&gt; mailing list



https://lists.freebsd.org/mailman/listinfo/freebsd-net



To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org&lt;ma=
ilto:freebsd-net-unsubscribe@freebsd.org&gt;"

_______________________________________________

freebsd-net@freebsd.org mailing list

https://lists.freebsd.org/mailman/listinfo/freebsd-net

To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"






_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

From owner-freebsd-net@freebsd.org  Mon Nov 28 22:15:44 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id CC9E5C5A01E
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 22:15:44 +0000 (UTC)
 (envelope-from hiren@strugglingcoder.info)
Received: from mail.strugglingcoder.info (strugglingcoder.info
 [104.236.146.68])
 by mx1.freebsd.org (Postfix) with ESMTP id BEC8C12EE;
 Mon, 28 Nov 2016 22:15:44 +0000 (UTC)
 (envelope-from hiren@strugglingcoder.info)
Received: from localhost (unknown [10.1.1.3])
 (Authenticated sender: hiren@strugglingcoder.info)
 by mail.strugglingcoder.info (Postfix) with ESMTPA id 2ECFF17EC7;
 Mon, 28 Nov 2016 14:10:33 -0800 (PST)
Date: Mon, 28 Nov 2016 14:10:33 -0800
From: hiren panchasara <hiren@strugglingcoder.info>
To: Jakub Palider <jpa@semihalf.com>
Cc: freebsd-net@freebsd.org, karels@FreeBSD.org, glebius@FreeBSD.org
Subject: Re: FLOWTABLE aka TCP route caching panic
Message-ID: <20161128221033.GM55731@strugglingcoder.info>
References: <CAL7QUyNntDmJuxfDxncxdXSM1rvR47kizA=WYwqeAtwrSCFLUg@mail.gmail.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
 protocol="application/pgp-signature"; boundary="oiL9LJXJsdjS5rzq"
Content-Disposition: inline
In-Reply-To: <CAL7QUyNntDmJuxfDxncxdXSM1rvR47kizA=WYwqeAtwrSCFLUg@mail.gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 22:15:44 -0000


--oiL9LJXJsdjS5rzq
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

+ Mike and Gleb who may provide some help/pointers.

On 11/25/16 at 04:33P, Jakub Palider wrote:
> Hi,
> I have found that last month (19 Oct) the problem appeared on this list,
> and to my experience it persists, both on VM and bare metal installation
> (HEAD from yesterday). I looks that enabling FLOWTABLE option is the only
> source of this fault happening. It appears on our setup in 80% cases with=
in
> one hour from boot up.
> From our debugging, it is caused by lock on DESTROYED lock. Did you find a
> solution to this problem?
>=20
> Regards,
> Jakub
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

--oiL9LJXJsdjS5rzq
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQF8BAABCgBmBQJYPKtRXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4
QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lRbgIAJnIakyPSi6Q79giminTp8JI
MQWKyLVaYYH1ytXcMYpFslba/KMnG0pixqCiHdUj/t9uTNwcCp+0K1sBblXn5P8V
NX6W+8xoWoXo3cAlIvdElNhmUXWdBn72z3ssAPZViGVxUmPKfWXq/U1BNSSIdFhA
z9/o9tbgDmRgOSyXp+AemjGT8n2l0Qo4EhXhgwVUzrTzJYHI4KaBUHo0HuPRzCpT
1PmhzJ1ApJOb9LhyGVtbQcJj+llYSdER8V84QSGHhcdYXhayao0DogMmZx98VMI3
6diH8wxeoyYNj45GPNmo3TuLf47Zw4SDTpo7f13/87zeH2WYs6QPCp5Ioof5Rlo=
=J73A
-----END PGP SIGNATURE-----

--oiL9LJXJsdjS5rzq--

From owner-freebsd-net@freebsd.org  Mon Nov 28 22:20:49 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4FF89C5A15E
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Mon, 28 Nov 2016 22:20:49 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3FF7E16FC
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 22:20:49 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uASMKmNs002587
 for <freebsd-net@FreeBSD.org>; Mon, 28 Nov 2016 22:20:49 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 214913] SO_KEEPALIVE does not work?
Date: Mon, 28 Nov 2016 22:20:48 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 9.2-RELEASE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: linimon@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: cc assigned_to
Message-ID: <bug-214913-2472-0mSxAlKNo1@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-214913-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-214913-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Nov 2016 22:20:49 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214913

Mark Linimon <linimon@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|freebsd-amd64@FreeBSD.org   |
           Assignee|freebsd-bugs@FreeBSD.org    |freebsd-net@FreeBSD.org

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Tue Nov 29 00:55:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 68A36C5A112
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 00:55:00 +0000 (UTC) (envelope-from navada@usc.edu)
Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3])
 by mx1.freebsd.org (Postfix) with ESMTP id 465A21376
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 00:55:00 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: by mailman.ysv.freebsd.org (Postfix)
 id 42D04C5A111; Tue, 29 Nov 2016 00:55:00 +0000 (UTC)
Delivered-To: net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4271AC5A10F
 for <net@mailman.ysv.freebsd.org>; Tue, 29 Nov 2016 00:55:00 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: from mail-pf0-x234.google.com (mail-pf0-x234.google.com
 [IPv6:2607:f8b0:400e:c00::234])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 1C5221375
 for <net@freebsd.org>; Tue, 29 Nov 2016 00:54:59 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: by mail-pf0-x234.google.com with SMTP id i88so27784979pfk.2
 for <net@freebsd.org>; Mon, 28 Nov 2016 16:54:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=usc-edu.20150623.gappssmtp.com; s=20150623;
 h=from:mime-version:subject:message-id:date:to;
 bh=xleQ4+CHmUFnaOsw37zYPEd9GwxDmvdse8Mp5bT9pBs=;
 b=vApmUXY/K7k6k0gAAWBOJysmR0ynKZ1D499JoJmXEFajlXkH/hp/ImFOrnbfcMBBuJ
 ElJ4o7Z1zRnwBdnTtYDYCZ7zFtaddcYk6wOfpamjuBAwdOk4j3pQ1MSy/GkPw/He8R96
 QD2BXFUhkZM7asKaZUxTwbe0CvsqZtEk6sfi7DL8FbcFHs2T8/yz9q4v2pL04xDjoRU4
 LoVe7Vf+KEWUPn5BXhK17uzbfMzg6bSA1bYDdvD9KDezBdwGMTZfv5I1k0ESDF22JF1x
 1FPMucnK85gC3loA7F/tQXInsWtvlVtkq7Ln5lgET/HxHM2QgR8JZ+muyuPImu5iZU5v
 POJA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:from:mime-version:subject:message-id:date:to;
 bh=xleQ4+CHmUFnaOsw37zYPEd9GwxDmvdse8Mp5bT9pBs=;
 b=hIzqrNneXF/4yXq4Op5HsdfUeHNKKjo5F8rT01eJEzC5ruNvZeZwdO9paWjCAVJuq1
 7SJoSXzVRB7mTTot1zVBa/TrLEjbngnJ5NlwaiyJf5DsO+rGuzI7X19jnj+HCsODc8yL
 3x+3R5uy2mrSnIXR7e6xlac4AkQS29VTdJva+LGtLsTymPudS1kWGef8DRCDuTb2xXIQ
 YxVyXmw3G2BLDghj+1oxT+hpuslHvV4KYRtnKnL9P03F4Bsqb9eimexUWhja4Q3WsMnl
 t9M820iYOJv1UG9MQDqxXcd6Snu+omhP8VxWVJRN8lHVMqlzkVrbijyj1HrEUge+pLBK
 er+A==
X-Gm-Message-State: AKaTC02RC7CSbJ0Ifx06DtP8CeXJq6qcjar5Nx8iltybAgWqEWrCTh+JZmFshlRTfDKXympo
X-Received: by 10.84.175.234 with SMTP id t97mr55834912plb.145.1480380899273; 
 Mon, 28 Nov 2016 16:54:59 -0800 (PST)
Received: from guest-wireless-207-151-063-168.usc.edu
 (guest-wireless-207-151-063-168.usc.edu. [207.151.63.168])
 by smtp.gmail.com with ESMTPSA id f132sm73616485pfa.72.2016.11.28.16.54.58
 for <net@freebsd.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 28 Nov 2016 16:54:58 -0800 (PST)
From: Harsha Navada <navada@usc.edu>
Mime-Version: 1.0 (Mac OS X Mail 10.1 \(3251\))
Subject: RE: Requesting help in Netmap build on Linux Ubuntu-12.04
Message-Id: <061FA295-11CD-4C46-8556-2B47C6F7CC32@usc.edu>
Date: Mon, 28 Nov 2016 16:54:58 -0800
To: net@freebsd.org
X-Mailer: Apple Mail (2.3251)
Content-Type: text/plain;
	charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 00:55:00 -0000

Hello ,

I=E2=80=99m new to netmap where I=E2=80=99m trying to insert netmap.ko =
module after compiling my kernel and I=E2=80=99m shown with the =
following error:

netmap: Unknown symbol split_page (err 0)

Here are the steps and different methods I followed:=20

I. Compile Kernel 3.2.0

1. My Ubuntu 12.04 machine has a kernel version 3.2.0-90-generic, so i =
got the linux source by:
	sudo apt-get source linux-source-3.2.0
2. Then i work on trying to compile the kernel
	a. sudo make menuconfig =E2=80=94 Keep default config
	b. sudo sed -i s/CONFIG_RTS5139=3Dm/CONFIG_RTS5139=3Dn/ .config  =
- to avoid compilation errors
	c. sudo make clean
	d. sudo make -j10
	e. sudo make bzImage
	f. sudo make modules
	g.sudo make modules_install
	h. sudo make install
	i. sudo update-grub2
	j. sudo reboot.=20
2 b. On checking kernel version using name -r , this is the kernel =
version - 3.2.79

3. Then i download the netmap-master branch from git and upload it to my =
machine , cannot use git clone as it doesn=E2=80=99t support external =
connections.
4.Unzipping the bundle and switch to LINUX folder to run ./configure
5. Here i received errors where netmap-master/LINUX/drivers/ext-patch =
couldn=E2=80=99t be downloaded due to failure to connect.
6. I downloaded these drivers and placed them in that path.
7. I received a warning telling cannot find complete kernel sources, =
which i referenced later as=20
	./configure =E2=80=94kernel-sources =3D =
/lib/modules/linux-source-(uname -r)/build
8. Then after clearing all warning and errors, the generated netmap.ko =
file I try to insert , which gives me the error
 netmap: Unknown symbol split_page (err 0)

II. Avoid kernel compliation
1. Then i download the netmap-master branch from git and upload it to my =
machine , cannot use git clone as it doesn=E2=80=99t support external =
connections.
2.Unzipping the bundle and switch to LINUX folder to run ./configure
3. Here i received errors where netmap-master/LINUX/drivers/ext-patch =
couldn=E2=80=99t be downloaded due to failure to connect.
4. I downloaded these drivers and placed them in that path.
5. I received a warning telling cannot find complete kernel sources, =
which i referenced later as=20
	./configure =E2=80=94kernel-sources =3D =
/lib/modules/linux-source-(uname -r)/build
6. Then after clearing all warning and errors, the generated netmap.ko =
file I try to insert , which gives me the error
 netmap: Unknown symbol split_page (err 0)

III. Tried switching to FreeBSD
	Cannot download the FreeBSD 10.2 image due to security reasons =
mentioned in git / wget.=20

I=E2=80=99m totally stuck for the past 2 weeks and would appreciate help =
on this.=20

Thanks=20
H


From owner-freebsd-net@freebsd.org  Tue Nov 29 03:10:10 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id DABCCC5A5A5
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 03:10:10 +0000 (UTC) (envelope-from navada@usc.edu)
Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org
 [IPv6:2001:1900:2254:206a::50:5])
 by mx1.freebsd.org (Postfix) with ESMTP id B5623164D
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 03:10:10 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: by mailman.ysv.freebsd.org (Postfix)
 id B48A0C5A5A3; Tue, 29 Nov 2016 03:10:10 +0000 (UTC)
Delivered-To: net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id B3F3FC5A5A0
 for <net@mailman.ysv.freebsd.org>; Tue, 29 Nov 2016 03:10:10 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: from mail-pf0-x241.google.com (mail-pf0-x241.google.com
 [IPv6:2607:f8b0:400e:c00::241])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 88BA8164B
 for <net@freebsd.org>; Tue, 29 Nov 2016 03:10:10 +0000 (UTC)
 (envelope-from navada@usc.edu)
Received: by mail-pf0-x241.google.com with SMTP id c4so7381189pfb.3
 for <net@freebsd.org>; Mon, 28 Nov 2016 19:10:10 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=usc-edu.20150623.gappssmtp.com; s=20150623;
 h=from:mime-version:subject:date:references:to:in-reply-to:message-id;
 bh=/+pHgSP8e/MHprGe6iblNdf6p+Rodh7Ohm/QGDXtCbs=;
 b=S1XnPFlFtRAlI/prg3IZadvufgG6ySTOeOINKhaTvnYcB5uLzXivtPbAFmeS3SBdak
 5Gu47R/NN/9XWErc7ueWHcU5Y22GyomDVvXj7uVKOgjKgObdeYquWdT79vyY2gF7Ofn+
 BDOh1ZFYmH+bvhXima0kQJZ58QzcbxdJ7B5fadiisz42wdMaiaahS4S3w8xzHryOJYZz
 +4xByuukWM/X17hyotWanralh+kY1JB1x3AOQqW4kzgbm3D6FoiZNyNz0BYkYYdWM+uB
 ZFkbDJQnWTPXEEj+TGrPV1SDLLTlf6S3+HUfiWzZ2XI63o+gSOqv7/JBdmFWwL7uWf5d
 O4xw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:from:mime-version:subject:date:references:to
 :in-reply-to:message-id;
 bh=/+pHgSP8e/MHprGe6iblNdf6p+Rodh7Ohm/QGDXtCbs=;
 b=JF/JlmZhDkf2v3xBnpNPGsve9wRjk2aexeyMUe8ui3KQ2Qv2Z9jZFcI0MIORmsIEmY
 0l/7syM/4eN/yv9mrch3/f0QqAtbLp6eqP4yMRsyknxuw9o2531DPumHFW7ihz52qlpS
 959HVd8a2I+OCNFmwxqep4ZYvZCUCPe9nm4nSeY3bSBe9h7x09y5YZkcTJpdJmmI4O01
 p3xi6/h2vd336YofsHKDAZucGyClLEAtwv/B6qypQB2HxAXQIePGDA0esyOqg3N9ThH2
 glht4jliCAaj5lMTrNaILbbmtJFN8+JIhYNjPl3ktOqL4fYEMz6VoCmA4Li76AqxC9J+
 Cr0A==
X-Gm-Message-State: AKaTC00zF4v1C/CusEkpcNV4+3Vrpgrt4guXnPHZ4j6gZpYUEbzyXlgKSVoiC7oKS53L1qIl
X-Received: by 10.98.166.70 with SMTP id t67mr25478483pfe.132.1480389009374;
 Mon, 28 Nov 2016 19:10:09 -0800 (PST)
Received: from guest-wireless-207-151-063-168.usc.edu
 (guest-wireless-207-151-063-168.usc.edu. [207.151.63.168])
 by smtp.gmail.com with ESMTPSA id f23sm90266456pff.59.2016.11.28.19.10.08
 for <net@freebsd.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 28 Nov 2016 19:10:08 -0800 (PST)
From: Harsha Navada <navada@usc.edu>
Mime-Version: 1.0 (Mac OS X Mail 10.1 \(3251\))
Subject: Re: Requesting help in Netmap build on Linux Ubuntu-12.04
Date: Mon, 28 Nov 2016 19:10:07 -0800
References: <061FA295-11CD-4C46-8556-2B47C6F7CC32@usc.edu>
To: net@freebsd.org
In-Reply-To: <061FA295-11CD-4C46-8556-2B47C6F7CC32@usc.edu>
Message-Id: <BA64ADB8-546A-4441-9388-6E051CCD96D0@usc.edu>
X-Mailer: Apple Mail (2.3251)
Content-Type: text/plain;
	charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 03:10:11 -0000

Follow up mail with Linux 2.6.32 kernel and netmap =E2=80=94

Here's another try with linux 2.6.32 for Ubuntu 10.04 that I'm trying: I =
get different errors where make doesn't seem to work. I might be doing =
some unspeakable errors but I would like to get this running as quickly =
as possible.
Code RED:

sc558bl@rtr1:/tmp/netmap-master/LINUX$ ./configure =
--kernel-sources=3D/tmp/linux-2.6.32/ =
--kernel-dir=3D/lib/modules/2.6.32/build
********************************** NOTE =
**********************************
*** We are trying to download the original sources for driver
*** i40e using the following command:

*** wget -nc =
https://sourceforge.net/projects/e1000/files/i40e%20stable/1.5.23/i40e-1.5=
.23.tar.gz =
<https://sourceforge.net/projects/e1000/files/i40e%20stable/1.5.23/i40e-1.=
5.23.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/

*** If this fails, please download the above file and put it
*** in /tmp/netmap-master/LINUX/ext-drivers/, then run configure again.

File `/tmp/netmap-master/LINUX/ext-drivers/i40e-1.5.23.tar.gz' already =
there; not retrieving.

********************************** WARNING =
**********************************
*** CONFIG_I40E not set in /lib/modules/2.6.32/build/.config, skipping =
i40e

********************************** NOTE =
**********************************
*** We are trying to download the original sources for driver
*** ixgbevf using the following command:

*** wget -nc =
https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/3.2.2/ixgbev=
f-3.2.2.tar.gz =
<https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/3.2.2/ixgbe=
vf-3.2.2.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/

*** If this fails, please download the above file and put it
*** in /tmp/netmap-master/LINUX/ext-drivers/, then run configure again.

File `/tmp/netmap-master/LINUX/ext-drivers/ixgbevf-3.2.2.tar.gz' already =
there; not retrieving.

********************************** WARNING =
**********************************
*** CONFIG_IXGBEVF not set in /lib/modules/2.6.32/build/.config, =
skipping ixgbevf

********************************** NOTE =
**********************************
*** We are trying to download the original sources for driver
*** ixgbe using the following command:

*** wget -nc =
https://sourceforge.net/projects/e1000/files/ixgbe%20stable/4.4.6/ixgbe-4.=
4.6.tar.gz =
<https://sourceforge.net/projects/e1000/files/ixgbe%20stable/4.4.6/ixgbe-4=
.4.6.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/

*** If this fails, please download the above file and put it
*** in /tmp/netmap-master/LINUX/ext-drivers/, then run configure again.

File `/tmp/netmap-master/LINUX/ext-drivers/ixgbe-4.4.6.tar.gz' already =
there; not retrieving.

********************************** NOTE =
**********************************
*** We are trying to download the original sources for driver
*** igb using the following command:

*** wget -nc =
https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.3/igb-5.3.=
5.3.tar.gz =
<https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.3/igb-5.3=
.5.3.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/

*** If this fails, please download the above file and put it
*** in /tmp/netmap-master/LINUX/ext-drivers/, then run configure again.

File `/tmp/netmap-master/LINUX/ext-drivers/igb-5.3.5.3.tar.gz' already =
there; not retrieving.

********************************** NOTE =
**********************************
*** We are trying to download the original sources for driver
*** e1000e using the following command:

*** wget -nc =
https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.3.5/e1000e-=
3.3.5.tar.gz =
<https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.3.5/e1000e=
-3.3.5.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/

*** If this fails, please download the above file and put it
*** in /tmp/netmap-master/LINUX/ext-drivers/, then run configure again.

File `/tmp/netmap-master/LINUX/ext-drivers/e1000e-3.3.5.tar.gz' already =
there; not retrieving.

********************************** WARNING =
**********************************
*** 'forcedeth.c': no applicable patch found and no override provided.
*** Disabling driver.

********************************** WARNING =
**********************************
*** 'virtio_net.c': no applicable patch found and no override provided.
*** Disabling driver.

********************************** NOTE =
**********************************
*** Now running compile tests to adapt the code to your
*** kernel version. Please wait.

kernel directory /lib/modules/2.6.32/build
kernel sources /tmp/linux-2.6.32
linux version 20620 [2.6.32]
module file netmap.ko

subsystems generic monitor pipe vale
apps vale-ctl nmreplay tlem lb bridge pkt-gen
native drivers ixgbe igb e1000e e1000 veth.c r8169.c

Contents of the drivers.mak file:

Note: only drivers for which both the @src <https://github.com/src> and =
the
@patch <https://github.com/patch> variable are set may be used in native =
mode (assuming
we can actually patch the sources).
Other NICs will be accessed using
the generic driver, at reduced performance.
########################################
# configure generated values #
########################################
ixgbe@conf :=3D CONFIG_IXGBE
ixgbe@src :=3D tar xf =
/tmp/netmap-master/LINUX/ext-drivers/ixgbe-4.4.6.tar.gz && mv =
ixgbe-4.4.6/src ixgbe
ixgbe@patch :=3D patches/intel--ixgbe--4.4.6
igb@conf :=3D CONFIG_IGB
igb@src :=3D tar xf =
/tmp/netmap-master/LINUX/ext-drivers/igb-5.3.5.3.tar.gz && mv =
igb-5.3.5.3/src igb
igb@patch :=3D patches/intel--igb--5.3.5.3
e1000e@conf :=3D CONFIG_E1000E
e1000e@src :=3D tar xf =
/tmp/netmap-master/LINUX/ext-drivers/e1000e-3.3.5.tar.gz && mv =
e1000e-3.3.5/src e1000e
e1000e@patch :=3D patches/intel--e1000e--3.3.5
e1000@conf :=3D CONFIG_E1000
e1000@src :=3D cp -Rp /tmp/linux-2.6.32/drivers/net/e1000 e1000
e1000@patch :=3D patches/vanilla--e1000--20620--31200
veth.c@conf :=3D CONFIG_VETH
veth.c@src :=3D cp -Rp /tmp/linux-2.6.32/drivers/net/veth.c veth.c
veth.c@patch :=3D patches/vanilla--veth.c--20620--30900
r8169.c@conf :=3D CONFIG_R8169
r8169.c@src :=3D cp -Rp /tmp/linux-2.6.32/drivers/net/r8169.c r8169.c
r8169.c@patch :=3D patches/vanilla--r8169.c--20620--20625
sc558bl@rtr1:/tmp/netmap-master/LINUX$ make
wget -nc =
https://sourceforge.net/projects/e1000/files/ixgbe%20stable/4.4.6/ixgbe-4.=
4.6.tar.gz =
<https://sourceforge.net/projects/e1000/files/ixgbe%20stable/4.4.6/ixgbe-4=
.4.6.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/
File `/tmp/netmap-master/LINUX/ext-drivers/ixgbe-4.4.6.tar.gz' already =
there; not retrieving.

tar xf /tmp/netmap-master/LINUX/ext-drivers/ixgbe-4.4.6.tar.gz && mv =
ixgbe-4.4.6/src ixgbe
patch --posix --quiet --force -p1 < patches/intel--ixgbe--4.4.6;
touch get-ixgbe
wget -nc =
https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.3/igb-5.3.=
5.3.tar.gz =
<https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.3/igb-5.3=
.5.3.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/
File `/tmp/netmap-master/LINUX/ext-drivers/igb-5.3.5.3.tar.gz' already =
there; not retrieving.

tar xf /tmp/netmap-master/LINUX/ext-drivers/igb-5.3.5.3.tar.gz && mv =
igb-5.3.5.3/src igb
patch --posix --quiet --force -p1 < patches/intel--igb--5.3.5.3;
touch get-igb
wget -nc =
https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.3.5/e1000e-=
3.3.5.tar.gz =
<https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.3.5/e1000e=
-3.3.5.tar.gz> -P /tmp/netmap-master/LINUX/ext-drivers/
File `/tmp/netmap-master/LINUX/ext-drivers/e1000e-3.3.5.tar.gz' already =
there; not retrieving.

tar xf /tmp/netmap-master/LINUX/ext-drivers/e1000e-3.3.5.tar.gz && mv =
e1000e-3.3.5/src e1000e
patch --posix --quiet --force -p1 < patches/intel--e1000e--3.3.5;
touch get-e1000e
make -C /lib/modules/2.6.32/build M=3D/tmp/netmap-master/LINUX =
EXTRA_CFLAGS=3D'-I/tmp/netmap-master/LINUX -I/tmp/netmap-master/LINUX =
-I/tmp/netmap-master/LINUX/../sys -I/tmp/netmap-master/LINUX/../sys/dev =
-DCONFIG_NETMAP -Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC =
-DCONFIG_NETMAP_MONITOR -DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE' =
modules CONFIG_NETMAP=3Dm CONFIG_R8169=3Dm CONFIG_VETH=3Dm =
CONFIG_E1000=3Dm O_DRIVERS=3D"e1000/ r8169.o veth.o" =
NETMAP_DRIVER_SUFFIX=3D
make[1]: Entering directory `/tmp/linux-2.6.32'

WARNING: Symbol version dump /tmp/linux-2.6.32/Module.symvers
is missing; modules will have no dependencies and modversions.

CC [M] /tmp/netmap-master/LINUX/netmap_mem2.o
CC [M] /tmp/netmap-master/LINUX/netmap_mbq.o
CC [M] /tmp/netmap-master/LINUX/netmap_vale.o
/tmp/netmap-master/LINUX/../sys/dev/netmap/netmap_vale.c: In function =
=E2=80=98netmap_bdg_learning=E2=80=99:
/tmp/netmap-master/LINUX/../sys/dev/netmap/netmap_vale.c:1600: warning: =
integer constant is too large for =E2=80=98long=E2=80=99 type
At top level:
cc1: warning: unrecognized command line option =
"-Wno-unused-but-set-variable"
CC [M] /tmp/netmap-master/LINUX/netmap_offloadings.o
CC [M] /tmp/netmap-master/LINUX/netmap_pipe.o
CC [M] /tmp/netmap-master/LINUX/netmap_monitor.o
CC [M] /tmp/netmap-master/LINUX/netmap_generic.o
CC [M] /tmp/netmap-master/LINUX/netmap_common.o
CC [M] /tmp/netmap-master/LINUX/netmap_linux.o
/tmp/netmap-master/LINUX/netmap_linux.c:400:2: warning: #warning "Packet =
reception with emulated (generic) mode not supported for this kernel =
version"
/tmp/netmap-master/LINUX/netmap_linux.c:400:2: warning: #warning "Packet =
reception with emulated (generic) mode not supported for this kernel =
version"
LD [M] /tmp/netmap-master/LINUX/netmap.o
CC [M] /tmp/netmap-master/LINUX/r8169.o
CC [M] /tmp/netmap-master/LINUX/veth.o
CC [M] /tmp/netmap-master/LINUX/e1000/e1000_main.o
LD [M] /tmp/netmap-master/LINUX/e1000/e1000.o
Building modules, stage 2.
MODPOST 4 modules
LD [M] /tmp/netmap-master/LINUX/e1000/e1000.ko
CC /tmp/netmap-master/LINUX/netmap.mod.o
LD [M] /tmp/netmap-master/LINUX/netmap.ko
CC /tmp/netmap-master/LINUX/r8169.mod.o
LD [M] /tmp/netmap-master/LINUX/r8169.ko
CC /tmp/netmap-master/LINUX/veth.mod.o
LD [M] /tmp/netmap-master/LINUX/veth.ko
make[1]: Leaving directory /tmp/linux-2.6.32' if [ -d ixgbe ] && [ -e =
Module.symvers ]; then cp Module.symvers ixgbe; fi make -C ixgbe =
EXTRA_CFLAGS=3D"-I/tmp/netmap-master/LINUX -I/tmp/netmap-master/LINUX =
-I/tmp/netmap-master/LINUX/../sys -I/tmp/netmap-master/LINUX/../sys/dev =
-DCONFIG_NETMAP -Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC =
-DCONFIG_NETMAP_MONITOR -DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE" =
NETMAP_DRIVER_SUFFIX=3D KSRC=3D/lib/modules/2.6.32/build make[1]: =
Entering directory/tmp/netmap-master/LINUX/ixgbe'
make[2]: Entering directory `/tmp/linux-2.6.32'

WARNING: Symbol version dump /tmp/linux-2.6.32/Module.symvers
is missing; modules will have no dependencies and modversions.

CC [M] /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.o
In file included from /tmp/netmap-master/LINUX/ixgbe_netmap_linux.h:39,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.c:726:
/tmp/netmap-master/LINUX/bsd_glue.h:124:1: warning: "usleep_range" =
redefined
In file included from /tmp/netmap-master/LINUX/ixgbe/ixgbe_osdep.h:38,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_type.h:66,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_dcb.h:28,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe.h:45,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.c:52:
/tmp/netmap-master/LINUX/ixgbe/kcompat.h:3363:1: warning: this is the =
location of the previous definition
In file included from /tmp/netmap-master/LINUX/ixgbe_netmap_linux.h:39,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.c:726:
/tmp/netmap-master/LINUX/bsd_glue.h:143:1: warning: =
"netdev_notifier_info_to_dev" redefined
In file included from /tmp/netmap-master/LINUX/ixgbe/ixgbe_osdep.h:38,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_type.h:66,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_dcb.h:28,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe.h:45,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.c:52:
/tmp/netmap-master/LINUX/ixgbe/kcompat.h:4381:1: warning: this is the =
location of the previous definition
In file included from /tmp/netmap-master/LINUX/ixgbe_netmap_linux.h:39,
from /tmp/netmap-master/LINUX/ixgbe/ixgbe_main.c:726:
/tmp/netmap-master/LINUX/bsd_glue.h:147: error: redefinition of =
=E2=80=98_kc_skb_frag_size=E2=80=99
/tmp/netmap-master/LINUX/ixgbe/kcompat.h:3739: note: previous definition =
of =E2=80=98_kc_skb_frag_size=E2=80=99 was here
/tmp/netmap-master/LINUX/bsd_glue.h:152: error: redefinition of =
=E2=80=98_kc_skb_frag_address=E2=80=99
/tmp/netmap-master/LINUX/ixgbe/kcompat.h:3763: note: previous definition =
of =E2=80=98_kc_skb_frag_address=E2=80=99 was here
/tmp/netmap-master/LINUX/bsd_glue.h:157: error: redefinition of =
=E2=80=98_kc_skb_checksum_start_offset=E2=80=99
/tmp/netmap-master/LINUX/ixgbe/kcompat.h:3493: note: previous definition =
of =E2=80=98_kc_skb_checksum_start_offset=E2=80=99 was here
cc1: warning: unrecognized command line option =
"-Wno-unused-but-set-variable"
make[3]: *** [/tmp/netmap-master/LINUX/ixgbe/ixgbe_main.o] Error 1
make[2]: *** [module/tmp/netmap-master/LINUX/ixgbe] Error 2
make[2]: Leaving directory /tmp/linux-2.6.32' make[1]: *** [default] =
Error 2 make[1]: Leaving directory/tmp/netmap-master/LINUX/ixgbe'
make: *** [build-ixgbe] Error 2

drwxr-xr-x 3 sc558bl USC558L 4.0K 2016-11-28 19:00 ixgbe
sc558bl@rtr1:/tmp/netmap-master/LINUX$ ls -lrth | grep netmap
-rw-r--r-- 1 sc558bl USC558L 20K 2016-11-23 02:58 virtio_netmap.h
-rw-r--r-- 1 sc558bl USC558L 6.5K 2016-11-23 02:58 veth_netmap.h
-rwxr-xr-x 1 sc558bl USC558L 1.6K 2016-11-23 02:58 netmap_set_adapter.sh
-rw-r--r-- 1 sc558bl USC558L 40K 2016-11-23 02:58 netmap_ptnet.c
-rw-r--r-- 1 sc558bl USC558L 4.4K 2016-11-23 02:58 netmap.mak.in
-rw-r--r-- 1 sc558bl USC558L 53K 2016-11-23 02:58 netmap_linux.c
-rw-r--r-- 1 sc558bl USC558L 20K 2016-11-23 02:58 ixgbe_netmap_linux.h
-rw-r--r-- 1 sc558bl USC558L 9.2K 2016-11-23 02:58 if_re_netmap_linux.h
-rw-r--r-- 1 sc558bl USC558L 12K 2016-11-23 02:58 if_igb_netmap.h
-rw-r--r-- 1 sc558bl USC558L 9.8K 2016-11-23 02:58 if_e1000_netmap.h
-rw-r--r-- 1 sc558bl USC558L 11K 2016-11-23 02:58 if_e1000e_netmap.h
-rw-r--r-- 1 sc558bl USC558L 17K 2016-11-23 02:58 i40e_netmap_linux.h
-rw-r--r-- 1 sc558bl USC558L 12K 2016-11-23 02:58 forcedeth_netmap.h
lrwxrwxrwx 1 sc558bl USC558L 38 2016-11-28 18:56 patches -> =
/tmp/netmap-master/LINUX/final-patches
lrwxrwxrwx 1 sc558bl USC558L 39 2016-11-28 18:56 GNUmakefile -> =
/tmp/netmap-master/LINUX/../GNUmakefile
-rw-r--r-- 1 sc558bl USC558L 4.5K 2016-11-28 19:00 netmap.mak
drwxr-xr-x 10 sc558bl USC558L 4.0K 2016-11-28 19:00 netmap-tmpdir
-rw-r--r-- 1 sc558bl USC558L 1.1K 2016-11-28 19:00 netmap_linux_config.h
-rw-r--r-- 1 sc558bl USC558L 216K 2016-11-28 19:00 netmap_mem2.o
-rw-r--r-- 1 sc558bl USC558L 145K 2016-11-28 19:00 netmap_mbq.o
-rw-r--r-- 1 sc558bl USC558L 234K 2016-11-28 19:00 netmap_vale.o
-rw-r--r-- 1 sc558bl USC558L 173K 2016-11-28 19:00 netmap_pipe.o
-rw-r--r-- 1 sc558bl USC558L 163K 2016-11-28 19:00 netmap_offloadings.o
-rw-r--r-- 1 sc558bl USC558L 174K 2016-11-28 19:00 netmap_monitor.o
-rw-r--r-- 1 sc558bl USC558L 174K 2016-11-28 19:00 netmap_generic.o
-rw-r--r-- 1 sc558bl USC558L 250K 2016-11-28 19:00 netmap_common.o
-rw-r--r-- 1 sc558bl USC558L 1.8M 2016-11-28 19:00 netmap.o
-rw-r--r-- 1 sc558bl USC558L 245K 2016-11-28 19:00 netmap_linux.o
-rw-r--r-- 1 sc558bl USC558L 37K 2016-11-28 19:00 netmap.mod.o
-rw-r--r-- 1 sc558bl USC558L 602 2016-11-28 19:00 netmap.mod.c
-rw-r--r-- 1 sc558bl USC558L 1.8M 2016-11-28 19:00 netmap.ko

sc558bl@rtr1:/tmp/netmap-master/LINUX$ dmesg | tail
[ 141.456135] e1000e: eth0 NIC Link is Down
[ 143.456909] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow =
Control: None
[ 150.908064] eth0: no IPv6 routers present
[ 1065.480088] e1000e 0000:04:00.1: PCI INT B disabled
[ 1065.544079] e1000e 0000:04:00.0: PCI INT A disabled
[ 1065.625066] e1000e 0000:03:00.1: PCI INT B disabled
[ 1066.144056] e1000e 0000:03:00.0: PCI INT A disabled
[ 1138.077603] netmap: no symbol version for module_layout
[ 1435.387913] netmap: no symbol version for module_layout
[ 1439.776021] netmap: no symbol version for module_layout
sc558bl@rtr1:/tmp/netmap-master/LINUX$

I would like to add that I'm trying to insert netmap patch for e1000e =
driver before which I have to install netmap.ko module.
> On Nov 28, 2016, at 4:54 PM, Harsha Navada <navada@usc.edu> wrote:
>=20
> Hello ,
>=20
> I=E2=80=99m new to netmap where I=E2=80=99m trying to insert netmap.ko =
module after compiling my kernel and I=E2=80=99m shown with the =
following error:
>=20
> netmap: Unknown symbol split_page (err 0)
>=20
> Here are the steps and different methods I followed:=20
>=20
> I. Compile Kernel 3.2.0
>=20
> 1. My Ubuntu 12.04 machine has a kernel version 3.2.0-90-generic, so i =
got the linux source by:
> 	sudo apt-get source linux-source-3.2.0
> 2. Then i work on trying to compile the kernel
> 	a. sudo make menuconfig =E2=80=94 Keep default config
> 	b. sudo sed -i s/CONFIG_RTS5139=3Dm/CONFIG_RTS5139=3Dn/ .config  =
- to avoid compilation errors
> 	c. sudo make clean
> 	d. sudo make -j10
> 	e. sudo make bzImage
> 	f. sudo make modules
> 	g.sudo make modules_install
> 	h. sudo make install
> 	i. sudo update-grub2
> 	j. sudo reboot.=20
> 2 b. On checking kernel version using name -r , this is the kernel =
version - 3.2.79
>=20
> 3. Then i download the netmap-master branch from git and upload it to =
my machine , cannot use git clone as it doesn=E2=80=99t support external =
connections.
> 4.Unzipping the bundle and switch to LINUX folder to run ./configure
> 5. Here i received errors where netmap-master/LINUX/drivers/ext-patch =
couldn=E2=80=99t be downloaded due to failure to connect.
> 6. I downloaded these drivers and placed them in that path.
> 7. I received a warning telling cannot find complete kernel sources, =
which i referenced later as=20
> 	./configure =E2=80=94kernel-sources =3D =
/lib/modules/linux-source-(uname -r)/build
> 8. Then after clearing all warning and errors, the generated netmap.ko =
file I try to insert , which gives me the error
>  netmap: Unknown symbol split_page (err 0)
>=20
> II. Avoid kernel compliation
> 1. Then i download the netmap-master branch from git and upload it to =
my machine , cannot use git clone as it doesn=E2=80=99t support external =
connections.
> 2.Unzipping the bundle and switch to LINUX folder to run ./configure
> 3. Here i received errors where netmap-master/LINUX/drivers/ext-patch =
couldn=E2=80=99t be downloaded due to failure to connect.
> 4. I downloaded these drivers and placed them in that path.
> 5. I received a warning telling cannot find complete kernel sources, =
which i referenced later as=20
> 	./configure =E2=80=94kernel-sources =3D =
/lib/modules/linux-source-(uname -r)/build
> 6. Then after clearing all warning and errors, the generated netmap.ko =
file I try to insert , which gives me the error
>  netmap: Unknown symbol split_page (err 0)
>=20
> III. Tried switching to FreeBSD
> 	Cannot download the FreeBSD 10.2 image due to security reasons =
mentioned in git / wget.=20
>=20
> I=E2=80=99m totally stuck for the past 2 weeks and would appreciate =
help on this.=20
>=20
> Thanks=20
> H
>=20


From owner-freebsd-net@freebsd.org  Tue Nov 29 10:56:19 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3BD58C5932D
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 10:56:19 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 2BDE31247
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 10:56:19 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uATAuHhT072913
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 10:56:19 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 214913] SO_KEEPALIVE does not work?
Date: Tue, 29 Nov 2016 10:56:18 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 9.2-RELEASE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: ae@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-214913-2472-VH825Z1T9B@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-214913-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-214913-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 10:56:19 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214913

Andrey V. Elsukov <ae@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ae@FreeBSD.org

--- Comment #1 from Andrey V. Elsukov <ae@FreeBSD.org> ---
SO_KEEPALIVE option doesn't mean that your connection will live forever. It
only enables keepalive probes. These probes are carried out to determine th=
at
your connection is still alive. Note, not for keeping it alive.

In FreeBSD by default net.inet.tcp.always_keepalive variable configured to
assume SO_KEEPALIVE on all TCP connections. But first keepalive probe will =
be
made only after 2 hours of idle state. This is controlled by
net.inet.tcp.keepidle variable.

Just have tested keepalive probes with lowered idle time to 65 seconds on
FreeBSD 12.0. All works as expected.

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Tue Nov 29 11:27:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 83E7FC4B3D5
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 11:27:00 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01on0073.outbound.protection.outlook.com [104.47.1.73])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id B37A417BE
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 11:26:59 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=streamtechnologiesuk.onmicrosoft.com;
 s=selector1-streamtechnologies-com01e;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=8OrJ+g/5to+tXXHXUvAVQhLuPLDiE6eY9wRlEHDxFdw=;
 b=qDSYB0sX4mMMUXtm/3xGtuOaMqwYfrH44gICFA5GOJA072dpBZlrwMg1RxvwENEWGd6zPOpdsV+tPY6aVd4SiVyT6EbgVV51WkSKO/ldUFReA+QYYYw73Ed1RGFmGzS3flSFFPpsGZgcCnYuJZ9A7A8eqI2CC+H4IXYX0YCyiKQ=
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com (10.166.13.14) by
 DB5PR07MB1687.eurprd07.prod.outlook.com (10.166.13.16) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.747.5; Tue, 29 Nov 2016 11:26:50 +0000
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) by
 DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) with mapi id
 15.01.0761.009; Tue, 29 Nov 2016 11:26:50 +0000
From: Steven Crangle <Steven@stream-technologies.com>
To: Vincenzo Maffione <v.maffione@gmail.com>
CC: FreeBSD Net <freebsd-net@freebsd.org>
Subject: Re: Looking for some help with netmap/bhyve
Thread-Topic: Looking for some help with netmap/bhyve
Thread-Index: AQHSRKuiOapzmKvhI0y8Pcsl7N08/KDmPxuAgAmeBLQ=
Date: Tue, 29 Nov 2016 11:26:50 +0000
Message-ID: <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>,
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
In-Reply-To: <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=Steven@stream-technologies.com; 
x-originating-ip: [212.20.240.118]
x-ms-office365-filtering-correlation-id: d7934d21-a836-48bc-0731-08d4184a9cd2
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR07MB1687;
x-microsoft-exchange-diagnostics: 1; DB5PR07MB1687;
 7:3GGSE+bWQjFO9AR5zWbH1HNAG7HIJ+QIUsbDtuclc7YQ0XAoZuQGJDbarx69XUKJUivEzDravcKPFWdIeXJY6UvH/1WgeBcps8jWkFzPbpgN496MzAvfXtzMFjj3Z9dRmYAiZsmaDZNof1mePVWWNphKxS83XWAHZwCb6CDPqr90PCHTxDs6A+ErpszoVFD6w+IvKRD2Ma1pUBsFpSA6nc3Gp1r9tFMJAhaIG9ovGGZXlplx3uWTzQnsOeKiPKOsrVs1OH0AY6m/NIsk1wmNdWozETNkfer622ZgYsbsjNZTQqp8XjqaJQHvnMc3pilpJ5v19FApWYdalkwbxMUCP6cQ/NBsvbawKjvfBqcdyBCFMKhl6N0BDrHi7sExikaXXZjO8l06NoQLaJOncNhXq7/aAdXkrcOTDPOuhGAadnwE72Ymx7L12U8S2WPR1rKFM1AZlg+ftX7/DCtji4T84Q==
x-microsoft-antispam-prvs: <DB5PR07MB1687C0DFB2AEC997B86F933C9B8D0@DB5PR07MB1687.eurprd07.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(56005881305849)(166708455590820)(203790808753936)(266611908612381)(75325880899374)(83272782819144);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(102415395)(6060326)(6045199)(6040361)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6061324)(6041248)(20161123555025)(2016111802025)(20161123560025)(20161123564025)(20161123562025)(6043046);
 SRVR:DB5PR07MB1687; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB1687; 
x-forefront-prvs: 01415BB535
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(7916002)(52314003)(43784003)(377424004)(189002)(199003)(575784001)(4001150100001)(80792005)(97736004)(101416001)(76176999)(54356999)(189998001)(6116002)(50986999)(102836003)(3846002)(99936001)(66066001)(33656002)(16601075003)(606004)(6506003)(229853002)(39450400002)(5890100001)(122556002)(9686002)(76576001)(77096006)(7906003)(19273905006)(81156014)(7736002)(8936002)(7696004)(81166006)(110136003)(5660300001)(39410400001)(39400400001)(8676002)(68736007)(2900100001)(74316002)(105586002)(106116001)(39380400001)(3280700002)(2950100002)(6916009)(7846002)(106356001)(2906002)(86362001)(39060400001)(3660700001)(4326007)(38730400001)(92566002)(19627405001)(7099028)(16866105001)(473944003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB1687;
 H:DB5PR07MB1685.eurprd07.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords;
 MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: stream-technologies.com does not
 designate permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: multipart/mixed;
 boundary="_004_DB5PR07MB168582129D05D52878D3DCE59B8D0DB5PR07MB1685eurp_"
MIME-Version: 1.0
X-OriginatorOrg: stream-technologies.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2016 11:26:50.2107 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 720fa073-5781-43bf-bc14-7bef2603ed21
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1687
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 11:27:00 -0000

--_004_DB5PR07MB168582129D05D52878D3DCE59B8D0DB5PR07MB1685eurp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

 Hi Vincenzo!


Thank you so much for your help! With your instructions I've managed to get=
 a set of bhyves up and running with netmap working properly within them! I=
 chose to go with the recent version of head instead of 10.3.  I will also =
try and build a version on 11.0 if I get chance!


I will make sure and ask any further questions on the github page for netma=
p, but while I'm emailing, I've attached a text file containing a few kerne=
l page fault errors I've ran into. They don't happen repeatedly. They seem =
to just happen randomly if I try to shut the process down and possibly catc=
h netmap in an incorrect state! Figured they might be useful to you. If I f=
igure out what the error is myself I will try and help out!


And thanks again for your help!


Kind Regards









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com>
Sent: 23 November 2016 08:33:11
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve



2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

Hi,


I've recently been trying to boot up several bhyves so that I can test netm=
ap communication between instances. The problem is, no matter what configur=
ation I try, the guest vm running in bhyve completely hangs and becomes unu=
sable as soon as a packet hits the netmap interface. When testing with pkt-=
gen, the TX side successfully starts sending packets, but the RX side will =
reliable freeze with the only option being killing the bhyve process.


The bhyve command used for the above test was:


    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er1vol    -s 3,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 4,virtio-net,tap4=
 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er2vol    -s 3,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 4,virtio-net,tap5=
 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

For this test the host OS was FreeBSD-11.0-p3 and the guest OS was FreeBSD-=
11.0-p3.

After failing to get this solution working, I pulled down the source from t=
he following url and installed it on the host box:

https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/

I then ran the following commands to try and bring up the machines using th=
e ptnetmap interface (the guest still running 11.0p3) :

    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper1vol    -s 2:0,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper2vol    -s 2:0,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

With the above commands the vm's fail to boot with the following message:

ptnet_init: failed to get ptnetmap

Output in /var/log/messages seems to just show the ptnetmap driver allocati=
ng one RX/TX ring for each vm, while bringing the device up, the device the=
n goes down and the above error is seen in the console.

Is there something I'm doing wrong with regards to running netmap or ptnetm=
ap within a bhyve? Any pointers in the right direction will be much appreci=
ated!

Kind Regards

Steven


Hi Steven,

  The code you are looking at is the final code released by my gsoc 2016 pr=
oject at the end of August 2016. However, I've been working on that for a w=
hile after the gsoc, so that code is not updated anymore. My modification b=
asically involves two subsystems: netmap and bhyve.

The updates to netmap are already available in HEAD. The updates to bhyve a=
re not yet upstream, as we are in the process to review that with the bhyve=
 maintainers.

Anyway, you need two sources to get the latest code:
1) https://github.com/luigirizzo/netmap for the latest netmap code, that yo=
u could also compile as an external kernel module.
2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and vm=
m.ko). You can use this as the host system. There are two branches here: pt=
net-10.3, and ptnet-head. My original code was developed under FreeBSD 10.3=
, so a first possibility is to try this as the host system (using the ptnet=
-10.3 branch). The other branch (ptnet-head) contains a porting of the work=
 to a recent version of HEAD. I would be very glad if you could test the co=
de also on FreeBSD 11.

We support two combinations of bhyve networking with netmap:

  (A) virtio-net + netmap: that is something like "-s 2:0,virtio-net,vale0:=
0" in the bhyve command line.
  (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s 2=
:2,ptnet,vale0:0" in the bhyve command line.

so you may want to try A first (netmap backend in user-space, slower) and t=
hen B (netmap backend in kernel-space, faster).

Sorry about the confusion on the code repositories, I'll try also to update=
 the wiki page (and/or the gsoc svn repo) to reflect these updates. It's pe=
rfectly ok for me to discuss these issues here in the ML, however for more =
detailed/low-level discussion and support about problems you are running in=
to, feel free to open Github issues here https://github.com/luigirizzo/netm=
ap.

Cheers,
  Vincenzo









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com><http://www.=
stream-technologies.com/>






_______________________________________________
freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org> mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org<mailt=
o:freebsd-net-unsubscribe@freebsd.org>"



--
Vincenzo Maffione

--_004_DB5PR07MB168582129D05D52878D3DCE59B8D0DB5PR07MB1685eurp_
Content-Type: text/plain; name="kernel_stacktraces.txt"
Content-Description: kernel_stacktraces.txt
Content-Disposition: attachment; filename="kernel_stacktraces.txt"; size=1049;
	creation-date="Tue, 29 Nov 2016 11:25:17 GMT";
	modification-date="Tue, 29 Nov 2016 11:25:17 GMT"
Content-Transfer-Encoding: base64

CkZhdGFsIHRyYXAgMTI6IHBhZ2UgZmF1bHQgd2hpbGUgaW4ga2VybmVsIG1vZGUKY3B1aWQgPSAw
OyBhcGljIGlkID0gMDAKZmF1bHQgdmlydHVhbCBhZGRyZXNzCT0gMHgwCmZhdWx0IGNvZGUJCT0g
c3VwZXJ2aXNvciByZWFkIGluc3RydWN0aW9uLCBwYWdlIG5vdCBwcmVzZW50Cmluc3RydWN0aW9u
IHBvaW50ZXIJPSAweDIwOjB4MApzdGFjayBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZl
MDFhNGQ2ZDkzOApmcmFtZSBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZlMDFhNGQ2ZDk2
MApjb2RlIHNlZ21lbnQJCT0gYmFzZSAweDAsIGxpbWl0IDB4ZmZmZmYsIHR5cGUgMHgxYgoJCQk9
IERQTCAwLCBwcmVzIDEsIGxvbmcgMSwgZGVmMzIgMCwgZ3JhbiAxCnByb2Nlc3NvciBlZmxhZ3MJ
PSBpbnRlcnJ1cHQgZW5hYmxlZCwgcmVzdW1lLCBJT1BMID0gMApjdXJyZW50IHByb2Nlc3MJCT0g
MTIgKHN3aTQ6IGNsb2NrICgwKSkKWyB0aHJlYWQgcGlkIDEyIHRpZCAxMDAwMDUgXQpTdG9wcGVk
IGF0ICAgICAgMAoKCkZhdGFsIHRyYXAgMTI6IHBhZ2UgZmF1bHQgd2hpbGUgaW4ga2VybmVsIG1v
ZGUKY3B1aWQgPSAwOyBhcGljIGlkID0gMDAKZmF1bHQgdmlydHVhbCBhZGRyZXNzCT0gMHgwCmZh
dWx0IGNvZGUJCT0gc3VwZXJ2aXNvciByZWFkIGluc3RydWN0aW9uLCBwYWdlIG5vdCBwcmVzZW50
Cmluc3RydWN0aW9uIHBvaW50ZXIJPSAweDIwOjB4MApzdGFjayBwb2ludGVyCSAgICAgICAgPSAw
eDA6MHhmZmZmZmUwMWE0ZDZkOTM4CmZyYW1lIHBvaW50ZXIJICAgICAgICA9IDB4MDoweGZmZmZm
ZTAxYTRkNmQ5NjAKY29kZSBzZWdtZW50CQk9IGJhc2UgMHgwLCBsaW1pdCAweGZmZmZmLCB0eXBl
IDB4MWIKCQkJPSBEUEwgMCwgcHJlcyAxLCBsb25nIDEsIGRlZjMyIDAsIGdyYW4gMQpwcm9jZXNz
b3IgZWZsYWdzCT0gaW50ZXJydXB0IGVuYWJsZWQsIHJlc3VtZSwgSU9QTCA9IDAKY3VycmVudCBw
cm9jZXNzCQk9IDEyIChzd2k0OiBjbG9jayAoMCkpClsgdGhyZWFkIHBpZCAxMiB0aWQgMTAwMDA1
IF0KU3RvcHBlZCBhdCAgICAgIDAKCgo=

--_004_DB5PR07MB168582129D05D52878D3DCE59B8D0DB5PR07MB1685eurp_--

From owner-freebsd-net@freebsd.org  Tue Nov 29 11:52:20 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7348EC4BCDB
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 11:52:20 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: from mail-oi0-x243.google.com (mail-oi0-x243.google.com
 [IPv6:2607:f8b0:4003:c06::243])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 362DE1445
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 11:52:20 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: by mail-oi0-x243.google.com with SMTP id m75so17956652oig.1
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 03:52:20 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=56yqKksT0KQlBr39BlHqdnTiIDBG4QkFWkU7EHIdEiI=;
 b=F5vH1nxISKOCvrV/0dqyiD9qbzMk+Y1EazoZkMBzhKwaFNpn+SdrUexoezOnGQb5KV
 lqcKecpL1ZzN03m1vSI1AOnFMDRngd4BUuqBpXZpA6EMwFCcvlLlW1VAiPhoE3SJ2skP
 0/ezFKycu2pTIGNuUvwBQ2rQf1RxPRHaHeuagnURWvSEGfot9uPQMAHFouKXfpHmMqAW
 k8vQ+eAJvNvsjRFyttILzN2X3hp+nV0+FNyyX9hSwvH628SRqd2BqkWXHbWv1Hbc49ZU
 7TQ4jJIEAJBhhSgwjMRWQcUu2jiyiagnZVgcOLREhMNzaGzdQEPo+Kmn22z8JJpzcMUy
 sk3A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=56yqKksT0KQlBr39BlHqdnTiIDBG4QkFWkU7EHIdEiI=;
 b=m8dRrULBaKI49AV08ksdRkOhOPc3ZYEP7wIA9oLbIQ78ecJyHa2t3Y4Nj2BhktI9Z+
 jOr3B/W2Fkpq0dR9u/ACd5B4Ak2sDltvMa/S5cuSHAtFMiFirls2g2Rql02wRkkhUNhE
 dhiWvQX6zLYGnbXlGMoEtxzSRuiP3dR7QOVJoeIHhXPJgdtyMeXpe0LGsE36WR4zn8Kq
 XSDU65g7g3N2HOD/7rBxb/E0pWHD2Ud8nIhv9G1zZZfcOkq1HEl9n2gnsYv3ol3VJfGO
 wGq66vNd1PbzjCc4doZQ0yITJ+UVv7baibZis3KOoQ3EdQff04lvfenHOA9hKjeS7S1a
 Aoyw==
X-Gm-Message-State: AKaTC017DqYCRLxJkFUwVx9cCF2oQEVR09RfY+ukMk/AuskQiJMvWHEcYChNxv06Ajd8A4SzrHGDqScbR5n4yw==
X-Received: by 10.202.67.7 with SMTP id q7mr13192606oia.103.1480420339130;
 Tue, 29 Nov 2016 03:52:19 -0800 (PST)
MIME-Version: 1.0
Received: by 10.157.45.200 with HTTP; Tue, 29 Nov 2016 03:52:18 -0800 (PST)
In-Reply-To: <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
 <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
From: Vincenzo Maffione <v.maffione@gmail.com>
Date: Tue, 29 Nov 2016 12:52:18 +0100
Message-ID: <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
Subject: Re: Looking for some help with netmap/bhyve
To: Steven Crangle <Steven@stream-technologies.com>
Cc: FreeBSD Net <freebsd-net@freebsd.org>
Content-Type: text/plain; charset=UTF-8
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 11:52:20 -0000

Hi Steven,
  Thanks for your testing this in HEAD, good news to know that it works ok!

I think there is not going to be much difference between HEAD and 11.0,
because in the end bhyve code didn't really change (for the parts I
touched), and you need to use the latest netmap version (github) anyway,
irrespective of whether you are testing on 10.3, 11.0, head, etc. In other
words, you would be testing approximately the same code. Anyway, if you
happen to test 11.0 by chance please let me know.

What kind of tests did you perform? netmap applications (e.g. pkt-gen), or
netperf/iperf standard TCP/IP tools?
Could you please share the performance number you got for configurations
(A) and (B) (or just the one you tried)?

I think it is useful to compare your results with the ones I collected here
(see the performance evaluation section):

https://wiki.freebsd.org/DevSummit/201609?action=AttachFile&do=view&target=20160923-freebsd-summit-ptnet.pdf

Regarding the crashes, thanks for reporting, I would be nice if you could
describe in more detail how you trigger them (with some higher likelyhood);
also, compiling the kernel with debug symbols should help in understanding
which part of the code is involved in the crash.

Cheers,
  Vincenzo


2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>:

>  Hi Vincenzo!
>
>
> Thank you so much for your help! With your instructions I've managed to
> get a set of bhyves up and running with netmap working properly within
> them! I chose to go with the recent version of head instead of 10.3.  I
> will also try and build a version on 11.0 if I get chance!
>
>
> I will make sure and ask any further questions on the github page for
> netmap, but while I'm emailing, I've attached a text file containing a few
> kernel page fault errors I've ran into. They don't happen repeatedly. They
> seem to just happen randomly if I try to shut the process down and possibly
> catch netmap in an incorrect state! Figured they might be useful to you. If
> I figure out what the error is myself I will try and help out!
>
>
> And thanks again for your help!
>
>
> Kind Regards
>
>
>
>
>
>
>
> ------------------------------
>
>
>
> [image: Stream Logo]
>
>
>
>
>
> *Steven Crangle*
>
> Systems Developer | Stream Technologies | Glasgow, UK
>
> [image: http://www.stream-technologies.com/img/phone.png]
>
> +44 (0)844 800 8520
>
> |
>
> [image: http://www.stream-technologies.com/img/mouse.png]
>
> www.stream-technologies.com
>
>
>
>
>
> ------------------------------
> *From:* Vincenzo Maffione <v.maffione@gmail.com>
> *Sent:* 23 November 2016 08:33:11
> *To:* Steven Crangle
> *Cc:* FreeBSD Net
> *Subject:* Re: Looking for some help with netmap/bhyve
>
>
>
> 2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>
> :
>
>>
>> Hi,
>>
>>
>> I've recently been trying to boot up several bhyves so that I can test
>> netmap communication between instances. The problem is, no matter what
>> configuration I try, the guest vm running in bhyve completely hangs and
>> becomes unusable as soon as a packet hits the netmap interface. When
>> testing with pkt-gen, the TX side successfully starts sending packets, but
>> the RX side will reliable freeze with the only option being killing the
>> bhyve process.
>>
>>
>> The bhyve command used for the above test was:
>>
>>
>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/viper1vol
>>   -s 3,virtio-net,tap0,mac=00:01:23:45:67:83 -s 4,virtio-net,tap4 -l
>> com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/viper2vol
>>   -s 3,virtio-net,tap1,mac=00:01:23:45:67:84 -s 4,virtio-net,tap5 -l
>> com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>
>> For this test the host OS was FreeBSD-11.0-p3 and the guest OS was
>> FreeBSD-11.0-p3.
>>
>> After failing to get this solution working, I pulled down the source from
>> the following url and installed it on the host box:
>>
>> https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/
>>
>> I then ran the following commands to try and bring up the machines using
>> the ptnetmap interface (the guest still running 11.0p3) :
>>
>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/viper1vol
>>   -s 2:0,virtio-net,tap0,mac=00:01:23:45:67:83 -s 2:1,ptnetmap-memdev -s
>> 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/viper2vol
>>   -s 2:0,virtio-net,tap1,mac=00:01:23:45:67:84 -s 2:1,ptnetmap-memdev -s
>> 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>
>> With the above commands the vm's fail to boot with the following message:
>>
>> ptnet_init: failed to get ptnetmap
>>
>> Output in /var/log/messages seems to just show the ptnetmap driver
>> allocating one RX/TX ring for each vm, while bringing the device up, the
>> device then goes down and the above error is seen in the console.
>>
>> Is there something I'm doing wrong with regards to running netmap or
>> ptnetmap within a bhyve? Any pointers in the right direction will be much
>> appreciated!
>>
>> Kind Regards
>>
>> Steven
>>
>>
> Hi Steven,
>
>   The code you are looking at is the final code released by my gsoc 2016
> project at the end of August 2016. However, I've been working on that for a
> while after the gsoc, so that code is not updated anymore. My modification
> basically involves two subsystems: netmap and bhyve.
>
> The updates to netmap are already available in HEAD. The updates to bhyve
> are not yet upstream, as we are in the process to review that with the
> bhyve maintainers.
>
> Anyway, you need two sources to get the latest code:
> 1) https://github.com/luigirizzo/netmap for the latest netmap code, that
> you could also compile as an external kernel module.
> 2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and
> vmm.ko). You can use this as the host system. There are two branches here:
> ptnet-10.3, and ptnet-head. My original code was developed under FreeBSD
> 10.3, so a first possibility is to try this as the host system (using the
> ptnet-10.3 branch). The other branch (ptnet-head) contains a porting of the
> work to a recent version of HEAD. I would be very glad if you could test
> the code also on FreeBSD 11.
>
> We support two combinations of bhyve networking with netmap:
>
>   (A) virtio-net + netmap: that is something like "-s
> 2:0,virtio-net,vale0:0" in the bhyve command line.
>   (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s
> 2:2,ptnet,vale0:0" in the bhyve command line.
>
> so you may want to try A first (netmap backend in user-space, slower) and
> then B (netmap backend in kernel-space, faster).
>
> Sorry about the confusion on the code repositories, I'll try also to
> update the wiki page (and/or the gsoc svn repo) to reflect these updates.
> It's perfectly ok for me to discuss these issues here in the ML, however
> for more detailed/low-level discussion and support about problems you are
> running into, feel free to open Github issues here
> https://github.com/luigirizzo/netmap.
>
> Cheers,
>   Vincenzo
>
>
>
>>
>>
>>
>>
>>
>>
>>
>> ________________________________
>>
>>
>>
>> [Stream Logo]
>>
>>
>>
>>
>>
>>
>>
>>
>> Steven Crangle
>>
>>
>> Systems Developer | Stream Technologies | Glasgow, UK
>>
>>
>> [http://www.stream-technologies.com/img/phone.png]
>>
>>
>> +44 (0)844 800 8520
>>
>>
>> |
>>
>>
>> [http://www.stream-technologies.com/img/mouse.png]
>>
>>
>> www.stream-technologies.com<http://www.stream-technologies.com/>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> freebsd-net@freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>>
>
>
>
> --
> Vincenzo Maffione
>



-- 
Vincenzo Maffione

From owner-freebsd-net@freebsd.org  Tue Nov 29 18:17:55 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id D8B69C5C980
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 18:17:55 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01on0049.outbound.protection.outlook.com [104.47.0.49])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id E8FF112F8
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 18:17:54 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=streamtechnologiesuk.onmicrosoft.com;
 s=selector1-streamtechnologies-com01e;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=vVmM2XJYZTvs3vg3deT0MAa1DNXKg/snQn7gqsO5omQ=;
 b=Q2tMtV+7NiQZ8zYveJUrHKNMXa0i4VWrt8/2SPJ7TRHUMnnHEFo16dRQFA15li5e/4piIClhiHnw+F50CUqFaa3uJkav0oF8QKPULZdVn+BfflOoEXDU7oZgSUd1eOBbnKIx3WJcdra/QGPiPZTBA2H8F0C0BgiNq4jPzE5zwPk=
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com (10.166.13.14) by
 DB5PR07MB1685.eurprd07.prod.outlook.com (10.166.13.14) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.761.5; Tue, 29 Nov 2016 15:44:01 +0000
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) by
 DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) with mapi id
 15.01.0761.009; Tue, 29 Nov 2016 15:44:01 +0000
From: Steven Crangle <Steven@stream-technologies.com>
To: Vincenzo Maffione <v.maffione@gmail.com>
CC: FreeBSD Net <freebsd-net@freebsd.org>
Subject: Re: Looking for some help with netmap/bhyve
Thread-Topic: Looking for some help with netmap/bhyve
Thread-Index: AQHSRKuiOapzmKvhI0y8Pcsl7N08/KDmPxuAgAmeBLSAAAebAIAAJnrz
Date: Tue, 29 Nov 2016 15:44:00 +0000
Message-ID: <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
 <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>,
 <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
In-Reply-To: <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=Steven@stream-technologies.com; 
x-originating-ip: [212.20.240.118]
x-ms-office365-filtering-correlation-id: 70ba034b-ae79-4e50-0bd9-08d4186e8a42
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR07MB1685;
x-microsoft-exchange-diagnostics: 1; DB5PR07MB1685;
 7:zktX2SGbovP/fabzgVlMZ02UDOk4/+0WhIgAa6bxDHB4dPWqLP2KKvaUseK13V/T6RpSbBPlneDpapc9or6V975Wm8cOzbDvW1E+RkuGpL2dg5sjkxr+EoKwSP4qLKqIZE6dOpY45zuWn16RFU2gEI0ZQITkPc5KGWtarGtj6OOWsBYRJ+suY5Ac6s8sTYpf/UpZAf0hixuCaHZgP9Tn+ptInDeX1ywglcirLODXagS8GNkG95g5yjnkr3BvYuLk7CIl5sS4dOqBOrhyL7I1NFN28xsVQKjPIIy8tInz6QHsd3pqwIdg8KKh3/1c/ZG4oExe6rXWp9rmYBSO1/OBHEmAnrq3XhWI9IbxPVctPm+N2Jg9Y53ktS+Inn0kfFWiexBnYMzDNNouh03aWRaxGWTPhGiYRHmpnTpE97cIwOMtrAogeGRQSi8ikYlVLPiP6ooFQHk94nZwto5GagQTTQ==
x-microsoft-antispam-prvs: <DB5PR07MB168597FA3B7A623E63FFAAB79B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(56005881305849)(278428928389397)(166708455590820)(203790808753936)(266611908612381)(75325880899374)(211171220733660)(83272782819144);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(6040361)(6045199)(6060326)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6061324)(6041248)(2016111802025)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6043046);
 SRVR:DB5PR07MB1685; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB1685; 
x-forefront-prvs: 01415BB535
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(7916002)(189002)(199003)(377424004)(52314003)(43784003)(110136003)(4326007)(38730400001)(8936002)(3846002)(39060400001)(606004)(2906002)(3660700001)(5890100001)(6916009)(68736007)(3280700002)(5660300001)(101416001)(7696004)(229853002)(6506003)(105586002)(189998001)(33656002)(39380400001)(39410400001)(39450400002)(9686002)(106116001)(77096006)(39400400001)(6116002)(102836003)(2950100002)(97736004)(80792005)(4001150100001)(106356001)(81156014)(54356999)(76576001)(16601075003)(2900100001)(122556002)(76176999)(50986999)(7736002)(86362001)(575784001)(81166006)(93886004)(66066001)(7906003)(8676002)(7846002)(19273905006)(19627405001)(74316002)(92566002)(7099028)(16866105001)(473944003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB1685;
 H:DB5PR07MB1685.eurprd07.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords;
 MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: stream-technologies.com does not
 designate permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: stream-technologies.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2016 15:44:00.9264 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 720fa073-5781-43bf-bc14-7bef2603ed21
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1685
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 18:17:55 -0000


Hi Vincenzo,


No problem! We've decided that we will try testing with 11.0 too, as it wou=
ld help us to have our test system locked to a specific version like 11.0 a=
nd can hopefully help you with testing too. We'll compile netmap from sourc=
e as advised, but I was wondering what steps we would take in order to port=
 the changes to bhyve/ptnetmap from HEAD into 11.0?


I've currently only tested with pkt-gen as our bhyve instances are pretty m=
inimal right now, below are a few samples of the speeds seen in each of the=
 different configurations:


Using netmap on top of standard tap devices with no vale:


vm1:
    197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps in =
1047062 usec) 1.93 avg_batch 826 min_space
    203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps in =
1008156 usec) 1.88 avg_batch 866 min_space
    204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps in =
1006929 usec) 1.98 avg_batch 911 min_space
vm2:
    245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps in =
1058559 usec) 313.79 avg_batch 99999 min_space
    246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps in =
1032392 usec) 319.47 avg_batch 99999 min_space
    251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps in =
1054531 usec) 314.42 avg_batch 99999 min_space


After then trying to switch to the netmap in userspace/netmap in kernel spa=
ce with ptnetmap, I realised I made a silly mistake and built from head ins=
tead of the branch ptnet-head... haha So I'm currently doing a quick rebuil=
d on the correct branch and will report back with the results from pkt-gen =
using just vale, and also with the new ptnetmap changes!



Kind Regards








________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com>
Sent: 29 November 2016 11:52:18
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve

Hi Steven,
  Thanks for your testing this in HEAD, good news to know that it works ok!

I think there is not going to be much difference between HEAD and 11.0, bec=
ause in the end bhyve code didn't really change (for the parts I touched), =
and you need to use the latest netmap version (github) anyway, irrespective=
 of whether you are testing on 10.3, 11.0, head, etc. In other words, you w=
ould be testing approximately the same code. Anyway, if you happen to test =
11.0 by chance please let me know.

What kind of tests did you perform? netmap applications (e.g. pkt-gen), or =
netperf/iperf standard TCP/IP tools?
Could you please share the performance number you got for configurations (A=
) and (B) (or just the one you tried)?

I think it is useful to compare your results with the ones I collected here=
 (see the performance evaluation section):

https://wiki.freebsd.org/DevSummit/201609?action=3DAttachFile&do=3Dview&tar=
get=3D20160923-freebsd-summit-ptnet.pdf

Regarding the crashes, thanks for reporting, I would be nice if you could d=
escribe in more detail how you trigger them (with some higher likelyhood); =
also, compiling the kernel with debug symbols should help in understanding =
which part of the code is involved in the crash.

Cheers,
  Vincenzo


2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

 Hi Vincenzo!


Thank you so much for your help! With your instructions I've managed to get=
 a set of bhyves up and running with netmap working properly within them! I=
 chose to go with the recent version of head instead of 10.3.  I will also =
try and build a version on 11.0 if I get chance!


I will make sure and ask any further questions on the github page for netma=
p, but while I'm emailing, I've attached a text file containing a few kerne=
l page fault errors I've ran into. They don't happen repeatedly. They seem =
to just happen randomly if I try to shut the process down and possibly catc=
h netmap in an incorrect state! Figured they might be useful to you. If I f=
igure out what the error is myself I will try and help out!


And thanks again for your help!


Kind Regards









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com<mailto:v.maffione@gmail.com>>
Sent: 23 November 2016 08:33:11
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve



2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

Hi,


I've recently been trying to boot up several bhyves so that I can test netm=
ap communication between instances. The problem is, no matter what configur=
ation I try, the guest vm running in bhyve completely hangs and becomes unu=
sable as soon as a packet hits the netmap interface. When testing with pkt-=
gen, the TX side successfully starts sending packets, but the RX side will =
reliable freeze with the only option being killing the bhyve process.


The bhyve command used for the above test was:


    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er1vol    -s 3,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 4,virtio-net,tap4=
 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er2vol    -s 3,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 4,virtio-net,tap5=
 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

For this test the host OS was FreeBSD-11.0-p3 and the guest OS was FreeBSD-=
11.0-p3.

After failing to get this solution working, I pulled down the source from t=
he following url and installed it on the host box:

https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/

I then ran the following commands to try and bring up the machines using th=
e ptnetmap interface (the guest still running 11.0p3) :

    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper1vol    -s 2:0,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper2vol    -s 2:0,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

With the above commands the vm's fail to boot with the following message:

ptnet_init: failed to get ptnetmap

Output in /var/log/messages seems to just show the ptnetmap driver allocati=
ng one RX/TX ring for each vm, while bringing the device up, the device the=
n goes down and the above error is seen in the console.

Is there something I'm doing wrong with regards to running netmap or ptnetm=
ap within a bhyve? Any pointers in the right direction will be much appreci=
ated!

Kind Regards

Steven


Hi Steven,

  The code you are looking at is the final code released by my gsoc 2016 pr=
oject at the end of August 2016. However, I've been working on that for a w=
hile after the gsoc, so that code is not updated anymore. My modification b=
asically involves two subsystems: netmap and bhyve.

The updates to netmap are already available in HEAD. The updates to bhyve a=
re not yet upstream, as we are in the process to review that with the bhyve=
 maintainers.

Anyway, you need two sources to get the latest code:
1) https://github.com/luigirizzo/netmap for the latest netmap code, that yo=
u could also compile as an external kernel module.
2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and vm=
m.ko). You can use this as the host system. There are two branches here: pt=
net-10.3, and ptnet-head. My original code was developed under FreeBSD 10.3=
, so a first possibility is to try this as the host system (using the ptnet=
-10.3 branch). The other branch (ptnet-head) contains a porting of the work=
 to a recent version of HEAD. I would be very glad if you could test the co=
de also on FreeBSD 11.

We support two combinations of bhyve networking with netmap:

  (A) virtio-net + netmap: that is something like "-s 2:0,virtio-net,vale0:=
0" in the bhyve command line.
  (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s 2=
:2,ptnet,vale0:0" in the bhyve command line.

so you may want to try A first (netmap backend in user-space, slower) and t=
hen B (netmap backend in kernel-space, faster).

Sorry about the confusion on the code repositories, I'll try also to update=
 the wiki page (and/or the gsoc svn repo) to reflect these updates. It's pe=
rfectly ok for me to discuss these issues here in the ML, however for more =
detailed/low-level discussion and support about problems you are running in=
to, feel free to open Github issues here https://github.com/luigirizzo/netm=
ap.

Cheers,
  Vincenzo









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com><http://www.=
stream-technologies.com/>






_______________________________________________
freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org> mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org<mailt=
o:freebsd-net-unsubscribe@freebsd.org>"



--
Vincenzo Maffione



--
Vincenzo Maffione

From owner-freebsd-net@freebsd.org  Tue Nov 29 18:42:06 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 85A38C5CF27
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 18:42:06 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: from mail-oi0-x235.google.com (mail-oi0-x235.google.com
 [IPv6:2607:f8b0:4003:c06::235])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4737D11DF
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 18:42:06 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: by mail-oi0-x235.google.com with SMTP id b126so201355526oia.2
 for <freebsd-net@freebsd.org>; Tue, 29 Nov 2016 10:42:06 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=l9o8+EIhnQWP0bAeJsYoKLXoHQF1dHJzvyZ2KhtABS8=;
 b=iIoJ9geKmnUnxgfO4VuxlcYu9rYRxC4wV4xugt5kRo8I+GkwbxyKtNsZ9M51IYNKRH
 P48sE3igmGUuTPUfOw20hvwSerZhunjY5Ge8YwPx+Lxt5nvTREod9/hem/s5lxto/TQQ
 mrKjCvn63Ok1jAiFD1recUHneGqJMZYJ8eBn1EYgnMZZs5E/j9E9kfts6OJOKn7NNS4v
 fLBsOHmIRGywF0FLJByU6Pbm0qeZOyz4EI72DOgTW6hk47IHgu/79hflyzFq1eSCJ+2O
 YI+X4qy4sj5XXsH+HhG5FvUksb8FNkEwnQ1kCMaLv8oilyeILtUSIgs6esK7Dttn5Dct
 rAMQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=l9o8+EIhnQWP0bAeJsYoKLXoHQF1dHJzvyZ2KhtABS8=;
 b=bKhz4zUQKEqPfQwQcti9zQl5PhsSCUpuEBsU3EtMssiRpWF0U4nC8ZkeylMbar0jNm
 FytmaiwXCVnpnzMqi10tPsFuqTM/JAiE7heJcfDynRom/D5vCcWwyRFri3x2NJRMqcZA
 69Nwv3oRwXqJMa9rvlU+tcHd7jBEP7xy3fM6IgP4SFehmR7id7YMDhqF0/eb+GctQsGX
 fKyFg7PsT/hmCts5CL+SYyHFAS0ISjVTu/vXYCvV5q1moGqQLAWMEY4yK7cvIMQwwUYx
 u93yiatSbshu1kXx0/O7Wz/kf2TcAW0eroL+k5rI8/gM59trUg4E3wFPtsRT4iJ6WGSw
 pfcg==
X-Gm-Message-State: AKaTC00lk7l89J+T74tcT8n0+Es4ZKNDHTVWijVkq/IqbhvMqSxUc8OIx1lfd9+v9iozJJ1T9uDjSMkrc2eBsQ==
X-Received: by 10.202.213.138 with SMTP id m132mr16110792oig.104.1480444925414; 
 Tue, 29 Nov 2016 10:42:05 -0800 (PST)
MIME-Version: 1.0
Received: by 10.157.45.200 with HTTP; Tue, 29 Nov 2016 10:42:04 -0800 (PST)
In-Reply-To: <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
 <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
 <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
From: Vincenzo Maffione <v.maffione@gmail.com>
Date: Tue, 29 Nov 2016 19:42:04 +0100
Message-ID: <CA+_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>
Subject: Re: Looking for some help with netmap/bhyve
To: Steven Crangle <Steven@stream-technologies.com>
Cc: FreeBSD Net <freebsd-net@freebsd.org>
Content-Type: text/plain; charset=UTF-8
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 18:42:06 -0000

Hi Steven,

2016-11-29 16:44 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>:

>
> Hi Vincenzo,
>
>
> No problem! We've decided that we will try testing with 11.0 too, as it
> would help us to have our test system locked to a specific version like
> 11.0 and can hopefully help you with testing too. We'll compile netmap from
> source as advised, but I was wondering what steps we would take in order to
> port the changes to bhyve/ptnetmap from HEAD into 11.0?
>

I think you can get the patch containing my modifications to HEAD for
bhyve+vmm.ko+libvmmapi, that you can extract with the following command in
my freebsd git repository

$ git diff 9e10acc0303003d8733a546bca60f242b7b0aa64 ptnet-head
lib/libvmmapi/ sys/amd64/ sys/modules/vmm/ usr.sbin/bhyve

and apply that patch in your 11.0 FreeBSD tree.


>
> I've currently only tested with pkt-gen as our bhyve instances are pretty
> minimal right now, below are a few samples of the speeds seen in each of
> the different configurations:
>

which configurations?

>
> Using netmap on top of standard tap devices with no vale:
>
>
> vm1:
>     197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps in
> 1047062 usec) 1.93 avg_batch 826 min_space
>     203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps in
> 1008156 usec) 1.88 avg_batch 866 min_space
>     204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps in
> 1006929 usec) 1.98 avg_batch 911 min_space
> vm2:
>     245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps in
> 1058559 usec) 313.79 avg_batch 99999 min_space
>     246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps in
> 1032392 usec) 319.47 avg_batch 99999 min_space
>     251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps in
> 1054531 usec) 314.42 avg_batch 99999 min_space
>

Be aware that you typically want to use netmap both in the VM and in the
host (to use VALE and ptnet). Here you are probably using netmap just in
the VM. Performance are however extremely low.
When using netmap in both guest and host, with ptnet, you should be able to
get at least 10-30 Mpps from vm1 to vm2.

>
> After then trying to switch to the netmap in userspace/netmap in kernel
> space with ptnetmap, I realised I made a silly mistake and built from head
> instead of the branch ptnet-head... haha So I'm currently doing a quick
> rebuild on the correct branch and will report back with the results from
> pkt-gen using just vale, and also with the new ptnetmap changes!
>

Ok, also consider that you can use the patch I indicated above against HEAD.

Cheers,
  Vincenzo

>
>
> Kind Regards
>
>
>
>
>
>
>
> ------------------------------
>
>
>
> [image: Stream Logo]
>
>
>
>
>
> *Steven Crangle*
>
> Systems Developer | Stream Technologies | Glasgow, UK
>
> [image: http://www.stream-technologies.com/img/phone.png]
>
> +44 (0)844 800 8520
>
> |
>
> [image: http://www.stream-technologies.com/img/mouse.png]
>
> www.stream-technologies.com
>
>
>
>
>
> ------------------------------
> *From:* Vincenzo Maffione <v.maffione@gmail.com>
> *Sent:* 29 November 2016 11:52:18
>
> *To:* Steven Crangle
> *Cc:* FreeBSD Net
> *Subject:* Re: Looking for some help with netmap/bhyve
>
> Hi Steven,
>   Thanks for your testing this in HEAD, good news to know that it works ok!
>
> I think there is not going to be much difference between HEAD and 11.0,
> because in the end bhyve code didn't really change (for the parts I
> touched), and you need to use the latest netmap version (github) anyway,
> irrespective of whether you are testing on 10.3, 11.0, head, etc. In other
> words, you would be testing approximately the same code. Anyway, if you
> happen to test 11.0 by chance please let me know.
>
> What kind of tests did you perform? netmap applications (e.g. pkt-gen), or
> netperf/iperf standard TCP/IP tools?
> Could you please share the performance number you got for configurations
> (A) and (B) (or just the one you tried)?
>
> I think it is useful to compare your results with the ones I collected
> here (see the performance evaluation section):
>
> https://wiki.freebsd.org/DevSummit/201609?action=
> AttachFile&do=view&target=20160923-freebsd-summit-ptnet.pdf
>
> Regarding the crashes, thanks for reporting, I would be nice if you could
> describe in more detail how you trigger them (with some higher likelyhood);
> also, compiling the kernel with debug symbols should help in understanding
> which part of the code is involved in the crash.
>
> Cheers,
>   Vincenzo
>
>
> 2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>
> :
>
>>  Hi Vincenzo!
>>
>>
>> Thank you so much for your help! With your instructions I've managed to
>> get a set of bhyves up and running with netmap working properly within
>> them! I chose to go with the recent version of head instead of 10.3.  I
>> will also try and build a version on 11.0 if I get chance!
>>
>>
>> I will make sure and ask any further questions on the github page for
>> netmap, but while I'm emailing, I've attached a text file containing a few
>> kernel page fault errors I've ran into. They don't happen repeatedly. They
>> seem to just happen randomly if I try to shut the process down and possibly
>> catch netmap in an incorrect state! Figured they might be useful to you. If
>> I figure out what the error is myself I will try and help out!
>>
>>
>> And thanks again for your help!
>>
>>
>> Kind Regards
>>
>>
>>
>>
>>
>>
>>
>> ------------------------------
>>
>>
>>
>> [image: Stream Logo]
>>
>>
>>
>>
>>
>> *Steven Crangle*
>>
>> Systems Developer | Stream Technologies | Glasgow, UK
>>
>> [image: http://www.stream-technologies.com/img/phone.png]
>>
>> +44 (0)844 800 8520
>>
>> |
>>
>> [image: http://www.stream-technologies.com/img/mouse.png]
>>
>> www.stream-technologies.com
>>
>>
>>
>>
>>
>> ------------------------------
>> *From:* Vincenzo Maffione <v.maffione@gmail.com>
>> *Sent:* 23 November 2016 08:33:11
>> *To:* Steven Crangle
>> *Cc:* FreeBSD Net
>> *Subject:* Re: Looking for some help with netmap/bhyve
>>
>>
>>
>> 2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com
>> >:
>>
>>>
>>> Hi,
>>>
>>>
>>> I've recently been trying to boot up several bhyves so that I can test
>>> netmap communication between instances. The problem is, no matter what
>>> configuration I try, the guest vm running in bhyve completely hangs and
>>> becomes unusable as soon as a packet hits the netmap interface. When
>>> testing with pkt-gen, the TX side successfully starts sending packets, but
>>> the RX side will reliable freeze with the only option being killing the
>>> bhyve process.
>>>
>>>
>>> The bhyve command used for the above test was:
>>>
>>>
>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/viper1vol
>>>   -s 3,virtio-net,tap0,mac=00:01:23:45:67:83 -s 4,virtio-net,tap4 -l
>>> com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/viper2vol
>>>   -s 3,virtio-net,tap1,mac=00:01:23:45:67:84 -s 4,virtio-net,tap5 -l
>>> com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>>
>>> For this test the host OS was FreeBSD-11.0-p3 and the guest OS was
>>> FreeBSD-11.0-p3.
>>>
>>> After failing to get this solution working, I pulled down the source
>>> from the following url and installed it on the host box:
>>>
>>> https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/
>>>
>>> I then ran the following commands to try and bring up the machines using
>>> the ptnetmap interface (the guest still running 11.0p3) :
>>>
>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/viper1vol
>>>   -s 2:0,virtio-net,tap0,mac=00:01:23:45:67:83 -s 2:1,ptnetmap-memdev
>>> -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/viper2vol
>>>   -s 2:0,virtio-net,tap1,mac=00:01:23:45:67:84 -s 2:1,ptnetmap-memdev
>>> -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>>
>>> With the above commands the vm's fail to boot with the following message:
>>>
>>> ptnet_init: failed to get ptnetmap
>>>
>>> Output in /var/log/messages seems to just show the ptnetmap driver
>>> allocating one RX/TX ring for each vm, while bringing the device up, the
>>> device then goes down and the above error is seen in the console.
>>>
>>> Is there something I'm doing wrong with regards to running netmap or
>>> ptnetmap within a bhyve? Any pointers in the right direction will be much
>>> appreciated!
>>>
>>> Kind Regards
>>>
>>> Steven
>>>
>>>
>> Hi Steven,
>>
>>   The code you are looking at is the final code released by my gsoc 2016
>> project at the end of August 2016. However, I've been working on that for a
>> while after the gsoc, so that code is not updated anymore. My modification
>> basically involves two subsystems: netmap and bhyve.
>>
>> The updates to netmap are already available in HEAD. The updates to bhyve
>> are not yet upstream, as we are in the process to review that with the
>> bhyve maintainers.
>>
>> Anyway, you need two sources to get the latest code:
>> 1) https://github.com/luigirizzo/netmap for the latest netmap code, that
>> you could also compile as an external kernel module.
>> 2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and
>> vmm.ko). You can use this as the host system. There are two branches here:
>> ptnet-10.3, and ptnet-head. My original code was developed under FreeBSD
>> 10.3, so a first possibility is to try this as the host system (using the
>> ptnet-10.3 branch). The other branch (ptnet-head) contains a porting of the
>> work to a recent version of HEAD. I would be very glad if you could test
>> the code also on FreeBSD 11.
>>
>> We support two combinations of bhyve networking with netmap:
>>
>>   (A) virtio-net + netmap: that is something like "-s
>> 2:0,virtio-net,vale0:0" in the bhyve command line.
>>   (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s
>> 2:2,ptnet,vale0:0" in the bhyve command line.
>>
>> so you may want to try A first (netmap backend in user-space, slower) and
>> then B (netmap backend in kernel-space, faster).
>>
>> Sorry about the confusion on the code repositories, I'll try also to
>> update the wiki page (and/or the gsoc svn repo) to reflect these updates.
>> It's perfectly ok for me to discuss these issues here in the ML, however
>> for more detailed/low-level discussion and support about problems you are
>> running into, feel free to open Github issues here
>> https://github.com/luigirizzo/netmap.
>>
>> Cheers,
>>   Vincenzo
>>
>>
>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ________________________________
>>>
>>>
>>>
>>> [Stream Logo]
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Steven Crangle
>>>
>>>
>>> Systems Developer | Stream Technologies | Glasgow, UK
>>>
>>>
>>> [http://www.stream-technologies.com/img/phone.png]
>>>
>>>
>>> +44 (0)844 800 8520
>>>
>>>
>>> |
>>>
>>>
>>> [http://www.stream-technologies.com/img/mouse.png]
>>>
>>>
>>> www.stream-technologies.com<http://www.stream-technologies.com/>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> freebsd-net@freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-net
>>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>>>
>>
>>
>>
>> --
>> Vincenzo Maffione
>>
>
>
>
> --
> Vincenzo Maffione
>



-- 
Vincenzo Maffione

From owner-freebsd-net@freebsd.org  Tue Nov 29 19:05:12 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4B852C5C7AD
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 19:05:12 +0000 (UTC)
 (envelope-from glebius@FreeBSD.org)
Received: from cell.glebi.us (glebi.us [96.95.210.25])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified))
 by mx1.freebsd.org (Postfix) with ESMTPS id 35DCD1891;
 Tue, 29 Nov 2016 19:05:11 +0000 (UTC)
 (envelope-from glebius@FreeBSD.org)
Received: from cell.glebi.us (localhost [127.0.0.1])
 by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id uATJ5AZx051425
 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO);
 Tue, 29 Nov 2016 11:05:10 -0800 (PST)
 (envelope-from glebius@FreeBSD.org)
Received: (from glebius@localhost)
 by cell.glebi.us (8.15.2/8.15.2/Submit) id uATJ5A3V051424;
 Tue, 29 Nov 2016 11:05:10 -0800 (PST)
 (envelope-from glebius@FreeBSD.org)
X-Authentication-Warning: cell.glebi.us: glebius set sender to
 glebius@FreeBSD.org using -f
Date: Tue, 29 Nov 2016 11:05:09 -0800
From: Gleb Smirnoff <glebius@FreeBSD.org>
To: hiren panchasara <hiren@strugglingcoder.info>
Cc: Jakub Palider <jpa@semihalf.com>, freebsd-net@freebsd.org,
 karels@FreeBSD.org
Subject: Re: FLOWTABLE aka TCP route caching panic
Message-ID: <20161129190509.GO27748@FreeBSD.org>
References: <CAL7QUyNntDmJuxfDxncxdXSM1rvR47kizA=WYwqeAtwrSCFLUg@mail.gmail.com>
 <20161128221033.GM55731@strugglingcoder.info>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20161128221033.GM55731@strugglingcoder.info>
User-Agent: Mutt/1.7.0 (2016-08-17)
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 19:05:12 -0000

On Mon, Nov 28, 2016 at 02:10:33PM -0800, hiren panchasara wrote:
h> > Hi,
h> > I have found that last month (19 Oct) the problem appeared on this list,
h> > and to my experience it persists, both on VM and bare metal installation
h> > (HEAD from yesterday). I looks that enabling FLOWTABLE option is the only
h> > source of this fault happening. It appears on our setup in 80% cases within
h> > one hour from boot up.
h> > From our debugging, it is caused by lock on DESTROYED lock. Did you find a
h> > solution to this problem?

Not yet.

I'm pretty sure that reverting my r307234 will fix your crashes. However, I still
believe that r307234 is a proper way of fixing things, not r300854 which just
plugged the problem in the nearest place to the crash. But as we all see r307234
is definitely missing some code path, which still allows for stale route to be
referenced.

-- 
Totus tuus, Glebius.

From owner-freebsd-net@freebsd.org  Tue Nov 29 22:08:37 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7DF84C5CA13
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 22:08:37 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 62B7A15FB
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 22:08:37 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uATM8b77044560
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 22:08:37 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 191700] [carp] [bridge] CARP does not work on interface which
 belongs to a bridge
Date: Tue, 29 Nov 2016 22:08:37 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-RELEASE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: girgen@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: Normal
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-191700-2472-KKCQzy5tqU@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-191700-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-191700-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 22:08:37 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D191700

Palle Girgensohn <girgen@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |girgen@FreeBSD.org

--- Comment #2 from Palle Girgensohn <girgen@FreeBSD.org> ---
Is this still a problem? Is it related to 200319?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Tue Nov 29 22:14:16 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 90A19C5CC16
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Tue, 29 Nov 2016 22:14:16 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 8042619F8
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 22:14:16 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uATMEGd9066293
 for <freebsd-net@FreeBSD.org>; Tue, 29 Nov 2016 22:14:16 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Tue, 29 Nov 2016 22:14:16 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: girgen@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-202510-2472-svzoLbEwGe@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Nov 2016 22:14:16 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

Palle Girgensohn <girgen@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |girgen@FreeBSD.org

--- Comment #4 from Palle Girgensohn <girgen@FreeBSD.org> ---
(In reply to dam from comment #3)

Any progress with getting consensus?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Wed Nov 30 08:50:58 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2726BC5DDD5
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 08:50:58 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 16D0119AB
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 08:50:58 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAU8ovvV079219
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 08:50:57 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Wed, 30 Nov 2016 08:50:57 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: dam@my.gd
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-202510-2472-lpFwmP3wyH@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 08:50:58 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

--- Comment #5 from dam@my.gd ---
(In reply to Palle Girgensohn from comment #4)


Hello Palle,


Ah there may have been a small misunderstanding here.

My statement was more meant as a "the patch is made by a novice to RC and
network.subr, likely needs review/consensus from devs".

It didn't mean I was going to seek consensus -from the MLs for example- .

I thought someone from net@ would take the ticket, review the patch and ens=
ure
it doesn't introduce any regression.

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Wed Nov 30 08:56:35 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 47160C5DF76
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 08:56:35 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 36D6D1D94
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 08:56:35 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAU8uYhh091053
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 08:56:35 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Wed, 30 Nov 2016 08:56:35 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: 
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: girgen@FreeBSD.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-202510-2472-h1LsfHtswo@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 08:56:35 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

--- Comment #6 from Palle Girgensohn <girgen@FreeBSD.org> ---
Ah, OK. Good. So, hopefully someone will nurture this patch then. Any taker=
s?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Wed Nov 30 10:13:11 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 264DEC5D96F
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 10:13:11 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 14F0D17A4
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 10:13:11 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uAUADAJX072311
 for <freebsd-net@FreeBSD.org>; Wed, 30 Nov 2016 10:13:10 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Wed, 30 Nov 2016 10:13:11 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: easy, needs-qa, patch
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: koobs@FreeBSD.org
X-Bugzilla-Status: Open
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: mfc-stable9? mfc-stable10? mfc-stable11?
X-Bugzilla-Changed-Fields: keywords flagtypes.name bug_status
Message-ID: <bug-202510-2472-VKge3rSpfY@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 10:13:11 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

Kubilay Kocak <koobs@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |easy, needs-qa, patch
              Flags|                            |mfc-stable9?,
                   |                            |mfc-stable10?,
                   |                            |mfc-stable11?
             Status|New                         |Open

--- Comment #7 from Kubilay Kocak <koobs@FreeBSD.org> ---
(In reply to dam from comment #3)

Presumably testing shows that both syntaxes now result in the correct
(expected) behaviour. Can you confirm?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Wed Nov 30 21:59:27 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id CC696C5E23B
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 21:59:27 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id AC50A1DB4
 for <freebsd-net@freebsd.org>; Wed, 30 Nov 2016 21:59:27 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id 6C5B634449; Wed, 30 Nov 2016 21:59:27 +0000 (UTC)
Date: Wed, 30 Nov 2016 21:59:27 +0000
To: freebsd-net@freebsd.org
From: "rstone (Ryan Stone)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <b923dc1ac44a59eafa7a59a66dd26c1f@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-cc>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFg/S78=
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 21:59:27 -0000

cnN0b25lIGFkZGVkIGEgc3Vic2NyaWJlcjogZnJlZWJzZC1uZXQtbGlzdC4KClJFVklTSU9OIERF
VEFJTAogIGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9EODY4NQoKRU1BSUwgUFJFRkVSRU5D
RVMKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvc2V0dGluZ3MvcGFuZWwvZW1haWxwcmVm
ZXJlbmNlcy8KClRvOiByc3RvbmUKQ2M6IGZyZWVic2QtbmV0LWxpc3QsIGVtYXN0ZQo=

From owner-freebsd-net@freebsd.org  Wed Nov 30 22:04:19 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8768DC5E5CA
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 22:04:19 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id 64BF6188A
 for <freebsd-net@freebsd.org>; Wed, 30 Nov 2016 22:04:19 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id 23C37348F4; Wed, 30 Nov 2016 22:04:19 +0000 (UTC)
Date: Wed, 30 Nov 2016 22:04:19 +0000
To: freebsd-net@freebsd.org
From: "hselasky (Hans Petter Selasky)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <c5cef132307e0f318d36e3b2367efa95@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-cc>, <differential-comment>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-Cc: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFg/TOM=
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 22:04:19 -0000

aHNlbGFza3kgYWRkZWQgaW5saW5lIGNvbW1lbnRzLgoKSU5MSU5FIENPTU1FTlRTCgo+IGJ1Zl9y
aW5nLmg6NzEKPiArCWlmIChici0+YnJfY29uc19oZWFkICE9IGJyLT5icl9wcm9kX2hlYWQpIHsK
PiArCQlmb3IgKGkgPSBici0+YnJfY29uc19oZWFkICsgMTsgaSAhPSBici0+YnJfcHJvZF9oZWFk
Owo+ICsJCSAgICBpID0gKChpICsgMSkgJiBici0+YnJfY29uc19tYXNrKSkKCnNob3VsZCAiYnIt
PmJyX2NvbnNfaGVhZCArIDEiIGJlIG1hc2tlZCBieSBici0+YnJfY29uc19tYXNrID8/CgpSRVZJ
U0lPTiBERVRBSUwKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDg2ODUKCkVNQUlMIFBS
RUZFUkVOQ0VTCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL3NldHRpbmdzL3BhbmVsL2Vt
YWlscHJlZmVyZW5jZXMvCgpUbzogcnN0b25lCkNjOiBoc2VsYXNreSwgZnJlZWJzZC1uZXQtbGlz
dCwgZW1hc3RlCg==

From owner-freebsd-net@freebsd.org  Wed Nov 30 23:41:40 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id BECA2C5EBAB
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 23:41:40 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id 792E614E3
 for <freebsd-net@freebsd.org>; Wed, 30 Nov 2016 23:41:40 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id 38DCF33BC4; Wed, 30 Nov 2016 23:41:40 +0000 (UTC)
Date: Wed, 30 Nov 2016 23:41:40 +0000
To: freebsd-net@freebsd.org
From: "rstone (Ryan Stone)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <26d1d780466ab064b7bd6bb0041f94be@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-updated>, <differential-comment>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-Cc: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFg/Y7Q=
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="b1_26d1d780466ab064b7bd6bb0041f94be"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 23:41:40 -0000


--b1_26d1d780466ab064b7bd6bb0041f94be
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: base64

cnN0b25lIHVwZGF0ZWQgdGhpcyByZXZpc2lvbiB0byBEaWZmIDIyNjMzLgpyc3RvbmUgYWRkZWQg
YSBjb21tZW50LgoKCiAgRW5zdXJlIHdlIGRvbid0IHdhbGsgb2ZmIHRoZSBlbmQgb2YgdGhlIHJp
bmcKCkNIQU5HRVMgU0lOQ0UgTEFTVCBVUERBVEUKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5v
cmcvRDg2ODU/dnM9MjI2MzEmaWQ9MjI2MzMKClJFVklTSU9OIERFVEFJTAogIGh0dHBzOi8vcmV2
aWV3cy5mcmVlYnNkLm9yZy9EODY4NQoKQUZGRUNURUQgRklMRVMKICBzeXMvc3lzL2J1Zl9yaW5n
LmgKCkNIQU5HRSBERVRBSUxTCgpkaWZmIC0tZ2l0IGEvc3lzL3N5cy9idWZfcmluZy5oIGIvc3lz
L3N5cy9idWZfcmluZy5oCi0tLSBhL3N5cy9zeXMvYnVmX3JpbmcuaAorKysgYi9zeXMvc3lzL2J1
Zl9yaW5nLmgKQEAgLTY3LDExICs2NywxMyBAQAogCXVpbnQzMl90IHByb2RfaGVhZCwgcHJvZF9u
ZXh0LCBjb25zX3RhaWw7CiAjaWZkZWYgREVCVUdfQlVGUklORwogCWludCBpOwotCWZvciAoaSA9
IGJyLT5icl9jb25zX2hlYWQ7IGkgIT0gYnItPmJyX3Byb2RfaGVhZDsKLQkgICAgIGkgPSAoKGkg
KyAxKSAmIGJyLT5icl9jb25zX21hc2spKQotCQlpZihici0+YnJfcmluZ1tpXSA9PSBidWYpCi0J
CQlwYW5pYygiYnVmPSVwIGFscmVhZHkgZW5xdWV1ZSBhdCAlZCBwcm9kPSVkIGNvbnM9JWQiLAot
CQkJICAgIGJ1ZiwgaSwgYnItPmJyX3Byb2RfdGFpbCwgYnItPmJyX2NvbnNfdGFpbCk7CisJaWYg
KGJyLT5icl9jb25zX2hlYWQgIT0gYnItPmJyX3Byb2RfaGVhZCkgeworCQlmb3IgKGkgPSAoYnIt
PmJyX2NvbnNfaGVhZCArIDEpICYgYnItPmJyX2NvbnNfbWFzazsgaSAhPSBici0+YnJfcHJvZF9o
ZWFkOworCQkgICAgaSA9ICgoaSArIDEpICYgYnItPmJyX2NvbnNfbWFzaykpCisJCQlpZihici0+
YnJfcmluZ1tpXSA9PSBidWYpCisJCQkJcGFuaWMoImJ1Zj0lcCBhbHJlYWR5IGVucXVldWUgYXQg
JWQgcHJvZD0lZCBjb25zPSVkIiwKKwkJCQkgICAgYnVmLCBpLCBici0+YnJfcHJvZF90YWlsLCBi
ci0+YnJfY29uc190YWlsKTsKKwl9CiAjZW5kaWYJCiAJY3JpdGljYWxfZW50ZXIoKTsKIAlkbyB7
CgoKCkVNQUlMIFBSRUZFUkVOQ0VTCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL3NldHRp
bmdzL3BhbmVsL2VtYWlscHJlZmVyZW5jZXMvCgpUbzogcnN0b25lCkNjOiBoc2VsYXNreSwgZnJl
ZWJzZC1uZXQtbGlzdCwgZW1hc3RlCg==

--b1_26d1d780466ab064b7bd6bb0041f94be
Content-Type: text/x-patch; charset=utf-8; name="D8685.22633.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D8685.22633.patch"

ZGlmZiAtLWdpdCBhL3N5cy9zeXMvYnVmX3JpbmcuaCBiL3N5cy9zeXMvYnVmX3JpbmcuaAotLS0g
YS9zeXMvc3lzL2J1Zl9yaW5nLmgKKysrIGIvc3lzL3N5cy9idWZfcmluZy5oCkBAIC02NywxMSAr
NjcsMTMgQEAKIAl1aW50MzJfdCBwcm9kX2hlYWQsIHByb2RfbmV4dCwgY29uc190YWlsOwogI2lm
ZGVmIERFQlVHX0JVRlJJTkcKIAlpbnQgaTsKLQlmb3IgKGkgPSBici0+YnJfY29uc19oZWFkOyBp
ICE9IGJyLT5icl9wcm9kX2hlYWQ7Ci0JICAgICBpID0gKChpICsgMSkgJiBici0+YnJfY29uc19t
YXNrKSkKLQkJaWYoYnItPmJyX3JpbmdbaV0gPT0gYnVmKQotCQkJcGFuaWMoImJ1Zj0lcCBhbHJl
YWR5IGVucXVldWUgYXQgJWQgcHJvZD0lZCBjb25zPSVkIiwKLQkJCSAgICBidWYsIGksIGJyLT5i
cl9wcm9kX3RhaWwsIGJyLT5icl9jb25zX3RhaWwpOworCWlmIChici0+YnJfY29uc19oZWFkICE9
IGJyLT5icl9wcm9kX2hlYWQpIHsKKwkJZm9yIChpID0gKGJyLT5icl9jb25zX2hlYWQgKyAxKSAm
IGJyLT5icl9jb25zX21hc2s7IGkgIT0gYnItPmJyX3Byb2RfaGVhZDsKKwkJICAgIGkgPSAoKGkg
KyAxKSAmIGJyLT5icl9jb25zX21hc2spKQorCQkJaWYoYnItPmJyX3JpbmdbaV0gPT0gYnVmKQor
CQkJCXBhbmljKCJidWY9JXAgYWxyZWFkeSBlbnF1ZXVlIGF0ICVkIHByb2Q9JWQgY29ucz0lZCIs
CisJCQkJICAgIGJ1ZiwgaSwgYnItPmJyX3Byb2RfdGFpbCwgYnItPmJyX2NvbnNfdGFpbCk7CisJ
fQogI2VuZGlmCQogCWNyaXRpY2FsX2VudGVyKCk7CiAJZG8gewoK


--b1_26d1d780466ab064b7bd6bb0041f94be--

From owner-freebsd-net@freebsd.org  Wed Nov 30 23:42:26 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 298F6C5ED0D
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Wed, 30 Nov 2016 23:42:26 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id 088A5165C
 for <freebsd-net@freebsd.org>; Wed, 30 Nov 2016 23:42:26 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id BDFF933D78; Wed, 30 Nov 2016 23:42:25 +0000 (UTC)
Date: Wed, 30 Nov 2016 23:42:25 +0000
To: freebsd-net@freebsd.org
From: "rstone (Ryan Stone)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <2f6c8087c004c67d3091cb6cd51f81ea@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-other>, <differential-comment>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-Cc: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFg/Y+E=
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 30 Nov 2016 23:42:26 -0000

cnN0b25lIG1hcmtlZCBhbiBpbmxpbmUgY29tbWVudCBhcyBkb25lLgpyc3RvbmUgYWRkZWQgaW5s
aW5lIGNvbW1lbnRzLgoKSU5MSU5FIENPTU1FTlRTCgo+IGhzZWxhc2t5IHdyb3RlIGluIGJ1Zl9y
aW5nLmg6NzEKPiBzaG91bGQgImJyLT5icl9jb25zX2hlYWQgKyAxIiBiZSBtYXNrZWQgYnkgYnIt
PmJyX2NvbnNfbWFzayA/PwoKQWJzb2x1dGVseSBjb3JyZWN0LiAgTmljZSBjYXRjaCwgdGhhbmsg
eW91CgpSRVZJU0lPTiBERVRBSUwKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDg2ODUK
CkVNQUlMIFBSRUZFUkVOQ0VTCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL3NldHRpbmdz
L3BhbmVsL2VtYWlscHJlZmVyZW5jZXMvCgpUbzogcnN0b25lCkNjOiBoc2VsYXNreSwgZnJlZWJz
ZC1uZXQtbGlzdCwgZW1hc3RlCg==

From owner-freebsd-net@freebsd.org  Thu Dec  1 04:37:16 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id E0EB6C5F704
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 04:37:16 +0000 (UTC) (envelope-from
 bounce-33521_HTML-358827075-55025-7292140-246@bounce.s7.exacttarget.com)
Received: from df70.mta.exacttarget.com (df70.mta.exacttarget.com
 [13.111.2.70])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id A904112EE
 for <freebsd-net@freebsd.org>; Thu,  1 Dec 2016 04:37:16 +0000 (UTC)
 (envelope-from
 bounce-33521_HTML-358827075-55025-7292140-246@bounce.s7.exacttarget.com)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=200608; d=breakbulk.com; 
 h=Message-ID:Date:Subject:From:Reply-To:To:MIME-Version:Content-Type:List-Unsubscribe:List-ID;
 i=promero@breakbulk.com; bh=uQro+/aAMl9ORk6e3eOi5ojIIiE=;
 b=Uq8D6WHAcUnyKsm4mw9/vNYxzGwJsc2WjK2OvLVtv+5VdvzlaaE8MI4qwa2snMK5hY4m0GJ2d2pj
 /xO4u7yNB2XM/AkvZjsCXOACWBORT0iBovWPT3ltPoumvjsO0OT4AbUDaqyYLBPjlzYzg6osagwo
 dOw/5Ula645N6/yfi7M=
Received: by df70.mta.exacttarget.com id h7ukga163hsf for
 <freebsd-net@freebsd.org>;
 Thu, 1 Dec 2016 04:37:23 +0000 (envelope-from
 <bounce-33521_HTML-358827075-55025-7292140-246@bounce.s7.exacttarget.com>)
X-Virus-Scanned: amavisd-new at orionsmtp-213.s7.exacttarget.com
Message-ID: <2374c315-897d-4812-b138-745d5ef42f69@atl1s07mta841.xt.local>
Date: Wed, 30 Nov 2016 22:37:15 -0600
Subject: Get Alerts for =?utf-8?Q?Asia=E2=80=99s?= Largest Event for Project
 Cargo & Breakbulk Industry
From: Patrick Romero <promero@breakbulk.com>
Reply-To: promero@breakbulk.com
To: freebsd-net@freebsd.org
MIME-Version: 1.0
X-Report-Abuse-To: abuse@pd25.com
X-CSA-Complaints: whitelistcomplaints@eco.de
x-job: 7292140_55025
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 04:37:17 -0000

Breakbulk China, Asia's largest exhibition and conference for the project c=
argo and breakbulk industry, 13-16 March in Shanghai=2E

Email not displaying correctly?

View it in your browser http://go=2Epardot=2Ecom/webmail/272542/109867/c9fe=
a37a3d9c14526b3540841abac1402a07b1ab828bb5c50c8e9fbc93bc8d22=2E

Logistics is complicated=2E

Finding new business doesn't have to be=2E

The movement of project cargo and breakbulk goods involves complex logistic=
s, months and even years of planning and multi-million dollar contracts=2E =
Yours is a complicated job and in this tight economy, finding new business =
is a top priority=2E We can help=2E 

>From 13-16 March 2017, Asia=E2=80=99s largest exhibition and conference for=
 the project cargo and breakbulk industry will bring together 6,000 industr=
y professionals, 200 exhibitors and more than 300 shippers at Breakbulk Chi=
na in Shanghai=2E

Hear from shippers, forwarders and specialized transport providers, as well=
 as astute analysts, as they share their experiences and identify areas of =
opportunity for new business and development=2E With a full exhibition hall=
, you will be able to fill the 2 days with appointments that meet your busi=
ness objectives=2E
Find out more about exhibitors, sponsors, speakers and VIP Shippers=2E

Sign Up for Alerts - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-28-=
92b/d8x/109867

Facebook - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5z6/d8z/10=
9867

Twitter - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5z8/d92/109=
867

LinkedIn - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5zb/d94/10=
9867

YouTube - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5zd/d96/109=
867

SoundCloud - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5zg/d98/=
109867

Instagram - http://go=2Epardot=2Ecom/e/272542/l-272542-2016-11-23-5zj/d9b/1=
09867

Copyright =C2=A9 2016, all rights reserved=2E

Our mailing address is:


Breakbulk Events & Media
2 Penn Plaza 12th Floor
Newark, NJ 07105


unsubscribe from all emails

http://go=2Epardot=2Ecom/unsubscribe/u/272542/c9fea37a3d9c14526b3540841abac=
1402a07b1ab828bb5c50c8e9fbc93bc8d22/109867

=20=20



From owner-freebsd-net@freebsd.org  Thu Dec  1 08:23:52 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6670CC60CB9
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 08:23:52 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id 44ECB11EE
 for <freebsd-net@freebsd.org>; Thu,  1 Dec 2016 08:23:52 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id 04A7A1373; Thu,  1 Dec 2016 08:23:52 +0000 (UTC)
Date: Thu, 1 Dec 2016 08:23:52 +0000
To: freebsd-net@freebsd.org
From: "hselasky (Hans Petter Selasky)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <63cf8b5815300199d51e9cecba9aad0e@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-other>, <differential-reviewers>,
 <differential-comment>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-To: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFg/3hg=
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 08:23:52 -0000

aHNlbGFza3kgYWNjZXB0ZWQgdGhpcyByZXZpc2lvbi4KaHNlbGFza3kgYWRkZWQgYSByZXZpZXdl
cjogaHNlbGFza3kuCmhzZWxhc2t5IGFkZGVkIGEgY29tbWVudC4KVGhpcyByZXZpc2lvbiBoYXMg
YSBwb3NpdGl2ZSByZXZpZXcuCgoKICBMb29rcyBnb29kIHRvIG1lLgoKUkVWSVNJT04gREVUQUlM
CiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL0Q4Njg1CgpFTUFJTCBQUkVGRVJFTkNFUwog
IGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9zZXR0aW5ncy9wYW5lbC9lbWFpbHByZWZlcmVu
Y2VzLwoKVG86IHJzdG9uZSwgaHNlbGFza3kKQ2M6IGhzZWxhc2t5LCBmcmVlYnNkLW5ldC1saXN0
LCBlbWFzdGUK

From owner-freebsd-net@freebsd.org  Thu Dec  1 09:09:56 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 69119C6060D
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 09:09:56 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 5822D154A
 for <freebsd-net@FreeBSD.org>; Thu,  1 Dec 2016 09:09:56 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB199t2v096026
 for <freebsd-net@FreeBSD.org>; Thu, 1 Dec 2016 09:09:56 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Thu, 01 Dec 2016 09:09:56 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: easy, needs-qa, patch
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: dam@my.gd
X-Bugzilla-Status: Open
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: mfc-stable9? mfc-stable10? mfc-stable11?
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-202510-2472-RoBtdS3rYF@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 09:09:56 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

--- Comment #8 from dam@my.gd ---
(In reply to Kubilay Kocak from comment #7)

svnup'ing 10-STABLE now, applying patch, and getting back to you.

I'm afraid our company has neither 9.x nor 11.x available for testing again=
st
these branches though.

Anyone in a position to test against these ?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Thu Dec  1 16:11:16 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17DA0C6070B
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 16:11:16 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id F116C1146
 for <freebsd-net@FreeBSD.org>; Thu,  1 Dec 2016 16:11:15 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB1GBFBS009868
 for <freebsd-net@FreeBSD.org>; Thu, 1 Dec 2016 16:11:15 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 202510] [CARP] advertisements sourced from CARP IP cause double
 MASTER situations
Date: Thu, 01 Dec 2016 16:11:16 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.0-STABLE
X-Bugzilla-Keywords: easy, needs-qa, patch
X-Bugzilla-Severity: Affects Many People
X-Bugzilla-Who: dam@my.gd
X-Bugzilla-Status: Open
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: mfc-stable9? mfc-stable10? mfc-stable11?
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-202510-2472-Pa38oMqsct@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-202510-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 16:11:16 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D202510

--- Comment #9 from dam@my.gd ---
(In reply to Kubilay Kocak from comment #7)


Confirming behaviour on 10-STABLE (r309356) with my provided patch.




patch
=3D=3D
root@bsd10:/usr/src/etc # patch < /tmp/network.subr.patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- network.subr.orig  2015-08-24 14:10:15.188579000 +0000
|+++ network.subr.patched       2015-08-24 14:10:22.298347000 +0000
--------------------------
File to patch: network.subr
Patching file network.subr using Plan A...
Hunk #1 succeeded at 1091.
Hunk #2 succeeded at 1144.
done




rc.conf
=3D=3D
ifconfig_vtnet0=3D"inet 46.[snip].253/25 -rxcsum -txcsum -tso -vlanhwtso
-vlanhwcsum -vlanhwtag up"
ipv4_addrs_vtnet0=3D"1.1.1.1/32"
ifconfig_vtnet0_alias0=3D"1.1.1.2/32"
ifconfig_vtnet0_alias1=3D"vhid 101 pass test advskew 50 1.1.1.3/32"




ifconfig
=3D=3D
root@bsd10:~ # ifconfig
vtnet0: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric=
 0 mtu
1500
=20=20=20=20=20=20=20
options=3D6804a8<VLAN_MTU,JUMBO_MTU,VLAN_HWCSUM,LRO,LINKSTATE,RXCSUM_IPV6,T=
XCSUM_IPV6>
        ether f2:53:d5:fc:49:8a
        inet 46.[snip].253 netmask 0xffffff80 broadcast 46.182.42.255=20
        inet 1.1.1.1 netmask 0xffffffff broadcast 1.1.1.1=20
        inet 1.1.1.2 netmask 0xffffffff broadcast 1.1.1.2=20
        inet 1.1.1.3 netmask 0xffffffff broadcast 1.1.1.3 vhid 101=20
        nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet 10Gbase-T <full-duplex>
        status: active
        carp: MASTER vhid 101 advbase 1 advskew 50




tcpdump
=3D=3D
root@bsd10:~ # tcpdump -ni vtnet0 vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vtnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:04:27.942147 IP 46.[snip].253 > 224.0.0.18: VRRPv2, Advertisement, vrid =
101,
prio 50, authtype none, intvl 1s, length 36
16:04:29.156181 IP 46.[snip].253 > 224.0.0.18: VRRPv2, Advertisement, vrid =
101,
prio 50, authtype none, intvl 1s, length 36
16:04:30.358144 IP 46.[snip].253 > 224.0.0.18: VRRPv2, Advertisement, vrid =
101,
prio 50, authtype none, intvl 1s, length 36

     ^---- sourced with physical IP despite the use of ipv4_addrs_vtnet0



Can anyone confirm 9 and 11 branches ?

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Thu Dec  1 17:53:10 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D0F7C61473
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 17:53:10 +0000 (UTC)
 (envelope-from sbruno@freebsd.org)
Received: from mail.ignoranthack.me (ignoranthack.me [199.102.79.106])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 6D8B21AFC
 for <freebsd-net@freebsd.org>; Thu,  1 Dec 2016 17:53:09 +0000 (UTC)
 (envelope-from sbruno@freebsd.org)
Received: from [192.168.0.6] (97-123-24-15.albq.qwest.net [97.123.24.15])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 (Authenticated sender: sbruno@ignoranthack.me)
 by mail.ignoranthack.me (Postfix) with ESMTPSA id AEC2F19289A
 for <freebsd-net@freebsd.org>; Thu,  1 Dec 2016 17:53:08 +0000 (UTC)
Subject: Re: Intel 82567V-2 using em driver, no carrier or constant link-state
 changes with 1000BaseT
To: freebsd-net@freebsd.org
References: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
From: Sean Bruno <sbruno@freebsd.org>
Message-ID: <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
Date: Thu, 1 Dec 2016 10:53:04 -0700
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101
 Thunderbird/45.4.0
MIME-Version: 1.0
In-Reply-To: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
Content-Type: multipart/signed; micalg=pgp-sha512;
 protocol="application/pgp-signature";
 boundary="PFOCGjnjAi1KG6vQUNom3O89XpU5GrkQb"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 17:53:10 -0000

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--PFOCGjnjAi1KG6vQUNom3O89XpU5GrkQb
Content-Type: multipart/mixed; boundary="4pboO0tTiRdMGiP3bvgc6qU9xQ1x0GLH6";
 protected-headers="v1"
From: Sean Bruno <sbruno@freebsd.org>
To: freebsd-net@freebsd.org
Message-ID: <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
Subject: Re: Intel 82567V-2 using em driver, no carrier or constant link-state
 changes with 1000BaseT
References: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
In-Reply-To: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>

--4pboO0tTiRdMGiP3bvgc6qU9xQ1x0GLH6
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable



On 11/27/16 12:40, Michael Knap wrote:
> Preface: I've been a long-time linux user, and I am enjoying the BSD
> experience. For the following scenario, I have reproduced these results=

> with 3 or more cables which are known to be good.
>=20
> Using FreeBSD 10.3 Stable :
> FreeBSD 10.3-STABLE #0 r295946+07c41cd(9.10-STABLE): Wed Nov  9 00:19:2=
5
> UTC 2016     root@gauntlet
> :/freenas-9.10-releng/_BE/objs/freenas-9.10-releng/_BE/os/sys/FreeNAS.a=
md64
>=20
> Also, this isn't a NIC, per se, as it is onboard, but I will call it a =
NIC
> or card or whatever.
>=20
> Using em driver, though I don't know how to determine a driver version =
(if
> there is such a thing).
>=20
> Basically, the card will not push gigabit, though it will work with
> 100BaseTX. However, there seems to be more than just that as the chip-s=
et
> is advertised as a gigabit Ethernet controller.
>=20
> When connected to a 100BaseTX switch, everything is good. Leaving it in=

> autodetect mode, and connecting to a 1000baseTX switch (with good CAT6
> cable), the card's link state oscillates from link up and link down:
>=20
> Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
> Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
> Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN
>=20
> If I issue  ifconfig em0 media 100baseTX mediaopt full-duplex, then I h=
ave
> no carrier.
> Also, ifconfig em0 media 1000baseT gives no carrier.
> However, if I ifconfig em0 media 10baseT, then I can get an active link=
=2E
>=20
> Interestingly, man em(4) does not claim to support this chipset, though=
 it
> seems that this chipset was once supported in either e1000 or igb for o=
lder
> freeBSD versions?
>=20
> Now, at least from the driver's POV, I should be able to handle gigabit=
, as
>=20
> ifconfig -m em0
> em0: flags=3D8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 150=
0
> options=3D4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,=
WOL_MAGIC,VLAN_HWTSO>
> capabilities=3D5399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,=
TSO4,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO>
> ether 00:25:11:59:d4:be
> inet 10.42.0.111 netmask 0xffffff00 broadcast 10.42.0.255
> nd6 options=3D9<PERFORMNUD,IFDISABLED>
> media: Ethernet 10baseT/UTP (10baseT/UTP <half-duplex>)
> status: active
> supported media:
> media autoselect
> media 1000baseT
> media 1000baseT mediaopt full-duplex
> media 100baseTX mediaopt full-duplex
> media 100baseTX
> media 10baseT/UTP mediaopt full-duplex
> media 10baseT/UTP
>=20
> However when connected to gigabit switch, any explicit declaration of m=
edia
> fails except for 10baseT, even the autoselect declaration fails with no=

> carrier.
>=20
> But remember, 100baseTX works out of the box on a 100Mbit switch.
>=20
> So, those more experienced, can you shed some light on what is happenin=
g?
> I'm especially interested in the man em(4) result even though the chips=
et
> has been supported in the past, and intel does provide drivers for this=

> chipset, though I'm not sure if I could compile them or not. BTW, my
> switches are only consumer grade, unmanaged. Is that where I'm stuck?
>=20
> Thanks for such an awesome license, operating system, and community.
> _______________________________________________



Just so I know which device this specifically is, can you post "pciconf
-lvbc" to a pastebin or dpaste type site so we can review which driver
this should be using.  Linux seems to use igb(4) for this instead of em(4=
).

sean


--4pboO0tTiRdMGiP3bvgc6qU9xQ1x0GLH6--

--PFOCGjnjAi1KG6vQUNom3O89XpU5GrkQb
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQF8BAEBCgBmBQJYQGOAXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRCQUFENDYzMkU3MTIxREU4RDIwOTk3REQx
MjAxRUZDQTFFNzI3RTY0AAoJEBIB78oecn5kz74IAK6IOD9D4gy/3DIQUPj0S4z7
SiCk53QF0SSoITCSptF1XibqvlPGAYdJnHKtZe4l+mKYs5gDZx+9WVVdzWV8rYqw
BukK4OC4qepdvl+7XuFib+cHSy64XCoAEs/NLk8is/2kx7xcpLceWXLsE59cmHOP
+JJ35h/E4nx3YP0BOo6Mij0cThDARskep9f4YBruou9D5OeUwACdATvWmFnCle2E
7d6PNcSoEsHpdflQIPNs48HCGtZ+OamoSv4hL4nv+Cr3EMsInvNw1GFltUiG2GDH
sZgGaDZ3oJSNF6qet2aryS0F/kbA2tqxOYMdv6I2a5UqlFdmKy5rHRYV5kw5lJM=
=IIen
-----END PGP SIGNATURE-----

--PFOCGjnjAi1KG6vQUNom3O89XpU5GrkQb--

From owner-freebsd-net@freebsd.org  Thu Dec  1 20:08:23 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id CCB72C61412
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 20:08:23 +0000 (UTC)
 (envelope-from jeffrey.e.pieper@intel.com)
Received: from mga09.intel.com (mga09.intel.com [134.134.136.24])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client CN "ORSMGA102.jf.intel.com",
 Issuer "Intel External Issuing CA 6A" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 9C7B9147A;
 Thu,  1 Dec 2016 20:08:23 +0000 (UTC)
 (envelope-from jeffrey.e.pieper@intel.com)
Received: from orsmga002.jf.intel.com ([10.7.209.21])
 by orsmga102.jf.intel.com with ESMTP; 01 Dec 2016 12:07:14 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.33,726,1477983600"; d="scan'208";a="12333394"
Received: from orsmsx104.amr.corp.intel.com ([10.22.225.131])
 by orsmga002.jf.intel.com with ESMTP; 01 Dec 2016 12:07:14 -0800
Received: from orsmsx162.amr.corp.intel.com (10.22.240.85) by
 ORSMSX104.amr.corp.intel.com (10.22.225.131) with Microsoft SMTP Server (TLS)
 id 14.3.248.2; Thu, 1 Dec 2016 12:07:14 -0800
Received: from orsmsx111.amr.corp.intel.com ([169.254.12.190]) by
 ORSMSX162.amr.corp.intel.com ([10.22.240.85]) with mapi id 14.03.0248.002;
 Thu, 1 Dec 2016 12:07:09 -0800
From: "Pieper, Jeffrey E" <jeffrey.e.pieper@intel.com>
To: Sean Bruno <sbruno@freebsd.org>, "freebsd-net@freebsd.org"
 <freebsd-net@freebsd.org>
Subject: RE: Intel 82567V-2 using em driver, no carrier or constant
 link-state changes with 1000BaseT
Thread-Topic: Intel 82567V-2 using em driver, no carrier or constant
 link-state changes with 1000BaseT
Thread-Index: AQHSS/vQj5igiKbtkUqEOjpdei6LvKDzhGig
Date: Thu, 1 Dec 2016 20:07:08 +0000
Message-ID: <2A35EA60C3C77D438915767F458D656883995CC2@ORSMSX111.amr.corp.intel.com>
References: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
 <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
In-Reply-To: <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNWRjNzk1YzgtNjQ1OC00MTRlLWI4MzctYjRmMjAxYTI3YTUyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IkIyRXhIZCtid1dGNklPZlp3T1g2andRS290bUFZM2VOZEdrdXY1QkxSdDQ9In0=
x-ctpclassification: CTP_IC
x-originating-ip: [10.22.254.138]
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 20:08:23 -0000



-----Original Message-----
From: owner-freebsd-net@freebsd.org [mailto:owner-freebsd-net@freebsd.org] =
On Behalf Of Sean Bruno
Sent: Thursday, December 01, 2016 9:53 AM
To: freebsd-net@freebsd.org
Subject: Re: Intel 82567V-2 using em driver, no carrier or constant link-st=
ate changes with 1000BaseT



On 11/27/16 12:40, Michael Knap wrote:
> Preface: I've been a long-time linux user, and I am enjoying the BSD
> experience. For the following scenario, I have reproduced these results
> with 3 or more cables which are known to be good.
>=20
> Using FreeBSD 10.3 Stable :
> FreeBSD 10.3-STABLE #0 r295946+07c41cd(9.10-STABLE): Wed Nov  9 00:19:25
> UTC 2016     root@gauntlet
> :/freenas-9.10-releng/_BE/objs/freenas-9.10-releng/_BE/os/sys/FreeNAS.amd=
64
>=20
> Also, this isn't a NIC, per se, as it is onboard, but I will call it a NI=
C
> or card or whatever.
>=20
> Using em driver, though I don't know how to determine a driver version (i=
f
> there is such a thing).
>=20
> Basically, the card will not push gigabit, though it will work with
> 100BaseTX. However, there seems to be more than just that as the chip-set
> is advertised as a gigabit Ethernet controller.
>=20
> When connected to a 100BaseTX switch, everything is good. Leaving it in
> autodetect mode, and connecting to a 1000baseTX switch (with good CAT6
> cable), the card's link state oscillates from link up and link down:
>=20
> Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:38 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:41 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:41 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:55 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:56 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:58 freenas kernel: em0: link state changed to UP
> Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:07:59 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
> Nov 27 13:08:01 freenas kernel: em0: link state changed to UP
> Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN
> Nov 27 13:08:02 freenas kernel: em0: link state changed to DOWN
>=20
> If I issue  ifconfig em0 media 100baseTX mediaopt full-duplex, then I hav=
e
> no carrier.
> Also, ifconfig em0 media 1000baseT gives no carrier.
> However, if I ifconfig em0 media 10baseT, then I can get an active link.
>=20
> Interestingly, man em(4) does not claim to support this chipset, though i=
t
> seems that this chipset was once supported in either e1000 or igb for old=
er
> freeBSD versions?
>=20
> Now, at least from the driver's POV, I should be able to handle gigabit, =
as
>=20
> ifconfig -m em0
> em0: flags=3D8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
> options=3D4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WO=
L_MAGIC,VLAN_HWTSO>
> capabilities=3D5399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TS=
O4,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO>
> ether 00:25:11:59:d4:be
> inet 10.42.0.111 netmask 0xffffff00 broadcast 10.42.0.255
> nd6 options=3D9<PERFORMNUD,IFDISABLED>
> media: Ethernet 10baseT/UTP (10baseT/UTP <half-duplex>)
> status: active
> supported media:
> media autoselect
> media 1000baseT
> media 1000baseT mediaopt full-duplex
> media 100baseTX mediaopt full-duplex
> media 100baseTX
> media 10baseT/UTP mediaopt full-duplex
> media 10baseT/UTP
>=20
> However when connected to gigabit switch, any explicit declaration of med=
ia
> fails except for 10baseT, even the autoselect declaration fails with no
> carrier.
>=20
> But remember, 100baseTX works out of the box on a 100Mbit switch.
>=20
> So, those more experienced, can you shed some light on what is happening?
> I'm especially interested in the man em(4) result even though the chipset
> has been supported in the past, and intel does provide drivers for this
> chipset, though I'm not sure if I could compile them or not. BTW, my
> switches are only consumer grade, unmanaged. Is that where I'm stuck?
>=20
> Thanks for such an awesome license, operating system, and community.
> _______________________________________________



>Just so I know which device this specifically is, can you post "pciconf
>-lvbc" to a pastebin or dpaste type site so we can review which driver
>this should be using.  Linux seems to use igb(4) for this instead of em(4)=
.
>
>sean

Sean,

This is a client (em) part, and should be 10CE (Boazman/Boulder Creek).

Jeff

From owner-freebsd-net@freebsd.org  Thu Dec  1 21:08:51 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3BAF6C61294
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Thu,  1 Dec 2016 21:08:51 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org
 [IPv6:2610:1c1:1:607c::16:b])
 by mx1.freebsd.org (Postfix) with ESMTP id F209B1474
 for <freebsd-net@freebsd.org>; Thu,  1 Dec 2016 21:08:50 +0000 (UTC)
 (envelope-from daemon-user@freebsd.org)
Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346)
 id B140315A2; Thu,  1 Dec 2016 21:08:50 +0000 (UTC)
Date: Thu, 1 Dec 2016 21:08:50 +0000
To: freebsd-net@freebsd.org
From: "rstone (Ryan Stone)" <phabric-noreply@FreeBSD.org>
Reply-to: D8685+325+e4f2116f95066c9b@reviews.freebsd.org
Subject: [Differential] D8685: Fix a false positive in a buf_ring assert
Message-ID: <23e98bd4e5fac48d220a1f5375bb3309@localhost.localdomain>
X-Priority: 3
X-Phabricator-Sent-This-Message: Yes
X-Mail-Transport-Agent: MetaMTA
X-Auto-Response-Suppress: All
X-Phabricator-Mail-Tags: <differential-updated>, <differential-other>,
 <differential-committed>
Thread-Topic: D8685: Fix a false positive in a buf_ring assert
X-Herald-Rules: none
X-Phabricator-To: <PHID-USER-vtlauz4uwe46gac4fu2j>
X-Phabricator-To: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-mdwvnzzsrozqcmzhmbra>
X-Phabricator-Cc: <PHID-USER-dyyyzfp34mimhzvg33tk>
X-Phabricator-Cc: <PHID-USER-axkijn4pfdxlezgbnt7g>
Precedence: bulk
In-Reply-To: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
References: <differential-rev-PHID-DREV-7bpwu3y3lzsbz4zoj3jc-req@FreeBSD.org>
Thread-Index: MDEzOTI4NDRhNGFhM2E4ZDMxNzFmNTdkMjdlIFhAkWI=
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="b1_23e98bd4e5fac48d220a1f5375bb3309"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 21:08:51 -0000


--b1_23e98bd4e5fac48d220a1f5375bb3309
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: base64

VGhpcyByZXZpc2lvbiB3YXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNv
bW1pdHRlZCBjaGFuZ2VzLgpyc3RvbmUgbWFya2VkIGFuIGlubGluZSBjb21tZW50IGFzIGRvbmUu
CkNsb3NlZCBieSBjb21taXQgclMzMDkzNzI6IEZpeCBhIGZhbHNlIHBvc2l0aXZlIGluIGEgYnVm
X3JpbmcgYXNzZXJ0IChhdXRob3JlZCBieSByc3RvbmUpLgoKQ0hBTkdFRCBQUklPUiBUTyBDT01N
SVQKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDg2ODU/dnM9MjI2MzMmaWQ9MjI2NTEj
dG9jCgpSRVBPU0lUT1JZCiAgclMgRnJlZUJTRCBzcmMgcmVwb3NpdG9yeQoKQ0hBTkdFUyBTSU5D
RSBMQVNUIFVQREFURQogIGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9EODY4NT92cz0yMjYz
MyZpZD0yMjY1MQoKUkVWSVNJT04gREVUQUlMCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3Jn
L0Q4Njg1CgpBRkZFQ1RFRCBGSUxFUwogIGhlYWQvc3lzL3N5cy9idWZfcmluZy5oCgpDSEFOR0Ug
REVUQUlMUwoKZGlmZiAtLWdpdCBhL2hlYWQvc3lzL3N5cy9idWZfcmluZy5oIGIvaGVhZC9zeXMv
c3lzL2J1Zl9yaW5nLmgKLS0tIGEvaGVhZC9zeXMvc3lzL2J1Zl9yaW5nLmgKKysrIGIvaGVhZC9z
eXMvc3lzL2J1Zl9yaW5nLmgKQEAgLTY3LDExICs2NywxMyBAQAogCXVpbnQzMl90IHByb2RfaGVh
ZCwgcHJvZF9uZXh0LCBjb25zX3RhaWw7CiAjaWZkZWYgREVCVUdfQlVGUklORwogCWludCBpOwot
CWZvciAoaSA9IGJyLT5icl9jb25zX2hlYWQ7IGkgIT0gYnItPmJyX3Byb2RfaGVhZDsKLQkgICAg
IGkgPSAoKGkgKyAxKSAmIGJyLT5icl9jb25zX21hc2spKQotCQlpZihici0+YnJfcmluZ1tpXSA9
PSBidWYpCi0JCQlwYW5pYygiYnVmPSVwIGFscmVhZHkgZW5xdWV1ZSBhdCAlZCBwcm9kPSVkIGNv
bnM9JWQiLAotCQkJICAgIGJ1ZiwgaSwgYnItPmJyX3Byb2RfdGFpbCwgYnItPmJyX2NvbnNfdGFp
bCk7CisJaWYgKGJyLT5icl9jb25zX2hlYWQgIT0gYnItPmJyX3Byb2RfaGVhZCkgeworCQlmb3Ig
KGkgPSAoYnItPmJyX2NvbnNfaGVhZCArIDEpICYgYnItPmJyX2NvbnNfbWFzazsgaSAhPSBici0+
YnJfcHJvZF9oZWFkOworCQkgICAgaSA9ICgoaSArIDEpICYgYnItPmJyX2NvbnNfbWFzaykpCisJ
CQlpZihici0+YnJfcmluZ1tpXSA9PSBidWYpCisJCQkJcGFuaWMoImJ1Zj0lcCBhbHJlYWR5IGVu
cXVldWUgYXQgJWQgcHJvZD0lZCBjb25zPSVkIiwKKwkJCQkgICAgYnVmLCBpLCBici0+YnJfcHJv
ZF90YWlsLCBici0+YnJfY29uc190YWlsKTsKKwl9CiAjZW5kaWYJCiAJY3JpdGljYWxfZW50ZXIo
KTsKIAlkbyB7CgoKCkVNQUlMIFBSRUZFUkVOQ0VTCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qu
b3JnL3NldHRpbmdzL3BhbmVsL2VtYWlscHJlZmVyZW5jZXMvCgpUbzogcnN0b25lLCBoc2VsYXNr
eQpDYzogaHNlbGFza3ksIGZyZWVic2QtbmV0LWxpc3QsIGVtYXN0ZQo=

--b1_23e98bd4e5fac48d220a1f5375bb3309
Content-Type: text/x-patch; charset=utf-8; name="D8685.22651.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D8685.22651.patch"

ZGlmZiAtLWdpdCBhL2hlYWQvc3lzL3N5cy9idWZfcmluZy5oIGIvaGVhZC9zeXMvc3lzL2J1Zl9y
aW5nLmgKLS0tIGEvaGVhZC9zeXMvc3lzL2J1Zl9yaW5nLmgKKysrIGIvaGVhZC9zeXMvc3lzL2J1
Zl9yaW5nLmgKQEAgLTY3LDExICs2NywxMyBAQAogCXVpbnQzMl90IHByb2RfaGVhZCwgcHJvZF9u
ZXh0LCBjb25zX3RhaWw7CiAjaWZkZWYgREVCVUdfQlVGUklORwogCWludCBpOwotCWZvciAoaSA9
IGJyLT5icl9jb25zX2hlYWQ7IGkgIT0gYnItPmJyX3Byb2RfaGVhZDsKLQkgICAgIGkgPSAoKGkg
KyAxKSAmIGJyLT5icl9jb25zX21hc2spKQotCQlpZihici0+YnJfcmluZ1tpXSA9PSBidWYpCi0J
CQlwYW5pYygiYnVmPSVwIGFscmVhZHkgZW5xdWV1ZSBhdCAlZCBwcm9kPSVkIGNvbnM9JWQiLAot
CQkJICAgIGJ1ZiwgaSwgYnItPmJyX3Byb2RfdGFpbCwgYnItPmJyX2NvbnNfdGFpbCk7CisJaWYg
KGJyLT5icl9jb25zX2hlYWQgIT0gYnItPmJyX3Byb2RfaGVhZCkgeworCQlmb3IgKGkgPSAoYnIt
PmJyX2NvbnNfaGVhZCArIDEpICYgYnItPmJyX2NvbnNfbWFzazsgaSAhPSBici0+YnJfcHJvZF9o
ZWFkOworCQkgICAgaSA9ICgoaSArIDEpICYgYnItPmJyX2NvbnNfbWFzaykpCisJCQlpZihici0+
YnJfcmluZ1tpXSA9PSBidWYpCisJCQkJcGFuaWMoImJ1Zj0lcCBhbHJlYWR5IGVucXVldWUgYXQg
JWQgcHJvZD0lZCBjb25zPSVkIiwKKwkJCQkgICAgYnVmLCBpLCBici0+YnJfcHJvZF90YWlsLCBi
ci0+YnJfY29uc190YWlsKTsKKwl9CiAjZW5kaWYJCiAJY3JpdGljYWxfZW50ZXIoKTsKIAlkbyB7
Cgo=


--b1_23e98bd4e5fac48d220a1f5375bb3309--

From owner-freebsd-net@freebsd.org  Thu Dec  1 23:56:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id BBE92C6246E;
 Thu,  1 Dec 2016 23:56:00 +0000 (UTC)
 (envelope-from jordancaraballo87@gmail.com)
Received: from mail-qk0-x241.google.com (mail-qk0-x241.google.com
 [IPv6:2607:f8b0:400d:c09::241])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 6E23C175B;
 Thu,  1 Dec 2016 23:55:57 +0000 (UTC)
 (envelope-from jordancaraballo87@gmail.com)
Received: by mail-qk0-x241.google.com with SMTP id x190so28498601qkb.0;
 Thu, 01 Dec 2016 15:55:57 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=to:from:subject:message-id:date:user-agent:mime-version
 :content-transfer-encoding;
 bh=qjaNJl1tNUlvHHPfgb6DniaPFb0SeNfUaHLVG4mocFM=;
 b=W7MVe7/JGx3+Ww+vElPNIOBEa+1q4XsNRUkfBUtMYKI2AybK9sKlYCwiG2q5m8+Nnq
 6HrVYfXd1TcMtrr9cZLWHX8LY2doKmH+55FqAYeswqdsiwlk29GSeB0VOd0f0Dp6KFuB
 qcYF4Xa19L+ZD8hfjc0zEMK6tPXNtKSpksTFytTm6qGU0f4cpebYpaYwNkY9kCFep6le
 iqEzlXa7P0bUyRGVPqJd9/ajSGf6qp9J/U3kbIgGnpSIXiOz6bjpDVxdxSWpvzM3caN9
 Ujth4gBevxtGBZsvDJpirmFrohsY4td3BXECRxRysP1yAay52EW5EecIkNO7KPvTzzaX
 BZGQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:to:from:subject:message-id:date:user-agent
 :mime-version:content-transfer-encoding;
 bh=qjaNJl1tNUlvHHPfgb6DniaPFb0SeNfUaHLVG4mocFM=;
 b=NeFm0S2xBNw/4DcIxLgdXzJbH0rzt/A1yxzSIskJQ3fMjp+byiIS3QiB0ogncwMi38
 abgxjaX5+yGfUYSIZbWM7PBUA2/xB83JT7hkiiGK5BirxUusxq8oEox+ZghfjYn5pB+G
 8IVtdn7qeezuI2IlCtzvU+RiU1fqs4CmX1XPaO32zwBvFe823nwVlcJHrCjSD/Umsmdv
 MCcgot0BqxbnirzY+EMn1q9UTJfGEJ1G00v5VZWiSGyAC/hehJJZ/ZIS0rdS8yk5cI8f
 8dDLkURGaoi36PHKAF+ozusFTKRb0WkDj0DVJlC5XJ0JIhJXoNxi8URWLktBRUkJm+aZ
 bkYg==
X-Gm-Message-State: AKaTC00Q3yjMss+vj364rtdOalsl4KR26aC5cWc16UaiHO/pmNSZiTDhNEADrDfqM+C32Q==
X-Received: by 10.55.116.135 with SMTP id p129mr40035180qkc.54.1480636556636; 
 Thu, 01 Dec 2016 15:55:56 -0800 (PST)
Received: from [192.168.1.5] (pool-96-241-162-208.washdc.fios.verizon.net.
 [96.241.162.208])
 by smtp.gmail.com with ESMTPSA id 30sm1323246qth.14.2016.12.01.15.55.55
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Thu, 01 Dec 2016 15:55:55 -0800 (PST)
To: freebsd-net@freebsd.org, freebsd-hpc@freebsd.org,
 freebsd-performance@freebsd.org
From: Jordan Caraballo <jordancaraballo87@gmail.com>
Subject: netmap, netmap-fwd, and how many M packets-per-second?
Message-ID: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
Date: Thu, 1 Dec 2016 19:55:55 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.3.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Dec 2016 23:56:00 -0000

Feedback and/or tips and tricks more than welcome.

We are trying to process huge amounts of small (64 bytes) pps through a
router. So far results have not been as we expected. We have tested
FreeBSD 10.3, 11.0, 11.0-STABLE, and 12.0-CURRENT with and without
netmap. Based on netmap documentation we were expecting about 5.0M pps;
alongside with the routing improvements from the freebsd routing
proposal a total of 12.0M.

Server Description:

Dell PowerEdge R530 with 2 Intel(R) Xeon(R) E5­2695 CPU's, 18 cores per
cpu. Equipped with a Chelsio T-580-CR dual port in an 8x slot.

BIOS tweaks:

Hyperthreading (or Logical Processors) is turned off.

Current results are shown below. Additional configurations can be given
upon request.

Test Environment:
5 clients and 5 servers - 4 Dell C6100 and 2 Dell R420; each one
equipped with 10G NICS (4 intel 8259X and 6 with mellanox connectx2).

Script that execute the following on each host.

#!/usr/local/bin/bash
# Iterate through ports and start tests
for ((i=1;i<=PORTS;i++)); do
     PORT=$(($PORT+1))
     iperf3 -c 172.16.2.$IP -u -b10000m -i 0 -N -l$PKT -t$TIME -P$STREAMS
-p$PORT &
     #iperf3 -c 172.16.2.$IP -i0 -N -l$PKT -t$TIME -P$STREAMS -p$PORT &
done

# FreeBSD 10.3 - 4 streams to 80 ports from each client (5)

             input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       1.9M     0  1.3M       194M       540k     0        57M 0     0
       2.1M     0  1.5M       216M       556k     0        58M 0     0
       1.8M     0  1.3M       192M       553k     0        58M 0     0
       1.7M     0  1.1M       174M       542k     0        57M 0     0
       1.9M     0  1.4M       204M       537k     0        56M 0     0
       1.6M     0  1.1M       171M       550k     0        58M 0     0
       1.6M     0  1.1M       173M       546k     0        57M 0     0
       1.7M     0  1.1M       176M       564k     0        59M 0     0
       2.0M     0  1.5M       212M       543k     0        57M 0     0
       2.1M     0  1.5M       219M       557k     0        58M 0     0
       1.9M     0  1.4M       205M       547k     0        57M 0     0
       1.7M     0  1.2M       179M       553k     0        58M 0     0

# FreeBSD 11.0 - 4 streams to 80 ports from each client (5)

             input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       3.1M     0  1.8M       326M       1.3M     0       134M 0     0
       2.6M     0  1.5M       269M       1.1M     0       116M 0     0
       2.7M     0  1.5M       285M       1.2M     0       127M 0     0
       2.4M     0  1.3M       257M       1.1M     0       119M 0     0
       2.7M     0  1.5M       287M       1.3M     0       134M 0     0
       2.5M     0  1.3M       262M       1.2M     0       127M 0     0
       2.1M     0  1.1M       224M       1.0M     0       108M 0     0
       2.7M     0  1.4M       285M       1.4M     0       143M 0     0
       2.6M     0  1.3M       272M       1.3M     0       136M 0     0
       2.5M     0  1.4M       265M       1.1M     0       120M 0     0
# FreeBSD 11.0-STABLE - 4 streams to 80 ports from each client (5)

             input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       1.9M     0  849k       195M       1.0M     0       107M 0     0
       1.9M     0  854k       196M       1.0M     0       106M 0     0
       1.9M     0  851k       196M       1.0M     0       107M 0     0
       1.9M     0  851k       196M       1.0M     0       107M 0     0
       1.9M     0  851k       196M       1.0M     0       107M 0     0
       1.9M     0  852k       196M       1.0M     0       107M 0     0
       1.9M     0  847k       195M       1.0M     0       107M 0     0
       1.9M     0  836k       195M       1.0M     0       107M 0     0
       1.9M     0  843k       195M       1.0M     0       107M 0     0
# FreeBSD 12.0-CURRENT - 4 streams to 80 ports from each client (5)

            input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       1.1M   259     0       115M       1.1M     0       115M 0     0
       1.2M   273     0       124M       1.2M     0       124M 0     0
       1.1M   200     0       112M       1.1M     0       112M 0     0
       1.2M   290     0       122M       1.2M     0       122M 0     0
       1.0M   132     0       107M       1.0M     0       107M 0     0
       1.1M   303     0       118M       1.1M     0       118M 0     0
       1.1M   278     0       112M       1.1M     0       112M 0     0
       1.2M   243     0       122M       1.2M     0       122M 0     0
       1.1M   168     0       112M       1.1M     0       112M 0     0
       1.1M   161     0       112M       1.1M     0       112M 0     0
# FreeBSD 12.0-CURRENT + Netmap - 4 streams to 80 ports from each client (5)

             input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       1.4M    10     0       144M       1.4M     0       144M 0     0
       1.5M     6     0       159M       1.5M     0       159M 0     0
       1.4M     5     0       144M       1.4M     0       144M 0     0
       1.5M    14     0       158M       1.5M     0       158M 0     0
       1.4M     5     0       151M       1.4M     0       151M 0     0
       1.4M    10     0       152M       1.4M     0       152M 0     0
       1.4M    12     0       148M       1.4M     0       148M 0     0
       1.5M     9     0       155M       1.5M     0       155M 0     0
       1.4M    23     0       151M       1.4M     0       151M 0     0
       1.4M    11     0       151M       1.4M     0       151M 0     0
# FreeBSD 12.0-CURRENT + Netmap + Tuning - 4 streams to 80 ports from
each client (5)

            input        (Total)           output
    packets  errs idrops      bytes    packets  errs      bytes colls drops
       1.4M    15     0       145M       1.4M     0       145M 0     0
       1.5M    18     0       157M       1.5M     0       157M 0     0
       1.5M    10     0       156M       1.5M     0       156M 0     0
       1.5M    15     0       154M       1.5M     0       154M 0     0
       1.4M    13     0       146M       1.4M     0       146M 0     0
       1.5M    15     0       156M       1.5M     0       156M 0     0
       1.5M     9     0       155M       1.5M     0       155M 0     0
       1.5M    13     0       153M       1.5M     0       153M 0     0
       1.4M    14     0       145M       1.4M     0       145M 0     0
       1.4M    17     0       151M       1.4M     0       151M 0     0


From owner-freebsd-net@freebsd.org  Fri Dec  2 00:54:27 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 027E3C60653
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 00:54:26 +0000 (UTC) (envelope-from jim@netgate.com)
Received: from mail-io0-x234.google.com (mail-io0-x234.google.com
 [IPv6:2607:f8b0:4001:c06::234])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id BDF6E14E1
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 00:54:26 +0000 (UTC)
 (envelope-from jim@netgate.com)
Received: by mail-io0-x234.google.com with SMTP id j65so456176131iof.0
 for <freebsd-net@freebsd.org>; Thu, 01 Dec 2016 16:54:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netgate.com; s=google;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=ADIs/vdA9OH10oR4poiOsXNs2L3YYn87HbUSXPzlUUE=;
 b=EFO6Xt68N92re2Dn4SAXU1mTelZR2hfYuSkHl/Ra5co51jmRdVFILeNcJuPw7YTCA0
 4W4356kaXOB0RAxGQbHs/wypYYOihqxvQD/1FPNiDwzbAr+QSm6NNQTS9pMnBx+RnwbE
 znuRpg729mlYNnwYxLyz+Mdg/N2WKCIHIB3qo=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=ADIs/vdA9OH10oR4poiOsXNs2L3YYn87HbUSXPzlUUE=;
 b=HkpiMhO9k9zh7tspwrML9B+YA3I3QeiPuX2/5hxC5jIe9Jgrw2q2g7b9tUJIRHoUwX
 caGC8tvO8oTxzEkPPqckp6OaFW/LfkK9Lv/oCBGpNcicg207KMU7eg4WwxW6XhrFe4Cg
 oYPfRm4ID5KcR3DfIBUD69thpQ+oTfu1anP7tl/qmHdx1XszQ7A6XLqv4FLnITnRT3B9
 h5ek8E8uyTxghtq0hMvAjF0viKS4z4cAs487ukHRqvWJ7FAqhrXkm/+ztz4pKrKXAsW6
 KtnHeySxwksNZL6QtNCVn7uSFsI+q5+dmNaijMi3fjxqcxMa2fHQvRQnZGUfPBXVp+sA
 xlOw==
X-Gm-Message-State: AKaTC02+NE/ql/32+QOaVjeIhW8S1s+EbFT78Yfb4CzwDMScYxr4WuZMSALxNwkHKxA0WQoQGXaHcedPJDbloBiY
X-Received: by 10.36.190.6 with SMTP id i6mr483424itf.37.1480640065901; Thu,
 01 Dec 2016 16:54:25 -0800 (PST)
MIME-Version: 1.0
Received: by 10.50.32.4 with HTTP; Thu, 1 Dec 2016 16:54:25 -0800 (PST)
In-Reply-To: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
References: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
From: Jim Thompson <jim@netgate.com>
Date: Thu, 1 Dec 2016 18:54:25 -0600
Message-ID: <CAKAfi7wGyYjPFJcvwXYESeYBfQm-yNpM3fMqM6tQRj3mOWq1bw@mail.gmail.com>
Subject: Re: netmap, netmap-fwd, and how many M packets-per-second?
To: Jordan Caraballo <jordancaraballo87@gmail.com>
Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 00:54:27 -0000

(I'm not subscribed to -hpc or -performance, so I've trimmed the
recipients.)

You're running iperf3 on an Ivy Bridge Xeon at 2.4GHz.

-N (--no-delay) only applies to TCP, it disables Nagle's algorithm, so it
doesn't apply for "-u" (--udp).

In any case, iperf3 still attempts to use large enough frames to be able to
fill the bandwidth limit (you've requested 'b10000m' =3D 10Gbps) with a
minimum number of packets.  It does this by writing as much data as will
fit in the sockbuf (if it gets back EWOULDBLOCK) in a loop.

https://github.com/esnet/iperf/blob/099244ec686b620393e9845478a554b1c7ca5c8=
b/src/net.c#L251

A full sized ethernet frame is 1538 bytes on the wire (without any 802.1q
tags).
1,000,000,000 b/s / (1,538 B * 8 b/B) =3D=3D 81,274 pps
10G is 812,743pps
40G is 3,250,975pps

and you're quite near this (3.2Mpps) with the  FreeBSD 11.0 setup.  Are you
sure you're not running a WITNESS/DEBUG kernel on 12-CURRENT?

The (version of) netmap-fwd you have is (still) single-threaded, so you get
one core.
You probably also don't have the hw cksum offload parts for netmap that we
did.

You're seeing about 1.5Mpps and at 1538 byte frames (on the wire) that's
around 18.5Gbps.

try pkt_gen, it will generate the small frames you seek.

Cheers,
Jim


On Thu, Dec 1, 2016 at 5:55 PM, Jordan Caraballo <
jordancaraballo87@gmail.com> wrote:

> Feedback and/or tips and tricks more than welcome.
>
> We are trying to process huge amounts of small (64 bytes) pps through a
> router. So far results have not been as we expected. We have tested
> FreeBSD 10.3, 11.0, 11.0-STABLE, and 12.0-CURRENT with and without
> netmap. Based on netmap documentation we were expecting about 5.0M pps;
> alongside with the routing improvements from the freebsd routing
> proposal a total of 12.0M.
>
> Server Description:
>
> Dell PowerEdge R530 with 2 Intel(R) Xeon(R) E5=C2=AD2695 CPU's, 18 cores =
per
> cpu. Equipped with a Chelsio T-580-CR dual port in an 8x slot.
>
> BIOS tweaks:
>
> Hyperthreading (or Logical Processors) is turned off.
>
> Current results are shown below. Additional configurations can be given
> upon request.
>
> Test Environment:
> 5 clients and 5 servers - 4 Dell C6100 and 2 Dell R420; each one
> equipped with 10G NICS (4 intel 8259X and 6 with mellanox connectx2).
>
> Script that execute the following on each host.
>
> #!/usr/local/bin/bash
> # Iterate through ports and start tests
> for ((i=3D1;i<=3DPORTS;i++)); do
>     PORT=3D$(($PORT+1))
>     iperf3 -c 172.16.2.$IP -u -b10000m -i 0 -N -l$PKT -t$TIME -P$STREAMS
> -p$PORT &
>     #iperf3 -c 172.16.2.$IP -i0 -N -l$PKT -t$TIME -P$STREAMS -p$PORT &
> done
>
> # FreeBSD 10.3 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  1.3M       194M       540k     0        57M 0     0
>       2.1M     0  1.5M       216M       556k     0        58M 0     0
>       1.8M     0  1.3M       192M       553k     0        58M 0     0
>       1.7M     0  1.1M       174M       542k     0        57M 0     0
>       1.9M     0  1.4M       204M       537k     0        56M 0     0
>       1.6M     0  1.1M       171M       550k     0        58M 0     0
>       1.6M     0  1.1M       173M       546k     0        57M 0     0
>       1.7M     0  1.1M       176M       564k     0        59M 0     0
>       2.0M     0  1.5M       212M       543k     0        57M 0     0
>       2.1M     0  1.5M       219M       557k     0        58M 0     0
>       1.9M     0  1.4M       205M       547k     0        57M 0     0
>       1.7M     0  1.2M       179M       553k     0        58M 0     0
>
> # FreeBSD 11.0 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       3.1M     0  1.8M       326M       1.3M     0       134M 0     0
>       2.6M     0  1.5M       269M       1.1M     0       116M 0     0
>       2.7M     0  1.5M       285M       1.2M     0       127M 0     0
>       2.4M     0  1.3M       257M       1.1M     0       119M 0     0
>       2.7M     0  1.5M       287M       1.3M     0       134M 0     0
>       2.5M     0  1.3M       262M       1.2M     0       127M 0     0
>       2.1M     0  1.1M       224M       1.0M     0       108M 0     0
>       2.7M     0  1.4M       285M       1.4M     0       143M 0     0
>       2.6M     0  1.3M       272M       1.3M     0       136M 0     0
>       2.5M     0  1.4M       265M       1.1M     0       120M 0     0
> # FreeBSD 11.0-STABLE - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  849k       195M       1.0M     0       107M 0     0
>       1.9M     0  854k       196M       1.0M     0       106M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  852k       196M       1.0M     0       107M 0     0
>       1.9M     0  847k       195M       1.0M     0       107M 0     0
>       1.9M     0  836k       195M       1.0M     0       107M 0     0
>       1.9M     0  843k       195M       1.0M     0       107M 0     0
> # FreeBSD 12.0-CURRENT - 4 streams to 80 ports from each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.1M   259     0       115M       1.1M     0       115M 0     0
>       1.2M   273     0       124M       1.2M     0       124M 0     0
>       1.1M   200     0       112M       1.1M     0       112M 0     0
>       1.2M   290     0       122M       1.2M     0       122M 0     0
>       1.0M   132     0       107M       1.0M     0       107M 0     0
>       1.1M   303     0       118M       1.1M     0       118M 0     0
>       1.1M   278     0       112M       1.1M     0       112M 0     0
>       1.2M   243     0       122M       1.2M     0       122M 0     0
>       1.1M   168     0       112M       1.1M     0       112M 0     0
>       1.1M   161     0       112M       1.1M     0       112M 0     0
> # FreeBSD 12.0-CURRENT + Netmap - 4 streams to 80 ports from each client
> (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    10     0       144M       1.4M     0       144M 0     0
>       1.5M     6     0       159M       1.5M     0       159M 0     0
>       1.4M     5     0       144M       1.4M     0       144M 0     0
>       1.5M    14     0       158M       1.5M     0       158M 0     0
>       1.4M     5     0       151M       1.4M     0       151M 0     0
>       1.4M    10     0       152M       1.4M     0       152M 0     0
>       1.4M    12     0       148M       1.4M     0       148M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.4M    23     0       151M       1.4M     0       151M 0     0
>       1.4M    11     0       151M       1.4M     0       151M 0     0
> # FreeBSD 12.0-CURRENT + Netmap + Tuning - 4 streams to 80 ports from
> each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    15     0       145M       1.4M     0       145M 0     0
>       1.5M    18     0       157M       1.5M     0       157M 0     0
>       1.5M    10     0       156M       1.5M     0       156M 0     0
>       1.5M    15     0       154M       1.5M     0       154M 0     0
>       1.4M    13     0       146M       1.4M     0       146M 0     0
>       1.5M    15     0       156M       1.5M     0       156M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.5M    13     0       153M       1.5M     0       153M 0     0
>       1.4M    14     0       145M       1.4M     0       145M 0     0
>       1.4M    17     0       151M       1.4M     0       151M 0     0
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

From owner-freebsd-net@freebsd.org  Fri Dec  2 01:00:08 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id A6D9DC607E8;
 Fri,  2 Dec 2016 01:00:08 +0000 (UTC)
 (envelope-from nparhar@gmail.com)
Received: from mail-lf0-x243.google.com (mail-lf0-x243.google.com
 [IPv6:2a00:1450:4010:c07::243])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 1CF651649;
 Fri,  2 Dec 2016 01:00:08 +0000 (UTC)
 (envelope-from nparhar@gmail.com)
Received: by mail-lf0-x243.google.com with SMTP id p100so20624877lfg.2;
 Thu, 01 Dec 2016 17:00:08 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc:content-transfer-encoding;
 bh=MDxyQiSYQFdmFFoNBZfre7b611ahJL++XZefXqGXG5A=;
 b=DGkYmLGy5yWW+mBF1+M6g4UB2dfrVCloRXfdWSLws26fVfGJjjW1x2c96I3Ub5nqw9
 Hh5YdFzBjZZ7y2u+amwlvlS6KrscvP2KUlfo8+gkTHLv+oYM5pzFbJjyJYTKehsq+5yV
 reHVsdvlbIkXc/1wFkRp5+aUErX1rzLprwbhrHACStLjm2xqo23uh+wI5L1o9HEUFV+y
 3jnDmktUSKQw6a7Jcd9enBcnu3HICebB4ci9xc+cHHAJ1zCjyC3DMm67UQPx/NuQu+ti
 w5dGdUcIcKDqkL0YPt7qHZy5AWkDQCYnfubNkDLY+9ijFLUzAGITXzT8YFfHyQZ/e4U7
 7ZXA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc:content-transfer-encoding;
 bh=MDxyQiSYQFdmFFoNBZfre7b611ahJL++XZefXqGXG5A=;
 b=Io8ravib8V2naRdjb3j+FP99uuthJI68oiBYNWQudV1Tr1lgn7upiiTHUdq1/H6uSX
 A7tVX1Vz6OLsETW57KMD4BJpWeI1PytocwKkVbhKmCIcgxgxsUtCeuwFbxD2BhnT3OFa
 a8pQgudAJvKOHcOMPVCfpyFf7qsLxvNJuqwDoPs6n7AWdauA6ylcRC4A2zHETeIvLGo1
 Bth2jYLtuQdf4cM+qtci9uTFBR/54G5WBsmvE4RQUBZViPQSnZgTXbNCSNUu5TFdE3v4
 qnxXUeivPgEOUf5u9ECjJtahX3HsPdIiEYhduS7mLTVA3jY7OSclF50WLgWA2QsrJTo6
 Uq5w==
X-Gm-Message-State: AKaTC03t1eSeBex/QyXI5/CIkxIBnsYLzhYwyea7vdz2gyUwzQ761hH/ms/x8Tp3pdN/4OucV49/v1eOmtCmow==
X-Received: by 10.25.130.149 with SMTP id e143mr15864736lfd.87.1480640406254; 
 Thu, 01 Dec 2016 17:00:06 -0800 (PST)
MIME-Version: 1.0
Received: by 10.25.208.141 with HTTP; Thu, 1 Dec 2016 17:00:05 -0800 (PST)
In-Reply-To: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
References: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
From: Navdeep Parhar <nparhar@gmail.com>
Date: Thu, 1 Dec 2016 17:00:05 -0800
Message-ID: <CAPFoGT_Xm1XwwKs2_W55KMhtNhS+xKtk8BkgjPYfp5hQ5fkqOw@mail.gmail.com>
Subject: Re: netmap, netmap-fwd, and how many M packets-per-second?
To: Jordan Caraballo <jordancaraballo87@gmail.com>
Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>,
 freebsd-hpc@freebsd.org, freebsd-performance@freebsd.org
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 01:00:08 -0000

How have you configured netmap-fwd?  If you provide details on how the
router or firewall is setup I can try similar experiments here.

On Thu, Dec 1, 2016 at 3:55 PM, Jordan Caraballo
<jordancaraballo87@gmail.com> wrote:
> Feedback and/or tips and tricks more than welcome.
>
> We are trying to process huge amounts of small (64 bytes) pps through a
> router. So far results have not been as we expected. We have tested
> FreeBSD 10.3, 11.0, 11.0-STABLE, and 12.0-CURRENT with and without
> netmap. Based on netmap documentation we were expecting about 5.0M pps;
> alongside with the routing improvements from the freebsd routing
> proposal a total of 12.0M.
>
> Server Description:
>
> Dell PowerEdge R530 with 2 Intel(R) Xeon(R) E5=C2=AD2695 CPU's, 18 cores =
per
> cpu. Equipped with a Chelsio T-580-CR dual port in an 8x slot.
>
> BIOS tweaks:
>
> Hyperthreading (or Logical Processors) is turned off.
>
> Current results are shown below. Additional configurations can be given
> upon request.
>
> Test Environment:
> 5 clients and 5 servers - 4 Dell C6100 and 2 Dell R420; each one
> equipped with 10G NICS (4 intel 8259X and 6 with mellanox connectx2).
>
> Script that execute the following on each host.
>
> #!/usr/local/bin/bash
> # Iterate through ports and start tests
> for ((i=3D1;i<=3DPORTS;i++)); do
>     PORT=3D$(($PORT+1))
>     iperf3 -c 172.16.2.$IP -u -b10000m -i 0 -N -l$PKT -t$TIME -P$STREAMS
> -p$PORT &
>     #iperf3 -c 172.16.2.$IP -i0 -N -l$PKT -t$TIME -P$STREAMS -p$PORT &
> done
>
> # FreeBSD 10.3 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  1.3M       194M       540k     0        57M 0     0
>       2.1M     0  1.5M       216M       556k     0        58M 0     0
>       1.8M     0  1.3M       192M       553k     0        58M 0     0
>       1.7M     0  1.1M       174M       542k     0        57M 0     0
>       1.9M     0  1.4M       204M       537k     0        56M 0     0
>       1.6M     0  1.1M       171M       550k     0        58M 0     0
>       1.6M     0  1.1M       173M       546k     0        57M 0     0
>       1.7M     0  1.1M       176M       564k     0        59M 0     0
>       2.0M     0  1.5M       212M       543k     0        57M 0     0
>       2.1M     0  1.5M       219M       557k     0        58M 0     0
>       1.9M     0  1.4M       205M       547k     0        57M 0     0
>       1.7M     0  1.2M       179M       553k     0        58M 0     0
>
> # FreeBSD 11.0 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       3.1M     0  1.8M       326M       1.3M     0       134M 0     0
>       2.6M     0  1.5M       269M       1.1M     0       116M 0     0
>       2.7M     0  1.5M       285M       1.2M     0       127M 0     0
>       2.4M     0  1.3M       257M       1.1M     0       119M 0     0
>       2.7M     0  1.5M       287M       1.3M     0       134M 0     0
>       2.5M     0  1.3M       262M       1.2M     0       127M 0     0
>       2.1M     0  1.1M       224M       1.0M     0       108M 0     0
>       2.7M     0  1.4M       285M       1.4M     0       143M 0     0
>       2.6M     0  1.3M       272M       1.3M     0       136M 0     0
>       2.5M     0  1.4M       265M       1.1M     0       120M 0     0
> # FreeBSD 11.0-STABLE - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  849k       195M       1.0M     0       107M 0     0
>       1.9M     0  854k       196M       1.0M     0       106M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  852k       196M       1.0M     0       107M 0     0
>       1.9M     0  847k       195M       1.0M     0       107M 0     0
>       1.9M     0  836k       195M       1.0M     0       107M 0     0
>       1.9M     0  843k       195M       1.0M     0       107M 0     0
> # FreeBSD 12.0-CURRENT - 4 streams to 80 ports from each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.1M   259     0       115M       1.1M     0       115M 0     0
>       1.2M   273     0       124M       1.2M     0       124M 0     0
>       1.1M   200     0       112M       1.1M     0       112M 0     0
>       1.2M   290     0       122M       1.2M     0       122M 0     0
>       1.0M   132     0       107M       1.0M     0       107M 0     0
>       1.1M   303     0       118M       1.1M     0       118M 0     0
>       1.1M   278     0       112M       1.1M     0       112M 0     0
>       1.2M   243     0       122M       1.2M     0       122M 0     0
>       1.1M   168     0       112M       1.1M     0       112M 0     0
>       1.1M   161     0       112M       1.1M     0       112M 0     0
> # FreeBSD 12.0-CURRENT + Netmap - 4 streams to 80 ports from each client =
(5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    10     0       144M       1.4M     0       144M 0     0
>       1.5M     6     0       159M       1.5M     0       159M 0     0
>       1.4M     5     0       144M       1.4M     0       144M 0     0
>       1.5M    14     0       158M       1.5M     0       158M 0     0
>       1.4M     5     0       151M       1.4M     0       151M 0     0
>       1.4M    10     0       152M       1.4M     0       152M 0     0
>       1.4M    12     0       148M       1.4M     0       148M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.4M    23     0       151M       1.4M     0       151M 0     0
>       1.4M    11     0       151M       1.4M     0       151M 0     0
> # FreeBSD 12.0-CURRENT + Netmap + Tuning - 4 streams to 80 ports from
> each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    15     0       145M       1.4M     0       145M 0     0
>       1.5M    18     0       157M       1.5M     0       157M 0     0
>       1.5M    10     0       156M       1.5M     0       156M 0     0
>       1.5M    15     0       154M       1.5M     0       154M 0     0
>       1.4M    13     0       146M       1.4M     0       146M 0     0
>       1.5M    15     0       156M       1.5M     0       156M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.5M    13     0       153M       1.5M     0       153M 0     0
>       1.4M    14     0       145M       1.4M     0       145M 0     0
>       1.4M    17     0       151M       1.4M     0       151M 0     0
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

From owner-freebsd-net@freebsd.org  Fri Dec  2 05:37:46 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2E88FC61D6B
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 05:37:46 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 1672E18E6
 for <freebsd-net@FreeBSD.org>; Fri,  2 Dec 2016 05:37:46 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB25bjxs033963
 for <freebsd-net@FreeBSD.org>; Fri, 2 Dec 2016 05:37:45 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 206186] [patch][netgraph] New netgraph node for calculate IP
 IP6 TCP UDP checksums
Date: Fri, 02 Dec 2016 05:37:46 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.3-STABLE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: commit-hook@freebsd.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-206186-2472-CLMgmLmWNQ@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-206186-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-206186-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 05:37:46 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206186

--- Comment #4 from commit-hook@freebsd.org ---
A commit references this bug:

Author: julian
Date: Fri Dec  2 05:37:32 UTC 2016
New revision: 309386
URL: https://svnweb.freebsd.org/changeset/base/309386

Log:
  MFH: r303613

  Man page for the new checksum netgraph module.

  PR:           206186
  Submitted by: Dmitry Vagin <daemon.hammer@ya.ru>

Changes:
_U  stable/11/
  stable/11/share/man/man4/ng_checksum.4

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Fri Dec  2 05:39:51 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 817C0C61F86
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 05:39:51 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 691991D72
 for <freebsd-net@FreeBSD.org>; Fri,  2 Dec 2016 05:39:51 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB25dpUY037145
 for <freebsd-net@FreeBSD.org>; Fri, 2 Dec 2016 05:39:51 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 206186] [patch][netgraph] New netgraph node for calculate IP
 IP6 TCP UDP checksums
Date: Fri, 02 Dec 2016 05:39:51 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.3-STABLE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: commit-hook@freebsd.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-206186-2472-2DKABgIHAL@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-206186-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-206186-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 05:39:51 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206186

--- Comment #5 from commit-hook@freebsd.org ---
A commit references this bug:

Author: julian
Date: Fri Dec  2 05:39:10 UTC 2016
New revision: 309388
URL: https://svnweb.freebsd.org/changeset/base/309388

Log:
  MFH: r303613

  Man page for the new checksum netgraph module.

  PR:           206186
  Submitted by: Dmitry Vagin <daemon.hammer@ya.ru>

Changes:
_U  stable/10/
  stable/10/share/man/man4/ng_checksum.4

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Fri Dec  2 05:42:55 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id ABD0AC5E3D7
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 05:42:55 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 9BC42138F
 for <freebsd-net@FreeBSD.org>; Fri,  2 Dec 2016 05:42:55 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB25gtOa051832
 for <freebsd-net@FreeBSD.org>; Fri, 2 Dec 2016 05:42:55 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 206185] [netgraph][patch] refactoring ng_patch
Date: Fri, 02 Dec 2016 05:42:55 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.2-STABLE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: commit-hook@freebsd.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-206185-2472-0eRhqJWtuh@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 05:42:55 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206185

--- Comment #2 from commit-hook@freebsd.org ---
A commit references this bug:

Author: julian
Date: Fri Dec  2 05:42:05 UTC 2016
New revision: 309389
URL: https://svnweb.freebsd.org/changeset/base/309389

Log:
  MFH: r303611

  slite style changes. There is an incoming patch that rewrites a
  lot of this module and I want to get the style and whitespace changes in
  a separate commit (or maybe more).

  PR: 206185
  Submitted by: Dmitry Vagin

Changes:
_U  stable/10/
  stable/10/sys/netgraph/ng_patch.c
  stable/10/sys/netgraph/ng_patch.h

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Fri Dec  2 05:42:57 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3C569C5E3E7
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 05:42:57 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 2C4E113AA
 for <freebsd-net@FreeBSD.org>; Fri,  2 Dec 2016 05:42:57 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB25gvPI051897
 for <freebsd-net@FreeBSD.org>; Fri, 2 Dec 2016 05:42:57 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 206185] [netgraph][patch] refactoring ng_patch
Date: Fri, 02 Dec 2016 05:42:57 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.2-STABLE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: commit-hook@freebsd.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-206185-2472-W1NH6PnsqK@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 05:42:57 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206185

--- Comment #3 from commit-hook@freebsd.org ---
A commit references this bug:

Author: julian
Date: Fri Dec  2 05:42:49 UTC 2016
New revision: 309390
URL: https://svnweb.freebsd.org/changeset/base/309390

Log:
  MFH: r303611

  slite style changes. There is an incoming patch that rewrites a
  lot of this module and I want to get the style and whitespace changes in
  a separate commit (or maybe more).

  PR: 206185
  Submitted by: Dmitry Vagin

Changes:
_U  stable/11/
  stable/11/sys/netgraph/ng_patch.c
  stable/11/sys/netgraph/ng_patch.h

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Fri Dec  2 06:04:09 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id EEA0BC5E9B1
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 06:04:09 +0000 (UTC)
 (envelope-from sbruno@freebsd.org)
Received: from mail.ignoranthack.me (ignoranthack.me [199.102.79.106])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C66841FBF
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 06:04:09 +0000 (UTC)
 (envelope-from sbruno@freebsd.org)
Received: from [172.20.14.228] (50-207-184-2-static.hfc.comcastbusiness.net
 [50.207.184.2])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 (Authenticated sender: sbruno@ignoranthack.me)
 by mail.ignoranthack.me (Postfix) with ESMTPSA id 0563919289A;
 Fri,  2 Dec 2016 06:04:07 +0000 (UTC)
Subject: Re: Intel 82567V-2 using em driver, no carrier or constant link-state
 changes with 1000BaseT
To: "Pieper, Jeffrey E" <jeffrey.e.pieper@intel.com>,
 "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
References: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
 <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
 <2A35EA60C3C77D438915767F458D656883995CC2@ORSMSX111.amr.corp.intel.com>
From: Sean Bruno <sbruno@freebsd.org>
Message-ID: <9a33dbfb-179a-bd43-9dea-06707a3957e8@freebsd.org>
Date: Thu, 1 Dec 2016 23:04:04 -0700
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101
 Thunderbird/45.4.0
MIME-Version: 1.0
In-Reply-To: <2A35EA60C3C77D438915767F458D656883995CC2@ORSMSX111.amr.corp.intel.com>
Content-Type: multipart/signed; micalg=pgp-sha512;
 protocol="application/pgp-signature";
 boundary="oIfLrc0uEVL84g63PrjuSk1d8lGNSIqo1"
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 06:04:10 -0000

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--oIfLrc0uEVL84g63PrjuSk1d8lGNSIqo1
Content-Type: multipart/mixed; boundary="tpHsqaJsFAp7aRhUdkjCr3OkKsmTMKpwS";
 protected-headers="v1"
From: Sean Bruno <sbruno@freebsd.org>
To: "Pieper, Jeffrey E" <jeffrey.e.pieper@intel.com>,
 "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Message-ID: <9a33dbfb-179a-bd43-9dea-06707a3957e8@freebsd.org>
Subject: Re: Intel 82567V-2 using em driver, no carrier or constant link-state
 changes with 1000BaseT
References: <CAHSynqbosqKaEtL=k7MHcmjCsoXMmbkjBq=QTE256BwcmuD95A@mail.gmail.com>
 <3b590d4f-5eeb-f4f7-8ce5-ee71807d6e14@freebsd.org>
 <2A35EA60C3C77D438915767F458D656883995CC2@ORSMSX111.amr.corp.intel.com>
In-Reply-To: <2A35EA60C3C77D438915767F458D656883995CC2@ORSMSX111.amr.corp.intel.com>

--tpHsqaJsFAp7aRhUdkjCr3OkKsmTMKpwS
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable



On 12/01/16 13:07, Pieper, Jeffrey E wrote:
> Sean,
>=20
> This is a client (em) part, and should be 10CE (Boazman/Boulder Creek).=

>=20
> Jeff

Yeah, you're right.  I think I transposed some numbers instead of
copy/paste.

Do you have this part lying around to test against?

sean


--tpHsqaJsFAp7aRhUdkjCr3OkKsmTMKpwS--

--oIfLrc0uEVL84g63PrjuSk1d8lGNSIqo1
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQF8BAEBCgBmBQJYQQ7XXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRCQUFENDYzMkU3MTIxREU4RDIwOTk3REQx
MjAxRUZDQTFFNzI3RTY0AAoJEBIB78oecn5kWIIH/jvhZX2kyk8xa6T9Ws6PjD3y
a05qlPPEvxIYrkRMIuWi5Zu6ym2OpCANwzFg7PxxigV+lumW4fooirucOeAyqz5k
w7U+xPMVEwE1C+zAHK6zyVYTcXwaCXxRKSfS2KZvrxOxpfPG7ub14u2s/pSa5xi6
AbeXxsITaSv/ZkS11nL3N88WH6yHf6o6M2EK68lTi6K0ibV1vw+xRcrydUbJ5vfa
HoCpnFw70Klm3PD4TFNSlVomML8Wv3jTCJFT2gU8uVBRPq7LTzzsXFRzTHvFDLSJ
pYB81RLqoWkhBh7+ZM+0vjMJhnSh7upoqwpvinPl1QUpvbhOxp7XDsNSec8iHlA=
=Lu2Z
-----END PGP SIGNATURE-----

--oIfLrc0uEVL84g63PrjuSk1d8lGNSIqo1--

From owner-freebsd-net@freebsd.org  Fri Dec  2 08:55:35 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id A3CA7C62B61
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 08:55:35 +0000 (UTC)
 (envelope-from jpa@semihalf.com)
Received: from mail-qt0-x232.google.com (mail-qt0-x232.google.com
 [IPv6:2607:f8b0:400d:c0d::232])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 673A01848
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 08:55:35 +0000 (UTC)
 (envelope-from jpa@semihalf.com)
Received: by mail-qt0-x232.google.com with SMTP id n6so246064702qtd.1
 for <freebsd-net@freebsd.org>; Fri, 02 Dec 2016 00:55:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=semihalf-com.20150623.gappssmtp.com; s=20150623;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=KUl3vjzHYvhF7XhxZQNMQ7k6orHwQ/2vuHIUD5DWSWQ=;
 b=BYwWzBo4oYO4EVXkSL1j74QYZqRu43/DxfDLxGhG8TbJeWDmT59+xi6tvN8DFL3ZMM
 nio+T1rJub6bvlaWOqQ5MuzR1WEtM9hMfeGCCuPrl8iIAM1L9L+lfSEnwUQ3NCMeyUfa
 QLnexIbQv54gOrFJi6Nb82oP8Es4CvQuSJ5wCBHr088QzCe0tZE1SF5ccxlBb4Z1m1ia
 7Gkoo4FJK3Al43gFCl+TyG9cbvPD0d44kZts/ZldmSofYIeklnFz+1WPMD4dMbwfIUMH
 Ah+Y4ubDTjbMMO5n7SlaTSB/WhCD+kmuBqdYb2EHwnm74DKaQWoABbv64lmckF7IOBF7
 dV0g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=KUl3vjzHYvhF7XhxZQNMQ7k6orHwQ/2vuHIUD5DWSWQ=;
 b=Rgk+Bscu5AQbWbx96WfdY+qLIYXMzbx/47/WjaUVHod2PLwLrRHYQ4jLxbhL0KY6MS
 9lsxBbINSk22/QiT6yj5jiVF1yW6PsYK6MH0hGckQOnHzOnO6VEqhNVJUBwFW1MmBw7/
 i60TXoMbPFXh7Y4qjLGln+d+xYyxNps4zHLjx+1epk9chxQR1If0wIs9Bjb7KKz2sE2m
 FS3BxEYpNZ0lNQpkRUw7GsLe8bTq+hw1NYfwfo3kuBMILtgJlojPvwT1mRFpx/lQDR5O
 BywP86ImzGiKlTYndK5uZ71Vqb3UCcW3BvV91j395tZLcF3+kTBbtkOd7nRWsg5mFolL
 GxGg==
X-Gm-Message-State: AKaTC02KBJ+kXtBI9HlJ3JYFiwEuXVwKXGyl2a2ScbpLtXaDBriWf2y0OnZPk9Xw15Olr6W8b64LJ3MCv5WR5Q==
X-Received: by 10.200.56.20 with SMTP id q20mr37023654qtb.178.1480668934251;
 Fri, 02 Dec 2016 00:55:34 -0800 (PST)
MIME-Version: 1.0
Received: by 10.55.38.15 with HTTP; Fri, 2 Dec 2016 00:55:03 -0800 (PST)
In-Reply-To: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
References: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
From: Jakub Palider <jpa@semihalf.com>
Date: Fri, 2 Dec 2016 09:55:03 +0100
Message-ID: <CAL7QUyNtfVwjo640yb2PW-UzY+L17vghwwjkdNLyMXsyz5SQ+g@mail.gmail.com>
Subject: Re: netmap, netmap-fwd, and how many M packets-per-second?
To: Jordan Caraballo <jordancaraballo87@gmail.com>
Cc: freebsd-net@freebsd.org, freebsd-hpc@freebsd.org, 
 freebsd-performance@freebsd.org
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 08:55:35 -0000

Hi,

I have run some performance tests but not as router, which is your case, so
some information might not be relevant:
0. validate your hw stats with what you get from the output
1. Try using FLOWTABLE option in your kernel config - this may kill your
machine in -CURRENT, but it's worth checking
2. MTU set to some reasonably small value (~120) shall prevent from
consolidating small packets into big frame
3. disable all kernel tracing (INVARIANTS, WITNESS, etc)
4. I read you tuned the system, but make sure there are enough resources
5. Check that context switches are not killing it

Regardless on the above you might want profile the system with dtrace and
export results to flamegraph, this will give you an idea what going on in
the system and possibly locate the cause of the problem. It's definitely
worth the effort.

Jakub

On Fri, Dec 2, 2016 at 12:55 AM, Jordan Caraballo <
jordancaraballo87@gmail.com> wrote:

> Feedback and/or tips and tricks more than welcome.
>
> We are trying to process huge amounts of small (64 bytes) pps through a
> router. So far results have not been as we expected. We have tested
> FreeBSD 10.3, 11.0, 11.0-STABLE, and 12.0-CURRENT with and without
> netmap. Based on netmap documentation we were expecting about 5.0M pps;
> alongside with the routing improvements from the freebsd routing
> proposal a total of 12.0M.
>
> Server Description:
>
> Dell PowerEdge R530 with 2 Intel(R) Xeon(R) E5=C2=AD2695 CPU's, 18 cores =
per
> cpu. Equipped with a Chelsio T-580-CR dual port in an 8x slot.
>
> BIOS tweaks:
>
> Hyperthreading (or Logical Processors) is turned off.
>
> Current results are shown below. Additional configurations can be given
> upon request.
>
> Test Environment:
> 5 clients and 5 servers - 4 Dell C6100 and 2 Dell R420; each one
> equipped with 10G NICS (4 intel 8259X and 6 with mellanox connectx2).
>
> Script that execute the following on each host.
>
> #!/usr/local/bin/bash
> # Iterate through ports and start tests
> for ((i=3D1;i<=3DPORTS;i++)); do
>     PORT=3D$(($PORT+1))
>     iperf3 -c 172.16.2.$IP -u -b10000m -i 0 -N -l$PKT -t$TIME -P$STREAMS
> -p$PORT &
>     #iperf3 -c 172.16.2.$IP -i0 -N -l$PKT -t$TIME -P$STREAMS -p$PORT &
> done
>
> # FreeBSD 10.3 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  1.3M       194M       540k     0        57M 0     0
>       2.1M     0  1.5M       216M       556k     0        58M 0     0
>       1.8M     0  1.3M       192M       553k     0        58M 0     0
>       1.7M     0  1.1M       174M       542k     0        57M 0     0
>       1.9M     0  1.4M       204M       537k     0        56M 0     0
>       1.6M     0  1.1M       171M       550k     0        58M 0     0
>       1.6M     0  1.1M       173M       546k     0        57M 0     0
>       1.7M     0  1.1M       176M       564k     0        59M 0     0
>       2.0M     0  1.5M       212M       543k     0        57M 0     0
>       2.1M     0  1.5M       219M       557k     0        58M 0     0
>       1.9M     0  1.4M       205M       547k     0        57M 0     0
>       1.7M     0  1.2M       179M       553k     0        58M 0     0
>
> # FreeBSD 11.0 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       3.1M     0  1.8M       326M       1.3M     0       134M 0     0
>       2.6M     0  1.5M       269M       1.1M     0       116M 0     0
>       2.7M     0  1.5M       285M       1.2M     0       127M 0     0
>       2.4M     0  1.3M       257M       1.1M     0       119M 0     0
>       2.7M     0  1.5M       287M       1.3M     0       134M 0     0
>       2.5M     0  1.3M       262M       1.2M     0       127M 0     0
>       2.1M     0  1.1M       224M       1.0M     0       108M 0     0
>       2.7M     0  1.4M       285M       1.4M     0       143M 0     0
>       2.6M     0  1.3M       272M       1.3M     0       136M 0     0
>       2.5M     0  1.4M       265M       1.1M     0       120M 0     0
> # FreeBSD 11.0-STABLE - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  849k       195M       1.0M     0       107M 0     0
>       1.9M     0  854k       196M       1.0M     0       106M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  852k       196M       1.0M     0       107M 0     0
>       1.9M     0  847k       195M       1.0M     0       107M 0     0
>       1.9M     0  836k       195M       1.0M     0       107M 0     0
>       1.9M     0  843k       195M       1.0M     0       107M 0     0
> # FreeBSD 12.0-CURRENT - 4 streams to 80 ports from each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.1M   259     0       115M       1.1M     0       115M 0     0
>       1.2M   273     0       124M       1.2M     0       124M 0     0
>       1.1M   200     0       112M       1.1M     0       112M 0     0
>       1.2M   290     0       122M       1.2M     0       122M 0     0
>       1.0M   132     0       107M       1.0M     0       107M 0     0
>       1.1M   303     0       118M       1.1M     0       118M 0     0
>       1.1M   278     0       112M       1.1M     0       112M 0     0
>       1.2M   243     0       122M       1.2M     0       122M 0     0
>       1.1M   168     0       112M       1.1M     0       112M 0     0
>       1.1M   161     0       112M       1.1M     0       112M 0     0
> # FreeBSD 12.0-CURRENT + Netmap - 4 streams to 80 ports from each client
> (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    10     0       144M       1.4M     0       144M 0     0
>       1.5M     6     0       159M       1.5M     0       159M 0     0
>       1.4M     5     0       144M       1.4M     0       144M 0     0
>       1.5M    14     0       158M       1.5M     0       158M 0     0
>       1.4M     5     0       151M       1.4M     0       151M 0     0
>       1.4M    10     0       152M       1.4M     0       152M 0     0
>       1.4M    12     0       148M       1.4M     0       148M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.4M    23     0       151M       1.4M     0       151M 0     0
>       1.4M    11     0       151M       1.4M     0       151M 0     0
> # FreeBSD 12.0-CURRENT + Netmap + Tuning - 4 streams to 80 ports from
> each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    15     0       145M       1.4M     0       145M 0     0
>       1.5M    18     0       157M       1.5M     0       157M 0     0
>       1.5M    10     0       156M       1.5M     0       156M 0     0
>       1.5M    15     0       154M       1.5M     0       154M 0     0
>       1.4M    13     0       146M       1.4M     0       146M 0     0
>       1.5M    15     0       156M       1.5M     0       156M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.5M    13     0       153M       1.5M     0       153M 0     0
>       1.4M    14     0       145M       1.4M     0       145M 0     0
>       1.4M    17     0       151M       1.4M     0       151M 0     0
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

From owner-freebsd-net@freebsd.org  Fri Dec  2 10:48:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0A719C611AC
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 10:48:00 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id EE75B16E1
 for <freebsd-net@FreeBSD.org>; Fri,  2 Dec 2016 10:47:59 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB2Alx5Q008409
 for <freebsd-net@FreeBSD.org>; Fri, 2 Dec 2016 10:47:59 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 206185] [netgraph][patch] refactoring ng_patch
Date: Fri, 02 Dec 2016 10:48:00 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.2-STABLE
X-Bugzilla-Keywords: patch
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: commit-hook@freebsd.org
X-Bugzilla-Status: New
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-206185-2472-cy9iMGlzy3@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-206185-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 10:48:00 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206185

--- Comment #4 from commit-hook@freebsd.org ---
A commit references this bug:

Author: julian
Date: Fri Dec  2 10:47:10 UTC 2016
New revision: 309408
URL: https://svnweb.freebsd.org/changeset/base/309408

Log:
  Changes to allow the patching of packets with an offset (and other change=
s..
see man page)

  PR:   206185
  Submitted by: Dmitry Vagin <daemon-hammer@ya.ru>
  MFC after:     1 week
  Relnotes:     yes (also ng_checksum node)

Changes:
  head/share/man/man4/ng_patch.4
  head/sys/netgraph/ng_patch.c
  head/sys/netgraph/ng_patch.h

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Fri Dec  2 12:16:14 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 168F3C6237B;
 Fri,  2 Dec 2016 12:16:14 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: from mail-oi0-x241.google.com (mail-oi0-x241.google.com
 [IPv6:2607:f8b0:4003:c06::241])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id CE33A15BD;
 Fri,  2 Dec 2016 12:16:13 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: by mail-oi0-x241.google.com with SMTP id f201so27070665oib.0;
 Fri, 02 Dec 2016 04:16:13 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=JS3Jt6b7QflLiHAOqQRJjf+Ov20cCEY4J0XCR7cTdYI=;
 b=sgS9gIj5owIAjuYj6XtvoEpZQ9dKYpQS7kUngpl18uzSe2TWI1K1np3oWgyp6yzzCf
 aFGpGDJRp/cxu1kQDeI9kG1u9wmrFoTDUzBt0ZHJoD2JZhQvXEiK+Ca4kd0GFs3F+cPi
 0EWIISyvHmJJD8YkHy4dU5F9paImRfulTT1ghBd4QhwPyEyE94XmJIbpWcdVaFTpCW15
 TvpOfcwG1/3K2j5oXiFgyPPRZ8Lg03HCSGTjhh1T9TASythhuQudHLDnMpQ897iYiKgK
 2/w/5u5RKdd9jUJgprifck1yHVhxyX45h0Pwej5Z255y4JaOtmPPNxkerKWGi/zdz2MU
 YmuA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=JS3Jt6b7QflLiHAOqQRJjf+Ov20cCEY4J0XCR7cTdYI=;
 b=BRXagHNKQWSmWMpR84dClwevX06ylbjs5qSZNUjZKSG2BmSPeK8jlzb3meL6BTwLUi
 XUxmRd1hqrtK8kP8OOftpGBqiTkH69+QPIbU9rm/Rv7QNoGoSwgtKrs+y5Z2+ynTFyFK
 zAn8mW3myTXcrdqvdSsZxJW27LPaw2eHtz5IrnO9eFcToDFNVTgZ+kQibxfzlTyVi5ki
 t/rxAdQEb7lYdCASJqdcZ20ID4POWON4ThhCCuHsdFr1iFbLOgElRFAzBga/WQGhzb8m
 G0WoouPjqXecl8JlbY2CehHlDCjvsVqvx1uwWNqVZDzcHlWSi0sOH3dUwfDp8fJJpxt9
 2gCA==
X-Gm-Message-State: AKaTC00IPK3QDtAX1wAJg+vOe1K/RYiyEGj+OTLkTcl2ASitBGEKIYrjLu4o1FBb/zp2eV09nnoFd05iUF5AuA==
X-Received: by 10.202.235.78 with SMTP id j75mr22518632oih.74.1480680973110;
 Fri, 02 Dec 2016 04:16:13 -0800 (PST)
MIME-Version: 1.0
Received: by 10.157.45.200 with HTTP; Fri, 2 Dec 2016 04:16:12 -0800 (PST)
In-Reply-To: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
References: <596e5c15-1a85-1fdc-ca88-11a0ccd5e125@gmail.com>
From: Vincenzo Maffione <v.maffione@gmail.com>
Date: Fri, 2 Dec 2016 13:16:12 +0100
Message-ID: <CA+_eA9j-YtF19VoDRgi03Hi6N=O9AfoixPwHyify58CVCZVuhw@mail.gmail.com>
Subject: Re: netmap, netmap-fwd, and how many M packets-per-second?
To: Jordan Caraballo <jordancaraballo87@gmail.com>
Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>,
 freebsd-hpc@freebsd.org, freebsd-performance@freebsd.org
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 12:16:14 -0000

Hi,
  If I'm getting it right, you are doing a test with 10 machines directly
connected on the same LAN, using iperf to test the performance of the
TCP/IP stack with your 10Gbit cards.
But as far as I can see, netmap is not involved in your setup, you are not
using it, aren't you?
IOW , I don't understand what does that "+ Netmap" mean you our test
description banner.

Cheers,
  Vincenzo

2016-12-02 0:55 GMT+01:00 Jordan Caraballo <jordancaraballo87@gmail.com>:

> Feedback and/or tips and tricks more than welcome.
>
> We are trying to process huge amounts of small (64 bytes) pps through a
> router. So far results have not been as we expected. We have tested
> FreeBSD 10.3, 11.0, 11.0-STABLE, and 12.0-CURRENT with and without
> netmap. Based on netmap documentation we were expecting about 5.0M pps;
> alongside with the routing improvements from the freebsd routing
> proposal a total of 12.0M.
>
> Server Description:
>
> Dell PowerEdge R530 with 2 Intel(R) Xeon(R) E5=C2=AD2695 CPU's, 18 cores =
per
> cpu. Equipped with a Chelsio T-580-CR dual port in an 8x slot.
>
> BIOS tweaks:
>
> Hyperthreading (or Logical Processors) is turned off.
>
> Current results are shown below. Additional configurations can be given
> upon request.
>
> Test Environment:
> 5 clients and 5 servers - 4 Dell C6100 and 2 Dell R420; each one
> equipped with 10G NICS (4 intel 8259X and 6 with mellanox connectx2).
>
> Script that execute the following on each host.
>
> #!/usr/local/bin/bash
> # Iterate through ports and start tests
> for ((i=3D1;i<=3DPORTS;i++)); do
>     PORT=3D$(($PORT+1))
>     iperf3 -c 172.16.2.$IP -u -b10000m -i 0 -N -l$PKT -t$TIME -P$STREAMS
> -p$PORT &
>     #iperf3 -c 172.16.2.$IP -i0 -N -l$PKT -t$TIME -P$STREAMS -p$PORT &
> done
>
> # FreeBSD 10.3 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  1.3M       194M       540k     0        57M 0     0
>       2.1M     0  1.5M       216M       556k     0        58M 0     0
>       1.8M     0  1.3M       192M       553k     0        58M 0     0
>       1.7M     0  1.1M       174M       542k     0        57M 0     0
>       1.9M     0  1.4M       204M       537k     0        56M 0     0
>       1.6M     0  1.1M       171M       550k     0        58M 0     0
>       1.6M     0  1.1M       173M       546k     0        57M 0     0
>       1.7M     0  1.1M       176M       564k     0        59M 0     0
>       2.0M     0  1.5M       212M       543k     0        57M 0     0
>       2.1M     0  1.5M       219M       557k     0        58M 0     0
>       1.9M     0  1.4M       205M       547k     0        57M 0     0
>       1.7M     0  1.2M       179M       553k     0        58M 0     0
>
> # FreeBSD 11.0 - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       3.1M     0  1.8M       326M       1.3M     0       134M 0     0
>       2.6M     0  1.5M       269M       1.1M     0       116M 0     0
>       2.7M     0  1.5M       285M       1.2M     0       127M 0     0
>       2.4M     0  1.3M       257M       1.1M     0       119M 0     0
>       2.7M     0  1.5M       287M       1.3M     0       134M 0     0
>       2.5M     0  1.3M       262M       1.2M     0       127M 0     0
>       2.1M     0  1.1M       224M       1.0M     0       108M 0     0
>       2.7M     0  1.4M       285M       1.4M     0       143M 0     0
>       2.6M     0  1.3M       272M       1.3M     0       136M 0     0
>       2.5M     0  1.4M       265M       1.1M     0       120M 0     0
> # FreeBSD 11.0-STABLE - 4 streams to 80 ports from each client (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.9M     0  849k       195M       1.0M     0       107M 0     0
>       1.9M     0  854k       196M       1.0M     0       106M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  851k       196M       1.0M     0       107M 0     0
>       1.9M     0  852k       196M       1.0M     0       107M 0     0
>       1.9M     0  847k       195M       1.0M     0       107M 0     0
>       1.9M     0  836k       195M       1.0M     0       107M 0     0
>       1.9M     0  843k       195M       1.0M     0       107M 0     0
> # FreeBSD 12.0-CURRENT - 4 streams to 80 ports from each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.1M   259     0       115M       1.1M     0       115M 0     0
>       1.2M   273     0       124M       1.2M     0       124M 0     0
>       1.1M   200     0       112M       1.1M     0       112M 0     0
>       1.2M   290     0       122M       1.2M     0       122M 0     0
>       1.0M   132     0       107M       1.0M     0       107M 0     0
>       1.1M   303     0       118M       1.1M     0       118M 0     0
>       1.1M   278     0       112M       1.1M     0       112M 0     0
>       1.2M   243     0       122M       1.2M     0       122M 0     0
>       1.1M   168     0       112M       1.1M     0       112M 0     0
>       1.1M   161     0       112M       1.1M     0       112M 0     0
> # FreeBSD 12.0-CURRENT + Netmap - 4 streams to 80 ports from each client
> (5)
>
>             input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    10     0       144M       1.4M     0       144M 0     0
>       1.5M     6     0       159M       1.5M     0       159M 0     0
>       1.4M     5     0       144M       1.4M     0       144M 0     0
>       1.5M    14     0       158M       1.5M     0       158M 0     0
>       1.4M     5     0       151M       1.4M     0       151M 0     0
>       1.4M    10     0       152M       1.4M     0       152M 0     0
>       1.4M    12     0       148M       1.4M     0       148M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.4M    23     0       151M       1.4M     0       151M 0     0
>       1.4M    11     0       151M       1.4M     0       151M 0     0
> # FreeBSD 12.0-CURRENT + Netmap + Tuning - 4 streams to 80 ports from
> each client (5)
>
>            input        (Total)           output
>    packets  errs idrops      bytes    packets  errs      bytes colls drop=
s
>       1.4M    15     0       145M       1.4M     0       145M 0     0
>       1.5M    18     0       157M       1.5M     0       157M 0     0
>       1.5M    10     0       156M       1.5M     0       156M 0     0
>       1.5M    15     0       154M       1.5M     0       154M 0     0
>       1.4M    13     0       146M       1.4M     0       146M 0     0
>       1.5M    15     0       156M       1.5M     0       156M 0     0
>       1.5M     9     0       155M       1.5M     0       155M 0     0
>       1.5M    13     0       153M       1.5M     0       153M 0     0
>       1.4M    14     0       145M       1.4M     0       145M 0     0
>       1.4M    17     0       151M       1.4M     0       151M 0     0
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"




--=20
Vincenzo Maffione

From owner-freebsd-net@freebsd.org  Fri Dec  2 15:23:50 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id D5FD2C635FA
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 15:23:50 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01on0084.outbound.protection.outlook.com [104.47.1.84])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 3D8E11C44
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 15:23:43 +0000 (UTC)
 (envelope-from Steven@stream-technologies.com)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=streamtechnologiesuk.onmicrosoft.com;
 s=selector1-streamtechnologies-com01e;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=PXg6H4HAdQQt0EkAunYpO/n8jE40orsMWjvJ5JnnwK8=;
 b=hm4EEsHU0E8aBsdOR2M5kwqth4I+S4BZqOeZy0U7UiXe38aEJXVNYSjGq3WCgI2bW8jycTZW4xOD5EnemlY/rm7zG4F3neAVmcu45yLmW630/owUBNmOeNbpUhZzo/+8Lx7FMcm54b4JzSBJRXBBjY0acH0xR/aPaIax/1+HokI=
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com (10.166.13.14) by
 DB5PR07MB1688.eurprd07.prod.outlook.com (10.166.13.17) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.771.4; Fri, 2 Dec 2016 14:22:47 +0000
Received: from DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) by
 DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) with mapi id
 15.01.0771.004; Fri, 2 Dec 2016 14:22:47 +0000
From: Steven Crangle <Steven@stream-technologies.com>
To: Vincenzo Maffione <v.maffione@gmail.com>
CC: FreeBSD Net <freebsd-net@freebsd.org>
Subject: Re: Looking for some help with netmap/bhyve
Thread-Topic: Looking for some help with netmap/bhyve
Thread-Index: AQHSRKuiOapzmKvhI0y8Pcsl7N08/KDmPxuAgAmeBLSAAAebAIAAJnrzgABMAwCABGOGsA==
Date: Fri, 2 Dec 2016 14:22:47 +0000
Message-ID: <DB5PR07MB16857B8F7A2B4783640074979B8E0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
 <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
 <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>,
 <CA+_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>
In-Reply-To: <CA+_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=Steven@stream-technologies.com; 
x-originating-ip: [212.20.240.118]
x-ms-office365-filtering-correlation-id: 99fff871-83e7-4608-eff2-08d41abeb0c3
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR07MB1688;
x-microsoft-exchange-diagnostics: 1; DB5PR07MB1688;
 7:8PfBJ/sggwVLoz5OzvBFlYKOr5cwLZQDYqhZ8weYup0rkReidrZOayAtT09zffL4Uf97nf1PcGjTnreBCfqQJAZwptmrkukRxQ25Hs4k/AgiIClUrJCG5DNFk+O1gGzggCLoyPuYLGpXA4nbVNzMklM2TcP6zV4p/ZpjmdP7Cy/ZtMZ43owPfH97NJZ0cN8S4mhfTBBO7b2QwS+550DAvwasr6GGif3zCqy0kuOI/uVmpahOu7f6BP9HmkeOJ/2tI31L8BwSwavoMkzwL+FeCxn4q0bKKv8F3ad5TWSuBkILC91K2YHSeEa5GEsji88UH5yslbEHuNHZyBlHvqbt0KQZlaaTaLACceiCKEF5DpDWdRDqrBbN2VRHKBnyGOjISACHgs8sL/PjvjRm+TlOtsCD/lIqczzYz7DD6aGYtfaVERbPQtlqM3fwXXg4mzs0EZfAuuEUufKh8gpnjA+qAg==
x-microsoft-antispam-prvs: <DB5PR07MB16888B09DA5D2542EFD9B6909B8E0@DB5PR07MB1688.eurprd07.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(56005881305849)(158342451672863)(278428928389397)(166708455590820)(203790808753936)(266611908612381)(75325880899374)(211171220733660)(83272782819144);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(2016111802025)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6043046)(6042181)(6072148);
 SRVR:DB5PR07MB1688; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB1688; 
x-forefront-prvs: 0144B30E41
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(7916002)(189002)(377424004)(52314003)(43784003)(199003)(6506004)(7846002)(77096006)(16601075003)(101416001)(2900100001)(93886004)(2906002)(4326007)(122556002)(76576001)(92566002)(19627405001)(19273905006)(3280700002)(3660700001)(33656002)(105586002)(106356001)(102836003)(3846002)(6116002)(66066001)(86362001)(575784001)(189998001)(81166006)(81156014)(8676002)(97736004)(80792005)(4001150100001)(106116001)(9686002)(68736007)(8936002)(229853002)(39060400001)(606004)(38730400001)(5890100001)(54356999)(6916009)(76176999)(7736002)(2950100002)(7906003)(7696004)(74316002)(99936001)(110136003)(50986999)(5660300001)(7099028)(16866105001)(473944003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB1688;
 H:DB5PR07MB1685.eurprd07.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords;
 MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: stream-technologies.com does not
 designate permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: multipart/mixed;
 boundary="_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_"
MIME-Version: 1.0
X-OriginatorOrg: stream-technologies.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2016 14:22:47.5620 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 720fa073-5781-43bf-bc14-7bef2603ed21
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1688
X-Mailman-Approved-At: Fri, 02 Dec 2016 17:24:37 +0000
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 15:23:51 -0000

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Vincenzo,


Figured I would reply to give you some more testing feedback! Ptnetmap is s=
uccessfully working for us now on 11.0 RELEASE (stock src.txz from FreeBSD.=
org) with the help of your patch! There were a few files missing from the p=
atch though, so I've attached a revised one which should work incase it's o=
f use to you! (might be a bit messy)

I've attached a txt file with some testing results too , but in summary:


1) netmap with no ptnet or vale: between 65-70Kpps.


2) netmap with vale but no ptnet: between 121-160Kpps.


3) ptnetmap with vale: seems to vary quite alot between 7-15Mpps.


All the tests were performed using pkt-gen with 60 byte packets. It's worth=
 noting that currently we're running the tests on a very old tired Sun Micr=
o server(Sun Fire X2200 M2 with Quad Core Processor). Currently in the proc=
ess of testing out our patch file on a clean 11.0 source on a much faster b=
ox, so can run more detailed testing there using iperf etc if it's useful t=
o you!


I have also attached a few kernel traces, I tried to turn symbols on, but i=
'm not sure it worked 100% Will try and fix it for the next install so that=
 I can provide better crash dumps if we run into any bugs!  The crashes att=
ached only ever occured in setup number 2 above.


Thanks again for your help!


Kind Regards


Steven













________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com>
Sent: 29 November 2016 18:42:04
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve

Hi Steven,

2016-11-29 16:44 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:


Hi Vincenzo,


No problem! We've decided that we will try testing with 11.0 too, as it wou=
ld help us to have our test system locked to a specific version like 11.0 a=
nd can hopefully help you with testing too. We'll compile netmap from sourc=
e as advised, but I was wondering what steps we would take in order to port=
 the changes to bhyve/ptnetmap from HEAD into 11.0?

I think you can get the patch containing my modifications to HEAD for bhyve=
+vmm.ko+libvmmapi, that you can extract with the following command in my fr=
eebsd git repository

$ git diff 9e10acc0303003d8733a546bca60f242b7b0aa64 ptnet-head lib/libvmmap=
i/ sys/amd64/ sys/modules/vmm/ usr.sbin/bhyve

and apply that patch in your 11.0 FreeBSD tree.



I've currently only tested with pkt-gen as our bhyve instances are pretty m=
inimal right now, below are a few samples of the speeds seen in each of the=
 different configurations:

which configurations?


Using netmap on top of standard tap devices with no vale:


vm1:
    197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps in =
1047062 usec) 1.93 avg_batch 826 min_space
    203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps in =
1008156 usec) 1.88 avg_batch 866 min_space
    204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps in =
1006929 usec) 1.98 avg_batch 911 min_space
vm2:
    245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps in =
1058559 usec) 313.79 avg_batch 99999 min_space
    246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps in =
1032392 usec) 319.47 avg_batch 99999 min_space
    251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps in =
1054531 usec) 314.42 avg_batch 99999 min_space

Be aware that you typically want to use netmap both in the VM and in the ho=
st (to use VALE and ptnet). Here you are probably using netmap just in the =
VM. Performance are however extremely low.
When using netmap in both guest and host, with ptnet, you should be able to=
 get at least 10-30 Mpps from vm1 to vm2.


After then trying to switch to the netmap in userspace/netmap in kernel spa=
ce with ptnetmap, I realised I made a silly mistake and built from head ins=
tead of the branch ptnet-head... haha So I'm currently doing a quick rebuil=
d on the correct branch and will report back with the results from pkt-gen =
using just vale, and also with the new ptnetmap changes!

Ok, also consider that you can use the patch I indicated above against HEAD=
.

Cheers,
  Vincenzo



Kind Regards








________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com<mailto:v.maffione@gmail.com>>
Sent: 29 November 2016 11:52:18

To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve

Hi Steven,
  Thanks for your testing this in HEAD, good news to know that it works ok!

I think there is not going to be much difference between HEAD and 11.0, bec=
ause in the end bhyve code didn't really change (for the parts I touched), =
and you need to use the latest netmap version (github) anyway, irrespective=
 of whether you are testing on 10.3, 11.0, head, etc. In other words, you w=
ould be testing approximately the same code. Anyway, if you happen to test =
11.0 by chance please let me know.

What kind of tests did you perform? netmap applications (e.g. pkt-gen), or =
netperf/iperf standard TCP/IP tools?
Could you please share the performance number you got for configurations (A=
) and (B) (or just the one you tried)?

I think it is useful to compare your results with the ones I collected here=
 (see the performance evaluation section):

https://wiki.freebsd.org/DevSummit/201609?action=3DAttachFile&do=3Dview&tar=
get=3D20160923-freebsd-summit-ptnet.pdf

Regarding the crashes, thanks for reporting, I would be nice if you could d=
escribe in more detail how you trigger them (with some higher likelyhood); =
also, compiling the kernel with debug symbols should help in understanding =
which part of the code is involved in the crash.

Cheers,
  Vincenzo


2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

 Hi Vincenzo!


Thank you so much for your help! With your instructions I've managed to get=
 a set of bhyves up and running with netmap working properly within them! I=
 chose to go with the recent version of head instead of 10.3.  I will also =
try and build a version on 11.0 if I get chance!


I will make sure and ask any further questions on the github page for netma=
p, but while I'm emailing, I've attached a text file containing a few kerne=
l page fault errors I've ran into. They don't happen repeatedly. They seem =
to just happen randomly if I try to shut the process down and possibly catc=
h netmap in an incorrect state! Figured they might be useful to you. If I f=
igure out what the error is myself I will try and help out!


And thanks again for your help!


Kind Regards









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com<mailto:v.maffione@gmail.com>>
Sent: 23 November 2016 08:33:11
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve



2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

Hi,


I've recently been trying to boot up several bhyves so that I can test netm=
ap communication between instances. The problem is, no matter what configur=
ation I try, the guest vm running in bhyve completely hangs and becomes unu=
sable as soon as a packet hits the netmap interface. When testing with pkt-=
gen, the TX side successfully starts sending packets, but the RX side will =
reliable freeze with the only option being killing the bhyve process.


The bhyve command used for the above test was:


    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er1vol    -s 3,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 4,virtio-net,tap4=
 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er2vol    -s 3,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 4,virtio-net,tap5=
 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

For this test the host OS was FreeBSD-11.0-p3 and the guest OS was FreeBSD-=
11.0-p3.

After failing to get this solution working, I pulled down the source from t=
he following url and installed it on the host box:

https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/

I then ran the following commands to try and bring up the machines using th=
e ptnetmap interface (the guest still running 11.0p3) :

    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper1vol    -s 2:0,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper2vol    -s 2:0,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

With the above commands the vm's fail to boot with the following message:

ptnet_init: failed to get ptnetmap

Output in /var/log/messages seems to just show the ptnetmap driver allocati=
ng one RX/TX ring for each vm, while bringing the device up, the device the=
n goes down and the above error is seen in the console.

Is there something I'm doing wrong with regards to running netmap or ptnetm=
ap within a bhyve? Any pointers in the right direction will be much appreci=
ated!

Kind Regards

Steven


Hi Steven,

  The code you are looking at is the final code released by my gsoc 2016 pr=
oject at the end of August 2016. However, I've been working on that for a w=
hile after the gsoc, so that code is not updated anymore. My modification b=
asically involves two subsystems: netmap and bhyve.

The updates to netmap are already available in HEAD. The updates to bhyve a=
re not yet upstream, as we are in the process to review that with the bhyve=
 maintainers.

Anyway, you need two sources to get the latest code:
1) https://github.com/luigirizzo/netmap for the latest netmap code, that yo=
u could also compile as an external kernel module.
2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and vm=
m.ko). You can use this as the host system. There are two branches here: pt=
net-10.3, and ptnet-head. My original code was developed under FreeBSD 10.3=
, so a first possibility is to try this as the host system (using the ptnet=
-10.3 branch). The other branch (ptnet-head) contains a porting of the work=
 to a recent version of HEAD. I would be very glad if you could test the co=
de also on FreeBSD 11.

We support two combinations of bhyve networking with netmap:

  (A) virtio-net + netmap: that is something like "-s 2:0,virtio-net,vale0:=
0" in the bhyve command line.
  (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s 2=
:2,ptnet,vale0:0" in the bhyve command line.

so you may want to try A first (netmap backend in user-space, slower) and t=
hen B (netmap backend in kernel-space, faster).

Sorry about the confusion on the code repositories, I'll try also to update=
 the wiki page (and/or the gsoc svn repo) to reflect these updates. It's pe=
rfectly ok for me to discuss these issues here in the ML, however for more =
detailed/low-level discussion and support about problems you are running in=
to, feel free to open Github issues here https://github.com/luigirizzo/netm=
ap.

Cheers,
  Vincenzo









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com><http://www.=
stream-technologies.com/>






_______________________________________________
freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org> mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org<mailt=
o:freebsd-net-unsubscribe@freebsd.org>"



--
Vincenzo Maffione



--
Vincenzo Maffione



--
Vincenzo Maffione

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/x-patch; name="ptnetmap-11.0.patch"
Content-Description: ptnetmap-11.0.patch
Content-Disposition: attachment; filename="ptnetmap-11.0.patch"; size=1559319;
	creation-date="Fri, 02 Dec 2016 14:17:48 GMT";
	modification-date="Fri, 02 Dec 2016 14:17:48 GMT"
Content-Transfer-Encoding: base64

ZGlmZiAtdSAtciAtTiB1c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvLmFyY2NvbmZpZwotLS0g
dXNyL3NyYy8uYXJjY29uZmlnCTIwMTYtMDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy8uYXJjY29uZmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CkBAIC0xLDUgKzAsMCBAQAotewotCSJyZXBvc2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKLQkicGhh
YnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvIiwKLQkiaGlzdG9y
eS5pbW11dGFibGUiIDogdHJ1ZQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvLmFyY2xpbnQgL3Vz
ci9zcmMvLmFyY2xpbnQKLS0tIHVzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoyNjozNi4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjLy5hcmNsaW50CTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCkBAIC0xLDI1ICswLDAgQEAKLXsKLSAgImV4Y2x1ZGUiOiAiKGNvbnRy
aWJ8Y3J5cHRvKSIsCi0gICJsaW50ZXJzIjogewotICAgICJweXRob24iOiB7Ci0gICAgICAidHlw
ZSI6ICJwZXA4IiwKLSAgICAgICJpbmNsdWRlIjogIihcXC5weSQpIgotICAgIH0sCi0gICAgInNw
ZWxsaW5nIjogewotICAgICAgInR5cGUiOiAic3BlbGxpbmciCi0gICAgfSwKLSAgICAiY2htb2Qi
OiB7Ci0gICAgICAidHlwZSI6ICJjaG1vZCIKLSAgICB9LAotICAgICJtZXJnZS1jb25mbGljdCI6
IHsKLSAgICAgICJ0eXBlIjogIm1lcmdlLWNvbmZsaWN0IgotICAgIH0sCi0gICAgImZpbGVuYW1l
IjogewotICAgICAgInR5cGUiOiAiZmlsZW5hbWUiCi0gICAgfSwKLSAgICAianNvbiI6IHsKLSAg
ICAgICJ0eXBlIjogImpzb24iLAotICAgICAgImluY2x1ZGUiOiAiKFxcLmFyY2xpbnR8XFwuanNv
biQpIgotICAgIH0KLSAgfQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvT29wcy5yZWogL3Vzci9z
cmMvT29wcy5yZWoKLS0tIHVzci9zcmMvT29wcy5yZWoJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL09vcHMucmVqCTIwMTYtMTEtMzAgMTA6NTY6MTAuNDM0
MDMyMDAwICswMDAwCkBAIC0wLDAgKzEsMjkyIEBACitAQCAtMzcsNiArMzcsNyBAQAorICNpbmNs
dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRl
IDxuZXRpbmV0L3RjcC5oPgorKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KKyAK
KyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK0BAIC01NSw2ICs1Niw4
IEBACisgI2luY2x1ZGUgImJoeXZlcnVuLmgiCisgI2luY2x1ZGUgInBjaV9lbXVsLmgiCisgI2lu
Y2x1ZGUgIm1ldmVudC5oIgorKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJl
c3MgZ2VuZXJhdGlvbiAqLworKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKyAKKyAvKiBIYXJk
d2FyZS9yZWdpc3RlciBkZWZpbml0aW9ucyBYWFg6IG1vdmUgc29tZSB0byBjb21tb24gY29kZS4g
Ki8KKyAjZGVmaW5lIEU4MjU0NV9WRU5ET1JfSURfSU5URUwJCQkweDgwODYKK0BAIC0yMzQsMTEg
KzIzNywxMCBAQAorIHN0cnVjdCBlODI1NDVfc29mdGMgeworIAlzdHJ1Y3QgcGNpX2Rldmluc3Qg
KmVzY19waTsKKyAJc3RydWN0IHZtY3R4CSplc2NfY3R4OworLQlzdHJ1Y3QgbWV2ZW50ICAgKmVz
Y19tZXZwOworIAlzdHJ1Y3QgbWV2ZW50ICAgKmVzY19tZXZwaXRyOworIAlwdGhyZWFkX211dGV4
X3QJZXNjX210eDsKKyAJc3RydWN0IGV0aGVyX2FkZHIgZXNjX21hYzsKKy0JaW50CQllc2NfdGFw
ZmQ7CisrCXN0cnVjdCBuZXRfYmFja2VuZCAqZXNjX2JlOworIAorIAkvKiBHZW5lcmFsICovCisg
CXVpbnQzMl90CWVzY19DVFJMOwkvKiB4MDAwMCBkZXZpY2UgY3RsICovCitAQCAtMzQ0LDcgKzM0
Niw3IEBACisgc3RhdGljIHZvaWQgZTgyNTQ1X3Jlc2V0KHN0cnVjdCBlODI1NDVfc29mdGMgKnNj
LCBpbnQgZGV2KTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZW5hYmxlKHN0cnVjdCBlODI1NDVf
c29mdGMgKnNjKTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZGlzYWJsZShzdHJ1Y3QgZTgyNTQ1
X3NvZnRjICpzYyk7Cistc3RhdGljIHZvaWQgZTgyNTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVu
dW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSk7Cisrc3RhdGljIHZvaWQgZTgyNTQ1X3J4X2Nh
bGxiYWNrKGludCBmZCwgZW51bSBldl90eXBlIHR5cGUsIHZvaWQgKnBhcmFtKTsKKyBzdGF0aWMg
dm9pZCBlODI1NDVfdHhfc3RhcnQoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2
b2lkIGU4MjU0NV90eF9lbmFibGUoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2
b2lkIGU4MjU0NV90eF9kaXNhYmxlKHN0cnVjdCBlODI1NDVfc29mdGMgKnNjKTsKK0BAIC04MTMs
MTEgKzgxNSw5IEBACisgCXJldHVybiAoMjU2KTsJLyogRm9yYmlkZGVuIHZhbHVlLiAqLworIH0K
KyAKKy1zdGF0aWMgdWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKKy0KKyAvKiBYWFggb25lIHBhY2tl
dCBhdCBhIHRpbWUgdW50aWwgdGhpcyBpcyBkZWJ1Z2dlZCAqLworIHN0YXRpYyB2b2lkCistZTgy
NTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkK
KytlODI1NDVfcnhfY2FsbGJhY2soaW50IGZkLCBlbnVtIGV2X3R5cGUgdHlwZSwgdm9pZCAqcGFy
YW0pCisgeworIAlzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYyA9IHBhcmFtOworIAlzdHJ1Y3QgZTEw
MDBfcnhfZGVzYyAqcnhkOworQEAgLTgzMiw3ICs4MzIsNyBAQAorIAlpZiAoIXNjLT5lc2Nfcnhf
ZW5hYmxlZCB8fCBzYy0+ZXNjX3J4X2xvb3BiYWNrKSB7CisgCQlEUFJJTlRGKCJyeCBkaXNhYmxl
ZCAoISVkIHx8ICVkKSAtLSBwYWNrZXQocykgZHJvcHBlZFxyXG4iLAorIAkJICAgIHNjLT5lc2Nf
cnhfZW5hYmxlZCwgc2MtPmVzY19yeF9sb29wYmFjayk7CistCQl3aGlsZSAocmVhZChzYy0+ZXNj
X3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15YnVmKSkgPiAwKSB7CisrCQl3aGlsZSAobmV0
YmVfcnhfZGlzY2FyZChzYy0+ZXNjX2JlKSA+IDApIHsKKyAJCX0KKyAJCWdvdG8gZG9uZTE7Cisg
CX0KK0BAIC04NDUsNyArODQ1LDcgQEAKKyAJaWYgKGxlZnQgPCBtYXhwa3RkZXNjKSB7CisgCQlE
UFJJTlRGKCJyeCBvdmVyZmxvdyAoJWQgPCAlZCkgLS0gcGFja2V0KHMpIGRyb3BwZWRcclxuIiwK
KyAJCSAgICBsZWZ0LCBtYXhwa3RkZXNjKTsKKy0JCXdoaWxlIChyZWFkKHNjLT5lc2NfdGFwZmQs
IGR1bW15YnVmLCBzaXplb2YoZHVtbXlidWYpKSA+IDApIHsKKysJCXdoaWxlIChuZXRiZV9yeF9k
aXNjYXJkKHNjLT5lc2NfYmUpID4gMCkgeworIAkJfQorIAkJZ290byBkb25lMTsKKyAJfQorQEAg
LTg2Miw5ICs4NjIsOSBAQAorIAkJCSAgICByeGQtPmJ1ZmZlcl9hZGRyLCBidWZzeik7CisgCQkJ
dmVjW2ldLmlvdl9sZW4gPSBidWZzejsKKyAJCX0KKy0JCWxlbiA9IHJlYWR2KHNjLT5lc2NfdGFw
ZmQsIHZlYywgbWF4cGt0ZGVzYyk7CisrCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT5lc2NfYmUsIHZl
YywgbWF4cGt0ZGVzYyk7CisgCQlpZiAobGVuIDw9IDApIHsKKy0JCQlEUFJJTlRGKCJ0YXA6IHJl
YWR2KCkgcmV0dXJuZWQgJWRcbiIsIGxlbik7CisrCQkJRFBSSU5URigiYmU6IHJlY3YoKSByZXR1
cm5lZCAlZFxuIiwgbGVuKTsKKyAJCQlnb3RvIGRvbmU7CisgCQl9CisgCitAQCAtMTAzNiwxMyAr
MTAzNiwxMCBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorLWU4MjU0NV90cmFuc21pdF9iYWNrZW5k
KHN0cnVjdCBlODI1NDVfc29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkK
KytlODI1NDVfdHJhbnNtaXRfYmFja2VuZChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgc3RydWN0
IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisrCQkJdWludDMyX3QgbGVuKQorIHsKKy0KKy0JaWYg
KHNjLT5lc2NfdGFwZmQgPT0gLTEpCistCQlyZXR1cm47CistCistCSh2b2lkKSB3cml0ZXYoc2Mt
PmVzY190YXBmZCwgaW92LCBpb3ZjbnQpOworKwluZXRiZV9zZW5kKHNjLT5lc2NfYmUsIGlvdiwg
aW92Y250LCBsZW4sIDApOworIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTEwNzgsNyArMTA3NSw3
IEBACisgCisgCWNraW5mb1swXS5ja192YWxpZCA9IGNraW5mb1sxXS5ja192YWxpZCA9IDA7Cisg
CWlvdmNudCA9IDA7CistCXRsZW4gPSAwOworKwl0bGVuID0gMDsgLyogdG90YWwgbGVuZ3RoICov
CisgCW50eXBlID0gMDsKKyAJdHNvID0gMDsKKyAJb2hlYWQgPSBoZWFkOworQEAgLTEyMDMsNiAr
MTIwMCw3IEBACisgCQloZHJsZW4gPSBFVEhFUl9BRERSX0xFTioyOworIAkJdmxlbiA9IEVUSEVS
X1ZMQU5fRU5DQVBfTEVOOworIAl9CisrCXRsZW4gKz0gdmxlbjsKKyAJaWYgKCF0c28pIHsKKyAJ
CS8qIEVzdGltYXRlIHJlcXVpcmVkIHdyaXRhYmxlIHNwYWNlIGZvciBjaGVja3N1bXMuICovCisg
CQlpZiAoY2tpbmZvWzBdLmNrX3ZhbGlkKQorQEAgLTEyNjgsNyArMTI2Niw3IEBACisgCQkJZTgy
NTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92Y250LCAmY2tpbmZvWzBdKTsKKyAJCWlmIChj
a2luZm9bMV0uY2tfdmFsaWQpCisgCQkJZTgyNTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92
Y250LCAmY2tpbmZvWzFdKTsKKy0JCWU4MjU0NV90cmFuc21pdF9iYWNrZW5kKHNjLCBpb3YsIGlv
dmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgaW92LCBpb3ZjbnQsIHRsZW4p
OworIAkJZ290byBkb25lOworIAl9CisgCitAQCAtMTI5MiwxMyArMTI5MCwxNCBAQAorIAkJLyog
Q29uc3RydWN0IElPVnMgZm9yIHRoZSBzZWdtZW50LiAqLworIAkJLyogSW5jbHVkZSB3aG9sZSBv
cmlnaW5hbCBoZWFkZXIuICovCisgCQl0aW92WzBdLmlvdl9iYXNlID0gaGRyOworLQkJdGlvdlsw
XS5pb3ZfbGVuID0gaGRybGVuOworKwkJdGlvdlswXS5pb3ZfbGVuID0gdGxlbiA9IGhkcmxlbjsK
KyAJCXRpb3ZjbnQgPSAxOworIAkJLyogSW5jbHVkZSByZXNwZWN0aXZlIHBhcnQgb2YgcGF5bG9h
ZCBJT1YuICovCisgCQlmb3IgKG5sZWZ0ID0gbm93OyBwdiA8IGlvdmNudCAmJiBubGVmdCA+IDA7
IG5sZWZ0IC09IG5ub3cpIHsKKyAJCQlubm93ID0gTUlOKG5sZWZ0LCBpb3ZbcHZdLmlvdl9sZW4g
LSBwdm9mZik7CisgCQkJdGlvdlt0aW92Y250XS5pb3ZfYmFzZSA9IGlvdltwdl0uaW92X2Jhc2Ug
KyBwdm9mZjsKKyAJCQl0aW92W3Rpb3ZjbnQrK10uaW92X2xlbiA9IG5ub3c7CisrCQkJdGxlbiAr
PSBubm93OworIAkJCWlmIChwdm9mZiArIG5ub3cgPT0gaW92W3B2XS5pb3ZfbGVuKSB7CisgCQkJ
CXB2Kys7CisgCQkJCXB2b2ZmID0gMDsKK0BAIC0xMzUxLDcgKzEzNTAsNyBAQAorIAkJCSAgICBl
ODI1NDVfY2FycnkodGNwc3VtKTsKKyAJCQllODI1NDVfdHJhbnNtaXRfY2hlY2tzdW0odGlvdiwg
dGlvdmNudCwgJmNraW5mb1sxXSk7CisgCQl9CistCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChz
YywgdGlvdiwgdGlvdmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgdGlvdiwg
dGlvdmNudCwgdGxlbik7CisgCX0KKyAKKyBkb25lOgorQEAgLTIxOTgsODAgKzIxOTcsMTcgQEAK
KyAJc2MtPmVzY19UWERDVEwgPSAwOworIH0KKyAKKy1zdGF0aWMgdm9pZAorLWU4MjU0NV9vcGVu
X3RhcChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgY2hhciAqb3B0cykKKy17CistCWNoYXIgdGJ1
Zls4MF07CistCQorLQlpZiAob3B0cyA9PSBOVUxMKSB7CistCQlzYy0+ZXNjX3RhcGZkID0gLTE7
CistCQlyZXR1cm47CistCX0KKy0KKy0Jc3RyY3B5KHRidWYsICIvZGV2LyIpOworLQlzdHJsY2F0
KHRidWYsIG9wdHMsIHNpemVvZih0YnVmKSk7CistCistCXNjLT5lc2NfdGFwZmQgPSBvcGVuKHRi
dWYsIE9fUkRXUik7CistCWlmIChzYy0+ZXNjX3RhcGZkID09IC0xKSB7CistCQlEUFJJTlRGKCJ1
bmFibGUgdG8gb3BlbiB0YXAgZGV2aWNlICVzXG4iLCBvcHRzKTsKKy0JCWV4aXQoMSk7CistCX0K
Ky0KKy0JLyoKKy0JICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKy0J
ICogbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBldmVudCBsb29wCistCSAqLworLQlpbnQgb3B0ID0g
MTsKKy0JaWYgKGlvY3RsKHNjLT5lc2NfdGFwZmQsIEZJT05CSU8sICZvcHQpIDwgMCkgeworLQkJ
V1BSSU5URigidGFwIGRldmljZSBPX05PTkJMT0NLIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKKy0J
CWNsb3NlKHNjLT5lc2NfdGFwZmQpOworLQkJc2MtPmVzY190YXBmZCA9IC0xOworLQl9CistCist
CXNjLT5lc2NfbWV2cCA9IG1ldmVudF9hZGQoc2MtPmVzY190YXBmZCwKKy0JCQkJICBFVkZfUkVB
RCwKKy0JCQkJICBlODI1NDVfdGFwX2NhbGxiYWNrLAorLQkJCQkgIHNjKTsKKy0JaWYgKHNjLT5l
c2NfbWV2cCA9PSBOVUxMKSB7CistCQlEUFJJTlRGKCJDb3VsZCBub3QgcmVnaXN0ZXIgbWV2ZW50
ICVkXG4iLCBFVkZfUkVBRCk7CistCQljbG9zZShzYy0+ZXNjX3RhcGZkKTsKKy0JCXNjLT5lc2Nf
dGFwZmQgPSAtMTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50CistZTgyNTQ1X3BhcnNlbWFjKGNo
YXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKQorLXsKKy0Jc3RydWN0IGV0aGVyX2FkZHIg
KmVhOworLQljaGFyICp0bXBzdHI7CistCWNoYXIgemVyb19hZGRyW0VUSEVSX0FERFJfTEVOXSA9
IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworLQorLQl0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0i
KTsKKy0JaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7
CistCQllYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CistCQlpZiAoZWEgPT0gTlVMTCB8fCBFVEhF
Ul9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorLQkJICAgIG1lbWNtcChlYS0+b2N0ZXQsIHpl
cm9fYWRkciwgRVRIRVJfQUREUl9MRU4pID09IDApIHsKKy0JCQlmcHJpbnRmKHN0ZGVyciwgIklu
dmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKy0JCQlyZXR1cm4gKDEpOworLQkJfSBlbHNlCist
CQkJbWVtY3B5KG1hY19hZGRyLCBlYS0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKy0JfQorLQly
ZXR1cm4gKDApOworLX0KKy0KKyBzdGF0aWMgaW50CisgZTgyNTQ1X2luaXQoc3RydWN0IHZtY3R4
ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCisgeworLQlEUFJJTlRG
KCJMb2FkaW5nIHdpdGggb3B0aW9uczogJXNcclxuIiwgb3B0cyk7CistCistCU1ENV9DVFggbWRj
dHg7CistCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKyAJY2hhciBuc3RyWzgwXTsKKyAJc3Ry
dWN0IGU4MjU0NV9zb2Z0YyAqc2M7CisgCWNoYXIgKmRldm5hbWU7CisgCWNoYXIgKnZ0b3B0czsK
KyAJaW50IG1hY19wcm92aWRlZDsKKyAKKysJRFBSSU5URigiTG9hZGluZyB3aXRoIG9wdGlvbnM6
ICVzXHJcbiIsIG9wdHMpOworKworIAkvKiBTZXR1cCBvdXIgc29mdGMgKi8KKyAJc2MgPSBjYWxs
b2Moc2l6ZW9mKCpzYyksIDEpOworIAorQEAgLTIzMDksMTEgKzIyNDUsMTAgQEAKKyAJCUU4MjU0
NV9CQVJfSU9fTEVOKTsKKyAKKyAJLyoKKy0JICogQXR0ZW1wdCB0byBvcGVuIHRoZSB0YXAgZGV2
aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcworLQkgKiBpZiBzcGVjaWZpZWQuICBDb3BpZWQg
ZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKysJICogQXR0ZW1wdCB0byBvcGVu
IHRoZSBiYWNrZW5kIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKysJICogaWYgc3Bl
Y2lmaWVkLiBDb3BpZWQgZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKyAJICov
CisgCW1hY19wcm92aWRlZCA9IDA7CistCXNjLT5lc2NfdGFwZmQgPSAtMTsKKyAJaWYgKG9wdHMg
IT0gTlVMTCkgeworIAkJaW50IGVycjsKKyAKK0BAIC0yMzIxLDcgKzIyNTYsNyBAQAorIAkJKHZv
aWQpIHN0cnNlcCgmdnRvcHRzLCAiLCIpOworIAorIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Cist
CQkJZXJyID0gZTgyNTQ1X3BhcnNlbWFjKHZ0b3B0cywgc2MtPmVzY19tYWMub2N0ZXQpOworKwkJ
CWVyciA9IG5ldF9wYXJzZW1hYyh2dG9wdHMsIHNjLT5lc2NfbWFjLm9jdGV0KTsKKyAJCQlpZiAo
ZXJyICE9IDApIHsKKyAJCQkJZnJlZShkZXZuYW1lKTsKKyAJCQkJcmV0dXJuIChlcnIpOworQEAg
LTIzMjksOSArMjI2NCwxMSBAQAorIAkJCW1hY19wcm92aWRlZCA9IDE7CisgCQl9CisgCistCQlp
ZiAoc3RybmNtcChkZXZuYW1lLCAidGFwIiwgMykgPT0gMCB8fAorLQkJICAgIHN0cm5jbXAoZGV2
bmFtZSwgInZtbmV0IiwgNSkgPT0gMCkKKy0JCQllODI1NDVfb3Blbl90YXAoc2MsIGRldm5hbWUp
OworKwkJc2MtPmVzY19iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgZTgyNTQ1X3J4X2NhbGxiYWNr
LCBzYyk7CisrCQlpZiAoIXNjLT5lc2NfYmUpIHsKKysJCQlXUFJJTlRGKCJuZXQgYmFja2VuZCAn
JXMnIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKysJCQkJZGV2bmFtZSk7CisrCQl9CisgCisg
CQlmcmVlKGRldm5hbWUpOworIAl9CitAQCAtMjM0MSwxOSArMjI3OCw3IEBACisgCSAqIGZvbGxv
d2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNsb3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCisg
CSAqLworIAlpZiAoIW1hY19wcm92aWRlZCkgeworLQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5z
dHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwKKy0JCSAgICBwaS0+cGlfZnVuYywgdm1uYW1l
KTsKKy0KKy0JCU1ENUluaXQoJm1kY3R4KTsKKy0JCU1ENVVwZGF0ZSgmbWRjdHgsIG5zdHIsIHN0
cmxlbihuc3RyKSk7CistCQlNRDVGaW5hbChkaWdlc3QsICZtZGN0eCk7CistCistCQlzYy0+ZXNj
X21hYy5vY3RldFswXSA9IDB4MDA7CistCQlzYy0+ZXNjX21hYy5vY3RldFsxXSA9IDB4YTA7Cist
CQlzYy0+ZXNjX21hYy5vY3RldFsyXSA9IDB4OTg7CistCQlzYy0+ZXNjX21hYy5vY3RldFszXSA9
IGRpZ2VzdFswXTsKKy0JCXNjLT5lc2NfbWFjLm9jdGV0WzRdID0gZGlnZXN0WzFdOworLQkJc2Mt
PmVzY19tYWMub2N0ZXRbNV0gPSBkaWdlc3RbMl07CisrCQluZXRfZ2VubWFjKHBpLCBzYy0+ZXNj
X21hYy5vY3RldCk7CisgCX0KKyAKKyAJLyogSC93IGluaXRpYXRlZCByZXNldCAqLwpkaWZmIC11
IC1yIC1OIHVzci9zcmMvZXRjL3NyYy5jb25mIC91c3Ivc3JjL2V0Yy9zcmMuY29uZgotLS0gdXNy
L3NyYy9ldGMvc3JjLmNvbmYJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL2V0Yy9zcmMuY29uZgkyMDE2LTEyLTAxIDEwOjA2OjE4LjAxMTQ2MzAwMCArMDAw
MApAQCAtMCwwICsxLDUgQEAKK1dJVEhfQ0xBTkc9IHllcworV0lUSF9DTEFOR19FWFRSQVM9IHll
cyAjIEJ1aWxkIGFkZGl0aW9uYWwgY2xhbmcgYW5kIGxsdm0gdG9vbHMsIHN1Y2ggYXMgYnVncG9p
bnQuCitXSVRIX0NMQU5HX0lTX0NDPSB5ZXMgICMgVXNlZnVsIGZvciBzb21lIGJ1aWxkd29ybGQg
ZXJyb3JzCisjIFdJVEhPVVRfR0NDPSB5ZXMKKwpkaWZmIC11IC1yIC1OIHVzci9zcmMvbGliL2xp
YnZtbWFwaS92bW1hcGkuYyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jCi0tLSB1c3Iv
c3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0wOS0yOSAwMDoyNjowMi4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0xMS0zMCAxMDo1
NjowNS43ODE2MTYwMDAgKzAwMDAKQEAgLTg4Miw2ICs4ODIsNTUgQEAKIAlyZXR1cm4gKGlvY3Rs
KGN0eC0+ZmQsIFZNX01BUF9QUFRERVZfTU1JTywgJnBwdG1taW8pKTsKIH0KIAorLyoKKyAqIEV4
cG9ydCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZNLCB1c2VyZnVs
IGZvciBleHRlcm5hbAorICogcHJvZ3JhbXMgKGUuZy4gdG8gaXNzdWUgaW9jdGwoKSkuCisgKi8K
K2ludAordm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KQoreworCXJldHVybiAoY3R4LT5mZCk7
Cit9CisKKy8qCisgKiBNYXAgYW4gdXNlci1zcGFjZSBidWZmZXIgaW50byB0aGUgVk0gYXQgYSBn
aXZlbiBwaHlzaWNhbCBhZGRyZXNzLgorICogVG8gYmUgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IGV4
cG9zZSBpbnRlcm5hbCBtZW1vcnkuCisgKi8KK2ludAordm1fbWFwX3VzZXJfYnVmKHN0cnVjdCB2
bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgdm9pZCAqaG9zdF9idWYpCit7
CisJc3RydWN0IHZtX3VzZXJfYnVmIHVzZXJfYnVmOworCisJYnplcm8oJnVzZXJfYnVmLCBzaXpl
b2YodXNlcl9idWYpKTsKKwl1c2VyX2J1Zi5ncGEgPSBncGE7CisJdXNlcl9idWYubGVuID0gbGVu
OworCXVzZXJfYnVmLmFkZHIgPSBob3N0X2J1ZjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwg
Vk1fTUFQX1VTRVJfQlVGLCAmdXNlcl9idWYpKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGhhbmRs
ZXIgZm9yIGd1ZXN0IEkvTyBhY2Nlc3NlcyBvbiBhIGdpdmVuIEkvTyBwb3J0LCBvcHRpb25hbGx5
CisgKiBmaWx0ZXJpbmcgb24gdGhlIGRhdGEuIFFFTVUvS1ZNIGltcGxlbWVudCBhIHNpbWlsYXIg
ZnVuY3Rpb25hbGl0eS4KKyAqLworaW50Cit2bV9pb19yZWdfaGFuZGxlcihzdHJ1Y3Qgdm1jdHgg
KmN0eCwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJCSAgdWludDMyX3QgbWFza19kYXRh
LCB1aW50MzJfdCBkYXRhLAorCQkgIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQgKmFy
ZykKK3sKKwlzdHJ1Y3Qgdm1faW9fcmVnX2hhbmRsZXIgaW9yZWdoOworCisJYnplcm8oJmlvcmVn
aCwgc2l6ZW9mKGlvcmVnaCkpOworCWlvcmVnaC5wb3J0ID0gcG9ydDsKKwlpb3JlZ2guaW4gPSBp
bjsKKwlpb3JlZ2gubWFza19kYXRhID0gbWFza19kYXRhOworCWlvcmVnaC5kYXRhID0gZGF0YTsK
Kwlpb3JlZ2gudHlwZSA9IHR5cGU7CisJaW9yZWdoLmFyZyA9IGFyZzsKKworCXJldHVybiAoaW9j
dGwoY3R4LT5mZCwgVk1fSU9fUkVHX0hBTkRMRVIsICZpb3JlZ2gpKTsKK30KKwogaW50CiB2bV9z
ZXR1cF9wcHRkZXZfbXNpKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IGJ1cywgaW50
IHNsb3QsIGludCBmdW5jLAogICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51
bXZlYykKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMub3JpZyAv
dXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcKLS0tIHVzci9zcmMvbGliL2xpYnZt
bWFwaS92bW1hcGkuYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1
MS43MDI2MjkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDEzIEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMgMjk1ODgxIDIwMTYtMDItMjIgMDk6MDQ6MzZaIHNrcmEg
JAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogcmVs
ZW5nLzExLjAvbGliL2xpYnZtbWFwaS92bW1hcGkuYyAyOTU4ODEgMjAxNi0wMi0yMiAwOTowNDoz
Nlogc2tyYSAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lz
Y3RsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNp
bmNsdWRlIDxzeXMvX2lvdmVjLmg+CisjaW5jbHVkZSA8c3lzL2NwdXNldC5oPgorCisjaW5jbHVk
ZSA8eDg2L3NlZ21lbnRzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zcGVjaWFscmVnLmg+CisKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNu
dGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnV0aWwuaD4KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW1fZGV2Lmg+CisKKyNp
bmNsdWRlICJ2bW1hcGkuaCIKKworI2RlZmluZQlNQgkoMTAyNCAqIDEwMjRVTCkKKyNkZWZpbmUJ
R0IJKDEwMjQgKiAxMDI0ICogMTAyNFVMKQorCisvKgorICogU2l6ZSBvZiB0aGUgZ3VhcmQgcmVn
aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQorICogbWFwcGlu
ZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5LiBUaGlzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0
aGUKKyAqIHN1cGVycGFnZSBzaXplIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICovCisjZGVm
aW5lCVZNX01NQVBfR1VBUkRfU0laRQkoNCAqIE1CKQorCisjZGVmaW5lCVBST1RfUlcJCShQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFKQorI2RlZmluZQlQUk9UX0FMTAkoUFJPVF9SRUFEIHwgUFJPVF9X
UklURSB8IFBST1RfRVhFQykKKworc3RydWN0IHZtY3R4IHsKKwlpbnQJZmQ7CisJdWludDMyX3Qg
bG93bWVtX2xpbWl0OworCWludAltZW1mbGFnczsKKwlzaXplX3QJbG93bWVtOworCXNpemVfdAlo
aWdobWVtOworCWNoYXIJKmJhc2VhZGRyOworCWNoYXIJKm5hbWU7Cit9OworCisjZGVmaW5lCUNS
RUFURSh4KSAgc3lzY3RsYnluYW1lKCJody52bW0uY3JlYXRlIiwgTlVMTCwgTlVMTCwgKHgpLCBz
dHJsZW4oKHgpKSkKKyNkZWZpbmUJREVTVFJPWSh4KSBzeXNjdGxieW5hbWUoImh3LnZtbS5kZXN0
cm95IiwgTlVMTCwgTlVMTCwgKHgpLCBzdHJsZW4oKHgpKSkKKworc3RhdGljIGludAordm1fZGV2
aWNlX29wZW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICAgICAgaW50IGZkLCBsZW47CisgICAg
ICAgIGNoYXIgKnZtZmlsZTsKKworCWxlbiA9IHN0cmxlbigiL2Rldi92bW0vIikgKyBzdHJsZW4o
bmFtZSkgKyAxOworCXZtZmlsZSA9IG1hbGxvYyhsZW4pOworCWFzc2VydCh2bWZpbGUgIT0gTlVM
TCk7CisJc25wcmludGYodm1maWxlLCBsZW4sICIvZGV2L3ZtbS8lcyIsIG5hbWUpOworCisgICAg
ICAgIC8qIE9wZW4gdGhlIGRldmljZSBmaWxlICovCisgICAgICAgIGZkID0gb3Blbih2bWZpbGUs
IE9fUkRXUiwgMCk7CisKKwlmcmVlKHZtZmlsZSk7CisgICAgICAgIHJldHVybiAoZmQpOworfQor
CitpbnQKK3ZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQoreworCisJcmV0dXJuIChDUkVBVEUo
KGNoYXIgKiluYW1lKSk7Cit9CisKK3N0cnVjdCB2bWN0eCAqCit2bV9vcGVuKGNvbnN0IGNoYXIg
Km5hbWUpCit7CisJc3RydWN0IHZtY3R4ICp2bTsKKworCXZtID0gbWFsbG9jKHNpemVvZihzdHJ1
Y3Qgdm1jdHgpICsgc3RybGVuKG5hbWUpICsgMSk7CisJYXNzZXJ0KHZtICE9IE5VTEwpOworCisJ
dm0tPmZkID0gLTE7CisJdm0tPm1lbWZsYWdzID0gMDsKKwl2bS0+bG93bWVtX2xpbWl0ID0gMyAq
IEdCOworCXZtLT5uYW1lID0gKGNoYXIgKikodm0gKyAxKTsKKwlzdHJjcHkodm0tPm5hbWUsIG5h
bWUpOworCisJaWYgKCh2bS0+ZmQgPSB2bV9kZXZpY2Vfb3Blbih2bS0+bmFtZSkpIDwgMCkKKwkJ
Z290byBlcnI7CisKKwlyZXR1cm4gKHZtKTsKK2VycjoKKwl2bV9kZXN0cm95KHZtKTsKKwlyZXR1
cm4gKE5VTEwpOworfQorCit2b2lkCit2bV9kZXN0cm95KHN0cnVjdCB2bWN0eCAqdm0pCit7CisJ
YXNzZXJ0KHZtICE9IE5VTEwpOworCisJaWYgKHZtLT5mZCA+PSAwKQorCQljbG9zZSh2bS0+ZmQp
OworCURFU1RST1kodm0tPm5hbWUpOworCisJZnJlZSh2bSk7Cit9CisKK2ludAordm1fcGFyc2Vf
bWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqcmV0X21lbXNpemUpCit7CisJY2hh
ciAqZW5kcHRyOworCXNpemVfdCBvcHR2YWw7CisJaW50IGVycm9yOworCisJb3B0dmFsID0gc3Ry
dG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCWlmICgqb3B0YXJnICE9ICdcMCcgJiYgKmVuZHB0
ciA9PSAnXDAnKSB7CisJCS8qCisJCSAqIEZvciB0aGUgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IGlmIHRoZSBtZW1vcnkgc2l6ZQorCQkgKiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQg
bGluZSBpcyBsZXNzIHRoYW4gYSBtZWdhYnl0ZSB0aGVuCisJCSAqIGl0IGlzIGludGVycHJldGVk
IGFzIGJlaW5nIGluIHVuaXRzIG9mIE1CLgorCQkgKi8KKwkJaWYgKG9wdHZhbCA8IE1CKQorCQkJ
b3B0dmFsICo9IE1COworCQkqcmV0X21lbXNpemUgPSBvcHR2YWw7CisJCWVycm9yID0gMDsKKwl9
IGVsc2UKKwkJZXJyb3IgPSBleHBhbmRfbnVtYmVyKG9wdGFyZywgcmV0X21lbXNpemUpOworCisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3VpbnQzMl90Cit2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVj
dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbV9saW1pdCk7Cit9CisKK3Zv
aWQKK3ZtX3NldF9sb3dtZW1fbGltaXQoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90IGxpbWl0
KQoreworCisJY3R4LT5sb3dtZW1fbGltaXQgPSBsaW1pdDsKK30KKwordm9pZAordm1fc2V0X21l
bWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgZmxhZ3MpCit7CisKKwljdHgtPm1lbWZsYWdz
ID0gZmxhZ3M7Cit9CisKK2ludAordm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KQor
eworCisJcmV0dXJuIChjdHgtPm1lbWZsYWdzKTsKK30KKworLyoKKyAqIE1hcCBzZWdtZW50ICdz
ZWdpZCcgc3RhcnRpbmcgYXQgJ29mZicgaW50byBndWVzdCBhZGRyZXNzIHJhbmdlIFtncGEsZ3Bh
K2xlbikuCisgKi8KK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3Bh
ZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisgICAgc2l6ZV90IGxlbiwg
aW50IHByb3QpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9yLCBmbGFn
czsKKworCW1lbW1hcC5ncGEgPSBncGE7CisJbWVtbWFwLnNlZ2lkID0gc2VnaWQ7CisJbWVtbWFw
LnNlZ29mZiA9IG9mZjsKKwltZW1tYXAubGVuID0gbGVuOworCW1lbW1hcC5wcm90ID0gcHJvdDsK
KwltZW1tYXAuZmxhZ3MgPSAwOworCisJaWYgKGN0eC0+bWVtZmxhZ3MgJiBWTV9NRU1fRl9XSVJF
RCkKKwkJbWVtbWFwLmZsYWdzIHw9IFZNX01FTU1BUF9GX1dJUkVEOworCisJLyoKKwkgKiBJZiB0
aGlzIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgdGhlbiBkb24ndCBjcmVhdGUgaXQgYWdhaW4uIFRo
aXMKKwkgKiBpcyB0aGUgY29tbW9uIGNhc2UgZm9yIFNZU01FTSBtYXBwaW5ncyBjcmVhdGVkIGJ5
IGJoeXZlbG9hZCg4KS4KKwkgKi8KKwllcnJvciA9IHZtX21tYXBfZ2V0bmV4dChjdHgsICZncGEs
ICZzZWdpZCwgJm9mZiwgJmxlbiwgJnByb3QsICZmbGFncyk7CisJaWYgKGVycm9yID09IDAgJiYg
Z3BhID09IG1lbW1hcC5ncGEpIHsKKwkJaWYgKHNlZ2lkICE9IG1lbW1hcC5zZWdpZCB8fCBvZmYg
IT0gbWVtbWFwLnNlZ29mZiB8fAorCQkgICAgcHJvdCAhPSBtZW1tYXAucHJvdCB8fCBmbGFncyAh
PSBtZW1tYXAuZmxhZ3MpIHsKKwkJCWVycm5vID0gRUVYSVNUOworCQkJcmV0dXJuICgtMSk7CisJ
CX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCisJZXJyb3IgPSBpb2N0bChjdHgt
PmZkLCBWTV9NTUFQX01FTVNFRywgJm1lbW1hcCk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2lu
dAordm1fbW1hcF9nZXRuZXh0KHN0cnVjdCB2bWN0eCAqY3R4LCB2bV9wYWRkcl90ICpncGEsIGlu
dCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnBy
b3QsIGludCAqZmxhZ3MpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9y
OworCisJYnplcm8oJm1lbW1hcCwgc2l6ZW9mKHN0cnVjdCB2bV9tZW1tYXApKTsKKwltZW1tYXAu
Z3BhID0gKmdwYTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX01NQVBfR0VUTkVYVCwgJm1l
bW1hcCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmdwYSA9IG1lbW1hcC5ncGE7CisJCSpzZWdp
ZCA9IG1lbW1hcC5zZWdpZDsKKwkJKnNlZ29mZiA9IG1lbW1hcC5zZWdvZmY7CisJCSpsZW4gPSBt
ZW1tYXAubGVuOworCQkqcHJvdCA9IG1lbW1hcC5wcm90OworCQkqZmxhZ3MgPSBtZW1tYXAuZmxh
Z3M7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogUmV0dXJuIDAgaWYgdGhlIHNl
Z21lbnRzIGFyZSBpZGVudGljYWwgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqCisgKiBUaGlz
IGlzIHNsaWdodGx5IGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgb25seSBkZXZpY2UgbWVt
b3J5IHNlZ21lbnRzCisgKiBhcmUgbmFtZWQuCisgKi8KK3N0YXRpYyBpbnQKK2NtcHNlZyhzaXpl
X3QgbGVuLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4yLCBjb25zdCBjaGFyICpzdHIyKQor
eworCisJaWYgKGxlbiA9PSBsZW4yKSB7CisJCWlmICgoIXN0ciAmJiAhc3RyMikgfHwgKHN0ciAm
JiBzdHIyICYmICFzdHJjbXAoc3RyLCBzdHIyKSkpCisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1
cm4gKC0xKTsKK30KKworc3RhdGljIGludAordm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgc2VnaWQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0
IHZtX21lbXNlZyBtZW1zZWc7CisJc2l6ZV90IG47CisJaW50IGVycm9yOworCisJLyoKKwkgKiBJ
ZiB0aGUgbWVtb3J5IHNlZ21lbnQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIHRoZW4ganVzdCBy
ZXR1cm4uCisJICogVGhpcyBpcyB0aGUgdXN1YWwgY2FzZSBmb3IgdGhlIFNZU01FTSBzZWdtZW50
IGNyZWF0ZWQgYnkgdXNlcnNwYWNlCisJICogbG9hZGVycyBsaWtlIGJoeXZlbG9hZCg4KS4KKwkg
Ki8KKwllcnJvciA9IHZtX2dldF9tZW1zZWcoY3R4LCBzZWdpZCwgJm1lbXNlZy5sZW4sIG1lbXNl
Zy5uYW1lLAorCSAgICBzaXplb2YobWVtc2VnLm5hbWUpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVy
biAoZXJyb3IpOworCisJaWYgKG1lbXNlZy5sZW4gIT0gMCkgeworCQlpZiAoY21wc2VnKGxlbiwg
bmFtZSwgbWVtc2VnLmxlbiwgVk1fTUVNU0VHX05BTUUoJm1lbXNlZykpKSB7CisJCQllcnJubyA9
IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsKKwkJ
fQorCX0KKworCWJ6ZXJvKCZtZW1zZWcsIHNpemVvZihzdHJ1Y3Qgdm1fbWVtc2VnKSk7CisJbWVt
c2VnLnNlZ2lkID0gc2VnaWQ7CisJbWVtc2VnLmxlbiA9IGxlbjsKKwlpZiAobmFtZSAhPSBOVUxM
KSB7CisJCW4gPSBzdHJsY3B5KG1lbXNlZy5uYW1lLCBuYW1lLCBzaXplb2YobWVtc2VnLm5hbWUp
KTsKKwkJaWYgKG4gPj0gc2l6ZW9mKG1lbXNlZy5uYW1lKSkgeworCQkJZXJybm8gPSBFTkFNRVRP
T0xPTkc7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCWVycm9yID0gaW9jdGwoY3R4LT5m
ZCwgVk1fQUxMT0NfTUVNU0VHLCAmbWVtc2VnKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9nZXRfbWVtc2VnKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIHNpemVfdCAqbGVu
cCwgY2hhciAqbmFtZWJ1ZiwKKyAgICBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm1fbWVt
c2VnIG1lbXNlZzsKKwlzaXplX3QgbjsKKwlpbnQgZXJyb3I7CisKKwltZW1zZWcuc2VnaWQgPSBz
ZWdpZDsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9NRU1TRUcsICZtZW1zZWcpOwor
CWlmIChlcnJvciA9PSAwKSB7CisJCSpsZW5wID0gbWVtc2VnLmxlbjsKKwkJbiA9IHN0cmxjcHko
bmFtZWJ1ZiwgbWVtc2VnLm5hbWUsIGJ1ZnNpemUpOworCQlpZiAobiA+PSBidWZzaXplKSB7CisJ
CQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCWVycm9yID0gLTE7CisJCX0KKwl9CisJcmV0dXJu
IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX21lbW9yeV9zZWdtZW50KHN0cnVjdCB2
bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgY2hhciAqYmFzZSkKK3sKKwlj
aGFyICpwdHI7CisJaW50IGVycm9yLCBmbGFnczsKKworCS8qIE1hcCAnbGVuJyBieXRlcyBzdGFy
dGluZyBhdCAnZ3BhJyBpbiB0aGUgZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCWVycm9yID0gdm1f
bW1hcF9tZW1zZWcoY3R4LCBncGEsIFZNX1NZU01FTSwgZ3BhLCBsZW4sIFBST1RfQUxMKTsKKwlp
ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQ
X0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFncyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJ
ZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8qIG1tYXAgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNz
IHNwYWNlIG9uIHRoZSBob3N0ICovCisJcHRyID0gbW1hcChiYXNlICsgZ3BhLCBsZW4sIFBST1Rf
UlcsIGZsYWdzLCBjdHgtPmZkLCBncGEpOworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJcmV0
dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3NldHVwX21lbW9yeShzdHJ1
Y3Qgdm1jdHggKmN0eCwgc2l6ZV90IG1lbXNpemUsIGVudW0gdm1fbW1hcF9zdHlsZSB2bXMpCit7
CisJc2l6ZV90IG9ianNpemUsIGxlbjsKKwl2bV9wYWRkcl90IGdwYTsKKwljaGFyICpiYXNlYWRk
ciwgKnB0cjsKKwlpbnQgZXJyb3IsIGZsYWdzOworCisJYXNzZXJ0KHZtcyA9PSBWTV9NTUFQX0FM
TCk7CisKKwkvKgorCSAqIElmICdtZW1zaXplJyBjYW5ub3QgZml0IGVudGlyZWx5IGluIHRoZSAn
bG93bWVtJyBzZWdtZW50IHRoZW4KKwkgKiBjcmVhdGUgYW5vdGhlciAnaGlnaG1lbScgc2VnbWVu
dCBhYm92ZSA0R0IgZm9yIHRoZSByZW1haW5kZXIuCisJICovCisJaWYgKG1lbXNpemUgPiBjdHgt
Pmxvd21lbV9saW1pdCkgeworCQljdHgtPmxvd21lbSA9IGN0eC0+bG93bWVtX2xpbWl0OworCQlj
dHgtPmhpZ2htZW0gPSBtZW1zaXplIC0gY3R4LT5sb3dtZW1fbGltaXQ7CisJCW9ianNpemUgPSA0
KkdCICsgY3R4LT5oaWdobWVtOworCX0gZWxzZSB7CisJCWN0eC0+bG93bWVtID0gbWVtc2l6ZTsK
KwkJY3R4LT5oaWdobWVtID0gMDsKKwkJb2Jqc2l6ZSA9IGN0eC0+bG93bWVtOworCX0KKworCWVy
cm9yID0gdm1fYWxsb2NfbWVtc2VnKGN0eCwgVk1fU1lTTUVNLCBvYmpzaXplLCBOVUxMKTsKKwlp
ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJLyoKKwkgKiBTdGFrZSBvdXQgYSBjb250
aWd1b3VzIHJlZ2lvbiBjb3ZlcmluZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5CisJICogYW5k
IHRoZSBhZGpvaW5pbmcgZ3VhcmQgcmVnaW9ucy4KKwkgKi8KKwlsZW4gPSBWTV9NTUFQX0dVQVJE
X1NJWkUgKyBvYmpzaXplICsgVk1fTU1BUF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZB
VEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NPUkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwlwdHIgPSBt
bWFwKE5VTEwsIGxlbiwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApOworCWlmIChwdHIgPT0gTUFQ
X0ZBSUxFRCkKKwkJcmV0dXJuICgtMSk7CisKKwliYXNlYWRkciA9IHB0ciArIFZNX01NQVBfR1VB
UkRfU0laRTsKKwlpZiAoY3R4LT5oaWdobWVtID4gMCkgeworCQlncGEgPSA0KkdCOworCQlsZW4g
PSBjdHgtPmhpZ2htZW07CisJCWVycm9yID0gc2V0dXBfbWVtb3J5X3NlZ21lbnQoY3R4LCBncGEs
IGxlbiwgYmFzZWFkZHIpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsKKwl9CisK
KwlpZiAoY3R4LT5sb3dtZW0gPiAwKSB7CisJCWdwYSA9IDA7CisJCWxlbiA9IGN0eC0+bG93bWVt
OworCQllcnJvciA9IHNldHVwX21lbW9yeV9zZWdtZW50KGN0eCwgZ3BhLCBsZW4sIGJhc2VhZGRy
KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCisJY3R4LT5iYXNlYWRk
ciA9IGJhc2VhZGRyOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybnMgYSBub24t
TlVMTCBwb2ludGVyIGlmIFtnYWRkciwgZ2FkZHIrbGVuKSBpcyBlbnRpcmVseSBjb250YWluZWQg
aW4KKyAqIHRoZSBsb3dtZW0gb3IgaGlnaG1lbSByZWdpb25zLgorICoKKyAqIEluIHBhcnRpY3Vs
YXIgcmV0dXJuIE5VTEwgaWYgW2dhZGRyLCBnYWRkcitsZW4pIGZhbGxzIGluIGd1ZXN0IE1NSU8g
cmVnaW9uLgorICogVGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjb2RlIGRlcGVuZHMgb24gdGhp
cyBiZWhhdmlvci4KKyAqLwordm9pZCAqCit2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4LCB2
bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKQoreworCisJaWYgKGN0eC0+bG93bWVtID4gMCkg
eworCQlpZiAoZ2FkZHIgPCBjdHgtPmxvd21lbSAmJiBnYWRkciArIGxlbiA8PSBjdHgtPmxvd21l
bSkKKwkJCXJldHVybiAoY3R4LT5iYXNlYWRkciArIGdhZGRyKTsKKwl9CisKKwlpZiAoY3R4LT5o
aWdobWVtID4gMCkgeworCQlpZiAoZ2FkZHIgPj0gNCpHQiAmJiBnYWRkciArIGxlbiA8PSA0KkdC
ICsgY3R4LT5oaWdobWVtKQorCQkJcmV0dXJuIChjdHgtPmJhc2VhZGRyICsgZ2FkZHIpOworCX0K
KworCXJldHVybiAoTlVMTCk7Cit9CisKK3NpemVfdAordm1fZ2V0X2xvd21lbV9zaXplKHN0cnVj
dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbSk7Cit9CisKK3NpemVfdAor
dm1fZ2V0X2hpZ2htZW1fc2l6ZShzdHJ1Y3Qgdm1jdHggKmN0eCkKK3sKKworCXJldHVybiAoY3R4
LT5oaWdobWVtKTsKK30KKwordm9pZCAqCit2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgc2VnaWQsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJY2hhciBw
YXRobmFtZVtNQVhQQVRITEVOXTsKKwlzaXplX3QgbGVuMjsKKwljaGFyICpiYXNlLCAqcHRyOwor
CWludCBmZCwgZXJyb3IsIGZsYWdzOworCisJZmQgPSAtMTsKKwlwdHIgPSBNQVBfRkFJTEVEOwor
CWlmIChuYW1lID09IE5VTEwgfHwgc3RybGVuKG5hbWUpID09IDApIHsKKwkJZXJybm8gPSBFSU5W
QUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhjdHgsIHNl
Z2lkLCBsZW4sIG5hbWUpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc3RybGNweShw
YXRobmFtZSwgIi9kZXYvdm1tLmlvLyIsIHNpemVvZihwYXRobmFtZSkpOworCXN0cmxjYXQocGF0
aG5hbWUsIGN0eC0+bmFtZSwgc2l6ZW9mKHBhdGhuYW1lKSk7CisJc3RybGNhdChwYXRobmFtZSwg
Ii4iLCBzaXplb2YocGF0aG5hbWUpKTsKKwlzdHJsY2F0KHBhdGhuYW1lLCBuYW1lLCBzaXplb2Yo
cGF0aG5hbWUpKTsKKworCWZkID0gb3BlbihwYXRobmFtZSwgT19SRFdSKTsKKwlpZiAoZmQgPCAw
KQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIFN0YWtlIG91dCBhIGNvbnRpZ3VvdXMgcmVnaW9u
IGNvdmVyaW5nIHRoZSBkZXZpY2UgbWVtb3J5IGFuZCB0aGUKKwkgKiBhZGpvaW5pbmcgZ3VhcmQg
cmVnaW9ucy4KKwkgKi8KKwlsZW4yID0gVk1fTU1BUF9HVUFSRF9TSVpFICsgbGVuICsgVk1fTU1B
UF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NP
UkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwliYXNlID0gbW1hcChOVUxMLCBsZW4yLCBQUk9UX05P
TkUsIGZsYWdzLCAtMSwgMCk7CisJaWYgKGJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBkb25l
OworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFn
cyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8q
IG1tYXAgdGhlIGRldm1lbSByZWdpb24gaW4gdGhlIGhvc3QgYWRkcmVzcyBzcGFjZSAqLworCXB0
ciA9IG1tYXAoYmFzZSArIFZNX01NQVBfR1VBUkRfU0laRSwgbGVuLCBQUk9UX1JXLCBmbGFncywg
ZmQsIDApOworZG9uZToKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiAocHRy
KTsKK30KKworaW50Cit2bV9zZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu
dCByZWcsCisJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQzMl90IGxpbWl0LCB1aW50MzJfdCBhY2Nl
c3MpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwli
emVybygmdm1zZWdkZXNjLCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0g
dmNwdTsKKwl2bXNlZ2Rlc2MucmVnbnVtID0gcmVnOworCXZtc2VnZGVzYy5kZXNjLmJhc2UgPSBi
YXNlOworCXZtc2VnZGVzYy5kZXNjLmxpbWl0ID0gbGltaXQ7CisJdm1zZWdkZXNjLmRlc2MuYWNj
ZXNzID0gYWNjZXNzOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9TRVRfU0VHTUVOVF9E
RVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9n
ZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJICAgIHVpbnQ2
NF90ICpiYXNlLCB1aW50MzJfdCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpCit7CisJaW50IGVy
cm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwliemVybygmdm1zZWdkZXNj
LCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0gdmNwdTsKKwl2bXNlZ2Rl
c2MucmVnbnVtID0gcmVnOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9HRVRfU0VHTUVO
VF9ERVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqYmFzZSA9
IHZtc2VnZGVzYy5kZXNjLmJhc2U7CisJCSpsaW1pdCA9IHZtc2VnZGVzYy5kZXNjLmxpbWl0Owor
CQkqYWNjZXNzID0gdm1zZWdkZXNjLmRlc2MuYWNjZXNzOworCX0KKwlyZXR1cm4gKGVycm9yKTsK
K30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp
bnQgcmVnLCBzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19kZXNjKQoreworCWludCBlcnJvcjsKKworCWVy
cm9yID0gdm1fZ2V0X2Rlc2MoY3R4LCB2Y3B1LCByZWcsICZzZWdfZGVzYy0+YmFzZSwgJnNlZ19k
ZXNjLT5saW1pdCwKKwkgICAgJnNlZ19kZXNjLT5hY2Nlc3MpOworCXJldHVybiAoZXJyb3IpOwor
fQorCitpbnQKK3ZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu
dCByZWcsIHVpbnQ2NF90IHZhbCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZtX3JlZ2lzdGVy
IHZtcmVnOworCisJYnplcm8oJnZtcmVnLCBzaXplb2Yodm1yZWcpKTsKKwl2bXJlZy5jcHVpZCA9
IHZjcHU7CisJdm1yZWcucmVnbnVtID0gcmVnOworCXZtcmVnLnJlZ3ZhbCA9IHZhbDsKKworCWVy
cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX1JFR0lTVEVSLCAmdm1yZWcpOworCXJldHVybiAo
ZXJyb3IpOworfQorCitpbnQKK3ZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50
IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXRfdmFsKQoreworCWludCBlcnJvcjsKKwlzdHJ1
Y3Qgdm1fcmVnaXN0ZXIgdm1yZWc7CisKKwliemVybygmdm1yZWcsIHNpemVvZih2bXJlZykpOwor
CXZtcmVnLmNwdWlkID0gdmNwdTsKKwl2bXJlZy5yZWdudW0gPSByZWc7CisKKwllcnJvciA9IGlv
Y3RsKGN0eC0+ZmQsIFZNX0dFVF9SRUdJU1RFUiwgJnZtcmVnKTsKKwkqcmV0X3ZhbCA9IHZtcmVn
LnJlZ3ZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtY3R4
ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWludCBlcnJvcjsK
KwlzdHJ1Y3Qgdm1fcnVuIHZtcnVuOworCisJYnplcm8oJnZtcnVuLCBzaXplb2Yodm1ydW4pKTsK
Kwl2bXJ1bi5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1JVTiwg
JnZtcnVuKTsKKwliY29weSgmdm1ydW4udm1fZXhpdCwgdm1leGl0LCBzaXplb2Yoc3RydWN0IHZt
X2V4aXQpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zdXNwZW5kKHN0cnVjdCB2
bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdykKK3sKKwlzdHJ1Y3Qgdm1fc3VzcGVu
ZCB2bXN1c3BlbmQ7CisKKwliemVybygmdm1zdXNwZW5kLCBzaXplb2Yodm1zdXNwZW5kKSk7CisJ
dm1zdXNwZW5kLmhvdyA9IGhvdzsKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1NVU1BFTkQs
ICZ2bXN1c3BlbmQpKTsKK30KKworaW50Cit2bV9yZWluaXQoc3RydWN0IHZtY3R4ICpjdHgpCit7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFSU5JVCwgMCkpOworfQorCitpbnQKK3Zt
X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y
LCBpbnQgZXJyY29kZV92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9p
bnN0cnVjdGlvbikKK3sKKwlzdHJ1Y3Qgdm1fZXhjZXB0aW9uIGV4YzsKKworCWV4Yy5jcHVpZCA9
IHZjcHU7CisJZXhjLnZlY3RvciA9IHZlY3RvcjsKKwlleGMuZXJyb3JfY29kZSA9IGVycmNvZGU7
CisJZXhjLmVycm9yX2NvZGVfdmFsaWQgPSBlcnJjb2RlX3ZhbGlkOworCWV4Yy5yZXN0YXJ0X2lu
c3RydWN0aW9uID0gcmVzdGFydF9pbnN0cnVjdGlvbjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5m
ZCwgVk1fSU5KRUNUX0VYQ0VQVElPTiwgJmV4YykpOworfQorCitpbnQKK3ZtX2FwaWNpZDJ2Y3B1
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXBpY2lkKQoreworCS8qCisJICogVGhlIGFwaWMgaWQg
YXNzb2NpYXRlZCB3aXRoIHRoZSAndmNwdScgaGFzIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZQor
CSAqIGFzIHRoZSAndmNwdScgaXRzZWxmLgorCSAqLworCXJldHVybiAoYXBpY2lkKTsKK30KKwor
aW50Cit2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y
KQoreworCXN0cnVjdCB2bV9sYXBpY19pcnEgdm1pcnE7CisKKwliemVybygmdm1pcnEsIHNpemVv
Zih2bWlycSkpOworCXZtaXJxLmNwdWlkID0gdmNwdTsKKwl2bWlycS52ZWN0b3IgPSB2ZWN0b3I7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0xBUElDX0lSUSwgJnZtaXJxKSk7Cit9CisK
K2ludAordm1fbGFwaWNfbG9jYWxfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50
IHZlY3RvcikKK3sKKwlzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHZtaXJxOworCisJYnplcm8oJnZtaXJx
LCBzaXplb2Yodm1pcnEpKTsKKwl2bWlycS5jcHVpZCA9IHZjcHU7CisJdm1pcnEudmVjdG9yID0g
dmVjdG9yOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9MQVBJQ19MT0NBTF9JUlEsICZ2
bWlycSkpOworfQorCitpbnQKK3ZtX2xhcGljX21zaShzdHJ1Y3Qgdm1jdHggKmN0eCwgdWludDY0
X3QgYWRkciwgdWludDY0X3QgbXNnKQoreworCXN0cnVjdCB2bV9sYXBpY19tc2kgdm1tc2k7CisK
KwliemVybygmdm1tc2ksIHNpemVvZih2bW1zaSkpOworCXZtbXNpLmFkZHIgPSBhZGRyOworCXZt
bXNpLm1zZyA9IG1zZzsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fTEFQSUNfTVNJLCAm
dm1tc2kpKTsKK30KKworaW50Cit2bV9pb2FwaWNfYXNzZXJ0X2lycShzdHJ1Y3Qgdm1jdHggKmN0
eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9hcGljX2lycSBpb2FwaWNfaXJxOworCisJYnpl
cm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faW9hcGljX2lycSkpOworCWlvYXBpY19p
cnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9JT0FQSUNfQVNTRVJU
X0lSUSwgJmlvYXBpY19pcnEpKTsKK30KKworaW50Cit2bV9pb2FwaWNfZGVhc3NlcnRfaXJxKHN0
cnVjdCB2bWN0eCAqY3R4LCBpbnQgaXJxKQoreworCXN0cnVjdCB2bV9pb2FwaWNfaXJxIGlvYXBp
Y19pcnE7CisKKwliemVybygmaW9hcGljX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pb2FwaWNfaXJx
KSk7CisJaW9hcGljX2lycS5pcnEgPSBpcnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZN
X0lPQVBJQ19ERUFTU0VSVF9JUlEsICZpb2FwaWNfaXJxKSk7Cit9CisKK2ludAordm1faW9hcGlj
X3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9h
cGljX2lycSBpb2FwaWNfaXJxOworCisJYnplcm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qg
dm1faW9hcGljX2lycSkpOworCWlvYXBpY19pcnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0
bChjdHgtPmZkLCBWTV9JT0FQSUNfUFVMU0VfSVJRLCAmaW9hcGljX2lycSkpOworfQorCitpbnQK
K3ZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50ICpwaW5jb3VudCkKK3sK
KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSU9BUElDX1BJTkNPVU5ULCBwaW5jb3VudCkp
OworfQorCitpbnQKK3ZtX2lzYV9hc3NlcnRfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRw
aWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJxOwor
CisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9pcnEu
YXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19pcnE7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9BU1NFUlRfSVJRLCAmaXNhX2lycSkp
OworfQorCitpbnQKK3ZtX2lzYV9kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCBh
dHBpY19pcnEsIGludCBpb2FwaWNfaXJxKQoreworCXN0cnVjdCB2bV9pc2FfaXJxIGlzYV9pcnE7
CisKKwliemVybygmaXNhX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxKSk7CisJaXNhX2ly
cS5hdHBpY19pcnEgPSBhdHBpY19pcnE7CisJaXNhX2lycS5pb2FwaWNfaXJxID0gaW9hcGljX2ly
cTsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX0RFQVNTRVJUX0lSUSwgJmlzYV9p
cnEpKTsKK30KKworaW50Cit2bV9pc2FfcHVsc2VfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQg
YXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJx
OworCisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9p
cnEuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19p
cnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9QVUxTRV9JUlEsICZpc2FfaXJx
KSk7Cit9CisKK2ludAordm1faXNhX3NldF9pcnFfdHJpZ2dlcihzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IGF0cGljX2lycSwKKyAgICBlbnVtIHZtX2ludHJfdHJpZ2dlciB0cmlnZ2VyKQoreworCXN0
cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgaXNhX2lycV90cmlnZ2VyOworCisJYnplcm8oJmlzYV9p
cnFfdHJpZ2dlciwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIpKTsKKwlpc2FfaXJx
X3RyaWdnZXIuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnFfdHJpZ2dlci50cmlnZ2Vy
ID0gdHJpZ2dlcjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX1NFVF9JUlFfVFJJ
R0dFUiwgJmlzYV9pcnFfdHJpZ2dlcikpOworfQorCitpbnQKK3ZtX2luamVjdF9ubWkoc3RydWN0
IHZtY3R4ICpjdHgsIGludCB2Y3B1KQoreworCXN0cnVjdCB2bV9ubWkgdm1ubWk7CisKKwliemVy
bygmdm1ubWksIHNpemVvZih2bW5taSkpOworCXZtbm1pLmNwdWlkID0gdmNwdTsKKworCXJldHVy
biAoaW9jdGwoY3R4LT5mZCwgVk1fSU5KRUNUX05NSSwgJnZtbm1pKSk7Cit9CisKK3N0YXRpYyBz
dHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQl0eXBlOworfSBjYXBzdHJtYXBbXSA9
IHsKKwl7ICJobHRfZXhpdCIsCQlWTV9DQVBfSEFMVF9FWElUIH0sCisJeyAibXRyYXBfZXhpdCIs
CQlWTV9DQVBfTVRSQVBfRVhJVCB9LAorCXsgInBhdXNlX2V4aXQiLAkJVk1fQ0FQX1BBVVNFX0VY
SVQgfSwKKwl7ICJ1bnJlc3RyaWN0ZWRfZ3Vlc3QiLAlWTV9DQVBfVU5SRVNUUklDVEVEX0dVRVNU
IH0sCisJeyAiZW5hYmxlX2ludnBjaWQiLAlWTV9DQVBfRU5BQkxFX0lOVlBDSUQgfSwKKwl7IDAg
fQorfTsKKworaW50Cit2bV9jYXBhYmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1l
KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgY2Fwc3RybWFwW2ldLm5hbWUgIT0gTlVMTCAm
JiBjYXBuYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoc3RyY21wKGNhcHN0cm1hcFtpXS5uYW1l
LCBjYXBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIChjYXBzdHJtYXBbaV0udHlwZSk7CisJfQorCisJ
cmV0dXJuICgtMSk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fY2FwYWJpbGl0eV90eXBlMm5hbWUo
aW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBjYXBzdHJtYXBbaV0ubmFtZSAh
PSBOVUxMOyBpKyspIHsKKwkJaWYgKGNhcHN0cm1hcFtpXS50eXBlID09IHR5cGUpCisJCQlyZXR1
cm4gKGNhcHN0cm1hcFtpXS5uYW1lKTsKKwl9CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQK
K3ZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB2bV9j
YXBfdHlwZSBjYXAsCisJCSAgaW50ICpyZXR2YWwpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2
bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXplb2Yodm1jYXApKTsKKwl2
bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsKKworCWVycm9yID0gaW9j
dGwoY3R4LT5mZCwgVk1fR0VUX0NBUEFCSUxJVFksICZ2bWNhcCk7CisJKnJldHZhbCA9IHZtY2Fw
LmNhcHZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLCBpbnQgdmFs
KQoreworCXN0cnVjdCB2bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXpl
b2Yodm1jYXApKTsKKwl2bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsK
Kwl2bWNhcC5jYXB2YWwgPSB2YWw7CisJCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9TRVRf
Q0FQQUJJTElUWSwgJnZtY2FwKSk7Cit9CisKK2ludAordm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKQoreworCXN0cnVjdCB2bV9w
cHRkZXYgcHB0ZGV2OworCisJYnplcm8oJnBwdGRldiwgc2l6ZW9mKHBwdGRldikpOworCXBwdGRl
di5idXMgPSBidXM7CisJcHB0ZGV2LnNsb3QgPSBzbG90OworCXBwdGRldi5mdW5jID0gZnVuYzsK
KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30K
KworaW50Cit2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGlu
dCBzbG90LCBpbnQgZnVuYykKK3sKKwlzdHJ1Y3Qgdm1fcHB0ZGV2IHBwdGRldjsKKworCWJ6ZXJv
KCZwcHRkZXYsIHNpemVvZihwcHRkZXYpKTsKKwlwcHRkZXYuYnVzID0gYnVzOworCXBwdGRldi5z
bG90ID0gc2xvdDsKKwlwcHRkZXYuZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+
ZmQsIFZNX1VOQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30KKworaW50Cit2bV9tYXBfcHB0ZGV2
X21taW8oc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywKKwkJ
ICAgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKQoreworCXN0cnVj
dCB2bV9wcHRkZXZfbW1pbyBwcHRtbWlvOworCisJYnplcm8oJnBwdG1taW8sIHNpemVvZihwcHRt
bWlvKSk7CisJcHB0bW1pby5idXMgPSBidXM7CisJcHB0bW1pby5zbG90ID0gc2xvdDsKKwlwcHRt
bWlvLmZ1bmMgPSBmdW5jOworCXBwdG1taW8uZ3BhID0gZ3BhOworCXBwdG1taW8ubGVuID0gbGVu
OworCXBwdG1taW8uaHBhID0gaHBhOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9NQVBf
UFBUREVWX01NSU8sICZwcHRtbWlvKSk7Cit9CisKK2ludAordm1fc2V0dXBfcHB0ZGV2X21zaShz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywK
KyAgICB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2csIGludCBudW12ZWMpCit7CisJc3RydWN0
IHZtX3BwdGRldl9tc2kgcHB0bXNpOworCisJYnplcm8oJnBwdG1zaSwgc2l6ZW9mKHBwdG1zaSkp
OworCXBwdG1zaS52Y3B1ID0gdmNwdTsKKwlwcHRtc2kuYnVzID0gYnVzOworCXBwdG1zaS5zbG90
ID0gc2xvdDsKKwlwcHRtc2kuZnVuYyA9IGZ1bmM7CisJcHB0bXNpLm1zZyA9IG1zZzsKKwlwcHRt
c2kuYWRkciA9IGFkZHI7CisJcHB0bXNpLm51bXZlYyA9IG51bXZlYzsKKworCXJldHVybiAoaW9j
dGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSSwgJnBwdG1zaSkpOworfQorCitpbnQJCit2bV9zZXR1
cF9wcHRkZXZfbXNpeChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBz
bG90LCBpbnQgZnVuYywKKyAgICBpbnQgaWR4LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2cs
IHVpbnQzMl90IHZlY3Rvcl9jb250cm9sKQoreworCXN0cnVjdCB2bV9wcHRkZXZfbXNpeCBwcHRt
c2l4OworCisJYnplcm8oJnBwdG1zaXgsIHNpemVvZihwcHRtc2l4KSk7CisJcHB0bXNpeC52Y3B1
ID0gdmNwdTsKKwlwcHRtc2l4LmJ1cyA9IGJ1czsKKwlwcHRtc2l4LnNsb3QgPSBzbG90OworCXBw
dG1zaXguZnVuYyA9IGZ1bmM7CisJcHB0bXNpeC5pZHggPSBpZHg7CisJcHB0bXNpeC5tc2cgPSBt
c2c7CisJcHB0bXNpeC5hZGRyID0gYWRkcjsKKwlwcHRtc2l4LnZlY3Rvcl9jb250cm9sID0gdmVj
dG9yX2NvbnRyb2w7CisKKwlyZXR1cm4gaW9jdGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSVgsICZw
cHRtc2l4KTsKK30KKwordWludDY0X3QgKgordm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4
LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwgKnJldF90diwKKwkgICAgIGludCAqcmV0X2VudHJp
ZXMpCit7CisJaW50IGVycm9yOworCisJc3RhdGljIHN0cnVjdCB2bV9zdGF0cyB2bXN0YXRzOwor
CisJdm1zdGF0cy5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NU
QVRTLCAmdm1zdGF0cyk7CisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHJldF9lbnRyaWVzKQor
CQkJKnJldF9lbnRyaWVzID0gdm1zdGF0cy5udW1fZW50cmllczsKKwkJaWYgKHJldF90dikKKwkJ
CSpyZXRfdHYgPSB2bXN0YXRzLnR2OworCQlyZXR1cm4gKHZtc3RhdHMuc3RhdGJ1Zik7CisJfSBl
bHNlCisJCXJldHVybiAoTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fZ2V0X3N0YXRfZGVz
YyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KQoreworCXN0YXRpYyBzdHJ1Y3Qgdm1fc3Rh
dF9kZXNjIHN0YXRkZXNjOworCisJc3RhdGRlc2MuaW5kZXggPSBpbmRleDsKKwlpZiAoaW9jdGwo
Y3R4LT5mZCwgVk1fU1RBVF9ERVNDLCAmc3RhdGRlc2MpID09IDApCisJCXJldHVybiAoc3RhdGRl
c2MuZGVzYyk7CisJZWxzZQorCQlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK3ZtX2dldF94MmFw
aWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0ZSAq
c3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJYnpl
cm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisKKwll
cnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9YMkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCSpz
dGF0ZSA9IHgyYXBpYy5zdGF0ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRf
eDJhcGljX3N0YXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3Rh
dGUgc3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJ
Ynplcm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisJ
eDJhcGljLnN0YXRlID0gc3RhdGU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NFVF9Y
MkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBG
cm9tIEludGVsIFZvbCAzYToKKyAqIFRhYmxlIDktMS4gSUEtMzIgUHJvY2Vzc29yIFN0YXRlcyBG
b2xsb3dpbmcgUG93ZXItdXAsIFJlc2V0IG9yIElOSVQKKyAqLworaW50Cit2Y3B1X3Jlc2V0KHN0
cnVjdCB2bWN0eCAqdm1jdHgsIGludCB2Y3B1KQoreworCWludCBlcnJvcjsKKwl1aW50NjRfdCBy
ZmxhZ3MsIHJpcCwgY3IwLCBjcjQsIHplcm8sIGRlc2NfYmFzZSwgcmR4OworCXVpbnQzMl90IGRl
c2NfYWNjZXNzLCBkZXNjX2xpbWl0OworCXVpbnQxNl90IHNlbDsKKworCXplcm8gPSAwOworCisJ
cmZsYWdzID0gMHgyOworCWVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9S
RUdfR1VFU1RfUkZMQUdTLCByZmxhZ3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJ
cmlwID0gMHhmZmYwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUs
IFZNX1JFR19HVUVTVF9SSVAsIHJpcCkpICE9IDApCisJCWdvdG8gZG9uZTsKKworCWNyMCA9IENS
MF9ORTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdf
R1VFU1RfQ1IwLCBjcjApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoKGVycm9yID0gdm1f
c2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfQ1IzLCB6ZXJvKSkgIT0gMCkK
KwkJZ290byBkb25lOworCQorCWNyNCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rl
cih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NSNCwgY3I0KSkgIT0gMCkKKwkJZ290byBkb25l
OworCisJLyoKKwkgKiBDUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdy
YW51bGFyaXR5LCB1c2FibGUKKwkgKi8KKwlkZXNjX2Jhc2UgPSAweGZmZmYwMDAwOworCWRlc2Nf
bGltaXQgPSAweGZmZmY7CisJZGVzY19hY2Nlc3MgPSAweDAwOTM7CisJZXJyb3IgPSB2bV9zZXRf
ZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NTLAorCQkJICAgIGRlc2NfYmFzZSwgZGVz
Y19saW1pdCwgZGVzY19hY2Nlc3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc2Vs
ID0gMHhmMDAwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN
X1JFR19HVUVTVF9DUywgc2VsKSkgIT0gMCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBTUyxE
UyxFUyxGUyxHUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdyYW51bGFy
aXR5CisJICovCisJZGVzY19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2Nf
YWNjZXNzID0gMHgwMDkzOworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JF
R19HVUVTVF9TUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsK
KwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgs
IHZjcHUsIFZNX1JFR19HVUVTVF9EUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRl
c2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0
X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9FUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRl
c2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVy
cm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9GUywKKwkJCSAgICBk
ZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8g
ZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9H
UywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJy
b3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdp
c3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1NTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRv
bmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV
RVNUX0RTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9y
ZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0VTLCBzZWwpKSAhPSAwKQorCQlnb3Rv
IGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVH
X0dVRVNUX0ZTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3Nl
dF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0dTLCBzZWwpKSAhPSAwKQorCQln
b3RvIGRvbmU7CisKKwkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCisJcmR4ID0gMHhm
MDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV
RVNUX1JBWCwgemVybykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0
X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJYLCB6ZXJvKSkgIT0gMCkKKwkJ
Z290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN
X1JFR19HVUVTVF9SQ1gsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9
IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JEWCwgcmR4KSkgIT0g
MCkKKwkJZ290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZj
cHUsIFZNX1JFR19HVUVTVF9SU0ksIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChl
cnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JESSwgemVy
bykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZt
Y3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJQLCB6ZXJvKSkgIT0gMCkKKwkJZ290byBkb25lOwor
CWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9S
U1AsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBHRFRSLCBJRFRSICovCisJZGVz
Y19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMDsKKwll
cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfR0RUUiwKKwkJCSAg
ICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IgIT0gMCkK
KwkJZ290byBkb25lOworCisJZXJyb3IgPSB2bV9zZXRfZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVH
X0dVRVNUX0lEVFIsCisJCQkgICAgZGVzY19iYXNlLCBkZXNjX2xpbWl0LCBkZXNjX2FjY2Vzcyk7
CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZG9uZTsKKworCS8qIFRSICovCisJZGVzY19iYXNl
ID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4YjsK
KwllcnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfVFIsIDAsIDAs
IGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJ
aWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1RS
LCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBMRFRSICovCisJZGVzY19iYXNlID0g
MDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4MjsKKwll
cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfTERUUiwgZGVzY19i
YXNlLAorCQkJICAgIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdv
dG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0
eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0xEVFIsIDApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkv
KiBYWFggY3IyLCBkZWJ1ZyByZWdpc3RlcnMgKi8KKworCWVycm9yID0gMDsKK2RvbmU6CisJcmV0
dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2V0X2dwYV9wbWFwKHN0cnVjdCB2bWN0eCAqY3R4
LCB1aW50NjRfdCBncGEsIHVpbnQ2NF90ICpwdGUsIGludCAqbnVtKQoreworCWludCBlcnJvciwg
aTsKKwlzdHJ1Y3Qgdm1fZ3BhX3B0ZSBncGFwdGU7CisKKwliemVybygmZ3BhcHRlLCBzaXplb2Yo
Z3BhcHRlKSk7CisJZ3BhcHRlLmdwYSA9IGdwYTsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg
Vk1fR0VUX0dQQV9QTUFQLCAmZ3BhcHRlKTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCSpudW0g
PSBncGFwdGUucHRlbnVtOworCQlmb3IgKGkgPSAwOyBpIDwgZ3BhcHRlLnB0ZW51bTsgaSsrKQor
CQkJcHRlW2ldID0gZ3BhcHRlLnB0ZVtpXTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
aW50Cit2bV9nZXRfaHBldF9jYXBhYmlsaXRpZXMoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90
ICpjYXBhYmlsaXRpZXMpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9ocGV0X2NhcCBjYXA7
CisKKwliemVybygmY2FwLCBzaXplb2Yoc3RydWN0IHZtX2hwZXRfY2FwKSk7CisJZXJyb3IgPSBp
b2N0bChjdHgtPmZkLCBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMsICZjYXApOworCWlmIChjYXBh
YmlsaXRpZXMgIT0gTlVMTCkKKwkJKmNhcGFiaWxpdGllcyA9IGNhcC5jYXBhYmlsaXRpZXM7CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2xhMmdwYShzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBn
bGEsIGludCBwcm90LCB1aW50NjRfdCAqZ3BhLCBpbnQgKmZhdWx0KQoreworCXN0cnVjdCB2bV9n
bGEyZ3BhIGdnOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZnZywgc2l6ZW9mKHN0cnVjdCB2bV9n
bGEyZ3BhKSk7CisJZ2cudmNwdWlkID0gdmNwdTsKKwlnZy5wcm90ID0gcHJvdDsKKwlnZy5nbGEg
PSBnbGE7CisJZ2cucGFnaW5nID0gKnBhZ2luZzsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg
Vk1fR0xBMkdQQSwgJmdnKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqZmF1bHQgPSBnZy5mYXVs
dDsKKwkJKmdwYSA9IGdnLmdwYTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZm5kZWYg
bWluCisjZGVmaW5lCW1pbihhLGIpCSgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgor
CitpbnQKK3ZtX2NvcHlfc2V0dXAoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qg
dm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBp
bnQgcHJvdCwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisgICAgaW50ICpmYXVsdCkK
K3sKKwl2b2lkICp2YTsKKwl1aW50NjRfdCBncGE7CisJaW50IGVycm9yLCBpLCBuLCBvZmY7CisK
Kwlmb3IgKGkgPSAwOyBpIDwgaW92Y250OyBpKyspIHsKKwkJaW92W2ldLmlvdl9iYXNlID0gMDsK
KwkJaW92W2ldLmlvdl9sZW4gPSAwOworCX0KKworCXdoaWxlIChsZW4pIHsKKwkJYXNzZXJ0KGlv
dmNudCA+IDApOworCQllcnJvciA9IHZtX2dsYTJncGEoY3R4LCB2Y3B1LCBwYWdpbmcsIGdsYSwg
cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl
cnJvcik7CisKKwkJb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCQluID0gbWluKGxlbiwgUEFHRV9T
SVpFIC0gb2ZmKTsKKworCQl2YSA9IHZtX21hcF9ncGEoY3R4LCBncGEsIG4pOworCQlpZiAodmEg
PT0gTlVMTCkKKwkJCXJldHVybiAoRUZBVUxUKTsKKworCQlpb3YtPmlvdl9iYXNlID0gdmE7CisJ
CWlvdi0+aW92X2xlbiA9IG47CisJCWlvdisrOworCQlpb3ZjbnQtLTsKKworCQlnbGEgKz0gbjsK
KwkJbGVuIC09IG47CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3ZtX2NvcHlfdGVhcmRv
d24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlv
dmNudCkKK3sKKworCXJldHVybjsKK30KKwordm9pZAordm1fY29weWluKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsIHZvaWQgKnZwLCBzaXplX3QgbGVuKQor
eworCWNvbnN0IGNoYXIgKnNyYzsKKwljaGFyICpkc3Q7CisJc2l6ZV90IG47CisKKwlkc3QgPSB2
cDsKKwl3aGlsZSAobGVuKSB7CisJCWFzc2VydChpb3YtPmlvdl9sZW4pOworCQluID0gbWluKGxl
biwgaW92LT5pb3ZfbGVuKTsKKwkJc3JjID0gaW92LT5pb3ZfYmFzZTsKKwkJYmNvcHkoc3JjLCBk
c3QsIG4pOworCisJCWlvdisrOworCQlkc3QgKz0gbjsKKwkJbGVuIC09IG47CisJfQorfQorCit2
b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgY29uc3Qgdm9pZCAq
dnAsIHN0cnVjdCBpb3ZlYyAqaW92LAorICAgIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAq
c3JjOworCWNoYXIgKmRzdDsKKwlzaXplX3QgbjsKKworCXNyYyA9IHZwOworCXdoaWxlIChsZW4p
IHsKKwkJYXNzZXJ0KGlvdi0+aW92X2xlbik7CisJCW4gPSBtaW4obGVuLCBpb3YtPmlvdl9sZW4p
OworCQlkc3QgPSBpb3YtPmlvdl9iYXNlOworCQliY29weShzcmMsIGRzdCwgbik7CisKKwkJaW92
Kys7CisJCXNyYyArPSBuOworCQlsZW4gLT0gbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3ZtX2dl
dF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgd2hpY2gsIGNwdXNldF90ICpjcHVzKQorewor
CXN0cnVjdCB2bV9jcHVzZXQgdm1fY3B1c2V0OworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bV9j
cHVzZXQsIHNpemVvZihzdHJ1Y3Qgdm1fY3B1c2V0KSk7CisJdm1fY3B1c2V0LndoaWNoID0gd2hp
Y2g7CisJdm1fY3B1c2V0LmNwdXNldHNpemUgPSBzaXplb2YoY3B1c2V0X3QpOworCXZtX2NwdXNl
dC5jcHVzID0gY3B1czsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fR0VUX0NQVVMsICZ2
bV9jcHVzZXQpOworCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK3ZtX2FjdGl2ZV9jcHVzKHN0
cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1fZ2V0X2Nw
dXMoY3R4LCBWTV9BQ1RJVkVfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX3N1c3BlbmRlZF9j
cHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1f
Z2V0X2NwdXMoY3R4LCBWTV9TVVNQRU5ERURfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX2Fj
dGl2YXRlX2NwdShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUpCit7CisJc3RydWN0IHZtX2Fj
dGl2YXRlX2NwdSBhYzsKKwlpbnQgZXJyb3I7CisKKwliemVybygmYWMsIHNpemVvZihzdHJ1Y3Qg
dm1fYWN0aXZhdGVfY3B1KSk7CisJYWMudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0
eC0+ZmQsIFZNX0FDVElWQVRFX0NQVSwgJmFjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHVpbnQ2NF90ICpp
bmZvMSwgdWludDY0X3QgKmluZm8yKQoreworCXN0cnVjdCB2bV9pbnRpbmZvIHZtaWk7CisJaW50
IGVycm9yOworCisJYnplcm8oJnZtaWksIHNpemVvZihzdHJ1Y3Qgdm1faW50aW5mbykpOworCXZt
aWkudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9JTlRJTkZP
LCAmdm1paSk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmluZm8xID0gdm1paS5pbmZvMTsKKwkJ
KmluZm8yID0gdm1paS5pbmZvMjsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1f
c2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBpbmZvMSkK
K3sKKwlzdHJ1Y3Qgdm1faW50aW5mbyB2bWlpOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bWlp
LCBzaXplb2Yoc3RydWN0IHZtX2ludGluZm8pKTsKKwl2bWlpLnZjcHVpZCA9IHZjcHU7CisJdm1p
aS5pbmZvMSA9IGluZm8xOworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX0lOVElORk8s
ICZ2bWlpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfd3JpdGUoc3RydWN0
IHZtY3R4ICpjdHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpCit7CisJc3RydWN0IHZtX3J0
Y19kYXRhIHJ0Y2RhdGE7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y2RhdGEsIHNpemVvZihz
dHJ1Y3Qgdm1fcnRjX2RhdGEpKTsKKwlydGNkYXRhLm9mZnNldCA9IG9mZnNldDsKKwlydGNkYXRh
LnZhbHVlID0gdmFsdWU7CisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9SVENfV1JJVEUsICZy
dGNkYXRhKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfcmVhZChzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IG9mZnNldCwgdWludDhfdCAqcmV0dmFsKQoreworCXN0cnVjdCB2bV9y
dGNfZGF0YSBydGNkYXRhOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZydGNkYXRhLCBzaXplb2Yo
c3RydWN0IHZtX3J0Y19kYXRhKSk7CisJcnRjZGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisJZXJyb3Ig
PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfUkVBRCwgJnJ0Y2RhdGEpOworCWlmIChlcnJvciA9PSAw
KQorCQkqcmV0dmFsID0gcnRjZGF0YS52YWx1ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9ydGNfc2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGltZV90IHNlY3MpCit7CisJc3Ry
dWN0IHZtX3J0Y190aW1lIHJ0Y3RpbWU7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y3RpbWUs
IHNpemVvZihzdHJ1Y3Qgdm1fcnRjX3RpbWUpKTsKKwlydGN0aW1lLnNlY3MgPSBzZWNzOworCWVy
cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fUlRDX1NFVFRJTUUsICZydGN0aW1lKTsKKwlyZXR1cm4g
KGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfZ2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGlt
ZV90ICpzZWNzKQoreworCXN0cnVjdCB2bV9ydGNfdGltZSBydGN0aW1lOworCWludCBlcnJvcjsK
KworCWJ6ZXJvKCZydGN0aW1lLCBzaXplb2Yoc3RydWN0IHZtX3J0Y190aW1lKSk7CisJZXJyb3Ig
PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfR0VUVElNRSwgJnJ0Y3RpbWUpOworCWlmIChlcnJvciA9
PSAwKQorCQkqc2VjcyA9IHJ0Y3RpbWUuc2VjczsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZvaWQgKmFyZywgaW50IHZjcHUpCit7CisJc3RydWN0
IHZtY3R4ICpjdHggPSBhcmc7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFU1RBUlRf
SU5TVFJVQ1RJT04sICZ2Y3B1KSk7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9saWIvbGlidm1t
YXBpL3ZtbWFwaS5oIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgKLS0tIHVzci9zcmMv
bGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTA5LTI5IDAwOjI2OjAyLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTExLTMwIDEwOjU2OjA1
Ljc4MzAzNjAwMCArMDAwMApAQCAtMTYyLDYgKzE2MiwxMSBAQAogaW50CXZtX2dldF9pbnRpbmZv
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0X3QgKmkxLCB1aW50NjRfdCAqaTIp
OwogaW50CXZtX3NldF9pbnRpbmZvKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0
X3QgZXhpdF9pbnRpbmZvKTsKIAorLyogVGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zIGFyZSBkb2N1
bWVudGVkIGluIHZtbWFwaS5jICovCitpbnQJdm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KTsK
K2ludAl2bV9tYXBfdXNlcl9idWYoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBz
aXplX3QgbGVuLCB2b2lkICpob3N0X2J1Zik7CitpbnQJdm1faW9fcmVnX2hhbmRsZXIoc3RydWN0
IHZtY3R4ICpjdHgsIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCSAgICB1aW50MzJfdCBt
YXNrX2RhdGEsIHVpbnQzMl90IGRhdGEsIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQg
KmFyZyk7CiAvKgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGljcyBidWZmZXIu
IE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgogICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9saWIvbGlidm1tYXBpL3ZtbWFwaS5oLm9yaWcgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1h
cGkuaC5vcmlnCi0tLSB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgub3JpZwkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92
bW1hcGkuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTMuMTI0MzIxMDAwICswMDAwCkBAIC0wLDAg
KzEsMjE5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5F
VEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmggMjk4
ODk2IDIwMTYtMDUtMDEgMTk6Mzc6MzNaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NQVBJX0hf
CisjZGVmaW5lCV9WTU1BUElfSF8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg
PHN5cy9jcHVzZXQuaD4KKworLyoKKyAqIEFQSSB2ZXJzaW9uIGZvciBvdXQtb2YtdHJlZSBjb25z
dW1lcnMgbGlrZSBncnViLWJoeXZlIGZvciBtYWtpbmcgY29tcGlsZQorICogdGltZSBkZWNpc2lv
bnMuCisgKi8KKyNkZWZpbmUJVk1NQVBJX1ZFUlNJT04JMDEwMgkvKiAyIGRpZ2l0IG1ham9yIGZv
bGxvd2VkIGJ5IDIgZGlnaXQgbWlub3IgKi8KKworc3RydWN0IGlvdmVjOworc3RydWN0IHZtY3R4
OworZW51bSB4MmFwaWNfc3RhdGU7CisKKy8qCisgKiBEaWZmZXJlbnQgc3R5bGVzIG9mIG1hcHBp
bmcgdGhlIG1lbW9yeSBhc3NpZ25lZCB0byBhIFZNIGludG8gdGhlIGFkZHJlc3MKKyAqIHNwYWNl
IG9mIHRoZSBjb250cm9sbGluZyBwcm9jZXNzLgorICovCitlbnVtIHZtX21tYXBfc3R5bGUgewor
CVZNX01NQVBfTk9ORSwJCS8qIG5vIG1hcHBpbmcgKi8KKwlWTV9NTUFQX0FMTCwJCS8qIGZ1bGx5
IGFuZCBzdGF0aWNhbGx5IG1hcHBlZCAqLworCVZNX01NQVBfU1BBUlNFLAkJLyogbWFwcGluZ3Mg
Y3JlYXRlZCBvbi1kZW1hbmQgKi8KK307CisKKy8qCisgKiAnZmxhZ3MnIHZhbHVlIHBhc3NlZCB0
byAndm1fc2V0X21lbWZsYWdzKCknLgorICovCisjZGVmaW5lCVZNX01FTV9GX0lOQ09SRQkweDAx
CS8qIGluY2x1ZGUgZ3Vlc3QgbWVtb3J5IGluIGNvcmUgZmlsZSAqLworI2RlZmluZQlWTV9NRU1f
Rl9XSVJFRAkweDAyCS8qIGd1ZXN0IG1lbW9yeSBpcyB3aXJlZCAqLworCisvKgorICogSWRlbnRp
ZmllcnMgZm9yIG1lbW9yeSBzZWdtZW50czoKKyAqIC0gdm1fc2V0dXBfbWVtb3J5KCkgdXNlcyBW
TV9TWVNNRU0gZm9yIHRoZSBzeXN0ZW0gbWVtb3J5IHNlZ21lbnQuCisgKiAtIHRoZSByZW1haW5p
bmcgaWRlbnRpZmllcnMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGRldm1lbSBzZWdtZW50cy4KKyAq
LworZW51bSB7CisJVk1fU1lTTUVNLAorCVZNX0JPT1RST00sCisJVk1fRlJBTUVCVUZGRVIsCit9
OworCisvKgorICogR2V0IHRoZSBsZW5ndGggYW5kIG5hbWUgb2YgdGhlIG1lbW9yeSBzZWdtZW50
IGlkZW50aWZpZWQgYnkgJ3NlZ2lkJy4KKyAqIE5vdGUgdGhhdCBzeXN0ZW0gbWVtb3J5IHNlZ21l
bnRzIGFyZSBpZGVudGlmaWVkIHdpdGggYSBudWwgbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgb24g
c3VjY2VzcyBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQJdm1fZ2V0X21lbXNlZyhz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlkZW50LCBzaXplX3QgKmxlbnAsIGNoYXIgKm5hbWUsCisJ
ICAgIHNpemVfdCBuYW1lc2l6KTsKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciB0aGUgZ3Vlc3QgYWRk
cmVzcyBzcGFjZS4gVGhpcyBmdW5jdGlvbiBmaW5kcyBhbiBhZGRyZXNzIHJhbmdlCisgKiB0aGF0
IHN0YXJ0cyBhdCBhbiBhZGRyZXNzID49ICpncGEuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBu
ZXh0IGFkZHJlc3MgcmFuZ2Ugd2FzIGZvdW5kIGFuZCBub24temVybyBvdGhlcndpc2UuCisgKi8K
K2ludAl2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgKmdwYSwg
aW50ICpzZWdpZCwKKwkgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQg
KnByb3QsIGludCAqZmxhZ3MpOworLyoKKyAqIENyZWF0ZSBhIGRldmljZSBtZW1vcnkgc2VnbWVu
dCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IG1lbW9yeSBzZWdtZW50IG9uIHN1Y2Nlc3MgYW5kIE1BUF9GQUlMRUQgb3RoZXJ3aXNlLgorICov
Cit2b2lkCSp2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIGNv
bnN0IGNoYXIgKm5hbWUsCisJICAgIHNpemVfdCBsZW4pOworCisvKgorICogTWFwIHRoZSBtZW1v
cnkgc2VnbWVudCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcgaW50byB0aGUgZ3Vlc3QgYWRkcmVzcyBz
cGFjZQorICogYXQgW2dwYSxncGErbGVuKSB3aXRoIHByb3RlY3Rpb24gJ3Byb3QnLgorICovCitp
bnQJdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBpbnQg
c2VnaWQsCisJICAgIHZtX29vZmZzZXRfdCBzZWdvZmYsIHNpemVfdCBsZW4sIGludCBwcm90KTsK
KworaW50CXZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCB2bWN0eCAqdm1fb3Bl
bihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQJdm1fZGVzdHJveShzdHJ1Y3Qgdm1jdHggKmN0eCk7
CitpbnQJdm1fcGFyc2VfbWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqbWVtc2l6
ZSk7CitpbnQJdm1fc2V0dXBfbWVtb3J5KHN0cnVjdCB2bWN0eCAqY3R4LCBzaXplX3QgbGVuLCBl
bnVtIHZtX21tYXBfc3R5bGUgcyk7Cit2b2lkCSp2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4
LCB2bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKTsKK2ludAl2bV9nZXRfZ3BhX3BtYXAoc3Ry
dWN0IHZtY3R4ICosIHVpbnQ2NF90IGdwYSwgdWludDY0X3QgKnB0ZSwgaW50ICpudW0pOworaW50
CXZtX2dsYTJncGEoc3RydWN0IHZtY3R4ICosIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9ndWVzdF9w
YWdpbmcgKnBhZ2luZywKKwkJICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdw
YSwgaW50ICpmYXVsdCk7Cit1aW50MzJfdCB2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVjdCB2bWN0
eCAqY3R4KTsKK3ZvaWQJdm1fc2V0X2xvd21lbV9saW1pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgdWlu
dDMyX3QgbGltaXQpOwordm9pZAl2bV9zZXRfbWVtZmxhZ3Moc3RydWN0IHZtY3R4ICpjdHgsIGlu
dCBmbGFncyk7CitpbnQJdm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KTsKK3NpemVf
dAl2bV9nZXRfbG93bWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworc2l6ZV90CXZtX2dldF9o
aWdobWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworaW50CXZtX3NldF9kZXNjKHN0cnVjdCB2
bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQz
Ml90IGxpbWl0LCB1aW50MzJfdCBhY2Nlc3MpOworaW50CXZtX2dldF9kZXNjKHN0cnVjdCB2bWN0
eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90ICpiYXNlLCB1aW50MzJf
dCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpOworaW50CXZtX2dldF9zZWdfZGVzYyhzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJCQlzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19k
ZXNjKTsKK2ludAl2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp
bnQgcmVnLCB1aW50NjRfdCB2YWwpOworaW50CXZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHgg
KmN0eCwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50CXZtX3J1bihz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9leGl0ICpyZXRfdm1leGl0KTsK
K2ludAl2bV9zdXNwZW5kKHN0cnVjdCB2bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhv
dyk7CitpbnQJdm1fcmVpbml0KHN0cnVjdCB2bWN0eCAqY3R4KTsKK2ludAl2bV9hcGljaWQydmNw
dShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGFwaWNpZCk7CitpbnQJdm1faW5qZWN0X2V4Y2VwdGlv
bihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCB2ZWN0b3IsCisgICAgaW50IGVycmNv
ZGVfdmFsaWQsIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKK2lu
dAl2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9yKTsK
K2ludAl2bV9sYXBpY19sb2NhbF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQg
dmVjdG9yKTsKK2ludAl2bV9sYXBpY19tc2koc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQ2NF90IGFk
ZHIsIHVpbnQ2NF90IG1zZyk7CitpbnQJdm1faW9hcGljX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4
ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4
ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19wdWxzZV9pcnEoc3RydWN0IHZtY3R4ICpj
dHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50ICpwaW5jb3VudCk7CitpbnQJdm1faXNhX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgs
IGludCBhdHBpY19pcnEsIGludCBpb2FwaWNfaXJxKTsKK2ludAl2bV9pc2FfZGVhc3NlcnRfaXJx
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSk7CitpbnQJ
dm1faXNhX3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGF0cGljX2lycSwgaW50IGlv
YXBpY19pcnEpOworaW50CXZtX2lzYV9zZXRfaXJxX3RyaWdnZXIoc3RydWN0IHZtY3R4ICpjdHgs
IGludCBhdHBpY19pcnEsCisJICAgIGVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXIpOworaW50
CXZtX2luamVjdF9ubWkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1KTsKK2ludAl2bV9jYXBh
YmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1lKTsKK2NvbnN0IGNoYXIgKnZtX2Nh
cGFiaWxpdHlfdHlwZTJuYW1lKGludCB0eXBlKTsKK2ludAl2bV9nZXRfY2FwYWJpbGl0eShzdHJ1
Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLAorCQkJICBpbnQg
KnJldHZhbCk7CitpbnQJdm1fc2V0X2NhcGFiaWxpdHkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2
Y3B1LCBlbnVtIHZtX2NhcF90eXBlIGNhcCwKKwkJCSAgaW50IHZhbCk7CitpbnQJdm1fYXNzaWdu
X3BwdGRldihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsK
K2ludAl2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBz
bG90LCBpbnQgZnVuYyk7CitpbnQJdm1fbWFwX3BwdGRldl9tbWlvKHN0cnVjdCB2bWN0eCAqY3R4
LCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMsCisJCQkgICB2bV9wYWRkcl90IGdwYSwgc2l6
ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50CXZtX3NldHVwX3BwdGRldl9tc2koc3RydWN0
IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwkgICAgaW50IGZ1bmMs
IHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51bXZlYyk7CitpbnQJdm1fc2V0dXBf
cHB0ZGV2X21zaXgoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xv
dCwKKwkgICAgaW50IGZ1bmMsIGludCBpZHgsIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywK
KwkgICAgdWludDMyX3QgdmVjdG9yX2NvbnRyb2wpOworCitpbnQJdm1fZ2V0X2ludGluZm8oc3Ry
dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCAqaTEsIHVpbnQ2NF90ICppMik7Citp
bnQJdm1fc2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBl
eGl0X2ludGluZm8pOworCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGlj
cyBidWZmZXIuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgorICovCit1aW50NjRfdCAq
dm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwg
KnJldF90diwKKwkJICAgICAgIGludCAqcmV0X2VudHJpZXMpOworY29uc3QgY2hhciAqdm1fZ2V0
X3N0YXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KTsKKworaW50CXZtX2dldF94
MmFwaWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0
ZSAqcyk7CitpbnQJdm1fc2V0X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZj
cHUsIGVudW0geDJhcGljX3N0YXRlIHMpOworCitpbnQJdm1fZ2V0X2hwZXRfY2FwYWJpbGl0aWVz
KHN0cnVjdCB2bWN0eCAqY3R4LCB1aW50MzJfdCAqY2FwYWJpbGl0aWVzKTsKKworLyoKKyAqIFRy
YW5zbGF0ZSB0aGUgR0xBIHJhbmdlIFtnbGEsZ2xhK2xlbikgaW50byBHUEEgc2VnbWVudHMgaW4g
J2lvdicuCisgKiBUaGUgJ2lvdmNudCcgc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gYWNjb21tb2Rh
dGUgYWxsIEdQQSBzZWdtZW50cy4KKyAqCisgKiByZXR2YWwJZmF1bHQJCUludGVycHJldGF0aW9u
CisgKiAgIDAJCSAgMAkJU3VjY2VzcworICogICAwCQkgIDEJCUFuIGV4Y2VwdGlvbiB3YXMgaW5q
ZWN0ZWQgaW50byB0aGUgZ3Vlc3QKKyAqIEVGQVVMVAkgTi9BCQlFcnJvcgorICovCitpbnQJdm1f
Y29weV9zZXR1cChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9w
YWdpbmcgKnBnLAorCSAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBwcm90LCBzdHJ1
Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKKwkgICAgaW50ICpmYXVsdCk7Cit2b2lkCXZtX2Nv
cHlpbihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCBpb3ZlYyAqZ3Vlc3RfaW92
LAorCSAgICB2b2lkICpob3N0X2RzdCwgc2l6ZV90IGxlbik7Cit2b2lkCXZtX2NvcHlvdXQoc3Ry
dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBjb25zdCB2b2lkICpob3N0X3NyYywKKwkgICAgc3Ry
dWN0IGlvdmVjICpndWVzdF9pb3YsIHNpemVfdCBsZW4pOwordm9pZAl2bV9jb3B5X3RlYXJkb3du
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsCisJICAgIGlu
dCBpb3ZjbnQpOworCisvKiBSVEMgKi8KK2ludAl2bV9ydGNfd3JpdGUoc3RydWN0IHZtY3R4ICpj
dHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpOworaW50CXZtX3J0Y19yZWFkKHN0cnVjdCB2
bWN0eCAqY3R4LCBpbnQgb2Zmc2V0LCB1aW50OF90ICpyZXR2YWwpOworaW50CXZtX3J0Y19zZXR0
aW1lKHN0cnVjdCB2bWN0eCAqY3R4LCB0aW1lX3Qgc2Vjcyk7CitpbnQJdm1fcnRjX2dldHRpbWUo
c3RydWN0IHZtY3R4ICpjdHgsIHRpbWVfdCAqc2Vjcyk7CisKKy8qIFJlc2V0IHZjcHUgcmVnaXN0
ZXIgc3RhdGUgKi8KK2ludAl2Y3B1X3Jlc2V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7
CisKK2ludAl2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm1jdHggKmN0eCwgY3B1c2V0X3QgKmNwdXMp
OworaW50CXZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1
cyk7CitpbnQJdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7CisK
Ky8qCisgKiBGcmVlQlNEIHNwZWNpZmljIEFQSXMKKyAqLworaW50CXZtX3NldHVwX2ZyZWVic2Rf
cmVnaXN0ZXJzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwKKwkJCQl1aW50NjRfdCByaXAs
IHVpbnQ2NF90IGNyMywgdWludDY0X3QgZ2R0YmFzZSwKKwkJCQl1aW50NjRfdCByc3ApOworaW50
CXZtX3NldHVwX2ZyZWVic2RfcmVnaXN0ZXJzX2kzODYoc3RydWN0IHZtY3R4ICp2bWN0eCwgaW50
IHZjcHUsCisJCQkJCXVpbnQzMl90IGVpcCwgdWludDMyX3QgZ2R0YmFzZSwKKwkJCQkJdWludDMy
X3QgZXNwKTsKK3ZvaWQJdm1fc2V0dXBfZnJlZWJzZF9nZHQodWludDY0X3QgKmdkdHIpOworI2Vu
ZGlmCS8qIF9WTU1BUElfSF8gKi8KRmlsZXMgdXNyL3NyYy9zcmMudHh6IGFuZCAvdXNyL3NyYy9z
cmMudHh6IGRpZmZlcgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2NvbmYvR0VORVJJ
QyAvdXNyL3NyYy9zeXMvYW1kNjQvY29uZi9HRU5FUklDCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9j
b25mL0dFTkVSSUMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9hbWQ2NC9jb25mL0dFTkVSSUMJMjAxNi0xMS0zMCAxMDo1ODowMi41OTE5MzMwMDAg
KzAwMDAKQEAgLTM1Myw3ICszNTMsNyBAQAogZGV2aWNlCQl2bXgJCQkjIFZNd2FyZSBWTVhORVQz
IEV0aGVybmV0CiAKICMgTmV0bWFwIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gVFgvUlggcmlu
Z3Mgb24gc3VwcG9ydGVkIE5JQ3MKLWRldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9y
dAorI2RldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9ydAogCiAjIFRoZSBjcnlwdG8g
ZnJhbWV3b3JrIGlzIHJlcXVpcmVkIGJ5IElQU0VDCiBkZXZpY2UJCWNyeXB0bwkJCSMgUmVxdWly
ZWQgYnkgSVBTRUMKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5o
IC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5oCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9p
bmNsdWRlL3ZtbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNy
L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaAkyMDE2LTExLTMwIDEwOjU2OjA1Ljc4NDk5OTAw
MCArMDAwMApAQCAtMTgzLDYgKzE4Myw3IEBACiBpbnQgdm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2
bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwogdm9pZCB2bV9mcmVl
X21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOwogaW50IHZtX21hcF9tbWlvKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90IGhwYSk7Citp
bnQgdm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBs
ZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQpOwogaW50IHZtX3VubWFwX21taW8oc3Ry
dWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwogaW50IHZtX2Fzc2lnbl9w
cHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKIGludCB2
bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBm
dW5jKTsKQEAgLTMyMSw2ICszMjIsNyBAQAogc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0
IHZtICp2bSk7CiBzdHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKIHN0cnVj
dCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2go
c3RydWN0IHZtICp2bSk7CiAKIC8qCiAgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8g
dGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCkBAIC00MTcsNyArNDE5
LDE0IEBACiAJRURHRV9UUklHR0VSLAogCUxFVkVMX1RSSUdHRVIKIH07Ci0JCisKKy8qIE9wZXJh
dGlvbnMgc3VwcG9ydGVkIG9uIFZNX0lPX1JFR19IQU5ETEVSIGlvY3RsLiAqLworZW51bSB2bV9p
b19yZWdoX3R5cGUgeworCVZNX0lPX1JFR0hfREVMRVRFLAorCVZNX0lPX1JFR0hfS1dFVkVOVFMs
CS8qIGtlcm5lbCB3YWl0IGV2ZW50cyAqLworCVZNX0lPX1JFR0hfTUFYCit9OworCiAvKgogICog
VGhlICdhY2Nlc3MnIGZpZWxkIGhhcyB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBUYWJsZSAyMS0y
IG9mIHRoZSBJbnRlbAogICogQXJjaGl0ZWN0dXJlIE1hbnVhbCB2b2wgM2IuCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2
NC9pbmNsdWRlL3ZtbS5oLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmgu
b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz
L2FtZDY0L2luY2x1ZGUvdm1tLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjUzLjgyMjk1OTAwMCAr
MDAwMApAQCAtMCwwICsxLDY3NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBw
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5j
bHVkZS92bW0uaCAyOTkwMTAgMjAxNi0wNS0wMyAyMjoxMzowNFogcGZnICQKKyAqLworCisjaWZu
ZGVmIF9WTU1fSF8KKyNkZWZpbmUJX1ZNTV9IXworCisjaW5jbHVkZSA8eDg2L3NlZ21lbnRzLmg+
CisKK2VudW0gdm1fc3VzcGVuZF9ob3cgeworCVZNX1NVU1BFTkRfTk9ORSwKKwlWTV9TVVNQRU5E
X1JFU0VULAorCVZNX1NVU1BFTkRfUE9XRVJPRkYsCisJVk1fU1VTUEVORF9IQUxULAorCVZNX1NV
U1BFTkRfVFJJUExFRkFVTFQsCisJVk1fU1VTUEVORF9MQVNUCit9OworCisvKgorICogSWRlbnRp
ZmllcnMgZm9yIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIHJlZ2lzdGVycy4KKyAqLworZW51bSB2
bV9yZWdfbmFtZSB7CisJVk1fUkVHX0dVRVNUX1JBWCwKKwlWTV9SRUdfR1VFU1RfUkJYLAorCVZN
X1JFR19HVUVTVF9SQ1gsCisJVk1fUkVHX0dVRVNUX1JEWCwKKwlWTV9SRUdfR1VFU1RfUlNJLAor
CVZNX1JFR19HVUVTVF9SREksCisJVk1fUkVHX0dVRVNUX1JCUCwKKwlWTV9SRUdfR1VFU1RfUjgs
CisJVk1fUkVHX0dVRVNUX1I5LAorCVZNX1JFR19HVUVTVF9SMTAsCisJVk1fUkVHX0dVRVNUX1Ix
MSwKKwlWTV9SRUdfR1VFU1RfUjEyLAorCVZNX1JFR19HVUVTVF9SMTMsCisJVk1fUkVHX0dVRVNU
X1IxNCwKKwlWTV9SRUdfR1VFU1RfUjE1LAorCVZNX1JFR19HVUVTVF9DUjAsCisJVk1fUkVHX0dV
RVNUX0NSMywKKwlWTV9SRUdfR1VFU1RfQ1I0LAorCVZNX1JFR19HVUVTVF9EUjcsCisJVk1fUkVH
X0dVRVNUX1JTUCwKKwlWTV9SRUdfR1VFU1RfUklQLAorCVZNX1JFR19HVUVTVF9SRkxBR1MsCisJ
Vk1fUkVHX0dVRVNUX0VTLAorCVZNX1JFR19HVUVTVF9DUywKKwlWTV9SRUdfR1VFU1RfU1MsCisJ
Vk1fUkVHX0dVRVNUX0RTLAorCVZNX1JFR19HVUVTVF9GUywKKwlWTV9SRUdfR1VFU1RfR1MsCisJ
Vk1fUkVHX0dVRVNUX0xEVFIsCisJVk1fUkVHX0dVRVNUX1RSLAorCVZNX1JFR19HVUVTVF9JRFRS
LAorCVZNX1JFR19HVUVTVF9HRFRSLAorCVZNX1JFR19HVUVTVF9FRkVSLAorCVZNX1JFR19HVUVT
VF9DUjIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMCwKKwlWTV9SRUdfR1VFU1RfUERQVEUxLAorCVZN
X1JFR19HVUVTVF9QRFBURTIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMywKKwlWTV9SRUdfR1VFU1Rf
SU5UUl9TSEFET1csCisJVk1fUkVHX0xBU1QKK307CisKK2VudW0geDJhcGljX3N0YXRlIHsKKwlY
MkFQSUNfRElTQUJMRUQsCisJWDJBUElDX0VOQUJMRUQsCisJWDJBUElDX1NUQVRFX0xBU1QKK307
CisKKyNkZWZpbmUJVk1fSU5USU5GT19WRUNUT1IoaW5mbykJKChpbmZvKSAmIDB4ZmYpCisjZGVm
aW5lCVZNX0lOVElORk9fREVMX0VSUkNPREUJMHg4MDAKKyNkZWZpbmUJVk1fSU5USU5GT19SU1ZE
CQkweDdmZmZmMDAwCisjZGVmaW5lCVZNX0lOVElORk9fVkFMSUQJMHg4MDAwMDAwMAorI2RlZmlu
ZQlWTV9JTlRJTkZPX1RZUEUJCTB4NzAwCisjZGVmaW5lCVZNX0lOVElORk9fSFdJTlRSCSgwIDw8
IDgpCisjZGVmaW5lCVZNX0lOVElORk9fTk1JCQkoMiA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP
X0hXRVhDRVBUSU9OCSgzIDw8IDgpCisjZGVmaW5lCVZNX0lOVElORk9fU1dJTlRSCSg0IDw8IDgp
CisKKyNpZmRlZiBfS0VSTkVMCisKKyNkZWZpbmUJVk1fTUFYX05BTUVMRU4JMzIKKworc3RydWN0
IHZtOworc3RydWN0IHZtX2V4Y2VwdGlvbjsKK3N0cnVjdCBzZWdfZGVzYzsKK3N0cnVjdCB2bV9l
eGl0Oworc3RydWN0IHZtX3J1bjsKK3N0cnVjdCB2aHBldDsKK3N0cnVjdCB2aW9hcGljOworc3Ry
dWN0IHZsYXBpYzsKK3N0cnVjdCB2bXNwYWNlOworc3RydWN0IHZtX29iamVjdDsKK3N0cnVjdCB2
bV9ndWVzdF9wYWdpbmc7CitzdHJ1Y3QgcG1hcDsKKworc3RydWN0IHZtX2V2ZW50aW5mbyB7CisJ
dm9pZAkqcnB0cjsJCS8qIHJlbmRlenZvdXMgY29va2llICovCisJaW50CSpzcHRyOwkJLyogc3Vz
cGVuZCBjb29raWUgKi8KKwlpbnQJKmlwdHI7CQkvKiByZXFpZGxlIGNvb2tpZSAqLworfTsKKwor
dHlwZWRlZiBpbnQJKCp2bW1faW5pdF9mdW5jX3QpKGludCBpcGludW0pOwordHlwZWRlZiBpbnQJ
KCp2bW1fY2xlYW51cF9mdW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkCSgqdm1tX3Jlc3VtZV9m
dW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkICoJKCp2bWlfaW5pdF9mdW5jX3QpKHN0cnVjdCB2
bSAqdm0sIHN0cnVjdCBwbWFwICpwbWFwKTsKK3R5cGVkZWYgaW50CSgqdm1pX3J1bl9mdW5jX3Qp
KHZvaWQgKnZtaSwgaW50IHZjcHUsIHJlZ2lzdGVyX3QgcmlwLAorCQkgICAgc3RydWN0IHBtYXAg
KnBtYXAsIHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pOwordHlwZWRlZiB2b2lkCSgqdm1pX2Ns
ZWFudXBfZnVuY190KSh2b2lkICp2bWkpOwordHlwZWRlZiBpbnQJKCp2bWlfZ2V0X3JlZ2lzdGVy
X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAgICAgdWludDY0X3QgKnJl
dHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfcmVnaXN0ZXJfdCkodm9pZCAqdm1pLCBpbnQg
dmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCB2YWwpOwordHlwZWRlZiBpbnQJKCp2
bWlfZ2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgIHN0cnVj
dCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfZGVzY190KSh2b2lkICp2
bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5
cGVkZWYgaW50CSgqdm1pX2dldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwg
aW50ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2bWlfc2V0X2NhcF90KSh2b2lkICp2bWksIGlu
dCB2Y3B1LCBpbnQgbnVtLCBpbnQgdmFsKTsKK3R5cGVkZWYgc3RydWN0IHZtc3BhY2UgKiAoKnZt
aV92bXNwYWNlX2FsbG9jKSh2bV9vZmZzZXRfdCBtaW4sIHZtX29mZnNldF90IG1heCk7Cit0eXBl
ZGVmIHZvaWQJKCp2bWlfdm1zcGFjZV9mcmVlKShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSk7Cit0
eXBlZGVmIHN0cnVjdCB2bGFwaWMgKiAoKnZtaV92bGFwaWNfaW5pdCkodm9pZCAqdm1pLCBpbnQg
dmNwdSk7Cit0eXBlZGVmIHZvaWQJKCp2bWlfdmxhcGljX2NsZWFudXApKHZvaWQgKnZtaSwgc3Ry
dWN0IHZsYXBpYyAqdmxhcGljKTsKKworc3RydWN0IHZtbV9vcHMgeworCXZtbV9pbml0X2Z1bmNf
dAkJaW5pdDsJCS8qIG1vZHVsZSB3aWRlIGluaXRpYWxpemF0aW9uICovCisJdm1tX2NsZWFudXBf
ZnVuY190CWNsZWFudXA7CisJdm1tX3Jlc3VtZV9mdW5jX3QJcmVzdW1lOworCisJdm1pX2luaXRf
ZnVuY190CQl2bWluaXQ7CQkvKiB2bS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworCXZtaV9y
dW5fZnVuY190CQl2bXJ1bjsKKwl2bWlfY2xlYW51cF9mdW5jX3QJdm1jbGVhbnVwOworCXZtaV9n
ZXRfcmVnaXN0ZXJfdAl2bWdldHJlZzsKKwl2bWlfc2V0X3JlZ2lzdGVyX3QJdm1zZXRyZWc7CisJ
dm1pX2dldF9kZXNjX3QJCXZtZ2V0ZGVzYzsKKwl2bWlfc2V0X2Rlc2NfdAkJdm1zZXRkZXNjOwor
CXZtaV9nZXRfY2FwX3QJCXZtZ2V0Y2FwOworCXZtaV9zZXRfY2FwX3QJCXZtc2V0Y2FwOworCXZt
aV92bXNwYWNlX2FsbG9jCXZtc3BhY2VfYWxsb2M7CisJdm1pX3Ztc3BhY2VfZnJlZQl2bXNwYWNl
X2ZyZWU7CisJdm1pX3ZsYXBpY19pbml0CQl2bGFwaWNfaW5pdDsKKwl2bWlfdmxhcGljX2NsZWFu
dXAJdmxhcGljX2NsZWFudXA7Cit9OworCitleHRlcm4gc3RydWN0IHZtbV9vcHMgdm1tX29wc19p
bnRlbDsKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3BzX2FtZDsKKworaW50IHZtX2NyZWF0
ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSk7Cit2b2lkIHZtX2Rlc3Ryb3ko
c3RydWN0IHZtICp2bSk7CitpbnQgdm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pOworY29uc3QgY2hh
ciAqdm1fbmFtZShzdHJ1Y3Qgdm0gKnZtKTsKKworLyoKKyAqIEFQSXMgdGhhdCBtb2RpZnkgdGhl
IGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBhbGwgdmNwdXMgdG8gYmUgZnJvemVuLgorICovCitp
bnQgdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdp
ZCwgdm1fb29mZnNldF90IG9mZiwKKyAgICBzaXplX3QgbGVuLCBpbnQgcHJvdCwgaW50IGZsYWdz
KTsKK2ludCB2bV9hbGxvY19tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3Qg
bGVuLCBib29sIHN5c21lbSk7Cit2b2lkIHZtX2ZyZWVfbWVtc2VnKHN0cnVjdCB2bSAqdm0sIGlu
dCBpZGVudCk7CitpbnQgdm1fbWFwX21taW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEs
IHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2
bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2
KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5h
c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7
CisKKy8qCisgKiBBUElzIHRoYXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJl
IG9ubHkgYSAqc2luZ2xlKiB2Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEg
cmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0
aW9uIHJlcXVpcmVzICphbGwqIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBf
Z2V0bmV4dChzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAg
dm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3Mp
OworaW50IHZtX2dldF9tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxl
biwgYm9vbCAqc3lzbWVtLAorICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAq
dm1fZ3BhX2hvbGQoc3RydWN0IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl
X3QgbGVuLAorICAgIGludCBwcm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVh
c2Uodm9pZCAqY29va2llKTsKK2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0
IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3Nl
dF9yZWdpc3RlcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFs
KTsKK2ludCB2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcs
CisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Mo
c3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2Mg
KmRlc2MpOworaW50IHZtX3J1bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7
CitpbnQgdm1fc3VzcGVuZChzdHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7
CitpbnQgdm1faW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1p
X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihz
dHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2
bSAqdm0sIGludCB2Y3B1KTsKK2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQpOworc3RydWN0IHZsYXBpYyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7Citz
dHJ1Y3QgdmlvYXBpYyAqdm1faW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2
bV9ocGV0KHN0cnVjdCB2bSAqdm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAq
dm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0
X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUg
KnN0YXRlKTsKK2ludCB2bV9zZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
LCBlbnVtIHgyYXBpY19zdGF0ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qg
dm0gKnZtLCBpbnQgYXBpY2lkKTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwg
aW50IHZjcHUpOworc3RydWN0IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQpOwordm9pZCB2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2
bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVx
aWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYg
X1NZU19fQ1BVU0VUX0hfCisvKgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGlu
ICdkZXN0JyBhbmQgZXhlY3V0ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5j
KGFyZyknIGlzIG5vdCBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2Ug
dGhlIHRocmVhZCB0byBiZSBwdXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMg
aXMgYmVpbmcgaW5pdGlhdGVkIGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1
aWQnIG11c3QgcmVmZXIgdG8gdGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0
byAtMS4KKyAqCisgKiBUaGUgY2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRp
YXRpbmcgdGhlIHJlbmRlenZvdXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg
QVBJIG1heSBjYXVzZSB2Y3B1cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rl
c3QnIHRvIGJlIHN0YWxsZWQuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1
cyBtYWtpbmcKKyAqIGZvcndhcmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBw
cm9ncmVzcy4KKyAqLwordHlwZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3Vz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6
dm91c19mdW5jX3QgZnVuYywgdm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0
cnVjdCB2bSAqdm0pOworY3B1c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7
CisjZW5kaWYJLyogX1NZU19fQ1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3Zj
cHVfcmVuZGV6dm91c19wZW5kaW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwly
ZXR1cm4gKCooKHVpbnRwdHJfdCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSBpbnQKK3ZjcHVfc3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7
CisKKwlyZXR1cm4gKCppbmZvLT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNw
dV9yZXFpZGxlKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv
LT5pcHRyKTsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVz
L3Nsb3QvZnVuYyBpcyBzdXBwb3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNl
LgorICoKKyAqIFJldHVybiAwIG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50
IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVj
dCB2bSAqdm0pOworCitlbnVtIHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pF
TiwKKwlWQ1BVX1JVTk5JTkcsCisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9z
dGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAg
IGJvb2wgZnJvbV9pZGxlKTsKK2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQor
dmNwdV9pc19ydW5uaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7
CisJcmV0dXJuICh2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5O
SU5HKTsKK30KKworI2lmZGVmIF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNw
dV9zaG91bGRfeWllbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhy
ZWFkLT50ZF9mbGFncyAmIChUREZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJl
dHVybiAoMSk7CisJZWxzZSBpZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4g
KDEpOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0
IHZtICp2bSwgaW50IHZjcHVpZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2
bV9nZXRfdm1zcGFjZShzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0
cnVjdCB2bSAqdm0pOworc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7Citz
dHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9y
dGMoc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGlu
dG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCisgKiBzdWNjZXNz
IGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAqIFdyYXBwZXIgZnVuY3Rpb25zIGxpa2Ug
J3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMg
ZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVuZm9yY2UgdGhlIHRyYXAtbGlrZSBvciBm
YXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNlcHRpb24uCisgKgorICogVGhpcyBmdW5j
dGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRocmVhZCB0
aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1LgorICovCitpbnQgdm1faW5qZWN0X2V4Y2Vw
dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlk
LAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKKworLyoK
KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgVk0tZXhpdCB0aGF0IG9jY3VycmVk
IGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVwdCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJ
RFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRlc2NyaWJlZAorICogaW4gRmlndXJlIDE1
LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2VwdHMiLCBBUE0sIFZvbCAyLgorICoKKyAq
IElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vz
c2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZtX2V4aXRfaW50aW5mbygpIHRvIGV4dGlu
Z3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcuLAorICogaWYgdGhlIHRhc2sgc3dpdGNo
IGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFzayBnYXRlIHRoZW4gaXQgc2hvdWxkCisg
KiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5mbz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRpbmcgYW55bW9yZS4KKyAqCisgKiBSZXR1
cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICovCitp
bnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IGlu
dGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZN
LWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICogZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5q
ZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rpb24gY29tYmluZXMKKyAqIG5lc3RlZCBl
dmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1bHQuCisgKgorICogUmV0dXJucyAwIGlm
IHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGd1
ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgdm1fZW50cnlfaW50aW5m
byhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbyk7CisKK2ludCB2bV9n
ZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVp
bnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25hbWUgdm1fc2VnbWVudF9uYW1lKGludCBz
ZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWluZm8geworCXVpbnQ2NF90CWdwYTsKKwlz
aXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJCSpjb29raWU7Cit9OworCisvKgorICog
U2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zyb20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mg
c3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAnbGVuJyBieXRlcyBsb25nLiBUaGUgJ3By
b3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZvcgorICogYSBjb3B5aW4gb3IgUFJPVF9X
UklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRp
b24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAwCQkgICAxCQlBbiBleGNlcHRpb24gd2Fz
IGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJCVVucmVjb3ZlcmFibGUg
ZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNhbiBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlp
bigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAu
IFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3VsZCBiZSBmcmVlZCBieSBjYWxsaW5nCisg
KiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUgY29weSBpcyBkb25lLgorICovCitpbnQg
dm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3Rf
cGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBpbnQgcHJvdCwg
c3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQg
KmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8p
Owordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2Nv
cHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRkciwgc2l6ZV90IGxlbik7Cit2b2lkIHZt
X2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisg
ICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywgc2l6ZV90IGxlbik7CisKK2ludCB2Y3B1
X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7CisjZW5kaWYJLyog
S0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNw
dXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBvcHRpb25hbCB2bW0gY2FwYWJpbGl0aWVz
CisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NBUF9IQUxUX0VYSVQsCisJVk1fQ0FQX01U
UkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJVk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVT
VCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1fQ0FQX01BWAorfTsKKworZW51bSB2bV9p
bnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlMRVZFTF9UUklHR0VSCit9OworCQorLyoK
KyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gVGFibGUg
MjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVyZSBNYW51YWwgdm9sIDNiLgorICoKKyAq
IFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3MnIGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFs
bHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNlZ21lbnQgVW51c2FibGUuCisgKi8KK3N0
cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsKKwl1aW50MzJfdAlsaW1pdDsKKwl1aW50
MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVTQ19UWVBFKGFjY2VzcykJCSgoYWNjZXNz
KSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBMKGFjY2VzcykJCSgoKGFjY2VzcykgPj4g
NSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNFTlQoYWNjZXNzKQkoKChhY2Nlc3MpICYg
MHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19ERUYzMihhY2Nlc3MpCQkoKChhY2Nl
c3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19HUkFOVUxBUklUWShhY2Nl
c3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDApCisjZGVmaW5lCVNFR19ERVNDX1VOVVNB
QkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDApID8gMSA6IDApCisKK2VudW0gdm1fY3B1
X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01PREVfUFJPVEVDVEVELAorCUNQVV9NT0RF
X0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAoQ1MuTCA9IDApICovCisJQ1BVX01PREVf
NjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAxKSAqLworfTsKKworZW51bSB2bV9wYWdp
bmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQQUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdf
TU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9OworCitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n
IHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9k
ZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19tb2RlOworfTsKKworLyoKKyAqIFRoZSBk
YXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3AnIGFyZSBtZWFudCB0byBiZSBvcGFxdWUg
dG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIFRoZSBvbmx5IHJl
YXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQgdG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNl
IHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2
aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFjdHVhbCBvcGNvZGUgYnl0ZSAqLworCXVp
bnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0aW9uIChlLmcuIE1PVikgKi8KKwl1aW50
MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklFX0lOU1RfU0laRQkxNQorc3RydWN0IHZp
ZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpFXTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMg
Ki8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXplIG9mIHRoZSBpbnN0cnVjdGlvbiAqLwor
CXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6
NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAqLworCXVpbnQ4X3QJCXJleF93OjEsCQkv
KiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJcmV4X3g6MSwKKwkJCXJleF9iOjEsCisJ
CQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHBy
ZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBSRVBORS9SRVBOWiBwcmVmaXggKi8KKwkJ
CW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNpemUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJz
aXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBvdmVycmlkZSAqLworCQkJc2VnbWVudF9v
dmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICovCisKKwl1aW50OF90CQltb2Q6MiwJCQkv
KiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJtOjQ7CisKKwl1aW50OF90CQlzczoyLAkJ
CS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJYmFzZTo0OworCisJdWludDhfdAkJZGlz
cF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisKKwl1aW50OF90CQlzY2FsZTsKKwlpbnQJ
CWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisJaW50CQlpbmRleF9yZWdp
c3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlpbnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8q
IFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJCWRpc3BsYWNlbWVudDsJCS8qIG9wdGlv
bmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRfdAkJaW1tZWRpYXRlOwkJLyogb3B0aW9u
YWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4X3QJCWRlY29kZWQ7CS8qIHNldCB0byAx
IGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlzdHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9w
Y29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2bV9leGl0Y29kZSB7CisJVk1fRVhJVENP
REVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZNX0VYSVRDT0RFX0JPR1VTLAorCVZNX0VY
SVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNSLAorCVZNX0VYSVRDT0RFX0hMVCwKKwlW
TV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9QQVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJ
TkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZNX0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlW
TV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0byBiZSBTUElORE9XTl9DUFUgKi8KKwlW
TV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRDT0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJ
VENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lOT1VUX1NUUiwKKwlWTV9FWElUQ09ERV9U
QVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9SLAorCVZNX0VYSVRDT0RFX01XQUlULAor
CVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9SRVFJRExFLAorCVZNX0VYSVRDT0RFX01B
WAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50MTZfdAlieXRlczozOwkvKiAxIG9yIDIg
b3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2X3QJc3RyaW5nOjE7CisJdWludDE2X3QJ
cmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJfdAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0
ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsKKwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7
CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICovCisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu
ZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVpbnQ2NF90CWNyMDsKKwl1aW50NjRfdAlp
bmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0xICglcmN4KSwgcmVwPTAgKDEpICovCisJ
aW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lOworCXN0cnVjdCBzZWdf
ZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19zd2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FM
TCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9JRFRfR0FURSwJLyogdGFzayBnYXRlIGlu
IElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7
CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQlleHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUg
dG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAllcnJjb2RlOworCWludAkJZXJyY29kZV92
YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5ldyBzdGFjayAqLworCWVudW0gdGFza19z
d2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307
CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4aXRjb2RlCWV4aXRjb2RlOworCWludAkJ
CWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24gKi8KKwl1aW50NjRfdAkJcmlwOworCXVu
aW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0OworCQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlu
b3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWdwYTsKKwkJCWludAkJZmF1bHRfdHlw
ZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdAlncGE7CisJCQl1aW50NjRf
dAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJaW50CQljc19kOwkJLyogQ1MuRCAqLwor
CQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJ
fSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVjaWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4g
dGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNvZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1l
eGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJc3RhdHVzOwkJLyogdm14IGluc3Qgc3Rh
dHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29uJyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlv
bicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJ
CXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0X3QJZXhpdF9xdWFsaWZpY2F0aW9uOwor
CQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2luc3RfdHlwZScgYXJlIHZhbGlkCisJCQkg
KiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgorCQkJICovCisJCQlpbnQJCWluc3RfdHlw
ZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7CisJCS8qCisJCSAqIFNWTSBzcGVjaWZp
YyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWV4aXRjb2RlOworCQkJ
dWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJZXhpdGluZm8yOworCQl9IHN2bTsKKwkJ
c3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBlY3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90
CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJaW50CQl2Y3B1OworCQkJdWludDY0X3QJ
cmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJ
fSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3RvcjsKKwkJfSBpb2FwaWNfZW9pOworCQlz
dHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7CisJCX0gc3VzcGVuZGVkOworCQlz
dHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7CisJfSB1OworfTsKKworLyogQVBJcyB0
byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICovCit2b2lkIHZtX2luamVjdF9mYXVsdCh2
b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycmNvZGVfdmFsaWQsCisgICAg
aW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X3VkKHZvaWQg
KnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQs
IDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2dwKHZvaWQgKnZt
LCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEs
IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2FjKHZvaWQgKnZtLCBp
bnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwg
SURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK3ZtX2luamVj
dF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUpCit7CisJdm1faW5qZWN0X2Zh
dWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29kZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0
X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKTsK
KworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCB2Y3B1aWQpOworCisj
ZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1
ZGUvdm1tX2Rldi5oIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAotLS0gdXNy
L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAkyMDE2
LTExLTMwIDEwOjU2OjA1Ljc4NjU4MzAwMCArMDAwMApAQCAtMTIzLDYgKzEyMywyMyBAQAogCXNp
emVfdAkJbGVuOwogfTsKIAorLyogQXJndW1lbnQgZm9yIFZNX01BUF9VU0VSX0JVRiBpb2N0bCBp
biB2bW1hcGkuYyAqLworc3RydWN0IHZtX3VzZXJfYnVmIHsKKwl2bV9wYWRkcl90CWdwYTsKKwl2
b2lkIAkJKmFkZHI7CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fSU9f
UkVHX0hBTkRMRVIgaW9jdGwgaW4gdm1tYXBpLmMgKi8KK3N0cnVjdCB2bV9pb19yZWdfaGFuZGxl
ciB7CisJdWludDE2X3QJCXBvcnQ7CQkvKiBJL08gYWRkcmVzcyAqLworCXVpbnQxNl90CQlpbjsJ
CS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QJCW1hc2tfZGF0YTsJLyogMCBtZWFucyBtYXRj
aCBhbnl0aGluZyAqLworCXVpbnQzMl90CQlkYXRhOwkJLyogZGF0YSB0byBtYXRjaCAqLworCWVu
dW0gdm1faW9fcmVnaF90eXBlCXR5cGU7CQkvKiBoYW5kbGVyIHR5cGUgKi8KKwl2b2lkCQkJKmFy
ZzsJCS8qIGhhbmRsZXIgYXJndW1lbnQgKi8KK307CisKIHN0cnVjdCB2bV9wcHRkZXZfbXNpIHsK
IAlpbnQJCXZjcHU7CiAJaW50CQlidXM7CkBAIC0yODYsNiArMzAzLDEwIEBACiAJSU9DTlVNX1JU
Q19XUklURSA9IDEwMSwKIAlJT0NOVU1fUlRDX1NFVFRJTUUgPSAxMDIsCiAJSU9DTlVNX1JUQ19H
RVRUSU1FID0gMTAzLAorCisJLyogaG9zdCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVN
X01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJT0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCiB9Owog
CiAjZGVmaW5lCVZNX1JVTgkJXApAQCAtMzQ0LDYgKzM2NSwxMCBAQAogCV9JT1coJ3YnLCBJT0NO
VU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKICNkZWZpbmUJVk1fTUFQX1BQVERF
Vl9NTUlPIFwKIAlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3Bw
dGRldl9tbWlvKQorI2RlZmluZQlWTV9NQVBfVVNFUl9CVUYgXAorCV9JT1coJ3YnLCBJT0NOVU1f
TUFQX1VTRVJfQlVGLCBzdHJ1Y3Qgdm1fdXNlcl9idWYpCisjZGVmaW5lCVZNX0lPX1JFR19IQU5E
TEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lPX1JFR19IQU5ETEVSLCBzdHJ1Y3Qgdm1faW9fcmVn
X2hhbmRsZXIpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0kgXAogCV9JT1coJ3YnLCBJT0NOVU1fUFBU
REVWX01TSSwgc3RydWN0IHZtX3BwdGRldl9tc2kpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0lYIFwK
ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnIC91
c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h
bWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2Lmgub3JpZwkyMDE2
LTExLTMwIDEwOjUyOjU0LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJ
TkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQt
MTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlf
Vk1NX0RFVl9IXworCisjaWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2lu
dAl2bW1kZXZfY2xlYW51cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2
bV9wYWRkcl90CWdwYTsKKwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9v
b2Zmc2V0X3QJc2Vnb2ZmOwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXpl
X3QJCWxlbjsJCS8qIG1tYXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50
CQlmbGFnczsKK307CisjZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1f
TUVNTUFQX0ZfSU9NTVUJMHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5h
bWVbMF0gIT0gJ1wwJyA/IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlp
bnQJCXNlZ2lkOworCXNpemVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsK
K307CisKK3N0cnVjdCB2bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ
CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qg
dm1fc2VnX2Rlc2MgewkJCS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsK
KwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2Mg
ZGVzYzsKK307CisKK3N0cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4
aXQJdm1fZXhpdDsKK307CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJ
aW50CQl2ZWN0b3I7CisJdWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFs
aWQ7CisJaW50CQlyZXN0YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21z
aSB7CisJdWludDY0X3QJbXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFw
aWNfaXJxIHsKKwlpbnQJCWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lv
YXBpY19pcnEgeworCWludAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJ
YXRwaWNfaXJxOworCWludAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3Ry
aWdnZXIgeworCWludAkJYXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7
Cit9OworCitzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2Nh
cF90eXBlIGNhcHR5cGU7CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3Ry
dWN0IHZtX3BwdGRldiB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307
CisKK3N0cnVjdCB2bV9wcHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWlu
dAkJZnVuYzsKKwl2bV9wYWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxl
bjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7
CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlz
YWJsZWQgKi8KKwl1aW50NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2
bV9wcHRkZXZfbXNpeCB7CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp
bnQJCWZ1bmM7CisJaW50CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9j
b250cm9sOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNw
dWlkOworfTsKKworI2RlZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJ
aW50CQljcHVpZDsJCQkJLyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLwor
CXN0cnVjdCB0aW1ldmFsCXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307
CisKK3N0cnVjdCB2bV9zdGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hh
cgkJZGVzY1sxMjhdOwkJCS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50
CQkJY3B1aWQ7CisJZW51bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3Bh
X3B0ZSB7CisJdWludDY0X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJ
Lyogb3V0ICovCisJaW50CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVp
bnQzMl90CWNhcGFiaWxpdGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGll
cyAqLworfTsKKworc3RydWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93
OworfTsKKworc3RydWN0IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICov
CisJaW50IAkJcHJvdDsJCS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJ
Z2xhOworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBv
dXRwdXRzICovCisJdWludDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7
CisJaW50CQl2Y3B1aWQ7Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOwor
CWludAkJY3B1c2V0c2l6ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElW
RV9DUFVTCQkwCisjZGVmaW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGlu
Zm8geworCWludAkJdmNwdWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOwor
fTsKKworc3RydWN0IHZtX3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qg
dm1fcnRjX2RhdGEgeworCWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51
bSB7CisJLyogZ2VuZXJhbCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NO
VU1fUlVOID0gMSwKKwlJT0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQ
QUJJTElUWSA9IDMsCisJSU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAor
CisJLyogbWVtb3J5IGFwaXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJl
Y2F0ZWQgKi8KKwlJT0NOVU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8K
KwlJT0NOVU1fR0VUX0dQQV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NO
VU1fQUxMT0NfTUVNU0VHID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1f
TU1BUF9NRU1TRUcgPSAxNiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdp
c3Rlci9zdGF0ZSBhY2Nlc3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9D
TlVNX0dFVF9SRUdJU1RFUiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0g
MjIsCisJSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVw
dCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lO
VElORk8gPSAyOSwKKwlJT0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJ
Q19JUlEgPSAzMSwKKwlJT0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNT
RVJUX0lSUSA9IDMzLAorCUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVN
X0lPQVBJQ19QVUxTRV9JUlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVN
X0xBUElDX0xPQ0FMX0lSUSA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJ
T0NOVU1fUkVTVEFSVF9JTlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLwor
CUlPQ05VTV9CSU5EX1BQVERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJ
SU9DTlVNX01BUF9QUFRERVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJ
SU9DTlVNX1BQVERFVl9NU0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZN
X1NUQVRTID0gNTAsIAorCUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBk
ZXZpY2Ugc3RhdGUgKi8KKwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9H
RVRfWDJBUElDX1NUQVRFID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYy
LAorCisJLyogbGVnYWN5IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VS
VF9JUlEgPSA4MCwKKwlJT0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0Ff
UFVMU0VfSVJRID0gODIsCisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8q
IHZtX2NwdXNldCAqLworCUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQ
VVNFVCA9IDkxLAorCisJLyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05V
TV9SVENfV1JJVEUgPSAxMDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9S
VENfR0VUVElNRSA9IDEwMywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJ
T0NOVU1fUlVOLCBzdHJ1Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2
JywgSU9DTlVNX1NVU1BFTkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJ
XAorCV9JTygndicsIElPQ05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJ
X0lPVygndicsIElPQ05VTV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5l
CVZNX0dFVF9NRU1TRUcJXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2
bV9tZW1zZWcpCisjZGVmaW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01N
QVBfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAor
CV9JT1dSKCd2JywgSU9DTlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZp
bmUJVk1fU0VUX1JFR0lTVEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3Ry
dWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2Jywg
SU9DTlVNX0dFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRf
U0VHTUVOVF9ERVNDUklQVE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NS
SVBUT1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJ
UFRPUiBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0
IHZtX3NlZ19kZXNjKQorI2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2Jywg
SU9DTlVNX0lOSkVDVF9FWENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZN
X0xBUElDX0lSUSAJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xh
cGljX2lycSkKKyNkZWZpbmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05V
TV9MQVBJQ19MT0NBTF9JUlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElD
X01TSQkJXAorCV9JT1coJ3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNp
KQorI2RlZmluZQlWTV9JT0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQ
SUNfQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19E
RUFTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3Ry
dWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1co
J3YnLCBJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVm
aW5lCVZNX0lPQVBJQ19QSU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09V
TlQsIGludCkKKyNkZWZpbmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1f
SVNBX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NF
UlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9p
c2FfaXJxKQorI2RlZmluZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lT
QV9QVUxTRV9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9U
UklHR0VSCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2
bV9pc2FfaXJxX3RyaWdnZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2
JywgSU9DTlVNX1NFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJ
Vk1fR0VUX0NBUEFCSUxJVFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBz
dHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3Yn
LCBJT0NOVU1fQklORF9QUFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklO
RF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3Bw
dGRldikKKyNkZWZpbmUJVk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01B
UF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZf
TVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNp
KQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJ
WCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9X
KCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRT
IFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmlu
ZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0
IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndics
IElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9H
RVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBz
dHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9J
T1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXAp
CisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9Q
TUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3Yn
LCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRF
X0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0
ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVT
RVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2
JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VU
X0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50
aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklU
RSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3Yn
LCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NF
VFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGlt
ZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJ
TUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBc
CisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tLmMgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW0uYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIwMTYtMDktMjkgMDA6
MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIw
MTYtMTEtMzAgMTA6NTY6MDUuNzkwMzczMDAwICswMDAwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAidm1tX2t0ci5oIgogI2luY2x1ZGUgInZtbV9ob3N0LmgiCiAjaW5jbHVkZSAidm1tX21l
bS5oIgorI2luY2x1ZGUgInZtbV91c2VybWVtLmgiCiAjaW5jbHVkZSAidm1tX3V0aWwuaCIKICNp
bmNsdWRlICJ2YXRwaWMuaCIKICNpbmNsdWRlICJ2YXRwaXQuaCIKQEAgLTE0OCw2ICsxNDksNyBA
QAogCXN0cnVjdCB2YXRwaXQJKnZhdHBpdDsJCS8qIChpKSB2aXJ0dWFsIGF0cGl0ICovCiAJc3Ry
dWN0IHZwbXRtcgkqdnBtdG1yOwkJLyogKGkpIHZpcnR1YWwgQUNQSSBQTSB0aW1lciAqLwogCXN0
cnVjdCB2cnRjCSp2cnRjOwkJCS8qIChvKSB2aXJ0dWFsIFJUQyAqLworCXN0cnVjdCBpb3JlZ2gJ
KmlvcmVnaDsJCS8qICgpIEkvTyByZWcgaGFuZGxlciAqLwogCXZvbGF0aWxlIGNwdXNldF90IGFj
dGl2ZV9jcHVzOwkJLyogKGkpIGFjdGl2ZSB2Y3B1cyAqLwogCWludAkJc3VzcGVuZDsJCS8qIChp
KSBzdG9wIFZNIGV4ZWN1dGlvbiAqLwogCXZvbGF0aWxlIGNwdXNldF90IHN1c3BlbmRlZF9jcHVz
OyAJLyogKGkpIHN1c3BlbmRlZCB2Y3B1cyAqLwpAQCAtNDE5LDYgKzQyMSw3IEBACiAJdm0tPnZw
bXRtciA9IHZwbXRtcl9pbml0KHZtKTsKIAlpZiAoY3JlYXRlKQogCQl2bS0+dnJ0YyA9IHZydGNf
aW5pdCh2bSk7CisJdm0tPmlvcmVnaCA9IGlvcmVnaF9pbml0KHZtKTsKIAogCUNQVV9aRVJPKCZ2
bS0+YWN0aXZlX2NwdXMpOwogCkBAIC00NzUsMTEgKzQ3OCwxMyBAQAogCQl2cnRjX2NsZWFudXAo
dm0tPnZydGMpOwogCWVsc2UKIAkJdnJ0Y19yZXNldCh2bS0+dnJ0Yyk7CisJaW9yZWdoX2NsZWFu
dXAodm0tPmlvcmVnaCk7CiAJdnBtdG1yX2NsZWFudXAodm0tPnZwbXRtcik7CiAJdmF0cGl0X2Ns
ZWFudXAodm0tPnZhdHBpdCk7CiAJdmhwZXRfY2xlYW51cCh2bS0+dmhwZXQpOwogCXZhdHBpY19j
bGVhbnVwKHZtLT52YXRwaWMpOwogCXZpb2FwaWNfY2xlYW51cCh2bS0+dmlvYXBpYyk7CisJdm1t
X3VzZXJtZW1fY2xlYW51cCh2bS0+dm1zcGFjZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY
Q1BVOyBpKyspCiAJCXZjcHVfY2xlYW51cCh2bSwgaSwgZGVzdHJveSk7CkBAIC01NTIsNiArNTU3
LDE4IEBACiAJCXJldHVybiAoMCk7CiB9CiAKKy8qIEhhbmRsZXIgZnVuY3Rpb24gZm9yIFZNX01B
UF9VU0VSX0JVRiBpb2N0bC4gKi8KK2ludAordm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwg
dm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQp
Cit7CisJdm1fb2JqZWN0X3Qgb2JqOworCisJaWYgKChvYmogPSB2bW1fdXNlcm1lbV9hbGxvYyh2
bS0+dm1zcGFjZSwgZ3BhLCBsZW4sIGJ1ZiwgdGQpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01F
TSk7CisKKwlyZXR1cm4gKDApOworfQorCiBpbnQKIHZtX3VubWFwX21taW8oc3RydWN0IHZtICp2
bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCiB7CkBAIC01ODgsNiArNjA1LDkgQEAKIAlp
ZiAocHB0X2lzX21taW8odm0sIGdwYSkpCiAJCXJldHVybiAodHJ1ZSk7CQkJLyogJ2dwYScgaXMg
cGNpIHBhc3N0aHJ1IG1taW8gKi8KIAorCWlmICh1c2VybWVtX21hcHBlZCh2bS0+dm1zcGFjZSwg
Z3BhKSkKKwkJcmV0dXJuICh0cnVlKTsJCQkvKiAnZ3BhJyBpcyB1c2VyLXNwYWNlIGJ1ZmZlciBt
YXBwZWQgKi8KKwogCXJldHVybiAoZmFsc2UpOwogfQogCkBAIC0yNDU3LDYgKzI0NzcsMTIgQEAK
IAlyZXR1cm4gKHZtLT52cnRjKTsKIH0KIAorc3RydWN0IGlvcmVnaCAqCit2bV9pb3JlZ2goc3Ry
dWN0IHZtICp2bSkKK3sKKwlyZXR1cm4gKHZtLT5pb3JlZ2gpOworfQorCiBlbnVtIHZtX3JlZ19u
YW1lCiB2bV9zZWdtZW50X25hbWUoaW50IHNlZykKIHsKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9hbWQ2NC92bW0vdm1tLmMub3JpZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcK
LS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcJMjAx
Ni0xMS0zMCAxMDo1Mjo1Ny4xODA1MjgwMDAgKzAwMDAKQEAgLTAsMCArMSwyNTk4IEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAs
IElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC92bW0vdm1tLmMgMjk2MTAzIDIwMTYtMDItMjYgMTY6
MTg6NDdaIG1hcmNlbCAkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo
IiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbS5jIDI5NjEwMyAyMDE2LTAy
LTI2IDE2OjE4OjQ3WiBtYXJjZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5j
bHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5
cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxv
Yy5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNs
dWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9y
d2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc21wLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZt
L3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS9wbWFw
Lmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+Cisj
aW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5j
bHVkZSA8bWFjaGluZS9wY2IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NtcC5oPgorI2luY2x1ZGUg
PHg4Ni9wc2wuaD4KKyNpbmNsdWRlIDx4ODYvYXBpY3JlZy5oPgorCisjaW5jbHVkZSA8bWFjaGlu
ZS92bW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmg+CisKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCisjaW5j
bHVkZSAidm1tX2t0ci5oIgorI2luY2x1ZGUgInZtbV9ob3N0LmgiCisjaW5jbHVkZSAidm1tX21l
bS5oIgorI2luY2x1ZGUgInZtbV91dGlsLmgiCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk
ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidmhwZXQuaCIKKyNpbmNsdWRlICJ2aW9hcGljLmgiCisj
aW5jbHVkZSAidmxhcGljLmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5o
IgorI2luY2x1ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX2xhcGljLmgiCisKKyNpbmNs
dWRlICJpby9wcHQuaCIKKyNpbmNsdWRlICJpby9pb21tdS5oIgorCitzdHJ1Y3QgdmxhcGljOwor
CisvKgorICogSW5pdGlhbGl6YXRpb246CisgKiAoYSkgYWxsb2NhdGVkIHdoZW4gdmNwdSBpcyBj
cmVhdGVkCisgKiAoaSkgaW5pdGlhbGl6ZWQgd2hlbiB2Y3B1IGlzIGNyZWF0ZWQgYW5kIHdoZW4g
aXQgaXMgcmVpbml0aWFsaXplZAorICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRo
ZSB2Y3B1IGlzIGNyZWF0ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0
cnVjdCB2Y3B1IHsKKwlzdHJ1Y3QgbXR4IAltdHg7CQkvKiAobykgcHJvdGVjdHMgJ3N0YXRlJyBh
bmQgJ2hvc3RjcHUnICovCisJZW51bSB2Y3B1X3N0YXRlCXN0YXRlOwkJLyogKG8pIHZjcHUgc3Rh
dGUgKi8KKwlpbnQJCWhvc3RjcHU7CS8qIChvKSB2Y3B1J3MgaG9zdCBjcHUgKi8KKwlpbnQJCXJl
cWlkbGU7CS8qIChpKSByZXF1ZXN0IHZjcHUgdG8gaWRsZSAqLworCXN0cnVjdCB2bGFwaWMJKnZs
YXBpYzsJLyogKGkpIEFQSUMgZGV2aWNlIG1vZGVsICovCisJZW51bSB4MmFwaWNfc3RhdGUgeDJh
cGljX3N0YXRlOwkvKiAoaSkgQVBJQyBtb2RlICovCisJdWludDY0X3QJZXhpdGludGluZm87CS8q
IChpKSBldmVudHMgcGVuZGluZyBhdCBWTSBleGl0ICovCisJaW50CQlubWlfcGVuZGluZzsJLyog
KGkpIE5NSSBwZW5kaW5nICovCisJaW50CQlleHRpbnRfcGVuZGluZzsJLyogKGkpIElOVFIgcGVu
ZGluZyAqLworCWludAlleGNlcHRpb25fcGVuZGluZzsJLyogKGkpIGV4Y2VwdGlvbiBwZW5kaW5n
ICovCisJaW50CWV4Y192ZWN0b3I7CQkvKiAoeCkgZXhjZXB0aW9uIGNvbGxhdGVyYWwgKi8KKwlp
bnQJZXhjX2VycmNvZGVfdmFsaWQ7CisJdWludDMyX3QgZXhjX2VycmNvZGU7CisJc3RydWN0IHNh
dmVmcHUJKmd1ZXN0ZnB1OwkvKiAoYSxpKSBndWVzdCBmcHUgc3RhdGUgKi8KKwl1aW50NjRfdAln
dWVzdF94Y3IwOwkvKiAoaSkgZ3Vlc3QgJXhjcjAgcmVnaXN0ZXIgKi8KKwl2b2lkCQkqc3RhdHM7
CQkvKiAoYSxpKSBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX2V4aXQJZXhpdGluZm87CS8qICh4
KSBleGl0IHJlYXNvbiBhbmQgY29sbGF0ZXJhbCAqLworCXVpbnQ2NF90CW5leHRyaXA7CS8qICh4
KSBuZXh0IGluc3RydWN0aW9uIHRvIGV4ZWN1dGUgKi8KK307CisKKyNkZWZpbmUJdmNwdV9sb2Nr
X2luaXRpYWxpemVkKHYpIG10eF9pbml0aWFsaXplZCgmKCh2KS0+bXR4KSkKKyNkZWZpbmUJdmNw
dV9sb2NrX2luaXQodikJbXR4X2luaXQoJigodiktPm10eCksICJ2Y3B1IGxvY2siLCAwLCBNVFhf
U1BJTikKKyNkZWZpbmUJdmNwdV9sb2NrKHYpCQltdHhfbG9ja19zcGluKCYoKHYpLT5tdHgpKQor
I2RlZmluZQl2Y3B1X3VubG9jayh2KQkJbXR4X3VubG9ja19zcGluKCYoKHYpLT5tdHgpKQorI2Rl
ZmluZQl2Y3B1X2Fzc2VydF9sb2NrZWQodikJbXR4X2Fzc2VydCgmKCh2KS0+bXR4KSwgTUFfT1dO
RUQpCisKK3N0cnVjdCBtZW1fc2VnIHsKKwlzaXplX3QJbGVuOworCWJvb2wJc3lzbWVtOworCXN0
cnVjdCB2bV9vYmplY3QgKm9iamVjdDsKK307CisjZGVmaW5lCVZNX01BWF9NRU1TRUdTCTMKKwor
c3RydWN0IG1lbV9tYXAgeworCXZtX3BhZGRyX3QJZ3BhOworCXNpemVfdAkJbGVuOworCXZtX29v
ZmZzZXRfdAlzZWdvZmY7CisJaW50CQlzZWdpZDsKKwlpbnQJCXByb3Q7CisJaW50CQlmbGFnczsK
K307CisjZGVmaW5lCVZNX01BWF9NRU1NQVBTCTQKKworLyoKKyAqIEluaXRpYWxpemF0aW9uOgor
ICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRoZSBWTSBpcyBjcmVhdGVkCisgKiAo
aSkgaW5pdGlhbGl6ZWQgd2hlbiBWTSBpcyBjcmVhdGVkIGFuZCB3aGVuIGl0IGlzIHJlaW5pdGlh
bGl6ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0cnVjdCB2bSB7CisJ
dm9pZAkJKmNvb2tpZTsJCS8qIChpKSBjcHUtc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJCSppb21t
dTsJCQkvKiAoeCkgaW9tbXUtc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCB2aHBldAkqdmhwZXQ7
CQkJLyogKGkpIHZpcnR1YWwgSFBFVCAqLworCXN0cnVjdCB2aW9hcGljCSp2aW9hcGljOwkJLyog
KGkpIHZpcnR1YWwgaW9hcGljICovCisJc3RydWN0IHZhdHBpYwkqdmF0cGljOwkJLyogKGkpIHZp
cnR1YWwgYXRwaWMgKi8KKwlzdHJ1Y3QgdmF0cGl0CSp2YXRwaXQ7CQkvKiAoaSkgdmlydHVhbCBh
dHBpdCAqLworCXN0cnVjdCB2cG10bXIJKnZwbXRtcjsJCS8qIChpKSB2aXJ0dWFsIEFDUEkgUE0g
dGltZXIgKi8KKwlzdHJ1Y3QgdnJ0YwkqdnJ0YzsJCQkvKiAobykgdmlydHVhbCBSVEMgKi8KKwl2
b2xhdGlsZSBjcHVzZXRfdCBhY3RpdmVfY3B1czsJCS8qIChpKSBhY3RpdmUgdmNwdXMgKi8KKwlp
bnQJCXN1c3BlbmQ7CQkvKiAoaSkgc3RvcCBWTSBleGVjdXRpb24gKi8KKwl2b2xhdGlsZSBjcHVz
ZXRfdCBzdXNwZW5kZWRfY3B1czsgCS8qIChpKSBzdXNwZW5kZWQgdmNwdXMgKi8KKwl2b2xhdGls
ZSBjcHVzZXRfdCBoYWx0ZWRfY3B1czsJCS8qICh4KSBjcHVzIGluIGEgaGFyZCBoYWx0ICovCisJ
Y3B1c2V0X3QJcmVuZGV6dm91c19yZXFfY3B1czsJLyogKHgpIHJlbmRlenZvdXMgcmVxdWVzdGVk
ICovCisJY3B1c2V0X3QJcmVuZGV6dm91c19kb25lX2NwdXM7CS8qICh4KSByZW5kZXp2b3VzIGZp
bmlzaGVkICovCisJdm9pZAkJKnJlbmRlenZvdXNfYXJnOwkvKiAoeCkgcmVuZGV6dm91cyBmdW5j
L2FyZyAqLworCXZtX3JlbmRlenZvdXNfZnVuY190IHJlbmRlenZvdXNfZnVuYzsKKwlzdHJ1Y3Qg
bXR4CXJlbmRlenZvdXNfbXR4OwkJLyogKG8pIHJlbmRlenZvdXMgbG9jayAqLworCXN0cnVjdCBt
ZW1fbWFwCW1lbV9tYXBzW1ZNX01BWF9NRU1NQVBTXTsgLyogKGkpIGd1ZXN0IGFkZHJlc3Mgc3Bh
Y2UgKi8KKwlzdHJ1Y3QgbWVtX3NlZwltZW1fc2Vnc1tWTV9NQVhfTUVNU0VHU107IC8qIChvKSBn
dWVzdCBtZW1vcnkgcmVnaW9ucyAqLworCXN0cnVjdCB2bXNwYWNlCSp2bXNwYWNlOwkJLyogKG8p
IGd1ZXN0J3MgYWRkcmVzcyBzcGFjZSAqLworCWNoYXIJCW5hbWVbVk1fTUFYX05BTUVMRU5dOwkv
KiAobykgdmlydHVhbCBtYWNoaW5lIG5hbWUgKi8KKwlzdHJ1Y3QgdmNwdQl2Y3B1W1ZNX01BWENQ
VV07CS8qIChpKSBndWVzdCB2Y3B1cyAqLworfTsKKworc3RhdGljIGludCB2bW1faW5pdGlhbGl6
ZWQ7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1tX29wcyAqb3BzOworI2RlZmluZQlWTU1fSU5JVChudW0p
CShvcHMgIT0gTlVMTCA/ICgqb3BzLT5pbml0KShudW0pIDogMCkKKyNkZWZpbmUJVk1NX0NMRUFO
VVAoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+Y2xlYW51cCkoKSA6IDApCisjZGVmaW5lCVZNTV9S
RVNVTUUoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+cmVzdW1lKSgpIDogMCkKKworI2RlZmluZQlW
TUlOSVQodm0sIHBtYXApIChvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWluaXQpKHZtLCBwbWFwKTog
TlVMTCkKKyNkZWZpbmUJVk1SVU4odm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykgXAorCShv
cHMgIT0gTlVMTCA/ICgqb3BzLT52bXJ1bikodm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykg
OiBFTlhJTykKKyNkZWZpbmUJVk1DTEVBTlVQKHZtaSkJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZt
Y2xlYW51cCkodm1pKSA6IE5VTEwpCisjZGVmaW5lCVZNU1BBQ0VfQUxMT0MobWluLCBtYXgpIFwK
Kwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zcGFjZV9hbGxvYykobWluLCBtYXgpIDogTlVMTCkK
KyNkZWZpbmUJVk1TUEFDRV9GUkVFKHZtc3BhY2UpIFwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+
dm1zcGFjZV9mcmVlKSh2bXNwYWNlKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVFJFRyh2bWksIHZj
cHUsIG51bSwgcmV0dmFsKQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWdldHJlZykodm1p
LCB2Y3B1LCBudW0sIHJldHZhbCkgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRSRUcodm1pLCB2Y3B1
LCBudW0sIHZhbCkJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zZXRyZWcpKHZtaSwgdmNw
dSwgbnVtLCB2YWwpIDogRU5YSU8pCisjZGVmaW5lCVZNR0VUREVTQyh2bWksIHZjcHUsIG51bSwg
ZGVzYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1nZXRkZXNjKSh2bWksIHZjcHUsIG51
bSwgZGVzYykgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRERVNDKHZtaSwgdmNwdSwgbnVtLCBkZXNj
KQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGRlc2MpKHZtaSwgdmNwdSwgbnVtLCBk
ZXNjKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVENBUCh2bWksIHZjcHUsIG51bSwgcmV0dmFsKQlc
CisJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZtZ2V0Y2FwKSh2bWksIHZjcHUsIG51bSwgcmV0dmFs
KSA6IEVOWElPKQorI2RlZmluZQlWTVNFVENBUCh2bWksIHZjcHUsIG51bSwgdmFsKQkJXAorCShv
cHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGNhcCkodm1pLCB2Y3B1LCBudW0sIHZhbCkgOiBFTlhJ
TykKKyNkZWZpbmUJVkxBUElDX0lOSVQodm1pLCB2Y3B1KQkJCVwKKwkob3BzICE9IE5VTEwgPyAo
Km9wcy0+dmxhcGljX2luaXQpKHZtaSwgdmNwdSkgOiBOVUxMKQorI2RlZmluZQlWTEFQSUNfQ0xF
QU5VUCh2bWksIHZsYXBpYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dmxhcGljX2NsZWFu
dXApKHZtaSwgdmxhcGljKSA6IE5VTEwpCisKKyNkZWZpbmUJZnB1X3N0YXJ0X2VtdWxhdGluZygp
CWxvYWRfY3IwKHJjcjAoKSB8IENSMF9UUykKKyNkZWZpbmUJZnB1X3N0b3BfZW11bGF0aW5nKCkJ
Y2x0cygpCisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk0sICJ2bSIsICJ2bSIpOworCisvKiBz
dGF0aXN0aWNzICovCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9UT1RBTF9SVU5USU1FLCAidmNwdSB0
b3RhbCBydW50aW1lIik7CisKK1NZU0NUTF9OT0RFKF9odywgT0lEX0FVVE8sIHZtbSwgQ1RMRkxB
R19SVywgTlVMTCwgTlVMTCk7CisKKy8qCisgKiBIYWx0IHRoZSBndWVzdCBpZiBhbGwgdmNwdXMg
YXJlIGV4ZWN1dGluZyBhIEhMVCBpbnN0cnVjdGlvbiB3aXRoCisgKiBpbnRlcnJ1cHRzIGRpc2Fi
bGVkLgorICovCitzdGF0aWMgaW50IGhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQgPSAxOworU1lTQ1RM
X0lOVChfaHdfdm1tLCBPSURfQVVUTywgaGFsdF9kZXRlY3Rpb24sIENUTEZMQUdfUkRUVU4sCisg
ICAgJmhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQsIDAsCisgICAgIkhhbHQgVk0gaWYgYWxsIHZjcHVz
IGV4ZWN1dGUgSExUIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCIpOworCitzdGF0aWMgaW50IHZt
bV9pcGludW07CitTWVNDVExfSU5UKF9od192bW0sIE9JRF9BVVRPLCBpcGludW0sIENUTEZMQUdf
UkQsICZ2bW1faXBpbnVtLCAwLAorICAgICJJUEkgdmVjdG9yIHVzZWQgZm9yIHZjcHUgbm90aWZp
Y2F0aW9ucyIpOworCitzdGF0aWMgaW50IHRyYWNlX2d1ZXN0X2V4Y2VwdGlvbnM7CitTWVNDVExf
SU5UKF9od192bW0sIE9JRF9BVVRPLCB0cmFjZV9ndWVzdF9leGNlcHRpb25zLCBDVExGTEFHX1JE
VFVOLAorICAgICZ0cmFjZV9ndWVzdF9leGNlcHRpb25zLCAwLAorICAgICJUcmFwIGludG8gaHlw
ZXJ2aXNvciBvbiBhbGwgZ3Vlc3QgZXhjZXB0aW9ucyBhbmQgcmVmbGVjdCB0aGVtIGJhY2siKTsK
Kworc3RhdGljIGludCB2bW1fZm9yY2VfaW9tbXUgPSAwOworVFVOQUJMRV9JTlQoImh3LnZtbS5m
b3JjZV9pb21tdSIsICZ2bW1fZm9yY2VfaW9tbXUpOworU1lTQ1RMX0lOVChfaHdfdm1tLCBPSURf
QVVUTywgZm9yY2VfaW9tbXUsIENUTEZMQUdfUkRUVU4sICZ2bW1fZm9yY2VfaW9tbXUsIDAsCisg
ICAgIkZvcmNlIHVzZSBvZiBJL08gTU1VIGV2ZW4gaWYgbm8gcGFzc3Rocm91Z2ggZGV2aWNlcyB3
ZXJlIGZvdW5kLiIpOworCitzdGF0aWMgdm9pZCB2bV9mcmVlX21lbW1hcChzdHJ1Y3Qgdm0gKnZt
LCBpbnQgaWRlbnQpOworc3RhdGljIGJvb2wgc3lzbWVtX21hcHBpbmcoc3RydWN0IHZtICp2bSwg
c3RydWN0IG1lbV9tYXAgKm1tKTsKK3N0YXRpYyB2b2lkIHZjcHVfbm90aWZ5X2V2ZW50X2xvY2tl
ZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRyKTsKKworI2lmZGVmIEtUUgorc3Rh
dGljIGNvbnN0IGNoYXIgKgordmNwdV9zdGF0ZTJzdHIoZW51bSB2Y3B1X3N0YXRlIHN0YXRlKQor
eworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVkNQVV9JRExFOgorCQlyZXR1cm4gKCJpZGxl
Iik7CisJY2FzZSBWQ1BVX0ZST1pFTjoKKwkJcmV0dXJuICgiZnJvemVuIik7CisJY2FzZSBWQ1BV
X1JVTk5JTkc6CisJCXJldHVybiAoInJ1bm5pbmciKTsKKwljYXNlIFZDUFVfU0xFRVBJTkc6CisJ
CXJldHVybiAoInNsZWVwaW5nIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgidW5rbm93biIpOwor
CX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordmNwdV9jbGVhbnVwKHN0cnVjdCB2bSAqdm0s
IGludCBpLCBib29sIGRlc3Ryb3kpCit7CisJc3RydWN0IHZjcHUgKnZjcHUgPSAmdm0tPnZjcHVb
aV07CisKKwlWTEFQSUNfQ0xFQU5VUCh2bS0+Y29va2llLCB2Y3B1LT52bGFwaWMpOworCWlmIChk
ZXN0cm95KSB7CisJCXZtbV9zdGF0X2ZyZWUodmNwdS0+c3RhdHMpOwkKKwkJZnB1X3NhdmVfYXJl
YV9mcmVlKHZjcHUtPmd1ZXN0ZnB1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X2luaXQo
c3RydWN0IHZtICp2bSwgaW50IHZjcHVfaWQsIGJvb2wgY3JlYXRlKQoreworCXN0cnVjdCB2Y3B1
ICp2Y3B1OworCisJS0FTU0VSVCh2Y3B1X2lkID49IDAgJiYgdmNwdV9pZCA8IFZNX01BWENQVSwK
KwkgICAgKCJ2Y3B1X2luaXQ6IGludmFsaWQgdmNwdSAlZCIsIHZjcHVfaWQpKTsKKwkgIAorCXZj
cHUgPSAmdm0tPnZjcHVbdmNwdV9pZF07CisKKwlpZiAoY3JlYXRlKSB7CisJCUtBU1NFUlQoIXZj
cHVfbG9ja19pbml0aWFsaXplZCh2Y3B1KSwgKCJ2Y3B1ICVkIGFscmVhZHkgIgorCQkgICAgImlu
aXRpYWxpemVkIiwgdmNwdV9pZCkpOworCQl2Y3B1X2xvY2tfaW5pdCh2Y3B1KTsKKwkJdmNwdS0+
c3RhdGUgPSBWQ1BVX0lETEU7CisJCXZjcHUtPmhvc3RjcHUgPSBOT0NQVTsKKwkJdmNwdS0+Z3Vl
c3RmcHUgPSBmcHVfc2F2ZV9hcmVhX2FsbG9jKCk7CisJCXZjcHUtPnN0YXRzID0gdm1tX3N0YXRf
YWxsb2MoKTsKKwl9CisKKwl2Y3B1LT52bGFwaWMgPSBWTEFQSUNfSU5JVCh2bS0+Y29va2llLCB2
Y3B1X2lkKTsKKwl2bV9zZXRfeDJhcGljX3N0YXRlKHZtLCB2Y3B1X2lkLCBYMkFQSUNfRElTQUJM
RUQpOworCXZjcHUtPnJlcWlkbGUgPSAwOworCXZjcHUtPmV4aXRpbnRpbmZvID0gMDsKKwl2Y3B1
LT5ubWlfcGVuZGluZyA9IDA7CisJdmNwdS0+ZXh0aW50X3BlbmRpbmcgPSAwOworCXZjcHUtPmV4
Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwl2Y3B1LT5ndWVzdF94Y3IwID0gWEZFQVRVUkVfRU5BQkxF
RF9YODc7CisJZnB1X3NhdmVfYXJlYV9yZXNldCh2Y3B1LT5ndWVzdGZwdSk7CisJdm1tX3N0YXRf
aW5pdCh2Y3B1LT5zdGF0cyk7Cit9CisKK2ludAordmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisKKwlyZXR1cm4gKHRyYWNlX2d1ZXN0X2V4Y2VwdGlv
bnMpOworfQorCitzdHJ1Y3Qgdm1fZXhpdCAqCit2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBp
bnQgY3B1aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAoY3B1aWQgPCAwIHx8IGNw
dWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2V4aXRpbmZvOiBpbnZhbGlkIGNwdWlkICVk
IiwgY3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVtjcHVpZF07CisKKwlyZXR1cm4gKCZ2Y3B1
LT5leGl0aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1fcmVzdW1lKHZvaWQpCit7CisJVk1N
X1JFU1VNRSgpOworfQorCitzdGF0aWMgaW50Cit2bW1faW5pdCh2b2lkKQoreworCWludCBlcnJv
cjsKKworCXZtbV9ob3N0X3N0YXRlX2luaXQoKTsKKworCXZtbV9pcGludW0gPSBsYXBpY19pcGlf
YWxsb2MoJklEVFZFQyhqdXN0cmV0dXJuKSk7CisJaWYgKHZtbV9pcGludW0gPCAwKQorCQl2bW1f
aXBpbnVtID0gSVBJX0FTVDsKKworCWVycm9yID0gdm1tX21lbV9pbml0KCk7CisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKGVycm9yKTsKKwkKKwlpZiAodm1tX2lzX2ludGVsKCkpCisJCW9wcyA9ICZ2
bW1fb3BzX2ludGVsOworCWVsc2UgaWYgKHZtbV9pc19hbWQoKSkKKwkJb3BzID0gJnZtbV9vcHNf
YW1kOworCWVsc2UKKwkJcmV0dXJuIChFTlhJTyk7CisKKwl2bW1fcmVzdW1lX3AgPSB2bW1fcmVz
dW1lOworCisJcmV0dXJuIChWTU1fSU5JVCh2bW1faXBpbnVtKSk7Cit9CisKK3N0YXRpYyBpbnQK
K3ZtbV9oYW5kbGVyKG1vZHVsZV90IG1vZCwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlpbnQg
ZXJyb3I7CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1PRF9MT0FEOgorCQl2bW1kZXZfaW5p
dCgpOworCQlpZiAodm1tX2ZvcmNlX2lvbW11IHx8IHBwdF9hdmFpbF9kZXZpY2VzKCkgPiAwKQor
CQkJaW9tbXVfaW5pdCgpOworCQllcnJvciA9IHZtbV9pbml0KCk7CisJCWlmIChlcnJvciA9PSAw
KQorCQkJdm1tX2luaXRpYWxpemVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNT0RfVU5MT0FEOgor
CQllcnJvciA9IHZtbWRldl9jbGVhbnVwKCk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQl2bW1f
cmVzdW1lX3AgPSBOVUxMOworCQkJaW9tbXVfY2xlYW51cCgpOworCQkJaWYgKHZtbV9pcGludW0g
IT0gSVBJX0FTVCkKKwkJCQlsYXBpY19pcGlfZnJlZSh2bW1faXBpbnVtKTsKKwkJCWVycm9yID0g
Vk1NX0NMRUFOVVAoKTsKKwkJCS8qCisJCQkgKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIC0gcHJl
dmVudCBuZXcKKwkJCSAqIFZNcyBmcm9tIGJlaW5nIGNyZWF0ZWQKKwkJCSAqLworCQkJaWYgKGVy
cm9yKQorCQkJCXZtbV9pbml0aWFsaXplZCA9IDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRp
YyBtb2R1bGVkYXRhX3Qgdm1tX2ttb2QgPSB7CisJInZtbSIsCisJdm1tX2hhbmRsZXIsCisJTlVM
TAorfTsKKworLyoKKyAqIHZtbSBpbml0aWFsaXphdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBkZXBl
bmRlbmNpZXM6CisgKgorICogLSBpb21tdSBpbml0aWFsaXphdGlvbiBtdXN0IGhhcHBlbiBhZnRl
ciB0aGUgcGNpIHBhc3N0aHJ1IGRyaXZlciBoYXMgaGFkCisgKiAgIGEgY2hhbmNlIHRvIGF0dGFj
aCB0byBhbnkgcGFzc3RocnUgZGV2aWNlcyAoYWZ0ZXIgU0lfU1VCX0NPTkZJR1VSRSkuCisgKgor
ICogLSBWVC14IGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIHNtcF9yZW5kZXp2b3VzKCkgYW5kIHRo
ZXJlZm9yZSBtdXN0IGhhcHBlbgorICogICBhZnRlciBTTVAgaXMgZnVsbHkgZnVuY3Rpb25hbCAo
YWZ0ZXIgU0lfU1VCX1NNUCkuCisgKi8KK0RFQ0xBUkVfTU9EVUxFKHZtbSwgdm1tX2ttb2QsIFNJ
X1NVQl9TTVAgKyAxLCBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odm1tLCAxKTsKKwor
c3RhdGljIHZvaWQKK3ZtX2luaXQoc3RydWN0IHZtICp2bSwgYm9vbCBjcmVhdGUpCit7CisJaW50
IGk7CisKKwl2bS0+Y29va2llID0gVk1JTklUKHZtLCB2bXNwYWNlX3BtYXAodm0tPnZtc3BhY2Up
KTsKKwl2bS0+aW9tbXUgPSBOVUxMOworCXZtLT52aW9hcGljID0gdmlvYXBpY19pbml0KHZtKTsK
Kwl2bS0+dmhwZXQgPSB2aHBldF9pbml0KHZtKTsKKwl2bS0+dmF0cGljID0gdmF0cGljX2luaXQo
dm0pOworCXZtLT52YXRwaXQgPSB2YXRwaXRfaW5pdCh2bSk7CisJdm0tPnZwbXRtciA9IHZwbXRt
cl9pbml0KHZtKTsKKwlpZiAoY3JlYXRlKQorCQl2bS0+dnJ0YyA9IHZydGNfaW5pdCh2bSk7CisK
KwlDUFVfWkVSTygmdm0tPmFjdGl2ZV9jcHVzKTsKKworCXZtLT5zdXNwZW5kID0gMDsKKwlDUFVf
WkVSTygmdm0tPnN1c3BlbmRlZF9jcHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhDUFU7
IGkrKykKKwkJdmNwdV9pbml0KHZtLCBpLCBjcmVhdGUpOworfQorCitpbnQKK3ZtX2NyZWF0ZShj
b25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSkKK3sKKwlzdHJ1Y3Qgdm0gKnZtOwor
CXN0cnVjdCB2bXNwYWNlICp2bXNwYWNlOworCisJLyoKKwkgKiBJZiB2bW0ua28gY291bGQgbm90
IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB0aGVuIGRvbid0IGF0dGVtcHQKKwkgKiB0byBj
cmVhdGUgdGhlIHZpcnR1YWwgbWFjaGluZS4KKwkgKi8KKwlpZiAoIXZtbV9pbml0aWFsaXplZCkK
KwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAobmFtZSA9PSBOVUxMIHx8IHN0cmxlbihuYW1lKSA+
PSBWTV9NQVhfTkFNRUxFTikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJdm1zcGFjZSA9IFZNU1BB
Q0VfQUxMT0MoMCwgVk1fTUFYVVNFUl9BRERSRVNTKTsKKwlpZiAodm1zcGFjZSA9PSBOVUxMKQor
CQlyZXR1cm4gKEVOT01FTSk7CisKKwl2bSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHZtKSwgTV9W
TSwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN0cmNweSh2bS0+bmFtZSwgbmFtZSk7CisJdm0tPnZt
c3BhY2UgPSB2bXNwYWNlOworCW10eF9pbml0KCZ2bS0+cmVuZGV6dm91c19tdHgsICJ2bSByZW5k
ZXp2b3VzIGxvY2siLCAwLCBNVFhfREVGKTsKKworCXZtX2luaXQodm0sIHRydWUpOworCisJKnJl
dHZtID0gdm07CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3ZtX2NsZWFudXAoc3Ry
dWN0IHZtICp2bSwgYm9vbCBkZXN0cm95KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwlpbnQg
aTsKKworCXBwdF91bmFzc2lnbl9hbGwodm0pOworCisJaWYgKHZtLT5pb21tdSAhPSBOVUxMKQor
CQlpb21tdV9kZXN0cm95X2RvbWFpbih2bS0+aW9tbXUpOworCisJaWYgKGRlc3Ryb3kpCisJCXZy
dGNfY2xlYW51cCh2bS0+dnJ0Yyk7CisJZWxzZQorCQl2cnRjX3Jlc2V0KHZtLT52cnRjKTsKKwl2
cG10bXJfY2xlYW51cCh2bS0+dnBtdG1yKTsKKwl2YXRwaXRfY2xlYW51cCh2bS0+dmF0cGl0KTsK
Kwl2aHBldF9jbGVhbnVwKHZtLT52aHBldCk7CisJdmF0cGljX2NsZWFudXAodm0tPnZhdHBpYyk7
CisJdmlvYXBpY19jbGVhbnVwKHZtLT52aW9hcGljKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9N
QVhDUFU7IGkrKykKKwkJdmNwdV9jbGVhbnVwKHZtLCBpLCBkZXN0cm95KTsKKworCVZNQ0xFQU5V
UCh2bS0+Y29va2llKTsKKworCS8qCisJICogU3lzdGVtIG1lbW9yeSBpcyByZW1vdmVkIGZyb20g
dGhlIGd1ZXN0IGFkZHJlc3Mgc3BhY2Ugb25seSB3aGVuCisJICogdGhlIFZNIGlzIGRlc3Ryb3ll
ZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtYXBwaW5nIHJlbWFpbnMgdGhlIHNhbWUKKwkgKiBhY3Jv
c3MgVk0gcmVzZXQuCisJICoKKwkgKiBEZXZpY2UgbWVtb3J5IGNhbiBiZSByZWxvY2F0ZWQgYnkg
dGhlIGd1ZXN0IChlLmcuIHVzaW5nIFBDSSBCQVJzKQorCSAqIHNvIHRob3NlIG1hcHBpbmdzIGFy
ZSByZW1vdmVkIG9uIGEgVk0gcmVzZXQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFZNX01BWF9N
RU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ldOworCQlpZiAoZGVzdHJveSB8
fCAhc3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCXZtX2ZyZWVfbWVtbWFwKHZtLCBpKTsKKwl9
CisKKwlpZiAoZGVzdHJveSkgeworCQlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTVNFR1M7IGkr
KykKKwkJCXZtX2ZyZWVfbWVtc2VnKHZtLCBpKTsKKworCQlWTVNQQUNFX0ZSRUUodm0tPnZtc3Bh
Y2UpOworCQl2bS0+dm1zcGFjZSA9IE5VTEw7CisJfQorfQorCit2b2lkCit2bV9kZXN0cm95KHN0
cnVjdCB2bSAqdm0pCit7CisJdm1fY2xlYW51cCh2bSwgdHJ1ZSk7CisJZnJlZSh2bSwgTV9WTSk7
Cit9CisKK2ludAordm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pCit7CisJaW50IGVycm9yOworCisJ
LyoKKwkgKiBBIHZpcnR1YWwgbWFjaGluZSBjYW4gYmUgcmVzZXQgb25seSBpZiBhbGwgdmNwdXMg
YXJlIHN1c3BlbmRlZC4KKwkgKi8KKwlpZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAm
dm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7CisJCXZtX2NsZWFudXAodm0sIGZhbHNlKTsKKwkJdm1f
aW5pdCh2bSwgZmFsc2UpOworCQllcnJvciA9IDA7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBFQlVT
WTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworY29uc3QgY2hhciAqCit2bV9uYW1lKHN0
cnVjdCB2bSAqdm0pCit7CisJcmV0dXJuICh2bS0+bmFtZSk7Cit9CisKK2ludAordm1fbWFwX21t
aW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3Qg
aHBhKQoreworCXZtX29iamVjdF90IG9iajsKKworCWlmICgob2JqID0gdm1tX21taW9fYWxsb2Mo
dm0tPnZtc3BhY2UsIGdwYSwgbGVuLCBocGEpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7
CisJZWxzZQorCQlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3VubWFwX21taW8oc3RydWN0IHZt
ICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisKKwl2bW1fbW1pb19mcmVlKHZt
LT52bXNwYWNlLCBncGEsIGxlbik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybiAn
dHJ1ZScgaWYgJ2dwYScgaXMgYWxsb2NhdGVkIGluIHRoZSBndWVzdCBhZGRyZXNzIHNwYWNlLgor
ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgcnVubmlu
ZyB2Y3B1IHdoaWNoIGFjdHMgYXMKKyAqIGFuIGltcGxpY2l0IGxvY2sgb24gJ3ZtLT5tZW1fbWFw
c1tdJy4KKyAqLworYm9vbAordm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB2bV9wYWRkcl90IGdwYSkKK3sKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJaW50IGk7CisK
KyNpZmRlZiBJTlZBUklBTlRTCisJaW50IGhvc3RjcHUsIHN0YXRlOworCXN0YXRlID0gdmNwdV9n
ZXRfc3RhdGUodm0sIHZjcHVpZCwgJmhvc3RjcHUpOworCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9S
VU5OSU5HICYmIGhvc3RjcHUgPT0gY3VyY3B1LAorCSAgICAoIiVzOiBpbnZhbGlkIHZjcHUgc3Rh
dGUgJWQvJWQiLCBfX2Z1bmNfXywgc3RhdGUsIGhvc3RjcHUpKTsKKyNlbmRpZgorCisJZm9yIChp
ID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ld
OworCQlpZiAobW0tPmxlbiAhPSAwICYmIGdwYSA+PSBtbS0+Z3BhICYmIGdwYSA8IG1tLT5ncGEg
KyBtbS0+bGVuKQorCQkJcmV0dXJuICh0cnVlKTsJCS8qICdncGEnIGlzIHN5c21lbSBvciBkZXZt
ZW0gKi8KKwl9CisKKwlpZiAocHB0X2lzX21taW8odm0sIGdwYSkpCisJCXJldHVybiAodHJ1ZSk7
CQkJLyogJ2dwYScgaXMgcGNpIHBhc3N0aHJ1IG1taW8gKi8KKworCXJldHVybiAoZmFsc2UpOwor
fQorCitpbnQKK3ZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf
dCBsZW4sIGJvb2wgc3lzbWVtKQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisJdm1fb2JqZWN0
X3Qgb2JqOworCisJaWYgKGlkZW50IDwgMCB8fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJ
cmV0dXJuIChFSU5WQUwpOworCisJaWYgKGxlbiA9PSAwIHx8IChsZW4gJiBQQUdFX01BU0spKQor
CQlyZXR1cm4gKEVJTlZBTCk7CisKKwlzZWcgPSAmdm0tPm1lbV9zZWdzW2lkZW50XTsKKwlpZiAo
c2VnLT5vYmplY3QgIT0gTlVMTCkgeworCQlpZiAoc2VnLT5sZW4gPT0gbGVuICYmIHNlZy0+c3lz
bWVtID09IHN5c21lbSkKKwkJCXJldHVybiAoRUVYSVNUKTsKKwkJZWxzZQorCQkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCW9iaiA9IHZtX29iamVjdF9hbGxvY2F0ZShPQkpUX0RFRkFVTFQsIGxl
biA+PiBQQUdFX1NISUZUKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK
KworCXNlZy0+bGVuID0gbGVuOworCXNlZy0+b2JqZWN0ID0gb2JqOworCXNlZy0+c3lzbWVtID0g
c3lzbWVtOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fZ2V0X21lbXNlZyhzdHJ1Y3Qgdm0g
KnZtLCBpbnQgaWRlbnQsIHNpemVfdCAqbGVuLCBib29sICpzeXNtZW0sCisgICAgdm1fb2JqZWN0
X3QgKm9ianB0cikKK3sKKwlzdHJ1Y3QgbWVtX3NlZyAqc2VnOworCisJaWYgKGlkZW50IDwgMCB8
fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0g
JnZtLT5tZW1fc2Vnc1tpZGVudF07CisJaWYgKGxlbikKKwkJKmxlbiA9IHNlZy0+bGVuOworCWlm
IChzeXNtZW0pCisJCSpzeXNtZW0gPSBzZWctPnN5c21lbTsKKwlpZiAob2JqcHRyKQorCQkqb2Jq
cHRyID0gc2VnLT5vYmplY3Q7CisJcmV0dXJuICgwKTsKK30KKwordm9pZAordm1fZnJlZV9tZW1z
ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50KQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisK
KwlLQVNTRVJUKGlkZW50ID49IDAgJiYgaWRlbnQgPCBWTV9NQVhfTUVNU0VHUywKKwkgICAgKCIl
czogaW52YWxpZCBtZW1zZWcgaWRlbnQgJWQiLCBfX2Z1bmNfXywgaWRlbnQpKTsKKworCXNlZyA9
ICZ2bS0+bWVtX3NlZ3NbaWRlbnRdOworCWlmIChzZWctPm9iamVjdCAhPSBOVUxMKSB7CisJCXZt
X29iamVjdF9kZWFsbG9jYXRlKHNlZy0+b2JqZWN0KTsKKwkJYnplcm8oc2VnLCBzaXplb2Yoc3Ry
dWN0IG1lbV9zZWcpKTsKKwl9Cit9CisKK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2
bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdpZCwgdm1fb29mZnNldF90IGZpcnN0LAorICAgIHNp
emVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG1lbV9zZWcgKnNlZzsK
KwlzdHJ1Y3QgbWVtX21hcCAqbSwgKm1hcDsKKwl2bV9vb2Zmc2V0X3QgbGFzdDsKKwlpbnQgaSwg
ZXJyb3I7CisKKwlpZiAocHJvdCA9PSAwIHx8IChwcm90ICYgfihWTV9QUk9UX0FMTCkpICE9IDAp
CisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmIChmbGFncyAmIH5WTV9NRU1NQVBfRl9XSVJFRCkK
KwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKHNlZ2lkIDwgMCB8fCBzZWdpZCA+PSBWTV9NQVhf
TUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0gJnZtLT5tZW1fc2Vnc1tzZWdp
ZF07CisJaWYgKHNlZy0+b2JqZWN0ID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWxh
c3QgPSBmaXJzdCArIGxlbjsKKwlpZiAoZmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QgfHwgbGFz
dCA+IHNlZy0+bGVuKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoKGdwYSB8IGZpcnN0IHwg
bGFzdCkgJiBQQUdFX01BU0spCisJCXJldHVybiAoRUlOVkFMKTsKKworCW1hcCA9IE5VTEw7CisJ
Zm9yIChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbSA9ICZ2bS0+bWVtX21h
cHNbaV07CisJCWlmIChtLT5sZW4gPT0gMCkgeworCQkJbWFwID0gbTsKKwkJCWJyZWFrOworCQl9
CisJfQorCisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT1NQQyk7CisKKwllcnJvciA9
IHZtX21hcF9maW5kKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBzZWctPm9iamVjdCwgZmlyc3QsICZn
cGEsCisJICAgIGxlbiwgMCwgVk1GU19OT19TUEFDRSwgcHJvdCwgcHJvdCwgMCk7CisJaWYgKGVy
cm9yICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworCisJdm1fb2JqZWN0X3Jl
ZmVyZW5jZShzZWctPm9iamVjdCk7CisKKwlpZiAoZmxhZ3MgJiBWTV9NRU1NQVBfRl9XSVJFRCkg
eworCQllcnJvciA9IHZtX21hcF93aXJlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBncGEsIGdwYSAr
IGxlbiwKKwkJICAgIFZNX01BUF9XSVJFX1VTRVIgfCBWTV9NQVBfV0lSRV9OT0hPTEVTKTsKKwkJ
aWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fbWFwX3JlbW92ZSgmdm0tPnZtc3Bh
Y2UtPnZtX21hcCwgZ3BhLCBncGEgKyBsZW4pOworCQkJcmV0dXJuIChFRkFVTFQpOworCQl9CisJ
fQorCisJbWFwLT5ncGEgPSBncGE7CisJbWFwLT5sZW4gPSBsZW47CisJbWFwLT5zZWdvZmYgPSBm
aXJzdDsKKwltYXAtPnNlZ2lkID0gc2VnaWQ7CisJbWFwLT5wcm90ID0gcHJvdDsKKwltYXAtPmZs
YWdzID0gZmxhZ3M7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9tbWFwX2dldG5leHQoc3Ry
dWN0IHZtICp2bSwgdm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRf
dCAqc2Vnb2ZmLCBzaXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKQoreworCXN0cnVj
dCBtZW1fbWFwICptbSwgKm1tbmV4dDsKKwlpbnQgaTsKKworCW1tbmV4dCA9IE5VTEw7CisJZm9y
IChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBz
W2ldOworCQlpZiAobW0tPmxlbiA9PSAwIHx8IG1tLT5ncGEgPCAqZ3BhKQorCQkJY29udGludWU7
CisJCWlmIChtbW5leHQgPT0gTlVMTCB8fCBtbS0+Z3BhIDwgbW1uZXh0LT5ncGEpCisJCQltbW5l
eHQgPSBtbTsKKwl9CisKKwlpZiAobW1uZXh0ICE9IE5VTEwpIHsKKwkJKmdwYSA9IG1tbmV4dC0+
Z3BhOworCQlpZiAoc2VnaWQpCisJCQkqc2VnaWQgPSBtbW5leHQtPnNlZ2lkOworCQlpZiAoc2Vn
b2ZmKQorCQkJKnNlZ29mZiA9IG1tbmV4dC0+c2Vnb2ZmOworCQlpZiAobGVuKQorCQkJKmxlbiA9
IG1tbmV4dC0+bGVuOworCQlpZiAocHJvdCkKKwkJCSpwcm90ID0gbW1uZXh0LT5wcm90OworCQlp
ZiAoZmxhZ3MpCisJCQkqZmxhZ3MgPSBtbW5leHQtPmZsYWdzOworCQlyZXR1cm4gKDApOworCX0g
ZWxzZSB7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2bV9mcmVl
X21lbW1hcChzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpCit7CisJc3RydWN0IG1lbV9tYXAgKm1t
OworCWludCBlcnJvcjsKKworCW1tID0gJnZtLT5tZW1fbWFwc1tpZGVudF07CisJaWYgKG1tLT5s
ZW4pIHsKKwkJZXJyb3IgPSB2bV9tYXBfcmVtb3ZlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBtbS0+
Z3BhLAorCQkgICAgbW0tPmdwYSArIG1tLT5sZW4pOworCQlLQVNTRVJUKGVycm9yID09IEtFUk5f
U1VDQ0VTUywgKCIlczogdm1fbWFwX3JlbW92ZSBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywg
ZXJyb3IpKTsKKwkJYnplcm8obW0sIHNpemVvZihzdHJ1Y3QgbWVtX21hcCkpOworCX0KK30KKwor
c3RhdGljIF9faW5saW5lIGJvb2wKK3N5c21lbV9tYXBwaW5nKHN0cnVjdCB2bSAqdm0sIHN0cnVj
dCBtZW1fbWFwICptbSkKK3sKKworCWlmIChtbS0+bGVuICE9IDAgJiYgdm0tPm1lbV9zZWdzW21t
LT5zZWdpZF0uc3lzbWVtKQorCQlyZXR1cm4gKHRydWUpOworCWVsc2UKKwkJcmV0dXJuIChmYWxz
ZSk7Cit9CisKK3N0YXRpYyB2bV9wYWRkcl90CitzeXNtZW1fbWF4YWRkcihzdHJ1Y3Qgdm0gKnZt
KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwl2bV9wYWRkcl90IG1heGFkZHI7CisJaW50IGk7
CisKKwltYXhhZGRyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTU1BUFM7IGkrKykg
eworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmIChzeXNtZW1fbWFwcGluZyh2bSwgbW0p
KSB7CisJCQlpZiAobWF4YWRkciA8IG1tLT5ncGEgKyBtbS0+bGVuKQorCQkJCW1heGFkZHIgPSBt
bS0+Z3BhICsgbW0tPmxlbjsKKwkJfQorCX0KKwlyZXR1cm4gKG1heGFkZHIpOworfQorCitzdGF0
aWMgdm9pZAordm1faW9tbXVfbW9kaWZ5KHN0cnVjdCB2bSAqdm0sIGJvb2xlYW5fdCBtYXApCit7
CisJaW50IGksIHN6OworCXZtX3BhZGRyX3QgZ3BhLCBocGE7CisJc3RydWN0IG1lbV9tYXAgKm1t
OworCXZvaWQgKnZwLCAqY29va2llLCAqaG9zdF9kb21haW47CisKKwlzeiA9IFBBR0VfU0laRTsK
Kwlob3N0X2RvbWFpbiA9IGlvbW11X2hvc3RfZG9tYWluKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg
Vk1fTUFYX01FTU1BUFM7IGkrKykgeworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmICgh
c3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtYXApIHsKKwkJ
CUtBU1NFUlQoKG1tLT5mbGFncyAmIFZNX01FTU1BUF9GX0lPTU1VKSA9PSAwLAorCQkJICAgICgi
aW9tbXUgbWFwIGZvdW5kIGludmFsaWQgbWVtbWFwICUjbHgvJSNseC8lI3giLAorCQkJICAgIG1t
LT5ncGEsIG1tLT5sZW4sIG1tLT5mbGFncykpOworCQkJaWYgKChtbS0+ZmxhZ3MgJiBWTV9NRU1N
QVBfRl9XSVJFRCkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCW1tLT5mbGFncyB8PSBWTV9NRU1N
QVBfRl9JT01NVTsKKwkJfSBlbHNlIHsKKwkJCWlmICgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0Zf
SU9NTVUpID09IDApCisJCQkJY29udGludWU7CisJCQltbS0+ZmxhZ3MgJj0gflZNX01FTU1BUF9G
X0lPTU1VOworCQkJS0FTU0VSVCgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0ZfV0lSRUQpICE9IDAs
CisJCQkgICAgKCJpb21tdSB1bm1hcCBmb3VuZCBpbnZhbGlkIG1lbW1hcCAlI2x4LyUjbHgvJSN4
IiwKKwkJCSAgICBtbS0+Z3BhLCBtbS0+bGVuLCBtbS0+ZmxhZ3MpKTsKKwkJfQorCisJCWdwYSA9
IG1tLT5ncGE7CisJCXdoaWxlIChncGEgPCBtbS0+Z3BhICsgbW0tPmxlbikgeworCQkJdnAgPSB2
bV9ncGFfaG9sZCh2bSwgLTEsIGdwYSwgUEFHRV9TSVpFLCBWTV9QUk9UX1dSSVRFLAorCQkJCQkg
JmNvb2tpZSk7CisJCQlLQVNTRVJUKHZwICE9IE5VTEwsICgidm0oJXMpIGNvdWxkIG5vdCBtYXAg
Z3BhICUjbHgiLAorCQkJICAgIHZtX25hbWUodm0pLCBncGEpKTsKKworCQkJdm1fZ3BhX3JlbGVh
c2UoY29va2llKTsKKworCQkJaHBhID0gRE1BUF9UT19QSFlTKCh1aW50cHRyX3QpdnApOworCQkJ
aWYgKG1hcCkgeworCQkJCWlvbW11X2NyZWF0ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBocGEs
IHN6KTsKKwkJCQlpb21tdV9yZW1vdmVfbWFwcGluZyhob3N0X2RvbWFpbiwgaHBhLCBzeik7CisJ
CQl9IGVsc2UgeworCQkJCWlvbW11X3JlbW92ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBzeik7
CisJCQkJaW9tbXVfY3JlYXRlX21hcHBpbmcoaG9zdF9kb21haW4sIGhwYSwgaHBhLCBzeik7CisJ
CQl9CisKKwkJCWdwYSArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisKKwkvKgorCSAqIEludmFsaWRh
dGUgdGhlIGNhY2hlZCB0cmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb21haW4KKwkg
KiBmcm9tIHdoaWNoIHBhZ2VzIHdlcmUgcmVtb3ZlZC4KKwkgKi8KKwlpZiAobWFwKQorCQlpb21t
dV9pbnZhbGlkYXRlX3RsYihob3N0X2RvbWFpbik7CisJZWxzZQorCQlpb21tdV9pbnZhbGlkYXRl
X3RsYih2bS0+aW9tbXUpOworfQorCisjZGVmaW5lCXZtX2lvbW11X3VubWFwKHZtKQl2bV9pb21t
dV9tb2RpZnkoKHZtKSwgRkFMU0UpCisjZGVmaW5lCXZtX2lvbW11X21hcCh2bSkJdm1faW9tbXVf
bW9kaWZ5KCh2bSksIFRSVUUpCisKK2ludAordm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAq
dm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJv
ciA9IHBwdF91bmFzc2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChwcHRfYXNzaWduZWRfZGV2aWNlcyh2bSkgPT0g
MCkKKwkJdm1faW9tbXVfdW5tYXAodm0pOworCisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9h
c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykK
K3sKKwlpbnQgZXJyb3I7CisJdm1fcGFkZHJfdCBtYXhhZGRyOworCisJLyogU2V0IHVwIHRoZSBJ
T01NVSB0byBkbyB0aGUgJ2dwYScgdG8gJ2hwYScgdHJhbnNsYXRpb24gKi8KKwlpZiAocHB0X2Fz
c2lnbmVkX2RldmljZXModm0pID09IDApIHsKKwkJS0FTU0VSVCh2bS0+aW9tbXUgPT0gTlVMTCwK
KwkJICAgICgidm1fYXNzaWduX3BwdGRldjogaW9tbXUgbXVzdCBiZSBOVUxMIikpOworCQltYXhh
ZGRyID0gc3lzbWVtX21heGFkZHIodm0pOworCQl2bS0+aW9tbXUgPSBpb21tdV9jcmVhdGVfZG9t
YWluKG1heGFkZHIpOworCQl2bV9pb21tdV9tYXAodm0pOworCX0KKworCWVycm9yID0gcHB0X2Fz
c2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisK
K3ZvaWQgKgordm1fZ3BhX2hvbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJf
dCBncGEsIHNpemVfdCBsZW4sIGludCByZXFwcm90LAorCSAgICB2b2lkICoqY29va2llKQorewor
CWludCBpLCBjb3VudCwgcGFnZW9mZjsKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJdm1fcGFnZV90
IG07CisjaWZkZWYgSU5WQVJJQU5UUworCS8qCisJICogQWxsIHZjcHVzIGFyZSBmcm96ZW4gYnkg
aW9jdGxzIHRoYXQgbW9kaWZ5IHRoZSBtZW1vcnkgbWFwCisJICogKGUuZy4gVk1fTU1BUF9NRU1T
RUcpLiBUaGVyZWZvcmUgJ3ZtLT5tZW1tYXBbXScgc3RhYmlsaXR5IGlzCisJICogZ3VhcmFudGVl
ZCBpZiBhdCBsZWFzdCBvbmUgdmNwdSBpcyBpbiB0aGUgVkNQVV9GUk9aRU4gc3RhdGUuCisJICov
CisJaW50IHN0YXRlOworCUtBU1NFUlQodmNwdWlkID49IC0xIHx8IHZjcHVpZCA8IFZNX01BWENQ
VSwgKCIlczogaW52YWxpZCB2Y3B1aWQgJWQiLAorCSAgICBfX2Z1bmNfXywgdmNwdWlkKSk7CisJ
Zm9yIChpID0gMDsgaSA8IFZNX01BWENQVTsgaSsrKSB7CisJCWlmICh2Y3B1aWQgIT0gLTEgJiYg
dmNwdWlkICE9IGkpCisJCQljb250aW51ZTsKKwkJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwg
aSwgTlVMTCk7CisJCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9GUk9aRU4sICgiJXM6IGludmFsaWQg
dmNwdSBzdGF0ZSAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdGUpKTsKKwl9CisjZW5kaWYKKwlw
YWdlb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCWlmIChsZW4gPiBQQUdFX1NJWkUgLSBwYWdlb2Zm
KQorCQlwYW5pYygidm1fZ3BhX2hvbGQ6IGludmFsaWQgZ3BhL2xlbjogMHglMDE2bHgvJWx1Iiwg
Z3BhLCBsZW4pOworCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhfTUVNTUFQ
UzsgaSsrKSB7CisJCW1tID0gJnZtLT5tZW1fbWFwc1tpXTsKKwkJaWYgKHN5c21lbV9tYXBwaW5n
KHZtLCBtbSkgJiYgZ3BhID49IG1tLT5ncGEgJiYKKwkJICAgIGdwYSA8IG1tLT5ncGEgKyBtbS0+
bGVuKSB7CisJCQljb3VudCA9IHZtX2ZhdWx0X3F1aWNrX2hvbGRfcGFnZXMoJnZtLT52bXNwYWNl
LT52bV9tYXAsCisJCQkgICAgdHJ1bmNfcGFnZShncGEpLCBQQUdFX1NJWkUsIHJlcXByb3QsICZt
LCAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNvdW50ID09IDEpIHsKKwkJKmNvb2tp
ZSA9IG07CisJCXJldHVybiAoKHZvaWQgKikoUEhZU19UT19ETUFQKFZNX1BBR0VfVE9fUEhZUyht
KSkgKyBwYWdlb2ZmKSk7CisJfSBlbHNlIHsKKwkJKmNvb2tpZSA9IE5VTEw7CisJCXJldHVybiAo
TlVMTCk7CisJfQorfQorCit2b2lkCit2bV9ncGFfcmVsZWFzZSh2b2lkICpjb29raWUpCit7CisJ
dm1fcGFnZV90IG0gPSBjb29raWU7CisKKwl2bV9wYWdlX2xvY2sobSk7CisJdm1fcGFnZV91bmhv
bGQobSk7CisJdm1fcGFnZV91bmxvY2sobSk7Cit9CisKK2ludAordm1fZ2V0X3JlZ2lzdGVyKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLCB1aW50NjRfdCAqcmV0dmFsKQoreworCisJ
aWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwlpZiAocmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4g
KFZNR0VUUkVHKHZtLT5jb29raWUsIHZjcHUsIHJlZywgcmV0dmFsKSk7Cit9CisKK2ludAordm1f
c2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGludCByZWcsIHVpbnQ2NF90
IHZhbCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodmNwdWlk
IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAo
cmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IFZNU0VU
UkVHKHZtLT5jb29raWUsIHZjcHVpZCwgcmVnLCB2YWwpOworCWlmIChlcnJvciB8fCByZWcgIT0g
Vk1fUkVHX0dVRVNUX1JJUCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwkvKiBTZXQgJ25leHRyaXAn
IHRvIG1hdGNoIHRoZSB2YWx1ZSBvZiAlcmlwICovCisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJT
ZXR0aW5nIG5leHRyaXAgdG8gJSNseCIsIHZhbCk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRd
OworCXZjcHUtPm5leHRyaXAgPSB2YWw7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGJvb2xl
YW5fdAoraXNfZGVzY3JpcHRvcl90YWJsZShpbnQgcmVnKQoreworCisJc3dpdGNoIChyZWcpIHsK
KwljYXNlIFZNX1JFR19HVUVTVF9JRFRSOgorCWNhc2UgVk1fUkVHX0dVRVNUX0dEVFI6CisJCXJl
dHVybiAoVFJVRSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorfQorCitzdGF0
aWMgYm9vbGVhbl90Citpc19zZWdtZW50X3JlZ2lzdGVyKGludCByZWcpCit7CisJCisJc3dpdGNo
IChyZWcpIHsKKwljYXNlIFZNX1JFR19HVUVTVF9FUzoKKwljYXNlIFZNX1JFR19HVUVTVF9DUzoK
KwljYXNlIFZNX1JFR19HVUVTVF9TUzoKKwljYXNlIFZNX1JFR19HVUVTVF9EUzoKKwljYXNlIFZN
X1JFR19HVUVTVF9GUzoKKwljYXNlIFZNX1JFR19HVUVTVF9HUzoKKwljYXNlIFZNX1JFR19HVUVT
VF9UUjoKKwljYXNlIFZNX1JFR19HVUVTVF9MRFRSOgorCQlyZXR1cm4gKFRSVUUpOworCWRlZmF1
bHQ6CisJCXJldHVybiAoRkFMU0UpOworCX0KK30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCXN0cnVjdCBzZWdfZGVzYyAqZGVzYykK
K3sKKworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5W
QUwpOworCisJaWYgKCFpc19zZWdtZW50X3JlZ2lzdGVyKHJlZykgJiYgIWlzX2Rlc2NyaXB0b3Jf
dGFibGUocmVnKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVERFU0Modm0t
PmNvb2tpZSwgdmNwdSwgcmVnLCBkZXNjKSk7Cit9CisKK2ludAordm1fc2V0X3NlZ19kZXNjKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQlzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2Mp
Cit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZB
TCk7CisKKwlpZiAoIWlzX3NlZ21lbnRfcmVnaXN0ZXIocmVnKSAmJiAhaXNfZGVzY3JpcHRvcl90
YWJsZShyZWcpKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUREVTQyh2bS0+
Y29va2llLCB2Y3B1LCByZWcsIGRlc2MpKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc3RvcmVfZ3Vl
c3RfZnB1c3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCit7CisKKwkvKiBmbHVzaCBob3N0IHN0YXRl
IHRvIHRoZSBwY2IgKi8KKwlmcHVleGl0KGN1cnRocmVhZCk7CisKKwkvKiByZXN0b3JlIGd1ZXN0
IEZQVSBzdGF0ZSAqLworCWZwdV9zdG9wX2VtdWxhdGluZygpOworCWZwdXJlc3RvcmUodmNwdS0+
Z3Vlc3RmcHUpOworCisJLyogcmVzdG9yZSBndWVzdCBYQ1IwIGlmIFhTQVZFIGlzIGVuYWJsZWQg
aW4gdGhlIGhvc3QgKi8KKwlpZiAocmNyNCgpICYgQ1I0X1hTQVZFKQorCQlsb2FkX3hjcigwLCB2
Y3B1LT5ndWVzdF94Y3IwKTsKKworCS8qCisJICogVGhlIEZQVSBpcyBub3cgImRpcnR5IiB3aXRo
IHRoZSBndWVzdCdzIHN0YXRlIHNvIHR1cm4gb24gZW11bGF0aW9uCisJICogdG8gdHJhcCBhbnkg
YWNjZXNzIHRvIHRoZSBGUFUgYnkgdGhlIGhvc3QuCisJICovCisJZnB1X3N0YXJ0X2VtdWxhdGlu
ZygpOworfQorCitzdGF0aWMgdm9pZAorc2F2ZV9ndWVzdF9mcHVzdGF0ZShzdHJ1Y3QgdmNwdSAq
dmNwdSkKK3sKKworCWlmICgocmNyMCgpICYgQ1IwX1RTKSA9PSAwKQorCQlwYW5pYygiZnB1IGVt
dWxhdGlvbiBub3QgZW5hYmxlZCBpbiBob3N0ISIpOworCisJLyogc2F2ZSBndWVzdCBYQ1IwIGFu
ZCByZXN0b3JlIGhvc3QgWENSMCAqLworCWlmIChyY3I0KCkgJiBDUjRfWFNBVkUpIHsKKwkJdmNw
dS0+Z3Vlc3RfeGNyMCA9IHJ4Y3IoMCk7CisJCWxvYWRfeGNyKDAsIHZtbV9nZXRfaG9zdF94Y3Iw
KCkpOworCX0KKworCS8qIHNhdmUgZ3Vlc3QgRlBVIHN0YXRlICovCisJZnB1X3N0b3BfZW11bGF0
aW5nKCk7CisJZnB1c2F2ZSh2Y3B1LT5ndWVzdGZwdSk7CisJZnB1X3N0YXJ0X2VtdWxhdGluZygp
OworfQorCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9JRExFX1RJQ0tTLCAibnVtYmVyIG9mIHRpY2tz
IHZjcHUgd2FzIGlkbGUiKTsKKworc3RhdGljIGludAordmNwdV9zZXRfc3RhdGVfbG9ja2VkKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGVudW0gdmNwdV9zdGF0ZSBuZXdzdGF0ZSwKKyAgICBi
b29sIGZyb21faWRsZSkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwl2
Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdmNwdV9hc3NlcnRfbG9ja2VkKHZjcHUpOworCisJ
LyoKKwkgKiBTdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSB2bW1kZXZfaW9jdGwoKSBtdXN0IGFs
d2F5cyBiZWdpbiBmcm9tCisJICogdGhlIFZDUFVfSURMRSBzdGF0ZS4gVGhpcyBndWFyYW50ZWVz
IHRoYXQgdGhlcmUgaXMgb25seSBhIHNpbmdsZQorCSAqIGlvY3RsKCkgb3BlcmF0aW5nIG9uIGEg
dmNwdSBhdCBhbnkgcG9pbnQuCisJICovCisJaWYgKGZyb21faWRsZSkgeworCQl3aGlsZSAodmNw
dS0+c3RhdGUgIT0gVkNQVV9JRExFKSB7CisJCQl2Y3B1LT5yZXFpZGxlID0gMTsKKwkJCXZjcHVf
bm90aWZ5X2V2ZW50X2xvY2tlZCh2Y3B1LCBmYWxzZSk7CisJCQlWQ1BVX0NUUjEodm0sIHZjcHVp
ZCwgInZjcHUgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gIgorCQkJICAgICJpZGxlIHJlcXVlc3Rl
ZCIsIHZjcHVfc3RhdGUyc3RyKHZjcHUtPnN0YXRlKSk7CisJCQltc2xlZXBfc3BpbigmdmNwdS0+
c3RhdGUsICZ2Y3B1LT5tdHgsICJ2bXN0YXQiLCBoeik7CisJCX0KKwl9IGVsc2UgeworCQlLQVNT
RVJUKHZjcHUtPnN0YXRlICE9IFZDUFVfSURMRSwgKCJpbnZhbGlkIHRyYW5zaXRpb24gZnJvbSAi
CisJCSAgICAidmNwdSBpZGxlIHN0YXRlIikpOworCX0KKworCWlmICh2Y3B1LT5zdGF0ZSA9PSBW
Q1BVX1JVTk5JTkcpIHsKKwkJS0FTU0VSVCh2Y3B1LT5ob3N0Y3B1ID09IGN1cmNwdSwgKCJjdXJj
cHUgJWQgYW5kIGhvc3RjcHUgJWQgIgorCQkgICAgIm1pc21hdGNoIGZvciBydW5uaW5nIHZjcHUi
LCBjdXJjcHUsIHZjcHUtPmhvc3RjcHUpKTsKKwl9IGVsc2UgeworCQlLQVNTRVJUKHZjcHUtPmhv
c3RjcHUgPT0gTk9DUFUsICgiSW52YWxpZCBob3N0Y3B1ICVkIGZvciBhICIKKwkJICAgICJ2Y3B1
IHRoYXQgaXMgbm90IHJ1bm5pbmciLCB2Y3B1LT5ob3N0Y3B1KSk7CisJfQorCisJLyoKKwkgKiBU
aGUgZm9sbG93aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkOgorCSAqIElETEUgLT4g
RlJPWkVOIC0+IElETEUKKwkgKiBGUk9aRU4gLT4gUlVOTklORyAtPiBGUk9aRU4KKwkgKiBGUk9a
RU4gLT4gU0xFRVBJTkcgLT4gRlJPWkVOCisJICovCisJc3dpdGNoICh2Y3B1LT5zdGF0ZSkgewor
CWNhc2UgVkNQVV9JRExFOgorCWNhc2UgVkNQVV9SVU5OSU5HOgorCWNhc2UgVkNQVV9TTEVFUElO
RzoKKwkJZXJyb3IgPSAobmV3c3RhdGUgIT0gVkNQVV9GUk9aRU4pOworCQlicmVhazsKKwljYXNl
IFZDUFVfRlJPWkVOOgorCQllcnJvciA9IChuZXdzdGF0ZSA9PSBWQ1BVX0ZST1pFTik7CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAidmNwdSBzdGF0
ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiLAorCSAgICB2Y3B1X3N0YXRlMnN0cih2Y3B1LT5zdGF0
ZSksIHZjcHVfc3RhdGUyc3RyKG5ld3N0YXRlKSk7CisKKwl2Y3B1LT5zdGF0ZSA9IG5ld3N0YXRl
OworCWlmIChuZXdzdGF0ZSA9PSBWQ1BVX1JVTk5JTkcpCisJCXZjcHUtPmhvc3RjcHUgPSBjdXJj
cHU7CisJZWxzZQorCQl2Y3B1LT5ob3N0Y3B1ID0gTk9DUFU7CisKKwlpZiAobmV3c3RhdGUgPT0g
VkNQVV9JRExFKQorCQl3YWtldXAoJnZjcHUtPnN0YXRlKTsKKworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyB2b2lkCit2Y3B1X3JlcXVpcmVfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJy
b3IgPSB2Y3B1X3NldF9zdGF0ZSh2bSwgdmNwdWlkLCBuZXdzdGF0ZSwgZmFsc2UpKSAhPSAwKQor
CQlwYW5pYygiRXJyb3IgJWQgc2V0dGluZyBzdGF0ZSB0byAlZFxuIiwgZXJyb3IsIG5ld3N0YXRl
KTsKK30KKworc3RhdGljIHZvaWQKK3ZjcHVfcmVxdWlyZV9zdGF0ZV9sb2NrZWQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJv
cjsKKworCWlmICgoZXJyb3IgPSB2Y3B1X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3
c3RhdGUsIGZhbHNlKSkgIT0gMCkKKwkJcGFuaWMoIkVycm9yICVkIHNldHRpbmcgc3RhdGUgdG8g
JWQiLCBlcnJvciwgbmV3c3RhdGUpOworfQorCitzdGF0aWMgdm9pZAordm1fc2V0X3JlbmRlenZv
dXNfZnVuYyhzdHJ1Y3Qgdm0gKnZtLCB2bV9yZW5kZXp2b3VzX2Z1bmNfdCBmdW5jKQoreworCisJ
S0FTU0VSVChtdHhfb3duZWQoJnZtLT5yZW5kZXp2b3VzX210eCksICgicmVuZGV6dm91c19tdHgg
bm90IGxvY2tlZCIpKTsKKworCS8qCisJICogVXBkYXRlICdyZW5kZXp2b3VzX2Z1bmMnIGFuZCBl
eGVjdXRlIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIgdG8KKwkgKiBlbnN1cmUgdGhhdCBpdCBpcyB2
aXNpYmxlIGFjcm9zcyBhbGwgaG9zdCBjcHVzLiBUaGlzIGlzIG5vdCBuZWVkZWQKKwkgKiBmb3Ig
Y29ycmVjdG5lc3MgYnV0IGl0IGRvZXMgZW5zdXJlIHRoYXQgYWxsIHRoZSB2Y3B1cyB3aWxsIG5v
dGljZQorCSAqIHRoYXQgdGhlIHJlbmRlenZvdXMgaXMgcmVxdWVzdGVkIGltbWVkaWF0ZWx5Lgor
CSAqLworCXZtLT5yZW5kZXp2b3VzX2Z1bmMgPSBmdW5jOworCXdtYigpOworfQorCisjZGVmaW5l
CVJFTkRFWlZPVVNfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJ
CWlmICh2Y3B1aWQgPj0gMCkJCQkJCVwKKwkJCVZDUFVfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpOwkJ
CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlWTV9DVFIwKHZtLCBmbXQpOwkJCQlcCisJfSB3aGlsZSAo
MCkKKworc3RhdGljIHZvaWQKK3ZtX2hhbmRsZV9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQpCit7CisKKwlLQVNTRVJUKHZjcHVpZCA9PSAtMSB8fCAodmNwdWlkID49IDAgJiYg
dmNwdWlkIDwgVk1fTUFYQ1BVKSwKKwkgICAgKCJ2bV9oYW5kbGVfcmVuZGV6dm91czogaW52YWxp
ZCB2Y3B1aWQgJWQiLCB2Y3B1aWQpKTsKKworCW10eF9sb2NrKCZ2bS0+cmVuZGV6dm91c19tdHgp
OworCXdoaWxlICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwpIHsKKwkJLyogJ3JlbmRlenZv
dXNfcmVxX2NwdXMnIG11c3QgYmUgYSBzdWJzZXQgb2YgJ2FjdGl2ZV9jcHVzJyAqLworCQlDUFVf
QU5EKCZ2bS0+cmVuZGV6dm91c19yZXFfY3B1cywgJnZtLT5hY3RpdmVfY3B1cyk7CisKKwkJaWYg
KHZjcHVpZCAhPSAtMSAmJgorCQkgICAgQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3Vz
X3JlcV9jcHVzKSAmJgorCQkgICAgIUNQVV9JU1NFVCh2Y3B1aWQsICZ2bS0+cmVuZGV6dm91c19k
b25lX2NwdXMpKSB7CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkNhbGxpbmcgcmVuZGV6dm91
cyBmdW5jIik7CisJCQkoKnZtLT5yZW5kZXp2b3VzX2Z1bmMpKHZtLCB2Y3B1aWQsIHZtLT5yZW5k
ZXp2b3VzX2FyZyk7CisJCQlDUFVfU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1
cyk7CisJCX0KKwkJaWYgKENQVV9DTVAoJnZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzLAorCQkgICAg
JnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1cykgPT0gMCkgeworCQkJVkNQVV9DVFIwKHZtLCB2Y3B1
aWQsICJSZW5kZXp2b3VzIGNvbXBsZXRlZCIpOworCQkJdm1fc2V0X3JlbmRlenZvdXNfZnVuYyh2
bSwgTlVMTCk7CisJCQl3YWtldXAoJnZtLT5yZW5kZXp2b3VzX2Z1bmMpOworCQkJYnJlYWs7CisJ
CX0KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJXYWl0IGZvciByZW5kZXp2b3VzIGNv
bXBsZXRpb24iKTsKKwkJbXR4X3NsZWVwKCZ2bS0+cmVuZGV6dm91c19mdW5jLCAmdm0tPnJlbmRl
enZvdXNfbXR4LCAwLAorCQkgICAgInZtcm5kdiIsIDApOworCX0KKwltdHhfdW5sb2NrKCZ2bS0+
cmVuZGV6dm91c19tdHgpOworfQorCisvKgorICogRW11bGF0ZSBhIGd1ZXN0ICdobHQnIGJ5IHNs
ZWVwaW5nIHVudGlsIHRoZSB2Y3B1IGlzIHJlYWR5IHRvIHJ1bi4KKyAqLworc3RhdGljIGludAor
dm1faGFuZGxlX2hsdChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBib29sIGludHJfZGlzYWJs
ZWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJY29uc3QgY2hhciAqd21l
c2c7CisJaW50IHQsIHZjcHVfaGFsdGVkLCB2bV9oYWx0ZWQ7CisKKwlLQVNTRVJUKCFDUFVfSVNT
RVQodmNwdWlkLCAmdm0tPmhhbHRlZF9jcHVzKSwgKCJ2Y3B1IGFscmVhZHkgaGFsdGVkIikpOwor
CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZjcHVfaGFsdGVkID0gMDsKKwl2bV9oYWx0
ZWQgPSAwOworCisJdmNwdV9sb2NrKHZjcHUpOworCXdoaWxlICgxKSB7CisJCS8qCisJCSAqIERv
IGEgZmluYWwgY2hlY2sgZm9yIHBlbmRpbmcgTk1JIG9yIGludGVycnVwdHMgYmVmb3JlCisJCSAq
IHJlYWxseSBwdXR0aW5nIHRoaXMgdGhyZWFkIHRvIHNsZWVwLiBBbHNvIGNoZWNrIGZvcgorCQkg
KiBzb2Z0d2FyZSBldmVudHMgdGhhdCB3b3VsZCBjYXVzZSB0aGlzIHZjcHUgdG8gd2FrZXVwLgor
CQkgKgorCQkgKiBUaGVzZSBpbnRlcnJ1cHRzL2V2ZW50cyBjb3VsZCBoYXZlIGhhcHBlbmVkIGFm
dGVyIHRoZQorCQkgKiB2Y3B1IHJldHVybmVkIGZyb20gVk1SVU4oKSBhbmQgYmVmb3JlIGl0IGFj
cXVpcmVkIHRoZQorCQkgKiB2Y3B1IGxvY2sgYWJvdmUuCisJCSAqLworCQlpZiAodm0tPnJlbmRl
enZvdXNfZnVuYyAhPSBOVUxMIHx8IHZtLT5zdXNwZW5kIHx8IHZjcHUtPnJlcWlkbGUpCisJCQli
cmVhazsKKwkJaWYgKHZtX25taV9wZW5kaW5nKHZtLCB2Y3B1aWQpKQorCQkJYnJlYWs7CisJCWlm
ICghaW50cl9kaXNhYmxlZCkgeworCQkJaWYgKHZtX2V4dGludF9wZW5kaW5nKHZtLCB2Y3B1aWQp
IHx8CisJCQkgICAgdmxhcGljX3BlbmRpbmdfaW50cih2Y3B1LT52bGFwaWMsIE5VTEwpKSB7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBEb24ndCBnbyB0byBzbGVlcCBpZiB0aGUgdmNw
dSB0aHJlYWQgbmVlZHMgdG8geWllbGQgKi8KKwkJaWYgKHZjcHVfc2hvdWxkX3lpZWxkKHZtLCB2
Y3B1aWQpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogU29tZSBMaW51eCBndWVzdHMgaW1wbGVt
ZW50ICJoYWx0IiBieSBoYXZpbmcgYWxsIHZjcHVzCisJCSAqIGV4ZWN1dGUgSExUIHdpdGggaW50
ZXJydXB0cyBkaXNhYmxlZC4gJ2hhbHRlZF9jcHVzJyBrZWVwcworCQkgKiB0cmFjayBvZiB0aGUg
dmNwdXMgdGhhdCBoYXZlIGVudGVyZWQgdGhpcyBzdGF0ZS4gV2hlbiBhbGwKKwkJICogdmNwdXMg
ZW50ZXIgdGhlIGhhbHRlZCBzdGF0ZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIGhhbHRlZC4KKwkJ
ICovCisJCWlmIChpbnRyX2Rpc2FibGVkKSB7CisJCQl3bWVzZyA9ICJ2bWhhbHQiOworCQkJVkNQ
VV9DVFIwKHZtLCB2Y3B1aWQsICJIYWx0ZWQiKTsKKwkJCWlmICghdmNwdV9oYWx0ZWQgJiYgaGFs
dF9kZXRlY3Rpb25fZW5hYmxlZCkgeworCQkJCXZjcHVfaGFsdGVkID0gMTsKKwkJCQlDUFVfU0VU
X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCQkJfQorCQkJaWYgKENQVV9DTVAo
JnZtLT5oYWx0ZWRfY3B1cywgJnZtLT5hY3RpdmVfY3B1cykgPT0gMCkgeworCQkJCXZtX2hhbHRl
ZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl3bWVzZyA9ICJ2bWlkbGUi
OworCQl9CisKKwkJdCA9IHRpY2tzOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2
Y3B1aWQsIFZDUFVfU0xFRVBJTkcpOworCQkvKgorCQkgKiBYWFggbXNsZWVwX3NwaW4oKSBjYW5u
b3QgYmUgaW50ZXJydXB0ZWQgYnkgc2lnbmFscyBzbworCQkgKiB3YWtlIHVwIHBlcmlvZGljYWxs
eSB0byBjaGVjayBwZW5kaW5nIHNpZ25hbHMuCisJCSAqLworCQltc2xlZXBfc3Bpbih2Y3B1LCAm
dmNwdS0+bXR4LCB3bWVzZywgaHopOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2
Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BVX0lE
TEVfVElDS1MsIHRpY2tzIC0gdCk7CisJfQorCisJaWYgKHZjcHVfaGFsdGVkKQorCQlDUFVfQ0xS
X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCisJdmNwdV91bmxvY2sodmNwdSk7
CisKKwlpZiAodm1faGFsdGVkKQorCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX0hBTFQpOwor
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAordm1faGFuZGxlX3BhZ2luZyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBib29sICpyZXR1KQoreworCWludCBydiwgZnR5cGU7CisJc3Ry
dWN0IHZtX21hcCAqbWFwOworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2
bWU7CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdm1lID0gJnZjcHUtPmV4aXRpbmZv
OworCisJS0FTU0VSVCh2bWUtPmluc3RfbGVuZ3RoID09IDAsICgiJXM6IGludmFsaWQgaW5zdF9s
ZW5ndGggJWQiLAorCSAgICBfX2Z1bmNfXywgdm1lLT5pbnN0X2xlbmd0aCkpOworCisJZnR5cGUg
PSB2bWUtPnUucGFnaW5nLmZhdWx0X3R5cGU7CisJS0FTU0VSVChmdHlwZSA9PSBWTV9QUk9UX1JF
QUQgfHwKKwkgICAgZnR5cGUgPT0gVk1fUFJPVF9XUklURSB8fCBmdHlwZSA9PSBWTV9QUk9UX0VY
RUNVVEUsCisJICAgICgidm1faGFuZGxlX3BhZ2luZzogaW52YWxpZCBmYXVsdF90eXBlICVkIiwg
ZnR5cGUpKTsKKworCWlmIChmdHlwZSA9PSBWTV9QUk9UX1JFQUQgfHwgZnR5cGUgPT0gVk1fUFJP
VF9XUklURSkgeworCQlydiA9IHBtYXBfZW11bGF0ZV9hY2Nlc3NlZF9kaXJ0eSh2bXNwYWNlX3Bt
YXAodm0tPnZtc3BhY2UpLAorCQkgICAgdm1lLT51LnBhZ2luZy5ncGEsIGZ0eXBlKTsKKwkJaWYg
KHJ2ID09IDApIHsKKwkJCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAiJXMgYml0IGVtdWxhdGlvbiBm
b3IgZ3BhICUjbHgiLAorCQkJICAgIGZ0eXBlID09IFZNX1BST1RfUkVBRCA/ICJhY2Nlc3NlZCIg
OiAiZGlydHkiLAorCQkJICAgIHZtZS0+dS5wYWdpbmcuZ3BhKTsKKwkJCWdvdG8gZG9uZTsKKwkJ
fQorCX0KKworCW1hcCA9ICZ2bS0+dm1zcGFjZS0+dm1fbWFwOworCXJ2ID0gdm1fZmF1bHQobWFw
LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUsIFZNX0ZBVUxUX05PUk1BTCk7CisKKwlWQ1BVX0NU
UjModm0sIHZjcHVpZCwgInZtX2hhbmRsZV9wYWdpbmcgcnYgPSAlZCwgZ3BhID0gJSNseCwgIgor
CSAgICAiZnR5cGUgPSAlZCIsIHJ2LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUpOworCisJaWYg
KHJ2ICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworZG9uZToKKwlyZXR1cm4g
KDApOworfQorCitzdGF0aWMgaW50Cit2bV9oYW5kbGVfaW5zdF9lbXVsKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZpZSAqdmllOworCXN0cnVjdCB2
Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2bWU7CisJdWludDY0X3QgZ2xhLCBncGEsIGNz
X2Jhc2U7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nOworCW1lbV9yZWdpb25fcmVh
ZF90IG1yZWFkOworCW1lbV9yZWdpb25fd3JpdGVfdCBtd3JpdGU7CisJZW51bSB2bV9jcHVfbW9k
ZSBjcHVfbW9kZTsKKwlpbnQgY3NfZCwgZXJyb3IsIGZhdWx0OworCisJdmNwdSA9ICZ2bS0+dmNw
dVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5mbzsKKworCUtBU1NFUlQodm1lLT5pbnN0
X2xlbmd0aCA9PSAwLCAoIiVzOiBpbnZhbGlkIGluc3RfbGVuZ3RoICVkIiwKKwkgICAgX19mdW5j
X18sIHZtZS0+aW5zdF9sZW5ndGgpKTsKKworCWdsYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ2xhOwor
CWdwYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ3BhOworCWNzX2Jhc2UgPSB2bWUtPnUuaW5zdF9lbXVs
LmNzX2Jhc2U7CisJY3NfZCA9IHZtZS0+dS5pbnN0X2VtdWwuY3NfZDsKKwl2aWUgPSAmdm1lLT51
Lmluc3RfZW11bC52aWU7CisJcGFnaW5nID0gJnZtZS0+dS5pbnN0X2VtdWwucGFnaW5nOworCWNw
dV9tb2RlID0gcGFnaW5nLT5jcHVfbW9kZTsKKworCVZDUFVfQ1RSMSh2bSwgdmNwdWlkLCAiaW5z
dF9lbXVsIGZhdWx0IGFjY2Vzc2luZyBncGEgJSNseCIsIGdwYSk7CisKKwkvKiBGZXRjaCwgZGVj
b2RlIGFuZCBlbXVsYXRlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiAqLworCWlmICh2aWUtPm51
bV92YWxpZCA9PSAwKSB7CisJCWVycm9yID0gdm1tX2ZldGNoX2luc3RydWN0aW9uKHZtLCB2Y3B1
aWQsIHBhZ2luZywgdm1lLT5yaXAgKworCQkgICAgY3NfYmFzZSwgVklFX0lOU1RfU0laRSwgdmll
LCAmZmF1bHQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBpbnN0cnVjdGlvbiBieXRlcyBo
YXZlIGFscmVhZHkgYmVlbiBjb3BpZWQgaW50byAndmllJworCQkgKi8KKwkJZXJyb3IgPSBmYXVs
dCA9IDA7CisJfQorCWlmIChlcnJvciB8fCBmYXVsdCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlp
ZiAodm1tX2RlY29kZV9pbnN0cnVjdGlvbih2bSwgdmNwdWlkLCBnbGEsIGNwdV9tb2RlLCBjc19k
LCB2aWUpICE9IDApIHsKKwkJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJFcnJvciBkZWNvZGluZyBp
bnN0cnVjdGlvbiBhdCAlI2x4IiwKKwkJICAgIHZtZS0+cmlwICsgY3NfYmFzZSk7CisJCSpyZXR1
ID0gdHJ1ZTsJICAgIC8qIGR1bXAgaW5zdHJ1Y3Rpb24gYnl0ZXMgaW4gdXNlcnNwYWNlICovCisJ
CXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgJ25leHRyaXAnIGJhc2VkIG9uIHRo
ZSBsZW5ndGggb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLgorCSAqLworCXZtZS0+aW5zdF9s
ZW5ndGggPSB2aWUtPm51bV9wcm9jZXNzZWQ7CisJdmNwdS0+bmV4dHJpcCArPSB2aWUtPm51bV9w
cm9jZXNzZWQ7CisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJuZXh0cmlwIHVwZGF0ZWQgdG8gJSNs
eCBhZnRlciBpbnN0cnVjdGlvbiAiCisJICAgICJkZWNvZGluZyIsIHZjcHUtPm5leHRyaXApOwor
IAorCS8qIHJldHVybiB0byB1c2VybGFuZCB1bmxlc3MgdGhpcyBpcyBhbiBpbi1rZXJuZWwgZW11
bGF0ZWQgZGV2aWNlICovCisJaWYgKGdwYSA+PSBERUZBVUxUX0FQSUNfQkFTRSAmJiBncGEgPCBE
RUZBVUxUX0FQSUNfQkFTRSArIFBBR0VfU0laRSkgeworCQltcmVhZCA9IGxhcGljX21taW9fcmVh
ZDsKKwkJbXdyaXRlID0gbGFwaWNfbW1pb193cml0ZTsKKwl9IGVsc2UgaWYgKGdwYSA+PSBWSU9B
UElDX0JBU0UgJiYgZ3BhIDwgVklPQVBJQ19CQVNFICsgVklPQVBJQ19TSVpFKSB7CisJCW1yZWFk
ID0gdmlvYXBpY19tbWlvX3JlYWQ7CisJCW13cml0ZSA9IHZpb2FwaWNfbW1pb193cml0ZTsKKwl9
IGVsc2UgaWYgKGdwYSA+PSBWSFBFVF9CQVNFICYmIGdwYSA8IFZIUEVUX0JBU0UgKyBWSFBFVF9T
SVpFKSB7CisJCW1yZWFkID0gdmhwZXRfbW1pb19yZWFkOworCQltd3JpdGUgPSB2aHBldF9tbWlv
X3dyaXRlOworCX0gZWxzZSB7CisJCSpyZXR1ID0gdHJ1ZTsKKwkJcmV0dXJuICgwKTsKKwl9CisK
KwllcnJvciA9IHZtbV9lbXVsYXRlX2luc3RydWN0aW9uKHZtLCB2Y3B1aWQsIGdwYSwgdmllLCBw
YWdpbmcsCisJICAgIG1yZWFkLCBtd3JpdGUsIHJldHUpOworCisJcmV0dXJuIChlcnJvcik7Cit9
CisKK3N0YXRpYyBpbnQKK3ZtX2hhbmRsZV9zdXNwZW5kKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIGJvb2wgKnJldHUpCit7CisJaW50IGksIGRvbmU7CisJc3RydWN0IHZjcHUgKnZjcHU7CisK
Kwlkb25lID0gMDsKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlDUFVfU0VUX0FUT01J
Qyh2Y3B1aWQsICZ2bS0+c3VzcGVuZGVkX2NwdXMpOworCisJLyoKKwkgKiBXYWl0IHVudGlsIGFs
bCAnYWN0aXZlX2NwdXMnIGhhdmUgc3VzcGVuZGVkIHRoZW1zZWx2ZXMuCisJICoKKwkgKiBTaW5j
ZSBhIFZNIG1heSBiZSBzdXNwZW5kZWQgYXQgYW55IHRpbWUgaW5jbHVkaW5nIHdoZW4gb25lIG9y
CisJICogbW9yZSB2Y3B1cyBhcmUgZG9pbmcgYSByZW5kZXp2b3VzIHdlIG5lZWQgdG8gY2FsbCB0
aGUgcmVuZGV6dm91cworCSAqIGhhbmRsZXIgd2hpbGUgd2UgYXJlIHdhaXRpbmcgdG8gcHJldmVu
dCBhIGRlYWRsb2NrLgorCSAqLworCXZjcHVfbG9jayh2Y3B1KTsKKwl3aGlsZSAoMSkgeworCQlp
ZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAmdm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7
CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkFsbCB2Y3B1cyBzdXNwZW5kZWQiKTsKKwkJCWJy
ZWFrOworCQl9CisKKwkJaWYgKHZtLT5yZW5kZXp2b3VzX2Z1bmMgPT0gTlVMTCkgeworCQkJVkNQ
VV9DVFIwKHZtLCB2Y3B1aWQsICJTbGVlcGluZyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNwdV9y
ZXF1aXJlX3N0YXRlX2xvY2tlZCh2bSwgdmNwdWlkLCBWQ1BVX1NMRUVQSU5HKTsKKwkJCW1zbGVl
cF9zcGluKHZjcHUsICZ2Y3B1LT5tdHgsICJ2bXN1c3AiLCBoeik7CisJCQl2Y3B1X3JlcXVpcmVf
c3RhdGVfbG9ja2VkKHZtLCB2Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJfSBlbHNlIHsKKwkJCVZD
UFVfQ1RSMCh2bSwgdmNwdWlkLCAiUmVuZGV6dm91cyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNw
dV91bmxvY2sodmNwdSk7CisJCQl2bV9oYW5kbGVfcmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJ
CXZjcHVfbG9jayh2Y3B1KTsKKwkJfQorCX0KKwl2Y3B1X3VubG9jayh2Y3B1KTsKKworCS8qCisJ
ICogV2FrZXVwIHRoZSBvdGhlciBzbGVlcGluZyB2Y3B1cyBhbmQgcmV0dXJuIHRvIHVzZXJzcGFj
ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYQ1BVOyBpKyspIHsKKwkJaWYgKENQVV9J
U1NFVChpLCAmdm0tPnN1c3BlbmRlZF9jcHVzKSkgeworCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0s
IGksIGZhbHNlKTsKKwkJfQorCX0KKworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50Cit2bV9oYW5kbGVfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk
LCBib29sICpyZXR1KQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07
CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJS0FTU0VSVCh2Y3B1LT5yZXFpZGxlLCAoImludmFsaWQg
dmNwdSByZXFpZGxlICVkIiwgdmNwdS0+cmVxaWRsZSkpOworCXZjcHUtPnJlcWlkbGUgPSAwOwor
CXZjcHVfdW5sb2NrKHZjcHUpOworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQorCitp
bnQKK3ZtX3N1c3BlbmQoc3RydWN0IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpCit7
CisJaW50IGk7CisKKwlpZiAoaG93IDw9IFZNX1NVU1BFTkRfTk9ORSB8fCBob3cgPj0gVk1fU1VT
UEVORF9MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoYXRvbWljX2NtcHNldF9pbnQo
JnZtLT5zdXNwZW5kLCAwLCBob3cpID09IDApIHsKKwkJVk1fQ1RSMih2bSwgInZpcnR1YWwgbWFj
aGluZSBhbHJlYWR5IHN1c3BlbmRlZCAlZC8lZCIsCisJCSAgICB2bS0+c3VzcGVuZCwgaG93KTsK
KwkJcmV0dXJuIChFQUxSRUFEWSk7CisJfQorCisJVk1fQ1RSMSh2bSwgInZpcnR1YWwgbWFjaGlu
ZSBzdWNjZXNzZnVsbHkgc3VzcGVuZGVkICVkIiwgaG93KTsKKworCS8qCisJICogTm90aWZ5IGFs
bCBhY3RpdmUgdmNwdXMgdGhhdCB0aGV5IGFyZSBub3cgc3VzcGVuZGVkLgorCSAqLworCWZvciAo
aSA9IDA7IGkgPCBWTV9NQVhDUFU7IGkrKykgeworCQlpZiAoQ1BVX0lTU0VUKGksICZ2bS0+YWN0
aXZlX2NwdXMpKQorCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0sIGksIGZhbHNlKTsKKwl9CisKKwly
ZXR1cm4gKDApOworfQorCit2b2lkCit2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0IHZtX2V4aXQgKnZtZXhpdDsKKwor
CUtBU1NFUlQodm0tPnN1c3BlbmQgPiBWTV9TVVNQRU5EX05PTkUgJiYgdm0tPnN1c3BlbmQgPCBW
TV9TVVNQRU5EX0xBU1QsCisJICAgICgidm1fZXhpdF9zdXNwZW5kZWQ6IGludmFsaWQgc3VzcGVu
ZCB0eXBlICVkIiwgdm0tPnN1c3BlbmQpKTsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2
Y3B1aWQpOworCXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOwor
CXZtZXhpdC0+ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9TVVNQRU5ERUQ7CisJdm1leGl0LT51LnN1
c3BlbmRlZC5ob3cgPSB2bS0+c3VzcGVuZDsKK30KKwordm9pZAordm1fZXhpdF9yZW5kZXp2b3Vz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sKKwlzdHJ1Y3Qgdm1f
ZXhpdCAqdm1leGl0OworCisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwsICgi
cmVuZGV6dm91cyBub3QgaW4gcHJvZ3Jlc3MiKSk7CisKKwl2bWV4aXQgPSB2bV9leGl0aW5mbyh2
bSwgdmNwdWlkKTsKKwl2bWV4aXQtPnJpcCA9IHJpcDsKKwl2bWV4aXQtPmluc3RfbGVuZ3RoID0g
MDsKKwl2bWV4aXQtPmV4aXRjb2RlID0gVk1fRVhJVENPREVfUkVOREVaVk9VUzsKKwl2bW1fc3Rh
dF9pbmNyKHZtLCB2Y3B1aWQsIFZNRVhJVF9SRU5ERVpWT1VTLCAxKTsKK30KKwordm9pZAordm1f
ZXhpdF9yZXFpZGxlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sK
KwlzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0OworCisJdm1leGl0ID0gdm1fZXhpdGluZm8odm0sIHZj
cHVpZCk7CisJdm1leGl0LT5yaXAgPSByaXA7CisJdm1leGl0LT5pbnN0X2xlbmd0aCA9IDA7CisJ
dm1leGl0LT5leGl0Y29kZSA9IFZNX0VYSVRDT0RFX1JFUUlETEU7CisJdm1tX3N0YXRfaW5jcih2
bSwgdmNwdWlkLCBWTUVYSVRfUkVRSURMRSwgMSk7Cit9CisKK3ZvaWQKK3ZtX2V4aXRfYXN0cGVu
ZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0
IHZtX2V4aXQgKnZtZXhpdDsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2Y3B1aWQpOwor
CXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOworCXZtZXhpdC0+
ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9CT0dVUzsKKwl2bW1fc3RhdF9pbmNyKHZtLCB2Y3B1aWQs
IFZNRVhJVF9BU1RQRU5ESU5HLCAxKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtICp2bSwg
c3RydWN0IHZtX3J1biAqdm1ydW4pCit7CisJc3RydWN0IHZtX2V2ZW50aW5mbyBldmluZm87CisJ
aW50IGVycm9yLCB2Y3B1aWQ7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJc3RydWN0IHBjYiAqcGNi
OworCXVpbnQ2NF90IHRzY3ZhbDsKKwlzdHJ1Y3Qgdm1fZXhpdCAqdm1lOworCWJvb2wgcmV0dSwg
aW50cl9kaXNhYmxlZDsKKwlwbWFwX3QgcG1hcDsKKworCXZjcHVpZCA9IHZtcnVuLT5jcHVpZDsK
KworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlO
VkFMKTsKKworCWlmICghQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5hY3RpdmVfY3B1cykpCisJCXJl
dHVybiAoRUlOVkFMKTsKKworCWlmIChDUFVfSVNTRVQodmNwdWlkLCAmdm0tPnN1c3BlbmRlZF9j
cHVzKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcG1hcCA9IHZtc3BhY2VfcG1hcCh2bS0+dm1z
cGFjZSk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5m
bzsKKwlldmluZm8ucnB0ciA9ICZ2bS0+cmVuZGV6dm91c19mdW5jOworCWV2aW5mby5zcHRyID0g
JnZtLT5zdXNwZW5kOworCWV2aW5mby5pcHRyID0gJnZjcHUtPnJlcWlkbGU7CityZXN0YXJ0Ogor
CWNyaXRpY2FsX2VudGVyKCk7CisKKwlLQVNTRVJUKCFDUFVfSVNTRVQoY3VyY3B1LCAmcG1hcC0+
cG1fYWN0aXZlKSwKKwkgICAgKCJ2bV9ydW46IGFic3VyZCBwbV9hY3RpdmUiKSk7CisKKwl0c2N2
YWwgPSByZHRzYygpOworCisJcGNiID0gUENQVV9HRVQoY3VycGNiKTsKKwlzZXRfcGNiX2ZsYWdz
KHBjYiwgUENCX0ZVTExfSVJFVCk7CisKKwlyZXN0b3JlX2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOwor
CisJdmNwdV9yZXF1aXJlX3N0YXRlKHZtLCB2Y3B1aWQsIFZDUFVfUlVOTklORyk7CisJZXJyb3Ig
PSBWTVJVTih2bS0+Y29va2llLCB2Y3B1aWQsIHZjcHUtPm5leHRyaXAsIHBtYXAsICZldmluZm8p
OworCXZjcHVfcmVxdWlyZV9zdGF0ZSh2bSwgdmNwdWlkLCBWQ1BVX0ZST1pFTik7CisKKwlzYXZl
X2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOworCisJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BV
X1RPVEFMX1JVTlRJTUUsIHJkdHNjKCkgLSB0c2N2YWwpOworCisJY3JpdGljYWxfZXhpdCgpOwor
CisJaWYgKGVycm9yID09IDApIHsKKwkJcmV0dSA9IGZhbHNlOworCQl2Y3B1LT5uZXh0cmlwID0g
dm1lLT5yaXAgKyB2bWUtPmluc3RfbGVuZ3RoOworCQlzd2l0Y2ggKHZtZS0+ZXhpdGNvZGUpIHsK
KwkJY2FzZSBWTV9FWElUQ09ERV9SRVFJRExFOgorCQkJZXJyb3IgPSB2bV9oYW5kbGVfcmVxaWRs
ZSh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9TVVNQ
RU5ERUQ6CisJCQllcnJvciA9IHZtX2hhbmRsZV9zdXNwZW5kKHZtLCB2Y3B1aWQsICZyZXR1KTsK
KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX0lPQVBJQ19FT0k6CisJCQl2aW9hcGljX3By
b2Nlc3NfZW9pKHZtLCB2Y3B1aWQsCisJCQkgICAgdm1lLT51LmlvYXBpY19lb2kudmVjdG9yKTsK
KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1JFTkRFWlZPVVM6CisJCQl2bV9oYW5kbGVf
cmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQljYXNl
IFZNX0VYSVRDT0RFX0hMVDoKKwkJCWludHJfZGlzYWJsZWQgPSAoKHZtZS0+dS5obHQucmZsYWdz
ICYgUFNMX0kpID09IDApOworCQkJZXJyb3IgPSB2bV9oYW5kbGVfaGx0KHZtLCB2Y3B1aWQsIGlu
dHJfZGlzYWJsZWQsICZyZXR1KTsKKwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1BBR0lO
RzoKKwkJCWVycm9yID0gdm1faGFuZGxlX3BhZ2luZyh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQli
cmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9JTlNUX0VNVUw6CisJCQllcnJvciA9IHZtX2hhbmRs
ZV9pbnN0X2VtdWwodm0sIHZjcHVpZCwgJnJldHUpOworCQkJYnJlYWs7CisJCWNhc2UgVk1fRVhJ
VENPREVfSU5PVVQ6CisJCWNhc2UgVk1fRVhJVENPREVfSU5PVVRfU1RSOgorCQkJZXJyb3IgPSB2
bV9oYW5kbGVfaW5vdXQodm0sIHZjcHVpZCwgdm1lLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2Fz
ZSBWTV9FWElUQ09ERV9NT05JVE9SOgorCQljYXNlIFZNX0VYSVRDT0RFX01XQUlUOgorCQkJdm1f
aW5qZWN0X3VkKHZtLCB2Y3B1aWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1ID0g
dHJ1ZTsJLyogaGFuZGxlZCBpbiB1c2VybGFuZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp
ZiAoZXJyb3IgPT0gMCAmJiByZXR1ID09IGZhbHNlKQorCQlnb3RvIHJlc3RhcnQ7CisKKwlWQ1BV
X0NUUjIodm0sIHZjcHVpZCwgInJldHUgJWQvJWQiLCBlcnJvciwgdm1lLT5leGl0Y29kZSk7CisK
KwkvKiBjb3B5IHRoZSBleGl0IGluZm9ybWF0aW9uICovCisJYmNvcHkodm1lLCAmdm1ydW4tPnZt
X2V4aXQsIHNpemVvZihzdHJ1Y3Qgdm1fZXhpdCkpOworCXJldHVybiAoZXJyb3IpOworfQorCitp
bnQKK3ZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqYXJnLCBpbnQgdmNwdWlkKQoreworCXN0
cnVjdCB2bSAqdm07CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRl
OworCXVpbnQ2NF90IHJpcDsKKwlpbnQgZXJyb3I7CisKKwl2bSA9IGFyZzsKKwlpZiAodmNwdWlk
IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1
ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdWlk
LCBOVUxMKTsKKwlpZiAoc3RhdGUgPT0gVkNQVV9SVU5OSU5HKSB7CisJCS8qCisJCSAqIFdoZW4g
YSB2Y3B1IGlzICJydW5uaW5nIiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBkZXRlcm1pbmVkCisJ
CSAqIGJ5IGFkZGluZyAncmlwJyBhbmQgJ2luc3RfbGVuZ3RoJyBpbiB0aGUgdmNwdSdzICdleGl0
aW5mbycuCisJCSAqIFRodXMgc2V0dGluZyAnaW5zdF9sZW5ndGgnIHRvIHplcm8gd2lsbCBjYXVz
ZSB0aGUgY3VycmVudAorCQkgKiBpbnN0cnVjdGlvbiB0byBiZSByZXN0YXJ0ZWQuCisJCSAqLwor
CQl2Y3B1LT5leGl0aW5mby5pbnN0X2xlbmd0aCA9IDA7CisJCVZDUFVfQ1RSMSh2bSwgdmNwdWlk
LCAicmVzdGFydGluZyBpbnN0cnVjdGlvbiBhdCAlI2x4IGJ5ICIKKwkJICAgICJzZXR0aW5nIGlu
c3RfbGVuZ3RoIHRvIHplcm8iLCB2Y3B1LT5leGl0aW5mby5yaXApOworCX0gZWxzZSBpZiAoc3Rh
dGUgPT0gVkNQVV9GUk9aRU4pIHsKKwkJLyoKKwkJICogV2hlbiBhIHZjcHUgaXMgImZyb3plbiIg
aXQgaXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbgorCQkgKiBhcm91bmQgVk1SVU4oKSBh
bmQgJ25leHRyaXAnIHBvaW50cyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKwkJICogVGh1cyBp
bnN0cnVjdGlvbiByZXN0YXJ0IGlzIGFjaGlldmVkIGJ5IHNldHRpbmcgJ25leHRyaXAnCisJCSAq
IHRvIHRoZSB2Y3B1J3MgJXJpcC4KKwkJICovCisJCWVycm9yID0gdm1fZ2V0X3JlZ2lzdGVyKHZt
LCB2Y3B1aWQsIFZNX1JFR19HVUVTVF9SSVAsICZyaXApOworCQlLQVNTRVJUKCFlcnJvciwgKCIl
czogZXJyb3IgJWQgZ2V0dGluZyByaXAiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJVkNQVV9DVFIy
KHZtLCB2Y3B1aWQsICJyZXN0YXJ0aW5nIGluc3RydWN0aW9uIGJ5IHVwZGF0aW5nICIKKwkJICAg
ICJuZXh0cmlwIGZyb20gJSNseCB0byAlI2x4IiwgdmNwdS0+bmV4dHJpcCwgcmlwKTsKKwkJdmNw
dS0+bmV4dHJpcCA9IHJpcDsKKwl9IGVsc2UgeworCQlwYW5pYygiJXM6IGludmFsaWQgc3RhdGUg
JWQiLCBfX2Z1bmNfXywgc3RhdGUpOworCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX2V4
aXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvKQorewor
CXN0cnVjdCB2Y3B1ICp2Y3B1OworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlpZiAodmNwdWlkIDwg
MCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1ID0g
JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAoaW5mbyAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJ
dHlwZSA9IGluZm8gJiBWTV9JTlRJTkZPX1RZUEU7CisJCXZlY3RvciA9IGluZm8gJiAweGZmOwor
CQlpZiAodHlwZSA9PSBWTV9JTlRJTkZPX05NSSAmJiB2ZWN0b3IgIT0gSURUX05NSSkKKwkJCXJl
dHVybiAoRUlOVkFMKTsKKwkJaWYgKHR5cGUgPT0gVk1fSU5USU5GT19IV0VYQ0VQVElPTiAmJiB2
ZWN0b3IgPj0gMzIpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCWlmIChpbmZvICYgVk1fSU5USU5G
T19SU1ZEKQorCQkJcmV0dXJuIChFSU5WQUwpOworCX0gZWxzZSB7CisJCWluZm8gPSAwOworCX0K
KwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIiVzOiBpbmZvMSglI2x4KSIsIF9fZnVuY19fLCBpbmZv
KTsKKwl2Y3B1LT5leGl0aW50aW5mbyA9IGluZm87CisJcmV0dXJuICgwKTsKK30KKworZW51bSBl
eGNfY2xhc3MgeworCUVYQ19CRU5JR04sCisJRVhDX0NPTlRSSUJVVE9SWSwKKwlFWENfUEFHRUZB
VUxUCit9OworCisjZGVmaW5lCUlEVF9WRQkyMAkvKiBWaXJ0dWFsaXphdGlvbiBFeGNlcHRpb24g
KEludGVsIHNwZWNpZmljKSAqLworCitzdGF0aWMgZW51bSBleGNfY2xhc3MKK2V4Y2VwdGlvbl9j
bGFzcyh1aW50NjRfdCBpbmZvKQoreworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlLQVNTRVJUKGlu
Zm8gJiBWTV9JTlRJTkZPX1ZBTElELCAoImludGluZm8gbXVzdCBiZSB2YWxpZDogJSNseCIsIGlu
Zm8pKTsKKwl0eXBlID0gaW5mbyAmIFZNX0lOVElORk9fVFlQRTsKKwl2ZWN0b3IgPSBpbmZvICYg
MHhmZjsKKworCS8qIFRhYmxlIDYtNCwgIkludGVycnVwdCBhbmQgRXhjZXB0aW9uIENsYXNzZXMi
LCBJbnRlbCBTRE0sIFZvbCAzICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWTV9JTlRJTkZP
X0hXSU5UUjoKKwljYXNlIFZNX0lOVElORk9fU1dJTlRSOgorCWNhc2UgVk1fSU5USU5GT19OTUk6
CisJCXJldHVybiAoRVhDX0JFTklHTik7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogSGFyZHdhcmUg
ZXhjZXB0aW9uLgorCQkgKgorCQkgKiBTVk0gYW5kIFZULXggdXNlIGlkZW50aWNhbCB0eXBlIHZh
bHVlcyB0byByZXByZXNlbnQgTk1JLAorCQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHNvZnR3
YXJlIGludGVycnVwdC4KKwkJICoKKwkJICogU1ZNIHVzZXMgdHlwZSAnMycgZm9yIGFsbCBleGNl
cHRpb25zLiBWVC14IHVzZXMgdHlwZSAnMycKKwkJICogZm9yIGV4Y2VwdGlvbnMgZXhjZXB0ICNC
UCBhbmQgI09GLiAjQlAgYW5kICNPRiB1c2UgYSB0eXBlCisJCSAqIHZhbHVlIG9mICc1JyBvciAn
NicuIFRoZXJlZm9yZSB3ZSBkb24ndCBjaGVjayBmb3IgZXhwbGljaXQKKwkJICogdmFsdWVzIG9m
ICd0eXBlJyB0byBjbGFzc2lmeSAnaW50aW5mbycgaW50byBhIGhhcmR3YXJlCisJCSAqIGV4Y2Vw
dGlvbi4KKwkJICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodmVjdG9yKSB7CisJY2FzZSBJ
RFRfUEY6CisJY2FzZSBJRFRfVkU6CisJCXJldHVybiAoRVhDX1BBR0VGQVVMVCk7CisJY2FzZSBJ
RFRfREU6CisJY2FzZSBJRFRfVFM6CisJY2FzZSBJRFRfTlA6CisJY2FzZSBJRFRfU1M6CisJY2Fz
ZSBJRFRfR1A6CisJCXJldHVybiAoRVhDX0NPTlRSSUJVVE9SWSk7CisJZGVmYXVsdDoKKwkJcmV0
dXJuIChFWENfQkVOSUdOKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25lc3RlZF9mYXVsdChzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvMSwgdWludDY0X3QgaW5mbzIsCisg
ICAgdWludDY0X3QgKnJldGluZm8pCit7CisJZW51bSBleGNfY2xhc3MgZXhjMSwgZXhjMjsKKwlp
bnQgdHlwZTEsIHZlY3RvcjE7CisKKwlLQVNTRVJUKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCwg
KCJpbmZvMSAlI2x4IGlzIG5vdCB2YWxpZCIsIGluZm8xKSk7CisJS0FTU0VSVChpbmZvMiAmIFZN
X0lOVElORk9fVkFMSUQsICgiaW5mbzIgJSNseCBpcyBub3QgdmFsaWQiLCBpbmZvMikpOworCisJ
LyoKKwkgKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gY2FsbCB0
aGUgZG91YmxlLWZhdWx0CisJICogaGFuZGxlciB0aGUgcHJvY2Vzc29yIGVudGVycyBzaHV0ZG93
biBtb2RlIChha2EgdHJpcGxlIGZhdWx0KS4KKwkgKi8KKwl0eXBlMSA9IGluZm8xICYgVk1fSU5U
SU5GT19UWVBFOworCXZlY3RvcjEgPSBpbmZvMSAmIDB4ZmY7CisJaWYgKHR5cGUxID09IFZNX0lO
VElORk9fSFdFWENFUFRJT04gJiYgdmVjdG9yMSA9PSBJRFRfREYpIHsKKwkJVkNQVV9DVFIyKHZt
LCB2Y3B1aWQsICJ0cmlwbGUgZmF1bHQ6IGluZm8xKCUjbHgpLCBpbmZvMiglI2x4KSIsCisJCSAg
ICBpbmZvMSwgaW5mbzIpOworCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX1RSSVBMRUZBVUxU
KTsKKwkJKnJldGluZm8gPSAwOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogVGFibGUg
Ni01ICJDb25kaXRpb25zIGZvciBHZW5lcmF0aW5nIGEgRG91YmxlIEZhdWx0IiwgSW50ZWwgU0RN
LCBWb2wzCisJICovCisJZXhjMSA9IGV4Y2VwdGlvbl9jbGFzcyhpbmZvMSk7CisJZXhjMiA9IGV4
Y2VwdGlvbl9jbGFzcyhpbmZvMik7CisJaWYgKChleGMxID09IEVYQ19DT05UUklCVVRPUlkgJiYg
ZXhjMiA9PSBFWENfQ09OVFJJQlVUT1JZKSB8fAorCSAgICAoZXhjMSA9PSBFWENfUEFHRUZBVUxU
ICYmIGV4YzIgIT0gRVhDX0JFTklHTikpIHsKKwkJLyogQ29udmVydCBuZXN0ZWQgZmF1bHQgaW50
byBhIGRvdWJsZSBmYXVsdC4gKi8KKwkJKnJldGluZm8gPSBJRFRfREY7CisJCSpyZXRpbmZvIHw9
IFZNX0lOVElORk9fVkFMSUQgfCBWTV9JTlRJTkZPX0hXRVhDRVBUSU9OOworCQkqcmV0aW5mbyB8
PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCX0gZWxzZSB7CisJCS8qIEhhbmRsZSBleGNlcHRp
b25zIHNlcmlhbGx5ICovCisJCSpyZXRpbmZvID0gaW5mbzI7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK3N0YXRpYyB1aW50NjRfdAordmNwdV9leGNlcHRpb25faW50aW5mbyhzdHJ1Y3QgdmNwdSAq
dmNwdSkKK3sKKwl1aW50NjRfdCBpbmZvID0gMDsKKworCWlmICh2Y3B1LT5leGNlcHRpb25fcGVu
ZGluZykgeworCQlpbmZvID0gdmNwdS0+ZXhjX3ZlY3RvciAmIDB4ZmY7CisJCWluZm8gfD0gVk1f
SU5USU5GT19WQUxJRCB8IFZNX0lOVElORk9fSFdFWENFUFRJT047CisJCWlmICh2Y3B1LT5leGNf
ZXJyY29kZV92YWxpZCkgeworCQkJaW5mbyB8PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCQkJ
aW5mbyB8PSAodWludDY0X3QpdmNwdS0+ZXhjX2VycmNvZGUgPDwgMzI7CisJCX0KKwl9CisJcmV0
dXJuIChpbmZvKTsKK30KKworaW50Cit2bV9lbnRyeV9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIHVpbnQ2NF90ICpyZXRpbmZvKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXVp
bnQ2NF90IGluZm8xLCBpbmZvMjsKKwlpbnQgdmFsaWQ7CisKKwlLQVNTRVJUKHZjcHVpZCA+PSAw
ICYmIHZjcHVpZCA8IFZNX01BWENQVSwgKCJpbnZhbGlkIHZjcHUgJWQiLCB2Y3B1aWQpKTsKKwor
CXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWluZm8xID0gdmNwdS0+ZXhpdGludGluZm87
CisJdmNwdS0+ZXhpdGludGluZm8gPSAwOworCisJaW5mbzIgPSAwOworCWlmICh2Y3B1LT5leGNl
cHRpb25fcGVuZGluZykgeworCQlpbmZvMiA9IHZjcHVfZXhjZXB0aW9uX2ludGluZm8odmNwdSk7
CisJCXZjcHUtPmV4Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQs
ICJFeGNlcHRpb24gJWQgZGVsaXZlcmVkOiAlI2x4IiwKKwkJICAgIHZjcHUtPmV4Y192ZWN0b3Is
IGluZm8yKTsKKwl9CisKKwlpZiAoKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCkgJiYgKGluZm8y
ICYgVk1fSU5USU5GT19WQUxJRCkpIHsKKwkJdmFsaWQgPSBuZXN0ZWRfZmF1bHQodm0sIHZjcHVp
ZCwgaW5mbzEsIGluZm8yLCByZXRpbmZvKTsKKwl9IGVsc2UgaWYgKGluZm8xICYgVk1fSU5USU5G
T19WQUxJRCkgeworCQkqcmV0aW5mbyA9IGluZm8xOworCQl2YWxpZCA9IDE7CisJfSBlbHNlIGlm
IChpbmZvMiAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJKnJldGluZm8gPSBpbmZvMjsKKwkJdmFs
aWQgPSAxOworCX0gZWxzZSB7CisJCXZhbGlkID0gMDsKKwl9CisKKwlpZiAodmFsaWQpIHsKKwkJ
VkNQVV9DVFI0KHZtLCB2Y3B1aWQsICIlczogaW5mbzEoJSNseCksIGluZm8yKCUjbHgpLCAiCisJ
CSAgICAicmV0aW5mbyglI2x4KSIsIF9fZnVuY19fLCBpbmZvMSwgaW5mbzIsICpyZXRpbmZvKTsK
Kwl9CisKKwlyZXR1cm4gKHZhbGlkKTsKK30KKworaW50Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMikKK3sK
KwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9N
QVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsK
KwkqaW5mbzEgPSB2Y3B1LT5leGl0aW50aW5mbzsKKwkqaW5mbzIgPSB2Y3B1X2V4Y2VwdGlvbl9p
bnRpbmZvKHZjcHUpOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1faW5qZWN0X2V4Y2VwdGlv
bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyY29kZV92YWxp
ZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbikKK3sKKwlz
dHJ1Y3QgdmNwdSAqdmNwdTsKKwl1aW50NjRfdCByZWd2YWw7CisJaW50IGVycm9yOworCisJaWYg
KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOwor
CisJaWYgKHZlY3RvciA8IDAgfHwgdmVjdG9yID49IDMyKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwkvKgorCSAqIEEgZG91YmxlIGZhdWx0IGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgYmUgaW5qZWN0
ZWQgZGlyZWN0bHkgaW50bworCSAqIHRoZSBndWVzdC4gSXQgaXMgYSBkZXJpdmVkIGV4Y2VwdGlv
biB0aGF0IHJlc3VsdHMgZnJvbSBzcGVjaWZpYworCSAqIGNvbWJpbmF0aW9ucyBvZiBuZXN0ZWQg
ZmF1bHRzLgorCSAqLworCWlmICh2ZWN0b3IgPT0gSURUX0RGKQorCQlyZXR1cm4gKEVJTlZBTCk7
CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAodmNwdS0+ZXhjZXB0aW9uX3Bl
bmRpbmcpIHsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQsICJVbmFibGUgdG8gaW5qZWN0IGV4Y2Vw
dGlvbiAlZCBkdWUgdG8gIgorCQkgICAgInBlbmRpbmcgZXhjZXB0aW9uICVkIiwgdmVjdG9yLCB2
Y3B1LT5leGNfdmVjdG9yKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJaWYgKGVycmNvZGVf
dmFsaWQpIHsKKwkJLyoKKwkJICogRXhjZXB0aW9ucyBkb24ndCBkZWxpdmVyIGFuIGVycm9yIGNv
ZGUgaW4gcmVhbCBtb2RlLgorCQkgKi8KKwkJZXJyb3IgPSB2bV9nZXRfcmVnaXN0ZXIodm0sIHZj
cHVpZCwgVk1fUkVHX0dVRVNUX0NSMCwgJnJlZ3ZhbCk7CisJCUtBU1NFUlQoIWVycm9yLCAoIiVz
OiBlcnJvciAlZCBnZXR0aW5nIENSMCIsIF9fZnVuY19fLCBlcnJvcikpOworCQlpZiAoIShyZWd2
YWwgJiBDUjBfUEUpKQorCQkJZXJyY29kZV92YWxpZCA9IDA7CisJfQorCisJLyoKKwkgKiBGcm9t
IHNlY3Rpb24gMjYuNi4xICJJbnRlcnJ1cHRpYmlsaXR5IFN0YXRlIiBpbiBJbnRlbCBTRE06CisJ
ICoKKwkgKiBFdmVudCBibG9ja2luZyBieSAiU1RJIiBvciAiTU9WIFNTIiBpcyBjbGVhcmVkIGFm
dGVyIGd1ZXN0IGV4ZWN1dGVzCisJICogb25lIGluc3RydWN0aW9uIG9yIGluY3VycyBhbiBleGNl
cHRpb24uCisJICovCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1fUkVH
X0dVRVNUX0lOVFJfU0hBRE9XLCAwKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGVycm9y
ICVkIGNsZWFyaW5nIGludGVycnVwdCBzaGFkb3ciLAorCSAgICBfX2Z1bmNfXywgZXJyb3IpKTsK
KworCWlmIChyZXN0YXJ0X2luc3RydWN0aW9uKQorCQl2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZt
LCB2Y3B1aWQpOworCisJdmNwdS0+ZXhjZXB0aW9uX3BlbmRpbmcgPSAxOworCXZjcHUtPmV4Y192
ZWN0b3IgPSB2ZWN0b3I7CisJdmNwdS0+ZXhjX2VycmNvZGUgPSBlcnJjb2RlOworCXZjcHUtPmV4
Y19lcnJjb2RlX3ZhbGlkID0gZXJyY29kZV92YWxpZDsKKwlWQ1BVX0NUUjEodm0sIHZjcHVpZCwg
IkV4Y2VwdGlvbiAlZCBwZW5kaW5nIiwgdmVjdG9yKTsKKwlyZXR1cm4gKDApOworfQorCit2b2lk
Cit2bV9pbmplY3RfZmF1bHQodm9pZCAqdm1hcmcsIGludCB2Y3B1aWQsIGludCB2ZWN0b3IsIGlu
dCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKQoreworCXN0cnVjdCB2bSAqdm07CisJ
aW50IGVycm9yLCByZXN0YXJ0X2luc3RydWN0aW9uOworCisJdm0gPSB2bWFyZzsKKwlyZXN0YXJ0
X2luc3RydWN0aW9uID0gMTsKKworCWVycm9yID0gdm1faW5qZWN0X2V4Y2VwdGlvbih2bSwgdmNw
dWlkLCB2ZWN0b3IsIGVycmNvZGVfdmFsaWQsCisJICAgIGVycmNvZGUsIHJlc3RhcnRfaW5zdHJ1
Y3Rpb24pOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCJ2bV9pbmplY3RfZXhjZXB0aW9uIGVycm9y
ICVkIiwgZXJyb3IpKTsKK30KKwordm9pZAordm1faW5qZWN0X3BmKHZvaWQgKnZtYXJnLCBpbnQg
dmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKQoreworCXN0cnVjdCB2bSAqdm07
CisJaW50IGVycm9yOworCisJdm0gPSB2bWFyZzsKKwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIklu
amVjdGluZyBwYWdlIGZhdWx0OiBlcnJvcl9jb2RlICUjeCwgY3IyICUjbHgiLAorCSAgICBlcnJv
cl9jb2RlLCBjcjIpOworCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1f
UkVHX0dVRVNUX0NSMiwgY3IyKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgidm1fc2V0X3JlZ2lz
dGVyKGNyMikgZXJyb3IgJWQiLCBlcnJvcikpOworCisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1
aWQsIElEVF9QRiwgMSwgZXJyb3JfY29kZSk7Cit9CisKK3N0YXRpYyBWTU1fU1RBVChWQ1BVX05N
SV9DT1VOVCwgIm51bWJlciBvZiBOTUlzIGRlbGl2ZXJlZCB0byB2Y3B1Iik7CisKK2ludAordm1f
aW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2
Y3B1OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJdmNwdS0+bm1pX3Bl
bmRpbmcgPSAxOworCXZjcHVfbm90aWZ5X2V2ZW50KHZtLCB2Y3B1aWQsIGZhbHNlKTsKKwlyZXR1
cm4gKDApOworfQorCitpbnQKK3ZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg
Pj0gVk1fTUFYQ1BVKQorCQlwYW5pYygidm1fbm1pX3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVk
IiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXJldHVybiAodmNw
dS0+bm1pX3BlbmRpbmcpOworfQorCit2b2lkCit2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8
IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmljKCJ2bV9ubWlfcGVuZGluZzogaW52YWxpZCB2
Y3B1aWQgJWQiLCB2Y3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJaWYg
KHZjcHUtPm5taV9wZW5kaW5nID09IDApCisJCXBhbmljKCJ2bV9ubWlfY2xlYXI6IGluY29uc2lz
dGVudCBubWlfcGVuZGluZyBzdGF0ZSIpOworCisJdmNwdS0+bm1pX3BlbmRpbmcgPSAwOworCXZt
bV9zdGF0X2luY3Iodm0sIHZjcHVpZCwgVkNQVV9OTUlfQ09VTlQsIDEpOworfQorCitzdGF0aWMg
Vk1NX1NUQVQoVkNQVV9FWFRJTlRfQ09VTlQsICJudW1iZXIgb2YgRXh0SU5UcyBkZWxpdmVyZWQg
dG8gdmNwdSIpOworCitpbnQKK3ZtX2luamVjdF9leHRpbnQoc3RydWN0IHZtICp2bSwgaW50IHZj
cHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVp
ZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb
dmNwdWlkXTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMTsKKwl2Y3B1X25vdGlmeV9ldmVu
dCh2bSwgdmNwdWlkLCBmYWxzZSk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9leHRpbnRf
cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1
OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZt
X2V4dGludF9wZW5kaW5nOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1ID0g
JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlyZXR1cm4gKHZjcHUtPmV4dGludF9wZW5kaW5nKTsKK30K
Kwordm9pZAordm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisJ
c3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFY
Q1BVKQorCQlwYW5pYygidm1fZXh0aW50X3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVkIiwgdmNw
dWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWlmICh2Y3B1LT5leHRpbnRf
cGVuZGluZyA9PSAwKQorCQlwYW5pYygidm1fZXh0aW50X2NsZWFyOiBpbmNvbnNpc3RlbnQgZXh0
aW50X3BlbmRpbmcgc3RhdGUiKTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMDsKKwl2bW1f
c3RhdF9pbmNyKHZtLCB2Y3B1aWQsIFZDUFVfRVhUSU5UX0NPVU5ULCAxKTsKK30KKworaW50Cit2
bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUsIGludCAq
cmV0dmFsKQoreworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gVk1fQ0FQX01BWCkKKwkJcmV0
dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVENBUCh2bS0+Y29va2llLCB2Y3B1LCB0eXBl
LCByZXR2YWwpKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdSwgaW50IHR5cGUsIGludCB2YWwpCit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0g
Vk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAodHlwZSA8IDAgfHwgdHlwZSA+
PSBWTV9DQVBfTUFYKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUQ0FQKHZt
LT5jb29raWUsIHZjcHUsIHR5cGUsIHZhbCkpOworfQorCitzdHJ1Y3QgdmxhcGljICoKK3ZtX2xh
cGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpCit7CisJcmV0dXJuICh2bS0+dmNwdVtjcHVdLnZs
YXBpYyk7Cit9CisKK3N0cnVjdCB2aW9hcGljICoKK3ZtX2lvYXBpYyhzdHJ1Y3Qgdm0gKnZtKQor
eworCisJcmV0dXJuICh2bS0+dmlvYXBpYyk7Cit9CisKK3N0cnVjdCB2aHBldCAqCit2bV9ocGV0
KHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT52aHBldCk7Cit9CisKK2Jvb2xlYW5f
dAordm1tX2lzX3BwdGRldihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpCit7CisJaW50IGZv
dW5kLCBpLCBuOworCWludCBiLCBzLCBmOworCWNoYXIgKnZhbCwgKmNwLCAqY3AyOworCisJLyoK
KwkgKiBYWFgKKwkgKiBUaGUgbGVuZ3RoIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGxp
bWl0ZWQgdG8gMTI4IGJ5dGVzIHdoaWNoCisJICogcHV0cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUg
bnVtYmVyIG9mIHBhc3N0aHJ1IGRldmljZXMgdGhhdCBtYXkgYmUKKwkgKiBzcGVjaWZpZWQgdXNp
bmcgYSBzaW5nbGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJICoKKwkgKiBXb3JrIGFyb3VuZCB0
aGlzIGJ5IHNjYW5uaW5nIG11bHRpcGxlIGVudmlyb25tZW50IHZhcmlhYmxlCisJICogbmFtZXMg
aW5zdGVhZCBvZiBhIHNpbmdsZSBvbmUgLSB5dWNrIQorCSAqLworCWNvbnN0IGNoYXIgKm5hbWVz
W10gPSB7ICJwcHRkZXZzIiwgInBwdGRldnMyIiwgInBwdGRldnMzIiwgTlVMTCB9OworCisJLyog
c2V0IHBwdGRldnM9IjEvMi8zIDQvNS82IDcvOC85IDEwLzExLzEyIiAqLworCWZvdW5kID0gMDsK
Kwlmb3IgKGkgPSAwOyBuYW1lc1tpXSAhPSBOVUxMICYmICFmb3VuZDsgaSsrKSB7CisJCWNwID0g
dmFsID0ga2Vybl9nZXRlbnYobmFtZXNbaV0pOworCQl3aGlsZSAoY3AgIT0gTlVMTCAmJiAqY3Ag
IT0gJ1wwJykgeworCQkJaWYgKChjcDIgPSBzdHJjaHIoY3AsICcgJykpICE9IE5VTEwpCisJCQkJ
KmNwMiA9ICdcMCc7CisKKwkJCW4gPSBzc2NhbmYoY3AsICIlZC8lZC8lZCIsICZiLCAmcywgJmYp
OworCQkJaWYgKG4gPT0gMyAmJiBidXMgPT0gYiAmJiBzbG90ID09IHMgJiYgZnVuYyA9PSBmKSB7
CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkKKwkJCWlmIChjcDIgIT0gTlVM
TCkKKwkJCQkqY3AyKysgPSAnICc7CisKKwkJCWNwID0gY3AyOworCQl9CisJCWZyZWVlbnYodmFs
KTsKKwl9CisJcmV0dXJuIChmb3VuZCk7Cit9CisKK3ZvaWQgKgordm1faW9tbXVfZG9tYWluKHN0
cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT5pb21tdSk7Cit9CisKK2ludAordmNwdV9z
ZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0
YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdmNwdSAq
dmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmlj
KCJ2bV9zZXRfcnVuX3N0YXRlOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1
ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJZXJyb3IgPSB2Y3B1
X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3c3RhdGUsIGZyb21faWRsZSk7CisJdmNw
dV91bmxvY2sodmNwdSk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworZW51bSB2Y3B1X3N0YXRl
Cit2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgKmhvc3RjcHUp
Cit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRlOworCisJaWYg
KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2dldF9ydW5f
c3RhdGU6IGludmFsaWQgdmNwdWlkICVkIiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb
dmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwlzdGF0ZSA9IHZjcHUtPnN0YXRlOworCWlm
IChob3N0Y3B1ICE9IE5VTEwpCisJCSpob3N0Y3B1ID0gdmNwdS0+aG9zdGNwdTsKKwl2Y3B1X3Vu
bG9jayh2Y3B1KTsKKworCXJldHVybiAoc3RhdGUpOworfQorCitpbnQKK3ZtX2FjdGl2YXRlX2Nw
dShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNw
dWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKENQVV9JU1NFVCh2
Y3B1aWQsICZ2bS0+YWN0aXZlX2NwdXMpKQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RS
MCh2bSwgdmNwdWlkLCAiYWN0aXZhdGVkIik7CisJQ1BVX1NFVF9BVE9NSUModmNwdWlkLCAmdm0t
PmFjdGl2ZV9jcHVzKTsKKwlyZXR1cm4gKDApOworfQorCitjcHVzZXRfdAordm1fYWN0aXZlX2Nw
dXMoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPmFjdGl2ZV9jcHVzKTsKK30KKwor
Y3B1c2V0X3QKK3ZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4g
KHZtLT5zdXNwZW5kZWRfY3B1cyk7Cit9CisKK3ZvaWQgKgordmNwdV9zdGF0cyhzdHJ1Y3Qgdm0g
KnZtLCBpbnQgdmNwdWlkKQoreworCisJcmV0dXJuICh2bS0+dmNwdVt2Y3B1aWRdLnN0YXRzKTsK
K30KKworaW50Cit2bV9nZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQs
IGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg
Pj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkqc3RhdGUgPSB2bS0+dmNwdVt2
Y3B1aWRdLngyYXBpY19zdGF0ZTsKKworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fc2V0X3gy
YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBlbnVtIHgyYXBpY19zdGF0ZSBz
dGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1
cm4gKEVJTlZBTCk7CisKKwlpZiAoc3RhdGUgPj0gWDJBUElDX1NUQVRFX0xBU1QpCisJCXJldHVy
biAoRUlOVkFMKTsKKworCXZtLT52Y3B1W3ZjcHVpZF0ueDJhcGljX3N0YXRlID0gc3RhdGU7CisK
Kwl2bGFwaWNfc2V0X3gyYXBpY19zdGF0ZSh2bSwgdmNwdWlkLCBzdGF0ZSk7CisKKwlyZXR1cm4g
KDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZW5zdXJlIHRoYXQg
YSB2Y3B1ICJzZWVzIiBhIHBlbmRpbmcgZXZlbnQKKyAqIGFzIHNvb24gYXMgcG9zc2libGU6Cisg
KiAtIElmIHRoZSB2Y3B1IHRocmVhZCBpcyBzbGVlcGluZyB0aGVuIGl0IGlzIHdva2VuIHVwLgor
ICogLSBJZiB0aGUgdmNwdSBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGhvc3RfY3B1IHRoZW4g
YW4gSVBJIHdpbGwgYmUgZGlyZWN0ZWQKKyAqICAgdG8gdGhlIGhvc3RfY3B1IHRvIGNhdXNlIHRo
ZSB2Y3B1IHRvIHRyYXAgaW50byB0aGUgaHlwZXJ2aXNvci4KKyAqLworc3RhdGljIHZvaWQKK3Zj
cHVfbm90aWZ5X2V2ZW50X2xvY2tlZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRy
KQoreworCWludCBob3N0Y3B1OworCisJaG9zdGNwdSA9IHZjcHUtPmhvc3RjcHU7CisJaWYgKHZj
cHUtPnN0YXRlID09IFZDUFVfUlVOTklORykgeworCQlLQVNTRVJUKGhvc3RjcHUgIT0gTk9DUFUs
ICgidmNwdSBydW5uaW5nIG9uIGludmFsaWQgaG9zdGNwdSIpKTsKKwkJaWYgKGhvc3RjcHUgIT0g
Y3VyY3B1KSB7CisJCQlpZiAobGFwaWNfaW50cikgeworCQkJCXZsYXBpY19wb3N0X2ludHIodmNw
dS0+dmxhcGljLCBob3N0Y3B1LAorCQkJCSAgICB2bW1faXBpbnVtKTsKKwkJCX0gZWxzZSB7CisJ
CQkJaXBpX2NwdShob3N0Y3B1LCB2bW1faXBpbnVtKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8q
CisJCQkgKiBJZiB0aGUgJ3ZjcHUnIGlzIHJ1bm5pbmcgb24gJ2N1cmNwdScgdGhlbiBpdCBtdXN0
CisJCQkgKiBiZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIGl0c2VsZiAoZS5nLiBTRUxGX0lQ
SSkuCisJCQkgKiBUaGUgcGVuZGluZyBldmVudCB3aWxsIGJlIHBpY2tlZCB1cCB3aGVuIHRoZSB2
Y3B1CisJCQkgKiB0cmFuc2l0aW9ucyBiYWNrIHRvIGd1ZXN0IGNvbnRleHQuCisJCQkgKi8KKwkJ
fQorCX0gZWxzZSB7CisJCUtBU1NFUlQoaG9zdGNwdSA9PSBOT0NQVSwgKCJ2Y3B1IHN0YXRlICVk
IG5vdCBjb25zaXN0ZW50ICIKKwkJICAgICJ3aXRoIGhvc3RjcHUgJWQiLCB2Y3B1LT5zdGF0ZSwg
aG9zdGNwdSkpOworCQlpZiAodmNwdS0+c3RhdGUgPT0gVkNQVV9TTEVFUElORykKKwkJCXdha2V1
cF9vbmUodmNwdSk7CisJfQorfQorCit2b2lkCit2Y3B1X25vdGlmeV9ldmVudChzdHJ1Y3Qgdm0g
KnZtLCBpbnQgdmNwdWlkLCBib29sIGxhcGljX2ludHIpCit7CisJc3RydWN0IHZjcHUgKnZjcHUg
PSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwl2Y3B1X25vdGlmeV9l
dmVudF9sb2NrZWQodmNwdSwgbGFwaWNfaW50cik7CisJdmNwdV91bmxvY2sodmNwdSk7Cit9CisK
K3N0cnVjdCB2bXNwYWNlICoKK3ZtX2dldF92bXNwYWNlKHN0cnVjdCB2bSAqdm0pCit7CisKKwly
ZXR1cm4gKHZtLT52bXNwYWNlKTsKK30KKworaW50Cit2bV9hcGljaWQydmNwdWlkKHN0cnVjdCB2
bSAqdm0sIGludCBhcGljaWQpCit7CisJLyoKKwkgKiBYWFggYXBpYyBpZCBpcyBhc3N1bWVkIHRv
IGJlIG51bWVyaWNhbGx5IGlkZW50aWNhbCB0byB2Y3B1IGlkCisJICovCisJcmV0dXJuIChhcGlj
aWQpOworfQorCit2b2lkCit2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg
KmFyZykKK3sKKwlpbnQgaTsKKworCS8qCisJICogRW5mb3JjZSB0aGF0IHRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzCisJICovCisJV0lUTkVTU19XQVJOKFdBUk5fUEFO
SUMsIE5VTEwsICJ2bV9zbXBfcmVuZGV6dm91cyIpOworCUtBU1NFUlQodmNwdWlkID09IC0xIHx8
ICh2Y3B1aWQgPj0gMCAmJiB2Y3B1aWQgPCBWTV9NQVhDUFUpLAorCSAgICAoInZtX3NtcF9yZW5k
ZXp2b3VzOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCkpOworCityZXN0YXJ0OgorCW10eF9s
b2NrKCZ2bS0+cmVuZGV6dm91c19tdHgpOworCWlmICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5V
TEwpIHsKKwkJLyoKKwkJICogSWYgYSByZW5kZXp2b3VzIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mg
dGhlbiB3ZSBuZWVkIHRvCisJCSAqIGNhbGwgdGhlIHJlbmRlenZvdXMgaGFuZGxlciBpbiBjYXNl
IHRoaXMgJ3ZjcHVpZCcgaXMgb25lCisJCSAqIG9mIHRoZSB0YXJnZXRzIG9mIHRoZSByZW5kZXp2
b3VzLgorCQkgKi8KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJSZW5kZXp2b3VzIGFs
cmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4KTsK
KwkJdm1faGFuZGxlX3JlbmRlenZvdXModm0sIHZjcHVpZCk7CisJCWdvdG8gcmVzdGFydDsKKwl9
CisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jID09IE5VTEwsICgidm1fc21wX3JlbmRlenZv
dXM6IHByZXZpb3VzICIKKwkgICAgInJlbmRlenZvdXMgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MiKSk7
CisKKwlSRU5ERVpWT1VTX0NUUjAodm0sIHZjcHVpZCwgIkluaXRpYXRpbmcgcmVuZGV6dm91cyIp
OworCXZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzID0gZGVzdDsKKwlDUFVfWkVSTygmdm0tPnJlbmRl
enZvdXNfZG9uZV9jcHVzKTsKKwl2bS0+cmVuZGV6dm91c19hcmcgPSBhcmc7CisJdm1fc2V0X3Jl
bmRlenZvdXNfZnVuYyh2bSwgZnVuYyk7CisJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4
KTsKKworCS8qCisJICogV2FrZSB1cCBhbnkgc2xlZXBpbmcgdmNwdXMgYW5kIHRyaWdnZXIgYSBW
TS1leGl0IGluIGFueSBydW5uaW5nCisJICogdmNwdXMgc28gdGhleSBoYW5kbGUgdGhlIHJlbmRl
enZvdXMgYXMgc29vbiBhcyBwb3NzaWJsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY
Q1BVOyBpKyspIHsKKwkJaWYgKENQVV9JU1NFVChpLCAmZGVzdCkpCisJCQl2Y3B1X25vdGlmeV9l
dmVudCh2bSwgaSwgZmFsc2UpOworCX0KKworCXZtX2hhbmRsZV9yZW5kZXp2b3VzKHZtLCB2Y3B1
aWQpOworfQorCitzdHJ1Y3QgdmF0cGljICoKK3ZtX2F0cGljKHN0cnVjdCB2bSAqdm0pCit7CisJ
cmV0dXJuICh2bS0+dmF0cGljKTsKK30KKworc3RydWN0IHZhdHBpdCAqCit2bV9hdHBpdChzdHJ1
Y3Qgdm0gKnZtKQoreworCXJldHVybiAodm0tPnZhdHBpdCk7Cit9CisKK3N0cnVjdCB2cG10bXIg
Kgordm1fcG10bXIoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPnZwbXRtcik7Cit9
CisKK3N0cnVjdCB2cnRjICoKK3ZtX3J0YyhzdHJ1Y3Qgdm0gKnZtKQoreworCisJcmV0dXJuICh2
bS0+dnJ0Yyk7Cit9CisKK2VudW0gdm1fcmVnX25hbWUKK3ZtX3NlZ21lbnRfbmFtZShpbnQgc2Vn
KQoreworCXN0YXRpYyBlbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lc1tdID0geworCQlWTV9SRUdf
R1VFU1RfRVMsCisJCVZNX1JFR19HVUVTVF9DUywKKwkJVk1fUkVHX0dVRVNUX1NTLAorCQlWTV9S
RUdfR1VFU1RfRFMsCisJCVZNX1JFR19HVUVTVF9GUywKKwkJVk1fUkVHX0dVRVNUX0dTCisJfTsK
KworCUtBU1NFUlQoc2VnID49IDAgJiYgc2VnIDwgbml0ZW1zKHNlZ19uYW1lcyksCisJICAgICgi
JXM6IGludmFsaWQgc2VnbWVudCBlbmNvZGluZyAlZCIsIF9fZnVuY19fLCBzZWcpKTsKKwlyZXR1
cm4gKHNlZ19uYW1lc1tzZWddKTsKK30KKwordm9pZAordm1fY29weV90ZWFyZG93bihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGlu
dCBudW1fY29weWluZm8pCit7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnVt
X2NvcHlpbmZvOyBpZHgrKykgeworCQlpZiAoY29weWluZm9baWR4XS5jb29raWUgIT0gTlVMTCkK
KwkJCXZtX2dwYV9yZWxlYXNlKGNvcHlpbmZvW2lkeF0uY29va2llKTsKKwl9CisJYnplcm8oY29w
eWluZm8sIG51bV9jb3B5aW5mbyAqIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pKTsKK30KKwor
aW50Cit2bV9jb3B5X3NldHVwKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9n
dWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBw
cm90LCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8s
IGludCAqZmF1bHQpCit7CisJaW50IGVycm9yLCBpZHgsIG51c2VkOworCXNpemVfdCBuLCBvZmYs
IHJlbWFpbmluZzsKKwl2b2lkICpodmEsICpjb29raWU7CisJdWludDY0X3QgZ3BhOworCisJYnpl
cm8oY29weWluZm8sIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pICogbnVtX2NvcHlpbmZvKTsK
KworCW51c2VkID0gMDsKKwlyZW1haW5pbmcgPSBsZW47CisJd2hpbGUgKHJlbWFpbmluZyA+IDAp
IHsKKwkJS0FTU0VSVChudXNlZCA8IG51bV9jb3B5aW5mbywgKCJpbnN1ZmZpY2llbnQgdm1fY29w
eWluZm8iKSk7CisJCWVycm9yID0gdm1fZ2xhMmdwYSh2bSwgdmNwdWlkLCBwYWdpbmcsIGdsYSwg
cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl
cnJvcik7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJbiA9IG1pbihyZW1haW5pbmcsIFBB
R0VfU0laRSAtIG9mZik7CisJCWNvcHlpbmZvW251c2VkXS5ncGEgPSBncGE7CisJCWNvcHlpbmZv
W251c2VkXS5sZW4gPSBuOworCQlyZW1haW5pbmcgLT0gbjsKKwkJZ2xhICs9IG47CisJCW51c2Vk
Kys7CisJfQorCisJZm9yIChpZHggPSAwOyBpZHggPCBudXNlZDsgaWR4KyspIHsKKwkJaHZhID0g
dm1fZ3BhX2hvbGQodm0sIHZjcHVpZCwgY29weWluZm9baWR4XS5ncGEsCisJCSAgICBjb3B5aW5m
b1tpZHhdLmxlbiwgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChodmEgPT0gTlVMTCkKKwkJCWJyZWFr
OworCQljb3B5aW5mb1tpZHhdLmh2YSA9IGh2YTsKKwkJY29weWluZm9baWR4XS5jb29raWUgPSBj
b29raWU7CisJfQorCisJaWYgKGlkeCAhPSBudXNlZCkgeworCQl2bV9jb3B5X3RlYXJkb3duKHZt
LCB2Y3B1aWQsIGNvcHlpbmZvLCBudW1fY29weWluZm8pOworCQlyZXR1cm4gKEVGQVVMVCk7CisJ
fSBlbHNlIHsKKwkJKmZhdWx0ID0gMDsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3ZvaWQKK3Zt
X2NvcHlpbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNv
cHlpbmZvLCB2b2lkICprYWRkciwKKyAgICBzaXplX3QgbGVuKQoreworCWNoYXIgKmRzdDsKKwlp
bnQgaWR4OworCQorCWRzdCA9IGthZGRyOworCWlkeCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsK
KwkJYmNvcHkoY29weWluZm9baWR4XS5odmEsIGRzdCwgY29weWluZm9baWR4XS5sZW4pOworCQls
ZW4gLT0gY29weWluZm9baWR4XS5sZW47CisJCWRzdCArPSBjb3B5aW5mb1tpZHhdLmxlbjsKKwkJ
aWR4Kys7CisJfQorfQorCit2b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8s
IHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqc3JjOworCWludCBpZHg7CisKKwlzcmMgPSBr
YWRkcjsKKwlpZHggPSAwOworCXdoaWxlIChsZW4gPiAwKSB7CisJCWJjb3B5KHNyYywgY29weWlu
Zm9baWR4XS5odmEsIGNvcHlpbmZvW2lkeF0ubGVuKTsKKwkJbGVuIC09IGNvcHlpbmZvW2lkeF0u
bGVuOworCQlzcmMgKz0gY29weWluZm9baWR4XS5sZW47CisJCWlkeCsrOworCX0KK30KKworLyoK
KyAqIFJldHVybiB0aGUgYW1vdW50IG9mIGluLXVzZSBhbmQgd2lyZWQgbWVtb3J5IGZvciB0aGUg
Vk0uIFNpbmNlCisgKiB0aGVzZSBhcmUgZ2xvYmFsIHN0YXRzLCBvbmx5IHJldHVybiB0aGUgdmFs
dWVzIHdpdGggZm9yIHZDUFUgMAorICovCitWTU1fU1RBVF9ERUNMQVJFKFZNTV9NRU1fUkVTSURF
TlQpOworVk1NX1NUQVRfREVDTEFSRShWTU1fTUVNX1dJUkVEKTsKKworc3RhdGljIHZvaWQKK3Zt
X2dldF9yZXNjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBl
ICpzdGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUs
IFZNTV9NRU1fUkVTSURFTlQsCisJICAgICAgIAkgICAgUEFHRV9TSVpFICogdm1zcGFjZV9yZXNp
ZGVudF9jb3VudCh2bS0+dm1zcGFjZSkpOworCX0JCit9CisKK3N0YXRpYyB2b2lkCit2bV9nZXRf
d2lyZWRjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBlICpz
dGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUsIFZN
TV9NRU1fV0lSRUQsCisJICAgICAgCSAgICBQQUdFX1NJWkUgKiBwbWFwX3dpcmVkX2NvdW50KHZt
c3BhY2VfcG1hcCh2bS0+dm1zcGFjZSkpKTsKKwl9CQorfQorCitWTU1fU1RBVF9GVU5DKFZNTV9N
RU1fUkVTSURFTlQsICJSZXNpZGVudCBtZW1vcnkiLCB2bV9nZXRfcmVzY250KTsKK1ZNTV9TVEFU
X0ZVTkMoVk1NX01FTV9XSVJFRCwgIldpcmVkIG1lbW9yeSIsIHZtX2dldF93aXJlZGNudCk7CmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYyAvdXNyL3NyYy9zeXMv
YW1kNjQvdm1tL3ZtbV9kZXYuYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYwky
MDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fZGV2LmMJMjAxNi0xMS0zMCAxMDo1NjowNS43OTI3NDUwMDAgKzAwMDAKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlICJ2bW1fbGFwaWMuaCIKICNpbmNsdWRlICJ2bW1fc3RhdC5o
IgogI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCiAjaW5jbHVk
ZSAiaW8vcHB0LmgiCiAjaW5jbHVkZSAiaW8vdmF0cGljLmgiCiAjaW5jbHVkZSAiaW8vdmlvYXBp
Yy5oIgpAQCAtMzAwLDYgKzMwMSw4IEBACiAJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlv
OwogCXN0cnVjdCB2bV9wcHRkZXZfbXNpICpwcHRtc2k7CiAJc3RydWN0IHZtX3BwdGRldl9tc2l4
ICpwcHRtc2l4OworCXN0cnVjdCB2bV91c2VyX2J1ZiAqdXNlcm1lbTsKKwlzdHJ1Y3Qgdm1faW9f
cmVnX2hhbmRsZXIgKmlvcmVnaDsKIAlzdHJ1Y3Qgdm1fbm1pICp2bW5taTsKIAlzdHJ1Y3Qgdm1f
c3RhdHMgKnZtc3RhdHM7CiAJc3RydWN0IHZtX3N0YXRfZGVzYyAqc3RhdGRlc2M7CkBAIC0zNTgs
NiArMzYxLDcgQEAKIAljYXNlIFZNX1VOQklORF9QUFRERVY6CiAJY2FzZSBWTV9BTExPQ19NRU1T
RUc6CiAJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX01BUF9VU0VSX0JVRjoKIAljYXNl
IFZNX1JFSU5JVDoKIAkJLyoKIAkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJl
IHZpcnR1YWwgbWFjaGluZSBtdXN0CkBAIC00MzMsNiArNDM3LDE2IEBACiAJCQkJICAgICBwcHRt
bWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1taW8tPmxlbiwKIAkJCQkgICAgIHBwdG1taW8t
PmhwYSk7CiAJCWJyZWFrOworCWNhc2UgVk1fTUFQX1VTRVJfQlVGOgorCQl1c2VybWVtID0gKHN0
cnVjdCB2bV91c2VyX2J1ZiAqKWRhdGE7CisJCWVycm9yID0gdm1fbWFwX3VzZXJtZW0oc2MtPnZt
LCB1c2VybWVtLT5ncGEsIHVzZXJtZW0tPmxlbiwKKwkJCQkJdXNlcm1lbS0+YWRkciwgdGQpOwor
CQlicmVhazsKKwljYXNlIFZNX0lPX1JFR19IQU5ETEVSOgorCQlpb3JlZ2ggPSAoc3RydWN0IHZt
X2lvX3JlZ19oYW5kbGVyICopZGF0YTsKKwkJZXJyb3IgPSB2bW1faW9wb3J0X3JlZ19oYW5kbGVy
KHNjLT52bSwgaW9yZWdoLT5wb3J0LCBpb3JlZ2gtPmluLCBpb3JlZ2gtPm1hc2tfZGF0YSwKKwkJ
CQkJaW9yZWdoLT5kYXRhLCBpb3JlZ2gtPnR5cGUsIGlvcmVnaC0+YXJnKTsKKwkJYnJlYWs7CiAJ
Y2FzZSBWTV9CSU5EX1BQVERFVjoKIAkJcHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRh
OwogCQllcnJvciA9IHZtX2Fzc2lnbl9wcHRkZXYoc2MtPnZtLCBwcHRkZXYtPmJ1cywgcHB0ZGV2
LT5zbG90LApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMub3Jp
ZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYy5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h
bWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMjAxNi0xMS0zMCAx
MDo1Mjo1OC40NTkwMTYwMDAgKzAwMDAKQEAgLTAsMCArMSw5ODMgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVEFQUCwgSU5DIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYgMTk6NDE6NDNa
IG5lZWwgJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYg
MTk6NDE6NDNaIG5lZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr
Lmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2lu
Y2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5
cy9saWJrZXJuLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2luY2x1ZGUgPHN5cy9tbWFu
Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRl
IDx2bS9wbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fb2Jq
ZWN0Lmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L3ZtbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKworI2luY2x1ZGUgInZtbV9sYXBpYy5oIgorI2luY2x1
ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX21lbS5oIgorI2luY2x1ZGUgImlvL3BwdC5o
IgorI2luY2x1ZGUgImlvL3ZhdHBpYy5oIgorI2luY2x1ZGUgImlvL3Zpb2FwaWMuaCIKKyNpbmNs
dWRlICJpby92aHBldC5oIgorI2luY2x1ZGUgImlvL3ZydGMuaCIKKworc3RydWN0IGRldm1lbV9z
b2Z0YyB7CisJaW50CXNlZ2lkOworCWNoYXIJKm5hbWU7CisJc3RydWN0IGNkZXYgKmNkZXY7CisJ
c3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJU0xJU1RfRU5UUlkoZGV2bWVtX3NvZnRjKSBsaW5r
OworfTsKKworc3RydWN0IHZtbWRldl9zb2Z0YyB7CisJc3RydWN0IHZtCSp2bTsJCS8qIHZtIGlu
c3RhbmNlIGNvb2tpZSAqLworCXN0cnVjdCBjZGV2CSpjZGV2OworCVNMSVNUX0VOVFJZKHZtbWRl
dl9zb2Z0YykgbGluazsKKwlTTElTVF9IRUFEKCwgZGV2bWVtX3NvZnRjKSBkZXZtZW07CisJaW50
CQlmbGFnczsKK307CisjZGVmaW5lCVZTQ19MSU5LRUQJCTB4MDEKKworc3RhdGljIFNMSVNUX0hF
QUQoLCB2bW1kZXZfc29mdGMpIGhlYWQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXR4IHZtbWRldl9tdHg7
CisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk1NREVWLCAidm1tZGV2IiwgInZtbWRldiIpOwor
CitTWVNDVExfREVDTChfaHdfdm1tKTsKKworc3RhdGljIGludCBkZXZtZW1fY3JlYXRlX2NkZXYo
Y29uc3QgY2hhciAqdm1uYW1lLCBpbnQgaWQsIGNoYXIgKmRldm1lbSk7CitzdGF0aWMgdm9pZCBk
ZXZtZW1fZGVzdHJveSh2b2lkICphcmcpOworCitzdGF0aWMgaW50Cit2Y3B1X2xvY2tfb25lKHN0
cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBpbnQgdmNwdSkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAo
dmNwdSA8IDAgfHwgdmNwdSA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVy
cm9yID0gdmNwdV9zZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBWQ1BVX0ZST1pFTiwgdHJ1ZSk7CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X3VubG9ja19vbmUoc3RydWN0
IHZtbWRldl9zb2Z0YyAqc2MsIGludCB2Y3B1KQoreworCWVudW0gdmNwdV9zdGF0ZSBzdGF0ZTsK
KworCXN0YXRlID0gdmNwdV9nZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBOVUxMKTsKKwlpZiAoc3Rh
dGUgIT0gVkNQVV9GUk9aRU4pIHsKKwkJcGFuaWMoInZjcHUgJXMoJWQpIGhhcyBpbnZhbGlkIHN0
YXRlICVkIiwgdm1fbmFtZShzYy0+dm0pLAorCQkgICAgdmNwdSwgc3RhdGUpOworCX0KKworCXZj
cHVfc2V0X3N0YXRlKHNjLT52bSwgdmNwdSwgVkNQVV9JRExFLCBmYWxzZSk7Cit9CisKK3N0YXRp
YyBpbnQKK3ZjcHVfbG9ja19hbGwoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MpCit7CisJaW50IGVy
cm9yLCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKSB7
CisJCWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWJy
ZWFrOworCX0KKworCWlmIChlcnJvcikgeworCQl3aGlsZSAoLS12Y3B1ID49IDApCisJCQl2Y3B1
X3VubG9ja19vbmUoc2MsIHZjcHUpOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0
aWMgdm9pZAordmNwdV91bmxvY2tfYWxsKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjKQoreworCWlu
dCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKQorCQl2
Y3B1X3VubG9ja19vbmUoc2MsIHZjcHUpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0
YyAqCit2bW1kZXZfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHZtbWRldl9z
b2Z0YyAqc2M7CisKKyNpZmRlZiBub3R5ZXQJLyogWFhYIGtlcm5lbCBpcyBub3QgY29tcGlsZWQg
d2l0aCBpbnZhcmlhbnRzICovCisJbXR4X2Fzc2VydCgmdm1tZGV2X210eCwgTUFfT1dORUQpOwor
I2VuZGlmCisKKwlTTElTVF9GT1JFQUNIKHNjLCAmaGVhZCwgbGluaykgeworCQlpZiAoc3RyY21w
KG5hbWUsIHZtX25hbWUoc2MtPnZtKSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAo
c2MpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0YyAqCit2bW1kZXZfbG9va3VwMihz
dHJ1Y3QgY2RldiAqY2RldikKK3sKKworCXJldHVybiAoY2Rldi0+c2lfZHJ2MSk7Cit9CisKK3N0
YXRpYyBpbnQKK3ZtbWRldl9ydyhzdHJ1Y3QgY2RldiAqY2Rldiwgc3RydWN0IHVpbyAqdWlvLCBp
bnQgZmxhZ3MpCit7CisJaW50IGVycm9yLCBvZmYsIGMsIHByb3Q7CisJdm1fcGFkZHJfdCBncGE7
CisJdm9pZCAqaHBhLCAqY29va2llOworCXN0cnVjdCB2bW1kZXZfc29mdGMgKnNjOworCisJc2Mg
PSB2bW1kZXZfbG9va3VwMihjZGV2KTsKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJ
Tyk7CisKKwkvKgorCSAqIEdldCBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCBi
eSBmcmVlemluZyBhbnkgdmNwdS4KKwkgKi8KKwllcnJvciA9IHZjcHVfbG9ja19vbmUoc2MsIFZN
X01BWENQVSAtIDEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwlwcm90ID0g
KHVpby0+dWlvX3J3ID09IFVJT19XUklURSA/IFZNX1BST1RfV1JJVEUgOiBWTV9QUk9UX1JFQUQp
OworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDAgJiYgZXJyb3IgPT0gMCkgeworCQlncGEgPSB1
aW8tPnVpb19vZmZzZXQ7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJYyA9IG1pbih1aW8t
PnVpb19yZXNpZCwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkvKgorCQkgKiBUaGUgVk0gaGFzIGEg
aG9sZSBpbiBpdHMgcGh5c2ljYWwgbWVtb3J5IG1hcC4gSWYgd2Ugd2FudCB0bworCQkgKiB1c2Ug
J2RkJyB0byBpbnNwZWN0IG1lbW9yeSBiZXlvbmQgdGhlIGhvbGUgd2UgbmVlZCB0bworCQkgKiBw
cm92aWRlIGJvZ3VzIGRhdGEgZm9yIG1lbW9yeSB0aGF0IGxpZXMgaW4gdGhlIGhvbGUuCisJCSAq
CisJCSAqIFNpbmNlIHRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbHNlZWsoMiksIGRkKDEp
IHdpbGwKKwkJICogcmVhZCgyKSBibG9ja3Mgb2YgZGF0YSB0byBzaW11bGF0ZSB0aGUgbHNlZWso
MikuCisJCSAqLworCQlocGEgPSB2bV9ncGFfaG9sZChzYy0+dm0sIFZNX01BWENQVSAtIDEsIGdw
YSwgYywgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChocGEgPT0gTlVMTCkgeworCQkJaWYgKHVpby0+
dWlvX3J3ID09IFVJT19SRUFEKQorCQkJCWVycm9yID0gdWlvbW92ZShfX0RFQ09OU1Qodm9pZCAq
LCB6ZXJvX3JlZ2lvbiksCisJCQkJICAgIGMsIHVpbyk7CisJCQllbHNlCisJCQkJZXJyb3IgPSBF
RkFVTFQ7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IHVpb21vdmUoaHBhLCBjLCB1aW8pOworCQkJ
dm1fZ3BhX3JlbGVhc2UoY29va2llKTsKKwkJfQorCX0KKwl2Y3B1X3VubG9ja19vbmUoc2MsIFZN
X01BWENQVSAtIDEpOworCXJldHVybiAoZXJyb3IpOworfQorCitDVEFTU0VSVChzaXplb2YoKChz
dHJ1Y3Qgdm1fbWVtc2VnICopMCktPm5hbWUpID49IFNQRUNOQU1FTEVOICsgMSk7CisKK3N0YXRp
YyBpbnQKK2dldF9tZW1zZWcoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MsIHN0cnVjdCB2bV9tZW1z
ZWcgKm1zZWcpCit7CisJc3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKwli
b29sIHN5c21lbTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk
LCAmbXNlZy0+bGVuLCAmc3lzbWVtLCBOVUxMKTsKKwlpZiAoZXJyb3IgfHwgbXNlZy0+bGVuID09
IDApCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKCFzeXNtZW0pIHsKKwkJU0xJU1RfRk9SRUFD
SChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCQlpZiAoZHNjLT5zZWdpZCA9PSBtc2VnLT5z
ZWdpZCkKKwkJCQlicmVhazsKKwkJfQorCQlLQVNTRVJUKGRzYyAhPSBOVUxMLCAoIiVzOiBkZXZt
ZW0gc2VnbWVudCAlZCBub3QgZm91bmQiLAorCQkgICAgX19mdW5jX18sIG1zZWctPnNlZ2lkKSk7
CisJCWVycm9yID0gY29weXN0cihkc2MtPm5hbWUsIG1zZWctPm5hbWUsIFNQRUNOQU1FTEVOICsg
MSwgTlVMTCk7CisJfSBlbHNlIHsKKwkJYnplcm8obXNlZy0+bmFtZSwgc2l6ZW9mKG1zZWctPm5h
bWUpKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorYWxsb2NfbWVt
c2VnKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBzdHJ1Y3Qgdm1fbWVtc2VnICptc2VnKQorewor
CWNoYXIgKm5hbWU7CisJaW50IGVycm9yOworCWJvb2wgc3lzbWVtOworCisJZXJyb3IgPSAwOwor
CW5hbWUgPSBOVUxMOworCXN5c21lbSA9IHRydWU7CisKKwlpZiAoVk1fTUVNU0VHX05BTUUobXNl
ZykpIHsKKwkJc3lzbWVtID0gZmFsc2U7CisJCW5hbWUgPSBtYWxsb2MoU1BFQ05BTUVMRU4gKyAx
LCBNX1ZNTURFViwgTV9XQUlUT0spOworCQllcnJvciA9IGNvcHlzdHIoVk1fTUVNU0VHX05BTUUo
bXNlZyksIG5hbWUsIFNQRUNOQU1FTEVOICsgMSwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g
ZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk
LCBtc2VnLT5sZW4sIHN5c21lbSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGRvbmU7CisKKwlpZiAo
Vk1fTUVNU0VHX05BTUUobXNlZykpIHsKKwkJZXJyb3IgPSBkZXZtZW1fY3JlYXRlX2NkZXYodm1f
bmFtZShzYy0+dm0pLCBtc2VnLT5zZWdpZCwgbmFtZSk7CisJCWlmIChlcnJvcikKKwkJCXZtX2Zy
ZWVfbWVtc2VnKHNjLT52bSwgbXNlZy0+c2VnaWQpOworCQllbHNlCisJCQluYW1lID0gTlVMTDsJ
LyogZnJlZWQgd2hlbiAnY2RldicgaXMgZGVzdHJveWVkICovCisJfQorZG9uZToKKwlmcmVlKG5h
bWUsIE1fVk1NREVWKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAordm1tZGV2
X2lvY3RsKHN0cnVjdCBjZGV2ICpjZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBm
ZmxhZywKKwkgICAgIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJvciwgdmNwdSwgc3Rh
dGVfY2hhbmdlZCwgc2l6ZTsKKwljcHVzZXRfdCAqY3B1c2V0OworCXN0cnVjdCB2bW1kZXZfc29m
dGMgKnNjOworCXN0cnVjdCB2bV9yZWdpc3RlciAqdm1yZWc7CisJc3RydWN0IHZtX3NlZ19kZXNj
ICp2bXNlZ2Rlc2M7CisJc3RydWN0IHZtX3J1biAqdm1ydW47CisJc3RydWN0IHZtX2V4Y2VwdGlv
biAqdm1leGM7CisJc3RydWN0IHZtX2xhcGljX2lycSAqdm1pcnE7CisJc3RydWN0IHZtX2xhcGlj
X21zaSAqdm1tc2k7CisJc3RydWN0IHZtX2lvYXBpY19pcnEgKmlvYXBpY19pcnE7CisJc3RydWN0
IHZtX2lzYV9pcnEgKmlzYV9pcnE7CisJc3RydWN0IHZtX2lzYV9pcnFfdHJpZ2dlciAqaXNhX2ly
cV90cmlnZ2VyOworCXN0cnVjdCB2bV9jYXBhYmlsaXR5ICp2bWNhcDsKKwlzdHJ1Y3Qgdm1fcHB0
ZGV2ICpwcHRkZXY7CisJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlvOworCXN0cnVjdCB2
bV9wcHRkZXZfbXNpICpwcHRtc2k7CisJc3RydWN0IHZtX3BwdGRldl9tc2l4ICpwcHRtc2l4Owor
CXN0cnVjdCB2bV9ubWkgKnZtbm1pOworCXN0cnVjdCB2bV9zdGF0cyAqdm1zdGF0czsKKwlzdHJ1
Y3Qgdm1fc3RhdF9kZXNjICpzdGF0ZGVzYzsKKwlzdHJ1Y3Qgdm1feDJhcGljICp4MmFwaWM7CisJ
c3RydWN0IHZtX2dwYV9wdGUgKmdwYXB0ZTsKKwlzdHJ1Y3Qgdm1fc3VzcGVuZCAqdm1zdXNwZW5k
OworCXN0cnVjdCB2bV9nbGEyZ3BhICpnZzsKKwlzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1ICp2YWM7
CisJc3RydWN0IHZtX2NwdXNldCAqdm1fY3B1c2V0OworCXN0cnVjdCB2bV9pbnRpbmZvICp2bWlp
OworCXN0cnVjdCB2bV9ydGNfdGltZSAqcnRjdGltZTsKKwlzdHJ1Y3Qgdm1fcnRjX2RhdGEgKnJ0
Y2RhdGE7CisJc3RydWN0IHZtX21lbW1hcCAqbW07CisKKwlzYyA9IHZtbWRldl9sb29rdXAyKGNk
ZXYpOworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWVycm9yID0gMDsK
Kwl2Y3B1ID0gLTE7CisJc3RhdGVfY2hhbmdlZCA9IDA7CisKKwkvKgorCSAqIFNvbWUgVk1NIGlv
Y3RscyBjYW4gb3BlcmF0ZSBvbmx5IG9uIHZjcHVzIHRoYXQgYXJlIG5vdCBydW5uaW5nLgorCSAq
LworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWTV9SVU46CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6
CisJY2FzZSBWTV9TRVRfUkVHSVNURVI6CisJY2FzZSBWTV9HRVRfU0VHTUVOVF9ERVNDUklQVE9S
OgorCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwljYXNlIFZNX0lOSkVDVF9FWENF
UFRJT046CisJY2FzZSBWTV9HRVRfQ0FQQUJJTElUWToKKwljYXNlIFZNX1NFVF9DQVBBQklMSVRZ
OgorCWNhc2UgVk1fUFBUREVWX01TSToKKwljYXNlIFZNX1BQVERFVl9NU0lYOgorCWNhc2UgVk1f
U0VUX1gyQVBJQ19TVEFURToKKwljYXNlIFZNX0dMQTJHUEE6CisJY2FzZSBWTV9BQ1RJVkFURV9D
UFU6CisJY2FzZSBWTV9TRVRfSU5USU5GTzoKKwljYXNlIFZNX0dFVF9JTlRJTkZPOgorCWNhc2Ug
Vk1fUkVTVEFSVF9JTlNUUlVDVElPTjoKKwkJLyoKKwkJICogWFhYIGZyYWdpbGUsIGhhbmRsZSB3
aXRoIGNhcmUKKwkJICogQXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgaW9jdGwg
ZGF0YSBpcyB0aGUgdmNwdS4KKwkJICovCisJCXZjcHUgPSAqKGludCAqKWRhdGE7CisJCWVycm9y
ID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9uZTsK
KwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBWTV9NQVBfUFBUREVWX01N
SU86CisJY2FzZSBWTV9CSU5EX1BQVERFVjoKKwljYXNlIFZNX1VOQklORF9QUFRERVY6CisJY2Fz
ZSBWTV9BTExPQ19NRU1TRUc6CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX1JFSU5J
VDoKKwkJLyoKKwkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHZpcnR1YWwg
bWFjaGluZSBtdXN0CisJCSAqIHByZXZlbnQgYWxsIHZjcHVzIGZyb20gcnVubmluZy4KKwkJICov
CisJCWVycm9yID0gdmNwdV9sb2NrX2FsbChzYyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9u
ZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBWTV9HRVRfTUVNU0VH
OgorCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQkvKgorCQkgKiBMb2NrIGEgdmNwdSB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgbWVtb3J5IG1hcCBjYW5ub3QgYmUKKwkJICogbW9kaWZpZWQgd2hpbGUg
aXQgaXMgYmVpbmcgaW5zcGVjdGVkLgorCQkgKi8KKwkJdmNwdSA9IFZNX01BWENQVSAtIDE7CisJ
CWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g
ZG9uZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJl
YWs7CisJfQorCisJc3dpdGNoKGNtZCkgeworCWNhc2UgVk1fUlVOOgorCQl2bXJ1biA9IChzdHJ1
Y3Qgdm1fcnVuICopZGF0YTsKKwkJZXJyb3IgPSB2bV9ydW4oc2MtPnZtLCB2bXJ1bik7CisJCWJy
ZWFrOworCWNhc2UgVk1fU1VTUEVORDoKKwkJdm1zdXNwZW5kID0gKHN0cnVjdCB2bV9zdXNwZW5k
ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zdXNwZW5kKHNjLT52bSwgdm1zdXNwZW5kLT5ob3cpOwor
CQlicmVhazsKKwljYXNlIFZNX1JFSU5JVDoKKwkJZXJyb3IgPSB2bV9yZWluaXQoc2MtPnZtKTsK
KwkJYnJlYWs7CisJY2FzZSBWTV9TVEFUX0RFU0M6IHsKKwkJc3RhdGRlc2MgPSAoc3RydWN0IHZt
X3N0YXRfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1tX3N0YXRfZGVzY19jb3B5KHN0YXRkZXNj
LT5pbmRleCwKKwkJCQkJc3RhdGRlc2MtPmRlc2MsIHNpemVvZihzdGF0ZGVzYy0+ZGVzYykpOwor
CQlicmVhazsKKwl9CisJY2FzZSBWTV9TVEFUUzogeworCQlDVEFTU0VSVChNQVhfVk1fU1RBVFMg
Pj0gTUFYX1ZNTV9TVEFUX0VMRU1TKTsKKwkJdm1zdGF0cyA9IChzdHJ1Y3Qgdm1fc3RhdHMgKilk
YXRhOworCQlnZXRtaWNyb3RpbWUoJnZtc3RhdHMtPnR2KTsKKwkJZXJyb3IgPSB2bW1fc3RhdF9j
b3B5KHNjLT52bSwgdm1zdGF0cy0+Y3B1aWQsCisJCQkJICAgICAgJnZtc3RhdHMtPm51bV9lbnRy
aWVzLCB2bXN0YXRzLT5zdGF0YnVmKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fUFBUREVWX01T
SToKKwkJcHB0bXNpID0gKHN0cnVjdCB2bV9wcHRkZXZfbXNpICopZGF0YTsKKwkJZXJyb3IgPSBw
cHRfc2V0dXBfbXNpKHNjLT52bSwgcHB0bXNpLT52Y3B1LAorCQkJCSAgICAgIHBwdG1zaS0+YnVz
LCBwcHRtc2ktPnNsb3QsIHBwdG1zaS0+ZnVuYywKKwkJCQkgICAgICBwcHRtc2ktPmFkZHIsIHBw
dG1zaS0+bXNnLAorCQkJCSAgICAgIHBwdG1zaS0+bnVtdmVjKTsKKwkJYnJlYWs7CisJY2FzZSBW
TV9QUFRERVZfTVNJWDoKKwkJcHB0bXNpeCA9IChzdHJ1Y3Qgdm1fcHB0ZGV2X21zaXggKilkYXRh
OworCQllcnJvciA9IHBwdF9zZXR1cF9tc2l4KHNjLT52bSwgcHB0bXNpeC0+dmNwdSwKKwkJCQkg
ICAgICAgcHB0bXNpeC0+YnVzLCBwcHRtc2l4LT5zbG90LCAKKwkJCQkgICAgICAgcHB0bXNpeC0+
ZnVuYywgcHB0bXNpeC0+aWR4LAorCQkJCSAgICAgICBwcHRtc2l4LT5hZGRyLCBwcHRtc2l4LT5t
c2csCisJCQkJICAgICAgIHBwdG1zaXgtPnZlY3Rvcl9jb250cm9sKTsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9NQVBfUFBUREVWX01NSU86CisJCXBwdG1taW8gPSAoc3RydWN0IHZtX3BwdGRldl9tbWlv
ICopZGF0YTsKKwkJZXJyb3IgPSBwcHRfbWFwX21taW8oc2MtPnZtLCBwcHRtbWlvLT5idXMsIHBw
dG1taW8tPnNsb3QsCisJCQkJICAgICBwcHRtbWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1t
aW8tPmxlbiwKKwkJCQkgICAgIHBwdG1taW8tPmhwYSk7CisJCWJyZWFrOworCWNhc2UgVk1fQklO
RF9QUFRERVY6CisJCXBwdGRldiA9IChzdHJ1Y3Qgdm1fcHB0ZGV2ICopZGF0YTsKKwkJZXJyb3Ig
PSB2bV9hc3NpZ25fcHB0ZGV2KHNjLT52bSwgcHB0ZGV2LT5idXMsIHBwdGRldi0+c2xvdCwKKwkJ
CQkJIHBwdGRldi0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fVU5CSU5EX1BQVERFVjoKKwkJ
cHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRhOworCQllcnJvciA9IHZtX3VuYXNzaWdu
X3BwdGRldihzYy0+dm0sIHBwdGRldi0+YnVzLCBwcHRkZXYtPnNsb3QsCisJCQkJCSAgIHBwdGRl
di0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fSU5KRUNUX0VYQ0VQVElPTjoKKwkJdm1leGMg
PSAoc3RydWN0IHZtX2V4Y2VwdGlvbiAqKWRhdGE7CisJCWVycm9yID0gdm1faW5qZWN0X2V4Y2Vw
dGlvbihzYy0+dm0sIHZtZXhjLT5jcHVpZCwKKwkJICAgIHZtZXhjLT52ZWN0b3IsIHZtZXhjLT5l
cnJvcl9jb2RlX3ZhbGlkLCB2bWV4Yy0+ZXJyb3JfY29kZSwKKwkJICAgIHZtZXhjLT5yZXN0YXJ0
X2luc3RydWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JTkpFQ1RfTk1JOgorCQl2bW5taSA9
IChzdHJ1Y3Qgdm1fbm1pICopZGF0YTsKKwkJZXJyb3IgPSB2bV9pbmplY3Rfbm1pKHNjLT52bSwg
dm1ubWktPmNwdWlkKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9MQVBJQ19JUlE6CisJCXZtaXJxID0g
KHN0cnVjdCB2bV9sYXBpY19pcnEgKilkYXRhOworCQllcnJvciA9IGxhcGljX2ludHJfZWRnZShz
Yy0+dm0sIHZtaXJxLT5jcHVpZCwgdm1pcnEtPnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVk1f
TEFQSUNfTE9DQUxfSVJROgorCQl2bWlycSA9IChzdHJ1Y3Qgdm1fbGFwaWNfaXJxICopZGF0YTsK
KwkJZXJyb3IgPSBsYXBpY19zZXRfbG9jYWxfaW50cihzYy0+dm0sIHZtaXJxLT5jcHVpZCwKKwkJ
ICAgIHZtaXJxLT52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFZNX0xBUElDX01TSToKKwkJdm1t
c2kgPSAoc3RydWN0IHZtX2xhcGljX21zaSAqKWRhdGE7CisJCWVycm9yID0gbGFwaWNfaW50cl9t
c2koc2MtPnZtLCB2bW1zaS0+YWRkciwgdm1tc2ktPm1zZyk7CisJCWJyZWFrOworCWNhc2UgVk1f
SU9BUElDX0FTU0VSVF9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg
KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfYXNzZXJ0X2lycShzYy0+dm0sIGlvYXBpY19pcnEt
PmlycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9BUElDX0RFQVNTRVJUX0lSUToKKwkJaW9hcGlj
X2lycSA9IChzdHJ1Y3Qgdm1faW9hcGljX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmlvYXBpY19k
ZWFzc2VydF9pcnEoc2MtPnZtLCBpb2FwaWNfaXJxLT5pcnEpOworCQlicmVhazsKKwljYXNlIFZN
X0lPQVBJQ19QVUxTRV9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg
KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfcHVsc2VfaXJxKHNjLT52bSwgaW9hcGljX2lycS0+
aXJxKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JT0FQSUNfUElOQ09VTlQ6CisJCSooaW50ICopZGF0
YSA9IHZpb2FwaWNfcGluY291bnQoc2MtPnZtKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JU0FfQVNT
RVJUX0lSUToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9y
ID0gdmF0cGljX2Fzc2VydF9pcnEoc2MtPnZtLCBpc2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAo
ZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNfaXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9h
cGljX2Fzc2VydF9pcnEoc2MtPnZtLAorCQkJICAgIGlzYV9pcnEtPmlvYXBpY19pcnEpOworCQli
cmVhazsKKwljYXNlIFZNX0lTQV9ERUFTU0VSVF9JUlE6CisJCWlzYV9pcnEgPSAoc3RydWN0IHZt
X2lzYV9pcnEgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19kZWFzc2VydF9pcnEoc2MtPnZtLCBp
c2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAoZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNf
aXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9hcGljX2RlYXNzZXJ0X2lycShzYy0+dm0sCisJCQkg
ICAgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSVNBX1BVTFNFX0lS
UToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmF0
cGljX3B1bHNlX2lycShzYy0+dm0sIGlzYV9pcnEtPmF0cGljX2lycSk7CisJCWlmIChlcnJvciA9
PSAwICYmIGlzYV9pcnEtPmlvYXBpY19pcnEgIT0gLTEpCisJCQllcnJvciA9IHZpb2FwaWNfcHVs
c2VfaXJxKHNjLT52bSwgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1f
SVNBX1NFVF9JUlFfVFJJR0dFUjoKKwkJaXNhX2lycV90cmlnZ2VyID0gKHN0cnVjdCB2bV9pc2Ff
aXJxX3RyaWdnZXIgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19zZXRfaXJxX3RyaWdnZXIoc2Mt
PnZtLAorCQkgICAgaXNhX2lycV90cmlnZ2VyLT5hdHBpY19pcnEsIGlzYV9pcnFfdHJpZ2dlci0+
dHJpZ2dlcik7CisJCWJyZWFrOworCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQltbSA9IChzdHJ1
Y3Qgdm1fbWVtbWFwICopZGF0YTsKKwkJZXJyb3IgPSB2bV9tbWFwX2dldG5leHQoc2MtPnZtLCAm
bW0tPmdwYSwgJm1tLT5zZWdpZCwKKwkJICAgICZtbS0+c2Vnb2ZmLCAmbW0tPmxlbiwgJm1tLT5w
cm90LCAmbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwkJbW0g
PSAoc3RydWN0IHZtX21lbW1hcCAqKWRhdGE7CisJCWVycm9yID0gdm1fbW1hcF9tZW1zZWcoc2Mt
PnZtLCBtbS0+Z3BhLCBtbS0+c2VnaWQsIG1tLT5zZWdvZmYsCisJCSAgICBtbS0+bGVuLCBtbS0+
cHJvdCwgbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9BTExPQ19NRU1TRUc6CisJCWVy
cm9yID0gYWxsb2NfbWVtc2VnKHNjLCAoc3RydWN0IHZtX21lbXNlZyAqKWRhdGEpOworCQlicmVh
azsKKwljYXNlIFZNX0dFVF9NRU1TRUc6CisJCWVycm9yID0gZ2V0X21lbXNlZyhzYywgKHN0cnVj
dCB2bV9tZW1zZWcgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6CisJ
CXZtcmVnID0gKHN0cnVjdCB2bV9yZWdpc3RlciAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X3Jl
Z2lzdGVyKHNjLT52bSwgdm1yZWctPmNwdWlkLCB2bXJlZy0+cmVnbnVtLAorCQkJCQkmdm1yZWct
PnJlZ3ZhbCk7CisJCWJyZWFrOworCWNhc2UgVk1fU0VUX1JFR0lTVEVSOgorCQl2bXJlZyA9IChz
dHJ1Y3Qgdm1fcmVnaXN0ZXIgKilkYXRhOworCQllcnJvciA9IHZtX3NldF9yZWdpc3RlcihzYy0+
dm0sIHZtcmVnLT5jcHVpZCwgdm1yZWctPnJlZ251bSwKKwkJCQkJdm1yZWctPnJlZ3ZhbCk7CisJ
CWJyZWFrOworCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwkJdm1zZWdkZXNjID0g
KHN0cnVjdCB2bV9zZWdfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1fc2V0X3NlZ19kZXNjKHNj
LT52bSwgdm1zZWdkZXNjLT5jcHVpZCwKKwkJCQkJdm1zZWdkZXNjLT5yZWdudW0sCisJCQkJCSZ2
bXNlZ2Rlc2MtPmRlc2MpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9TRUdNRU5UX0RFU0NSSVBU
T1I6CisJCXZtc2VnZGVzYyA9IChzdHJ1Y3Qgdm1fc2VnX2Rlc2MgKilkYXRhOworCQllcnJvciA9
IHZtX2dldF9zZWdfZGVzYyhzYy0+dm0sIHZtc2VnZGVzYy0+Y3B1aWQsCisJCQkJCXZtc2VnZGVz
Yy0+cmVnbnVtLAorCQkJCQkmdm1zZWdkZXNjLT5kZXNjKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9H
RVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilkYXRhOwor
CQllcnJvciA9IHZtX2dldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAorCQkJCQkg
IHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgICZ2bWNhcC0+Y2FwdmFsKTsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9TRVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilk
YXRhOworCQllcnJvciA9IHZtX3NldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAor
CQkJCQkgIHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgIHZtY2FwLT5jYXB2YWwpOworCQlicmVhazsK
KwljYXNlIFZNX1NFVF9YMkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGlj
ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAg
IHgyYXBpYy0+Y3B1aWQsIHgyYXBpYy0+c3RhdGUpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9Y
MkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGljICopZGF0YTsKKwkJZXJy
b3IgPSB2bV9nZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAgIHgyYXBpYy0+Y3B1aWQs
ICZ4MmFwaWMtPnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfR1BBX1BNQVA6CisJCWdw
YXB0ZSA9IChzdHJ1Y3Qgdm1fZ3BhX3B0ZSAqKWRhdGE7CisJCXBtYXBfZ2V0X21hcHBpbmcodm1z
cGFjZV9wbWFwKHZtX2dldF92bXNwYWNlKHNjLT52bSkpLAorCQkJCSBncGFwdGUtPmdwYSwgZ3Bh
cHRlLT5wdGUsICZncGFwdGUtPnB0ZW51bSk7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVM6CisJCWVycm9yID0gdmhwZXRfZ2V0Y2FwKChzdHJ1
Y3Qgdm1faHBldF9jYXAgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HTEEyR1BBOiB7CisJ
CUNUQVNTRVJUKFBST1RfUkVBRCA9PSBWTV9QUk9UX1JFQUQpOworCQlDVEFTU0VSVChQUk9UX1dS
SVRFID09IFZNX1BST1RfV1JJVEUpOworCQlDVEFTU0VSVChQUk9UX0VYRUMgPT0gVk1fUFJPVF9F
WEVDVVRFKTsKKwkJZ2cgPSAoc3RydWN0IHZtX2dsYTJncGEgKilkYXRhOworCQllcnJvciA9IHZt
X2dsYTJncGEoc2MtPnZtLCBnZy0+dmNwdWlkLCAmZ2ctPnBhZ2luZywgZ2ctPmdsYSwKKwkJICAg
IGdnLT5wcm90LCAmZ2ctPmdwYSwgJmdnLT5mYXVsdCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCB8
fCBlcnJvciA9PSBFRkFVTFQsCisJCSAgICAoIiVzOiB2bV9nbGEyZ3BhIHVua25vd24gZXJyb3Ig
JWQiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fQUNUSVZBVEVf
Q1BVOgorCQl2YWMgPSAoc3RydWN0IHZtX2FjdGl2YXRlX2NwdSAqKWRhdGE7CisJCWVycm9yID0g
dm1fYWN0aXZhdGVfY3B1KHNjLT52bSwgdmFjLT52Y3B1aWQpOworCQlicmVhazsKKwljYXNlIFZN
X0dFVF9DUFVTOgorCQllcnJvciA9IDA7CisJCXZtX2NwdXNldCA9IChzdHJ1Y3Qgdm1fY3B1c2V0
ICopZGF0YTsKKwkJc2l6ZSA9IHZtX2NwdXNldC0+Y3B1c2V0c2l6ZTsKKwkJaWYgKHNpemUgPCBz
aXplb2YoY3B1c2V0X3QpIHx8IHNpemUgPiBDUFVfTUFYU0laRSAvIE5CQlkpIHsKKwkJCWVycm9y
ID0gRVJBTkdFOworCQkJYnJlYWs7CisJCX0KKwkJY3B1c2V0ID0gbWFsbG9jKHNpemUsIE1fVEVN
UCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCQlpZiAodm1fY3B1c2V0LT53aGljaCA9PSBWTV9BQ1RJ
VkVfQ1BVUykKKwkJCSpjcHVzZXQgPSB2bV9hY3RpdmVfY3B1cyhzYy0+dm0pOworCQllbHNlIGlm
ICh2bV9jcHVzZXQtPndoaWNoID09IFZNX1NVU1BFTkRFRF9DUFVTKQorCQkJKmNwdXNldCA9IHZt
X3N1c3BlbmRlZF9jcHVzKHNjLT52bSk7CisJCWVsc2UKKwkJCWVycm9yID0gRUlOVkFMOworCQlp
ZiAoZXJyb3IgPT0gMCkKKwkJCWVycm9yID0gY29weW91dChjcHVzZXQsIHZtX2NwdXNldC0+Y3B1
cywgc2l6ZSk7CisJCWZyZWUoY3B1c2V0LCBNX1RFTVApOworCQlicmVhazsKKwljYXNlIFZNX1NF
VF9JTlRJTkZPOgorCQl2bWlpID0gKHN0cnVjdCB2bV9pbnRpbmZvICopZGF0YTsKKwkJZXJyb3Ig
PSB2bV9leGl0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQsIHZtaWktPmluZm8xKTsKKwkJ
YnJlYWs7CisJY2FzZSBWTV9HRVRfSU5USU5GTzoKKwkJdm1paSA9IChzdHJ1Y3Qgdm1faW50aW5m
byAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQs
ICZ2bWlpLT5pbmZvMSwKKwkJICAgICZ2bWlpLT5pbmZvMik7CisJCWJyZWFrOworCWNhc2UgVk1f
UlRDX1dSSVRFOgorCQlydGNkYXRhID0gKHN0cnVjdCB2bV9ydGNfZGF0YSAqKWRhdGE7CisJCWVy
cm9yID0gdnJ0Y19udnJhbV93cml0ZShzYy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgIHJ0
Y2RhdGEtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9SVENfUkVBRDoKKwkJcnRjZGF0YSA9
IChzdHJ1Y3Qgdm1fcnRjX2RhdGEgKilkYXRhOworCQllcnJvciA9IHZydGNfbnZyYW1fcmVhZChz
Yy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgICZydGNkYXRhLT52YWx1ZSk7CisJCWJyZWFr
OworCWNhc2UgVk1fUlRDX1NFVFRJTUU6CisJCXJ0Y3RpbWUgPSAoc3RydWN0IHZtX3J0Y190aW1l
ICopZGF0YTsKKwkJZXJyb3IgPSB2cnRjX3NldF90aW1lKHNjLT52bSwgcnRjdGltZS0+c2Vjcyk7
CisJCWJyZWFrOworCWNhc2UgVk1fUlRDX0dFVFRJTUU6CisJCWVycm9yID0gMDsKKwkJcnRjdGlt
ZSA9IChzdHJ1Y3Qgdm1fcnRjX3RpbWUgKilkYXRhOworCQlydGN0aW1lLT5zZWNzID0gdnJ0Y19n
ZXRfdGltZShzYy0+dm0pOworCQlicmVhazsKKwljYXNlIFZNX1JFU1RBUlRfSU5TVFJVQ1RJT046
CisJCWVycm9yID0gdm1fcmVzdGFydF9pbnN0cnVjdGlvbihzYy0+dm0sIHZjcHUpOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQllcnJvciA9IEVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0
YXRlX2NoYW5nZWQgPT0gMSkKKwkJdmNwdV91bmxvY2tfb25lKHNjLCB2Y3B1KTsKKwllbHNlIGlm
IChzdGF0ZV9jaGFuZ2VkID09IDIpCisJCXZjcHVfdW5sb2NrX2FsbChzYyk7CisKK2RvbmU6CisJ
LyogTWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlciByZXR1cm5zIGEgYm9ndXMgdmFsdWUgbGlrZSBF
UkVTVEFSVCAqLworCUtBU1NFUlQoZXJyb3IgPj0gMCwgKCJ2bW1kZXZfaW9jdGw6IGludmFsaWQg
ZXJyb3IgcmV0dXJuICVkIiwgZXJyb3IpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj
IGludAordm1tZGV2X21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2LCB2bV9vb2Zmc2V0X3Qg
Km9mZnNldCwgdm1fc2l6ZV90IG1hcHNpemUsCisgICAgc3RydWN0IHZtX29iamVjdCAqKm9ianAs
IGludCBucHJvdCkKK3sKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwl2bV9wYWRkcl90IGdw
YTsKKwlzaXplX3QgbGVuOworCXZtX29vZmZzZXRfdCBzZWdvZmYsIGZpcnN0LCBsYXN0OworCWlu
dCBlcnJvciwgZm91bmQsIHNlZ2lkOworCWJvb2wgc3lzbWVtOworCisJZmlyc3QgPSAqb2Zmc2V0
OworCWxhc3QgPSBmaXJzdCArIG1hcHNpemU7CisJaWYgKChucHJvdCAmIFBST1RfRVhFQykgfHwg
Zmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXNjID0g
dm1tZGV2X2xvb2t1cDIoY2Rldik7CisJaWYgKHNjID09IE5VTEwpIHsKKwkJLyogdmlydHVhbCBt
YWNoaW5lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgKi8KKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCS8qCisJICogR2V0IGEgcmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1v
cnkgbWFwIGJ5IGZyZWV6aW5nIGFueSB2Y3B1LgorCSAqLworCWVycm9yID0gdmNwdV9sb2NrX29u
ZShzYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKKwor
CWdwYSA9IDA7CisJZm91bmQgPSAwOworCXdoaWxlICghZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9t
bWFwX2dldG5leHQoc2MtPnZtLCAmZ3BhLCAmc2VnaWQsICZzZWdvZmYsICZsZW4sCisJCSAgICBO
VUxMLCBOVUxMKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJaWYgKGZpcnN0ID49IGdw
YSAmJiBsYXN0IDw9IGdwYSArIGxlbikKKwkJCWZvdW5kID0gMTsKKwkJZWxzZQorCQkJZ3BhICs9
IGxlbjsKKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9nZXRfbWVtc2VnKHNjLT52
bSwgc2VnaWQsICZsZW4sICZzeXNtZW0sIG9ianApOworCQlLQVNTRVJUKGVycm9yID09IDAgJiYg
Km9ianAgIT0gTlVMTCwKKwkJICAgICgiJXM6IGludmFsaWQgbWVtb3J5IHNlZ21lbnQgJWQiLCBf
X2Z1bmNfXywgc2VnaWQpKTsKKwkJaWYgKHN5c21lbSkgeworCQkJdm1fb2JqZWN0X3JlZmVyZW5j
ZSgqb2JqcCk7CisJCQkqb2Zmc2V0ID0gc2Vnb2ZmICsgKGZpcnN0IC0gZ3BhKTsKKwkJfSBlbHNl
IHsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJfQorCXZjcHVfdW5sb2NrX29uZShzYywgVk1f
TUFYQ1BVIC0gMSk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1kZXZf
ZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MgPSBhcmc7CisJ
c3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKworCWVycm9yID0gdmNwdV9s
b2NrX2FsbChzYyk7CisJS0FTU0VSVChlcnJvciA9PSAwLCAoIiVzOiBlcnJvciAlZCBmcmVlemlu
ZyB2Y3B1cyIsIF9fZnVuY19fLCBlcnJvcikpOworCisJd2hpbGUgKChkc2MgPSBTTElTVF9GSVJT
VCgmc2MtPmRldm1lbSkpICE9IE5VTEwpIHsKKwkJS0FTU0VSVChkc2MtPmNkZXYgPT0gTlVMTCwg
KCIlczogZGV2bWVtIG5vdCBmcmVlIiwgX19mdW5jX18pKTsKKwkJU0xJU1RfUkVNT1ZFX0hFQUQo
JnNjLT5kZXZtZW0sIGxpbmspOworCQlmcmVlKGRzYy0+bmFtZSwgTV9WTU1ERVYpOworCQlmcmVl
KGRzYywgTV9WTU1ERVYpOworCX0KKworCWlmIChzYy0+Y2RldiAhPSBOVUxMKQorCQlkZXN0cm95
X2RldihzYy0+Y2Rldik7CisKKwlpZiAoc2MtPnZtICE9IE5VTEwpCisJCXZtX2Rlc3Ryb3koc2Mt
PnZtKTsKKworCWlmICgoc2MtPmZsYWdzICYgVlNDX0xJTktFRCkgIT0gMCkgeworCQltdHhfbG9j
aygmdm1tZGV2X210eCk7CisJCVNMSVNUX1JFTU9WRSgmaGVhZCwgc2MsIHZtbWRldl9zb2Z0Yywg
bGluayk7CisJCW10eF91bmxvY2soJnZtbWRldl9tdHgpOworCX0KKworCWZyZWUoc2MsIE1fVk1N
REVWKTsKK30KKworc3RhdGljIGludAorc3lzY3RsX3ZtbV9kZXN0cm95KFNZU0NUTF9IQU5ETEVS
X0FSR1MpCit7CisJaW50IGVycm9yOworCWNoYXIgYnVmW1ZNX01BWF9OQU1FTEVOXTsKKwlzdHJ1
Y3QgZGV2bWVtX3NvZnRjICpkc2M7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJc3RydWN0
IGNkZXYgKmNkZXY7CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIsIHNpemVvZihidWYpKTsKKwll
cnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlcSk7
CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJv
cik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2bW1kZXZfbG9va3VwKGJ1Zik7
CisJaWYgKHNjID09IE5VTEwgfHwgc2MtPmNkZXYgPT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZ2
bW1kZXZfbXR4KTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qCisJICogVGhlICdjZGV2
JyB3aWxsIGJlIGRlc3Ryb3llZCBhc3luY2hyb25vdXNseSB3aGVuICdzaV90aHJlYWRjb3VudCcK
KwkgKiBnb2VzIGRvd24gdG8gMCBzbyB3ZSBzaG91bGQgbm90IGRvIGl0IGFnYWluIGluIHRoZSBj
YWxsYmFjay4KKwkgKgorCSAqIFNldHRpbmcgJ3NjLT5jZGV2JyB0byBOVUxMIGlzIGFsc28gdXNl
ZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBWTQorCSAqIGlzIHNjaGVkdWxlZCBmb3IgZGVzdHJ1Y3Rp
b24uCisJICovCisJY2RldiA9IHNjLT5jZGV2OworCXNjLT5jZGV2ID0gTlVMTDsJCQorCW10eF91
bmxvY2soJnZtbWRldl9tdHgpOworCisJLyoKKwkgKiBTY2hlZHVsZSBhbGwgY2RldnMgdG8gYmUg
ZGVzdHJveWVkOgorCSAqCisJICogLSBhbnkgbmV3IG9wZXJhdGlvbnMgb24gdGhlICdjZGV2JyB3
aWxsIHJldHVybiBhbiBlcnJvciAoRU5YSU8pLgorCSAqCisJICogLSB3aGVuIHRoZSAnc2lfdGhy
ZWFkY291bnQnIGR3aW5kbGVzIGRvd24gdG8gemVybyB0aGUgJ2NkZXYnIHdpbGwKKwkgKiAgIGJl
IGRlc3Ryb3llZCBhbmQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBpbiBhIHRhc2txdWV1
ZQorCSAqICAgY29udGV4dC4KKwkgKgorCSAqIC0gdGhlICdkZXZtZW0nIGNkZXZzIGFyZSBkZXN0
cm95ZWQgYmVmb3JlIHRoZSB2aXJ0dWFsIG1hY2hpbmUgJ2NkZXYnCisJICovCisJU0xJU1RfRk9S
RUFDSChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCUtBU1NFUlQoZHNjLT5jZGV2ICE9IE5V
TEwsICgiZGV2bWVtIGNkZXYgYWxyZWFkeSBkZXN0cm95ZWQiKSk7CisJCWRlc3Ryb3lfZGV2X3Nj
aGVkX2NiKGRzYy0+Y2RldiwgZGV2bWVtX2Rlc3Ryb3ksIGRzYyk7CisJfQorCWRlc3Ryb3lfZGV2
X3NjaGVkX2NiKGNkZXYsIHZtbWRldl9kZXN0cm95LCBzYyk7CisJcmV0dXJuICgwKTsKK30KK1NZ
U0NUTF9QUk9DKF9od192bW0sIE9JRF9BVVRPLCBkZXN0cm95LCBDVExUWVBFX1NUUklORyB8IENU
TEZMQUdfUlcsCisJICAgIE5VTEwsIDAsIHN5c2N0bF92bW1fZGVzdHJveSwgIkEiLCBOVUxMKTsK
Kworc3RhdGljIHN0cnVjdCBjZGV2c3cgdm1tZGV2c3cgPSB7CisJLmRfbmFtZQkJPSAidm1tZGV2
IiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX2lvY3RsCT0gdm1tZGV2X2lvY3RsLAor
CS5kX21tYXBfc2luZ2xlCT0gdm1tZGV2X21tYXBfc2luZ2xlLAorCS5kX3JlYWQJCT0gdm1tZGV2
X3J3LAorCS5kX3dyaXRlCT0gdm1tZGV2X3J3LAorfTsKKworc3RhdGljIGludAorc3lzY3RsX3Zt
bV9jcmVhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZt
ICp2bTsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYywgKnNj
MjsKKwljaGFyIGJ1ZltWTV9NQVhfTkFNRUxFTl07CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIs
IHNpemVvZihidWYpKTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwg
c2l6ZW9mKGJ1ZiksIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVM
TCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2
bW1kZXZfbG9va3VwKGJ1Zik7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisJaWYgKHNjICE9
IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWVycm9yID0gdm1fY3JlYXRlKGJ1ZiwgJnZt
KTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlzYyA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IHZtbWRldl9zb2Z0YyksIE1fVk1NREVWLCBNX1dBSVRPSyB8IE1fWkVSTyk7
CisJc2MtPnZtID0gdm07CisJU0xJU1RfSU5JVCgmc2MtPmRldm1lbSk7CisKKwkvKgorCSAqIExv
b2t1cCB0aGUgbmFtZSBhZ2FpbiBqdXN0IGluIGNhc2Ugc29tZWJvZHkgc25lYWtlZCBpbiB3aGVu
IHdlCisJICogZHJvcHBlZCB0aGUgbG9jay4KKwkgKi8KKwltdHhfbG9jaygmdm1tZGV2X210eCk7
CisJc2MyID0gdm1tZGV2X2xvb2t1cChidWYpOworCWlmIChzYzIgPT0gTlVMTCkgeworCQlTTElT
VF9JTlNFUlRfSEVBRCgmaGVhZCwgc2MsIGxpbmspOworCQlzYy0+ZmxhZ3MgfD0gVlNDX0xJTktF
RDsKKwl9CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlpZiAoc2MyICE9IE5VTEwpIHsK
KwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKEVFWElTVCk7CisJfQorCisJZXJyb3Ig
PSBtYWtlX2Rldl9wKE1BS0VERVZfQ0hFQ0tOQU1FLCAmY2RldiwgJnZtbWRldnN3LCBOVUxMLAor
CQkJICAgVUlEX1JPT1QsIEdJRF9XSEVFTCwgMDYwMCwgInZtbS8lcyIsIGJ1Zik7CisJaWYgKGVy
cm9yICE9IDApIHsKKwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKGVycm9yKTsKKwl9
CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MtPmNkZXYgPSBjZGV2OworCXNjLT5jZGV2
LT5zaV9kcnYxID0gc2M7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlyZXR1cm4gKDAp
OworfQorU1lTQ1RMX1BST0MoX2h3X3ZtbSwgT0lEX0FVVE8sIGNyZWF0ZSwgQ1RMVFlQRV9TVFJJ
TkcgfCBDVExGTEFHX1JXLAorCSAgICBOVUxMLCAwLCBzeXNjdGxfdm1tX2NyZWF0ZSwgIkEiLCBO
VUxMKTsKKwordm9pZAordm1tZGV2X2luaXQodm9pZCkKK3sKKwltdHhfaW5pdCgmdm1tZGV2X210
eCwgInZtbSBkZXZpY2UgbXV0ZXgiLCBOVUxMLCBNVFhfREVGKTsKK30KKworaW50Cit2bW1kZXZf
Y2xlYW51cCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmIChTTElTVF9FTVBUWSgmaGVhZCkp
CisJCWVycm9yID0gMDsKKwllbHNlCisJCWVycm9yID0gRUJVU1k7CisKKwlyZXR1cm4gKGVycm9y
KTsKK30KKworc3RhdGljIGludAorZGV2bWVtX21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2
LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwgdm1fc2l6ZV90IGxlbiwKKyAgICBzdHJ1Y3Qgdm1fb2Jq
ZWN0ICoqb2JqcCwgaW50IG5wcm90KQoreworCXN0cnVjdCBkZXZtZW1fc29mdGMgKmRzYzsKKwl2
bV9vb2Zmc2V0X3QgZmlyc3QsIGxhc3Q7CisJc2l6ZV90IHNlZ2xlbjsKKwlpbnQgZXJyb3I7CisJ
Ym9vbCBzeXNtZW07CisKKwlkc2MgPSBjZGV2LT5zaV9kcnYxOworCWlmIChkc2MgPT0gTlVMTCkg
eworCQkvKiAnY2RldicgaGFzIGJlZW4gY3JlYXRlZCBidXQgaXMgbm90IHJlYWR5IGZvciB1c2Ug
Ki8KKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJZmlyc3QgPSAqb2Zmc2V0OworCWxhc3QgPSAq
b2Zmc2V0ICsgbGVuOworCWlmICgobnByb3QgJiBQUk9UX0VYRUMpIHx8IGZpcnN0IDwgMCB8fCBm
aXJzdCA+PSBsYXN0KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZjcHVfbG9ja19v
bmUoZHNjLT5zYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9y
KTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhkc2MtPnNjLT52bSwgZHNjLT5zZWdpZCwgJnNl
Z2xlbiwgJnN5c21lbSwgb2JqcCk7CisJS0FTU0VSVChlcnJvciA9PSAwICYmICFzeXNtZW0gJiYg
Km9ianAgIT0gTlVMTCwKKwkgICAgKCIlczogaW52YWxpZCBkZXZtZW0gc2VnbWVudCAlZCIsIF9f
ZnVuY19fLCBkc2MtPnNlZ2lkKSk7CisKKwl2Y3B1X3VubG9ja19vbmUoZHNjLT5zYywgVk1fTUFY
Q1BVIC0gMSk7CisKKwlpZiAoc2VnbGVuID49IGxhc3QpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5j
ZSgqb2JqcCk7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChFSU5WQUwpOwor
CX0KK30KKworc3RhdGljIHN0cnVjdCBjZGV2c3cgZGV2bWVtc3cgPSB7CisJLmRfbmFtZQkJPSAi
ZGV2bWVtIiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX21tYXBfc2luZ2xlCT0gZGV2
bWVtX21tYXBfc2luZ2xlLAorfTsKKworc3RhdGljIGludAorZGV2bWVtX2NyZWF0ZV9jZGV2KGNv
bnN0IGNoYXIgKnZtbmFtZSwgaW50IHNlZ2lkLCBjaGFyICpkZXZuYW1lKQoreworCXN0cnVjdCBk
ZXZtZW1fc29mdGMgKmRzYzsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwlzdHJ1Y3QgY2Rl
diAqY2RldjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1ha2VfZGV2X3AoTUFLRURFVl9DSEVD
S05BTUUsICZjZGV2LCAmZGV2bWVtc3csIE5VTEwsCisJICAgIFVJRF9ST09ULCBHSURfV0hFRUws
IDA2MDAsICJ2bW0uaW8vJXMuJXMiLCB2bW5hbWUsIGRldm5hbWUpOworCWlmIChlcnJvcikKKwkJ
cmV0dXJuIChlcnJvcik7CisKKwlkc2MgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZtZW1fc29m
dGMpLCBNX1ZNTURFViwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJbXR4X2xvY2soJnZtbWRldl9t
dHgpOworCXNjID0gdm1tZGV2X2xvb2t1cCh2bW5hbWUpOworCUtBU1NFUlQoc2MgIT0gTlVMTCwg
KCIlczogdm0gJXMgc29mdGMgbm90IGZvdW5kIiwgX19mdW5jX18sIHZtbmFtZSkpOworCWlmIChz
Yy0+Y2RldiA9PSBOVUxMKSB7CisJCS8qIHZpcnR1YWwgbWFjaGluZSBpcyBiZWluZyBjcmVhdGVk
IG9yIGRlc3Ryb3llZCAqLworCQltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4KTsKKwkJZnJlZShkc2Ms
IE1fVk1NREVWKTsKKwkJZGVzdHJveV9kZXZfc2NoZWRfY2IoY2RldiwgTlVMTCwgMCk7CisJCXJl
dHVybiAoRU5PREVWKTsKKwl9CisKKwlkc2MtPnNlZ2lkID0gc2VnaWQ7CisJZHNjLT5uYW1lID0g
ZGV2bmFtZTsKKwlkc2MtPmNkZXYgPSBjZGV2OworCWRzYy0+c2MgPSBzYzsKKwlTTElTVF9JTlNF
UlRfSEVBRCgmc2MtPmRldm1lbSwgZHNjLCBsaW5rKTsKKwltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4
KTsKKworCS8qIFRoZSAnY2RldicgaXMgcmVhZHkgZm9yIHVzZSBhZnRlciAnc2lfZHJ2MScgaXMg
aW5pdGlhbGl6ZWQgKi8KKwljZGV2LT5zaV9kcnYxID0gZHNjOworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyB2b2lkCitkZXZtZW1fZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IGRldm1l
bV9zb2Z0YyAqZHNjID0gYXJnOworCisJS0FTU0VSVChkc2MtPmNkZXYsICgiJXM6IGRldm1lbSBj
ZGV2IGFscmVhZHkgZGVzdHJveWVkIiwgX19mdW5jX18pKTsKKwlkc2MtPmNkZXYgPSBOVUxMOwor
CWRzYy0+c2MgPSBOVUxMOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92
bW1faW9wb3J0LmMgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMKLS0tIHVzci9z
cmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5jCTIwMTYtMTEt
MzAgMTA6NTY6MDUuNzk0NTYzMDAwICswMDAwCkBAIC05NywzMSArOTcsMjc0IEBACiB9CiAjZW5k
aWYJLyogS1RSICovCiAKKyNpZmRlZiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSCisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr
Lmg+CisjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1
ZGUgPHN5cy9zeXN0bS5oPgorCitzdGF0aWMgTUFMTE9DX0RFRklORShNX0lPUkVHSCwgImlvcmVn
aCIsICJiaHl2ZSBpb3BvcnQgcmVnIGhhbmRsZXJzIik7CisKKyNkZWZpbmUgSU9QT1JUX01BWF9S
RUdfSEFORExFUgkxNgorCisvKgorICogaW9wb3J0X3JlZ19oYW5kbGVyIGZ1bmN0aW9ucyBhbGxv
d3MgdXMgdG8gdG8gY2F0Y2ggVk0gd3JpdGUvcmVhZAorICogb24gc3BlY2lmaWMgSS9PIGFkZHJl
c3MgYW5kIHNlbmQgbm90aWZpY2F0aW9uLgorICoKKyAqIFdoZW4gdGhlIFZNIHdyaXRlcyBvciBy
ZWFkcyBhIHNwZWNpZmljIHZhbHVlIG9uIEkvTyBhZGRyZXNzLCBpZiB0aGUgYWRkcmVzcworICog
YW5kIHRoZSB2YWx1ZSBtYXRjaGVzIHdpdGggdGhlIGluZm8gc3RvcmVkIGR1cmlnbiB0aGUgaGFu
ZGxlciByZWdpc3RyYXRpb24sCisgKiB0aGVuIHdlIHNlbmQgYSBub3RpZmljYXRpb24gKHdlIGNh
biBoYXZlIG11bHRpcGxlIHR5cGUgb2Ygbm90aWZpY2F0aW9uLAorICogYnV0IGZvciBub3cgaXMg
aW1wbGVtZW50ZWQgb25seSB0aGUgVk1fSU9fUkVHSF9LV0VWRU5UUyBoYW5kbGVyLgorICovCisK
K3R5cGVkZWYgaW50ICgqaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwK
KwkJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3QgKnZhbCk7CisKK3N0
cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgeworCXVpbnQxNl90IHBvcnQ7CQkJCS8qIEkvTyBhZGRy
ZXNzICovCisJdWludDE2X3QgaW47CQkJCS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QgbWFz
a19kYXRhOwkJCS8qIDAgbWVhbnMgbWF0Y2ggYW55dGhpbmcgKi8KKwl1aW50MzJfdCBkYXRhOwkJ
CQkvKiBkYXRhIHRvIG1hdGNoICovCisJaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCBoYW5kbGVy
OwkvKiBoYW5kbGVyIHBvaW50ZXIgKi8KKwl2b2lkICpoYW5kbGVyX2FyZzsJCQkvKiBoYW5kbGVy
IGFyZ3VtZW50ICovCit9OworCitzdHJ1Y3QgaW9yZWdoIHsKKwlzdHJ1Y3Qgc3ggbG9jazsKKwkv
KiBUT0RPOiB1c2UgaGFzaCB0YWJsZSAqLworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgaGFu
ZGxlcnNbSU9QT1JUX01BWF9SRUdfSEFORExFUl07Cit9OworCisvKiAtLS0tLSBJL08gcmVnIGhh
bmRsZXJzIC0tLS0tICovCisKKy8qCisgKiBWTV9JT19SRUdIX0tXRVZFTlRTIGhhbmRsZXIKKyAq
CisgKiB3YWtldXAoKSBvbiBzcGVjaWZpZWQgYWRkcmVzcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZp
ZXMgdGhlIGV2ZW50CisgKgorICovCitzdGF0aWMgaW50Cit2bW1faW9wb3J0X3JlZ193YWtldXAo
c3RydWN0IHZtICp2bSwgc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3Qg
KnZhbCkKK3sKKwl3YWtldXAocmVnaC0+aGFuZGxlcl9hcmcpOworCXJldHVybiAoMCk7Cit9CisK
Ky8qCisgKiBUT0RPOgorICogLSBWTV9JT19SRUdIX0NPTkRTSUdOQUw6CXB0aHJlYWRfY29uZF9z
aWduYWwKKyAqIC0gVk1fSU9fUkVHSF9XUklURUZEOgl3cml0ZSBvbiBmZAorICogLSBWTV9JT19S
RUdIX0lPQ1RMOgkJaW9jdGwgb24gZmQKKyAqLworCisvKiBjYWxsIHdpdGggaW9yZWdoLT5sb2Nr
IGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgaW9wb3J0X3JlZ19oYW5kbGVyICoKK3ZtbV9pb3BvcnRf
ZmluZF9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCwgdWludDE2X3QgcG9ydCwgdWludDE2
X3QgaW4sCisJCXVpbnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3Qg
aW9wb3J0X3JlZ19oYW5kbGVyICpyZWdoOworCXVpbnQzMl90IG1hc2s7CisJaW50IGk7CisKKwly
ZWdoID0gaW9yZWdoLT5oYW5kbGVyczsKKwlmb3IgKGkgPSAwOyBpIDwgSU9QT1JUX01BWF9SRUdf
SEFORExFUjsgaSsrKSB7CisJCWlmIChyZWdoW2ldLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJbWFz
ayA9IHJlZ2hbaV0ubWFza19kYXRhICYgbWFza19kYXRhOworCQkJaWYgKChyZWdoW2ldLnBvcnQg
PT0gcG9ydCkgJiYgKHJlZ2hbaV0uaW4gPT0gaW4pCisJCQkJJiYgKChtYXNrICYgcmVnaFtpXS5k
YXRhKSA9PSAobWFzayAmIGRhdGEpKSkgeworCQkJCXJldHVybiAmcmVnaFtpXTsKKwkJCX0KKwkJ
fQorCX0KKworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qIGNhbGwgd2l0aCBpb3JlZ2gtPmxvY2sg
aGVsZCAqLworc3RhdGljIHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKgordm1tX2lvcG9ydF9l
bXB0eV9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzdHJ1Y3QgaW9wb3J0X3Jl
Z19oYW5kbGVyICpyZWdoOworCWludCBpOworCisJcmVnaCA9IGlvcmVnaC0+aGFuZGxlcnM7CisJ
Zm9yIChpID0gMDsgaSA8IElPUE9SVF9NQVhfUkVHX0hBTkRMRVI7IGkrKykgeworCQlpZiAocmVn
aFtpXS5oYW5kbGVyID09IE5VTEwpIHsKKwkJCXJldHVybiAmcmVnaFtpXTsKKwkJfQorCX0KKwor
CXJldHVybiAoTlVMTCk7Cit9CisKKworc3RhdGljIGludAordm1tX2lvcG9ydF9hZGRfaGFuZGxl
cihzdHJ1Y3Qgdm0gKnZtLCB1aW50MTZfdCBwb3J0LCB1aW50MTZfdCBpbiwgdWludDMyX3QgbWFz
a19kYXRhLAorCXVpbnQzMl90IGRhdGEsIGlvcG9ydF9yZWdfaGFuZGxlcl9mdW5jX3QgaGFuZGxl
ciwgdm9pZCAqaGFuZGxlcl9hcmcpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVn
aDsKKwlzdHJ1Y3QgaW9yZWdoICppb3JlZ2g7CisJaW50IHJldCA9IDA7CisKKwlpb3JlZ2ggPSB2
bV9pb3JlZ2godm0pOworCisJc3hfeGxvY2soJmlvcmVnaC0+bG9jayk7CisKKwlyZWdoID0gdm1t
X2lvcG9ydF9maW5kX2hhbmRsZXIoaW9yZWdoLCBwb3J0LCBpbiwgbWFza19kYXRhLCBkYXRhKTsK
KwlpZiAocmVnaCAhPSBOVUxMKSB7CisJCXByaW50ZigiJXM6IGhhbmRsZXIgZm9yIHBvcnQgJWQg
aW4gJWQgbWFza19kYXRhICVkIGRhdGEgJWQgXAorCQkJCWFscmVhZHkgcmVnaXN0ZXJlZFxuIiwK
KwkJCQlfX0ZVTkNUSU9OX18sIHBvcnQsIGluLCAgbWFza19kYXRhLCBkYXRhKTsKKwkJcmV0ID0g
RUVYSVNUOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoID0gdm1tX2lvcG9ydF9lbXB0eV9oYW5k
bGVyKGlvcmVnaCk7CisJaWYgKHJlZ2ggPT0gTlVMTCkgeworCQlwcmludGYoIiVzOiBlbXB0eSBy
ZWdfaGFuZGxlciBzbG90IG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRU5P
TUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoLT5wb3J0ID0gcG9ydDsKKwlyZWdoLT5pbiA9
IGluOworCXJlZ2gtPm1hc2tfZGF0YSA9IG1hc2tfZGF0YTsKKwlyZWdoLT5kYXRhID0gZGF0YTsK
KwlyZWdoLT5oYW5kbGVyID0gaGFuZGxlcjsKKwlyZWdoLT5oYW5kbGVyX2FyZyA9IGhhbmRsZXJf
YXJnOworCitlcnI6CisJc3hfeHVubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJldCk7
Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV9pb3BvcnRfZGVsX2hhbmRsZXIoc3RydWN0IHZtICp2bSwg
dWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19kYXRhLCB1aW50MzJf
dCBkYXRhKQoreworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKnJlZ2g7CisJc3RydWN0IGlv
cmVnaCAqaW9yZWdoOworCWludCByZXQgPSAwOworCisJaW9yZWdoID0gdm1faW9yZWdoKHZtKTsK
KworCXN4X3hsb2NrKCZpb3JlZ2gtPmxvY2spOworCisJcmVnaCA9IHZtbV9pb3BvcnRfZmluZF9o
YW5kbGVyKGlvcmVnaCwgcG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisKKwlpZiAocmVnaCA9
PSBOVUxMKSB7CisJCXJldCA9IEVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJYnplcm8ocmVn
aCwgc2l6ZW9mKHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIpKTsKK2VycjoKKwlzeF94dW5sb2Nr
KCZpb3JlZ2gtPmxvY2spOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIHJlZ2lzdGVyIG9y
IGRlbGV0ZSBhIG5ldyBJL08gZXZlbnQgaGFuZGxlci4KKyAqLworaW50Cit2bW1faW9wb3J0X3Jl
Z19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCXVp
bnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSwgZW51bSB2bV9pb19yZWdoX3R5cGUgdHlw
ZSwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz
ZSBWTV9JT19SRUdIX0RFTEVURToKKwkJcmV0ID0gdm1tX2lvcG9ydF9kZWxfaGFuZGxlcih2bSwg
cG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9fUkVHSF9L
V0VWRU5UUzoKKwkJcmV0ID0gdm1tX2lvcG9ydF9hZGRfaGFuZGxlcih2bSwgcG9ydCwgaW4sIG1h
c2tfZGF0YSwgZGF0YSwKKwkJCQl2bW1faW9wb3J0X3JlZ193YWtldXAsIGFyZyk7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCXByaW50ZigiJXM6IHVua25vd24gcmVnX2hhbmRsZXIgdHlwZVxuIiwg
X19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g
KHJldCk7Cit9CisKKy8qCisgKiBJbnZva2UgYW4gaGFuZGxlciwgaWYgdGhlIGRhdGEgbWF0Y2hl
cy4KKyAqLworc3RhdGljIGludAoraW52b2tlX3JlZ19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIHN0cnVjdCB2bV9leGl0ICp2bWV4aXQsCisJCSAgIHVpbnQzMl90ICp2YWwsIGlu
dCAqZXJyb3IpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaDsKKwlzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2g7CisJdWludDMyX3QgbWFza19kYXRhOworCisJbWFza19kYXRhID0gdmll
X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlvcmVnaCA9IHZtX2lvcmVnaCh2
bSk7CisKKwlzeF9zbG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZWdoID0gdm1tX2lvcG9ydF9maW5k
X2hhbmRsZXIoaW9yZWdoLCB2bWV4aXQtPnUuaW5vdXQucG9ydCwKKwkJCXZtZXhpdC0+dS5pbm91
dC5pbiwgbWFza19kYXRhLCB2bWV4aXQtPnUuaW5vdXQuZWF4KTsKKwlpZiAocmVnaCAhPSBOVUxM
KSB7CisJCSplcnJvciA9ICgqKHJlZ2gtPmhhbmRsZXIpKSh2bSwgcmVnaCwgdmFsKTsKKwl9CisJ
c3hfc3VubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJlZ2ggIT0gTlVMTCk7Cit9CisK
K3N0cnVjdCBpb3JlZ2ggKgoraW9yZWdoX2luaXQoc3RydWN0IHZtICp2bSkKK3sKKwlzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2g7CisKKwlpb3JlZ2ggPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3JlZ2gp
LCBNX0lPUkVHSCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN4X2luaXQoJmlvcmVnaC0+bG9jaywg
ImlvcmVnaCBsb2NrIik7CisKKwlyZXR1cm4gKGlvcmVnaCk7Cit9CisKK3ZvaWQKK2lvcmVnaF9j
bGVhbnVwKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzeF9kZXN0cm95KCZpb3JlZ2gtPmxv
Y2spOworCWZyZWUoaW9yZWdoLCBNX0lPUkVHSCk7Cit9CisjZWxzZSAvKiAhVk1NX0lPUE9SVF9S
RUdfSEFORExFUiAqLworI2RlZmluZSBpbnZva2VfcmVnX2hhbmRsZXIoXzEsIF8yLCBfMywgXzQs
IF81KSAoMCkKKyNlbmRpZiAvKiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSICovCisKIHN0YXRpYyBp
bnQKIGVtdWxhdGVfaW5vdXRfcG9ydChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qg
dm1fZXhpdCAqdm1leGl0LAogICAgIGJvb2wgKnJldHUpCiB7CiAJaW9wb3J0X2hhbmRsZXJfZnVu
Y190IGhhbmRsZXI7CiAJdWludDMyX3QgbWFzaywgdmFsOwotCWludCBlcnJvcjsKKwlpbnQgcmVn
aCA9IDAsIGVycm9yID0gMDsKIAogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gaGFuZGxlciBmb3Ig
dGhlIEkvTyBwb3J0IHRoZW4gcHVudCB0byB1c2Vyc3BhY2UuCiAJICovCi0JaWYgKHZtZXhpdC0+
dS5pbm91dC5wb3J0ID49IE1BWF9JT1BPUlRTIHx8Ci0JICAgIChoYW5kbGVyID0gaW9wb3J0X2hh
bmRsZXJbdm1leGl0LT51Lmlub3V0LnBvcnRdKSA9PSBOVUxMKSB7CisJaWYgKCh2bWV4aXQtPnUu
aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k
bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgJiYKKwkgICAgKHJlZ2ggPSBpbnZv
a2VfcmVnX2hhbmRsZXIodm0sIHZjcHVpZCwgdm1leGl0LCAmdmFsLCAmZXJyb3IpKSA9PSAwKSB7
CiAJCSpyZXR1ID0gdHJ1ZTsKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQltYXNrID0gdmllX3NpemUy
bWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlmICghcmVnaCkgeworCQltYXNrID0gdmll
X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCisJCWlmICghdm1leGl0LT51Lmlu
b3V0LmluKSB7CisJCQl2YWwgPSB2bWV4aXQtPnUuaW5vdXQuZWF4ICYgbWFzazsKKwkJfQogCi0J
aWYgKCF2bWV4aXQtPnUuaW5vdXQuaW4pIHsKLQkJdmFsID0gdm1leGl0LT51Lmlub3V0LmVheCAm
IG1hc2s7CisJCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlkLCB2bWV4aXQtPnUuaW5vdXQu
aW4sCisJCQl2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAmdmFs
KTsKIAl9CiAKLQllcnJvciA9ICgqaGFuZGxlcikodm0sIHZjcHVpZCwgdm1leGl0LT51Lmlub3V0
LmluLAotCSAgICB2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAm
dmFsKTsKIAlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRo
aXMgZnVuY3Rpb24gaXMgYWxzbyB0aGUgcmV0dXJuIHZhbHVlCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0v
dm1tX2lvcG9ydC5jLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMu
b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz
L2FtZDY0L3ZtbS92bW1faW9wb3J0LmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjAzNzA2NTAw
MCArMDAwMApAQCAtMCwwICsxLDE3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVHlj
aG8gTmlnaHRpbmdhbGUgPHR5Y2hvLm5pZ2h0aW5nYWxlQHBsdXJpYnVzbmV0d29ya3MuY29tPgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYyAyODIyODcgMjAxNS0wNC0zMCAy
MjoyMzoyMlogbmVlbCAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxz
eXMvc3lzdG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oPgorCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk
ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5oIgorI2lu
Y2x1ZGUgInZtbV9pb3BvcnQuaCIKKyNpbmNsdWRlICJ2bW1fa3RyLmgiCisKKyNkZWZpbmUJTUFY
X0lPUE9SVFMJCTEyODAKKworaW9wb3J0X2hhbmRsZXJfZnVuY190IGlvcG9ydF9oYW5kbGVyW01B
WF9JT1BPUlRTXSA9IHsKKwlbVElNRVJfTU9ERV0gPSB2YXRwaXRfaGFuZGxlciwKKwlbVElNRVJf
Q05UUjBdID0gdmF0cGl0X2hhbmRsZXIsCisJW1RJTUVSX0NOVFIxXSA9IHZhdHBpdF9oYW5kbGVy
LAorCVtUSU1FUl9DTlRSMl0gPSB2YXRwaXRfaGFuZGxlciwKKwlbTk1JU0NfUE9SVF0gPSB2YXRw
aXRfbm1pc2NfaGFuZGxlciwKKwlbSU9fSUNVMV0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJ
W0lPX0lDVTEgKyBJQ1VfSU1SX09GRlNFVF0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJW0lP
X0lDVTJdID0gdmF0cGljX3NsYXZlX2hhbmRsZXIsCisJW0lPX0lDVTIgKyBJQ1VfSU1SX09GRlNF
VF0gPSB2YXRwaWNfc2xhdmVfaGFuZGxlciwKKwlbSU9fRUxDUjFdID0gdmF0cGljX2VsY19oYW5k
bGVyLAorCVtJT19FTENSMl0gPSB2YXRwaWNfZWxjX2hhbmRsZXIsCisJW0lPX1BNVE1SXSA9IHZw
bXRtcl9oYW5kbGVyLAorCVtJT19SVENdID0gdnJ0Y19hZGRyX2hhbmRsZXIsCisJW0lPX1JUQyAr
IDFdID0gdnJ0Y19kYXRhX2hhbmRsZXIsCit9OworCisjaWZkZWYgS1RSCitzdGF0aWMgY29uc3Qg
Y2hhciAqCitpbm91dF9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWlu
dCBpbmRleDsKKworCXN0YXRpYyBjb25zdCBjaGFyICppb2Rlc2NbXSA9IHsKKwkJIm91dGIiLCAi
b3V0dyIsICJvdXRsIiwKKwkJImluYiIsICJpbnciLCAiaW5sIiwKKwkJIm91dHNiIiwgIm91dHN3
IiwgIm91dHNkIiwKKwkJImluc2IiLCAiaW5zdyIsICJpbnNkIiwKKwl9OworCisJc3dpdGNoICh2
bWV4aXQtPnUuaW5vdXQuYnl0ZXMpIHsKKwljYXNlIDE6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7
CisJY2FzZSAyOgorCQlpbmRleCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZGV4ID0g
MjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZtZXhpdC0+dS5pbm91dC5pbikKKwkJaW5kZXggKz0g
MzsKKworCWlmICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQlpbmRleCArPSA2OworCisJS0FT
U0VSVChpbmRleCA8IG5pdGVtcyhpb2Rlc2MpLCAoIiVzOiBpbnZhbGlkIGluZGV4ICVkIiwKKwkg
ICAgX19mdW5jX18sIGluZGV4KSk7CisKKwlyZXR1cm4gKGlvZGVzY1tpbmRleF0pOworfQorI2Vu
ZGlmCS8qIEtUUiAqLworCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3BvcnQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwKKyAgICBib29sICpyZXR1
KQoreworCWlvcG9ydF9oYW5kbGVyX2Z1bmNfdCBoYW5kbGVyOworCXVpbnQzMl90IG1hc2ssIHZh
bDsKKwlpbnQgZXJyb3I7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yIHRo
ZSBJL08gcG9ydCB0aGVuIHB1bnQgdG8gdXNlcnNwYWNlLgorCSAqLworCWlmICh2bWV4aXQtPnUu
aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k
bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgeworCQkqcmV0dSA9IHRydWU7CisJ
CXJldHVybiAoMCk7CisJfQorCisJbWFzayA9IHZpZV9zaXplMm1hc2sodm1leGl0LT51Lmlub3V0
LmJ5dGVzKTsKKworCWlmICghdm1leGl0LT51Lmlub3V0LmluKSB7CisJCXZhbCA9IHZtZXhpdC0+
dS5pbm91dC5lYXggJiBtYXNrOworCX0KKworCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlk
LCB2bWV4aXQtPnUuaW5vdXQuaW4sCisJICAgIHZtZXhpdC0+dS5pbm91dC5wb3J0LCB2bWV4aXQt
PnUuaW5vdXQuYnl0ZXMsICZ2YWwpOworCWlmIChlcnJvcikgeworCQkvKgorCQkgKiBUaGUgdmFs
dWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHRoZSByZXR1cm4gdmFsdWUKKwkJ
ICogb2Ygdm1fcnVuKCkuIFRoaXMgbmVlZHMgdG8gYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3
aXNlIGl0CisJCSAqIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhICJwc2V1ZG8tZXJyb3IiIGxpa2Ug
RVJFU1RBUlQuCisJCSAqCisJCSAqIEVuZm9yY2UgdGhpcyBieSBtYXBwaW5nIGFsbCBlcnJvcnMg
dG8gRUlPLgorCQkgKi8KKwkJcmV0dXJuIChFSU8pOworCX0KKworCWlmICh2bWV4aXQtPnUuaW5v
dXQuaW4pIHsKKwkJdm1leGl0LT51Lmlub3V0LmVheCAmPSB+bWFzazsKKwkJdm1leGl0LT51Lmlu
b3V0LmVheCB8PSB2YWwgJiBtYXNrOworCQllcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bSwgdmNw
dWlkLCBWTV9SRUdfR1VFU1RfUkFYLAorCQkgICAgdm1leGl0LT51Lmlub3V0LmVheCk7CisJCUtB
U1NFUlQoZXJyb3IgPT0gMCwgKCJlbXVsYXRlX2lvcG9ydDogZXJyb3IgJWQgc2V0dGluZyBndWVz
dCAiCisJCSAgICAicmF4IHJlZ2lzdGVyIiwgZXJyb3IpKTsKKwl9CisJKnJldHUgPSBmYWxzZTsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3N0cihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0LCBib29sICpyZXR1KQor
eworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOwkvKiBSZXR1cm4gdG8gdXNlcnNwYWNlIHRv
IGZpbmlzaCBlbXVsYXRpb24gKi8KK30KKworaW50Cit2bV9oYW5kbGVfaW5vdXQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwgYm9vbCAqcmV0dSkKK3sK
KwlpbnQgYnl0ZXMsIGVycm9yOworCisJYnl0ZXMgPSB2bWV4aXQtPnUuaW5vdXQuYnl0ZXM7CisJ
S0FTU0VSVChieXRlcyA9PSAxIHx8IGJ5dGVzID09IDIgfHwgYnl0ZXMgPT0gNCwKKwkgICAgKCJ2
bV9oYW5kbGVfaW5vdXQ6IGludmFsaWQgb3BlcmFuZCBzaXplICVkIiwgYnl0ZXMpKTsKKworCWlm
ICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRfc3RyKHZt
LCB2Y3B1aWQsIHZtZXhpdCwgcmV0dSk7CisJZWxzZQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRf
cG9ydCh2bSwgdmNwdWlkLCB2bWV4aXQsIHJldHUpOworCisJVkNQVV9DVFI0KHZtLCB2Y3B1aWQs
ICIlcyVzIDB4JTA0eDogJXMiLAorCSAgICB2bWV4aXQtPnUuaW5vdXQucmVwID8gInJlcCAiIDog
IiIsCisJICAgIGlub3V0X2luc3RydWN0aW9uKHZtZXhpdCksCisJICAgIHZtZXhpdC0+dS5pbm91
dC5wb3J0LAorCSAgICBlcnJvciA/ICJlcnJvciIgOiAoKnJldHUgPyAidXNlcnNwYWNlIiA6ICJo
YW5kbGVkIikpOworCisJcmV0dXJuIChlcnJvcik7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaCAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv
cnQuaAotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaAkyMDE2LTA5LTI5IDAw
OjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9w
b3J0LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43OTU5NDAwMDAgKzAwMDAKQEAgLTI5LDYgKzI5LDIy
IEBACiAjaWZuZGVmCV9WTU1fSU9QT1JUX0hfCiAjZGVmaW5lCV9WTU1fSU9QT1JUX0hfCiAKKyNk
ZWZpbmUgVk1NX0lPUE9SVF9SRUdfSEFORExFUgorI2lmZGVmIFZNTV9JT1BPUlRfUkVHX0hBTkRM
RVIKK3N0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXI7CitzdHJ1Y3QgaW9yZWdoOworCitzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2hfaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK3ZvaWQgaW9yZWdoX2NsZWFudXAo
c3RydWN0IGlvcmVnaCAqaW9yZWdoKTsKKworaW50IHZtbV9pb3BvcnRfcmVnX2hhbmRsZXIoc3Ry
dWN0IHZtICp2bSwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19k
YXRhLCB1aW50MzJfdCBkYXRhLCBlbnVtIHZtX2lvX3JlZ2hfdHlwZSB0eXBlLCB2b2lkICphcmcp
OworI2Vsc2UgLyogIVZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKyNkZWZpbmUgaW9yZWdoX2lu
aXQoXzEpCShOVUxMKQorI2RlZmluZSBpb3JlZ2hfY2xlYW51cChfMSkKKyNkZWZpbmUgdm1tX2lv
cG9ydF9yZWdfaGFuZGxlcihfMSwgXzIsIF8zLCBfNCxfNSwgXzYsIF83KSAoRUlOVkFMKQorI2Vu
ZGlmIC8qIFZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKwogdHlwZWRlZiBpbnQgKCppb3BvcnRf
aGFuZGxlcl9mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsCiAgICAgYm9vbCBpbiwg
aW50IHBvcnQsIGludCBieXRlcywgdWludDMyX3QgKnZhbCk7CiAKZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5oLm9yaWcgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt
bS92bW1faW9wb3J0Lmgub3JpZwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQu
aC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNDA5MDYw
MDAwICswMDAwCkBAIC0wLDAgKzEsMzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0IFR5
Y2hvIE5pZ2h0aW5nYWxlIDx0eWNoby5uaWdodGluZ2FsZUBwbHVyaWJ1c25ldHdvcmtzLmNvbT4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv
cnQuaCAyNzM3MDYgMjAxNC0xMC0yNiAxOTowMzowNlogbmVlbCAkCisgKi8KKworI2lmbmRlZglf
Vk1NX0lPUE9SVF9IXworI2RlZmluZQlfVk1NX0lPUE9SVF9IXworCit0eXBlZGVmIGludCAoKmlv
cG9ydF9oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwKKyAgICBib29s
IGluLCBpbnQgcG9ydCwgaW50IGJ5dGVzLCB1aW50MzJfdCAqdmFsKTsKKworaW50IHZtX2hhbmRs
ZV9pbm91dChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1lLCBi
b29sICpyZXR1KTsKKworI2VuZGlmCS8qIF9WTU1fSU9QT1JUX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmMgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt
bS92bW1fdXNlcm1lbS5jCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYwkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fdXNlcm1lbS5jCTIwMTYtMTItMDEgMTQ6NDI6MzguNDEwNTk2MDAwICswMDAwCkBA
IC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFy
ZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L3NnbGlzdC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5o
PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUg
PHZtL3ZtX3BhcmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21h
cC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4K
KyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4K
KworI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgor
ICogdXNlcm1lbSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1
ZmZlciAoZWcuIGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBm
ZWF0dXJlIGlzIHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRo
ZSBuZXRtYXAgbWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUg
dXNlcnNwYWNlIGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzog
d2UgY2FuIGNyZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFY
X1VTRVJNRU1TCTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2Ug
ICAqdm1zcGFjZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJ
LyogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tN
QVhfVVNFUk1FTVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3Bh
Y2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJ
Zm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5s
ZW4gPT0gMCkgeworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVt
c1tpXS5ncGEgPSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJ
fQorCX0KKworCWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVt
X2FkZDogZW1wdHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0
cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlp
bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNl
cm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJ
CQkmJiB1c2VybWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNp
emVvZihzdHJ1Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4g
MDsKK30KKworYm9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFj
ZSwgdm1fcGFkZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VT
RVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1
c2VybWVtc1tpXS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1z
W2ldLmdwYSAmJgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikK
KwkJCXJldHVybiAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3Rf
dAordm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3Qg
Z3BhLCBzaXplX3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQor
eworCWludCBlcnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21h
cF9lbnRyeV90IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90Owor
CWJvb2xlYW5fdCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9t
YXA7CisJLyogbG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8K
KwllcnJvciA9IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9U
X1JXLCAmZW50cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAg
dGggdm1fb2JqZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVy
cm9yID0gdm1fbWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVu
LCAwLAorCQkJCSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsK
KwkJaWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUo
b2JqKTsKKwkJCW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwg
ZW50cnkpOworCisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8K
KwlpZiAob2JqICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1f
dXNlcm1lbV9hZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30K
Kwordm9pZAordm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk
ZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1l
bV9kZWwodm1zcGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJl
dHVybiB2YWx1ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+
dm1fbWFwLCBncGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmpl
Y3RfZGVhbGxvY2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVj
dCB2bXNwYWNlICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9V
U0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsK
KwkJCS8vVE9ETyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9t
YXAsIHVzZXJtZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVt
c1tpXS5sZW4pOworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0p
KTsKKwkJfQorCX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz
ZXJtZW0uYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCi0t
LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy
bWVtLmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNTI1MDAwMCArMDAwMApAQCAtMCwwICsx
LDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTdGVmYW5vIEdhcnphcmVsbGEgKHN0
ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNE
SUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz
L3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9zZ2xpc3Qu
aD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4KKyNpbmNs
dWRlIDxzeXMvcHJvYy5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS92bV9w
YXJhbS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNp
bmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVk
ZSA8dm0vdm1fcGFnZXIuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisKKyNpbmNs
dWRlICJ2bW1fbWVtLmgiCisjaW5jbHVkZSAidm1tX3VzZXJtZW0uaCIKKworLyoKKyAqIHVzZXJt
ZW0gZnVuY3Rpb25zIGFsbG93IHVzIHRvIG1hcCBhbiBob3N0IHVzZXJzcGFjZSBidWZmZXIgKGVn
LiBmcm9tIGJoeXZlKQorICogaW4gdGhlIGd1ZXN0IFZNLgorICoKKyAqIFRoaXMgZmVhdHVyZSBp
cyB1c2VkIHRvIGltcGxlbWVudCBwdG5ldG1hcCBvbiBiaHl2ZSwgbWFwcGluZyB0aGUgbmV0bWFw
IG1lbW9yeQorICogKHJldHVybmVkIGJ5IHRoZSBtbWFwKCkgaW4gdGhlIGJ5dmhlIHVzZXJzcGFj
ZSBhcHBsaWNhdGlvbikgaW4gdGhlIGd1ZXN0IFZNLgorICovCisKKy8qIFRPRE86IHdlIGNhbiBj
cmVhdGUgYSBkeW5hbWljYWwgbGlzdCBvZiB1c2VybWVtICovCisjZGVmaW5lIE1BWF9VU0VSTUVN
Uwk2NAorCitzdGF0aWMgc3RydWN0IHVzZXJtZW0geworCXN0cnVjdCB2bXNwYWNlICAgKnZtc3Bh
Y2U7CS8qIGd1ZXN0IGFkZHJlc3Mgc3BhY2UgKi8KKwl2bV9wYWRkcl90CWdwYTsJCS8qIGd1ZXN0
IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzaXplX3QJCWxlbjsKK30gdXNlcm1lbXNbTUFYX1VTRVJN
RU1TXTsKKworc3RhdGljIGludAordm1tX3VzZXJtZW1fYWRkKHN0cnVjdCB2bXNwYWNlICp2bXNw
YWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9
IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0ubGVuID09IDAp
IHsKKwkJCXVzZXJtZW1zW2ldLnZtc3BhY2UgPSB2bXNwYWNlOworCQkJdXNlcm1lbXNbaV0uZ3Bh
ID0gZ3BhOworCQkJdXNlcm1lbXNbaV0ubGVuID0gbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisK
KwlpZiAoaSA9PSBNQVhfVVNFUk1FTVMpIHsKKwkJcHJpbnRmKCJ2bW1fdXNlcm1lbV9hZGQ6IGVt
cHR5IHVzZXJtZW0gc2xvdCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV91c2VybWVtX2RlbChzdHJ1Y3Qgdm1z
cGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisK
Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ld
LnZtc3BhY2UgPT0gdm1zcGFjZSAmJiB1c2VybWVtc1tpXS5ncGEgPT0gZ3BhCisJCQkJJiYgdXNl
cm1lbXNbaV0ubGVuID09IGxlbikgeworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3Ry
dWN0IHVzZXJtZW0pKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisK
K2Jvb2xlYW5fdAordXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3Bh
ZGRyX3QgZ3BhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg
aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlICE9IHZtc3BhY2UgfHwgdXNlcm1lbXNb
aV0ubGVuID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKGdwYSA+PSB1c2VybWVtc1tpXS5ncGEg
JiYKKwkJCQlncGEgPCB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4pCisJCQlyZXR1
cm4gKFRSVUUpOworCX0KKwlyZXR1cm4gKEZBTFNFKTsKK30KKwordm1fb2JqZWN0X3QKK3ZtbV91
c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6
ZV90IGxlbiwKKwkgICAgICAgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQg
ZXJyb3I7CisJdm1fb2JqZWN0X3Qgb2JqOworCXZtX21hcF90IG1hcDsKKwl2bV9tYXBfZW50cnlf
dCBlbnRyeTsKKwl2bV9waW5kZXhfdCBpbmRleDsKKwl2bV9wcm90X3QgcHJvdDsKKwlib29sZWFu
X3Qgd2lyZWQ7CisKKwltYXAgPSAmdGQtPnRkX3Byb2MtPnBfdm1zcGFjZS0+dm1fbWFwOworCS8q
IGxvb2t1cCB0aGUgdm1fb2JqZWN0IHRoYXQgZGVzY3JpYmUgdXNlciBhZGRyICovCisJZXJyb3Ig
PSB2bV9tYXBfbG9va3VwKCZtYXAsICh1bnNpZ25lZCBsb25nKWJ1ZiwgVk1fUFJPVF9SVywgJmVu
dHJ5LAorCQkmb2JqLCAmaW5kZXgsICZwcm90LCAmd2lyZWQpOworCisJLyogbWFwIHRoIHZtX29i
amVjdCBpbiB0aGUgdm1zcGFjZSAqLworCWlmIChvYmogIT0gTlVMTCkgeworCQllcnJvciA9IHZt
X21hcF9maW5kKCZ2bXNwYWNlLT52bV9tYXAsIG9iaiwgaW5kZXgsICZncGEsIGxlbiwgMCwKKwkJ
CQkgICAgVk1GU19OT19TUEFDRSwgVk1fUFJPVF9SVywgVk1fUFJPVF9SVywgMCk7CisJCWlmIChl
cnJvciAhPSBLRVJOX1NVQ0NFU1MpIHsKKwkJCXZtX29iamVjdF9kZWFsbG9jYXRlKG9iaik7CisJ
CQlvYmogPSBOVUxMOworCQl9CisJfQorCXZtX21hcF9sb29rdXBfZG9uZShtYXAsIGVudHJ5KTsK
KworCS8qIGFjcXVpcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgdm1fb2JqZWN0ICovCisJaWYgKG9i
aiAhPSBOVUxMKSB7CisJCXZtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJdm1tX3VzZXJtZW1f
YWRkKHZtc3BhY2UsIGdwYSwgbGVuKTsKKwl9CisKKwlyZXR1cm4gKG9iaik7Cit9CisKK3ZvaWQK
K3ZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3Bh
LCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwlyZXQgID0gdm1tX3VzZXJtZW1fZGVsKHZt
c3BhY2UsIGdwYSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCS8vVE9ETyBjaGVjayByZXR1cm4gdmFs
dWUgb2Ygdm1fbWFwX3JlbW92ZSA/CisJCXZtX21hcF9yZW1vdmUoJnZtc3BhY2UtPnZtX21hcCwg
Z3BhLCBncGEgKyBsZW4pOworCQkvL1RPRE8gc2hvdWxkIHdlIGNhbGwgdm1fb2JqZWN0X2RlYWxs
b2NhdGUgPworCX0KK30KKwordm9pZAordm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFj
ZSAqdm1zcGFjZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7
IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlKSB7CisJCQkvL1RP
RE8gc2FtZSBhcyBhYm92ZQorCQkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCB1c2Vy
bWVtc1tpXS5ncGEsCisJCQkJICAgICAgdXNlcm1lbXNbaV0uZ3BhICsgdXNlcm1lbXNbaV0ubGVu
KTsKKwkJCWJ6ZXJvKCZ1c2VybWVtc1tpXSwgc2l6ZW9mKHN0cnVjdCB1c2VybWVtKSk7CisJCX0K
Kwl9Cit9CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl
ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJ
RCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv
c3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3NnbGlzdC5o
PgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgorI2luY2x1
ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX3Bh
cmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5oPgorI2lu
Y2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRl
IDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4KKworI2luY2x1
ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgorICogdXNlcm1l
bSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1ZmZlciAoZWcu
IGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBmZWF0dXJlIGlz
IHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRoZSBuZXRtYXAg
bWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUgdXNlcnNwYWNl
IGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzogd2UgY2FuIGNy
ZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFYX1VTRVJNRU1T
CTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2UgICAqdm1zcGFj
ZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJLyogZ3Vlc3Qg
cGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tNQVhfVVNFUk1F
TVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3BhY2UgKnZtc3Bh
Y2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5sZW4gPT0gMCkg
eworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVtc1tpXS5ncGEg
PSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJfQorCX0KKwor
CWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVtX2FkZDogZW1w
dHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0cnVjdCB2bXNw
YWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwor
CWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0u
dm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJCQkmJiB1c2Vy
bWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNpemVvZihzdHJ1
Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
Ym9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk
ZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBp
KyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1c2VybWVtc1tp
XS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1zW2ldLmdwYSAm
JgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikKKwkJCXJldHVy
biAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3RfdAordm1tX3Vz
ZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl
X3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBl
cnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21hcF9lbnRyeV90
IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90OworCWJvb2xlYW5f
dCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9tYXA7CisJLyog
bG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8KKwllcnJvciA9
IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9UX1JXLCAmZW50
cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAgdGggdm1fb2Jq
ZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVycm9yID0gdm1f
bWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVuLCAwLAorCQkJ
CSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsKKwkJaWYgKGVy
cm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUob2JqKTsKKwkJ
CW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwgZW50cnkpOwor
CisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8KKwlpZiAob2Jq
ICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1fdXNlcm1lbV9h
ZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30KKwordm9pZAor
dm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEs
IHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1lbV9kZWwodm1z
cGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJldHVybiB2YWx1
ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCBn
cGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmplY3RfZGVhbGxv
Y2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNwYWNl
ICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg
aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsKKwkJCS8vVE9E
TyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9tYXAsIHVzZXJt
ZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4p
OworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0pKTsKKwkJfQor
CX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaCAv
dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgKLS0tIHVzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fdXNlcm1lbS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgJMjAxNi0xMS0zMCAxMDo1Njow
NS44MDQyNDEwMDAgKzAwMDAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnphcmVsbGFAZ21haWwuY29tKQor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNp
Zm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1fVVNFUk1FTV9IXworCitzdHJ1Y3Qg
dm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNl
ICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0
aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKiwgdm1f
cGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1
Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAq
LCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBT
dGVmYW5vIEdhcnphcmVsbGEgKHN0ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZglf
Vk1NX1VTRVJNRU1fSF8KKyNkZWZpbmUJX1ZNTV9VU0VSTUVNX0hfCisKK3N0cnVjdCB2bTsKKwor
c3RydWN0IHZtX29iamVjdCAqdm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKiwgdm1f
cGFkZHJfdCBncGEsCisJCQkJIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAq
dGQpOwordm9pZAkJdm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90
IGdwYSwgc2l6ZV90IGxlbik7Cit2b2lkCQl2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNw
YWNlICopOworYm9vbGVhbl90CXVzZXJtZW1fbWFwcGVkKHN0cnVjdCB2bXNwYWNlICosIHZtX3Bh
ZGRyX3QgZ3BhKTsKKworI2VuZGlmCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8g
R2FyemFyZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNF
Uk1FTV9IXworI2RlZmluZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qg
dm1fb2JqZWN0ICp2bW1fdXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90
IGdwYSwKKwkJCQkgc2l6ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2
b2lkCQl2bW1fdXNlcm1lbV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBz
aXplX3QgbGVuKTsKK3ZvaWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7
Citib29sZWFuX3QJdXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBn
cGEpOworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz
ZXJtZW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCi0t
LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy
bWVtLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNzQzOTAwMCArMDAwMApAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl
ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNFUk1FTV9IXworI2RlZmlu
ZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qgdm1fb2JqZWN0ICp2bW1f
dXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSwKKwkJCQkgc2l6
ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCQl2bW1fdXNlcm1l
bV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK3Zv
aWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7Citib29sZWFuX3QJdXNl
cm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEpOworCisjZW5kaWYK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdh
cnphcmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1f
VVNFUk1FTV9IXworCitzdHJ1Y3Qgdm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVt
X2FsbG9jKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVu
LCB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUo
c3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1t
X3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21h
cHBlZChzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmggL3Vzci9zcmMvc3lz
L2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf
ZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9kZXYvbmV0bWFwL2lmX2VtX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQx
ODIyMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9lbV9uZXRtYXAuaCAyOTMzMzEgMjAxNi0wMS0w
NyAxNjo0Mjo0OFogc2JydW5vICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lm
X2VtX25ldG1hcC5oIDIzODk4NSAyMDEyLTA4LTAyIDExOjU5OjQzWiBsdWlnaSAkCiAgKgogICog
bmV0bWFwIHN1cHBvcnQgZm9yOiBlbS4KICAqCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2
L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaWdiX25l
dG1hcC5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaAkyMDE2LTA5
LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv
aWZfaWdiX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQyNTQyMDAwICswMDAwCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2
L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp
ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaCAyNTYy
MDAgMjAxMy0xMC0wOSAxNzozMjo1MlogamZ2ICQKICAqCiAgKiBOZXRtYXAgc3VwcG9ydCBmb3Ig
aWdiLCBwYXJ0bHkgY29udHJpYnV0ZWQgYnkgQWhtZWQgS29vbGkKICAqIEZvciBkZXRhaWxzIG9u
IG5ldG1hcCBzdXBwb3J0IHBsZWFzZSBzZWUgaXhnYmVfbmV0bWFwLmgKZGlmZiAtdSAtciAtTiB1
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvZGV2L25l
dG1hcC9pZl9peGxfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaXhsX25l
dG1hcC5oCTIwMTYtMDktMjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9pZl9peGxfbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDI5Nzkw
MDAgKzAwMDAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAyODUzNDkgMjAxNS0wNy0xMCAw
NTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvaWZfaXhs
X25ldG1hcC5oIDI3OTIzMiAyMDE1LTAyLTI0IDA2OjIwOjUwWiBsdWlnaSAkCiAgKgogICogbmV0
bWFwIHN1cHBvcnQgZm9yOiBpeGwKICAqCkBAIC01OSw3ICs1OSw3IEBACiAvKgogICogZGV2aWNl
LXNwZWNpZmljIHN5c2N0bCB2YXJpYWJsZXM6CiAgKgotICogaXhsX2NyY3N0cmlwOiAwOiBrZWVw
IENSQyBpbiByeCBmcmFtZXMgKGRlZmF1bHQpLCAxOiBzdHJpcCBpdC4KKyAqIGl4bF9jcmNzdHJp
cDogMDogTklDIGtlZXBzIENSQyBpbiByeCBmcmFtZXMsIDE6IE5JQyBzdHJpcHMgaXQgKGRlZmF1
bHQpLgogICoJRHVyaW5nIHJlZ3VsYXIgb3BlcmF0aW9ucyB0aGUgQ1JDIGlzIHN0cmlwcGVkLCBi
dXQgb24gc29tZQogICoJaGFyZHdhcmUgcmVjZXB0aW9uIG9mIGZyYW1lcyBub3QgbXVsdGlwbGUg
b2YgNjQgaXMgc2xvd2VyLAogICoJc28gdXNpbmcgY3Jjc3RyaXA9MCBoZWxwcyBpbiBiZW5jaG1h
cmtzLgpAQCAtNzEsMTAgKzcxLDkgQEAKIC8qCiAgKiBUaGUgeGwgZHJpdmVyIGJ5IGRlZmF1bHQg
c3RyaXBzIENSQ3MgYW5kIHdlIGRvIG5vdCBvdmVycmlkZSBpdC4KICAqLwotaW50IGl4bF9yeF9t
aXNzLCBpeGxfcnhfbWlzc19idWZzLCBpeGxfY3Jjc3RyaXAgPSAxOwogI2lmIDAKIFNZU0NUTF9J
TlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfY3Jjc3RyaXAsCi0gICAgQ1RMRkxBR19SVywg
Jml4bF9jcmNzdHJpcCwgMSwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsKKyAgICBDVExGTEFH
X1JXLCAmaXhsX2NyY3N0cmlwLCAxLCAiTklDIHN0cmlwcyBDUkMgb24gcnggZnJhbWVzIik7CiAj
ZW5kaWYKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfcnhfbWlzcywKICAg
ICBDVExGTEFHX1JXLCAmaXhsX3J4X21pc3MsIDAsICJwb3RlbnRpYWxseSBtaXNzZWQgcnggaW50
ciIpOwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5o
IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAotLS0gdXNyL3NyYy9zeXMv
ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0MzMyNzAwMCArMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAKIC8qCi0g
KiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5oIDI4
NTM0OSAyMDE1LTA3LTEwIDA1OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRDogaGVhZC9zeXMv
ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmggMjcxODQ5IDIwMTQtMDktMTkgMDM6NTE6MjZaIGds
ZWJpdXMgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogbGVtCiAgKgpAQCAtMzUsMTIgKzM1
LDggQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxzeXMvc2VsaW5mby5o
PgotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jaW5jbHVkZSA8dm0vcG1hcC5oPiAgICAvKiB2dG9waHlz
ID8gKi8KICNpbmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CiAKLWV4dGVybiBpbnQg
bmV0bWFwX2FkYXB0aXZlX2lvOwotCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4gV2UgYXJl
IGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCiAgKi8KQEAgLTgxLDYgKzc3LDIyIEBACiB9CiAK
IAorc3RhdGljIHZvaWQKK2xlbV9uZXRtYXBfaW50cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5h
LCBpbnQgb25vZmYpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBuYS0+aWZwOworCXN0cnVjdCBh
ZGFwdGVyICphZGFwdGVyID0gaWZwLT5pZl9zb2Z0YzsKKworCUVNX0NPUkVfTE9DSyhhZGFwdGVy
KTsKKwlpZiAob25vZmYpIHsKKwkJbGVtX2VuYWJsZV9pbnRyKGFkYXB0ZXIpOworCX0gZWxzZSB7
CisJCWxlbV9kaXNhYmxlX2ludHIoYWRhcHRlcik7CisJfQorCUVNX0NPUkVfVU5MT0NLKGFkYXB0
ZXIpOworfQorCisKIC8qCiAgKiBSZWNvbmNpbGUga2VybmVsIGFuZCB1c2VyIHZpZXcgb2YgdGhl
IHRyYW5zbWl0IHJpbmcuCiAgKi8KQEAgLTk5LDEwICsxMTEsNiBAQAogCiAJLyogZGV2aWNlLXNw
ZWNpZmljICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lm
ZGVmIE5JQ19QQVJBVklSVAotCXN0cnVjdCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNz
YjsKLQl1aW50NjRfdCAqY3NiZCA9ICh1aW50NjRfdCAqKShjc2IgKyAxKTsKLSNlbmRpZiAvKiBO
SUNfUEFSQVZJUlQgKi8KIAogCWJ1c19kbWFtYXBfc3luYyhhZGFwdGVyLT50eGRtYS5kbWFfdGFn
LCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwpAQCAt
MTEzLDE5ICsxMjEsNiBAQAogCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAh
PSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwotI2lmZGVmIE5JQ19Q
QVJBVklSVAotCQlpbnQgZG9fa2ljayA9IDA7Ci0JCXVpbnQ2NF90IHQgPSAwOyAvLyB0aW1lc3Rh
bXAKLQkJaW50IG4gPSBoZWFkIC0gbm1faTsKLQkJaWYgKG4gPCAwKQotCQkJbiArPSBsaW0gKyAx
OwotCQlpZiAoY3NiKSB7Ci0JCQl0ID0gcmR0c2MoKTsgLyogbGFzdCB0aW1lc3RhbXAgKi8KLQkJ
CWNzYmRbMTZdICs9IHQgLSBjc2JkWzBdOyAvKiB0b3RhbCBXZyAqLwotCQkJY3NiZFsxN10gKz0g
bjsJCS8qIFdnIGNvdW50ICovCi0JCQljc2JkWzBdID0gdDsKLQkJfQotI2VuZGlmIC8qIE5JQ19Q
QVJBVklSVCAqLwogCQluaWNfaSA9IG5ldG1hcF9pZHhfazJuKGtyaW5nLCBubV9pKTsKIAkJd2hp
bGUgKG5tX2kgIT0gaGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmct
PnNsb3Rbbm1faV07CkBAIC0xNjYsMzggKzE2MSw4IEBACiAJCWJ1c19kbWFtYXBfc3luYyhhZGFw
dGVyLT50eGRtYS5kbWFfdGFnLCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZ
TkNfUFJFUkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAotI2lmZGVmIE5JQ19QQVJBVklS
VAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBpZiBuZWVkZWQgKi8K
LQkJaWYgKGNzYikgewotCQkJdCA9IHJkdHNjKCk7Ci0JCQlpZiAoY3NiLT5ob3N0X25lZWRfdHhr
aWNrID09IDIpIHsKLQkJCQkvKiBjYW4gY29tcHV0ZSBhbiB1cGRhdGUgb2YgZGVsdGEgKi8KLQkJ
CQlpbnQ2NF90IGRlbHRhID0gdCAtIGNzYmRbM107Ci0JCQkJaWYgKGRlbHRhIDwgMCkKLQkJCQkJ
ZGVsdGEgPSAtZGVsdGE7Ci0JCQkJaWYgKGNzYmRbOF0gPT0gMCB8fCBkZWx0YSA8IGNzYmRbOF0p
IHsKLQkJCQkJY3NiZFs4XSA9IGRlbHRhOwotCQkJCQljc2JkWzldKys7Ci0JCQkJfQotCQkJCWNz
YmRbMTBdKys7Ci0JCQl9Ci0JCQljc2ItPmd1ZXN0X3RkdCA9IG5pY19pOwotCQkJY3NiZFsxOF0g
Kz0gdCAtIGNzYmRbMF07IC8vIHRvdGFsIHdwCi0JCQljc2JkWzE5XSArPSBuOwotCQl9Ci0JCWlm
ICghY3NiIHx8ICFjc2ItPmd1ZXN0X2NzYl9vbiB8fCAoY3NiLT5ob3N0X25lZWRfdHhraWNrICYg
MSkpCi0JCQlkb19raWNrID0gMTsKLQkJaWYgKGRvX2tpY2spCi0jZW5kaWYgLyogTklDX1BBUkFW
SVJUICovCiAJCS8qIChyZSlzdGFydCB0aGUgdHggdW5pdCB1cCB0byBzbG90IG5pY19pIChleGNs
dWRlZCkgKi8KIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgRTEwMDBfVERUKDApLCBu
aWNfaSk7Ci0jaWZkZWYgTklDX1BBUkFWSVJUCi0JCWlmIChkb19raWNrKSB7Ci0JCQl1aW50NjRf
dCB0MSA9IHJkdHNjKCk7Ci0JCQljc2JkWzIwXSArPSB0MSAtIHQ7IC8vIHRvdGFsIE5wCi0JCQlj
c2JkWzIxXSsrOwotCQl9Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJfQogCiAJLyoKQEAg
LTIwNiw5MyArMTcxLDYgQEAKIAlpZiAodGlja3MgIT0ga3JpbmctPmxhc3RfcmVjbGFpbSB8fCBm
bGFncyAmIE5BRl9GT1JDRV9SRUNMQUlNIHx8IG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CiAJCWty
aW5nLT5sYXN0X3JlY2xhaW0gPSB0aWNrczsKIAkJLyogcmVjb3JkIGNvbXBsZXRlZCB0cmFuc21p
c3Npb25zIHVzaW5nIFRESCAqLwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkvKiBob3N0IHVwZGF0
ZXMgdGRoIHVuY29uZGl0aW9uYWxseSwgYW5kIHdlIGhhdmUKLQkJICogbm8gc2lkZSBlZmZlY3Rz
IG9uIHJlYWRzLCBzbyB3ZSBjYW4gcmVhZCBmcm9tIHRoZXJlCi0JCSAqIGluc3RlYWQgb2YgZXhp
dGluZy4KLQkJICovCi0JCWlmIChjc2IpIHsKLQkJICAgIHN0YXRpYyBpbnQgZHJhaW4gPSAwLCBu
b2RyYWluPTAsIGdvb2QgPSAwLCBiYWQgPSAwLCBmYWlsID0gMDsKLQkJICAgIHVfaW50IHggPSBh
ZGFwdGVyLT5uZXh0X3R4X3RvX2NsZWFuOwotCQkgICAgY3NiZFsxOV0rKzsgLy8gWFhYIGNvdW50
IHJlY2xhaW1zCi0JCSAgICBuaWNfaSA9IGNzYi0+aG9zdF90ZGg7Ci0JCSAgICBpZiAoY3NiLT5n
dWVzdF9jc2Jfb24pIHsKLQkJCWlmIChuaWNfaSA9PSB4KSB7Ci0JCQkgICAgYmFkKys7Ci0JCSAg
ICAJICAgIGNzYmRbMjRdKys7IC8vIGZhaWxlZCByZWNsYWltcwotCQkJICAgIC8qIG5vIHByb2dy
ZXNzLCByZXF1ZXN0IGtpY2sgYW5kIHJldHJ5ICovCi0JCQkgICAgY3NiLT5ndWVzdF9uZWVkX3R4
a2ljayA9IDE7Ci0JCQkgICAgbWIoKTsgLy8gWFhYIGJhcnJpZXIKLQkJICAgIAkgICAgbmljX2kg
PSBjc2ItPmhvc3RfdGRoOwotCQkJfSBlbHNlIHsKLQkJCSAgICBnb29kKys7Ci0JCQl9Ci0JCQlp
ZiAobmljX2kgIT0geCkgewotCQkJICAgIGNzYi0+Z3Vlc3RfbmVlZF90eGtpY2sgPSAyOwotCQkJ
ICAgIGlmIChuaWNfaSA9PSBjc2ItPmd1ZXN0X3RkdCkKLQkJCQlkcmFpbisrOwotCQkJICAgIGVs
c2UKLQkJCQlub2RyYWluKys7Ci0jaWYgMQotCQkJaWYgKG5ldG1hcF9hZGFwdGl2ZV9pbykgewot
CQkJICAgIC8qIG5ldyBtZWNoYW5pc206IGxhc3QgaGFsZiByaW5nIChvciBzbykKLQkJCSAgICAg
KiByZWxlYXNlZCBvbmUgc2xvdCBhdCBhIHRpbWUuCi0JCQkgICAgICogVGhpcyBlZmZlY3RpdmVs
eSBtYWtlcyB0aGUgc3lzdGVtIHNwaW4uCi0JCQkgICAgICoKLQkJCSAgICAgKiBUYWtlIG5leHRf
dG9fY2xlYW4gKyAxIGFzIGEgcmVmZXJlbmNlLgotCQkJICAgICAqIHRkaCBtdXN0IGJlIGFoZWFk
IG9yIGVxdWFsCi0JCQkgICAgICogT24gZW50cnksIHRoZSBsb2dpY2FsIG9yZGVyIGlzCi0JCQkg
ICAgICoJCXggPCB0ZGggPSBuaWNfaQotCQkJICAgICAqIFdlIGZpcnN0IHB1c2ggdGRoIHVwIHRv
IGF2b2lkIHdyYXBzLgotCQkJICAgICAqIFRoZSBsaW1pdCBpcyB0ZGgtbGwgKGhhbGYgcmluZyku
Ci0JCQkgICAgICogaWYgdGRoLTI1NiA8IHggd2UgcmVwb3J0IHg7Ci0JCQkgICAgICogZWxzZSB3
ZSByZXBvcnQgdGRoLTI1NgotCQkJICAgICAqLwotCQkJICAgIHVfaW50IHRkaCA9IG5pY19pOwot
CQkJICAgIHVfaW50IGxsID0gY3NiZFsxNV07Ci0JCQkgICAgdV9pbnQgZGVsdGEgPSBsaW0vODsK
LQkJCSAgICBpZiAobmV0bWFwX2FkYXB0aXZlX2lvID09IDIgfHwgbGwgPiBkZWx0YSkKLQkJCQlj
c2JkWzE1XSA9IGxsID0gZGVsdGE7Ci0JCQkgICAgZWxzZSBpZiAobmV0bWFwX2FkYXB0aXZlX2lv
ID09IDEgJiYgbGwgPiAxKSB7Ci0JCQkJY3NiZFsxNV0tLTsKLQkJCSAgICB9Ci0KLQkJCSAgICBp
ZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKLQkJCQlSRCg1LCAiYmFkIG5pY19p
ICVkIG9uIGlucHV0IiwgbmljX2kpOwotCQkJICAgIH0KLQkJCSAgICB4ID0gbm1fbmV4dCh4LCBs
aW0pOwotCQkJICAgIGlmICh0ZGggPCB4KQotCQkJCXRkaCArPSBsaW0gKyAxOwotCQkJICAgIGlm
ICh0ZGggPD0geCArIGxsKSB7Ci0JCQkJbmljX2kgPSB4OwotCQkJCWNzYmRbMjVdKys7IC8vcmVw
b3J0IG4gKyAxOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJdGRoID0gbmljX2k7Ci0JCQkJaWYgKHRk
aCA8IGxsKQotCQkJCSAgICB0ZGggKz0gbGltICsgMTsKLQkJCQluaWNfaSA9IHRkaCAtIGxsOwot
CQkJCWNzYmRbMjZdKys7IC8vIHJlcG9ydCB0ZGggLSBsbAotCQkJICAgIH0KLQkJCX0KLSNlbmRp
ZgotCQkJfSBlbHNlIHsKLQkJCSAgICAvKiB3ZSBzdG9wLCBjb3VudCB3aGV0aGVyIHdlIGFyZSBp
ZGxlIG9yIG5vdCAqLwotCQkJICAgIGludCBiaF9hY3RpdmUgPSBjc2ItPmhvc3RfbmVlZF90eGtp
Y2sgJiAyID8gNCA6IDA7Ci0JCQkgICAgY3NiZFsyNysgY3NiLT5ob3N0X25lZWRfdHhraWNrXSsr
OwotCQkJICAgIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8gPT0gMSkgewotCQkJCWlmIChiaF9hY3Rp
dmUgJiYgY3NiZFsxNV0gPiAxKQotCQkJCSAgICBjc2JkWzE1XS0tOwotCQkJCWVsc2UgaWYgKCFi
aF9hY3RpdmUgJiYgY3NiZFsxNV0gPCBsaW0vMikKLQkJCQkgICAgY3NiZFsxNV0rKzsKLQkJCSAg
ICB9Ci0JCQkgICAgYmFkLS07Ci0JCQkgICAgZmFpbCsrOwotCQkJfQotCQkgICAgfQotCQkgICAg
UkQoMSwgImRyYWluICVkIG5vZHJhaW4gJWQgZ29vZCAlZCByZXRyeSAlZCBmYWlsICVkIiwKLQkJ
CWRyYWluLCBub2RyYWluLCBnb29kLCBiYWQsIGZhaWwpOwotCQl9IGVsc2UKLSNlbmRpZiAvKiAh
TklDX1BBUkFWSVJUICovCiAJCW5pY19pID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBF
MTAwMF9UREgoMCkpOwogCQlpZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsgLyog
WFhYIGNhbiBpdCBoYXBwZW4gPyAqLwogCQkJRCgiVERIIHdyYXAgJWQiLCBuaWNfaSk7CkBAIC0z
MjQsMjEgKzIwMiwxMCBAQAogCiAJLyogZGV2aWNlLXNwZWNpZmljICovCiAJc3RydWN0IGFkYXB0
ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lmZGVmIE5JQ19QQVJBVklSVAotCXN0cnVj
dCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNzYjsKLQl1aW50MzJfdCBjc2JfbW9kZSA9
IGNzYiAmJiBjc2ItPmd1ZXN0X2NzYl9vbjsKLQl1aW50MzJfdCBkb19ob3N0X3J4a2ljayA9IDA7
Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAKIAlpZiAoaGVhZCA+IGxpbSkKIAkJcmV0dXJu
IG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAKLSNpZmRlZiBOSUNfUEFSQVZJUlQKLQlpZiAo
Y3NiX21vZGUpIHsKLQkJZm9yY2VfdXBkYXRlID0gMTsKLQkJY3NiLT5ndWVzdF9uZWVkX3J4a2lj
ayA9IDA7Ci0JfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCS8qIFhYWCBjaGVjayBzeW5j
IG1vZGVzICovCiAJYnVzX2RtYW1hcF9zeW5jKGFkYXB0ZXItPnJ4ZG1hLmRtYV90YWcsIGFkYXB0
ZXItPnJ4ZG1hLmRtYV9tYXAsCiAJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5D
X1BPU1RXUklURSk7CkBAIC0zNTcsMjMgKzIyNCw2IEBACiAJCQl1aW50MzJfdCBzdGF0ZXJyID0g
bGUzMnRvaChjdXJyLT5zdGF0dXMpOwogCQkJaW50IGxlbjsKIAotI2lmZGVmIE5JQ19QQVJBVklS
VAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU
QVRfREQpID09IDApIHsKLQkJCQkvKiBkb24ndCBib3RoZXIgdG8gcmV0cnkgaWYgbW9yZSB0aGFu
IDEgcGt0ICovCi0JCQkJaWYgKG4gPiAxKQotCQkJCSAgICBicmVhazsKLQkJCQljc2ItPmd1ZXN0
X25lZWRfcnhraWNrID0gMTsKLQkJCQl3bWIoKTsKLQkJCQlzdGF0ZXJyID0gbGUzMnRvaChjdXJy
LT5zdGF0dXMpOwotCQkJCWlmICgoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX0REKSA9PSAwKSB7
Ci0JCQkJICAgIGJyZWFrOwotCQkJCX0gZWxzZSB7IC8qIHdlIGFyZSBnb29kICovCi0JCQkJICAg
Y3NiLT5ndWVzdF9uZWVkX3J4a2ljayA9IDA7Ci0JCQkJfQotCQkJICAgIH0KLQkJCX0gZWxzZQot
I2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCQkJaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU
QVRfREQpID09IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gPSBsZTE2dG9oKGN1cnItPmxlbmd0aCkg
LSA0OyAvLyBDUkMKQEAgLTM5MCwxOCArMjQwLDYgQEAKIAkJCW5pY19pID0gbm1fbmV4dChuaWNf
aSwgbGltKTsKIAkJfQogCQlpZiAobikgeyAvKiB1cGRhdGUgdGhlIHN0YXRlIHZhcmlhYmxlcyAq
LwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKG4g
PiAxKSB7Ci0JCQkJLyogbGVhdmUgb25lIHNwYXJlIGJ1ZmZlciBzbyB3ZSBhdm9pZCByeGtpY2tz
ICovCi0JCQkJbm1faSA9IG5tX3ByZXYobm1faSwgbGltKTsKLQkJCQluaWNfaSA9IG5tX3ByZXYo
bmljX2ksIGxpbSk7Ci0JCQkJbi0tOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJY3NiLT5ndWVzdF9u
ZWVkX3J4a2ljayA9IDE7Ci0JCQkgICAgfQotCQkJfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAq
LwogCQkJTkQoIiVkIG5ldyBwYWNrZXRzIGF0IG5pYyAlZCBubSAlZCB0YWlsICVkIiwKIAkJCQlu
LAogCQkJCWFkYXB0ZXItPm5leHRfcnhfZGVzY190b19jaGVjaywKQEAgLTQ0MCwxMCArMjc4LDYg
QEAKIAkJCWN1cnItPnN0YXR1cyA9IDA7CiAJCQlidXNfZG1hbWFwX3N5bmMoYWRhcHRlci0+cnh0
YWcsIHJ4YnVmLT5tYXAsCiAJCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCk7Ci0jaWZkZWYgTklD
X1BBUkFWSVJUCi0JCQlpZiAoY3NiX21vZGUgJiYgY3NiLT5ob3N0X3J4a2lja19hdCA9PSBuaWNf
aSkKLQkJCQlkb19ob3N0X3J4a2ljayA9IDE7Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJ
CQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOwogCQkJbmljX2kgPSBubV9uZXh0KG5pY19pLCBs
aW0pOwogCQl9CkBAIC00NTUsMTIgKzI4OSw2IEBACiAJCSAqIHNvIG1vdmUgbmljX2kgYmFjayBi
eSBvbmUgdW5pdAogCQkgKi8KIAkJbmljX2kgPSBubV9wcmV2KG5pY19pLCBsaW0pOwotI2lmZGVm
IE5JQ19QQVJBVklSVAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBp
ZiBuZWVkZWQgKi8KLQkJaWYgKGNzYikKLQkJCWNzYi0+Z3Vlc3RfcmR0ID0gbmljX2k7Ci0JCWlm
ICghY3NiX21vZGUgfHwgZG9faG9zdF9yeGtpY2spCi0jZW5kaWYgLyogTklDX1BBUkFWSVJUICov
CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIEUxMDAwX1JEVCgwKSwgbmljX2kpOwog
CX0KIApAQCAtNDg2LDYgKzMxNCw3IEBACiAJbmEubm1fcnhzeW5jID0gbGVtX25ldG1hcF9yeHN5
bmM7CiAJbmEubm1fcmVnaXN0ZXIgPSBsZW1fbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmluZ3Mg
PSBuYS5udW1fcnhfcmluZ3MgPSAxOworCW5hLm5tX2ludHIgPSBsZW1fbmV0bWFwX2ludHI7CiAJ
bmV0bWFwX2F0dGFjaCgmbmEpOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25l
dG1hcC9pZl9wdG5ldC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3B0bmV0LmMKLS0tIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0NDYyODAwMCArMDAwMApAQCAtMCwwICsxLDIyNzYgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAyMDE2LCBWaW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMs
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
JAorICovCisKKy8qIERyaXZlciBmb3IgcHRuZXQgcGFyYXZpcnR1YWxpemVkIG5ldHdvcmsgZGV2
aWNlLiAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUgPHN5
cy9tYnVmLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUu
aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2lu
Y2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lz
L3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CisKKyNpbmNsdWRlIDx2bS91bWEuaD4KKyNpbmNs
dWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2luY2x1ZGUgPG5ldC9ldGhl
cm5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNp
bmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8
bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+CisjaW5jbHVkZSA8bmV0
L2lmX3ZsYW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0L2JwZi5oPgorCisjaW5jbHVkZSA8bmV0aW5l
dC9pbl9zeXN0bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZf
dmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4K
KyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CisKKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1
ZGUgPGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlICJvcHRfaW5ldC5oIgorI2luY2x1ZGUg
Im9wdF9pbmV0Ni5oIgorCisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKyNpbmNsdWRlIDxuZXQv
bmV0bWFwLmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oPgorI2luY2x1ZGUg
PG5ldC9uZXRtYXBfdmlydC5oPgorI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIuaD4K
KyNpbmNsdWRlIDxkZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oPgorCisjaWZuZGVmIFBU
TkVUX0NTQl9BTExPQworI2Vycm9yICJObyBzdXBwb3J0IGZvciBvbi1kZXZpY2UgQ1NCIgorI2Vu
ZGlmCisKKyNpZm5kZWYgSU5FVAorI2Vycm9yICJJTkVUIG5vdCBkZWZpbmVkLCBjYW5ub3Qgc3Vw
cG9ydCBvZmZsb2FkaW5ncyIKKyNlbmRpZgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw
MDAwMAorc3RhdGljIHVpbnQ2NF90CXB0bmV0X2dldF9jb3VudGVyKGlmX3QsIGlmdF9jb3VudGVy
KTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBpZm5ldCAqaWZfdDsKKyNkZWZpbmUgaWZfZ2V0c29m
dGMoX2lmcCkgICAoX2lmcCktPmlmX3NvZnRjCisjZW5kaWYKKworLy8jZGVmaW5lIFBUTkVUTUFQ
X1NUQVRTCisvLyNkZWZpbmUgREVCVUcKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoeCkgeAor
I2Vsc2UgICAvKiAhREVCVUcgKi8KKyNkZWZpbmUgREJHKHgpCisjZW5kaWYgIC8qICFERUJVRyAq
LworCitleHRlcm4gaW50IHB0bmV0X3ZuZXRfaGRyOyAvKiBUdW5hYmxlIHBhcmFtZXRlciAqLwor
CitzdHJ1Y3QgcHRuZXRfc29mdGM7CisKK3N0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyB7CisJdWlu
dDY0X3QJcGFja2V0czsgLyogaWZfW2lvXXBhY2tldHMgKi8KKwl1aW50NjRfdAlieXRlczsJIC8q
IGlmX1tpb11ieXRlcyAqLworCXVpbnQ2NF90CWVycm9yczsJIC8qIGlmX1tpb11lcnJvcnMgKi8K
Kwl1aW50NjRfdAlpcWRyb3BzOyAvKiBpZl9pcWRyb3BzICovCisJdWludDY0X3QJbWNhc3RzOyAg
LyogaWZfW2lvXW1jYXN0cyAqLworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJdWludDY0X3QJaW50
cnM7CisJdWludDY0X3QJa2lja3M7CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KK307CisK
K3N0cnVjdCBwdG5ldF9xdWV1ZSB7CisJc3RydWN0IHB0bmV0X3NvZnRjCQkqc2M7CisJc3RydWN0
CQkJCXJlc291cmNlICppcnE7CisJdm9pZAkJCQkqY29va2llOworCWludAkJCQlrcmluZ19pZDsK
KwlzdHJ1Y3QgcHRuZXRfcmluZwkJKnB0cmluZzsKKwl1bnNpZ25lZCBpbnQJCQlraWNrOworCXN0
cnVjdCBtdHgJCQlsb2NrOworCXN0cnVjdCBidWZfcmluZwkJCSpidWZyaW5nOyAvKiBmb3IgVFgg
cXVldWVzICovCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCXN0YXRzOworI2lmZGVmIFBUTkVU
TUFQX1NUQVRTCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCWxhc3Rfc3RhdHM7CisjZW5kaWYg
LyogUFRORVRNQVBfU1RBVFMgKi8KKwlzdHJ1Y3QgdGFza3F1ZXVlCQkqdGFza3E7CisJc3RydWN0
IHRhc2sJCQl0YXNrOworCWNoYXIJCQkJbG9ja19uYW1lWzE2XTsKK307CisKKyNkZWZpbmUgUFRO
RVRfUV9MT0NLKF9wcSkJbXR4X2xvY2soJihfcHEpLT5sb2NrKQorI2RlZmluZSBQVE5FVF9RX1RS
WUxPQ0soX3BxKQltdHhfdHJ5bG9jaygmKF9wcSktPmxvY2spCisjZGVmaW5lIFBUTkVUX1FfVU5M
T0NLKF9wcSkJbXR4X3VubG9jaygmKF9wcSktPmxvY2spCisKK3N0cnVjdCBwdG5ldF9zb2Z0YyB7
CisJZGV2aWNlX3QJCWRldjsKKwlpZl90CQkJaWZwOworCXN0cnVjdCBpZm1lZGlhCQltZWRpYTsK
KwlzdHJ1Y3QgbXR4CQlsb2NrOworCWNoYXIJCQlsb2NrX25hbWVbMTZdOworCWNoYXIJCQlod2Fk
ZHJbRVRIRVJfQUREUl9MRU5dOworCisJLyogTWlycm9yIG9mIFBURkVBVCByZWdpc3Rlci4gKi8K
Kwl1aW50MzJfdAkJcHRmZWF0dXJlczsKKwl1bnNpZ25lZCBpbnQJCXZuZXRfaGRyX2xlbjsKKwor
CS8qIFBDSSBCQVJzIHN1cHBvcnQuICovCisJc3RydWN0IHJlc291cmNlCQkqaW9tZW07CisJc3Ry
dWN0IHJlc291cmNlCQkqbXNpeF9tZW07CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1
bnNpZ25lZCBpbnQJCW51bV90eF9yaW5nczsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnF1ZXVlczsK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnJ4cXVldWVzOworCXN0cnVjdCBwdG5ldF9jc2IJKmNzYjsK
KworCXVuc2lnbmVkIGludAkJbWluX3R4X3NwYWNlOworCisJc3RydWN0IG5ldG1hcF9wdF9ndWVz
dF9hZGFwdGVyICpwdG5hOworCisJc3RydWN0IGNhbGxvdXQJCXRpY2s7CisjaWZkZWYgUFRORVRN
QVBfU1RBVFMKKwlzdHJ1Y3QgdGltZXZhbAkJbGFzdF90czsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T
VEFUUyAqLworfTsKKworI2RlZmluZSBQVE5FVF9DT1JFX0xPQ0soX3NjKQltdHhfbG9jaygmKF9z
YyktPmxvY2spCisjZGVmaW5lIFBUTkVUX0NPUkVfVU5MT0NLKF9zYykJbXR4X3VubG9jaygmKF9z
YyktPmxvY2spCisKK3N0YXRpYyBpbnQJcHRuZXRfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGlu
dAlwdG5ldF9hdHRhY2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5ldF9kZXRhY2goZGV2aWNl
X3QpOworc3RhdGljIGludAlwdG5ldF9zdXNwZW5kKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRu
ZXRfcmVzdW1lKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuZXRfc2h1dGRvd24oZGV2aWNlX3Qp
OworCitzdGF0aWMgdm9pZAlwdG5ldF9pbml0KHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgaW50CXB0
bmV0X2lvY3RsKGlmX3QgaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworc3RhdGljIGlu
dAlwdG5ldF9pbml0X2xvY2tlZChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJ
cHRuZXRfc3RvcChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJcHRuZXRfdHJh
bnNtaXQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptKTsKK3N0YXRpYyBpbnQJcHRuZXRfZHJhaW5f
dHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwKKwkJCQkJICAgdW5zaWduZWQg
aW50IGJ1ZGdldCwKKwkJCQkJICAgYm9vbCBtYXlfcmVzY2hlZCk7CitzdGF0aWMgdm9pZAlwdG5l
dF9xZmx1c2goaWZfdCBpZnApOworc3RhdGljIHZvaWQJcHRuZXRfdHhfdGFzayh2b2lkICpjb250
ZXh0LCBpbnQgcGVuZGluZyk7CisKK3N0YXRpYyBpbnQJcHRuZXRfbWVkaWFfY2hhbmdlKGlmX3Qg
aWZwKTsKK3N0YXRpYyB2b2lkCXB0bmV0X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlm
bWVkaWFyZXEgKmlmbXIpOworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCitzdGF0aWMgdm9pZAlwdG5l
dF90aWNrKHZvaWQgKm9wYXF1ZSk7CisjZW5kaWYKKworc3RhdGljIGludAlwdG5ldF9pcnFzX2lu
aXQoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAlwdG5ldF9pcnFzX2Zpbmko
c3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CisKK3N0YXRpYyB1aW50MzJfdCBwdG5ldF9ubV9wdGN0
bChpZl90IGlmcCwgdWludDMyX3QgY21kKTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fY29uZmlnKHN0
cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHVuc2lnbmVkICp0eHIsCisJCQkJdW5zaWduZWQgKnR4
ZCwgdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCk7CitzdGF0aWMgdm9pZAlwdG5ldF91cGRh
dGVfdm5ldF9oZHIoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgaW50CXB0bmV0X25t
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZik7CitzdGF0aWMg
aW50CXB0bmV0X25tX3R4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdz
KTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fcnhzeW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n
LCBpbnQgZmxhZ3MpOworCitzdGF0aWMgdm9pZAlwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSk7
CitzdGF0aWMgdm9pZAlwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSk7CisKK3N0YXRpYyB1bnNp
Z25lZAlwdG5ldF9yeF9kaXNjYXJkKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJCSB1
bnNpZ25lZCBpbnQgaGVhZCk7CitzdGF0aWMgaW50CXB0bmV0X3J4X2VvZihzdHJ1Y3QgcHRuZXRf
cXVldWUgKnBxLCB1bnNpZ25lZCBpbnQgYnVkZ2V0LAorCQkJICAgICBib29sIG1heV9yZXNjaGVk
KTsKK3N0YXRpYyB2b2lkCXB0bmV0X3J4X3Rhc2sodm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcp
OworCisjaWZkZWYgREVWSUNFX1BPTExJTkcKK3N0YXRpYyBwb2xsX2hhbmRsZXJfdCBwdG5ldF9w
b2xsOworI2VuZGlmCisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgcHRuZXRfbWV0aG9kc1tdID0g
eworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQkJcHRuZXRfcHJvYmUpLAorCURFVk1FVEhPRChk
ZXZpY2VfYXR0YWNoLAkJcHRuZXRfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJ
CXB0bmV0X2RldGFjaCksCisJREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLAkJcHRuZXRfc3VzcGVu
ZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsCQlwdG5ldF9yZXN1bWUpLAorCURFVk1FVEhP
RChkZXZpY2Vfc2h1dGRvd24sCQlwdG5ldF9zaHV0ZG93biksCisJREVWTUVUSE9EX0VORAorfTsK
Kworc3RhdGljIGRyaXZlcl90IHB0bmV0X2RyaXZlciA9IHsKKwkicHRuZXQiLAorCXB0bmV0X21l
dGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBwdG5ldF9zb2Z0YykKK307CisKKy8qIFdlIHVzZSAoU0lf
T1JERVJfTUlERExFKzIpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9u
LiAqLworc3RhdGljIGRldmNsYXNzX3QgcHRuZXRfZGV2Y2xhc3M7CitEUklWRVJfTU9EVUxFX09S
REVSRUQocHRuZXQsIHBjaSwgcHRuZXRfZHJpdmVyLCBwdG5ldF9kZXZjbGFzcywKKwkJICAgICAg
TlVMTCwgTlVMTCwgU0lfT1JERVJfTUlERExFICsgMik7CisKK3N0YXRpYyBpbnQKK3B0bmV0X3By
b2JlKGRldmljZV90IGRldikKK3sKKwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1B
UF9QQ0lfVkVORE9SX0lEIHx8CisJCXBjaV9nZXRfZGV2aWNlKGRldikgIT0gUFRORVRNQVBfUENJ
X05FVElGX0lEKSB7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWRldmljZV9zZXRfZGVzYyhk
ZXYsICJwdG5ldCBuZXR3b3JrIGFkYXB0ZXIiKTsKKworCXJldHVybiAoQlVTX1BST0JFX0RFRkFV
TFQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRuZXRfa2ljayhzdHJ1Y3QgcHRuZXRfcXVl
dWUgKnBxKQoreworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJcHEtPnN0YXRzLmtpY2tzICsrOwor
I2VuZGlmIC8qIFBUTkVUTUFQX1NUQVRTICovCisJYnVzX3dyaXRlXzQocHEtPnNjLT5pb21lbSwg
cHEtPmtpY2ssIDApOworfQorCisjZGVmaW5lIFBUTkVUX0JVRl9SSU5HX1NJWkUJNDA5NgorI2Rl
ZmluZSBQVE5FVF9SWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9SWF9CQVRDSAkJMQorI2Rl
ZmluZSBQVE5FVF9UWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9UWF9CQVRDSAkJNjQKKyNk
ZWZpbmUgUFRORVRfSERSX1NJWkUJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4
YnVmKQorI2RlZmluZSBQVE5FVF9NQVhfUEtUX1NJWkUJNjU1MzYKKworI2RlZmluZSBQVE5FVF9D
U1VNX09GRkxPQUQJKENTVU1fVENQIHwgQ1NVTV9VRFAgfCBDU1VNX1NDVFApCisjZGVmaW5lIFBU
TkVUX0NTVU1fT0ZGTE9BRF9JUFY2CShDU1VNX1RDUF9JUFY2IHwgQ1NVTV9VRFBfSVBWNiB8XAor
CQkJCSBDU1VNX1NDVFBfSVBWNikKKyNkZWZpbmUgUFRORVRfQUxMX09GRkxPQUQJKENTVU1fVFNP
IHwgUFRORVRfQ1NVTV9PRkZMT0FEIHxcCisJCQkJIFBUTkVUX0NTVU1fT0ZGTE9BRF9JUFY2KQor
CitzdGF0aWMgaW50CitwdG5ldF9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXVpbnQzMl90IHB0
ZmVhdHVyZXMgPSAwOworCXVuc2lnbmVkIGludCBudW1fcnhfcmluZ3MsIG51bV90eF9yaW5nczsK
KwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgbmFfYXJnOworCXVuc2lnbmVkIGludCBuaWZwX29mZnNl
dDsKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjOworCWlmX3QgaWZwOworCXVpbnQzMl90IG1hY3Jl
ZzsKKwlpbnQgZXJyLCByaWQ7CisJaW50IGk7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJLyogU2V0dXAgUENJIHJlc291cmNlcy4gKi8KKwlwY2lf
ZW5hYmxlX2J1c21hc3RlcihkZXYpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfSU9fUENJ
X0JBUik7CisJc2MtPmlvbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNf
SU9QT1JULCAmcmlkLAorCQkJCQkgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aW9tZW0gPT0gTlVM
TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBtYXAgSS9PIEJBUlxuIik7CisJ
CXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIE5lZ290aWF0ZSBmZWF0dXJlcyB3aXRoIHRoZSBo
eXBlcnZpc29yLiAqLworCWlmIChwdG5ldF92bmV0X2hkcikgeworCQlwdGZlYXR1cmVzIHw9IFBU
TkVUTUFQX0ZfVk5FVF9IRFI7CisJfQorCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9f
UFRGRUFULCBwdGZlYXR1cmVzKTsgLyogd2FudGVkICovCisJcHRmZWF0dXJlcyA9IGJ1c19yZWFk
XzQoc2MtPmlvbWVtLCBQVE5FVF9JT19QVEZFQVQpOyAvKiBhY2tlZCAqLworCXNjLT5wdGZlYXR1
cmVzID0gcHRmZWF0dXJlczsKKworCS8qIEFsbG9jYXRlIENTQiBhbmQgY2Fycnkgb3V0IENTQiBh
bGxvY2F0aW9uIHByb3RvY29sIChDU0JCQUggZmlyc3QsCisJICogdGhlbiBDU0JCQUwpLiAqLwor
CXNjLT5jc2IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdG5ldF9jc2IpLCBNX0RFVkJVRiwKKwkJ
CSBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlkZXZpY2Vf
cHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBDU0JcbiIpOworCQllcnIgPSBFTk9NRU07
CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJeworCQkvKgorCQkgKiBXZSB1c2UgdWludDY0X3Qg
cmF0aGVyIHRoYW4gdm1fcGFkZHJfdCBzaW5jZSB3ZQorCQkgKiBuZWVkIDY0IGJpdCBhZGRyZXNz
ZXMgZXZlbiBvbiAzMiBiaXQgcGxhdGZvcm1zLgorCQkgKi8KKwkJdWludDY0X3QgcGFkZHIgPSB2
dG9waHlzKHNjLT5jc2IpOworCisJCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9fQ1NC
QkFILAorCQkJICAgIChwYWRkciA+PiAzMikgJiAweGZmZmZmZmZmKTsKKwkJYnVzX3dyaXRlXzQo
c2MtPmlvbWVtLCBQVE5FVF9JT19DU0JCQUwsIHBhZGRyICYgMHhmZmZmZmZmZik7CisJfQorCisJ
bnVtX3R4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5H
Uyk7CisJbnVtX3J4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9S
WF9SSU5HUyk7CisJc2MtPm51bV9yaW5ncyA9IG51bV90eF9yaW5ncyArIG51bV9yeF9yaW5nczsK
KwlzYy0+bnVtX3R4X3JpbmdzID0gbnVtX3R4X3JpbmdzOworCisJLyogQWxsb2NhdGUgYW5kIGlu
aXRpYWxpemUgcGVyLXF1ZXVlIGRhdGEgc3RydWN0dXJlcy4gKi8KKwlzYy0+cXVldWVzID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgcHRuZXRfcXVldWUpICogc2MtPm51bV9yaW5ncywKKwkJCSAgICBN
X0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChzYy0+cXVldWVzID09IE5VTEwpIHsK
KwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycl9wYXRoOworCX0KKwlzYy0+cnhxdWV1ZXMgPSBz
Yy0+cXVldWVzICsgbnVtX3R4X3JpbmdzOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmlu
Z3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK
KwkJcHEtPnNjID0gc2M7CisJCXBxLT5rcmluZ19pZCA9IGk7CisJCXBxLT5raWNrID0gUFRORVRf
SU9fS0lDS19CQVNFICsgNCAqIGk7CisJCXBxLT5wdHJpbmcgPSBzYy0+Y3NiLT5yaW5ncyArIGk7
CisJCXNucHJpbnRmKHBxLT5sb2NrX25hbWUsIHNpemVvZihwcS0+bG9ja19uYW1lKSwgIiVzLSVk
IiwKKwkJCSBkZXZpY2VfZ2V0X25hbWV1bml0KGRldiksIGkpOworCQltdHhfaW5pdCgmcHEtPmxv
Y2ssIHBxLT5sb2NrX25hbWUsIE5VTEwsIE1UWF9ERUYpOworCQlpZiAoaSA+PSBudW1fdHhfcmlu
Z3MpIHsKKwkJCS8qIFJYIHF1ZXVlOiBmaXgga3JpbmdfaWQuICovCisJCQlwcS0+a3JpbmdfaWQg
LT0gbnVtX3R4X3JpbmdzOworCQl9IGVsc2UgeworCQkJLyogVFggcXVldWU6IGFsbG9jYXRlIGJ1
Zl9yaW5nLiAqLworCQkJcHEtPmJ1ZnJpbmcgPSBidWZfcmluZ19hbGxvYyhQVE5FVF9CVUZfUklO
R19TSVpFLAorCQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlULCAmcHEtPmxvY2spOworCQkJaWYgKHBx
LT5idWZyaW5nID09IE5VTEwpIHsKKwkJCQllcnIgPSBFTk9NRU07CisJCQkJZ290byBlcnJfcGF0
aDsKKwkJCX0KKwkJfQorCX0KKworCXNjLT5taW5fdHhfc3BhY2UgPSA2NDsgLyogU2FmZSBpbml0
aWFsIHZhbHVlLiAqLworCisJZXJyID0gcHRuZXRfaXJxc19pbml0KHNjKTsKKwlpZiAoZXJyKSB7
CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJLyogU2V0dXAgRXRoZXJuZXQgaW50ZXJmYWNlLiAq
LworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRIRVIpOworCWlmIChpZnAgPT0gTlVM
TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpZm5ldFxuIik7
CisJCWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlpZl9pbml0bmFtZShp
ZnAsIGRldmljZV9nZXRfbmFtZShkZXYpLCBkZXZpY2VfZ2V0X3VuaXQoZGV2KSk7CisJaWZwLT5p
Zl9iYXVkcmF0ZSA9IElGX0dicHMoMTApOworCWlmcC0+aWZfc29mdGMgPSBzYzsKKwlpZnAtPmlm
X2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1QgfCBJRkZfU0lNUExFWDsKKwlp
ZnAtPmlmX2luaXQgPSBwdG5ldF9pbml0OworCWlmcC0+aWZfaW9jdGwgPSBwdG5ldF9pb2N0bDsK
KyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCisJaWZwLT5pZl9nZXRfY291bnRlciA9
IHB0bmV0X2dldF9jb3VudGVyOworI2VuZGlmCisJaWZwLT5pZl90cmFuc21pdCA9IHB0bmV0X3Ry
YW5zbWl0OworCWlmcC0+aWZfcWZsdXNoID0gcHRuZXRfcWZsdXNoOworCisJaWZtZWRpYV9pbml0
KCZzYy0+bWVkaWEsIElGTV9JTUFTSywgcHRuZXRfbWVkaWFfY2hhbmdlLAorCQkgICAgIHB0bmV0
X21lZGlhX3N0YXR1cyk7CisJaWZtZWRpYV9hZGQoJnNjLT5tZWRpYSwgSUZNX0VUSEVSIHwgSUZN
XzEwR19UIHwgSUZNX0ZEWCwgMCwgTlVMTCk7CisJaWZtZWRpYV9zZXQoJnNjLT5tZWRpYSwgSUZN
X0VUSEVSIHwgSUZNXzEwR19UIHwgSUZNX0ZEWCk7CisKKwltYWNyZWcgPSBidXNfcmVhZF80KHNj
LT5pb21lbSwgUFRORVRfSU9fTUFDX0hJKTsKKwlzYy0+aHdhZGRyWzBdID0gKG1hY3JlZyA+PiA4
KSAmIDB4ZmY7CisJc2MtPmh3YWRkclsxXSA9IG1hY3JlZyAmIDB4ZmY7CisJbWFjcmVnID0gYnVz
X3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX01BQ19MTyk7CisJc2MtPmh3YWRkclsyXSA9ICht
YWNyZWcgPj4gMjQpICYgMHhmZjsKKwlzYy0+aHdhZGRyWzNdID0gKG1hY3JlZyA+PiAxNikgJiAw
eGZmOworCXNjLT5od2FkZHJbNF0gPSAobWFjcmVnID4+IDgpICYgMHhmZjsKKwlzYy0+aHdhZGRy
WzVdID0gbWFjcmVnICYgMHhmZjsKKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmh3YWRkcik7
CisKKwlpZnAtPmlmX2hkcmxlbiA9IHNpemVvZihzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIpOwor
CWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX0pVTUJPX01UVSB8IElGQ0FQX1ZMQU5fTVRV
OworCisJaWYgKHNjLT5wdGZlYXR1cmVzICYgUFRORVRNQVBfRl9WTkVUX0hEUikgeworCQkvKiBT
aW1pbGFybHkgdG8gd2hhdCB0aGUgdnRuZXQgZHJpdmVyIGRvZXMsIHdlIGNhbiBlbXVsYXRlCisJ
CSAqIFZMQU4gb2ZmbG9hZGluZ3MgYnkgaW5zZXJ0aW5nIGFuZCByZW1vdmluZyB0aGUgODAyLjFR
CisJCSAqIGhlYWRlciBkdXJpbmcgdHJhbnNtaXQgYW5kIHJlY2VpdmUuIFdlIGFyZSB0aGVuIGFi
bGUKKwkJICogdG8gZG8gY2hlY2tzdW0gb2ZmbG9hZGluZyBvZiBWTEFOIGZyYW1lcy4gKi8KKwkJ
aWZwLT5pZl9jYXBhYmlsaXRpZXMgfD0gSUZDQVBfSFdDU1VNIHwgSUZDQVBfSFdDU1VNX0lQVjYK
KwkJCQkJfCBJRkNBUF9WTEFOX0hXQ1NVTQorCQkJCQl8IElGQ0FQX1RTTyB8IElGQ0FQX0xSTwor
CQkJCQl8IElGQ0FQX1ZMQU5fSFdUU08KKwkJCQkJfCBJRkNBUF9WTEFOX0hXVEFHR0lORzsKKwl9
CisKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+aWZfY2FwYWJpbGl0aWVzOworI2lmZGVmIERF
VklDRV9QT0xMSU5HCisJLyogRG9uJ3QgZW5hYmxlIHBvbGxpbmcgYnkgZGVmYXVsdC4gKi8KKwlp
ZnAtPmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9QT0xMSU5HOworI2VuZGlmCisJc25wcmludGYo
c2MtPmxvY2tfbmFtZSwgc2l6ZW9mKHNjLT5sb2NrX25hbWUpLAorCQkgIiVzIiwgZGV2aWNlX2dl
dF9uYW1ldW5pdChkZXYpKTsKKwltdHhfaW5pdCgmc2MtPmxvY2ssIHNjLT5sb2NrX25hbWUsICJw
dG5ldCBjb3JlIGxvY2siLCBNVFhfREVGKTsKKwljYWxsb3V0X2luaXRfbXR4KCZzYy0+dGljaywg
JnNjLT5sb2NrLCAwKTsKKworCS8qIFByZXBhcmUgYSBuZXRtYXBfYWRhcHRlciBzdHJ1Y3QgaW5z
dGFuY2UgdG8gZG8gbmV0bWFwX2F0dGFjaCgpLiAqLworCW5pZnBfb2Zmc2V0ID0gYnVzX3JlYWRf
NChzYy0+aW9tZW0sIFBUTkVUX0lPX05JRlBfT0ZTKTsKKwltZW1zZXQoJm5hX2FyZywgMCwgc2l6
ZW9mKG5hX2FyZykpOworCW5hX2FyZy5pZnAgPSBpZnA7CisJbmFfYXJnLm51bV90eF9kZXNjID0g
YnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9TTE9UUyk7CisJbmFfYXJnLm51
bV9yeF9kZXNjID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7
CisJbmFfYXJnLm51bV90eF9yaW5ncyA9IG51bV90eF9yaW5nczsKKwluYV9hcmcubnVtX3J4X3Jp
bmdzID0gbnVtX3J4X3JpbmdzOworCW5hX2FyZy5ubV9jb25maWcgPSBwdG5ldF9ubV9jb25maWc7
CisJbmFfYXJnLm5tX2tyaW5nc19jcmVhdGUgPSBwdG5ldF9ubV9rcmluZ3NfY3JlYXRlOworCW5h
X2FyZy5ubV9rcmluZ3NfZGVsZXRlID0gcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZTsKKwluYV9hcmcu
bm1fZHRvciA9IHB0bmV0X25tX2R0b3I7CisJbmFfYXJnLm5tX3JlZ2lzdGVyID0gcHRuZXRfbm1f
cmVnaXN0ZXI7CisJbmFfYXJnLm5tX3R4c3luYyA9IHB0bmV0X25tX3R4c3luYzsKKwluYV9hcmcu
bm1fcnhzeW5jID0gcHRuZXRfbm1fcnhzeW5jOworCisJbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaCgm
bmFfYXJnLCBzYy0+Y3NiLCBuaWZwX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0hPU1RNRU1JRCkpOworCisJLyog
Tm93IGEgbmV0bWFwIGFkYXB0ZXIgZm9yIHRoaXMgaWZwIGhhcyBiZWVuIGFsbG9jYXRlZCwgYW5k
IGl0CisJICogY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggTkEoaWZwKS4gV2UgYWxzbyBoYXZlIHRv
IGluaXRpYWxpemUgdGhlIENTQgorCSAqIHBvaW50ZXIuICovCisJc2MtPnB0bmEgPSAoc3RydWN0
IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopTkEoaWZwKTsKKworCS8qIElmIHZpcnRpby1uZXQg
aGVhZGVyIHdhcyBuZWdvdGlhdGVkLCBzZXQgdGhlIHZpcnRfaGRyX2xlbiBmaWVsZCBpbgorCSAq
IHRoZSBuZXRtYXAgYWRhcHRlciwgdG8gaW5mb3JtIHVzZXJzIHRoYXQgdGhpcyBuZXRtYXAgYWRh
cHRlciByZXF1aXJlcworCSAqIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFsIHdpdGggdGhlIGhlYWRl
cnMuICovCisJcHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHNjKTsKKworCWRldmljZV9wcmludGYoZGV2
LCAiJXMoKSBjb21wbGV0ZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAoMCk7CisKK2Vycl9w
YXRoOgorCXB0bmV0X2RldGFjaChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQK
K3B0bmV0X2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpbnQgaTsKKworI2lmZGVmIERFVklDRV9QT0xMSU5H
CisJaWYgKHNjLT5pZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1BPTExJTkcpIHsKKwkJZXRoZXJf
cG9sbF9kZXJlZ2lzdGVyKHNjLT5pZnApOworCX0KKyNlbmRpZgorCWNhbGxvdXRfZHJhaW4oJnNj
LT50aWNrKTsKKworCWlmIChzYy0+cXVldWVzKSB7CisJCS8qIERyYWluIHRhc2txdWV1ZXMgYmVm
b3JlIGNhbGxpbmcgaWZfZGV0YWNoLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9yaW5n
czsgaSsrKSB7CisJCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK
KwkJCWlmIChwcS0+dGFza3EpIHsKKwkJCQl0YXNrcXVldWVfZHJhaW4ocHEtPnRhc2txLCAmcHEt
PnRhc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKHNjLT5pZnApIHsKKwkJZXRoZXJfaWZkZXRh
Y2goc2MtPmlmcCk7CisKKwkJLyogVW5pbml0aWFsaXplIG5ldG1hcCBhZGFwdGVycyBmb3IgdGhp
cyBkZXZpY2UuICovCisJCW5ldG1hcF9kZXRhY2goc2MtPmlmcCk7CisKKwkJaWZtZWRpYV9yZW1v
dmVhbGwoJnNjLT5tZWRpYSk7CisJCWlmX2ZyZWUoc2MtPmlmcCk7CisJCXNjLT5pZnAgPSBOVUxM
OworCX0KKworCXB0bmV0X2lycXNfZmluaShzYyk7CisKKwlpZiAoc2MtPmNzYikgeworCQlidXNf
d3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0NTQkJBSCwgMCk7CisJCWJ1c193cml0ZV80KHNj
LT5pb21lbSwgUFRORVRfSU9fQ1NCQkFMLCAwKTsKKwkJZnJlZShzYy0+Y3NiLCBNX0RFVkJVRik7
CisJCXNjLT5jc2IgPSBOVUxMOworCX0KKworCWlmIChzYy0+cXVldWVzKSB7CisJCWZvciAoaSA9
IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCXN0cnVjdCBwdG5ldF9xdWV1ZSAqcHEg
PSBzYy0+cXVldWVzICsgaTsKKworCQkJaWYgKG10eF9pbml0aWFsaXplZCgmcHEtPmxvY2spKSB7
CisJCQkJbXR4X2Rlc3Ryb3koJnBxLT5sb2NrKTsKKwkJCX0KKwkJCWlmIChwcS0+YnVmcmluZyAh
PSBOVUxMKSB7CisJCQkJYnVmX3JpbmdfZnJlZShwcS0+YnVmcmluZywgTV9ERVZCVUYpOworCQkJ
fQorCQl9CisJCWZyZWUoc2MtPnF1ZXVlcywgTV9ERVZCVUYpOworCQlzYy0+cXVldWVzID0gTlVM
TDsKKwl9CisKKwlpZiAoc2MtPmlvbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg
U1lTX1JFU19JT1BPUlQsCisJCQkJICAgICBQQ0lSX0JBUihQVE5FVE1BUF9JT19QQ0lfQkFSKSwg
c2MtPmlvbWVtKTsKKwkJc2MtPmlvbWVtID0gTlVMTDsKKwl9CisKKwltdHhfZGVzdHJveSgmc2Mt
PmxvY2spOworCisJZGV2aWNlX3ByaW50ZihkZXYsICIlcygpIGNvbXBsZXRlZFxuIiwgX19mdW5j
X18pOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuZXRfc3VzcGVuZChkZXZp
Y2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCSh2b2lkKXNjOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorcHRuZXRfcmVzdW1lKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNj
OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJKHZvaWQpc2M7CisKKwlyZXR1cm4g
KDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJ
LyoKKwkgKiBTdXNwZW5kIGFscmVhZHkgZG9lcyBhbGwgb2Ygd2hhdCB3ZSBuZWVkIHRvCisJICog
ZG8gaGVyZTsgd2UganVzdCBuZXZlciBleHBlY3QgdG8gYmUgcmVzdW1lZC4KKwkgKi8KKwlyZXR1
cm4gKHB0bmV0X3N1c3BlbmQoZGV2KSk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2lycXNfaW5p
dChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCWludCByaWQgPSBQQ0lSX0JBUihQVE5FVE1B
UF9NU0lYX1BDSV9CQVIpOworCWludCBudmVjcyA9IHNjLT5udW1fcmluZ3M7CisJZGV2aWNlX3Qg
ZGV2ID0gc2MtPmRldjsKKwlpbnQgZXJyID0gRU5PU1BDOworCWludCBjcHVfY3VyOworCWludCBp
OworCisJaWYgKHBjaV9maW5kX2NhcChkZXYsIFBDSVlfTVNJWCwgTlVMTCkgIT0gMCkgIHsKKwkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgZmluZCBNU0ktWCBjYXBhYmlsaXR5XG4iKTsK
KwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPm1zaXhfbWVtID0gYnVzX2FsbG9jX3Jlc291
cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCQkgICAgICAmcmlkLCBSRl9BQ1RJVkUp
OworCWlmIChzYy0+bXNpeF9tZW0gPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZh
aWxlZCB0byBhbGxvY2F0ZSBNU0lYIFBDSSBCQVJcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9
CisKKwlpZiAocGNpX21zaXhfY291bnQoZGV2KSA8IG52ZWNzKSB7CisJCWRldmljZV9wcmludGYo
ZGV2LCAiTm90IGVub3VnaCBNU0ktWCB2ZWN0b3JzXG4iKTsKKwkJZ290byBlcnJfcGF0aDsKKwl9
CisKKwllcnIgPSBwY2lfYWxsb2NfbXNpeChkZXYsICZudmVjcyk7CisJaWYgKGVycikgeworCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0ktWCB2ZWN0b3JzXG4iKTsK
KwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZlY3M7IGkrKykgewor
CQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisKKwkJcmlkID0gaSAr
IDE7CisJCXBxLT5pcnEgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEs
ICZyaWQsCisJCQkJCQkgUkZfQUNUSVZFKTsKKwkJaWYgKHBxLT5pcnEgPT0gTlVMTCkgeworCQkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICIKKwkJCQkJ
ICAgImZvciBxdWV1ZSAjJWRcbiIsIGkpOworCQkJZXJyID0gRU5PU1BDOworCQkJZ290byBlcnJf
cGF0aDsKKwkJfQorCX0KKworCWNwdV9jdXIgPSBDUFVfRklSU1QoKTsKKwlmb3IgKGkgPSAwOyBp
IDwgbnZlY3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyAr
IGk7CisJCXZvaWQgKCpoYW5kbGVyKSh2b2lkICopID0gcHRuZXRfdHhfaW50cjsKKworCQlpZiAo
aSA+PSBzYy0+bnVtX3R4X3JpbmdzKSB7CisJCQloYW5kbGVyID0gcHRuZXRfcnhfaW50cjsKKwkJ
fQorCQllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHBxLT5pcnEsIElOVFJfVFlQRV9ORVQgfCBJ
TlRSX01QU0FGRSwKKwkJCQkgICAgIE5VTEwgLyogaW50cl9maWx0ZXIgKi8sIGhhbmRsZXIsCisJ
CQkJICAgICBwcSwgJnBxLT5jb29raWUpOworCQlpZiAoZXJyKSB7CisJCQlkZXZpY2VfcHJpbnRm
KGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnRyIGhhbmRsZXIgIgorCQkJCQkgICAiZm9yIHF1
ZXVlICMlZFxuIiwgaSk7CisJCQlnb3RvIGVycl9wYXRoOworCQl9CisKKwkJYnVzX2Rlc2NyaWJl
X2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llLCAicSVkIiwgaSk7CisjaWYgMAorCQlidXNf
YmluZF9pbnRyKHNjLT5kZXYsIHBxLT5pcnEsIGNwdV9jdXIpOworI2VuZGlmCisJCWNwdV9jdXIg
PSBDUFVfTkVYVChjcHVfY3VyKTsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkFsbG9jYXRl
ZCAlZCBNU0ktWCB2ZWN0b3JzXG4iLCBudmVjcyk7CisKKwljcHVfY3VyID0gQ1BVX0ZJUlNUKCk7
CisJZm9yIChpID0gMDsgaSA8IG52ZWNzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpw
cSA9IHNjLT5xdWV1ZXMgKyBpOworCQlzdGF0aWMgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKmNvbnRl
eHQsIGludCBwZW5kaW5nKTsKKworCQloYW5kbGVyID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/
IHB0bmV0X3R4X3Rhc2sgOiBwdG5ldF9yeF90YXNrOworCisJCVRBU0tfSU5JVCgmcHEtPnRhc2ss
IDAsIGhhbmRsZXIsIHBxKTsKKwkJcHEtPnRhc2txID0gdGFza3F1ZXVlX2NyZWF0ZV9mYXN0KCJw
dG5ldF9xdWV1ZSIsIE1fTk9XQUlULAorCQkJCQl0YXNrcXVldWVfdGhyZWFkX2VucXVldWUsICZw
cS0+dGFza3EpOworCQl0YXNrcXVldWVfc3RhcnRfdGhyZWFkcygmcHEtPnRhc2txLCAxLCBQSV9O
RVQsICIlcy1wcS0lZCIsCisJCQkJCWRldmljZV9nZXRfbmFtZXVuaXQoc2MtPmRldiksIGNwdV9j
dXIpOworCQljcHVfY3VyID0gQ1BVX05FWFQoY3B1X2N1cik7CisJfQorCisJcmV0dXJuIDA7Citl
cnJfcGF0aDoKKwlwdG5ldF9pcnFzX2Zpbmkoc2MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp
YyB2b2lkCitwdG5ldF9pcnFzX2Zpbmkoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwlkZXZp
Y2VfdCBkZXYgPSBzYy0+ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f
cmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7
CisKKwkJaWYgKHBxLT50YXNrcSkgeworCQkJdGFza3F1ZXVlX2ZyZWUocHEtPnRhc2txKTsKKwkJ
CXBxLT50YXNrcSA9IE5VTEw7CisJCX0KKworCQlpZiAocHEtPmNvb2tpZSkgeworCQkJYnVzX3Rl
YXJkb3duX2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llKTsKKwkJCXBxLT5jb29raWUgPSBO
VUxMOworCQl9CisKKwkJaWYgKHBxLT5pcnEpIHsKKwkJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRl
diwgU1lTX1JFU19JUlEsIGkgKyAxLCBwcS0+aXJxKTsKKwkJCXBxLT5pcnEgPSBOVUxMOworCQl9
CisJfQorCisJaWYgKHNjLT5tc2l4X21lbSkgeworCQlwY2lfcmVsZWFzZV9tc2koZGV2KTsKKwor
CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCSAgICAgUENJ
Ul9CQVIoUFRORVRNQVBfTVNJWF9QQ0lfQkFSKSwKKwkJCQkgICAgIHNjLT5tc2l4X21lbSk7CisJ
CXNjLT5tc2l4X21lbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHRuZXRfaW5pdCh2
b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IG9wYXF1ZTsKKworCVBU
TkVUX0NPUkVfTE9DSyhzYyk7CisJcHRuZXRfaW5pdF9sb2NrZWQoc2MpOworCVBUTkVUX0NPUkVf
VU5MT0NLKHNjKTsKK30KKworc3RhdGljIGludAorcHRuZXRfaW9jdGwoaWZfdCBpZnAsIHVfbG9u
ZyBjbWQsIGNhZGRyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0
c29mdGMoaWZwKTsKKwlkZXZpY2VfdCBkZXYgPSBzYy0+ZGV2OworCXN0cnVjdCBpZnJlcSAqaWZy
ID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IG1hc2ssIGVyciA9IDA7CisKKwlzd2l0Y2gg
KGNtZCkgeworCWNhc2UgU0lPQ1NJRkZMQUdTOgorCQlkZXZpY2VfcHJpbnRmKGRldiwgIlNJT0NT
SUZGTEFHUyAleFxuIiwgaWZwLT5pZl9mbGFncyk7CisJCVBUTkVUX0NPUkVfTE9DSyhzYyk7CisJ
CWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRz
IHRoZSBpZmYgdG8gYmUgdXAuICovCisJCQllcnIgPSBwdG5ldF9pbml0X2xvY2tlZChzYyk7CisJ
CX0gZWxzZSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRzIHRoZSBpZmYgdG8gYmUgZG93bi4g
Ki8KKwkJCWVyciA9IHB0bmV0X3N0b3Aoc2MpOworCQl9CisJCS8qIFdlIGRvbid0IG5lZWQgdG8g
ZG8gbm90aGluZyB0byBzdXBwb3J0IElGRl9QUk9NSVNDLAorCQkgKiBzaW5jZSB0aGF0IGlzIG1h
bmFnZWQgYnkgdGhlIGJhY2tlbmQgcG9ydC4gKi8KKwkJUFRORVRfQ09SRV9VTkxPQ0soc2MpOwor
CQlicmVhazsKKworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTSU9D
U0lGQ0FQICV4ICV4XG4iLAorCQkJICAgICAgaWZyLT5pZnJfcmVxY2FwLCBpZnAtPmlmX2NhcGVu
YWJsZSk7CisJCW1hc2sgPSBpZnItPmlmcl9yZXFjYXAgXiBpZnAtPmlmX2NhcGVuYWJsZTsKKyNp
ZmRlZiBERVZJQ0VfUE9MTElORworCQlpZiAobWFzayAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCXN0
cnVjdCBwdG5ldF9xdWV1ZSAqcHE7CisJCQlpbnQgaTsKKworCQkJaWYgKGlmci0+aWZyX3JlcWNh
cCAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCQllcnIgPSBldGhlcl9wb2xsX3JlZ2lzdGVyKHB0bmV0
X3BvbGwsIGlmcCk7CisJCQkJaWYgKGVycikgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyog
U3RvcCBxdWV1ZXMgYW5kIHN5bmMgd2l0aCB0YXNrcXVldWVzLiAqLworCQkJCWlmcC0+aWZfZHJ2
X2ZsYWdzICY9IH5JRkZfRFJWX1JVTk5JTkc7CisJCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f
cmluZ3M7IGkrKykgeworCQkJCQlwcSA9IHNjLT4gcXVldWVzICsgaTsKKwkJCQkJLyogTWFrZSBz
dXJlIHRoZSB3b3JrZXIgc2VlcyB0aGUKKwkJCQkJICogSUZGX0RSVl9SVU5OSU5HIGRvd24uICov
CisJCQkJCVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2lj
ayA9IDA7CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQkJLyogV2FpdCBmb3IgcmVzY2hl
ZHVsaW5nIHRvIGZpbmlzaC4gKi8KKwkJCQkJaWYgKHBxLT50YXNrcSkgeworCQkJCQkJdGFza3F1
ZXVlX2RyYWluKHBxLT50YXNrcSwKKwkJCQkJCQkJJnBxLT50YXNrKTsKKwkJCQkJfQorCQkJCX0K
KwkJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJCQl9IGVsc2Ugewor
CQkJCWVyciA9IGV0aGVyX3BvbGxfZGVyZWdpc3RlcihpZnApOworCQkJCWZvciAoaSA9IDA7IGkg
PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCQkJcHEgPSBzYy0+IHF1ZXVlcyArIGk7CisJCQkJ
CVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7
CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAgLyog
REVWSUNFX1BPTExJTkcgKi8KKwkJaWZwLT5pZl9jYXBlbmFibGUgPSBpZnItPmlmcl9yZXFjYXA7
CisJCWJyZWFrOworCisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBXZSBzdXBwb3J0IGFueSByZWFz
b25hYmxlIE1UVS4gKi8KKwkJaWYgKGlmci0+aWZyX210dSA8IEVUSEVSTUlOIHx8CisJCQkJaWZy
LT5pZnJfbXR1ID4gUFRORVRfTUFYX1BLVF9TSVpFKSB7CisJCQllcnIgPSBFSU5WQUw7CisJCX0g
ZWxzZSB7CisJCQlQVE5FVF9DT1JFX0xPQ0soc2MpOworCQkJaWZwLT5pZl9tdHUgPSBpZnItPmlm
cl9tdHU7CisJCQlQVE5FVF9DT1JFX1VOTE9DSyhzYyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl
IFNJT0NTSUZNRURJQToKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyID0gaWZtZWRpYV9pb2N0
bChpZnAsIGlmciwgJnNjLT5tZWRpYSwgY21kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQll
cnIgPSBldGhlcl9pb2N0bChpZnAsIGNtZCwgZGF0YSk7CisJCWJyZWFrOworCX0KKworCXJldHVy
biBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2luaXRfbG9ja2VkKHN0cnVjdCBwdG5ldF9z
b2Z0YyAqc2MpCit7CisJaWZfdCBpZnAgPSBzYy0+aWZwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl
ciAqbmFfZHIgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmFf
bm0gPSAmc2MtPnB0bmEtPmh3dXAudXA7CisJdW5zaWduZWQgaW50IG5tX2J1Zl9zaXplOworCWlu
dCByZXQ7CisKKwlpZiAoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpIHsKKwkJ
cmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5k
ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogVHJhbnNsYXRlIG9mZmxvYWQgY2FwYWJpbGl0
aWVzIGFjY29yZGluZyB0byBpZl9jYXBlbmFibGUuICovCisJaWZwLT5pZl9od2Fzc2lzdCA9IDA7
CisJaWYgKGlmcC0+aWZfY2FwZW5hYmxlICYgSUZDQVBfVFhDU1VNKQorCQlpZnAtPmlmX2h3YXNz
aXN0IHw9IFBUTkVUX0NTVU1fT0ZGTE9BRDsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB
UF9UWENTVU1fSVBWNikKKwkJaWZwLT5pZl9od2Fzc2lzdCB8PSBQVE5FVF9DU1VNX09GRkxPQURf
SVBWNjsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9UU080KQorCQlpZnAtPmlmX2h3
YXNzaXN0IHw9IENTVU1fSVBfVFNPOworCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1RT
TzYpCisJCWlmcC0+aWZfaHdhc3Npc3QgfD0gQ1NVTV9JUDZfVFNPOworCisJLyoKKwkgKiBQcmVw
YXJlIHRoZSBpbnRlcmZhY2UgZm9yIG5ldG1hcCBtb2RlIGFjY2Vzcy4KKwkgKi8KKwluZXRtYXBf
dXBkYXRlX2NvbmZpZyhuYV9kcik7CisKKwlyZXQgPSBuZXRtYXBfbWVtX2ZpbmFsaXplKG5hX2Ry
LT5ubV9tZW0sIG5hX2RyKTsKKwlpZiAocmV0KSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwg
Im5ldG1hcF9tZW1fZmluYWxpemUoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CWlmIChzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMgPT0gMCkgeworCQlyZXQgPSBwdG5ldF9ubV9r
cmluZ3NfY3JlYXRlKG5hX25tKTsKKwkJaWYgKHJldCkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+
ZGV2LCAicHRuZXRfbm1fa3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp
OworCQkJZ290byBlcnJfbWVtX2ZpbmFsaXplOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9y
aW5nc19jcmVhdGUobmFfZHIpOworCQlpZiAocmV0KSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5k
ZXYsICJuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp
OworCQkJZ290byBlcnJfcmluZ3NfY3JlYXRlOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9n
ZXRfbHV0KG5hX2RyLT5ubV9tZW0sICZuYV9kci0+bmFfbHV0KTsKKwkJaWYgKHJldCkgeworCQkJ
ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAibmV0bWFwX21lbV9nZXRfbHV0KCkgIgorCQkJCQkgICAg
ICAgImZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9nZXRfbHV0OworCQl9CisJfQorCisJcmV0ID0g
cHRuZXRfbm1fcmVnaXN0ZXIobmFfZHIsIDEgLyogb24gKi8pOworCWlmIChyZXQpIHsKKwkJZ290
byBlcnJfcmVnaXN0ZXI7CisJfQorCisJbm1fYnVmX3NpemUgPSBORVRNQVBfQlVGX1NJWkUobmFf
ZHIpOworCisJS0FTU0VSVChubV9idWZfc2l6ZSA+IDAsICgiSW52YWxpZCBuZXRtYXAgYnVmZmVy
IHNpemUiKSk7CisJc2MtPm1pbl90eF9zcGFjZSA9IFBUTkVUX01BWF9QS1RfU0laRSAvIG5tX2J1
Zl9zaXplICsgMjsKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczogbWluX3R4X3NwYWNlID0g
JXVcbiIsIF9fZnVuY19fLAorCQkgICAgICBzYy0+bWluX3R4X3NwYWNlKTsKKyNpZmRlZiBQVE5F
VE1BUF9TVEFUUworCWNhbGxvdXRfcmVzZXQoJnNjLT50aWNrLCBoeiwgcHRuZXRfdGljaywgc2Mp
OworI2VuZGlmCisKKwlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwly
ZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCW1lbXNldCgmbmFfZHItPm5hX2x1dCwgMCwgc2l6
ZW9mKG5hX2RyLT5uYV9sdXQpKTsKK2Vycl9nZXRfbHV0OgorCW5ldG1hcF9tZW1fcmluZ3NfZGVs
ZXRlKG5hX2RyKTsKK2Vycl9yaW5nc19jcmVhdGU6CisJcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZShu
YV9ubSk7CitlcnJfbWVtX2ZpbmFsaXplOgorCW5ldG1hcF9tZW1fZGVyZWYobmFfZHItPm5tX21l
bSwgbmFfZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVG8gYmUgY2FsbGVkIHVuZGVyIGNv
cmUgbG9jay4gKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3N0b3Aoc3RydWN0IHB0bmV0X3NvZnRjICpz
YykKK3sKKwlpZl90IGlmcCA9IHNjLT5pZnA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9k
ciA9ICZzYy0+cHRuYS0+ZHIudXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9ubSA9ICZz
Yy0+cHRuYS0+aHd1cC51cDsKKwlpbnQgaTsKKworCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVz
XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVO
TklORykpIHsKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwkvKiBDbGVh
ciB0aGUgZHJpdmVyLXJlYWR5IGZsYWcsIGFuZCBzeW5jaHJvbml6ZSB3aXRoIGFsbCB0aGUgcXVl
dWVzLAorCSAqIHNvIHRoYXQgYWZ0ZXIgdGhpcyBsb29wIHdlIGFyZSBzdXJlIG5vYm9keSBpcyB3
b3JraW5nIGFueW1vcmUgd2l0aAorCSAqIHRoZSBkZXZpY2UuIFRoaXMgc2NoZW1lIGlzIHRha2Vu
IGZyb20gdGhlIHZ0bmV0IGRyaXZlci4gKi8KKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RS
Vl9SVU5OSU5HOworCWNhbGxvdXRfc3RvcCgmc2MtPnRpY2spOworCWZvciAoaSA9IDA7IGkgPCBz
Yy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJUFRORVRfUV9MT0NLKHNjLT5xdWV1ZXMgKyBpKTsKKwkJ
UFRORVRfUV9VTkxPQ0soc2MtPnF1ZXVlcyArIGkpOworCX0KKworCXB0bmV0X25tX3JlZ2lzdGVy
KG5hX2RyLCAwIC8qIG9mZiAqLyk7CisKKwlpZiAoc2MtPnB0bmEtPmJhY2tlbmRfcmVnaWZzID09
IDApIHsKKwkJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmFfZHIpOworCQlwdG5ldF9ubV9rcmlu
Z3NfZGVsZXRlKG5hX25tKTsKKwl9CisJbmV0bWFwX21lbV9kZXJlZihuYV9kci0+bm1fbWVtLCBu
YV9kcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3FmbHVzaChpZl90
IGlmcCkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlp
bnQgaTsKKworCS8qIEZsdXNoIGFsbCB0aGUgYnVmcmluZ3MgYW5kIGRvIHRoZSBpbnRlcmZhY2Ug
Zmx1c2guICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1
Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBtYnVmICptOwor
CisJCVBUTkVUX1FfTE9DSyhwcSk7CisJCWlmIChwcS0+YnVmcmluZykgeworCQkJd2hpbGUgKCht
ID0gYnVmX3JpbmdfZGVxdWV1ZV9zYyhwcS0+YnVmcmluZykpKSB7CisJCQkJbV9mcmVlbShtKTsK
KwkJCX0KKwkJfQorCQlQVE5FVF9RX1VOTE9DSyhwcSk7CisJfQorCisJaWZfcWZsdXNoKGlmcCk7
Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X21lZGlhX2NoYW5nZShpZl90IGlmcCkKK3sKKwlzdHJ1
Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlzdHJ1Y3QgaWZtZWRpYSAq
aWZtID0gJnNjLT5tZWRpYTsKKworCWlmIChJRk1fVFlQRShpZm0tPmlmbV9tZWRpYSkgIT0gSUZN
X0VUSEVSKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCitzdGF0aWMgdWludDY0X3QKK3B0bmV0X2dldF9j
b3VudGVyKGlmX3QgaWZwLCBpZnRfY291bnRlciBjbnQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRj
ICpzYyA9IGlmX2dldHNvZnRjKGlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzIHN0YXRz
WzJdOworCWludCBpOworCisJLyogQWNjdW11bGF0ZSBzdGF0aXN0aWNzIG92ZXIgdGhlIHF1ZXVl
cy4gKi8KKwltZW1zZXQoc3RhdHMsIDAsIHNpemVvZihzdGF0cykpOworCWZvciAoaSA9IDA7IGkg
PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5x
dWV1ZXMgKyBpOworCQlpbnQgaWR4ID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/IDAgOiAxOwor
CisJCXN0YXRzW2lkeF0ucGFja2V0cwkrPSBwcS0+c3RhdHMucGFja2V0czsKKwkJc3RhdHNbaWR4
XS5ieXRlcwkrPSBwcS0+c3RhdHMuYnl0ZXM7CisJCXN0YXRzW2lkeF0uZXJyb3JzCSs9IHBxLT5z
dGF0cy5lcnJvcnM7CisJCXN0YXRzW2lkeF0uaXFkcm9wcwkrPSBwcS0+c3RhdHMuaXFkcm9wczsK
KwkJc3RhdHNbaWR4XS5tY2FzdHMJKz0gcHEtPnN0YXRzLm1jYXN0czsKKwl9CisKKwlzd2l0Y2gg
KGNudCkgeworCWNhc2UgSUZDT1VOVEVSX0lQQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzFdLnBh
Y2tldHMpOworCWNhc2UgSUZDT1VOVEVSX0lRRFJPUFM6CisJCXJldHVybiAoc3RhdHNbMV0uaXFk
cm9wcyk7CisJY2FzZSBJRkNPVU5URVJfSUVSUk9SUzoKKwkJcmV0dXJuIChzdGF0c1sxXS5lcnJv
cnMpOworCWNhc2UgSUZDT1VOVEVSX09QQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzBdLnBhY2tl
dHMpOworCWNhc2UgSUZDT1VOVEVSX09CWVRFUzoKKwkJcmV0dXJuIChzdGF0c1swXS5ieXRlcyk7
CisJY2FzZSBJRkNPVU5URVJfT01DQVNUUzoKKwkJcmV0dXJuIChzdGF0c1swXS5tY2FzdHMpOwor
CWRlZmF1bHQ6CisJCXJldHVybiAoaWZfZ2V0X2NvdW50ZXJfZGVmYXVsdChpZnAsIGNudCkpOwor
CX0KK30KKyNlbmRpZgorCisKKyNpZmRlZiBQVE5FVE1BUF9TVEFUUworLyogQ2FsbGVkIHVuZGVy
IGNvcmUgbG9jay4gKi8KK3N0YXRpYyB2b2lkCitwdG5ldF90aWNrKHZvaWQgKm9wYXF1ZSkKK3sK
KwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gb3BhcXVlOworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0g
c2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyBjdXIgPSBwcS0+c3Rh
dHM7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJdW5zaWduZWQgaW50IGRlbHRhOworCisJCW1p
Y3JvdGltZSgmbm93KTsKKwkJZGVsdGEgPSBub3cudHZfdXNlYyAtIHNjLT5sYXN0X3RzLnR2X3Vz
ZWMgKworCQkJKG5vdy50dl9zZWMgLSBzYy0+bGFzdF90cy50dl9zZWMpICogMTAwMDAwMDsKKwkJ
ZGVsdGEgLz0gMTAwMDsgLyogaW4gbWlsbGlzZWNvbmRzICovCisKKwkJaWYgKGRlbHRhID09IDAp
CisJCQljb250aW51ZTsKKworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIjJWRbJXUgbXNdOnBr
dHMgJWx1LCBraWNrcyAlbHUsICIKKwkJCSAgICAgICJpbnRyICVsdVxuIiwgaSwgZGVsdGEsCisJ
CQkgICAgICAoY3VyLnBhY2tldHMgLSBwcS0+bGFzdF9zdGF0cy5wYWNrZXRzKSwKKwkJCSAgICAg
IChjdXIua2lja3MgLSBwcS0+bGFzdF9zdGF0cy5raWNrcyksCisJCQkgICAgICAoY3VyLmludHJz
IC0gcHEtPmxhc3Rfc3RhdHMuaW50cnMpKTsKKwkJcHEtPmxhc3Rfc3RhdHMgPSBjdXI7CisJfQor
CW1pY3JvdGltZSgmc2MtPmxhc3RfdHMpOworCWNhbGxvdXRfc2NoZWR1bGUoJnNjLT50aWNrLCBo
eik7Cit9CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KKworc3RhdGljIHZvaWQKK3B0bmV0
X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpCit7CisJLyog
V2UgYXJlIGFsd2F5cyBhY3RpdmUsIGFzIHRoZSBiYWNrZW5kIG5ldG1hcCBwb3J0IGlzCisJICog
YWx3YXlzIG9wZW4gaW4gbmV0bWFwIG1vZGUuICovCisJaWZtci0+aWZtX3N0YXR1cyA9IElGTV9B
VkFMSUQgfCBJRk1fQUNUSVZFOworCWlmbXItPmlmbV9hY3RpdmUgPSBJRk1fRVRIRVIgfCBJRk1f
MTBHX1QgfCBJRk1fRkRYOworfQorCitzdGF0aWMgdWludDMyX3QKK3B0bmV0X25tX3B0Y3RsKGlm
X3QgaWZwLCB1aW50MzJfdCBjbWQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IGlmX2dl
dHNvZnRjKGlmcCk7CisJLyoKKwkgKiBXcml0ZSBhIGNvbW1hbmQgYW5kIHJlYWQgYmFjayBlcnJv
ciBzdGF0dXMsCisJICogd2l0aCB6ZXJvIG1lYW5pbmcgc3VjY2Vzcy4KKwkgKi8KKwlidXNfd3Jp
dGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1BUQ1RMLCBjbWQpOworCXJldHVybiBidXNfcmVhZF80
KHNjLT5pb21lbSwgUFRORVRfSU9fUFRDVEwpOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9j
b25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdW5zaWduZWQgKnR4ciwgdW5zaWduZWQg
KnR4ZCwKKwkJdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCkKK3sKKwlzdHJ1Y3QgcHRuZXRf
c29mdGMgKnNjID0gaWZfZ2V0c29mdGMobmEtPmlmcCk7CisKKwkqdHhyID0gYnVzX3JlYWRfNChz
Yy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5HUyk7CisJKnJ4ciA9IGJ1c19yZWFkXzQoc2Mt
PmlvbWVtLCBQVE5FVF9JT19OVU1fUlhfUklOR1MpOworCSp0eGQgPSBidXNfcmVhZF80KHNjLT5p
b21lbSwgUFRORVRfSU9fTlVNX1RYX1NMT1RTKTsKKwkqcnhkID0gYnVzX3JlYWRfNChzYy0+aW9t
ZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0
eHIgJXUsIHJ4ciAldSwgdHhkICV1LCByeGQgJXVcbiIsCisJCSAgICAgICp0eHIsICpyeHIsICp0
eGQsICpyeGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9zeW5jX2Zy
b21fY3NiKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEp
Cit7CisJaW50IGk7CisKKwkvKiBTeW5jIGtyaW5ncyBmcm9tIHRoZSBob3N0LCByZWFkaW5nIGZy
b20KKwkgKiBDU0IuICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgewor
CQlzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5nID0gc2MtPnF1ZXVlc1tpXS5wdHJpbmc7CisJCXN0
cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCisJCWlmIChpIDwgbmEtPm51bV90eF9yaW5ncykg
eworCQkJa3JpbmcgPSBuYS0+dHhfcmluZ3MgKyBpOworCQl9IGVsc2UgeworCQkJa3JpbmcgPSBu
YS0+cnhfcmluZ3MgKyBpIC0gbmEtPm51bV90eF9yaW5nczsKKwkJfQorCQlrcmluZy0+cmhlYWQg
PSBrcmluZy0+cmluZy0+aGVhZCA9IHB0cmluZy0+aGVhZDsKKwkJa3JpbmctPnJjdXIgPSBrcmlu
Zy0+cmluZy0+Y3VyID0gcHRyaW5nLT5jdXI7CisJCWtyaW5nLT5ucl9od2N1ciA9IHB0cmluZy0+
aHdjdXI7CisJCWtyaW5nLT5ucl9od3RhaWwgPSBrcmluZy0+cnRhaWwgPQorCQkJa3JpbmctPnJp
bmctPnRhaWwgPSBwdHJpbmctPmh3dGFpbDsKKworCQlORCgiJWQsJWQ6IGNzYiB7aGMgJXUgaCAl
dSBjICV1IGh0ICV1fSIsIHQsIGksCisJCSAgIHB0cmluZy0+aHdjdXIsIHB0cmluZy0+aGVhZCwg
cHRyaW5nLT5jdXIsCisJCSAgIHB0cmluZy0+aHd0YWlsKTsKKwkJTkQoIiVkLCVkOiBrcmluZyB7
aGMgJXUgcmggJXUgcmMgJXUgaCAldSBjICV1IGh0ICV1IHJ0ICV1IHQgJXV9IiwKKwkJICAgdCwg
aSwga3JpbmctPm5yX2h3Y3VyLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLAorCQkgICBrcmlu
Zy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1ciwga3JpbmctPm5yX2h3dGFpbCwKKwkJICAg
a3JpbmctPnJ0YWlsLCBrcmluZy0+cmluZy0+dGFpbCk7CisJfQorfQorCitzdGF0aWMgdm9pZAor
cHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MpCit7CisJdW5zaWdu
ZWQgaW50IHdhbnRlZF9oZHJfbGVuID0gcHRuZXRfdm5ldF9oZHIgPyBQVE5FVF9IRFJfU0laRSA6
IDA7CisKKwlidXNfd3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1ZORVRfSERSX0xFTiwgd2Fu
dGVkX2hkcl9sZW4pOworCXNjLT52bmV0X2hkcl9sZW4gPSBidXNfcmVhZF80KHNjLT5pb21lbSwg
UFRORVRfSU9fVk5FVF9IRFJfTEVOKTsKKwlzYy0+cHRuYS0+aHd1cC51cC52aXJ0X2hkcl9sZW4g
PSBzYy0+dm5ldF9oZHJfbGVuOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9yZWdpc3Rlcihz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisJLyogZGV2aWNlLXNwZWNp
ZmljICovCisJaWZfdCBpZnAgPSBuYS0+aWZwOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBp
Zl9nZXRzb2Z0YyhpZnApOworCWludCBuYXRpdmUgPSAobmEgPT0gJnNjLT5wdG5hLT5od3VwLnVw
KTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCWVudW0gdHhyeCB0OworCWludCByZXQgPSAw
OworCWludCBpOworCisJaWYgKCFvbm9mZikgeworCQlzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMt
LTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IG5ldG1hcCBjbGllbnQsIGd1ZXN0IGlu
dGVycnVwdCBlbmFibGUgZmxhZ3MgbWF5CisJICogYmUgaW4gYXJiaXRyYXJ5IHN0YXRlLiBTaW5j
ZSB0aGVzZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUgdXNlZCBhbHNvCisJICogYnkgdGhlIG5ldGRl
dmljZSBkcml2ZXIsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIHN0YXJ0IHdpdGgKKwkgKiBub3Rp
ZmljYXRpb25zIGVuYWJsZWQuIEFsc28sIHNjaGVkdWxlIE5BUEkgdG8gZmx1c2ggcGVuZGluZyBw
YWNrZXRzCisJICogaW4gdGhlIFJYIHJpbmdzLCBzaW5jZSB3ZSB3aWxsIG5vdCByZWNlaXZlIGZ1
cnRoZXIgaW50ZXJydXB0cworCSAqIHVudGlsIHRoZXNlIHdpbGwgYmUgcHJvY2Vzc2VkLiAqLwor
CWlmIChuYXRpdmUgJiYgIW9ub2ZmICYmIG5hLT5hY3RpdmVfZmRzID09IDApIHsKKwkJRCgiRXhp
dCBuZXRtYXAgbW9kZSwgcmUtZW5hYmxlIGludGVycnVwdHMiKTsKKwkJZm9yIChpID0gMDsgaSA8
IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCXBxLT5w
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJ
aWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB7CisJCQkvKiBJbml0aWFsaXplIG5v
dGlmaWNhdGlvbiBlbmFibGUgZmllbGRzIGluIHRoZSBDU0IuICovCisJCQlmb3IgKGkgPSAwOyBp
IDwgc2MtPm51bV9yaW5nczsgaSsrKSB7CisJCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCQlw
cS0+cHRyaW5nLT5ob3N0X25lZWRfa2ljayA9IDE7CisJCQkJcHEtPnB0cmluZy0+Z3Vlc3RfbmVl
ZF9raWNrID0KKwkJCQkJKCEoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKQorCQkJ
CQkJJiYgaSA+PSBzYy0+bnVtX3R4X3JpbmdzKTsKKwkJCX0KKworCQkJLyogU2V0IHRoZSB2aXJ0
aW8tbmV0IGhlYWRlciBsZW5ndGguICovCisJCQlwdG5ldF91cGRhdGVfdm5ldF9oZHIoc2MpOwor
CisJCQkvKiBNYWtlIHN1cmUgdGhlIGhvc3QgYWRhcHRlciBwYXNzZWQgdGhyb3VnaCBpcyByZWFk
eQorCQkJICogZm9yIHR4c3luYy9yeHN5bmMuICovCisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChp
ZnAsIFBUTkVUTUFQX1BUQ1RMX0NSRUFURSk7CisJCQlpZiAocmV0KSB7CisJCQkJcmV0dXJuIHJl
dDsKKwkJCX0KKwkJfQorCisJCS8qIFN5bmMgZnJvbSBDU0IgbXVzdCBiZSBkb25lIGFmdGVyIFJF
R0lGIFBUQ1RMLiBTa2lwIHRoaXMKKwkJICogc3RlcCBvbmx5IGlmIHRoaXMgaXMgYSBuZXRtYXAg
Y2xpZW50IGFuZCBpdCBpcyBub3QgdGhlCisJCSAqIGZpcnN0IG9uZS4gKi8KKwkJaWYgKCghbmF0
aXZlICYmIHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB8fAorCQkJCShuYXRpdmUgJiYg
bmEtPmFjdGl2ZV9mZHMgPT0gMCkpIHsKKwkJCXB0bmV0X3N5bmNfZnJvbV9jc2Ioc2MsIG5hKTsK
KwkJfQorCisJCS8qIElmIG5vdCBuYXRpdmUsIGRvbid0IGNhbGwgbm1fc2V0X25hdGl2ZV9mbGFn
cywgc2luY2Ugd2UgZG9uJ3Qgd2FudAorCQkgKiB0byByZXBsYWNlIGlmX3RyYW5zbWl0IG1ldGhv
ZCwgbm9yIHNldCBOQUZfTkVUTUFQX09OICovCisJCWlmIChuYXRpdmUpIHsKKwkJCWZvcl9yeF90
eCh0KSB7CisJCQkJZm9yIChpID0gMDsgaSA8PSBubWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykg
eworCQkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJ
CQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQkJa3JpbmctPm5yX21v
ZGUgPSBOS1JfTkVUTUFQX09OOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJbm1fc2V0X25hdGl2
ZV9mbGFncyhuYSk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChuYXRpdmUpIHsKKwkJCW5tX2Ns
ZWFyX25hdGl2ZV9mbGFncyhuYSk7CisJCQlmb3JfcnhfdHgodCkgeworCQkJCWZvciAoaSA9IDA7
IGkgPD0gbm1hX2dldF9ucmluZ3MobmEsIHQpOyBpKyspIHsKKwkJCQkJc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCQlpZiAobm1fa3JpbmdfcGVuZGlu
Z19vZmYoa3JpbmcpKSB7CisJCQkJCQlrcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOwor
CQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU3luYyBmcm9tIENTQiBtdXN0IGJlIGRv
bmUgYmVmb3JlIFVOUkVHSUYgUFRDVEwsIG9uIHRoZSBsYXN0CisJCSAqIG5ldG1hcCBjbGllbnQu
ICovCisJCWlmIChuYXRpdmUgJiYgbmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQkJcHRuZXRfc3lu
Y19mcm9tX2NzYihzYywgbmEpOworCQl9CisKKwkJaWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lm
cyA9PSAwKSB7CisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChpZnAsIFBUTkVUTUFQX1BUQ1RMX0RF
TEVURSk7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJc2MtPnB0bmEtPmJhY2tlbmRfcmVn
aWZzKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcHRuZXRfbm1fdHhz
eW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHB0
bmV0X3NvZnRjICpzYyA9IGlmX2dldHNvZnRjKGtyaW5nLT5uYS0+aWZwKTsKKwlzdHJ1Y3QgcHRu
ZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5
OworCisJbm90aWZ5ID0gbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhwcS0+cHRyaW5nLCBrcmluZywg
ZmxhZ3MpOworCWlmIChub3RpZnkpIHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X25tX3J4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICprcmluZywgaW50IGZsYWdzKQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRz
b2Z0YyhrcmluZy0+bmEtPmlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5yeHF1
ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5OworCisJbm90aWZ5ID0gbmV0bWFw
X3B0X2d1ZXN0X3J4c3luYyhwcS0+cHRyaW5nLCBrcmluZywgZmxhZ3MpOworCWlmIChub3RpZnkp
IHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk
CitwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBx
ID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBwcS0+c2M7CisKKwlEQkcoZGV2
aWNlX3ByaW50ZihzYy0+ZGV2LCAiVHggaW50ZXJydXB0ICMlZFxuIiwgcHEtPmtyaW5nX2lkKSk7
CisjaWZkZWYgUFRORVRNQVBfU1RBVFMKKwlwcS0+c3RhdHMuaW50cnMgKys7CisjZW5kaWYgLyog
UFRORVRNQVBfU1RBVFMgKi8KKworCWlmIChuZXRtYXBfdHhfaXJxKHNjLT5pZnAsIHBxLT5rcmlu
Z19pZCkgIT0gTk1fSVJRX1BBU1MpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIFNjaGVkdWxlIHRo
ZSB0YXNxdWV1ZSB0byBmbHVzaCBwcm9jZXNzIHRyYW5zbWlzc2lvbnMgcmVxdWVzdHMuCisJICog
SG93ZXZlciwgdnRuZXQsIGlmX2VtIGFuZCBpZl9pZ2IganVzdCBjYWxsIHB0bmV0X3RyYW5zbWl0
KCkgaGVyZSwKKwkgKiBhdCBsZWFzdCB3aGVuIHVzaW5nIE1TSS1YIGludGVycnVwdHMuIFRoZSBp
Zl9lbSBkcml2ZXIsIGluc3RlYWQKKwkgKiBzY2hlZHVsZSB0YXNrcXVldWUgd2hlbiB1c2luZyBs
ZWdhY3kgaW50ZXJydXB0cy4gKi8KKwl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsICZwcS0+
dGFzayk7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAq
c2MgPSBwcS0+c2M7CisJdW5zaWduZWQgaW50IHVudXNlZDsKKworCURCRyhkZXZpY2VfcHJpbnRm
KHNjLT5kZXYsICJSeCBpbnRlcnJ1cHQgIyVkXG4iLCBwcS0+a3JpbmdfaWQpKTsKKyNpZmRlZiBQ
VE5FVE1BUF9TVEFUUworCXBxLT5zdGF0cy5pbnRycyArKzsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T
VEFUUyAqLworCisJaWYgKG5ldG1hcF9yeF9pcnEoc2MtPmlmcCwgcHEtPmtyaW5nX2lkLCAmdW51
c2VkKSAhPSBOTV9JUlFfUEFTUykgeworCQlyZXR1cm47CisJfQorCisJLyogTGlrZSB2dG5ldCwg
aWZfaWdiIGFuZCBpZl9lbSBkcml2ZXJzIHdoZW4gdXNpbmcgTVNJLVggaW50ZXJydXB0cywKKwkg
KiByZWNlaXZlLXNpZGUgcHJvY2Vzc2luZyBpcyBleGVjdXRlZCBkaXJlY3RseSBpbiB0aGUgaW50
ZXJydXB0CisJICogc2VydmljZSByb3V0aW5lLiBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgc2NoZWR1
bGUgdGhlIHRhc2txdWV1ZS4gKi8KKwlwdG5ldF9yeF9lb2YocHEsIFBUTkVUX1JYX0JVREdFVCwg
dHJ1ZSk7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgb2ZmbG9hZGluZ3MtcmVsYXRlZCBmdW5jdGlv
bnMgYXJlIHRha2VuIGZyb20gdGhlIHZ0bmV0CisgKiBkcml2ZXIsIGJ1dCB0aGUgc2FtZSBmdW5j
dGlvbmFsaXR5IGlzIHJlcXVpcmVkIGZvciB0aGUgcHRuZXQgZHJpdmVyLgorICogQXMgYSB0ZW1w
b3Jhcnkgc29sdXRpb24sIEkgY29waWVkIHRoaXMgY29kZSBmcm9tIHZ0bmV0IGFuZCBJIHN0YXJ0
ZWQKKyAqIHRvIGdlbmVyYWxpemUgaXQgKHRha2luZyBhd2F5IGRyaXZlci1zcGVjaWZpYyBzdGF0
aXN0aWMgYWNjb3VudGluZyksCisgKiBtYWtpbmcgYXMgbGl0dGxlIG1vZGlmaWNhdGlvbnMgYXMg
cG9zc2libGUuCisgKiBJbiB0aGUgZnV0dXJlIHdlIG5lZWQgdG8gc2hhcmUgdGhlc2UgZnVuY3Rp
b25zIGJldHdlZW4gdnRuZXQgYW5kIHB0bmV0LgorICovCitzdGF0aWMgaW50CitwdG5ldF90eF9v
ZmZsb2FkX2N0eChzdHJ1Y3QgbWJ1ZiAqbSwgaW50ICpldHlwZSwgaW50ICpwcm90bywgaW50ICpz
dGFydCkKK3sKKwlzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKmV2aDsKKwlpbnQgb2Zmc2V0Owor
CisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJaWYgKGV2aC0+
ZXZsX2VuY2FwX3Byb3RvID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkvKiBCTVY6IFdl
IHNob3VsZCBoYW5kbGUgbmVzdGVkIFZMQU4gdGFncyB0b28uICovCisJCSpldHlwZSA9IG50b2hz
KGV2aC0+ZXZsX3Byb3RvKTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl92bGFuX2hl
YWRlcik7CisJfSBlbHNlIHsKKwkJKmV0eXBlID0gbnRvaHMoZXZoLT5ldmxfZW5jYXBfcHJvdG8p
OworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcik7CisJfQorCisJc3dpdGNo
ICgqZXR5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhFUlRZUEVfSVA6IHsKKwkJ
c3RydWN0IGlwICppcCwgaXBoZHI7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBv
ZmZzZXQgKyBzaXplb2Yoc3RydWN0IGlwKSkpIHsKKwkJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBz
aXplb2Yoc3RydWN0IGlwKSwKKwkJCSAgICAoY2FkZHJfdCkgJmlwaGRyKTsKKwkJCWlwID0gJmlw
aGRyOworCQl9IGVsc2UKKwkJCWlwID0gKHN0cnVjdCBpcCAqKShtLT5tX2RhdGEgKyBvZmZzZXQp
OworCQkqcHJvdG8gPSBpcC0+aXBfcDsKKwkJKnN0YXJ0ID0gb2Zmc2V0ICsgKGlwLT5pcF9obCA8
PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVU
SEVSVFlQRV9JUFY2OgorCQkqcHJvdG8gPSAtMTsKKwkJKnN0YXJ0ID0gaXA2X2xhc3RoZHIobSwg
b2Zmc2V0LCBJUFBST1RPX0lQVjYsIHByb3RvKTsKKwkJLyogQXNzZXJ0IHRoZSBuZXR3b3JrIHN0
YWNrIHNlbnQgdXMgYSB2YWxpZCBwYWNrZXQuICovCisJCUtBU1NFUlQoKnN0YXJ0ID4gb2Zmc2V0
LAorCQkgICAgKCIlczogbWJ1ZiAlcCBzdGFydCAlZCBvZmZzZXQgJWQgcHJvdG8gJWQiLCBfX2Z1
bmNfXywgbSwKKwkJICAgICpzdGFydCwgb2Zmc2V0LCAqcHJvdG8pKTsKKwkJYnJlYWs7CisjZW5k
aWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHR4X2NzdW1f
YmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3R4X29mZmxvYWRfdHNvKGlmX3QgaWZwLCBz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGV0aF90eXBlLAorCQkgICAgIGludCBvZmZzZXQsIGJvb2wgYWxs
b3dfZWNuLCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmhkcikKK3sKKwlzdGF0aWMgc3RydWN0IHRp
bWV2YWwgbGFzdGVjbjsKKwlzdGF0aWMgaW50IGN1cmVjbjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3As
IHRjcGhkcjsKKworCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBvZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHRjcGhkcikpKSB7CisJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBzaXplb2Yoc3Ry
dWN0IHRjcGhkciksIChjYWRkcl90KSAmdGNwaGRyKTsKKwkJdGNwID0gJnRjcGhkcjsKKwl9IGVs
c2UKKwkJdGNwID0gKHN0cnVjdCB0Y3BoZHIgKikobS0+bV9kYXRhICsgb2Zmc2V0KTsKKworCWhk
ci0+aGRyX2xlbiA9IG9mZnNldCArICh0Y3AtPnRoX29mZiA8PCAyKTsKKwloZHItPmdzb19zaXpl
ID0gbS0+bV9wa3RoZHIudHNvX3NlZ3N6OworCWhkci0+Z3NvX3R5cGUgPSBldGhfdHlwZSA9PSBF
VEhFUlRZUEVfSVAgPyBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQgOgorCSAgICBWSVJUSU9fTkVU
X0hEUl9HU09fVENQVjY7CisKKwlpZiAodGNwLT50aF9mbGFncyAmIFRIX0NXUikgeworCQkvKgor
CQkgKiBEcm9wIGlmIFZJUlRJT19ORVRfRl9IT1NUX0VDTiB3YXMgbm90IG5lZ290aWF0ZWQuIElu
IEZyZWVCU0QsCisJCSAqIEVDTiBzdXBwb3J0IGlzIG5vdCBvbiBhIHBlci1pbnRlcmZhY2UgYmFz
aXMsIGJ1dCBnbG9iYWxseSB2aWEKKwkJICogdGhlIG5ldC5pbmV0LnRjcC5lY24uZW5hYmxlIHN5
c2N0bCBrbm9iLiBUaGUgZGVmYXVsdCBpcyBvZmYuCisJCSAqLworCQlpZiAoIWFsbG93X2Vjbikg
eworCQkJaWYgKHBwc3JhdGVjaGVjaygmbGFzdGVjbiwgJmN1cmVjbiwgMSkpCisJCQkJaWZfcHJp
bnRmKGlmcCwKKwkJCQkgICAgIlRTTyB3aXRoIEVDTiBub3QgbmVnb3RpYXRlZCB3aXRoIGhvc3Rc
biIpOworCQkJcmV0dXJuIChFTk9UU1VQKTsKKwkJfQorCQloZHItPmdzb190eXBlIHw9IFZJUlRJ
T19ORVRfSERSX0dTT19FQ047CisJfQorCisJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHR4
X3RzbyBjb3VudGVyLiAqLworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBtYnVm
ICoKK3B0bmV0X3R4X29mZmxvYWQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptLCBib29sIGFsbG93
X2VjbiwKKwkJIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCWludCBmbGFncywgZXR5
cGUsIGNzdW1fc3RhcnQsIHByb3RvLCBlcnJvcjsKKworCWZsYWdzID0gbS0+bV9wa3RoZHIuY3N1
bV9mbGFnczsKKworCWVycm9yID0gcHRuZXRfdHhfb2ZmbG9hZF9jdHgobSwgJmV0eXBlLCAmcHJv
dG8sICZjc3VtX3N0YXJ0KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZHJvcDsKKworCWlmICgoZXR5
cGUgPT0gRVRIRVJUWVBFX0lQICYmIGZsYWdzICYgUFRORVRfQ1NVTV9PRkZMT0FEKSB8fAorCSAg
ICAoZXR5cGUgPT0gRVRIRVJUWVBFX0lQVjYgJiYgZmxhZ3MgJiBQVE5FVF9DU1VNX09GRkxPQURf
SVBWNikpIHsKKwkJLyoKKwkJICogV2UgY291bGQgY29tcGFyZSB0aGUgSVAgcHJvdG9jb2wgdnMg
dGhlIENTVU1fIGZsYWcgdG9vLAorCQkgKiBidXQgdGhhdCByZWFsbHkgc2hvdWxkIG5vdCBiZSBu
ZWNlc3NhcnkuCisJCSAqLworCQloZHItPmZsYWdzIHw9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNf
Q1NVTTsKKwkJaGRyLT5jc3VtX3N0YXJ0ID0gY3N1bV9zdGFydDsKKwkJaGRyLT5jc3VtX29mZnNl
dCA9IG0tPm1fcGt0aGRyLmNzdW1fZGF0YTsKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50
IHRoZSB0eF9jc3VtIGNvdW50ZXIuICovCisJfQorCisJaWYgKGZsYWdzICYgQ1NVTV9UU08pIHsK
KwkJaWYgKF9fcHJlZGljdF9mYWxzZShwcm90byAhPSBJUFBST1RPX1RDUCkpIHsKKwkJCS8qIExp
a2VseSBmYWlsZWQgdG8gY29ycmVjdGx5IHBhcnNlIHRoZSBtYnVmLgorCQkJICogSGVyZSB3ZSBz
aG91bGQgaW5jcmVtZW50IHRoZSB0eF90c29fbm90X3RjcAorCQkJICogY291bnRlci4gKi8KKwkJ
CWdvdG8gZHJvcDsKKwkJfQorCisJCUtBU1NFUlQoaGRyLT5mbGFncyAmIFZJUlRJT19ORVRfSERS
X0ZfTkVFRFNfQ1NVTSwKKwkJICAgICgiJXM6IG1idWYgJXAgVFNPIHdpdGhvdXQgY2hlY2tzdW0g
b2ZmbG9hZCAlI3giLAorCQkgICAgX19mdW5jX18sIG0sIGZsYWdzKSk7CisKKwkJZXJyb3IgPSBw
dG5ldF90eF9vZmZsb2FkX3RzbyhpZnAsIG0sIGV0eXBlLCBjc3VtX3N0YXJ0LAorCQkJCQkgICAg
IGFsbG93X2VjbiwgaGRyKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkcm9wOworCX0KKworCXJl
dHVybiAobSk7CisKK2Ryb3A6CisJbV9mcmVlbShtKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCitz
dGF0aWMgdm9pZAorcHRuZXRfdmxhbl90YWdfcmVtb3ZlKHN0cnVjdCBtYnVmICptKQoreworCXN0
cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOworCisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRo
ZXJfdmxhbl9oZWFkZXIgKik7CisJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IG50b2hzKGV2aC0+
ZXZsX3RhZyk7CisJbS0+bV9mbGFncyB8PSBNX1ZMQU5UQUc7CisKKwkvKiBTdHJpcCB0aGUgODAy
LjFRIGhlYWRlci4gKi8KKwliY29weSgoY2hhciAqKSBldmgsIChjaGFyICopIGV2aCArIEVUSEVS
X1ZMQU5fRU5DQVBfTEVOLAorCSAgICBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfVFlQRV9MRU4pOwor
CW1fYWRqKG0sIEVUSEVSX1ZMQU5fRU5DQVBfTEVOKTsKK30KKworLyoKKyAqIFVzZSB0aGUgY2hl
Y2tzdW0gb2Zmc2V0IGluIHRoZSBWaXJ0SU8gaGVhZGVyIHRvIHNldCB0aGUKKyAqIGNvcnJlY3Qg
Q1NVTV8qIGZsYWdzLgorICovCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X29mZnNldChz
dHJ1Y3QgbWJ1ZiAqbSwgdWludDE2X3QgZXRoX3R5cGUsIGludCBpcF9zdGFydCwKKwkJCXN0cnVj
dCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlpbnQgb2Zmc2V0ID0gaGRyLT5jc3VtX3N0YXJ0ICsgaGRyLT5jc3VtX29mZnNldDsK
KyNlbmRpZgorCisJLyogT25seSBkbyBhIGJhc2ljIHNhbml0eSBjaGVjayBvbiB0aGUgb2Zmc2V0
LiAqLworCXN3aXRjaCAoZXRoX3R5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhF
UlRZUEVfSVA6CisJCWlmIChfX3ByZWRpY3RfZmFsc2Uob2Zmc2V0IDwgaXBfc3RhcnQgKyBzaXpl
b2Yoc3RydWN0IGlwKSkpCisJCQlyZXR1cm4gKDEpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRl
ZmluZWQoSU5FVDYpCisJY2FzZSBFVEhFUlRZUEVfSVBWNjoKKwkJaWYgKF9fcHJlZGljdF9mYWxz
ZShvZmZzZXQgPCBpcF9zdGFydCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKQorCQkJcmV0dXJu
ICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBp
bmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuICgx
KTsKKwl9CisKKwkvKgorCSAqIFVzZSB0aGUgb2Zmc2V0IHRvIGRldGVybWluZSB0aGUgYXBwcm9w
cmlhdGUgQ1NVTV8qIGZsYWdzLiBUaGlzIGlzCisJICogYSBiaXQgZGlydHksIGJ1dCB3ZSBjYW4g
Z2V0IGJ5IHdpdGggaXQgc2luY2UgdGhlIGNoZWNrc3VtIG9mZnNldHMKKwkgKiBoYXBwZW4gdG8g
YmUgZGlmZmVyZW50LiBXZSBhc3N1bWUgdGhlIGhvc3QgaG9zdCBkb2VzIG5vdCBkbyBJUHY0CisJ
ICogaGVhZGVyIGNoZWNrc3VtIG9mZmxvYWRpbmcuCisJICovCisJc3dpdGNoIChoZHItPmNzdW1f
b2Zmc2V0KSB7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCB1aF9zdW0pOgorCWNhc2Ug
b2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgdGhfc3VtKToKKwkJbS0+bV9wa3RoZHIuY3N1bV9mbGFn
cyB8PSBDU1VNX0RBVEFfVkFMSUQgfCBDU1VNX1BTRVVET19IRFI7CisJCW0tPm1fcGt0aGRyLmNz
dW1fZGF0YSA9IDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhk
ciwgY2hlY2tzdW0pOgorCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJ
RDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHRo
ZSByeF9jc3VtX2JhZF9vZmZzZXQgY291bnRlci4gKi8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X3BhcnNlKHN0cnVj
dCBtYnVmICptLCB1aW50MTZfdCBldGhfdHlwZSwgaW50IGlwX3N0YXJ0LAorCQkgICAgICAgc3Ry
dWN0IHZpcnRpb19uZXRfaGRyICpoZHIpCit7CisJaW50IG9mZnNldCwgcHJvdG87CisKKwlzd2l0
Y2ggKGV0aF90eXBlKSB7CisjaWYgZGVmaW5lZChJTkVUKQorCWNhc2UgRVRIRVJUWVBFX0lQOiB7
CisJCXN0cnVjdCBpcCAqaXA7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBpcF9z
dGFydCArIHNpemVvZihzdHJ1Y3QgaXApKSkKKwkJCXJldHVybiAoMSk7CisJCWlwID0gKHN0cnVj
dCBpcCAqKShtLT5tX2RhdGEgKyBpcF9zdGFydCk7CisJCXByb3RvID0gaXAtPmlwX3A7CisJCW9m
ZnNldCA9IGlwX3N0YXJ0ICsgKGlwLT5pcF9obCA8PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlm
CisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVUSEVSVFlQRV9JUFY2OgorCQlpZiAoX19wcmVk
aWN0X2ZhbHNlKG0tPm1fbGVuIDwgaXBfc3RhcnQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBpcDZf
aGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQlvZmZzZXQgPSBpcDZfbGFzdGhkcihtLCBpcF9zdGFy
dCwgSVBQUk9UT19JUFY2LCAmcHJvdG8pOworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG9mZnNldCA8
IDApKQorCQkJcmV0dXJuICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBI
ZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4g
Ki8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RP
X1RDUDoKKwkJaWYgKF9fcHJlZGljdF9mYWxzZShtLT5tX2xlbiA8IG9mZnNldCArIHNpemVvZihz
dHJ1Y3QgdGNwaGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdz
IHw9IENTVU1fREFUQV9WQUxJRCB8IENTVU1fUFNFVURPX0hEUjsKKwkJbS0+bV9wa3RoZHIuY3N1
bV9kYXRhID0gMHhGRkZGOworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVURQOgorCQlpZiAoX19w
cmVkaWN0X2ZhbHNlKG0tPm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSkK
KwkJCXJldHVybiAoMSk7CisJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0gQ1NVTV9EQVRBX1ZB
TElEIHwgQ1NVTV9QU0VVRE9fSERSOworCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweEZGRkY7
CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19TQ1RQOgorCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG0t
Pm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpCisJCQlyZXR1cm4gKDEp
OworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJRDsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRm9yIHRoZSByZW1haW5pbmcgcHJvdG9jb2xzLCBGcmVl
QlNEIGRvZXMgbm90IHN1cHBvcnQKKwkJICogY2hlY2tzdW0gb2ZmbG9hZGluZywgc28gdGhlIGNo
ZWNrc3VtIHdpbGwgYmUgcmVjb21wdXRlZC4KKwkJICovCisjaWYgMAorCQlpZl9wcmludGYoaWZw
LCAiY2tzdW0gb2ZmbG9hZCBvZiB1bnN1cHBvcnRlZCAiCisJCSAgICAicHJvdG9jb2wgZXRoX3R5
cGU9JSN4IHByb3RvPSVkIGNzdW1fc3RhcnQ9JWQgIgorCQkgICAgImNzdW1fb2Zmc2V0PSVkXG4i
LCBfX2Z1bmNfXywgZXRoX3R5cGUsIHByb3RvLAorCQkgICAgaGRyLT5jc3VtX3N0YXJ0LCBoZHIt
PmNzdW1fb2Zmc2V0KTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKDApOworfQor
CisvKgorICogU2V0IHRoZSBhcHByb3ByaWF0ZSBDU1VNXyogZmxhZ3MuIFVuZm9ydHVuYXRlbHks
IHRoZSBpbmZvcm1hdGlvbgorICogcHJvdmlkZWQgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCB0byB1
cy4gVGhlIFZpcnRJTyBoZWFkZXIgZ2l2ZXMgdGhlCisgKiBvZmZzZXQgb2YgdGhlIGNoZWNrc3Vt
LCB3aGljaCBpcyBhbGwgTGludXggbmVlZHMsIGJ1dCB0aGlzIGlzIG5vdAorICogaG93IEZyZWVC
U0QgZG9lcyB0aGluZ3MuIFdlIGFyZSBmb3JjZWQgdG8gcGVlayBpbnNpZGUgdGhlIHBhY2tldAor
ICogYSBiaXQuCisgKgorICogSXQgd291bGQgYmUgbmljZSBpZiBWaXJ0SU8gZ2F2ZSB1cyB0aGUg
TDQgcHJvdG9jb2wgb3IgaWYgRnJlZUJTRAorICogY291bGQgYWNjZXB0IHRoZSBvZmZzZXRzIGFu
ZCBsZXQgdGhlIHN0YWNrIGZpZ3VyZSBpdCBvdXQuCisgKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3J4
X2NzdW0oc3RydWN0IG1idWYgKm0sIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCXN0
cnVjdCBldGhlcl9oZWFkZXIgKmVoOworCXN0cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOwor
CXVpbnQxNl90IGV0aF90eXBlOworCWludCBvZmZzZXQsIGVycm9yOworCisJZWggPSBtdG9kKG0s
IHN0cnVjdCBldGhlcl9oZWFkZXIgKik7CisJZXRoX3R5cGUgPSBudG9ocyhlaC0+ZXRoZXJfdHlw
ZSk7CisJaWYgKGV0aF90eXBlID09IEVUSEVSVFlQRV9WTEFOKSB7CisJCS8qIEJNVjogV2Ugc2hv
dWxkIGhhbmRsZSBuZXN0ZWQgVkxBTiB0YWdzIHRvby4gKi8KKwkJZXZoID0gbXRvZChtLCBzdHJ1
Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJCWV0aF90eXBlID0gbnRvaHMoZXZoLT5ldmxfcHJv
dG8pOworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX3ZsYW5faGVhZGVyKTsKKwl9IGVs
c2UKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpOworCisJaWYgKGhkci0+
ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pCisJCWVycm9yID0gcHRuZXRfcnhf
Y3N1bV9ieV9vZmZzZXQobSwgZXRoX3R5cGUsIG9mZnNldCwgaGRyKTsKKwllbHNlCisJCWVycm9y
ID0gcHRuZXRfcnhfY3N1bV9ieV9wYXJzZShtLCBldGhfdHlwZSwgb2Zmc2V0LCBoZHIpOworCisJ
cmV0dXJuIChlcnJvcik7Cit9CisvKiBFbmQgb2Ygb2ZmbG9hZGluZy1yZWxhdGVkIGZ1bmN0aW9u
cyB0byBiZSBzaGFyZWQgd2l0aCB2dG5ldC4gKi8KKworc3RhdGljIGlubGluZSB2b2lkCitwdG5l
dF9zeW5jX3RhaWwoc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZywgc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcpCit7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisK
KwkvKiBVcGRhdGUgaHdjdXIgYW5kIGh3dGFpbCBhcyBrbm93biBieSB0aGUgaG9zdC4gKi8KKyAg
ICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisKKwkv
KiBubV9zeW5jX2ZpbmFsaXplICovCisJcmluZy0+dGFpbCA9IGtyaW5nLT5ydGFpbCA9IGtyaW5n
LT5ucl9od3RhaWw7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yaW5nX3VwZGF0ZShzdHJ1Y3Qg
cHRuZXRfcXVldWUgKnBxLCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJICB1bnNpZ25l
ZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IHN5bmNfZmxhZ3MpCit7CisJc3RydWN0IG5ldG1hcF9y
aW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisJc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZyA9IHBx
LT5wdHJpbmc7CisKKwkvKiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0
bWFwIHJpbmcuIFdlIGhhdmUKKwkgKiB0byB0ZWxsIHRoZSBob3N0IHRvIHByb2Nlc3MgdGhlIG5l
dyBwYWNrZXRzLCB1cGRhdGluZyBjdXIKKwkgKiBhbmQgaGVhZCBpbiB0aGUgQ1NCLiAqLworCXJp
bmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJLyogTWltaWMgbm1fdHhzeW5jX3Byb2xv
Z3VlL25tX3J4c3luY19wcm9sb2d1ZS4gKi8KKwlrcmluZy0+cmN1ciA9IGtyaW5nLT5yaGVhZCA9
IGhlYWQ7CisKKwlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+
cmN1ciwga3JpbmctPnJoZWFkKTsKKworCS8qIEtpY2sgdGhlIGhvc3QgaWYgbmVlZGVkLiAqLwor
CWlmIChOTV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgeworCQlwdHJpbmct
PnN5bmNfZmxhZ3MgPSBzeW5jX2ZsYWdzOworCQlwdG5ldF9raWNrKHBxKTsKKwl9Cit9CisKKyNk
ZWZpbmUgUFRORVRfVFhfTk9TUEFDRShfaCwgX2ssIF9taW4pCVwKKwkoKCgoX2gpIDwgKF9rKS0+
cnRhaWwpID8gMCA6IChfayktPm5rcl9udW1fc2xvdHMpICsgXAorCQkoX2spLT5ydGFpbCAtIChf
aCkpIDwgKF9taW4pCisKKy8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSB0aGUgbmV0
d29yayBzdGFjaywgb3IgYnkKKyAqIGJ5IHRoZSB0YXNrcXVldWUgdGhyZWFkLiAqLworc3RhdGlj
IGludAorcHRuZXRfZHJhaW5fdHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwg
dW5zaWduZWQgaW50IGJ1ZGdldCwKKwkJCSAgIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0
IHB0bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5l
dF9oZHJfbGVuOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVw
OworCWlmX3QgaWZwID0gc2MtPmlmcDsKKwl1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwOwor
CXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmc7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7
CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdDsK
Kwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBtaW5zcGFjZTsKKwl1bnNp
Z25lZCBpbnQgaGVhZDsKKwl1bnNpZ25lZCBpbnQgbGltOworCXN0cnVjdCBtYnVmICptaGVhZDsK
KwlzdHJ1Y3QgbWJ1ZiAqbWY7CisJaW50IG5tYnVmX2J5dGVzOworCXVpbnQ4X3QgKm5tYnVmOwor
CisJaWYgKCFQVE5FVF9RX1RSWUxPQ0socHEpKSB7CisJCS8qIFdlIGZhaWxlZCB0byBhY3F1aXJl
IHRoZSBsb2NrLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlSRCgxLCAiRGVmZXJyaW5n
IFRYIHdvcmsiKTsKKwkJaWYgKG1heV9yZXNjaGVkKSB7CisJCQl0YXNrcXVldWVfZW5xdWV1ZShw
cS0+dGFza3EsICZwcS0+dGFzayk7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodW5s
aWtlbHkoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpKSB7CisJCVBUTkVU
X1FfVU5MT0NLKHBxKTsKKwkJUkQoMSwgIkludGVyZmFjZSBpcyBkb3duIik7CisJCXJldHVybiBF
TkVURE9XTjsKKwl9CisKKwlwdHJpbmcgPSBwcS0+cHRyaW5nOworCWtyaW5nID0gbmEtPnR4X3Jp
bmdzICsgcHEtPmtyaW5nX2lkOworCXJpbmcgPSBrcmluZy0+cmluZzsKKwlsaW0gPSBrcmluZy0+
bmtyX251bV9zbG90cyAtIDE7CisJaGVhZCA9IHJpbmctPmhlYWQ7CisJbWluc3BhY2UgPSBzYy0+
bWluX3R4X3NwYWNlOworCisJd2hpbGUgKGNvdW50IDwgYnVkZ2V0KSB7CisJCWlmIChQVE5FVF9U
WF9OT1NQQUNFKGhlYWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCS8qIFdlIHJhbiBvdXQgb2Yg
c2xvdCwgbGV0J3Mgc2VlIGlmIHRoZSBob3N0IGhhcworCQkJICogZnJlZWQgdXAgc29tZSwgYnkg
cmVhZGluZyBod2N1ciBhbmQgaHd0YWlsIGZyb20KKwkJCSAqIHRoZSBDU0IuICovCisJCQlwdG5l
dF9zeW5jX3RhaWwocHRyaW5nLCBrcmluZyk7CisKKwkJCWlmIChQVE5FVF9UWF9OT1NQQUNFKGhl
YWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCQkvKiBTdGlsbCBubyBzbG90cyBhdmFpbGFibGUu
IFJlYWN0aXZhdGUgdGhlCisJCQkJICogaW50ZXJydXB0cyBzbyB0aGF0IHdlIGNhbiBiZSBub3Rp
ZmllZAorCQkJCSAqIHdoZW4gc29tZSBmcmVlIHNsb3RzIGFyZSBtYWRlIGF2YWlsYWJsZSBieQor
CQkJCSAqIHRoZSBob3N0LiAqLworCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMTsKKwor
CQkJCS8qIERvdWJsZS1jaGVjay4gKi8KKwkJCQlwdG5ldF9zeW5jX3RhaWwocHRyaW5nLCBrcmlu
Zyk7CisJCQkJaWYgKGxpa2VseShQVE5FVF9UWF9OT1NQQUNFKGhlYWQsIGtyaW5nLAorCQkJCQkJ
CSAgICBtaW5zcGFjZSkpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCVJEKDEsICJGb3Vu
ZCBtb3JlIHNsb3RzIGJ5IGRvdWJsZWNoZWNrIik7CisJCQkJLyogTW9yZSBzbG90cyB3ZXJlIGZy
ZWVkIGJlZm9yZSByZWFjdGl2YXRpbmcKKwkJCQkgKiB0aGUgaW50ZXJydXB0cy4gKi8KKwkJCQlw
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCQl9CisJCX0KKworCQltaGVhZCA9IGRyYnJf
cGVlayhpZnAsIHBxLT5idWZyaW5nKTsKKwkJaWYgKCFtaGVhZCkgeworCQkJYnJlYWs7CisJCX0K
KworCQkvKiBJbml0aWFsaXplIHRyYW5zbWlzc2lvbiBzdGF0ZSB2YXJpYWJsZXMuICovCisJCXNs
b3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQlubWJ1
Zl9ieXRlcyA9IDA7CisKKwkJLyogSWYgbmVlZGVkLCBwcmVwYXJlIHRoZSB2aXJ0aW8tbmV0IGhl
YWRlciBhdCB0aGUgYmVnaW5uaW5nCisJCSAqIG9mIHRoZSBmaXJzdCBzbG90LiAqLworCQlpZiAo
aGF2ZV92bmV0X2hkcikgeworCQkJc3RydWN0IHZpcnRpb19uZXRfaGRyICp2aCA9CisJCQkJCShz
dHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKworCQkJLyogRm9yIHBlcmZvcm1hbmNlLCB3
ZSBjb3VsZCByZXBsYWNlIHRoaXMgbWVtc2V0KCkgd2l0aAorCQkJICogdHdvIDgtYnl0ZXMtd2lk
ZSB3cml0ZXMuICovCisJCQltZW1zZXQobm1idWYsIDAsIFBUTkVUX0hEUl9TSVpFKTsKKwkJCWlm
IChtaGVhZC0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIFBUTkVUX0FMTF9PRkZMT0FEKSB7CisJCQkJ
bWhlYWQgPSBwdG5ldF90eF9vZmZsb2FkKGlmcCwgbWhlYWQsIGZhbHNlLAorCQkJCQkJCSB2aCk7
CisJCQkJaWYgKHVubGlrZWx5KCFtaGVhZCkpIHsKKwkJCQkJLyogUGFja2V0IGRyb3BwZWQgYmVj
YXVzZSBlcnJvcnMKKwkJCQkJICogb2NjdXJyZWQgd2hpbGUgcHJlcGFyaW5nIHRoZSB2bmV0CisJ
CQkJCSAqIGhlYWRlci4gTGV0J3MgZ28gYWhlYWQgd2l0aCB0aGUgbmV4dAorCQkJCQkgKiBwYWNr
ZXQuICovCisJCQkJCXBxLT5zdGF0cy5lcnJvcnMgKys7CisJCQkJCWRyYnJfYWR2YW5jZShpZnAs
IHBxLT5idWZyaW5nKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJTkQoMSwgIiVz
OiBbY3N1bV9mbGFncyAlbFhdIHZuZXQgaGRyOiBmbGFncyAleCAiCisJCQkgICAgICAiY3N1bV9z
dGFydCAldSBjc3VtX29mcyAldSBoZHJfbGVuID0gJXUgIgorCQkJICAgICAgImdzb19zaXplICV1
IGdzb190eXBlICV4IiwgX19mdW5jX18sCisJCQkgICAgICBtaGVhZC0+bV9wa3RoZHIuY3N1bV9m
bGFncywgdmgtPmZsYWdzLAorCQkJICAgICAgdmgtPmNzdW1fc3RhcnQsIHZoLT5jc3VtX29mZnNl
dCwgdmgtPmhkcl9sZW4sCisJCQkgICAgICB2aC0+Z3NvX3NpemUsIHZoLT5nc29fdHlwZSk7CisK
KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfYnl0ZXMgKz0gUFRORVRfSERS
X1NJWkU7CisJCX0KKworCQlmb3IgKG1mID0gbWhlYWQ7IG1mOyBtZiA9IG1mLT5tX25leHQpIHsK
KwkJCXVpbnQ4X3QgKm1kYXRhID0gbWYtPm1fZGF0YTsKKwkJCWludCBtbGVuID0gbWYtPm1fbGVu
OworCisJCQlmb3IgKDs7KSB7CisJCQkJaW50IGNvcHkgPSBORVRNQVBfQlVGX1NJWkUobmEpIC0g
bm1idWZfYnl0ZXM7CisKKwkJCQlpZiAobWxlbiA8IGNvcHkpIHsKKwkJCQkJY29weSA9IG1sZW47
CisJCQkJfQorCQkJCW1lbWNweShubWJ1ZiwgbWRhdGEsIGNvcHkpOworCisJCQkJbWRhdGEgKz0g
Y29weTsKKwkJCQltbGVuIC09IGNvcHk7CisJCQkJbm1idWYgKz0gY29weTsKKwkJCQlubWJ1Zl9i
eXRlcyArPSBjb3B5OworCisJCQkJaWYgKCFtbGVuKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwor
CQkJCXNsb3QtPmxlbiA9IG5tYnVmX2J5dGVzOworCQkJCXNsb3QtPmZsYWdzID0gTlNfTU9SRUZS
QUc7CisKKwkJCQloZWFkID0gbm1fbmV4dChoZWFkLCBsaW0pOworCQkJCUtBU1NFUlQoaGVhZCAh
PSByaW5nLT50YWlsLAorCQkJCQkoIlVuZXhwZWN0ZWRseSBydW4gb3V0IG9mIFRYIHNwYWNlIikp
OworCQkJCXNsb3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJCQlubWJ1ZiA9IE5NQihuYSwgc2xv
dCk7CisJCQkJbm1idWZfYnl0ZXMgPSAwOworCQkJfQorCQl9CisKKwkJLyogQ29tcGxldGUgbGFz
dCBzbG90IGFuZCB1cGRhdGUgaGVhZC4gKi8KKwkJc2xvdC0+bGVuID0gbm1idWZfYnl0ZXM7CisJ
CXNsb3QtPmZsYWdzID0gMDsKKwkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkvKiBD
b25zdW1lIHRoZSBwYWNrZXQganVzdCBwcm9jZXNzZWQuICovCisJCWRyYnJfYWR2YW5jZShpZnAs
IHBxLT5idWZyaW5nKTsKKworCQkvKiBDb3B5IHRoZSBwYWNrZXQgdG8gbGlzdGVuZXJzLiAqLwor
CQlFVEhFUl9CUEZfTVRBUChpZnAsIG1oZWFkKTsKKworCQlwcS0+c3RhdHMucGFja2V0cyArKzsK
KwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhkci5sZW47CisJCWlmIChtaGVhZC0+
bV9mbGFncyAmIE1fTUNBU1QpIHsKKwkJCXBxLT5zdGF0cy5tY2FzdHMgKys7CisJCX0KKworCQlt
X2ZyZWVtKG1oZWFkKTsKKworCQljb3VudCArKzsKKwkJaWYgKCsrYmF0Y2hfY291bnQgPT0gUFRO
RVRfVFhfQkFUQ0gpIHsKKwkJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFG
X0ZPUkNFX1JFQ0xBSU0pOworCQkJYmF0Y2hfY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGJh
dGNoX2NvdW50KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZP
UkNFX1JFQ0xBSU0pOworCX0KKworCWlmIChjb3VudCA+PSBidWRnZXQgJiYgbWF5X3Jlc2NoZWQp
IHsKKwkJREJHKFJEKDEsICJvdXQgb2YgYnVkZ2V0OiByZXNjaGVkLCAlZCBtYnVmcyBwZW5kaW5n
XG4iLAorCQkJCQlkcmJyX2ludXNlKGlmcCwgcHEtPmJ1ZnJpbmcpKSk7CisJCXRhc2txdWV1ZV9l
bnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9CisKKwlQVE5FVF9RX1VOTE9DSyhwcSk7
CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3RyYW5zbWl0KGlmX3Qg
aWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0
c29mdGMoaWZwKTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCXVuc2lnbmVkIGludCBxdWV1
ZV9pZHg7CisJaW50IGVycjsKKworCURCRyhkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0cmFuc21p
dCAlcFxuIiwgbSkpOworCisJLyogSW5zZXJ0IDgwMi4xUSBoZWFkZXIgaWYgbmVlZGVkLiAqLwor
CWlmIChtLT5tX2ZsYWdzICYgTV9WTEFOVEFHKSB7CisJCW0gPSBldGhlcl92bGFuZW5jYXAobSwg
bS0+bV9wa3RoZHIuZXRoZXJfdnRhZyk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXJldHVybiBF
Tk9CVUZTOworCQl9CisJCW0tPm1fZmxhZ3MgJj0gfk1fVkxBTlRBRzsKKwl9CisKKwkvKiBHZXQg
dGhlIGZsb3ctaWQgaWYgYXZhaWxhYmxlLiAqLworCXF1ZXVlX2lkeCA9IChNX0hBU0hUWVBFX0dF
VChtKSAhPSBNX0hBU0hUWVBFX05PTkUpID8KKwkJICAgIG0tPm1fcGt0aGRyLmZsb3dpZCA6IGN1
cmNwdTsKKworCWlmICh1bmxpa2VseShxdWV1ZV9pZHggPj0gc2MtPm51bV90eF9yaW5ncykpIHsK
KwkJcXVldWVfaWR4ICU9IHNjLT5udW1fdHhfcmluZ3M7CisJfQorCisJcHEgPSBzYy0+cXVldWVz
ICsgcXVldWVfaWR4OworCisJZXJyID0gZHJicl9lbnF1ZXVlKGlmcCwgcHEtPmJ1ZnJpbmcsIG0p
OworCWlmIChlcnIpIHsKKwkJLyogRU5PQlVGUyB3aGVuIHRoZSBidWZyaW5nIGlzIGZ1bGwgKi8K
KwkJUkQoMSwgIiVzOiBkcmJyX2VucXVldWUoKSBmYWlsZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywg
ZXJyKTsKKwkJcHEtPnN0YXRzLmVycm9ycyArKzsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAo
aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKSB7CisJCS8qIElmIHBvbGxpbmcgaXMg
b24sIHRoZSB0cmFuc21pdCBxdWV1ZXMgd2lsbCBiZQorCQkgKiBkcmFpbmVkIGJ5IHRoZSBwb2xs
ZXIuICovCisJCXJldHVybiAwOworCX0KKworCWVyciA9IHB0bmV0X2RyYWluX3RyYW5zbWl0X3F1
ZXVlKHBxLCBQVE5FVF9UWF9CVURHRVQsIHRydWUpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVy
ciA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3B0bmV0X3J4X2Rpc2NhcmQoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcsIHVuc2lnbmVkIGludCBoZWFkKQoreworCXN0cnVjdCBuZXRt
YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdCA9
IHJpbmctPnNsb3QgKyBoZWFkOworCisJZm9yICg7OykgeworCQloZWFkID0gbm1fbmV4dChoZWFk
LCBrcmluZy0+bmtyX251bV9zbG90cyAtIDEpOworCQlpZiAoIShzbG90LT5mbGFncyAmIE5TX01P
UkVGUkFHKSB8fCBoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCWJyZWFrOworCQl9CisJCXNsb3Qg
PSByaW5nLT5zbG90ICsgaGVhZDsKKwl9CisKKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIGlu
bGluZSBzdHJ1Y3QgbWJ1ZiAqCitwdG5ldF9yeF9zbG90KHN0cnVjdCBtYnVmICptdGFpbCwgdWlu
dDhfdCAqbm1idWYsIHVuc2lnbmVkIGludCBubWJ1Zl9sZW4pCit7CisJdWludDhfdCAqbWRhdGEg
PSBtdG9kKG10YWlsLCB1aW50OF90ICopICsgbXRhaWwtPm1fbGVuOworCisJZG8geworCQl1bnNp
Z25lZCBpbnQgY29weTsKKworCQlpZiAobXRhaWwtPm1fbGVuID09IE1DTEJZVEVTKSB7CisJCQlz
dHJ1Y3QgbWJ1ZiAqbWY7CisKKwkJCW1mID0gbV9nZXRjbChNX05PV0FJVCwgTVRfREFUQSwgMCk7
CisJCQlpZiAodW5saWtlbHkoIW1mKSkgeworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlt
dGFpbC0+bV9uZXh0ID0gbWY7CisJCQltdGFpbCA9IG1mOworCQkJbWRhdGEgPSBtdG9kKG10YWls
LCB1aW50OF90ICopOworCQkJbXRhaWwtPm1fbGVuID0gMDsKKwkJfQorCisJCWNvcHkgPSBNQ0xC
WVRFUyAtIG10YWlsLT5tX2xlbjsKKwkJaWYgKG5tYnVmX2xlbiA8IGNvcHkpIHsKKwkJCWNvcHkg
PSBubWJ1Zl9sZW47CisJCX0KKworCQltZW1jcHkobWRhdGEsIG5tYnVmLCBjb3B5KTsKKworCQlu
bWJ1ZiArPSBjb3B5OworCQlubWJ1Zl9sZW4gLT0gY29weTsKKwkJbWRhdGEgKz0gY29weTsKKwkJ
bXRhaWwtPm1fbGVuICs9IGNvcHk7CisJfSB3aGlsZSAobm1idWZfbGVuKTsKKworCXJldHVybiBt
dGFpbDsKK30KKworc3RhdGljIGludAorcHRuZXRfcnhfZW9mKHN0cnVjdCBwdG5ldF9xdWV1ZSAq
cHEsIHVuc2lnbmVkIGludCBidWRnZXQsIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0IHB0
bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5ldF9o
ZHJfbGVuOworCXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcgPSBwcS0+cHRyaW5nOworCXN0cnVj
dCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBf
a3JpbmcgKmtyaW5nID0gbmEtPnJ4X3JpbmdzICsgcHEtPmtyaW5nX2lkOworCXN0cnVjdCBuZXRt
YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXVuc2lnbmVkIGludCBjb25zdCBsaW0gPSBr
cmluZy0+bmtyX251bV9zbG90cyAtIDE7CisJdW5zaWduZWQgaW50IGhlYWQgPSByaW5nLT5oZWFk
OworCXVuc2lnbmVkIGludCBiYXRjaF9jb3VudCA9IDA7CisJaWZfdCBpZnAgPSBzYy0+aWZwOwor
CXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKwlQVE5FVF9RX0xPQ0socHEpOworCisJaWYgKHVu
bGlrZWx5KCEoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpKSkgeworCQlnb3Rv
IHVubG9jazsKKwl9CisKKwlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7CisKKwl3
aGlsZSAoY291bnQgPCBidWRnZXQpIHsKKwkJdW5zaWduZWQgaW50IHByZXZfaGVhZCA9IGhlYWQ7
CisJCXN0cnVjdCBtYnVmICptaGVhZCwgKm10YWlsOworCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHIg
KnZoOworCQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3Q7CisJCXVuc2lnbmVkIGludCBubWJ1Zl9s
ZW47CisJCXVpbnQ4X3QgKm5tYnVmOworaG9zdF9zeW5jOgorCQlpZiAoaGVhZCA9PSByaW5nLT50
YWlsKSB7CisJCQkvKiBXZSByYW4gb3V0IG9mIHNsb3QsIGxldCdzIHNlZSBpZiB0aGUgaG9zdCBo
YXMKKwkJCSAqIGFkZGVkIHNvbWUsIGJ5IHJlYWRpbmcgaHdjdXIgYW5kIGh3dGFpbCBmcm9tCisJ
CQkgKiB0aGUgQ1NCLiAqLworCQkJcHRuZXRfc3luY190YWlsKHB0cmluZywga3JpbmcpOworCisJ
CQlpZiAoaGVhZCA9PSByaW5nLT50YWlsKSB7CisJCQkJLyogU3RpbGwgbm8gc2xvdHMgYXZhaWxh
YmxlLiBSZWFjdGl2YXRlCisJCQkJICogaW50ZXJydXB0cyBhcyB0aGV5IHdlcmUgZGlzYWJsZWQg
YnkgdGhlCisJCQkJICogaG9zdCB0aHJlYWQgcmlnaHQgYmVmb3JlIGlzc3VpbmcgdGhlCisJCQkJ
ICogbGFzdCBpbnRlcnJ1cHQuICovCisJCQkJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAxOwor
CisJCQkJLyogRG91YmxlLWNoZWNrLiAqLworCQkJCXB0bmV0X3N5bmNfdGFpbChwdHJpbmcsIGty
aW5nKTsKKwkJCQlpZiAobGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkJYnJlYWs7
CisJCQkJfQorCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMDsKKwkJCX0KKwkJfQorCisJ
CS8qIEluaXRpYWxpemUgcmluZyBzdGF0ZSB2YXJpYWJsZXMsIHBvc3NpYmx5IGdyYWJiaW5nIHRo
ZQorCQkgKiB2aXJ0aW8tbmV0IGhlYWRlci4gKi8KKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk
OworCQlubWJ1ZiA9IE5NQihuYSwgc2xvdCk7CisJCW5tYnVmX2xlbiA9IHNsb3QtPmxlbjsKKwor
CQl2aCA9IChzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKwkJaWYgKGhhdmVfdm5ldF9o
ZHIpIHsKKwkJCWlmICh1bmxpa2VseShubWJ1Zl9sZW4gPCBQVE5FVF9IRFJfU0laRSkpIHsKKwkJ
CQkvKiBUaGVyZSBpcyBubyBnb29kIHJlYXNvbiB3aHkgaG9zdCBzaG91bGQKKwkJCQkgKiBwdXQg
dGhlIGhlYWRlciBpbiBtdWx0aXBsZSBuZXRtYXAgc2xvdHMuCisJCQkJICogSWYgdGhpcyBpcyB0
aGUgY2FzZSwgZGlzY2FyZC4gKi8KKwkJCQlSRCgxLCAiRnJhZ21lbnRlZCB2bmV0LWhkcjogZHJv
cHBpbmciKTsKKwkJCQloZWFkID0gcHRuZXRfcnhfZGlzY2FyZChrcmluZywgaGVhZCk7CisJCQkJ
cHEtPnN0YXRzLmlxZHJvcHMgKys7CisJCQkJZ290byBza2lwOworCQkJfQorCQkJTkQoMSwgIiVz
OiB2bmV0IGhkcjogZmxhZ3MgJXggY3N1bV9zdGFydCAldSAiCisJCQkgICAgICAiY3N1bV9vZnMg
JXUgaGRyX2xlbiA9ICV1IGdzb19zaXplICV1ICIKKwkJCSAgICAgICJnc29fdHlwZSAleCIsIF9f
ZnVuY19fLCB2aC0+ZmxhZ3MsCisJCQkgICAgICB2aC0+Y3N1bV9zdGFydCwgdmgtPmNzdW1fb2Zm
c2V0LCB2aC0+aGRyX2xlbiwKKwkJCSAgICAgIHZoLT5nc29fc2l6ZSwgdmgtPmdzb190eXBlKTsK
KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfbGVuIC09IFBUTkVUX0hEUl9T
SVpFOworCQl9CisKKwkJLyogQWxsb2NhdGUgdGhlIGhlYWQgb2YgYSBuZXcgbWJ1ZiBjaGFpbi4K
KwkJICogV2UgdXNlIG1fZ2V0Y2woKSB0byBhbGxvY2F0ZSBhbiBtYnVmIHdpdGggc3RhbmRhcmQg
Y2x1c3RlcgorCQkgKiBzaXplIChNQ0xCWVRFUykuIEluIHRoZSBmdXR1cmUgd2UgY291bGQgdXNl
IG1fZ2V0amNsKCkKKwkJICogdG8gY2hvb3NlIGRpZmZlcmVudCBzaXplcy4gKi8KKwkJbWhlYWQg
PSBtdGFpbCA9IG1fZ2V0Y2woTV9OT1dBSVQsIE1UX0RBVEEsIE1fUEtUSERSKTsKKwkJaWYgKHVu
bGlrZWx5KG1oZWFkID09IE5VTEwpKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczog
ZmFpbGVkIHRvIGFsbG9jYXRlIG1idWYgIgorCQkJCSAgICAgICJoZWFkXG4iLCBfX2Z1bmNfXyk7
CisJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0aWFs
aXplIHRoZSBtYnVmIHN0YXRlIHZhcmlhYmxlcy4gKi8KKwkJbWhlYWQtPm1fcGt0aGRyLmxlbiA9
IG5tYnVmX2xlbjsKKwkJbXRhaWwtPm1fbGVuID0gMDsKKworCQkvKiBTY2FuIGFsbCB0aGUgbmV0
bWFwIHNsb3RzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcGFja2V0LiAqLworCQlmb3IgKDs7KSB7
CisJCQlEQkcoZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiJXM6IGggJXUgdCAldSByY3YgZnJhZyAi
CisJCQkJCSAgImxlbiAldSwgZmxhZ3MgJXVcbiIsIF9fZnVuY19fLAorCQkJCQkgIGhlYWQsIHJp
bmctPnRhaWwsIHNsb3QtPmxlbiwKKwkJCQkJICBzbG90LT5mbGFncykpOworCisJCQltdGFpbCA9
IHB0bmV0X3J4X3Nsb3QobXRhaWwsIG5tYnVmLCBubWJ1Zl9sZW4pOworCQkJaWYgKHVubGlrZWx5
KCFtdGFpbCkpIHsKKwkJCQkvKiBPdWNoLiBXZSByYW4gb3V0IG9mIG1lbW9yeSB3aGlsZSBwcm9j
ZXNzaW5nCisJCQkJICogYSBwYWNrZXQuIFdlIGhhdmUgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMK
KwkJCQkgKiBoZWFkIHBvc2l0aW9uLCBmcmVlIHRoZSBtYnVmIGNoYWluLCBhbmQKKwkJCQkgKiBz
Y2hlZHVsZSB0aGUgdGFza3F1ZXVlIHRvIGdpdmUgdGhlIHBhY2tldAorCQkJCSAqIGFub3RoZXIg
Y2hhbmNlLiAqLworCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxs
b2NhdGUiCisJCQkJCSIgbWJ1ZiBmcmFnLCByZXNldCBoZWFkICV1IC0tPiAldVxuIiwKKwkJCQkJ
X19mdW5jX18sIGhlYWQsIHByZXZfaGVhZCk7CisJCQkJaGVhZCA9IHByZXZfaGVhZDsKKwkJCQlt
X2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJCWlmIChtYXlfcmVz
Y2hlZCkgeworCQkJCQl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsCisJCQkJCQkJICAmcHEt
PnRhc2spOworCQkJCX0KKwkJCQlnb3RvIGVzY2FwZTsKKwkJCX0KKworCQkJLyogV2UgaGF2ZSB0
byBpbmNyZW1lbnQgaGVhZCBpcnJlc3BlY3RpdmUgb2YgdGhlCisJCQkgKiBOU19NT1JFRlJBRyBi
ZWluZyBzZXQgb3Igbm90LiAqLworCQkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkJ
aWYgKCEoc2xvdC0+ZmxhZ3MgJiBOU19NT1JFRlJBRykpIHsKKwkJCQlicmVhazsKKwkJCX0KKwor
CQkJaWYgKHVubGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkvKiBUaGUgdmVyeSBs
YXN0IHNsb3QgcHJlcGFyZWQgYnkgdGhlIGhvc3QgaGFzCisJCQkJICogdGhlIE5TX01PUkVGUkFH
IHNldC4gRHJvcCBpdCBhbmQgY29udGludWUKKwkJCQkgKiB0aGUgb3V0ZXIgY3ljbGUgKHRvIGRv
IHRoZSBkb3VibGUtY2hlY2spLiAqLworCQkJCVJEKDEsICJJbmNvbXBsZXRlIHBhY2tldDogZHJv
cHBpbmciKTsKKwkJCQltX2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuaXFkcm9wcyArKzsK
KwkJCQlnb3RvIGhvc3Rfc3luYzsKKwkJCX0KKworCQkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk
OworCQkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQkJbm1idWZfbGVuID0gc2xvdC0+bGVuOwor
CQkJbWhlYWQtPm1fcGt0aGRyLmxlbiArPSBubWJ1Zl9sZW47CisJCX0KKworCQltaGVhZC0+bV9w
a3RoZHIucmN2aWYgPSBpZnA7CisJCW1oZWFkLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKKwor
CQkvKiBTdG9yZSB0aGUgcXVldWUgaWR4IGluIHRoZSBwYWNrZXQgaGVhZGVyLiAqLworCQltaGVh
ZC0+bV9wa3RoZHIuZmxvd2lkID0gcHEtPmtyaW5nX2lkOworCQlNX0hBU0hUWVBFX1NFVChtaGVh
ZCwgTV9IQVNIVFlQRV9PUEFRVUUpOworCisJCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQ
X1ZMQU5fSFdUQUdHSU5HKSB7CisJCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaDsKKworCQkJZWgg
PSBtdG9kKG1oZWFkLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOworCQkJaWYgKGVoLT5ldGhlcl90
eXBlID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkJCXB0bmV0X3ZsYW5fdGFnX3JlbW92
ZShtaGVhZCk7CisJCQkJLyoKKwkJCQkgKiBXaXRoIHRoZSA4MDIuMVEgaGVhZGVyIHJlbW92ZWQs
IHVwZGF0ZSB0aGUKKwkJCQkgKiBjaGVja3N1bSBzdGFydGluZyBsb2NhdGlvbiBhY2NvcmRpbmds
eS4KKwkJCQkgKi8KKwkJCQlpZiAodmgtPmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19D
U1VNKQorCQkJCQl2aC0+Y3N1bV9zdGFydCAtPSBFVEhFUl9WTEFOX0VOQ0FQX0xFTjsKKwkJCX0K
KwkJfQorCisJCWlmIChoYXZlX3ZuZXRfaGRyICYmICh2aC0+ZmxhZ3MgJiAoVklSVElPX05FVF9I
RFJfRl9ORUVEU19DU1VNCisJCQkJCXwgVklSVElPX05FVF9IRFJfRl9EQVRBX1ZBTElEKSkpIHsK
KwkJCWlmICh1bmxpa2VseShwdG5ldF9yeF9jc3VtKG1oZWFkLCB2aCkpKSB7CisJCQkJbV9mcmVl
bShtaGVhZCk7CisJCQkJUkQoMSwgIkNzdW0gb2ZmbG9hZCBlcnJvcjogZHJvcHBpbmciKTsKKwkJ
CQlwcS0+c3RhdHMuaXFkcm9wcyArKzsKKwkJCQlnb3RvIHNraXA7CisJCQl9CisJCX0KKworCQlw
cS0+c3RhdHMucGFja2V0cyArKzsKKwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhk
ci5sZW47CisKKwkJUFRORVRfUV9VTkxPQ0socHEpOworCQkoKmlmcC0+aWZfaW5wdXQpKGlmcCwg
bWhlYWQpOworCQlQVE5FVF9RX0xPQ0socHEpOworCisJCWlmICh1bmxpa2VseSghKGlmcC0+aWZf
ZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkpIHsKKwkJCS8qIFRoZSBpbnRlcmZhY2UgaGFz
IGdvbmUgZG93biB3aGlsZSB3ZSBkaWRuJ3QKKwkJCSAqIGhhdmUgdGhlIGxvY2suIFN0b3AgYW55
IHByb2Nlc3NpbmcgYW5kIGV4aXQuICovCisJCQlnb3RvIHVubG9jazsKKwkJfQorc2tpcDoKKwkJ
Y291bnQgKys7CisJCWlmICgrK2JhdGNoX2NvdW50ID09IFBUTkVUX1JYX0JBVENIKSB7CisJCQkv
KiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0d29yayBzdGFjay4KKwkJ
CSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBDU0IgdG8gdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUg
bmV3CisJCQkgKiByaW5nLT5jdXIgYW5kIHJpbmctPmhlYWQgKFJYIGJ1ZmZlciByZWZpbGwpLiAq
LworCQkJcHRuZXRfcmluZ191cGRhdGUocHEsIGtyaW5nLCBoZWFkLCBOQUZfRk9SQ0VfUkVBRCk7
CisJCQliYXRjaF9jb3VudCA9IDA7CisJCX0KKwl9Citlc2NhcGU6CisJaWYgKGJhdGNoX2NvdW50
KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZPUkNFX1JFQUQp
OworCisJfQorCisJaWYgKGNvdW50ID49IGJ1ZGdldCAmJiBtYXlfcmVzY2hlZCkgeworCQkvKiBJ
ZiB3ZSByYW4gb3V0IG9mIGJ1ZGdldCBvciB0aGUgZG91YmxlLWNoZWNrIGZvdW5kIG5ldworCQkg
KiBzbG90cyB0byBwcm9jZXNzLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlEQkcoUkQo
MSwgIm91dCBvZiBidWRnZXQ6IHJlc2NoZWQgaCAldSB0ICV1XG4iLAorCQkJCQloZWFkLCByaW5n
LT50YWlsKSk7CisJCXRhc2txdWV1ZV9lbnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9
Cit1bmxvY2s6CisJUFRORVRfUV9VTkxPQ0socHEpOworCisJcmV0dXJuIGNvdW50OworfQorCitz
dGF0aWMgdm9pZAorcHRuZXRfcnhfdGFzayh2b2lkICpjb250ZXh0LCBpbnQgcGVuZGluZykKK3sK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gY29udGV4dDsKKworCURCRyhSRCgxLCAiJXM6IHBx
ICMldVxuIiwgX19mdW5jX18sIHBxLT5rcmluZ19pZCkpOworCXB0bmV0X3J4X2VvZihwcSwgUFRO
RVRfUlhfQlVER0VULCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3R4X3Rhc2sodm9p
ZCAqY29udGV4dCwgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IGNv
bnRleHQ7CisKKwlEQkcoUkQoMSwgIiVzOiBwcSAjJXVcbiIsIF9fZnVuY19fLCBwcS0+a3Jpbmdf
aWQpKTsKKwlwdG5ldF9kcmFpbl90cmFuc21pdF9xdWV1ZShwcSwgUFRORVRfVFhfQlVER0VULCB0
cnVlKTsKK30KKworI2lmZGVmIERFVklDRV9QT0xMSU5HCisvKiBXZSBkb24ndCBuZWVkIHRvIGhh
bmRsZSBkaWZmZXJlbnRseSBQT0xMX0FORF9DSEVDS19TVEFUVVMgYW5kCisgKiBQT0xMX09OTFks
IHNpbmNlIHdlIGRvbid0IGhhdmUgYW4gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlci4gKi8KK3N0
YXRpYyBpbnQKK3B0bmV0X3BvbGwoaWZfdCBpZnAsIGVudW0gcG9sbF9jbWQgY21kLCBpbnQgYnVk
Z2V0KQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRzb2Z0YyhpZnApOworCXVu
c2lnbmVkIGludCBxdWV1ZV9idWRnZXQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlib29s
IGJvcnJvdyA9IGZhbHNlOworCWludCBpOworCisJS0FTU0VSVChzYy0+bnVtX3JpbmdzID4gMCwg
KCJGb3VuZCBubyBxdWV1ZXMgaW4gd2hpbGUgcG9sbGluZyBwdG5ldCIpKTsKKwlxdWV1ZV9idWRn
ZXQgPSBNQVgoYnVkZ2V0IC8gc2MtPm51bV9yaW5ncywgMSk7CisJUkQoMSwgIlBlci1xdWV1ZSBi
dWRnZXQgaXMgJWQiLCBxdWV1ZV9idWRnZXQpOworCisJd2hpbGUgKGJ1ZGdldCkgeworCQl1bnNp
Z25lZCBpbnQgcmNudCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkr
KykgeworCQkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5xdWV1ZXMgKyBpOworCisJCQlp
ZiAoYm9ycm93KSB7CisJCQkJcXVldWVfYnVkZ2V0ID0gTUlOKHF1ZXVlX2J1ZGdldCwgYnVkZ2V0
KTsKKwkJCQlpZiAocXVldWVfYnVkZ2V0ID09IDApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCisJCQlpZiAoaSA8IHNjLT5udW1fdHhfcmluZ3MpIHsKKwkJCQlyY250ICs9IHB0bmV0X2Ry
YWluX3RyYW5zbWl0X3F1ZXVlKHBxLAorCQkJCQkJICAgcXVldWVfYnVkZ2V0LCBmYWxzZSk7CisJ
CQl9IGVsc2UgeworCQkJCXJjbnQgKz0gcHRuZXRfcnhfZW9mKHBxLCBxdWV1ZV9idWRnZXQsCisJ
CQkJCQkgICAgICBmYWxzZSk7CisJCQl9CisJCX0KKworCQlpZiAoIXJjbnQpIHsKKwkJCS8qIEEg
c2NhbiBvZiB0aGUgcXVldWVzIGdhdmUgbm8gcmVzdWx0LCB3ZSBjYW4KKwkJCSAqIHN0b3AgaGVy
ZS4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJjbnQgPiBidWRnZXQpIHsKKwkJCS8qIFRo
aXMgbWF5IGhhcHBlbiB3aGVuIGluaXRpYWwgYnVkZ2V0IDwgc2MtPm51bV9yaW5ncywKKwkJCSAq
IHNpbmNlIG9uZSBwYWNrZXQgYnVkZ2V0IGlzIGdpdmVuIHRvIGVhY2ggcXVldWUKKwkJCSAqIGFu
eXdheS4gSnVzdCBwcmV0ZW5kIHdlIGRpZG4ndCBlYXQgInNvIG11Y2giLiAqLworCQkJcmNudCA9
IGJ1ZGdldDsKKwkJfQorCQljb3VudCArPSByY250OworCQlidWRnZXQgLT0gcmNudDsKKwkJYm9y
cm93ID0gdHJ1ZTsKKwl9CisKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBERVZJQ0Vf
UE9MTElORyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0
bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgKLS0tIHVzci9zcmMv
c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3JlX25ldG1hcC5oCTIwMTYt
MTEtMjMgMTY6NTc6NTcuODQ1MTU2MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog
LyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9yZV9uZXRtYXAu
aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv
c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmggMjM0MjI1IDIwMTItMDQtMTMgMTU6MzM6MTJa
IGx1aWdpICQKICAqCiAgKiBuZXRtYXAgc3VwcG9ydCBmb3I6IHJlCiAgKgpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rl
di9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf
dnRuZXRfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3Z0bmV0X25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6
NTcuODQ1NTQzMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl92dG5ldF9uZXRtYXAuaCAyODUzNDkg
MjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u
ZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggMjcwMDk3IDIwMTQtMDgtMTcgMTA6MjU6MjdaIGx1aWdp
ICQKICAqLwogCiAjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAJ
ICogRmlyc3QgcGFydDogcHJvY2VzcyBuZXcgcGFja2V0cyB0byBzZW5kLgogCSAqLwogCXJtYigp
OwotCQorCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAhPSBoZWFkKSB7CS8q
IHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwogCQlzdHJ1Y3Qgc2dsaXN0ICpzZyA9IHR4
cS0+dnRudHhfc2c7CkBAIC0xODIsNyArMTgyLDcgQEAKIAkJdmlydHF1ZXVlX2VuYWJsZV9pbnRy
KHZxKTsgLy8gbGlrZSBwb3N0cG9uZSB3aXRoIDAKIAl9CiAKLQkKKwogICAgICAgICAvKiBGcmVl
IHVzZWQgc2xvdHMuIFdlIG9ubHkgY29uc2lkZXIgb3VyIG93biB1c2VkIGJ1ZmZlcnMsIHJlY29n
bml6ZWQKIAkgKiBieSB0aGUgdG9rZW4gd2UgcGFzc2VkIHRvIHZpcnRxdWV1ZV9hZGRfb3V0YnVm
LgogCSAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFw
LmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lz
L2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2l4Z2JlX25ldG1hcC5oCTIwMTYtMTEt
MjMgMTY6NTc6NTcuODQ2MDU3MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoK
LSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAy
ODU1OTIgMjAxNS0wNy0xNSAwMTowMjowMVogcGtlbHNleSAkCisgKiAkRnJlZUJTRDogaGVhZC9z
eXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAyNDQ1MTQgMjAxMi0xMi0yMCAyMjoyNjowM1og
bHVpZ2kgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogaXhnYmUgKGJvdGggaXggYW5kIGl4
dikKICAqCkBAIC01Myw3ICs1Myw3IEBACiAvKgogICogZGV2aWNlLXNwZWNpZmljIHN5c2N0bCB2
YXJpYWJsZXM6CiAgKgotICogaXhfY3Jjc3RyaXA6IDA6IGtlZXAgQ1JDIGluIHJ4IGZyYW1lcyAo
ZGVmYXVsdCksIDE6IHN0cmlwIGl0LgorICogaXhfY3Jjc3RyaXA6IDA6IE5JQyBrZWVwcyBDUkMg
aW4gcnggZnJhbWVzIChkZWZhdWx0KSwgMTogTklDIHN0cmlwcyBpdC4KICAqCUR1cmluZyByZWd1
bGFyIG9wZXJhdGlvbnMgdGhlIENSQyBpcyBzdHJpcHBlZCwgYnV0IG9uIHNvbWUKICAqCWhhcmR3
YXJlIHJlY2VwdGlvbiBvZiBmcmFtZXMgbm90IG11bHRpcGxlIG9mIDY0IGlzIHNsb3dlciwKICAq
CXNvIHVzaW5nIGNyY3N0cmlwPTAgaGVscHMgaW4gYmVuY2htYXJrcy4KQEAgLTY1LDcgKzY1LDcg
QEAKIHN0YXRpYyBpbnQgaXhfcnhfbWlzcywgaXhfcnhfbWlzc19idWZzOwogaW50IGl4X2NyY3N0
cmlwOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGl4X2NyY3N0cmlwLAotICAg
IENUTEZMQUdfUlcsICZpeF9jcmNzdHJpcCwgMCwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsK
KyAgICBDVExGTEFHX1JXLCAmaXhfY3Jjc3RyaXAsIDAsICJOSUMgc3RyaXBzIENSQyBvbiByeCBm
cmFtZXMiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzLAog
ICAgIENUTEZMQUdfUlcsICZpeF9yeF9taXNzLCAwLCAicG90ZW50aWFsbHkgbWlzc2VkIHJ4IGlu
dHIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzX2J1ZnMs
CkBAIC0xMDksNiArMTA5LDIwIEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RM
LCByeGMpOwogfQogCitzdGF0aWMgdm9pZAoraXhnYmVfbmV0bWFwX2ludHIoc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlm
cDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGlmcC0+aWZfc29mdGM7CisKKwlJWEdCRV9D
T1JFX0xPQ0soYWRhcHRlcik7CisJaWYgKG9ub2ZmKSB7CisJCWl4Z2JlX2VuYWJsZV9pbnRyKGFk
YXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfSBlbHNlIHsKKwkJaXhnYmVfZGlz
YWJsZV9pbnRyKGFkYXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfQorCUlYR0JF
X0NPUkVfVU5MT0NLKGFkYXB0ZXIpOworfQogCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4g
V2UgYXJlIGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCkBAIC0zMTEsNyArMzI1LDcgQEAKIAkJ
ICogZ29vZCB3YXkuCiAJCSAqLwogCQluaWNfaSA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5o
dywgSVhHQkVfSVNfVkYoYWRhcHRlcikgPwotCQkJCSAgICAgICBJWEdCRV9WRlRESChrcmluZy0+
cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKKwkJCQlJWEdCRV9WRlRESChr
cmluZy0+cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKIAkJaWYgKG5pY19p
ID49IGtyaW5nLT5ua3JfbnVtX3Nsb3RzKSB7IC8qIFhYWCBjYW4gaXQgaGFwcGVuID8gKi8KIAkJ
CUQoIlRESCB3cmFwICVkIiwgbmljX2kpOwogCQkJbmljX2kgLT0ga3JpbmctPm5rcl9udW1fc2xv
dHM7CkBAIC00ODYsNiArNTAwLDcgQEAKIAluYS5ubV9yeHN5bmMgPSBpeGdiZV9uZXRtYXBfcnhz
eW5jOwogCW5hLm5tX3JlZ2lzdGVyID0gaXhnYmVfbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmlu
Z3MgPSBuYS5udW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcXVldWVzOworCW5hLm5tX2ludHIg
PSBpeGdiZV9uZXRtYXBfaW50cjsKIAluZXRtYXBfYXR0YWNoKCZuYSk7CiB9CiAKZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcC5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jCTIwMTYtMDkt
MjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u
ZXRtYXAuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg0Nzk3NTAwMCArMDAwMApAQCAtMSw1ICsxLDkg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJp
enpvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0
dGVvIExhbmRpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBMdWlnaSBSaXp6bworICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTYgR2l1c2VwcGUgTGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyOSw3IEBACiAKIAogLyoKLSAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXAuYyAzMDAwNTAgMjAx
Ni0wNS0xNyAxMjo1MjozMVogZWFkbGVyICQKKyAqICRGcmVlQlNEJAogICoKICAqIFRoaXMgbW9k
dWxlIHN1cHBvcnRzIG1lbW9yeSBtYXBwZWQgYWNjZXNzIHRvIG5ldHdvcmsgZGV2aWNlcywKICAq
IHNlZSBuZXRtYXAoNCkuCkBAIC0xMzMsMTMgKzEzNywxMiBAQAogICogPiAgICBzZWxlY3QoKWFi
bGUgZmlsZSBkZXNjcmlwdG9yIG9uIHdoaWNoIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCiAgKgogICog
IAlJbnRlcm5hbGx5LCB3ZSBhbGxvY2F0ZSBhIG5ldG1hcF9wcml2X2Qgc3RydWN0dXJlLCB0aGF0
IHdpbGwgYmUKLSAqICAJaW5pdGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4KKyAqICAJaW5p
dGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4gVGhlcmUgaXMgb25lIG5ldG1hcF9wcml2X2QK
KyAqICAJc3RydWN0dXJlIGZvciBlYWNoIG9wZW4oKS4KICAqCiAgKiAgICAgIG9zLXNwZWNpZmlj
OgotICogIAkgICAgRnJlZUJTRDogbmV0bWFwX29wZW4gKG5ldG1hcF9mcmVlYnNkLmMpLiBUaGUg
cHJpdiBpcwotICogIAkJICAgICBwZXItdGhyZWFkLgotICogIAkgICAgbGludXg6ICAgbGludXhf
bmV0bWFwX29wZW4gKG5ldG1hcF9saW51eC5jKS4gVGhlIHByaXYgaXMKLSAqICAJCSAgICAgcGVy
LW9wZW4uCisgKiAgCSAgICBGcmVlQlNEOiBzZWUgbmV0bWFwX29wZW4oKSAobmV0bWFwX2ZyZWVi
c2QuYykKKyAqICAJICAgIGxpbnV4OiAgIHNlZSBsaW51eF9uZXRtYXBfb3BlbigpIChuZXRtYXBf
bGludXguYykKICAqCiAgKiA+IDIuIG9uIGVhY2ggZGVzY3JpcHRvciwgdGhlIHByb2Nlc3MgaXNz
dWVzIGFuIGlvY3RsKCkgdG8gaWRlbnRpZnkKICAqID4gICAgdGhlIGludGVyZmFjZSB0aGF0IHNo
b3VsZCByZXBvcnQgZXZlbnRzIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IuCkBAIC0yOTksMTggKzMw
MiwxNyBAQAogICogICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg
ICAgICAgICAgbmEtPm5tX25vdGlmeSAgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAgICAgICAg
MikgaW9jdGwoTklPQ1JYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq
ICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3J4c3luY19mcm9tX2hv
c3RfY29tcGF0CisgKiAgICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IG5ldG1hcF9y
eHN5bmNfZnJvbV9ob3N0CiAgKiAgICAgICAgICAgICAgICAgIG5ldG1hcF9yeHN5bmNfZnJvbV9o
b3N0KG5hLCBOVUxMLCBOVUxMKQogICogICAgLSB0eCB0byBob3N0IHN0YWNrCiAgKiAgICAgICAg
ICAgaW9jdGwoTklPQ1RYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq
ICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2Nv
bXBhdAorICogICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3Rv
X2hvc3QKICAqICAgICAgICAgICAgICAgbmV0bWFwX3R4c3luY190b19ob3N0KG5hKQotICogICAg
ICAgICAgICAgICAgIE5NX1NFTkRfVVAoKQotICogICAgICAgICAgICAgICAgICAgRnJlZUJTRDog
bmEtPmlmX2lucHV0KCkgPT0gPz8gWFhYCisgKiAgICAgICAgICAgICAgICAgbm1fb3Nfc2VuZF91
cCgpCisgKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSBldGhl
cl9pbnB1dCgpCiAgKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5N
X01BR0lDX1BSSU9SSVRZX1JYCiAgKgogICoKLSAqCiAgKiAgICAgICAgICAgICAgIC09IFNZU1RF
TSBERVZJQ0UgV0lUSCBHRU5FUklDIFNVUFBPUlQgPS0KICAqCiAgKiAgICBuYSA9PSBOQShpZnAp
ID09IGdlbmVyaWNfbmV0bWFwX2FkYXB0ZXIgY3JlYXRlZCBpbiBnZW5lcmljX25ldG1hcF9hdHRh
Y2goKQpAQCAtMzE5LDEwICszMjEsMTEgQEAKICAqICAgICAgIGNvbmN1cnJlbnRseToKICAqICAg
ICAgICAgICAxKSBpb2N0bChOSU9DVFhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29u
dGV4dAogICogICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IGdlbmVyaWNfbmV0bWFw
X3R4c3luYygpCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogICBkZXZfcXVldWVfeG1pdCgp
IHdpdGggTk1fTUFHSUNfUFJJT1JJVFlfVFgKLSAqICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmljX25kb19zdGFydF94bWl0KCkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZy4g
ZGV2LiBzdGFydF94bWl0Ci0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfdHJh
bnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKKyAqICAgICAgICAgICAgICAgICAgIG5t
X29zX2dlbmVyaWNfeG1pdF9mcmFtZSgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgbGludXg6
ICAgZGV2X3F1ZXVlX3htaXQoKSB3aXRoIE5NX01BR0lDX1BSSU9SSVRZX1RYCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmcC0+bmRvX3N0YXJ0X3htaXQgPT0gZ2VuZXJpY19uZG9fc3Rh
cnRfeG1pdCgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbmEtPnNhdmVfc3Rh
cnRfeG1pdCA9PSBvcmlnLiBkZXYuIHN0YXJ0X3htaXQKKyAqICAgICAgICAgICAgICAgICAgICAg
ICBGcmVlQlNEOiBuYS0+aWZfdHJhbnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKICAq
ICAgICAgICAgICAyKSBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcigpCiAgKiAgICAgICAgICAgICAg
ICAgICBuYS0+bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAtIHJ4IGZyb20g
bmV0bWFwIHVzZXJzcGFjZToKQEAgLTMzMywyNCArMzM2LDE1IEBACiAgKiAgICAgICAgICAgICAg
IGdlbmVyaWNfcnhfaGFuZGxlcigpCiAgKiAgICAgICAgICAgICAgICAgICBtYnFfc2FmZV9lbnF1
ZXVlKCkKICAqICAgICAgICAgICAgICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90
aWZ5KCkKLSAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrOgotICogICAgICAgIGNvbmN1cnJlbnRs
eToKKyAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrCisgKiAgICAgICAgRnJlZUJTRDogc2FtZSBh
cyBuYXRpdmUKKyAqICAgICAgICBMaW51eDogc2FtZSBhcyBuYXRpdmUgZXhjZXB0OgogICogICAg
ICAgICAgIDEpIGhvc3Qgc3RhY2sKLSAqICAgICAgICAgICAgICAgbGludXg6IGdlbmVyaWNfbmRv
X3N0YXJ0X3htaXQoKQotICogICAgICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKLSAq
ICAgICAgICAgICAgICAgRnJlZUJTRDogaWZwLT5pZl9pbnB1dCgpID09IG5ldG1hcF90cmFuc21p
dAotICogICAgICAgICAgICAgICBib3RoOgotICogICAgICAgICAgICAgICAgICAgICAgIG5hLT5u
bV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90aWZ5KCkKLSAqICAgICAgICAgICAyKSBpb2N0bChOSU9D
UlhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29udGV4dAotICogICAgICAgICAgICAg
ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdF9jb21wYXQKLSAq
ICAgICAgICAgICAgICAgICAgbmV0bWFwX3J4c3luY19mcm9tX2hvc3QobmEsIE5VTEwsIE5VTEwp
Ci0gKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2s6Ci0gKiAgICAgICAgICAgaW9jdGwoTklPQ1RYU1lO
QykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAqICAgICAgICAgICAgIGtyaW5n
LT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2NvbXBhdAotICogICAgICAgICAg
ICAgICBuZXRtYXBfdHhzeW5jX3RvX2hvc3QobmEpCi0gKiAgICAgICAgICAgICAgICAgTk1fU0VO
RF9VUCgpCi0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSA/
Pz8gWFhYCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5NX01B
R0lDX1BSSU9SSVRZX1JYCisgKiAgICAgICAgICAgICAgIGRldl9xdWV1ZV94bWl0KCkgd2l0aG91
dCBOTV9NQUdJQ19QUklPUklUWV9UWAorICogICAgICAgICAgICAgICAgICAgaWZwLT5uZG9fc3Rh
cnRfeG1pdCA9PSBnZW5lcmljX25kb19zdGFydF94bWl0KCkKKyAqICAgICAgICAgICAgICAgICAg
ICAgICBuZXRtYXBfdHJhbnNtaXQoKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYS0+
bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCisgKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2sg
KHNhbWUgYXMgbmF0aXZlKToKICAqCiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAt
PSBWQUxFID0tCkBAIC0zNzEsNyArMzY1LDcgQEAKICAqICAgICAgICAgZnJvbSBob3N0IHN0YWNr
OgogICogICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAgICAgICAgIG5h
LT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19uciA9PSBob3N0
IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFw
X3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAgICAga3Jpbmct
Pm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAgICAgICAgICAg
ICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgICAgLSBzeXN0ZW0gZGV2aWNlIHdp
dGggZ2VuZXJpYyBzdXBwb3J0OgpAQCAtMzg0LDcgKzM3OCw3IEBACiAgKiAgICAgICAgIGZyb20g
aG9zdCBzdGFjazoKICAqICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg
ICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19u
ciA9PSBob3N0IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkg
PT0gbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAg
ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAg
ICAgICAgICAgICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgKGFsbCBjYXNlcykg
LS0+IG5tX2JkZ19mbHVzaCgpCkBAIC00MDcsNyArNDAxLDcgQEAKICAqICAgICAgICAgICAgICAg
ICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3RhY2s6CiAgKiAgICAg
ICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAgICAgICAga3Jpbmct
Pm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0CisgKiAgICAgICAgICAg
ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3QKICAqICAgICAg
ICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jX2xvY2tlZCgpCiAgKgogICogICAgICAtIHN5c3Rl
bSBkZXZpY2Ugd2l0aCBnZW5lcmljIGFkYXB0ZXI6CkBAIC00MTgsNyArNDEyLDcgQEAKICAqICAg
ICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3Rh
Y2s6CiAgKiAgICAgICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAg
ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0Cisg
KiAgICAgICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hv
c3QKICAqICAgICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqCiAgKi8KQEAgLTQ1
NSwyOSArNDQ5LDE5IEBACiAjaW5jbHVkZSA8c3lzL3JlZmNvdW50Lmg+CiAKIAotLyogcmVkdWNl
IGNvbmRpdGlvbmFsIGNvZGUgKi8KLS8vIGxpbnV4IEFQSSwgdXNlIGZvciB0aGUga25saXN0IGlu
IEZyZWVCU0QKLS8qIHVzZSBhIHByaXZhdGUgbXV0ZXggZm9yIHRoZSBrbmxpc3QgKi8KLSNkZWZp
bmUgaW5pdF93YWl0cXVldWVfaGVhZCh4KSBkbyB7CQkJXAotCXN0cnVjdCBtdHggKm0gPSAmKHgp
LT5tOwkJCVwKLQltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5VTEwsIE1UWF9ERUYpOwlcCi0J
a25saXN0X2luaXRfbXR4KCYoeCktPnNpLnNpX25vdGUsIG0pOwkJXAotICAgIH0gd2hpbGUgKDAp
Ci0KLSNkZWZpbmUgT1Nfc2VscmVjb3JkKGEsIGIpCXNlbHJlY29yZChhLCAmKChiKS0+c2kpKQot
I2RlZmluZSBPU19zZWx3YWtldXAoYSwgYikJZnJlZWJzZF9zZWx3YWtldXAoYSwgYikKLQogI2Vs
aWYgZGVmaW5lZChsaW51eCkKIAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCiAKLQotCiAjZWxpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKIAogI3dhcm5pbmcgT1NYIHN1cHBvcnQgaXMgb25seSBwYXJ0aWFs
CiAjaW5jbHVkZSAib3N4X2dsdWUuaCIKIAorI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCisjaW5j
bHVkZSAid2luX2dsdWUuaCIKKwogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRmb3Jt
CkBAIC00OTIsNDcgKzQ3Niw2OSBAQAogI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIu
aD4KIAogCi1NQUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5
IG1hcCIpOwotCiAvKiB1c2VyLWNvbnRyb2xsZWQgdmFyaWFibGVzICovCiBpbnQgbmV0bWFwX3Zl
cmJvc2U7CiAKIHN0YXRpYyBpbnQgbmV0bWFwX25vX3RpbWVzdGFtcDsgLyogZG9uJ3QgdGltZXN0
YW1wIG9uIHJ4c3luYyAqLwotCi1TWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBD
VExGTEFHX1JXLCAwLCAiTmV0bWFwIGFyZ3MiKTsKLVNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9J
RF9BVVRPLCB2ZXJib3NlLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZl
cmJvc2UgbW9kZSIpOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVz
dGFtcCwKLSAgICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVz
dGFtcCIpOwogaW50IG5ldG1hcF9taXRpZ2F0ZSA9IDE7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFw
LCBPSURfQVVUTywgbWl0aWdhdGUsIENUTEZMQUdfUlcsICZuZXRtYXBfbWl0aWdhdGUsIDAsICIi
KTsKIGludCBuZXRtYXBfbm9fcGVuZGludHIgPSAxOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg
T0lEX0FVVE8sIG5vX3BlbmRpbnRyLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbm9fcGVuZGlu
dHIsIDAsICJBbHdheXMgbG9vayBmb3IgbmV3IHJlY2VpdmVkIHBhY2tldHMuIik7CiBpbnQgbmV0
bWFwX3R4c3luY19yZXRyeSA9IDI7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywg
dHhzeW5jX3JldHJ5LCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfdHhzeW5jX3JldHJ5LCAwICwg
Ik51bWJlciBvZiB0eHN5bmMgbG9vcHMgaW4gYnJpZGdlJ3MgZmx1c2guIik7Ci0KLWludCBuZXRt
YXBfYWRhcHRpdmVfaW8gPSAwOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGFk
YXB0aXZlX2lvLCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfYWRhcHRpdmVfaW8sIDAgLCAiQWRh
cHRpdmUgSS9PIG9uIHBhcmF2aXJ0Iik7Ci0KIGludCBuZXRtYXBfZmxhZ3MgPSAwOwkvKiBkZWJ1
ZyBmbGFncyAqLwotaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl
ICovCitzdGF0aWMgaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl
ICovCiAKIC8qCiAgKiBuZXRtYXBfYWRtb2RlIHNlbGVjdHMgdGhlIG5ldG1hcCBtb2RlIHRvIHVz
ZS4KICAqIEludmFsaWQgdmFsdWVzIGFyZSByZXNldCB0byBORVRNQVBfQURNT0RFX0JFU1QKICAq
LwotZW51bSB7IE5FVE1BUF9BRE1PREVfQkVTVCA9IDAsCS8qIHVzZSBuYXRpdmUsIGZhbGxiYWNr
IHRvIGdlbmVyaWMgKi8KK2VudW0gewlORVRNQVBfQURNT0RFX0JFU1QgPSAwLAkvKiB1c2UgbmF0
aXZlLCBmYWxsYmFjayB0byBnZW5lcmljICovCiAJTkVUTUFQX0FETU9ERV9OQVRJVkUsCS8qIGVp
dGhlciBuYXRpdmUgb3Igbm9uZSAqLwogCU5FVE1BUF9BRE1PREVfR0VORVJJQywJLyogZm9yY2Ug
Z2VuZXJpYyAqLwogCU5FVE1BUF9BRE1PREVfTEFTVCB9Owogc3RhdGljIGludCBuZXRtYXBfYWRt
b2RlID0gTkVUTUFQX0FETU9ERV9CRVNUOwogCi1pbnQgbmV0bWFwX2dlbmVyaWNfbWl0ID0gMTAw
KjEwMDA7ICAgLyogR2VuZXJpYyBtaXRpZ2F0aW9uIGludGVydmFsIGluIG5hbm9zZWNvbmRzLiAq
LwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzaXplID0gMTAyNDsgICAvKiBHZW5lcmljIHJpbmdz
aXplLiAqLwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzID0gMTsgICAvKiBudW1iZXIgb2YgcXVl
dWVzIGluIGdlbmVyaWMuICovCisvKiBuZXRtYXBfZ2VuZXJpY19taXQgY29udHJvbHMgbWl0aWdh
dGlvbiBvZiBSWCBub3RpZmljYXRpb25zIGZvcgorICogdGhlIGdlbmVyaWMgbmV0bWFwIGFkYXB0
ZXIuIFRoZSB2YWx1ZSBpcyBhIHRpbWUgaW50ZXJ2YWwgaW4KKyAqIG5hbm9zZWNvbmRzLiAqLwor
aW50IG5ldG1hcF9nZW5lcmljX21pdCA9IDEwMCoxMDAwOworCisvKiBXZSB1c2UgYnkgZGVmYXVs
dCBuZXRtYXAtYXdhcmUgcWRpc2NzIHdpdGggZ2VuZXJpYyBuZXRtYXAgYWRhcHRlcnMsCisgKiBl
dmVuIGlmIHRoZXJlIGNhbiBiZSBhIGxpdHRsZSBwZXJmb3JtYW5jZSBoaXQgd2l0aCBoYXJkd2Fy
ZSBOSUNzLgorICogSG93ZXZlciwgdXNpbmcgdGhlIHFkaXNjIGlzIHRoZSBzYWZlciBhcHByb2Fj
aCwgZm9yIHR3byByZWFzb25zOgorICogMSkgaXQgcHJldmVudHMgbm9uLWZpZm8gcWRpc2NzIHRv
IGJyZWFrIHRoZSBUWCBub3RpZmljYXRpb24KKyAqICAgIHNjaGVtZSwgd2hpY2ggaXMgYmFzZWQg
b24gbWJ1ZiBkZXN0cnVjdG9ycyB3aGVuIHR4cWRpc2MgaXMKKyAqICAgIG5vdCB1c2VkLgorICog
MikgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdHJhbnNtaXQgb3ZlciBzb2Z0d2FyZSBkZXZpY2Vz
IHRoYXQKKyAqICAgIGNoYW5nZSBza2ItPmRldiwgbGlrZSBicmlkZ2UsIHZldGgsIC4uLgorICoK
KyAqIEFueXdheSB1c2VycyBsb29raW5nIGZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZSBzaG91bGQK
KyAqIHVzZSBuYXRpdmUgYWRhcHRlcnMuCisgKi8KK2ludCBuZXRtYXBfZ2VuZXJpY190eHFkaXNj
ID0gMTsKKworLyogRGVmYXVsdCBudW1iZXIgb2Ygc2xvdHMgYW5kIHF1ZXVlcyBmb3IgZ2VuZXJp
YyBhZGFwdGVycy4gKi8KK2ludCBuZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSA9IDEwMjQ7CitpbnQg
bmV0bWFwX2dlbmVyaWNfcmluZ3MgPSAxOworCisvKiBOb24temVybyBpZiBwdG5ldCBkZXZpY2Vz
IGFyZSBhbGxvd2VkIHRvIHVzZSB2aXJ0aW8tbmV0IGhlYWRlcnMuICovCitpbnQgcHRuZXRfdm5l
dF9oZHIgPSAxOworCisvKgorICogU1lTQ1RMIGNhbGxzIGFyZSBncm91cGVkIGJldHdlZW4gU1lT
QkVHSU4gYW5kIFNZU0VORCB0byBiZSBlbXVsYXRlZAorICogaW4gc29tZSBvdGhlciBvcGVyYXRp
bmcgc3lzdGVtcworICovCitTWVNCRUdJTihtYWluX2luaXQpOworCitTWVNDVExfREVDTChfZGV2
X25ldG1hcCk7CitTWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBDVExGTEFHX1JX
LCAwLCAiTmV0bWFwIGFyZ3MiKTsKK1NZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCB2
ZXJib3NlLAorICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZlcmJvc2UgbW9k
ZSIpOworU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVzdGFtcCwKKyAg
ICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVzdGFtcCIpOwor
U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG1pdGlnYXRlLCBDVExGTEFHX1JXLCAm
bmV0bWFwX21pdGlnYXRlLCAwLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVU
Tywgbm9fcGVuZGludHIsCisgICAgQ1RMRkxBR19SVywgJm5ldG1hcF9ub19wZW5kaW50ciwgMCwg
IkFsd2F5cyBsb29rIGZvciBuZXcgcmVjZWl2ZWQgcGFja2V0cy4iKTsKK1NZU0NUTF9JTlQoX2Rl
dl9uZXRtYXAsIE9JRF9BVVRPLCB0eHN5bmNfcmV0cnksIENUTEZMQUdfUlcsCisgICAgJm5ldG1h
cF90eHN5bmNfcmV0cnksIDAgLCAiTnVtYmVyIG9mIHR4c3luYyBsb29wcyBpbiBicmlkZ2UncyBm
bHVzaC4iKTsKIAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGZsYWdzLCBDVExG
TEFHX1JXLCAmbmV0bWFwX2ZsYWdzLCAwICwgIiIpOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg
T0lEX0FVVE8sIGZ3ZCwgQ1RMRkxBR19SVywgJm5ldG1hcF9md2QsIDAgLCAiIik7CkBAIC01NDAs
MTkgKzU0NiwyNCBAQAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNf
bWl0LCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfbWl0LCAwICwgIiIpOwogU1lTQ1RMX0lO
VChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNfcmluZ3NpemUsIENUTEZMQUdfUlcsICZu
ZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSwgMCAsICIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAs
IE9JRF9BVVRPLCBnZW5lcmljX3JpbmdzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfcmlu
Z3MsIDAgLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywgZ2VuZXJpY190
eHFkaXNjLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfdHhxZGlzYywgMCAsICIiKTsKK1NZ
U0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBwdG5ldF92bmV0X2hkciwgQ1RMRkxBR19S
VywgJnB0bmV0X3ZuZXRfaGRyLCAwICwgIiIpOworCitTWVNFTkQ7CiAKIE5NR19MT0NLX1QJbmV0
bWFwX2dsb2JhbF9sb2NrOwotaW50IG5ldG1hcF91c2VfY291bnQgPSAwOyAvKiBudW1iZXIgb2Yg
YWN0aXZlIG5ldG1hcCBpbnN0YW5jZXMgKi8KIAogLyoKICAqIG1hcmsgdGhlIHJpbmcgYXMgc3Rv
cHBlZCwgYW5kIHJ1biB0aHJvdWdoIHRoZSBsb2NrcwogICogdG8gbWFrZSBzdXJlIG90aGVyIHVz
ZXJzIGdldCB0byBzZWUgaXQuCisgKiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5SX0tSX1NUT1BQ
RUQgKGZvciB1bmJvdW5kZWQgc3RvcCkKKyAqIG9mIE5SX0tSX0xPQ0tFRCAoYnJpZWYgc3RvcCBm
b3IgbXV0dWFsIGV4Y2x1c2lvbiBwdXJwb3NlcykKICAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9k
aXNhYmxlX3Jpbmcoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCituZXRtYXBfZGlzYWJsZV9yaW5n
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgc3RvcHBlZCkKIHsKLQlrci0+bmtyX3N0b3Bw
ZWQgPSAxOwotCW5tX2tyX2dldChrcik7CisJbm1fa3Jfc3RvcChrciwgc3RvcHBlZCk7CisJLy8g
WFhYIGNoZWNrIGlmIG5tX2tyX3N0b3AgaXMgc3VmZmljaWVudAogCW10eF9sb2NrKCZrci0+cV9s
b2NrKTsKIAltdHhfdW5sb2NrKCZrci0+cV9sb2NrKTsKIAlubV9rcl9wdXQoa3IpOwpAQCAtNTYz
LDcgKzU3NCw3IEBACiBuZXRtYXBfc2V0X3Jpbmcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwg
dV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4IHQsIGludCBzdG9wcGVkKQogewogCWlmIChzdG9wcGVk
KQotCQluZXRtYXBfZGlzYWJsZV9yaW5nKE5NUihuYSwgdCkgKyByaW5nX2lkKTsKKwkJbmV0bWFw
X2Rpc2FibGVfcmluZyhOTVIobmEsIHQpICsgcmluZ19pZCwgc3RvcHBlZCk7CiAJZWxzZQogCQlO
TVIobmEsIHQpW3JpbmdfaWRdLm5rcl9zdG9wcGVkID0gMDsKIH0KQEAgLTU5MCwxMyArNjAxLDE0
IEBACiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB1c2VkIGluIGRyaXZlcnMuICBXYWl0cyBmb3Ig
Y3VycmVudCB0eHN5bmMoKXMvcnhzeW5jKClzCiAgKiB0byBmaW5pc2ggYW5kIHByZXZlbnRzIGFu
eSBuZXcgb25lIGZyb20gc3RhcnRpbmcuICBDYWxsIHRoaXMgYmVmb3JlIHR1cm5pbmcKICAqIG5l
dG1hcCBtb2RlIG9mZiwgb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBoYXJkd2FyZSByaW5ncyAoZS5n
Liwgb24gbW9kdWxlCi0gKiBvbmxvYWQpLiAgQXMgYSBydWxlIG9mIHRodW1iIGZvciBsaW51eCBk
cml2ZXJzLCB0aGlzIHNob3VsZCBiZSBwbGFjZWQgbmVhcgotICogZWFjaCBuYXBpX2Rpc2FibGUo
KS4KKyAqIG9ubG9hZCkuCiAgKi8KIHZvaWQKIG5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhzdHJ1
Y3QgaWZuZXQgKmlmcCkKIHsKLQluZXRtYXBfc2V0X2FsbF9yaW5ncyhOQShpZnApLCAxIC8qIHN0
b3BwZWQgKi8pOworCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCW5ldG1hcF9zZXRfYWxsX3Jp
bmdzKE5BKGlmcCksIE5NX0tSX1NUT1BQRUQpOworCX0KIH0KIAogLyoKQEAgLTYwNyw5ICs2MTks
MzQgQEAKIHZvaWQKIG5ldG1hcF9lbmFibGVfYWxsX3JpbmdzKHN0cnVjdCBpZm5ldCAqaWZwKQog
ewotCW5ldG1hcF9zZXRfYWxsX3JpbmdzKE5BKGlmcCksIDAgLyogZW5hYmxlZCAqLyk7CisJaWYg
KE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MoTkEoaWZwKSwgMCAv
KiBlbmFibGVkICovKTsKKwl9Cit9CisKK3ZvaWQKK25ldG1hcF9tYWtlX3pvbWJpZShzdHJ1Y3Qg
aWZuZXQgKmlmcCkKK3sKKwlpZiAoTk1fTkFfVkFMSUQoaWZwKSkgeworCQlzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MobmEsIE5NX0tS
X0xPQ0tFRCk7CisJCW5hLT5uYV9mbGFncyB8PSBOQUZfWk9NQklFOworCQluZXRtYXBfc2V0X2Fs
bF9yaW5ncyhuYSwgMCk7CisJfQogfQogCit2b2lkCituZXRtYXBfdW5kb196b21iaWUoc3RydWN0
IGlmbmV0ICppZnApCit7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYSA9IE5BKGlmcCk7CisJCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklF
KSB7CisJCQluZXRtYXBfc2V0X2FsbF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwkJCW5hLT5u
YV9mbGFncyAmPSB+TkFGX1pPTUJJRTsKKwkJCW5ldG1hcF9zZXRfYWxsX3JpbmdzKG5hLCAwKTsK
KwkJfQorCX0KK30KIAogLyoKICAqIGdlbmVyaWMgYm91bmRfY2hlY2tpbmcgZnVuY3Rpb24KQEAg
LTcyNywyOCArNzY0LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgbmV0bWFwX3R4
c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpOwotc3RhdGljIGludCBuZXRt
YXBfcnhzeW5jX2Zyb21faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgdGhy
ZWFkICp0ZCwgdm9pZCAqcHdhaXQpOwotCi0vKiBrcmluZy0+bm1fc3luYyBjYWxsYmFjayBmb3Ig
dGhlIGhvc3QgdHggcmluZyAqLwotc3RhdGljIGludAotbmV0bWFwX3R4c3luY190b19ob3N0X2Nv
bXBhdChzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZs
YWdzOyAvKiB1bnVzZWQgKi8KLQluZXRtYXBfdHhzeW5jX3RvX2hvc3Qoa3JpbmctPm5hKTsKLQly
ZXR1cm4gMDsKLX0KLQotLyoga3JpbmctPm5tX3N5bmMgY2FsbGJhY2sgZm9yIHRoZSBob3N0IHJ4
IHJpbmcgKi8KLXN0YXRpYyBpbnQKLW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0X2NvbXBhdChzdHJ1
Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZsYWdzOyAvKiB1
bnVzZWQgKi8KLQluZXRtYXBfcnhzeW5jX2Zyb21faG9zdChrcmluZy0+bmEsIE5VTEwsIE5VTEwp
OwotCXJldHVybiAwOwotfQotCi0KKy8qIG5tX3N5bmMgY2FsbGJhY2tzIGZvciB0aGUgaG9zdCBy
aW5ncyAqLworc3RhdGljIGludCBuZXRtYXBfdHhzeW5jX3RvX2hvc3Qoc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcsIGludCBmbGFncyk7CitzdGF0aWMgaW50IG5ldG1hcF9yeHN5bmNfZnJvbV9o
b3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpOwogCiAvKiBjcmVhdGUg
dGhlIGtyaW5ncyBhcnJheSBhbmQgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGNvbW1vbiB0byBhbGwg
YWRhcHRlcnMuCiAgKiBUaGUgYXJyYXkgbGF5b3V0IGlzIHRoaXM6CkBAIC03ODksNyArODA3LDcg
QEAKIAogCWxlbiA9IChuW05SX1RYXSArIG5bTlJfUlhdKSAqIHNpemVvZihzdHJ1Y3QgbmV0bWFw
X2tyaW5nKSArIHRhaWxyb29tOwogCi0JbmEtPnR4X3JpbmdzID0gbWFsbG9jKChzaXplX3QpbGVu
LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5hLT50eF9yaW5ncyA9IG5tX29zX21h
bGxvYygoc2l6ZV90KWxlbik7CiAJaWYgKG5hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCUQoIkNh
bm5vdCBhbGxvY2F0ZSBrcmluZ3MiKTsKIAkJcmV0dXJuIEVOT01FTTsKQEAgLTgwOSwxMiArODI3
LDE0IEBACiAJCQlrcmluZy0+cmluZ19pZCA9IGk7CiAJCQlrcmluZy0+dHggPSB0OwogCQkJa3Jp
bmctPm5rcl9udW1fc2xvdHMgPSBuZGVzYzsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1B
UF9PRkY7CisJCQlrcmluZy0+bnJfcGVuZGluZ19tb2RlID0gTktSX05FVE1BUF9PRkY7CiAJCQlp
ZiAoaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkgewogCQkJCWtyaW5nLT5ubV9zeW5jID0gKHQg
PT0gTlJfVFggPyBuYS0+bm1fdHhzeW5jIDogbmEtPm5tX3J4c3luYyk7Ci0JCQl9IGVsc2UgaWYg
KGkgPT0gbmEtPm51bV90eF9yaW5ncykgeworCQkJfSBlbHNlIHsKIAkJCQlrcmluZy0+bm1fc3lu
YyA9ICh0ID09IE5SX1RYID8KLQkJCQkJCW5ldG1hcF90eHN5bmNfdG9faG9zdF9jb21wYXQgOgot
CQkJCQkJbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KTsKKwkJCQkJCW5ldG1hcF90eHN5
bmNfdG9faG9zdDoKKwkJCQkJCW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KTsKIAkJCX0KIAkJCWty
aW5nLT5ubV9ub3RpZnkgPSBuYS0+bm1fbm90aWZ5OwogCQkJa3JpbmctPnJoZWFkID0ga3Jpbmct
PnJjdXIgPSBrcmluZy0+bnJfaHdjdXIgPSAwOwpAQCAtODIyLDE0ICs4NDIsMTQgQEAKIAkJCSAq
IElNUE9SVEFOVDogQWx3YXlzIGtlZXAgb25lIHNsb3QgZW1wdHkuCiAJCQkgKi8KIAkJCWtyaW5n
LT5ydGFpbCA9IGtyaW5nLT5ucl9od3RhaWwgPSAodCA9PSBOUl9UWCA/IG5kZXNjIC0gMSA6IDAp
OwotCQkJc25wcmludGYoa3JpbmctPm5hbWUsIHNpemVvZihrcmluZy0+bmFtZSkgLSAxLCAiJXMg
JXMlZCIsIG5hLT5uYW1lLCAKKwkJCXNucHJpbnRmKGtyaW5nLT5uYW1lLCBzaXplb2Yoa3Jpbmct
Pm5hbWUpIC0gMSwgIiVzICVzJWQiLCBuYS0+bmFtZSwKIAkJCQkJbm1fdHhyeDJzdHIodCksIGkp
OwogCQkJTkQoImt0eCAlcyBoICVkIGMgJWQgdCAlZCIsCiAJCQkJa3JpbmctPm5hbWUsIGtyaW5n
LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCk7CiAJCQltdHhfaW5pdCgma3Jpbmct
PnFfbG9jaywgKHQgPT0gTlJfVFggPyAibm1fdHhxX2xvY2siIDogIm5tX3J4cV9sb2NrIiksIE5V
TEwsIE1UWF9ERUYpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgma3JpbmctPnNpKTsKKwkJCW5t
X29zX3NlbGluZm9faW5pdCgma3JpbmctPnNpKTsKIAkJfQotCQlpbml0X3dhaXRxdWV1ZV9oZWFk
KCZuYS0+c2lbdF0pOworCQlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CiAJfQogCiAJ
bmEtPnRhaWxyb29tID0gbmEtPnJ4X3JpbmdzICsgbltOUl9SWF07CkBAIC04MzgsMTkgKzg1OCw2
IEBACiB9CiAKIAotI2lmZGVmIF9fRnJlZUJTRF9fCi1zdGF0aWMgdm9pZAotbmV0bWFwX2tubGlz
dF9kZXN0cm95KE5NX1NFTElORk9fVCAqc2kpCi17Ci0JLyogWFhYIGtxdWV1ZSg5KSBuZWVkZWQ7
IHRoZXNlIHdpbGwgbWlycm9yIGtubGlzdF9pbml0LiAqLwotCWtubGlzdF9kZWxldGUoJnNpLT5z
aS5zaV9ub3RlLCBjdXJ0aHJlYWQsIDAgLyogbm90IGxvY2tlZCAqLyApOwotCWtubGlzdF9kZXN0
cm95KCZzaS0+c2kuc2lfbm90ZSk7Ci0JLyogbm93IHdlIGRvbid0IG5lZWQgdGhlIG11dGV4IGFu
eW1vcmUgKi8KLQltdHhfZGVzdHJveSgmc2ktPm0pOwotfQotI2VuZGlmIC8qIF9fRnJlZUJTRF9f
ICovCi0KLQogLyogdW5kbyB0aGUgYWN0aW9ucyBwZXJmb3JtZWQgYnkgbmV0bWFwX2tyaW5nc19j
cmVhdGUgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICovCiB2b2lkCkBAIC04NjAsMTQg
Kzg2NywxNCBAQAogCWVudW0gdHhyeCB0OwogCiAJZm9yX3J4X3R4KHQpCi0JCW5ldG1hcF9rbmxp
c3RfZGVzdHJveSgmbmEtPnNpW3RdKTsKKwkJbm1fb3Nfc2VsaW5mb191bmluaXQoJm5hLT5zaVt0
XSk7CiAKIAkvKiB3ZSByZWx5IG9uIHRoZSBrcmluZ3MgbGF5b3V0IGRlc2NyaWJlZCBhYm92ZSAq
LwogCWZvciAoIDsga3JpbmcgIT0gbmEtPnRhaWxyb29tOyBrcmluZysrKSB7CiAJCW10eF9kZXN0
cm95KCZrcmluZy0+cV9sb2NrKTsKLQkJbmV0bWFwX2tubGlzdF9kZXN0cm95KCZrcmluZy0+c2kp
OworCQlubV9vc19zZWxpbmZvX3VuaW5pdCgma3JpbmctPnNpKTsKIAl9Ci0JZnJlZShuYS0+dHhf
cmluZ3MsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG5hLT50eF9yaW5ncyk7CiAJbmEtPnR4X3Jp
bmdzID0gbmEtPnJ4X3JpbmdzID0gbmEtPnRhaWxyb29tID0gTlVMTDsKIH0KIApAQCAtODc4LDE0
ICs4ODUsMTQgQEAKICAqIHRoZW0gZmlyc3QuCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBo
ZWxkICovCi1zdGF0aWMgdm9pZAordm9pZAogbmV0bWFwX2h3X2tyaW5nc19kZWxldGUoc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKIAlzdHJ1Y3QgbWJxICpxID0gJm5hLT5yeF9yaW5nc1tu
YS0+bnVtX3J4X3JpbmdzXS5yeF9xdWV1ZTsKIAogCU5EKCJkZXN0cm95IHN3IG1icSB3aXRoIGxl
biAlZCIsIG1icV9sZW4ocSkpOwogCW1icV9wdXJnZShxKTsKLQltYnFfc2FmZV9kZXN0cm95KHEp
OworCW1icV9zYWZlX2ZpbmkocSk7CiAJbmV0bWFwX2tyaW5nc19kZWxldGUobmEpOwogfQogCkBA
IC04OTgsMjkgKzkwNSwzOCBAQAogICovCiAvKiBjYWxsIHdpdGggTk1HX0xPQ0sgaGVsZCAqLwog
c3RhdGljIHZvaWQgbmV0bWFwX3Vuc2V0X3JpbmdpZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqKTsK
LXN0YXRpYyB2b2lkIG5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRtYXBfcHJpdl9kICop
Owotc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkIG5ldG1hcF9rcmluZ3NfcHV0KHN0cnVjdCBuZXRt
YXBfcHJpdl9kICopOwordm9pZAogbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwog
CiAJTk1HX0xPQ0tfQVNTRVJUKCk7CiAJbmEtPmFjdGl2ZV9mZHMtLTsKLQkvKiByZWxlYXNlIGV4
Y2x1c2l2ZSB1c2UgaWYgaXQgd2FzIHJlcXVlc3RlZCBvbiByZWdpZiAqLwotCW5ldG1hcF9yZWxf
ZXhjbHVzaXZlKHByaXYpOwotCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7CS8qIGxhc3QgaW5z
dGFuY2UgKi8KLQotCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQlEKCJkZWxldGluZyBsYXN0IGlu
c3RhbmNlIGZvciAlcyIsIG5hLT5uYW1lKTsKKwkvKiB1bnNldCBucl9wZW5kaW5nX21vZGUgYW5k
IHBvc3NpYmx5IHJlbGVhc2UgZXhjbHVzaXZlIG1vZGUgKi8KKwluZXRtYXBfa3JpbmdzX3B1dChw
cml2KTsKIAogI2lmZGVmCVdJVEhfTU9OSVRPUgorCS8qIFhYWCBjaGVjayB3aGV0aGVyIHdlIGhh
dmUgdG8gZG8gc29tZXRoaW5nIHdpdGggbW9uaXRvcgorCSAqIHdoZW4gcmluZ3MgY2hhbmdlIG5y
X21vZGUuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzIDw9IDApIHsKIAkJLyogd2FsayB0aHJvdWdo
IGFsbCB0aGUgcmluZ3MgYW5kIHRlbGwgYW55IG1vbml0b3IKIAkJICogdGhhdCB0aGUgcG9ydCBp
cyBnb2luZyB0byBleGl0IG5ldG1hcCBtb2RlCiAJCSAqLwogCQluZXRtYXBfbW9uaXRvcl9zdG9w
KG5hKTsKKwl9CiAjZW5kaWYKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwIHx8IG5tX2tyaW5n
X3BlbmRpbmcocHJpdikpIHsKKwkJbmEtPm5tX3JlZ2lzdGVyKG5hLCAwKTsKKwl9CisKKwkvKiBk
ZWxldGUgcmluZ3MgYW5kIGJ1ZmZlcnMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAqLworCW5l
dG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7
CS8qIGxhc3QgaW5zdGFuY2UgKi8KIAkJLyoKLQkJICogKFRPIENIRUNLKSBUaGlzIGZ1bmN0aW9u
IGlzIG9ubHkgY2FsbGVkCisJCSAqIChUTyBDSEVDSykgV2UgZW50ZXIgaGVyZQogCQkgKiB3aGVu
IHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIGZpbGUgZGVzY3JpcHRvciBnb2VzCiAJCSAqIGF3
YXkuIFRoaXMgbWVhbnMgd2UgY2Fubm90IGhhdmUgYW55IHBlbmRpbmcgcG9sbCgpCiAJCSAqIG9y
IGludGVycnVwdCByb3V0aW5lIG9wZXJhdGluZyBvbiB0aGUgc3RydWN0dXJlLgpAQCAtOTMzLDE2
ICs5NDksMTYgQEAKIAkJICogaGFwcGVucyBpZiB0aGUgY2xvc2UoKSBvY2N1cnMgd2hpbGUgYSBj
b25jdXJyZW50CiAJCSAqIHN5c2NhbGwgaXMgcnVubmluZy4KIAkJICovCi0JCW5hLT5ubV9yZWdp
c3RlcihuYSwgMCk7IC8qIG9mZiwgY2xlYXIgZmxhZ3MgKi8KLQkJLyogV2FrZSB1cCBhbnkgc2xl
ZXBpbmcgdGhyZWFkcy4gbmV0bWFwX3BvbGwgd2lsbAotCQkgKiB0aGVuIHJldHVybiBQT0xMRVJS
Ci0JCSAqIFhYWCBUaGUgd2FrZSB1cCBub3cgbXVzdCBoYXBwZW4gZHVyaW5nICpfZG93bigpLCB3
aGVuCi0JCSAqIHdlIG9yZGVyIGFsbCBhY3Rpdml0aWVzIHRvIHN0b3AuIC1nbAotCQkgKi8KLQkJ
LyogZGVsZXRlIHJpbmdzIGFuZCBidWZmZXJzICovCi0JCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRl
KG5hKTsKKwkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJRCgiZGVsZXRpbmcgbGFzdCBpbnN0YW5j
ZSBmb3IgJXMiLCBuYS0+bmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm1fbmV0bWFwX29u
KG5hKSkgeworICAgICAgICAgICAgICAgICAgICBEKCJCVUc6IG5ldG1hcCBvbiB3aGlsZSBnb2lu
ZyB0byBkZWxldGUgdGhlIGtyaW5ncyIpOworICAgICAgICAgICAgICAgIH0KKwogCQluYS0+bm1f
a3JpbmdzX2RlbGV0ZShuYSk7CiAJfQorCiAJLyogcG9zc2liaWx5IGRlY3JlbWVudCBjb3VudGVy
IG9mIHR4X3NpL3J4X3NpIHVzZXJzICovCiAJbmV0bWFwX3Vuc2V0X3JpbmdpZChwcml2KTsKIAkv
KiBkZWxldGUgdGhlIG5pZnAgKi8KQEAgLTk2Miw2ICs5NzgsMTkgQEAKIAkJKHByaXYtPm5wX3Fs
YXN0W3RdIC0gcHJpdi0+bnBfcWZpcnN0W3RdID4gMSkpOwogfQogCitzdHJ1Y3QgbmV0bWFwX3By
aXZfZCoKK25ldG1hcF9wcml2X25ldyh2b2lkKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpw
cml2OworCisJcHJpdiA9IG5tX29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2X2Qp
KTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwcml2LT5ucF9yZWZzID0g
MTsKKwlubV9vc19nZXRfbW9kdWxlKCk7CisJcmV0dXJuIHByaXY7Cit9CisKIC8qCiAgKiBEZXN0
cnVjdG9yIG9mIHRoZSBuZXRtYXBfcHJpdl9kLCBjYWxsZWQgd2hlbiB0aGUgZmQgaXMgY2xvc2Vk
CiAgKiBBY3Rpb246IHVuZG8gYWxsIHRoZSB0aGluZ3MgZG9uZSBieSBOSU9DUkVHSUYsCkBAIC05
NzEsMjIgKzEwMDAsMjIgQEAKICAqCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICov
Ci1pbnQKLW5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK3Zv
aWQKK25ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKIHsKIAlz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gcHJpdi0+bnBfbmE7CiAKIAkvKiBudW1iZXIgb2Yg
YWN0aXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBmZCAqLwogCWlmICgtLXByaXYtPm5wX3JlZnMgPiAw
KSB7Ci0JCXJldHVybiAwOwotCX0KLQluZXRtYXBfdXNlX2NvdW50LS07Ci0JaWYgKCFuYSkgewot
CQlyZXR1cm4gMTsgLy9YWFggaXMgaXQgY29ycmVjdD8KKwkJcmV0dXJuOwogCX0KLQluZXRtYXBf
ZG9fdW5yZWdpZihwcml2KTsKLQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwotCXJldHVybiAxOwor
CW5tX29zX3B1dF9tb2R1bGUoKTsKKwlpZiAobmEpIHsKKwkJbmV0bWFwX2RvX3VucmVnaWYocHJp
dik7CisJfQorCW5ldG1hcF91bmdldF9uYShuYSwgcHJpdi0+bnBfaWZwKTsKKwliemVybyhwcml2
LCBzaXplb2YoKnByaXYpKTsJLyogZm9yIHNhZmV0eSAqLworCW5tX29zX2ZyZWUocHJpdik7CiB9
CiAKIApAQCAtOTk1LDE1ICsxMDI0LDEwIEBACiBuZXRtYXBfZHRvcih2b2lkICpkYXRhKQogewog
CXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gZGF0YTsKLQlpbnQgbGFzdF9pbnN0YW5jZTsK
IAogCU5NR19MT0NLKCk7Ci0JbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9kdG9yX2xvY2tlZChwcml2
KTsKKwluZXRtYXBfcHJpdl9kZWxldGUocHJpdik7CiAJTk1HX1VOTE9DSygpOwotCWlmIChsYXN0
X2luc3RhbmNlKSB7Ci0JCWJ6ZXJvKHByaXYsIHNpemVvZigqcHJpdikpOwkvKiBmb3Igc2FmZXR5
ICovCi0JCWZyZWUocHJpdiwgTV9ERVZCVUYpOwotCX0KIH0KIAogCkBAIC0xMDM2LDE0ICsxMDYw
LDE5IEBACiBuZXRtYXBfc2VuZF91cChzdHJ1Y3QgaWZuZXQgKmRzdCwgc3RydWN0IG1icSAqcSkK
IHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqaGVhZCA9IE5VTEwsICpwcmV2ID0g
TlVMTDsKIAogCS8qIHNlbmQgcGFja2V0cyB1cCwgb3V0c2lkZSB0aGUgbG9jayAqLwogCXdoaWxl
ICgobSA9IG1icV9kZXF1ZXVlKHEpKSAhPSBOVUxMKSB7CiAJCWlmIChuZXRtYXBfdmVyYm9zZSAm
IE5NX1ZFUkJfSE9TVCkKIAkJCUQoInNlbmRpbmcgdXAgcGt0ICVwIHNpemUgJWQiLCBtLCBNQlVG
X0xFTihtKSk7Ci0JCU5NX1NFTkRfVVAoZHN0LCBtKTsKLQl9Ci0JbWJxX2Rlc3Ryb3kocSk7CisJ
CXByZXYgPSBubV9vc19zZW5kX3VwKGRzdCwgbSwgcHJldik7CisJCWlmIChoZWFkID09IE5VTEwp
CisJCQloZWFkID0gcHJldjsKKwl9CisJaWYgKGhlYWQpCisJCW5tX29zX3NlbmRfdXAoZHN0LCBO
VUxMLCBoZWFkKTsKKwltYnFfZmluaShxKTsKIH0KIAogCkBAIC0xMDgxLDYgKzExMTAsMjcgQEAK
IAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50Citfbm1fbWF5X2ZvcndhcmQoc3RydWN0IG5ldG1h
cF9rcmluZyAqa3JpbmcpCit7CisJcmV0dXJuCSgobmV0bWFwX2Z3ZCB8fCBrcmluZy0+cmluZy0+
ZmxhZ3MgJiBOUl9GT1JXQVJEKSAmJgorCQkga3JpbmctPm5hLT5uYV9mbGFncyAmIE5BRl9IT1NU
X1JJTkdTICYmCisJCSBrcmluZy0+dHggPT0gTlJfUlgpOworfQorCitzdGF0aWMgaW5saW5lIGlu
dAorbm1fbWF5X2ZvcndhcmRfdXAoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCit7CisJcmV0
dXJuCV9ubV9tYXlfZm9yd2FyZChrcmluZykgJiYKKwkJIGtyaW5nLT5yaW5nX2lkICE9IGtyaW5n
LT5uYS0+bnVtX3J4X3JpbmdzOworfQorCitzdGF0aWMgaW5saW5lIGludAorbm1fbWF5X2Zvcndh
cmRfZG93bihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKK3sKKwlyZXR1cm4JX25tX21heV9m
b3J3YXJkKGtyaW5nKSAmJgorCQkga3JpbmctPnJpbmdfaWQgPT0ga3JpbmctPm5hLT5udW1fcnhf
cmluZ3M7Cit9CiAKIC8qCiAgKiBTZW5kIHRvIHRoZSBOSUMgcmluZ3MgcGFja2V0cyBtYXJrZWQg
TlNfRk9SV0FSRCBiZXR3ZWVuCkBAIC0xMTA3LDcgKzExNTcsNyBAQAogCQlmb3IgKDsgcnhjdXIg
IT0gaGVhZCAmJiAhbm1fcmluZ19lbXB0eShyZHN0KTsKIAkJICAgICByeGN1ciA9IG5tX25leHQo
cnhjdXIsIHNyY19saW0pICkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzcmMsICpkc3QsIHRt
cDsKLQkJCXVfaW50IGRzdF9jdXIgPSByZHN0LT5jdXI7CisJCQl1X2ludCBkc3RfaGVhZCA9IHJk
c3QtPmhlYWQ7CiAKIAkJCXNyYyA9ICZyeHNsb3RbcnhjdXJdOwogCQkJaWYgKChzcmMtPmZsYWdz
ICYgTlNfRk9SV0FSRCkgPT0gMCAmJiAhbmV0bWFwX2Z3ZCkKQEAgLTExMTUsNyArMTE2NSw3IEBA
CiAKIAkJCXNlbnQrKzsKIAotCQkJZHN0ID0gJnJkc3QtPnNsb3RbZHN0X2N1cl07CisJCQlkc3Qg
PSAmcmRzdC0+c2xvdFtkc3RfaGVhZF07CiAKIAkJCXRtcCA9ICpzcmM7CiAKQEAgLTExMjYsNyAr
MTE3Niw3IEBACiAJCQlkc3QtPmxlbiA9IHRtcC5sZW47CiAJCQlkc3QtPmZsYWdzID0gTlNfQlVG
X0NIQU5HRUQ7CiAKLQkJCXJkc3QtPmN1ciA9IG5tX25leHQoZHN0X2N1ciwgZHN0X2xpbSk7CisJ
CQlyZHN0LT5oZWFkID0gcmRzdC0+Y3VyID0gbm1fbmV4dChkc3RfaGVhZCwgZHN0X2xpbSk7CiAJ
CX0KIAkJLyogaWYgKHNlbnQpIFhYWCB0eHN5bmMgPyAqLwogCX0KQEAgLTExNDAsMTAgKzExOTAs
MTAgQEAKICAqIGNhbiBiZSBhbW9uZyBtdWx0aXBsZSB1c2VyIHRocmVhZHMgZXJyb25lb3VzbHkg
Y2FsbGluZwogICogdGhpcyByb3V0aW5lIGNvbmN1cnJlbnRseS4KICAqLwotc3RhdGljIHZvaWQK
LW5ldG1hcF90eHN5bmNfdG9faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQorc3RhdGlj
IGludAorbmV0bWFwX3R4c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBp
bnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmbmEtPnR4X3Jpbmdz
W25hLT5udW1fdHhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+
bmE7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50
IGNvbnN0IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJc3RydWN0IG1icSBxOwpAQCAtMTE2Miw2ICsx
MjEyLDcgQEAKIAkJa3JpbmctPm5yX2h3dGFpbCAtPSBsaW0gKyAxOwogCiAJbmV0bWFwX3NlbmRf
dXAobmEtPmlmcCwgJnEpOworCXJldHVybiAwOwogfQogCiAKQEAgLTExNzEsMTcgKzEyMjIsMTUg
QEAKICAqIFdlIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBrcmluZyB1c2luZyBrcmluZy0+cnhfcXVl
dWUubG9jawogICoKICAqIFRoaXMgcm91dGluZSBhbHNvIGRvZXMgdGhlIHNlbHJlY29yZCBpZiBj
YWxsZWQgZnJvbSB0aGUgcG9sbCBoYW5kbGVyCi0gKiAod2Uga25vdyBiZWNhdXNlIHRkICE9IE5V
TEwpLgorICogKHdlIGtub3cgYmVjYXVzZSBzciAhPSBOVUxMKS4KICAqCi0gKiBOT1RFOiBvbiBs
aW51eCwgc2VscmVjb3JkKCkgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIGFuZCB1c2VzIHB3YWl0Ci0g
KiAgICAgYXMgYW4gYWRkaXRpb25hbCBoaWRkZW4gYXJndW1lbnQuCiAgKiByZXR1cm5zIHRoZSBu
dW1iZXIgb2YgcGFja2V0cyBkZWxpdmVyZWQgdG8gdHggcXVldWVzIGluCiAgKiB0cmFuc3BhcmVu
dCBtb2RlLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGVycm9yCiAgKi8KIHN0YXRpYyBpbnQKLW5l
dG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCB0
aHJlYWQgKnRkLCB2b2lkICpwd2FpdCkKK25ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAq
a3JpbmcgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBf
YWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3Jp
bmctPnJpbmc7CiAJdV9pbnQgbm1faSwgbjsKIAl1X2ludCBjb25zdCBsaW0gPSBrcmluZy0+bmty
X251bV9zbG90cyAtIDE7CkBAIC0xMTg5LDkgKzEyMzgsNiBAQAogCWludCByZXQgPSAwOwogCXN0
cnVjdCBtYnEgKnEgPSAma3JpbmctPnJ4X3F1ZXVlLCBmcTsKIAotCSh2b2lkKXB3YWl0OwkvKiBk
aXNhYmxlIHVudXNlZCB3YXJuaW5ncyAqLwotCSh2b2lkKXRkOwotCiAJbWJxX2luaXQoJmZxKTsg
LyogZnEgaG9sZHMgcGFja2V0cyB0byBiZSBmcmVlZCAqLwogCiAJbWJxX2xvY2socSk7CkBAIC0x
MjI2LDE5ICsxMjcyLDIwIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAo
bm1faSAhPSBoZWFkKSB7IC8qIHNvbWV0aGluZyB3YXMgcmVsZWFzZWQgKi8KLQkJaWYgKG5ldG1h
cF9md2QgfHwga3JpbmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkKKwkJaWYgKG5tX21heV9m
b3J3YXJkX2Rvd24oa3JpbmcpKSB7CiAJCQlyZXQgPSBuZXRtYXBfc3dfdG9fbmljKG5hKTsKKwkJ
CWlmIChyZXQgPiAwKSB7CisJCQkJa3JpbmctPm5yX2tmbGFncyB8PSBOUl9GT1JXQVJEOworCQkJ
CXJldCA9IDA7CisJCQl9CisJCX0KIAkJa3JpbmctPm5yX2h3Y3VyID0gaGVhZDsKIAl9CiAKLQkv
KiBhY2Nlc3MgY29waWVzIG9mIGN1cix0YWlsIGluIHRoZSBrcmluZyAqLwotCWlmIChrcmluZy0+
cmN1ciA9PSBrcmluZy0+cnRhaWwgJiYgdGQpIC8qIG5vIGJ1ZnMgYXZhaWxhYmxlICovCi0JCU9T
X3NlbHJlY29yZCh0ZCwgJmtyaW5nLT5zaSk7Ci0KIAltYnFfdW5sb2NrKHEpOwogCiAJbWJxX3B1
cmdlKCZmcSk7Ci0JbWJxX2Rlc3Ryb3koJmZxKTsKKwltYnFfZmluaSgmZnEpOwogCiAJcmV0dXJu
IHJldDsKIH0KQEAgLTEyNjcsMTcgKzEzMTQsMTQgQEAKICAqICAgICAwICAgICAgICBORVRNQVBf
QURNT0RFX0dFTkVSSUMgICBHRU5FUklDIEdFTkVSSUMKICAqCiAgKi8KLQorc3RhdGljIHZvaWQg
bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOyAvKiBuZWVkZWQgYnkgTk1f
SVNfTkFUSVZFKCkgKi8KIGludAogbmV0bWFwX2dldF9od19uYShzdHJ1Y3QgaWZuZXQgKmlmcCwg
c3RydWN0IG5ldG1hcF9hZGFwdGVyICoqbmEpCiB7CiAJLyogZ2VuZXJpYyBzdXBwb3J0ICovCiAJ
aW50IGkgPSBuZXRtYXBfYWRtb2RlOwkvKiBUYWtlIGEgc25hcHNob3QuICovCiAJc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpwcmV2X25hOwotI2lmZGVmIFdJVEhfR0VORVJJQwotCXN0cnVjdCBuZXRt
YXBfZ2VuZXJpY19hZGFwdGVyICpnbmE7CiAJaW50IGVycm9yID0gMDsKLSNlbmRpZgogCiAJKm5h
ID0gTlVMTDsgLyogZGVmYXVsdCAqLwogCkBAIC0xMjg1LDcgKzEzMjksNyBAQAogCWlmIChpIDwg
TkVUTUFQX0FETU9ERV9CRVNUIHx8IGkgPj0gTkVUTUFQX0FETU9ERV9MQVNUKQogCQlpID0gbmV0
bWFwX2FkbW9kZSA9IE5FVE1BUF9BRE1PREVfQkVTVDsKIAotCWlmIChORVRNQVBfQ0FQQUJMRShp
ZnApKSB7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKIAkJcHJldl9uYSA9IE5BKGlmcCk7CiAJ
CS8qIElmIGFuIGFkYXB0ZXIgYWxyZWFkeSBleGlzdHMsIHJldHVybiBpdCBpZgogCQkgKiB0aGVy
ZSBhcmUgYWN0aXZlIGZpbGUgZGVzY3JpcHRvcnMgb3IgaWYKQEAgLTEzMTAsMTAgKzEzNTQsOSBA
QAogCS8qIElmIHRoZXJlIGlzbid0IG5hdGl2ZSBzdXBwb3J0IGFuZCBuZXRtYXAgaXMgbm90IGFs
bG93ZWQKIAkgKiB0byB1c2UgZ2VuZXJpYyBhZGFwdGVycywgd2UgY2Fubm90IHNhdGlzZnkgdGhl
IHJlcXVlc3QuCiAJICovCi0JaWYgKCFORVRNQVBfQ0FQQUJMRShpZnApICYmIGkgPT0gTkVUTUFQ
X0FETU9ERV9OQVRJVkUpCisJaWYgKCFOTV9JU19OQVRJVkUoaWZwKSAmJiBpID09IE5FVE1BUF9B
RE1PREVfTkFUSVZFKQogCQlyZXR1cm4gRU9QTk9UU1VQUDsKIAotI2lmZGVmIFdJVEhfR0VORVJJ
QwogCS8qIE90aGVyd2lzZSwgY3JlYXRlIGEgZ2VuZXJpYyBhZGFwdGVyIGFuZCByZXR1cm4gaXQs
CiAJICogc2F2aW5nIHRoZSBwcmV2aW91c2x5IHVzZWQgbmV0bWFwIGFkYXB0ZXIsIGlmIGFueS4K
IAkgKgpAQCAtMTMyOCwyNSArMTM3MSwxMiBAQAogCSAqIHRoZSBicmFuY2hlcyBhYm92ZS4gVGhp
cyBlbnN1cmVzIHRoYXQgd2UgbmV2ZXIgb3ZlcnJpZGUKIAkgKiBhIGdlbmVyaWMgYWRhcHRlciB3
aXRoIGFub3RoZXIgZ2VuZXJpYyBhZGFwdGVyLgogCSAqLwotCXByZXZfbmEgPSBOQShpZnApOwog
CWVycm9yID0gZ2VuZXJpY19uZXRtYXBfYXR0YWNoKGlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1
cm4gZXJyb3I7CiAKIAkqbmEgPSBOQShpZnApOwotCWduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVy
aWNfYWRhcHRlciopTkEoaWZwKTsKLQlnbmEtPnByZXYgPSBwcmV2X25hOyAvKiBzYXZlIG9sZCBu
YSAqLwotCWlmIChwcmV2X25hICE9IE5VTEwpIHsKLQkJaWZ1bml0X3JlZihpZnAtPmlmX3huYW1l
KTsKLQkJLy8gWFhYIGFkZCBhIHJlZmNvdW50ID8KLQkJbmV0bWFwX2FkYXB0ZXJfZ2V0KHByZXZf
bmEpOwotCX0KLQlORCgiQ3JlYXRlZCBnZW5lcmljIE5BICVwIChwcmV2ICVwKSIsIGduYSwgZ25h
LT5wcmV2KTsKLQogCXJldHVybiAwOwotI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLwotCXJldHVy
biBFT1BOT1RTVVBQOwotI2VuZGlmCiB9CiAKIApAQCAtMTM2NCwyMSArMTM5NCwyMiBAQAogICog
Y291bGQgbm90IGJlIGFsbG9jYXRlZC4KICAqIElmIHN1Y2Nlc3NmdWwsIGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlIG5ldG1hcCBhZGFwdGVyLgogICoKLSAqIE5vIHJlZmVyZW5jZSBpcyBrZXB0IG9u
IHRoZSByZWFsIGludGVyZmFjZSwgd2hpY2ggbWF5IHRoZW4KLSAqIGRpc2FwcGVhciBhdCBhbnkg
dGltZS4KKyAqIElmIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkIGJ5IG5tciBpcyBhIHN5c3RlbSBv
bmUsIGFsc28ga2VlcAorICogYSByZWZlcmVuY2UgdG8gaXQgYW5kIHJldHVybiBhIHZhbGlkICpp
ZnAuCiAgKi8KIGludAotbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5l
dG1hcF9hZGFwdGVyICoqbmEsIGludCBjcmVhdGUpCituZXRtYXBfZ2V0X25hKHN0cnVjdCBubXJl
cSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwKKwkgICAgICBzdHJ1Y3QgaWZuZXQg
KippZnAsIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOwogCWludCBl
cnJvciA9IDA7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpyZXQgPSBOVUxMOwogCiAJKm5hID0g
TlVMTDsgICAgIC8qIGRlZmF1bHQgcmV0dXJuIHZhbHVlICovCisJKmlmcCA9IE5VTEw7CiAKIAlO
TUdfTE9DS19BU1NFUlQoKTsKIAotCS8qIHdlIGNhc2NhZGUgdGhyb3VnaCBhbGwgcG9zc2libGUg
dHlwZXMgb2YgbmV0bWFwIGFkYXB0ZXIuCisJLyogV2UgY2FzY2FkZSB0aHJvdWdoIGFsbCBwb3Nz
aWJsZSB0eXBlcyBvZiBuZXRtYXAgYWRhcHRlci4KIAkgKiBBbGwgbmV0bWFwX2dldF8qX25hKCkg
ZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBhbmQgYW4gbmEsCiAJICogd2l0aCB0aGUgZm9sbG93
aW5nIGNvbWJpbmF0aW9uczoKIAkgKgpAQCAtMTM4OSw2ICsxNDIwLDExIEBACiAJICogICEwICAg
ICFOVUxMCQlpbXBvc3NpYmxlCiAJICovCiAKKwkvKiB0cnkgdG8gc2VlIGlmIHRoaXMgaXMgYSBw
dG5ldG1hcCBwb3J0ICovCisJZXJyb3IgPSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBuYSwg
Y3JlYXRlKTsKKwlpZiAoZXJyb3IgfHwgKm5hICE9IE5VTEwpCisJCXJldHVybiBlcnJvcjsKKwog
CS8qIHRyeSB0byBzZWUgaWYgdGhpcyBpcyBhIG1vbml0b3IgcG9ydCAqLwogCWVycm9yID0gbmV0
bWFwX2dldF9tb25pdG9yX25hKG5tciwgbmEsIGNyZWF0ZSk7CiAJaWYgKGVycm9yIHx8ICpuYSAh
PSBOVUxMKQpAQCAtMTQxMywxMiArMTQ0OSwxMiBAQAogCSAqIFRoaXMgbWF5IHN0aWxsIGJlIGEg
dGFwLCBhIHZldGgvZXBhaXIsIG9yIGV2ZW4gYQogCSAqIHBlcnNpc3RlbnQgVkFMRSBwb3J0Lgog
CSAqLwotCWlmcCA9IGlmdW5pdF9yZWYobm1yLT5ucl9uYW1lKTsKLQlpZiAoaWZwID09IE5VTEwp
IHsKKwkqaWZwID0gaWZ1bml0X3JlZihubXItPm5yX25hbWUpOworCWlmICgqaWZwID09IE5VTEwp
IHsKIAkgICAgICAgIHJldHVybiBFTlhJTzsKIAl9CiAKLQllcnJvciA9IG5ldG1hcF9nZXRfaHdf
bmEoaWZwLCAmcmV0KTsKKwllcnJvciA9IG5ldG1hcF9nZXRfaHdfbmEoKmlmcCwgJnJldCk7CiAJ
aWYgKGVycm9yKQogCQlnb3RvIG91dDsKIApAQCAtMTQyNiwxNSArMTQ2Miw0MiBAQAogCW5ldG1h
cF9hZGFwdGVyX2dldChyZXQpOwogCiBvdXQ6Ci0JaWYgKGVycm9yICYmIHJldCAhPSBOVUxMKQot
CQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKLQotCWlmIChpZnApCi0JCWlmX3JlbGUoaWZwKTsg
LyogYWxsb3cgbGl2ZSB1bmxvYWRpbmcgb2YgZHJpdmVycyBtb2R1bGVzICovCisJaWYgKGVycm9y
KSB7CisJCWlmIChyZXQpCisJCQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKKwkJaWYgKCppZnAp
IHsKKwkJCWlmX3JlbGUoKmlmcCk7CisJCQkqaWZwID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVy
biBlcnJvcjsKIH0KIAorLyogdW5kbyBuZXRtYXBfZ2V0X25hKCkgKi8KK3ZvaWQKK25ldG1hcF91
bmdldF9uYShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sK
KwlpZiAoaWZwKQorCQlpZl9yZWxlKGlmcCk7CisJaWYgKG5hKQorCQluZXRtYXBfYWRhcHRlcl9w
dXQobmEpOworfQorCisKKyNkZWZpbmUgTk1fRkFJTF9PTih0KSBkbyB7CQkJCQkJXAorCWlmICh1
bmxpa2VseSh0KSkgewkJCQkJCVwKKwkJUkQoNSwgIiVzOiBmYWlsICciICN0ICInICIJCQkJXAor
CQkJImggJWQgYyAlZCB0ICVkICIJCQkJXAorCQkJInJoICVkIHJjICVkIHJ0ICVkICIJCQkJXAor
CQkJImhjICVkIGh0ICVkIiwJCQkJCVwKKwkJCWtyaW5nLT5uYW1lLAkJCQkJXAorCQkJaGVhZCwg
Y3VyLCByaW5nLT50YWlsLAkJCQlcCisJCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu
Zy0+cnRhaWwsCVwKKwkJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3dGFpbCk7CQlcCisJ
CXJldHVybiBrcmluZy0+bmtyX251bV9zbG90czsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUg
KDApCiAKIC8qCiAgKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzIG9uIGVudHJ5IGZvciAqX3R4c3luYygp
CkBAIC0xNDQ5LDExICsxNTEyLDkgQEAKICAqCiAgKiBod2N1ciwgcmhlYWQsIHJ0YWlsIGFuZCBo
d3RhaWwgYXJlIHJlbGlhYmxlCiAgKi8KLXN0YXRpYyB1X2ludAotbm1fdHhzeW5jX3Byb2xvZ3Vl
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQordV9pbnQKK25tX3R4c3luY19wcm9sb2d1ZShz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nKQogewot
I2RlZmluZSBOTV9BU1NFUlQodCkgaWYgKHQpIHsgRCgiZmFpbCAiICN0KTsgZ290byBlcnJvcjsg
fQotCXN0cnVjdCBuZXRtYXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCXVfaW50IGhlYWQg
PSByaW5nLT5oZWFkOyAvKiByZWFkIG9ubHkgb25jZSAqLwogCXVfaW50IGN1ciA9IHJpbmctPmN1
cjsgLyogcmVhZCBvbmx5IG9uY2UgKi8KIAl1X2ludCBuID0ga3JpbmctPm5rcl9udW1fc2xvdHM7
CkBAIC0xNDYzLDU0ICsxNTI0LDQ0IEBACiAJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3
dGFpbCwKIAkJcmluZy0+aGVhZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsKTsKICNpZiAxIC8qIGtl
cm5lbCBzYW5pdHkgY2hlY2tzOyBidXQgd2UgY2FuIHRydXN0IHRoZSBrcmluZy4gKi8KLQlpZiAo
a3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPnJoZWFkID49IG4gfHwKLQkgICAga3Jpbmct
PnJ0YWlsID49IG4gfHwgIGtyaW5nLT5ucl9od3RhaWwgPj0gbikKLQkJZ290byBlcnJvcjsKKwlO
TV9GQUlMX09OKGtyaW5nLT5ucl9od2N1ciA+PSBuIHx8IGtyaW5nLT5yaGVhZCA+PSBuIHx8CisJ
ICAgIGtyaW5nLT5ydGFpbCA+PSBuIHx8ICBrcmluZy0+bnJfaHd0YWlsID49IG4pOwogI2VuZGlm
IC8qIGtlcm5lbCBzYW5pdHkgY2hlY2tzICovCiAJLyoKLQkgKiB1c2VyIHNhbml0eSBjaGVja3Mu
IFdlIG9ubHkgdXNlICdjdXInLAotCSAqIEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25z
IGZvciBjdXI6CisJICogdXNlciBzYW5pdHkgY2hlY2tzLiBXZSBvbmx5IHVzZSBoZWFkLAorCSAq
IEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25zIGZvciBoZWFkOgogCSAqCi0JICogIDAg
ICAgQSAgY3VyICAgQiAgdGFpbCAgQyAgbi0xCi0JICogIDAgICAgRCAgdGFpbCAgRSAgY3VyICAg
RiAgbi0xCisJICogIDAgICAgQSAgcmhlYWQgICBCICBydGFpbCAgIEMgIG4tMQorCSAqICAwICAg
IEQgIHJ0YWlsICAgRSAgcmhlYWQgICBGICBuLTEKIAkgKgogCSAqIEIsIEYsIEQgYXJlIHZhbGlk
LiBBLCBDLCBFIGFyZSB3cm9uZwogCSAqLwogCWlmIChrcmluZy0+cnRhaWwgPj0ga3JpbmctPnJo
ZWFkKSB7CiAJCS8qIHdhbnQgcmhlYWQgPD0gaGVhZCA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQo
aGVhZCA8IGtyaW5nLT5yaGVhZCB8fCBoZWFkID4ga3JpbmctPnJ0YWlsKTsKKwkJTk1fRkFJTF9P
TihoZWFkIDwga3JpbmctPnJoZWFkIHx8IGhlYWQgPiBrcmluZy0+cnRhaWwpOwogCQkvKiBhbmQg
YWxzbyBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQoY3VyIDwgaGVhZCB8fCBj
dXIgPiBrcmluZy0+cnRhaWwpOworCQlOTV9GQUlMX09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp
bmctPnJ0YWlsKTsKIAl9IGVsc2UgeyAvKiBoZXJlIHJ0YWlsIDwgcmhlYWQgKi8KIAkJLyogd2Ug
bmVlZCBoZWFkIG91dHNpZGUgcnRhaWwgLi4gcmhlYWQgKi8KLQkJTk1fQVNTRVJUKGhlYWQgPiBr
cmluZy0+cnRhaWwgJiYgaGVhZCA8IGtyaW5nLT5yaGVhZCk7CisJCU5NX0ZBSUxfT04oaGVhZCA+
IGtyaW5nLT5ydGFpbCAmJiBoZWFkIDwga3JpbmctPnJoZWFkKTsKIAogCQkvKiB0d28gY2FzZXMg
bm93OiBoZWFkIDw9IHJ0YWlsIG9yIGhlYWQgPj0gcmhlYWQgICovCiAJCWlmIChoZWFkIDw9IGty
aW5nLT5ydGFpbCkgewogCQkJLyogd2FudCBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQkJTk1f
QVNTRVJUKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPnJ0YWlsKTsKKwkJCU5NX0ZBSUxfT04o
Y3VyIDwgaGVhZCB8fCBjdXIgPiBrcmluZy0+cnRhaWwpOwogCQl9IGVsc2UgeyAvKiBoZWFkID49
IHJoZWFkICovCiAJCQkvKiBjdXIgbXVzdCBiZSBvdXRzaWRlIHJ0YWlsLi5oZWFkICovCi0JCQlO
TV9BU1NFUlQoY3VyID4ga3JpbmctPnJ0YWlsICYmIGN1ciA8IGhlYWQpOworCQkJTk1fRkFJTF9P
TihjdXIgPiBrcmluZy0+cnRhaWwgJiYgY3VyIDwgaGVhZCk7CiAJCX0KIAl9CiAJaWYgKHJpbmct
PnRhaWwgIT0ga3JpbmctPnJ0YWlsKSB7Ci0JCVJEKDUsICJ0YWlsIG92ZXJ3cml0dGVuIHdhcyAl
ZCBuZWVkICVkIiwKKwkJUkQoNSwgIiVzIHRhaWwgb3ZlcndyaXR0ZW4gd2FzICVkIG5lZWQgJWQi
LCBrcmluZy0+bmFtZSwKIAkJCXJpbmctPnRhaWwsIGtyaW5nLT5ydGFpbCk7CiAJCXJpbmctPnRh
aWwgPSBrcmluZy0+cnRhaWw7CiAJfQogCWtyaW5nLT5yaGVhZCA9IGhlYWQ7CiAJa3JpbmctPnJj
dXIgPSBjdXI7CiAJcmV0dXJuIGhlYWQ7Ci0KLWVycm9yOgotCVJEKDUsICIlcyBrcmluZyBlcnJv
cjogaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCByaGVhZCAlZCByY3VyICVkIHJ0YWlsICVkIGh3Y3Vy
ICVkIGh3dGFpbCAlZCIsCi0JCWtyaW5nLT5uYW1lLAotCQloZWFkLCBjdXIsIHJpbmctPnRhaWws
Ci0JCWtyaW5nLT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCwKLQkJa3JpbmctPm5y
X2h3Y3VyLCBrcmluZy0+bnJfaHd0YWlsKTsKLQlyZXR1cm4gbjsKLSN1bmRlZiBOTV9BU1NFUlQK
IH0KIAogCkBAIC0xNTI1LDEwICsxNTc2LDkgQEAKICAqIGh3Y3VyIGFuZCBod3RhaWwgYXJlIHJl
bGlhYmxlLgogICoKICAqLwotc3RhdGljIHVfaW50Ci1ubV9yeHN5bmNfcHJvbG9ndWUoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcpCit1X2ludAorbm1fcnhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0
IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdWludDMyX3QgY29uc3QgbiA9IGty
aW5nLT5ua3JfbnVtX3Nsb3RzOwogCXVpbnQzMl90IGhlYWQsIGN1cjsKIApAQCAtMTU0NiwzMCAr
MTU5NiwyNCBAQAogCWN1ciA9IGtyaW5nLT5yY3VyID0gcmluZy0+Y3VyOwkvKiByZWFkIG9ubHkg
b25jZSAqLwogCWhlYWQgPSBrcmluZy0+cmhlYWQgPSByaW5nLT5oZWFkOwkvKiByZWFkIG9ubHkg
b25jZSAqLwogI2lmIDEgLyoga2VybmVsIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoa3JpbmctPm5y
X2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKQotCQlnb3RvIGVycm9yOworCU5N
X0ZBSUxfT04oa3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKTsK
ICNlbmRpZiAvKiBrZXJuZWwgc2FuaXR5IGNoZWNrcyAqLwogCS8qIHVzZXIgc2FuaXR5IGNoZWNr
cyAqLwogCWlmIChrcmluZy0+bnJfaHd0YWlsID49IGtyaW5nLT5ucl9od2N1cikgewogCQkvKiB3
YW50IGh3Y3VyIDw9IHJoZWFkIDw9IGh3dGFpbCAqLwotCQlpZiAoaGVhZCA8IGtyaW5nLT5ucl9o
d2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCkKLQkJCWdvdG8gZXJyb3I7CisJCU5NX0ZB
SUxfT04oaGVhZCA8IGtyaW5nLT5ucl9od2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCk7
CiAJCS8qIGFuZCBhbHNvIHJoZWFkIDw9IHJjdXIgPD0gaHd0YWlsICovCi0JCWlmIChjdXIgPCBo
ZWFkIHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9yOworCQlOTV9GQUlM
X09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPm5yX2h3dGFpbCk7CiAJfSBlbHNlIHsKIAkJ
Lyogd2UgbmVlZCByaGVhZCBvdXRzaWRlIGh3dGFpbC4uaHdjdXIgKi8KLQkJaWYgKGhlYWQgPCBr
cmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9y
OworCQlOTV9GQUlMX09OKGhlYWQgPCBrcmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5u
cl9od3RhaWwpOwogCQkvKiB0d28gY2FzZXMgbm93OiBoZWFkIDw9IGh3dGFpbCBvciBoZWFkID49
IGh3Y3VyICAqLwogCQlpZiAoaGVhZCA8PSBrcmluZy0+bnJfaHd0YWlsKSB7CiAJCQkvKiB3YW50
IGhlYWQgPD0gY3VyIDw9IGh3dGFpbCAqLwotCQkJaWYgKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp
bmctPm5yX2h3dGFpbCkKLQkJCQlnb3RvIGVycm9yOworCQkJTk1fRkFJTF9PTihjdXIgPCBoZWFk
IHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpOwogCQl9IGVsc2UgewogCQkJLyogY3VyIG11c3Qg
YmUgb3V0c2lkZSBod3RhaWwuLmhlYWQgKi8KLQkJCWlmIChjdXIgPCBoZWFkICYmIGN1ciA+IGty
aW5nLT5ucl9od3RhaWwpCi0JCQkJZ290byBlcnJvcjsKKwkJCU5NX0ZBSUxfT04oY3VyIDwgaGVh
ZCAmJiBjdXIgPiBrcmluZy0+bnJfaHd0YWlsKTsKIAkJfQogCX0KIAlpZiAocmluZy0+dGFpbCAh
PSBrcmluZy0+cnRhaWwpIHsKQEAgLTE1NzksMTMgKzE2MjMsNiBAQAogCQlyaW5nLT50YWlsID0g
a3JpbmctPnJ0YWlsOwogCX0KIAlyZXR1cm4gaGVhZDsKLQotZXJyb3I6Ci0JUkQoNSwgImtyaW5n
IGVycm9yOiBod2N1ciAlZCByY3VyICVkIGh3dGFpbCAlZCBoZWFkICVkIGN1ciAlZCB0YWlsICVk
IiwKLQkJa3JpbmctPm5yX2h3Y3VyLAotCQlrcmluZy0+cmN1ciwga3JpbmctPm5yX2h3dGFpbCwK
LQkJa3JpbmctPnJoZWFkLCBrcmluZy0+cmN1ciwgcmluZy0+dGFpbCk7Ci0JcmV0dXJuIG47CiB9
CiAKIApAQCAtMTY1OSw2ICsxNjk2LDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g
cHJpdi0+bnBfbmE7CiAJdV9pbnQgaiwgaSA9IHJpbmdpZCAmIE5FVE1BUF9SSU5HX01BU0s7CiAJ
dV9pbnQgcmVnID0gZmxhZ3MgJiBOUl9SRUdfTUFTSzsKKwlpbnQgZXhjbHVkZWRfZGlyZWN0aW9u
W10gPSB7IE5SX1RYX1JJTkdTX09OTFksIE5SX1JYX1JJTkdTX09OTFkgfTsKIAllbnVtIHR4cngg
dDsKIAogCWlmIChyZWcgPT0gTlJfUkVHX0RFRkFVTFQpIHsKQEAgLTE2NzIsNDggKzE3MTAsNTgg
QEAKIAkJfQogCQlEKCJkZXByZWNhdGVkIEFQSSwgb2xkIHJpbmdpZCAweCV4IC0+IHJpbmdpZCAl
eCByZWcgJWQiLCByaW5naWQsIGksIHJlZyk7CiAJfQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBO
Ul9SRUdfQUxMX05JQzoKLQljYXNlIE5SX1JFR19QSVBFX01BU1RFUjoKLQljYXNlIE5SX1JFR19Q
SVBFX1NMQVZFOgotCQlmb3JfcnhfdHgodCkgeworCisJaWYgKChmbGFncyAmIE5SX1BUTkVUTUFQ
X0hPU1QpICYmIChyZWcgIT0gTlJfUkVHX0FMTF9OSUMgfHwKKwkJCWZsYWdzICYgKE5SX1JYX1JJ
TkdTX09OTFl8TlJfVFhfUklOR1NfT05MWSkpKSB7CisJCUQoIkVycm9yOiBvbmx5IE5SX1JFR19B
TExfTklDIHN1cHBvcnRlZCB3aXRoIG5ldG1hcCBwYXNzdGhyb3VnaCIpOworCQlyZXR1cm4gRUlO
VkFMOworCX0KKworCWZvcl9yeF90eCh0KSB7CisJCWlmIChmbGFncyAmIGV4Y2x1ZGVkX2RpcmVj
dGlvblt0XSkgeworCQkJcHJpdi0+bnBfcWZpcnN0W3RdID0gcHJpdi0+bnBfcWxhc3RbdF0gPSAw
OworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBOUl9SRUdfQUxM
X05JQzoKKwkJY2FzZSBOUl9SRUdfUElQRV9NQVNURVI6CisJCWNhc2UgTlJfUkVHX1BJUEVfU0xB
VkU6CiAJCQlwcml2LT5ucF9xZmlyc3RbdF0gPSAwOwogCQkJcHJpdi0+bnBfcWxhc3RbdF0gPSBu
bWFfZ2V0X25yaW5ncyhuYSwgdCk7Ci0JCX0KLQkJTkQoIiVzICVkICVkIiwgIkFMTC9QSVBFIiwK
LQkJCXByaXYtPm5wX3FmaXJzdFtOUl9SWF0sIHByaXYtPm5wX3FsYXN0W05SX1JYXSk7Ci0JCWJy
ZWFrOwotCWNhc2UgTlJfUkVHX1NXOgotCWNhc2UgTlJfUkVHX05JQ19TVzoKLQkJaWYgKCEobmEt
Pm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpKSB7Ci0JCQlEKCJob3N0IHJpbmdzIG5vdCBzdXBw
b3J0ZWQiKTsKLQkJCXJldHVybiBFSU5WQUw7Ci0JCX0KLQkJZm9yX3J4X3R4KHQpIHsKKwkJCU5E
KCJBTEwvUElQRTogJXMgJWQgJWQiLCBubV90eHJ4MnN0cih0KSwKKwkJCQlwcml2LT5ucF9xZmly
c3RbdF0sIHByaXYtPm5wX3FsYXN0W3RdKTsKKwkJCWJyZWFrOworCQljYXNlIE5SX1JFR19TVzoK
KwkJY2FzZSBOUl9SRUdfTklDX1NXOgorCQkJaWYgKCEobmEtPm5hX2ZsYWdzICYgTkFGX0hPU1Rf
UklOR1MpKSB7CisJCQkJRCgiaG9zdCByaW5ncyBub3Qgc3VwcG9ydGVkIik7CisJCQkJcmV0dXJu
IEVJTlZBTDsKKwkJCX0KIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IChyZWcgPT0gTlJfUkVHX1NX
ID8KIAkJCQlubWFfZ2V0X25yaW5ncyhuYSwgdCkgOiAwKTsKIAkJCXByaXYtPm5wX3FsYXN0W3Rd
ID0gbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsKLQkJfQotCQlORCgiJXMgJWQgJWQiLCByZWcg
PT0gTlJfUkVHX1NXID8gIlNXIiA6ICJOSUMrU1ciLAotCQkJcHJpdi0+bnBfcWZpcnN0W05SX1JY
XSwgcHJpdi0+bnBfcWxhc3RbTlJfUlhdKTsKLQkJYnJlYWs7Ci0JY2FzZSBOUl9SRUdfT05FX05J
QzoKLQkJaWYgKGkgPj0gbmEtPm51bV90eF9yaW5ncyAmJiBpID49IG5hLT5udW1fcnhfcmluZ3Mp
IHsKLQkJCUQoImludmFsaWQgcmluZyBpZCAlZCIsIGkpOwotCQkJcmV0dXJuIEVJTlZBTDsKLQkJ
fQotCQlmb3JfcnhfdHgodCkgeworCQkJTkQoIiVzOiAlcyAlZCAlZCIsIHJlZyA9PSBOUl9SRUdf
U1cgPyAiU1ciIDogIk5JQytTVyIsCisJCQkJbm1fdHhyeDJzdHIodCksCisJCQkJcHJpdi0+bnBf
cWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJY2FzZSBOUl9SRUdf
T05FX05JQzoKKwkJCWlmIChpID49IG5hLT5udW1fdHhfcmluZ3MgJiYgaSA+PSBuYS0+bnVtX3J4
X3JpbmdzKSB7CisJCQkJRCgiaW52YWxpZCByaW5nIGlkICVkIiwgaSk7CisJCQkJcmV0dXJuIEVJ
TlZBTDsKKwkJCX0KIAkJCS8qIGlmIG5vdCBlbm91Z2ggcmluZ3MsIHVzZSB0aGUgZmlyc3Qgb25l
ICovCiAJCQlqID0gaTsKIAkJCWlmIChqID49IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkKIAkJCQlq
ID0gMDsKIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IGo7CiAJCQlwcml2LT5ucF9xbGFzdFt0XSA9
IGogKyAxOworCQkJTkQoIk9ORV9OSUM6ICVzICVkICVkIiwgbm1fdHhyeDJzdHIodCksCisJCQkJ
cHJpdi0+bnBfcWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJZGVm
YXVsdDoKKwkJCUQoImludmFsaWQgcmVnaWYgdHlwZSAlZCIsIHJlZyk7CisJCQlyZXR1cm4gRUlO
VkFMOwogCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUQoImludmFsaWQgcmVnaWYgdHlwZSAl
ZCIsIHJlZyk7Ci0JCXJldHVybiBFSU5WQUw7CiAJfQogCXByaXYtPm5wX2ZsYWdzID0gKGZsYWdz
ICYgfk5SX1JFR19NQVNLKSB8IHJlZzsKIApAQCAtMTc3NiwxMSArMTgyNCwxMiBAQAogfQogCiAK
LS8qIGNoZWNrIHRoYXQgdGhlIHJpbmdzIHdlIHdhbnQgdG8gYmluZCBhcmUgbm90IGV4Y2x1c2l2
ZWx5IG93bmVkIGJ5IGEgcHJldmlvdXMKLSAqIGJpbmQuICBJZiBleGNsdXNpdmUgb3duZXJzaGlw
IGhhcyBiZWVuIHJlcXVlc3RlZCwgd2UgYWxzbyBtYXJrIHRoZSByaW5ncy4KKy8qIFNldCB0aGUg
bnJfcGVuZGluZ19tb2RlIGZvciB0aGUgcmVxdWVzdGVkIHJpbmdzLgorICogSWYgcmVxdWVzdGVk
LCBhbHNvIHRyeSB0byBnZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcmluZ3MsIHByb3ZpZGVk
CisgKiB0aGUgcmluZ3Mgd2Ugd2FudCB0byBiaW5kIGFyZSBub3QgZXhjbHVzaXZlbHkgb3duZWQg
YnkgYSBwcmV2aW91cyBiaW5kLgogICovCiBzdGF0aWMgaW50Ci1uZXRtYXBfZ2V0X2V4Y2x1c2l2
ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK25ldG1hcF9rcmluZ3NfZ2V0KHN0cnVjdCBu
ZXRtYXBfcHJpdl9kICpwcml2KQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBwcml2
LT5ucF9uYTsKIAl1X2ludCBpOwpAQCAtMTgxMSwxNiArMTg2MCwxNiBAQAogCQl9CiAJfQogCi0J
Lyogc2Vjb25kIHJvdW5kOiBpbmNyZW1lbnQgdXNhZ2UgY291bmQgYW5kIHBvc3NpYmx5Ci0JICog
bWFyayBhcyBleGNsdXNpdmUKKwkvKiBzZWNvbmQgcm91bmQ6IGluY3JlbWVudCB1c2FnZSBjb3Vu
dCAocG9zc2libHkgbWFya2luZyB0aGVtCisJICogYXMgZXhjbHVzaXZlKSBhbmQgc2V0IHRoZSBu
cl9wZW5kaW5nX21vZGUKIAkgKi8KLQogCWZvcl9yeF90eCh0KSB7CiAJCWZvciAoaSA9IHByaXYt
Pm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKIAkJCWtyaW5nID0g
Jk5NUihuYSwgdClbaV07CiAJCQlrcmluZy0+dXNlcnMrKzsKIAkJCWlmIChleGNsKQogCQkJCWty
aW5nLT5ucl9rZmxhZ3MgfD0gTktSX0VYQ0xVU0lWRTsKKwkgICAgICAgICAgICAgICAga3Jpbmct
Pm5yX3BlbmRpbmdfbW9kZSA9IE5LUl9ORVRNQVBfT047CiAJCX0KIAl9CiAKQEAgLTE4MjgsOSAr
MTg3NywxMSBAQAogCiB9CiAKLS8qIHVuZG8gbmV0bWFwX2dldF9vd25lcnNoaXAoKSAqLworLyog
VW5kbyBuZXRtYXBfa3JpbmdzX2dldCgpLiBUaGlzIGlzIGRvbmUgYnkgY2xlYXJpbmcgdGhlIGV4
Y2x1c2l2ZSBtb2RlCisgKiBpZiB3YXMgYXNrZWQgb24gcmVnaWYsIGFuZCB1bnNldCB0aGUgbnJf
cGVuZGluZ19tb2RlIGlmIHdlIGFyZSB0aGUKKyAqIGxhc3QgdXNlcnMgb2YgdGhlIGludm9sdmVk
IHJpbmdzLiAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRt
YXBfcHJpdl9kICpwcml2KQorbmV0bWFwX2tyaW5nc19wdXQoc3RydWN0IG5ldG1hcF9wcml2X2Qg
KnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwogCXVf
aW50IGk7CkBAIC0xODUyLDYgKzE5MDMsOCBAQAogCQkJaWYgKGV4Y2wpCiAJCQkJa3JpbmctPm5y
X2tmbGFncyAmPSB+TktSX0VYQ0xVU0lWRTsKIAkJCWtyaW5nLT51c2Vycy0tOworCQkJaWYgKGty
aW5nLT51c2VycyA9PSAwKQorCQkJCWtyaW5nLT5ucl9wZW5kaW5nX21vZGUgPSBOS1JfTkVUTUFQ
X09GRjsKIAkJfQogCX0KIH0KQEAgLTE4OTksOSArMTk1Miw4IEBACiAgKiAocHV0IHRoZSBhZGFw
dGVyIGluIG5ldG1hcCBtb2RlKQogICoKICAqIAlUaGlzIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxv
d2luZzoKLSAqIAkoWFhYIHRoZXNlIHNob3VsZCBiZSBlaXRoZXIgYWxsICpfcmVnaXN0ZXIgb3Ig
YWxsICpfcmVnIDIwMTQtMDMtMTUpCiAgKgotICogCSogbmV0bWFwX2h3X3JlZ2lzdGVyCQkJCSho
dyBwb3J0cykKKyAqIAkqIG5ldG1hcF9od19yZWcJCQkJICAgICAgICAoaHcgcG9ydHMpCiAgKiAJ
CWNoZWNrcyB0aGF0IHRoZSBpZnAgaXMgc3RpbGwgdGhlcmUsIHRoZW4gY2FsbHMKICAqIAkJdGhl
IGhhcmR3YXJlIHNwZWNpZmljIGNhbGxiYWNrOwogICoKQEAgLTE5MTksNyArMTk3MSw3IEBACiAg
KgkJaW50ZXJjZXB0IHRoZSBzeW5jIGNhbGxiYWNrcyBvZiB0aGUgbW9uaXRvcmVkCiAgKgkJcmlu
Z3MKICAqCi0gKgkqIG5ldG1hcF9id3JhcF9yZWdpc3RlcgkJCQkoYndyYXBzKQorICoJKiBuZXRt
YXBfYndyYXBfcmVnCQkJCShid3JhcHMpCiAgKgkJY3Jvc3MtbGluayB0aGUgYndyYXAgYW5kIGh3
bmEgcmluZ3MsCiAgKgkJZm9yd2FyZCB0aGUgcmVxdWVzdCB0byB0aGUgaHduYSwgb3ZlcnJpZGUK
ICAqCQl0aGUgaHduYSBub3RpZnkgY2FsbGJhY2sgKHRvIGdldCB0aGUgZnJhbWVzCkBAIC0xOTQ4
LDcgKzIwMDAsNyBAQAogCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSB7CiAJCS8qCiAJCSAqIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBvZiB0aGUgYWRhcHRlciwKLQkJICogYWxz
byBjcmVhdGUgdGhlIG5ldG1hcCByaW5ncyBhbmQgdGhlaXIgaW4ta2VybmVsIHZpZXcsCisJCSAq
IGNyZWF0ZSB0aGUgIGluLWtlcm5lbCB2aWV3IG9mIHRoZSBuZXRtYXAgcmluZ3MsCiAJCSAqIHRo
ZSBuZXRtYXAga3JpbmdzLgogCQkgKi8KIApAQCAtMTk2MCwzOSArMjAxMiw0OCBAQAogCQlpZiAo
ZXJyb3IpCiAJCQlnb3RvIGVycl9kcm9wX21lbTsKIAotCQkvKiBjcmVhdGUgYWxsIG1pc3Npbmcg
bmV0bWFwIHJpbmdzICovCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19jcmVhdGUobmEpOwot
CQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycl9kZWxfa3JpbmdzOwogCX0KIAotCS8qIG5vdyB0aGUg
a3JpbmcgbXVzdCBleGlzdCBhbmQgd2UgY2FuIGNoZWNrIHdoZXRoZXIgc29tZQotCSAqIHByZXZp
b3VzIGJpbmQgaGFzIGV4Y2x1c2l2ZSBvd25lcnNoaXAgb24gdGhlbQorCS8qIG5vdyB0aGUga3Jp
bmdzIG11c3QgZXhpc3QgYW5kIHdlIGNhbiBjaGVjayB3aGV0aGVyIHNvbWUKKwkgKiBwcmV2aW91
cyBiaW5kIGhhcyBleGNsdXNpdmUgb3duZXJzaGlwIG9uIHRoZW0sIGFuZCBzZXQKKwkgKiBucl9w
ZW5kaW5nX21vZGUKIAkgKi8KLQllcnJvciA9IG5ldG1hcF9nZXRfZXhjbHVzaXZlKHByaXYpOwor
CWVycm9yID0gbmV0bWFwX2tyaW5nc19nZXQocHJpdik7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVy
cl9kZWxfcmluZ3M7CisJCWdvdG8gZXJyX2RlbF9rcmluZ3M7CisKKwkvKiBjcmVhdGUgYWxsIG5l
ZWRlZCBtaXNzaW5nIG5ldG1hcCByaW5ncyAqLworCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19j
cmVhdGUobmEpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfcmVsX2V4Y2w7CiAKIAkvKiBpbiBh
bGwgY2FzZXMsIGNyZWF0ZSBhIG5ldyBuZXRtYXAgaWYgKi8KIAluaWZwID0gbmV0bWFwX21lbV9p
Zl9uZXcobmEpOwogCWlmIChuaWZwID09IE5VTEwpIHsKIAkJZXJyb3IgPSBFTk9NRU07Ci0JCWdv
dG8gZXJyX3JlbF9leGNsOworCQlnb3RvIGVycl9kZWxfcmluZ3M7CiAJfQogCi0JbmEtPmFjdGl2
ZV9mZHMrKzsKLQlpZiAoIW5tX25ldG1hcF9vbihuYSkpIHsKLQkJLyogTmV0bWFwIG5vdCBhY3Rp
dmUsIHNldCB0aGUgY2FyZCBpbiBuZXRtYXAgbW9kZQotCQkgKiBhbmQgbWFrZSBpdCB1c2UgdGhl
IHNoYXJlZCBidWZmZXJzLgotCQkgKi8KKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQkv
KiBjYWNoZSB0aGUgYWxsb2NhdG9yIGluZm8gaW4gdGhlIG5hICovCi0JCW5ldG1hcF9tZW1fZ2V0
X2x1dChuYS0+bm1fbWVtLCAmbmEtPm5hX2x1dCk7Ci0JCU5EKCIlcC0+bmFfbHV0ID09ICVwIiwg
bmEsIG5hLT5uYV9sdXQubHV0KTsKLQkJZXJyb3IgPSBuYS0+bm1fcmVnaXN0ZXIobmEsIDEpOyAv
KiBtb2RlIG9uICovCi0JCWlmIChlcnJvcikgCisJCWVycm9yID0gbmV0bWFwX21lbV9nZXRfbHV0
KG5hLT5ubV9tZW0sICZuYS0+bmFfbHV0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBlcnJfZGVs
X2lmOworCQlORCgibHV0ICVwIGJ1ZnMgJXUgc2l6ZSAldSIsIG5hLT5uYV9sdXQubHV0LCBuYS0+
bmFfbHV0Lm9ianRvdGFsLAorCQkJCQkgICAgbmEtPm5hX2x1dC5vYmpzaXplKTsKKwl9CisKKwlp
ZiAobm1fa3JpbmdfcGVuZGluZyhwcml2KSkgeworCQkvKiBTb21lIGtyaW5nIGlzIHN3aXRjaGlu
ZyBtb2RlLCB0ZWxsIHRoZSBhZGFwdGVyIHRvCisJCSAqIHJlYWN0IG9uIHRoaXMuICovCisJCWVy
cm9yID0gbmEtPm5tX3JlZ2lzdGVyKG5hLCAxKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJf
cHV0X2x1dDsKIAl9CiAKKwkvKiBDb21taXQgdGhlIHJlZmVyZW5jZS4gKi8KKwluYS0+YWN0aXZl
X2ZkcysrOworCiAJLyoKIAkgKiBhZHZlcnRpc2UgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5
IGJ5IHNldHRpbmcgbnBfbmlmcC4KIAkgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgYmVjYXVzZSBy
ZWFkZXJzIChwb2xsLCAqU1lOQyBhbmQgbW1hcCkKQEAgLTIwMDMsMTUgKzIwNjQsMTUgQEAKIAog
CXJldHVybiAwOwogCitlcnJfcHV0X2x1dDoKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJ
bWVtc2V0KCZuYS0+bmFfbHV0LCAwLCBzaXplb2YobmEtPm5hX2x1dCkpOwogZXJyX2RlbF9pZjoK
LQltZW1zZXQoJm5hLT5uYV9sdXQsIDAsIHNpemVvZihuYS0+bmFfbHV0KSk7Ci0JbmEtPmFjdGl2
ZV9mZHMtLTsKIAluZXRtYXBfbWVtX2lmX2RlbGV0ZShuYSwgbmlmcCk7CiBlcnJfcmVsX2V4Y2w6
Ci0JbmV0bWFwX3JlbF9leGNsdXNpdmUocHJpdik7CisJbmV0bWFwX2tyaW5nc19wdXQocHJpdik7
CiBlcnJfZGVsX3JpbmdzOgotCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQotCQluZXRtYXBfbWVt
X3JpbmdzX2RlbGV0ZShuYSk7CisJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmEpOwogZXJyX2Rl
bF9rcmluZ3M6CiAJaWYgKG5hLT5hY3RpdmVfZmRzID09IDApCiAJCW5hLT5ubV9rcmluZ3NfZGVs
ZXRlKG5hKTsKQEAgLTIwMjQsNDAgKzIwODUsNDUgQEAKIAogCiAvKgotICogdXBkYXRlIGtyaW5n
IGFuZCByaW5nIGF0IHRoZSBlbmQgb2YgdHhzeW5jLgorICogdXBkYXRlIGtyaW5nIGFuZCByaW5n
IGF0IHRoZSBlbmQgb2YgcnhzeW5jL3R4c3luYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1u
bV90eHN5bmNfZmluYWxpemUoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitubV9zeW5jX2Zp
bmFsaXplKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQogewotCS8qIHVwZGF0ZSByaW5nIHRh
aWwgdG8gd2hhdCB0aGUga2VybmVsIGtub3dzICovCisJLyoKKwkgKiBVcGRhdGUgcmluZyB0YWls
IHRvIHdoYXQgdGhlIGtlcm5lbCBrbm93cworCSAqIEFmdGVyIHR4c3luYzogaGVhZC9yaGVhZC9o
d2N1ciBtaWdodCBiZSBiZWhpbmQgY3VyL3JjdXIKKwkgKiBpZiBubyBjYXJyaWVyLgorCSAqLwog
CWtyaW5nLT5yaW5nLT50YWlsID0ga3JpbmctPnJ0YWlsID0ga3JpbmctPm5yX2h3dGFpbDsKIAot
CS8qIG5vdGUsIGhlYWQvcmhlYWQvaHdjdXIgbWlnaHQgYmUgYmVoaW5kIGN1ci9yY3VyCi0JICog
aWYgbm8gY2FycmllcgotCSAqLwogCU5EKDUsICIlcyBub3cgaHdjdXIgJWQgaHd0YWlsICVkIGhl
YWQgJWQgY3VyICVkIHRhaWwgJWQiLAogCQlrcmluZy0+bmFtZSwga3JpbmctPm5yX2h3Y3VyLCBr
cmluZy0+bnJfaHd0YWlsLAogCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmluZy0+cnRh
aWwpOwogfQogCi0KLS8qCi0gKiB1cGRhdGUga3JpbmcgYW5kIHJpbmcgYXQgdGhlIGVuZCBvZiBy
eHN5bmMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1ubV9yeHN5bmNfZmluYWxpemUoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcpCitzdGF0aWMgaW50CitubV9vdmVycmlkZV9tZW0oc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSwgbm1fbWVtaWRfdCBpZCkKIHsKLQkvKiB0ZWxsIHVzZXJzcGFj
ZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG5ldyBwYWNrZXRzICovCi0JLy9zdHJ1Y3QgbmV0bWFwX3Jp
bmcgKnJpbmcgPSBrcmluZy0+cmluZzsKLQlORCgiaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCAtPiAl
ZCIsIHJpbmctPmhlYWQsIHJpbmctPmN1ciwgcmluZy0+dGFpbCwKLQkJa3JpbmctPm5yX2h3dGFp
bCk7Ci0Ja3JpbmctPnJpbmctPnRhaWwgPSBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWls
OwotCS8qIG1ha2UgYSBjb3B5IG9mIHRoZSBzdGF0ZSBmb3IgbmV4dCByb3VuZCAqLwotCWtyaW5n
LT5yaGVhZCA9IGtyaW5nLT5yaW5nLT5oZWFkOwotCWtyaW5nLT5yY3VyID0ga3JpbmctPnJpbmct
PmN1cjsKLX0KKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisKKwlpZiAoaWQgPT0gMCB8fCBu
ZXRtYXBfbWVtX2dldF9pZChuYS0+bm1fbWVtKSA9PSBpZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAo
bmEtPm5hX2ZsYWdzICYgTkFGX01FTV9PV05FUikKKwkJcmV0dXJuIEVJTlZBTDsKIAorCWlmIChu
YS0+YWN0aXZlX2ZkcyA+IDApCisJCXJldHVybiBFQlVTWTsKIAorCW5tZCA9IG5ldG1hcF9tZW1f
ZmluZChpZCk7CisJaWYgKG5tZCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PRU5UOworCisJbmV0bWFw
X21lbV9wdXQobmEtPm5tX21lbSk7CisJbmEtPm5tX21lbSA9IG5tZDsKKwlyZXR1cm4gMDsKK30K
IAogLyoKICAqIGlvY3RsKDIpIHN1cHBvcnQgZm9yIHRoZSAibmV0bWFwIiBkZXZpY2UuCkBAIC0y
MDcyLDIxICsyMTM4LDE3IEBACiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndp
c2UuCiAgKi8KIGludAotbmV0bWFwX2lvY3RsKHN0cnVjdCBjZGV2ICpkZXYsIHVfbG9uZyBjbWQs
IGNhZGRyX3QgZGF0YSwKLQlpbnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX2lv
Y3RsKHN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEs
IHN0cnVjdCB0aHJlYWQgKnRkKQogewotCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gTlVM
TDsKIAlzdHJ1Y3Qgbm1yZXEgKm5tciA9IChzdHJ1Y3Qgbm1yZXEgKikgZGF0YTsKIAlzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hID0gTlVMTDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IGlmbmV0ICpp
ZnAgPSBOVUxMOworCWludCBlcnJvciA9IDA7CiAJdV9pbnQgaSwgcWZpcnN0LCBxbGFzdDsKIAlz
dHJ1Y3QgbmV0bWFwX2lmICpuaWZwOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nczsKIAll
bnVtIHR4cnggdDsKIAotCSh2b2lkKWRldjsJLyogVU5VU0VEICovCi0JKHZvaWQpZmZsYWc7CS8q
IFVOVVNFRCAqLwotCiAJaWYgKGNtZCA9PSBOSU9DR0lORk8gfHwgY21kID09IE5JT0NSRUdJRikg
ewogCQkvKiB0cnVuY2F0ZSBuYW1lICovCiAJCW5tci0+bnJfbmFtZVtzaXplb2Yobm1yLT5ucl9u
YW1lKSAtIDFdID0gJ1wwJzsKQEAgLTIxMDEsMTUgKzIxNjMsNiBAQAogCQkJcmV0dXJuIEVJTlZB
TDsKIAkJfQogCX0KLQlDVVJWTkVUX1NFVChURF9UT19WTkVUKHRkKSk7Ci0KLQllcnJvciA9IGRl
dmZzX2dldF9jZGV2cHJpdigodm9pZCAqKikmcHJpdik7Ci0JaWYgKGVycm9yKSB7Ci0JCUNVUlZO
RVRfUkVTVE9SRSgpOwotCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5j
ZSB0aGUgcHJpdgotCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLwotCQlyZXR1cm4g
KGVycm9yID09IEVOT0VOVCA/IEVOWElPIDogZXJyb3IpOwotCX0KIAogCXN3aXRjaCAoY21kKSB7
CiAJY2FzZSBOSU9DR0lORk86CQkvKiByZXR1cm4gY2FwYWJpbGl0aWVzIGV0YyAqLwpAQCAtMjEy
NSwxMyArMjE3OCwyMyBAQAogCQkJdV9pbnQgbWVtZmxhZ3M7CiAKIAkJCWlmIChubXItPm5yX25h
bWVbMF0gIT0gJ1wwJykgeworCiAJCQkJLyogZ2V0IGEgcmVmY291bnQgKi8KLQkJCQllcnJvciA9
IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsIDEgLyogY3JlYXRlICovKTsKLQkJCQlpZiAoZXJyb3Ip
CisJCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5tciwgJm5hLCAmaWZwLCAxIC8qIGNyZWF0ZSAq
Lyk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCW5hID0gTlVMTDsKKwkJCQkJaWZwID0gTlVMTDsK
IAkJCQkJYnJlYWs7CisJCQkJfQogCQkJCW5tZCA9IG5hLT5ubV9tZW07IC8qIGdldCBtZW1vcnkg
YWxsb2NhdG9yICovCiAJCQl9CiAKKwkJCWVycm9yID0gbm1fb3ZlcnJpZGVfbWVtKG5hLCBubXIt
Pm5yX2FyZzIpOworCQkJaWYgKGVycm9yKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp
OworCQkJCWJyZWFrOworCQkJfQorCiAJCQllcnJvciA9IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1k
LCAmbm1yLT5ucl9tZW1zaXplLCAmbWVtZmxhZ3MsCiAJCQkJJm5tci0+bnJfYXJnMik7CiAJCQlp
ZiAoZXJyb3IpCkBAIC0yMTQ1LDIwICsyMjA4LDQ3IEBACiAJCQlubXItPm5yX3R4X3JpbmdzID0g
bmEtPm51bV90eF9yaW5nczsKIAkJCW5tci0+bnJfcnhfc2xvdHMgPSBuYS0+bnVtX3J4X2Rlc2M7
CiAJCQlubXItPm5yX3R4X3Nsb3RzID0gbmEtPm51bV90eF9kZXNjOwotCQkJbmV0bWFwX2FkYXB0
ZXJfcHV0KG5hKTsKIAkJfSB3aGlsZSAoMCk7CisJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsK
IAkJTk1HX1VOTE9DSygpOwogCQlicmVhazsKIAogCWNhc2UgTklPQ1JFR0lGOgotCQkvKiBwb3Nz
aWJseSBhdHRhY2gvZGV0YWNoIE5JQyBhbmQgVkFMRSBzd2l0Y2ggKi8KKwkJLyoKKwkJICogSWYg
bm1yLT5ucl9jbWQgaXMgbm90IHplcm8sIHRoaXMgTklPQ1JFR0lGIGlzIG5vdCByZWFsbHkKKwkJ
ICogYSByZWdpZiBvcGVyYXRpb24sIGJ1dCBhIGRpZmZlcmVudCBvbmUsIHNwZWNpZmllZCBieSB0
aGUKKwkJICogdmFsdWUgb2Ygbm1yLT5ucl9jbWQuCisJCSAqLwogCQlpID0gbm1yLT5ucl9jbWQ7
CiAJCWlmIChpID09IE5FVE1BUF9CREdfQVRUQUNIIHx8IGkgPT0gTkVUTUFQX0JER19ERVRBQ0gK
IAkJCQl8fCBpID09IE5FVE1BUF9CREdfVk5FVF9IRFIKIAkJCQl8fCBpID09IE5FVE1BUF9CREdf
TkVXSUYKLQkJCQl8fCBpID09IE5FVE1BUF9CREdfREVMSUYpIHsKKwkJCQl8fCBpID09IE5FVE1B
UF9CREdfREVMSUYKKwkJCQl8fCBpID09IE5FVE1BUF9CREdfUE9MTElOR19PTgorCQkJCXx8IGkg
PT0gTkVUTUFQX0JER19QT0xMSU5HX09GRikgeworCQkJLyogcG9zc2libHkgYXR0YWNoL2RldGFj
aCBOSUMgYW5kIFZBTEUgc3dpdGNoICovCiAJCQllcnJvciA9IG5ldG1hcF9iZGdfY3RsKG5tciwg
TlVMTCk7CiAJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QVF9IT1NUX0NSRUFU
RSB8fCBpID09IE5FVE1BUF9QVF9IT1NUX0RFTEVURSkgeworCQkJLyogZm9yd2FyZCB0aGUgY29t
bWFuZCB0byB0aGUgcHRuZXRtYXAgc3Vic3lzdGVtICovCisJCQllcnJvciA9IHB0bmV0bWFwX2N0
bChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGkgPT0gTkVUTUFQ
X1ZORVRfSERSX0dFVCkgeworCQkJLyogZ2V0IHZuZXQtaGVhZGVyIGxlbmd0aCBmb3IgdGhpcyBu
ZXRtYXAgcG9ydCAqLworCQkJc3RydWN0IGlmbmV0ICppZnA7CisKKwkJCU5NR19MT0NLKCk7CisJ
CQllcnJvciA9IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsIDApOworCQkJaWYgKG5hICYm
ICFlcnJvcikgeworCQkJCW5tci0+bnJfYXJnMSA9IG5hLT52aXJ0X2hkcl9sZW47CisJCQl9CisJ
CQluZXRtYXBfdW5nZXRfbmEobmEsIGlmcCk7CisJCQlOTUdfVU5MT0NLKCk7CisJCQlicmVhazsK
KwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QT09MU19JTkZPX0dFVCkgeworCQkJLyogZ2V0IGlu
Zm9ybWF0aW9uIGZyb20gdGhlIG1lbW9yeSBhbGxvY2F0b3IgKi8KKwkJCWVycm9yID0gbmV0bWFw
X21lbV9wb29sc19pbmZvX2dldChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOwogCQl9IGVs
c2UgaWYgKGkgIT0gMCkgewogCQkJRCgibnJfY21kIG11c3QgYmUgMCBub3QgJWQiLCBpKTsKIAkJ
CWVycm9yID0gRUlOVkFMOwpAQCAtMjE2OSwyMyArMjI1OSwzOCBAQAogCQlOTUdfTE9DSygpOwog
CQlkbyB7CiAJCQl1X2ludCBtZW1mbGFnczsKKwkJCXN0cnVjdCBpZm5ldCAqaWZwOwogCiAJCQlp
ZiAocHJpdi0+bnBfbmlmcCAhPSBOVUxMKSB7CS8qIHRocmVhZCBhbHJlYWR5IHJlZ2lzdGVyZWQg
Ki8KIAkJCQllcnJvciA9IEVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogZmluZCB0aGUg
aW50ZXJmYWNlIGFuZCBhIHJlZmVyZW5jZSAqLwotCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5t
ciwgJm5hLCAxIC8qIGNyZWF0ZSAqLyk7IC8qIGtlZXAgcmVmZXJlbmNlICovCisJCQllcnJvciA9
IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsCisJCQkJCSAgICAgIDEgLyogY3JlYXRlICov
KTsgLyoga2VlcCByZWZlcmVuY2UgKi8KIAkJCWlmIChlcnJvcikKIAkJCQlicmVhazsKIAkJCWlm
IChORVRNQVBfT1dORURfQllfS0VSTihuYSkpIHsKLQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp
OworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsKIAkJCQllcnJvciA9IEVCVVNZOwogCQkJ
CWJyZWFrOwogCQkJfQorCisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiAhKG5tci0+bnJfZmxh
Z3MgJiBOUl9BQ0NFUFRfVk5FVF9IRFIpKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp
OworCQkJCWVycm9yID0gRUlPOworCQkJCWJyZWFrOworCQkJfQorCisJCQllcnJvciA9IG5tX292
ZXJyaWRlX21lbShuYSwgbm1yLT5ucl9hcmcyKTsKKwkJCWlmIChlcnJvcikgeworCQkJCW5ldG1h
cF91bmdldF9uYShuYSwgaWZwKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJZXJyb3IgPSBuZXRt
YXBfZG9fcmVnaWYocHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5yX2ZsYWdzKTsKIAkJ
CWlmIChlcnJvcikgeyAgICAvKiByZWcuIGZhaWxlZCwgcmVsZWFzZSBwcml2IGFuZCByZWYgKi8K
LQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZw
KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW5pZnAgPSBwcml2LT5ucF9uaWZwOwpAQCAtMjIwMCw3
ICsyMzA1LDcgQEAKIAkJCQkmbm1yLT5ucl9hcmcyKTsKIAkJCWlmIChlcnJvcikgewogCQkJCW5l
dG1hcF9kb191bnJlZ2lmKHByaXYpOwotCQkJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJCQkJ
bmV0bWFwX3VuZ2V0X25hKG5hLCBpZnApOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKG1lbWZs
YWdzICYgTkVUTUFQX01FTV9QUklWQVRFKSB7CkBAIC0yMjEyLDEyICsyMzE3LDE3IEBACiAJCQl9
CiAKIAkJCWlmIChubXItPm5yX2FyZzMpIHsKLQkJCQlEKCJyZXF1ZXN0ZWQgJWQgZXh0cmEgYnVm
ZmVycyIsIG5tci0+bnJfYXJnMyk7CisJCQkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJCQlEKCJy
ZXF1ZXN0ZWQgJWQgZXh0cmEgYnVmZmVycyIsIG5tci0+bnJfYXJnMyk7CiAJCQkJbm1yLT5ucl9h
cmczID0gbmV0bWFwX2V4dHJhX2FsbG9jKG5hLAogCQkJCQkmbmlmcC0+bmlfYnVmc19oZWFkLCBu
bXItPm5yX2FyZzMpOwotCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJzIiwgbm1yLT5ucl9hcmcz
KTsKKwkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCisJCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJz
Iiwgbm1yLT5ucl9hcmczKTsKIAkJCX0KIAkJCW5tci0+bnJfb2Zmc2V0ID0gbmV0bWFwX21lbV9p
Zl9vZmZzZXQobmEtPm5tX21lbSwgbmlmcCk7CisKKwkJCS8qIHN0b3JlIGlmcCByZWZlcmVuY2Ug
c28gdGhhdCBwcml2IGRlc3RydWN0b3IgbWF5IHJlbGVhc2UgaXQgKi8KKwkJCXByaXYtPm5wX2lm
cCA9IGlmcDsKIAkJfSB3aGlsZSAoMCk7CiAJCU5NR19VTkxPQ0soKTsKIAkJYnJlYWs7CkBAIC0y
MjQwLDExICsyMzUwLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFubV9uZXRtYXBfb24o
bmEpKSB7Ci0JCQllcnJvciA9IEVOWElPOwotCQkJYnJlYWs7Ci0JCX0KLQogCQl0ID0gKGNtZCA9
PSBOSU9DVFhTWU5DID8gTlJfVFggOiBOUl9SWCk7CiAJCWtyaW5ncyA9IE5NUihuYSwgdCk7CiAJ
CXFmaXJzdCA9IHByaXYtPm5wX3FmaXJzdFt0XTsKQEAgLTIyNTIsMzEgKzIzNTcsMzQgQEAKIAog
CQlmb3IgKGkgPSBxZmlyc3Q7IGkgPCBxbGFzdDsgaSsrKSB7CiAJCQlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9IGtyaW5ncyArIGk7Ci0JCQlpZiAobm1fa3JfdHJ5Z2V0KGtyaW5nKSkgewot
CQkJCWVycm9yID0gRUJVU1k7Ci0JCQkJZ290byBvdXQ7CisJCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KnJpbmcgPSBrcmluZy0+cmluZzsKKworCQkJaWYgKHVubGlrZWx5KG5tX2tyX3RyeWdldChrcmlu
ZywgMSwgJmVycm9yKSkpIHsKKwkJCQllcnJvciA9IChlcnJvciA/IEVJTyA6IDApOworCQkJCWNv
bnRpbnVlOwogCQkJfQorCiAJCQlpZiAoY21kID09IE5JT0NUWFNZTkMpIHsKIAkJCQlpZiAobmV0
bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1RYU1lOQykKIAkJCQkJRCgicHJlIHR4c3luYyByaW5nICVk
IGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmluZy0+Y3VyLAorCQkJCQkg
ICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3VyKTsKLQkJCQlpZiAobm1f
dHhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgeworCQkJCWlm
IChubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsIHJpbmcpID49IGtyaW5nLT5ua3JfbnVtX3Nsb3Rz
KSB7CiAJCQkJCW5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAJCQkJfSBlbHNlIGlmIChrcmlu
Zy0+bm1fc3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQ0xBSU0pID09IDApIHsKLQkJCQkJbm1fdHhz
eW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQkJ
fQogCQkJCWlmIChuZXRtYXBfdmVyYm9zZSAmIE5NX1ZFUkJfVFhTWU5DKQogCQkJCQlEKCJwb3N0
IHR4c3luYyByaW5nICVkIGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmlu
Zy0+Y3VyLAorCQkJCQkgICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3Vy
KTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3Jp
bmctPm5rcl9udW1fc2xvdHMpIHsKKwkJCQlpZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nLCBy
aW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewogCQkJCQluZXRtYXBfcmluZ19yZWluaXQo
a3JpbmcpOwogCQkJCX0gZWxzZSBpZiAoa3JpbmctPm5tX3N5bmMoa3JpbmcsIE5BRl9GT1JDRV9S
RUFEKSA9PSAwKSB7Ci0JCQkJCW5tX3J4c3luY19maW5hbGl6ZShrcmluZyk7CisJCQkJCW5tX3N5
bmNfZmluYWxpemUoa3JpbmcpOwogCQkJCX0KLQkJCQltaWNyb3RpbWUoJm5hLT5yeF9yaW5nc1tp
XS5yaW5nLT50cyk7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlubV9rcl9w
dXQoa3JpbmcpOwogCQl9CkBAIC0yMzIzLDkgKzI0MzEsNyBAQAogCQllcnJvciA9IEVPUE5PVFNV
UFA7CiAjZW5kaWYgLyogbGludXggKi8KIAl9Ci1vdXQ6CiAKLQlDVVJWTkVUX1JFU1RPUkUoKTsK
IAlyZXR1cm4gKGVycm9yKTsKIH0KIApAQCAtMjM0NSwxNyArMjQ1MSwxNSBAQAogICogaGlkZGVu
IGFyZ3VtZW50LgogICovCiBpbnQKLW5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBl
dmVudHMsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX3BvbGwoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYsIGludCBldmVudHMsIE5NX1NFTFJFQ09SRF9UICpzcikKIHsKLQlzdHJ1Y3QgbmV0
bWFwX3ByaXZfZCAqcHJpdiA9IE5VTEw7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYTsKIAlz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CiAJ
dV9pbnQgaSwgY2hlY2tfYWxsX3R4LCBjaGVja19hbGxfcngsIHdhbnRbTlJfVFhSWF0sIHJldmVu
dHMgPSAwOwogI2RlZmluZSB3YW50X3R4IHdhbnRbTlJfVFhdCiAjZGVmaW5lIHdhbnRfcnggd2Fu
dFtOUl9SWF0KIAlzdHJ1Y3QgbWJxIHE7CQkvKiBwYWNrZXRzIGZyb20gaHcgcXVldWVzIHRvIGhv
c3Qgc3RhY2sgKi8KLQl2b2lkICpwd2FpdCA9IGRldjsJLyogbGludXggY29tcGF0aWJpbGl0eSAq
LwotCWludCBpc19rZXZlbnQgPSAwOwogCWVudW0gdHhyeCB0OwogCiAJLyoKQEAgLTIzNjUsMjMg
KzI0NjksMTMgQEAKIAkgKi8KIAlpbnQgcmV0cnlfdHggPSAxLCByZXRyeV9yeCA9IDE7CiAKLQko
dm9pZClwd2FpdDsKLQltYnFfaW5pdCgmcSk7Ci0KLQkvKgotCSAqIFhYWCBrZXZlbnQgaGFzIGN1
cnRocmVhZC0+dHBfZm9wID09IE5VTEwsCi0JICogc28gZGV2ZnNfZ2V0X2NkZXZwcml2KCkgZmFp
bHMuIFdlIGNpcmN1bXZlbnQgdGhpcyBieSBwYXNzaW5nCi0JICogcHJpdiBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQsIHdoaWNoIGlzIGFsc28gdXNlZnVsIHRvIGF2b2lkCi0JICogdGhlIHNlbHJlY29y
ZCgpIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJ5IGluIHRoYXQgY2FzZS4KKwkvKiB0cmFuc3BhcmVu
dCBtb2RlOiBzZW5kX2Rvd24gaXMgMSBpZiB3ZSBoYXZlIGZvdW5kIHNvbWUKKwkgKiBwYWNrZXRz
IHRvIGZvcndhcmQgZHVyaW5nIHRoZSByeCBzY2FuIGFuZCB3ZSBoYXZlIG5vdAorCSAqIHNlbnQg
dGhlbSBkb3duIHRvIHRoZSBuaWMgeWV0CiAJICovCi0JaWYgKGRldmZzX2dldF9jZGV2cHJpdigo
dm9pZCAqKikmcHJpdikgIT0gMCkgewotCQlpc19rZXZlbnQgPSAxOwotCQlpZiAobmV0bWFwX3Zl
cmJvc2UpCi0JCQlEKCJjYWxsZWQgZnJvbSBrZXZlbnQiKTsKLQkJcHJpdiA9IChzdHJ1Y3QgbmV0
bWFwX3ByaXZfZCAqKWRldjsKLQl9Ci0JaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIFBPTExF
UlI7CisJaW50IHNlbmRfZG93biA9IDA7CisKKwltYnFfaW5pdCgmcSk7CiAKIAlpZiAocHJpdi0+
bnBfbmlmcCA9PSBOVUxMKSB7CiAJCUQoIk5vIGlmIHJlZ2lzdGVyZWQiKTsKQEAgLTIzOTksNyAr
MjQ5Myw2IEBACiAJd2FudF90eCA9IGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSk7CiAJ
d2FudF9yeCA9IGV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsKIAotCiAJLyoKIAkgKiBj
aGVja19hbGxfe3R4fHJ4fSBhcmUgc2V0IGlmIHRoZSBjYXJkIGhhcyBtb3JlIHRoYW4gb25lIHF1
ZXVlIEFORAogCSAqIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYm91bmQgdG8gYWxsIG9mIHRoZW0u
IElmIHNvLCB3ZSBzbGVlcCBvbgpAQCAtMjQyMSw2ICsyNTE0LDMyIEBACiAJICogc2xvdHMgYXZh
aWxhYmxlLiBJZiB0aGlzIGZhaWxzLCB0aGVuIGxvY2sgYW5kIGNhbGwgdGhlIHN5bmMKIAkgKiBy
b3V0aW5lcy4KIAkgKi8KKyNpZiAxIC8qIG5ldyBjb2RlLSBjYWxsIHJ4IGlmIGFueSBvZiB0aGUg
cmluZyBuZWVkcyB0byByZWxlYXNlIG9yIHJlYWQgYnVmZmVycyAqLworCWlmICh3YW50X3R4KSB7
CisJCXQgPSBOUl9UWDsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3RdOyB3YW50W3RdICYm
IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CisJCQlrcmluZyA9ICZOTVIobmEsIHQpW2ld
OworCQkJLyogWFhYIGNvbXBhcmUgcmluZy0+Y3VyIGFuZCBrcmluZy0+dGFpbCAqLworCQkJaWYg
KCFubV9yaW5nX2VtcHR5KGtyaW5nLT5yaW5nKSkgeworCQkJCXJldmVudHMgfD0gd2FudFt0XTsK
KwkJCQl3YW50W3RdID0gMDsJLyogYWxzbyBicmVha3MgdGhlIGxvb3AgKi8KKwkJCX0KKwkJfQor
CX0KKwlpZiAod2FudF9yeCkgeworCQl3YW50X3J4ID0gMDsgLyogbG9vayBmb3IgYSByZWFzb24g
dG8gcnVuIHRoZSBoYW5kbGVycyAqLworCQl0ID0gTlJfUlg7CisJCWZvciAoaSA9IHByaXYtPm5w
X3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKKwkJCWtyaW5nID0gJk5N
UihuYSwgdClbaV07CisJCQlpZiAoa3JpbmctPnJpbmctPmN1ciA9PSBrcmluZy0+cmluZy0+dGFp
bCAvKiB0cnkgZmV0Y2ggbmV3IGJ1ZmZlcnMgKi8KKwkJCSAgICB8fCBrcmluZy0+cmhlYWQgIT0g
a3JpbmctPnJpbmctPmhlYWQgLyogcmVsZWFzZSBidWZmZXJzICovKSB7CisJCQkJd2FudF9yeCA9
IDE7CisJCQl9CisJCX0KKwkJaWYgKCF3YW50X3J4KQorCQkJcmV2ZW50cyB8PSBldmVudHMgJiAo
UE9MTElOIHwgUE9MTFJETk9STSk7IC8qIHdlIGhhdmUgZGF0YSAqLworCX0KKyNlbHNlIC8qIG9s
ZCBjb2RlICovCiAJZm9yX3J4X3R4KHQpIHsKIAkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3Rd
OyB3YW50W3RdICYmIGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CiAJCQlrcmluZyA9ICZO
TVIobmEsIHQpW2ldOwpAQCAtMjQzMSw2ICsyNTUwLDcgQEAKIAkJCX0KIAkJfQogCX0KKyNlbmRp
ZiAvKiBvbGQgY29kZSAqLwogCiAJLyoKIAkgKiBJZiB3ZSB3YW50IHRvIHB1c2ggcGFja2V0cyBv
dXQgKHByaXYtPm5wX3R4cG9sbCkgb3IKQEAgLTI0NDcsMzIgKzI1NjcsMjYgQEAKIAkJICogdXNl
ZCB0byBza2lwIHJpbmdzIHdpdGggbm8gcGVuZGluZyB0cmFuc21pc3Npb25zLgogCQkgKi8KIGZs
dXNoX3R4OgotCQlmb3IgKGkgPSBwcml2LT5ucF9xZmlyc3RbTlJfVFhdOyBpIDwgcHJpdi0+bnBf
cWxhc3RbTlJfUlhdOyBpKyspIHsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1RYXTsg
aSA8IHByaXYtPm5wX3FsYXN0W05SX1RYXTsgaSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJ
CQlrcmluZyA9ICZuYS0+dHhfcmluZ3NbaV07Ci0JCQlpZiAoIXdhbnRfdHggJiYga3JpbmctPnJp
bmctPmN1ciA9PSBrcmluZy0+bnJfaHdjdXIpCisJCQlyaW5nID0ga3JpbmctPnJpbmc7CisKKwkJ
CWlmICghc2VuZF9kb3duICYmICF3YW50X3R4ICYmIHJpbmctPmN1ciA9PSBrcmluZy0+bnJfaHdj
dXIpCiAJCQkJY29udGludWU7Ci0JCQkvKiBvbmx5IG9uZSB0aHJlYWQgZG9lcyB0eHN5bmMgKi8K
LQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7Ci0JCQkJLyogZWl0aGVyIGJ1c3kgb3Igc3Rv
cHBlZAotCQkJCSAqIFhYWCBpZiB0aGUgcmluZyBpcyBzdG9wcGVkLCBzbGVlcGluZyB3b3VsZAot
CQkJCSAqIGJlIGJldHRlci4gSW4gY3VycmVudCBjb2RlLCBob3dldmVyLCB3ZSBvbmx5Ci0JCQkJ
ICogc3RvcCB0aGUgcmluZ3MgZm9yIGJyaWVmIGludGVydmFscyAoMjAxNC0wMy0xNCkKLQkJCQkg
Ki8KLQkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQkJCVJEKDIsICIlcCBsb3N0IHJhY2Ugb24g
dHhyaW5nICVkLCBvayIsCi0JCQkJCSAgICBwcml2LCBpKTsKKworCQkJaWYgKG5tX2tyX3RyeWdl
dChrcmluZywgMSwgJnJldmVudHMpKQogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKG5tX3R4
c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKKworCQkJaWYg
KG5tX3R4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMp
IHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0gUE9MTEVS
UjsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQkJ
cmV2ZW50cyB8PSBQT0xMRVJSOwogCQkJCWVsc2UKLQkJCQkJbm1fdHhzeW5jX2ZpbmFsaXplKGty
aW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQl9CiAKIAkJCS8qCkBAIC0y
NDg5LDggKzI2MDMsMTAgQEAKIAkJCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKIAkJCX0K
IAkJfQotCQlpZiAod2FudF90eCAmJiByZXRyeV90eCAmJiAhaXNfa2V2ZW50KSB7Ci0JCQlPU19z
ZWxyZWNvcmQodGQsIGNoZWNrX2FsbF90eCA/CisJCS8qIGlmIHRoZXJlIHdlcmUgYW55IHBhY2tl
dCB0byBmb3J3YXJkIHdlIG11c3QgaGF2ZSBoYW5kbGVkIHRoZW0gYnkgbm93ICovCisJCXNlbmRf
ZG93biA9IDA7CisJCWlmICh3YW50X3R4ICYmIHJldHJ5X3R4ICYmIHNyKSB7CisJCQlubV9vc19z
ZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF90eCA/CiAJCQkgICAgJm5hLT5zaVtOUl9UWF0gOiAmbmEt
PnR4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9UWF1dLnNpKTsKIAkJCXJldHJ5X3R4ID0gMDsK
IAkJCWdvdG8gZmx1c2hfdHg7CkBAIC0yNTAyLDIyICsyNjE4LDE4IEBACiAJICogRG8gaXQgb24g
YWxsIHJpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHN0YXJ2ZS4KIAkgKi8KIAlpZiAod2FudF9y
eCkgewotCQlpbnQgc2VuZF9kb3duID0gMDsgLyogdHJhbnNwYXJlbnQgbW9kZSAqLwogCQkvKiB0
d28gcm91bmRzIGhlcmUgZm9yIHJhY2UgYXZvaWRhbmNlICovCiBkb19yZXRyeV9yeDoKIAkJZm9y
IChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1JYXTsgaSA8IHByaXYtPm5wX3FsYXN0W05SX1JYXTsg
aSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbaV07
CisJCQlyaW5nID0ga3JpbmctPnJpbmc7CiAKLQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7
Ci0JCQkJaWYgKG5ldG1hcF92ZXJib3NlKQotCQkJCQlSRCgyLCAiJXAgbG9zdCByYWNlIG9uIHJ4
cmluZyAlZCwgb2siLAotCQkJCQkgICAgcHJpdiwgaSk7CisJCQlpZiAodW5saWtlbHkobm1fa3Jf
dHJ5Z2V0KGtyaW5nLCAxLCAmcmV2ZW50cykpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCi0JCQlp
ZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewor
CQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1f
c2xvdHMpIHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0g
UE9MTEVSUjsKIAkJCX0KQEAgLTI1MjYsMjIgKzI2MzgsMjIgQEAKIAkJCS8qCiAJCQkgKiB0cmFu
c3BhcmVudCBtb2RlIHN1cHBvcnQ6IGNvbGxlY3QgcGFja2V0cwogCQkJICogZnJvbSB0aGUgcnhy
aW5nKHMpLgotCQkJICogWFhYIE5SX0ZPUldBUkQgc2hvdWxkIG9ubHkgYmUgcmVhZCBvbgotCQkJ
ICogcGh5c2ljYWwgb3IgTklDIHBvcnRzCiAJCQkgKi8KLQkJCWlmIChuZXRtYXBfZndkIHx8a3Jp
bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkgeworCQkJaWYgKG5tX21heV9mb3J3YXJkX3Vw
KGtyaW5nKSkgewogCQkJCU5EKDEwLCAiZm9yd2FyZGluZyBzb21lIGJ1ZmZlcnMgdXAgJWQgdG8g
JWQiLAotCQkJCSAgICBrcmluZy0+bnJfaHdjdXIsIGtyaW5nLT5yaW5nLT5jdXIpOworCQkJCSAg
ICBrcmluZy0+bnJfaHdjdXIsIHJpbmctPmN1cik7CiAJCQkJbmV0bWFwX2dyYWJfcGFja2V0cyhr
cmluZywgJnEsIG5ldG1hcF9md2QpOwogCQkJfQogCisJCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5O
Ul9GT1JXQVJEOwogCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQlyZXZlbnRz
IHw9IFBPTExFUlI7CiAJCQllbHNlCi0JCQkJbm1fcnhzeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJ
CQlubV9zeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCXNlbmRfZG93biB8PSAoa3JpbmctPm5yX2tm
bGFncyAmIE5SX0ZPUldBUkQpOyAvKiBob3N0IHJpbmcgb25seSAqLwogCQkJaWYgKG5ldG1hcF9u
b190aW1lc3RhbXAgPT0gMCB8fAotCQkJCQlrcmluZy0+cmluZy0+ZmxhZ3MgJiBOUl9USU1FU1RB
TVApIHsKLQkJCQltaWNyb3RpbWUoJmtyaW5nLT5yaW5nLT50cyk7CisJCQkJCXJpbmctPmZsYWdz
ICYgTlJfVElNRVNUQU1QKSB7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlm
b3VuZCA9IGtyaW5nLT5yY3VyICE9IGtyaW5nLT5ydGFpbDsKIAkJCW5tX2tyX3B1dChrcmluZyk7
CkBAIC0yNTUyLDIyICsyNjY0LDEwIEBACiAJCQl9CiAJCX0KIAotCQkvKiB0cmFuc3BhcmVudCBt
b2RlIFhYWCBvbmx5IGR1cmluZyBmaXJzdCBwYXNzID8gKi8KLQkJaWYgKG5hLT5uYV9mbGFncyAm
IE5BRl9IT1NUX1JJTkdTKSB7Ci0JCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbbmEtPm51bV9yeF9y
aW5nc107Ci0JCQlpZiAoY2hlY2tfYWxsX3J4Ci0JCQkgICAgJiYgKG5ldG1hcF9md2QgfHwga3Jp
bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkpIHsKLQkJCQkvKiBYWFggZml4IHRvIHVzZSBr
cmluZyBmaWVsZHMgKi8KLQkJCQlpZiAobm1fcmluZ19lbXB0eShrcmluZy0+cmluZykpCi0JCQkJ
CXNlbmRfZG93biA9IG5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KG5hLCB0ZCwgZGV2KTsKLQkJCQlp
ZiAoIW5tX3JpbmdfZW1wdHkoa3JpbmctPnJpbmcpKQotCQkJCQlyZXZlbnRzIHw9IHdhbnRfcng7
Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmV0cnlfcnggJiYgIWlzX2tldmVudCkKLQkJCU9TX3NlbHJl
Y29yZCh0ZCwgY2hlY2tfYWxsX3J4ID8KKwkJaWYgKHJldHJ5X3J4ICYmIHNyKSB7CisJCQlubV9v
c19zZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF9yeCA/CiAJCQkgICAgJm5hLT5zaVtOUl9SWF0gOiAm
bmEtPnJ4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9SWF1dLnNpKTsKKwkJfQogCQlpZiAoc2Vu
ZF9kb3duID4gMCB8fCByZXRyeV9yeCkgewogCQkJcmV0cnlfcnggPSAwOwogCQkJaWYgKHNlbmRf
ZG93bikKQEAgLTI1ODIsMTUgKzI2ODIsMTQgQEAKIAkgKiBrcmluZy0+bnJfaHdjdXIgYW5kIHJp
bmctPmhlYWQKIAkgKiBhcmUgcGFzc2VkIHRvIHRoZSBvdGhlciBlbmRwb2ludC4KIAkgKgotCSAq
IEluIHRoaXMgbW9kZSB3ZSBhbHNvIHNjYW4gdGhlIHN3IHJ4cmluZywgd2hpY2ggaW4KLQkgKiB0
dXJuIHBhc3NlcyBwYWNrZXRzIHVwLgotCSAqCi0JICogWFhYIFRyYW5zcGFyZW50IG1vZGUgYXQg
dGhlIG1vbWVudCByZXF1aXJlcyB0byBiaW5kIGFsbAorCSAqIFRyYW5zcGFyZW50IG1vZGUgcmVx
dWlyZXMgdG8gYmluZCBhbGwKICAJICogcmluZ3MgdG8gYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9y
LgogCSAqLwogCi0JaWYgKHEuaGVhZCAmJiBuYS0+aWZwICE9IE5VTEwpCisJaWYgKHEuaGVhZCAm
JiAhbm1fa3JfdHJ5Z2V0KCZuYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10sIDEsICZyZXZl
bnRzKSkgewogCQluZXRtYXBfc2VuZF91cChuYS0+aWZwLCAmcSk7CisJCW5tX2tyX3B1dCgmbmEt
PnR4X3JpbmdzW25hLT5udW1fdHhfcmluZ3NdKTsKKwl9CiAKIAlyZXR1cm4gKHJldmVudHMpOwog
I3VuZGVmIHdhbnRfdHgKQEAgLTI2MDAsOCArMjY5OSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0gZHJpdmVyIHN1cHBvcnQgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0
YXRpYyBpbnQgbmV0bWFwX2h3X2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICop
OwotCiAvKiBkZWZhdWx0IG5vdGlmeSBjYWxsYmFjayAqLwogc3RhdGljIGludAogbmV0bWFwX25v
dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQpAQCAtMjYwOSw1MSAr
MjcwNiw1MSBAQAogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJZW51
bSB0eHJ4IHQgPSBrcmluZy0+dHg7CiAKLQlPU19zZWx3YWtldXAoJmtyaW5nLT5zaSwgUElfTkVU
KTsKKwlubV9vc19zZWx3YWtldXAoJmtyaW5nLT5zaSk7CiAJLyogb3B0aW1pemF0aW9uOiBhdm9p
ZCBhIHdha2UgdXAgb24gdGhlIGdsb2JhbAogCSAqIHF1ZXVlIGlmIG5vYm9keSBoYXMgcmVnaXN0
ZXJlZCBmb3IgbW9yZQogCSAqIHRoYW4gb25lIHJpbmcKIAkgKi8KIAlpZiAobmEtPnNpX3VzZXJz
W3RdID4gMCkKLQkJT1Nfc2Vsd2FrZXVwKCZuYS0+c2lbdF0sIFBJX05FVCk7CisJCW5tX29zX3Nl
bHdha2V1cCgmbmEtPnNpW3RdKTsKIAotCXJldHVybiAwOworCXJldHVybiBOTV9JUlFfQ09NUExF
VEVEOwogfQogCisjaWYgMAorc3RhdGljIGludAorbmV0bWFwX25vdGlmeShzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hLCB1X2ludCBuX3JpbmcsCitlbnVtIHR4cnggdHgsIGludCBmbGFncykKK3sK
KwlpZiAodHggPT0gTlJfVFgpIHsKKwkJS2VTZXRFdmVudChub3Rlcy0+VFhfRVZFTlQsIDAsIEZB
TFNFKTsKKwl9CisJZWxzZQorCXsKKwkJS2VTZXRFdmVudChub3Rlcy0+UlhfRVZFTlQsIDAsIEZB
TFNFKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogY2FsbGVkIGJ5IGFsbCByb3V0
aW5lcyB0aGF0IGNyZWF0ZSBuZXRtYXBfYWRhcHRlcnMuCi0gKiBBdHRhY2ggbmEgdG8gdGhlIGlm
cCAoaWYgYW55KSBhbmQgcHJvdmlkZSBkZWZhdWx0cwotICogZm9yIG9wdGlvbmFsIGNhbGxiYWNr
cy4gRGVmYXVsdHMgYXNzdW1lIHRoYXQgd2UKLSAqIGFyZSBjcmVhdGluZyBhbiBoYXJkd2FyZSBu
ZXRtYXBfYWRhcHRlci4KKyAqIHByb3ZpZGUgc29tZSBkZWZhdWx0cyBhbmQgZ2V0IGEgcmVmZXJl
bmNlIHRvIHRoZQorICogbWVtb3J5IGFsbG9jYXRvcgogICovCiBpbnQKIG5ldG1hcF9hdHRhY2hf
Y29tbW9uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAg
PSBuYS0+aWZwOwotCiAJaWYgKG5hLT5udW1fdHhfcmluZ3MgPT0gMCB8fCBuYS0+bnVtX3J4X3Jp
bmdzID09IDApIHsKIAkJRCgiJXM6IGludmFsaWQgcmluZ3MgdHggJWQgcnggJWQiLAogCQkJbmEt
Pm5hbWUsIG5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fcnhfcmluZ3MpOwogCQlyZXR1cm4gRUlO
VkFMOwogCX0KLQkvKiBpZnAgaXMgTlVMTCBmb3IgdmlydHVhbCBhZGFwdGVycyAoYndyYXAsIG5v
bi1wZXJzaXN0ZW50IFZBTEUgcG9ydHMsCi0JICogcGlwZXMsIG1vbml0b3JzKS4gRm9yIGJ3cmFw
IHdlIGFjdHVhbGx5IGhhdmUgYSBub24tbnVsbCBpZnAgZm9yCi0JICogdXNlIGJ5IHRoZSBleHRl
cm5hbCBtb2R1bGVzLCBidXQgdGhhdCBpcyBzZXQgYWZ0ZXIgdGhpcwotCSAqIGZ1bmN0aW9uIGhh
cyBiZWVuIGNhbGxlZC4KLQkgKiBYWFggdGhpcyBpcyB1Z2x5LCBtYXliZSBzcGxpdCB0aGlzIGZ1
bmN0aW9uIGluIHR3byAoMjAxNC0wMy0xNCkKLQkgKi8KLQlpZiAoaWZwICE9IE5VTEwpIHsKLQkJ
V05BKGlmcCkgPSBuYTsKIAotCS8qIHRoZSBmb2xsb3dpbmcgaXMgb25seSBuZWVkZWQgZm9yIG5h
IHRoYXQgdXNlIHRoZSBob3N0IHBvcnQuCi0JICogWFhYIGRvIHdlIGhhdmUgc29tZXRoaW5nIHNp
bWlsYXIgZm9yIGxpbnV4ID8KLQkgKi8KICNpZmRlZiBfX0ZyZWVCU0RfXwotCQluYS0+aWZfaW5w
dXQgPSBpZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KLSNlbmRpZiAvKiBf
X0ZyZWVCU0RfXyAqLwotCi0JCU5FVE1BUF9TRVRfQ0FQQUJMRShpZnApOworCWlmIChuYS0+bmFf
ZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUyAmJiBuYS0+aWZwKSB7CisJCW5hLT5pZl9pbnB1dCA9IG5h
LT5pZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KIAl9CisjZW5kaWYgLyog
X19GcmVlQlNEX18gKi8KIAlpZiAobmEtPm5tX2tyaW5nc19jcmVhdGUgPT0gTlVMTCkgewogCQkv
KiB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGEgZHJpdmVyLAogCQkgKiBz
aW5jZSBvdGhlciBwb3J0IHR5cGVzIGFsbCBwcm92aWRlIHRoZWlyIG93bgpAQCAtMjY2NiwxMCAr
Mjc2MywxMCBAQAogCQluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX25vdGlmeTsKIAluYS0+YWN0aXZl
X2ZkcyA9IDA7CiAKLQlpZiAobmEtPm5tX21lbSA9PSBOVUxMKQorCWlmIChuYS0+bm1fbWVtID09
IE5VTEwpIHsKIAkJLyogdXNlIHRoZSBnbG9iYWwgYWxsb2NhdG9yICovCi0JCW5hLT5ubV9tZW0g
PSAmbm1fbWVtOwotCW5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOworCQluYS0+bm1fbWVtID0g
bmV0bWFwX21lbV9nZXQoJm5tX21lbSk7CisJfQogI2lmZGVmIFdJVEhfVkFMRQogCWlmIChuYS0+
bm1fYmRnX2F0dGFjaCA9PSBOVUxMKQogCQkvKiBubyBzcGVjaWFsIG5tX2JkZ19hdHRhY2ggY2Fs
bGJhY2suIE9uIFZBTEUKQEAgLTI2NzcsNiArMjc3NCw3IEBACiAJCSAqLwogCQluYS0+bm1fYmRn
X2F0dGFjaCA9IG5ldG1hcF9id3JhcF9hdHRhY2g7CiAjZW5kaWYKKwogCXJldHVybiAwOwogfQog
CkBAIC0yNjg1LDkgKzI3ODMsNiBAQAogdm9pZAogbmV0bWFwX2RldGFjaF9jb21tb24oc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLQlpZiAobmEtPmlmcCAhPSBOVUxMKQotCQlXTkEobmEt
PmlmcCkgPSBOVUxMOyAvKiBYWFggZG8gd2UgbmVlZCB0aGlzPyAqLwotCiAJaWYgKG5hLT50eF9y
aW5ncykgeyAvKiBYWFggc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJRCgiZnJlZWluZyBsZWZ0b3Zl
ciB0eF9yaW5ncyIpOwogCQluYS0+bm1fa3JpbmdzX2RlbGV0ZShuYSk7CkBAIC0yNjk2LDM0ICsy
NzkxLDU1IEBACiAJaWYgKG5hLT5ubV9tZW0pCiAJCW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0p
OwogCWJ6ZXJvKG5hLCBzaXplb2YoKm5hKSk7Ci0JZnJlZShuYSwgTV9ERVZCVUYpOworCW5tX29z
X2ZyZWUobmEpOwogfQogCi0vKiBXcmFwcGVyIGZvciB0aGUgcmVnaXN0ZXIgY2FsbGJhY2sgcHJv
dmlkZWQgaGFyZHdhcmUgZHJpdmVycy4KLSAqIG5hLT5pZnAgPT0gTlVMTCBtZWFucyB0aGUgZHJp
dmVyIG1vZHVsZSBoYXMgYmVlbgorLyogV3JhcHBlciBmb3IgdGhlIHJlZ2lzdGVyIGNhbGxiYWNr
IHByb3ZpZGVkIG5ldG1hcC1lbmFibGVkCisgKiBoYXJkd2FyZSBkcml2ZXJzLgorICogbm1faXN6
b21iaWUobmEpIG1lYW5zIHRoYXQgdGhlIGRyaXZlciBtb2R1bGUgaGFzIGJlZW4KICAqIHVubG9h
ZGVkLCBzbyB3ZSBjYW5ub3QgY2FsbCBpbnRvIGl0LgotICogTm90ZSB0aGF0IG1vZHVsZSB1bmxv
YWRpbmcsIGluIG91ciBwYXRjaGVkIGxpbnV4IGRyaXZlcnMsCi0gKiBoYXBwZW5zIHVuZGVyIE5N
R19MT0NLIGFuZCBhZnRlciBoYXZpbmcgc3RvcHBlZCBhbGwgdGhlCi0gKiBuaWMgcmluZ3MgKHNl
ZSBuZXRtYXBfZGV0YWNoKS4gVGhpcyBwcm92aWRlcyBzdWZmaWNpZW50Ci0gKiBwcm90ZWN0aW9u
IGZvciB0aGUgb3RoZXIgZHJpdmVyLXByb3ZpZWQgY2FsbGJhY2tzCi0gKiAoaS5lLiwgbm1fY29u
ZmlnIGFuZCBubV8qeHN5bmMpLCB0aGF0IHRoZXJlZm9yZSBkb24ndCBuZWVkCi0gKiB0byB3cmFw
cGVkLgorICogbm1fb3NfaWZuZXRfbG9jaygpIG11c3QgZ3VhcmFudGVlIG11dHVhbCBleGNsdXNp
b24gd2l0aAorICogbW9kdWxlIHVubG9hZGluZy4KICAqLwogc3RhdGljIGludAotbmV0bWFwX2h3
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKK25ldG1hcF9o
d19yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBu
ZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0ZXIqKW5h
OworCWludCBlcnJvciA9IDA7CisKKwlubV9vc19pZm5ldF9sb2NrKCk7CisKKwlpZiAobm1faXN6
b21iaWUobmEpKSB7CisJCWlmIChvbm9mZikgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfSBlbHNl
IGlmIChuYSAhPSBOVUxMKSB7CisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CisJ
CX0KKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKG5hLT5pZnAgPT0gTlVMTCkKLQkJcmV0dXJuIG9u
b2ZmID8gRU5YSU8gOiAwOworCWVycm9yID0gaHduYS0+bm1faHdfcmVnaXN0ZXIobmEsIG9ub2Zm
KTsKKworb3V0OgorCW5tX29zX2lmbmV0X3VubG9jaygpOwogCi0JcmV0dXJuIGh3bmEtPm5tX2h3
X3JlZ2lzdGVyKG5hLCBvbm9mZik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAor
bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlpZiAobm1faXN6
b21iaWUobmEpIHx8IG5hLT5pZnAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJV05BKG5hLT5pZnAp
ID0gTlVMTDsKIH0KIAogCiAvKgotICogSW5pdGlhbGl6ZSBhIGBgbmV0bWFwX2FkYXB0ZXJgYCBv
YmplY3QgY3JlYXRlZCBieSBkcml2ZXIgb24gYXR0YWNoLgorICogQWxsb2NhdGUgYSBgYG5ldG1h
cF9hZGFwdGVyYGAgb2JqZWN0LCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoZQorICogJ2FyZycg
cGFzc2VkIGJ5IHRoZSBkcml2ZXIgb24gYXR0YWNoLgogICogV2UgYWxsb2NhdGUgYSBibG9jayBv
ZiBtZW1vcnkgd2l0aCByb29tIGZvciBhIHN0cnVjdCBuZXRtYXBfYWRhcHRlcgogICogcGx1cyB0
d28gc2V0cyBvZiBOKzIgc3RydWN0IG5ldG1hcF9rcmluZyAod2hlcmUgTiBpcyB0aGUgbnVtYmVy
CiAgKiBvZiBoYXJkd2FyZSByaW5ncyk6CkBAIC0yNzMyLDI5ICsyODQ4LDMxIEBACiAgKiBrcmlu
ZwlOKzEJaXMgb25seSB1c2VkIGZvciB0aGUgc2VsaW5mbyBmb3IgYWxsIHF1ZXVlcy4gLy8gWFhY
IHN0aWxsIHRydWUgPwogICogUmV0dXJuIDAgb24gc3VjY2VzcywgRU5PTUVNIG90aGVyd2lzZS4K
ICAqLwotaW50Ci1uZXRtYXBfYXR0YWNoKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqYXJnKQorc3Rh
dGljIGludAorX25ldG1hcF9hdHRhY2goc3RydWN0IG5ldG1hcF9hZGFwdGVyICphcmcsIHNpemVf
dCBzaXplKQogewogCXN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9IE5VTEw7Ci0JLy8g
WFhYIHdoZW4gaXMgYXJnID09IE5VTEwgPwotCXN0cnVjdCBpZm5ldCAqaWZwID0gYXJnID8gYXJn
LT5pZnAgOiBOVUxMOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAotCWlmIChhcmcgPT0g
TlVMTCB8fCBpZnAgPT0gTlVMTCkKKwlpZiAoYXJnID09IE5VTEwgfHwgYXJnLT5pZnAgPT0gTlVM
TCkKIAkJZ290byBmYWlsOwotCWh3bmEgPSBtYWxsb2Moc2l6ZW9mKCpod25hKSwgTV9ERVZCVUYs
IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZnAgPSBhcmctPmlmcDsKKwlod25hID0gbm1fb3NfbWFs
bG9jKHNpemUpOwogCWlmIChod25hID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlod25hLT51cCA9
ICphcmc7CiAJaHduYS0+dXAubmFfZmxhZ3MgfD0gTkFGX0hPU1RfUklOR1MgfCBOQUZfTkFUSVZF
OwogCXN0cm5jcHkoaHduYS0+dXAubmFtZSwgaWZwLT5pZl94bmFtZSwgc2l6ZW9mKGh3bmEtPnVw
Lm5hbWUpKTsKIAlod25hLT5ubV9od19yZWdpc3RlciA9IGh3bmEtPnVwLm5tX3JlZ2lzdGVyOwot
CWh3bmEtPnVwLm5tX3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZ2lzdGVyOworCWh3bmEtPnVwLm5t
X3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZzsKIAlpZiAobmV0bWFwX2F0dGFjaF9jb21tb24oJmh3
bmEtPnVwKSkgewotCQlmcmVlKGh3bmEsIE1fREVWQlVGKTsKKwkJbm1fb3NfZnJlZShod25hKTsK
IAkJZ290byBmYWlsOwogCX0KIAluZXRtYXBfYWRhcHRlcl9nZXQoJmh3bmEtPnVwKTsKIAorCU5N
X0FUVEFDSF9OQShpZnAsICZod25hLT51cCk7CisKICNpZmRlZiBsaW51eAogCWlmIChpZnAtPm5l
dGRldl9vcHMpIHsKIAkJLyogcHJlcGFyZSBhIGNsb25lIG9mIHRoZSBuZXRkZXYgb3BzICovCkBA
IC0yNzYyLDcgKzI4ODAsNyBAQAogCQlod25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBpZnAt
Pm5ldGRldl9vcHM7CiAjZWxzZQogCQlod25hLT5ubV9uZG8gPSAqaWZwLT5uZXRkZXZfb3BzOwot
I2VuZGlmCisjZW5kaWYgLyogTkVUTUFQX0xJTlVYX0hBVkVfTkVUREVWX09QUyAqLwogCX0KIAlo
d25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBsaW51eF9uZXRtYXBfc3RhcnRfeG1pdDsKIAlp
ZiAoaWZwLT5ldGh0b29sX29wcykgewpAQCAtMjc3MSwxMSArMjg4OSwxNCBAQAogCWh3bmEtPm5t
X2V0by5zZXRfcmluZ3BhcmFtID0gbGludXhfbmV0bWFwX3NldF9yaW5ncGFyYW07CiAjaWZkZWYg
TkVUTUFQX0xJTlVYX0hBVkVfU0VUX0NIQU5ORUxTCiAJaHduYS0+bm1fZXRvLnNldF9jaGFubmVs
cyA9IGxpbnV4X25ldG1hcF9zZXRfY2hhbm5lbHM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRNQVBf
TElOVVhfSEFWRV9TRVRfQ0hBTk5FTFMgKi8KIAlpZiAoYXJnLT5ubV9jb25maWcgPT0gTlVMTCkg
ewogCQlod25hLT51cC5ubV9jb25maWcgPSBuZXRtYXBfbGludXhfY29uZmlnOwogCX0KICNlbmRp
ZiAvKiBsaW51eCAqLworCWlmIChhcmctPm5tX2R0b3IgPT0gTlVMTCkgeworCQlod25hLT51cC5u
bV9kdG9yID0gbmV0bWFwX2h3X2R0b3I7CisJfQogCiAJaWZfcHJpbnRmKGlmcCwgIm5ldG1hcCBx
dWV1ZXMvc2xvdHM6IFRYICVkLyVkLCBSWCAlZC8lZFxuIiwKIAkgICAgaHduYS0+dXAubnVtX3R4
X3JpbmdzLCBod25hLT51cC5udW1fdHhfZGVzYywKQEAgLTI3ODQsMTIgKzI5MDUsNTQgQEAKIAog
ZmFpbDoKIAlEKCJmYWlsLCBhcmcgJXAgaWZwICVwIG5hICVwIiwgYXJnLCBpZnAsIGh3bmEpOwot
CWlmIChpZnApCi0JCW5ldG1hcF9kZXRhY2goaWZwKTsKIAlyZXR1cm4gKGh3bmEgPyBFSU5WQUwg
OiBFTk9NRU0pOwogfQogCiAKK2ludAorbmV0bWFwX2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0
ZXIgKmFyZykKK3sKKwlyZXR1cm4gX25ldG1hcF9hdHRhY2goYXJnLCBzaXplb2Yoc3RydWN0IG5l
dG1hcF9od19hZGFwdGVyKSk7Cit9CisKKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKK2lu
dAorbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmFyZywgdm9p
ZCAqY3NiLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0LCB1bnNpZ25lZCBpbnQg
bWVtaWQpCit7CisJc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICpwdG5hOworCXN0cnVj
dCBpZm5ldCAqaWZwID0gYXJnID8gYXJnLT5pZnAgOiBOVUxMOworCWludCBlcnJvcjsKKworCS8q
IGdldCBhbGxvY2F0b3IgKi8KKwlhcmctPm5tX21lbSA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfbmV3
KGlmcCwgbmlmcF9vZmZzZXQsIG1lbWlkKTsKKwlpZiAoYXJnLT5ubV9tZW0gPT0gTlVMTCkKKwkJ
cmV0dXJuIEVOT01FTTsKKwlhcmctPm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CisJZXJyb3Ig
PSBfbmV0bWFwX2F0dGFjaChhcmcsIHNpemVvZihzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0
ZXIpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIGdldCB0aGUgbmV0bWFw
X3B0X2d1ZXN0X2FkYXB0ZXIgKi8KKwlwdG5hID0gKHN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh
cHRlciAqKSBOQShpZnApOworCXB0bmEtPmNzYiA9IGNzYjsKKworCS8qIEluaXRpYWxpemUgYSBz
ZXBhcmF0ZSBwYXNzLXRocm91Z2ggbmV0bWFwIGFkYXB0ZXIgdGhhdCBpcyBnb2luZyB0bworCSAq
IGJlIHVzZWQgYnkgdGhlIHB0bmV0IGRyaXZlciBvbmx5LCBhbmQgc28gbmV2ZXIgZXhwb3NlZCB0
byBuZXRtYXAKKyAgICAgICAgICogYXBwbGljYXRpb25zLiBXZSBvbmx5IG5lZWQgYSBzdWJzZXQg
b2YgdGhlIGF2YWlsYWJsZSBmaWVsZHMuICovCisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9m
KHB0bmEtPmRyKSk7CisJcHRuYS0+ZHIudXAuaWZwID0gaWZwOworCXB0bmEtPmRyLnVwLm5tX21l
bSA9IG5ldG1hcF9tZW1fZ2V0KHB0bmEtPmh3dXAudXAubm1fbWVtKTsKKyAgICAgICAgcHRuYS0+
ZHIudXAubm1fY29uZmlnID0gcHRuYS0+aHd1cC51cC5ubV9jb25maWc7CisKKwlwdG5hLT5iYWNr
ZW5kX3JlZ2lmcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQ
X0dVRVNUICovCisKKwogdm9pZAogTk1fREJHKG5ldG1hcF9hZGFwdGVyX2dldCkoc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpuYSkKIHsKQEAgLTI4NDEsMjggKzMwMDQsMjkgQEAKIG5ldG1hcF9kZXRh
Y2goc3RydWN0IGlmbmV0ICppZnApCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IE5B
KGlmcCk7Ci0JaW50IHNraXA7CiAKIAlpZiAoIW5hKQogCQlyZXR1cm47CiAKLQlza2lwID0gMDsK
IAlOTUdfTE9DSygpOwotCW5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhpZnApOwotCW5hLT5pZnAg
PSBOVUxMOwotCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwluZXRtYXBfc2V0X2Fs
bF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwluYS0+bmFfZmxhZ3MgfD0gTkFGX1pPTUJJRTsK
IAkvKgogCSAqIGlmIHRoZSBuZXRtYXAgYWRhcHRlciBpcyBub3QgbmF0aXZlLCBzb21lYm9keQog
CSAqIGNoYW5nZWQgaXQsIHNvIHdlIGNhbiBub3QgcmVsZWFzZSBpdCBoZXJlLgotCSAqIFRoZSBO
VUxMIG5hLT5pZnAgd2lsbCBub3RpZnkgdGhlIG5ldyBvd25lciB0aGF0CisJICogVGhlIE5BRl9a
T01CSUUgZmxhZyB3aWxsIG5vdGlmeSB0aGUgbmV3IG93bmVyIHRoYXQKIAkgKiB0aGUgZHJpdmVy
IGlzIGdvbmUuCiAJICovCiAJaWYgKG5hLT5uYV9mbGFncyAmIE5BRl9OQVRJVkUpIHsKLQkJc2tp
cCA9IG5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJICAgICAgICBuZXRtYXBfYWRhcHRlcl9wdXQo
bmEpOwogCX0KLQkvKiBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gbm90aWNlICovCi0JaWYgKHNraXAg
PT0gMCkKLQkJbmV0bWFwX2VuYWJsZV9hbGxfcmluZ3MoaWZwKTsKKwkvKiBnaXZlIGFjdGl2ZSB1
c2VycyBhIGNoYW5jZSB0byBub3RpY2UgdGhhdCBOQUZfWk9NQklFIGhhcyBiZWVuCisJICogdHVy
bmVkIG9uLCBzbyB0aGF0IHRoZXkgY2FuIHN0b3AgYW5kIHJldHVybiBhbiBlcnJvciB0byB1c2Vy
c3BhY2UuCisJICogTm90ZSB0aGF0IHRoaXMgYmVjb21lcyBhIE5PUCBpZiB0aGVyZSBhcmUgbm8g
YWN0aXZlIHVzZXJzIGFuZCwKKwkgKiB0aGVyZWZvcmUsIHRoZSBwdXQoKSBhYm92ZSBoYXMgZGVs
ZXRlZCB0aGUgbmEsIHNpbmNlIG5vdyBOQShpZnApIGlzCisJICogTlVMTC4KKwkgKi8KKwluZXRt
YXBfZW5hYmxlX2FsbF9yaW5ncyhpZnApOwogCU5NR19VTkxPQ0soKTsKIH0KIApAQCAtMjg4Myw5
ICszMDQ3LDEwIEBACiBuZXRtYXBfdHJhbnNtaXQoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBt
YnVmICptKQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwotCXN0cnVj
dCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCAqdHhf
a3Jpbmc7CiAJdV9pbnQgbGVuID0gTUJVRl9MRU4obSk7CiAJdV9pbnQgZXJyb3IgPSBFTk9CVUZT
OworCXVuc2lnbmVkIGludCB0eHI7CiAJc3RydWN0IG1icSAqcTsKIAlpbnQgc3BhY2U7CiAKQEAg
LTI5MDAsNiArMzA2NSwxNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJdHhyID0gTUJVRl9UWFEo
bSk7CisJaWYgKHR4ciA+PSBuYS0+bnVtX3R4X3JpbmdzKSB7CisJCXR4ciAlPSBuYS0+bnVtX3R4
X3JpbmdzOworCX0KKwl0eF9rcmluZyA9ICZOTVIobmEsIE5SX1RYKVt0eHJdOworCisJaWYgKHR4
X2tyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCXJldHVybiBNQlVGX1RSQU5T
TUlUKG5hLCBpZnAsIG0pOworCX0KKwogCXEgPSAma3JpbmctPnJ4X3F1ZXVlOwogCiAJLy8gWFhY
IHJlY29uc2lkZXIgbG9uZyBwYWNrZXRzIGlmIHdlIGhhbmRsZSBmcmFnbWVudHMKQEAgLTI5MDks
NiArMzA4NCwxMSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKG5tX29zX21idWZfaGFzX29m
ZmxkKG0pKSB7CisJCVJEKDEsICIlcyBkcm9wIG1idWYgcmVxdWlyaW5nIG9mZmxvYWRpbmdzIiwg
bmEtPm5hbWUpOworCQlnb3RvIGRvbmU7CisJfQorCiAJLyogcHJvdGVjdCBhZ2FpbnN0IHJ4c3lu
Y19mcm9tX2hvc3QoKSwgbmV0bWFwX3N3X3RvX25pYygpCiAJICogYW5kIG1heWJlIG90aGVyIGlu
c3RhbmNlcyBvZiBuZXRtYXBfdHJhbnNtaXQgKHRoZSBsYXR0ZXIKIAkgKiBub3QgcG9zc2libGUg
b24gTGludXgpLgpAQCAtMjk1MSw2ICszMTMxLDggQEAKICAqIG5ldG1hcF9yZXNldCgpIGlzIGNh
bGxlZCBieSB0aGUgZHJpdmVyIHJvdXRpbmVzIHdoZW4gcmVpbml0aWFsaXppbmcKICAqIGEgcmlu
Zy4gVGhlIGRyaXZlciBpcyBpbiBjaGFyZ2Ugb2YgbG9ja2luZyB0byBwcm90ZWN0IHRoZSBrcmlu
Zy4KICAqIElmIG5hdGl2ZSBuZXRtYXAgbW9kZSBpcyBub3Qgc2V0IGp1c3QgcmV0dXJuIE5VTEwu
CisgKiBJZiBuYXRpdmUgbmV0bWFwIG1vZGUgaXMgc2V0LCBpbiBwYXJ0aWN1bGFyLCB3ZSBoYXZl
IHRvIHNldCBucl9tb2RlIHRvCisgKiBOS1JfTkVUTUFQX09OLgogICovCiBzdHJ1Y3QgbmV0bWFw
X3Nsb3QgKgogbmV0bWFwX3Jlc2V0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGVudW0gdHhy
eCB0eCwgdV9pbnQgbiwKQEAgLTI5NzUsMTMgKzMxNTcsMjYgQEAKIAlpZiAodHggPT0gTlJfVFgp
IHsKIAkJaWYgKG4gPj0gbmEtPm51bV90eF9yaW5ncykKIAkJCXJldHVybiBOVUxMOworCiAJCWty
aW5nID0gbmEtPnR4X3JpbmdzICsgbjsKKworCQlpZiAoa3JpbmctPm5yX3BlbmRpbmdfbW9kZSA9
PSBOS1JfTkVUTUFQX09GRikgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK
KwkJCXJldHVybiBOVUxMOworCQl9CisKIAkJLy8gWFhYIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxk
IHVzZSBod2N1ciBvciByY3VyCiAJCW5ld19od29mcyA9IGtyaW5nLT5ucl9od2N1ciAtIG5ld19j
dXI7CiAJfSBlbHNlIHsKIAkJaWYgKG4gPj0gbmEtPm51bV9yeF9yaW5ncykKIAkJCXJldHVybiBO
VUxMOwogCQlrcmluZyA9IG5hLT5yeF9yaW5ncyArIG47CisKKwkJaWYgKGtyaW5nLT5ucl9wZW5k
aW5nX21vZGUgPT0gTktSX05FVE1BUF9PRkYpIHsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05F
VE1BUF9PRkY7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCiAJCW5ld19od29mcyA9IGtyaW5nLT5u
cl9od3RhaWwgLSBuZXdfY3VyOwogCX0KIAlsaW0gPSBrcmluZy0+bmtyX251bV9zbG90cyAtIDE7
CkBAIC0zMDE4LDYgKzMyMTMsNyBAQAogCSAqIFdlIGRvIHRoZSB3YWtldXAgaGVyZSwgYnV0IHRo
ZSByaW5nIGlzIG5vdCB5ZXQgcmVjb25maWd1cmVkLgogCSAqIEhvd2V2ZXIsIHdlIGFyZSB1bmRl
ciBsb2NrIHNvIHRoZXJlIGFyZSBubyByYWNlcy4KIAkgKi8KKwlrcmluZy0+bnJfbW9kZSA9IE5L
Ul9ORVRNQVBfT047CiAJa3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CiAJcmV0dXJuIGtyaW5n
LT5yaW5nLT5zbG90OwogfQpAQCAtMzAzNywxMCArMzIzMyw5IEBACiAgKiAtIGZvciBhIG5pYyBj
b25uZWN0ZWQgdG8gYSBzd2l0Y2gsIGNhbGwgdGhlIHByb3BlciBmb3J3YXJkaW5nIHJvdXRpbmUK
ICAqICAgKHNlZSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkpCiAgKi8KLXZvaWQKLW5ldG1hcF9j
b21tb25faXJxKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQor
aW50CituZXRtYXBfY29tbW9uX2lycShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBx
LCB1X2ludCAqd29ya19kb25lKQogewotCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShp
ZnApOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOwogCWVudW0gdHhyeCB0ID0gKHdvcmtf
ZG9uZSA/IE5SX1JYIDogTlJfVFgpOwogCkBAIC0zMDUxLDE1ICszMjQ2LDIwIEBACiAJfQogCiAJ
aWYgKHEgPj0gbm1hX2dldF9ucmluZ3MobmEsIHQpKQotCQlyZXR1cm47CS8vIG5vdCBhIHBoeXNp
Y2FsIHF1ZXVlCisJCXJldHVybiBOTV9JUlFfUEFTUzsgLy8gbm90IGEgcGh5c2ljYWwgcXVldWUK
IAogCWtyaW5nID0gTk1SKG5hLCB0KSArIHE7CiAKKwlpZiAoa3JpbmctPm5yX21vZGUgPT0gTktS
X05FVE1BUF9PRkYpIHsKKwkJcmV0dXJuIE5NX0lSUV9QQVNTOworCX0KKwogCWlmICh0ID09IE5S
X1JYKSB7CiAJCWtyaW5nLT5ucl9rZmxhZ3MgfD0gTktSX1BFTkRJTlRSOwkvLyBYWFggYXRvbWlj
ID8KIAkJKndvcmtfZG9uZSA9IDE7IC8qIGRvIG5vdCBmaXJlIG5hcGkgYWdhaW4gKi8KIAl9Ci0J
a3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CisKKwlyZXR1cm4ga3JpbmctPm5tX25vdGlmeShr
cmluZywgMCk7CiB9CiAKIApAQCAtMzA2NywxNyArMzI2NywxNyBAQAogICogRGVmYXVsdCBmdW5j
dGlvbnMgdG8gaGFuZGxlIHJ4L3R4IGludGVycnVwdHMgZnJvbSBhIHBoeXNpY2FsIGRldmljZS4K
ICAqICJ3b3JrX2RvbmUiIGlzIG5vbi1udWxsIG9uIHRoZSBSWCBwYXRoLCBOVUxMIGZvciB0aGUg
VFggcGF0aC4KICAqCi0gKiBJZiB0aGUgY2FyZCBpcyBub3QgaW4gbmV0bWFwIG1vZGUsIHNpbXBs
eSByZXR1cm4gMCwKKyAqIElmIHRoZSBjYXJkIGlzIG5vdCBpbiBuZXRtYXAgbW9kZSwgc2ltcGx5
IHJldHVybiBOTV9JUlFfUEFTUywKICAqIHNvIHRoYXQgdGhlIGNhbGxlciBwcm9jZWVkcyB3aXRo
IHJlZ3VsYXIgcHJvY2Vzc2luZy4KLSAqIE90aGVyd2lzZSBjYWxsIG5ldG1hcF9jb21tb25faXJx
KCkgYW5kIHJldHVybiAxLgorICogT3RoZXJ3aXNlIGNhbGwgbmV0bWFwX2NvbW1vbl9pcnEoKS4K
ICAqCiAgKiBJZiB0aGUgY2FyZCBpcyBjb25uZWN0ZWQgdG8gYSBuZXRtYXAgZmlsZSBkZXNjcmlw
dG9yLAogICogZG8gYSBzZWx3YWtldXAgb24gdGhlIGluZGl2aWR1YWwgcXVldWUsIHBsdXMgb25l
IG9uIHRoZSBnbG9iYWwgb25lCiAgKiBpZiBuZWVkZWQgKG11bHRpcXVldWUgY2FyZCBfYW5kXyB0
aGVyZSBhcmUgbXVsdGlxdWV1ZSBsaXN0ZW5lcnMpLAotICogYW5kIHJldHVybiAxLgorICogYW5k
IHJldHVybiBOUl9JUlFfQ09NUExFVEVELgogICoKICAqIEZpbmFsbHksIGlmIGNhbGxlZCBvbiBy
eCBmcm9tIGFuIGludGVyZmFjZSBjb25uZWN0ZWQgdG8gYSBzd2l0Y2gsCi0gKiBjYWxscyB0aGUg
cHJvcGVyIGZvcndhcmRpbmcgcm91dGluZSwgYW5kIHJldHVybiAxLgorICogY2FsbHMgdGhlIHBy
b3BlciBmb3J3YXJkaW5nIHJvdXRpbmUuCiAgKi8KIGludAogbmV0bWFwX3J4X2lycShzdHJ1Y3Qg
aWZuZXQgKmlmcCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKQEAgLTMwOTEsMTUgKzMyOTEs
MTQgQEAKIAkgKiBubV9uYXRpdmVfb24oKSBoZXJlLgogCSAqLwogCWlmICghbm1fbmV0bWFwX29u
KG5hKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAogCWlmIChuYS0+bmFf
ZmxhZ3MgJiBOQUZfU0tJUF9JTlRSKSB7CiAJCU5EKCJ1c2UgcmVndWxhciBpbnRlcnJ1cHQiKTsK
LQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAl9CiAKLQluZXRtYXBfY29tbW9u
X2lycShpZnAsIHEsIHdvcmtfZG9uZSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIG5ldG1hcF9jb21t
b25faXJxKG5hLCBxLCB3b3JrX2RvbmUpOwogfQogCiAKQEAgLTMxMjAsOSArMzMxOSwxMSBAQAog
dm9pZAogbmV0bWFwX2Zpbmkodm9pZCkKIHsKLQluZXRtYXBfdW5pbml0X2JyaWRnZXMoKTsKIAlp
ZiAobmV0bWFwX2RldikKIAkJZGVzdHJveV9kZXYobmV0bWFwX2Rldik7CisJLyogd2UgYXNzdW1l
IHRoYXQgdGhlcmUgYXJlIG5vIGxvbmdlciBuZXRtYXAgdXNlcnMgKi8KKwlubV9vc19pZm5ldF9m
aW5pKCk7CisJbmV0bWFwX3VuaW5pdF9icmlkZ2VzKCk7CiAJbmV0bWFwX21lbV9maW5pKCk7CiAJ
Tk1HX0xPQ0tfREVTVFJPWSgpOwogCXByaW50ZigibmV0bWFwOiB1bmxvYWRlZCBtb2R1bGUuXG4i
KTsKQEAgLTMxNTUsOSArMzM1NiwxMyBAQAogCQlnb3RvIGZhaWw7CiAKICNpZmRlZiBfX0ZyZWVC
U0RfXwotCW5tX3ZpX2luaXRfaW5kZXgoKTsKKwlubV9vc192aV9pbml0X2luZGV4KCk7CiAjZW5k
aWYKIAorCWVycm9yID0gbm1fb3NfaWZuZXRfaW5pdCgpOworCWlmIChlcnJvcikKKwkJZ290byBm
YWlsOworCiAJcHJpbnRmKCJuZXRtYXA6IGxvYWRlZCBtb2R1bGVcbiIpOwogCXJldHVybiAoMCk7
CiBmYWlsOgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2ZyZWVi
c2QuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZnJlZWJzZC5jCi0tLSB1c3Ivc3Jj
L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJ
MjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDg3MTAwMDAgKzAwMDAKQEAgLTIzLDE4ICsyMywxOSBAQAog
ICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgMjg1Njk5IDIwMTUtMDctMTkgMTg6MDc6MjVaIGx1aWdp
ICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMg
MzA3NzA2IDIwMTYtMTAtMjEgMDY6MzI6NDVaIHNlcGhlICQgKi8KICNpbmNsdWRlICJvcHRfaW5l
dC5oIgogI2luY2x1ZGUgIm9wdF9pbmV0Ni5oIgogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogI2luY2x1ZGUg
PHN5cy9lcnJuby5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgLyogZGVmaW5lcyB1c2VkIGlu
IGtlcm5lbC5oICovCisjaW5jbHVkZSA8c3lzL2phaWwuaD4KICNpbmNsdWRlIDxzeXMvcG9sbC5o
PiAgLyogUE9MTElOLCBQT0xMT1VUICovCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPiAvKiB0eXBl
cyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotI2luY2x1ZGUgPHN5cy9jb25mLmg+
CS8qIERFVl9NT0RVTEUgKi8KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgkvKiBERVZfTU9EVUxFX09S
REVSRUQgKi8KICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGxz
dWJyLmg+IC8qIGtlcm5faW9jdGwoKSAqLwogCiAjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgogCkBA
IC01MCw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+IC8qIHNvY2thZGRycyAqLwogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5j
bHVkZSA8c3lzL2t0aHJlYWQuaD4gLyoga3RocmVhZF9hZGQoKSAqLworI2luY2x1ZGUgPHN5cy9w
cm9jLmg+IC8qIFBST0NfTE9DSygpICovCisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPiAvKiBSRk5P
V0FJVCAqLworI2luY2x1ZGUgPHN5cy9zY2hlZC5oPiAvKiBzY2hlZF9iaW5kKCkgKi8KKyNpbmNs
dWRlIDxzeXMvc21wLmg+IC8qIG1wX21heGlkICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjaW5j
bHVkZSA8bmV0L2lmX3Zhci5oPgogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPiAvKiBJRlRfRVRI
RVIgKi8KQEAgLTYxLDEzICs2NywxMTIgQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNp
bmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92
aXJ0Lmg+CiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgogCiAKIC8qID09PT09
PT09PT09PT09PT09PT09PT09PSBGUkVFQlNELVNQRUNJRklDIFJPVVRJTkVTID09PT09PT09PT09
PT09PT09PSAqLwogCit2b2lkIG5tX29zX3NlbGluZm9faW5pdChOTV9TRUxJTkZPX1QgKnNpKSB7
CisJc3RydWN0IG10eCAqbSA9ICZzaS0+bTsKKwltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5V
TEwsIE1UWF9ERUYpOworCWtubGlzdF9pbml0X210eCgmc2ktPnNpLnNpX25vdGUsIG0pOworfQor
Cit2b2lkCitubV9vc19zZWxpbmZvX3VuaW5pdChOTV9TRUxJTkZPX1QgKnNpKQoreworCS8qIFhY
WCBrcXVldWUoOSkgbmVlZGVkOyB0aGVzZSB3aWxsIG1pcnJvciBrbmxpc3RfaW5pdC4gKi8KKwlr
bmxpc3RfZGVsZXRlKCZzaS0+c2kuc2lfbm90ZSwgY3VydGhyZWFkLCAwIC8qIG5vdCBsb2NrZWQg
Ki8gKTsKKwlrbmxpc3RfZGVzdHJveSgmc2ktPnNpLnNpX25vdGUpOworCS8qIG5vdyB3ZSBkb24n
dCBuZWVkIHRoZSBtdXRleCBhbnltb3JlICovCisJbXR4X2Rlc3Ryb3koJnNpLT5tKTsKK30KKwor
dm9pZCAqCitubV9vc19tYWxsb2Moc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIG1hbGxvYyhzaXpl
LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworfQorCit2b2lkICoKK25tX29zX3JlYWxs
b2Modm9pZCAqYWRkciwgc2l6ZV90IG5ld19zaXplLCBzaXplX3Qgb2xkX3NpemUgX191bnVzZWQp
Cit7CisJcmV0dXJuIHJlYWxsb2MoYWRkciwgbmV3X3NpemUsIE1fREVWQlVGLCBNX05PV0FJVCB8
IE1fWkVSTyk7CQorfQorCit2b2lkCitubV9vc19mcmVlKHZvaWQgKmFkZHIpCit7CisJZnJlZShh
ZGRyLCBNX0RFVkJVRik7Cit9CisKK3ZvaWQKK25tX29zX2lmbmV0X2xvY2sodm9pZCkKK3sKKwlJ
Rk5FVF9XTE9DSygpOworfQorCit2b2lkCitubV9vc19pZm5ldF91bmxvY2sodm9pZCkKK3sKKwlJ
Rk5FVF9XVU5MT0NLKCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0bWFwX3VzZV9jb3VudCA9IDA7CisK
K3ZvaWQKK25tX29zX2dldF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50Kys7Cit9
CisKK3ZvaWQKK25tX29zX3B1dF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50LS07
Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfaWZuZXRfYXJyaXZhbF9oYW5kbGVyKHZvaWQgKmFy
ZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5ldG1hcF91bmRvX3pv
bWJpZShpZnApOworfQorCitzdGF0aWMgdm9pZAorbmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5k
bGVyKHZvaWQgKmFyZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5l
dG1hcF9tYWtlX3pvbWJpZShpZnApOworfQorCitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9p
Zm5ldF9haF90YWc7CitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9pZm5ldF9kaF90YWc7CisK
K2ludAorbm1fb3NfaWZuZXRfaW5pdCh2b2lkKQoreworICAgICAgICBubV9pZm5ldF9haF90YWcg
PQorICAgICAgICAgICAgICAgIEVWRU5USEFORExFUl9SRUdJU1RFUihpZm5ldF9hcnJpdmFsX2V2
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgbmV0bWFwX2lmbmV0X2Fycml2YWxfaGFuZGxl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsK
KyAgICAgICAgbm1faWZuZXRfZGhfdGFnID0KKyAgICAgICAgICAgICAgICBFVkVOVEhBTkRMRVJf
UkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
bmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwgRVZFTlRIQU5ETEVSX1BSSV9BTlkpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9p
ZAorbm1fb3NfaWZuZXRfZmluaSh2b2lkKQoreworICAgICAgICBFVkVOVEhBTkRMRVJfREVSRUdJ
U1RFUihpZm5ldF9hcnJpdmFsX2V2ZW50LAorICAgICAgICAgICAgICAgIG5tX2lmbmV0X2FoX3Rh
Zyk7CisgICAgICAgIEVWRU5USEFORExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVu
dCwKKyAgICAgICAgICAgICAgICBubV9pZm5ldF9kaF90YWcpOworfQorCiByYXdzdW1fdAotbm1f
Y3N1bV9yYXcodWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSkKK25t
X29zX2NzdW1fcmF3KHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4sIHJhd3N1bV90IGN1cl9zdW0p
CiB7CiAJLyogVE9ETyBYWFggcGxlYXNlIHVzZSB0aGUgRnJlZUJTRCBpbXBsZW1lbnRhdGlvbiBm
b3IgdGhpcy4gKi8KIAl1aW50MTZfdCAqd29yZHMgPSAodWludDE2X3QgKilkYXRhOwpAQCAtODcs
NyArMTkyLDcgQEAKICAqIHJldHVybiB2YWx1ZSBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAg
Ki8KIHVpbnQxNl90Ci1ubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSkKK25tX29zX2NzdW1f
Zm9sZChyYXdzdW1fdCBjdXJfc3VtKQogewogCS8qIFRPRE8gWFhYIHBsZWFzZSB1c2UgdGhlIEZy
ZWVCU0QgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMuICovCiAJd2hpbGUgKGN1cl9zdW0gPj4gMTYp
CkBAIC05NiwxNyArMjAxLDE3IEBACiAJcmV0dXJuIGh0b2JlMTYoKH5jdXJfc3VtKSAmIDB4RkZG
Rik7CiB9CiAKLXVpbnQxNl90IG5tX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKK3Vp
bnQxNl90IG5tX29zX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKIHsKICNpZiAwCiAJ
cmV0dXJuIGluX2Nrc3VtX2hkcigodm9pZCAqKWlwaCk7CiAjZWxzZQotCXJldHVybiBubV9jc3Vt
X2ZvbGQobm1fY3N1bV9yYXcoKHVpbnQ4X3QqKWlwaCwgc2l6ZW9mKHN0cnVjdCBubV9pcGhkciks
IDApKTsKKwlyZXR1cm4gbm1fb3NfY3N1bV9mb2xkKG5tX29zX2NzdW1fcmF3KCh1aW50OF90Kilp
cGgsIHNpemVvZihzdHJ1Y3Qgbm1faXBoZHIpLCAwKSk7CiAjZW5kaWYKIH0KIAogdm9pZAotbm1f
Y3N1bV90Y3B1ZHBfaXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCwgdm9pZCAqZGF0YSwKK25tX29z
X2NzdW1fdGNwdWRwX2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgsIHZvaWQgKmRhdGEsCiAJCQkJ
CXNpemVfdCBkYXRhbGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVApAQCAtMTE4
LDcgKzIyMyw3IEBACiAJLyogQ29tcHV0ZSB0aGUgY2hlY2tzdW0gb24gVENQL1VEUCBoZWFkZXIg
KyBwYXlsb2FkCiAJICogKGluY2x1ZGVzIHRoZSBwc2V1ZG8taGVhZGVyKS4KIAkgKi8KLQkqY2hl
Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj
ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg
ewpAQCAtMTI5LDEyICsyMzQsMTIgQEAKIH0KIAogdm9pZAotbm1fY3N1bV90Y3B1ZHBfaXB2Nihz
dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK25tX29zX2NzdW1fdGNwdWRwX2lw
djYoc3RydWN0IG5tX2lwdjZoZHIgKmlwNmgsIHZvaWQgKmRhdGEsCiAJCQkJCXNpemVfdCBkYXRh
bGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVDYKIAkqY2hlY2sgPSBpbjZfY2tz
dW1fcHNldWRvKCh2b2lkKilpcDZoLCBkYXRhbGVuLCBpcDZoLT5uZXh0aGRyLCAwKTsKLQkqY2hl
Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj
ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg
ewpAQCAtMTQ0LDEzICsyNDksNDEgQEAKICNlbmRpZgogfQogCisvKiBvbiBGcmVlQlNEIHdlIHNl
bmQgdXAgb25lIHBhY2tldCBhdCBhIHRpbWUgKi8KK3ZvaWQgKgorbm1fb3Nfc2VuZF91cChzdHJ1
Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpwcmV2KQoreworCisJ
TkEoaWZwKS0+aWZfaW5wdXQoaWZwLCBtKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50CitubV9v
c19tYnVmX2hhc19vZmZsZChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlyZXR1cm4gbS0+bV9wa3RoZHIu
Y3N1bV9mbGFncyAmIChDU1VNX1RDUCB8IENTVU1fVURQIHwgQ1NVTV9TQ1RQIHwKKwkJCQkJIENT
VU1fVENQX0lQVjYgfCBDU1VNX1VEUF9JUFY2IHwKKwkJCQkJIENTVU1fU0NUUF9JUFY2IHwgQ1NV
TV9UU08pOworfQorCitzdGF0aWMgdm9pZAorZnJlZWJzZF9nZW5lcmljX3J4X2hhbmRsZXIoc3Ry
dWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJp
Y19hZGFwdGVyICpnbmEgPQorCQkJKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopTkEo
aWZwKTsKKwlpbnQgc3RvbGVuID0gZ2VuZXJpY19yeF9oYW5kbGVyKGlmcCwgbSk7CisKKwlpZiAo
IXN0b2xlbikgeworCQlnbmEtPnNhdmVfaWZfaW5wdXQoaWZwLCBtKTsKKwl9Cit9CiAKIC8qCiAg
KiBJbnRlcmNlcHQgdGhlIHJ4IHJvdXRpbmUgaW4gdGhlIHN0YW5kYXJkIGRldmljZSBkcml2ZXIu
CiAgKiBTZWNvbmQgYXJndW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3Rv
cmUKICAqLwogaW50Ci1uZXRtYXBfY2F0Y2hfcngoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0
ZXIgKmduYSwgaW50IGludGVyY2VwdCkKK25tX29zX2NhdGNoX3J4KHN0cnVjdCBuZXRtYXBfZ2Vu
ZXJpY19hZGFwdGVyICpnbmEsIGludCBpbnRlcmNlcHQpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFw
dGVyICpuYSA9ICZnbmEtPnVwLnVwOwogCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlmcDsKQEAg
LTE2MSw3ICsyOTQsNyBAQAogCQkJcmV0dXJuIEVJTlZBTDsgLyogYWxyZWFkeSBzZXQgKi8KIAkJ
fQogCQlnbmEtPnNhdmVfaWZfaW5wdXQgPSBpZnAtPmlmX2lucHV0OwotCQlpZnAtPmlmX2lucHV0
ID0gZ2VuZXJpY19yeF9oYW5kbGVyOworCQlpZnAtPmlmX2lucHV0ID0gZnJlZWJzZF9nZW5lcmlj
X3J4X2hhbmRsZXI7CiAJfSBlbHNlIHsKIAkJaWYgKCFnbmEtPnNhdmVfaWZfaW5wdXQpewogCQkJ
RCgiY2Fubm90IHJlc3RvcmUiKTsKQEAgLTE4MSwxOCArMzE0LDIwIEBACiAgKiBTZWNvbmQgYXJn
dW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3RvcmUuCiAgKiBPbiBmcmVl
YnNkIHdlIGp1c3QgaW50ZXJjZXB0IGlmX3RyYW5zbWl0LgogICovCi12b2lkCi1uZXRtYXBfY2F0
Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50IGVuYWJsZSkKK2lu
dAorbm1fb3NfY2F0Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50
IGludGVyY2VwdCkKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gJmduYS0+dXAudXA7
CiAJc3RydWN0IGlmbmV0ICppZnAgPSBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoZ25hKTsKIAotCWlm
IChlbmFibGUpIHsKKwlpZiAoaW50ZXJjZXB0KSB7CiAJCW5hLT5pZl90cmFuc21pdCA9IGlmcC0+
aWZfdHJhbnNtaXQ7CiAJCWlmcC0+aWZfdHJhbnNtaXQgPSBuZXRtYXBfdHJhbnNtaXQ7CiAJfSBl
bHNlIHsKIAkJaWZwLT5pZl90cmFuc21pdCA9IG5hLT5pZl90cmFuc21pdDsKIAl9CisKKwlyZXR1
cm4gMDsKIH0KIAogCkBAIC0yMTMsNDAgKzM0OCw0NCBAQAogICoKICAqLwogaW50Ci1nZW5lcmlj
X3htaXRfZnJhbWUoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptLAotCXZvaWQgKmFk
ZHIsIHVfaW50IGxlbiwgdV9pbnQgcmluZ19ucikKK25tX29zX2dlbmVyaWNfeG1pdF9mcmFtZShz
dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyAqYSkKIHsKIAlpbnQgcmV0OworCXVfaW50IGxlbiA9IGEtPmxl
bjsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IGEtPmlmcDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9IGEtPm07
CiAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDExMDAwMDAKIAkvKgotCSAqIFRoZSBtYnVmIHNo
b3VsZCBiZSBhIGNsdXN0ZXIgZnJvbSBvdXIgc3BlY2lhbCBwb29sLAotCSAqIHNvIHdlIGRvIG5v
dCBuZWVkIHRvIGRvIGFuIG1fY29weWJhY2sgYnV0IGp1c3QgY29weQotCSAqIChhbmQgZXZlbnR1
YWxseSwganVzdCByZWZlcmVuY2UgdGhlIG5ldG1hcCBidWZmZXIpCisJICogT2xkIEZyZWVCU0Qg
dmVyc2lvbnMuIFRoZSBtYnVmIGhhcyBhIGNsdXN0ZXIgYXR0YWNoZWQsCisJICogd2UgbmVlZCB0
byBjb3B5IGZyb20gdGhlIGNsdXN0ZXIgdG8gdGhlIG5ldG1hcCBidWZmZXIuCiAJICovCi0KLQlp
ZiAoR0VUX01CVUZfUkVGQ05UKG0pICE9IDEpIHsKLQkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9y
ICVwIiwKLQkJCUdFVF9NQlVGX1JFRkNOVChtKSwgbSk7CisJaWYgKE1CVUZfUkVGQ05UKG0pICE9
IDEpIHsKKwkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9yICVwIiwgTUJVRl9SRUZDTlQobSksIG0p
OwogCQlwYW5pYygiaW4gZ2VuZXJpY194bWl0X2ZyYW1lIik7CiAJfQotCS8vIFhYWCB0aGUgZXh0
X3NpemUgY2hlY2sgaXMgdW5uZWNlc3NhcnkgaWYgd2UgbGluayB0aGUgbmV0bWFwIGJ1ZgogCWlm
IChtLT5tX2V4dC5leHRfc2l6ZSA8IGxlbikgewogCQlSRCg1LCAic2l6ZSAlZCA8IGxlbiAlZCIs
IG0tPm1fZXh0LmV4dF9zaXplLCBsZW4pOwogCQlsZW4gPSBtLT5tX2V4dC5leHRfc2l6ZTsKIAl9
Ci0JaWYgKDApIHsgLyogWFhYIHNlZW1zIHRvIGhhdmUgbmVnbGlnaWJsZSBiZW5lZml0cyAqLwot
CQltLT5tX2V4dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYWRkcjsKLQl9IGVsc2UgewotCQliY29w
eShhZGRyLCBtLT5tX2RhdGEsIGxlbik7Ci0JfQorCWJjb3B5KGEtPmFkZHIsIG0tPm1fZGF0YSwg
bGVuKTsKKyNlbHNlICAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisJLyogTmV3
IEZyZWVCU0QgdmVyc2lvbnMuIExpbmsgdGhlIGV4dGVybmFsIHN0b3JhZ2UgdG8KKwkgKiB0aGUg
bmV0bWFwIGJ1ZmZlciwgc28gdGhhdCBubyBjb3B5IGlzIG5lY2Vzc2FyeS4gKi8KKwltLT5tX2V4
dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYS0+YWRkcjsKKwltLT5tX2V4dC5leHRfc2l6ZSA9IGxl
bjsKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKIAltLT5tX2xl
biA9IG0tPm1fcGt0aGRyLmxlbiA9IGxlbjsKLQkvLyBpbmMgcmVmY291bnQuIEFsbCBvdXJzLCB3
ZSBjb3VsZCBza2lwIHRoZSBhdG9taWMKLQlhdG9taWNfZmV0Y2hhZGRfaW50KFBOVF9NQlVGX1JF
RkNOVChtKSwgMSk7CisKKwkvKiBtYnVmIHJlZmNudCBpcyBub3QgY29udGVuZGVkLCBubyBuZWVk
IHRvIHVzZSBhdG9taWMKKwkgKiAoYSBtZW1vcnkgYmFycmllciBpcyBlbm91Z2gpLiAqLworCVNF
VF9NQlVGX1JFRkNOVChtLCAyKTsKIAlNX0hBU0hUWVBFX1NFVChtLCBNX0hBU0hUWVBFX09QQVFV
RSk7Ci0JbS0+bV9wa3RoZHIuZmxvd2lkID0gcmluZ19ucjsKKwltLT5tX3BrdGhkci5mbG93aWQg
PSBhLT5yaW5nX25yOwogCW0tPm1fcGt0aGRyLnJjdmlmID0gaWZwOyAvKiB1c2VkIGZvciB0eCBu
b3RpZmljYXRpb24gKi8KIAlyZXQgPSBOQShpZnApLT5pZl90cmFuc21pdChpZnAsIG0pOwotCXJl
dHVybiByZXQ7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKIH0KIAogCkBAIC0yNjMsNyArNDAyLDcg
QEAKICAqIHdheSB0byBleHRyYWN0IHRoZSBpbmZvIGZyb20gdGhlIGlmcAogICovCiBpbnQKLWdl
bmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwg
dW5zaWduZWQgaW50ICpyeCkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZu
ZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKIHsKIAlEKCJjYWxs
ZWQsIGluIHR4ICVkIHJ4ICVkIiwgKnR4LCAqcngpOwogCXJldHVybiAwOwpAQCAtMjcxLDE2ICs0
MTAsMjMgQEAKIAogCiB2b2lkCi1nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQg
KmlmcCwgdV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fcXVl
dWVzKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCAqdHhxLCB1X2ludCAqcnhxKQogewogCUQoImNh
bGxlZCwgaW4gdHhxICVkIHJ4cSAlZCIsICp0eHEsICpyeHEpOwogCSp0eHEgPSBuZXRtYXBfZ2Vu
ZXJpY19yaW5nczsKIAkqcnhxID0gbmV0bWFwX2dlbmVyaWNfcmluZ3M7CiB9CiAKK3ZvaWQKK25t
X29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpn
bmEpCit7CisKKwlnbmEtPnJ4c2cgPSAxOyAvKiBTdXBwb3J0ZWQgdGhyb3VnaCBtX2NvcHlkYXRh
LiAqLworCWduYS0+dHhxZGlzYyA9IDA7IC8qIE5vdCBzdXBwb3J0ZWQuICovCit9CiAKIHZvaWQK
LW5ldG1hcF9taXRpZ2F0aW9uX2luaXQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBp
ZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCitubV9vc19taXRpZ2F0aW9uX2luaXQoc3Ry
dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBpZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq
bmEpCiB7CiAJTkQoImNhbGxlZCIpOwogCW1pdC0+bWl0X3BlbmRpbmcgPSAwOwpAQCAtMjkwLDIx
ICs0MzYsMjEgQEAKIAogCiB2b2lkCi1uZXRtYXBfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f
Z2VuZXJpY19taXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVy
aWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogfQogCiAKIHZvaWQKLW5ldG1hcF9taXRp
Z2F0aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCitubV9vc19taXRpZ2F0
aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIp
OwogfQogCiAKIGludAotbmV0bWFwX21pdGlnYXRpb25fYWN0aXZlKHN0cnVjdCBubV9nZW5lcmlj
X21pdCAqbWl0KQorbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVyaWNfbWl0
ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogCXJldHVybiAwOwpAQCAtMzEyLDcgKzQ1OCw3IEBA
CiAKIAogdm9pZAotbmV0bWFwX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19t
aXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQg
Km1pdCkKIHsKIAlORCgiY2FsbGVkIik7CiB9CkBAIC0zNDIsNyArNDg4LDcgQEAKIH0gbm1fdmlf
aW5kaWNlczsKIAogdm9pZAotbm1fdmlfaW5pdF9pbmRleCh2b2lkKQorbm1fb3NfdmlfaW5pdF9p
bmRleCh2b2lkKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBOTV9WSV9NQVg7IGkrKykK
QEAgLTM5OCw3ICs1NDQsNyBAQAogICogaW5jcmVtZW50IHRoaXMgcmVmY291bnQgb24gaWZfYXR0
YWNoKCkuCiAgKi8KIGludAotbm1fdmlfcGVyc2lzdChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qg
aWZuZXQgKipyZXQpCitubV9vc192aV9wZXJzaXN0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBp
Zm5ldCAqKnJldCkKIHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcDsKIAl1X3Nob3J0IG1hY2FkZHJfaGk7
CkBAIC00MzgsMTUgKzU4NCwyMTUgQEAKIAkqcmV0ID0gaWZwOwogCXJldHVybiAwOwogfQorCiAv
KiB1bnJlZ2lzdGVyIGZyb20gdGhlIHN5c3RlbSBhbmQgZHJvcCB0aGUgZmluYWwgcmVmY291bnQg
Ki8KIHZvaWQKLW5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkKK25tX29zX3ZpX2RldGFj
aChzdHJ1Y3QgaWZuZXQgKmlmcCkKIHsKIAlubV92aV9mcmVlX2luZGV4KCgoY2hhciAqKUlGX0xM
QUREUihpZnApKVs1XSk7CiAJZXRoZXJfaWZkZXRhY2goaWZwKTsKIAlpZl9mcmVlKGlmcCk7CiB9
CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PSBQVE5FVE1BUCBTVVBQT1JUID09PT09PT09
PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisjaW5j
bHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9idXMuaD4gICAgICAgIC8qIGJ1c19kbWFtYXBfKiAqLworI2luY2x1ZGUgPG1hY2hpbmUvcmVz
b3VyY2UuaD4KKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1ZGUgPGRldi9wY2kv
cGNpcmVnLmg+CisvKgorICogcHRuZXRtYXAgbWVtb3J5IGRldmljZSAobWVtZGV2KSBmb3IgZnJl
ZWJzZCBndWVzdCwKKyAqIHNzZWQgdG8gZXhwb3NlIGhvc3QgbmV0bWFwIG1lbW9yeSB0byB0aGUg
Z3Vlc3QgdGhyb3VnaCBhIFBDSSBCQVIuCisgKi8KKworLyoKKyAqIHB0bmV0bWFwIG1lbWRldiBw
cml2YXRlIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXYgeworCWRl
dmljZV90IGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9pbzsKKwlzdHJ1Y3QgcmVzb3VyY2Ug
KnBjaV9tZW07CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVtOworfTsKKworc3RhdGljIGlu
dAlwdG5fbWVtZGV2X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuX21lbWRldl9hdHRh
Y2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5fbWVtZGV2X2RldGFjaChkZXZpY2VfdCk7Citz
dGF0aWMgaW50CXB0bl9tZW1kZXZfc2h1dGRvd24oZGV2aWNlX3QpOworCitzdGF0aWMgZGV2aWNl
X21ldGhvZF90IHB0bl9tZW1kZXZfbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfcHJv
YmUsIHB0bl9tZW1kZXZfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBwdG5fbWVt
ZGV2X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIHB0bl9tZW1kZXZfZGV0YWNo
KSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBwdG5fbWVtZGV2X3NodXRkb3duKSwKKwlE
RVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJpdmVyX3QgcHRuX21lbWRldl9kcml2ZXIgPSB7
CisJUFRORVRNQVBfTUVNREVWX05BTUUsCisJcHRuX21lbWRldl9tZXRob2RzLAorCXNpemVvZihz
dHJ1Y3QgcHRuZXRtYXBfbWVtZGV2KSwKK307CisKKy8qIFdlIHVzZSAoU0lfT1JERVJfTUlERExF
KzEpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9uCisgKiBiZWxvdy4g
Ki8KK3N0YXRpYyBkZXZjbGFzc190IHB0bmV0bWFwX2RldmNsYXNzOworRFJJVkVSX01PRFVMRV9P
UkRFUkVEKHB0bl9tZW1kZXYsIHBjaSwgcHRuX21lbWRldl9kcml2ZXIsIHB0bmV0bWFwX2RldmNs
YXNzLAorCQkgICAgICBOVUxMLCBOVUxMLCBTSV9PUkRFUl9NSURETEUgKyAxKTsKKworLyoKKyAq
IE1hcCBob3N0IG5ldG1hcCBtZW1vcnkgdGhyb3VnaCBQQ0ktQkFSIGluIHRoZSBndWVzdCBPUywK
KyAqIHJldHVybmluZyBwaHlzaWNhbCAobm1fcGFkZHIpIGFuZCB2aXJ0dWFsIChubV9hZGRyKSBh
ZGRyZXNzZXMKKyAqIG9mIHRoZSBuZXRtYXAgbWVtb3J5IG1hcHBlZCBpbiB0aGUgZ3Vlc3QuCisg
Ki8KK2ludAorbm1fb3NfcHRfbWVtZGV2X2lvbWFwKHN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0
bl9kZXYsIHZtX3BhZGRyX3QgKm5tX3BhZGRyLAorCQkgICAgICB2b2lkICoqbm1fYWRkciwgdWlu
dDY0X3QgKm1lbV9zaXplKQoreworCWludCByaWQ7CisKKwlEKCJwdG5fbWVtZGV2X2RyaXZlciBp
b21hcCIpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfTUVNX1BDSV9CQVIpOworCSptZW1f
c2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVWX0lPX01FTVNJWkVf
SEkpOworCSptZW1fc2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVW
X0lPX01FTVNJWkVfTE8pIHwKKwkJCSgqbWVtX3NpemUgPDwgMzIpOworCisJLyogbWFwIG1lbW9y
eSBhbGxvY2F0b3IgKi8KKwlwdG5fZGV2LT5wY2lfbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlKHB0
bl9kZXYtPmRldiwgU1lTX1JFU19NRU1PUlksCisJCQkmcmlkLCAwLCB+MCwgKm1lbV9zaXplLCBS
Rl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfbWVtID09IE5VTEwpIHsKKwkJKm5tX3BhZGRy
ID0gMDsKKwkJKm5tX2FkZHIgPSAwOworCQlyZXR1cm4gRU5PTUVNOworCX0KKworCSpubV9wYWRk
ciA9IHJtYW5fZ2V0X3N0YXJ0KHB0bl9kZXYtPnBjaV9tZW0pOworCSpubV9hZGRyID0gcm1hbl9n
ZXRfdmlydHVhbChwdG5fZGV2LT5wY2lfbWVtKTsKKworCUQoIj09PSBCQVIgJWQgc3RhcnQgJWx4
IGxlbiAlbHggbWVtX3NpemUgJWx4ID09PSIsCisJCQlQVE5FVE1BUF9NRU1fUENJX0JBUiwKKwkJ
CSh1bnNpZ25lZCBsb25nKSgqbm1fcGFkZHIpLAorCQkJKHVuc2lnbmVkIGxvbmcpcm1hbl9nZXRf
c2l6ZShwdG5fZGV2LT5wY2lfbWVtKSwKKwkJCSh1bnNpZ25lZCBsb25nKSptZW1fc2l6ZSk7CisJ
cmV0dXJuICgwKTsKK30KKwordWludDMyX3QKK25tX29zX3B0X21lbWRldl9pb3JlYWQoc3RydWN0
IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4g
YnVzX3JlYWRfNChwdG5fZGV2LT5wY2lfaW8sIHJlZyk7Cit9CisKKy8qIFVubWFwIGhvc3QgbmV0
bWFwIG1lbW9yeS4gKi8KK3ZvaWQKK25tX29zX3B0X21lbWRldl9pb3VubWFwKHN0cnVjdCBwdG5l
dG1hcF9tZW1kZXYgKnB0bl9kZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgaW91bm1hcCIp
OworCisJaWYgKHB0bl9kZXYtPnBjaV9tZW0pIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UocHRu
X2Rldi0+ZGV2LCBTWVNfUkVTX01FTU9SWSwKKwkJCVBDSVJfQkFSKFBUTkVUTUFQX01FTV9QQ0lf
QkFSKSwgcHRuX2Rldi0+cGNpX21lbSk7CisJCXB0bl9kZXYtPnBjaV9tZW0gPSBOVUxMOworCX0K
K30KKworLyogRGV2aWNlIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUsIHJldHVybiBCVVNfUFJPQkVf
REVGQVVMVCBvbiBzdWNjZXNzLAorICogcG9zaXRpdmUgb24gZmFpbHVyZSAqLworc3RhdGljIGlu
dAorcHRuX21lbWRldl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJY2hhciBkZXNjWzI1Nl07CisK
KwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1BUF9QQ0lfVkVORE9SX0lEKQorCQly
ZXR1cm4gKEVOWElPKTsKKwlpZiAocGNpX2dldF9kZXZpY2UoZGV2KSAhPSBQVE5FVE1BUF9QQ0lf
REVWSUNFX0lEKQorCQlyZXR1cm4gKEVOWElPKTsKKworCXNucHJpbnRmKGRlc2MsIHNpemVvZihk
ZXNjKSwgIiVzIFBDSSBhZGFwdGVyIiwKKwkJCVBUTkVUTUFQX01FTURFVl9OQU1FKTsKKwlkZXZp
Y2Vfc2V0X2Rlc2NfY29weShkZXYsIGRlc2MpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVM
VCk7Cit9CisKKy8qIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiAqLworc3RhdGljIGlu
dAorcHRuX21lbWRldl9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBwdG5ldG1hcF9t
ZW1kZXYgKnB0bl9kZXY7CisJaW50IHJpZDsKKwl1aW50MTZfdCBtZW1faWQ7CisKKwlEKCJwdG5f
bWVtZGV2X2RyaXZlciBhdHRhY2giKTsKKworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJcHRuX2Rldi0+ZGV2ID0gZGV2OworCisJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsK
KworCXJpZCA9IFBDSVJfQkFSKFBUTkVUTUFQX0lPX1BDSV9CQVIpOworCXB0bl9kZXYtPnBjaV9p
byA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lPUE9SVCwgJnJpZCwKKwkJ
CQkJCSBSRl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfaW8gPT0gTlVMTCkgeworCSAgICAg
ICAgZGV2aWNlX3ByaW50ZihkZXYsICJjYW5ub3QgbWFwIEkvTyBzcGFjZVxuIik7CisJICAgICAg
ICByZXR1cm4gKEVOWElPKTsKKwl9CisKKwltZW1faWQgPSBidXNfcmVhZF80KHB0bl9kZXYtPnBj
aV9pbywgUFRORVRfTURFVl9JT19NRU1JRCk7CisKKwkvKiBjcmVhdGUgZ3Vlc3QgYWxsb2NhdG9y
ICovCisJcHRuX2Rldi0+bm1fbWVtID0gbmV0bWFwX21lbV9wdF9ndWVzdF9hdHRhY2gocHRuX2Rl
diwgbWVtX2lkKTsKKwlpZiAocHRuX2Rldi0+bm1fbWVtID09IE5VTEwpIHsKKwkJcHRuX21lbWRl
dl9kZXRhY2goZGV2KTsKKwkgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKwl9CisJbmV0bWFwX21l
bV9nZXQocHRuX2Rldi0+bm1fbWVtKTsKKworCUQoInB0bl9tZW1kZXZfZHJpdmVyIHByb2JlIE9L
IC0gaG9zdF9tZW1faWQ6ICVkIiwgbWVtX2lkKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIERl
dmljZSByZW1vdmFsIHJvdXRpbmUuICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2RldGFjaChk
ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldjsKKworCUQo
InB0bl9tZW1kZXZfZHJpdmVyIGRldGFjaCIpOworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisKKwlpZiAocHRuX2Rldi0+bm1fbWVtKSB7CisJCW5ldG1hcF9tZW1fcHV0KHB0bl9k
ZXYtPm5tX21lbSk7CisJCXB0bl9kZXYtPm5tX21lbSA9IE5VTEw7CisJfQorCWlmIChwdG5fZGV2
LT5wY2lfbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlks
CisJCQlQQ0lSX0JBUihQVE5FVE1BUF9NRU1fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9tZW0pOwor
CQlwdG5fZGV2LT5wY2lfbWVtID0gTlVMTDsKKwl9CisJaWYgKHB0bl9kZXYtPnBjaV9pbykgewor
CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULAorCQkJUENJUl9CQVIo
UFRORVRNQVBfSU9fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9pbyk7CisJCXB0bl9kZXYtPnBjaV9p
byA9IE5VTEw7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuX21lbWRl
dl9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgc2h1dGRv
d24iKTsKKwlyZXR1cm4gYnVzX2dlbmVyaWNfc2h1dGRvd24oZGV2KTsKK30KKworI2VuZGlmIC8q
IFdJVEhfUFRORVRNQVBfR1VFU1QgKi8KKwogLyoKICAqIEluIG9yZGVyIHRvIHRyYWNrIHdoZXRo
ZXIgcGFnZXMgYXJlIHN0aWxsIG1hcHBlZCwgd2UgaG9vayBpbnRvCiAgKiB0aGUgc3RhbmRhcmQg
Y2Rldl9wYWdlciBhbmQgaW50ZXJjZXB0IHRoZSBjb25zdHJ1Y3RvciBhbmQKQEAgLTYwNiw3ICs5
NTIsNyBAQAogICogdGhlIGRldmljZSAoL2Rldi9uZXRtYXApIHNvIHdlIGNhbm5vdCBkbyBhbnl0
aGluZyB1c2VmdWwuCiAgKiBUbyB0cmFjayBjbG9zZSgpIG9uIGluZGl2aWR1YWwgZmlsZSBkZXNj
cmlwdG9ycyB3ZSBwYXNzIG5ldG1hcF9kdG9yKCkgdG8KICAqIGRldmZzX3NldF9jZGV2cHJpdigp
IG9uIG9wZW4oKS4gVGhlIEZyZWVCU0Qga2VybmVsIHdpbGwgY2FsbCB0aGUgZGVzdHJ1Y3Rvcgot
ICogd2hlbiB0aGUgbGFzdCBmZCBwb2ludGluZyB0byB0aGUgZGV2aWNlIGlzIGNsb3NlZC4gCisg
KiB3aGVuIHRoZSBsYXN0IGZkIHBvaW50aW5nIHRvIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgogICoK
ICAqIE5vdGUgdGhhdCBGcmVlQlNEIGRvZXMgbm90IGV2ZW4gbXVubWFwKCkgb24gY2xvc2UoKSBz
byB3ZSBhbHNvIGhhdmUKICAqIHRvIHRyYWNrIG1tYXAoKSBvdXJzZWx2ZXMsIGFuZCBwb3N0cG9u
ZSB0aGUgY2FsbCB0bwpAQCAtNjM0LDI2ICs5ODAsMjUxIEBACiAJKHZvaWQpZGV2dHlwZTsKIAko
dm9pZCl0ZDsKIAotCXByaXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcHJpdl9kKSwg
TV9ERVZCVUYsCi0JCQkgICAgICBNX05PV0FJVCB8IE1fWkVSTyk7Ci0JaWYgKHByaXYgPT0gTlVM
TCkKLQkJcmV0dXJuIEVOT01FTTsKLQlwcml2LT5ucF9yZWZzID0gMTsKKwlOTUdfTE9DSygpOwor
CXByaXYgPSBuZXRtYXBfcHJpdl9uZXcoKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWVycm9y
ID0gRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJZXJyb3IgPSBkZXZmc19zZXRfY2RldnByaXYo
cHJpdiwgbmV0bWFwX2R0b3IpOwogCWlmIChlcnJvcikgewotCQlmcmVlKHByaXYsIE1fREVWQlVG
KTsKLQl9IGVsc2UgewotCQlOTUdfTE9DSygpOwotCQluZXRtYXBfdXNlX2NvdW50Kys7Ci0JCU5N
R19VTkxPQ0soKTsKKwkJbmV0bWFwX3ByaXZfZGVsZXRlKHByaXYpOwogCX0KK291dDoKKwlOTUdf
VU5MT0NLKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCisvKioqKioqKioqKioqKioqKioqKioga3Ro
cmVhZCB3cmFwcGVyICoqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3lzL3N5c3Byb3RvLmg+
Cit1X2ludAorbm1fb3NfbmNwdXModm9pZCkKK3sKKwlyZXR1cm4gbXBfbWF4aWQgKyAxOworfQor
CitzdHJ1Y3Qgbm1fa3RocmVhZF9jdHggeworCXN0cnVjdCB0aHJlYWQgKnVzZXJfdGQ7CQkvKiB0
aHJlYWQgdXNlci1zcGFjZSAoa3RocmVhZCBjcmVhdG9yKSB0byBzZW5kIGlvY3RsICovCisJc3Ry
dWN0IHB0bmV0bWFwX2NmZ2VudHJ5X2JoeXZlCWNmZzsKKworCS8qIHdvcmtlciBmdW5jdGlvbiBh
bmQgcGFyYW1ldGVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdCB3b3JrZXJfZm47CisJdm9p
ZCAqd29ya2VyX3ByaXZhdGU7CisKKwlzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rOworCisJLyogaW50
ZWdlciB0byBtYW5hZ2UgbXVsdGlwbGUgd29ya2VyIGNvbnRleHRzIChlLmcuLCBSWCBvciBUWCBv
biBwdG5ldG1hcCkgKi8KKwlsb25nIHR5cGU7Cit9OworCitzdHJ1Y3Qgbm1fa3RocmVhZCB7CisJ
c3RydWN0IHRocmVhZCAqd29ya2VyOworCXN0cnVjdCBtdHggd29ya2VyX2xvY2s7CisJdWludDY0
X3Qgc2NoZWR1bGVkOyAJCS8qIHBlbmRpbmcgd2FrZV91cCByZXF1ZXN0ICovCisJc3RydWN0IG5t
X2t0aHJlYWRfY3R4IHdvcmtlcl9jdHg7CisJaW50IHJ1bjsJCQkvKiB1c2VkIHRvIHN0b3Aga3Ro
cmVhZCAqLworCWludCBhdHRhY2hfdXNlcjsJCS8qIGt0aHJlYWQgYXR0YWNoZWQgdG8gdXNlcl9w
cm9jZXNzICovCisJaW50IGFmZmluaXR5OworfTsKKwordm9pZCBpbmxpbmUKK25tX29zX2t0aHJl
YWRfd2FrZXVwX3dvcmtlcihzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCS8qCisJICogVGhl
cmUgbWF5IGJlIGEgcmFjZSBiZXR3ZWVuIEZFIGFuZCBCRSwKKwkgKiB3aGljaCBjYWxsIGJvdGgg
dGhpcyBmdW5jdGlvbiwgYW5kIHdvcmtlciBrdGhyZWFkLAorCSAqIHRoYXQgcmVhZHMgbm1rLT5z
Y2hlZHVsZWQuCisJICoKKwkgKiBGb3IgdXMgaXQgaXMgbm90IGltcG9ydGFudCB0aGUgY291bnRl
ciB2YWx1ZSwKKwkgKiBidXQgc2ltcGx5IHRoYXQgaXQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxh
c3QKKwkgKiB0aW1lIHRoZSBrdGhyZWFkIHNhdyBpdC4KKwkgKi8KKwltdHhfbG9jaygmbm1rLT53
b3JrZXJfbG9jayk7CisJbm1rLT5zY2hlZHVsZWQrKzsKKwlpZiAobm1rLT53b3JrZXJfY3R4LmNm
Zy53Y2hhbikgeworCQl3YWtldXAoKHZvaWQgKilubWstPndvcmtlcl9jdHguY2ZnLndjaGFuKTsK
Kwl9CisJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7Cit9CisKK3ZvaWQgaW5saW5lCitu
bV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9rdGhyZWFkICpubWspCit7CisJc3RydWN0
IG5tX2t0aHJlYWRfY3R4ICpjdHggPSAmbm1rLT53b3JrZXJfY3R4OworCWludCBlcnI7CisKKwlp
ZiAoY3R4LT51c2VyX3RkICYmIGN0eC0+Y2ZnLmlvY3RsX2ZkID4gMCkgeworCQllcnIgPSBrZXJu
X2lvY3RsKGN0eC0+dXNlcl90ZCwgY3R4LT5jZmcuaW9jdGxfZmQsIGN0eC0+Y2ZnLmlvY3RsX2Nt
ZCwKKwkJCQkgKGNhZGRyX3QpJmN0eC0+Y2ZnLmlvY3RsX2RhdGEpOworCQlpZiAoZXJyKSB7CisJ
CQlEKCJrZXJuX2lvY3RsIGVycm9yOiAlZCBpb2N0bCBwYXJhbWV0ZXJzOiBmZCAlZCBjb20gJWx1
IGRhdGEgJXAiLAorCQkJCWVyciwgY3R4LT5jZmcuaW9jdGxfZmQsICh1bnNpZ25lZCBsb25nKWN0
eC0+Y2ZnLmlvY3RsX2NtZCwKKwkJCQkmY3R4LT5jZmcuaW9jdGxfZGF0YSk7CisJCX0KKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitubV9rdGhyZWFkX3dvcmtlcih2b2lkICpkYXRhKQoreworCXN0cnVj
dCBubV9rdGhyZWFkICpubWsgPSBkYXRhOworCXN0cnVjdCBubV9rdGhyZWFkX2N0eCAqY3R4ID0g
Jm5tay0+d29ya2VyX2N0eDsKKwl1aW50NjRfdCBvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hlZHVs
ZWQ7CisKKwlpZiAobm1rLT5hZmZpbml0eSA+PSAwKSB7CisJCXRocmVhZF9sb2NrKGN1cnRocmVh
ZCk7CisJCXNjaGVkX2JpbmQoY3VydGhyZWFkLCBubWstPmFmZmluaXR5KTsKKwkJdGhyZWFkX3Vu
bG9jayhjdXJ0aHJlYWQpOworCX0KKworCXdoaWxlIChubWstPnJ1bikgeworCQkvKgorCQkgKiBj
aGVjayBpZiB0aGUgcGFyZW50IHByb2Nlc3MgZGllcworCQkgKiAod2hlbiBrdGhyZWFkIGlzIGF0
dGFjaGVkIHRvIHVzZXIgcHJvY2VzcykKKwkJICovCisJCWlmIChjdHgtPnVzZXJfdGQpIHsKKwkJ
CVBST0NfTE9DSyhjdXJwcm9jKTsKKwkJCXRocmVhZF9zdXNwZW5kX2NoZWNrKDApOworCQkJUFJP
Q19VTkxPQ0soY3VycHJvYyk7CisJCX0gZWxzZSB7CisJCQlrdGhyZWFkX3N1c3BlbmRfY2hlY2so
KTsKKwkJfQorCisJCS8qCisJCSAqIGlmIHdjaGFuIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBo
YXZlIG5vdGlmaWNhdGlvbgorCQkgKiBtZWNoYW5pc20gYW5kIHdlIGNvbnRpbnVhbGx5IGV4ZWN1
dGUgd29ya2VyX2ZuKCkKKwkJICovCisJCWlmICghY3R4LT5jZmcud2NoYW4pIHsKKwkJCWN0eC0+
d29ya2VyX2ZuKGN0eC0+d29ya2VyX3ByaXZhdGUpOyAvKiB3b3JrZXIgYm9keSAqLworCQl9IGVs
c2UgeworCQkJLyogY2hlY2tzIGlmIHRoZXJlIGlzIGEgcGVuZGluZyBub3RpZmljYXRpb24gKi8K
KwkJCW10eF9sb2NrKCZubWstPndvcmtlcl9sb2NrKTsKKwkJCWlmIChsaWtlbHkobm1rLT5zY2hl
ZHVsZWQgIT0gb2xkX3NjaGVkdWxlZCkpIHsKKwkJCQlvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hl
ZHVsZWQ7CisJCQkJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7CisKKwkJCQljdHgtPndv
cmtlcl9mbihjdHgtPndvcmtlcl9wcml2YXRlKTsgLyogd29ya2VyIGJvZHkgKi8KKworCQkJCWNv
bnRpbnVlOworCQkJfSBlbHNlIGlmIChubWstPnJ1bikgeworCQkJCS8qIHdhaXQgb24gZXZlbnQg
d2l0aCBvbmUgc2Vjb25kIHRpbWVvdXQgKi8KKwkJCQltc2xlZXBfc3Bpbigodm9pZCAqKWN0eC0+
Y2ZnLndjaGFuLCAmbm1rLT53b3JrZXJfbG9jaywKKwkJCQkJICAgICJubWtfZXYiLCBoeik7CisJ
CQkJbm1rLT5zY2hlZHVsZWQrKzsKKwkJCX0KKwkJCW10eF91bmxvY2soJm5tay0+d29ya2VyX2xv
Y2spOworCQl9CisJfQorCisJa3RocmVhZF9leGl0KCk7Cit9CisKK3ZvaWQKK25tX29zX2t0aHJl
YWRfc2V0X2FmZmluaXR5KHN0cnVjdCBubV9rdGhyZWFkICpubWssIGludCBhZmZpbml0eSkKK3sK
KwlubWstPmFmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKK3N0cnVjdCBubV9rdGhyZWFkICoKK25t
X29zX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBubV9rdGhyZWFkX2NmZyAqY2ZnLCB1bnNpZ25lZCBp
bnQgY2ZndHlwZSwKKwkJICAgICB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IG5tX2t0aHJlYWQg
Km5tayA9IE5VTEw7CisKKwlpZiAoY2ZndHlwZSAhPSBQVE5FVE1BUF9DRkdUWVBFX0JIWVZFKSB7
CisJCUQoIlVuc3VwcG9ydGVkIGNmZ3R5cGUgJXUiLCBjZmd0eXBlKTsKKwkJcmV0dXJuIE5VTEw7
CisJfQorCisJbm1rID0gbWFsbG9jKHNpemVvZigqbm1rKSwgIE1fREVWQlVGLCBNX05PV0FJVCB8
IE1fWkVSTyk7CisJaWYgKCFubWspCisJCXJldHVybiBOVUxMOworCisJbXR4X2luaXQoJm5tay0+
d29ya2VyX2xvY2ssICJubV9rdGhyZWFkIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisJbm1rLT53
b3JrZXJfY3R4Lndvcmtlcl9mbiA9IGNmZy0+d29ya2VyX2ZuOworCW5tay0+d29ya2VyX2N0eC53
b3JrZXJfcHJpdmF0ZSA9IGNmZy0+d29ya2VyX3ByaXZhdGU7CisJbm1rLT53b3JrZXJfY3R4LnR5
cGUgPSBjZmctPnR5cGU7CisJbm1rLT5hZmZpbml0eSA9IC0xOworCisJLyogYXR0YWNoIGt0aHJl
YWQgdG8gdXNlciBwcm9jZXNzIChwdG5ldG1hcCkgKi8KKwlubWstPmF0dGFjaF91c2VyID0gY2Zn
LT5hdHRhY2hfdXNlcjsKKworCS8qIHN0b3JlIGtpY2svaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24g
Ki8KKwlpZiAob3BhcXVlKSB7CisJCW5tay0+d29ya2VyX2N0eC5jZmcgPSAqKChzdHJ1Y3QgcHRu
ZXRtYXBfY2ZnZW50cnlfYmh5dmUgKilvcGFxdWUpOworCX0KKworCXJldHVybiBubWs7Cit9CisK
K2ludAorbm1fb3Nfa3RocmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCXN0
cnVjdCBwcm9jICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKG5tay0+d29ya2Vy
KSB7CisJCXJldHVybiBFQlVTWTsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSB3YW50IHRvIGF0dGFj
aCBrdGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCWlmIChubWstPmF0dGFjaF91c2VyKSB7CisJ
CW5tay0+d29ya2VyX2N0eC51c2VyX3RkID0gY3VydGhyZWFkOworCQlwID0gY3VydGhyZWFkLT50
ZF9wcm9jOworCX0KKworCS8qIGVuYWJsZSBrdGhyZWFkIG1haW4gbG9vcCAqLworCW5tay0+cnVu
ID0gMTsKKwkvKiBjcmVhdGUga3RocmVhZCAqLworCWlmKChlcnJvciA9IGt0aHJlYWRfYWRkKG5t
X2t0aHJlYWRfd29ya2VyLCBubWssIHAsCisJCQkmbm1rLT53b3JrZXIsIFJGTk9XQUlUIC8qIHRv
IGJlIGNoZWNrZWQgKi8sIDAsICJubS1rdGhyZWFkLSVsZCIsCisJCQlubWstPndvcmtlcl9jdHgu
dHlwZSkpKSB7CisJCWdvdG8gZXJyOworCX0KKworCUQoIm5tX2t0aHJlYWQgc3RhcnRlZCB0ZCAl
cCIsIG5tay0+d29ya2VyKTsKKworCXJldHVybiAwOworZXJyOgorCUQoIm5tX2t0aHJlYWQgc3Rh
cnQgZmFpbGVkIGVyciAlZCIsIGVycm9yKTsKKwlubWstPndvcmtlciA9IE5VTEw7CisJcmV0dXJu
IGVycm9yOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX3N0b3Aoc3RydWN0IG5tX2t0aHJlYWQg
Km5taykKK3sKKwlpZiAoIW5tay0+d29ya2VyKSB7CisJCXJldHVybjsKKwl9CisJLyogdGVsbCB0
byBrdGhyZWFkIHRvIGV4aXQgZnJvbSBtYWluIGxvb3AgKi8KKwlubWstPnJ1biA9IDA7CisKKwkv
KiB3YWtlIHVwIGt0aHJlYWQgaWYgaXQgc2xlZXBzICovCisJa3RocmVhZF9yZXN1bWUobm1rLT53
b3JrZXIpOworCW5tX29zX2t0aHJlYWRfd2FrZXVwX3dvcmtlcihubWspOworCisJbm1rLT53b3Jr
ZXIgPSBOVUxMOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qgbm1fa3Ro
cmVhZCAqbm1rKQoreworCWlmICghbm1rKQorCQlyZXR1cm47CisJaWYgKG5tay0+d29ya2VyKSB7
CisJCW5tX29zX2t0aHJlYWRfc3RvcChubWspOworCX0KKworCW1lbXNldCgmbm1rLT53b3JrZXJf
Y3R4LmNmZywgMCwgc2l6ZW9mKG5tay0+d29ya2VyX2N0eC5jZmcpKTsKKworCWZyZWUobm1rLCBN
X0RFVkJVRik7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKiBrcXVldWUgc3VwcG9ydCAqKioq
KioqKioqKioqKioqLwogCiAvKgotICogVGhlIE9TX3NlbHdha2V1cCBhbHNvIG5lZWRzIHRvIGlz
c3VlIGEgS05PVEVfVU5MT0NLRUQuCisgKiBubV9vc19zZWx3YWtldXAgYWxzbyBuZWVkcyB0byBp
c3N1ZSBhIEtOT1RFX1VOTE9DS0VELgogICogV2UgdXNlIGEgbm9uLXplcm8gYXJndW1lbnQgdG8g
ZGlzdGluZ3Vpc2ggdGhlIGNhbGwgZnJvbSB0aGUgb25lCiAgKiBpbiBrZXZlbnRfc2NhbigpIHdo
aWNoIGluc3RlYWQgYWxzbyBuZWVkcyB0byBydW4gbmV0bWFwX3BvbGwoKS4KICAqIFRoZSBrbm90
ZSB1c2VzIGEgZ2xvYmFsIG11dGV4IGZvciB0aGUgdGltZSBiZWluZy4gV2UgbWlnaHQKQEAgLTY3
MiwxNyArMTI0MywyMyBAQAogCiAKIHZvaWQKLWZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9z
ZWxpbmZvICpzaSwgaW50IHByaSkKK25tX29zX3NlbHdha2V1cChzdHJ1Y3Qgbm1fc2VsaW5mbyAq
c2kpCiB7CiAJaWYgKG5ldG1hcF92ZXJib3NlKQogCQlEKCJvbiBrbm90ZSAlcCIsICZzaS0+c2ku
c2lfbm90ZSk7Ci0Jc2Vsd2FrZXVwcHJpKCZzaS0+c2ksIHByaSk7CisJc2Vsd2FrZXVwcHJpKCZz
aS0+c2ksIFBJX05FVCk7CiAJLyogdXNlIGEgbm9uLXplcm8gaGludCB0byB0ZWxsIHRoZSBub3Rp
ZmljYXRpb24gZnJvbSB0aGUKIAkgKiBjYWxsIGRvbmUgaW4ga3F1ZXVlX3NjYW4oKSB3aGljaCB1
c2VzIDAKIAkgKi8KIAlLTk9URV9VTkxPQ0tFRCgmc2ktPnNpLnNpX25vdGUsIDB4MTAwIC8qIG5v
dGlmaWNhdGlvbiAqLyk7CiB9CiAKK3ZvaWQKK25tX29zX3NlbHJlY29yZChzdHJ1Y3QgdGhyZWFk
ICp0ZCwgc3RydWN0IG5tX3NlbGluZm8gKnNpKQoreworCXNlbHJlY29yZCh0ZCwgJnNpLT5zaSk7
Cit9CisKIHN0YXRpYyB2b2lkCiBuZXRtYXBfa25yZGV0YWNoKHN0cnVjdCBrbm90ZSAqa24pCiB7
CkBAIC03MjgsNyArMTMwNSw3IEBACiAJCVJEKDUsICJjdXJ0aHJlYWQgY2hhbmdlZCAlcCAlcCIs
IGN1cnRocmVhZCwgcHJpdi0+bnBfdGQpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlyZXZl
bnRzID0gbmV0bWFwX3BvbGwoKHZvaWQgKilwcml2LCBldmVudHMsIGN1cnRocmVhZCk7CisJCXJl
dmVudHMgPSBuZXRtYXBfcG9sbChwcml2LCBldmVudHMsIE5VTEwpOwogCQlyZXR1cm4gKGV2ZW50
cyAmIHJldmVudHMpID8gMSA6IDA7CiAJfQogfQpAQCAtODAxLDEzICsxMzc4LDQ3IEBACiAJcmV0
dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2ZyZWVic2RfbmV0bWFwX3BvbGwoc3RydWN0IGNkZXYg
KmNkZXZpIF9fdW51c2VkLCBpbnQgZXZlbnRzLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1
Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdjsKKwlpZiAoZGV2ZnNfZ2V0X2NkZXZwcml2KCh2b2lkICoq
KSZwcml2KSkgeworCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisJcmV0dXJuIG5ldG1hcF9wb2xsKHBy
aXYsIGV2ZW50cywgdGQpOworfQorCitzdGF0aWMgaW50CitmcmVlYnNkX25ldG1hcF9pb2N0bChz
dHJ1Y3QgY2RldiAqZGV2IF9fdW51c2VkLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsCisgICAg
ICAgIGludCBmZmxhIF9fdW51c2VkLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgZXJyb3I7
CisJc3RydWN0IG5ldG1hcF9wcml2X2QgKnByaXY7CisKKwlDVVJWTkVUX1NFVChURF9UT19WTkVU
KHRkKSk7CisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYoKHZvaWQgKiopJnByaXYpOworCWlm
IChlcnJvcikgeworCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5jZSB0
aGUgcHJpdgorCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLworCQlpZiAoZXJyb3Ig
PT0gRU5PRU5UKQorCQkJZXJyb3IgPSBFTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWVycm9yID0g
bmV0bWFwX2lvY3RsKHByaXYsIGNtZCwgZGF0YSwgdGQpOworb3V0OgorCUNVUlZORVRfUkVTVE9S
RSgpOworCisJcmV0dXJuIGVycm9yOworfQorCitleHRlcm4gc3RydWN0IGNkZXZzdyBuZXRtYXBf
Y2RldnN3OyAvKiBYWFggdXNlZCBpbiBuZXRtYXAuYywgc2hvdWxkIGdvIGVsc2V3aGVyZSAqLwog
c3RydWN0IGNkZXZzdyBuZXRtYXBfY2RldnN3ID0gewogCS5kX3ZlcnNpb24gPSBEX1ZFUlNJT04s
CiAJLmRfbmFtZSA9ICJuZXRtYXAiLAogCS5kX29wZW4gPSBuZXRtYXBfb3BlbiwKIAkuZF9tbWFw
X3NpbmdsZSA9IG5ldG1hcF9tbWFwX3NpbmdsZSwKLQkuZF9pb2N0bCA9IG5ldG1hcF9pb2N0bCwK
LQkuZF9wb2xsID0gbmV0bWFwX3BvbGwsCisJLmRfaW9jdGwgPSBmcmVlYnNkX25ldG1hcF9pb2N0
bCwKKwkuZF9wb2xsID0gZnJlZWJzZF9uZXRtYXBfcG9sbCwKIAkuZF9rcWZpbHRlciA9IG5ldG1h
cF9rcWZpbHRlciwKIAkuZF9jbG9zZSA9IG5ldG1hcF9jbG9zZSwKIH07CkBAIC04NTIsNiArMTQ2
MywyNCBAQAogCXJldHVybiAoZXJyb3IpOwogfQogCi0KKyNpZmRlZiBERVZfTU9EVUxFX09SREVS
RUQKKy8qCisgKiBUaGUgbmV0bWFwIG1vZHVsZSBjb250YWlucyB0aHJlZSBkcml2ZXJzOiAoaSkg
dGhlIG5ldG1hcCBjaGFyYWN0ZXIgZGV2aWNlCisgKiBkcml2ZXI7IChpaSkgdGhlIHB0bmV0bWFw
IG1lbWRldiBQQ0kgZGV2aWNlIGRyaXZlciwgKGlpaSkgdGhlIHB0bmV0IFBDSQorICogZGV2aWNl
IGRyaXZlci4gVGhlIGF0dGFjaCgpIHJvdXRpbmVzIG9mIGJvdGggKGlpKSBhbmQgKGlpaSkgbmVl
ZCB0aGUKKyAqIGxvY2sgb2YgdGhlIGdsb2JhbCBhbGxvY2F0b3IsIGFuZCBzdWNoIGxvY2sgaXMg
aW5pdGlhbGl6ZWQgaW4gbmV0bWFwX2luaXQoKSwKKyAqIHdoaWNoIGlzIHBhcnQgb2YgKGkpLgor
ICogVGhlcmVmb3JlLCB3ZSBtYWtlIHN1cmUgdGhhdCAoaSkgaXMgbG9hZGVkIGJlZm9yZSAoaWkp
IGFuZCAoaWlpKSwgdXNpbmcKKyAqIHRoZSAnb3JkZXInIHBhcmFtZXRlciBvZiBkcml2ZXIgZGVj
bGFyYXRpb24gbWFjcm9zLiBGb3IgKGkpLCB3ZSBzcGVjaWZ5CisgKiBTSV9PUkRFUl9NSURETEUs
IHdoaWxlIGhpZ2hlciBvcmRlcnMgYXJlIHVzZWQgd2l0aCB0aGUgRFJJVkVSX01PRFVMRV9PUkRF
UkVECisgKiBtYWNyb3MgZm9yIChpaSkgYW5kIChpaWkpLgorICovCitERVZfTU9EVUxFX09SREVS
RUQobmV0bWFwLCBuZXRtYXBfbG9hZGVyLCBOVUxMLCBTSV9PUkRFUl9NSURETEUpOworI2Vsc2Ug
LyogIURFVl9NT0RVTEVfT1JERVJFRCAqLwogREVWX01PRFVMRShuZXRtYXAsIG5ldG1hcF9sb2Fk
ZXIsIE5VTEwpOworI2VuZGlmIC8qIERFVl9NT0RVTEVfT1JERVJFRCAgKi8KK01PRFVMRV9ERVBF
TkQobmV0bWFwLCBwY2ksIDEsIDEsIDEpOwogTU9EVUxFX1ZFUlNJT04obmV0bWFwLCAxKTsKKy8q
IHJlZHVjZSBjb25kaXRpb25hbCBjb2RlICovCisvLyBsaW51eCBBUEksIHVzZSBmb3IgdGhlIGtu
bGlzdCBpbiBGcmVlQlNECisvKiB1c2UgYSBwcml2YXRlIG11dGV4IGZvciB0aGUga25saXN0ICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIC91
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5lcmljLmMKLS0tIHVzci9zcmMvc3lzL2Rl
di9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0OTQyNzAwMCArMDAwMApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNCBVbml2ZXJzaXRhYCBkaSBQaXNhLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEx1aWdpIFJpenpvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2NSw3IEBACiAjaWZk
ZWYgX19GcmVlQlNEX18KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUg
Ki8KLV9fRkJTRElEKCIkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFw
X2dlbmVyaWMuYyAyOTg5NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQiKTsKK19fRkJTRElE
KCIkRnJlZUJTRDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIDI3NDM1MyAy
MDE0LTExLTEwIDIwOjE5OjU4WiBsdWlnaSAkIik7CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
ICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KQEAgLTgzLDI1ICs4NSwyNSBAQAogCiAjZGVmaW5lIHJ0
bmxfbG9jaygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKICNkZWZpbmUgcnRubF91bmxvY2soKQlO
RCgicnRubF91bmxvY2sgY2FsbGVkIikKLSNkZWZpbmUgTUJVRl9UWFEobSkJKChtKS0+bV9wa3Ro
ZHIuZmxvd2lkKQogI2RlZmluZSBNQlVGX1JYUShtKQkoKG0pLT5tX3BrdGhkci5mbG93aWQpCiAj
ZGVmaW5lIHNtcF9tYigpCiAKIC8qCiAgKiBGcmVlQlNEIG1idWYgYWxsb2NhdG9yL2RlYWxsb2Nh
dG9yIGluIGVtdWxhdGlvbiBtb2RlOgorICovCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMTAw
MDAwCisKKy8qCisgKiBGb3Igb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRDoKICAqCiAgKiBXZSBh
bGxvY2F0ZSBFWFRfUEFDS0VUIG1idWYrY2x1c3RlcnMsIGJ1dCBuZWVkIHRvIHNldCBNX05PRlJF
RQogICogc28gdGhhdCB0aGUgZGVzdHJ1Y3RvciwgaWYgaW52b2tlZCwgd2lsbCBub3QgZnJlZSB0
aGUgcGFja2V0LgotICogICAgSW4gcHJpbmNpcGxlIHdlIHNob3VsZCBzZXQgdGhlIGRlc3RydWN0
b3Igb25seSBvbiBkZW1hbmQsCisgKiBJbiBwcmluY2lwbGUgd2Ugc2hvdWxkIHNldCB0aGUgZGVz
dHJ1Y3RvciBvbmx5IG9uIGRlbWFuZCwKICAqIGJ1dCBzaW5jZSB0aGVyZSBtaWdodCBiZSBhIHJh
Y2Ugd2UgYmV0dGVyIGRvIGl0IG9uIGFsbG9jYXRpb24uCiAgKiBBcyBhIGNvbnNlcXVlbmNlLCB3
ZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBkZXN0cnVjdG9yIG9yIHdlCiAgKiB3b3VsZCBsZWFrIGJ1
ZmZlcnMuCiAgKi8KIAotLyoKLSAqIG1idWYgd3JhcHBlcnMKLSAqLwotCiAvKiBtYnVmIGRlc3Ry
dWN0b3IsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIHR5cGUgdG8gRVhUX0VYVFJFRiwKICAqIGFk
ZCBhbiBNX05PRlJFRSBmbGFnLCBhbmQgdGhlbiBjbGVhciB0aGUgZmxhZyBhbmQKICAqIGNoYWlu
IGludG8gdW1hX3pmcmVlKHpvbmVfcGFjaywgbWYpCkBAIC0xMTIsMzUgKzExNCw5MyBAQAogCSht
KS0+bV9leHQuZXh0X3R5cGUgPSBFWFRfRVhUUkVGOwlcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMg
dm9pZAotbmV0bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yKHN0cnVjdCBtYnVmICptKQorc3Rh
dGljIGludAordm9pZF9tYnVmX2R0b3Ioc3RydWN0IG1idWYgKm0sIHZvaWQgKmFyZzEsIHZvaWQg
KmFyZzIpCiB7CiAJLyogcmVzdG9yZSBvcmlnaW5hbCBtYnVmICovCiAJbS0+bV9leHQuZXh0X2J1
ZiA9IG0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9hcmcxOwogCW0tPm1fZXh0LmV4dF9hcmcxID0g
TlVMTDsKIAltLT5tX2V4dC5leHRfdHlwZSA9IEVYVF9QQUNLRVQ7CiAJbS0+bV9leHQuZXh0X2Zy
ZWUgPSBOVUxMOwotCWlmIChHRVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKKwlpZiAoTUJVRl9SRUZD
TlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwogCXVtYV96ZnJlZSh6b25lX3Bh
Y2ssIG0pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1idWYgKgot
bmV0bWFwX2dldF9tYnVmKGludCBsZW4pCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlm
cCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKworCSh2b2lkKWlmcDsKIAltID0gbV9n
ZXRjbChNX05PV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIpOwogCWlmIChtKSB7Ci0JCW0tPm1fZmxh
Z3MgfD0gTV9OT0ZSRUU7CS8qIFhYWE5QOiBBbG1vc3QgY2VydGFpbmx5IGluY29ycmVjdC4gKi8K
KwkJLyogbV9nZXRjbCgpIChtYl9jdG9yX21idWYpIGhhcyBhbiBhc3NlcnQgdGhhdCBjaGVja3Mg
dGhhdAorCQkgKiBNX05PRlJFRSBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgYXMgdGhpcmQgYXJndW1l
bnQsCisJCSAqIHNvIHdlIGhhdmUgdG8gc2V0IE1fTk9GUkVFIGFmdGVyIG1fZ2V0Y2woKS4gKi8K
KwkJbS0+bV9mbGFncyB8PSBNX05PRlJFRTsKIAkJbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4
dC5leHRfYnVmOyAvLyBYWFggc2F2ZQotCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lkICopbmV0
bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yOworCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lk
ICopdm9pZF9tYnVmX2R0b3I7CiAJCW0tPm1fZXh0LmV4dF90eXBlID0gRVhUX0VYVFJFRjsKLQkJ
TkQoNSwgImNyZWF0ZSBtICVwIHJlZmNudCAlZCIsIG0sIEdFVF9NQlVGX1JFRkNOVChtKSk7CisJ
CU5EKDUsICJjcmVhdGUgbSAlcCByZWZjbnQgJWQiLCBtLCBNQlVGX1JFRkNOVChtKSk7CiAJfQog
CXJldHVybiBtOwogfQogCisjZWxzZSAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICov
CisKKy8qCisgKiBOZXdlciB2ZXJzaW9ucyBvZiBGcmVlQlNELCB1c2luZyBhIHN0cmFpZ2h0Zm9y
d2FyZCBzY2hlbWUuCisgKgorICogV2UgYWxsb2NhdGUgbWJ1ZnMgd2l0aCBtX2dldGhkcigpLCBz
aW5jZSB0aGUgbWJ1ZiBoZWFkZXIgaXMgbmVlZGVkCisgKiBieSB0aGUgZHJpdmVyLiBXZSBhbHNv
IGF0dGFjaCBhIGN1c3RvbWx5LXByb3ZpZGVkIGV4dGVybmFsIHN0b3JhZ2UsCisgKiB3aGljaCBp
biB0aGlzIGNhc2UgaXMgYSBuZXRtYXAgYnVmZmVyLiBXaGVuIGNhbGxpbmcgbV9leHRhZGQoKSwg
aG93ZXZlcgorICogd2UgcGFzcyBhIE5VTEwgYWRkcmVzcywgc2luY2UgdGhlIHJlYWwgYWRkcmVz
cyAoYW5kIGxlbmd0aCkgd2lsbCBiZQorICogZmlsbGVkIGluIGJ5IG5tX29zX2dlbmVyaWNfeG1p
dF9mcmFtZSgpIHJpZ2h0IGJlZm9yZSBjYWxsaW5nCisgKiBpZl90cmFuc21pdCgpLgorICoKKyAq
IFRoZSBkdG9yIGZ1bmN0aW9uIGRvZXMgbm90aGluZywgaG93ZXZlciB3ZSBuZWVkIGl0IHNpbmNl
IG1iX2ZyZWVfZXh0KCkKKyAqIGhhcyBhIEtBU1NFUlQoKSwgY2hlY2tpbmcgdGhhdCB0aGUgbWJ1
ZiBkdG9yIGZ1bmN0aW9uIGlzIG5vdCBOVUxMLgorICovCisKKyNkZWZpbmUgU0VUX01CVUZfREVT
VFJVQ1RPUihtLCBmbikJZG8gewkJXAorCShtKS0+bV9leHQuZXh0X2ZyZWUgPSAodm9pZCAqKWZu
OwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCB2b2lkX21idWZfZHRvcihzdHJ1Y3QgbWJ1
ZiAqbSwgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMikgeyB9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0
IG1idWYgKgorbm1fb3NfZ2V0X21idWYoc3RydWN0IGlmbmV0ICppZnAsIGludCBsZW4pCit7CisJ
c3RydWN0IG1idWYgKm07CisKKwkodm9pZClpZnA7CisJKHZvaWQpbGVuOworCisJbSA9IG1fZ2V0
aGRyKE1fTk9XQUlULCBNVF9EQVRBKTsKKwlpZiAobSA9PSBOVUxMKSB7CisJCXJldHVybiBtOwor
CX0KKworCW1fZXh0YWRkKG0sIE5VTEwgLyogYnVmICovLCAwIC8qIHNpemUgKi8sIHZvaWRfbWJ1
Zl9kdG9yLAorCQkgTlVMTCwgTlVMTCwgMCwgRVhUX05FVF9EUlYpOworCisJcmV0dXJuIG07Cit9
CisKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKKyNlbGlmIGRl
ZmluZWQgX1dJTjMyCiAKKyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgorCisjZGVmaW5lIHJ0bmxfbG9j
aygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKKyNkZWZpbmUgcnRubF91bmxvY2soKQlORCgicnRu
bF91bmxvY2sgY2FsbGVkIikKKyNkZWZpbmUgTUJVRl9UWFEobSkgCTAvLygobSktPm1fcGt0aGRy
LmZsb3dpZCkKKyNkZWZpbmUgTUJVRl9SWFEobSkJICAgIDAvLygobSktPm1fcGt0aGRyLmZsb3dp
ZCkKKyNkZWZpbmUgc21wX21iKCkJCS8vWFhYOiB0byBiZSBjb3JyZWN0bHkgZGVmaW5lZAogCiAj
ZWxzZSAvKiBsaW51eCAqLwogCkBAIC0xNTAsNyArMjEwLDEyIEBACiAjaW5jbHVkZSA8bGludXgv
ZXRodG9vbC5oPiAgICAgIC8qIHN0cnVjdCBldGh0b29sX29wcywgZ2V0X3JpbmdwYXJhbSAqLwog
I2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAotLy8jZGVmaW5lIFJFR19SRVNFVAorc3RhdGlj
IGlubGluZSBzdHJ1Y3QgbWJ1ZiAqCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlmcCwg
aW50IGxlbikKK3sKKwlyZXR1cm4gYWxsb2Nfc2tiKGlmcC0+bmVlZGVkX2hlYWRyb29tICsgbGVu
ICsKKwkJCSBpZnAtPm5lZWRlZF90YWlscm9vbSwgR0ZQX0FUT01JQyk7Cit9CiAKICNlbmRpZiAv
KiBsaW51eCAqLwogCkBAIC0xNjEsOCArMjI2LDIxIEBACiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9u
ZXRtYXBfbWVtMi5oPgogCiAKKyNkZWZpbmUgZm9yX2VhY2hfa3JpbmdfbihfaSwgX2ssIF9rYXJy
LCBfbikgXAorCWZvciAoX2s9X2thcnIsIF9pID0gMDsgX2kgPCBfbjsgKF9rKSsrLCAoX2kpKysp
CisKKyNkZWZpbmUgZm9yX2VhY2hfdHhfa3JpbmcoX2ksIF9rLCBfbmEpIFwKKyAgICAgICAgICAg
IGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5udW1fdHhf
cmluZ3MpCisjZGVmaW5lIGZvcl9lYWNoX3R4X2tyaW5nX2goX2ksIF9rLCBfbmEpIFwKKyAgICAg
ICAgICAgIGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5u
dW1fdHhfcmluZ3MgKyAxKQorCisjZGVmaW5lIGZvcl9lYWNoX3J4X2tyaW5nKF9pLCBfaywgX25h
KSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4X3Jpbmdz
LCAoX25hKS0+bnVtX3J4X3JpbmdzKQorI2RlZmluZSBmb3JfZWFjaF9yeF9rcmluZ19oKF9pLCBf
aywgX25hKSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4
X3JpbmdzLCAoX25hKS0+bnVtX3J4X3JpbmdzICsgMSkKKwogCi0vKiA9PT09PT09PT09PT09PT09
PT09PT09PT0gdXNhZ2Ugc3RhdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9
PT09PT09PT09PT09PT09PT09PT09PT0gUEVSRk9STUFOQ0UgU1RBVElTVElDUyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT0gKi8KIAogI2lmZGVmIFJBVEVfR0VORVJJQwogI2RlZmluZSBJRlJB
VEUoeCkgeApAQCAtMTcwLDYgKzI0OCw4IEBACiAJdW5zaWduZWQgbG9uZyB0eHBrdDsKIAl1bnNp
Z25lZCBsb25nIHR4c3luYzsKIAl1bnNpZ25lZCBsb25nIHR4aXJxOworCXVuc2lnbmVkIGxvbmcg
dHhyZXBsOworCXVuc2lnbmVkIGxvbmcgdHhkcm9wOwogCXVuc2lnbmVkIGxvbmcgcnhwa3Q7CiAJ
dW5zaWduZWQgbG9uZyByeGlycTsKIAl1bnNpZ25lZCBsb25nIHJ4c3luYzsKQEAgLTE5NCw2ICsy
NzQsOCBAQAogCVJBVEVfUFJJTlRLKHR4cGt0KTsKIAlSQVRFX1BSSU5USyh0eHN5bmMpOwogCVJB
VEVfUFJJTlRLKHR4aXJxKTsKKwlSQVRFX1BSSU5USyh0eHJlcGwpOworCVJBVEVfUFJJTlRLKHR4
ZHJvcCk7CiAJUkFURV9QUklOVEsocnhwa3QpOwogCVJBVEVfUFJJTlRLKHJ4c3luYyk7CiAJUkFU
RV9QUklOVEsocnhpcnEpOwpAQCAtMjMwLDk0ICszMTIsMjIwIEBACiAgKiB0aGUgcG9sbGVyIHRo
cmVhZHMuIERpZmZlcmVudGx5IGZyb20gbmV0bWFwX3J4X2lycSgpLCB3ZSBjaGVjawogICogb25s
eSBOQUZfTkVUTUFQX09OIGluc3RlYWQgb2YgTkFGX05BVElWRV9PTiB0byBlbmFibGUgdGhlIGly
cS4KICAqLwotc3RhdGljIHZvaWQKLW5ldG1hcF9nZW5lcmljX2lycShzdHJ1Y3QgaWZuZXQgKmlm
cCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKK3ZvaWQKK25ldG1hcF9nZW5lcmljX2lycShz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQogewot
CXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwogCWlmICh1bmxpa2VseSghbm1f
bmV0bWFwX29uKG5hKSkpCiAJCXJldHVybjsKIAotCW5ldG1hcF9jb21tb25faXJxKGlmcCwgcSwg
d29ya19kb25lKTsKKwluZXRtYXBfY29tbW9uX2lycShuYSwgcSwgd29ya19kb25lKTsKKyNpZmRl
ZiBSQVRFX0dFTkVSSUMKKwlpZiAod29ya19kb25lKQorCQlyYXRlX2N0eC5uZXcucnhpcnErKzsK
KwllbHNlCisJCXJhdGVfY3R4Lm5ldy50eGlycSsrOworI2VuZGlmICAvKiBSQVRFX0dFTkVSSUMg
Ki8KIH0KIAorc3RhdGljIGludAorZ2VuZXJpY19uZXRtYXBfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEg
PSAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKKwlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9IE5VTEw7CisJaW50IGksIHI7CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0g
MCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvZmYiLCBuYSk7CisJCXJ0bmxfbG9j
aygpOworCisJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKworCQkvKiBSZWxlYXNl
IHBhY2tldCBzdGVlcmluZyBjb250cm9sLiAqLworCQlubV9vc19jYXRjaF90eChnbmEsIDApOwor
CisJCS8qIFN0b3AgaW50ZXJjZXB0aW5nIHBhY2tldHMgb24gdGhlIFJYIHBhdGguICovCisJCW5t
X29zX2NhdGNoX3J4KGduYSwgMCk7CisKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlmb3JfZWFj
aF9yeF9rcmluZ19oKHIsIGtyaW5nLCBuYSkgeworCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vZmYo
a3JpbmcpKSB7CisJCQlEKCJSWCByaW5nICVkIG9mIGdlbmVyaWMgYWRhcHRlciAlcCBnb2VzIG9m
ZiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PRkY7CisJCX0KKwl9
CisJZm9yX2VhY2hfdHhfa3JpbmdfaChyLCBrcmluZywgbmEpIHsKKwkJaWYgKG5tX2tyaW5nX3Bl
bmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK
KwkJCUQoIlRYIHJpbmcgJWQgb2YgZ2VuZXJpYyBhZGFwdGVyICVwIGdvZXMgb2ZmIiwgciwgbmEp
OworCQl9CisJfQorCisJZm9yX2VhY2hfcnhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJCS8qIEZy
ZWUgdGhlIG1idWZzIHN0aWxsIHBlbmRpbmcgaW4gdGhlIFJYIHF1ZXVlcywKKwkJICogdGhhdCBk
aWQgbm90IGVuZCB1cCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG5ldG1hcAorCQkgKiBSWCByaW5n
cy4gKi8KKwkJbWJxX3NhZmVfcHVyZ2UoJmtyaW5nLT5yeF9xdWV1ZSk7CisJCW5tX29zX21pdGln
YXRpb25fY2xlYW51cCgmZ25hLT5taXRbcl0pOworCX0KKworCS8qIERlY3JlbWVudCByZWZlcmVu
Y2UgY291bnRlciBmb3IgdGhlIG1idWZzIGluIHRoZQorCSAqIFRYIHBvb2xzLiBUaGVzZSBtYnVm
cyBjYW4gYmUgc3RpbGwgcGVuZGluZyBpbiBkcml2ZXJzLAorCSAqIChlLmcuIHRoaXMgaGFwcGVu
cyB3aXRoIHZpcnRpby1uZXQgZHJpdmVyLCB3aGljaAorCSAqIGRvZXMgbGF6eSByZWNsYWltaW5n
IG9mIHRyYW5zbWl0dGVkIG1idWZzKS4gKi8KKwlmb3JfZWFjaF90eF9rcmluZyhyLCBrcmluZywg
bmEpIHsKKwkJLyogV2UgbXVzdCByZW1vdmUgdGhlIGRlc3RydWN0b3Igb24gdGhlIFRYIGV2ZW50
LAorCQkgKiBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGludm9rZXMgbmV0bWFwIGNvZGUsIGFuZAor
CQkgKiB0aGUgbmV0bWFwIG1vZHVsZSBtYXkgZGlzYXBwZWFyIGJlZm9yZSB0aGUKKwkJICogVFgg
ZXZlbnQgaXMgY29uc3VtZWQuICovCisJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9s
b2NrKTsKKwkJaWYgKGtyaW5nLT50eF9ldmVudCkgeworCQkJU0VUX01CVUZfREVTVFJVQ1RPUihr
cmluZy0+dHhfZXZlbnQsIE5VTEwpOworCQl9CisJCWtyaW5nLT50eF9ldmVudCA9IE5VTEw7CisJ
CW10eF91bmxvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50X2xvY2spOworCX0KKworCWlmIChuYS0+
YWN0aXZlX2ZkcyA9PSAwKSB7CisJCW5tX29zX2ZyZWUoZ25hLT5taXQpOworCisJCWZvcl9lYWNo
X3J4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbWJxX3NhZmVfZmluaSgma3JpbmctPnJ4X3F1
ZXVlKTsKKwkJfQorCisJCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbXR4
X2Rlc3Ryb3koJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCWlmIChrcmluZy0+dHhfcG9vbCA9
PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvciAoaT0wOyBpPG5hLT5udW1f
dHhfZGVzYzsgaSsrKSB7CisJCQkJaWYgKGtyaW5nLT50eF9wb29sW2ldKSB7CisJCQkJCW1fZnJl
ZW0oa3JpbmctPnR4X3Bvb2xbaV0pOworCQkJCX0KKwkJCX0KKwkJCW5tX29zX2ZyZWUoa3Jpbmct
PnR4X3Bvb2wpOworCQkJa3JpbmctPnR4X3Bvb2wgPSBOVUxMOworCQl9CisKKyNpZmRlZiBSQVRF
X0dFTkVSSUMKKwkJaWYgKC0tcmF0ZV9jdHgucmVmY291bnQgPT0gMCkgeworCQkJRCgiZGVsX3Rp
bWVyKCkiKTsKKwkJCWRlbF90aW1lcigmcmF0ZV9jdHgudGltZXIpOworCQl9CisjZW5kaWYKKwl9
CisKKwlyZXR1cm4gMDsKK30KIAogLyogRW5hYmxlL2Rpc2FibGUgbmV0bWFwIG1vZGUgZm9yIGEg
Z2VuZXJpYyBuZXR3b3JrIGludGVyZmFjZS4gKi8KIHN0YXRpYyBpbnQKIGdlbmVyaWNfbmV0bWFw
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBlbmFibGUpCiB7CiAJc3Ry
dWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf
YWRhcHRlciAqKW5hOwotCXN0cnVjdCBtYnVmICptOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmty
aW5nID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAJaW50IGksIHI7CiAKLQlpZiAoIW5hKQorCWlmICgh
bmEpIHsKIAkJcmV0dXJuIEVJTlZBTDsKKwl9CiAKLSNpZmRlZiBSRUdfUkVTRVQKLQllcnJvciA9
IGlmcC0+bmV0ZGV2X29wcy0+bmRvX3N0b3AoaWZwKTsKLQlpZiAoZXJyb3IpIHsKLQkJcmV0dXJu
IGVycm9yOwotCX0KLSNlbmRpZiAvKiBSRUdfUkVTRVQgKi8KLQotCWlmIChlbmFibGUpIHsgLyog
RW5hYmxlIG5ldG1hcCBtb2RlLiAqLwotCQkvKiBJbml0IHRoZSBtaXRpZ2F0aW9uIHN1cHBvcnQg
b24gYWxsIHRoZSByeCBxdWV1ZXMuICovCi0JCWduYS0+bWl0ID0gbWFsbG9jKG5hLT5udW1fcnhf
cmluZ3MgKiBzaXplb2Yoc3RydWN0IG5tX2dlbmVyaWNfbWl0KSwKLQkJCQkJTV9ERVZCVUYsIE1f
Tk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAoIWVuYWJsZSkgeworCQkvKiBUaGlzIGlzIGFjdHVhbGx5
IGFuIHVucmVnaWYuICovCisJCXJldHVybiBnZW5lcmljX25ldG1hcF91bnJlZ2lzdGVyKG5hKTsK
Kwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIg
JXAgZ29lcyBvbiIsIG5hKTsKKwkJLyogRG8gYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB3aGVuIChu
YS0+YWN0aXZlX2ZkcyA9PSAwKSwgdG8KKwkJICogc2ltcGxpZnkgZXJyb3IgbWFuYWdlbWVudC4g
Ki8KKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG1pdGlnYXRpb24gc3VwcG9ydCBvbiBhbGwg
dGhlIHJ4IHF1ZXVlcy4gKi8KKwkJZ25hLT5taXQgPSBubV9vc19tYWxsb2MobmEtPm51bV9yeF9y
aW5ncyAqIHNpemVvZihzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQpKTsKIAkJaWYgKCFnbmEtPm1pdCkg
ewogCQkJRCgibWl0aWdhdGlvbiBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJZXJyb3IgPSBFTk9N
RU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQlmb3IgKHI9MDsgcjxuYS0+bnVtX3J4X3JpbmdzOyBy
KyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9pbml0KCZnbmEtPm1pdFtyXSwgciwgbmEpOwogCi0J
CS8qIEluaXRpYWxpemUgdGhlIHJ4IHF1ZXVlLCBhcyBnZW5lcmljX3J4X2hhbmRsZXIoKSBjYW4K
LQkJICogYmUgY2FsbGVkIGFzIHNvb24gYXMgbmV0bWFwX2NhdGNoX3J4KCkgcmV0dXJucy4KLQkJ
ICovCi0JCWZvciAocj0wOyByPG5hLT5udW1fcnhfcmluZ3M7IHIrKykgewotCQkJbWJxX3NhZmVf
aW5pdCgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJZm9yX2VhY2hfcnhfa3Jpbmcociwg
a3JpbmcsIG5hKSB7CisJCQkvKiBJbml0IG1pdGlnYXRpb24gc3VwcG9ydC4gKi8KKwkJCW5tX29z
X21pdGlnYXRpb25faW5pdCgmZ25hLT5taXRbcl0sIHIsIG5hKTsKKworCQkJLyogSW5pdGlhbGl6
ZSB0aGUgcnggcXVldWUsIGFzIGdlbmVyaWNfcnhfaGFuZGxlcigpIGNhbgorCQkJICogYmUgY2Fs
bGVkIGFzIHNvb24gYXMgbm1fb3NfY2F0Y2hfcngoKSByZXR1cm5zLgorCQkJICovCisJCQltYnFf
c2FmZV9pbml0KCZrcmluZy0+cnhfcXVldWUpOwogCQl9CiAKIAkJLyoKLQkJICogUHJlYWxsb2Nh
dGUgcGFja2V0IGJ1ZmZlcnMgZm9yIHRoZSB0eCByaW5ncy4KKwkJICogUHJlcGFyZSBtYnVmIHBv
b2xzIChwYXJhbGxlbCB0byB0aGUgdHggcmluZ3MpLCBmb3IgcGFja2V0CisJCSAqIHRyYW5zbWlz
c2lvbi4gRG9uJ3QgcHJlYWxsb2NhdGUgdGhlIG1idWZzIGhlcmUsIGl0J3Mgc2ltcGxlcgorCQkg
KiB0byBsZWF2ZSB0aGlzIHRhc2sgdG8gdHhzeW5jLgogCQkgKi8KLQkJZm9yIChyPTA7IHI8bmEt
Pm51bV90eF9yaW5nczsgcisrKQotCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bvb2wgPSBOVUxMOwot
CQlmb3IgKHI9MDsgcjxuYS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCW5hLT50eF9yaW5nc1ty
XS50eF9wb29sID0gbWFsbG9jKG5hLT5udW1fdHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAq
KSwKLQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKLQkJCWlmICghbmEtPnR4X3Jp
bmdzW3JdLnR4X3Bvb2wpIHsKKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJ
CQlrcmluZy0+dHhfcG9vbCA9IE5VTEw7CisJCX0KKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3Jp
bmcsIG5hKSB7CisJCQlrcmluZy0+dHhfcG9vbCA9CisJCQkJbm1fb3NfbWFsbG9jKG5hLT5udW1f
dHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSk7CisJCQlpZiAoIWtyaW5nLT50eF9wb29s
KSB7CiAJCQkJRCgidHhfcG9vbCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJCWVycm9yID0gRU5P
TUVNOwogCQkJCWdvdG8gZnJlZV90eF9wb29sczsKIAkJCX0KLQkJCWZvciAoaT0wOyBpPG5hLT5u
dW1fdHhfZGVzYzsgaSsrKQotCQkJCW5hLT50eF9yaW5nc1tyXS50eF9wb29sW2ldID0gTlVMTDsK
LQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKSB7Ci0JCQkJbSA9IG5ldG1hcF9n
ZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEpKTsKLQkJCQlpZiAoIW0pIHsKLQkJCQkJRCgidHhf
cG9vbFslZF0gYWxsb2NhdGlvbiBmYWlsZWQiLCBpKTsKLQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0J
CQkJCWdvdG8gZnJlZV90eF9wb29sczsKLQkJCQl9Ci0JCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bv
b2xbaV0gPSBtOwotCQkJfQorCQkJbXR4X2luaXQoJmtyaW5nLT50eF9ldmVudF9sb2NrLCAidHhf
ZXZlbnRfbG9jayIsCisJCQkJIE5VTEwsIE1UWF9TUElOKTsKIAkJfQorCX0KKworCWZvcl9lYWNo
X3J4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGty
aW5nKSkgeworCQkJRCgiUlggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvbiIs
IHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJfQorCisJfQor
CWZvcl9lYWNoX3R4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5k
aW5nX29uKGtyaW5nKSkgeworCQkJRCgiVFggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAg
Z29lcyBvbiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJ
fQorCX0KKworCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkvKiBJbml0aWFs
aXplIHR4X3Bvb2wgYW5kIHR4X2V2ZW50LiAqLworCQlmb3IgKGk9MDsgaTxuYS0+bnVtX3R4X2Rl
c2M7IGkrKykgeworCQkJa3JpbmctPnR4X3Bvb2xbaV0gPSBOVUxMOworCQl9CisKKwkJa3Jpbmct
PnR4X2V2ZW50ID0gTlVMTDsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQly
dG5sX2xvY2soKTsKKwogCQkvKiBQcmVwYXJlIHRvIGludGVyY2VwdCBpbmNvbWluZyB0cmFmZmlj
LiAqLwotCQllcnJvciA9IG5ldG1hcF9jYXRjaF9yeChnbmEsIDEpOworCQllcnJvciA9IG5tX29z
X2NhdGNoX3J4KGduYSwgMSk7CiAJCWlmIChlcnJvcikgewotCQkJRCgibmV0ZGV2X3J4X2hhbmRs
ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCUQoIm5tX29zX2NhdGNoX3J4
KDEpIGZhaWxlZCAoJWQpIiwgZXJyb3IpOwogCQkJZ290byByZWdpc3Rlcl9oYW5kbGVyOwogCQl9
Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOwogCiAJCS8qIE1ha2UgbmV0bWFwIGNv
bnRyb2wgdGhlIHBhY2tldCBzdGVlcmluZy4gKi8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMSk7
CisJCWVycm9yID0gbm1fb3NfY2F0Y2hfdHgoZ25hLCAxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlE
KCJubV9vc19jYXRjaF90eCgxKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCWdvdG8gY2F0Y2hf
cng7CisJCX0KIAogCQlydG5sX3VubG9jaygpOwogCisJCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVU
TUFQX09OOworCiAjaWZkZWYgUkFURV9HRU5FUklDCiAJCWlmIChyYXRlX2N0eC5yZWZjb3VudCA9
PSAwKSB7CiAJCQlEKCJzZXR1cF90aW1lcigpIik7CkBAIC0zMjksNzUgKzUzNywyOCBAQAogCQl9
CiAJCXJhdGVfY3R4LnJlZmNvdW50Kys7CiAjZW5kaWYgLyogUkFURSAqLwotCi0JfSBlbHNlIGlm
IChuYS0+dHhfcmluZ3NbMF0udHhfcG9vbCkgewotCQkvKiBEaXNhYmxlIG5ldG1hcCBtb2RlLiBX
ZSBlbnRlciBoZXJlIG9ubHkgaWYgdGhlIHByZXZpb3VzCi0JCSAgIGdlbmVyaWNfbmV0bWFwX3Jl
Z2lzdGVyKG5hLCAxKSB3YXMgc3VjY2Vzc2Z1bC4KLQkJICAgSWYgaXQgd2FzIG5vdCwgbmEtPnR4
X3JpbmdzWzBdLnR4X3Bvb2wgd2FzIHNldCB0byBOVUxMIGJ5IHRoZQotCQkgICBlcnJvciBoYW5k
bGluZyBjb2RlIGJlbG93LiAqLwotCQlydG5sX2xvY2soKTsKLQotCQluYS0+bmFfZmxhZ3MgJj0g
fk5BRl9ORVRNQVBfT047Ci0KLQkJLyogUmVsZWFzZSBwYWNrZXQgc3RlZXJpbmcgY29udHJvbC4g
Ki8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMCk7Ci0KLQkJLyogRG8gbm90IGludGVyY2VwdCBw
YWNrZXRzIG9uIHRoZSByeCBwYXRoLiAqLwotCQluZXRtYXBfY2F0Y2hfcngoZ25hLCAwKTsKLQot
CQlydG5sX3VubG9jaygpOwotCi0JCS8qIEZyZWUgdGhlIG1idWZzIGdvaW5nIHRvIHRoZSBuZXRt
YXAgcmluZ3MgKi8KLQkJZm9yIChyPTA7IHI8bmEtPm51bV9yeF9yaW5nczsgcisrKSB7Ci0JCQlt
YnFfc2FmZV9wdXJnZSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKLQkJCW1icV9zYWZlX2Rl
c3Ryb3koJm5hLT5yeF9yaW5nc1tyXS5yeF9xdWV1ZSk7Ci0JCX0KLQotCQlmb3IgKHI9MDsgcjxu
YS0+bnVtX3J4X3JpbmdzOyByKyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKCZnbmEt
Pm1pdFtyXSk7Ci0JCWZyZWUoZ25hLT5taXQsIE1fREVWQlVGKTsKLQotCQlmb3IgKHI9MDsgcjxu
YS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsg
aSsrKSB7Ci0JCQkJbV9mcmVlbShuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbFtpXSk7Ci0JCQl9Ci0J
CQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0JCX0KLQotI2lmZGVm
IFJBVEVfR0VORVJJQwotCQlpZiAoLS1yYXRlX2N0eC5yZWZjb3VudCA9PSAwKSB7Ci0JCQlEKCJk
ZWxfdGltZXIoKSIpOwotCQkJZGVsX3RpbWVyKCZyYXRlX2N0eC50aW1lcik7Ci0JCX0KLSNlbmRp
ZgogCX0KIAotI2lmZGVmIFJFR19SRVNFVAotCWVycm9yID0gaWZwLT5uZXRkZXZfb3BzLT5uZG9f
b3BlbihpZnApOwotCWlmIChlcnJvcikgewotCQlnb3RvIGZyZWVfdHhfcG9vbHM7Ci0JfQotI2Vu
ZGlmCi0KIAlyZXR1cm4gMDsKIAorCS8qIEhlcmUgKG5hLT5hY3RpdmVfZmRzID09IDApIGhvbGRz
LiAqLworY2F0Y2hfcng6CisJbm1fb3NfY2F0Y2hfcngoZ25hLCAwKTsKIHJlZ2lzdGVyX2hhbmRs
ZXI6CiAJcnRubF91bmxvY2soKTsKIGZyZWVfdHhfcG9vbHM6Ci0JZm9yIChyPTA7IHI8bmEtPm51
bV90eF9yaW5nczsgcisrKSB7Ci0JCWlmIChuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbCA9PSBOVUxM
KQorCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQltdHhfZGVzdHJveSgma3Jp
bmctPnR4X2V2ZW50X2xvY2spOworCQlpZiAoa3JpbmctPnR4X3Bvb2wgPT0gTlVMTCkgewogCQkJ
Y29udGludWU7Ci0JCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKQotCQkJaWYgKG5h
LT50eF9yaW5nc1tyXS50eF9wb29sW2ldKQotCQkJCW1fZnJlZW0obmEtPnR4X3JpbmdzW3JdLnR4
X3Bvb2xbaV0pOwotCQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0J
CW5hLT50eF9yaW5nc1tyXS50eF9wb29sID0gTlVMTDsKLQl9Ci0JZm9yIChyPTA7IHI8bmEtPm51
bV9yeF9yaW5nczsgcisrKSB7Ci0JCW5ldG1hcF9taXRpZ2F0aW9uX2NsZWFudXAoJmduYS0+bWl0
W3JdKTsKLQkJbWJxX3NhZmVfZGVzdHJveSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJ
fQorCQlubV9vc19mcmVlKGtyaW5nLT50eF9wb29sKTsKKwkJa3JpbmctPnR4X3Bvb2wgPSBOVUxM
OwogCX0KLQlmcmVlKGduYS0+bWl0LCBNX0RFVkJVRik7CisJZm9yX2VhY2hfcnhfa3Jpbmcociwg
a3JpbmcsIG5hKSB7CisJCW1icV9zYWZlX2ZpbmkoJmtyaW5nLT5yeF9xdWV1ZSk7CisJfQorCW5t
X29zX2ZyZWUoZ25hLT5taXQpOwogb3V0OgogCiAJcmV0dXJuIGVycm9yOwpAQCAtNDExLDI0ICs1
NzIsNjcgQEAKIHN0YXRpYyB2b2lkCiBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWJ1
ZiAqbSkKIHsKLQluZXRtYXBfZ2VuZXJpY19pcnEoTUJVRl9JRlAobSksIE1CVUZfVFhRKG0pLCBO
VUxMKTsKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoR0VOX1RYX01CVUZfSUZQKG0p
KTsKKwlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwl1bnNpZ25lZCBpbnQgciA9IE1CVUZf
VFhRKG0pOworCXVuc2lnbmVkIGludCByX29yaWcgPSByOworCisJaWYgKHVubGlrZWx5KCFubV9u
ZXRtYXBfb24obmEpIHx8IHIgPj0gbmEtPm51bV90eF9yaW5ncykpIHsKKwkJRCgiRXJyb3I6IG5v
IG5ldG1hcCBhZGFwdGVyIG9uIGRldmljZSAlcCIsCisJCSAgR0VOX1RYX01CVUZfSUZQKG0pKTsK
KwkJcmV0dXJuOworCX0KKworCS8qCisJICogRmlyc3QsIGNsZWFyIHRoZSBldmVudCBtYnVmLgor
CSAqIEluIHByaW5jaXBsZSwgdGhlIGV2ZW50ICdtJyBzaG91bGQgbWF0Y2ggdGhlIG9uZSBzdG9y
ZWQKKwkgKiBvbiByaW5nICdyJy4gSG93ZXZlciB3ZSBjaGVjayBpdCBleHBsaWNpdGVseSB0byBz
dGF5CisJICogc2FmZSBhZ2FpbnN0IGxvd2VyIGxheWVycyAocWRpc2MsIGRyaXZlciwgZXRjLikg
Y2hhbmdpbmcKKwkgKiBNQlVGX1RYUShtKSB1bmRlciBvdXIgZmVldC4gSWYgdGhlIG1hdGNoIGlz
IG5vdCBmb3VuZAorCSAqIG9uICdyJywgd2UgdHJ5IHRvIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNv
bWUgb3RoZXIgcmluZy4KKwkgKi8KKyAgICAgICAgZm9yICg7OykgeworCQlib29sIG1hdGNoID0g
ZmFsc2U7CisKKwkJa3JpbmcgPSAmbmEtPnR4X3JpbmdzW3JdOworCQltdHhfbG9ja19zcGluKCZr
cmluZy0+dHhfZXZlbnRfbG9jayk7CisJCWlmIChrcmluZy0+dHhfZXZlbnQgPT0gbSkgeworCQkJ
a3JpbmctPnR4X2V2ZW50ID0gTlVMTDsKKwkJCW1hdGNoID0gdHJ1ZTsKKwkJfQorCQltdHhfdW5s
b2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKworCQlpZiAobWF0Y2gpIHsKKwkJCWlm
IChyICE9IHJfb3JpZykgeworCQkJCVJEKDEsICJldmVudCAlcCBtaWdyYXRlZDogcmluZyAldSAt
LT4gJXUiLAorCQkJCSAgICAgIG0sIHJfb3JpZywgcik7CisJCQl9CisJCQlicmVhazsKKwkJfQor
CisJCWlmICgrK3IgPT0gbmEtPm51bV90eF9yaW5ncykgciA9IDA7CisKKwkJaWYgKHIgPT0gcl9v
cmlnKSB7CisJCQlSRCgxLCAiQ2Fubm90IG1hdGNoIGV2ZW50ICVwIiwgbSk7CisJCQlyZXR1cm47
CisJCX0KKwl9CisKKwkvKiBTZWNvbmQsIHdha2UgdXAgY2xpZW50cy4gVGhleSB3aWxsIHJlY2xh
aW0gdGhlIGV2ZW50IHRocm91Z2gKKwkgKiB0eHN5bmMuICovCisJbmV0bWFwX2dlbmVyaWNfaXJx
KG5hLCByLCBOVUxMKTsKICNpZmRlZiBfX0ZyZWVCU0RfXwotCWlmIChuZXRtYXBfdmVyYm9zZSkK
LQkJUkQoNSwgIlR4IGlycSAoJXApIHF1ZXVlICVkIGluZGV4ICVkIiAsIG0sIE1CVUZfVFhRKG0p
LCAoaW50KSh1aW50cHRyX3QpbS0+bV9leHQuZXh0X2FyZzEpOwotCW5ldG1hcF9kZWZhdWx0X21i
dWZfZGVzdHJ1Y3RvcihtKTsKLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotCUlGUkFURShyYXRl
X2N0eC5uZXcudHhpcnErKyk7CisJdm9pZF9tYnVmX2R0b3IobSwgTlVMTCwgTlVMTCk7CisjZW5k
aWYKIH0KIAotZXh0ZXJuIGludCBuZXRtYXBfYWRhcHRpdmVfaW87Ci0KIC8qIFJlY29yZCBjb21w
bGV0ZWQgdHJhbnNtaXNzaW9ucyBhbmQgdXBkYXRlIGh3dGFpbC4KICAqCiAgKiBUaGUgb2xkZXN0
IHR4IGJ1ZmZlciBub3QgeWV0IGNvbXBsZXRlZCBpcyBhdCBucl9od3RhaWwgKyAxLAogICogbnJf
aHdjdXIgaXMgdGhlIGZpcnN0IHVuc2VudCBidWZmZXIuCiAgKi8KIHN0YXRpYyB1X2ludAotZ2Vu
ZXJpY19uZXRtYXBfdHhfY2xlYW4oc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitnZW5lcmlj
X25ldG1hcF90eF9jbGVhbihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IHR4cWRpc2Mp
CiB7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50
IG5tX2kgPSBubV9uZXh0KGtyaW5nLT5ucl9od3RhaWwsIGxpbSk7CkBAIC00MzYsMzkgKzY0MCw1
MiBAQAogCXVfaW50IG4gPSAwOwogCXN0cnVjdCBtYnVmICoqdHhfcG9vbCA9IGtyaW5nLT50eF9w
b29sOwogCisJTkQoImh3Y3VyID0gJWQsIGh3dGFpbCA9ICVkIiwga3JpbmctPm5yX2h3Y3VyLCBr
cmluZy0+bnJfaHd0YWlsKTsKKwogCXdoaWxlIChubV9pICE9IGh3Y3VyKSB7IC8qIGJ1ZmZlcnMg
bm90IGNvbXBsZXRlZCAqLwogCQlzdHJ1Y3QgbWJ1ZiAqbSA9IHR4X3Bvb2xbbm1faV07CiAKLQkJ
aWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCS8qIHRoaXMgaXMgZG9uZSwgdHJ5IHRvIHJl
cGxlbmlzaCB0aGUgZW50cnkgKi8KLQkJCXR4X3Bvb2xbbm1faV0gPSBtID0gbmV0bWFwX2dldF9t
YnVmKE5FVE1BUF9CVUZfU0laRShrcmluZy0+bmEpKTsKKwkJaWYgKHR4cWRpc2MpIHsKKwkJCWlm
IChtID09IE5VTEwpIHsKKwkJCQkvKiBOb3RoaW5nIHRvIGRvLCB0aGlzIGlzIGdvaW5nCisJCQkJ
ICogdG8gYmUgcmVwbGVuaXNoZWQuICovCisJCQkJUkQoMywgIklzIHRoaXMgaGFwcGVuaW5nPyIp
OworCisJCQl9IGVsc2UgaWYgKE1CVUZfUVVFVUVEKG0pKSB7CisJCQkJYnJlYWs7IC8qIE5vdCBk
ZXF1ZXVlZCB5ZXQuICovCisKKwkJCX0gZWxzZSBpZiAoTUJVRl9SRUZDTlQobSkgIT0gMSkgewor
CQkJCS8qIFRoaXMgbWJ1ZiBoYXMgYmVlbiBkZXF1ZXVlZCBidXQgaXMgc3RpbGwgYnVzeQorCQkJ
CSAqIChyZWZjb3VudCBpcyAyKS4KKwkJCQkgKiBMZWF2ZSBpdCB0byB0aGUgZHJpdmVyIGFuZCBy
ZXBsZW5pc2guICovCisJCQkJbV9mcmVlbShtKTsKKwkJCQl0eF9wb29sW25tX2ldID0gTlVMTDsK
KwkJCX0KKworCQl9IGVsc2UgewogCQkJaWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCQlE
KCJtYnVmIGFsbG9jYXRpb24gZmFpbGVkLCBYWFggZXJyb3IiKTsKLQkJCQkvLyBYWFggaG93IGRv
IHdlIHByb2NlZWQgPyBicmVhayA/Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJaW50IGV2ZW50
X2NvbnN1bWVkOworCisJCQkJLyogVGhpcyBzbG90IHdhcyB1c2VkIHRvIHBsYWNlIGFuIGV2ZW50
LiAqLworCQkJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCQlldmVu
dF9jb25zdW1lZCA9IChrcmluZy0+dHhfZXZlbnQgPT0gTlVMTCk7CisJCQkJbXR4X3VubG9ja19z
cGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7CisJCQkJaWYgKCFldmVudF9jb25zdW1lZCkgewor
CQkJCQkvKiBUaGUgZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIHlldCwKKwkJCQkJICogc3Rp
bGwgYnVzeSBpbiB0aGUgZHJpdmVyLiAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogVGhl
IGV2ZW50IGhhcyBiZWVuIGNvbnN1bWVkLCB3ZSBjYW4gZ28KKwkJCQkgKiBhaGVhZC4gKi8KKwor
CQkJfSBlbHNlIGlmIChNQlVGX1JFRkNOVChtKSAhPSAxKSB7CisJCQkJLyogVGhpcyBtYnVmIGlz
IHN0aWxsIGJ1c3k6IGl0cyByZWZjbnQgaXMgMi4gKi8KKwkJCQlicmVhazsKIAkJCX0KLQkJfSBl
bHNlIGlmIChHRVRfTUJVRl9SRUZDTlQobSkgIT0gMSkgewotCQkJYnJlYWs7IC8qIFRoaXMgbWJ1
ZiBpcyBzdGlsbCBidXN5OiBpdHMgcmVmY250IGlzIDIuICovCiAJCX0KKwogCQluKys7CiAJCW5t
X2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0jaWYgMCAvKiByYXRlIGFkYXB0YXRpb24gKi8KLQkJ
aWYgKG5ldG1hcF9hZGFwdGl2ZV9pbyA+IDEpIHsKLQkJCWlmIChuID49IG5ldG1hcF9hZGFwdGl2
ZV9pbykKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8pIHsKLQkJ
CS8qIGlmIGh3Y3VyIC0gbm1faSA8IGxpbS84IGRvIGFuIGVhcmx5IGJyZWFrCi0JCQkgKiBzbyB3
ZSBwcmV2ZW50IHRoZSBzZW5kZXIgZnJvbSBzdGFsbGluZy4gU2VlIENWVC4KLQkJCSAqLwotCQkJ
aWYgKGh3Y3VyID49IG5tX2kpIHsKLQkJCQlpZiAoaHdjdXIgLSBubV9pIDwgbGltLzIpCi0JCQkJ
CWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaHdjdXIgKyBsaW0gKyAxIC0gbm1faSA8IGxp
bS8yKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2VuZGlmCiAJfQogCWtyaW5nLT5ucl9od3Rh
aWwgPSBubV9wcmV2KG5tX2ksIGxpbSk7CiAJTkQoInR4IGNvbXBsZXRlZCBbJWRdIC0+IGh3dGFp
bCAlZCIsIG4sIGtyaW5nLT5ucl9od3RhaWwpOwpAQCAtNDc2LDIzICs2OTMsMTcgQEAKIAlyZXR1
cm4gbjsKIH0KIAotCi0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZl
ciBiZXR3ZWVuIG5yX2h3dGFpbCArMSBhbmQgaHdjdXIuCi0gKiBDb21wdXRlIGEgcG9zaXRpb24g
aW4gdGhlIG1pZGRsZSwgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZQotICogYSBub3RpZmljYXRpb24u
Ci0gKi8KKy8qIENvbXB1dGUgYSBzbG90IGluZGV4IGluIHRoZSBtaWRkbGUgYmV0d2VlbiBpbmYg
YW5kIHN1cC4gKi8KIHN0YXRpYyBpbmxpbmUgdV9pbnQKLWdlbmVyaWNfdHhfZXZlbnRfbWlkZGxl
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCB1X2ludCBod2N1cikKK3JpbmdfbWlkZGxlKHVf
aW50IGluZiwgdV9pbnQgc3VwLCB1X2ludCBsaW0pCiB7Ci0JdV9pbnQgbiA9IGtyaW5nLT5ua3Jf
bnVtX3Nsb3RzOwotCXVfaW50IG50YyA9IG5tX25leHQoa3JpbmctPm5yX2h3dGFpbCwgbi0xKTsK
Kwl1X2ludCBuID0gbGltICsgMTsKIAl1X2ludCBlOwogCi0JaWYgKGh3Y3VyID49IG50Yykgewot
CQllID0gKGh3Y3VyICsgbnRjKSAvIDI7CisJaWYgKHN1cCA+PSBpbmYpIHsKKwkJZSA9IChzdXAg
KyBpbmYpIC8gMjsKIAl9IGVsc2UgeyAvKiB3cmFwIGFyb3VuZCAqLwotCQllID0gKGh3Y3VyICsg
biArIG50YykgLyAyOworCQllID0gKHN1cCArIG4gKyBpbmYpIC8gMjsKIAkJaWYgKGUgPj0gbikg
ewogCQkJZSAtPSBuOwogCQl9CkBAIC01MDYsMzUgKzcxNyw1OSBAQAogCXJldHVybiBlOwogfQog
Ci0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZlciBiZXR3ZWVuIG5y
X2h3dGFpbCsxIGFuZCBod2N1ci4KLSAqIFNjaGVkdWxlIGEgbm90aWZpY2F0aW9uIGFwcHJveGlt
YXRlbHkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHdvLgotICogVGhlcmUgaXMgYSByYWNlIGJ1dCB0
aGlzIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0eHN5bmMgd2hpY2ggZG9lcwotICogYSBkb3VibGUg
Y2hlY2suCi0gKi8KIHN0YXRpYyB2b2lkCiBnZW5lcmljX3NldF90eF9ldmVudChzdHJ1Y3QgbmV0
bWFwX2tyaW5nICprcmluZywgdV9pbnQgaHdjdXIpCiB7CisJdV9pbnQgbGltID0ga3JpbmctPm5r
cl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBtYnVmICptOwogCXVfaW50IGU7CisJdV9pbnQgbnRj
ID0gbm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBsaW0pOyAvKiBuZXh0IHRvIGNsZWFuICovCiAK
LQlpZiAobm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+bmtyX251bV9zbG90cyAtMSkg
PT0gaHdjdXIpIHsKKwlpZiAobnRjID09IGh3Y3VyKSB7CiAJCXJldHVybjsgLyogYWxsIGJ1ZmZl
cnMgYXJlIGZyZWUgKi8KIAl9Ci0JZSA9IGdlbmVyaWNfdHhfZXZlbnRfbWlkZGxlKGtyaW5nLCBo
d2N1cik7CisKKwkvKgorCSAqIFdlIGhhdmUgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBkcml2ZXIg
YmV0d2VlbiBod3RhaWwrMQorCSAqIGFuZCBod2N1ciwgYW5kIHdlIGhhdmUgdG8gY2hvc2Ugb25l
IG9mIHRoZXNlIHNsb3QgdG8KKwkgKiBnZW5lcmF0ZSBhIG5vdGlmaWNhdGlvbi4KKwkgKiBUaGVy
ZSBpcyBhIHJhY2UgYnV0IHRoaXMgaXMgb25seSBjYWxsZWQgd2l0aGluIHR4c3luYyB3aGljaAor
CSAqIGRvZXMgYSBkb3VibGUgY2hlY2suCisJICovCisjaWYgMAorCS8qIENob29zZSBhIHNsb3Qg
aW4gdGhlIG1pZGRsZSwgc28gdGhhdCB3ZSBkb24ndCByaXNrIGVuZGluZworCSAqIHVwIGluIGEg
c2l0dWF0aW9uIHdoZXJlIHRoZSBjbGllbnQgY29udGludW91c2x5IHdha2UgdXAsCisJICogZmls
bHMgb25lIG9yIGEgZmV3IFRYIHNsb3RzIGFuZCBnbyB0byBzbGVlcCBhZ2Fpbi4gKi8KKwllID0g
cmluZ19taWRkbGUobnRjLCBod2N1ciwgbGltKTsKKyNlbHNlCisJLyogQ2hvb3NlIHRoZSBmaXJz
dCBwZW5kaW5nIHNsb3QsIHRvIGJlIHNhZmUgYWdhaW5zdCBkcml2ZXIKKwkgKiByZW9yZGVyaW5n
IG1idWYgdHJhbnNtaXNzaW9ucy4gKi8KKwllID0gbnRjOworI2VuZGlmCiAKIAltID0ga3Jpbmct
PnR4X3Bvb2xbZV07Ci0JTkQoNSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQg
JWQiLCBlLCBtLCBtID8gR0VUX01CVUZfUkVGQ05UKG0pIDogLTIgKTsKIAlpZiAobSA9PSBOVUxM
KSB7Ci0JCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGV2ZW50IG9u
IHRoZSBuZXRtYXAKLQkJICAgc2xvdCAnZSc6IFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJ
CS8qIEFuIGV2ZW50IGlzIGFscmVhZHkgaW4gcGxhY2UuICovCiAJCXJldHVybjsKIAl9Ci0Ja3Jp
bmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJbXR4X2xvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50
X2xvY2spOworCWlmIChrcmluZy0+dHhfZXZlbnQpIHsKKwkJLyogQW4gZXZlbnQgaXMgYWxyZWFk
eSBpbiBwbGFjZS4gKi8KKwkJbXR4X3VubG9ja19zcGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7
CisJCXJldHVybjsKKwl9CisKIAlTRVRfTUJVRl9ERVNUUlVDVE9SKG0sIGdlbmVyaWNfbWJ1Zl9k
ZXN0cnVjdG9yKTsKKwlrcmluZy0+dHhfZXZlbnQgPSBtOworCW10eF91bmxvY2tfc3Bpbigma3Jp
bmctPnR4X2V2ZW50X2xvY2spOworCisJa3JpbmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJTkQo
NSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQgJWQiLCBlLCBtLCBtID8gTUJV
Rl9SRUZDTlQobSkgOiAtMiApOwogCi0JLy8gWFhYIHdtYigpID8KLQkvKiBEZWNyZW1lbnQgdGhl
IHJlZmNvdW50IGFuIGZyZWUgaXQgaWYgd2UgaGF2ZSB0aGUgbGFzdCBvbmUuICovCisJLyogRGVj
cmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyB3aWxsIGZyZWUgaXQgaWYgd2UgbG9zZSB0aGUgcmFj
ZQorCSAqIHdpdGggdGhlIGRyaXZlci4gKi8KIAltX2ZyZWVtKG0pOwogCXNtcF9tYigpOwogfQpA
QCAtNTUxLDYgKzc4Niw3IEBACiBnZW5lcmljX25ldG1hcF90eHN5bmMoc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g
a3JpbmctPm5hOworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEgPSAoc3RydWN0
IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5p
ZnA7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdV9pbnQgbm1f
aTsJLyogaW5kZXggaW50byB0aGUgbmV0bWFwIHJpbmcgKi8gLy8gagpAQCAtNTYwLDggKzc5Niw2
IEBACiAKIAlJRlJBVEUocmF0ZV9jdHgubmV3LnR4c3luYysrKTsKIAotCS8vIFRPRE86IGhhbmRs
ZSB0aGUgY2FzZSBvZiBtYnVmIGFsbG9jYXRpb24gZmFpbHVyZQotCiAJcm1iKCk7CiAKIAkvKgpA
QCAtNTY5LDcyICs4MDMsMTIxIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlp
ZiAobm1faSAhPSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLworCQlz
dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyBhOworCQl1X2ludCBldmVudCA9IC0xOworCisJCWlmIChnbmEt
PnR4cWRpc2MgJiYgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwkJCS8qIEluIHR4cWRpc2MgbW9k
ZSwgd2UgYXNrIGZvciBhIGRlbGF5ZWQgbm90aWZpY2F0aW9uLAorCQkJICogYnV0IG9ubHkgd2hl
biBjdXIgPT0gaHd0YWlsLCB3aGljaCBtZWFucyB0aGF0IHRoZQorCQkJICogY2xpZW50IGlzIGdv
aW5nIHRvIGJsb2NrLiAqLworCQkJZXZlbnQgPSByaW5nX21pZGRsZShubV9pLCBoZWFkLCBsaW0p
OworCQkJTkQoMywgIlBsYWNlIHR4cWRpc2MgZXZlbnQgKGh3Y3VyPSV1LGV2ZW50PSV1LCIKKwkJ
CSAgICAgICJoZWFkPSV1LGh3dGFpbD0ldSkiLCBubV9pLCBldmVudCwgaGVhZCwKKwkJCSAgICAg
IGtyaW5nLT5ucl9od3RhaWwpOworCQl9CisKKwkJYS5pZnAgPSBpZnA7CisJCWEucmluZ19uciA9
IHJpbmdfbnI7CisJCWEuaGVhZCA9IGEudGFpbCA9IE5VTEw7CisKIAkJd2hpbGUgKG5tX2kgIT0g
aGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmctPnNsb3Rbbm1faV07
CiAJCQl1X2ludCBsZW4gPSBzbG90LT5sZW47CiAJCQl2b2lkICphZGRyID0gTk1CKG5hLCBzbG90
KTsKLQogCQkJLyogZGV2aWNlLXNwZWNpZmljICovCiAJCQlzdHJ1Y3QgbWJ1ZiAqbTsKIAkJCWlu
dCB0eF9yZXQ7CiAKIAkJCU5NX0NIRUNLX0FERFJfTEVOKG5hLCBhZGRyLCBsZW4pOwogCi0JCQkv
KiBUYWxlIGEgbWJ1ZiBmcm9tIHRoZSB0eCBwb29sIGFuZCBjb3B5IGluIHRoZSB1c2VyIHBhY2tl
dC4gKi8KKwkJCS8qIFRhbGUgYSBtYnVmIGZyb20gdGhlIHR4IHBvb2wgKHJlcGxlbmlzaGluZyB0
aGUgcG9vbAorCQkJICogZW50cnkgaWYgbmVjZXNzYXJ5KSBhbmQgY29weSBpbiB0aGUgdXNlciBw
YWNrZXQuICovCiAJCQltID0ga3JpbmctPnR4X3Bvb2xbbm1faV07Ci0JCQlpZiAodW5saWtlbHko
IW0pKSB7Ci0JCQkJUkQoNSwgIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiIpOwotCQkJCWtyaW5n
LT50eF9wb29sW25tX2ldID0gbSA9IG5ldG1hcF9nZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEp
KTsKLQkJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgewotCQkJCQlEKCJtYnVmIGFsbG9jYXRp
b24gZmFpbGVkIik7CisJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgeworCQkJCWtyaW5nLT50
eF9wb29sW25tX2ldID0gbSA9CisJCQkJCW5tX29zX2dldF9tYnVmKGlmcCwgTkVUTUFQX0JVRl9T
SVpFKG5hKSk7CisJCQkJaWYgKG0gPT0gTlVMTCkgeworCQkJCQlSRCgyLCAiRmFpbGVkIHRvIHJl
cGxlbmlzaCBtYnVmIik7CisJCQkJCS8qIEhlcmUgd2UgY291bGQgc2NoZWR1bGUgYSB0aW1lciB3
aGljaAorCQkJCQkgKiByZXRyaWVzIHRvIHJlcGxlbmlzaCBhZnRlciBhIHdoaWxlLAorCQkJCQkg
KiBhbmQgbm90aWZpZXMgdGhlIGNsaWVudCB3aGVuIGl0CisJCQkJCSAqIG1hbmFnZXMgdG8gcmVw
bGVuaXNoIHNvbWUgc2xvdHMuIEluCisJCQkJCSAqIGFueSBjYXNlIHdlIGJyZWFrIGVhcmx5IHRv
IGF2b2lkCisJCQkJCSAqIGNyYXNoZXMuICovCiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlJRlJB
VEUocmF0ZV9jdHgubmV3LnR4cmVwbCsrKTsKIAkJCX0KLQkJCS8qIFhYWCB3ZSBzaG91bGQgYXNr
IG5vdGlmaWNhdGlvbnMgd2hlbiBOU19SRVBPUlQgaXMgc2V0LAotCQkJICogb3Igcm91Z2hseSBl
dmVyeSBoYWxmIGZyYW1lLiBXZSBjYW4gb3B0aW1pemUgdGhpcwotCQkJICogYnkgbGF6aWx5IHJl
cXVlc3Rpbmcgbm90aWZpY2F0aW9ucyBvbmx5IHdoZW4gYQotCQkJICogdHJhbnNtaXNzaW9uIGZh
aWxzLiBQcm9iYWJseSB0aGUgYmVzdCB3YXkgaXMgdG8KLQkJCSAqIGJyZWFrIG9uIGZhaWx1cmVz
IGFuZCBzZXQgbm90aWZpY2F0aW9ucyB3aGVuCi0JCQkgKiByaW5nLT5jdXIgPT0gcmluZy0+dGFp
bCB8fCBubV9pICE9IGN1cgorCisJCQlhLm0gPSBtOworCQkJYS5hZGRyID0gYWRkcjsKKwkJCWEu
bGVuID0gbGVuOworCQkJYS5xZXZlbnQgPSAobm1faSA9PSBldmVudCk7CisJCQkvKiBXaGVuIG5v
dCBpbiB0eHFkaXNjIG1vZGUsIHdlIHNob3VsZCBhc2sKKwkJCSAqIG5vdGlmaWNhdGlvbnMgd2hl
biBOU19SRVBPUlQgaXMgc2V0LCBvciByb3VnaGx5CisJCQkgKiBldmVyeSBoYWxmIHJpbmcuIFRv
IG9wdGltaXplIHRoaXMsIHdlIHNldCBhCisJCQkgKiBub3RpZmljYXRpb24gZXZlbnQgd2hlbiB0
aGUgY2xpZW50IHJ1bnMgb3V0IG9mCisJCQkgKiBUWCByaW5nIHNwYWNlLCBvciB3aGVuIHRyYW5z
bWlzc2lvbiBmYWlscy4gSW4KKwkJCSAqIHRoZSBsYXR0ZXIgY2FzZSB3ZSBhbHNvIGJyZWFrIGVh
cmx5LgogCQkJICovCi0JCQl0eF9yZXQgPSBnZW5lcmljX3htaXRfZnJhbWUoaWZwLCBtLCBhZGRy
LCBsZW4sIHJpbmdfbnIpOworCQkJdHhfcmV0ID0gbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKCZh
KTsKIAkJCWlmICh1bmxpa2VseSh0eF9yZXQpKSB7Ci0JCQkJTkQoNSwgInN0YXJ0X3htaXQgZmFp
bGVkOiBlcnIgJWQgW25tX2kgJXUsIGhlYWQgJXUsIGh3dGFpbCAldV0iLAotCQkJCQkJdHhfcmV0
LCBubV9pLCBoZWFkLCBrcmluZy0+bnJfaHd0YWlsKTsKLQkJCQkvKgotCQkJCSAqIE5vIHJvb20g
Zm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4KLQkJCQkgKiBSZXF1ZXN0IGEgbm90
aWZpY2F0aW9uIEZPUiBBIFBSRVZJT1VTIE1CVUYsCi0JCQkJICogdGhlbiBjYWxsIGdlbmVyaWNf
bmV0bWFwX3R4X2NsZWFuKGtyaW5nKSB0byBkbyB0aGUKLQkJCQkgKiBkb3VibGUgY2hlY2sgYW5k
IHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMuCi0JCQkJICogSWYgdGhlcmUgaXMgc3Bh
Y2UgY29udGludWUsIGVsc2UgYnJlYWs7Ci0JCQkJICogTk9URTogdGhlIGRvdWJsZSBjaGVjayBp
cyBuZWNlc3NhcnkgaWYgdGhlIHByb2JsZW0KLQkJCQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBj
YWxsIGFmdGVyIHNlbHJlY29yZCgpLgotCQkJCSAqIEFsc28sIHdlIG5lZWQgc29tZSB3YXkgdG8g
dGVsbCB0aGUgY2FsbGVyIHRoYXQgbm90Ci0JCQkJICogYWxsIGJ1ZmZlcnMgd2VyZSBxdWV1ZWQg
b250byB0aGUgZGV2aWNlICh0aGlzIHdhcwotCQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRp
dmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFjZQotCQkJCSAqIGlzIHByZWFsbG9jYXRlZCkuIFRo
ZSBicmlkZ2UgaGFzIGEgc2ltaWxhciBwcm9ibGVtCi0JCQkJICogYW5kIHdlIHNvbHZlIGl0IHRo
ZXJlIGJ5IGRyb3BwaW5nIHRoZSBleGNlc3MgcGFja2V0cy4KLQkJCQkgKi8KLQkJCQlnZW5lcmlj
X3NldF90eF9ldmVudChrcmluZywgbm1faSk7Ci0JCQkJaWYgKGdlbmVyaWNfbmV0bWFwX3R4X2Ns
ZWFuKGtyaW5nKSkgeyAvKiBzcGFjZSBub3cgYXZhaWxhYmxlICovCi0JCQkJCWNvbnRpbnVlOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCWJyZWFrOworCQkJCWlmICghZ25hLT50eHFkaXNjKSB7CisJCQkJ
CS8qCisJCQkJCSAqIE5vIHJvb20gZm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4K
KwkJCQkJICogUmVxdWVzdCBhIG5vdGlmaWNhdGlvbiBGT1IgQSBQUkVWSU9VUyBNQlVGLAorCQkJ
CQkgKiB0aGVuIGNhbGwgZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcpIHRvIGRvIHRoZQor
CQkJCQkgKiBkb3VibGUgY2hlY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMu
CisJCQkJCSAqIElmIHRoZXJlIGlzIHNwYWNlIGNvbnRpbnVlLCBlbHNlIGJyZWFrOworCQkJCQkg
KiBOT1RFOiB0aGUgZG91YmxlIGNoZWNrIGlzIG5lY2Vzc2FyeSBpZiB0aGUgcHJvYmxlbQorCQkJ
CQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBjYWxsIGFmdGVyIHNlbHJlY29yZCgpLgorCQkJCQkg
KiBBbHNvLCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0IG5vdAorCQkJ
CQkgKiBhbGwgYnVmZmVycyB3ZXJlIHF1ZXVlZCBvbnRvIHRoZSBkZXZpY2UgKHRoaXMgd2FzCisJ
CQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRpdmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFj
ZQorCQkJCQkgKiBpcyBwcmVhbGxvY2F0ZWQpLiBUaGUgYnJpZGdlIGhhcyBhIHNpbWlsYXIgcHJv
YmxlbQorCQkJCQkgKiBhbmQgd2Ugc29sdmUgaXQgdGhlcmUgYnkgZHJvcHBpbmcgdGhlIGV4Y2Vz
cyBwYWNrZXRzLgorCQkJCQkgKi8KKwkJCQkJZ2VuZXJpY19zZXRfdHhfZXZlbnQoa3JpbmcsIG5t
X2kpOworCQkJCQlpZiAoZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcsIGduYS0+dHhxZGlz
YykpIHsKKwkJCQkJCS8qIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KKwkJCQkJCWNvbnRpbnVlOwor
CQkJCQl9IGVsc2UgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9CisKKwkJCQkvKiBJbiB0
eHFkaXNjIG1vZGUsIHRoZSBuZXRtYXAtYXdhcmUgcWRpc2MKKwkJCQkgKiBxdWV1ZSBoYXMgdGhl
IHNhbWUgbGVuZ3RoIGFzIHRoZSBudW1iZXIgb2YKKwkJCQkgKiBuZXRtYXAgc2xvdHMgKE4pLiBT
aW5jZSB0YWlsIGlzIGFkdmFuY2VkCisJCQkJICogb25seSB3aGVuIHBhY2tldHMgYXJlIGRlcXVl
dWVkLCBxZGlzYworCQkJCSAqIHF1ZXVlIG92ZXJydW4gY2Fubm90IGhhcHBlbiwgc28KKwkJCQkg
KiBubV9vc19nZW5lcmljX3htaXRfZnJhbWUoKSBkaWQgbm90IGZhaWwKKwkJCQkgKiBiZWNhdXNl
IG9mIHRoYXQuCisJCQkJICogSG93ZXZlciwgcGFja2V0cyBjYW4gYmUgZHJvcHBlZCBiZWNhdXNl
CisJCQkJICogY2FycmllciBpcyBvZmYsIG9yIGJlY2F1c2Ugb3VyIHFkaXNjIGlzCisJCQkJICog
YmVpbmcgZGVhY3RpdmF0ZWQsIG9yIHBvc3NpYmx5IGZvciBvdGhlcgorCQkJCSAqIHJlYXNvbnMu
IEluIHRoZXNlIGNhc2VzLCB3ZSBqdXN0IGxldCB0aGUKKwkJCQkgKiBwYWNrZXQgdG8gYmUgZHJv
cHBlZC4gKi8KKwkJCQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4ZHJvcCsrKTsKIAkJCX0KKwogCQkJ
c2xvdC0+ZmxhZ3MgJj0gfihOU19SRVBPUlQgfCBOU19CVUZfQ0hBTkdFRCk7CiAJCQlubV9pID0g
bm1fbmV4dChubV9pLCBsaW0pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy50eHBrdCArKyk7CisJ
CQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4cGt0KyspOwogCQl9Ci0KLQkJLyogVXBkYXRlIGh3Y3Vy
IHRvIHRoZSBuZXh0IHNsb3QgdG8gdHJhbnNtaXQuICovCi0JCWtyaW5nLT5ucl9od2N1ciA9IG5t
X2k7IC8qIG5vdCBoZWFkLCB3ZSBjb3VsZCBicmVhayBlYXJseSAqLworCQlpZiAoYS5oZWFkICE9
IE5VTEwpIHsKKwkJCWEuYWRkciA9IE5VTEw7CisJCQlubV9vc19nZW5lcmljX3htaXRfZnJhbWUo
JmEpOworCQl9CisJCS8qIFVwZGF0ZSBod2N1ciB0byB0aGUgbmV4dCBzbG90IHRvIHRyYW5zbWl0
LiBIZXJlIG5tX2kKKwkJICogaXMgbm90IG5lY2Vzc2FyaWx5IGhlYWQsIHdlIGNvdWxkIGJyZWFr
IGVhcmx5LiAqLworCQlrcmluZy0+bnJfaHdjdXIgPSBubV9pOwogCX0KIAogCS8qCiAJICogU2Vj
b25kLCByZWNsYWltIGNvbXBsZXRlZCBidWZmZXJzCiAJICovCi0JaWYgKGZsYWdzICYgTkFGX0ZP
UkNFX1JFQ0xBSU0gfHwgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwlpZiAoIWduYS0+dHhxZGlz
YyAmJiAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSB8fCBubV9rcl90eGVtcHR5KGtyaW5nKSkp
IHsKIAkJLyogTm8gbW9yZSBhdmFpbGFibGUgc2xvdHM/IFNldCBhIG5vdGlmaWNhdGlvbiBldmVu
dAogCQkgKiBvbiBhIG5ldG1hcCBzbG90IHRoYXQgd2lsbCBiZSBjbGVhbmVkIGluIHRoZSBmdXR1
cmUuCiAJCSAqIE5vIGRvdWJsZWNoZWNrIGlzIHBlcmZvcm1lZCwgc2luY2UgdHhzeW5jKCkgd2ls
bCBiZQpAQCAtNjQyLDU4ICs5MjUsNzQgQEAKIAkJICovCiAJCWdlbmVyaWNfc2V0X3R4X2V2ZW50
KGtyaW5nLCBubV9pKTsKIAl9Ci0JTkQoInR4ICMlZCwgaHd0YWlsID0gJWQiLCBuLCBrcmluZy0+
bnJfaHd0YWlsKTsKIAotCWdlbmVyaWNfbmV0bWFwX3R4X2NsZWFuKGtyaW5nKTsKKwlnZW5lcmlj
X25ldG1hcF90eF9jbGVhbihrcmluZywgZ25hLT50eHFkaXNjKTsKIAogCXJldHVybiAwOwogfQog
CiAKIC8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCAodGhyb3VnaCBuZXRtYXBfY2F0
Y2hfcngoKSkKKyAqIFRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkICh0aHJvdWdoIG5tX29zX2Nh
dGNoX3J4KCkpCiAgKiB3aXRoaW4gdGhlIGF0dGFjaGVkIG5ldHdvcmsgaW50ZXJmYWNlCiAgKiBp
biB0aGUgUlggc3Vic3lzdGVtLCBzbyB0aGF0IGV2ZXJ5IG1idWYgcGFzc2VkIHVwIGJ5CiAgKiB0
aGUgZHJpdmVyIGNhbiBiZSBzdG9sZW4gdG8gdGhlIG5ldHdvcmsgc3RhY2suCiAgKiBTdG9sZW4g
cGFja2V0cyBhcmUgcHV0IGluIGEgcXVldWUgd2hlcmUgdGhlCiAgKiBnZW5lcmljX25ldG1hcF9y
eHN5bmMoKSBjYWxsYmFjayBjYW4gZXh0cmFjdCB0aGVtLgorICogUmV0dXJucyAxIGlmIHRoZSBw
YWNrZXQgd2FzIHN0b2xlbiwgMCBvdGhlcndpc2UuCiAgKi8KLXZvaWQKK2ludAogZ2VuZXJpY19y
eF9oYW5kbGVyKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKIAlzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKIAlzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNfYWRh
cHRlciAqZ25hID0gKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopbmE7CisJc3RydWN0
IG5ldG1hcF9rcmluZyAqa3Jpbmc7CiAJdV9pbnQgd29ya19kb25lOwotCXVfaW50IHJyID0gTUJV
Rl9SWFEobSk7IC8vIHJlY2VpdmUgcmluZyBudW1iZXIKKwl1X2ludCByID0gTUJVRl9SWFEobSk7
IC8qIHJlY2VpdmUgcmluZyBudW1iZXIgKi8KKworCWlmIChyID49IG5hLT5udW1fcnhfcmluZ3Mp
IHsKKwkJciA9IHIgJSBuYS0+bnVtX3J4X3JpbmdzOworCX0KKworCWtyaW5nID0gJm5hLT5yeF9y
aW5nc1tyXTsKIAotCWlmIChyciA+PSBuYS0+bnVtX3J4X3JpbmdzKSB7Ci0JCXJyID0gcnIgJSBu
YS0+bnVtX3J4X3JpbmdzOyAvLyBYWFggZXhwZW5zaXZlLi4uCisJaWYgKGtyaW5nLT5ucl9tb2Rl
ID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCS8qIFdlIG11c3Qgbm90IGludGVyY2VwdCB0aGlzIG1i
dWYuICovCisJCXJldHVybiAwOwogCX0KIAogCS8qIGxpbWl0IHRoZSBzaXplIG9mIHRoZSBxdWV1
ZSAqLwotCWlmICh1bmxpa2VseShtYnFfbGVuKCZuYS0+cnhfcmluZ3NbcnJdLnJ4X3F1ZXVlKSA+
IDEwMjQpKSB7CisJaWYgKHVubGlrZWx5KCFnbmEtPnJ4c2cgJiYgTUJVRl9MRU4obSkgPiBORVRN
QVBfQlVGX1NJWkUobmEpKSkgeworCQkvKiBUaGlzIG1heSBoYXBwZW4gd2hlbiBHUk8vTFJPIGZl
YXR1cmVzIGFyZSBlbmFibGVkIGZvcgorCQkgKiB0aGUgTklDIGRyaXZlciB3aGVuIHRoZSBnZW5l
cmljIGFkYXB0ZXIgZG9lcyBub3QKKwkJICogc3VwcG9ydCBSWCBzY2F0dGVyLWdhdGhlci4gKi8K
KwkJUkQoMiwgIldhcm5pbmc6IGRyaXZlciBwdXNoZWQgdXAgYmlnIHBhY2tldCAiCisJCQkJIihz
aXplPSVkKSIsIChpbnQpTUJVRl9MRU4obSkpOworCQltX2ZyZWVtKG0pOworCX0gZWxzZSBpZiAo
dW5saWtlbHkobWJxX2xlbigma3JpbmctPnJ4X3F1ZXVlKSA+IDEwMjQpKSB7CiAJCW1fZnJlZW0o
bSk7CiAJfSBlbHNlIHsKLQkJbWJxX3NhZmVfZW5xdWV1ZSgmbmEtPnJ4X3JpbmdzW3JyXS5yeF9x
dWV1ZSwgbSk7CisJCW1icV9zYWZlX2VucXVldWUoJmtyaW5nLT5yeF9xdWV1ZSwgbSk7CiAJfQog
CiAJaWYgKG5ldG1hcF9nZW5lcmljX21pdCA8IDMyNzY4KSB7CiAJCS8qIG5vIHJ4IG1pdGlnYXRp
b24sIHBhc3Mgbm90aWZpY2F0aW9uIHVwICovCi0JCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZw
LCByciwgJndvcmtfZG9uZSk7Ci0JCUlGUkFURShyYXRlX2N0eC5uZXcucnhpcnErKyk7CisJCW5l
dG1hcF9nZW5lcmljX2lycShuYSwgciwgJndvcmtfZG9uZSk7CiAJfSBlbHNlIHsKIAkJLyogc2Ft
ZSBhcyBzZW5kIGNvbWJpbmluZywgZmlsdGVyIG5vdGlmaWNhdGlvbiBpZiB0aGVyZSBpcyBhCiAJ
CSAqIHBlbmRpbmcgdGltZXIsIG90aGVyd2lzZSBwYXNzIGl0IHVwIGFuZCBzdGFydCBhIHRpbWVy
LgogCQkgKi8KLQkJaWYgKGxpa2VseShuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0
W3JyXSkpKSB7CisJCWlmIChsaWtlbHkobm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0
W3JdKSkpIHsKIAkJCS8qIFJlY29yZCB0aGF0IHRoZXJlIGlzIHNvbWUgcGVuZGluZyB3b3JrLiAq
LwotCQkJZ25hLT5taXRbcnJdLm1pdF9wZW5kaW5nID0gMTsKKwkJCWduYS0+bWl0W3JdLm1pdF9w
ZW5kaW5nID0gMTsKIAkJfSBlbHNlIHsKLQkJCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZwLCBy
ciwgJndvcmtfZG9uZSk7Ci0JCQlJRlJBVEUocmF0ZV9jdHgubmV3LnJ4aXJxKyspOwotCQkJbmV0
bWFwX21pdGlnYXRpb25fc3RhcnQoJmduYS0+bWl0W3JyXSk7CisJCQluZXRtYXBfZ2VuZXJpY19p
cnEobmEsIHIsICZ3b3JrX2RvbmUpOworCQkJbm1fb3NfbWl0aWdhdGlvbl9zdGFydCgmZ25hLT5t
aXRbcl0pOwogCQl9CiAJfQorCisJLyogV2UgaGF2ZSBpbnRlcmNlcHRlZCB0aGUgbWJ1Zi4gKi8K
KwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTcxMyw1NCArMTAxMiwyMyBAQAogCXVfaW50IGNvbnN0
IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJaW50IGZvcmNlX3VwZGF0ZSA9IChmbGFncyAmIE5BRl9G
T1JDRV9SRUFEKSB8fCBrcmluZy0+bnJfa2ZsYWdzICYgTktSX1BFTkRJTlRSOwogCisJLyogQWRh
cHRlci1zcGVjaWZpYyB2YXJpYWJsZXMuICovCisJdWludDE2X3Qgc2xvdF9mbGFncyA9IGtyaW5n
LT5ua3Jfc2xvdF9mbGFnczsKKwl1X2ludCBubV9idWZfbGVuID0gTkVUTUFQX0JVRl9TSVpFKG5h
KTsKKwlzdHJ1Y3QgbWJxIHRtcHE7CisJc3RydWN0IG1idWYgKm07CisJaW50IGF2YWlsOyAvKiBp
biBieXRlcyAqLworCWludCBtbGVuOworCWludCBjb3B5OworCiAJaWYgKGhlYWQgPiBsaW0pCiAJ
CXJldHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCi0JLyoKLQkgKiBGaXJzdCBwYXJ0
OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KLQkgKi8KLQlpZiAobmV0bWFwX25vX3Bl
bmRpbnRyIHx8IGZvcmNlX3VwZGF0ZSkgewotCQkvKiBleHRyYWN0IGJ1ZmZlcnMgZnJvbSB0aGUg
cnggcXVldWUsIHN0b3AgYXQgbW9zdCBvbmUKLQkJICogc2xvdCBiZWZvcmUgbnJfaHdjdXIgKHN0
b3BfaSkKLQkJICovCi0JCXVpbnQxNl90IHNsb3RfZmxhZ3MgPSBrcmluZy0+bmtyX3Nsb3RfZmxh
Z3M7Ci0JCXVfaW50IHN0b3BfaSA9IG5tX3ByZXYoa3JpbmctPm5yX2h3Y3VyLCBsaW0pOwotCi0J
CW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBmaXJzdCBlbXB0eSBzbG90IGluIHRoZSByZWNl
aXZlIHJpbmcgKi8KLQkJZm9yIChuID0gMDsgbm1faSAhPSBzdG9wX2k7IG4rKykgewotCQkJaW50
IGxlbjsKLQkJCXZvaWQgKmFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKLQkJCXN0
cnVjdCBtYnVmICptOwotCi0JCQkvKiB3ZSBvbmx5IGNoZWNrIHRoZSBhZGRyZXNzIGhlcmUgb24g
Z2VuZXJpYyByeCByaW5ncyAqLwotCQkJaWYgKGFkZHIgPT0gTkVUTUFQX0JVRl9CQVNFKG5hKSkg
eyAvKiBCYWQgYnVmZmVyICovCi0JCQkJcmV0dXJuIG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7
Ci0JCQl9Ci0JCQkvKgotCQkJICogQ2FsbCB0aGUgbG9ja2VkIHZlcnNpb24gb2YgdGhlIGZ1bmN0
aW9uLgotCQkJICogWFhYIElkZWFsbHkgd2UgY291bGQgZ3JhYiBhIGJhdGNoIG9mIG1idWZzIGF0
IG9uY2UKLQkJCSAqIGFuZCBzYXZlIHNvbWUgbG9ja2luZyBvdmVyaGVhZC4KLQkJCSAqLwotCQkJ
bSA9IG1icV9zYWZlX2RlcXVldWUoJmtyaW5nLT5yeF9xdWV1ZSk7Ci0JCQlpZiAoIW0pCS8qIG5v
IG1vcmUgZGF0YSAqLwotCQkJCWJyZWFrOwotCQkJbGVuID0gTUJVRl9MRU4obSk7Ci0JCQltX2Nv
cHlkYXRhKG0sIDAsIGxlbiwgYWRkcik7Ci0JCQlyaW5nLT5zbG90W25tX2ldLmxlbiA9IGxlbjsK
LQkJCXJpbmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzOwotCQkJbV9mcmVlbShtKTsK
LQkJCW5tX2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0JCX0KLQkJaWYgKG4pIHsKLQkJCWtyaW5n
LT5ucl9od3RhaWwgPSBubV9pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHBrdCArPSBuKTsK
LQkJfQotCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7Ci0JfQorCUlGUkFURShy
YXRlX2N0eC5uZXcucnhzeW5jKyspOwogCi0JLy8gWFhYIHNob3VsZCB3ZSBpbnZlcnQgdGhlIG9y
ZGVyID8KIAkvKgotCSAqIFNlY29uZCBwYXJ0OiBza2lwIHBhc3QgcGFja2V0cyB0aGF0IHVzZXJz
cGFjZSBoYXMgcmVsZWFzZWQuCisJICogRmlyc3QgcGFydDogc2tpcCBwYXN0IHBhY2tldHMgdGhh
dCB1c2Vyc3BhY2UgaGFzIHJlbGVhc2VkLgorCSAqIFRoaXMgY2FuIHBvc3NpYmx5IG1ha2Ugcm9v
bSBmb3IgdGhlIHNlY29uZCBwYXJ0LgogCSAqLwogCW5tX2kgPSBrcmluZy0+bnJfaHdjdXI7CiAJ
aWYgKG5tX2kgIT0gaGVhZCkgewpAQCAtNzczLDcgKzEwNDEsMTA2IEBACiAJCX0KIAkJa3Jpbmct
Pm5yX2h3Y3VyID0gaGVhZDsKIAl9Ci0JSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHN5bmMrKyk7CisK
KwkvKgorCSAqIFNlY29uZCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KKwkg
Ki8KKwlpZiAoIW5ldG1hcF9ub19wZW5kaW50ciAmJiAhZm9yY2VfdXBkYXRlKSB7CisJCXJldHVy
biAwOworCX0KKworCW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBGaXJzdCBlbXB0eSBzbG90
IGluIHRoZSByZWNlaXZlIHJpbmcuICovCisKKwkvKiBDb21wdXRlIHRoZSBhdmFpbGFibGUgc3Bh
Y2UgKGluIGJ5dGVzKSBpbiB0aGlzIG5ldG1hcCByaW5nLgorCSAqIFRoZSBmaXJzdCBzbG90IHRo
YXQgaXMgbm90IGNvbnNpZGVyZWQgaW4gaXMgdGhlIG9uZSBiZWZvcmUKKwkgKiBucl9od2N1ci4g
Ki8KKworCWF2YWlsID0gbm1fcHJldihrcmluZy0+bnJfaHdjdXIsIGxpbSkgLSBubV9pOworCWlm
IChhdmFpbCA8IDApCisJCWF2YWlsICs9IGxpbSArIDE7CisJYXZhaWwgKj0gbm1fYnVmX2xlbjsK
KworCS8qIEZpcnN0IHBhc3M6IFdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlIFJYIG1idWYg
cXVldWUsCisJICogZXh0cmFjdCBhcyBtYW55IG1idWZzIGFzIHRoZXkgZml0IHRoZSBhdmFpbGFi
bGUgc3BhY2UsCisJICogYW5kIHB1dCB0aGVtIGluIGEgdGVtcG9yYXJ5IHF1ZXVlLgorCSAqIFRv
IGF2b2lkIHBlcmZvcm1pbmcgYSBwZXItbWJ1ZiBkaXZpc2lvbiAobWxlbiAvIG5tX2J1Zl9sZW4p
IHRvCisJICogdG8gdXBkYXRlIGF2YWlsLCB3ZSBkbyB0aGUgdXBkYXRlIGluIGEgd2hpbGUgbG9v
cCB0aGF0IHdlCisJICogYWxzbyB1c2UgdG8gc2V0IHRoZSBSWCBzbG90cywgYnV0IHdpdGhvdXQg
cGVyZm9ybWluZyB0aGUgY29weS4gKi8KKwltYnFfaW5pdCgmdG1wcSk7CisJbWJxX2xvY2soJmty
aW5nLT5yeF9xdWV1ZSk7CisJZm9yIChuID0gMDs7IG4rKykgeworCQltID0gbWJxX3BlZWsoJmty
aW5nLT5yeF9xdWV1ZSk7CisJCWlmICghbSkgeworCQkJLyogTm8gbW9yZSBwYWNrZXRzIGZyb20g
dGhlIGRyaXZlci4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJbWxlbiA9IE1CVUZfTEVOKG0pOwor
CQlpZiAobWxlbiA+IGF2YWlsKSB7CisJCQkvKiBObyBtb3JlIHNwYWNlIGluIHRoZSByaW5nLiAq
LworCQkJYnJlYWs7CisJCX0KKworCQltYnFfZGVxdWV1ZSgma3JpbmctPnJ4X3F1ZXVlKTsKKwor
CQl3aGlsZSAobWxlbikgeworCQkJY29weSA9IG5tX2J1Zl9sZW47CisJCQlpZiAobWxlbiA8IGNv
cHkpIHsKKwkJCQljb3B5ID0gbWxlbjsKKwkJCX0KKwkJCW1sZW4gLT0gY29weTsKKwkJCWF2YWls
IC09IG5tX2J1Zl9sZW47CisKKwkJCXJpbmctPnNsb3Rbbm1faV0ubGVuID0gY29weTsKKwkJCXJp
bmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzIHwgKG1sZW4gPyBOU19NT1JFRlJBRyA6
IDApOworCQkJbm1faSA9IG5tX25leHQobm1faSwgbGltKTsKKwkJfQorCisJCW1icV9lbnF1ZXVl
KCZ0bXBxLCBtKTsKKwl9CisJbWJxX3VubG9jaygma3JpbmctPnJ4X3F1ZXVlKTsKKworCS8qIFNl
Y29uZCBwYXNzOiBEcmFpbiB0aGUgdGVtcG9yYXJ5IHF1ZXVlLCBnb2luZyBvdmVyIHRoZSB1c2Vk
IFJYIHNsb3RzLAorCSAqIGFuZCBwZXJmb3JtIHRoZSBjb3B5IG91dCBvZiB0aGUgUlggcXVldWUg
bG9jay4gKi8KKwlubV9pID0ga3JpbmctPm5yX2h3dGFpbDsKKworCWZvciAoOzspIHsKKwkJdm9p
ZCAqbm1hZGRyOworCQlpbnQgb2ZzID0gMDsKKwkJaW50IG1vcmVmcmFnOworCisJCW0gPSBtYnFf
ZGVxdWV1ZSgmdG1wcSk7CisJCWlmICghbSkJeworCQkJYnJlYWs7CisJCX0KKworCQlkbyB7CisJ
CQlubWFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKKwkJCS8qIFdlIG9ubHkgY2hl
Y2sgdGhlIGFkZHJlc3MgaGVyZSBvbiBnZW5lcmljIHJ4IHJpbmdzLiAqLworCQkJaWYgKG5tYWRk
ciA9PSBORVRNQVBfQlVGX0JBU0UobmEpKSB7IC8qIEJhZCBidWZmZXIgKi8KKwkJCQltX2ZyZWVt
KG0pOworCQkJCW1icV9wdXJnZSgmdG1wcSk7CisJCQkJbWJxX2ZpbmkoJnRtcHEpOworCQkJCXJl
dHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOworCQkJfQorCisJCQljb3B5ID0gcmluZy0+
c2xvdFtubV9pXS5sZW47CisJCQltX2NvcHlkYXRhKG0sIG9mcywgY29weSwgbm1hZGRyKTsKKwkJ
CW9mcyArPSBjb3B5OworCQkJbW9yZWZyYWcgPSByaW5nLT5zbG90W25tX2ldLmZsYWdzICYgTlNf
TU9SRUZSQUc7CisJCQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOworCQl9IHdoaWxlIChtb3Jl
ZnJhZyk7CisKKwkJbV9mcmVlbShtKTsKKwl9CisKKwltYnFfZmluaSgmdG1wcSk7CisKKwlpZiAo
bikgeworCQlrcmluZy0+bnJfaHd0YWlsID0gbm1faTsKKwkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5y
eHBrdCArPSBuKTsKKwl9CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOwogCiAJ
cmV0dXJuIDA7CiB9CkBAIC03ODcsOSArMTE1NCw4IEBACiAKIAlpZiAocHJldl9uYSAhPSBOVUxM
KSB7CiAJCUQoIlJlbGVhc2VkIGdlbmVyaWMgTkEgJXAiLCBnbmEpOwotCQlpZl9yZWxlKGlmcCk7
CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChwcmV2X25hKTsKLQkJaWYgKG5hLT5pZnAgPT0gTlVMTCkg
eworCQlpZiAobm1faXN6b21iaWUobmEpKSB7CiAJCSAgICAgICAgLyoKIAkJICAgICAgICAgKiBU
aGUgZHJpdmVyIGhhcyBiZWVuIHJlbW92ZWQgd2l0aG91dCByZWxlYXNpbmcKIAkJICAgICAgICAg
KiB0aGUgcmVmZXJlbmNlIHNvIHdlIG5lZWQgdG8gZG8gaXQgaGVyZS4KQEAgLTc5Nyw5ICsxMTYz
LDEzIEBACiAJCSAgICAgICAgbmV0bWFwX2FkYXB0ZXJfcHV0KHByZXZfbmEpOwogCQl9CiAJfQot
CVdOQShpZnApID0gcHJldl9uYTsKLQlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25h
KTsKKwlOTV9BVFRBQ0hfTkEoaWZwLCBwcmV2X25hKTsKKwkvKgorCSAqIG5ldG1hcF9kZXRhY2hf
Y29tbW9uKCksIHRoYXQgaXQncyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwKKwkgKiBvdmVy
cmlkZXMgV05BKGlmcCkgaWYgbmEtPmlmcCBpcyBub3QgTlVMTC4KKwkgKi8KIAluYS0+aWZwID0g
TlVMTDsKKwlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25hKTsKIH0KIAogLyoKQEAg
LTgyMywxNCArMTE5MywxNCBAQAogCiAJbnVtX3R4X2Rlc2MgPSBudW1fcnhfZGVzYyA9IG5ldG1h
cF9nZW5lcmljX3JpbmdzaXplOyAvKiBzdGFydGluZyBwb2ludCAqLwogCi0JZ2VuZXJpY19maW5k
X251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAmbnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJy
b3JzICovCisJbm1fb3NfZ2VuZXJpY19maW5kX251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAm
bnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJyb3JzICovCiAJTkQoIk5ldG1hcCByaW5nIHNpemU6
IFRYID0gJWQsIFJYID0gJWQiLCBudW1fdHhfZGVzYywgbnVtX3J4X2Rlc2MpOwogCWlmIChudW1f
dHhfZGVzYyA9PSAwIHx8IG51bV9yeF9kZXNjID09IDApIHsKIAkJRCgiRGV2aWNlIGhhcyBubyBo
dyBzbG90cyAodHggJXUsIHJ4ICV1KSIsIG51bV90eF9kZXNjLCBudW1fcnhfZGVzYyk7CiAJCXJl
dHVybiBFSU5WQUw7CiAJfQogCi0JZ25hID0gbWFsbG9jKHNpemVvZigqZ25hKSwgTV9ERVZCVUYs
IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlnbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpnbmEpKTsK
IAlpZiAoZ25hID09IE5VTEwpIHsKIAkJRCgibm8gbWVtb3J5IG9uIGF0dGFjaCwgZ2l2ZSB1cCIp
OwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtODU1LDEyICsxMjI1LDIzIEBACiAJTkQoIltHTkFdIG51
bV9yeF9xdWV1ZXMoJWQpLCByZWFsX251bV9yeF9xdWV1ZXMoJWQpIiwKIAkJCWlmcC0+bnVtX3J4
X3F1ZXVlcywgaWZwLT5yZWFsX251bV9yeF9xdWV1ZXMpOwogCi0JZ2VuZXJpY19maW5kX251bV9x
dWV1ZXMoaWZwLCAmbmEtPm51bV90eF9yaW5ncywgJm5hLT5udW1fcnhfcmluZ3MpOworCW5tX29z
X2dlbmVyaWNfZmluZF9udW1fcXVldWVzKGlmcCwgJm5hLT5udW1fdHhfcmluZ3MsICZuYS0+bnVt
X3J4X3JpbmdzKTsKIAogCXJldHZhbCA9IG5ldG1hcF9hdHRhY2hfY29tbW9uKG5hKTsKIAlpZiAo
cmV0dmFsKSB7Ci0JCWZyZWUoZ25hLCBNX0RFVkJVRik7CisJCW5tX29zX2ZyZWUoZ25hKTsKKwkJ
cmV0dXJuIHJldHZhbDsKIAl9CiAKKwlnbmEtPnByZXYgPSBOQShpZnApOyAvKiBzYXZlIG9sZCBu
YSAqLworCWlmIChnbmEtPnByZXYgIT0gTlVMTCkgeworCQluZXRtYXBfYWRhcHRlcl9nZXQoZ25h
LT5wcmV2KTsKKwl9CisJTk1fQVRUQUNIX05BKGlmcCwgbmEpOworCisJbm1fb3NfZ2VuZXJpY19z
ZXRfZmVhdHVyZXMoZ25hKTsKKworCUQoIkNyZWF0ZWQgZ2VuZXJpYyBOQSAlcCAocHJldiAlcCki
LCBnbmEsIGduYS0+cHJldik7CisKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCAvdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfa2Vybi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9rZXJuLmgJ
MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF9rZXJuLmgJMjAxNi0xMi0wMSAwOTo1MToyOC43MTQzMTQwMDAgKzAwMDAK
QEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0dGVvIExh
bmRpLCBMdWlnaSBSaXp6by4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE0IFVuaXZlcnNpdGFgIGRpIFBpc2EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJpenpvCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBVbml2ZXJzaXRhYCBkaSBQaXNhCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNiw3IEBA
CiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfa2Vybi5oIDI4NTY5OSAyMDE1LTA3LTE5IDE4OjA3OjI1WiBsdWlnaSAkCisgKiAkRnJlZUJT
RDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIDIzODk4NSAyMDEyLTA4LTAyIDEx
OjU5OjQzWiBsdWlnaSAkCiAgKgogICogVGhlIGhlYWRlciBjb250YWlucyB0aGUgZGVmaW5pdGlv
bnMgb2YgY29uc3RhbnRzIGFuZCBmdW5jdGlvbgogICogcHJvdG90eXBlcyB1c2VkIG9ubHkgaW4g
a2VybmVsc3BhY2UuCkBAIC00OCwyMyArNDksMzggQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORVRN
QVBfR0VORVJJQykKICNkZWZpbmUgV0lUSF9HRU5FUklDCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENP
TkZJR19ORVRNQVBfVjEwMDApCi0jZGVmaW5lIFdJVEhfVjEwMDAKKyNpZiBkZWZpbmVkKENPTkZJ
R19ORVRNQVBfUFRORVRNQVBfR1VFU1QpCisjZGVmaW5lIFdJVEhfUFRORVRNQVBfR1VFU1QKKyNl
bmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9QVE5FVE1BUF9IT1NUKQorI2RlZmluZSBX
SVRIX1BUTkVUTUFQX0hPU1QKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9TSU5L
KQorI2RlZmluZSBXSVRIX1NJTksKICNlbmRpZgogCi0jZWxzZSAvKiBub3QgbGludXggKi8KKyNl
bGlmIGRlZmluZWQgKF9XSU4zMikKKyNkZWZpbmUgV0lUSF9WQUxFCS8vIGNvbW1lbnQgb3V0IHRv
IGRpc2FibGUgVkFMRSBzdXBwb3J0CisjZGVmaW5lIFdJVEhfUElQRVMKKyNkZWZpbmUgV0lUSF9N
T05JVE9SCisjZGVmaW5lIFdJVEhfR0VORVJJQwogCisjZWxzZQkvKiBuZWl0aGVyIGxpbnV4IG5v
ciB3aW5kb3dzICovCiAjZGVmaW5lIFdJVEhfVkFMRQkvLyBjb21tZW50IG91dCB0byBkaXNhYmxl
IFZBTEUgc3VwcG9ydAogI2RlZmluZSBXSVRIX1BJUEVTCiAjZGVmaW5lIFdJVEhfTU9OSVRPUgog
I2RlZmluZSBXSVRIX0dFTkVSSUMKKyNkZWZpbmUgV0lUSF9QVE5FVE1BUF9IT1NUCS8qIHB0bmV0
bWFwIGhvc3Qgc3VwcG9ydCAqLworI2RlZmluZSBXSVRIX1BUTkVUTUFQX0dVRVNUCS8qIHB0bmV0
bWFwIGd1ZXN0IHN1cHBvcnQgKi8KIAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CiAKICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRp
bl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQogI2RlZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5f
ZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNkZWZpbmUgX191c2VyCiAKICNkZWZpbmUJTk1fTE9D
S19UCXN0cnVjdCBtdHgJLyogbG93IGxldmVsIHNwaW5sb2NrLCB1c2VkIHRvIHByb3RlY3QgcXVl
dWVzICovCiAKQEAgLTc2LDkgKzkyLDExIEBACiAjZGVmaW5lIE5NX01UWF9BU1NFUlQobSkJc3hf
YXNzZXJ0KCYobSksIFNBX1hMT0NLRUQpCiAKICNkZWZpbmUJTk1fU0VMSU5GT19UCXN0cnVjdCBu
bV9zZWxpbmZvCisjZGVmaW5lIE5NX1NFTFJFQ09SRF9UCXN0cnVjdCB0aHJlYWQKICNkZWZpbmUJ
TUJVRl9MRU4obSkJKChtKS0+bV9wa3RoZHIubGVuKQotI2RlZmluZQlNQlVGX0lGUChtKQkoKG0p
LT5tX3BrdGhkci5yY3ZpZikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pCSgoTkEoaWZwKSkt
PmlmX2lucHV0KShpZnAsIG0pCisjZGVmaW5lIE1CVUZfVFhRKG0pCSgobSktPm1fcGt0aGRyLmZs
b3dpZCkKKyNkZWZpbmUgTUJVRl9UUkFOU01JVChuYSwgaWZwLCBtKQkoKG5hKS0+aWZfdHJhbnNt
aXQoaWZwLCBtKSkKKyNkZWZpbmUJR0VOX1RYX01CVUZfSUZQKG0pCSgobSktPm1fcGt0aGRyLnJj
dmlmKQogCiAjZGVmaW5lIE5NX0FUT01JQ19UCXZvbGF0aWxlIGludAkvLyBYWFggPwogLyogYXRv
bWljIG9wZXJhdGlvbnMgKi8KQEAgLTk3LDIzICsxMTUsMjAgQEAKICNlbmRpZgogCiAjaWYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyNwotI2RlZmluZSBHRVRfTUJVRl9SRUZDTlQobSkgICAg
ICAoKG0pLT5tX2V4dC5leHRfY250ID8gKigobSktPm1fZXh0LmV4dF9jbnQpIDogLTEpCi0jZGVm
aW5lIFNFVF9NQlVGX1JFRkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5leHRfY250KSA9IHgKLSNk
ZWZpbmUgUE5UX01CVUZfUkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQuZXh0X2NudCkKKyNkZWZp
bmUgTUJVRl9SRUZDTlQobSkJCSgobSktPm1fZXh0LmV4dF9jb3VudCkKKyNkZWZpbmUgU0VUX01C
VUZfUkVGQ05UKG0sIHgpICAgKG0pLT5tX2V4dC5leHRfY291bnQgPSB4CiAjZWxzZQotI2RlZmlu
ZSBHRVRfTUJVRl9SRUZDTlQobSkgICAgICAoKG0pLT5tX2V4dC5yZWZfY250ID8gKigobSktPm1f
ZXh0LnJlZl9jbnQpIDogLTEpCisjZGVmaW5lIE1CVUZfUkVGQ05UKG0pCQkoKG0pLT5tX2V4dC5y
ZWZfY250ID8gKigobSktPm1fZXh0LnJlZl9jbnQpIDogLTEpCiAjZGVmaW5lIFNFVF9NQlVGX1JF
RkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5yZWZfY250KSA9IHgKLSNkZWZpbmUgUE5UX01CVUZf
UkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQucmVmX2NudCkKICNlbmRpZgogCi1NQUxMT0NfREVD
TEFSRShNX05FVE1BUCk7CisjZGVmaW5lIE1CVUZfUVVFVUVEKG0pCQkxCiAKIHN0cnVjdCBubV9z
ZWxpbmZvIHsKIAlzdHJ1Y3Qgc2VsaW5mbyBzaTsKIAlzdHJ1Y3QgbXR4IG07CiB9OwogCi12b2lk
IGZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9zZWxpbmZvICpzaSwgaW50IHByaSk7CiAKIC8v
IFhYWCBsaW51eCBzdHJ1Y3QsIG5vdCB1c2VkIGluIEZyZWVCU0QKIHN0cnVjdCBuZXRfZGV2aWNl
X29wcyB7CkBAIC0xMzAsMTIgKzE0NSwxNiBAQAogI2RlZmluZQlOTV9MT0NLX1QJc2FmZV9zcGlu
bG9ja190CS8vIHNlZSBic2RfZ2x1ZS5oCiAjZGVmaW5lCU5NX1NFTElORk9fVAl3YWl0X3F1ZXVl
X2hlYWRfdAogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5sZW4pCi0jZGVmaW5lCU1CVUZfSUZQ
KG0pCSgobSktPmRldikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLT5wcmlv
cml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1JYOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV0aWZfcngobSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCisj
ZGVmaW5lIE1CVUZfVFJBTlNNSVQobmEsIGlmcCwgbSkJCQkJCQkJXAorCSh7CQkJCQkJCQkJCVwK
KwkJLyogQXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIHdpdGggZ2VuZXJpYy4gKi8JCQkJXAorCQlt
LT5wcmlvcml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1RYOwkJCQkJXAorCQkoKChzdHJ1Y3QgbmV0
X2RldmljZV9vcHMgKikobmEpLT5pZl90cmFuc21pdCktPm5kb19zdGFydF94bWl0KG0sIGlmcCkp
OwlcCisJCTA7CQkJCQkJCQkJXAorCX0pCisKKy8qIFNlZSBleHBsYW5hdGlvbiBpbiBubV9vc19n
ZW5lcmljX3htaXRfZnJhbWUuICovCisjZGVmaW5lCUdFTl9UWF9NQlVGX0lGUChtKQkoKHN0cnVj
dCBpZm5ldCAqKXNrYl9zaGluZm8obSktPmRlc3RydWN0b3JfYXJnKQogCiAjZGVmaW5lIE5NX0FU
T01JQ19UCXZvbGF0aWxlIGxvbmcgdW5zaWduZWQgaW50CiAKQEAgLTE1OCw3ICsxNzcsNTEgQEAK
ICNkZWZpbmUJTk1fTE9DS19UCUlPTG9jayAqCiAjZGVmaW5lCU5NX1NFTElORk9fVAlzdHJ1Y3Qg
c2VsaW5mbwogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5tX3BrdGhkci5sZW4pCi0jZGVmaW5l
CU5NX1NFTkRfVVAoaWZwLCBtKQkoKGlmcCktPmlmX2lucHV0KShpZnAsIG0pCisKKyNlbGlmIGRl
ZmluZWQgKF9XSU4zMikKKyNpbmNsdWRlICIuLi8uLi8uLi9XSU5ET1dTL3dpbl9nbHVlLmgiCisK
KyNkZWZpbmUgTk1fU0VMUkVDT1JEX1QJCUlPX1NUQUNLX0xPQ0FUSU9OCisjZGVmaW5lIE5NX1NF
TElORk9fVAkJd2luX1NFTElORk8JCS8vIHNlZSB3aW5fZ2x1ZS5oCisjZGVmaW5lIE5NX0xPQ0tf
VAkJd2luX3NwaW5sb2NrX3QJLy8gc2VlIHdpbl9nbHVlLmgKKyNkZWZpbmUgTk1fTVRYX1QJCUtH
VUFSREVEX01VVEVYCS8qIE9TLXNwZWNpZmljIG11dGV4IChzbGVlcGFibGUpICovCisKKyNkZWZp
bmUgTk1fTVRYX0lOSVQobSkJCUtlSW5pdGlhbGl6ZUd1YXJkZWRNdXRleCgmbSk7CisjZGVmaW5l
IE5NX01UWF9ERVNUUk9ZKG0pCWRvIHsgKHZvaWQpKG0pOyB9IHdoaWxlICgwKQorI2RlZmluZSBO
TV9NVFhfTE9DSyhtKQkJS2VBY3F1aXJlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01U
WF9VTkxPQ0sobSkJS2VSZWxlYXNlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01UWF9B
U1NFUlQobSkJYXNzZXJ0KCZtLkNvdW50PjApCisKKy8vVGhlc2UgbGlua25hbWVzIGFyZSBmb3Ig
dGhlIE5ESVMgZHJpdmVyCisjZGVmaW5lIE5FVE1BUF9ORElTX0xJTktOQU1FX1NUUklORyAgICAg
ICAgICAgICBMIlxcRG9zRGV2aWNlc1xcTk1BUE5ESVMiCisjZGVmaW5lIE5FVE1BUF9ORElTX05U
REVWSUNFX1NUUklORyAgICAgICAgICAgICBMIlxcRGV2aWNlXFxOTUFQTkRJUyIKKworLy9EZWZp
bml0aW9uIG9mIGludGVybmFsIGRyaXZlci10by1kcml2ZXIgaW9jdGwgY29kZXMKKyNkZWZpbmUg
TkVUTUFQX0tFUk5FTF9YQ0hBTkdFX1BPSU5URVJTCQlfSU8oJ2knLCAxODApCisjZGVmaW5lIE5F
VE1BUF9LRVJORUxfU0VORF9TSFVURE9XTl9TSUdOQUwJX0lPX2RpcmVjdCgnaScsIDE5NSkKKwor
Ly9FbXB0eSBkYXRhIHN0cnVjdHVyZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYnkgTVNWQyBjb21waWxl
cgorLy9YWFhfYWxlLCB0cnkgdG8gc29sdmUgdGhpcyBwcm9ibGVtCitzdHJ1Y3QgbmV0X2Rldmlj
ZV9vcHN7CisJY2hhciBkYXRhWzFdOworfTsKK3R5cGVkZWYgc3RydWN0IGV0aHRvb2xfb3Bzewor
CWNoYXIgZGF0YVsxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBocnRpbWVyeworCUtUSU1FUiB0aW1l
cjsKKwlCT09MRUFOIGFjdGl2ZTsKKwlLRFBDIGRlZmVycmVkX3Byb2M7Cit9OworCisvKiBNU1ZD
IGRvZXMgbm90IGhhdmUgbGlrZWx5L3VubGlrZWx5IHN1cHBvcnQgKi8KKyNpZmRlZiBfTVNDX1ZF
UgorI2RlZmluZSBsaWtlbHkoeCkJKHgpCisjZGVmaW5lIHVubGlrZWx5KHgpCSh4KQorI2Vsc2UK
KyNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQorI2Rl
ZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNlbmRp
ZiAvL19NU0NfVkVSCiAKICNlbHNlCiAKQEAgLTE2Niw2ICsyMjksMTMgQEAKIAogI2VuZGlmIC8q
IGVuZCAtIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgKi8KIAorI2lmbmRlZiBfV0lOMzIgLyogc3Vw
cG9ydCBmb3IgZW11bGF0ZWQgc3lzY3RsICovCisjZGVmaW5lIFNZU0JFR0lOKHgpCisjZGVmaW5l
IFNZU0VORAorI2VuZGlmIC8qIF9XSU4zMiAqLworCisjZGVmaW5lIE5NX0FDQ0VTU19PTkNFKHgp
CSgqKHZvbGF0aWxlIF9fdHlwZW9mX18oeCkgKikmKHgpKQorCiAjZGVmaW5lCU5NR19MT0NLX1QJ
CU5NX01UWF9UCiAjZGVmaW5lCU5NR19MT0NLX0lOSVQoKQkJTk1fTVRYX0lOSVQobmV0bWFwX2ds
b2JhbF9sb2NrKQogI2RlZmluZQlOTUdfTE9DS19ERVNUUk9ZKCkJTk1fTVRYX0RFU1RST1kobmV0
bWFwX2dsb2JhbF9sb2NrKQpAQCAtMjAwLDggKzI3MCw0MSBAQAogc3RydWN0IG5tX2JyaWRnZTsK
IHN0cnVjdCBuZXRtYXBfcHJpdl9kOwogCisvKiBvcy1zcGVjaWZpYyBOTV9TRUxJTkZPX1QgaW5p
dGlhbHphdGlvbi9kZXN0cnVjdGlvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgbm1fb3Nfc2VsaW5mb19p
bml0KE5NX1NFTElORk9fVCAqKTsKK3ZvaWQgbm1fb3Nfc2VsaW5mb191bmluaXQoTk1fU0VMSU5G
T19UICopOworCiBjb25zdCBjaGFyICpubV9kdW1wX2J1ZihjaGFyICpwLCBpbnQgbGVuLCBpbnQg
bGltLCBjaGFyICpkc3QpOwogCit2b2lkIG5tX29zX3NlbHdha2V1cChOTV9TRUxJTkZPX1QgKnNp
KTsKK3ZvaWQgbm1fb3Nfc2VscmVjb3JkKE5NX1NFTFJFQ09SRF9UICpzciwgTk1fU0VMSU5GT19U
ICpzaSk7CisKK2ludCBubV9vc19pZm5ldF9pbml0KHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9m
aW5pKHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9sb2NrKHZvaWQpOwordm9pZCBubV9vc19pZm5l
dF91bmxvY2sodm9pZCk7CisKK3ZvaWQgbm1fb3NfZ2V0X21vZHVsZSh2b2lkKTsKK3ZvaWQgbm1f
b3NfcHV0X21vZHVsZSh2b2lkKTsKKwordm9pZCBuZXRtYXBfbWFrZV96b21iaWUoc3RydWN0IGlm
bmV0ICopOwordm9pZCBuZXRtYXBfdW5kb196b21iaWUoc3RydWN0IGlmbmV0ICopOworCisvKiBv
cyBpbmRlcGVuZGVudCBhbGxvYy9yZWFsbG9jL2ZyZWUgKi8KK3ZvaWQgKm5tX29zX21hbGxvYyhz
aXplX3QpOwordm9pZCAqbm1fb3NfcmVhbGxvYyh2b2lkICosIHNpemVfdCBuZXdfc2l6ZSwgc2l6
ZV90IG9sZF9zaXplKTsKK3ZvaWQgbm1fb3NfZnJlZSh2b2lkICopOworCisvKiBwYXNzZXMgYSBw
YWNrZXQgdXAgdG8gdGhlIGhvc3Qgc3RhY2suCisgKiBJZiB0aGUgcGFja2V0IGlzIHNlbnQgKG9y
IGRyb3BwZWQpIGltbWVkaWF0ZWx5IGl0IHJldHVybnMgTlVMTCwKKyAqIG90aGVyd2lzZSBpdCBs
aW5rcyB0aGUgcGFja2V0IHRvIHByZXYgYW5kIHJldHVybnMgbS4KKyAqIEluIHRoaXMgY2FzZSwg
YSBmaW5hbCBjYWxsIHdpdGggbT1OVUxMIGFuZCBwcmV2ICE9IE5VTEwgd2lsbCBzZW5kIHVwCisg
KiB0aGUgZW50aXJlIGNoYWluIHRvIHRoZSBob3N0IHN0YWNrLgorICovCit2b2lkICpubV9vc19z
ZW5kX3VwKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKnByZXYp
OworCitpbnQgbm1fb3NfbWJ1Zl9oYXNfb2ZmbGQoc3RydWN0IG1idWYgKm0pOworCiAjaW5jbHVk
ZSAibmV0bWFwX21icS5oIgogCiBleHRlcm4gTk1HX0xPQ0tfVAluZXRtYXBfZ2xvYmFsX2xvY2s7
CkBAIC0yOTgsNiArNDAxLDE5IEBACiAJdWludDMyX3QJbnJfa2ZsYWdzOwkvKiBwcml2YXRlIGRy
aXZlciBmbGFncyAqLwogI2RlZmluZSBOS1JfUEVORElOVFIJMHgxCQkvLyBQZW5kaW5nIGludGVy
cnVwdC4KICNkZWZpbmUgTktSX0VYQ0xVU0lWRQkweDIJCS8qIGV4Y2x1c2l2ZSBiaW5kaW5nICov
CisjZGVmaW5lIE5LUl9GT1JXQVJECTB4NAkJLyogKGhvc3QgcmluZyBvbmx5KSB0aGVyZSBhcmUK
KwkJCQkJICAgcGFja2V0cyB0byBmb3J3YXJkCisJCQkJCSAqLworI2RlZmluZSBOS1JfTkVFRFJJ
TkcJMHg4CQkvKiByaW5nIG5lZWRlZCBldmVuIGlmIHVzZXJzPT0wCisJCQkJCSAqICh1c2VkIGlu
dGVybmFsbHkgYnkgcGlwZXMgYW5kCisJCQkJCSAqICBieSBwdG5ldG1hcCBob3N0IHBvcnRzKQor
CQkJCQkgKi8KKworCXVpbnQzMl90CW5yX21vZGU7CisJdWludDMyX3QJbnJfcGVuZGluZ19tb2Rl
OworI2RlZmluZSBOS1JfTkVUTUFQX09GRgkweDAKKyNkZWZpbmUgTktSX05FVE1BUF9PTgkweDEK
KwogCXVpbnQzMl90CW5rcl9udW1fc2xvdHM7CiAKIAkvKgpAQCAtMzQzLDEzICs0NTksMTQgQEAK
IAkgKiBzdG9yZSBpbmNvbWluZyBtYnVmcyBpbiBhIHF1ZXVlIHRoYXQgaXMgZHJhaW5lZCBieQog
CSAqIGEgcnhzeW5jLgogCSAqLwotCXN0cnVjdCBtYnVmICoqdHhfcG9vbDsKLQkvLyB1X2ludCBu
cl9udGM7CQkvKiBFbXVsYXRpb24gb2YgYSBuZXh0LXRvLWNsZWFuIFJYIHJpbmcgcG9pbnRlci4g
Ki8KLQlzdHJ1Y3QgbWJxIHJ4X3F1ZXVlOyAgICAgICAgICAgIC8qIGludGVyY2VwdGVkIHJ4IG1i
dWZzLiAqLworCXN0cnVjdCBtYnVmCSoqdHhfcG9vbDsKKwlzdHJ1Y3QgbWJ1ZgkqdHhfZXZlbnQ7
CS8qIFRYIGV2ZW50IHVzZWQgYXMgYSBub3RpZmljYXRpb24gKi8KKwlOTV9MT0NLX1QJdHhfZXZl
bnRfbG9jazsJLyogcHJvdGVjdHMgdGhlIHR4X2V2ZW50IG1idWYgKi8KKwlzdHJ1Y3QgbWJxCXJ4
X3F1ZXVlOyAgICAgICAvKiBpbnRlcmNlcHRlZCByeCBtYnVmcy4gKi8KIAogCXVpbnQzMl90CXVz
ZXJzOwkJLyogZXhpc3RpbmcgYmluZGluZ3MgZm9yIHRoaXMgcmluZyAqLwogCi0JdWludDMyX3QJ
cmluZ19pZDsJLyogZGVidWdnaW5nICovCisJdWludDMyX3QJcmluZ19pZDsJLyoga3JpbmcgaWRl
bnRpZmllciAqLwogCWVudW0gdHhyeAl0eDsJCS8qIGtpbmQgb2YgcmluZyAodHggb3IgcngpICov
CiAJY2hhciBuYW1lWzY0XTsJCQkvKiBkaWFnbm9zdGljICovCiAKQEAgLTM3MSw5ICs0ODgsNiBA
QAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKnBpcGU7CS8qIGlmIHRoaXMgaXMgYSBwaXBlIHJpbmcs
CiAJCQkJCSAqIHBvaW50ZXIgdG8gdGhlIG90aGVyIGVuZAogCQkJCQkgKi8KLQlzdHJ1Y3QgbmV0
bWFwX3JpbmcgKnNhdmVfcmluZzsJLyogcG9pbnRlciB0byBoaWRkZW4gcmluZ3MKLSAgICAgICAJ
CQkJCSAqIChzZWUgbmV0bWFwX3BpcGUuYyBmb3IgZGV0YWlscykKLQkJCQkJICovCiAjZW5kaWYg
LyogV0lUSF9QSVBFUyAqLwogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC0zOTQsMTAgKzUwOCwzMCBA
QAogCWludCAoKm1vbl9ub3RpZnkpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxh
Z3MpOwogCiAJdWludDMyX3QgbW9uX3RhaWw7ICAvKiBsYXN0IHNlZW4gc2xvdCBvbiByeCAqLwot
CXVpbnQzMl90IG1vbl9wb3M7ICAgLyogaW5kZXggb2YgdGhpcyByaW5nIGluIHRoZSBtb25pdG9y
ZWQgcmluZyBhcnJheSAqLworCXVpbnQzMl90IG1vbl9wb3NbTlJfVFhSWF07ICAvKiBpbmRleCBv
ZiB0aGlzIHJpbmcgaW4gdGhlIG1vbml0b3JlZCByaW5nIGFycmF5ICovCisjZW5kaWYKK30KKyNp
ZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoYWxpZ24oNjQpKTsKKyNlbHNlCitfX2F0dHJpYnV0ZV9f
KChfX2FsaWduZWRfXyg2NCkpKTsKICNlbmRpZgotfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRf
Xyg2NCkpKTsKIAorLyogcmV0dXJuIDEgaWZmIHRoZSBrcmluZyBuZWVkcyB0byBiZSB0dXJuZWQg
b24gKi8KK3N0YXRpYyBpbmxpbmUgaW50CitubV9rcmluZ19wZW5kaW5nX29uKHN0cnVjdCBuZXRt
YXBfa3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5L
Ul9ORVRNQVBfT04gJiYKKwkgICAgICAga3JpbmctPm5yX21vZGUgPT0gTktSX05FVE1BUF9PRkY7
Cit9CisKKy8qIHJldHVybiAxIGlmZiB0aGUga3JpbmcgbmVlZHMgdG8gYmUgdHVybmVkIG9mZiAq
Lworc3RhdGljIGlubGluZSBpbnQKK25tX2tyaW5nX3BlbmRpbmdfb2ZmKHN0cnVjdCBuZXRtYXBf
a3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5LUl9O
RVRNQVBfT0ZGICYmCisJICAgICAgIGtyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT047Cit9
CiAKIC8qIHJldHVybiB0aGUgbmV4dCBpbmRleCwgd2l0aCB3cmFwYXJvdW5kICovCiBzdGF0aWMg
aW5saW5lIHVpbnQzMl90CkBAIC01MTMsNiArNjQ3LDggQEAKIAkJCQkgKi8KICNkZWZpbmUgTkFG
X0hPU1RfUklOR1MgIDY0CS8qIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBob3N0IHJpbmdzICov
CiAjZGVmaW5lIE5BRl9GT1JDRV9OQVRJVkUgMTI4CS8qIHRoZSBhZGFwdGVyIGlzIGFsd2F5cyBO
QVRJVkUgKi8KKyNkZWZpbmUgTkFGX1BUTkVUTUFQX0hPU1QgMjU2CS8qIHRoZSBhZGFwdGVyIHN1
cHBvcnRzIHB0bmV0bWFwIGluIHRoZSBob3N0ICovCisjZGVmaW5lIE5BRl9aT01CSUUJKDFVPDwz
MCkgLyogdGhlIG5pYyBkcml2ZXIgaGFzIGJlZW4gdW5sb2FkZWQgKi8KICNkZWZpbmUJTkFGX0JV
U1kJKDFVPDwzMSkgLyogdGhlIGFkYXB0ZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZAogCQkJCSAg
KiBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBmcm9tIHVzZXJzcGFjZQogCQkJCSAgKi8KQEAgLTU5MSwx
MCArNzI3LDE0IEBACiAJICoJRm9yIGh3IGRldmljZXMgdGhpcyBpcyB0eXBpY2FsbHkgYSBzZWx3
YWtldXAoKSwKIAkgKglidXQgZm9yIE5JQy9ob3N0IHBvcnRzIGF0dGFjaGVkIHRvIGEgc3dpdGNo
IChvciB2aWNlLXZlcnNhKQogCSAqCXdlIGFsc28gbmVlZCB0byBpbnZva2UgdGhlICd0eHN5bmMn
IGNvZGUgZG93bnN0cmVhbS4KKwkgKiAgICAgIFRoaXMgY2FsbGJhY2sgcG9pbnRlciBpcyBhY3R1
YWxseSB1c2VkIG9ubHkgdG8gaW5pdGlhbGl6ZQorCSAqICAgICAga3JpbmctPm5tX25vdGlmeS4K
KwkgKiAgICAgIFJldHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBuZXRtYXBfcnhfaXJx
KCkuCiAJICovCiAJdm9pZCAoKm5tX2R0b3IpKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAog
CWludCAoKm5tX3JlZ2lzdGVyKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgaW50IG9ub2ZmKTsK
Kwl2b2lkICgqbm1faW50cikoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9mZik7CiAK
IAlpbnQgKCpubV90eHN5bmMpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3Mp
OwogCWludCAoKm5tX3J4c3luYykoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFn
cyk7CkBAIC02MzksMTQgKzc3OSwxNCBAQAogCiAJLyogbWVtb3J5IGFsbG9jYXRvciAob3BhcXVl
KQogCSAqIFdlIGFsc28gY2FjaGUgYSBwb2ludGVyIHRvIHRoZSBsdXRfZW50cnkgZm9yIHRyYW5z
bGF0aW5nCi0JICogYnVmZmVyIGFkZHJlc3NlcywgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVm
ZmVycy4KKwkgKiBidWZmZXIgYWRkcmVzc2VzLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMg
YW5kIHRoZSBidWZmZXIgc2l6ZS4KIAkgKi8KICAJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVt
OwogCXN0cnVjdCBuZXRtYXBfbHV0IG5hX2x1dDsKIAogCS8qIGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gYXR0YWNoZWQgdG8gdGhpcyBhZGFwdGVyCiAJICogYnkgb3RoZXIgbmV0bWFwIHN1YnN5c3Rl
bXMuIEN1cnJlbnRseSB1c2VkIGJ5Ci0JICogYndyYXAgYW5kIExJTlVYL3YxMDAwLgorCSAqIGJ3
cmFwLCBMSU5VWC92MTAwMCBhbmQgcHRuZXRtYXAKIAkgKi8KIAl2b2lkICpuYV9wcml2YXRlOwog
CkBAIC02NTUsNiArNzk1LDkgQEAKIAlpbnQgbmFfbmV4dF9waXBlOwkvKiBuZXh0IGZyZWUgc2xv
dCBpbiB0aGUgYXJyYXkgKi8KIAlpbnQgbmFfbWF4X3BpcGVzOwkvKiBzaXplIG9mIHRoZSBhcnJh
eSAqLwogCisJLyogT2Zmc2V0IG9mIGV0aGVybmV0IGhlYWRlciBmb3IgZWFjaCBwYWNrZXQuICov
CisJdV9pbnQgdmlydF9oZHJfbGVuOworCiAJY2hhciBuYW1lWzY0XTsKIH07CiAKQEAgLTcyMCw4
ICs4NjMsNiBAQAogCXN0cnVjdCBubV9icmlkZ2UgKm5hX2JkZzsKIAlpbnQgcmV0cnk7CiAKLQkv
KiBPZmZzZXQgb2YgZXRoZXJuZXQgaGVhZGVyIGZvciBlYWNoIHBhY2tldC4gKi8KLQl1X2ludCB2
aXJ0X2hkcl9sZW47CiAJLyogTWF4aW11bSBGcmFtZSBTaXplLCB1c2VkIGluIGJkZ19taXNtYXRj
aF9kYXRhcGF0aCgpICovCiAJdV9pbnQgbWZzOwogCS8qIExhc3Qgc291cmNlIE1BQyBvbiB0aGlz
IHBvcnQgKi8KQEAgLTc2Niw2ICs5MDcsMTMgQEAKICNpZmRlZiBsaW51eAogICAgICAgICBuZXRk
ZXZfdHhfdCAoKnNhdmVfc3RhcnRfeG1pdCkoc3RydWN0IG1idWYgKiwgc3RydWN0IGlmbmV0ICop
OwogI2VuZGlmCisJLyogSXMgdGhlIGFkYXB0ZXIgYWJsZSB0byB1c2UgbXVsdGlwbGUgUlggc2xv
dHMgdG8gc2NhdHRlcgorCSAqIGVhY2ggcGFja2V0IHB1c2hlZCB1cCBieSB0aGUgZHJpdmVyPyAq
LworCWludCByeHNnOworCisJLyogSXMgdGhlIHRyYW5zbWlzc2lvbiBwYXRoIGNvbnRyb2xsZWQg
YnkgYSBuZXRtYXAtYXdhcmUKKwkgKiBkZXZpY2UgcXVldWUgKGkuZS4gcWRpc2Mgb24gbGludXgp
PyAqLworCWludCB0eHFkaXNjOwogfTsKICNlbmRpZiAgLyogV0lUSF9HRU5FUklDICovCiAKQEAg
LTc3Niw3ICs5MjQsNyBAQAogfQogCiAjaWZkZWYgV0lUSF9WQUxFCi0KK3N0cnVjdCBubV9iZGdf
cG9sbGluZ19zdGF0ZTsKIC8qCiAgKiBCcmlkZ2Ugd3JhcHBlciBmb3Igbm9uIFZBTEUgcG9ydHMg
YXR0YWNoZWQgdG8gYSBWQUxFIHN3aXRjaC4KICAqCkBAIC04MjYsOSArOTc0LDYgQEAKIAlzdHJ1
Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgaG9zdDsgIC8qIGZvciBob3N0IHJpbmdzICovCiAJc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpod25hOwkvKiB0aGUgdW5kZXJseWluZyBkZXZpY2UgKi8KIAotCS8q
IGJhY2t1cCBvZiB0aGUgaHduYSBtZW1vcnkgYWxsb2NhdG9yICovCi0Jc3RydWN0IG5ldG1hcF9t
ZW1fZCAqc2F2ZV9ubWQ7Ci0KIAkvKgogCSAqIFdoZW4gd2UgYXR0YWNoIGEgcGh5c2ljYWwgaW50
ZXJmYWNlIHRvIHRoZSBicmlkZ2UsIHdlCiAJICogYWxsb3cgdGhlIGNvbnRyb2xsaW5nIHByb2Nl
c3MgdG8gdGVybWluYXRlLCBzbyB3ZSBuZWVkCkBAIC04MzcsMTAgKzk4MiwxMCBAQAogCSAqIGFy
ZSBhdHRhY2hlZCB0byBhIGJyaWRnZS4KIAkgKi8KIAlzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqbmFf
a3ByaXY7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpuYV9wb2xsaW5nX3N0YXRlOwog
fTsKIGludCBuZXRtYXBfYndyYXBfYXR0YWNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuZXRt
YXBfYWRhcHRlciAqKTsKIAotCiAjZW5kaWYgLyogV0lUSF9WQUxFICovCiAKICNpZmRlZiBXSVRI
X1BJUEVTCkBAIC04NzUsNTYgKzEwMjAsMTIyIEBACiAJcmV0dXJuIHNwYWNlOwogfQogCisvKiBy
ZXR1cm4gc2xvdHMgcmVzZXJ2ZWQgdG8gdHggY2xpZW50cyAqLworI2RlZmluZSBubV9rcl90eHNw
YWNlKF9rKSBubV9rcl9yeHNwYWNlKF9rKQogCi0vKiBUcnVlIGlmIG5vIHNwYWNlIGluIHRoZSB0
eCByaW5nLiBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1ZSAqLworCisvKiBUcnVlIGlm
IG5vIHNwYWNlIGluIHRoZSB0eCByaW5nLCBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1
ZSAqLwogc3RhdGljIGlubGluZSBpbnQKIG5tX2tyX3R4ZW1wdHkoc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcpCiB7CiAJcmV0dXJuIGtyaW5nLT5yY3VyID09IGtyaW5nLT5ucl9od3RhaWw7CiB9
CiAKKy8qIFRydWUgaWYgbm8gbW9yZSBjb21wbGV0ZWQgc2xvdHMgaW4gdGhlIHJ4IHJpbmcsIG9u
bHkgdmFsaWQgYWZ0ZXIKKyAqIHJ4c3luY19wcm9sb2d1ZSAqLworI2RlZmluZSBubV9rcl9yeGVt
cHR5KF9rKQlubV9rcl90eGVtcHR5KF9rKQogCiAvKgogICogcHJvdGVjdCBhZ2FpbnN0IG11bHRp
cGxlIHRocmVhZHMgdXNpbmcgdGhlIHNhbWUgcmluZy4KLSAqIGFsc28gY2hlY2sgdGhhdCB0aGUg
cmluZyBoYXMgbm90IGJlZW4gc3RvcHBlZC4KLSAqIFdlIG9ubHkgY2FyZSBmb3IgMCBvciAhPTAg
YXMgYSByZXR1cm4gY29kZS4KKyAqIGFsc28gY2hlY2sgdGhhdCB0aGUgcmluZyBoYXMgbm90IGJl
ZW4gc3RvcHBlZCBvciBsb2NrZWQKICAqLwotI2RlZmluZSBOTV9LUl9CVVNZCTEKLSNkZWZpbmUg
Tk1fS1JfU1RPUFBFRAkyCisjZGVmaW5lIE5NX0tSX0JVU1kJMQkvKiBzb21lIG90aGVyIHRocmVh
ZCBpcyBzeW5jaW5nIHRoZSByaW5nICovCisjZGVmaW5lIE5NX0tSX1NUT1BQRUQJMgkvKiB1bmJv
dW5kZWQgc3RvcCAoaWZjb25maWcgZG93biBvciBkcml2ZXIgdW5sb2FkKSAqLworI2RlZmluZSBO
TV9LUl9MT0NLRUQJMwkvKiBib3VuZGVkLCBicmllZiBzdG9wIGZvciBtdXR1YWwgZXhjbHVzaW9u
ICovCiAKIAorLyogcmVsZWFzZSB0aGUgcHJldmlvdXNseSBhY3F1aXJlZCByaWdodCB0byB1c2Ug
dGhlICpzeW5jKCkgbWV0aG9kcyBvZiB0aGUgcmluZyAqLwogc3RhdGljIF9faW5saW5lIHZvaWQg
bm1fa3JfcHV0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQogewogCU5NX0FUT01JQ19DTEVBUigm
a3ItPm5yX2J1c3kpOwogfQogCiAKLXN0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0KHN0
cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQorLyogdHJ1ZSBpZiB0aGUgaWZwIHRoYXQgYmFja2VkIHRo
ZSBhZGFwdGVyIGhhcyBkaXNhcHBlYXJlZCAoZS5nLiwgdGhlCisgKiBkcml2ZXIgaGFzIGJlZW4g
dW5sb2FkZWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5tX2lzem9tYmllKHN0cnVjdCBuZXRt
YXBfYWRhcHRlciAqbmEpOworCisvKiB0cnkgdG8gb2J0YWluIGV4Y2x1c2l2ZSByaWdodCB0byBp
c3N1ZSB0aGUgKnN5bmMoKSBvcGVyYXRpb25zIG9uIHRoZSByaW5nLgorICogVGhlIHJpZ2h0IGlz
IG9idGFpbmVkIGFuZCBtdXN0IGJlIGxhdGVyIHJlbGlucXVpc2hlZCB2aWEgbm1fa3JfcHV0KCkg
aWYgYW5kCisgKiBvbmx5IGlmIG5tX2tyX3RyeWdldCgpIHJldHVybnMgMC4KKyAqIElmIGNhbl9z
bGVlcCBpcyAxIHRoZXJlIGFyZSBvbmx5IHR3byBvdGhlciBwb3NzaWJsZSBvdXRjb21lczoKKyAq
IC0gdGhlIGZ1bmN0aW9uIHJldHVybnMgTk1fS1JfQlVTWQorICogLSB0aGUgZnVuY3Rpb24gcmV0
dXJucyBOTV9LUl9TVE9QUEVEIGFuZCBzZXRzIHRoZSBQT0xMRVJSIGJpdCBpbiAqcGVycgorICog
ICAoaWYgbm9uLW51bGwpCisgKiBJbiBib3RoIGNhc2VzIHRoZSBjYWxsZXIgd2lsbCB0eXBpY2Fs
bHkgc2tpcCB0aGUgcmluZywgcG9zc2libHkgY29sbGVjdGluZworICogZXJyb3JzIGFsb25nIHRo
ZSB3YXkuCisgKiBJZiB0aGUgY2FsbGluZyBjb250ZXh0IGRvZXMgbm90IGFsbG93IHNsZWVwaW5n
LCB0aGUgY2FsbGVyIG11c3QgcGFzcyAwIGluIGNhbl9zbGVlcC4KKyAqIEluIHRoZSBsYXR0ZXIg
Y2FzZSwgdGhlIGZ1bmN0aW9uIG1heSBhbHNvIHJldHVybiBOTV9LUl9MT0NLRUQgYW5kIGxlYXZl
ICpwZXJyCisgKiB1bnRvdWNoZWQ6IGlkZWFsbHksIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fp
biBhdCBhIGxhdGVyIHRpbWUuCisgKi8KK3N0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgY2FuX3NsZWVwLCBpbnQgKnBlcnIpCiB7CisJ
aW50IGJ1c3kgPSAxLCBzdG9wcGVkOwogCS8qIGNoZWNrIGEgZmlyc3QgdGltZSB3aXRob3V0IHRh
a2luZyB0aGUgbG9jawogCSAqIHRvIGF2b2lkIHN0YXJ2YXRpb24gZm9yIG5tX2tyX2dldCgpCiAJ
ICovCi0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3Rv
cHBlZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVE
OworcmV0cnk6CisJc3RvcHBlZCA9IGtyLT5ua3Jfc3RvcHBlZDsKKwlpZiAodW5saWtlbHkoc3Rv
cHBlZCkpIHsKKwkJZ290byBzdG9wOworCX0KKwlidXN5ID0gTk1fQVRPTUlDX1RFU1RfQU5EX1NF
VCgma3ItPm5yX2J1c3kpOworCS8qIHdlIHNob3VsZCBub3QgcmV0dXJuIE5NX0tSX0JVU1kgaWYg
dGhlIHJpbmcgd2FzCisJICogYWN0dWFsbHkgc3RvcHBlZCwgc28gY2hlY2sgYW5vdGhlciB0aW1l
IGFmdGVyCisJICogdGhlIGJhcnJpZXIgcHJvdmlkZWQgYnkgdGhlIGF0b21pYyBvcGVyYXRpb24K
KwkgKi8KKwlzdG9wcGVkID0ga3ItPm5rcl9zdG9wcGVkOworCWlmICh1bmxpa2VseShzdG9wcGVk
KSkgeworCQlnb3RvIHN0b3A7CisJfQorCisJaWYgKHVubGlrZWx5KG5tX2lzem9tYmllKGtyLT5u
YSkpKSB7CisJCXN0b3BwZWQgPSBOTV9LUl9TVE9QUEVEOworCQlnb3RvIHN0b3A7CiAJfQotCWlm
ICh1bmxpa2VseShOTV9BVE9NSUNfVEVTVF9BTkRfU0VUKCZrci0+bnJfYnVzeSkpKQotCQlyZXR1
cm4gTk1fS1JfQlVTWTsKLQkvKiBjaGVjayBhIHNlY29uZCB0aW1lIHdpdGggbG9jayBoZWxkICov
Ci0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3RvcHBl
ZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7CisKKwlyZXR1cm4gdW5saWtlbHkoYnVzeSkg
PyBOTV9LUl9CVVNZIDogMDsKKworc3RvcDoKKwlpZiAoIWJ1c3kpCiAJCW5tX2tyX3B1dChrcik7
Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVEOworCWlmIChzdG9wcGVkID09IE5NX0tSX1NUT1BQRUQp
IHsKKy8qIGlmIFBPTExFUlIgaXMgZGVmaW5lZCB3ZSB3YW50IHRvIHVzZSBpdCB0byBzaW1wbGlm
eSBuZXRtYXBfcG9sbCgpLgorICogT3RoZXJ3aXNlLCBhbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBk
by4KKyAqLworI2lmZGVmIFBPTExFUlIKKyNkZWZpbmUgTk1fUE9MTEVSUiBQT0xMRVJSCisjZWxz
ZQorI2RlZmluZSBOTV9QT0xMRVJSIDEKKyNlbmRpZiAvKiBQT0xMRVJSICovCisJCWlmIChwZXJy
KQorCQkJKnBlcnIgfD0gTk1fUE9MTEVSUjsKKyN1bmRlZiBOTV9QT0xMRVJSCisJfSBlbHNlIGlm
IChjYW5fc2xlZXApIHsKKwkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfVFJZR0VUIiwgNCk7CisJCWdv
dG8gcmV0cnk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBzdG9wcGVkOwogfQogCi1zdGF0aWMg
X19pbmxpbmUgdm9pZCBubV9rcl9nZXQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCisvKiBwdXQg
dGhlIHJpbmcgaW4gdGhlICdzdG9wcGVkJyBzdGF0ZSBhbmQgd2FpdCBmb3IgdGhlIGN1cnJlbnQg
dXNlciAoaWYgYW55KSB0bworICogbm90aWNlLiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5NX0tS
X1NUT1BQRUQgb3IgTk1fS1JfTE9DS0VECisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIG5tX2ty
X3N0b3Aoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IsIGludCBzdG9wcGVkKQogeworCWtyLT5ua3Jf
c3RvcHBlZCA9IHN0b3BwZWQ7CiAJd2hpbGUgKE5NX0FUT01JQ19URVNUX0FORF9TRVQoJmtyLT5u
cl9idXN5KSkKIAkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfR0VUIiwgNCk7CiB9CiAKKy8qIHJlc3Rh
cnQgYSByaW5nIGFmdGVyIGEgc3RvcCAqLworc3RhdGljIF9faW5saW5lIHZvaWQgbm1fa3Jfc3Rh
cnQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCit7CisJa3ItPm5rcl9zdG9wcGVkID0gMDsKKwlu
bV9rcl9wdXQoa3IpOworfQorCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg
dXNlZCBieSBpbmRpdmlkdWFsIGRyaXZlcnMgdG8KQEAgLTk1MiwxMCArMTE2MywyNiBAQAogCWVu
dW0gdHhyeCB0eCwgdV9pbnQgbiwgdV9pbnQgbmV3X2N1cik7CiBpbnQgbmV0bWFwX3JpbmdfcmVp
bml0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKik7CiAKKy8qIFJldHVybiBjb2RlcyBmb3IgbmV0bWFw
Xyp4X2lycS4gKi8KK2VudW0geworCS8qIERyaXZlciBzaG91bGQgZG8gbm9ybWFsIGludGVycnVw
dCBwcm9jZXNzaW5nLCBlLmcuIGJlY2F1c2UKKwkgKiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBpbiBu
ZXRtYXAgbW9kZS4gKi8KKwlOTV9JUlFfUEFTUyA9IDAsCisJLyogUG9ydCBpcyBpbiBuZXRtYXAg
bW9kZSwgYW5kIHRoZSBpbnRlcnJ1cHQgd29yayBoYXMgYmVlbgorCSAqIGNvbXBsZXRlZC4gVGhl
IGRyaXZlciBkb2VzIG5vdCBoYXZlIHRvIG5vdGlmeSBuZXRtYXAKKwkgKiBhZ2FpbiBiZWZvcmUg
dGhlIG5leHQgaW50ZXJydXB0LiAqLworCU5NX0lSUV9DT01QTEVURUQgPSAtMSwKKwkvKiBQb3J0
IGlzIGluIG5ldG1hcCBtb2RlLCBidXQgdGhlIGludGVycnVwdCB3b3JrIGhhcyBub3QgYmVlbgor
CSAqIGNvbXBsZXRlZC4gVGhlIGRyaXZlciBoYXMgdG8gbWFrZSBzdXJlIG5ldG1hcCB3aWxsIGJl
CisJICogbm90aWZpZWQgYWdhaW4gc29vbiwgZXZlbiBpZiBubyBtb3JlIGludGVycnVwdHMgY29t
ZSAoZS5nLgorCSAqIG9uIExpbnV4IHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBjYWxsIG5hcGlfY29t
cGxldGUoKSkuICovCisJTk1fSVJRX1JFU0NIRUQgPSAtMiwKK307CisKIC8qIGRlZmF1bHQgZnVu
Y3Rpb25zIHRvIGhhbmRsZSByeC90eCBpbnRlcnJ1cHRzICovCiBpbnQgbmV0bWFwX3J4X2lycShz
dHJ1Y3QgaWZuZXQgKiwgdV9pbnQsIHVfaW50ICopOwogI2RlZmluZSBuZXRtYXBfdHhfaXJxKF9u
LCBfcSkgbmV0bWFwX3J4X2lycShfbiwgX3EsIE5VTEwpCi12b2lkIG5ldG1hcF9jb21tb25faXJx
KHN0cnVjdCBpZm5ldCAqLCB1X2ludCwgdV9pbnQgKndvcmtfZG9uZSk7CitpbnQgbmV0bWFwX2Nv
bW1vbl9pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIHVfaW50LCB1X2ludCAqd29ya19kb25l
KTsKIAogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC05ODUsMzUgKzEyMTIsNzQgQEAKIAlyZXR1cm4g
bm1fbmV0bWFwX29uKG5hKSAmJiAobmEtPm5hX2ZsYWdzICYgTkFGX05BVElWRSk7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgaW50CitubV9pc3pvbWJpZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor
eworCXJldHVybiBuYSA9PSBOVUxMIHx8IChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklFKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkCitubV91cGRhdGVfaG9zdHJpbmdzX21vZGUoc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpuYSkKK3sKKwkvKiBQcm9jZXNzIG5yX21vZGUgYW5kIG5yX3BlbmRpbmdf
bW9kZSBmb3IgaG9zdCByaW5ncy4gKi8KKwluYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10u
bnJfbW9kZSA9CisJCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ucl9wZW5kaW5nX21v
ZGU7CisJbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdLm5yX21vZGUgPQorCQluYS0+cnhf
cmluZ3NbbmEtPm51bV9yeF9yaW5nc10ubnJfcGVuZGluZ19tb2RlOworfQorCiAvKiBzZXQvY2xl
YXIgbmF0aXZlIGZsYWdzIGFuZCBpZl90cmFuc21pdC9uZXRkZXZfb3BzICovCiBzdGF0aWMgaW5s
aW5lIHZvaWQKIG5tX3NldF9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKKwkvKiBXZSBkbyB0aGUgc2V0dXAg
Zm9yIGludGVyY2VwdGluZyBwYWNrZXRzIG9ubHkgaWYgd2UgYXJlIHRoZQorCSAqIGZpcnN0IHVz
ZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzID4gMCkgeworCQly
ZXR1cm47CisJfQorCiAJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAjaWZkZWYgSUZD
QVBfTkVUTUFQIC8qIG9yIEZyZWVCU0QgPyAqLwogCWlmcC0+aWZfY2FwZW5hYmxlIHw9IElGQ0FQ
X05FVE1BUDsKICNlbmRpZgotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZCAoX19GcmVl
QlNEX18pCiAJbmEtPmlmX3RyYW5zbWl0ID0gaWZwLT5pZl90cmFuc21pdDsKIAlpZnAtPmlmX3Ry
YW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OworI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCSh2b2lk
KWlmcDsgLyogcHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29t
bWVudCB0aG9zZT8KKwkvL25hLT5pZl90cmFuc21pdCA9IGlmcC0+aWZfdHJhbnNtaXQ7CisJLy9p
ZnAtPmlmX3RyYW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OwogI2Vsc2UKIAluYS0+aWZfdHJhbnNt
aXQgPSAodm9pZCAqKWlmcC0+bmV0ZGV2X29wczsKIAlpZnAtPm5ldGRldl9vcHMgPSAmKChzdHJ1
Y3QgbmV0bWFwX2h3X2FkYXB0ZXIgKiluYSktPm5tX25kbzsKIAkoKHN0cnVjdCBuZXRtYXBfaHdf
YWRhcHRlciAqKW5hKS0+c2F2ZV9ldGh0b29sID0gaWZwLT5ldGh0b29sX29wczsKIAlpZnAtPmV0
aHRvb2xfb3BzID0gJigoc3RydWN0IG5ldG1hcF9od19hZGFwdGVyKiluYSktPm5tX2V0bzsKICNl
bmRpZgorCW5tX3VwZGF0ZV9ob3N0cmluZ3NfbW9kZShuYSk7CiB9CiAKLQogc3RhdGljIGlubGlu
ZSB2b2lkCiBubV9jbGVhcl9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKLSNpZmRlZiBfX0ZyZWVCU0RfXwor
CS8qIFdlIHVuZG8gdGhlIHNldHVwIGZvciBpbnRlcmNlcHRpbmcgcGFja2V0cyBvbmx5IGlmIHdl
IGFyZSB0aGUKKwkgKiBsYXN0IHVzZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5h
Y3RpdmVfZmRzID4gMCkgeworCQlyZXR1cm47CisJfQorCisJbm1fdXBkYXRlX2hvc3RyaW5nc19t
b2RlKG5hKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJaWZwLT5pZl90cmFuc21pdCA9
IG5hLT5pZl90cmFuc21pdDsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWlmcDsgLyog
cHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29tbWVudCB0aG9z
ZT8KKwkvL2lmcC0+aWZfdHJhbnNtaXQgPSBuYS0+aWZfdHJhbnNtaXQ7CiAjZWxzZQogCWlmcC0+
bmV0ZGV2X29wcyA9ICh2b2lkICopbmEtPmlmX3RyYW5zbWl0OwogCWlmcC0+ZXRodG9vbF9vcHMg
PSAoKHN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciopbmEpLT5zYXZlX2V0aHRvb2w7CkBAIC0xMDI0
LDYgKzEyOTAsMjggQEAKICNlbmRpZgogfQogCisvKgorICogbm1fKnN5bmNfcHJvbG9ndWUoKSBm
dW5jdGlvbnMgYXJlIHVzZWQgaW4gaW9jdGwvcG9sbCBhbmQgcHRuZXRtYXAKKyAqIGt0aHJlYWRz
LgorICogV2UgbmVlZCBuZXRtYXBfcmluZyogcGFyYW1ldGVyLCBiZWNhdXNlIGluIHB0bmV0bWFw
IGl0IGlzIGRlY291cGxlZAorICogZnJvbSBob3N0IGtyaW5nLgorICogVGhlIHVzZXItc3BhY2Ug
cmluZyBwb2ludGVycyAoaGVhZC9jdXIvdGFpbCkgYXJlIHNoYXJlZCB0aHJvdWdoCisgKiBDU0Ig
YmV0d2VlbiBob3N0IGFuZCBndWVzdC4KKyAqLworCisvKgorICogdmFsaWRhdGVzIHBhcmFtZXRl
cnMgaW4gdGhlIHJpbmcva3JpbmcsIHJldHVybnMgYSB2YWx1ZSBmb3IgaGVhZAorICogSWYgYW55
IGVycm9yLCByZXR1cm5zIHJpbmdfc2l6ZSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMy
X3Qgbm1fdHhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1h
cF9yaW5nICopOworCisKKy8qCisgKiB2YWxpZGF0ZXMgcGFyYW1ldGVycyBpbiB0aGUgcmluZy9r
cmluZywgcmV0dXJucyBhIHZhbHVlIGZvciBoZWFkCisgKiBJZiBhbnkgZXJyb3IsIHJldHVybnMg
cmluZ19zaXplIGxpbSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMyX3Qgbm1fcnhzeW5j
X3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1hcF9yaW5nICopOwor
CiAKIC8qIGNoZWNrL2ZpeCBhZGRyZXNzIGFuZCBsZW4gaW4gdHggcmluZ3MgKi8KICNpZiAxIC8q
IGRlYnVnIHZlcnNpb24gKi8KQEAgLTEwNzksNiArMTM2Nyw5IEBACiAgKi8KIHZvaWQgbmV0bWFw
X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CiAKK2ludCBuZXRtYXBf
aHdfa3JpbmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgbmV0bWFw
X2h3X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CisKIC8qIHNldCB0
aGUgc3RvcHBlZC9lbmFibGVkIHN0YXR1cyBvZiByaW5nCiAgKiBXaGVuIHN0b3BwaW5nLCB0aGV5
IGFsc28gd2FpdCBmb3IgYWxsIGN1cnJlbnQgYWN0aXZpdHkgb24gdGhlIHJpbmcgdG8KICAqIHRl
cm1pbmF0ZS4gVGhlIHN0YXR1cyBjaGFuZ2UgaXMgdGhlbiBub3RpZmllZCB1c2luZyB0aGUgbmEg
bm1fbm90aWZ5CkBAIC0xMDg3LDE2ICsxMzc4LDE4IEBACiB2b2lkIG5ldG1hcF9zZXRfcmluZyhz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgdV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4LCBpbnQgc3Rv
cHBlZCk7CiAvKiBzZXQgdGhlIHN0b3BwZWQvZW5hYmxlZCBzdGF0dXMgb2YgYWxsIHJpbmdzIG9m
IHRoZSBhZGFwdGVyLiAqLwogdm9pZCBuZXRtYXBfc2V0X2FsbF9yaW5ncyhzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKiwgaW50IHN0b3BwZWQpOwotLyogY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIG5l
dG1hcF9zZXRfYWxsX3JpbmdzLCB1c2VkIGluIGRyaXZlcnMgKi8KKy8qIGNvbnZlbmllbmNlIHdy
YXBwZXJzIGZvciBuZXRtYXBfc2V0X2FsbF9yaW5ncyAqLwogdm9pZCBuZXRtYXBfZGlzYWJsZV9h
bGxfcmluZ3Moc3RydWN0IGlmbmV0ICopOwogdm9pZCBuZXRtYXBfZW5hYmxlX2FsbF9yaW5ncyhz
dHJ1Y3QgaWZuZXQgKik7CiAKIGludCBuZXRtYXBfZG9fcmVnaWYoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsCiAJdWludDE2X3QgcmluZ2lkLCB1
aW50MzJfdCBmbGFncyk7Ci0KK3ZvaWQgbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9w
cml2X2QgKnByaXYpOwogCiB1X2ludCBubV9ib3VuZF92YXIodV9pbnQgKnYsIHVfaW50IGRmbHQs
IHVfaW50IGxvLCB1X2ludCBoaSwgY29uc3QgY2hhciAqbXNnKTsKLWludCBuZXRtYXBfZ2V0X25h
KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50IGNyZWF0
ZSk7CitpbnQgbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9h
ZGFwdGVyICoqbmEsCisJCSAgc3RydWN0IGlmbmV0ICoqaWZwLCBpbnQgY3JlYXRlKTsKK3ZvaWQg
bmV0bWFwX3VuZ2V0X25hKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCBpZm5ldCAq
aWZwKTsKIGludCBuZXRtYXBfZ2V0X2h3X25hKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKipuYSk7CiAKIApAQCAtMTEyMywxMiArMTQxNiwxMSBAQAogdV9pbnQgbmV0
bWFwX2JkZ19sZWFybmluZyhzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnQsIHVpbnQ4X3QgKmRzdF9yaW5n
LAogCQlzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKik7CiAKKyNkZWZpbmUJTk1fQlJJREdFUwkJ
OAkvKiBudW1iZXIgb2YgYnJpZGdlcyAqLwogI2RlZmluZQlOTV9CREdfTUFYUE9SVFMJCTI1NAkv
KiB1cCB0byAyNTQgKi8KICNkZWZpbmUJTk1fQkRHX0JST0FEQ0FTVAlOTV9CREdfTUFYUE9SVFMK
ICNkZWZpbmUJTk1fQkRHX05PUE9SVAkJKE5NX0JER19NQVhQT1JUUysxKQogCi0jZGVmaW5lCU5N
X05BTUUJCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCi0KIC8qIHRo
ZXNlIGFyZSByZWRlZmluZWQgaW4gY2FzZSBvZiBubyBWQUxFIHN1cHBvcnQgKi8KIGludCBuZXRt
YXBfZ2V0X2JkZ19uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICoq
bmEsIGludCBjcmVhdGUpOwogc3RydWN0IG5tX2JyaWRnZSAqbmV0bWFwX2luaXRfYnJpZGdlczIo
dV9pbnQpOwpAQCAtMTE4MCwxNCArMTQ3MiwxMyBAQAogI2VuZGlmCiAKIC8qIFZhcmlvdXMgcHJv
dG90eXBlcyAqLwotaW50IG5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBldmVudHMs
IHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfcG9sbChzdHJ1Y3QgbmV0bWFwX3ByaXZf
ZCAqLCBpbnQgZXZlbnRzLCBOTV9TRUxSRUNPUkRfVCAqdGQpOwogaW50IG5ldG1hcF9pbml0KHZv
aWQpOwogdm9pZCBuZXRtYXBfZmluaSh2b2lkKTsKIGludCBuZXRtYXBfZ2V0X21lbW9yeShzdHJ1
Y3QgbmV0bWFwX3ByaXZfZCogcCk7CiB2b2lkIG5ldG1hcF9kdG9yKHZvaWQgKmRhdGEpOwotaW50
IG5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdik7CiAKLWludCBu
ZXRtYXBfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhLCBp
bnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfaW9jdGwoc3RydWN0IG5l
dG1hcF9wcml2X2QgKnByaXYsIHVfbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSwgc3RydWN0IHRocmVh
ZCAqKTsKIAogLyogbmV0bWFwX2FkYXB0ZXIgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gKi8KIApAQCAt
MTIyNywxMSArMTUxOCwxMSBAQAogLyoKICAqIG1vZHVsZSB2YXJpYWJsZXMKICAqLwotI2RlZmlu
ZSBORVRNQVBfQlVGX0JBU0UobmEpCSgobmEpLT5uYV9sdXQubHV0WzBdLnZhZGRyKQotI2RlZmlu
ZSBORVRNQVBfQlVGX1NJWkUobmEpCSgobmEpLT5uYV9sdXQub2Jqc2l6ZSkKLWV4dGVybiBpbnQg
bmV0bWFwX21pdGlnYXRlOwkvLyBYWFggbm90IHJlYWxseSB1c2VkCisjZGVmaW5lIE5FVE1BUF9C
VUZfQkFTRShfbmEpCSgoX25hKS0+bmFfbHV0Lmx1dFswXS52YWRkcikKKyNkZWZpbmUgTkVUTUFQ
X0JVRl9TSVpFKF9uYSkJKChfbmEpLT5uYV9sdXQub2Jqc2l6ZSkKIGV4dGVybiBpbnQgbmV0bWFw
X25vX3BlbmRpbnRyOwotZXh0ZXJuIGludCBuZXRtYXBfdmVyYm9zZTsJLy8gWFhYIGRlYnVnZ2lu
ZworZXh0ZXJuIGludCBuZXRtYXBfbWl0aWdhdGU7CitleHRlcm4gaW50IG5ldG1hcF92ZXJib3Nl
OwkJLyogZm9yIGRlYnVnZ2luZyAqLwogZW51bSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIHZlcmJvc2UgZmxhZ3MgKi8KIAlOTV9WRVJCX09OID0gMSwgICAgICAgICAgICAg
ICAgIC8qIGdlbmVyaWMgdmVyYm9zZSAqLwogCU5NX1ZFUkJfSE9TVCA9IDB4MiwgICAgICAgICAg
ICAgLyogdmVyYm9zZSBob3N0IHN0YWNrICovCkBAIC0xMjQ0LDEwICsxNTM1LDExIEBACiB9Owog
CiBleHRlcm4gaW50IG5ldG1hcF90eHN5bmNfcmV0cnk7CitleHRlcm4gaW50IG5ldG1hcF9mbGFn
czsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfbWl0OwogZXh0ZXJuIGludCBuZXRtYXBfZ2Vu
ZXJpY19yaW5nc2l6ZTsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfcmluZ3M7Ci1leHRlcm4g
aW50IG5ldG1hcF91c2VfY291bnQ7CitleHRlcm4gaW50IG5ldG1hcF9nZW5lcmljX3R4cWRpc2M7
CiAKIC8qCiAgKiBOQSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IG5ldG1hcCBhZGFw
dGVyIGZyb20gdGhlIGlmcCwKQEAgLTEyNTYsMzcgKzE1NDgsMjcgQEAKICNkZWZpbmUJTkEoX2lm
cCkJKChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKilXTkEoX2lmcCkpCiAKIC8qCi0gKiBNYWNyb3Mg
dG8gZGV0ZXJtaW5lIGlmIGFuIGludGVyZmFjZSBpcyBuZXRtYXAgY2FwYWJsZSBvciBuZXRtYXAg
ZW5hYmxlZC4KLSAqIFNlZSB0aGUgbWFnaWMgZmllbGQgaW4gc3RydWN0IG5ldG1hcF9hZGFwdGVy
LgotICovCi0jaWZkZWYgX19GcmVlQlNEX18KLS8qCi0gKiBvbiBGcmVlQlNEIGp1c3QgdXNlIGlm
X2NhcGFiaWxpdGllcyBhbmQgaWZfY2FwZW5hYmxlLgotICovCi0jZGVmaW5lIE5FVE1BUF9DQVBB
QkxFKGlmcCkJKE5BKGlmcCkgJiYJCVwKLQkoaWZwKS0+aWZfY2FwYWJpbGl0aWVzICYgSUZDQVBf
TkVUTUFQICkKLQotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JKGlmcCkt
PmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9ORVRNQVAKLQotI2Vsc2UJLyogbGludXggKi8KLQot
LyoKLSAqIG9uIGxpbnV4OgotICogd2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQgYW5kIGl0cyBm
aXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKKyAqIE9uIG9sZCB2ZXJzaW9ucyBvZiBGcmVlQlNE
LCBOQShpZnApIGlzIGEgcHNwYXJlLiBPbiBsaW51eCB3ZQorICogb3ZlcmxvYWQgYW5vdGhlciBw
b2ludGVyIGluIHRoZSBuZXRkZXYuCisgKgorICogV2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQg
YW5kIGl0cyBmaXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKICAqIG1hZ2ljIHZhbHVlLiBUaGUg
Y2FwZW5hYmxlIGlzIHdpdGhpbiB0aGUgc3RydWN0IG5ldG1hcF9hZGFwdGVyLgogICovCiAjZGVm
aW5lCU5FVE1BUF9NQUdJQwkweDUyNjk3YTdhCiAKLSNkZWZpbmUgTkVUTUFQX0NBUEFCTEUoaWZw
KQkoTkEoaWZwKSAmJgkJXAorI2RlZmluZSBOTV9OQV9WQUxJRChpZnApCShOQShpZnApICYmCQlc
CiAJKCh1aW50MzJfdCkodWludHB0cl90KU5BKGlmcCkgXiBOQShpZnApLT5tYWdpYykgPT0gTkVU
TUFQX01BR0lDICkKIAotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JTkEo
aWZwKS0+bWFnaWMgPSAoKHVpbnQzMl90KSh1aW50cHRyX3QpTkEoaWZwKSkgXiBORVRNQVBfTUFH
SUMKKyNkZWZpbmUJTk1fQVRUQUNIX05BKGlmcCwgbmEpIGRvIHsJCQkJCVwKKwlXTkEoaWZwKSA9
IG5hOwkJCQkJCQlcCisJaWYgKE5BKGlmcCkpCQkJCQkJCVwKKwkJTkEoaWZwKS0+bWFnaWMgPSAJ
CQkJCVwKKwkJCSgodWludDMyX3QpKHVpbnRwdHJfdClOQShpZnApKSBeIE5FVE1BUF9NQUdJQzsJ
XAorfSB3aGlsZSgwKQogCi0jZW5kaWYJLyogbGludXggKi8KKyNkZWZpbmUgTk1fSVNfTkFUSVZF
KGlmcCkJKE5NX05BX1ZBTElEKGlmcCkgJiYgTkEoaWZwKS0+bm1fZHRvciA9PSBuZXRtYXBfaHdf
ZHRvcikKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKIAog
LyogQXNzaWducyB0aGUgZGV2aWNlIElPTU1VIGRvbWFpbiB0byBhbiBhbGxvY2F0b3IuCiAgKiBS
ZXR1cm5zIC1FTk9NRU0gaW4gY2FzZSB0aGUgZG9tYWluIGlzIGRpZmZlcmVudCAqLwpAQCAtMTMz
MCw2ICsxNjEyLDggQEAKIAl9CiB9CiAKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCiAjZWxzZSAv
KiBsaW51eCAqLwogCiBpbnQgbm1faW9tbXVfZ3JvdXBfaWQoYnVzX2RtYV90YWdfdCBkZXYpOwpA
QCAtMTM0MCw4ICsxNjI0LDggQEAKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1h
cCwgdm9pZCAqYnVmKQogewogCWlmICgwICYmIG1hcCkgewotCQkqbWFwID0gZG1hX21hcF9zaW5n
bGUobmEtPnBkZXYsIGJ1ZiwgbmEtPm5hX2x1dC5vYmpzaXplLAotCQkJCURNQV9CSURJUkVDVElP
TkFMKTsKKwkJKm1hcCA9IGRtYV9tYXBfc2luZ2xlKG5hLT5wZGV2LCBidWYsIE5FVE1BUF9CVUZf
U0laRShuYSksCisJCQkJICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCX0KIH0KIApAQCAtMTM0
OSwxMSArMTYzMywxMSBAQAogbmV0bWFwX3VubG9hZF9tYXAoc3RydWN0IG5ldG1hcF9hZGFwdGVy
ICpuYSwKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1hcCkKIHsKLQl1X2ludCBz
eiA9IG5hLT5uYV9sdXQub2Jqc2l6ZTsKKwl1X2ludCBzeiA9IE5FVE1BUF9CVUZfU0laRShuYSk7
CiAKIAlpZiAoKm1hcCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG5hLT5wZGV2LCAqbWFwLCBzeiwK
LQkJCQlETUFfQklESVJFQ1RJT05BTCk7CisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAl9CiB9
CiAKQEAgLTEzNjEsNyArMTY0NSw3IEBACiBuZXRtYXBfcmVsb2FkX21hcChzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hLAogCWJ1c19kbWFfdGFnX3QgdGFnLCBidXNfZG1hbWFwX3QgbWFwLCB2b2lk
ICpidWYpCiB7Ci0JdV9pbnQgc3ogPSBuYS0+bmFfbHV0Lm9ianNpemU7CisJdV9pbnQgc3ogPSBO
RVRNQVBfQlVGX1NJWkUobmEpOwogCiAJaWYgKCptYXApIHsKIAkJZG1hX3VubWFwX3NpbmdsZShu
YS0+cGRldiwgKm1hcCwgc3osCkBAIC0xNDcyLDcgKzE3NTYsMTEgQEAKIAlzdHJ1Y3QgbHV0X2Vu
dHJ5ICpsdXQgPSBuYS0+bmFfbHV0Lmx1dDsKIAl2b2lkICpyZXQgPSAoaSA+PSBuYS0+bmFfbHV0
Lm9ianRvdGFsKSA/IGx1dFswXS52YWRkciA6IGx1dFtpXS52YWRkcjsKIAorI2lmbmRlZiBfV0lO
MzIKIAkqcHAgPSAoaSA+PSBuYS0+bmFfbHV0Lm9ianRvdGFsKSA/IGx1dFswXS5wYWRkciA6IGx1
dFtpXS5wYWRkcjsKKyNlbHNlCisJKnBwID0gKGkgPj0gbmEtPm5hX2x1dC5vYmp0b3RhbCkgPyAo
dWludDY0X3QpbHV0WzBdLnBhZGRyLlF1YWRQYXJ0IDogKHVpbnQ2NF90KWx1dFtpXS5wYWRkci5R
dWFkUGFydDsKKyNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0OTYsOCArMTc4NCw5IEBA
CiAJc3RydWN0IG5ldG1hcF9pZiAqIHZvbGF0aWxlIG5wX25pZnA7CS8qIG5ldG1hcCBpZiBkZXNj
cmlwdG9yLiAqLwogCiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyCSpucF9uYTsKKwlzdHJ1Y3QgaWZu
ZXQJKm5wX2lmcDsKIAl1aW50MzJfdAlucF9mbGFnczsJLyogZnJvbSB0aGUgaW9jdGwgKi8KLQl1
X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLCAKKwl1X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLAog
CQkJbnBfcWxhc3RbTlJfVFhSWF07IC8qIHJhbmdlIG9mIHR4L3J4IHJpbmdzIHRvIHNjYW4gKi8K
IAl1aW50MTZfdAlucF90eHBvbGw7CS8qIFhYWCBhbmQgYWxzbyBucF9yeHBvbGwgPyAqLwogCkBA
IC0xNTExLDYgKzE4MDAsMjYgQEAKIAlzdHJ1Y3QgdGhyZWFkCSpucF90ZDsJCS8qIGtxdWV1ZSwg
anVzdCBkZWJ1Z2dpbmcgKi8KIH07CiAKK3N0cnVjdCBuZXRtYXBfcHJpdl9kICpuZXRtYXBfcHJp
dl9uZXcodm9pZCk7Cit2b2lkIG5ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZf
ZCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgbm1fa3JpbmdfcGVuZGluZyhzdHJ1Y3QgbmV0bWFw
X3ByaXZfZCAqbnApCit7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IG5wLT5ucF9uYTsK
KwllbnVtIHR4cnggdDsKKwlpbnQgaTsKKworCWZvcl9yeF90eCh0KSB7CisJCWZvciAoaSA9IG5w
LT5ucF9xZmlyc3RbdF07IGkgPCBucC0+bnBfcWxhc3RbdF07IGkrKykgeworCQkJc3RydWN0IG5l
dG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCWlmIChrcmluZy0+bnJfbW9k
ZSAhPSBrcmluZy0+bnJfcGVuZGluZ19tb2RlKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0K
Kwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBXSVRIX01PTklUT1IKIAogc3RydWN0IG5ldG1h
cF9tb25pdG9yX2FkYXB0ZXIgewpAQCAtMTUyOSwxMyArMTgzOCwzNiBAQAogICogbmF0aXZlIG5l
dG1hcCBzdXBwb3J0LgogICovCiBpbnQgZ2VuZXJpY19uZXRtYXBfYXR0YWNoKHN0cnVjdCBpZm5l
dCAqaWZwKTsKK2ludCBnZW5lcmljX3J4X2hhbmRsZXIoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVj
dCBtYnVmICptKTs7CisKK2ludCBubV9vc19jYXRjaF9yeChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf
YWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKK2ludCBubV9vc19jYXRjaF90eChzdHJ1Y3Qg
bmV0bWFwX2dlbmVyaWNfYWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKKworLyoKKyAqIHRo
ZSBnZW5lcmljIHRyYW5zbWl0IHJvdXRpbmUgaXMgcGFzc2VkIGEgc3RydWN0dXJlIHRvIG9wdGlv
bmFsbHkKKyAqIGJ1aWxkIGEgcXVldWUgb2YgZGVzY3JpcHRvcnMsIGluIGFuIE9TLXNwZWNpZmlj
IHdheS4KKyAqIFRoZSBwYXlsb2FkIGlzIGF0IGFkZHIsIGlmIG5vbi1udWxsLCBhbmQgdGhlIHJv
dXRpbmUgc2hvdWxkIHNlbmQgb3IgcXVldWUKKyAqIHRoZSBwYWNrZXQsIHJldHVybmluZyAwIGlm
IHN1Y2Nlc3NmdWwsIDEgb24gZmFpbHVyZS4KKyAqCisgKiBBdCB0aGUgZW5kLCBpZiBoZWFkIGlz
IG5vbi1udWxsLCB0aGVyZSB3aWxsIGJlIGFuIGFkZGl0aW9uYWwgY2FsbAorICogdG8gdGhlIGZ1
bmN0aW9uIHdpdGggYWRkciA9IE5VTEw7IHRoaXMgc2hvdWxkIHRlbGwgdGhlIE9TLXNwZWNpZmlj
CisgKiByb3V0aW5lIHRvIHNlbmQgdGhlIHF1ZXVlIGFuZCBmcmVlIGFueSByZXNvdXJjZXMuIEZh
aWx1cmUgaXMgaWdub3JlZC4KKyAqLworc3RydWN0IG5tX29zX2dlbl9hcmcgeworCXN0cnVjdCBp
Zm5ldCAqaWZwOworCXZvaWQgKm07CS8qIG9zLXNwZWNpZmljIG1idWYtbGlrZSBvYmplY3QgKi8K
Kwl2b2lkICpoZWFkLCAqdGFpbDsgLyogdGFpbHEsIGlmIHRoZSBPUy1zcGVjaWZpYyByb3V0aW5l
IG5lZWRzIHRvIGJ1aWxkIG9uZSAqLworCXZvaWQgKmFkZHI7CS8qIHBheWxvYWQgb2YgY3VycmVu
dCBwYWNrZXQgKi8KKwl1X2ludCBsZW47CS8qIHBhY2tldCBsZW5ndGggKi8KKwl1X2ludCByaW5n
X25yOwkvKiBwYWNrZXQgbGVuZ3RoICovCisJdV9pbnQgcWV2ZW50OyAgIC8qIGluIHR4cWRpc2Mg
bW9kZSwgcGxhY2UgYW4gZXZlbnQgb24gdGhpcyBtYnVmICovCit9OworCitpbnQgbm1fb3NfZ2Vu
ZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBubV9vc19nZW5fYXJnICopOworaW50IG5tX29zX2dlbmVy
aWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9pbnQgKnR4LCB1X2ludCAqcngp
Owordm9pZCBubV9vc19nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQgKmlmcCwg
dV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSk7Cit2b2lkIG5tX29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVz
KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEpOwogCi1pbnQgbmV0bWFwX2NhdGNo
X3J4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpuYSwgaW50IGludGVyY2VwdCk7Ci12
b2lkIGdlbmVyaWNfcnhfaGFuZGxlcihzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0p
OzsKLXZvaWQgbmV0bWFwX2NhdGNoX3R4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpu
YSwgaW50IGVuYWJsZSk7Ci1pbnQgZ2VuZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBpZm5ldCAqaWZw
LCBzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqYWRkciwgdV9pbnQgbGVuLCB1X2ludCByaW5nX25yKTsK
LWludCBnZW5lcmljX2ZpbmRfbnVtX2Rlc2Moc3RydWN0IGlmbmV0ICppZnAsIHVfaW50ICp0eCwg
dV9pbnQgKnJ4KTsKLXZvaWQgZ2VuZXJpY19maW5kX251bV9xdWV1ZXMoc3RydWN0IGlmbmV0ICpp
ZnAsIHVfaW50ICp0eHEsIHVfaW50ICpyeHEpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWZuZXQq
CiBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmdu
YSkKIHsKQEAgLTE1NDUsNiArMTg3Nyw4IEBACiAgICAgICAgIHJldHVybiBnbmEtPnVwLnVwLmlm
cDsKIH0KIAordm9pZCBuZXRtYXBfZ2VuZXJpY19pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YSwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSk7CisKIC8vI2RlZmluZSBSQVRFX0dFTkVSSUMg
IC8qIEVuYWJsZXMgY29tbXVuaWNhdGlvbiBzdGF0aXN0aWNzIGZvciBnZW5lcmljLiAqLwogI2lm
ZGVmIFJBVEVfR0VORVJJQwogdm9pZCBnZW5lcmljX3JhdGUoaW50IHR4cCwgaW50IHR4cywgaW50
IHR4aSwgaW50IHJ4cCwgaW50IHJ4cywgaW50IHJ4aSk7CkBAIC0xNTU3LDE2ICsxODkxLDE2IEBA
CiAgKiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgcmVxdWVzdHMvc2Vsd2FrZXVw
CiAgKiB0byBjbGllbnRzIG9uIGluY29taW5nIHBhY2tldHMuCiAgKi8KLXZvaWQgbmV0bWFwX21p
dGlnYXRpb25faW5pdChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQgKm1pdCwgaW50IGlkeCwKK3ZvaWQg
bm1fb3NfbWl0aWdhdGlvbl9pbml0KHN0cnVjdCBubV9nZW5lcmljX21pdCAqbWl0LCBpbnQgaWR4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
Km5hKTsKLXZvaWQgbmV0bWFwX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0
ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9yZXN0YXJ0KHN0cnVjdCBubV9nZW5lcmlj
X21pdCAqbWl0KTsKLWludCBuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVy
aWNfbWl0ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKHN0cnVjdCBubV9n
ZW5lcmljX21pdCAqbWl0KTsKK3ZvaWQgbm1fb3NfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f
Z2VuZXJpY19taXQgKm1pdCk7Cit2b2lkIG5tX29zX21pdGlnYXRpb25fcmVzdGFydChzdHJ1Y3Qg
bm1fZ2VuZXJpY19taXQgKm1pdCk7CitpbnQgbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0
IG5tX2dlbmVyaWNfbWl0ICptaXQpOwordm9pZCBubV9vc19taXRpZ2F0aW9uX2NsZWFudXAoc3Ry
dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpOworI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLworI2Rl
ZmluZSBnZW5lcmljX25ldG1hcF9hdHRhY2goaWZwKQkoRU9QTk9UU1VQUCkKICNlbmRpZiAvKiBX
SVRIX0dFTkVSSUMgKi8KIAotCi0KIC8qIFNoYXJlZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBWQUxF
IHN3aXRjaC4gKi8KIAogLyoKQEAgLTE2NTUsMjIgKzE5ODksMTEwIEBACiAgKi8KICNkZWZpbmUg
cmF3c3VtX3QgdWludDMyX3QKIAotcmF3c3VtX3Qgbm1fY3N1bV9yYXcodWludDhfdCAqZGF0YSwg
c2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Ci11aW50MTZfdCBubV9jc3VtX2lwdjQoc3Ry
dWN0IG5tX2lwaGRyICppcGgpOwotdm9pZCBubV9jc3VtX3RjcHVkcF9pcHY0KHN0cnVjdCBubV9p
cGhkciAqaXBoLCB2b2lkICpkYXRhLAorcmF3c3VtX3Qgbm1fb3NfY3N1bV9yYXcodWludDhfdCAq
ZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3Vt
X2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgpOwordm9pZCBubV9vc19jc3VtX3RjcHVkcF9pcHY0
KHN0cnVjdCBubV9pcGhkciAqaXBoLCB2b2lkICpkYXRhLAogCQkgICAgICBzaXplX3QgZGF0YWxl
biwgdWludDE2X3QgKmNoZWNrKTsKLXZvaWQgbm1fY3N1bV90Y3B1ZHBfaXB2NihzdHJ1Y3Qgbm1f
aXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK3ZvaWQgbm1fb3NfY3N1bV90Y3B1ZHBfaXB2Nihz
dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKIAkJICAgICAgc2l6ZV90IGRhdGFs
ZW4sIHVpbnQxNl90ICpjaGVjayk7Ci11aW50MTZfdCBubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3Vy
X3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSk7CiAKIHZv
aWQgYmRnX21pc21hdGNoX2RhdGFwYXRoKHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciAqbmEsCiAJ
CQkgICBzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKmRzdF9uYSwKLQkJCSAgIHN0cnVjdCBubV9i
ZGdfZndkICpmdF9wLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcsCisJCQkgICBjb25zdCBzdHJ1
Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfcmluZyAqZHN0X3Jpbmcs
CiAJCQkgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSk7CiAKIC8qIHBlcnNp
c3RlbnQgdmlydHVhbCBwb3J0IHJvdXRpbmVzICovCi1pbnQgbm1fdmlfcGVyc2lzdChjb25zdCBj
aGFyICosIHN0cnVjdCBpZm5ldCAqKik7Ci12b2lkIG5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQg
Kik7Ci12b2lkIG5tX3ZpX2luaXRfaW5kZXgodm9pZCk7CitpbnQgbm1fb3NfdmlfcGVyc2lzdChj
b25zdCBjaGFyICosIHN0cnVjdCBpZm5ldCAqKik7Cit2b2lkIG5tX29zX3ZpX2RldGFjaChzdHJ1
Y3QgaWZuZXQgKik7Cit2b2lkIG5tX29zX3ZpX2luaXRfaW5kZXgodm9pZCk7CisKKy8qCisgKiBr
ZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBubV9rdGhyZWFkOyAvKiBPUy1zcGVj
aWZpYyBrdGhyZWFkIC0gb3BhcXVlICovCit0eXBlZGVmIHZvaWQgKCpubV9rdGhyZWFkX3dvcmtl
cl9mbl90KSh2b2lkICpkYXRhKTsKKworLyoga3RocmVhZCBjb25maWd1cmF0aW9uICovCitzdHJ1
Y3Qgbm1fa3RocmVhZF9jZmcgeworCWxvbmcJCQkJdHlwZTsJCS8qIGt0aHJlYWQgdHlwZS9pZGVu
dGlmaWVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdAkJd29ya2VyX2ZuOwkvKiB3b3JrZXIg
ZnVuY3Rpb24gKi8KKwl2b2lkCQkJCSp3b3JrZXJfcHJpdmF0ZTsvKiB3b3JrZXIgcGFyYW1ldGVy
ICovCisJaW50CQkJCWF0dGFjaF91c2VyOwkvKiBhdHRhY2gga3RocmVhZCB0byB1c2VyIHByb2Nl
c3MgKi8KK307CisvKiBrdGhyZWFkIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCBubV9rdGhyZWFk
ICpubV9vc19rdGhyZWFkX2NyZWF0ZShzdHJ1Y3Qgbm1fa3RocmVhZF9jZmcgKmNmZywKKwkJCQkJ
dW5zaWduZWQgaW50IGNmZ3R5cGUsCisJCQkJCXZvaWQgKm9wYXF1ZSk7CitpbnQgbm1fb3Nfa3Ro
cmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF9zdG9w
KHN0cnVjdCBubV9rdGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qg
bm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHN0cnVjdCBu
bV9rdGhyZWFkICpubWspOwordm9pZCBubV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9r
dGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShzdHJ1Y3Qgbm1fa3Ro
cmVhZCAqLCBpbnQpOwordV9pbnQgbm1fb3NfbmNwdXModm9pZCk7CisKKyNpZmRlZiBXSVRIX1BU
TkVUTUFQX0hPU1QKKy8qCisgKiBuZXRtYXAgYWRhcHRlciBmb3IgaG9zdCBwdG5ldG1hcCBwb3J0
cworICovCitzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciB7CisJc3RydWN0IG5ldG1hcF9h
ZGFwdGVyIHVwOworCisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJlbnQ7CisJaW50ICgqcGFy
ZW50X25tX25vdGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFncyk7CisJ
dm9pZCAqcHRuczsKK307CisvKiBwdG5ldG1hcCBIT1NUIHJvdXRpbmVzICovCitpbnQgbmV0bWFw
X2dldF9wdF9ob3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
KipuYSwgaW50IGNyZWF0ZSk7CitpbnQgcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3N0YXRpYyBpbmxpbmUgaW50CitubV9wdG5ldG1h
cF9ob3N0X29uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJcmV0dXJuIG5hICYmIG5h
LT5uYV9mbGFncyAmIE5BRl9QVE5FVE1BUF9IT1NUOworfQorI2Vsc2UgLyogIVdJVEhfUFRORVRN
QVBfSE9TVCAqLworI2RlZmluZSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBfMiwgXzMpIFwK
KwkoKG5tciktPm5yX2ZsYWdzICYgKE5SX1BUTkVUTUFQX0hPU1QpID8gRU9QTk9UU1VQUCA6IDAp
CisjZGVmaW5lIHB0bmV0bWFwX2N0bChfMSwgXzIpICAgRUlOVkFMCisjZGVmaW5lIG5tX3B0bmV0
bWFwX2hvc3Rfb24oXzEpICAgRUlOVkFMCisjZW5kaWYgLyogIVdJVEhfUFRORVRNQVBfSE9TVCAq
LworCisjaWZkZWYgV0lUSF9QVE5FVE1BUF9HVUVTVAorLyogcHRuZXRtYXAgR1VFU1Qgcm91dGlu
ZXMgKi8KKworLyoKKyAqIG5ldG1hcCBhZGFwdGVyIGZvciBndWVzdCBwdG5ldG1hcCBwb3J0cwor
ICovCitzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgeworICAgICAgICAvKiBUaGUgbmV0
bWFwIGFkYXB0ZXIgdG8gYmUgdXNlZCBieSBuZXRtYXAgYXBwbGljYXRpb25zLgorCSAqIFRoaXMg
ZmllbGQgbXVzdCBiZSB0aGUgZmlyc3QsIHRvIGFsbG93IHVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0
bWFwX2h3X2FkYXB0ZXIgaHd1cDsKKworICAgICAgICAvKiBUaGUgbmV0bWFwIGFkYXB0ZXIgdG8g
YmUgdXNlZCBieSB0aGUgZHJpdmVyLiAqLworICAgICAgICBzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0
ZXIgZHI7CisKKwl2b2lkICpjc2I7CisKKwkvKiBSZWZlcmVuY2UgY291bnRlciB0byB0cmFjayB1
c2VycyBvZiBiYWNrZW5kIG5ldG1hcCBwb3J0OiB0aGUKKwkgKiBuZXR3b3JrIHN0YWNrIGFuZCBu
ZXRtYXAgY2xpZW50cy4KKwkgKiBVc2VkIHRvIGRlY2lkZSB3aGVuIHdlIG5lZWQgKGRlKWFsbG9j
YXRlIGtyaW5ncy9yaW5ncyBhbmQKKwkgKiBzdGFydCAoc3RvcCkgcHRuZXRtYXAga3RocmVhZHMu
ICovCisJaW50IGJhY2tlbmRfcmVnaWZzOworCit9OworCitpbnQgbmV0bWFwX3B0X2d1ZXN0X2F0
dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB2b2lkICpjc2IsCisJCQkgICB1bnNpZ25l
ZCBpbnQgbmlmcF9vZmZzZXQsIHVuc2lnbmVkIGludCBtZW1pZCk7CitzdHJ1Y3QgcHRuZXRfcmlu
ZzsKK2Jvb2wgbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5n
LCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJCSAgICBpbnQgZmxhZ3MpOworYm9vbCBu
ZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJICAgIGludCBmbGFncyk7CitpbnQgcHRuZXRfbm1fa3Jp
bmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fa3Jp
bmdzX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fZHRv
cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0dV
RVNUICovCiAKICNlbmRpZiAvKiBfTkVUX05FVE1BUF9LRVJOX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWJxLmMgL3Vzci9zcmMvc3lzL2Rldi9uZXRt
YXAvbmV0bWFwX21icS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYwky
MDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9u
ZXRtYXAvbmV0bWFwX21icS5jCTIwMTYtMTEtMjMgMTY6NTc6NTcuODUwOTQ1MDAwICswMDAwCkBA
IC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1h
ZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQg
VmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDEyICsyNSwxNCBAQAogICovCiAKIC8qCi0gKiAkRnJl
ZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5jIDI2NzE3NyAyMDE0
LTA2LTA2IDE4OjAyOjMyWiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqLwogCiAKICNpZmRlZiBs
aW51eAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5j
bHVkZSAid2luX2dsdWUuaCIKICNlbHNlICAgLyogX19GcmVlQlNEX18gKi8KICNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgpAQCAtMTUyLDEyICsxNTUsMTIgQEAK
IH0KIAogCi12b2lkIG1icV9zYWZlX2Rlc3Ryb3koc3RydWN0IG1icSAqcSkKK3ZvaWQgbWJxX3Nh
ZmVfZmluaShzdHJ1Y3QgbWJxICpxKQogewogICAgIG10eF9kZXN0cm95KCZxLT5sb2NrKTsKIH0K
IAogCi12b2lkIG1icV9kZXN0cm95KHN0cnVjdCBtYnEgKnEpCit2b2lkIG1icV9maW5pKHN0cnVj
dCBtYnEgKnEpCiB7CiB9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfbWJxLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCi0tLSB1c3Ivc3Jj
L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaAkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCTIwMTYtMTEt
MjMgMTY6NTc6NTcuODUxMjQ1MDAwICswMDAwCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDcg
KzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9tYnEuaCAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAorICog
JEZyZWVCU0QkCiAgKi8KIAogCkBAIC00MCw2ICs0MSw4IEBACiAvKiBYWFggcHJvYmFibHkgcmVs
eSBvbiBhIHByZXZpb3VzIGRlZmluaXRpb24gb2YgU1BJTkxPQ0tfVCAqLwogI2lmZGVmIGxpbnV4
CiAjZGVmaW5lIFNQSU5MT0NLX1QgIHNhZmVfc3BpbmxvY2tfdAorI2VsaWYgZGVmaW5lZCAoX1dJ
TjMyKQorI2RlZmluZSBTUElOTE9DS19UIAl3aW5fc3BpbmxvY2tfdAogI2Vsc2UKICNkZWZpbmUg
U1BJTkxPQ0tfVCAgc3RydWN0IG10eAogI2VuZGlmCkBAIC01MiwxNiArNTUsMjEgQEAKICAgICBT
UElOTE9DS19UIGxvY2s7CiB9OwogCi0vKiBYWFggImRlc3Ryb3kiIGRvZXMgbm90IG1hdGNoICJp
bml0IiBhcyBhIG5hbWUuCi0gKiBXZSBzaG91bGQgYWxzbyBjbGFyaWZ5IHdoZXRoZXIgaW5pdCBj
YW4gYmUgdXNlZCB3aGlsZQorLyogV2Ugc2hvdWxkIGNsYXJpZnkgd2hldGhlciBpbml0IGNhbiBi
ZSB1c2VkIHdoaWxlCiAgKiBob2xkaW5nIGEgbG9jaywgYW5kIHdoZXRoZXIgbWJxX3NhZmVfZGVz
dHJveSgpIGlzIGEgTk9QLgogICovCiB2b2lkIG1icV9pbml0KHN0cnVjdCBtYnEgKnEpOwotdm9p
ZCBtYnFfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX2Zpbmkoc3RydWN0IG1icSAq
cSk7CiB2b2lkIG1icV9lbnF1ZXVlKHN0cnVjdCBtYnEgKnEsIHN0cnVjdCBtYnVmICptKTsKIHN0
cnVjdCBtYnVmICptYnFfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZvaWQgbWJxX3B1cmdlKHN0
cnVjdCBtYnEgKnEpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYnVmICoKK21icV9wZWVrKHN0
cnVjdCBtYnEgKnEpCit7CisJcmV0dXJuIHEtPmhlYWQgPyBxLT5oZWFkIDogTlVMTDsKK30KKwog
c3RhdGljIGlubGluZSB2b2lkCiBtYnFfbG9jayhzdHJ1Y3QgbWJxICpxKQogewpAQCAtNzYsNyAr
ODQsNyBAQAogCiAKIHZvaWQgbWJxX3NhZmVfaW5pdChzdHJ1Y3QgbWJxICpxKTsKLXZvaWQgbWJx
X3NhZmVfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX3NhZmVfZmluaShzdHJ1Y3Qg
bWJxICpxKTsKIHZvaWQgbWJxX3NhZmVfZW5xdWV1ZShzdHJ1Y3QgbWJxICpxLCBzdHJ1Y3QgbWJ1
ZiAqbSk7CiBzdHJ1Y3QgbWJ1ZiAqbWJxX3NhZmVfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZv
aWQgbWJxX3NhZmVfcHVyZ2Uoc3RydWN0IG1icSAqcSk7CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1h
cF9tZW0yLmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYwkyMDE2LTA5
LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv
bmV0bWFwX21lbTIuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1MjE0NDAwMCArMDAwMApAQCAtMSw1
ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFuZGksIEx1
aWdpIFJpenpvLCBHaXVzZXBwZSBMZXR0aWVyaS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE0IE1hdHRlbyBMYW5kaQorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTYgTHVpZ2kgUml6em8KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEdpdXNlcHBlIExl
dHRpZXJpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMCArMzYsMTEgQEAKIAogI2lmZGVmIF9fRnJlZUJTRF9fCiAjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwotX19GQlNESUQoIiRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIDI4NTM0OSAyMDE1LTA3LTEw
IDA1OjUxOjM2WiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u
ZXRtYXAvbmV0bWFwLmMgMjQxNzIzIDIwMTItMTAtMTkgMDk6NDE6NDVaIGdsZWJpdXMgJCIpOwog
CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4JCS8qIE1BTExPQ19ERUZJTkUgKi8KICNpbmNsdWRlIDxzeXMvcHJv
Yy5oPgogI2luY2x1ZGUgPHZtL3ZtLmg+CS8qIHZ0b3BoeXMgKi8KICNpbmNsdWRlIDx2bS9wbWFw
Lmg+CS8qIHZ0b3BoeXMgKi8KQEAgLTQ4LDEzICs1MiwyNiBAQAogI2luY2x1ZGUgPG5ldC92bmV0
Lmg+CiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4JLyogYnVzX2RtYW1hcF8qICovCiAKKy8qIE1f
TkVUTUFQIG9ubHkgdXNlZCBpbiBoZXJlICovCitNQUxMT0NfREVDTEFSRShNX05FVE1BUCk7CitN
QUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5IG1hcCIpOwor
CiAjZW5kaWYgLyogX19GcmVlQlNEX18gKi8KIAorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdp
bl9nbHVlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxk
ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CiAj
aW5jbHVkZSAibmV0bWFwX21lbTIuaCIKIAotI2RlZmluZSBORVRNQVBfQlVGX01BWF9OVU0JMjAq
NDA5NioyCS8qIGxhcmdlIG1hY2hpbmUgKi8KKyNpZmRlZiBfV0lOMzJfVVNFX1NNQUxMX0dFTkVS
SUNfREVWSUNFU19NRU1PUlkKKyNkZWZpbmUgTkVUTUFQX0JVRl9NQVhfTlVNICA4KjQwOTYgICAg
ICAvKiBpZiB0b28gYmlnIHRha2VzIHRvbyBtdWNoIHRpbWUgdG8gYWxsb2NhdGUgKi8KKyNlbHNl
CisjZGVmaW5lIE5FVE1BUF9CVUZfTUFYX05VTSAyMCo0MDk2KjIJLyogbGFyZ2UgbWFjaGluZSAq
LworI2VuZGlmCiAKICNkZWZpbmUgTkVUTUFQX1BPT0xfTUFYX05BTVNaCTMyCiAKQEAgLTcwLDYg
Kzg3LDkgQEAKIHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyB7CiAJdV9pbnQgc2l6ZTsKIAl1X2lu
dCBudW07CisKKwl1X2ludCBsYXN0X3NpemU7CisJdV9pbnQgbGFzdF9udW07CiB9OwogCiBzdHJ1
Y3QgbmV0bWFwX29ial9wb29sIHsKQEAgLTExMSw3ICsxMzEsNyBAQAogCiAKIHN0cnVjdCBuZXRt
YXBfbWVtX29wcyB7Ci0Jdm9pZCAoKm5tZF9nZXRfbHV0KShzdHJ1Y3QgbmV0bWFwX21lbV9kICos
IHN0cnVjdCBuZXRtYXBfbHV0Kik7CisJaW50ICgqbm1kX2dldF9sdXQpKHN0cnVjdCBuZXRtYXBf
bWVtX2QgKiwgc3RydWN0IG5ldG1hcF9sdXQqKTsKIAlpbnQgICgqbm1kX2dldF9pbmZvKShzdHJ1
Y3QgbmV0bWFwX21lbV9kICosIHVfaW50ICpzaXplLAogCQkJdV9pbnQgKm1lbWZsYWdzLCB1aW50
MTZfdCAqaWQpOwogCkBAIC0xMjgsMTQgKzE0OCwxMyBAQAogCXZvaWQgKCpubWRfcmluZ3NfZGVs
ZXRlKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKik7CiB9OwogCi10eXBlZGVmIHVpbnQxNl90IG5t
X21lbWlkX3Q7Ci0KIHN0cnVjdCBuZXRtYXBfbWVtX2QgewogCU5NQV9MT0NLX1Qgbm1fbXR4OyAg
LyogcHJvdGVjdCB0aGUgYWxsb2NhdG9yICovCiAJdV9pbnQgbm1fdG90YWxzaXplOyAvKiBzaG9y
dGhhbmQgKi8KIAogCXVfaW50IGZsYWdzOwogI2RlZmluZSBORVRNQVBfTUVNX0ZJTkFMSVpFRAkw
eDEJLyogcHJlYWxsb2NhdGlvbiBkb25lICovCisjZGVmaW5lIE5FVE1BUF9NRU1fSElEREVOCTB4
OAkvKiBiZWVpbmcgcHJlcGFyZWQgKi8KIAlpbnQgbGFzdGVycjsJCS8qIGxhc3QgZXJyb3IgZm9y
IGN1cnIgY29uZmlnICovCiAJaW50IGFjdGl2ZTsJCS8qIGFjdGl2ZSB1c2VycyAqLwogCWludCBy
ZWZjb3VudDsKQEAgLTE0OSw4ICsxNjgsMTYgQEAKIAlzdHJ1Y3QgbmV0bWFwX21lbV9kICpwcmV2
LCAqbmV4dDsKIAogCXN0cnVjdCBuZXRtYXBfbWVtX29wcyAqb3BzOworCisJc3RydWN0IG5ldG1h
cF9vYmpfcGFyYW1zIHBhcmFtc1tORVRNQVBfUE9PTFNfTlJdOworCisjZGVmaW5lIE5NX01FTV9O
QU1FU1oJMTYKKwljaGFyIG5hbWVbTk1fTUVNX05BTUVTWl07CiB9OwogCisvKgorICogWFhYIG5l
ZWQgdG8gZml4IHRoZSBjYXNlIG9mIHQwID09IHZvaWQKKyAqLwogI2RlZmluZSBOTURfREVGQ0Io
dDAsIG5hbWUpIFwKIHQwIFwKIG5ldG1hcF9tZW1fIyNuYW1lKHN0cnVjdCBuZXRtYXBfbWVtX2Qg
Km5tZCkgXApAQCAtMTg2LDcgKzIxMyw3IEBACiAJcmV0dXJuIG5hLT5ubV9tZW0tPm9wcy0+bm1k
XyMjbmFtZShuYSwgYTEpOyBcCiB9CiAKLU5NRF9ERUZDQjEodm9pZCwgZ2V0X2x1dCwgc3RydWN0
IG5ldG1hcF9sdXQgKik7CitOTURfREVGQ0IxKGludCwgZ2V0X2x1dCwgc3RydWN0IG5ldG1hcF9s
dXQgKik7CiBOTURfREVGQ0IzKGludCwgZ2V0X2luZm8sIHVfaW50ICosIHVfaW50ICosIHVpbnQx
Nl90ICopOwogTk1EX0RFRkNCMSh2bV9wYWRkcl90LCBvZnN0b3BoeXMsIHZtX29vZmZzZXRfdCk7
CiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fY29uZmlnKHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CkBA
IC0yMDIsNiArMjI5LDEzIEBACiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fbWFwKHN0cnVjdCBuZXRt
YXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogc3RhdGljIGludCBuZXRt
YXBfbWVtX3VubWFwKHN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFw
dGVyICopOwogc3RhdGljIGludCBubV9tZW1fYXNzaWduX2dyb3VwKHN0cnVjdCBuZXRtYXBfbWVt
X2QgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyB2b2lkIG5tX21lbV9yZWxlYXNlX2lkKHN0
cnVjdCBuZXRtYXBfbWVtX2QgKik7CisKK25tX21lbWlkX3QKK25ldG1hcF9tZW1fZ2V0X2lkKHN0
cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK3sKKwlyZXR1cm4gbm1kLT5ubV9pZDsKK30KIAogI2Rl
ZmluZSBOTUFfTE9DS19JTklUKG4pCU5NX01UWF9JTklUKChuKS0+bm1fbXR4KQogI2RlZmluZSBO
TUFfTE9DS19ERVNUUk9ZKG4pCU5NX01UWF9ERVNUUk9ZKChuKS0+bm1fbXR4KQpAQCAtMjE1LDI5
ICsyNDksMzAgQEAKICNkZWZpbmUgTk1fREJHX1JFRkMobm1kLCBmdW5jLCBsaW5lKQogI2VuZGlm
CiAKLSNpZmRlZiBOTV9ERUJVR19NRU1fUFVUR0VUCi12b2lkIF9fbmV0bWFwX21lbV9nZXQoc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkKLSNlbHNl
Ci12b2lkIG5ldG1hcF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKLSNlbmRpZgor
LyogY2lyY3VsYXIgbGlzdCBvZiBhbGwgZXhpc3RpbmcgYWxsb2NhdG9ycyAqLworc3RhdGljIHN0
cnVjdCBuZXRtYXBfbWVtX2QgKm5ldG1hcF9sYXN0X21lbV9kID0gJm5tX21lbTsKK05NX01UWF9U
IG5tX21lbV9saXN0X2xvY2s7CisKK3N0cnVjdCBuZXRtYXBfbWVtX2QgKgorbmV0bWFwX21lbV9n
ZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewotCU5NQV9MT0NLKG5tZCk7CisJTk1fTVRY
X0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7CiAJbm1kLT5yZWZjb3VudCsrOwogCU5NX0RCR19SRUZD
KG5tZCwgZnVuYywgbGluZSk7Ci0JTk1BX1VOTE9DSyhubWQpOworCU5NX01UWF9VTkxPQ0sobm1f
bWVtX2xpc3RfbG9jayk7CisJcmV0dXJuIG5tZDsKIH0KIAotI2lmZGVmIE5NX0RFQlVHX01FTV9Q
VVRHRVQKLXZvaWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNv
bnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKQotI2Vsc2UKLXZvaWQgbmV0bWFwX21lbV9wdXQoc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotI2VuZGlmCit2b2lkCituZXRtYXBfbWVtX3B1dChzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7CiAJaW50IGxhc3Q7Ci0JTk1BX0xPQ0sobm1kKTsKKwlO
TV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKIAlsYXN0ID0gKC0tbm1kLT5yZWZjb3VudCA9
PSAwKTsKKwlpZiAobGFzdCkKKwkJbm1fbWVtX3JlbGVhc2VfaWQobm1kKTsKIAlOTV9EQkdfUkVG
QyhubWQsIGZ1bmMsIGxpbmUpOwotCU5NQV9VTkxPQ0sobm1kKTsKKwlOTV9NVFhfVU5MT0NLKG5t
X21lbV9saXN0X2xvY2spOwogCWlmIChsYXN0KQogCQluZXRtYXBfbWVtX2RlbGV0ZShubWQpOwog
fQpAQCAtMjQ4LDcgKzI4Myw5IEBACiAJaWYgKG5tX21lbV9hc3NpZ25fZ3JvdXAobm1kLCBuYS0+
cGRldikgPCAwKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfSBlbHNlIHsKLQkJbm1kLT5vcHMtPm5t
ZF9maW5hbGl6ZShubWQpOworCQlOTUFfTE9DSyhubWQpOworCQlubWQtPmxhc3RlcnIgPSBubWQt
Pm9wcy0+bm1kX2ZpbmFsaXplKG5tZCk7CisJCU5NQV9VTkxPQ0sobm1kKTsKIAl9CiAKIAlpZiAo
IW5tZC0+bGFzdGVyciAmJiBuYS0+cGRldikKQEAgLTI2MiwyMSArMjk5LDcyIEBACiB7CiAJTk1B
X0xPQ0sobm1kKTsKIAluZXRtYXBfbWVtX3VubWFwKCZubWQtPnBvb2xzW05FVE1BUF9CVUZfUE9P
TF0sIG5hKTsKKwlpZiAobm1kLT5hY3RpdmUgPT0gMSkgeworCQl1X2ludCBpOworCisJCS8qCisJ
CSAqIFJlc2V0IHRoZSBhbGxvY2F0b3Igd2hlbiBpdCBmYWxscyBvdXQgb2YgdXNlIHNvIHRoYXQg
YW55CisJCSAqIHBvb2wgcmVzb3VyY2VzIGxlYWtlZCBieSB1bmNsZWFuIGFwcGxpY2F0aW9uIGV4
aXRzIGFyZQorCQkgKiByZWNsYWltZWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQ
X1BPT0xTX05SOyBpKyspIHsKKwkJCXN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKnA7CisJCQl1X2lu
dCBqOworCisJCQlwID0gJm5tZC0+cG9vbHNbaV07CisJCQlwLT5vYmpmcmVlID0gcC0+b2JqdG90
YWw7CisJCQkvKgorCQkJICogUmVwcm9kdWNlIHRoZSBuZXQgZWZmZWN0IG9mIHRoZSBNX1pFUk8g
bWFsbG9jKCkKKwkJCSAqIGFuZCBtYXJraW5nIG9mIGZyZWUgZW50cmllcyBpbiB0aGUgYml0bWFw
IHRoYXQKKwkJCSAqIG9jY3VyIGluIGZpbmFsaXplX29ial9hbGxvY2F0b3IoKQorCQkJICovCisJ
CQltZW1zZXQocC0+Yml0bWFwLAorCQkJICAgICdcMCcsCisJCQkgICAgc2l6ZW9mKHVpbnQzMl90
KSAqICgocC0+b2JqdG90YWwgKyAzMSkgLyAzMikpOworCisJCQkvKgorCQkJICogU2V0IGFsbCB0
aGUgYml0cyBpbiB0aGUgYml0bWFwIHRoYXQgaGF2ZQorCQkJICogY29ycmVzcG9uZGluZyBidWZm
ZXJzIHRvIDEgdG8gaW5kaWNhdGUgdGhleSBhcmUKKwkJCSAqIGZyZWUuCisJCQkgKi8KKwkJCWZv
ciAoaiA9IDA7IGogPCBwLT5vYmp0b3RhbDsgaisrKSB7CisJCQkJaWYgKHAtPmx1dFtqXS52YWRk
ciAhPSBOVUxMKSB7CisJCQkJCXAtPmJpdG1hcFsgKGo+PjUpIF0gfD0gICggMSA8PCAoaiAmIDMx
KSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFBlciBuZXRtYXBfbWVtX2ZpbmFs
aXplX2FsbCgpLAorCQkgKiBidWZmZXJzIDAgYW5kIDEgYXJlIHJlc2VydmVkCisJCSAqLworCQlu
bWQtPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0ub2JqZnJlZSAtPSAyOworCQlpZiAobm1kLT5wb29s
c1tORVRNQVBfQlVGX1BPT0xdLmJpdG1hcCkgeworCQkJLyogWFhYIFRoaXMgY2hlY2sgaXMgYSB3
b3JrYXJvdW5kIHRoYXQgcHJldmVudHMgYQorCQkJICogTlVMTCBwb2ludGVyIGNyYXNoIHdoaWNo
IGN1cnJlbnRseSBoYXBwZW5zIG9ubHkKKwkJCSAqIHdpdGggcHRuZXRtYXAgZ3Vlc3RzLgorCQkJ
ICogUmVtb3ZlZCBzaGFyZWQtaW5mbyAtLT4gaXMgdGhlIGJ1ZyBzdGlsbCB0aGVyZT8gKi8KKwkJ
CW5tZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5iaXRtYXBbMF0gPSB+MzsKKwkJfQorCX0KKwlu
bWQtPm9wcy0+bm1kX2RlcmVmKG5tZCk7CisKIAlOTUFfVU5MT0NLKG5tZCk7Ci0JcmV0dXJuIG5t
ZC0+b3BzLT5ubWRfZGVyZWYobm1kKTsKIH0KIAogCiAvKiBhY2Nlc3NvciBmdW5jdGlvbnMgKi8K
LXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBuZXRtYXBfbWVtMl9nZXRfbHV0KHN0cnVjdCBuZXRt
YXBfbWVtX2QgKm5tZCwgc3RydWN0IG5ldG1hcF9sdXQgKmx1dCkKIHsKIAlsdXQtPmx1dCA9IG5t
ZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5sdXQ7CiAJbHV0LT5vYmp0b3RhbCA9IG5tZC0+cG9v
bHNbTkVUTUFQX0JVRl9QT09MXS5vYmp0b3RhbDsKIAlsdXQtPm9ianNpemUgPSBubWQtPnBvb2xz
W05FVE1BUF9CVUZfUE9PTF0uX29ianNpemU7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5l
dG1hcF9vYmpfcGFyYW1zIG5ldG1hcF9wYXJhbXNbTkVUTUFQX1BPT0xTX05SXSA9IHsKK3N0YXRp
YyBzdHJ1Y3QgbmV0bWFwX29ial9wYXJhbXMgbmV0bWFwX3BhcmFtc1tORVRNQVBfUE9PTFNfTlJd
ID0gewogCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCS5zaXplID0gMTAyNCwKIAkJLm51bSAgPSAx
MDAsCkBAIC0yOTEsMTAgKzM3OSwxMCBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgbmV0bWFwX29ial9w
YXJhbXMgbmV0bWFwX21pbl9wcml2X3BhcmFtc1tORVRNQVBfUE9PTFNfTlJdID0geworc3RhdGlj
IHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBuZXRtYXBfbWluX3ByaXZfcGFyYW1zW05FVE1BUF9Q
T09MU19OUl0gPSB7CiAJW05FVE1BUF9JRl9QT09MXSA9IHsKIAkJLnNpemUgPSAxMDI0LAotCQku
bnVtICA9IDEsCisJCS5udW0gID0gMiwKIAl9LAogCVtORVRNQVBfUklOR19QT09MXSA9IHsKIAkJ
LnNpemUgPSA1KlBBR0VfU0laRSwKQEAgLTMzOCwyMSArNDI2LDM3IEBACiAJCX0sCiAJfSwKIAor
CS5wYXJhbXMgPSB7CisJCVtORVRNQVBfSUZfUE9PTF0gPSB7CisJCQkuc2l6ZSA9IDEwMjQsCisJ
CQkubnVtICA9IDEwMCwKKwkJfSwKKwkJW05FVE1BUF9SSU5HX1BPT0xdID0geworCQkJLnNpemUg
PSA5KlBBR0VfU0laRSwKKwkJCS5udW0gID0gMjAwLAorCQl9LAorCQlbTkVUTUFQX0JVRl9QT09M
XSA9IHsKKwkJCS5zaXplID0gMjA0OCwKKwkJCS5udW0gID0gTkVUTUFQX0JVRl9NQVhfTlVNLAor
CQl9LAorCX0sCisKIAkubm1faWQgPSAxLAogCS5ubV9ncnAgPSAtMSwKIAogCS5wcmV2ID0gJm5t
X21lbSwKIAkubmV4dCA9ICZubV9tZW0sCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29w
cwotfTsKKwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIAorCS5uYW1lID0gIjEiCit9
OwogCi1zdHJ1Y3QgbmV0bWFwX21lbV9kICpuZXRtYXBfbGFzdF9tZW1fZCA9ICZubV9tZW07CiAK
IC8qIGJsdWVwcmludCBmb3IgdGhlIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRvcnMgKi8KIGV4dGVy
biBzdHJ1Y3QgbmV0bWFwX21lbV9vcHMgbmV0bWFwX21lbV9wcml2YXRlX29wczsgLyogZm9yd2Fy
ZCAqLwotY29uc3Qgc3RydWN0IG5ldG1hcF9tZW1fZCBubV9ibHVlcHJpbnQgPSB7CisvKiBYWFgg
Y2xhbmcgaXMgbm90IGhhcHB5IGFib3V0IHVzaW5nIG5hbWUgYXMgYSBwcmludCBmb3JtYXQgKi8K
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bWFwX21lbV9kIG5tX2JsdWVwcmludCA9IHsKIAkucG9v
bHMgPSB7CiAJCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCQkubmFtZSAJPSAiJXNfaWYiLApAQCAt
Mzc3LDkgKzQ4MSwxMSBAQAogCQl9LAogCX0sCiAKKwkubm1fZ3JwID0gLTEsCisKIAkuZmxhZ3Mg
PSBORVRNQVBfTUVNX1BSSVZBVEUsCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMK
Kwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIH07CiAKIC8qIG1lbW9yeSBhbGxvY2F0
b3IgcmVsYXRlZCBzeXNjdGxzICovCkBAIC0zODgsNiArNDk0LDcgQEAKIAogCiAjZGVmaW5lIERF
Q0xBUkVfU1lTQ1RMUyhpZCwgbmFtZSkgXAorCVNZU0JFR0lOKG1lbTJfICMjIG5hbWUpOyBcCiAJ
U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5hbWUjI19zaXplLCBcCiAJICAgIENU
TEZMQUdfUlcsICZuZXRtYXBfcGFyYW1zW2lkXS5zaXplLCAwLCAiUmVxdWVzdGVkIHNpemUgb2Yg
bmV0bWFwICIgU1RSSU5HSUZZKG5hbWUpICJzIik7IFwKIAlTWVNDVExfSU5UKF9kZXZfbmV0bWFw
LCBPSURfQVVUTywgbmFtZSMjX2N1cnJfc2l6ZSwgXApAQCAtNDAxLDIyICs1MDgsMjIgQEAKIAkg
ICAgIkRlZmF1bHQgc2l6ZSBvZiBwcml2YXRlIG5ldG1hcCAiIFNUUklOR0lGWShuYW1lKSAicyIp
OyBcCiAJU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIHByaXZfIyNuYW1lIyNfbnVt
LCBcCiAJICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbWluX3ByaXZfcGFyYW1zW2lkXS5udW0sIDAs
IFwKLQkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5HSUZZKG5h
bWUpICJzIikKKwkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5H
SUZZKG5hbWUpICJzIik7CVwKKwlTWVNFTkQKIAogU1lTQ1RMX0RFQ0woX2Rldl9uZXRtYXApOwog
REVDTEFSRV9TWVNDVExTKE5FVE1BUF9JRl9QT09MLCBpZik7CiBERUNMQVJFX1NZU0NUTFMoTkVU
TUFQX1JJTkdfUE9PTCwgcmluZyk7CiBERUNMQVJFX1NZU0NUTFMoTkVUTUFQX0JVRl9QT09MLCBi
dWYpOwogCisvKiBjYWxsIHdpdGggbm1fbWVtX2xpc3RfbG9jayBoZWxkICovCiBzdGF0aWMgaW50
Ci1ubV9tZW1fYXNzaWduX2lkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25tX21lbV9hc3Np
Z25faWRfbG9ja2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlubV9tZW1pZF90IGlk
OwogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKnNjYW4gPSBuZXRtYXBfbGFzdF9tZW1fZDsKIAlpbnQg
ZXJyb3IgPSBFTk9NRU07CiAKLQlOTUFfTE9DSygmbm1fbWVtKTsKLQogCWRvIHsKIAkJLyogd2Ug
cmVseSBvbiB1bnNpZ25lZCB3cmFwIGFyb3VuZCAqLwogCQlpZCA9IHNjYW4tPm5tX2lkICsgMTsK
QEAgLTQzMCwyMCArNTM3LDMyIEBACiAJCQlzY2FuLT5wcmV2LT5uZXh0ID0gbm1kOwogCQkJc2Nh
bi0+cHJldiA9IG5tZDsKIAkJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kOworCQkJbm1kLT5yZWZj
b3VudCA9IDE7CiAJCQllcnJvciA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0gd2hpbGUgKHNjYW4g
IT0gbmV0bWFwX2xhc3RfbWVtX2QpOwogCi0JTk1BX1VOTE9DSygmbm1fbWVtKTsKIAlyZXR1cm4g
ZXJyb3I7CiB9CiAKKy8qIGNhbGwgd2l0aCBubV9tZW1fbGlzdF9sb2NrICpub3QqIGhlbGQgKi8K
K3N0YXRpYyBpbnQKK25tX21lbV9hc3NpZ25faWQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQor
eworICAgICAgICBpbnQgcmV0OworCisJTk1fTVRYX0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7Cisg
ICAgICAgIHJldCA9IG5tX21lbV9hc3NpZ25faWRfbG9ja2VkKG5tZCk7CisJTk1fTVRYX1VOTE9D
SyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNhbGwgd2l0aCBu
bV9tZW1fbGlzdF9sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkCiBubV9tZW1fcmVsZWFzZV9pZChz
dHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7Ci0JTk1BX0xPQ0soJm5tX21lbSk7Ci0KIAlubWQt
PnByZXYtPm5leHQgPSBubWQtPm5leHQ7CiAJbm1kLT5uZXh0LT5wcmV2ID0gbm1kLT5wcmV2Owog
CkBAIC00NTEsOCArNTcwLDI1IEBACiAJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kLT5wcmV2Owog
CiAJbm1kLT5wcmV2ID0gbm1kLT5uZXh0ID0gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9tZW1f
ZCAqCituZXRtYXBfbWVtX2ZpbmQobm1fbWVtaWRfdCBpZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21l
bV9kICpubWQ7CiAKLQlOTUFfVU5MT0NLKCZubV9tZW0pOworCU5NX01UWF9MT0NLKG5tX21lbV9s
aXN0X2xvY2spOworCW5tZCA9IG5ldG1hcF9sYXN0X21lbV9kOworCWRvIHsKKwkJaWYgKCEobm1k
LT5mbGFncyAmIE5FVE1BUF9NRU1fSElEREVOKSAmJiBubWQtPm5tX2lkID09IGlkKSB7CisJCQlu
bWQtPnJlZmNvdW50Kys7CisJCQlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCQkJ
cmV0dXJuIG5tZDsKKwkJfQorCQlubWQgPSBubWQtPm5leHQ7CisJfSB3aGlsZSAobm1kICE9IG5l
dG1hcF9sYXN0X21lbV9kKTsKKwlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCXJl
dHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50CkBAIC00OTQsOCArNjMwLDEzIEBACiAJCWlmIChv
ZmZzZXQgPj0gcFtpXS5tZW10b3RhbCkKIAkJCWNvbnRpbnVlOwogCQkvLyBub3cgbG9va3VwIHRo
ZSBjbHVzdGVyJ3MgYWRkcmVzcworI2lmbmRlZiBfV0lOMzIKIAkJcGEgPSB2dG9waHlzKHBbaV0u
bHV0W29mZnNldCAvIHBbaV0uX29ianNpemVdLnZhZGRyKSArCiAJCQlvZmZzZXQgJSBwW2ldLl9v
YmpzaXplOworI2Vsc2UKKwkJcGEgPSB2dG9waHlzKHBbaV0ubHV0W29mZnNldCAvIHBbaV0uX29i
anNpemVdLnZhZGRyKTsKKwkJcGEuUXVhZFBhcnQgKz0gb2Zmc2V0ICUgcFtpXS5fb2Jqc2l6ZTsK
KyNlbmRpZgogCQlOTUFfVU5MT0NLKG5tZCk7CiAJCXJldHVybiBwYTsKIAl9CkBAIC01MDgsNyAr
NjQ5LDExMCBAQAogCQkJKyBwW05FVE1BUF9SSU5HX1BPT0xdLm1lbXRvdGFsCiAJCQkrIHBbTkVU
TUFQX0JVRl9QT09MXS5tZW10b3RhbCk7CiAJTk1BX1VOTE9DSyhubWQpOworI2lmbmRlZiBfV0lO
MzIKIAlyZXR1cm4gMDsJLy8gWFhYIGJhZCBhZGRyZXNzCisjZWxzZQorCXZtX3BhZGRyX3QgcmVz
OworCXJlcy5RdWFkUGFydCA9IDA7CisJcmV0dXJuIHJlczsKKyNlbmRpZgorfQorCisjaWZkZWYg
X1dJTjMyCisKKy8qCisgKiB3aW4zMl9idWlsZF92aXJ0dWFsX21lbW9yeV9mb3JfdXNlcnNwYWNl
CisgKgorICogVGhpcyBmdW5jdGlvbiBnZXQgYWxsIHRoZSBvYmplY3QgbWFraW5nIHBhcnQgb2Yg
dGhlIHBvb2xzIGFuZCBtYXBzCisgKiBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtZW1vcnkgc3BhY2Ug
Zm9yIHRoZSB1c2Vyc3BhY2UKKyAqIEl0IHdvcmtzIHRoaXMgd2F5CisgKiAxIC0gYWxsb2NhdGUg
YSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IHdpZGUgYXMgdGhlIHN1bQorICoJCW9mIHRoZSBtZW1v
cnkgbmVlZGVkIGZvciB0aGUgcG9vbHMKKyAqIDIgLSBjeWNsZSBhbGwgdGhlIG9iamVjdHMgaW4g
ZXZlcnkgcG9vbCBhbmQgZm9yIGV2ZXJ5IG9iamVjdCBkbworICoKKyAqCQkyYSAtIGN5Y2xlIGFs
bCB0aGUgb2JqZWN0cyBpbiBldmVyeSBwb29sLCBnZXQgdGhlIGxpc3QKKyAqCQkJCW9mIHRoZSBw
aHlzaWNhbCBhZGRyZXNzIGRlc2NyaXB0b3JzCisgKgkJMmIgLSBjYWxjdWxhdGUgdGhlIG9mZnNl
dCBpbiB0aGUgYXJyYXkgb2YgcGFnZXMgZGVzY2lwdG9yIGluIHRoZQorICoJCQkJbWFpbiBNREwK
KyAqCQkyYyAtIGNvcHkgdGhlIGRlc2NyaXB0b3JzIG9mIHRoZSBvYmplY3QgaW4gdGhlIG1haW4g
TURMCisgKgorICogMyAtIHJldHVybiB0aGUgcmVzdWx0aW5nIE1ETCB0aGF0IG5lZWRzIHRvIGJl
IG1hcHBlZCBpbiB1c2VybGFuZAorICoKKyAqIEluIHRoaXMgd2F5IHdlIHdpbGwgaGF2ZSBhbiBN
REwgdGhhdCBkZXNjcmliZXMgYWxsIHRoZSBtZW1vcnkgZm9yIHRoZQorICogb2JqZWN0cyBpbiBh
IHNpbmdsZSBvYmplY3QKKyovCisKK1BNREwKK3dpbjMyX2J1aWxkX3VzZXJfdm1fbWFwKHN0cnVj
dCBuZXRtYXBfbWVtX2QqIG5tZCkKK3sKKwlpbnQgaSwgajsKKwl1X2ludCBtZW1zaXplLCBtZW1m
bGFncywgb2ZzID0gMDsKKwlQTURMIG1haW5NZGwsIHRlbXBNZGw7CisKKwlpZiAobmV0bWFwX21l
bV9nZXRfaW5mbyhubWQsICZtZW1zaXplLCAmbWVtZmxhZ3MsIE5VTEwpKSB7CisJCUQoIm1lbW9y
eSBub3QgZmluYWxpc2VkIHlldCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltYWluTWRsID0g
SW9BbGxvY2F0ZU1kbChOVUxMLCBtZW1zaXplLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCWlmICht
YWluTWRsID09IE5VTEwpIHsKKwkJRCgiZmFpbGVkIHRvIGFsbG9jYXRlIG1kbCIpOworCQlyZXR1
cm4gTlVMTDsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCWZvciAoaSA9IDA7IGkgPCBORVRNQVBf
UE9PTFNfTlI7IGkrKykgeworCQlzdHJ1Y3QgbmV0bWFwX29ial9wb29sICpwID0gJm5tZC0+cG9v
bHNbaV07CisJCWludCBjbHN6ID0gcC0+X2NsdXN0c2l6ZTsKKwkJaW50IGNsb2JqcyA9IHAtPl9j
bHVzdGVudHJpZXM7IC8qIG9iamVjdHMgcGVyIGNsdXN0ZXIgKi8KKwkJaW50IG1kbF9sZW4gPSBz
aXplb2YoUEZOX05VTUJFUikgKiBCWVRFU19UT19QQUdFUyhjbHN6KTsKKwkJUFBGTl9OVU1CRVIg
cFNyYywgcERzdDsKKworCQkvKiBlYWNoIHBvb2wgaGFzIGEgZGlmZmVyZW50IGNsdXN0ZXIgc2l6
ZSBzbyB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgKi8KKwkJdGVtcE1kbCA9IElvQWxsb2NhdGVNZGwo
cC0+bHV0WzBdLnZhZGRyLCBjbHN6LCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCQlpZiAodGVtcE1k
bCA9PSBOVUxMKSB7CisJCQlOTUFfVU5MT0NLKG5tZCk7CisJCQlEKCJmYWlsIHRvIGFsbG9jYXRl
IHRlbXBNZGwiKTsKKwkJCUlvRnJlZU1kbChtYWluTWRsKTsKKwkJCXJldHVybiBOVUxMOworCQl9
CisJCXBTcmMgPSBNbUdldE1kbFBmbkFycmF5KHRlbXBNZGwpOworCQkvKiBjcmVhdGUgb25lIGVu
dHJ5IHBlciBjbHVzdGVyLCB0aGUgbHV0W10gaGFzIG9uZSBlbnRyeSBwZXIgb2JqZWN0ICovCisJ
CWZvciAoaiA9IDA7IGogPCBwLT5udW1jbHVzdGVyczsgaisrLCBvZnMgKz0gY2xzeikgeworCQkJ
cERzdCA9ICZNbUdldE1kbFBmbkFycmF5KG1haW5NZGwpW0JZVEVTX1RPX1BBR0VTKG9mcyldOwor
CQkJTW1Jbml0aWFsaXplTWRsKHRlbXBNZGwsIHAtPmx1dFtqKmNsb2Jqc10udmFkZHIsIGNsc3op
OworCQkJTW1CdWlsZE1kbEZvck5vblBhZ2VkUG9vbCh0ZW1wTWRsKTsgLyogY29tcHV0ZSBwaHlz
aWNhbCBwYWdlIGFkZHJlc3NlcyAqLworCQkJUnRsQ29weU1lbW9yeShwRHN0LCBwU3JjLCBtZGxf
bGVuKTsgLyogY29weSB0aGUgcGFnZSBkZXNjcmlwdG9ycyAqLworCQkJbWFpbk1kbC0+TWRsRmxh
Z3MgPSB0ZW1wTWRsLT5NZGxGbGFnczsgLyogWFhYIHdoYXQgaXMgaW4gaGVyZSA/ICovCisJCX0K
KwkJSW9GcmVlTWRsKHRlbXBNZGwpOworCX0KKwlOTUFfVU5MT0NLKG5tZCk7CisJcmV0dXJuIG1h
aW5NZGw7Cit9CisKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworLyoKKyAqIGhlbHBlciBmdW5jdGlv
biBmb3IgT1Mtc3BlY2lmaWMgbW1hcCByb3V0aW5lcyAoY3VycmVudGx5IG9ubHkgd2luZG93cyku
CisgKiBHaXZlbiBhbiBubWQgYW5kIGEgcG9vbCBpbmRleCwgcmV0dXJucyB0aGUgY2x1c3RlciBz
aXplIGFuZCBudW1iZXIgb2YgY2x1c3RlcnMuCisgKiBSZXR1cm5zIDAgaWYgbWVtb3J5IGlzIGZp
bmFsaXNlZCBhbmQgdGhlIHBvb2wgaXMgdmFsaWQsIG90aGVyd2lzZSAxLgorICogSXQgc2hvdWxk
IGJlIGNhbGxlZCB1bmRlciBOTUFfTE9DSyhubWQpIG90aGVyd2lzZSB0aGUgdW5kZXJseWluZyBp
bmZvIGNhbiBjaGFuZ2UuCisgKi8KKworaW50CituZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0
cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCwgdV9pbnQgcG9vbCwgdV9pbnQgKmNsdXN0c2l6ZSwgdV9p
bnQgKm51bWNsdXN0ZXJzKQoreworCWlmICghbm1kIHx8ICFjbHVzdHNpemUgfHwgIW51bWNsdXN0
ZXJzIHx8IHBvb2wgPj0gTkVUTUFQX1BPT0xTX05SKQorCQlyZXR1cm4gMTsgLyogaW52YWxpZCBh
cmd1bWVudHMgKi8KKwkvLyBOTUFfTE9DS19BU1NFUlQobm1kKTsKKwlpZiAoIShubWQtPmZsYWdz
ICYgTkVUTUFQX01FTV9GSU5BTElaRUQpKSB7CisJCSpjbHVzdHNpemUgPSAqbnVtY2x1c3RlcnMg
PSAwOworCQlyZXR1cm4gMTsgLyogbm90IHJlYWR5IHlldCAqLworCX0KKwkqY2x1c3RzaXplID0g
bm1kLT5wb29sc1twb29sXS5fY2x1c3RzaXplOworCSpudW1jbHVzdGVycyA9IG5tZC0+cG9vbHNb
cG9vbF0ubnVtY2x1c3RlcnM7CisJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KIH0KIAogc3RhdGlj
IGludApAQCAtNTc4LDEyICs4MjIsNiBAQAogICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09M
XS5tZW10b3RhbCArIAkJCVwKIAluZXRtYXBfb2JqX29mZnNldCgmKG4pLT5wb29sc1tORVRNQVBf
UklOR19QT09MXSwgKHYpKSkKIAotI2RlZmluZSBuZXRtYXBfYnVmX29mZnNldChuLCB2KQkJCQkJ
XAotICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09MXS5tZW10b3RhbCArCQkJXAotCShuKS0+
cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ubWVtdG90YWwgKwkJXAotCW5ldG1hcF9vYmpfb2Zmc2V0
KCYobiktPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0sICh2KSkpCi0KLQogc3RhdGljIHNzaXplX3QK
IG5ldG1hcF9tZW0yX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNvbnN0IHZv
aWQgKmFkZHIpCiB7CkBAIC02MDIsNyArODQwLDcgQEAKIG5ldG1hcF9vYmpfbWFsbG9jKHN0cnVj
dCBuZXRtYXBfb2JqX3Bvb2wgKnAsIHVfaW50IGxlbiwgdWludDMyX3QgKnN0YXJ0LCB1aW50MzJf
dCAqaW5kZXgpCiB7CiAJdWludDMyX3QgaSA9IDA7CQkJLyogaW5kZXggaW4gdGhlIGJpdG1hcCAq
LwotCXVpbnQzMl90IG1hc2ssIGo7CQkvKiBzbG90IGNvdW50ZXIgKi8KKwl1aW50MzJfdCBtYXNr
LCBqID0gMDsJCS8qIHNsb3QgY291bnRlciAqLwogCXZvaWQgKnZhZGRyID0gTlVMTDsKIAogCWlm
IChsZW4gPiBwLT5fb2Jqc2l6ZSkgewpAQCAtNjM2LDcgKzg3NCw3IEBACiAJCWlmIChpbmRleCkK
IAkJCSppbmRleCA9IGkgKiAzMiArIGo7CiAJfQotCU5EKCIlcyBhbGxvY2F0b3I6IGFsbG9jYXRl
ZCBvYmplY3QgQCBbJWRdWyVkXTogdmFkZHIgJXAiLCBpLCBqLCB2YWRkcik7CisJTkQoIiVzIGFs
bG9jYXRvcjogYWxsb2NhdGVkIG9iamVjdCBAIFslZF1bJWRdOiB2YWRkciAlcCIscC0+bmFtZSwg
aSwgaiwgdmFkZHIpOwogCiAJaWYgKHN0YXJ0KQogCQkqc3RhcnQgPSBpOwpAQCAtNzMzLDcgKzk3
MSw3IEBACiAJCQkqaGVhZCA9IGN1cjsgLyogcmVzdG9yZSAqLwogCQkJYnJlYWs7CiAJCX0KLQkJ
UkQoNSwgImFsbG9jYXRlIGJ1ZmZlciAlZCAtPiAlZCIsICpoZWFkLCBjdXIpOworCQlORCg1LCAi
YWxsb2NhdGUgYnVmZmVyICVkIC0+ICVkIiwgKmhlYWQsIGN1cik7CiAJCSpwID0gY3VyOyAvKiBs
aW5rIHRvIHByZXZpb3VzIGhlYWQgKi8KIAl9CiAKQEAgLTc1MCw3ICs5ODgsNyBAQAogCXN0cnVj
dCBuZXRtYXBfb2JqX3Bvb2wgKnAgPSAmbm1kLT5wb29sc1tORVRNQVBfQlVGX1BPT0xdOwogCXVp
bnQzMl90IGksIGN1ciwgKmJ1ZjsKIAotCUQoImZyZWVpbmcgdGhlIGV4dHJhIGxpc3QiKTsKKwlO
RCgiZnJlZWluZyB0aGUgZXh0cmEgbGlzdCIpOwogCWZvciAoaSA9IDA7IGhlYWQgPj0yICYmIGhl
YWQgPCBwLT5vYmp0b3RhbDsgaSsrKSB7CiAJCWN1ciA9IGhlYWQ7CiAJCWJ1ZiA9IGx1dFtoZWFk
XS52YWRkcjsKQEAgLTc2MSw3ICs5OTksOCBAQAogCX0KIAlpZiAoaGVhZCAhPSAwKQogCQlEKCJi
cmVha2luZyB3aXRoIGhlYWQgJWQiLCBoZWFkKTsKLQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7
CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7CiB9CiAK
IApAQCAtODQyLDExICsxMDgxLDEwIEBACiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlm
IChwLT5iaXRtYXApCi0JCWZyZWUocC0+Yml0bWFwLCBNX05FVE1BUCk7CisJCW5tX29zX2ZyZWUo
cC0+Yml0bWFwKTsKIAlwLT5iaXRtYXAgPSBOVUxMOwogCWlmIChwLT5sdXQpIHsKIAkJdV9pbnQg
aTsKLQkJc2l6ZV90IHN6ID0gcC0+X2NsdXN0c2l6ZTsKIAogCQkvKgogCQkgKiBGcmVlIGVhY2gg
Y2x1c3RlciBhbGxvY2F0ZWQgaW4KQEAgLTg1NiwxMyArMTA5NCwxMyBAQAogCQkgKi8KIAkJZm9y
IChpID0gMDsgaSA8IHAtPm9ianRvdGFsOyBpICs9IHAtPl9jbHVzdGVudHJpZXMpIHsKIAkJCWlm
IChwLT5sdXRbaV0udmFkZHIpCi0JCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHN6LCBN
X05FVE1BUCk7CisJCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHAtPl9jbHVzdHNpemUs
IE1fTkVUTUFQKTsKIAkJfQogCQliemVybyhwLT5sdXQsIHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5
KSAqIHAtPm9ianRvdGFsKTsKICNpZmRlZiBsaW51eAogCQl2ZnJlZShwLT5sdXQpOwogI2Vsc2UK
LQkJZnJlZShwLT5sdXQsIE1fTkVUTUFQKTsKKwkJbm1fb3NfZnJlZShwLT5sdXQpOwogI2VuZGlm
CiAJfQogCXAtPmx1dCA9IE5VTEw7CkBAIC05NzMsNiArMTIxMSwxOCBAQAogCXJldHVybiAwOwog
fQogCitzdGF0aWMgc3RydWN0IGx1dF9lbnRyeSAqCitubV9hbGxvY19sdXQodV9pbnQgbm9iaikK
K3sKKwlzaXplX3QgbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIG5vYmo7CisJc3RydWN0
IGx1dF9lbnRyeSAqbHV0OworI2lmZGVmIGxpbnV4CisJbHV0ID0gdm1hbGxvYyhuKTsKKyNlbHNl
CisJbHV0ID0gbm1fb3NfbWFsbG9jKG4pOworI2VuZGlmCisJcmV0dXJuIGx1dDsKK30KIAogLyog
Y2FsbCB3aXRoIE5NQV9MT0NLIGhlbGQgKi8KIHN0YXRpYyBpbnQKQEAgLTk4NSwyMCArMTIzNSwx
NSBAQAogCXAtPm51bWNsdXN0ZXJzID0gcC0+X251bWNsdXN0ZXJzOwogCXAtPm9ianRvdGFsID0g
cC0+X29ianRvdGFsOwogCi0JbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIHAtPm9ianRv
dGFsOwotI2lmZGVmIGxpbnV4Ci0JcC0+bHV0ID0gdm1hbGxvYyhuKTsKLSNlbHNlCi0JcC0+bHV0
ID0gbWFsbG9jKG4sIE1fTkVUTUFQLCBNX05PV0FJVCB8IE1fWkVSTyk7Ci0jZW5kaWYKKwlwLT5s
dXQgPSBubV9hbGxvY19sdXQocC0+b2JqdG90YWwpOwogCWlmIChwLT5sdXQgPT0gTlVMTCkgewot
CQlEKCJVbmFibGUgdG8gY3JlYXRlIGxvb2t1cCB0YWJsZSAoJWQgYnl0ZXMpIGZvciAnJXMnIiwg
KGludCluLCBwLT5uYW1lKTsKKwkJRCgiVW5hYmxlIHRvIGNyZWF0ZSBsb29rdXAgdGFibGUgZm9y
ICclcyciLCBwLT5uYW1lKTsKIAkJZ290byBjbGVhbjsKIAl9CiAKIAkvKiBBbGxvY2F0ZSB0aGUg
Yml0bWFwICovCiAJbiA9IChwLT5vYmp0b3RhbCArIDMxKSAvIDMyOwotCXAtPmJpdG1hcCA9IG1h
bGxvYyhzaXplb2YodWludDMyX3QpICogbiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsK
KwlwLT5iaXRtYXAgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqIG4pOwogCWlmIChw
LT5iaXRtYXAgPT0gTlVMTCkgewogCQlEKCJVbmFibGUgdG8gY3JlYXRlIGJpdG1hcCAoJWQgZW50
cmllcykgZm9yIGFsbG9jYXRvciAnJXMnIiwgKGludCluLAogCQkgICAgcC0+bmFtZSk7CkBAIC0x
MDE1LDYgKzEyNjAsMTMgQEAKIAkJaW50IGxpbSA9IGkgKyBwLT5fY2x1c3RlbnRyaWVzOwogCQlj
aGFyICpjbHVzdDsKIAorCQkvKgorCQkgKiBYWFggTm90ZSwgd2Ugb25seSBuZWVkIGNvbnRpZ21h
bGxvYygpIGZvciBidWZmZXJzIGF0dGFjaGVkCisJCSAqIHRvIG5hdGl2ZSBpbnRlcmZhY2VzLiBJ
biBhbGwgb3RoZXIgY2FzZXMgKG5pZnAsIG5ldG1hcCByaW5ncworCQkgKiBhbmQgZXZlbiBidWZm
ZXJzIGZvciBWQUxFIHBvcnRzIG9yIGVtdWxhdGVkIGludGVyZmFjZXMpIHdlCisJCSAqIGNhbiBs
aXZlIHdpdGggc3RhbmRhcmQgbWFsbG9jLCBiZWNhdXNlIHRoZSBoYXJkd2FyZSB3aWxsIG5vdAor
CQkgKiBhY2Nlc3MgdGhlIHBhZ2VzIGRpcmVjdGx5LgorCQkgKi8KIAkJY2x1c3QgPSBjb250aWdt
YWxsb2MobiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPLAogCQkgICAgKHNpemVfdCkwLCAt
MVVMLCBQQUdFX1NJWkUsIDApOwogCQlpZiAoY2x1c3QgPT0gTlVMTCkgewpAQCAtMTA3NSwxNiAr
MTMyNywxOCBAQAogCiAvKiBjYWxsIHdpdGggbG9jayBoZWxkICovCiBzdGF0aWMgaW50Ci1uZXRt
YXBfbWVtb3J5X2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1h
cF9tZW1fcGFyYW1zX2NoYW5nZWQoc3RydWN0IG5ldG1hcF9vYmpfcGFyYW1zKiBwKQogewotCWlu
dCBpOworCWludCBpLCBydiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S
OyBpKyspIHsKLQkJaWYgKG5tZC0+cG9vbHNbaV0ucl9vYmpzaXplICE9IG5ldG1hcF9wYXJhbXNb
aV0uc2l6ZSB8fAotCQkgICAgbm1kLT5wb29sc1tpXS5yX29ianRvdGFsICE9IG5ldG1hcF9wYXJh
bXNbaV0ubnVtKQotCQkgICAgcmV0dXJuIDE7CisJCWlmIChwW2ldLmxhc3Rfc2l6ZSAhPSBwW2ld
LnNpemUgfHwgcFtpXS5sYXN0X251bSAhPSBwW2ldLm51bSkgeworCQkJcFtpXS5sYXN0X3NpemUg
PSBwW2ldLnNpemU7CisJCQlwW2ldLmxhc3RfbnVtID0gcFtpXS5udW07CisJCQlydiA9IDE7CisJ
CX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEw
NSwxMyArMTM1OSwxOCBAQAogewogCWludCBpLCBsaW0gPSBwLT5fb2JqdG90YWw7CiAKLQlpZiAo
bmEtPnBkZXYgPT0gTlVMTCkKKwlpZiAobmEgPT0gTlVMTCB8fCBuYS0+cGRldiA9PSBOVUxMKQog
CQlyZXR1cm4gMDsKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKIAkodm9pZClpOwogCSh2b2lkKWxpbTsKIAlEKCJ1bnN1cHBvcnRlZCBvbiBGcmVlQlNEIik7
CisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWk7CisJKHZvaWQpbGltOworCUQoInVu
c3VwcG9ydGVkIG9uIFdpbmRvd3MiKTsJLy9YWFhfYWxlLCByZWFsbHk/CiAjZWxzZSAvKiBsaW51
eCAqLwogCWZvciAoaSA9IDI7IGkgPCBsaW07IGkrKykgewogCQluZXRtYXBfdW5sb2FkX21hcChu
YSwgKGJ1c19kbWFfdGFnX3QpIG5hLT5wZGV2LCAmcC0+bHV0W2ldLnBhZGRyKTsKQEAgLTExMjQs
OCArMTM4MywxMCBAQAogc3RhdGljIGludAogbmV0bWFwX21lbV9tYXAoc3RydWN0IG5ldG1hcF9v
YmpfcG9vbCAqcCwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLSNpZmRlZiBfX0ZyZWVC
U0RfXworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJRCgidW5zdXBwb3J0ZWQgb24gRnJlZUJT
RCIpOworI2VsaWYgZGVmaW5lZChfV0lOMzIpCisJRCgidW5zdXBwb3J0ZWQgb24gV2luZG93cyIp
OwkvL1hYWF9hbGUsIHJlYWxseT8KICNlbHNlIC8qIGxpbnV4ICovCiAJaW50IGksIGxpbSA9IHAt
Pl9vYmp0b3RhbDsKIApAQCAtMTE3Niw2OSArMTQzNywxNiBAQAogCXJldHVybiBubWQtPmxhc3Rl
cnI7CiB9CiAKLQotCi1zdGF0aWMgdm9pZAotbmV0bWFwX21lbV9wcml2YXRlX2RlbGV0ZShzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQpCi17Ci0JaWYgKG5tZCA9PSBOVUxMKQotCQlyZXR1cm47Ci0J
aWYgKG5ldG1hcF92ZXJib3NlKQotCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7Ci0JaWYgKG5tZC0+
YWN0aXZlID4gMCkKLQkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9yIHdpdGggYWN0aXZl
PSVkISIsIG5tZC0+YWN0aXZlKTsKLQlubV9tZW1fcmVsZWFzZV9pZChubWQpOwotCWlmIChuZXRt
YXBfdmVyYm9zZSkKLQkJRCgiZG9uZSBkZWxldGluZyAlcCIsIG5tZCk7Ci0JTk1BX0xPQ0tfREVT
VFJPWShubWQpOwotCWZyZWUobm1kLCBNX0RFVkJVRik7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldG1h
cF9tZW1fcHJpdmF0ZV9jb25maWcoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCS8qIG5v
dGhpbmcgdG8gZG8sIHdlIGFyZSBjb25maWd1cmVkIG9uIGNyZWF0aW9uCi0gCSAqIGFuZCBjb25m
aWd1cmF0aW9uIG5ldmVyIGNoYW5nZXMgdGhlcmVhZnRlcgotIAkgKi8KLQlyZXR1cm4gMDsKLX0K
LQotc3RhdGljIGludAotbmV0bWFwX21lbV9wcml2YXRlX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBf
bWVtX2QgKm5tZCkKLXsKLQlpbnQgZXJyOwotCU5NQV9MT0NLKG5tZCk7Ci0Jbm1kLT5hY3RpdmUr
KzsKLQllcnIgPSBuZXRtYXBfbWVtX2ZpbmFsaXplX2FsbChubWQpOwotCU5NQV9VTkxPQ0sobm1k
KTsKLQlyZXR1cm4gZXJyOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1uZXRtYXBfbWVtX3ByaXZhdGVf
ZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCU5NQV9MT0NLKG5tZCk7Ci0JaWYg
KC0tbm1kLT5hY3RpdmUgPD0gMCkKLQkJbmV0bWFwX21lbV9yZXNldF9hbGwobm1kKTsKLQlOTUFf
VU5MT0NLKG5tZCk7Ci19Ci0KLQogLyoKICAqIGFsbG9jYXRvciBmb3IgcHJpdmF0ZSBtZW1vcnkK
ICAqLwotc3RydWN0IG5ldG1hcF9tZW1fZCAqCi1uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KGNvbnN0
IGNoYXIgKm5hbWUsIHVfaW50IHR4ciwgdV9pbnQgdHhkLAotCXVfaW50IHJ4ciwgdV9pbnQgcnhk
LCB1X2ludCBleHRyYV9idWZzLCB1X2ludCBucGlwZXMsIGludCAqcGVycikKK3N0YXRpYyBzdHJ1
Y3QgbmV0bWFwX21lbV9kICoKK19uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHN0cnVjdCBuZXRtYXBf
b2JqX3BhcmFtcyAqcCwgaW50ICpwZXJyKQogewogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKmQgPSBO
VUxMOwotCXN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBwW05FVE1BUF9QT09MU19OUl07Ci0JaW50
IGksIGVycjsKLQl1X2ludCB2LCBtYXhkOworCWludCBpLCBlcnIgPSAwOwogCi0JZCA9IG1hbGxv
YyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fZCksCi0JCQlNX0RFVkJVRiwgTV9OT1dBSVQgfCBN
X1pFUk8pOworCWQgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfbWVtX2QpKTsK
IAlpZiAoZCA9PSBOVUxMKSB7CiAJCWVyciA9IEVOT01FTTsKIAkJZ290byBlcnJvcjsKQEAgLTEy
NDksNyArMTQ1Nyw0MSBAQAogCWVyciA9IG5tX21lbV9hc3NpZ25faWQoZCk7CiAJaWYgKGVycikK
IAkJZ290byBlcnJvcjsKKwlzbnByaW50ZihkLT5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBk
LT5ubV9pZCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKKwkJ
c25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVUTUFQX1BPT0xfTUFYX05BTVNaLAorCQkJCW5t
X2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAorCQkJCWQtPm5hbWUpOworCQlkLT5wYXJhbXNbaV0u
bnVtID0gcFtpXS5udW07CisJCWQtPnBhcmFtc1tpXS5zaXplID0gcFtpXS5zaXplOworCX0KKwor
CU5NQV9MT0NLX0lOSVQoZCk7CisKKwllcnIgPSBuZXRtYXBfbWVtX2NvbmZpZyhkKTsKKwlpZiAo
ZXJyKQorCQlnb3RvIGVycm9yOworCisJZC0+ZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVE
OworCisJcmV0dXJuIGQ7CisKK2Vycm9yOgorCW5ldG1hcF9tZW1fZGVsZXRlKGQpOworCWlmIChw
ZXJyKQorCQkqcGVyciA9IGVycjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9t
ZW1fZCAqCituZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2lu
dCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQg
KnBlcnIpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqZCA9IE5VTEw7CisJc3RydWN0IG5ldG1h
cF9vYmpfcGFyYW1zIHBbTkVUTUFQX1BPT0xTX05SXTsKKwlpbnQgaSwgZXJyID0gMDsKKwl1X2lu
dCB2LCBtYXhkOwogCS8qIGFjY291bnQgZm9yIHRoZSBmYWtlIGhvc3QgcmluZ3MgKi8KIAl0eHIr
KzsKIAlyeHIrKzsKQEAgLTEyOTUsMjMgKzE1MzcsMTMgQEAKIAkJCXBbTkVUTUFQX0JVRl9QT09M
XS5udW0sCiAJCQlwW05FVE1BUF9CVUZfUE9PTF0uc2l6ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwg
TkVUTUFQX1BPT0xTX05SOyBpKyspIHsKLQkJc25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVU
TUFQX1BPT0xfTUFYX05BTVNaLAotCQkJCW5tX2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAotCQkJ
CW5hbWUpOwotCQllcnIgPSBuZXRtYXBfY29uZmlnX29ial9hbGxvY2F0b3IoJmQtPnBvb2xzW2ld
LAotCQkJCXBbaV0ubnVtLCBwW2ldLnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsK
LQl9Ci0KLQlkLT5mbGFncyAmPSB+TkVUTUFQX01FTV9GSU5BTElaRUQ7Ci0KLQlOTUFfTE9DS19J
TklUKGQpOworCWQgPSBfbmV0bWFwX21lbV9wcml2YXRlX25ldyhwLCBwZXJyKTsKKwlpZiAoZCA9
PSBOVUxMKQorCQlnb3RvIGVycm9yOwogCiAJcmV0dXJuIGQ7CiBlcnJvcjoKLQluZXRtYXBfbWVt
X3ByaXZhdGVfZGVsZXRlKGQpOworCW5ldG1hcF9tZW1fZGVsZXRlKGQpOwogCWlmIChwZXJyKQog
CQkqcGVyciA9IGVycjsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMjAsNyArMTU1Miw3IEBACiAKIC8q
IGNhbGwgd2l0aCBsb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQKLW5ldG1hcF9tZW1fZ2xvYmFsX2Nv
bmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCituZXRtYXBfbWVtMl9jb25maWcoc3RydWN0
IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCWludCBpOwogCkBAIC0xMzI4LDcgKzE1NjAsNyBAQAog
CQkvKiBhbHJlYWR5IGluIHVzZSwgd2UgY2Fubm90IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiAq
LwogCQlnb3RvIG91dDsKIAotCWlmICghbmV0bWFwX21lbW9yeV9jb25maWdfY2hhbmdlZChubWQp
KQorCWlmICghbmV0bWFwX21lbV9wYXJhbXNfY2hhbmdlZChubWQtPnBhcmFtcykpCiAJCWdvdG8g
b3V0OwogCiAJTkQoInJlY29uZmlndXJpbmciKTsKQEAgLTEzNDMsNyArMTU3NSw3IEBACiAKIAlm
b3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKIAkJbm1kLT5sYXN0ZXJyID0g
bmV0bWFwX2NvbmZpZ19vYmpfYWxsb2NhdG9yKCZubWQtPnBvb2xzW2ldLAotCQkJCW5ldG1hcF9w
YXJhbXNbaV0ubnVtLCBuZXRtYXBfcGFyYW1zW2ldLnNpemUpOworCQkJCW5tZC0+cGFyYW1zW2ld
Lm51bSwgbm1kLT5wYXJhbXNbaV0uc2l6ZSk7CiAJCWlmIChubWQtPmxhc3RlcnIpCiAJCQlnb3Rv
IG91dDsKIAl9CkBAIC0xMzU0LDEzICsxNTg2LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5ldG1h
cF9tZW1fZ2xvYmFsX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9t
ZW0yX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlpbnQgZXJyOwotCQkK
KwogCS8qIHVwZGF0ZSBjb25maWd1cmF0aW9uIGlmIGNoYW5nZWQgKi8KLQlpZiAobmV0bWFwX21l
bV9nbG9iYWxfY29uZmlnKG5tZCkpCi0JCWdvdG8gb3V0OworCWlmIChuZXRtYXBfbWVtMl9jb25m
aWcobm1kKSkKKwkJZ290byBvdXQxOwogCiAJbm1kLT5hY3RpdmUrKzsKIApAQCAtMTM3OCw2ICsx
NjEwLDcgQEAKIG91dDoKIAlpZiAobm1kLT5sYXN0ZXJyKQogCQlubWQtPmFjdGl2ZS0tOworb3V0
MToKIAllcnIgPSBubWQtPmxhc3RlcnI7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM4NSwyMCArMTYx
OCwyMyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9nbG9iYWxfZGVsZXRlKHN0cnVj
dCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9tZW0yX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21l
bV9kICpubWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S
OyBpKyspIHsKLQkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1fbWVtLnBvb2xz
W2ldKTsKKwkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1kLT5wb29sc1tpXSk7
CiAJfQogCi0JTk1BX0xPQ0tfREVTVFJPWSgmbm1fbWVtKTsKKwlOTUFfTE9DS19ERVNUUk9ZKG5t
ZCk7CisJaWYgKG5tZCAhPSAmbm1fbWVtKQorCQlubV9vc19mcmVlKG5tZCk7CiB9CiAKIGludAog
bmV0bWFwX21lbV9pbml0KHZvaWQpCiB7CisJTk1fTVRYX0lOSVQobm1fbWVtX2xpc3RfbG9jayk7
CiAJTk1BX0xPQ0tfSU5JVCgmbm1fbWVtKTsKIAluZXRtYXBfbWVtX2dldCgmbm1fbWVtKTsKIAly
ZXR1cm4gKDApOwpAQCAtMTQxNywxMyArMTY1MywxNyBAQAogCiAJZm9yX3J4X3R4KHQpIHsKIAkJ
dV9pbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IG5ldG1hcF9yZWFsX3JpbmdzKG5hLCB0KTsgaSsr
KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK
IAkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CiAJCQlzdHJ1
Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBrcmluZy0+cmluZzsKIAotCQkJaWYgKHJpbmcgPT0gTlVM
TCkKKwkJCWlmIChyaW5nID09IE5VTEwgfHwga3JpbmctPnVzZXJzID4gMCB8fCAoa3JpbmctPm5y
X2tmbGFncyAmIE5LUl9ORUVEUklORykpIHsKKwkJCQlORCgic2tpcHBpbmcgcmluZyAlcyAocmlu
ZyAlcCwgdXNlcnMgJWQpIiwKKwkJCQkJCWtyaW5nLT5uYW1lLCByaW5nLCBrcmluZy0+dXNlcnMp
OwogCQkJCWNvbnRpbnVlOwotCQkJbmV0bWFwX2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5z
bG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7CisJCQl9CisJCQlpZiAoaSAhPSBubWFfZ2V0X25y
aW5ncyhuYSwgdCkgfHwgbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpCisJCQkJbmV0bWFw
X2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5zbG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7
CiAJCQluZXRtYXBfcmluZ19mcmVlKG5hLT5ubV9tZW0sIHJpbmcpOwogCQkJa3JpbmctPnJpbmcg
PSBOVUxMOwogCQl9CkBAIC0xNDUyLDkgKzE2OTIsMTAgQEAKIAkJCXN0cnVjdCBuZXRtYXBfcmlu
ZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCQkJdV9pbnQgbGVuLCBuZGVzYzsKIAotCQkJaWYgKHJp
bmcpIHsKLQkJCQlORCgiJXMgYWxyZWFkeSBjcmVhdGVkIiwga3JpbmctPm5hbWUpOwotCQkJCWNv
bnRpbnVlOyAvKiBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxzZSAqLworCQkJaWYgKHJp
bmcgfHwgKCFrcmluZy0+dXNlcnMgJiYgIShrcmluZy0+bnJfa2ZsYWdzICYgTktSX05FRURSSU5H
KSkpIHsKKwkJCQkvKiB1bmVlZGVkLCBvciBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxz
ZSAqLworCQkJCU5EKCJza2lwcGluZyByaW5nICVzIiwga3JpbmctPm5hbWUpOworCQkJCWNvbnRp
bnVlOwogCQkJfQogCQkJbmRlc2MgPSBrcmluZy0+bmtyX251bV9zbG90czsKIAkJCWxlbiA9IHNp
emVvZihzdHJ1Y3QgbmV0bWFwX3JpbmcpICsKQEAgLTE1NjksMTAgKzE4MTAsMjIgQEAKIAkgKi8K
IAliYXNlID0gbmV0bWFwX2lmX29mZnNldChuYS0+bm1fbWVtLCBuaWZwKTsKIAlmb3IgKGkgPSAw
OyBpIDwgbltOUl9UWF07IGkrKykgeworCQlpZiAobmEtPnR4X3JpbmdzW2ldLnJpbmcgPT0gTlVM
TCkgeworCQkJLy8gWFhYIG1heWJlIHVzZSB0aGUgb2Zmc2V0IG9mIGFuIGVycm9yIHJpbmcsCisJ
CQkvLyBsaWtlIHdlIGRvIGZvciBidWZmZXJzPworCQkJKihzc2l6ZV90ICopKHVpbnRwdHJfdCkm
bmlmcC0+cmluZ19vZnNbaV0gPSAwOworCQkJY29udGludWU7CisJCX0KIAkJKihzc2l6ZV90ICop
KHVpbnRwdHJfdCkmbmlmcC0+cmluZ19vZnNbaV0gPQogCQkJbmV0bWFwX3Jpbmdfb2Zmc2V0KG5h
LT5ubV9tZW0sIG5hLT50eF9yaW5nc1tpXS5yaW5nKSAtIGJhc2U7CiAJfQogCWZvciAoaSA9IDA7
IGkgPCBuW05SX1JYXTsgaSsrKSB7CisJCWlmIChuYS0+cnhfcmluZ3NbaV0ucmluZyA9PSBOVUxM
KSB7CisJCQkvLyBYWFggbWF5YmUgdXNlIHRoZSBvZmZzZXQgb2YgYW4gZXJyb3IgcmluZywKKwkJ
CS8vIGxpa2Ugd2UgZG8gZm9yIGJ1ZmZlcnM/CisJCQkqKHNzaXplX3QgKikodWludHB0cl90KSZu
aWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9IDA7CisJCQljb250aW51ZTsKKwkJfQogCQkqKHNz
aXplX3QgKikodWludHB0cl90KSZuaWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9CiAJCQluZXRt
YXBfcmluZ19vZmZzZXQobmEtPm5tX21lbSwgbmEtPnJ4X3JpbmdzW2ldLnJpbmcpIC0gYmFzZTsK
IAl9CkBAIC0xNTk3LDcgKzE4NTAsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9n
bG9iYWxfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQorbmV0bWFwX21lbTJfZGVyZWYo
c3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCiAJbm1kLT5hY3RpdmUtLTsKQEAgLTE2MTIs
MjcgKzE4NjUsNTUxIEBACiAJLm5tZF9nZXRfbHV0ID0gbmV0bWFwX21lbTJfZ2V0X2x1dCwKIAku
bm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8sCiAJLm5tZF9vZnN0b3BoeXMgPSBu
ZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcgPSBuZXRtYXBfbWVtX2dsb2JhbF9j
b25maWcsCi0JLm5tZF9maW5hbGl6ZSA9IG5ldG1hcF9tZW1fZ2xvYmFsX2ZpbmFsaXplLAotCS5u
bWRfZGVyZWYgPSBuZXRtYXBfbWVtX2dsb2JhbF9kZXJlZiwKLQkubm1kX2RlbGV0ZSA9IG5ldG1h
cF9tZW1fZ2xvYmFsX2RlbGV0ZSwKKwkubm1kX2NvbmZpZyA9IG5ldG1hcF9tZW0yX2NvbmZpZywK
Kwkubm1kX2ZpbmFsaXplID0gbmV0bWFwX21lbTJfZmluYWxpemUsCisJLm5tZF9kZXJlZiA9IG5l
dG1hcF9tZW0yX2RlcmVmLAorCS5ubWRfZGVsZXRlID0gbmV0bWFwX21lbTJfZGVsZXRlLAogCS5u
bWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbTJfaWZfb2Zmc2V0LAogCS5ubWRfaWZfbmV3ID0gbmV0
bWFwX21lbTJfaWZfbmV3LAogCS5ubWRfaWZfZGVsZXRlID0gbmV0bWFwX21lbTJfaWZfZGVsZXRl
LAogCS5ubWRfcmluZ3NfY3JlYXRlID0gbmV0bWFwX21lbTJfcmluZ3NfY3JlYXRlLAogCS5ubWRf
cmluZ3NfZGVsZXRlID0gbmV0bWFwX21lbTJfcmluZ3NfZGVsZXRlCiB9Owotc3RydWN0IG5ldG1h
cF9tZW1fb3BzIG5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMgPSB7Ci0JLm5tZF9nZXRfbHV0ID0gbmV0
bWFwX21lbTJfZ2V0X2x1dCwKLQkubm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8s
Ci0JLm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcg
PSBuZXRtYXBfbWVtX3ByaXZhdGVfY29uZmlnLAotCS5ubWRfZmluYWxpemUgPSBuZXRtYXBfbWVt
X3ByaXZhdGVfZmluYWxpemUsCi0JLm5tZF9kZXJlZiA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZXJl
ZiwKLQkubm1kX2lmX29mZnNldCA9IG5ldG1hcF9tZW0yX2lmX29mZnNldCwKLQkubm1kX2RlbGV0
ZSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZWxldGUsCi0JLm5tZF9pZl9uZXcgPSBuZXRtYXBfbWVt
Ml9pZl9uZXcsCi0JLm5tZF9pZl9kZWxldGUgPSBuZXRtYXBfbWVtMl9pZl9kZWxldGUsCi0JLm5t
ZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBfbWVtMl9yaW5nc19jcmVhdGUsCi0JLm5tZF9yaW5nc19k
ZWxldGUgPSBuZXRtYXBfbWVtMl9yaW5nc19kZWxldGUKKworaW50CituZXRtYXBfbWVtX3Bvb2xz
X2luZm9fZ2V0KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor
eworCXVpbnRwdHJfdCAqcHAgPSAodWludHB0cl90ICopJm5tci0+bnJfYXJnMTsKKwlzdHJ1Y3Qg
bmV0bWFwX3Bvb2xzX2luZm8gKnVwaSA9IChzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKikoKnBw
KTsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQgPSBuYS0+bm1fbWVtOworCXN0cnVjdCBuZXRt
YXBfcG9vbHNfaW5mbyBwaTsKKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKKwl1aW50MTZfdCBtZW1p
ZDsKKwlpbnQgcmV0OworCisJaWYgKCFubWQpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9
IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1kLCAmbWVtc2l6ZSwgTlVMTCwgJm1lbWlkKTsKKwlpZiAo
cmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcGkubWVtc2l6ZSA9IG1lbXNpemU7CisJcGku
bWVtaWQgPSBtZW1pZDsKKwlwaS5pZl9wb29sX29mZnNldCA9IDA7CisJcGkuaWZfcG9vbF9vYmp0
b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm9ianRvdGFsOworCXBpLmlmX3Bvb2xf
b2Jqc2l6ZSA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLl9vYmpzaXplOworCisJcGkucmlu
Z19wb29sX29mZnNldCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm1lbXRvdGFsOworCXBp
LnJpbmdfcG9vbF9vYmp0b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ub2JqdG90
YWw7CisJcGkucmluZ19wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xd
Ll9vYmpzaXplOworCisJcGkuYnVmX3Bvb2xfb2Zmc2V0ID0gbm1kLT5wb29sc1tORVRNQVBfSUZf
UE9PTF0ubWVtdG90YWwgKworCQkJICAgICBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xdLm1l
bXRvdGFsOworCXBpLmJ1Zl9wb29sX29ianRvdGFsID0gbm1kLT5wb29sc1tORVRNQVBfQlVGX1BP
T0xdLm9ianRvdGFsOworCXBpLmJ1Zl9wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9C
VUZfUE9PTF0uX29ianNpemU7CisKKwlyZXQgPSBjb3B5b3V0KCZwaSwgdXBpLCBzaXplb2YocGkp
KTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNp
ZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbWVtX3B0X2lmIHsKKwlzdHJ1Y3QgbWVt
X3B0X2lmICpuZXh0OworCXN0cnVjdCBpZm5ldCAqaWZwOworCXVuc2lnbmVkIGludCBuaWZwX29m
ZnNldDsKK307CisKKy8qIE5ldG1hcCBhbGxvY2F0b3IgZm9yIHB0bmV0bWFwIGd1ZXN0cy4gKi8K
K3N0cnVjdCBuZXRtYXBfbWVtX3B0ZyB7CisJc3RydWN0IG5ldG1hcF9tZW1fZCB1cDsKKworCXZt
X3BhZGRyX3Qgbm1fcGFkZHI7ICAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBpbiB0aGUg
Z3Vlc3QgKi8KKwl2b2lkICpubV9hZGRyOyAgICAgICAgICAgICAgICAgIC8qIHZpcnR1YWwgYWRk
cmVzcyBpbiB0aGUgZ3Vlc3QgKi8KKwlzdHJ1Y3QgbmV0bWFwX2x1dCBidWZfbHV0OyAgICAgIC8q
IGxvb2t1cCB0YWJsZSBmb3IgQlVGIHBvb2wgaW4gdGhlIGd1ZXN0ICovCisJbm1fbWVtaWRfdCBo
b3N0X21lbV9pZDsgICAgICAgICAvKiBhbGxvY2F0b3IgaWRlbnRpZmllciBpbiB0aGUgaG9zdCAq
LworCXN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0bl9kZXY7LyogcHRuZXRtYXAgbWVtZGV2ICov
CisJc3RydWN0IG1lbV9wdF9pZiAqcHRfaWZzOwkvKiBsaXN0IG9mIGludGVyZmFjZXMgaW4gcGFz
c3Rocm91Z2ggKi8KK307CisKKy8qIExpbmsgYSBwYXNzdGhyb3VnaCBpbnRlcmZhY2UgdG8gYSBw
YXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLworc3RhdGljIGludAorbmV0bWFwX21lbV9w
dF9ndWVzdF9pZnBfYWRkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgc3RydWN0IGlmbmV0ICpp
ZnAsCisJCQkgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0KQoreworCXN0cnVjdCBuZXRtYXBf
bWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVjdCBt
ZW1fcHRfaWYgKnB0aWYgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpwdGlmKSk7CisKKwlpZiAoIXB0
aWYpIHsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCisJcHRpZi0+
aWZwID0gaWZwOworCXB0aWYtPm5pZnBfb2Zmc2V0ID0gbmlmcF9vZmZzZXQ7CisKKwlpZiAocHRu
bWQtPnB0X2lmcykgeworCQlwdGlmLT5uZXh0ID0gcHRubWQtPnB0X2lmczsKKwl9CisJcHRubWQt
PnB0X2lmcyA9IHB0aWY7CisKKwlOTUFfVU5MT0NLKG5tZCk7CisKKwlEKCJhZGRlZCAoaWZwPSVw
LG5pZnBfb2Zmc2V0PSV1KSIsIHB0aWYtPmlmcCwgcHRpZi0+bmlmcF9vZmZzZXQpOworCisJcmV0
dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIE5NQV9MT0NLKG5tZCkgaGVsZC4gKi8KK3N0YXRp
YyBzdHJ1Y3QgbWVtX3B0X2lmICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZwX2xvb2t1cChzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCBuZXRt
YXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVj
dCBtZW1fcHRfaWYgKmN1cnI7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJcmV0dXJu
IGN1cnI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVW5saW5rIGEgcGFzc3Ro
cm91Z2ggaW50ZXJmYWNlIGZyb20gYSBwYXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLwor
aW50CituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1k
LCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0g
KHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqKW5tZDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpwcmV2ID0g
TlVMTDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpjdXJyOworCWludCByZXQgPSAtMTsKKworCU5NQV9M
T0NLKG5tZCk7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJaWYgKHByZXYpIHsKKwkJ
CQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJcHRubWQtPnB0X2lm
cyA9IGN1cnItPm5leHQ7CisJCQl9CisJCQlEKCJyZW1vdmVkIChpZnA9JXAsbmlmcF9vZmZzZXQ9
JXUpIiwKKwkJCSAgY3Vyci0+aWZwLCBjdXJyLT5uaWZwX29mZnNldCk7CisJCQlubV9vc19mcmVl
KGN1cnIpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBjdXJyOworCX0K
KworCU5NQV9VTkxPQ0sobm1kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK25l
dG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVj
dCBuZXRtYXBfbHV0ICpsdXQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz
dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisKKwlpZiAoIShubWQtPmZsYWdzICYgTkVUTUFQ
X01FTV9GSU5BTElaRUQpKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJKmx1dCA9IHB0bm1k
LT5idWZfbHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRtYXBfbWVtX3B0X2d1
ZXN0X2dldF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgdV9pbnQgKnNpemUsCisJCQkg
ICAgIHVfaW50ICptZW1mbGFncywgdWludDE2X3QgKmlkKQoreworCWludCBlcnJvciA9IDA7CisK
KwlOTUFfTE9DSyhubWQpOworCisJZXJyb3IgPSBubWQtPm9wcy0+bm1kX2NvbmZpZyhubWQpOwor
CWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSBubWQtPm5t
X3RvdGFsc2l6ZTsKKwlpZiAobWVtZmxhZ3MpCisJCSptZW1mbGFncyA9IG5tZC0+ZmxhZ3M7CisJ
aWYgKGlkKQorCQkqaWQgPSBubWQtPm5tX2lkOworCitvdXQ6CisJTk1BX1VOTE9DSyhubWQpOwor
CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm1fcGFkZHJfdAorbmV0bWFwX21lbV9wdF9n
dWVzdF9vZnN0b3BoeXMoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCB2bV9vb2Zmc2V0X3Qgb2Zm
KQoreworCXN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1f
cHRnICopbm1kOworCXZtX3BhZGRyX3QgcGFkZHI7CisJLyogaWYgdGhlIG9mZnNldCBpcyB2YWxp
ZCwganVzdCByZXR1cm4gY3NiLT5iYXNlX2FkZHIgKyBvZmYgKi8KKwlwYWRkciA9ICh2bV9wYWRk
cl90KShwdG5tZC0+bm1fcGFkZHIgKyBvZmYpOworCU5EKCJvZmYgJWx4IHBhZHIgJWx4Iiwgb2Zm
LCAodW5zaWduZWQgbG9uZylwYWRkcik7CisJcmV0dXJuIHBhZGRyOworfQorCitzdGF0aWMgaW50
CituZXRtYXBfbWVtX3B0X2d1ZXN0X2NvbmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7
CisJLyogbm90aGluZyB0byBkbywgd2UgYXJlIGNvbmZpZ3VyZWQgb24gY3JlYXRpb24KKwkgKiBh
bmQgY29uZmlndXJhdGlvbiBuZXZlciBjaGFuZ2VzIHRoZXJlYWZ0ZXIKKwkgKi8KKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX21lbV9wdF9ndWVzdF9maW5hbGl6ZShzdHJ1Y3Qg
bmV0bWFwX21lbV9kICpubWQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz
dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisJdWludDY0X3QgbWVtX3NpemU7CisJdWludDMy
X3QgYnVmc2l6ZTsKKwl1aW50MzJfdCBuYnVmZmVyczsKKwl1aW50MzJfdCBwb29sb2ZzOworCXZt
X3BhZGRyX3QgcGFkZHI7CisJY2hhciAqdmFkZHI7CisJaW50IGk7CisJaW50IGVycm9yID0gMDsK
KworCW5tZC0+YWN0aXZlKys7CisKKwlpZiAobm1kLT5mbGFncyAmIE5FVE1BUF9NRU1fRklOQUxJ
WkVEKQorCQlnb3RvIG91dDsKKworCWlmIChwdG5tZC0+cHRuX2RldiA9PSBOVUxMKSB7CisJCUQo
InB0bmV0bWFwIG1lbWRldiBub3QgYXR0YWNoZWQiKTsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdv
dG8gZXJyOworCX0KKwkvKiBNYXAgbWVtb3J5IHRocm91Z2ggcHRuZXRtYXAtbWVtZGV2IEJBUi4g
Ki8KKwllcnJvciA9IG5tX29zX3B0X21lbWRldl9pb21hcChwdG5tZC0+cHRuX2RldiwgJnB0bm1k
LT5ubV9wYWRkciwKKwkJCQkgICAgICAmcHRubWQtPm5tX2FkZHIsICZtZW1fc2l6ZSk7CisJaWYg
KGVycm9yKQorCQlnb3RvIGVycjsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBsdXQgdXNp
bmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUKKwkgKiBwdG5ldG1hcCBtZW1vcnkg
ZGV2aWNlLiAqLworICAgICAgICBidWZzaXplID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5t
ZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVUX01ERVZfSU9fQlVGX1BPT0xfT0JKU1opOworICAgICAg
ICBuYnVmZmVycyA9IG5tX29zX3B0X21lbWRldl9pb3JlYWQocHRubWQtPnB0bl9kZXYsCisJCQkJ
CSBQVE5FVF9NREVWX0lPX0JVRl9QT09MX09CSk5VTSk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbHV0
ICovCisJaWYgKHB0bm1kLT5idWZfbHV0Lmx1dCA9PSBOVUxMKSB7CisJCUQoImFsbG9jYXRpbmcg
bHV0Iik7CisJCXB0bm1kLT5idWZfbHV0Lmx1dCA9IG5tX2FsbG9jX2x1dChuYnVmZmVycyk7CisJ
CWlmIChwdG5tZC0+YnVmX2x1dC5sdXQgPT0gTlVMTCkgeworCQkJRCgibHV0IGFsbG9jYXRpb24g
ZmFpbGVkIik7CisJCQlyZXR1cm4gRU5PTUVNOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBwaHlz
aWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IG1hcHBlZCB0aHJvdWdoIFBDSSBCQVIgKi8KKwlwb29s
b2ZzID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5tZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVU
X01ERVZfSU9fQlVGX1BPT0xfT0ZTKTsKKwl2YWRkciA9IChjaGFyICopKHB0bm1kLT5ubV9hZGRy
KSArIHBvb2xvZnM7CisJcGFkZHIgPSBwdG5tZC0+bm1fcGFkZHIgKyBwb29sb2ZzOworCisJZm9y
IChpID0gMDsgaSA8IG5idWZmZXJzOyBpKyspIHsKKwkJcHRubWQtPmJ1Zl9sdXQubHV0W2ldLnZh
ZGRyID0gdmFkZHI7CisJCXB0bm1kLT5idWZfbHV0Lmx1dFtpXS5wYWRkciA9IHBhZGRyOworCQl2
YWRkciArPSBidWZzaXplOworCQlwYWRkciArPSBidWZzaXplOworCX0KKworCXB0bm1kLT5idWZf
bHV0Lm9ianRvdGFsID0gbmJ1ZmZlcnM7CisJcHRubWQtPmJ1Zl9sdXQub2Jqc2l6ZSA9IGJ1ZnNp
emU7CisJbm1kLT5ubV90b3RhbHNpemUgPSAodW5zaWduZWQgaW50KW1lbV9zaXplOworCisJbm1k
LT5mbGFncyB8PSBORVRNQVBfTUVNX0ZJTkFMSVpFRDsKK291dDoKKwlyZXR1cm4gMDsKK2VycjoK
KwlubWQtPmFjdGl2ZS0tOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1h
cF9tZW1fcHRfZ3Vlc3RfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQoreworCXN0cnVj
dCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOwor
CisJbm1kLT5hY3RpdmUtLTsKKwlpZiAobm1kLT5hY3RpdmUgPD0gMCAmJgorCQkobm1kLT5mbGFn
cyAmIE5FVE1BUF9NRU1fRklOQUxJWkVEKSkgeworCSAgICBubWQtPmZsYWdzICAmPSB+TkVUTUFQ
X01FTV9GSU5BTElaRUQ7CisJICAgIC8qIHVubWFwIHB0bmV0bWFwLW1lbWRldiBtZW1vcnkgKi8K
KwkgICAgaWYgKHB0bm1kLT5wdG5fZGV2KSB7CisJCW5tX29zX3B0X21lbWRldl9pb3VubWFwKHB0
bm1kLT5wdG5fZGV2KTsKKwkgICAgfQorCSAgICBwdG5tZC0+bm1fYWRkciA9IDA7CisJICAgIHB0
bm1kLT5ubV9wYWRkciA9IDA7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorbmV0bWFwX21lbV9w
dF9ndWVzdF9pZl9vZmZzZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCB2b2lkICp2
YWRkcikKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBf
bWVtX3B0ZyAqKW5tZDsKKworCXJldHVybiAoY29uc3QgY2hhciAqKSh2YWRkcikgLSAoY2hhciAq
KShwdG5tZC0+bm1fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0
X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7CisJaWYgKG5tZCA9PSBOVUxMKQor
CQlyZXR1cm47CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7
CisJaWYgKG5tZC0+YWN0aXZlID4gMCkKKwkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9y
IHdpdGggYWN0aXZlPSVkISIsIG5tZC0+YWN0aXZlKTsKKwlpZiAobmV0bWFwX3ZlcmJvc2UpCisJ
CUQoImRvbmUgZGVsZXRpbmcgJXAiLCBubWQpOworCU5NQV9MT0NLX0RFU1RST1kobm1kKTsKKwlu
bV9vc19mcmVlKG5tZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX2lmICoKK25ldG1hcF9t
ZW1fcHRfZ3Vlc3RfaWZfbmV3KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0
IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKiluYS0+bm1f
bWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWY7CisJc3RydWN0IG5ldG1hcF9pZiAqbmlmcCA9
IE5VTEw7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKworCXB0aWYgPSBuZXRtYXBfbWVtX3B0
X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwgbmEtPmlmcCk7CisJaWYgKHB0aWYgPT0gTlVM
TCkgeworCQlEKCJFcnJvcjogaW50ZXJmYWNlICVwIGlzIG5vdCBpbiBwYXNzdGhyb3VnaCIsIG5h
LT5pZnApOworCQlnb3RvIG91dDsKKwl9CisKKwluaWZwID0gKHN0cnVjdCBuZXRtYXBfaWYgKiko
KGNoYXIgKikocHRubWQtPm5tX2FkZHIpICsKKwkJCQkgICAgcHRpZi0+bmlmcF9vZmZzZXQpOwor
CU5NQV9VTkxPQ0sobmEtPm5tX21lbSk7CitvdXQ6CisJcmV0dXJuIG5pZnA7Cit9CisKK3N0YXRp
YyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0
ZXIgKm5hLCBzdHJ1Y3QgbmV0bWFwX2lmICpuaWZwKQoreworCXN0cnVjdCBtZW1fcHRfaWYgKnB0
aWY7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVz
dF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5pZnApOworCWlmIChwdGlmID09IE5VTEwpIHsK
KwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBub3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZw
KTsKKwl9CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsKK30KKworc3RhdGljIGludAorbmV0bWFw
X21lbV9wdF9ndWVzdF9yaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sK
KwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAq
KW5hLT5ubV9tZW07CisJc3RydWN0IG1lbV9wdF9pZiAqcHRpZjsKKwlzdHJ1Y3QgbmV0bWFwX2lm
ICpuaWZwOworCWludCBpLCBlcnJvciA9IC0xOworCisJTk1BX0xPQ0sobmEtPm5tX21lbSk7CisK
KwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5p
ZnApOworCWlmIChwdGlmID09IE5VTEwpIHsKKwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBu
b3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZwKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwkvKiBw
b2ludCBlYWNoIGtyaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgcmluZyAqLworCW5p
ZnAgPSAoc3RydWN0IG5ldG1hcF9pZiAqKSgoY2hhciAqKXB0bm1kLT5ubV9hZGRyICsgcHRpZi0+
bmlmcF9vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPD0gbmEtPm51bV90eF9yaW5nczsgaSsrKSB7
CisJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gbmEtPnR4X3JpbmdzICsgaTsKKwkJaWYg
KGtyaW5nLT5yaW5nKQorCQkJY29udGludWU7CisJCWtyaW5nLT5yaW5nID0gKHN0cnVjdCBuZXRt
YXBfcmluZyAqKQorCQkJKChjaGFyICopbmlmcCArIG5pZnAtPnJpbmdfb2ZzW2ldKTsKKwl9CisJ
Zm9yIChpID0gMDsgaSA8PSBuYS0+bnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IG5ldG1h
cF9rcmluZyAqa3JpbmcgPSBuYS0+cnhfcmluZ3MgKyBpOworCQlpZiAoa3JpbmctPnJpbmcpCisJ
CQljb250aW51ZTsKKwkJa3JpbmctPnJpbmcgPSAoc3RydWN0IG5ldG1hcF9yaW5nICopCisJCQko
KGNoYXIgKiluaWZwICsKKwkJCSBuaWZwLT5yaW5nX29mc1tpICsgbmEtPm51bV90eF9yaW5ncyAr
IDFdKTsKKwl9CisKKwllcnJvciA9IDA7CitvdXQ6CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsK
KworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9tZW1fcHRfZ3Vlc3Rf
cmluZ3NfZGVsZXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJLyogVE9ETzogcmVt
b3ZlPz8gKi8KKyNpZiAwCisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3Qg
bmV0bWFwX21lbV9wdGcgKiluYS0+bm1fbWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWYgPSBu
ZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwKKwkJCQkJCQkJbmEtPmlm
cCk7CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBuZXRtYXBfbWVtX29wcyBuZXRtYXBfbWVt
X3B0X2d1ZXN0X29wcyA9IHsKKwkubm1kX2dldF9sdXQgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2dl
dF9sdXQsCisJLm5tZF9nZXRfaW5mbyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2luZm8sCisJ
Lm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X29mc3RvcGh5cywKKwkubm1kX2Nv
bmZpZyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfY29uZmlnLAorCS5ubWRfZmluYWxpemUgPSBuZXRt
YXBfbWVtX3B0X2d1ZXN0X2ZpbmFsaXplLAorCS5ubWRfZGVyZWYgPSBuZXRtYXBfbWVtX3B0X2d1
ZXN0X2RlcmVmLAorCS5ubWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZl9vZmZz
ZXQsCisJLm5tZF9kZWxldGUgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2RlbGV0ZSwKKwkubm1kX2lm
X25ldyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZfbmV3LAorCS5ubWRfaWZfZGVsZXRlID0gbmV0
bWFwX21lbV9wdF9ndWVzdF9pZl9kZWxldGUsCisJLm5tZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBf
bWVtX3B0X2d1ZXN0X3JpbmdzX2NyZWF0ZSwKKwkubm1kX3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF9t
ZW1fcHRfZ3Vlc3RfcmluZ3NfZGVsZXRlCiB9OworCisvKiBDYWxsZWQgd2l0aCBubV9tZW1fbGlz
dF9sb2NrIGhlbGQuICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt
X3B0X2d1ZXN0X2ZpbmRfbWVtaWQobm1fbWVtaWRfdCBtZW1faWQpCit7CisJc3RydWN0IG5ldG1h
cF9tZW1fZCAqbWVtID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpzY2FuID0gbmV0bWFw
X2xhc3RfbWVtX2Q7CisKKwlkbyB7CisJCS8qIGZpbmQgcHRuZXRtYXAgYWxsb2NhdG9yIHRocm91
Z2ggaG9zdCBJRCAqLworCQlpZiAoc2Nhbi0+b3BzLT5ubWRfZGVyZWYgPT0gbmV0bWFwX21lbV9w
dF9ndWVzdF9kZXJlZiAmJgorCQkJKChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKikoc2NhbikpLT5o
b3N0X21lbV9pZCA9PSBtZW1faWQpIHsKKwkJCW1lbSA9IHNjYW47CisJCQltZW0tPnJlZmNvdW50
Kys7CisJCQlicmVhazsKKwkJfQorCQlzY2FuID0gc2Nhbi0+bmV4dDsKKwl9IHdoaWxlIChzY2Fu
ICE9IG5ldG1hcF9sYXN0X21lbV9kKTsKKworCXJldHVybiBtZW07Cit9CisKKy8qIENhbGxlZCB3
aXRoIG5tX21lbV9saXN0X2xvY2sgaGVsZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX21lbV9k
ICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfY3JlYXRlKG5tX21lbWlkX3QgbWVtX2lkKQoreworCXN0
cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQ7CisJaW50IGVyciA9IDA7CisKKwlwdG5tZCA9IG5t
X29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fcHRnKSk7CisJaWYgKHB0bm1kID09
IE5VTEwpIHsKKwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXB0bm1kLT51
cC5vcHMgPSAmbmV0bWFwX21lbV9wdF9ndWVzdF9vcHM7CisJcHRubWQtPmhvc3RfbWVtX2lkID0g
bWVtX2lkOworCXB0bm1kLT5wdF9pZnMgPSBOVUxMOworCisgICAgICAgIC8qIEFzc2lnbiBuZXcg
aWQgaW4gdGhlIGd1ZXN0IChXZSBoYXZlIHRoZSBsb2NrKSAqLworCWVyciA9IG5tX21lbV9hc3Np
Z25faWRfbG9ja2VkKCZwdG5tZC0+dXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlw
dG5tZC0+dXAuZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVEOworCXB0bm1kLT51cC5mbGFn
cyB8PSBORVRNQVBfTUVNX0lPOworCisJTk1BX0xPQ0tfSU5JVCgmcHRubWQtPnVwKTsKKworCXNu
cHJpbnRmKHB0bm1kLT51cC5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBwdG5tZC0+dXAubm1f
aWQpOworCisKKwlyZXR1cm4gJnB0bm1kLT51cDsKK2Vycm9yOgorCW5ldG1hcF9tZW1fcHRfZ3Vl
c3RfZGVsZXRlKCZwdG5tZC0+dXApOworCXJldHVybiBOVUxMOworfQorCisvKgorICogZmluZCBo
b3N0IGlkIGluIGd1ZXN0IGFsbG9jYXRvcnMgYW5kIGNyZWF0ZSBndWVzdCBhbGxvY2F0b3IKKyAq
IGlmIGl0IGlzIG5vdCB0aGVyZQorICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCitu
ZXRtYXBfbWVtX3B0X2d1ZXN0X2dldChubV9tZW1pZF90IG1lbV9pZCkKK3sKKwlzdHJ1Y3QgbmV0
bWFwX21lbV9kICpubWQ7CisKKwlOTV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKwlubWQg
PSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2ZpbmRfbWVtaWQobWVtX2lkKTsKKwlpZiAobm1kID09IE5V
TEwpIHsKKwkJbm1kID0gbmV0bWFwX21lbV9wdF9ndWVzdF9jcmVhdGUobWVtX2lkKTsKKwl9CisJ
Tk1fTVRYX1VOTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiBubWQ7Cit9CisKKy8q
CisgKiBUaGUgZ3Vlc3QgYWxsb2NhdG9yIGNhbiBiZSBjcmVhdGVkIGJ5IHB0bmV0bWFwX21lbWRl
diAoZHVyaW5nIHRoZSBkZXZpY2UKKyAqIGF0dGFjaCkgb3IgYnkgcHRuZXRtYXAgZGV2aWNlIChw
dG5ldCksIGR1cmluZyB0aGUgbmV0bWFwX2F0dGFjaC4KKyAqCisgKiBUaGUgb3JkZXIgaXMgbm90
IGltcG9ydGFudCAod2UgaGF2ZSBkaWZmZXJlbnQgb3JkZXIgaW4gTElOVVggYW5kIEZyZWVCU0Qp
LgorICogVGhlIGZpcnN0IG9uZSwgY3JlYXRlcyB0aGUgZGV2aWNlLCBhbmQgdGhlIHNlY29uZCBv
bmUgc2ltcGx5IGF0dGFjaGVzIGl0LgorICovCisKKy8qIENhbGxlZCB3aGVuIHB0bmV0bWFwX21l
bWRldiBpcyBhdHRhY2hpbmcsIHRvIGF0dGFjaCBhIG5ldyBhbGxvY2F0b3IgaW4KKyAqIHRoZSBn
dWVzdCAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVtX3B0X2d1ZXN0X2F0dGFj
aChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICpwdG5fZGV2LCBubV9tZW1pZF90IG1lbV9pZCkKK3sK
KwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5t
ZDsKKworCW5tZCA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0KG1lbV9pZCk7CisKKwkvKiBhc3Np
Z24gdGhpcyBkZXZpY2UgdG8gdGhlIGd1ZXN0IGFsbG9jYXRvciAqLworCWlmIChubWQpIHsKKwkJ
cHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCQlwdG5tZC0+cHRuX2RldiA9
IHB0bl9kZXY7CisJfQorCisJcmV0dXJuIG5tZDsKK30KKworLyogQ2FsbGVkIHdoZW4gcHRuZXQg
ZGV2aWNlIGlzIGF0dGFjaGluZyAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt
X3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKmlmcCwKKwkJCXVuc2lnbmVkIGludCBuaWZwX29m
ZnNldCwKKwkJCXVuc2lnbmVkIGludCBtZW1pZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpu
bWQ7CisKKwlpZiAoaWZwID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1kID0g
bmV0bWFwX21lbV9wdF9ndWVzdF9nZXQoKG5tX21lbWlkX3QpbWVtaWQpOworCisJaWYgKG5tZCkg
eworCQluZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9hZGQobm1kLCBpZnAsIG5pZnBfb2Zmc2V0KTsK
Kwl9CisKKwlyZXR1cm4gbm1kOworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAq
LwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCAvdXNy
L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0xMS0yMyAxNjo1Nzo1
Ny44NTI1MTgwMDAgKzAwMDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTQgTWF0dGVvIExhbmRpLCBMdWlnaSBSaXp6bywgR2l1c2VwcGUgTGV0dGllcmkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFu
ZGkKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEx1aWdpIFJpenpvCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNiBHaXVzZXBwZSBMZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjcsNyBAQAogICovCiAK
IC8qCi0gKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv
c3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYyAyMzQyOTAgMjAxMi0wNC0xNCAxNjo0NDoxOFog
bHVpZ2kgJAogICoKICAqIChOZXcpIG1lbW9yeSBhbGxvY2F0b3IgZm9yIG5ldG1hcAogICovCkBA
IC0xMTYsOSArMTE5LDE0IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCBuZXRtYXBfbWVtX2Qgbm1f
bWVtOwordHlwZWRlZiB1aW50MTZfdCBubV9tZW1pZF90OwogCi12b2lkCSAgIG5ldG1hcF9tZW1f
Z2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfbHV0ICopOworaW50
CSAgIG5ldG1hcF9tZW1fZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRt
YXBfbHV0ICopOworbm1fbWVtaWRfdCBuZXRtYXBfbWVtX2dldF9pZChzdHJ1Y3QgbmV0bWFwX21l
bV9kICopOwogdm1fcGFkZHJfdCBuZXRtYXBfbWVtX29mc3RvcGh5cyhzdHJ1Y3QgbmV0bWFwX21l
bV9kICosIHZtX29vZmZzZXRfdCk7CisjaWZkZWYgX1dJTjMyCitQTURMIHdpbjMyX2J1aWxkX3Vz
ZXJfdm1fbWFwKHN0cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCk7CisjZW5kaWYKIGludAkgICBuZXRt
YXBfbWVtX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwgc3RydWN0IG5ldG1hcF9hZGFw
dGVyICopOwogaW50IAkgICBuZXRtYXBfbWVtX2luaXQodm9pZCk7CiB2b2lkIAkgICBuZXRtYXBf
bWVtX2Zpbmkodm9pZCk7CkBAIC0xMjcsMzUgKzEzNSwyNyBAQAogaW50CSAgIG5ldG1hcF9tZW1f
cmluZ3NfY3JlYXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIHZvaWQJICAgbmV0bWFwX21l
bV9yaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogdm9pZCAJICAgbmV0bWFw
X21lbV9kZXJlZihzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq
KTsKK2ludAluZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwg
dV9pbnQsIHVfaW50ICosIHVfaW50ICopOwogaW50CSAgIG5ldG1hcF9tZW1fZ2V0X2luZm8oc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqLCB1X2ludCAqc2l6ZSwgdV9pbnQgKm1lbWZsYWdzLCB1aW50MTZf
dCAqaWQpOwogc3NpemVfdCAgICBuZXRtYXBfbWVtX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21l
bV9kICosIGNvbnN0IHZvaWQgKnZhZGRyKTsKLXN0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9t
ZW1fcHJpdmF0ZV9uZXcoY29uc3QgY2hhciAqbmFtZSwKLQl1X2ludCB0eHIsIHVfaW50IHR4ZCwg
dV9pbnQgcnhyLCB1X2ludCByeGQsIHVfaW50IGV4dHJhX2J1ZnMsIHVfaW50IG5waXBlcywKLQlp
bnQqIGVycm9yKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXco
IHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2ludCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0
cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQqIGVycm9yKTsKIHZvaWQJICAgbmV0bWFwX21lbV9k
ZWxldGUoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKIAotLy8jZGVmaW5lIE5NX0RFQlVHX01FTV9Q
VVRHRVQgMQotCi0jaWZkZWYgTk1fREVCVUdfTUVNX1BVVEdFVAotCi0jZGVmaW5lIG5ldG1hcF9t
ZW1fZ2V0KG5tZCkgCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlfX25ldG1hcF9tZW1fZ2V0KG5tZCwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIG5ldG1h
cF9tZW1fcHV0KG5tZCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCV9fbmV0bWFwX21lbV9wdXQobm1k
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAotCX0gd2hpbGUgKDApCi0KLXZvaWQgX19uZXRt
YXBfbWVtX2dldChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLXZv
aWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwg
aW50KTsKLSNlbHNlIC8qICFOTV9ERUJVR19NRU1fUFVUR0VUICovCi0KLXZvaWQgbmV0bWFwX21l
bV9nZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1h
cF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CiB2b2lkIG5ldG1hcF9tZW1fcHV0KHN0
cnVjdCBuZXRtYXBfbWVtX2QgKik7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRtYXBfbWVtX2Zp
bmQobm1fbWVtaWRfdCk7CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbmV0
bWFwX21lbV9kKiBuZXRtYXBfbWVtX3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKiwKKwkJCQkJ
ICAgICB1bnNpZ25lZCBpbnQgbmlmcF9vZmZzZXQsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1l
bWlkKTsKK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXY7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRt
YXBfbWVtX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVpbnQxNl90
KTsKK2ludCBuZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAq
LCBzdHJ1Y3QgaWZuZXQgKik7CisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwogCi0j
ZW5kaWYgLyogIU5NX0RFQlVHX1BVVEdFVCAqLworaW50IG5ldG1hcF9tZW1fcG9vbHNfaW5mb19n
ZXQoc3RydWN0IG5tcmVxICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAogI2RlZmluZSBO
RVRNQVBfTUVNX1BSSVZBVEUJMHgyCS8qIGFsbG9jYXRvciB1c2VzIHByaXZhdGUgYWRkcmVzcyBz
cGFjZSAqLwogI2RlZmluZSBORVRNQVBfTUVNX0lPCQkweDQJLyogdGhlIHVuZGVybHlpbmcgbWVt
b3J5IGlzIG1tYXBwZWQgSS9PICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfbW9uaXRvci5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tb25pdG9y
LmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYwkyMDE2LTA5LTI5
IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0
bWFwX21vbml0b3IuYwkyMDE2LTEyLTAxIDA5OjUxOjI4LjcxNTEzODAwMCArMDAwMApAQCAtMSw1
ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgR2l1c2VwcGUgTGV0dGllcmkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBHaXVzZXBwZSBM
ZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjQsNyArMjUsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYyAyODU2OTYgMjAxNS0wNy0xOSAx
ODowNDo1MVogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFw
X3ptb24uYyAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAogICoKICAqIE1vbml0
b3JzCiAgKgpAQCAtMTAxLDYgKzEwMiw4IEBACiAjd2FybmluZyBPU1ggc3VwcG9ydCBpcyBvbmx5
IHBhcnRpYWwKICNpbmNsdWRlICJvc3hfZ2x1ZS5oIgogCisjZWxpZiBkZWZpbmVkKF9XSU4zMikK
KyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRm
b3JtCkBAIC0xNDUsMTkgKzE0OCwyMyBAQAogbmV0bWFwX21vbml0b3JfcnhzeW5jKHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7CiAgICAgICAgIE5EKCIlcyAleCIsIGty
aW5nLT5uYW1lLCBmbGFncyk7Ci0Ja3JpbmctPm5yX2h3Y3VyID0ga3JpbmctPnJjdXI7CisJa3Jp
bmctPm5yX2h3Y3VyID0ga3JpbmctPnJoZWFkOwogCW1iKCk7CiAgICAgICAgIHJldHVybiAwOwog
fQogCiAvKiBubV9rcmluZ3NfY3JlYXRlIGNhbGxiYWNrcyBmb3IgbW9uaXRvcnMuCi0gKiBXZSBj
b3VsZCB1c2UgdGhlIGRlZmF1bHQgbmV0bWFwX2h3X2tyaW5nc196bW9uLCBidXQKLSAqIHdlIGRv
bid0IG5lZWQgdGhlIG1icS4KICAqLwogc3RhdGljIGludAogbmV0bWFwX21vbml0b3Jfa3Jpbmdz
X2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQogewotCXJldHVybiBuZXRtYXBfa3Jp
bmdzX2NyZWF0ZShuYSwgMCk7CisJaW50IGVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUobmEs
IDApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCS8qIG92ZXJyaWRlIHRoZSBob3N0
IHJpbmdzIGNhbGxiYWNrcyAqLworCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ubV9z
eW5jID0gbmV0bWFwX21vbml0b3JfdHhzeW5jOworCW5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jp
bmdzXS5ubV9zeW5jID0gbmV0bWFwX21vbml0b3JfcnhzeW5jOworCXJldHVybiAwOwogfQogCiAv
KiBubV9rcmluZ3NfZGVsZXRlIGNhbGxiYWNrIGZvciBtb25pdG9ycyAqLwpAQCAtMTc4LDE1ICsx
ODUsMTYgQEAKIHN0YXRpYyBpbnQKIG5tX21vbml0b3JfYWxsb2Moc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcsIHVfaW50IG4pCiB7Ci0Jc2l6ZV90IGxlbjsKKwlzaXplX3Qgb2xkX2xlbiwgbGVu
OwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKipubTsKIAogCWlmIChuIDw9IGtyaW5nLT5tYXhfbW9u
aXRvcnMpCiAJCS8qIHdlIGFscmVhZHkgaGF2ZSBtb3JlIGVudHJpZXMgdGhhdCByZXF1ZXN0ZWQg
Ki8KIAkJcmV0dXJuIDA7CiAJCisJb2xkX2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICopKmtyaW5nLT5tYXhfbW9uaXRvcnM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0
bWFwX2tyaW5nICopICogbjsKLQlubSA9IHJlYWxsb2Moa3JpbmctPm1vbml0b3JzLCBsZW4sIE1f
REVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJbm0gPSBubV9vc19yZWFsbG9jKGtyaW5nLT5t
b25pdG9ycywgbGVuLCBvbGRfbGVuKTsKIAlpZiAobm0gPT0gTlVMTCkKIAkJcmV0dXJuIEVOT01F
TTsKIApAQCAtMjA1LDcgKzIxMyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBtb25pdG9y
IGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgbW9uaXRvcnMpISIsIGtyaW5nLT5uYW1lLAogCQkJ
CQlrcmluZy0+bl9tb25pdG9ycyk7CiAJCX0KLQkJZnJlZShrcmluZy0+bW9uaXRvcnMsIE1fREVW
QlVGKTsKKwkJbm1fb3NfZnJlZShrcmluZy0+bW9uaXRvcnMpOwogCQlrcmluZy0+bW9uaXRvcnMg
PSBOVUxMOwogCQlrcmluZy0+bWF4X21vbml0b3JzID0gMDsKIAkJa3JpbmctPm5fbW9uaXRvcnMg
PSAwOwpAQCAtMjI5LDIwICsyMzcsMjAgQEAKIHN0YXRpYyBpbnQKIG5ldG1hcF9tb25pdG9yX2Fk
ZChzdHJ1Y3QgbmV0bWFwX2tyaW5nICpta3JpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n
LCBpbnQgemNvcHkpCiB7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3IgPSBOTV9JUlFfQ09N
UExFVEVEOwogCiAJLyogc2luY2hyb25pemUgd2l0aCBjb25jdXJyZW50bHkgcnVubmluZyBubV9z
eW5jKClzICovCi0Jbm1fa3JfZ2V0KGtyaW5nKTsKKwlubV9rcl9zdG9wKGtyaW5nLCBOTV9LUl9M
T0NLRUQpOwogCS8qIG1ha2Ugc3VyZSB0aGUgbW9uaXRvciBhcnJheSBleGlzdHMgYW5kIGlzIGJp
ZyBlbm91Z2ggKi8KIAllcnJvciA9IG5tX21vbml0b3JfYWxsb2Moa3JpbmcsIGtyaW5nLT5uX21v
bml0b3JzICsgMSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAlrcmluZy0+bW9uaXRvcnNb
a3JpbmctPm5fbW9uaXRvcnNdID0gbWtyaW5nOwotCW1rcmluZy0+bW9uX3BvcyA9IGtyaW5nLT5u
X21vbml0b3JzOworCW1rcmluZy0+bW9uX3Bvc1trcmluZy0+dHhdID0ga3JpbmctPm5fbW9uaXRv
cnM7CiAJa3JpbmctPm5fbW9uaXRvcnMrKzsKIAlpZiAoa3JpbmctPm5fbW9uaXRvcnMgPT0gMSkg
ewogCQkvKiB0aGlzIGlzIHRoZSBmaXJzdCBtb25pdG9yLCBpbnRlcmNlcHQgY2FsbGJhY2tzICov
Ci0JCUQoIiVzOiBpbnRlcmNlcHQgY2FsbGJhY2tzIG9uICVzIiwgbWtyaW5nLT5uYW1lLCBrcmlu
Zy0+bmFtZSk7CisJCU5EKCIlczogaW50ZXJjZXB0IGNhbGxiYWNrcyBvbiAlcyIsIG1rcmluZy0+
bmFtZSwga3JpbmctPm5hbWUpOwogCQlrcmluZy0+bW9uX3N5bmMgPSBrcmluZy0+bm1fc3luYzsK
IAkJLyogemNvcHkgbW9uaXRvcnMgZG8gbm90IG92ZXJyaWRlIG5tX25vdGlmeSgpLCBidXQKIAkJ
ICogd2Ugc2F2ZSB0aGUgb3JpZ2luYWwgb25lIHJlZ2FyZGxlc3MsIHNvIHRoYXQKQEAgLTI2NSw3
ICsyNzMsNyBAQAogCX0KIAogb3V0OgotCW5tX2tyX3B1dChrcmluZyk7CisJbm1fa3Jfc3RhcnQo
a3JpbmcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjc2LDI4ICsyODQsMzAgQEAKIHN0YXRp
YyB2b2lkCiBuZXRtYXBfbW9uaXRvcl9kZWwoc3RydWN0IG5ldG1hcF9rcmluZyAqbWtyaW5nLCBz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKIHsKKwl1aW50MzJfdCBtb25fcG9zOwogCS8qIHNp
bmNocm9uaXplIHdpdGggY29uY3VycmVudGx5IHJ1bm5pbmcgbm1fc3luYygpcyAqLwotCW5tX2ty
X2dldChrcmluZyk7CisJbm1fa3Jfc3RvcChrcmluZywgTk1fS1JfTE9DS0VEKTsKIAlrcmluZy0+
bl9tb25pdG9ycy0tOwotCWlmIChta3JpbmctPm1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMp
IHsKLQkJa3JpbmctPm1vbml0b3JzW21rcmluZy0+bW9uX3Bvc10gPSBrcmluZy0+bW9uaXRvcnNb
a3JpbmctPm5fbW9uaXRvcnNdOwotCQlrcmluZy0+bW9uaXRvcnNbbWtyaW5nLT5tb25fcG9zXS0+
bW9uX3BvcyA9IG1rcmluZy0+bW9uX3BvczsKKwltb25fcG9zID0gbWtyaW5nLT5tb25fcG9zW2ty
aW5nLT50eF07CisJaWYgKG1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMpIHsKKwkJa3Jpbmct
Pm1vbml0b3JzW21vbl9wb3NdID0ga3JpbmctPm1vbml0b3JzW2tyaW5nLT5uX21vbml0b3JzXTsK
KwkJa3JpbmctPm1vbml0b3JzW21vbl9wb3NdLT5tb25fcG9zW2tyaW5nLT50eF0gPSBtb25fcG9z
OwogCX0KIAlrcmluZy0+bW9uaXRvcnNba3JpbmctPm5fbW9uaXRvcnNdID0gTlVMTDsKIAlpZiAo
a3JpbmctPm5fbW9uaXRvcnMgPT0gMCkgewogCQkvKiB0aGlzIHdhcyB0aGUgbGFzdCBtb25pdG9y
LCByZXN0b3JlIGNhbGxiYWNrcyAgYW5kIGRlbGV0ZSBtb25pdG9yIGFycmF5ICovCi0JCUQoIiVz
OiByZXN0b3Jpbmcgc3luYyBvbiAlczogJXAiLCBta3JpbmctPm5hbWUsIGtyaW5nLT5uYW1lLCBr
cmluZy0+bW9uX3N5bmMpOworCQlORCgiJXM6IHJlc3RvcmluZyBzeW5jIG9uICVzOiAlcCIsIG1r
cmluZy0+bmFtZSwga3JpbmctPm5hbWUsIGtyaW5nLT5tb25fc3luYyk7CiAJCWtyaW5nLT5ubV9z
eW5jID0ga3JpbmctPm1vbl9zeW5jOwogCQlrcmluZy0+bW9uX3N5bmMgPSBOVUxMOwogCQlpZiAo
a3JpbmctPnR4ID09IE5SX1JYKSB7Ci0JCQlEKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczog
JXAiLCAKKwkJCU5EKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczogJXAiLAogCQkJCQlta3Jp
bmctPm5hbWUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bW9uX25vdGlmeSk7CiAJCQlrcmluZy0+bm1f
bm90aWZ5ID0ga3JpbmctPm1vbl9ub3RpZnk7CiAJCQlrcmluZy0+bW9uX25vdGlmeSA9IE5VTEw7
CiAJCX0KIAkJbm1fbW9uaXRvcl9kZWFsbG9jKGtyaW5nKTsKIAl9Ci0Jbm1fa3JfcHV0KGtyaW5n
KTsKKwlubV9rcl9zdGFydChrcmluZyk7CiB9CiAKIApAQCAtMzE2LDcgKzMyNiw3IEBACiAJZm9y
X3J4X3R4KHQpIHsKIAkJdV9pbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmlu
Z3MobmEsIHQpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0
KSArIDE7IGkrKykgewogCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0
KVtpXTsKIAkJCXVfaW50IGo7CiAKQEAgLTMyNiw4ICszMzYsMTAgQEAKIAkJCQlzdHJ1Y3QgbmV0
bWFwX21vbml0b3JfYWRhcHRlciAqbW5hID0KIAkJCQkJKHN0cnVjdCBuZXRtYXBfbW9uaXRvcl9h
ZGFwdGVyICopbWtyaW5nLT5uYTsKIAkJCQkvKiBmb3JnZXQgYWJvdXQgdGhpcyBhZGFwdGVyICov
Ci0JCQkJbmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7Ci0JCQkJbW5hLT5wcml2
Lm5wX25hID0gTlVMTDsKKwkJCQlpZiAobW5hLT5wcml2Lm5wX25hICE9IE5VTEwpIHsKKwkJCQkJ
bmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7CisJCQkJCW1uYS0+cHJpdi5ucF9u
YSA9IE5VTEw7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMzQ2LDcgKzM1OCw3IEBACiAJc3Ry
dWN0IG5ldG1hcF9hZGFwdGVyICpwbmEgPSBwcml2LT5ucF9uYTsKIAlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZywgKm1rcmluZzsKIAlpbnQgaTsKLQllbnVtIHR4cnggdDsKKwllbnVtIHR4cngg
dCwgczsKIAogCU5EKCIlcDogb25vZmYgJWQiLCBuYSwgb25vZmYpOwogCWlmIChvbm9mZikgewpA
QCAtMzU2LDI3ICszNjgsNDggQEAKIAkJCXJldHVybiBFTlhJTzsKIAkJfQogCQlmb3JfcnhfdHgo
dCkgewotCQkJaWYgKG1uYS0+ZmxhZ3MgJiBubV90eHJ4MmZsYWcodCkpIHsKLQkJCQlmb3IgKGkg
PSBwcml2LT5ucF9xZmlyc3RbdF07IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7Ci0JCQkJ
CWtyaW5nID0gJk5NUihwbmEsIHQpW2ldOwotCQkJCQlta3JpbmcgPSAmbmEtPnJ4X3JpbmdzW2ld
OwotCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1vbik7CisJCQlmb3Ig
KGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJbWtyaW5n
ID0gJk5NUihuYSwgdClbaV07CisJCQkJaWYgKCFubV9rcmluZ19wZW5kaW5nX29uKG1rcmluZykp
CisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJ
CQkJaWYgKHQgPT0gTlJfVFgpCisJCQkJCWNvbnRpbnVlOworCQkJCWZvcl9yeF90eChzKSB7CisJ
CQkJCWlmIChpID4gbm1hX2dldF9ucmluZ3MocG5hLCBzKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyhzKSkgeworCQkJCQkJa3JpbmcgPSAmTk1S
KHBuYSwgcylbaV07CisJCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1v
bik7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRN
QVBfT047CiAJfSBlbHNlIHsKLQkJaWYgKHBuYSA9PSBOVUxMKSB7Ci0JCQlEKCIlczogcGFyZW50
IGxlZnQgbmV0bWFwIG1vZGUsIG5vdGhpbmcgdG8gcmVzdG9yZSIsIG5hLT5uYW1lKTsKLQkJCXJl
dHVybiAwOwotCQl9Ci0JCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJaWYgKG5h
LT5hY3RpdmVfZmRzID09IDApCisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CiAJ
CWZvcl9yeF90eCh0KSB7Ci0JCQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyh0KSkgewot
CQkJCWZvciAoaSA9IHByaXYtPm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBp
KyspIHsKLQkJCQkJa3JpbmcgPSAmTk1SKHBuYSwgdClbaV07Ci0JCQkJCW1rcmluZyA9ICZuYS0+
cnhfcmluZ3NbaV07Ci0JCQkJCW5ldG1hcF9tb25pdG9yX2RlbChta3JpbmcsIGtyaW5nKTsKKwkJ
CWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlt
a3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCQlpZiAoIW5tX2tyaW5nX3BlbmRpbmdfb2ZmKG1r
cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBf
T0ZGOworCQkJCWlmICh0ID09IE5SX1RYKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiB3ZSBjYW5u
b3QgYWNjZXNzIHRoZSBwYXJlbnQga3JpbmdzIGlmIHRoZSBwYXJlbnQKKwkJCQkgKiBoYXMgbGVm
dCBuZXRtYXAgbW9kZS4gVGhpcyBpcyBzaWduYWxlZCBieSBhIE5VTEwKKwkJCQkgKiBwbmEgcG9p
bnRlcgorCQkJCSAqLworCQkJCWlmIChwbmEgPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJ
Zm9yX3J4X3R4KHMpIHsKKwkJCQkJaWYgKGkgPiBubWFfZ2V0X25yaW5ncyhwbmEsIHMpKQorCQkJ
CQkJY29udGludWU7CisJCQkJCWlmIChtbmEtPmZsYWdzICYgbm1fdHhyeDJmbGFnKHMpKSB7CisJ
CQkJCQlrcmluZyA9ICZOTVIocG5hLCBzKVtpXTsKKwkJCQkJCW5ldG1hcF9tb25pdG9yX2RlbCht
a3JpbmcsIGtyaW5nKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzg2LDcgKzQxOSw3
IEBACiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6ZXJvLWNvcHkg
bW9uaXRvcnMgICAgICAgICAgICAgICAgICAgIAorICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6
ZXJvLWNvcHkgbW9uaXRvcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtNDE0LDExICs0NDcsMTEgQEAK
IAogCS8qIGdldCB0aGUgcmVsYXNlZCBzbG90cyAocmVsX3Nsb3RzKSAqLwogCWlmICh0eCA9PSBO
Ul9UWCkgewotCQliZWcgPSBrcmluZy0+bnJfaHd0YWlsOworCQliZWcgPSBrcmluZy0+bnJfaHd0
YWlsICsgMTsKIAkJZXJyb3IgPSBrcmluZy0+bW9uX3N5bmMoa3JpbmcsIGZsYWdzKTsKIAkJaWYg
KGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQllbmQgPSBrcmluZy0+bnJfaHd0YWlsOworCQll
bmQgPSBrcmluZy0+bnJfaHd0YWlsICsgMTsKIAl9IGVsc2UgeyAvKiBOUl9SWCAqLwogCQliZWcg
PSBrcmluZy0+bnJfaHdjdXI7CiAJCWVuZCA9IGtyaW5nLT5yaGVhZDsKQEAgLTQ1MywxMCArNDg2
LDEwIEBACiAJLyogc3dhcCBtaW4oZnJlZV9zbG90cywgcmVsX3Nsb3RzKSBzbG90cyAqLwogCWlm
IChmcmVlX3Nsb3RzIDwgcmVsX3Nsb3RzKSB7CiAJCWJlZyArPSAocmVsX3Nsb3RzIC0gZnJlZV9z
bG90cyk7Ci0JCWlmIChiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpCi0JCQliZWcgLT0ga3Jp
bmctPm5rcl9udW1fc2xvdHM7CiAJCXJlbF9zbG90cyA9IGZyZWVfc2xvdHM7CiAJfQorCWlmICh1
bmxpa2VseShiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpKQorCQliZWcgLT0ga3JpbmctPm5r
cl9udW1fc2xvdHM7CiAKIAlzZW50ID0gcmVsX3Nsb3RzOwogCWZvciAoIDsgcmVsX3Nsb3RzOyBy
ZWxfc2xvdHMtLSkgewpAQCAtNTM0LDcgKzU2Nyw3IEBACiAKIC8qCiAgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVu
Y3Rpb25zIHNwZWNpZmljIGZvciBjb3B5IG1vbml0b3JzICAgICAgICAgICAgICAgICAgICAKKyAq
IGZ1bmN0aW9ucyBzcGVjaWZpYyBmb3IgY29weSBtb25pdG9ycwogICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCkBA
IC02NTIsMTcgKzY4NSwyNyBAQAogc3RhdGljIGludAogbmV0bWFwX21vbml0b3JfcGFyZW50X25v
dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQogeworCWludCAoKm5v
dGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyosIGludCk7CiAJTkQoNSwgIiVzICV4Iiwga3Jpbmct
Pm5hbWUsIGZsYWdzKTsKIAkvKiA/eHN5bmMgY2FsbGJhY2tzIGhhdmUgdHJ5Z2V0IGNhbGxlZCBi
eSB0aGVpciBjYWxsZXJzCiAJICogKE5JT0NSRUdJRiBhbmQgcG9sbCgpKSwgYnV0IGhlcmUgd2Ug
aGF2ZSB0byBjYWxsIGl0CiAJICogYnkgb3Vyc2VsZgogCSAqLwotCWlmIChubV9rcl90cnlnZXQo
a3JpbmcpKQotCQlnb3RvIG91dDsKLQluZXRtYXBfbW9uaXRvcl9wYXJlbnRfcnhzeW5jKGtyaW5n
LCBOQUZfRk9SQ0VfUkVBRCk7CisJaWYgKG5tX2tyX3RyeWdldChrcmluZywgMCwgTlVMTCkpIHsK
KwkJLyogaW4gYWxsIGNhc2VzLCBqdXN0IHNraXAgdGhlIHN5bmMgKi8KKwkJcmV0dXJuIE5NX0lS
UV9DT01QTEVURUQ7CisJfQorCWlmIChrcmluZy0+bl9tb25pdG9ycyA+IDApIHsKKwkJbmV0bWFw
X21vbml0b3JfcGFyZW50X3J4c3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQUQpOworCQlub3RpZnkg
PSBrcmluZy0+bW9uX25vdGlmeTsKKwl9IGVsc2UgeworCQkvKiB3ZSBhcmUgbm8gbG9uZ2VyIG1v
bml0b3JpbmcgdGhpcyByaW5nLCBzbyBib3RoCisJCSAqIG1vbl9zeW5jIGFuZCBtb25fbm90aWZ5
IGFyZSBOVUxMCisJCSAqLworCQlub3RpZnkgPSBrcmluZy0+bm1fbm90aWZ5OworCX0KIAlubV9r
cl9wdXQoa3JpbmcpOwotb3V0OgotICAgICAgICByZXR1cm4ga3JpbmctPm1vbl9ub3RpZnkoa3Jp
bmcsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIG5vdGlmeShrcmluZywgZmxhZ3MpOwogfQogCiAK
QEAgLTY5MSwyMCArNzM0LDI3IEBACiAJc3RydWN0IG5tcmVxIHBubXI7CiAJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpwbmE7IC8qIHBhcmVudCBhZGFwdGVyICovCiAJc3RydWN0IG5ldG1hcF9tb25p
dG9yX2FkYXB0ZXIgKm1uYTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IE5VTEw7CiAJaW50IGksIGVy
cm9yOwogCWVudW0gdHhyeCB0OwogCWludCB6Y29weSA9IChubXItPm5yX2ZsYWdzICYgTlJfWkNP
UFlfTU9OKTsKIAljaGFyIG1vbnN1ZmZbMTBdID0gIiI7CiAKIAlpZiAoKG5tci0+bnJfZmxhZ3Mg
JiAoTlJfTU9OSVRPUl9UWCB8IE5SX01PTklUT1JfUlgpKSA9PSAwKSB7CisJCWlmIChubXItPm5y
X2ZsYWdzICYgTlJfWkNPUFlfTU9OKSB7CisJCQkvKiB0aGUgZmxhZyBtYWtlcyBubyBzZW5zZSB1
bmxlc3MgeW91IGFyZQorCQkJICogY3JlYXRpbmcgYSBtb25pdG9yCisJCQkgKi8KKwkJCXJldHVy
biBFSU5WQUw7CisJCX0KIAkJTkQoIm5vdCBhIG1vbml0b3IiKTsKIAkJcmV0dXJuIDA7CiAJfQog
CS8qIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhIG1vbml0b3IgYWRhcHRlciAqLwogCi0JRCgiZmxh
Z3MgJXgiLCBubXItPm5yX2ZsYWdzKTsKKwlORCgiZmxhZ3MgJXgiLCBubXItPm5yX2ZsYWdzKTsK
IAotCW1uYSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVS
Tyk7CisJbW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxM
KSB7CiAJCUQoIm1lbW9yeSBlcnJvciIpOwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtNzE2LDEzICs3
NjYsMTQgQEAKIAkgKiBleGNlcHQgb3RoZXIgbW9uaXRvcnMuCiAJICovCiAJbWVtY3B5KCZwbm1y
LCBubXIsIHNpemVvZihwbm1yKSk7Ci0JcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFgg
fCBOUl9NT05JVE9SX1JYKTsKLQllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsIGNy
ZWF0ZSk7CisJcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFggfCBOUl9NT05JVE9SX1JY
IHwgTlJfWkNPUFlfTU9OKTsKKwllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsICZp
ZnAsIGNyZWF0ZSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoInBhcmVudCBsb29rdXAgZmFpbGVkOiAl
ZCIsIGVycm9yKTsKKwkJbm1fb3NfZnJlZShtbmEpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCUQo
ImZvdW5kIHBhcmVudDogJXMiLCBwbmEtPm5hbWUpOworCU5EKCJmb3VuZCBwYXJlbnQ6ICVzIiwg
cG5hLT5uYW1lKTsKIAogCWlmICghbm1fbmV0bWFwX29uKHBuYSkpIHsKIAkJLyogcGFyZW50IG5v
dCBpbiBuZXRtYXAgbW9kZSAqLwpAQCAtNzcwLDggKzgyMSwxMCBAQAogCQkvKiB0byBoYXZlIHpl
cm8gY29weSwgd2UgbmVlZCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRvcgogCQkgKiBh
cyB0aGUgbW9uaXRvcmVkIHBvcnQKIAkJICovCi0JCW1uYS0+dXAubm1fbWVtID0gcG5hLT5ubV9t
ZW07CisJCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwogCQlt
bmEtPnVwLm5hX2x1dCA9IHBuYS0+bmFfbHV0OworCQkvKiBhbmQgdGhlIGFsbG9jYXRvciBjYW5u
b3QgYmUgY2hhbmdlZCAqLworCQltbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CiAJ
fSBlbHNlIHsKIAkJLyogbm9ybWFsIG1vbml0b3JzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB6ZXJv
IGNvcHkgb25lcyAqLwogCQlmb3JfcnhfdHgodCkgewpAQCAtNzk0LDcgKzg0Nyw3IEBACiAJfQog
CiAJLyogdGhlIG1vbml0b3Igc3VwcG9ydHMgdGhlIGhvc3QgcmluZ3MgaWZmIHRoZSBwYXJlbnQg
ZG9lcyAqLwotCW1uYS0+dXAubmFfZmxhZ3MgPSAocG5hLT5uYV9mbGFncyAmIE5BRl9IT1NUX1JJ
TkdTKTsKKwltbmEtPnVwLm5hX2ZsYWdzIHw9IChwbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklO
R1MpOwogCS8qIGEgZG8tbm90aGluZyB0eHN5bmM6IG1vbml0b3JzIGNhbm5vdCBiZSB1c2VkIHRv
IGluamVjdCBwYWNrZXRzICovCiAJbW5hLT51cC5ubV90eHN5bmMgPSBuZXRtYXBfbW9uaXRvcl90
eHN5bmM7CiAJbW5hLT51cC5ubV9yeHN5bmMgPSBuZXRtYXBfbW9uaXRvcl9yeHN5bmM7CkBAIC04
MjksMjAgKzg4MiwxOCBAQAogCSpuYSA9ICZtbmEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgq
bmEpOwogCi0JLyogd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhf
cmluZ3MgPSBtbmEtPnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gbW5hLT51
cC5udW1fcnhfcmluZ3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IG1uYS0+dXAubnVtX3R4X2Rlc2M7
Ci0Jbm1yLT5ucl9yeF9zbG90cyA9IG1uYS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRo
ZSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCAqLwotCUQoIm1vbml0b3Igb2siKTsKKwlORCgibW9u
aXRvciBvayIpOworCisJLyogZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBpZnAsIGlmIGFueSAq
LworCWlmIChpZnApCisJCWlmX3JlbGUoaWZwKTsKIAogCXJldHVybiAwOwogCiBwdXRfb3V0Ogot
CW5ldG1hcF9hZGFwdGVyX3B1dChwbmEpOwotCWZyZWUobW5hLCBNX0RFVkJVRik7CisJbmV0bWFw
X3VuZ2V0X25hKHBuYSwgaWZwKTsKKwlubV9vc19mcmVlKG1uYSk7CiAJcmV0dXJuIGVycm9yOwog
fQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGlu
Z3MuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwotLS0gdXNy
L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwkyMDE2LTA5LTI5IDAwOjI0
OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX29m
ZmxvYWRpbmdzLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM1MTMwMDAgKzAwMDAKQEAgLTEsNSAr
MSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVmluY2Vuem8gTWFm
ZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8qICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyAyOTg5
NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9k
ZXYvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0
WiBsdWlnaSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTMxLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4JLyogZGVmaW5lcyB1c2VkIGluIGtlcm5lbC5oICovCi0jaW5jbHVkZSA8c3lzL21hbGxvYy5o
PgkvKiB0eXBlcyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwogI2luY2x1ZGUgPHN5
cy9rZXJuZWwuaD4JLyogdHlwZXMgdXNlZCBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KICNp
bmNsdWRlIDxzeXMvc29ja2lvLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUg
PHN5cy9zb2NrZXR2YXIuaD4JLyogc3RydWN0IHNvY2tldCAqLwogI2luY2x1ZGUgPHN5cy9zb2Nr
ZXQuaD4gLyogc29ja2FkZHJzICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CkBAIC02NCwyMSArNjUs
MjEgQEAKIC8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgYmRnX21pc21hdGNoX2RhdGFwYXRo
KCkgd2hlbiBpdCBmaW5pc2hlcwogICogYWNjdW11bGF0aW5nIGJ5dGVzIGZvciBhIHNlZ21lbnQs
IGluIG9yZGVyIHRvIGZpeCBzb21lIGZpZWxkcyBpbiB0aGUKICAqIHNlZ21lbnQgaGVhZGVycyAo
d2hpY2ggc3RpbGwgY29udGFpbiB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBoZWFkZXIKLSAqIG9m
IHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ2J1ZicgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcg
KGUuZy4KLSAqIHRoZSBldGhlcm5ldCBoZWFkZXIpIG9mIHRoZSBzZWdtZW50LCBhbmQgJ2xlbicg
aXMgaXRzIGxlbmd0aC4KKyAqIG9mIHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ3BrdCcgcG9p
bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIElQCisgKiBoZWFkZXIgb2YgdGhlIHNlZ21lbnQs
IHdoaWxlICdsZW4nIGlzIHRoZSBsZW5ndGggb2YgdGhlIElQIHBhY2tldC4KICAqLwotc3RhdGlj
IHZvaWQgZ3NvX2ZpeF9zZWdtZW50KHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbiwgdV9pbnQgaWR4
LAotCQkJICAgIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9zZWdtZW50LAotCQkJ
ICAgIHVfaW50IHRjcCwgdV9pbnQgaXBobGVuKQorc3RhdGljIHZvaWQKK2dzb19maXhfc2VnbWVu
dCh1aW50OF90ICpwa3QsIHNpemVfdCBsZW4sIHVfaW50IGlwdjQsIHVfaW50IGlwaGxlbiwgdV9p
bnQgdGNwLAorCQl1X2ludCBpZHgsIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9z
ZWdtZW50KQogewotCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKShi
dWYgKyAxNCk7Ci0Jc3RydWN0IG5tX2lwdjZoZHIgKmlwNmggPSAoc3RydWN0IG5tX2lwdjZoZHIg
KikoYnVmICsgMTQpOworCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAq
KShwa3QpOworCXN0cnVjdCBubV9pcHY2aGRyICppcDZoID0gKHN0cnVjdCBubV9pcHY2aGRyICop
KHBrdCk7CiAJdWludDE2X3QgKmNoZWNrID0gTlVMTDsKIAl1aW50OF90ICpjaGVja19kYXRhID0g
TlVMTDsKIAotCWlmIChpcGhsZW4gPT0gMjApIHsKKwlpZiAoaXB2NCkgewogCQkvKiBTZXQgdGhl
IElQdjQgIlRvdGFsIExlbmd0aCIgZmllbGQuICovCi0JCWlwaC0+dG90X2xlbiA9IGh0b2JlMTYo
bGVuLTE0KTsKKwkJaXBoLT50b3RfbGVuID0gaHRvYmUxNihsZW4pOwogCQlORCgiaXAgdG90YWwg
bGVuZ3RoICV1IiwgYmUxNnRvaChpcC0+dG90X2xlbikpOwogCiAJCS8qIFNldCB0aGUgSVB2NCAi
SWRlbnRpZmljYXRpb24iIGZpZWxkLiAqLwpAQCAtODcsMTUgKzg4LDE1IEBACiAKIAkJLyogQ29t
cHV0ZSBhbmQgaW5zZXJ0IHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bS4gKi8KIAkJaXBoLT5jaGVj
ayA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSBubV9jc3VtX2lwdjQoaXBoKTsKKwkJaXBoLT5jaGVjayA9
IG5tX29zX2NzdW1faXB2NChpcGgpOwogCQlORCgiSVAgY3N1bSAleCIsIGJlMTZ0b2goaXBoLT5j
aGVjaykpOwotCX0gZWxzZSB7LyogaWYgKGlwaGxlbiA9PSA0MCkgKi8KKwl9IGVsc2UgewogCQkv
KiBTZXQgdGhlIElQdjYgIlBheWxvYWQgTGVuIiBmaWVsZC4gKi8KLQkJaXA2aC0+cGF5bG9hZF9s
ZW4gPSBodG9iZTE2KGxlbi0xNC1pcGhsZW4pOworCQlpcDZoLT5wYXlsb2FkX2xlbiA9IGh0b2Jl
MTYobGVuLWlwaGxlbik7CiAJfQogCiAJaWYgKHRjcCkgewotCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0
Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qg
bm1fdGNwaGRyICp0Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikocGt0ICsgaXBobGVuKTsKIAog
CQkvKiBTZXQgdGhlIFRDUCBzZXF1ZW5jZSBudW1iZXIuICovCiAJCXRjcGgtPnNlcSA9IGh0b2Jl
MzIoYmUzMnRvaCh0Y3BoLT5zZXEpICsgc2VnbWVudGVkX2J5dGVzKTsKQEAgLTExMCwxMCArMTEx
LDEwIEBACiAJCWNoZWNrID0gJnRjcGgtPmNoZWNrOwogCQljaGVja19kYXRhID0gKHVpbnQ4X3Qg
Kil0Y3BoOwogCX0gZWxzZSB7IC8qIFVEUCAqLwotCQlzdHJ1Y3Qgbm1fdWRwaGRyICp1ZHBoID0g
KHN0cnVjdCBubV91ZHBoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qgbm1fdWRw
aGRyICp1ZHBoID0gKHN0cnVjdCBubV91ZHBoZHIgKikocGt0ICsgaXBobGVuKTsKIAogCQkvKiBT
ZXQgdGhlIFVEUCAnTGVuZ3RoJyBmaWVsZC4gKi8KLQkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4t
MTQtaXBobGVuKTsKKwkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4taXBobGVuKTsKIAogCQljaGVj
ayA9ICZ1ZHBoLT5jaGVjazsKIAkJY2hlY2tfZGF0YSA9ICh1aW50OF90ICopdWRwaDsKQEAgLTEy
MSw0OCArMTIyLDgwIEBACiAKIAkvKiBDb21wdXRlIGFuZCBpbnNlcnQgVENQL1VEUCBjaGVja3N1
bS4gKi8KIAkqY2hlY2sgPSAwOwotCWlmIChpcGhsZW4gPT0gMjApCi0JCW5tX2NzdW1fdGNwdWRw
X2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4tMTQtaXBobGVuLCBjaGVjayk7CisJaWYgKGlwdjQp
CisJCW5tX29zX2NzdW1fdGNwdWRwX2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4taXBobGVuLCBj
aGVjayk7CiAJZWxzZQotCQlubV9jc3VtX3RjcHVkcF9pcHY2KGlwNmgsIGNoZWNrX2RhdGEsIGxl
bi0xNC1pcGhsZW4sIGNoZWNrKTsKKwkJbm1fb3NfY3N1bV90Y3B1ZHBfaXB2NihpcDZoLCBjaGVj
a19kYXRhLCBsZW4taXBobGVuLCBjaGVjayk7CiAKIAlORCgiVENQL1VEUCBjc3VtICV4IiwgYmUx
NnRvaCgqY2hlY2spKTsKIH0KIAorc3RhdGljIGludAordm5ldF9oZHJfaXNfYmFkKHN0cnVjdCBu
bV92bmV0X2hkciAqdmgpCit7CisJdWludDhfdCBnc29fdHlwZSA9IHZoLT5nc29fdHlwZSAmIH5W
SVJUSU9fTkVUX0hEUl9HU09fRUNOOworCisJcmV0dXJuICgKKwkJKGdzb190eXBlICE9IFZJUlRJ
T19ORVRfSERSX0dTT19OT05FICYmCisJCSBnc29fdHlwZSAhPSBWSVJUSU9fTkVUX0hEUl9HU09f
VENQVjQgJiYKKwkJIGdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19VRFAgJiYKKwkJIGdz
b190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNikKKwkJfHwKKwkJICh2aC0+ZmxhZ3Mg
JiB+KFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTQorCQkJICAgICAgIHwgVklSVElPX05FVF9I
RFJfRl9EQVRBX1ZBTElEKSkKKwkgICAgICAgKTsKK30KIAogLyogVGhlIFZBTEUgbWlzbWF0Y2gg
ZGF0YXBhdGggaW1wbGVtZW50YXRpb24uICovCi12b2lkIGJkZ19taXNtYXRjaF9kYXRhcGF0aChz
dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKm5hLAotCQkJICAgc3RydWN0IG5ldG1hcF92cF9hZGFw
dGVyICpkc3RfbmEsCi0JCQkgICBzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwgc3RydWN0IG5ldG1h
cF9yaW5nICpyaW5nLAotCQkJICAgdV9pbnQgKmosIHVfaW50IGxpbSwgdV9pbnQgKmhvd21hbnkp
Cit2b2lkCitiZGdfbWlzbWF0Y2hfZGF0YXBhdGgoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpu
YSwKKwkJICAgICAgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpkc3RfbmEsCisJCSAgICAgIGNv
bnN0IHN0cnVjdCBubV9iZGdfZndkICpmdF9wLAorCQkgICAgICBzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KmRzdF9yaW5nLAorCQkgICAgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSkK
IHsKLQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBuZXRtYXBfc2xv
dCAqZHN0X3Nsb3QgPSBOVUxMOwogCXN0cnVjdCBubV92bmV0X2hkciAqdmggPSBOVUxMOwotCS8q
IE51bWJlciBvZiBzb3VyY2Ugc2xvdHMgdG8gcHJvY2Vzcy4gKi8KLQl1X2ludCBmcmFncyA9IGZ0
X3AtPmZ0X2ZyYWdzOwotCXN0cnVjdCBubV9iZGdfZndkICpmdF9lbmQgPSBmdF9wICsgZnJhZ3M7
CisJY29uc3Qgc3RydWN0IG5tX2JkZ19md2QgKmZ0X2VuZCA9IGZ0X3AgKyBmdF9wLT5mdF9mcmFn
czsKIAogCS8qIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMuICovCiAJdWludDhfdCAq
ZHN0LCAqc3JjOwogCXNpemVfdCBzcmNfbGVuLCBkc3RfbGVuOwogCisJLyogSW5kaWNlcyBhbmQg
Y291bnRlcnMgZm9yIHRoZSBkZXN0aW5hdGlvbiByaW5nLiAqLwogCXVfaW50IGpfc3RhcnQgPSAq
ajsKKwl1X2ludCBqX2N1ciA9IGpfc3RhcnQ7CiAJdV9pbnQgZHN0X3Nsb3RzID0gMDsKIAotCS8q
IElmIHRoZSBzb3VyY2UgcG9ydCB1c2VzIHRoZSBvZmZsb2FkaW5ncywgd2hpbGUgZGVzdGluYXRp
b24gZG9lc24ndCwKLQkgKiB3ZSBncmFiIHRoZSBzb3VyY2UgdmlydGlvLW5ldCBoZWFkZXIgYW5k
IGRvIHRoZSBvZmZsb2FkaW5ncyBoZXJlLgotCSAqLwotCWlmIChuYS0+dmlydF9oZHJfbGVuICYm
ICFkc3RfbmEtPnZpcnRfaGRyX2xlbikgewotCQl2aCA9IChzdHJ1Y3Qgbm1fdm5ldF9oZHIgKilm
dF9wLT5mdF9idWY7CisJaWYgKHVubGlrZWx5KGZ0X3AgPT0gZnRfZW5kKSkgeworCQlSRCgzLCAi
Tm8gc291cmNlIHNsb3RzIHRvIHByb2Nlc3MiKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIEluaXQg
c291cmNlIGFuZCBkZXN0IHBvaW50ZXJzLiAqLwogCXNyYyA9IGZ0X3AtPmZ0X2J1ZjsKIAlzcmNf
bGVuID0gZnRfcC0+ZnRfbGVuOwotCXNsb3QgPSAmcmluZy0+c2xvdFsqal07Ci0JZHN0ID0gTk1C
KCZkc3RfbmEtPnVwLCBzbG90KTsKKwlkc3Rfc2xvdCA9ICZkc3RfcmluZy0+c2xvdFtqX2N1cl07
CisJZHN0ID0gTk1CKCZkc3RfbmEtPnVwLCBkc3Rfc2xvdCk7CiAJZHN0X2xlbiA9IHNyY19sZW47
CiAKKwkvKiBJZiB0aGUgc291cmNlIHBvcnQgdXNlcyB0aGUgb2ZmbG9hZGluZ3MsIHdoaWxlIGRl
c3RpbmF0aW9uIGRvZXNuJ3QsCisJICogd2UgZ3JhYiB0aGUgc291cmNlIHZpcnRpby1uZXQgaGVh
ZGVyIGFuZCBkbyB0aGUgb2ZmbG9hZGluZ3MgaGVyZS4KKwkgKi8KKwlpZiAobmEtPnVwLnZpcnRf
aGRyX2xlbiAmJiAhZHN0X25hLT51cC52aXJ0X2hkcl9sZW4pIHsKKwkJdmggPSAoc3RydWN0IG5t
X3ZuZXRfaGRyICopc3JjOworCQkvKiBJbml0aWFsIHNhbml0eSBjaGVjayBvbiB0aGUgc291cmNl
IHZpcnRpby1uZXQgaGVhZGVyLiBJZgorCQkgKiBzb21ldGhpbmcgc2VlbXMgd3JvbmcsIGp1c3Qg
ZHJvcCB0aGUgcGFja2V0LiAqLworCQlpZiAoc3JjX2xlbiA8IG5hLT51cC52aXJ0X2hkcl9sZW4p
IHsKKwkJCVJEKDMsICJTaG9ydCBzcmMgdm5ldCBoZWFkZXIsIGRyb3BwaW5nIik7CisJCQlyZXR1
cm47CisJCX0KKwkJaWYgKHZuZXRfaGRyX2lzX2JhZCh2aCkpIHsKKwkJCVJEKDMsICJCYWQgc3Jj
IHZuZXQgaGVhZGVyLCBkcm9wcGluZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJLyogV2Ug
YXJlIHByb2Nlc3NpbmcgdGhlIGZpcnN0IGlucHV0IHNsb3QgYW5kIHRoZXJlIGlzIGEgbWlzbWF0
Y2gKIAkgKiBiZXR3ZWVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gdmlydF9oZHJfbGVuIChTSEwg
YW5kIERITCkuCiAJICogV2hlbiB0aGUgYSBjbGllbnQgaXMgdXNpbmcgdmlydGlvLW5ldCBoZWFk
ZXJzLCB0aGUgaGVhZGVyIGxlbmd0aApAQCAtMTg1LDE0ICsyMTgsMTQgQEAKIAkgKiAgMTIgfCAg
IDAgfCBkb2Vzbid0IGV4aXN0CiAJICogIDEyIHwgIDEwIHwgY29waWVkIGZyb20gdGhlIGZpcnN0
IDEwIGJ5dGVzIG9mIHNvdXJjZSBoZWFkZXIKIAkgKi8KLQliemVybyhkc3QsIGRzdF9uYS0+dmly
dF9oZHJfbGVuKTsKLQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiBkc3RfbmEtPnZpcnRfaGRyX2xl
bikKKwliemVybyhkc3QsIGRzdF9uYS0+dXAudmlydF9oZHJfbGVuKTsKKwlpZiAobmEtPnVwLnZp
cnRfaGRyX2xlbiAmJiBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbikKIAkJbWVtY3B5KGRzdCwgc3Jj
LCBzaXplb2Yoc3RydWN0IG5tX3ZuZXRfaGRyKSk7CiAJLyogU2tpcCB0aGUgdmlydGlvLW5ldCBo
ZWFkZXJzLiAqLwotCXNyYyArPSBuYS0+dmlydF9oZHJfbGVuOwotCXNyY19sZW4gLT0gbmEtPnZp
cnRfaGRyX2xlbjsKLQlkc3QgKz0gZHN0X25hLT52aXJ0X2hkcl9sZW47Ci0JZHN0X2xlbiA9IGRz
dF9uYS0+dmlydF9oZHJfbGVuICsgc3JjX2xlbjsKKwlzcmMgKz0gbmEtPnVwLnZpcnRfaGRyX2xl
bjsKKwlzcmNfbGVuIC09IG5hLT51cC52aXJ0X2hkcl9sZW47CisJZHN0ICs9IGRzdF9uYS0+dXAu
dmlydF9oZHJfbGVuOworCWRzdF9sZW4gPSBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbiArIHNyY19s
ZW47CiAKIAkvKiBIZXJlIGl0IGNvdWxkIGJlIGRzdF9sZW4gPT0gMCAod2hpY2ggaW1wbGllcyBz
cmNfbGVuID09IDApLAogCSAqIHNvIHdlIGF2b2lkIHBhc3NpbmcgYSB6ZXJvIGxlbmd0aCBmcmFn
bWVudC4KQEAgLTIxNCwxNiArMjQ3LDI3IEBACiAJCXVfaW50IGdzb19pZHggPSAwOwogCQkvKiBQ
YXlsb2FkIGRhdGEgYnl0ZXMgc2VnbWVudGVkIHNvIGZhciAoZS5nLiBUQ1AgZGF0YSBieXRlcyku
ICovCiAJCXVfaW50IHNlZ21lbnRlZF9ieXRlcyA9IDA7CisJCS8qIElzIHRoaXMgYW4gSVB2NCBv
ciBJUHY2IEdTTyBwYWNrZXQ/ICovCisJCXVfaW50IGlwdjQgPSAwOwogCQkvKiBMZW5ndGggb2Yg
dGhlIElQIGhlYWRlciAoMjAgaWYgSVB2NCwgNDAgaWYgSVB2NikuICovCiAJCXVfaW50IGlwaGxl
biA9IDA7CisJCS8qIExlbmd0aCBvZiB0aGUgRXRoZXJuZXQgaGVhZGVyICgxOCBpZiA4MDIuMXEs
IG90aGVyd2lzZSAxNCkuICovCisJCXVfaW50IGV0aGhsZW4gPSAxNDsKIAkJLyogSXMgdGhpcyBh
IFRDUCBvciBhbiBVRFAgR1NPIHBhY2tldD8gKi8KIAkJdV9pbnQgdGNwID0gKCh2aC0+Z3NvX3R5
cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikKIAkJCQk9PSBWSVJUSU9fTkVUX0hEUl9HU09f
VURQKSA/IDAgOiAxOwogCiAJCS8qIFNlZ21lbnQgdGhlIEdTTyBwYWNrZXQgY29udGFpbmVkIGlu
dG8gdGhlIGlucHV0IHNsb3RzIChmcmFncykuICovCi0JCXdoaWxlIChmdF9wICE9IGZ0X2VuZCkg
eworCQlmb3IgKDs7KSB7CiAJCQlzaXplX3QgY29weTsKIAorCQkJaWYgKGRzdF9zbG90cyA+PSAq
aG93bWFueSkgeworCQkJCS8qIFdlIHN0aWxsIGhhdmUgd29yayB0byBkbywgYnV0IHdlJ3ZlIHJ1
biBvdXQgb2YKKwkJCQkgKiBkc3Qgc2xvdHMsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUgcGFja2V0
LiAqLworCQkJCVJEKDMsICJOb3QgZW5vdWdoIHNsb3RzLCBkcm9wcGluZyBHU08gcGFja2V0Iik7
CisJCQkJcmV0dXJuOworCQkJfQorCiAJCQkvKiBHcmFiIHRoZSBHU08gaGVhZGVyIGlmIHdlIGRv
bid0IGhhdmUgaXQuICovCiAJCQlpZiAoIWdzb19oZHIpIHsKIAkJCQl1aW50MTZfdCBldGhlcnR5
cGU7CkBAIC0yMzEsMjggKzI3NSw3NSBAQAogCQkJCWdzb19oZHIgPSBzcmM7CiAKIAkJCQkvKiBM
b29rIGF0IHRoZSAnRXRoZXJ0eXBlJyBmaWVsZCB0byBzZWUgaWYgdGhpcyBwYWNrZXQKLQkJCQkg
KiBpcyBJUHY0IG9yIElQdjYuCi0JCQkJICovCi0JCQkJZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1
aW50MTZfdCAqKShnc29faGRyICArIDEyKSkpOwotCQkJCWlmIChldGhlcnR5cGUgPT0gMHgwODAw
KQotCQkJCQlpcGhsZW4gPSAyMDsKLQkJCQllbHNlIC8qIGlmIChldGhlcnR5cGUgPT0gMHg4NkRE
KSAqLwotCQkJCQlpcGhsZW4gPSA0MDsKKwkJCQkgKiBpcyBJUHY0IG9yIElQdjYsIHRha2luZyBp
bnRvIGFjY291bnQgVkxBTgorCQkJCSAqIGVuY2Fwc3VsYXRpb24uICovCisJCQkJZm9yICg7Oykg
eworCQkJCQlpZiAoc3JjX2xlbiA8IGV0aGhsZW4pIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08g
ZnJhZ21lbnQgW2V0aF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ
ZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1aW50MTZfdCAqKQorCQkJCQkJCSAgICAoZ3NvX2hkciAr
IGV0aGhsZW4gLSAyKSkpOworCQkJCQlpZiAoZXRoZXJ0eXBlICE9IDB4ODEwMCkgLyogbm90IDgw
Mi4xcSAqLworCQkJCQkJYnJlYWs7CisJCQkJCWV0aGhsZW4gKz0gNDsKKwkJCQl9CisJCQkJc3dp
dGNoIChldGhlcnR5cGUpIHsKKwkJCQkJY2FzZSAweDA4MDA6ICAvKiBJUHY0ICovCisJCQkJCXsK
KwkJCQkJCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKQorCQkJCQkJ
CQkJKGdzb19oZHIgKyBldGhobGVuKTsKKworCQkJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsg
MjApIHsKKwkJCQkJCQlSRCgzLCAiU2hvcnQgR1NPIGZyYWdtZW50ICIKKwkJCQkJCQkgICAgICAi
W0lQdjRdLCBkcm9wcGluZyIpOworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJCWlwdjQg
PSAxOworCQkJCQkJaXBobGVuID0gNCAqIChpcGgtPnZlcnNpb25faWhsICYgMHgwRik7CisJCQkJ
CQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDB4ODZERDogIC8qIElQdjYgKi8KKwkJCQkJCWlw
djQgPSAwOworCQkJCQkJaXBobGVuID0gNDA7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoK
KwkJCQkJCVJEKDMsICJVbnN1cHBvcnRlZCBldGhlcnR5cGUsICIKKwkJCQkJCSAgICAgICJkcm9w
cGluZyBHU08gcGFja2V0Iik7CisJCQkJCQlyZXR1cm47CisJCQkJfQogCQkJCU5EKDMsICJ0eXBl
PSUwNHgiLCBldGhlcnR5cGUpOwogCisJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsgaXBobGVu
KSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW0lQXSwgZHJvcHBpbmciKTsKKwkJ
CQkJcmV0dXJuOworCQkJCX0KKwogCQkJCS8qIENvbXB1dGUgZ3NvX2hkcl9sZW4uIEZvciBUQ1Ag
d2UgbmVlZCB0byByZWFkIHRoZQogCQkJCSAqIGNvbnRlbnQgb2YgdGhlICdEYXRhIE9mZnNldCcg
ZmllbGQuCiAJCQkJICovCiAJCQkJaWYgKHRjcCkgewotCQkJCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0
Y3BoID0KLQkJCQkJCShzdHJ1Y3Qgbm1fdGNwaGRyICopJmdzb19oZHJbMTQraXBobGVuXTsKKwkJ
CQkJc3RydWN0IG5tX3RjcGhkciAqdGNwaCA9IChzdHJ1Y3Qgbm1fdGNwaGRyICopCisJCQkJCQkJ
CShnc29faGRyICsgZXRoaGxlbiArIGlwaGxlbik7CisKKwkJCQkJaWYgKHNyY19sZW4gPCBldGho
bGVuICsgaXBobGVuICsgMjApIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgIgor
CQkJCQkJCQkiW1RDUF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ
Z3NvX2hkcl9sZW4gPSBldGhobGVuICsgaXBobGVuICsKKwkJCQkJCSAgICAgIDQgKiAodGNwaC0+
ZG9mZiA+PiA0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlnc29faGRyX2xlbiA9IGV0aGhsZW4gKyBp
cGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQl9CiAKLQkJCQkJZ3NvX2hkcl9sZW4gPSAxNCArIGlw
aGxlbiArIDQqKHRjcGgtPmRvZmYgPj4gNCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWdzb19oZHJfbGVu
ID0gMTQgKyBpcGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQlpZiAoc3JjX2xlbiA8IGdzb19oZHJf
bGVuKSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW1RDUC9VRFBdLCBkcm9wcGlu
ZyIpOworCQkJCQlyZXR1cm47CisJCQkJfQogCiAJCQkJTkQoMywgImdzb19oZHJfbGVuICV1IGdz
b19tdHUgJWQiLCBnc29faGRyX2xlbiwKLQkJCQkJCQkJZHN0X25hLT5tZnMpOworCQkJCQkJCQkg
ICBkc3RfbmEtPm1mcyk7CiAKIAkJCQkvKiBBZHZhbmNlIHNvdXJjZSBwb2ludGVycy4gKi8KIAkJ
CQlzcmMgKz0gZ3NvX2hkcl9sZW47CkBAIC0yNjMsNyArMzU0LDYgQEAKIAkJCQkJCWJyZWFrOwog
CQkJCQlzcmMgPSBmdF9wLT5mdF9idWY7CiAJCQkJCXNyY19sZW4gPSBmdF9wLT5mdF9sZW47Ci0J
CQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KIApAQCAtMjg5LDI1ICszNzksMjQgQEAKIAkJCQkv
KiBBZnRlciByYXcgc2VnbWVudGF0aW9uLCB3ZSBtdXN0IGZpeCBzb21lIGhlYWRlcgogCQkJCSAq
IGZpZWxkcyBhbmQgY29tcHV0ZSBjaGVja3N1bXMsIGluIGEgcHJvdG9jb2wgZGVwZW5kZW50CiAJ
CQkJICogd2F5LiAqLwotCQkJCWdzb19maXhfc2VnbWVudChkc3QsIGdzb19ieXRlcywgZ3NvX2lk
eCwKLQkJCQkJCXNlZ21lbnRlZF9ieXRlcywKLQkJCQkJCXNyY19sZW4gPT0gMCAmJiBmdF9wICsg
MSA9PSBmdF9lbmQsCi0JCQkJCQl0Y3AsIGlwaGxlbik7CisJCQkJZ3NvX2ZpeF9zZWdtZW50KGRz
dCArIGV0aGhsZW4sIGdzb19ieXRlcyAtIGV0aGhsZW4sCisJCQkJCQlpcHY0LCBpcGhsZW4sIHRj
cCwKKwkJCQkJCWdzb19pZHgsIHNlZ21lbnRlZF9ieXRlcywKKwkJCQkJCXNyY19sZW4gPT0gMCAm
JiBmdF9wICsgMSA9PSBmdF9lbmQpOwogCiAJCQkJTkQoImZyYW1lICV1IGNvbXBsZXRlZCB3aXRo
ICVkIGJ5dGVzIiwgZ3NvX2lkeCwgKGludClnc29fYnl0ZXMpOwotCQkJCXNsb3QtPmxlbiA9IGdz
b19ieXRlczsKLQkJCQlzbG90LT5mbGFncyA9IDA7Ci0JCQkJc2VnbWVudGVkX2J5dGVzICs9IGdz
b19ieXRlcyAtIGdzb19oZHJfbGVuOwotCisJCQkJZHN0X3Nsb3QtPmxlbiA9IGdzb19ieXRlczsK
KwkJCQlkc3Rfc2xvdC0+ZmxhZ3MgPSAwOwogCQkJCWRzdF9zbG90cysrOwotCi0JCQkJLyogTmV4
dCBkZXN0aW5hdGlvbiBzbG90LiAqLwotCQkJCSpqID0gbm1fbmV4dCgqaiwgbGltKTsKLQkJCQlz
bG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJCWRzdCA9IE5NQigmZHN0X25hLT51cCwgc2xvdCk7
CisJCQkJc2VnbWVudGVkX2J5dGVzICs9IGdzb19ieXRlcyAtIGdzb19oZHJfbGVuOwogCiAJCQkJ
Z3NvX2J5dGVzID0gMDsKIAkJCQlnc29faWR4Kys7CisKKwkJCQkvKiBOZXh0IGRlc3RpbmF0aW9u
IHNsb3QuICovCisJCQkJal9jdXIgPSBubV9uZXh0KGpfY3VyLCBsaW0pOworCQkJCWRzdF9zbG90
ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCQlkc3QgPSBOTUIoJmRzdF9uYS0+dXAsIGRz
dF9zbG90KTsKIAkJCX0KIAogCQkJLyogTmV4dCBpbnB1dCBzbG90LiAqLwpAQCAtMzQyLDEwICs0
MzEsMTAgQEAKIAkJCS8qIEluaXQvdXBkYXRlIHRoZSBwYWNrZXQgY2hlY2tzdW0gaWYgbmVlZGVk
LiAqLwogCQkJaWYgKHZoICYmICh2aC0+ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NT
VU0pKSB7CiAJCQkJaWYgKCFkc3Rfc2xvdHMpCi0JCQkJCWNzdW0gPSBubV9jc3VtX3JhdyhzcmMg
KyB2aC0+Y3N1bV9zdGFydCwKKwkJCQkJY3N1bSA9IG5tX29zX2NzdW1fcmF3KHNyYyArIHZoLT5j
c3VtX3N0YXJ0LAogCQkJCQkJCQlzcmNfbGVuIC0gdmgtPmNzdW1fc3RhcnQsIDApOwogCQkJCWVs
c2UKLQkJCQkJY3N1bSA9IG5tX2NzdW1fcmF3KHNyYywgc3JjX2xlbiwgY3N1bSk7CisJCQkJCWNz
dW0gPSBubV9vc19jc3VtX3JhdyhzcmMsIHNyY19sZW4sIGNzdW0pOwogCQkJfQogCiAJCQkvKiBS
b3VuZCB0byBhIG11bHRpcGxlIG9mIDY0ICovCkBAIC0zNTksNDQgKzQ0OCw0MyBAQAogCQkJfSBl
bHNlIHsKIAkJCQltZW1jcHkoZHN0LCBzcmMsIChpbnQpc3JjX2xlbik7CiAJCQl9Ci0JCQlzbG90
LT5sZW4gPSBkc3RfbGVuOwotCisJCQlkc3Rfc2xvdC0+bGVuID0gZHN0X2xlbjsKIAkJCWRzdF9z
bG90cysrOwogCiAJCQkvKiBOZXh0IGRlc3RpbmF0aW9uIHNsb3QuICovCi0JCQkqaiA9IG5tX25l
eHQoKmosIGxpbSk7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJZHN0ID0gTk1CKCZk
c3RfbmEtPnVwLCBzbG90KTsKKwkJCWpfY3VyID0gbm1fbmV4dChqX2N1ciwgbGltKTsKKwkJCWRz
dF9zbG90ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCWRzdCA9IE5NQigmZHN0X25hLT51
cCwgZHN0X3Nsb3QpOwogCiAJCQkvKiBOZXh0IHNvdXJjZSBzbG90LiAqLwogCQkJZnRfcCsrOwog
CQkJc3JjID0gZnRfcC0+ZnRfYnVmOwogCQkJZHN0X2xlbiA9IHNyY19sZW4gPSBmdF9wLT5mdF9s
ZW47Ci0KIAkJfQogCiAJCS8qIEZpbmFsaXplIChmb2xkKSB0aGUgY2hlY2tzdW0gaWYgbmVlZGVk
LiAqLwogCQlpZiAoY2hlY2sgJiYgdmggJiYgKHZoLT5mbGFncyAmIFZJUlRJT19ORVRfSERSX0Zf
TkVFRFNfQ1NVTSkpIHsKLQkJCSpjaGVjayA9IG5tX2NzdW1fZm9sZChjc3VtKTsKKwkJCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChjc3VtKTsKIAkJfQogCQlORCgzLCAidXNpbmcgJXUgZHN0X3Ns
b3RzIiwgZHN0X3Nsb3RzKTsKIAotCQkvKiBBIHNlY29uZCBwYXNzIG9uIHRoZSBkZXNpdGF0aW9u
cyBzbG90cyB0byBzZXQgdGhlIHNsb3QgZmxhZ3MsCisJCS8qIEEgc2Vjb25kIHBhc3Mgb24gdGhl
IGRlc3RpbmF0aW9uIHNsb3RzIHRvIHNldCB0aGUgc2xvdCBmbGFncywKIAkJICogdXNpbmcgdGhl
IHJpZ2h0IG51bWJlciBvZiBkZXN0aW5hdGlvbiBzbG90cy4KIAkJICovCi0JCXdoaWxlIChqX3N0
YXJ0ICE9ICpqKSB7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3Rbal9zdGFydF07Ci0JCQlzbG90LT5m
bGFncyA9IChkc3Rfc2xvdHMgPDwgOCl8IE5TX01PUkVGUkFHOworCQl3aGlsZSAoal9zdGFydCAh
PSBqX2N1cikgeworCQkJZHN0X3Nsb3QgPSAmZHN0X3JpbmctPnNsb3Rbal9zdGFydF07CisJCQlk
c3Rfc2xvdC0+ZmxhZ3MgPSAoZHN0X3Nsb3RzIDw8IDgpfCBOU19NT1JFRlJBRzsKIAkJCWpfc3Rh
cnQgPSBubV9uZXh0KGpfc3RhcnQsIGxpbSk7CiAJCX0KIAkJLyogQ2xlYXIgTlNfTU9SRUZSQUcg
ZmxhZyBvbiBsYXN0IGVudHJ5LiAqLwotCQlzbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7
CisJCWRzdF9zbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7CiAJfQogCi0JLyogVXBkYXRl
IGhvd21hbnkuICovCisJLyogVXBkYXRlIGhvd21hbnkgYW5kIGouIFRoaXMgaXMgdG8gY29tbWl0
IHRoZSB1c2Ugb2YKKwkgKiB0aG9zZSBzbG90cyBpbiB0aGUgZGVzdGluYXRpb24gcmluZy4gKi8K
IAlpZiAodW5saWtlbHkoZHN0X3Nsb3RzID4gKmhvd21hbnkpKSB7Ci0JCWRzdF9zbG90cyA9ICpo
b3dtYW55OwotCQlEKCJTbG90IGFsbG9jYXRpb24gZXJyb3I6IFNob3VsZCBuZXZlciBoYXBwZW4i
KTsKKwkJRCgiU2xvdCBhbGxvY2F0aW9uIGVycm9yOiBUaGlzIGlzIGEgYnVnIik7CiAJfQorCSpq
ID0gal9jdXI7CiAJKmhvd21hbnkgLT0gZHN0X3Nsb3RzOwogfQpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3BpcGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u
ZXRtYXBfcGlwZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMJMjAx
Ni0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9waXBlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM5NjcwMDAgKzAwMDAKQEAg
LTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEdpdXNlcHBlIExldHRpZXJp
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgR2l1c2Vw
cGUgTGV0dGllcmkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8q
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI4NTY5
NyAyMDE1LTA3LTE5IDE4OjA1OjQ5WiBsdWlnaSAkICovCisvKiAkRnJlZUJTRDogaGVhZC9zeXMv
ZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0WiBsdWln
aSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTU0LDYgKzU1LDkgQEAKICN3YXJuaW5nIE9TWCBzdXBw
b3J0IGlzIG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmlu
ZWQoX1dJTjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1
cHBvcnRlZCBwbGF0Zm9ybQpAQCAtNzIsMjYgKzc2LDI5IEBACiAKICNkZWZpbmUgTk1fUElQRV9N
QVhTTE9UUwk0MDk2CiAKLWludCBuZXRtYXBfZGVmYXVsdF9waXBlcyA9IDA7IC8qIGlnbm9yZWQs
IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBpbnQgbmV0bWFwX2RlZmF1bHRfcGlw
ZXMgPSAwOyAvKiBpZ25vcmVkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCitTWVNCRUdJTih2
YXJzX3BpcGVzKTsKIFNZU0NUTF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9u
ZXRtYXAsIE9JRF9BVVRPLCBkZWZhdWx0X3BpcGVzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2RlZmF1
bHRfcGlwZXMsIDAgLCAiIik7CitTWVNFTkQ7CiAKIC8qIGFsbG9jYXRlIHRoZSBwaXBlIGFycmF5
IGluIHRoZSBwYXJlbnQgYWRhcHRlciAqLwogc3RhdGljIGludAogbm1fcGlwZV9hbGxvYyhzdHJ1
Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBucGlwZXMpCiB7Ci0Jc2l6ZV90IGxlbjsKKwlz
aXplX3Qgb2xkX2xlbiwgbGVuOwogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICoqbnBhOwog
CiAJaWYgKG5waXBlcyA8PSBuYS0+bmFfbWF4X3BpcGVzKQogCQkvKiB3ZSBhbHJlYWR5IGhhdmUg
bW9yZSBlbnRyaWVzIHRoYXQgcmVxdWVzdGVkICovCiAJCXJldHVybiAwOwotCQorCiAJaWYgKG5w
aXBlcyA8IG5hLT5uYV9uZXh0X3BpcGUgfHwgbnBpcGVzID4gTk1fTUFYUElQRVMpCiAJCXJldHVy
biBFSU5WQUw7CiAKKwlvbGRfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVy
ICopKm5hLT5uYV9tYXhfcGlwZXM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFw
X3BpcGVfYWRhcHRlciAqKSAqIG5waXBlczsKLQlucGEgPSByZWFsbG9jKG5hLT5uYV9waXBlcywg
bGVuLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5wYSA9IG5tX29zX3JlYWxsb2Mo
bmEtPm5hX3BpcGVzLCBsZW4sIG9sZF9sZW4pOwogCWlmIChucGEgPT0gTlVMTCkKIAkJcmV0dXJu
IEVOT01FTTsKIApAQCAtMTEwLDcgKzExNyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBw
aXBlIGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgcGlwZXMpISIsIG5hLT5uYW1lLAogCQkJCQlu
YS0+bmFfbmV4dF9waXBlKTsKIAkJfQotCQlmcmVlKG5hLT5uYV9waXBlcywgTV9ERVZCVUYpOwor
CQlubV9vc19mcmVlKG5hLT5uYV9waXBlcyk7CiAJCW5hLT5uYV9waXBlcyA9IE5VTEw7CiAJCW5h
LT5uYV9tYXhfcGlwZXMgPSAwOwogCQluYS0+bmFfbmV4dF9waXBlID0gMDsKQEAgLTE5OSw3ICsy
MDYsNyBAQAogCX0KIAogICAgICAgICB3aGlsZSAobGltaXQtLSA+IDApIHsKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnNhdmVfcmluZy0+c2xvdFtq
XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnJp
bmctPnNsb3Rbal07CiAgICAgICAgICAgICAgICAgc3RydWN0IG5ldG1hcF9zbG90ICp0cyA9ICZ0
eGtyaW5nLT5yaW5nLT5zbG90W2tdOwogICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRtYXBfc2xv
dCB0bXA7CiAKQEAgLTI5NSw3ICszMDIsNyBAQAogICogICAgICAgIHVzcjEgLS0+IGUxIC0tPiBl
MgogICoKICAqICAgIGFuZCB3ZSBhcmUgZTIuIGUxIGlzIGNlcnRhaW5seSByZWdpc3RlcmVkIGFu
ZCBvdXIKLSAqICAgIGtyaW5ncyBhbHJlYWR5IGV4aXN0LCBidXQgdGhleSBtYXkgYmUgaGlkZGVu
LgorICogICAga3JpbmdzIGFscmVhZHkgZXhpc3QuIE5vdGhpbmcgdG8gZG8uCiAgKi8KIHN0YXRp
YyBpbnQKIG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YSkKQEAgLTMxMCw2NSArMzE3LDI4IEBACiAJCWludCBpOwogCiAJCS8qIGNhc2UgMSkgYWJvdmUg
Ki8KLQkJTkQoIiVwOiBjYXNlIDEsIGNyZWF0ZSBldmVyeXRoaW5nIiwgbmEpOworCQlEKCIlcDog
Y2FzZSAxLCBjcmVhdGUgYm90aCBlbmRzIiwgbmEpOwogCQllcnJvciA9IG5ldG1hcF9rcmluZ3Nf
Y3JlYXRlKG5hLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnI7CiAKLQkJLyogd2UgYWxz
byBjcmVhdGUgYWxsIHRoZSByaW5ncywgc2luY2Ugd2UgbmVlZCB0bwotICAgICAgICAgICAgICAg
ICAqIHVwZGF0ZSB0aGUgc2F2ZV9yaW5nIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgICAqIG5l
dG1hcF9tZW1fcmluZ3NfY3JlYXRlIChjYWxsZWQgYnkgb3VyIGNhbGxlcikKLSAgICAgICAgICAg
ICAgICAgKiB3aWxsIG5vdCBjcmVhdGUgdGhlIHJpbmdzIGFnYWluCi0gICAgICAgICAgICAgICAg
ICovCi0KLQkJZXJyb3IgPSBuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZShuYSk7Ci0JCWlmIChlcnJv
cikKLQkJCWdvdG8gZGVsX2tyaW5nczE7Ci0KLQkJLyogdXBkYXRlIG91ciBoaWRkZW4gcmluZyBw
b2ludGVycyAqLwotCQlmb3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRf
bnJpbmdzKG5hLCB0KSArIDE7IGkrKykKLQkJCQlOTVIobmEsIHQpW2ldLnNhdmVfcmluZyA9IE5N
UihuYSwgdClbaV0ucmluZzsKLQkJfQotCi0JCS8qIG5vdywgY3JlYXRlIGtyaW5ncyBhbmQgcmlu
Z3Mgb2YgdGhlIG90aGVyIGVuZCAqLworCQkvKiBjcmVhdGUgdGhlIGtyaW5ncyBvZiB0aGUgb3Ro
ZXIgZW5kICovCiAJCWVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUob25hLCAwKTsKIAkJaWYg
KGVycm9yKQotCQkJZ290byBkZWxfcmluZ3MxOwotCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5n
c19jcmVhdGUob25hKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBkZWxfa3JpbmdzMjsKLQotCQlm
b3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG9uYSwgdCkg
KyAxOyBpKyspCi0JCQkJTk1SKG9uYSwgdClbaV0uc2F2ZV9yaW5nID0gTk1SKG9uYSwgdClbaV0u
cmluZzsKLQkJfQorCQkJZ290byBkZWxfa3JpbmdzMTsKIAogCQkvKiBjcm9zcyBsaW5rIHRoZSBr
cmluZ3MgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90eHJ4X3N3YXAo
dCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCisJCQllbnVtIHR4cnggciA9IG5tX3R4cnhf
c3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBu
bWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykgewogCQkJCU5NUihuYSwgdClbaV0ucGlwZSA9IE5N
UigmcG5hLT5wZWVyLT51cCwgcikgKyBpOwogCQkJCU5NUigmcG5hLT5wZWVyLT51cCwgcilbaV0u
cGlwZSA9IE5NUihuYSwgdCkgKyBpOwogCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0J
CS8qIGNhc2UgMikgYWJvdmUgKi8KLQkJLyogcmVjb3ZlciB0aGUgaGlkZGVuIHJpbmdzICovCi0J
CU5EKCIlcDogY2FzZSAyLCBoaWRkZW4gcmluZ3MiLCBuYSk7Ci0JCWZvcl9yeF90eCh0KSB7Ci0J
CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKQotCQkJCU5N
UihuYSwgdClbaV0ucmluZyA9IE5NUihuYSwgdClbaV0uc2F2ZV9yaW5nOwotCQl9CisKIAl9CiAJ
cmV0dXJuIDA7CiAKLWRlbF9rcmluZ3MyOgotCW5ldG1hcF9rcmluZ3NfZGVsZXRlKG9uYSk7Ci1k
ZWxfcmluZ3MxOgotCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKIGRlbF9rcmluZ3MxOgog
CW5ldG1hcF9rcmluZ3NfZGVsZXRlKG5hKTsKIGVycjoKQEAgLTM4Myw3ICszNTMsOCBAQAogICoK
ICAqICAgICAgICB1c3IxIC0tPiBlMSAtLT4gZTIKICAqCi0gKiAgICAgIGFuZCB3ZSBhcmUgZTEu
IE5vdGhpbmcgc3BlY2lhbCB0byBkby4KKyAqICAgICAgYW5kIHdlIGFyZSBlMS4gQ3JlYXRlIHRo
ZSBuZWVkZWQgcmluZ3Mgb2YgdGhlCisgKiAgICAgIG90aGVyIGVuZC4KICAqCiAgKiAxLmIpIHN0
YXRlIGlzCiAgKgpAQCAtNDEyLDE0ICszODMsNjUgQEAKIHsKIAlzdHJ1Y3QgbmV0bWFwX3BpcGVf
YWRhcHRlciAqcG5hID0KIAkJKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICopbmE7CisJc3Ry
dWN0IG5ldG1hcF9hZGFwdGVyICpvbmEgPSAmcG5hLT5wZWVyLT51cDsKKwlpbnQgaSwgZXJyb3Ig
PSAwOwogCWVudW0gdHhyeCB0OwogCiAJTkQoIiVwOiBvbm9mZiAlZCIsIG5hLCBvbm9mZik7CiAJ
aWYgKG9ub2ZmKSB7Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOworCQlmb3Jfcnhf
dHgodCkgeworCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSArIDE7IGkr
KykgeworCQkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CisK
KwkJCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vbihrcmluZykpIHsKKwkJCQkJLyogbWFyayB0aGUg
cGFydG5lciByaW5nIGFzIG5lZWRlZCAqLworCQkJCQlrcmluZy0+cGlwZS0+bnJfa2ZsYWdzIHw9
IE5LUl9ORUVEUklORzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBjcmVhdGUgYWxsIG1pc3Np
bmcgbmVlZGVkIHJpbmdzIG9uIHRoZSBvdGhlciBlbmQgKi8KKwkJZXJyb3IgPSBuZXRtYXBfbWVt
X3JpbmdzX2NyZWF0ZShvbmEpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJ
LyogSW4gY2FzZSBvZiBubyBlcnJvciB3ZSBwdXQgb3VyIHJpbmdzIGluIG5ldG1hcCBtb2RlICov
CisJCWZvcl9yeF90eCh0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEs
IHQpICsgMTsgaSsrKSB7CisJCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5h
LCB0KVtpXTsKKworCQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQlr
cmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChu
YS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJ
fSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5OQUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFj
dGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9y
X3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAx
OyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ld
OworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJCQlrcmluZy0+
bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOworCQkJCQkvKiBtYXJrIHRoZSBwZWVyIHJpbmcgYXMg
bm8gbG9uZ2VyIG5lZWRlZCBieSB1cworCQkJCQkgKiAoaXQgbWF5IHN0aWxsIGJlIGtlcHQgaWYg
c29tYm9keSBlbHNlIGlzIHVzaW5nIGl0KQorCQkJCQkgKi8KKwkJCQkJa3JpbmctPnBpcGUtPm5y
X2tmbGFncyAmPSB+TktSX05FRURSSU5HOworCQkJCX0KKwkJCX0KKwkJfQorCQkvKiBkZWxldGUg
YWxsIHRoZSBwZWVyIHJpbmdzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgKi8KKwkJbmV0bWFw
X21lbV9yaW5nc19kZWxldGUob25hKTsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMpIHsKKwkJ
RCgiYWN0aXZlX2ZkcyAlZCIsIG5hLT5hY3RpdmVfZmRzKTsKKwkJcmV0dXJuIDA7CiAJfQorCiAJ
aWYgKHBuYS0+cGVlcl9yZWYpIHsKIAkJTkQoIiVwOiBjYXNlIDEuYSBvciAyLmEsIG5vdGhpbmcg
dG8gZG8iLCBuYSk7CiAJCXJldHVybiAwOwpAQCAtNDI5LDE4ICs0NTEsMTEgQEAKIAkJcG5hLT5w
ZWVyLT5wZWVyX3JlZiA9IDA7CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CiAJfSBlbHNlIHsK
LQkJaW50IGk7CiAJCU5EKCIlcDogY2FzZSAyLmIsIGdyYWIgcGVlciIsIG5hKTsKIAkJbmV0bWFw
X2FkYXB0ZXJfZ2V0KG5hKTsKIAkJcG5hLT5wZWVyLT5wZWVyX3JlZiA9IDE7Ci0JCS8qIGhpZGUg
b3VyIHJpbmdzIGZyb20gbmV0bWFwX21lbV9yaW5nc19kZWxldGUgKi8KLQkJZm9yX3J4X3R4KHQp
IHsKLQkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK
LQkJCQlOTVIobmEsIHQpW2ldLnJpbmcgPSBOVUxMOwotCQkJfQotCQl9CiAJfQotCXJldHVybiAw
OworCXJldHVybiBlcnJvcjsKIH0KIAogLyogbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZS4KQEAg
LTQ3MCw4ICs0ODUsNiBAQAogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICpwbmEgPQogCQko
c3RydWN0IG5ldG1hcF9waXBlX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
Km9uYTsgLyogbmEgb2YgdGhlIG90aGVyIGVuZCAqLwotCWludCBpOwotCWVudW0gdHhyeCB0Owog
CiAJaWYgKCFwbmEtPnBlZXJfcmVmKSB7CiAJCU5EKCIlcDogY2FzZSAyLCBrZXB0IGFsaXZlIGJ5
IHBlZXIiLCAgbmEpOwpAQCAtNDgwLDE4ICs0OTMsMTIgQEAKIAkvKiBjYXNlIDEpIGFib3ZlICov
CiAJTkQoIiVwOiBjYXNlIDEsIGRlbGV0aW5nIGV2ZXJ5aGluZyIsIG5hKTsKIAluZXRtYXBfa3Jp
bmdzX2RlbGV0ZShuYSk7IC8qIGFsc28gemVyb2VzIHR4X3JpbmdzIGV0Yy4gKi8KLQkvKiByZXN0
b3JlIHRoZSByaW5nIHRvIGJlIGRlbGV0ZWQgb24gdGhlIHBlZXIgKi8KIAlvbmEgPSAmcG5hLT5w
ZWVyLT51cDsKIAlpZiAob25hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCS8qIGFscmVhZHkgZGVs
ZXRlZCwgd2UgbXVzdCBiZSBvbiBhbgogICAgICAgICAgICAgICAgICAqIGNsZWFudXAtYWZ0ZXIt
ZXJyb3IgcGF0aCAqLwogCQlyZXR1cm47CiAJfQotCWZvcl9yeF90eCh0KSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhvbmEsIHQpICsgMTsgaSsrKQotCQkJTk1SKG9uYSwgdClb
aV0ucmluZyA9IE5NUihvbmEsIHQpW2ldLnNhdmVfcmluZzsKLQl9Ci0JbmV0bWFwX21lbV9yaW5n
c19kZWxldGUob25hKTsKIAluZXRtYXBfa3JpbmdzX2RlbGV0ZShvbmEpOwogfQogCkBAIC01MTks
NiArNTI2LDcgQEAKIAlzdHJ1Y3Qgbm1yZXEgcG5tcjsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
KnBuYTsgLyogcGFyZW50IGFkYXB0ZXIgKi8KIAlzdHJ1Y3QgbmV0bWFwX3BpcGVfYWRhcHRlciAq
bW5hLCAqc25hLCAqcmVxOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAl1X2ludCBwaXBl
X2lkOwogCWludCByb2xlID0gbm1yLT5ucl9mbGFncyAmIE5SX1JFR19NQVNLOwogCWludCBlcnJv
cjsKQEAgLTUzNiw3ICs1NDQsNyBAQAogCW1lbWNweSgmcG5tci5ucl9uYW1lLCBubXItPm5yX25h
bWUsIElGTkFNU0laKTsKIAkvKiBwYXNzIHRvIHBhcmVudCB0aGUgcmVxdWVzdGVkIG51bWJlciBv
ZiBwaXBlcyAqLwogCXBubXIubnJfYXJnMSA9IG5tci0+bnJfYXJnMTsKLQllcnJvciA9IG5ldG1h
cF9nZXRfbmEoJnBubXIsICZwbmEsIGNyZWF0ZSk7CisJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKCZw
bm1yLCAmcG5hLCAmaWZwLCBjcmVhdGUpOwogCWlmIChlcnJvcikgewogCQlORCgicGFyZW50IGxv
b2t1cCBmYWlsZWQ6ICVkIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC01NzYsNyArNTg0
LDcgQEAKICAgICAgICAgICogVGhlIGVuZHBvaW50IHdlIHdlcmUgYXNrZWQgZm9yIGhvbGRzIGEg
cmVmZXJlbmNlIHRvCiAgICAgICAgICAqIHRoZSBvdGhlciBvbmUuCiAgICAgICAgICAqLwotCW1u
YSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJ
bW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxMKSB7CiAJ
CWVycm9yID0gRU5PTUVNOwogCQlnb3RvIHB1dF9vdXQ7CkBAIC01OTMsNyArNjAxLDggQEAKIAlt
bmEtPnVwLm5tX2R0b3IgPSBuZXRtYXBfcGlwZV9kdG9yOwogCW1uYS0+dXAubm1fa3JpbmdzX2Ny
ZWF0ZSA9IG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGU7CiAJbW5hLT51cC5ubV9rcmluZ3NfZGVs
ZXRlID0gbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZTsKLQltbmEtPnVwLm5tX21lbSA9IHBuYS0+
bm1fbWVtOworCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwor
CW1uYS0+dXAubmFfZmxhZ3MgfD0gTkFGX01FTV9PV05FUjsKIAltbmEtPnVwLm5hX2x1dCA9IHBu
YS0+bmFfbHV0OwogCiAJbW5hLT51cC5udW1fdHhfcmluZ3MgPSAxOwpAQCAtNjEzLDEzICs2MjIs
MTQgQEAKIAkJZ290byBmcmVlX21uYTsKIAogCS8qIGNyZWF0ZSB0aGUgc2xhdmUgKi8KLQlzbmEg
PSBtYWxsb2Moc2l6ZW9mKCptbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCXNu
YSA9IG5tX29zX21hbGxvYyhzaXplb2YoKm1uYSkpOwogCWlmIChzbmEgPT0gTlVMTCkgewogCQll
cnJvciA9IEVOT01FTTsKIAkJZ290byB1bnJlZ2lzdGVyX21uYTsKIAl9CiAJLyogbW9zdCBmaWVs
ZHMgYXJlIHRoZSBzYW1lLCBjb3B5IGZyb20gbWFzdGVyIGFuZCB0aGVuIGZpeCAqLwogCSpzbmEg
PSAqbW5hOworCXNuYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQobW5hLT51cC5ubV9tZW0p
OwogCXNucHJpbnRmKHNuYS0+dXAubmFtZSwgc2l6ZW9mKHNuYS0+dXAubmFtZSksICIlc30lZCIs
IHBuYS0+bmFtZSwgcGlwZV9pZCk7CiAJc25hLT5yb2xlID0gTlJfUkVHX1BJUEVfU0xBVkU7CiAJ
ZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmc25hLT51cCk7CkBAIC02NTIsMjYgKzY2Miwy
NSBAQAogCSpuYSA9ICZyZXEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOwogCi0JLyog
d3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhfcmluZ3MgPSByZXEt
PnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gcmVxLT51cC5udW1fcnhfcmlu
Z3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IHJlcS0+dXAubnVtX3R4X2Rlc2M7Ci0Jbm1yLT5ucl9y
eF9zbG90cyA9IHJlcS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRoZSByZWZlcmVuY2Ug
dG8gdGhlIHBhcmVudC4KICAgICAgICAgICogSXQgd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgcmVx
IGRlc3RydWN0b3IKICAgICAgICAgICovCiAKKwkvKiBkcm9wIHRoZSBpZnAgcmVmZXJlbmNlLCBp
ZiBhbnkgKi8KKwlpZiAoaWZwKSB7CisJCWlmX3JlbGUoaWZwKTsKKwl9CisKIAlyZXR1cm4gMDsK
IAogZnJlZV9zbmE6Ci0JZnJlZShzbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKHNuYSk7CiB1
bnJlZ2lzdGVyX21uYToKIAluZXRtYXBfcGlwZV9yZW1vdmUocG5hLCBtbmEpOwogZnJlZV9tbmE6
Ci0JZnJlZShtbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG1uYSk7CiBwdXRfb3V0OgotCW5l
dG1hcF9hZGFwdGVyX3B1dChwbmEpOworCW5ldG1hcF91bmdldF9uYShwbmEsIGlmcCk7CiAJcmV0
dXJuIGVycm9yOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfcHQuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwotLS0gdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3B0LmMJMjAxNi0xMS0yMyAx
Njo1Nzo1Ny44NTQ2NjcwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYQorICogQ29weXJpZ2h0IChDKSAyMDE2IFZp
bmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk
RnJlZUJTRCQKKyAqLworCisvKgorICogY29tbW9uIGhlYWRlcnMKKyAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFt
Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lu
Y2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1
cy5oPgorCisvLyNkZWZpbmUgdXNsZWVwX3JhbmdlKF8xLCBfMikKKyNkZWZpbmUgdXNsZWVwX3Jh
bmdlKF8xLCBfMikgXAorCXBhdXNlX3NidCgicHRuZXRtYXAtc2xlZXAiLCBTQlRfMVVTICogXzEs
IFNCVF8xVVMgKiAxLCBDX0FCU09MVVRFKQorCisjZWxpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1
ZGUgPGJzZF9nbHVlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNs
dWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0
Lmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgorCisjaWZkZWYgV0lUSF9Q
VE5FVE1BUF9IT1NUCisKKy8qIFJYIGN5Y2xlIHdpdGhvdXQgcmVjZWl2ZSBhbnkgcGFja2V0cyAq
LworI2RlZmluZSBQVE5fUlhfRFJZX0NZQ0xFU19NQVgJMTAKKworLyogTGltaXQgQmF0Y2ggVFgg
dG8gaGFsZiByaW5nLgorICogQ3VycmVudGx5IGRpc2FibGVkLCBzaW5jZSBpdCBkb2VzIG5vdCBt
YW5hZ2UgTlNfTU9SRUZSQUcsIHdoaWNoCisgKiByZXN1bHRzIGluIHJhbmRvbSBkcm9wcyBpbiB0
aGUgVkFMRSB0eHN5bmMuICovCisvLyNkZWZpbmUgUFROX1RYX0JBVENIX0xJTShfbikJKChfbiA+
PiAxKSkKKworLy8jZGVmaW5lIEJVU1lfV0FJVAorCisjZGVmaW5lIE5FVE1BUF9QVF9ERUJVRyAg
LyogRW5hYmxlcyBjb21tdW5pY2F0aW9uIGRlYnVnZ2luZy4gKi8KKyNpZmRlZiBORVRNQVBfUFRf
REVCVUcKKyNkZWZpbmUgREJHKHgpIHgKKyNlbHNlCisjZGVmaW5lIERCRyh4KQorI2VuZGlmCisK
KworI3VuZGVmIFJBVEUKKy8vI2RlZmluZSBSQVRFICAvKiBFbmFibGVzIGNvbW11bmljYXRpb24g
c3RhdGlzdGljcy4gKi8KKyNpZmRlZiBSQVRFCisjZGVmaW5lIElGUkFURSh4KSB4CitzdHJ1Y3Qg
cmF0ZV9iYXRjaF9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBzeW5jOworICAgIHVuc2lnbmVk
IGxvbmcgc3luY19kcnk7CisgICAgdW5zaWduZWQgbG9uZyBwa3Q7Cit9OworCitzdHJ1Y3QgcmF0
ZV9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBndHhrOyAgICAgLyogR3Vlc3QgLS0+IEhvc3Qg
VHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBncnhrOyAgICAgLyogR3Vlc3QgLS0+IEhv
c3QgUngga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBodHhrOyAgICAgLyogSG9zdCAtLT4g
R3Vlc3QgVHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBocnhrOyAgICAgLyogSG9zdCAt
LT4gR3Vlc3QgUnggS2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBidHh3dTsgICAgLyogQmFj
a2VuZCBUeCB3YWtlLXVwLiAqLworICAgIHVuc2lnbmVkIGxvbmcgYnJ4d3U7ICAgIC8qIEJhY2tl
bmQgUnggd2FrZS11cC4gKi8KKyAgICBzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyB0eGJzOworICAg
IHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzIHJ4YnM7Cit9OworCitzdHJ1Y3QgcmF0ZV9jb250ZXh0
IHsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKyAgICBzdHJ1Y3QgcmF0ZV9zdGF0cyBu
ZXc7CisgICAgc3RydWN0IHJhdGVfc3RhdHMgb2xkOworfTsKKworI2RlZmluZSBSQVRFX1BFUklP
RCAgMgorc3RhdGljIHZvaWQKK3JhdGVfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBhcmcpCit7Cisg
ICAgc3RydWN0IHJhdGVfY29udGV4dCAqIGN0eCA9IChzdHJ1Y3QgcmF0ZV9jb250ZXh0ICopYXJn
OworICAgIHN0cnVjdCByYXRlX3N0YXRzIGN1ciA9IGN0eC0+bmV3OworICAgIHN0cnVjdCByYXRl
X2JhdGNoX3N0YXRzICp0eGJzID0gJmN1ci50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0
YXRzICpyeGJzID0gJmN1ci5yeGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICp0eGJz
X29sZCA9ICZjdHgtPm9sZC50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICpyeGJz
X29sZCA9ICZjdHgtPm9sZC5yeGJzOworICAgIHVpbnQ2NF90IHR4X2JhdGNoLCByeF9iYXRjaDsK
KyAgICB1bnNpZ25lZCBsb25nIHR4cGt0cywgcnhwa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZ3R4
aywgZ3J4azsKKyAgICBpbnQgcjsKKworICAgIHR4cGt0cyA9IHR4YnMtPnBrdCAtIHR4YnNfb2xk
LT5wa3Q7CisgICAgcnhwa3RzID0gcnhicy0+cGt0IC0gcnhic19vbGQtPnBrdDsKKworICAgIHR4
X2JhdGNoID0gKCh0eGJzLT5zeW5jIC0gdHhic19vbGQtPnN5bmMpID4gMCkgPworCSAgICAgICB0
eHBrdHMgLyAodHhicy0+c3luYyAtIHR4YnNfb2xkLT5zeW5jKTogMDsKKyAgICByeF9iYXRjaCA9
ICgocnhicy0+c3luYyAtIHJ4YnNfb2xkLT5zeW5jKSA+IDApID8KKwkgICAgICAgcnhwa3RzIC8g
KHJ4YnMtPnN5bmMgLSByeGJzX29sZC0+c3luYyk6IDA7CisKKyAgICAvKiBGaXgtdXAgZ3R4ayBh
bmQgZ3J4ayBlc3RpbWF0ZXMuICovCisgICAgZ3R4ayA9IChjdXIuZ3R4ayAtIGN0eC0+b2xkLmd0
eGspIC0gKGN1ci5idHh3dSAtIGN0eC0+b2xkLmJ0eHd1KTsKKyAgICBncnhrID0gKGN1ci5ncnhr
IC0gY3R4LT5vbGQuZ3J4aykgLSAoY3VyLmJyeHd1IC0gY3R4LT5vbGQuYnJ4d3UpOworCisgICAg
cHJpbnRrKCJ0eHBrdHMgID0gJWx1IEh6XG4iLCB0eHBrdHMvUkFURV9QRVJJT0QpOworICAgIHBy
aW50aygiZ3R4ayAgICA9ICVsdSBIelxuIiwgZ3R4ay9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRr
KCJodHhrICAgID0gJWx1IEh6XG4iLCAoY3VyLmh0eGsgLSBjdHgtPm9sZC5odHhrKS9SQVRFX1BF
UklPRCk7CisgICAgcHJpbnRrKCJidHh3ICAgID0gJWx1IEh6XG4iLCAoY3VyLmJ0eHd1IC0gY3R4
LT5vbGQuYnR4d3UpL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoInJ4cGt0cyAgPSAlbHUgSHpc
biIsIHJ4cGt0cy9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRrKCJncnhrICAgID0gJWx1IEh6XG4i
LCBncnhrL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImhyeGsgICAgPSAlbHUgSHpcbiIsIChj
dXIuaHJ4ayAtIGN0eC0+b2xkLmhyeGspL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImJyeHcg
ICAgPSAlbHUgSHpcbiIsIChjdXIuYnJ4d3UgLSBjdHgtPm9sZC5icnh3dSkvUkFURV9QRVJJT0Qp
OworICAgIHByaW50aygidHhiYXRjaCA9ICVsbHUgYXZnXG4iLCB0eF9iYXRjaCk7CisgICAgcHJp
bnRrKCJyeGJhdGNoID0gJWxsdSBhdmdcbiIsIHJ4X2JhdGNoKTsKKyAgICBwcmludGsoIlxuIik7
CisKKyAgICBjdHgtPm9sZCA9IGN1cjsKKyAgICByID0gbW9kX3RpbWVyKCZjdHgtPnRpbWVyLCBq
aWZmaWVzICsKKyAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoUkFURV9QRVJJT0QgKiAxMDAw
KSk7CisgICAgaWYgKHVubGlrZWx5KHIpKQorICAgICAgICBEKCJbcHRuZXRtYXBdIEVycm9yOiBt
b2RfdGltZXIoKVxuIik7Cit9CisKK3N0YXRpYyB2b2lkCityYXRlX2JhdGNoX3N0YXRzX3VwZGF0
ZShzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyAqYmYsIHVpbnQzMl90IHByZV90YWlsLAorCQkgICAg
ICAgIHVpbnQzMl90IGFjdF90YWlsLCB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgaW50IG4g
PSAoaW50KWFjdF90YWlsIC0gcHJlX3RhaWw7CisKKyAgICBpZiAobikgeworICAgICAgICBpZiAo
biA8IDApCisgICAgICAgICAgICBuICs9IG51bV9zbG90czsKKworICAgICAgICBiZi0+c3luYysr
OworICAgICAgICBiZi0+cGt0ICs9IG47CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmYtPnN5bmNf
ZHJ5Kys7CisgICAgfQorfQorCisjZWxzZSAvKiAhUkFURSAqLworI2RlZmluZSBJRlJBVEUoeCkK
KyNlbmRpZiAvKiBSQVRFICovCisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisgICAgLyogS3Ro
cmVhZHMuICovCisgICAgc3RydWN0IG5tX2t0aHJlYWQgKiprdGhyZWFkczsKKworICAgIC8qIFNo
YXJlZCBtZW1vcnkgd2l0aCB0aGUgZ3Vlc3QgKFRYL1JYKSAqLworICAgIHN0cnVjdCBwdG5ldF9y
aW5nIF9fdXNlciAqcHRyaW5nczsKKworICAgIGJvb2wgc3RvcHBlZDsKKworICAgIC8qIE5ldG1h
cCBhZGFwdGVyIHdyYXBwaW5nIHRoZSBiYWNrZW5kLiAqLworICAgIHN0cnVjdCBuZXRtYXBfcHRf
aG9zdF9hZGFwdGVyICpwdGhfbmE7CisKKyAgICBJRlJBVEUoc3RydWN0IHJhdGVfY29udGV4dCBy
YXRlX2N0eDspCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2tyaW5nX2R1bXAo
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQorewor
ICAgIFJEKDEsICIlcyAtIG5hbWU6ICVzIGh3Y3VyOiAlZCBod3RhaWw6ICVkIHJoZWFkOiAlZCBy
Y3VyOiAlZCBcCisgICAgCQkgICAgcnRhaWw6ICVkIGhlYWQ6ICVkIGN1cjogJWQgdGFpbDogJWQi
LAorICAgICAgICAgICAgdGl0bGUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bnJfaHdjdXIsCisgICAg
ICAgICAgICBrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu
Zy0+cnRhaWwsCisgICAgICAgICAgICBrcmluZy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1
ciwga3JpbmctPnJpbmctPnRhaWwpOworfQorCisvKgorICogVFggZnVuY3Rpb25zIHRvIHNldC9n
ZXQgYW5kIHRvIGhhbmRsZSBob3N0L2d1ZXN0IGtpY2suCisgKi8KKworCisvKiBFbmFibGUgb3Ig
ZGlzYWJsZSBndWVzdCAtLT4gaG9zdCBraWNrcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRy
aW5nX2tpY2tfZW5hYmxlKHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nLCB1aW50MzJf
dCB2YWwpCit7CisgICAgQ1NCX1dSSVRFKHB0cmluZywgaG9zdF9uZWVkX2tpY2ssIHZhbCk7Cit9
CisKKy8qIEFyZSBndWVzdCBpbnRlcnJ1cHQgZW5hYmxlZCBvciBkaXNhYmxlZD8gKi8KK3N0YXRp
YyBpbmxpbmUgdWludDMyX3QKK3B0cmluZ19pbnRyX2VuYWJsZWQoc3RydWN0IHB0bmV0X3Jpbmcg
X191c2VyICpwdHJpbmcpCit7CisgICAgdWludDMyX3QgdjsKKworICAgIENTQl9SRUFEKHB0cmlu
ZywgZ3Vlc3RfbmVlZF9raWNrLCB2KTsKKworICAgIHJldHVybiB2OworfQorCisvKiBFbmFibGUg
b3IgZGlzYWJsZSBndWVzdCBpbnRlcnJ1cHRzLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdHJp
bmdfaW50cl9lbmFibGUoc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmcsIHVpbnQzMl90
IHZhbCkKK3sKKyAgICBDU0JfV1JJVEUocHRyaW5nLCBndWVzdF9uZWVkX2tpY2ssIHZhbCk7Cit9
CisKKy8qIEhhbmRsZSBUWCBldmVudHM6IGZyb20gdGhlIGd1ZXN0IG9yIGZyb20gdGhlIGJhY2tl
bmQgKi8KK3N0YXRpYyB2b2lkCitwdG5ldG1hcF90eF9oYW5kbGVyKHZvaWQgKmRhdGEpCit7Cisg
ICAgc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSBkYXRhOworICAgIHN0cnVjdCBuZXRtYXBf
cHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0
ZXIgKilrcmluZy0+bmEtPm5hX3ByaXZhdGU7CisgICAgc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw
dG5zID0gcHRoX25hLT5wdG5zOworICAgIHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5n
OworICAgIHN0cnVjdCBuZXRtYXBfcmluZyBzaGFkb3dfcmluZzsgLyogc2hhZG93IGNvcHkgb2Yg
dGhlIG5ldG1hcF9yaW5nICovCisgICAgYm9vbCBtb3JlX3R4c3BhY2UgPSBmYWxzZTsKKyAgICBz
dHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBpbnQg
YmF0Y2g7CisgICAgSUZSQVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2Vs
eSghcHRucykpIHsKKyAgICAgICAgRCgiRVJST1IgcHRuZXRtYXAgc3RhdGUgaXMgTlVMTCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3BwZWQp
KSB7CisgICAgICAgIFJEKDEsICJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGty
aW5nLCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFRoaXMgaXMgYSBndWVzcywgdG8gYmUgZml4
ZWQgaW4gdGhlIHJhdGUgY2FsbGJhY2suICovCisgICAgSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l
dy5ndHhrKyspOworCisgICAgLyogR2V0IFRYIHB0cmluZyBwb2ludGVyIGZyb20gdGhlIENTQi4g
Ki8KKyAgICBwdHJpbmcgPSBwdG5zLT5wdHJpbmdzICsga3JpbmctPnJpbmdfaWQ7CisgICAga3Ro
ID0gcHRucy0+a3RocmVhZHNba3JpbmctPnJpbmdfaWRdOworCisgICAgbnVtX3Nsb3RzID0ga3Jp
bmctPm5rcl9udW1fc2xvdHM7CisgICAgc2hhZG93X3JpbmcuaGVhZCA9IGtyaW5nLT5yaGVhZDsK
KyAgICBzaGFkb3dfcmluZy5jdXIgPSBrcmluZy0+cmN1cjsKKworICAgIC8qIERpc2FibGUgZ3Vl
c3QgLS0+IGhvc3Qgbm90aWZpY2F0aW9ucy4gKi8KKyAgICBwdHJpbmdfa2lja19lbmFibGUocHRy
aW5nLCAwKTsKKyAgICAvKiBDb3B5IHRoZSBndWVzdCBrcmluZyBwb2ludGVycyBmcm9tIHRoZSBD
U0IgKi8KKyAgICBwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19y
aW5nLCBudW1fc2xvdHMpOworCisgICAgZm9yICg7OykgeworCS8qIElmIGd1ZXN0IG1vdmVzIGFo
ZWFkIHRvbyBmYXN0LCBsZXQncyBjdXQgdGhlIG1vdmUgc28KKwkgKiB0aGF0IHdlIGRvbid0IGV4
Y2VlZCBvdXIgYmF0Y2ggbGltaXQuICovCisgICAgICAgIGJhdGNoID0gc2hhZG93X3JpbmcuaGVh
ZCAtIGtyaW5nLT5ucl9od2N1cjsKKyAgICAgICAgaWYgKGJhdGNoIDwgMCkKKyAgICAgICAgICAg
IGJhdGNoICs9IG51bV9zbG90czsKKworI2lmZGVmIFBUTl9UWF9CQVRDSF9MSU0KKyAgICAgICAg
aWYgKGJhdGNoID4gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpKSB7CisgICAgICAgICAgICB1
aW50MzJfdCBoZWFkX2xpbSA9IGtyaW5nLT5ucl9od2N1ciArIFBUTl9UWF9CQVRDSF9MSU0obnVt
X3Nsb3RzKTsKKworICAgICAgICAgICAgaWYgKGhlYWRfbGltID49IG51bV9zbG90cykKKyAgICAg
ICAgICAgICAgICBoZWFkX2xpbSAtPSBudW1fc2xvdHM7CisgICAgICAgICAgICBORCgxLCAiYmF0
Y2g6ICVkIGhlYWQ6ICVkIGhlYWRfbGltOiAlZCIsIGJhdGNoLCBzaGFkb3dfcmluZy5oZWFkLAor
CQkJCQkJICAgICBoZWFkX2xpbSk7CisgICAgICAgICAgICBzaGFkb3dfcmluZy5oZWFkID0gaGVh
ZF9saW07CisJICAgIGJhdGNoID0gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpOworICAgICAg
ICB9CisjZW5kaWYgLyogUFROX1RYX0JBVENIX0xJTSAqLworCisgICAgICAgIGlmIChubV9rcl90
eHNwYWNlKGtyaW5nKSA8PSAobnVtX3Nsb3RzID4+IDEpKSB7CisgICAgICAgICAgICBzaGFkb3df
cmluZy5mbGFncyB8PSBOQUZfRk9SQ0VfUkVDTEFJTTsKKyAgICAgICAgfQorCisgICAgICAgIC8q
IE5ldG1hcCBwcm9sb2d1ZSAqLworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7Cisg
ICAgICAgIGlmICh1bmxpa2VseShubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmlu
ZykgPj0gbnVtX3Nsb3RzKSkgeworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJs
ZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5n
KTsKKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJv
c2UgJiBOTV9WRVJCX1RYU1lOQykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAo
InByZSB0eHN5bmMiLCBrcmluZyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGty
aW5nLT5ydGFpbCk7CisgICAgICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywg
c2hhZG93X3JpbmcuZmxhZ3MpKSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0
aW9ucy4gKi8KKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAg
ICAgICAgICAgRCgiRVJST1IgdHhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGl6ZQorICAgICAgICAgKiBDb3B5IGhvc3QgaHdj
dXIgYW5kIGh3dGFpbCBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBzeW5jKCksIGFuZAorCSAq
IGRvIHRoZSBubV9zeW5jX2ZpbmFsaXplLgorICAgICAgICAgKi8KKyAgICAgICAgcHRuZXRtYXBf
aG9zdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+bnJfaHdjdXIsCisJCQkJICAgICAg
a3JpbmctPm5yX2h3dGFpbCk7CisgICAgICAgIGlmIChrcmluZy0+cnRhaWwgIT0ga3JpbmctPm5y
X2h3dGFpbCkgeworCSAgICAvKiBTb21lIG1vcmUgcm9vbSBhdmFpbGFibGUgaW4gdGhlIHBhcmVu
dCBhZGFwdGVyLiAqLworCSAgICBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWlsOworCSAg
ICBtb3JlX3R4c3BhY2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgSUZSQVRFKHJhdGVf
YmF0Y2hfc3RhdHNfdXBkYXRlKCZwdG5zLT5yYXRlX2N0eC5uZXcudHhicywgcHJlX3RhaWwsCisJ
CQkJICAgICAgIGtyaW5nLT5ydGFpbCwgbnVtX3Nsb3RzKSk7CisKKyAgICAgICAgaWYgKHVubGlr
ZWx5KG5ldG1hcF92ZXJib3NlICYgTk1fVkVSQl9UWFNZTkMpKSB7CisgICAgICAgICAgICBwdG5l
dG1hcF9rcmluZ19kdW1wKCJwb3N0IHR4c3luYyIsIGtyaW5nKTsKKwl9CisKKyNpZm5kZWYgQlVT
WV9XQUlUCisgICAgICAgIC8qIEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAg
ICAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRyaW5nKSkgewor
ICAgICAgICAgICAgLyogRGlzYWJsZSBndWVzdCBraWNrIHRvIGF2b2lkIHNlbmRpbmcgdW5uZWNl
c3Nhcnkga2lja3MgKi8KKyAgICAgICAgICAgIHB0cmluZ19pbnRyX2VuYWJsZShwdHJpbmcsIDAp
OworICAgICAgICAgICAgbm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICAgICAg
SUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5odHhrKyspOworICAgICAgICAgICAgbW9yZV90eHNw
YWNlID0gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBSZWFkIENTQiB0byBz
ZWUgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvLiAqLworICAgICAgICBwdG5ldG1hcF9ob3N0
X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19yaW5nLCBudW1fc2xvdHMpOworI2lmbmRl
ZiBCVVNZX1dBSVQKKyAgICAgICAgaWYgKHNoYWRvd19yaW5nLmhlYWQgPT0ga3JpbmctPnJoZWFk
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm8gbW9yZSBwYWNrZXRzIHRvIHRy
YW5zbWl0LiBXZSBlbmFibGUgbm90aWZpY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAqIGdvIHRv
IHNsZWVwLCB3YWl0aW5nIGZvciBhIGtpY2sgZnJvbSB0aGUgZ3Vlc3Qgd2hlbiBuZXcKKyAgICAg
ICAgICAgICAqIG5ldyBzbG90cyBhcmUgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBS
ZWVuYWJsZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxl
KHB0cmluZywgMSk7CisgICAgICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAg
IHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9z
bG90cyk7CisgICAgICAgICAgICBpZiAoc2hhZG93X3JpbmcuaGVhZCAhPSBrcmluZy0+cmhlYWQp
IHsKKwkJLyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgdGhlcmUgYXJlIG1vcmUgcGFja2V0
cyB0bworCQkgKiB0cmFuc21pdC4gRGlzYWJsZSBub3RpZmljYXRpb25zIGFuZCBkbyBhbm90aGVy
IGN5Y2xlICovCisJCXB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworCQljb250aW51ZTsK
KwkgICAgfQorCSAgICBicmVhazsKKyAgICAgICAgfQorCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3Jp
bmcpKSB7CisJICAgIC8qIE5vIG1vcmUgYXZhaWxhYmxlIFRYIHNsb3RzLiBXZSBzdG9wIHdhaXRp
bmcgZm9yIGEgbm90aWZpY2F0aW9uCisJICAgICAqIGZyb20gdGhlIGJhY2tlbmQgKG5ldG1hcF90
eF9pcnEpLiAqLworICAgICAgICAgICAgTkQoMSwgIlRYIHJpbmciKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3Bw
ZWQpKSB7CisgICAgICAgICAgICBEKCJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5tX2tyX3B1dChr
cmluZyk7CisKKyAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRy
aW5nKSkgeworICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAg
bm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICBJRlJBVEUocHRucy0+cmF0ZV9j
dHgubmV3Lmh0eGsrKyk7CisgICAgfQorfQorCisvKgorICogV2UgbmVlZCBSWCBraWNrcyBmcm9t
IHRoZSBndWVzdCB3aGVuICh0YWlsID09IGhlYWQtMSksIHdoZXJlIHdlIHdhaXQKKyAqIGZvciB0
aGUgZ3Vlc3QgdG8gcmVmaWxsLgorICovCisjaWZuZGVmIEJVU1lfV0FJVAorc3RhdGljIGlubGlu
ZSBpbnQKK3B0bmV0bWFwX25vcnhzbG90cyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgdWlu
dDMyX3QgZ19oZWFkKQoreworICAgIHJldHVybiAoTk1fQUNDRVNTX09OQ0Uoa3JpbmctPm5yX2h3
dGFpbCkgPT0gbm1fcHJldihnX2hlYWQsCisgICAgCQkJICAgIGtyaW5nLT5ua3JfbnVtX3Nsb3Rz
IC0gMSkpOworfQorI2VuZGlmIC8qICFCVVNZX1dBSVQgKi8KKworLyogSGFuZGxlIFJYIGV2ZW50
czogZnJvbSB0aGUgZ3Vlc3Qgb3IgZnJvbSB0aGUgYmFja2VuZCAqLworc3RhdGljIHZvaWQKK3B0
bmV0bWFwX3J4X2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICprcmluZyA9IGRhdGE7CisgICAgc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9u
YSA9CisJCShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKWtyaW5nLT5uYS0+bmFfcHJp
dmF0ZTsKKyAgICBzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7Cisg
ICAgc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmc7CisgICAgc3RydWN0IG5ldG1hcF9y
aW5nIHNoYWRvd19yaW5nOyAvKiBzaGFkb3cgY29weSBvZiB0aGUgbmV0bWFwX3JpbmcgKi8KKyAg
ICBzdHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBp
bnQgZHJ5X2N5Y2xlcyA9IDA7CisgICAgYm9vbCBzb21lX3JlY3ZkID0gZmFsc2U7CisgICAgSUZS
QVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2VseSghcHRucyB8fCAhcHRu
cy0+cHRoX25hKSkgeworICAgICAgICBEKCJFUlJPUiBwdG5ldG1hcCBzdGF0ZSAlcCwgcHRuZXRt
YXAgaG9zdCBhZGFwdGVyICVwIiwgcHRucywKKwkgIHB0bnMgPyBwdG5zLT5wdGhfbmEgOiBOVUxM
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9w
cGVkKSkgeworICAgICAgICBSRCgxLCAiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIp
OworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGtyaW5n
LCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKwlyZXR1
cm47CisgICAgfQorCisgICAgLyogVGhpcyBpcyBhIGd1ZXNzLCB0byBiZSBmaXhlZCBpbiB0aGUg
cmF0ZSBjYWxsYmFjay4gKi8KKyAgICBJRlJBVEUocHRucy0+cmF0ZV9jdHgubmV3LmdyeGsrKyk7
CisKKyAgICAvKiBHZXQgUlggcHRyaW5nIHBvaW50ZXIgZnJvbSB0aGUgQ1NCLiAqLworICAgIHB0
cmluZyA9IHB0bnMtPnB0cmluZ3MgKyAocHRoX25hLT51cC5udW1fdHhfcmluZ3MgKyBrcmluZy0+
cmluZ19pZCk7CisgICAga3RoID0gcHRucy0+a3RocmVhZHNbcHRoX25hLT51cC5udW1fdHhfcmlu
Z3MgKyBrcmluZy0+cmluZ19pZF07CisKKyAgICBudW1fc2xvdHMgPSBrcmluZy0+bmtyX251bV9z
bG90czsKKyAgICBzaGFkb3dfcmluZy5oZWFkID0ga3JpbmctPnJoZWFkOworICAgIHNoYWRvd19y
aW5nLmN1ciA9IGtyaW5nLT5yY3VyOworCisgICAgLyogRGlzYWJsZSBub3RpZmljYXRpb25zLiAq
LworICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworICAgIC8qIENvcHkgdGhlIGd1
ZXN0IGtyaW5nIHBvaW50ZXJzIGZyb20gdGhlIENTQiAqLworICAgIHB0bmV0bWFwX2hvc3RfcmVh
ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisKKyAgICBmb3Ig
KDs7KSB7CisJdWludDMyX3QgaHd0YWlsOworCisgICAgICAgIC8qIE5ldG1hcCBwcm9sb2d1ZSAq
LworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7CisgICAgICAgIGlmICh1bmxpa2Vs
eShubV9yeHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmluZykgPj0gbnVtX3Nsb3RzKSkg
eworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJsZSBub3RpZmljYXRpb25zLiAq
LworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5nKTsKKyAgICAgICAgICAgIHB0
cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1JYU1lO
QykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAoInByZSByeHN5bmMiLCBrcmlu
Zyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGtyaW5nLT5ydGFpbCk7CisgICAg
ICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywgc2hhZG93X3JpbmcuZmxhZ3Mp
KSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0aW9ucy4gKi8KKyAgICAgICAg
ICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgRCgiRVJST1Ig
cnhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAg
ICogRmluYWxpemUKKyAgICAgICAgICogQ29weSBob3N0IGh3Y3VyIGFuZCBod3RhaWwgaW50byB0
aGUgQ1NCIGZvciB0aGUgZ3Vlc3Qgc3luYygpCisgICAgICAgICAqLworCWh3dGFpbCA9IE5NX0FD
Q0VTU19PTkNFKGtyaW5nLT5ucl9od3RhaWwpOworICAgICAgICBwdG5ldG1hcF9ob3N0X3dyaXRl
X2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nLT5ucl9od2N1ciwgaHd0YWlsKTsKKyAgICAgICAgaWYg
KGtyaW5nLT5ydGFpbCAhPSBod3RhaWwpIHsKKwkgICAga3JpbmctPnJ0YWlsID0gaHd0YWlsOwor
ICAgICAgICAgICAgc29tZV9yZWN2ZCA9IHRydWU7CisgICAgICAgICAgICBkcnlfY3ljbGVzID0g
MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRyeV9jeWNsZXMrKzsKKyAgICAgICAg
fQorCisgICAgICAgIElGUkFURShyYXRlX2JhdGNoX3N0YXRzX3VwZGF0ZSgmcHRucy0+cmF0ZV9j
dHgubmV3LnJ4YnMsIHByZV90YWlsLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
cmluZy0+cnRhaWwsIG51bV9zbG90cykpOworCisgICAgICAgIGlmICh1bmxpa2VseShuZXRtYXBf
dmVyYm9zZSAmIE5NX1ZFUkJfUlhTWU5DKSkgeworICAgICAgICAgICAgcHRuZXRtYXBfa3Jpbmdf
ZHVtcCgicG9zdCByeHN5bmMiLCBrcmluZyk7CisJfQorCisjaWZuZGVmIEJVU1lfV0FJVAorCS8q
IEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAgICAgICBpZiAoc29tZV9yZWN2
ZCAmJiBwdHJpbmdfaW50cl9lbmFibGVkKHB0cmluZykpIHsKKyAgICAgICAgICAgIC8qIERpc2Fi
bGUgZ3Vlc3Qga2ljayB0byBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IGtpY2tzICovCisgICAg
ICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAgICAgIG5tX29z
X2t0aHJlYWRfc2VuZF9pcnEoa3RoKTsKKyAgICAgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0
eC5uZXcuaHJ4aysrKTsKKyAgICAgICAgICAgIHNvbWVfcmVjdmQgPSBmYWxzZTsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIC8qIFJlYWQgQ1NCIHRvIHNlZSBpZiB0aGVyZSBpcyBtb3JlIHdv
cmsgdG8gZG8uICovCisgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5n
LCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisjaWZuZGVmIEJVU1lfV0FJVAorICAgICAgICBp
ZiAocHRuZXRtYXBfbm9yeHNsb3RzKGtyaW5nLCBzaGFkb3dfcmluZy5oZWFkKSkgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAqIE5vIG1vcmUgc2xvdHMgYXZhaWxhYmxlIGZvciByZWNl
cHRpb24uIFdlIGVuYWJsZSBub3RpZmljYXRpb24gYW5kCisgICAgICAgICAgICAgKiBnbyB0byBz
bGVlcCwgd2FpdGluZyBmb3IgYSBraWNrIGZyb20gdGhlIGd1ZXN0IHdoZW4gbmV3IHJlY2VpdmUK
KwkgICAgICogc2xvdHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBSZWVuYWJsZSBub3RpZmljYXRp
b25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMSk7CisgICAg
ICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVh
ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisgICAgICAgICAg
ICBpZiAoIXB0bmV0bWFwX25vcnhzbG90cyhrcmluZywgc2hhZG93X3JpbmcuaGVhZCkpIHsKKwkJ
LyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgbW9yZSBzbG90cyBhcmUgYXZhaWxhYmxlLiBE
aXNhYmxlCisJCSAqIG5vdGlmaWNhdGlvbnMgYW5kIGRvIGFub3RoZXIgY3ljbGUuICovCisgICAg
ICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMCk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisJICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKwlo
d3RhaWwgPSBOTV9BQ0NFU1NfT05DRShrcmluZy0+bnJfaHd0YWlsKTsKKyAgICAgICAgaWYgKHVu
bGlrZWx5KGh3dGFpbCA9PSBrcmluZy0+cmhlYWQgfHwKKwkJICAgICBkcnlfY3ljbGVzID49IFBU
Tl9SWF9EUllfQ1lDTEVTX01BWCkpIHsKKwkgICAgLyogTm8gbW9yZSBwYWNrZXRzIHRvIGJlIHJl
YWQgZnJvbSB0aGUgYmFja2VuZC4gV2Ugc3RvcCBhbmQKKwkgICAgICogd2FpdCBmb3IgYSBub3Rp
ZmljYXRpb24gZnJvbSB0aGUgYmFja2VuZCAobmV0bWFwX3J4X2lycSkuICovCisgICAgICAgICAg
ICBORCgxLCAibnJfaHd0YWlsOiAlZCByaGVhZDogJWQgZHJ5X2N5Y2xlczogJWQiLAorCSAgICAg
ICBod3RhaWwsIGtyaW5nLT5yaGVhZCwgZHJ5X2N5Y2xlcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9wcGVkKSkg
eworICAgICAgICAgICAgRCgiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBubV9rcl9wdXQoa3Jpbmcp
OworCisgICAgLyogSW50ZXJydXB0IHRoZSBndWVzdCBpZiBuZWVkZWQuICovCisgICAgaWYgKHNv
bWVfcmVjdmQgJiYgcHRyaW5nX2ludHJfZW5hYmxlZChwdHJpbmcpKSB7CisgICAgICAgIHB0cmlu
Z19pbnRyX2VuYWJsZShwdHJpbmcsIDApOworICAgICAgICBubV9vc19rdGhyZWFkX3NlbmRfaXJx
KGt0aCk7CisgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0eC5uZXcuaHJ4aysrKTsKKyAgICB9
Cit9CisKKyNpZmRlZiBORVRNQVBfUFRfREVCVUcKK3N0YXRpYyB2b2lkCitwdG5ldG1hcF9wcmlu
dF9jb25maWd1cmF0aW9uKHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlpbnQgazsKKwor
CUQoInB0bmV0bWFwIGNvbmZpZ3VyYXRpb246Iik7CisJRCgiICBDU0IgcHRyaW5ncyBAJXAsIG51
bV9yaW5ncz0ldSwgY2ZndHlwZSAlMDh4IiwgY2ZnLT5wdHJpbmdzLAorCSAgY2ZnLT5udW1fcmlu
Z3MsIGNmZy0+Y2ZndHlwZSk7CisJZm9yIChrID0gMDsgayA8IGNmZy0+bnVtX3JpbmdzOyBrKysp
IHsKKwkJc3dpdGNoIChjZmctPmNmZ3R5cGUpIHsKKwkJY2FzZSBQVE5FVE1BUF9DRkdUWVBFX1FF
TVU6IHsKKwkJCXN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11ICplID0KKwkJCQkoc3RydWN0
IHB0bmV0bWFwX2NmZ2VudHJ5X3FlbXUgKikoY2ZnKzEpICsgazsKKwkJCUQoIiAgICByaW5nICMl
ZDogaW9ldmVudGZkPSVsdSwgaXJxZmQ9JWx1IiwgaywKKwkJCQkodW5zaWduZWQgbG9uZyllLT5p
b2V2ZW50ZmQsCisJCQkJKHVuc2lnbmVkIGxvbmcpZS0+aXJxZmQpOworCQkJYnJlYWs7CisJCX0K
KworCQljYXNlIFBUTkVUTUFQX0NGR1RZUEVfQkhZVkU6CisJCXsKKwkJCXN0cnVjdCBwdG5ldG1h
cF9jZmdlbnRyeV9iaHl2ZSAqZSA9CisJCQkJKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9iaHl2
ZSAqKShjZmcrMSkgKyBrOworCQkJRCgiICAgIHJpbmcgIyVkOiB3Y2hhbj0lbHUsIGlvY3RsX2Zk
PSVsdSwgIgorCQkJICAiaW9jdGxfY21kPSVsdSwgbXNpeF9tc2dfZGF0YT0lbHUsIG1zaXhfYWRk
cj0lbHUiLAorCQkJCWssICh1bnNpZ25lZCBsb25nKWUtPndjaGFuLAorCQkJCSh1bnNpZ25lZCBs
b25nKWUtPmlvY3RsX2ZkLAorCQkJCSh1bnNpZ25lZCBsb25nKWUtPmlvY3RsX2NtZCwKKwkJCQko
dW5zaWduZWQgbG9uZyllLT5pb2N0bF9kYXRhLm1zZ19kYXRhLAorCQkJCSh1bnNpZ25lZCBsb25n
KWUtPmlvY3RsX2RhdGEuYWRkcik7CisJCQlicmVhazsKKwkJfQorCQl9CisJfQorCit9CisjZW5k
aWYgLyogTkVUTUFQX1BUX0RFQlVHICovCisKKy8qIENvcHkgYWN0dWFsIHN0YXRlIG9mIHRoZSBo
b3N0IHJpbmcgaW50byB0aGUgQ1NCIGZvciB0aGUgZ3Vlc3QgaW5pdCAqLworc3RhdGljIGludAor
cHRuZXRtYXBfa3Jpbmdfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIHN0cnVj
dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nKQoreworICAgIGlmKENTQl9XUklURShwdHJpbmcs
IGhlYWQsIGtyaW5nLT5yaGVhZCkpCisgICAgICAgIGdvdG8gZXJyOworICAgIGlmKENTQl9XUklU
RShwdHJpbmcsIGN1ciwga3JpbmctPnJjdXIpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIGlm
KENTQl9XUklURShwdHJpbmcsIGh3Y3VyLCBrcmluZy0+bnJfaHdjdXIpKQorICAgICAgICBnb3Rv
IGVycjsKKyAgICBpZihDU0JfV1JJVEUocHRyaW5nLCBod3RhaWwsIE5NX0FDQ0VTU19PTkNFKGty
aW5nLT5ucl9od3RhaWwpKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBEQkcocHRuZXRtYXBf
a3JpbmdfZHVtcCgicHRuZXRtYXBfa3Jpbmdfc25hcHNob3QiLCBrcmluZyk7KQorCisgICAgcmV0
dXJuIDA7CitlcnI6CisgICAgcmV0dXJuIEVGQVVMVDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRt
YXBfa3JpbmcgKgorcHRuZXRtYXBfa3Jpbmcoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg
KnB0aF9uYSwgaW50IGspCit7CisJaWYgKGsgPCBwdGhfbmEtPnVwLm51bV90eF9yaW5ncykgewor
CQlyZXR1cm4gcHRoX25hLT51cC50eF9yaW5ncyArIGs7CisJfQorCXJldHVybiBwdGhfbmEtPnVw
LnJ4X3JpbmdzICsgayAtIHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOworfQorCitzdGF0aWMgaW50
CitwdG5ldG1hcF9rcmluZ3Nfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg
KnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7
CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7CisJdW5zaWduZWQgaW50IG51bV9yaW5nczsK
KwlpbnQgZXJyID0gMCwgazsKKworCW51bV9yaW5ncyA9IHB0aF9uYS0+dXAubnVtX3R4X3Jpbmdz
ICsKKwkJICAgIHB0aF9uYS0+dXAubnVtX3J4X3JpbmdzOworCisJZm9yIChrID0gMDsgayA8IG51
bV9yaW5nczsgaysrKSB7CisJCWtyaW5nID0gcHRuZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJ
ZXJyIHw9IHB0bmV0bWFwX2tyaW5nX3NuYXBzaG90KGtyaW5nLCBwdG5zLT5wdHJpbmdzICsgayk7
CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBjcmVhdGUsIHN0
YXJ0IGFuZCBzdG9wIHRoZSBrdGhyZWFkcworICovCisKK3N0YXRpYyBpbnQKK3B0bmV0bWFwX2Ny
ZWF0ZV9rdGhyZWFkcyhzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hLAorCQkJ
IHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0
bnMgPSBwdGhfbmEtPnB0bnM7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIG5ta19jZmc7CisJdW5z
aWduZWQgaW50IG51bV9yaW5nczsKKwl1aW50OF90ICpjZmdfZW50cmllcyA9ICh1aW50OF90ICop
KGNmZyArIDEpOworCWludCBrOworCisJbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1fdHhfcmlu
Z3MgKworCQkgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3M7CisKKwlmb3IgKGsgPSAwOyBrIDwg
bnVtX3JpbmdzOyBrKyspIHsKKwkJbm1rX2NmZy5hdHRhY2hfdXNlciA9IDE7IC8qIGF0dGFjaCBr
dGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCQlubWtfY2ZnLndvcmtlcl9wcml2YXRlID0gcHRu
ZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJbm1rX2NmZy50eXBlID0gazsKKwkJaWYgKGsgPCBw
dGhfbmEtPnVwLm51bV90eF9yaW5ncykgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h
cF90eF9oYW5kbGVyOworCQl9IGVsc2UgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h
cF9yeF9oYW5kbGVyOworCQl9CisKKwkJcHRucy0+a3RocmVhZHNba10gPSBubV9vc19rdGhyZWFk
X2NyZWF0ZSgmbm1rX2NmZywKKwkJCWNmZy0+Y2ZndHlwZSwgY2ZnX2VudHJpZXMgKyBrICogY2Zn
LT5lbnRyeV9zaXplKTsKKwkJaWYgKHB0bnMtPmt0aHJlYWRzW2tdID09IE5VTEwpIHsKKwkJCWdv
dG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJZm9yIChrID0gMDsgayA8IG51
bV9yaW5nczsgaysrKSB7CisJCWlmIChwdG5zLT5rdGhyZWFkc1trXSkgeworCQkJbm1fb3Nfa3Ro
cmVhZF9kZWxldGUocHRucy0+a3RocmVhZHNba10pOworCQkJcHRucy0+a3RocmVhZHNba10gPSBO
VUxMOworCQl9CisJfQorCXJldHVybiBFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0bWFw
X3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEpCit7
CisJc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG5zID0gcHRoX25hLT5wdG5zOworCWludCBudW1f
cmluZ3M7CisJaW50IGVycm9yOworCWludCBrOworCisJaWYgKCFwdG5zKSB7CisJCUQoIkJVRyBw
dG5zIGlzIE5VTEwiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9CisKKwlwdG5zLT5zdG9wcGVkID0g
ZmFsc2U7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90eF9yaW5ncyArCisJ
CSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsgPSAwOyBrIDwgbnVt
X3JpbmdzOyBrKyspIHsKKwkJLy9ubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShwdG5zLT5rdGhy
ZWFkc1trXSwgeHh4KTsKKwkJZXJyb3IgPSBubV9vc19rdGhyZWFkX3N0YXJ0KHB0bnMtPmt0aHJl
YWRzW2tdKTsKKwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0bWFwX3N0b3Bfa3RocmVhZHMoc3RydWN0
IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3Rh
dGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7CisJaW50IG51bV9yaW5nczsKKwlpbnQgazsKKworCWlm
ICghcHRucykgeworCQkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQlyZXR1cm47CisJfQorCisJcHRu
cy0+c3RvcHBlZCA9IHRydWU7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90
eF9yaW5ncyArCisJCSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsg
PSAwOyBrIDwgbnVtX3JpbmdzOyBrKyspIHsKKwkJbm1fb3Nfa3RocmVhZF9zdG9wKHB0bnMtPmt0
aHJlYWRzW2tdKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICoKK3B0bmV0
bWFwX3JlYWRfY2ZnKHN0cnVjdCBubXJlcSAqbm1yKQoreworCXVpbnRwdHJfdCAqbm1yX3B0bmNm
ZyA9ICh1aW50cHRyX3QgKikmbm1yLT5ucl9hcmcxOworCXN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm
ZzsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnIHRtcDsKKwlzaXplX3QgY2ZnbGVuOworCisJaWYgKGNv
cHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCAmdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJ
RCgiUGFydGlhbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2Zn
bGVuID0gc2l6ZW9mKHRtcCkgKyB0bXAubnVtX3JpbmdzICogdG1wLmVudHJ5X3NpemU7CisJY2Zn
ID0gbm1fb3NfbWFsbG9jKGNmZ2xlbik7CisJaWYgKCFjZmcpIHsKKwkJcmV0dXJuIE5VTEw7CisJ
fQorCisJaWYgKGNvcHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCBjZmcsIGNmZ2xlbikp
IHsKKwkJRCgiRnVsbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJbm1fb3NfZnJlZShjZmcpOworCQly
ZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2ZnOworfQorCitzdGF0aWMgaW50IG5tX3VudXNl
ZF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqLCBpbnQpOworc3RhdGljIGludCBubV9wdF9o
b3N0X25vdGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICosIGludCk7CisKKy8qIENyZWF0ZSBwdG5l
dG1hcCBzdGF0ZSBhbmQgc3dpdGNoIHBhcmVudCBhZGFwdGVyIHRvIHB0bmV0bWFwIG1vZGUuICov
CitzdGF0aWMgaW50CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0
ZXIgKnB0aF9uYSwKKwkJc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKQoreworICAgIHN0cnVjdCBw
dG5ldG1hcF9zdGF0ZSAqcHRuczsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX3JpbmdzOworICAgIGlu
dCByZXQsIGk7CisKKyAgICAvKiBDaGVjayBpZiBwdG5ldG1hcCBzdGF0ZSBpcyBhbHJlYWR5IHRo
ZXJlLiAqLworICAgIGlmIChwdGhfbmEtPnB0bnMpIHsKKyAgICAgICAgRCgiRVJST1IgYWRhcHRl
ciAlcCBhbHJlYWR5IGluIHB0bmV0bWFwIG1vZGUiLCBwdGhfbmEtPnBhcmVudCk7CisgICAgICAg
IHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1f
dHhfcmluZ3MgKyBwdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKworICAgIGlmIChudW1fcmluZ3Mg
IT0gY2ZnLT5udW1fcmluZ3MpIHsKKyAgICAgICAgRCgiRVJST1IgY29uZmlndXJhdGlvbiBtaXNt
YXRjaCwgZXhwZWN0ZWQgJXUgcmluZ3MsIGZvdW5kICV1IiwKKyAgICAgICAgICAgbnVtX3Jpbmdz
LCBjZmctPm51bV9yaW5ncyk7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAg
cHRucyA9IG5tX29zX21hbGxvYyhzaXplb2YoKnB0bnMpICsgbnVtX3JpbmdzICogc2l6ZW9mKCpw
dG5zLT5rdGhyZWFkcykpOworICAgIGlmICghcHRucykgeworICAgICAgICByZXR1cm4gRU5PTUVN
OworICAgIH0KKworICAgIHB0bnMtPmt0aHJlYWRzID0gKHN0cnVjdCBubV9rdGhyZWFkICoqKShw
dG5zICsgMSk7CisgICAgcHRucy0+c3RvcHBlZCA9IHRydWU7CisKKyAgICAvKiBDcm9zcy1saW5r
IGRhdGEgc3RydWN0dXJlcy4gKi8KKyAgICBwdGhfbmEtPnB0bnMgPSBwdG5zOworICAgIHB0bnMt
PnB0aF9uYSA9IHB0aF9uYTsKKworICAgIC8qIFN0b3JlIHRoZSBDU0IgYWRkcmVzcyBwcm92aWRl
ZCBieSB0aGUgaHlwZXJ2aXNvci4gKi8KKyAgICBwdG5zLT5wdHJpbmdzID0gY2ZnLT5wdHJpbmdz
OworCisgICAgREJHKHB0bmV0bWFwX3ByaW50X2NvbmZpZ3VyYXRpb24oY2ZnKSk7CisKKyAgICAv
KiBDcmVhdGUga3RocmVhZHMgKi8KKyAgICBpZiAoKHJldCA9IHB0bmV0bWFwX2NyZWF0ZV9rdGhy
ZWFkcyhwdGhfbmEsIGNmZykpKSB7CisgICAgICAgIEQoIkVSUk9SIHB0bmV0bWFwX2NyZWF0ZV9r
dGhyZWFkcygpIik7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKyAgICAvKiBDb3B5IGtyaW5n
cyBzdGF0ZSBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBpbml0aWFsaXphdGlvbiAqLworICAg
IGlmICgocmV0ID0gcHRuZXRtYXBfa3JpbmdzX3NuYXBzaG90KHB0aF9uYSkpKSB7CisgICAgICAg
IEQoIkVSUk9SIHB0bmV0bWFwX2tyaW5nc19zbmFwc2hvdCgpIik7CisgICAgICAgIGdvdG8gZXJy
OworICAgIH0KKworICAgIC8qIE92ZXJ3cml0ZSBwYXJlbnQgbm1fbm90aWZ5IGtyaW5ncyBjYWxs
YmFjay4gKi8KKyAgICBwdGhfbmEtPnBhcmVudC0+bmFfcHJpdmF0ZSA9IHB0aF9uYTsKKyAgICBw
dGhfbmEtPnBhcmVudF9ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudC0+bm1fbm90aWZ5OworICAg
IHB0aF9uYS0+cGFyZW50LT5ubV9ub3RpZnkgPSBubV91bnVzZWRfbm90aWZ5OworCisgICAgZm9y
IChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAg
ICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0KKyAgICAgICAgCXB0aF9uYS0+
dXAucnhfcmluZ3NbaV0ubm1fbm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ld
Lm5tX25vdGlmeSA9IG5tX3B0X2hvc3Rfbm90aWZ5OworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBp
IDwgcHRoX25hLT5wYXJlbnQtPm51bV90eF9yaW5nczsgaSsrKSB7CisgICAgICAgIHB0aF9uYS0+
dXAudHhfcmluZ3NbaV0uc2F2ZV9ub3RpZnkgPQorICAgICAgICAJcHRoX25hLT51cC50eF9yaW5n
c1tpXS5ubV9ub3RpZnk7CisgICAgICAgIHB0aF9uYS0+dXAudHhfcmluZ3NbaV0ubm1fbm90aWZ5
ID0gbm1fcHRfaG9zdF9ub3RpZnk7CisgICAgfQorCisjaWZkZWYgUkFURQorICAgIG1lbXNldCgm
cHRucy0+cmF0ZV9jdHgsIDAsIHNpemVvZihwdG5zLT5yYXRlX2N0eCkpOworICAgIHNldHVwX3Rp
bWVyKCZwdG5zLT5yYXRlX2N0eC50aW1lciwgJnJhdGVfY2FsbGJhY2ssCisgICAgICAgICAgICAo
dW5zaWduZWQgbG9uZykmcHRucy0+cmF0ZV9jdHgpOworICAgIGlmIChtb2RfdGltZXIoJnB0bnMt
PnJhdGVfY3R4LnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTAwKSkpCisgICAg
ICAgIEQoIltwdG5dIEVycm9yOiBtb2RfdGltZXIoKVxuIik7CisjZW5kaWYKKworICAgIERCRyhE
KCJbJXNdIHB0bmV0bWFwIGNvbmZpZ3VyYXRpb24gRE9ORSIsIHB0aF9uYS0+dXAubmFtZSkpOwor
CisgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICBwdGhfbmEtPnB0bnMgPSBOVUxMOworICAgIG5t
X29zX2ZyZWUocHRucyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogU3dpdGNoIHBhcmVudCBh
ZGFwdGVyIGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKyAqIHB0bmV0bWFwIHN0YXRl
LiAqLworc3RhdGljIHZvaWQKK3B0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3Rf
YWRhcHRlciAqcHRoX25hKQoreworICAgIHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRucyA9IHB0
aF9uYS0+cHRuczsKKyAgICBpbnQgbnVtX3JpbmdzOworICAgIGludCBpOworCisgICAgaWYgKCFw
dG5zKSB7CisJLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8qIFJlc3RvcmUgcGFyZW50IGFkYXB0ZXIgY2FsbGJhY2tzLiAqLworICAgIHB0aF9uYS0+
cGFyZW50LT5ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudF9ubV9ub3RpZnk7CisgICAgcHRoX25h
LT5wYXJlbnQtPm5hX3ByaXZhdGUgPSBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9u
YS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnJ4X3Jp
bmdzW2ldLm5tX25vdGlmeSA9CisgICAgICAgIAlwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVf
bm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVM
TDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fdHhfcmlu
Z3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLm5tX25vdGlmeSA9Cisg
ICAgICAgIAlwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5OworICAgICAgICBwdGhf
bmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBE
ZWxldGUga3RocmVhZHMuICovCisgICAgbnVtX3JpbmdzID0gcHRucy0+cHRoX25hLT51cC5udW1f
dHhfcmluZ3MgKworICAgICAgICAgICAgICAgIHB0bnMtPnB0aF9uYS0+dXAubnVtX3J4X3Jpbmdz
OworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcmluZ3M7IGkrKykgeworICAgICAgICBubV9vc19r
dGhyZWFkX2RlbGV0ZShwdG5zLT5rdGhyZWFkc1tpXSk7CisJcHRucy0+a3RocmVhZHNbaV0gPSBO
VUxMOworICAgIH0KKworICAgIElGUkFURShkZWxfdGltZXIoJnB0bnMtPnJhdGVfY3R4LnRpbWVy
KSk7CisKKyAgICBubV9vc19mcmVlKHB0bnMpOworCisgICAgcHRoX25hLT5wdG5zID0gTlVMTDsK
KworICAgIERCRyhEKCJbJXNdIHB0bmV0bWFwIGRlbGV0ZWQiLCBwdGhfbmEtPnVwLm5hbWUpKTsK
K30KKworLyoKKyAqIENhbGxlZCBieSBuZXRtYXBfaW9jdGwoKS4KKyAqIE9wZXJhdGlvbiBpcyBp
bmRpY2F0ZWQgaW4gbm1yLT5ucl9jbWQuCisgKgorICogQ2FsbGVkIHdpdGhvdXQgTk1HX0xPQ0su
CisgKi8KK2ludAorcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf
bmE7CisgICAgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnOworICAgIGNoYXIgKm5hbWU7CisgICAg
aW50IGNtZCwgZXJyb3IgPSAwOworCisgICAgbmFtZSA9IG5tci0+bnJfbmFtZTsKKyAgICBjbWQg
PSBubXItPm5yX2NtZDsKKworICAgIERCRyhEKCJuYW1lOiAlcyIsIG5hbWUpKTsKKworICAgIGlm
ICghbm1fcHRuZXRtYXBfaG9zdF9vbihuYSkpIHsKKyAgICAgICAgRCgiRVJST1IgTmV0bWFwIGFk
YXB0ZXIgJXAgaXMgbm90IGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIiwgbmEpOworICAgICAgICBl
cnJvciA9IEVOWElPOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHB0aF9uYSA9IChz
dHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworCisgICAgTk1HX0xPQ0soKTsKKyAg
ICBzd2l0Y2ggKGNtZCkgeworICAgIGNhc2UgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFOgorCS8qIFJl
YWQgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9uIGZyb20gdXNlcnNwYWNlLiAqLworICAgICAgICBj
ZmcgPSBwdG5ldG1hcF9yZWFkX2NmZyhubXIpOworICAgICAgICBpZiAoIWNmZykKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAvKiBDcmVhdGUgcHRuZXRtYXAgc3RhdGUgKGt0aHJlYWRzLCAu
Li4pIGFuZCBzd2l0Y2ggcGFyZW50CisJICogYWRhcHRlciB0byBwdG5ldG1hcCBtb2RlLiAqLwor
ICAgICAgICBlcnJvciA9IHB0bmV0bWFwX2NyZWF0ZShwdGhfbmEsIGNmZyk7CisJbm1fb3NfZnJl
ZShjZmcpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
LyogU3RhcnQga3RocmVhZHMuICovCisgICAgICAgIGVycm9yID0gcHRuZXRtYXBfc3RhcnRfa3Ro
cmVhZHMocHRoX25hKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcHRuZXRtYXBf
ZGVsZXRlKHB0aF9uYSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBORVRNQVBfUFRfSE9T
VF9ERUxFVEU6CisgICAgICAgIC8qIFN0b3Aga3RocmVhZHMuICovCisgICAgICAgIHB0bmV0bWFw
X3N0b3Bfa3RocmVhZHMocHRoX25hKTsKKyAgICAgICAgLyogU3dpdGNoIHBhcmVudCBhZGFwdGVy
IGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKwkgKiBwdG5ldG1hcCBzdGF0ZSAoa3Ro
cmVhZHMsIC4uLikuICovCisgICAgICAgIHB0bmV0bWFwX2RlbGV0ZShwdGhfbmEpOworICAgICAg
ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEQoIkVSUk9SIGludmFsaWQgY21kIChu
bXItPm5yX2NtZCkgKDB4JXgpIiwgY21kKTsKKyAgICAgICAgZXJyb3IgPSBFSU5WQUw7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBOTUdfVU5MT0NLKCk7CisKK2RvbmU6CisgICAgcmV0dXJu
IGVycm9yOworfQorCisvKiBubV9ub3RpZnkgY2FsbGJhY2tzIGZvciBwdG5ldG1hcCAqLworc3Rh
dGljIGludAorbm1fcHRfaG9zdF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGlu
dCBmbGFncykKK3sKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0ga3JpbmctPm5hOworCXN0
cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9w
dF9ob3N0X2FkYXB0ZXIgKiluYS0+bmFfcHJpdmF0ZTsKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg
KnB0bnM7CisJaW50IGs7CisKKwkvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBwYXNzdGhyb3VnaCBw
b3J0IGlzIG5vdCBiZWluZyBkZXN0cm95ZWQuICovCisJaWYgKHVubGlrZWx5KCFwdGhfbmEpKSB7
CisJCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworCX0KKworCXB0bnMgPSBwdGhfbmEtPnB0bnM7
CisJaWYgKHVubGlrZWx5KCFwdG5zIHx8IHB0bnMtPnN0b3BwZWQpKSB7CisJCXJldHVybiBOTV9J
UlFfQ09NUExFVEVEOworCX0KKworCWsgPSBrcmluZy0+cmluZ19pZDsKKworCS8qIE5vdGlmeSBr
dGhyZWFkcyAod2FrZSB1cCBpZiBuZWVkZWQpICovCisJaWYgKGtyaW5nLT50eCA9PSBOUl9UWCkg
eworCQlORCgxLCAiVFggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l
dy5idHh3dSsrKTsKKwl9IGVsc2UgeworCQlrICs9IHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOwor
CQlORCgxLCAiUlggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5i
cnh3dSsrKTsKKwl9CisJbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHB0bnMtPmt0aHJlYWRz
W2tdKTsKKworCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworfQorCitzdGF0aWMgaW50CitubV91
bnVzZWRfbm90aWZ5KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7Cisg
ICAgRCgiQlVHIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCIpOworICAgIHJldHVybiBFTlhJ
TzsKK30KKworLyogbm1fY29uZmlnIGNhbGxiYWNrIGZvciBid3JhcCAqLworc3RhdGljIGludAor
bm1fcHRfaG9zdF9jb25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdV9pbnQgKnR4ciwg
dV9pbnQgKnR4ZCwKKyAgICAgICAgdV9pbnQgKnJ4ciwgdV9pbnQgKnJ4ZCkKK3sKKyAgICBzdHJ1
Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAgKHN0cnVjdCBuZXRt
YXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJl
bnQgPSBwdGhfbmEtPnBhcmVudDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvL1hYWDogbWF5YmUg
Y2FsbGluZyBwYXJlbnQtPm5tX2NvbmZpZyBpcyBiZXR0ZXIKKworICAgIC8qIGZvcndhcmQgdGhl
IHJlcXVlc3QgKi8KKyAgICBlcnJvciA9IG5ldG1hcF91cGRhdGVfY29uZmlnKHBhcmVudCk7CisK
KyAgICAqcnhyID0gbmEtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+bnVtX3J4X3JpbmdzOworICAg
ICp0eHIgPSBuYS0+bnVtX3R4X3JpbmdzID0gcGFyZW50LT5udW1fdHhfcmluZ3M7CisgICAgKnR4
ZCA9IG5hLT5udW1fdHhfZGVzYyA9IHBhcmVudC0+bnVtX3R4X2Rlc2M7CisgICAgKnJ4ZCA9IG5h
LT5udW1fcnhfZGVzYyA9IHBhcmVudC0+bnVtX3J4X2Rlc2M7CisKKyAgICBEQkcoRCgicnhyOiAl
ZCB0eHI6ICVkIHR4ZDogJWQgcnhkOiAlZCIsICpyeHIsICp0eHIsICp0eGQsICpyeGQpKTsKKwor
ICAgIHJldHVybiBlcnJvcjsKK30KKworLyogbm1fa3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBmb3Ig
cHRuZXRtYXAgKi8KK3N0YXRpYyBpbnQKK25tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZShzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVy
ICpwdGhfbmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsK
KyAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworICAg
IGVudW0gdHhyeCB0OworICAgIGludCBlcnJvcjsKKworICAgIERCRyhEKCIlcyIsIHB0aF9uYS0+
dXAubmFtZSkpOworCisgICAgLyogY3JlYXRlIHRoZSBwYXJlbnQga3JpbmdzICovCisgICAgZXJy
b3IgPSBwYXJlbnQtPm5tX2tyaW5nc19jcmVhdGUocGFyZW50KTsKKyAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIEEgcHRuZXRtYXAgaG9zdCBh
ZGFwdGVyIHBvaW50cyB0aGUgdmVyeSBzYW1lIGtyaW5ncworICAgICAqIGFzIGl0cyBwYXJlbnQg
YWRhcHRlci4gVGhlc2UgcG9pbnRlciBhcmUgdXNlZCBpbiB0aGUKKyAgICAgKiBUWC9SWCB3b3Jr
ZXIgZnVuY3Rpb25zLiAqLworICAgIG5hLT50eF9yaW5ncyA9IHBhcmVudC0+dHhfcmluZ3M7Cisg
ICAgbmEtPnJ4X3JpbmdzID0gcGFyZW50LT5yeF9yaW5nczsKKyAgICBuYS0+dGFpbHJvb20gPSBw
YXJlbnQtPnRhaWxyb29tOworCisgICAgZm9yX3J4X3R4KHQpIHsKKwlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZzsKKworCS8qIFBhcmVudCdzIGtyaW5nX2NyZWF0ZSBmdW5jdGlvbiB3aWxsIGlu
aXRpYWxpemUKKwkgKiBpdHMgb3duIG5hLT5zaS4gV2UgaGF2ZSB0byBpbml0IG91ciBuYS0+c2kg
aGVyZS4gKi8KKwlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CisKKwkvKiBGb3JjZSB0
aGUgbWVtX3JpbmdzX2NyZWF0ZSgpIG1ldGhvZCB0byBjcmVhdGUgdGhlCisJICogaG9zdCByaW5n
cyBpbmRlcGVuZGVudGx5IG9uIHdoYXQgdGhlIHJlZ2lmIGFza2VkIGZvcjoKKwkgKiB0aGVzZSBy
aW5ncyBhcmUgbmVlZGVkIGJ5IHRoZSBndWVzdCBwdG5ldG1hcCBhZGFwdGVyCisJICogYW55d2F5
LiAqLworCWtyaW5nID0gJk5NUihuYSwgdClbbm1hX2dldF9ucmluZ3MobmEsIHQpXTsKKwlrcmlu
Zy0+bnJfa2ZsYWdzIHw9IE5LUl9ORUVEUklORzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworLyogbm1fa3JpbmdzX2RlbGV0ZSBjYWxsYmFjayBmb3IgcHRuZXRtYXAgKi8KK3N0YXRpYyB2
b2lkCitubV9wdF9ob3N0X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
K3sKKyAgICBzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAg
KHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9h
ZGFwdGVyICpwYXJlbnQgPSBwdGhfbmEtPnBhcmVudDsKKworICAgIERCRyhEKCIlcyIsIHB0aF9u
YS0+dXAubmFtZSkpOworCisgICAgcGFyZW50LT5ubV9rcmluZ3NfZGVsZXRlKHBhcmVudCk7CisK
KyAgICBuYS0+dHhfcmluZ3MgPSBuYS0+cnhfcmluZ3MgPSBuYS0+dGFpbHJvb20gPSBOVUxMOwor
fQorCisvKiBubV9yZWdpc3RlciBjYWxsYmFjayAqLworc3RhdGljIGludAorbm1fcHRfaG9zdF9y
ZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisgICAgc3Ry
dWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSA9CisgICAgICAgIChzdHJ1Y3QgbmV0
bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworICAgIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqcGFy
ZW50ID0gcHRoX25hLT5wYXJlbnQ7CisgICAgaW50IGVycm9yOworICAgIERCRyhEKCIlcyBvbm9m
ZiAlZCIsIHB0aF9uYS0+dXAubmFtZSwgb25vZmYpKTsKKworICAgIGlmIChvbm9mZikgeworICAg
ICAgICAvKiBuZXRtYXBfZG9fcmVnaWYgaGFzIGJlZW4gY2FsbGVkIG9uIHRoZSBwdG5ldG1hcCBu
YS4KKyAgICAgICAgICogV2UgbmVlZCB0byBwYXNzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUK
KyAgICAgICAgICogbWVtb3J5IGFsbG9jYXRvciB0byB0aGUgcGFyZW50IGJlZm9yZQorICAgICAg
ICAgKiBwdXR0aW5nIGl0IGluIG5ldG1hcCBtb2RlCisgICAgICAgICAqLworICAgICAgICBwYXJl
bnQtPm5hX2x1dCA9IG5hLT5uYV9sdXQ7CisgICAgfQorCisgICAgLyogZm9yd2FyZCB0aGUgcmVx
dWVzdCB0byB0aGUgcGFyZW50ICovCisgICAgZXJyb3IgPSBwYXJlbnQtPm5tX3JlZ2lzdGVyKHBh
cmVudCwgb25vZmYpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisK
KyAgICBpZiAob25vZmYpIHsKKyAgICAgICAgbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT04g
fCBOQUZfUFRORVRNQVBfSE9TVDsKKyAgICB9IGVsc2UgeworICAgICAgICBwdG5ldG1hcF9kZWxl
dGUocHRoX25hKTsKKyAgICAgICAgbmEtPm5hX2ZsYWdzICY9IH4oTkFGX05FVE1BUF9PTiB8IE5B
Rl9QVE5FVE1BUF9IT1NUKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogbm1fZHRv
ciBjYWxsYmFjayAqLworc3RhdGljIHZvaWQKK25tX3B0X2hvc3RfZHRvcihzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf
bmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsKKyAgICBz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworCisgICAgREJH
KEQoIiVzIiwgcHRoX25hLT51cC5uYW1lKSk7CisKKyAgICAvKiBUaGUgZXF1aXZhbGVudCBvZiBO
RVRNQVBfUFRfSE9TVF9ERUxFVEUgaWYgdGhlIGh5cGVydmlzb3IKKyAgICAgKiBkaWRuJ3QgZG8g
aXQuICovCisgICAgcHRuZXRtYXBfc3RvcF9rdGhyZWFkcyhwdGhfbmEpOworICAgIHB0bmV0bWFw
X2RlbGV0ZShwdGhfbmEpOworCisgICAgcGFyZW50LT5uYV9mbGFncyAmPSB+TkFGX0JVU1k7CisK
KyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocHRoX25hLT5wYXJlbnQpOworICAgIHB0aF9uYS0+cGFy
ZW50ID0gTlVMTDsKK30KKworLyogY2hlY2sgaWYgbm1yIGlzIGEgcmVxdWVzdCBmb3IgYSBwdG5l
dG1hcCBhZGFwdGVyIHRoYXQgd2UgY2FuIHNhdGlzZnkgKi8KK2ludAorbmV0bWFwX2dldF9wdF9o
b3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50
IGNyZWF0ZSkKK3sKKyAgICBzdHJ1Y3Qgbm1yZXEgcGFyZW50X25tcjsKKyAgICBzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKnBhcmVudDsgLyogdGFyZ2V0IGFkYXB0ZXIgKi8KKyAgICBzdHJ1Y3QgbmV0
bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hOworICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gTlVM
TDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvKiBDaGVjayBpZiBpdCBpcyBhIHJlcXVlc3QgZm9y
IGEgcHRuZXRtYXAgYWRhcHRlciAqLworICAgIGlmICgobm1yLT5ucl9mbGFncyAmIChOUl9QVE5F
VE1BUF9IT1NUKSkgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEKCJS
ZXF1ZXN0aW5nIGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIik7CisKKyAgICBwdGhfbmEgPSBubV9v
c19tYWxsb2Moc2l6ZW9mKCpwdGhfbmEpKTsKKyAgICBpZiAocHRoX25hID09IE5VTEwpIHsKKyAg
ICAgICAgRCgiRVJST1IgbWFsbG9jIik7CisgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgfQor
CisgICAgLyogZmlyc3QsIHRyeSB0byBmaW5kIHRoZSBhZGFwdGVyIHRoYXQgd2Ugd2FudCB0byBw
YXNzdGhyb3VnaAorICAgICAqIFdlIHVzZSB0aGUgc2FtZSBubXIsIGFmdGVyIHdlIGhhdmUgdHVy
bmVkIG9mZiB0aGUgcHRuZXRtYXAgZmxhZy4KKyAgICAgKiBJbiB0aGlzIHdheSB3ZSBjYW4gcG90
ZW50aWFsbHkgcGFzc3Rocm91Z2ggZXZlcnl0aGluZyBuZXRtYXAgdW5kZXJzdGFuZHMuCisgICAg
ICovCisgICAgbWVtY3B5KCZwYXJlbnRfbm1yLCBubXIsIHNpemVvZihwYXJlbnRfbm1yKSk7Cisg
ICAgcGFyZW50X25tci5ucl9mbGFncyAmPSB+KE5SX1BUTkVUTUFQX0hPU1QpOworICAgIGVycm9y
ID0gbmV0bWFwX2dldF9uYSgmcGFyZW50X25tciwgJnBhcmVudCwgJmlmcCwgY3JlYXRlKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgRCgicGFyZW50IGxvb2t1cCBmYWlsZWQ6ICVkIiwgZXJy
b3IpOworICAgICAgICBnb3RvIHB1dF9vdXRfbm9wdXRwYXJlbnQ7CisgICAgfQorICAgIERCRyhE
KCJmb3VuZCBwYXJlbnQ6ICVzIiwgcGFyZW50LT5uYW1lKSk7CisKKyAgICAvKiBtYWtlIHN1cmUg
dGhlIGludGVyZmFjZSBpcyBub3QgYWxyZWFkeSBpbiB1c2UgKi8KKyAgICBpZiAoTkVUTUFQX09X
TkVEX0JZX0FOWShwYXJlbnQpKSB7CisgICAgICAgIEQoIk5JQyAlcyBidXN5LCBjYW5ub3QgcHRu
ZXRtYXAiLCBwYXJlbnQtPm5hbWUpOworICAgICAgICBlcnJvciA9IEVCVVNZOworICAgICAgICBn
b3RvIHB1dF9vdXQ7CisgICAgfQorCisgICAgcHRoX25hLT5wYXJlbnQgPSBwYXJlbnQ7CisKKyAg
ICAvKiBGb2xsb3cgbmV0bWFwX2F0dGFjaCgpLWxpa2Ugb3BlcmF0aW9ucyBmb3IgdGhlIGhvc3QK
KyAgICAgKiBwdG5ldG1hcCBhZGFwdGVyLiAqLworCisgICAgLy9YWFggcHRoX25hLT51cC5uYV9m
bGFncyA9IHBhcmVudC0+bmFfZmxhZ3M7CisgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3MgPSBw
YXJlbnQtPm51bV9yeF9yaW5nczsKKyAgICBwdGhfbmEtPnVwLm51bV90eF9yaW5ncyA9IHBhcmVu
dC0+bnVtX3R4X3JpbmdzOworICAgIHB0aF9uYS0+dXAubnVtX3R4X2Rlc2MgPSBwYXJlbnQtPm51
bV90eF9kZXNjOworICAgIHB0aF9uYS0+dXAubnVtX3J4X2Rlc2MgPSBwYXJlbnQtPm51bV9yeF9k
ZXNjOworCisgICAgcHRoX25hLT51cC5ubV9kdG9yID0gbm1fcHRfaG9zdF9kdG9yOworICAgIHB0
aF9uYS0+dXAubm1fcmVnaXN0ZXIgPSBubV9wdF9ob3N0X3JlZ2lzdGVyOworCisgICAgLyogUmV1
c2UgcGFyZW50J3MgYWRhcHRlciB0eHN5bmMgYW5kIHJ4c3luYyBtZXRob2RzLiAqLworICAgIHB0
aF9uYS0+dXAubm1fdHhzeW5jID0gcGFyZW50LT5ubV90eHN5bmM7CisgICAgcHRoX25hLT51cC5u
bV9yeHN5bmMgPSBwYXJlbnQtPm5tX3J4c3luYzsKKworICAgIHB0aF9uYS0+dXAubm1fa3Jpbmdz
X2NyZWF0ZSA9IG5tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZTsKKyAgICBwdGhfbmEtPnVwLm5tX2ty
aW5nc19kZWxldGUgPSBubV9wdF9ob3N0X2tyaW5nc19kZWxldGU7CisgICAgcHRoX25hLT51cC5u
bV9jb25maWcgPSBubV9wdF9ob3N0X2NvbmZpZzsKKworICAgIC8qIFNldCB0aGUgbm90aWZ5IG1l
dGhvZCBvbmx5IG9yIGNvbnZlbmllbmNlLCBpdCB3aWxsIG5ldmVyCisgICAgICogYmUgdXNlZCwg
c2luY2UgLSBkaWZmZXJlbnRseSBmcm9tIGRlZmF1bHQga3JpbmdzX2NyZWF0ZSAtIHdlCisgICAg
ICogcHRuZXRtYXAga3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBpbml0cyBrcmluZy0+bm1fbm90aWZ5
CisgICAgICogZGlyZWN0bHkuICovCisgICAgcHRoX25hLT51cC5ubV9ub3RpZnkgPSBubV91bnVz
ZWRfbm90aWZ5OworCisgICAgcHRoX25hLT51cC5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChwYXJl
bnQtPm5tX21lbSk7CisKKyAgICBwdGhfbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9IT1NUX1JJTkdT
OworCisgICAgZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmcHRoX25hLT51cCk7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIEQoIkVSUk9SIG5ldG1hcF9hdHRhY2hfY29tbW9uKCkiKTsK
KyAgICAgICAgZ290byBwdXRfb3V0OworICAgIH0KKworICAgICpuYSA9ICZwdGhfbmEtPnVwOwor
ICAgIG5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOworCisgICAgLyogc2V0IHBhcmVudCBidXN5LCBi
ZWNhdXNlIGF0dGFjaGVkIGZvciBwdG5ldG1hcCAqLworICAgIHBhcmVudC0+bmFfZmxhZ3MgfD0g
TkFGX0JVU1k7CisKKyAgICBzdHJuY3B5KHB0aF9uYS0+dXAubmFtZSwgcGFyZW50LT5uYW1lLCBz
aXplb2YocHRoX25hLT51cC5uYW1lKSk7CisgICAgc3RyY2F0KHB0aF9uYS0+dXAubmFtZSwgIi1Q
VE4iKTsKKworICAgIERCRyhEKCIlcyBwdG5ldG1hcCByZXF1ZXN0IERPTkUiLCBwdGhfbmEtPnVw
Lm5hbWUpKTsKKworICAgIC8qIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgaWZwLCBpZiBhbnkg
Ki8KKyAgICBpZiAoaWZwKQorICAgICAgICBpZl9yZWxlKGlmcCk7CisKKyAgICByZXR1cm4gMDsK
KworcHV0X291dDoKKyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocGFyZW50KTsKKyAgICBpZiAoaWZw
KQorCWlmX3JlbGUoaWZwKTsKK3B1dF9vdXRfbm9wdXRwYXJlbnQ6CisgICAgbm1fb3NfZnJlZShw
dGhfbmEpOworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0hP
U1QgKi8KKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKKy8qCisgKiBHdWVzdCBwdG5ldG1h
cCB0eHN5bmMoKS9yeHN5bmMoKSByb3V0aW5lcywgdXNlZCBpbiBwdG5ldCBkZXZpY2UgZHJpdmVy
cy4KKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSByZXVzZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQgb3Bl
cmF0aW5nIHN5c3RlbXMgc3VwcG9ydGVkCisgKiBieSBuZXRtYXAuCisgKi8KKworLyoKKyAqIFJl
Y29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3cyBvZiB0aGUgdHJhbnNtaXQgcmluZy4KKyAqCisg
KiBHdWVzdCB1c2VyIHdhbnRzIHRvIHRyYW5zbWl0IHBhY2tldHMgdXAgdG8gdGhlIG9uZSBiZWZv
cmUgcmluZy0+aGVhZCwKKyAqIGFuZCBndWVzdCBrZXJuZWwga25vd3MgdHhfcmluZy0+aHdjdXIg
aXMgdGhlIGZpcnN0IHBhY2tldCB1bnNlbnQKKyAqIGJ5IHRoZSBob3N0IGtlcm5lbC4KKyAqCisg
KiBXZSBwdXNoIG91dCBhcyBtYW55IHBhY2tldHMgYXMgcG9zc2libGUsIGFuZCBwb3NzaWJseQor
ICogcmVjbGFpbSBidWZmZXJzIGZyb20gcHJldmlvdXNseSBjb21wbGV0ZWQgdHJhbnNtaXNzaW9u
LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBvbmx5IGlm
IHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gc3BhY2UgaW4gdGhlIHJpbmcpLgor
ICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfdHhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJp
bmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkgICAgICAgaW50IGZsYWdzKQorewor
CWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKwkvKiBEaXNhYmxlIG5vdGlmaWNhdGlvbnMgKi8KKwlw
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisKKwkvKgorCSAqIEZpcnN0IHBhcnQ6IHRlbGwg
dGhlIGhvc3QgKHVwZGF0aW5nIHRoZSBDU0IpIHRvIHByb2Nlc3MgdGhlIG5ldworCSAqIHBhY2tl
dHMuCisJICovCisJa3JpbmctPm5yX2h3Y3VyID0gcHRyaW5nLT5od2N1cjsKKwlwdG5ldG1hcF9n
dWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwga3JpbmctPnJoZWFkKTsK
KworICAgICAgICAvKiBBc2sgZm9yIGEga2ljayBmcm9tIGEgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYg
bmVlZGVkLiAqLworCWlmICgoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1ciAmJgorCQlO
TV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgfHwKKwkJCShmbGFncyAmIE5B
Rl9GT1JDRV9SRUNMQUlNKSkgeworCQlwdHJpbmctPnN5bmNfZmxhZ3MgPSBmbGFnczsKKwkJbm90
aWZ5ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFNlY29uZCBwYXJ0OiByZWNsYWltIGJ1ZmZlcnMg
Zm9yIGNvbXBsZXRlZCB0cmFuc21pc3Npb25zLgorCSAqLworCWlmIChubV9rcl90eGVtcHR5KGty
aW5nKSB8fCAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSkpIHsKKyAgICAgICAgICAgICAgICBw
dG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKwl9CisKKyAgICAg
ICAgLyoKKyAgICAgICAgICogTm8gbW9yZSByb29tIGluIHRoZSByaW5nIGZvciBuZXcgdHJhbnNt
aXNzaW9ucy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwKKwkgKiBnbyB0byBzbGVlcCBhbmQgd2UgbmVl
ZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3aGVuIG1vcmUgZnJlZQorCSAqIHNwYWNlIGlz
IGF2YWlsYWJsZS4KKyAgICAgICAgICovCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CisJ
CS8qIFJlZW5hYmxlIG5vdGlmaWNhdGlvbnMuICovCisJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNr
ID0gMTsKKyAgICAgICAgICAgICAgICAvKiBEb3VibGUgY2hlY2sgKi8KKyAgICAgICAgICAgICAg
ICBwdG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKyAgICAgICAg
ICAgICAgICAvKiBJZiB0aGVyZSBpcyBuZXcgZnJlZSBzcGFjZSwgZGlzYWJsZSBub3RpZmljYXRp
b25zICovCisJCWlmICh1bmxpa2VseSghbm1fa3JfdHhlbXB0eShrcmluZykpKSB7CisJCQlwdHJp
bmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCX0KKwl9CisKKwlORCgxLCAiVFggLSBDU0I6IGhl
YWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1IGN1cjoldSB0YWlsOiAldSIs
CisJCQlwdHJpbmctPmhlYWQsIHB0cmluZy0+Y3VyLCBwdHJpbmctPmh3dGFpbCwKKwkJCWtyaW5n
LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ucl9od3RhaWwpOworCisJcmV0dXJuIG5vdGlm
eTsKK30KKworLyoKKyAqIFJlY29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3IG9mIHRoZSByZWNl
aXZlIHJpbmcuCisgKgorICogVXBkYXRlIGh3Y3VyL2h3dGFpbCBmcm9tIGhvc3QgKHJlYWRpbmcg
ZnJvbSBDU0IpLgorICoKKyAqIElmIGd1ZXN0IHVzZXIgaGFzIHJlbGVhc2VkIGJ1ZmZlcnMgdXAg
dG8gdGhlIG9uZSBiZWZvcmUgcmluZy0+aGVhZCwgd2UKKyAqIGFsc28gZ2l2ZSB0aGVtIHRvIHRo
ZSBob3N0LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBv
bmx5IGlmIHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gbW9yZSBjb21wbGV0ZWQg
c2xvdHMgaW4gdGhlIHJpbmcpLgorICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0
cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkg
ICAgICAgaW50IGZsYWdzKQoreworCWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKyAgICAgICAgLyog
RGlzYWJsZSBub3RpZmljYXRpb25zICovCisJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAwOwor
CisJLyoKKwkgKiBGaXJzdCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cywgYnkg
dXBkYXRpbmcgdGhlIGtyaW5nCisJICogaHd0YWlsIHRvIHRoZSBod3RhaWwga25vd24gZnJvbSB0
aGUgaG9zdCAocmVhZCBmcm9tIHRoZSBDU0IpLgorCSAqIFRoaXMgYWxzbyB1cGRhdGVzIHRoZSBr
cmluZyBod2N1ci4KKwkgKi8KKyAgICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2Io
cHRyaW5nLCBrcmluZyk7CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOworCisJ
LyoKKwkgKiBTZWNvbmQgcGFydDogdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUgc2xvdHMgdGhhdCBn
dWVzdCB1c2VyIGhhcworCSAqIHJlbGVhc2VkLCBieSB1cGRhdGluZyBjdXIgYW5kIGhlYWQgaW4g
dGhlIENTQi4KKwkgKi8KKwlpZiAoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1cikgewor
CQlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwKKwkJ
CQkJICAgICAgIGtyaW5nLT5yaGVhZCk7CisgICAgICAgICAgICAgICAgLyogQXNrIGZvciBhIGtp
Y2sgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYgbmVlZGVkLiAqLworCQlpZiAoTk1fQUND
RVNTX09OQ0UocHRyaW5nLT5ob3N0X25lZWRfa2ljaykpIHsKKwkJCXB0cmluZy0+c3luY19mbGFn
cyA9IGZsYWdzOworCQkJbm90aWZ5ID0gdHJ1ZTsKKwkJfQorCX0KKworICAgICAgICAvKgorICAg
ICAgICAgKiBObyBtb3JlIGNvbXBsZXRlZCBSWCBzbG90cy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwg
Z28gdG8gc2xlZXAgYW5kCisJICogd2UgbmVlZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3
aGVuIG1vcmUgUlggc2xvdHMgaGF2ZSBiZWVuCisJICogY29tcGxldGVkLgorICAgICAgICAgKi8K
KwlpZiAobm1fa3JfcnhlbXB0eShrcmluZykpIHsKKwkJLyogUmVlbmFibGUgbm90aWZpY2F0aW9u
cy4gKi8KKyAgICAgICAgICAgICAgICBwdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisgICAg
ICAgICAgICAgICAgLyogRG91YmxlIGNoZWNrICovCisgICAgICAgICAgICAgICAgcHRuZXRtYXBf
Z3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisgICAgICAgICAgICAgICAgLyog
SWYgdGhlcmUgYXJlIG5ldyBzbG90cywgZGlzYWJsZSBub3RpZmljYXRpb25zLiAqLworCQlpZiAo
IW5tX2tyX3J4ZW1wdHkoa3JpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHJpbmct
Pmd1ZXN0X25lZWRfa2ljayA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwlO
RCgxLCAiUlggLSBDU0I6IGhlYWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1
IGN1cjoldSIsCisJCXB0cmluZy0+aGVhZCwgcHRyaW5nLT5jdXIsIHB0cmluZy0+aHd0YWlsLAor
CQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyKTsKKworCXJldHVybiBub3RpZnk7Cit9CisKKy8q
CisgKiBDYWxsYmFja3MgZm9yIHB0bmV0IGRyaXZlcnM6IG5tX2tyaW5nc19jcmVhdGUsIG5tX2ty
aW5nc19kZWxldGUsIG5tX2R0b3IuCisgKi8KK2ludAorcHRuZXRfbm1fa3JpbmdzX2NyZWF0ZShz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh
cHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopbmE7IC8q
IFVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hX25tID0gJnB0bmEtPmh3dXAu
dXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9kciA9ICZwdG5hLT5kci51cDsKKwlpbnQg
cmV0OworCisJaWYgKHB0bmEtPmJhY2tlbmRfcmVnaWZzKSB7CisJCXJldHVybiAwOworCX0KKwor
CS8qIENyZWF0ZSBrcmluZ3Mgb24gdGhlIHB1YmxpYyBuZXRtYXAgYWRhcHRlci4gKi8KKwlyZXQg
PSBuZXRtYXBfaHdfa3JpbmdzX2NyZWF0ZShuYV9ubSk7CisJaWYgKHJldCkgeworCQlyZXR1cm4g
cmV0OworCX0KKworCS8qIENvcHkga3JpbmdzIGludG8gdGhlIG5ldG1hcCBhZGFwdGVyIHByaXZh
dGUgdG8gdGhlIGRyaXZlci4gKi8KKwluYV9kci0+dHhfcmluZ3MgPSBuYV9ubS0+dHhfcmluZ3M7
CisJbmFfZHItPnJ4X3JpbmdzID0gbmFfbm0tPnJ4X3JpbmdzOworCisJcmV0dXJuIDA7Cit9CisK
K3ZvaWQKK3B0bmV0X25tX2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
K3sKKwlzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgKnB0bmEgPQorCQkJKHN0cnVjdCBu
ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqKW5hOyAvKiBVcGNhc3QuICovCisJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYV9ubSA9ICZwdG5hLT5od3VwLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl
ciAqbmFfZHIgPSAmcHRuYS0+ZHIudXA7CisKKwlpZiAocHRuYS0+YmFja2VuZF9yZWdpZnMpIHsK
KwkJcmV0dXJuOworCX0KKworCW5hX2RyLT50eF9yaW5ncyA9IE5VTEw7CisJbmFfZHItPnJ4X3Jp
bmdzID0gTlVMTDsKKworCW5ldG1hcF9od19rcmluZ3NfZGVsZXRlKG5hX25tKTsKK30KKwordm9p
ZAorcHRuZXRfbm1fZHRvcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBu
ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVz
dF9hZGFwdGVyICopbmE7CisKKwluZXRtYXBfbWVtX3B1dChwdG5hLT5kci51cC5ubV9tZW0pOyAv
LyBYWFggaXMgdGhpcyBuZWVkZWQ/CisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9mKHB0bmEt
PmRyKSk7CisJbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfZGVsKG5hLT5ubV9tZW0sIG5hLT5pZnAp
OworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfdmFsZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF92YWxlLmMJ
MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF92YWxlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTYwNDIwMDAgKzAwMDAK
QEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVW5pdmVyc2l0
YWAgZGkgUGlzYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IFVuaXZlcnNpdGFgIGRpIFBpc2EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU4LDcgQEAKIAogI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwot
X19GQlNESUQoIiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfdmFs
ZS5jIDI4NTY5OCAyMDE1LTA3LTE5IDE4OjA2OjMwWiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFwLmMgMjU3MTc2IDIwMTMtMTAtMjYgMTc6
NTg6MzZaIGdsZWJpdXMgJCIpOwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8
c3lzL2Vycm5vLmg+CkBAIC0xMDEsNiArMTAyLDkgQEAKICN3YXJuaW5nIE9TWCBzdXBwb3J0IGlz
IG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmluZWQoX1dJ
TjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1cHBvcnRl
ZCBwbGF0Zm9ybQpAQCAtMTE5LDcgKzEyMyw3IEBACiAKIC8qCiAgKiBzeXN0ZW0gcGFyYW1ldGVy
cyAobW9zdCBvZiB0aGVtIGluIG5ldG1hcF9rZXJuLmgpCi0gKiBOTV9OQU1FCXByZWZpeCBmb3Ig
c3dpdGNoIHBvcnQgbmFtZXMsIGRlZmF1bHQgInZhbGUiCisgKiBOTV9CREdfTkFNRQlwcmVmaXgg
Zm9yIHN3aXRjaCBwb3J0IG5hbWVzLCBkZWZhdWx0ICJ2YWxlIgogICogTk1fQkRHX01BWFBPUlRT
CW51bWJlciBvZiBwb3J0cwogICogTk1fQlJJREdFUwltYXggbnVtYmVyIG9mIHN3aXRjaGVzIGlu
IHRoZSBzeXN0ZW0uCiAgKglYWFggc2hvdWxkIGJlY29tZSBhIHN5c2N0bCBvciB0dW5hYmxlCkBA
IC0xNDQsNyArMTQ4LDYgQEAKICNkZWZpbmUgTk1fQkRHX0JBVENIX01BWAkoTk1fQkRHX0JBVENI
ICsgTk1fTVVMVElTRUcpCiAvKiBOTV9GVF9OVUxMIHRlcm1pbmF0ZXMgYSBsaXN0IG9mIHNsb3Rz
IGluIHRoZSBmdCAqLwogI2RlZmluZSBOTV9GVF9OVUxMCQlOTV9CREdfQkFUQ0hfTUFYCi0jZGVm
aW5lCU5NX0JSSURHRVMJCTgJLyogbnVtYmVyIG9mIGJyaWRnZXMgKi8KIAogCiAvKgpAQCAtMTUy
LDE0ICsxNTUsMTUgQEAKICAqIHVzZWQgaW4gdGhlIGJyaWRnZS4gVGhlIGFjdHVhbCB2YWx1ZSBt
YXkgYmUgbGFyZ2VyIGFzIHRoZQogICogbGFzdCBwYWNrZXQgaW4gdGhlIGJsb2NrIG1heSBvdmVy
ZmxvdyB0aGUgc2l6ZS4KICAqLwotaW50IGJyaWRnZV9iYXRjaCA9IE5NX0JER19CQVRDSDsgLyog
YnJpZGdlIGJhdGNoIHNpemUgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JhdGNoID0gTk1fQkRHX0JB
VENIOyAvKiBicmlkZ2UgYmF0Y2ggc2l6ZSAqLworU1lTQkVHSU4odmFyc192YWxlKTsKIFNZU0NU
TF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBi
cmlkZ2VfYmF0Y2gsIENUTEZMQUdfUlcsICZicmlkZ2VfYmF0Y2gsIDAgLCAiIik7Ci0KK1NZU0VO
RDsKIAogc3RhdGljIGludCBuZXRtYXBfdnBfY3JlYXRlKHN0cnVjdCBubXJlcSAqLCBzdHJ1Y3Qg
aWZuZXQgKiwgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICoqKTsKIHN0YXRpYyBpbnQgbmV0bWFw
X3ZwX3JlZyhzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpOwotc3RhdGljIGlu
dCBuZXRtYXBfYndyYXBfcmVnaXN0ZXIoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9m
Zik7CitzdGF0aWMgaW50IG5ldG1hcF9id3JhcF9yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICos
IGludCBvbm9mZik7CiAKIC8qCiAgKiBGb3IgZWFjaCBvdXRwdXQgaW50ZXJmYWNlLCBubV9iZGdf
cSBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhIGxpc3QuCkBAIC0yMTMsNyArMjE3LDcgQEAKIAkgKiBm
b3J3YXJkIHRoaXMgcGFja2V0LiAgcmluZ19uciBpcyB0aGUgc291cmNlIHJpbmcgaW5kZXgsIGFu
ZCB0aGUKIAkgKiBmdW5jdGlvbiBtYXkgb3ZlcndyaXRlIHRoaXMgdmFsdWUgdG8gZm9yd2FyZCB0
aGlzIHBhY2tldCB0byBhCiAJICogZGlmZmVyZW50IHJpbmcgaW5kZXguCi0JICogVGhpcyBmdW5j
dGlvbiBtdXN0IGJlIHNldCBieSBuZXRtYXBfYmRnY3RsKCkuCisJICogVGhpcyBmdW5jdGlvbiBt
dXN0IGJlIHNldCBieSBuZXRtYXBfYmRnX2N0bCgpLgogCSAqLwogCXN0cnVjdCBuZXRtYXBfYmRn
X29wcyBiZGdfb3BzOwogCkBAIC0yNDQsNyArMjQ4LDcgQEAKICAqIFJpZ2h0IG5vdyB3ZSBoYXZl
IGEgc3RhdGljIGFycmF5IGFuZCBkZWxldGlvbnMgYXJlIHByb3RlY3RlZAogICogYnkgYW4gZXhj
bHVzaXZlIGxvY2suCiAgKi8KLXN0cnVjdCBubV9icmlkZ2UgKm5tX2JyaWRnZXM7CitzdGF0aWMg
c3RydWN0IG5tX2JyaWRnZSAqbm1fYnJpZGdlczsKICNlbmRpZiAvKiAhQ09ORklHX05FVF9OUyAq
LwogCiAKQEAgLTI3OCw2ICsyODIsNDUgQEAKIH0KIAogCitzdGF0aWMgaW50CitubV9pc19pZF9j
aGFyKGNvbnN0IGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fAor
CSAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJICAgICAgIChjID49ICcwJyAmJiBj
IDw9ICc5JykgfHwKKwkgICAgICAgKGMgPT0gJ18nKTsKK30KKworLyogVmFsaWRhdGUgdGhlIG5h
bWUgb2YgYSBWQUxFIGJyaWRnZSBwb3J0IGFuZCByZXR1cm4gdGhlCisgKiBwb3NpdGlvbiBvZiB0
aGUgIjoiIGNoYXJhY3Rlci4gKi8KK3N0YXRpYyBpbnQKK25tX3ZhbGVfbmFtZV92YWxpZGF0ZShj
b25zdCBjaGFyICpuYW1lKQoreworCWludCBjb2xvbl9wb3MgPSAtMTsKKwlpbnQgaTsKKworCWlm
ICghbmFtZSB8fCBzdHJsZW4obmFtZSkgPCBzdHJsZW4oTk1fQkRHX05BTUUpKSB7CisJCXJldHVy
biAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsKKwkJaWYgKG5hbWVbaV0g
PT0gJzonKSB7CisJCQlpZiAoY29sb25fcG9zICE9IC0xKSB7CisJCQkJcmV0dXJuIC0xOworCQkJ
fQorCQkJY29sb25fcG9zID0gaTsKKwkJfSBlbHNlIGlmICghbm1faXNfaWRfY2hhcihuYW1lW2ld
KSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGkgPj0gSUZOQU1TSVopIHsKKwkJ
cmV0dXJuIC0xOworCX0KKworCXJldHVybiBjb2xvbl9wb3M7Cit9CisKIC8qCiAgKiBsb2NhdGUg
YSBicmlkZ2UgYW1vbmcgdGhlIGV4aXN0aW5nIG9uZXMuCiAgKiBNVVNUIEJFIENBTExFRCBXSVRI
IE5NR19MT0NLKCkKQEAgLTI4OCw3ICszMzEsNyBAQAogc3RhdGljIHN0cnVjdCBubV9icmlkZ2Ug
Kgogbm1fZmluZF9icmlkZ2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGNyZWF0ZSkKIHsKLQlpbnQg
aSwgbCwgbmFtZWxlbjsKKwlpbnQgaSwgbmFtZWxlbjsKIAlzdHJ1Y3Qgbm1fYnJpZGdlICpiID0g
TlVMTCwgKmJyaWRnZXM7CiAJdV9pbnQgbnVtX2JyaWRnZXM7CiAKQEAgLTI5NiwyMSArMzM5LDEx
IEBACiAKIAluZXRtYXBfYm5zX2dldGJyaWRnZXMoJmJyaWRnZXMsICZudW1fYnJpZGdlcyk7CiAK
LQluYW1lbGVuID0gc3RybGVuKE5NX05BTUUpOwkvKiBiYXNlIGxlbmd0aCAqLwotCWwgPSBuYW1l
ID8gc3RybGVuKG5hbWUpIDogMDsJCS8qIGFjdHVhbCBsZW5ndGggKi8KLQlpZiAobCA8IG5hbWVs
ZW4pIHsKKwluYW1lbGVuID0gbm1fdmFsZV9uYW1lX3ZhbGlkYXRlKG5hbWUpOworCWlmIChuYW1l
bGVuIDwgMCkgewogCQlEKCJpbnZhbGlkIGJyaWRnZSBuYW1lICVzIiwgbmFtZSA/IG5hbWUgOiBO
VUxMKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWZvciAoaSA9IG5hbWVsZW4gKyAxOyBpIDwgbDsg
aSsrKSB7Ci0JCWlmIChuYW1lW2ldID09ICc6JykgewotCQkJbmFtZWxlbiA9IGk7Ci0JCQlicmVh
azsKLQkJfQotCX0KLQlpZiAobmFtZWxlbiA+PSBJRk5BTVNJWikKLQkJbmFtZWxlbiA9IElGTkFN
U0laOwotCU5EKCItLS0gcHJlZml4IGlzICclLipzJyAtLS0iLCBuYW1lbGVuLCBuYW1lKTsKIAog
CS8qIGxvb2t1cCB0aGUgbmFtZSwgcmVtZW1iZXIgZW1wdHkgc2xvdCBpZiB0aGVyZSBpcyBvbmUg
Ki8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2JyaWRnZXM7IGkrKykgewpAQCAtMzYwLDcgKzM5Myw3
IEBACiAJa3JpbmcgPSBuYS0+dHhfcmluZ3M7CiAJZm9yIChpID0gMDsgaSA8IG5yaW5nczsgaSsr
KSB7CiAJCWlmIChrcmluZ1tpXS5ua3JfZnQpIHsKLQkJCWZyZWUoa3JpbmdbaV0ubmtyX2Z0LCBN
X0RFVkJVRik7CisJCQlubV9vc19mcmVlKGtyaW5nW2ldLm5rcl9mdCk7CiAJCQlrcmluZ1tpXS5u
a3JfZnQgPSBOVUxMOyAvKiBwcm90ZWN0IGZyb20gZnJlZWluZyB0d2ljZSAqLwogCQl9CiAJfQpA
QCAtMzkwLDcgKzQyMyw3IEBACiAJCXN0cnVjdCBubV9iZGdfcSAqZHN0cTsKIAkJaW50IGo7CiAK
LQkJZnQgPSBtYWxsb2MobCwgTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJZnQgPSBu
bV9vc19tYWxsb2MobCk7CiAJCWlmICghZnQpIHsKIAkJCW5tX2ZyZWVfYmRnZndkKG5hKTsKIAkJ
CXJldHVybiBFTk9NRU07CkBAIC00NzksNiArNTEyLDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX3ZwX2Fk
YXB0ZXIgKnZwbmEgPSAoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICopbmE7CiAJc3RydWN0IG5t
X2JyaWRnZSAqYiA9IHZwbmEtPm5hX2JkZzsKIAorCSh2b2lkKW5tcjsJLy8gWFhYIG1lcmdlID8K
IAlpZiAoYXR0YWNoKQogCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLwogCWlmIChiKSB7
CkBAIC01MTgsNyArNTUyLDcgQEAKIAkJcmV0dXJuIEVOWElPOwogCU5NR19MT0NLKCk7CiAJLyog
bWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBWQUxFIHBvcnQgKi8KLQlpZiAoIU5FVE1BUF9D
QVBBQkxFKGlmcCkgfHwgTkEoaWZwKS0+bm1fcmVnaXN0ZXIgIT0gbmV0bWFwX3ZwX3JlZykgewor
CWlmICghTk1fTkFfVkFMSUQoaWZwKSB8fCBOQShpZnApLT5ubV9yZWdpc3RlciAhPSBuZXRtYXBf
dnBfcmVnKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CkBAIC01MzUsNyAr
NTY5LDcgQEAKIAkgKi8KIAlpZl9yZWxlKGlmcCk7CiAJbmV0bWFwX2RldGFjaChpZnApOwotCW5t
X3ZpX2RldGFjaChpZnApOworCW5tX29zX3ZpX2RldGFjaChpZnApOwogCXJldHVybiAwOwogCiBl
cnI6CkBAIC01NDQsNiArNTc4LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50
CitubV91cGRhdGVfaW5mbyhzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVy
ICpuYSkKK3sKKwlubXItPm5yX3J4X3JpbmdzID0gbmEtPm51bV9yeF9yaW5nczsKKwlubXItPm5y
X3R4X3JpbmdzID0gbmEtPm51bV90eF9yaW5nczsKKwlubXItPm5yX3J4X3Nsb3RzID0gbmEtPm51
bV9yeF9kZXNjOworCW5tci0+bnJfdHhfc2xvdHMgPSBuYS0+bnVtX3R4X2Rlc2M7CisJcmV0dXJu
IG5ldG1hcF9tZW1fZ2V0X2luZm8obmEtPm5tX21lbSwgJm5tci0+bnJfbWVtc2l6ZSwgTlVMTCwg
Jm5tci0+bnJfYXJnMik7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSB2aXJ0dWFsIGludGVyZmFjZSBy
ZWdpc3RlcmVkIHRvIHRoZSBzeXN0ZW0uCiAgKiBUaGUgaW50ZXJmYWNlIHdpbGwgYmUgYXR0YWNo
ZWQgdG8gYSBicmlkZ2UgbGF0ZXIuCkBAIC01NTYsMTQgKzYwMCwyMiBAQAogCWludCBlcnJvcjsK
IAogCS8qIGRvbid0IGluY2x1ZGUgVkFMRSBwcmVmaXggKi8KLQlpZiAoIXN0cm5jbXAobm1yLT5u
cl9uYW1lLCBOTV9OQU1FLCBzdHJsZW4oTk1fTkFNRSkpKQorCWlmICghc3RybmNtcChubXItPm5y
X25hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4oTk1fQkRHX05BTUUpKSkKIAkJcmV0dXJuIEVJTlZB
TDsKIAlpZnAgPSBpZnVuaXRfcmVmKG5tci0+bnJfbmFtZSk7CiAJaWYgKGlmcCkgeyAvKiBhbHJl
YWR5IGV4aXN0LCBjYW5ub3QgY3JlYXRlIG5ldyBvbmUgKi8KKwkJZXJyb3IgPSBFRVhJU1Q7CisJ
CU5NR19MT0NLKCk7CisJCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCQlpbnQgdXBkYXRlX2Vy
ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgTkEoaWZwKSk7CisJCQlpZiAodXBkYXRlX2VycikKKwkJ
CQllcnJvciA9IHVwZGF0ZV9lcnI7CisJCX0KKwkJTk1HX1VOTE9DSygpOwogCQlpZl9yZWxlKGlm
cCk7Ci0JCXJldHVybiBFRVhJU1Q7CisJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSBubV92
aV9wZXJzaXN0KG5tci0+bnJfbmFtZSwgJmlmcCk7CisJZXJyb3IgPSBubV9vc192aV9wZXJzaXN0
KG5tci0+bnJfbmFtZSwgJmlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAg
LTU3MiwxNSArNjI0LDI5IEBACiAJZXJyb3IgPSBuZXRtYXBfdnBfY3JlYXRlKG5tciwgaWZwLCAm
dnBuYSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoImVycm9yICVkIiwgZXJyb3IpOwotCQlubV92aV9k
ZXRhY2goaWZwKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl8xOwogCX0KIAkvKiBwZXJz
aXN0LXNwZWNpZmljIHJvdXRpbmVzICovCiAJdnBuYS0+dXAubm1fYmRnX2N0bCA9IG5ldG1hcF92
cF9iZGdfY3RsOwogCW5ldG1hcF9hZGFwdGVyX2dldCgmdnBuYS0+dXApOworCU5NX0FUVEFDSF9O
QShpZnAsICZ2cG5hLT51cCk7CisJLyogcmV0dXJuIHRoZSB1cGRhdGVkIGluZm8gKi8KKwllcnJv
ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgJnZwbmEtPnVwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ290
byBlcnJfMjsKKwl9CisJRCgicmV0dXJuaW5nIG5yX2FyZzIgJWQiLCBubXItPm5yX2FyZzIpOwog
CU5NR19VTkxPQ0soKTsKIAlEKCJjcmVhdGVkICVzIiwgaWZwLT5pZl94bmFtZSk7CiAJcmV0dXJu
IDA7CisKK2Vycl8yOgorCW5ldG1hcF9kZXRhY2goaWZwKTsKK2Vycl8xOgorCU5NR19VTkxPQ0so
KTsKKwlubV9vc192aV9kZXRhY2goaWZwKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogLyogVHJ5
IHRvIGdldCBhIHJlZmVyZW5jZSB0byBhIG5ldG1hcCBhZGFwdGVyIGF0dGFjaGVkIHRvIGEgVkFM
RSBzd2l0Y2guCkBAIC02MDgsNyArNjc0LDcgQEAKIAogCS8qIGZpcnN0IHRyeSB0byBzZWUgaWYg
dGhpcyBpcyBhIGJyaWRnZSBwb3J0LiAqLwogCU5NR19MT0NLX0FTU0VSVCgpOwotCWlmIChzdHJu
Y21wKG5yX25hbWUsIE5NX05BTUUsIHNpemVvZihOTV9OQU1FKSAtIDEpKSB7CisJaWYgKHN0cm5j
bXAobnJfbmFtZSwgTk1fQkRHX05BTUUsIHNpemVvZihOTV9CREdfTkFNRSkgLSAxKSkgewogCQly
ZXR1cm4gMDsgIC8qIG5vIGVycm9yLCBidXQgbm8gVkFMRSBwcmVmaXggKi8KIAl9CiAKQEAgLTY3
NCw3ICs3NDAsNyBAQAogCQllcnJvciA9IG5ldG1hcF92cF9jcmVhdGUobm1yLCBOVUxMLCAmdnBu
YSk7CiAJCWlmIChlcnJvcikgewogCQkJRCgiZXJyb3IgJWQiLCBlcnJvcik7Ci0JCQlmcmVlKGlm
cCwgTV9ERVZCVUYpOworCQkJbm1fb3NfZnJlZShpZnApOwogCQkJcmV0dXJuIGVycm9yOwogCQl9
CiAJCS8qIHNob3J0Y3V0IC0gd2UgY2FuIHNraXAgZ2V0X2h3X25hKCksCkBAIC02OTMsNyArNzU5
LDYgQEAKIAkJCWdvdG8gb3V0OwogCQl2cG5hID0gaHctPm5hX3ZwOwogCQlob3N0bmEgPSBody0+
bmFfaG9zdHZwOwotCQlpZl9yZWxlKGlmcCk7CiAJCWlmIChubXItPm5yX2FyZzEgIT0gTkVUTUFQ
X0JER19IT1NUKQogCQkJaG9zdG5hID0gTlVMTDsKIAl9CkBAIC03NjgsNiArODMzLDExIEBACiAJ
cmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW5saW5lIGludAorbm1faXNfYndyYXAoc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlyZXR1cm4gbmEtPm5tX3JlZ2lzdGVyID09IG5ldG1h
cF9id3JhcF9yZWc7Cit9CiAKIC8qIHByb2Nlc3MgTkVUTUFQX0JER19ERVRBQ0ggKi8KIHN0YXRp
YyBpbnQKQEAgLTc4NSw4ICs4NTUsMTMgQEAKIAlpZiAobmEgPT0gTlVMTCkgeyAvKiBWQUxFIHBy
ZWZpeCBtaXNzaW5nICovCiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIHVubG9ja19leGl0Owor
CX0gZWxzZSBpZiAobm1faXNfYndyYXAobmEpICYmCisJCSAgICgoc3RydWN0IG5ldG1hcF9id3Jh
cF9hZGFwdGVyICopbmEpLT5uYV9wb2xsaW5nX3N0YXRlKSB7CisJCS8qIERvbid0IGRldGFjaCBh
IE5JQyB3aXRoIHBvbGxpbmcgKi8KKwkJZXJyb3IgPSBFQlVTWTsKKwkJbmV0bWFwX2FkYXB0ZXJf
cHV0KG5hKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKIAl9Ci0KIAlpZiAobmEtPm5tX2JkZ19jdGwp
IHsKIAkJLyogcmVtb3ZlIHRoZSBwb3J0IGZyb20gYnJpZGdlLiBUaGUgYndyYXAKIAkJICogYWxz
byBuZWVkcyB0byBwdXQgdGhlIGh3bmEgaW4gbm9ybWFsIG1vZGUKQEAgLTgwMSw2ICs4NzYsMjY2
IEBACiAKIH0KIAorc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlOworc3RydWN0CitubV9iZGdf
a3RocmVhZCB7CisJc3RydWN0IG5tX2t0aHJlYWQgKm5tazsKKwl1X2ludCBxZmlyc3Q7CisJdV9p
bnQgcWxhc3Q7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7Cit9OworCitzdHJ1
Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgeworCWJvb2wgY29uZmlndXJlZDsKKwlib29sIHN0b3Bw
ZWQ7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyICpibmE7CisJdV9pbnQgcmVnOworCXVf
aW50IHFmaXJzdDsKKwl1X2ludCBxbGFzdDsKKwl1X2ludCBjcHVfZnJvbTsKKwl1X2ludCBuY3B1
czsKKwlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKmt0aHJlYWRzOworfTsKKworc3RhdGljIHZvaWQK
K25ldG1hcF9id3JhcF9wb2xsaW5nKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5tX2JkZ19rdGhy
ZWFkICpuYmsgPSBkYXRhOworCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hOworCXVf
aW50IHFmaXJzdCwgcWxhc3QsIGk7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcwLCAqa3Jp
bmc7CisKKwlpZiAoIW5iaykKKwkJcmV0dXJuOworCXFmaXJzdCA9IG5iay0+cWZpcnN0OworCXFs
YXN0ID0gbmJrLT5xbGFzdDsKKwlibmEgPSBuYmstPmJwcy0+Ym5hOworCWtyaW5nMCA9IE5NUihi
bmEtPmh3bmEsIE5SX1JYKTsKKworCWZvciAoaSA9IHFmaXJzdDsgaSA8IHFsYXN0OyBpKyspIHsK
KwkJa3JpbmcgPSBrcmluZzAgKyBpOworCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKKwl9
Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jcmVhdGVfa3RocmVhZHMoc3RydWN0IG5tX2JkZ19w
b2xsaW5nX3N0YXRlICpicHMpCit7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIGtjZmc7CisJaW50
IGksIGo7CisKKwlicHMtPmt0aHJlYWRzID0gbm1fb3NfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm1f
YmRnX2t0aHJlYWQpICogYnBzLT5uY3B1cyk7CisJaWYgKGJwcy0+a3RocmVhZHMgPT0gTlVMTCkK
KwkJcmV0dXJuIEVOT01FTTsKKworCWJ6ZXJvKCZrY2ZnLCBzaXplb2Yoa2NmZykpOworCWtjZmcu
d29ya2VyX2ZuID0gbmV0bWFwX2J3cmFwX3BvbGxpbmc7CisJZm9yIChpID0gMDsgaSA8IGJwcy0+
bmNwdXM7IGkrKykgeworCQlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKnQgPSBicHMtPmt0aHJlYWRz
ICsgaTsKKwkJaW50IGFsbCA9IChicHMtPm5jcHVzID09IDEgJiYgYnBzLT5yZWcgPT0gTlJfUkVH
X0FMTF9OSUMpOworCQlpbnQgYWZmaW5pdHkgPSBicHMtPmNwdV9mcm9tICsgaTsKKworCQl0LT5i
cHMgPSBicHM7CisJCXQtPnFmaXJzdCA9IGFsbCA/IGJwcy0+cWZpcnN0IC8qIG11c3QgYmUgMCAq
LzogYWZmaW5pdHk7CisJCXQtPnFsYXN0ID0gYWxsID8gYnBzLT5xbGFzdCA6IHQtPnFmaXJzdCAr
IDE7CisJCUQoImt0aHJlYWQgJWQgYToldSBxZjoldSBxbDoldSIsIGksIGFmZmluaXR5LCB0LT5x
Zmlyc3QsCisJCQl0LT5xbGFzdCk7CisKKwkJa2NmZy50eXBlID0gaTsKKwkJa2NmZy53b3JrZXJf
cHJpdmF0ZSA9IHQ7CisJCXQtPm5tayA9IG5tX29zX2t0aHJlYWRfY3JlYXRlKCZrY2ZnLCAwLCBO
VUxMKTsKKwkJaWYgKHQtPm5tayA9PSBOVUxMKSB7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJ
bm1fb3Nfa3RocmVhZF9zZXRfYWZmaW5pdHkodC0+bm1rLCBhZmZpbml0eSk7CisJfQorCXJldHVy
biAwOworCitjbGVhbnVwOgorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJc3RydWN0IG5t
X2JkZ19rdGhyZWFkICp0ID0gYnBzLT5rdGhyZWFkcyArIGk7CisJCW5tX29zX2t0aHJlYWRfZGVs
ZXRlKHQtPm5tayk7CisJfQorCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJcmV0dXJuIEVG
QVVMVDsKK30KKworLyogYSB2ZXJzaW9uIG9mIHB0bmV0bWFwX3N0YXJ0X2t0aHJlYWRzKCkgKi8K
K3N0YXRpYyBpbnQKK25tX2JkZ19wb2xsaW5nX3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBubV9iZGdf
cG9sbGluZ19zdGF0ZSAqYnBzKQoreworCWludCBlcnJvciwgaSwgajsKKworCWlmICghYnBzKSB7
CisJCUQoInBvbGxpbmcgaXMgbm90IGNvbmZpZ3VyZWQiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9
CisJYnBzLT5zdG9wcGVkID0gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsg
aSsrKSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOwor
CQllcnJvciA9IG5tX29zX2t0aHJlYWRfc3RhcnQodC0+bm1rKTsKKwkJaWYgKGVycm9yKSB7CisJ
CQlEKCJlcnJvciBpbiBubV9rdGhyZWFkX3N0YXJ0KCkiKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJ
fQorCX0KKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7
CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlubV9v
c19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKKwlyZXR1
cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkCitubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9r
dGhyZWFkcyhzdHJ1Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgKmJwcykKK3sKKwlpbnQgaTsKKwor
CWlmICghYnBzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsgaSsr
KSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlu
bV9vc19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwkJbm1fb3Nfa3RocmVhZF9kZWxldGUodC0+bm1r
KTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGludAorZ2V0X3BvbGxp
bmdfY2ZnKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLAorCQkJ
c3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHMpCit7CisJaW50IHJlcV9jcHVzLCBhdmFp
bF9jcHVzLCBjb3JlX2Zyb207CisJdV9pbnQgcmVnLCBpLCBxZmlyc3QsIHFsYXN0OworCisJYXZh
aWxfY3B1cyA9IG5tX29zX25jcHVzKCk7CisJcmVxX2NwdXMgPSBubXItPm5yX2FyZzE7CisKKwlp
ZiAocmVxX2NwdXMgPT0gMCkgeworCQlEKCJyZXFfY3B1cyBtdXN0IGJlID4gMCIpOworCQlyZXR1
cm4gRUlOVkFMOworCX0gZWxzZSBpZiAocmVxX2NwdXMgPj0gYXZhaWxfY3B1cykgeworCQlEKCJm
b3Igc2FmZXR5LCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBjb3JlIGxlZnQgaW4gdGhlIHN5c3RlbSIp
OworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlyZWcgPSBubXItPm5yX2ZsYWdzICYgTlJfUkVHX01B
U0s7CisJaSA9IG5tci0+bnJfcmluZ2lkICYgTkVUTUFQX1JJTkdfTUFTSzsKKwkvKgorCSAqIE9O
RV9OSUM6IGRlZGljYXRlIG9uZSBjb3JlIHRvIG9uZSByaW5nLiBJZiBtdWx0aXBsZSBjb3Jlcwor
CSAqICAgICAgICAgIGFyZSBzcGVjaWZpZWQsIGNvbnNlY3V0aXZlIHJpbmdzIGFyZSBhbHNvIHBv
bGxlZC4KKwkgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgcmluZ2lkPTIgYW5kIDIgY29yZXMg
YXJlIGdpdmVuLAorCSAqICAgICAgICAgIHJpbmcgMiBhbmQgMyBhcmUgcG9sbGVkIGJ5IGNvcmUg
MiBhbmQgMywgcmVzcGVjdGl2ZWx5LgorCSAqIEFMTF9OSUM6IHBvbGwgYWxsIHRoZSByaW5ncyB1
c2luZyBhIGNvcmUgc3BlY2lmaWVkIGJ5IHJpbmdpZC4KKwkgKiAgICAgICAgICB0aGUgbnVtYmVy
IG9mIGNvcmVzIG11c3QgYmUgMS4KKwkgKi8KKwlpZiAocmVnID09IE5SX1JFR19PTkVfTklDKSB7
CisJCWlmIChpICsgcmVxX2NwdXMgPiBubWFfZ2V0X25yaW5ncyhuYSwgTlJfUlgpKSB7CisJCQlE
KCJvbmx5ICVkIHJpbmdzIGV4aXN0IChyaW5nICV1LSV1IGlzIGdpdmVuKSIsCisJCQkJbm1hX2dl
dF9ucmluZ3MobmEsIE5SX1JYKSwgaSwgaStyZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOwor
CQl9CisJCXFmaXJzdCA9IGk7CisJCXFsYXN0ID0gcWZpcnN0ICsgcmVxX2NwdXM7CisJCWNvcmVf
ZnJvbSA9IHFmaXJzdDsKKwl9IGVsc2UgaWYgKHJlZyA9PSBOUl9SRUdfQUxMX05JQykgeworCQlp
ZiAocmVxX2NwdXMgIT0gMSkgeworCQkJRCgibmNwdXMgbXVzdCBiZSAxIG5vdCAlZCBmb3IgUkVH
X0FMTF9OSUMiLCByZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJCXFmaXJzdCA9
IDA7CisJCXFsYXN0ID0gbm1hX2dldF9ucmluZ3MobmEsIE5SX1JYKTsKKwkJY29yZV9mcm9tID0g
aTsKKwl9IGVsc2UgeworCQlEKCJyZWcgbXVzdCBiZSBBTExfTklDIG9yIE9ORV9OSUMiKTsKKwkJ
cmV0dXJuIEVJTlZBTDsKKwl9CisKKwlicHMtPnJlZyA9IHJlZzsKKwlicHMtPnFmaXJzdCA9IHFm
aXJzdDsKKwlicHMtPnFsYXN0ID0gcWxhc3Q7CisJYnBzLT5jcHVfZnJvbSA9IGNvcmVfZnJvbTsK
KwlicHMtPm5jcHVzID0gcmVxX2NwdXM7CisJRCgiJXMgcWZpcnN0ICV1IHFsYXN0ICV1IGNwdV9m
cm9tICV1IG5jcHVzICV1IiwKKwkJcmVnID09IE5SX1JFR19BTExfTklDID8gIlJFR19BTExfTklD
IiA6ICJSRUdfT05FX05JQyIsCisJCXFmaXJzdCwgcWxhc3QsIGNvcmVfZnJvbSwgcmVxX2NwdXMp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitubV9iZGdfY3RsX3BvbGxpbmdfc3RhcnQo
c3RydWN0IG5tcmVxICpubXIsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0
IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVy
ICpibmE7CisJaW50IGVycm9yOworCisJYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl
ciAqKW5hOworCWlmIChibmEtPm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRl
ciBhbHJlYWR5IGluIHBvbGxpbmcgbW9kZSIpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJw
cyA9IG5tX29zX21hbGxvYyhzaXplb2YoKmJwcykpOworCWlmICghYnBzKQorCQlyZXR1cm4gRU5P
TUVNOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCWJwcy0+c3RvcHBlZCA9IHRydWU7CisK
KwlpZiAoZ2V0X3BvbGxpbmdfY2ZnKG5tciwgbmEsIGJwcykpIHsKKwkJbm1fb3NfZnJlZShicHMp
OworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCWlmIChubV9iZGdfY3JlYXRlX2t0aHJlYWRzKGJw
cykpIHsKKwkJbm1fb3NfZnJlZShicHMpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJwcy0+
Y29uZmlndXJlZCA9IHRydWU7CisJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gYnBzOworCWJwcy0+
Ym5hID0gYm5hOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KKwlpZiAo
Ym5hLT5od25hLT5ubV9pbnRyKQorCQlibmEtPmh3bmEtPm5tX2ludHIoYm5hLT5od25hLCAwKTsK
KwkvKiBzdGFydCBrdGhyZWFkIG5vdyAqLworCWVycm9yID0gbm1fYmRnX3BvbGxpbmdfc3RhcnRf
a3RocmVhZHMoYnBzKTsKKwlpZiAoZXJyb3IpIHsKKwkJRCgiRVJST1Igbm1fYmRnX3BvbGxpbmdf
c3RhcnRfa3RocmVhZCgpIik7CisJCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJCW5tX29z
X2ZyZWUoYnBzKTsKKwkJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gTlVMTDsKKwkJaWYgKGJuYS0+
aHduYS0+bm1faW50cikKKwkJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3bmEsIDEpOworCX0K
KwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jdGxfcG9sbGluZ19zdG9w
KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVj
dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl
ciAqKW5hOworCXN0cnVjdCBubV9iZGdfcG9sbGluZ19zdGF0ZSAqYnBzOworCisJaWYgKCFibmEt
Pm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRlciBpcyBub3QgaW4gcG9sbGlu
ZyBtb2RlIik7CisJCXJldHVybiBFRkFVTFQ7CisJfQorCWJwcyA9IGJuYS0+bmFfcG9sbGluZ19z
dGF0ZTsKKwlubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9rdGhyZWFkcyhibmEtPm5hX3BvbGxp
bmdfc3RhdGUpOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCW5tX29zX2ZyZWUoYnBzKTsK
KwlibmEtPm5hX3BvbGxpbmdfc3RhdGUgPSBOVUxMOworCS8qIHJlZW5hYmxlIGludGVycnVwdCAq
LworCWlmIChibmEtPmh3bmEtPm5tX2ludHIpCisJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3
bmEsIDEpOworCXJldHVybiAwOworfQogCiAvKiBDYWxsZWQgYnkgZWl0aGVyIHVzZXIncyBjb250
ZXh0IChuZXRtYXBfaW9jdGwoKSkKICAqIG9yIGV4dGVybmFsIGtlcm5lbCBtb2R1bGVzIChlLmcu
LCBPcGVudnN3aXRjaCkuCkBAIC04NDMsNyArMTE3OCw3IEBACiAJY2FzZSBORVRNQVBfQkRHX0xJ
U1Q6CiAJCS8qIHRoaXMgaXMgdXNlZCB0byBlbnVtZXJhdGUgYnJpZGdlcyBhbmQgcG9ydHMgKi8K
IAkJaWYgKG5hbWVsZW4pIHsgLyogbG9vayB1cCBpbmRleGVzIG9mIGJyaWRnZSBhbmQgcG9ydCAq
LwotCQkJaWYgKHN0cm5jbXAobmFtZSwgTk1fTkFNRSwgc3RybGVuKE5NX05BTUUpKSkgeworCQkJ
aWYgKHN0cm5jbXAobmFtZSwgTk1fQkRHX05BTUUsIHN0cmxlbihOTV9CREdfTkFNRSkpKSB7CiAJ
CQkJZXJyb3IgPSBFSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04NTUsNyArMTE5MCw5IEBA
CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWVycm9yID0gRU5PRU5UOworCQkJZXJyb3IgPSAwOwor
CQkJbm1yLT5ucl9hcmcxID0gYiAtIGJyaWRnZXM7IC8qIGJyaWRnZSBpbmRleCAqLworCQkJbm1y
LT5ucl9hcmcyID0gTk1fQkRHX05PUE9SVDsKIAkJCWZvciAoaiA9IDA7IGogPCBiLT5iZGdfYWN0
aXZlX3BvcnRzOyBqKyspIHsKIAkJCQlpID0gYi0+YmRnX3BvcnRfaW5kZXhbal07CiAJCQkJdnBu
YSA9IGItPmJkZ19wb3J0c1tpXTsKQEAgLTg2NywxMCArMTIwNCw3IEBACiAJCQkJICogdmlydHVh
bCBwb3J0IGFuZCBhIE5JQywgcmVzcGVjdGl2ZWx5CiAJCQkJICovCiAJCQkJaWYgKCFzdHJjbXAo
dnBuYS0+dXAubmFtZSwgbmFtZSkpIHsKLQkJCQkJLyogYnJpZGdlIGluZGV4ICovCi0JCQkJCW5t
ci0+bnJfYXJnMSA9IGIgLSBicmlkZ2VzOwogCQkJCQlubXItPm5yX2FyZzIgPSBpOyAvKiBwb3J0
IGluZGV4ICovCi0JCQkJCWVycm9yID0gMDsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAt
OTM3LDEwICsxMjcxLDM0IEBACiAJCWVycm9yID0gbmV0bWFwX2dldF9iZGdfbmEobm1yLCAmbmEs
IDApOwogCQlpZiAobmEgJiYgIWVycm9yKSB7CiAJCQl2cG5hID0gKHN0cnVjdCBuZXRtYXBfdnBf
YWRhcHRlciAqKW5hOwotCQkJdnBuYS0+dmlydF9oZHJfbGVuID0gbm1yLT5ucl9hcmcxOwotCQkJ
aWYgKHZwbmEtPnZpcnRfaGRyX2xlbikKKwkJCW5hLT52aXJ0X2hkcl9sZW4gPSBubXItPm5yX2Fy
ZzE7CisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbikgewogCQkJCXZwbmEtPm1mcyA9IE5FVE1BUF9C
VUZfU0laRShuYSk7Ci0JCQlEKCJVc2luZyB2bmV0X2hkcl9sZW4gJWQgZm9yICVwIiwgdnBuYS0+
dmlydF9oZHJfbGVuLCB2cG5hKTsKKwkJCX0KKwkJCUQoIlVzaW5nIHZuZXRfaGRyX2xlbiAlZCBm
b3IgJXAiLCBuYS0+dmlydF9oZHJfbGVuLCBuYSk7CisJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp
OworCQl9IGVsc2UgaWYgKCFuYSkgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfQorCQlOTUdfVU5M
T0NLKCk7CisJCWJyZWFrOworCisJY2FzZSBORVRNQVBfQkRHX1BPTExJTkdfT046CisJY2FzZSBO
RVRNQVBfQkRHX1BPTExJTkdfT0ZGOgorCQlOTUdfTE9DSygpOworCQllcnJvciA9IG5ldG1hcF9n
ZXRfYmRnX25hKG5tciwgJm5hLCAwKTsKKwkJaWYgKG5hICYmICFlcnJvcikgeworCQkJaWYgKCFu
bV9pc19id3JhcChuYSkpIHsKKwkJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCQl9IGVsc2UgaWYg
KGNtZCA9PSBORVRNQVBfQkRHX1BPTExJTkdfT04pIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxf
cG9sbGluZ19zdGFydChubXIsIG5hKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQluZXRtYXBfYWRh
cHRlcl9nZXQobmEpOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxfcG9sbGlu
Z19zdG9wKG5tciwgbmEpOworCQkJCWlmICghZXJyb3IpCisJCQkJCW5ldG1hcF9hZGFwdGVyX3B1
dChuYSk7CisJCQl9CiAJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwogCQl9CiAJCU5NR19VTkxP
Q0soKTsKQEAgLTEwOTcsMTAgKzE0NTUsMTIgQEAKIAkJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQs
IGZ0X2ksIG5hLCByaW5nX25yKTsKIAl9CiAJaWYgKGZyYWdzID4gMSkgewotCQlEKCJ0cnVuY2F0
ZSBpbmNvbXBsZXRlIGZyYWdtZW50IGF0ICVkICglZCBmcmFncykiLCBmdF9pLCBmcmFncyk7Ci0J
CS8vIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhhcyBOU19NT1JFRlJBRwotCQlmdFtmdF9p
IC0gMV0uZnRfZnJhZ3MgJj0gfk5TX01PUkVGUkFHOwotCQlmdFtmdF9pIC0gZnJhZ3NdLmZ0X2Zy
YWdzID0gZnJhZ3MgLSAxOworCQkvKiBIZXJlIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhh
cyBOU19NT1JFRlJBRywgYW5kIHdlCisJCSAqIGhhdmUgdG8gZml4IGZyYWdzIGNvdW50LiAqLwor
CQlmcmFncy0tOworCQlmdFtmdF9pIC0gMV0uZnRfZmxhZ3MgJj0gfk5TX01PUkVGUkFHOworCQlm
dFtmdF9pIC0gZnJhZ3NdLmZ0X2ZyYWdzID0gZnJhZ3M7CisJCUQoIlRydW5jYXRlIGluY29tcGxl
dGUgZnJhZ21lbnQgYXQgJWQgKCVkIGZyYWdzKSIsIGZ0X2ksIGZyYWdzKTsKIAl9CiAJaWYgKGZ0
X2kpCiAJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQsIGZ0X2ksIG5hLCByaW5nX25yKTsKQEAgLTEx
NTcsNiArMTUxNyw4IEBACiB7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICp2cG5hID0KIAkJ
KHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciopbmE7CisJZW51bSB0eHJ4IHQ7CisJaW50IGk7CiAK
IAkvKiBwZXJzaXN0ZW50IHBvcnRzIG1heSBiZSBwdXQgaW4gbmV0bWFwIG1vZGUKIAkgKiBiZWZv
cmUgYmVpbmcgYXR0YWNoZWQgdG8gYSBicmlkZ2UKQEAgLTExNjQsMTIgKzE1MjYsMzAgQEAKIAlp
ZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV0xPQ0sodnBuYS0+bmFfYmRnKTsKIAlpZiAob25vZmYp
IHsKLQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CisJCWZvcl9yeF90eCh0KSB7CisJ
CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJ
c3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCWlmIChu
bV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVU
TUFQX09OOworCQkJfQorCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5h
X2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJCSAvKiBYWFggb24gRnJlZUJTRCwgcGVyc2lzdGVu
dCBWQUxFIHBvcnRzIHNob3VsZCBhbHNvCiAJCSAqIHRvZ2dsZSBJRkNBUF9ORVRNQVAgaW4gbmEt
PmlmcCAoMjAxNC0wMy0xNikKIAkJICovCiAJfSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5O
QUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFn
cyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9yX3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkg
PCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdf
b2ZmKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsKKwkJCX0K
KwkJfQogCX0KIAlpZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV1VOTE9DSyh2cG5hLT5uYV9iZGcp
OwpAQCAtMTE5MywxMyArMTU3MywxNCBAQAogCXVpbnQzMl90IHNoLCBkaDsKIAl1X2ludCBkc3Qs
IG15c3JjID0gbmEtPmJkZ19wb3J0OwogCXVpbnQ2NF90IHNtYWMsIGRtYWM7CisJdWludDhfdCBp
bmRidWZbMTJdOwogCiAJLyogc2FmZXR5IGNoZWNrLCB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgbWFu
eSBjYXNlcyAqLwotCWlmIChidWZfbGVuID49IDE0ICsgbmEtPnZpcnRfaGRyX2xlbikgeworCWlm
IChidWZfbGVuID49IDE0ICsgbmEtPnVwLnZpcnRfaGRyX2xlbikgewogCQkvKiB2aXJ0aGRyICsg
bWFjX2hkciBpbiB0aGUgc2FtZSBzbG90ICovCi0JCWJ1ZiArPSBuYS0+dmlydF9oZHJfbGVuOwot
CQlidWZfbGVuIC09IG5hLT52aXJ0X2hkcl9sZW47Ci0JfSBlbHNlIGlmIChidWZfbGVuID09IG5h
LT52aXJ0X2hkcl9sZW4gJiYgZnQtPmZ0X2ZsYWdzICYgTlNfTU9SRUZSQUcpIHsKKwkJYnVmICs9
IG5hLT51cC52aXJ0X2hkcl9sZW47CisJCWJ1Zl9sZW4gLT0gbmEtPnVwLnZpcnRfaGRyX2xlbjsK
Kwl9IGVsc2UgaWYgKGJ1Zl9sZW4gPT0gbmEtPnVwLnZpcnRfaGRyX2xlbiAmJiBmdC0+ZnRfZmxh
Z3MgJiBOU19NT1JFRlJBRykgewogCQkvKiBvbmx5IGhlYWRlciBpbiBmaXJzdCBmcmFnbWVudCAq
LwogCQlmdCsrOwogCQlidWYgPSBmdC0+ZnRfYnVmOwpAQCAtMTIwOCw2ICsxNTg5LDE0IEBACiAJ
CVJEKDUsICJpbnZhbGlkIGJ1ZiBmb3JtYXQsIGxlbmd0aCAlZCIsIGJ1Zl9sZW4pOwogCQlyZXR1
cm4gTk1fQkRHX05PUE9SVDsKIAl9CisKKwlpZiAoZnQtPmZ0X2ZsYWdzICYgTlNfSU5ESVJFQ1Qp
IHsKKwkJaWYgKGNvcHlpbihidWYsIGluZGJ1Ziwgc2l6ZW9mKGluZGJ1ZikpKSB7CisJCQlyZXR1
cm4gTk1fQkRHX05PUE9SVDsKKwkJfQorCQlidWYgPSBpbmRidWY7CisJfQorCiAJZG1hYyA9IGxl
NjR0b2goKih1aW50NjRfdCAqKShidWYpKSAmIDB4ZmZmZmZmZmZmZmZmOwogCXNtYWMgPSBsZTY0
dG9oKCoodWludDY0X3QgKikoYnVmICsgNCkpOwogCXNtYWMgPj49IDE2OwpAQCAtMTMyMSw3ICsx
NzEwLDcgQEAKIAlzdHJ1Y3Qgbm1fYmRnX3EgKmRzdF9lbnRzLCAqYnJkZHN0OwogCXVpbnQxNl90
IG51bV9kc3RzID0gMCwgKmRzdHM7CiAJc3RydWN0IG5tX2JyaWRnZSAqYiA9IG5hLT5uYV9iZGc7
Ci0JdV9pbnQgaSwgaiwgbWUgPSBuYS0+YmRnX3BvcnQ7CisJdV9pbnQgaSwgbWUgPSBuYS0+YmRn
X3BvcnQ7CiAKIAkvKgogCSAqIFRoZSB3b3JrIGFyZWEgKHBvaW50ZWQgYnkgZnQpIGlzIGZvbGxv
d2VkIGJ5IGFuIGFycmF5IG9mCkBAIC0xMzQxLDcgKzE3MzAsNyBAQAogCQlORCgic2xvdCAlZCBm
cmFncyAlZCIsIGksIGZ0W2ldLmZ0X2ZyYWdzKTsKIAkJLyogRHJvcCB0aGUgcGFja2V0IGlmIHRo
ZSB2aXJ0aW8tbmV0IGhlYWRlciBpcyBub3QgaW50byB0aGUgZmlyc3QKIAkJICAgZnJhZ21lbnQg
bm9yIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kLiAqLwotCQlpZiAodW5saWtl
bHkobmEtPnZpcnRfaGRyX2xlbiA+IGZ0W2ldLmZ0X2xlbikpCisJCWlmICh1bmxpa2VseShuYS0+
dXAudmlydF9oZHJfbGVuID4gZnRbaV0uZnRfbGVuKSkKIAkJCWNvbnRpbnVlOwogCQlkc3RfcG9y
dCA9IGItPmJkZ19vcHMubG9va3VwKCZmdFtpXSwgJmRzdF9yaW5nLCBuYSk7CiAJCWlmIChuZXRt
YXBfdmVyYm9zZSA+IDI1NSkKQEAgLTEzODIsNiArMTc3MSw3IEBACiAJICovCiAJYnJkZHN0ID0g
ZHN0X2VudHMgKyBOTV9CREdfQlJPQURDQVNUICogTk1fQkRHX01BWFJJTkdTOwogCWlmIChicmRk
c3QtPmJxX2hlYWQgIT0gTk1fRlRfTlVMTCkgeworCQl1X2ludCBqOwogCQlmb3IgKGogPSAwOyBs
aWtlbHkoaiA8IGItPmJkZ19hY3RpdmVfcG9ydHMpOyBqKyspIHsKIAkJCXVpbnQxNl90IGRfaTsK
IAkJCWkgPSBiLT5iZGdfcG9ydF9pbmRleFtqXTsKQEAgLTE0NDEsOCArMTgzMSw5IEBACiAJCSAq
LwogCQluZWVkZWQgPSBkLT5icV9sZW4gKyBicmRkc3QtPmJxX2xlbjsKIAotCQlpZiAodW5saWtl
bHkoZHN0X25hLT52aXJ0X2hkcl9sZW4gIT0gbmEtPnZpcnRfaGRyX2xlbikpIHsKLQkJCVJEKDMs
ICJ2aXJ0X2hkcl9taXNtYXRjaCwgc3JjICVkIGRzdCAlZCIsIG5hLT52aXJ0X2hkcl9sZW4sIGRz
dF9uYS0+dmlydF9oZHJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KGRzdF9uYS0+dXAudmlydF9oZHJf
bGVuICE9IG5hLT51cC52aXJ0X2hkcl9sZW4pKSB7CisJCQlSRCgzLCAidmlydF9oZHJfbWlzbWF0
Y2gsIHNyYyAlZCBkc3QgJWQiLCBuYS0+dXAudmlydF9oZHJfbGVuLAorCQkJICAgICAgZHN0X25h
LT51cC52aXJ0X2hkcl9sZW4pOwogCQkJLyogVGhlcmUgaXMgYSB2aXJ0aW8tbmV0IGhlYWRlci9v
ZmZsb2FkaW5ncyBtaXNtYXRjaCBiZXR3ZWVuCiAJCQkgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
LiBUaGUgc2xvd2VyIG1pc21hdGNoIGRhdGFwYXRoIHdpbGwKIAkJCSAqIGJlIHVzZWQgdG8gY29w
ZSB3aXRoIGFsbCB0aGUgbWlzbWF0Y2hlcy4KQEAgLTE3NjgsMTAgKzIxNTksMTAgQEAKIHsKIAlz
dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKnZwbmE7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gMDsKIAl1X2ludCBucGlwZXMgPSAwOwogCi0J
dnBuYSA9IG1hbGxvYyhzaXplb2YoKnZwbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8p
OworCXZwbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCp2cG5hKSk7CiAJaWYgKHZwbmEgPT0gTlVM
TCkKIAkJcmV0dXJuIEVOT01FTTsKIApAQCAtMTgwMyw3ICsyMTk0LDYgQEAKIAlubV9ib3VuZF92
YXIoJm5tci0+bnJfYXJnMywgMCwgMCwKIAkJCTEyOCpOTV9CREdfTUFYU0xPVFMsIE5VTEwpOwog
CW5hLT5udW1fcnhfZGVzYyA9IG5tci0+bnJfcnhfc2xvdHM7Ci0JdnBuYS0+dmlydF9oZHJfbGVu
ID0gMDsKIAl2cG5hLT5tZnMgPSAxNTE0OwogCXZwbmEtPmxhc3Rfc21hYyA9IH4wbGx1OwogCS8q
aWYgKHZwbmEtPm1mcyA+IG5ldG1hcF9idWZfc2l6ZSkgIFRPRE8gbmV0bWFwX2J1Zl9zaXplIGlz
IHplcm8/PwpAQCAtMTgyMyw3ICsyMjEzLDEwIEBACiAJbmEtPm5tX2tyaW5nc19jcmVhdGUgPSBu
ZXRtYXBfdnBfa3JpbmdzX2NyZWF0ZTsKIAluYS0+bm1fa3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF92
cF9rcmluZ3NfZGVsZXRlOwogCW5hLT5ubV9kdG9yID0gbmV0bWFwX3ZwX2R0b3I7Ci0JbmEtPm5t
X21lbSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXcobmEtPm5hbWUsCisJRCgibnJfYXJnMiAlZCIs
IG5tci0+bnJfYXJnMik7CisJbmEtPm5tX21lbSA9IChubXItPm5yX2FyZzIgPiAwKSA/CisJCW5l
dG1hcF9tZW1fZmluZChubXItPm5yX2FyZzIpOgorCQluZXRtYXBfbWVtX3ByaXZhdGVfbmV3KAog
CQkJbmEtPm51bV90eF9yaW5ncywgbmEtPm51bV90eF9kZXNjLAogCQkJbmEtPm51bV9yeF9yaW5n
cywgbmEtPm51bV9yeF9kZXNjLAogCQkJbm1yLT5ucl9hcmczLCBucGlwZXMsICZlcnJvcik7CkBA
IC0xODM5LDggKzIyMzIsOCBAQAogCiBlcnI6CiAJaWYgKG5hLT5ubV9tZW0gIT0gTlVMTCkKLQkJ
bmV0bWFwX21lbV9kZWxldGUobmEtPm5tX21lbSk7Ci0JZnJlZSh2cG5hLCBNX0RFVkJVRik7CisJ
CW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0pOworCW5tX29zX2ZyZWUodnBuYSk7CiAJcmV0dXJu
IGVycm9yOwogfQogCkBAIC0xODgwLDE5ICsyMjczLDE5IEBACiB7CiAJc3RydWN0IG5ldG1hcF9i
d3JhcF9hZGFwdGVyICpibmEgPSAoc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyKiluYTsKIAlz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3bmE7CisJc3RydWN0IG5tX2JyaWRn
ZSAqYiA9IGJuYS0+dXAubmFfYmRnLAorCQkqYmggPSBibmEtPmhvc3QubmFfYmRnOworCisJbmV0
bWFwX21lbV9wdXQoYm5hLT5ob3N0LnVwLm5tX21lbSk7CisKKwlpZiAoYikgeworCQluZXRtYXBf
YmRnX2RldGFjaF9jb21tb24oYiwgYm5hLT51cC5iZGdfcG9ydCwKKwkJCSAgICAoYmggPyBibmEt
Pmhvc3QuYmRnX3BvcnQgOiAtMSkpOworCX0KIAogCU5EKCJuYSAlcCIsIG5hKTsKLQkvKiBkcm9w
IHJlZmVyZW5jZSB0byBod25hLT5pZnAuCi0JICogSWYgd2UgZG9uJ3QgZG8gdGhpcywgbmV0bWFw
X2RldGFjaF9jb21tb24obmEpCi0JICogd2lsbCB0aGluayBpdCBoYXMgc2V0IE5BKG5hLT5pZnAp
IHRvIE5VTEwKLQkgKi8KIAluYS0+aWZwID0gTlVMTDsKLQkvKiBmb3Igc2FmZXR5LCBhbHNvIGRy
b3AgdGhlIHBvc3NpYmxlIHJlZmVyZW5jZQotCSAqIGluIHRoZSBob3N0bmEKLQkgKi8KIAlibmEt
Pmhvc3QudXAuaWZwID0gTlVMTDsKLQotCWh3bmEtPm5tX21lbSA9IGJuYS0+c2F2ZV9ubWQ7CiAJ
aHduYS0+bmFfcHJpdmF0ZSA9IE5VTEw7CiAJaHduYS0+bmFfdnAgPSBod25hLT5uYV9ob3N0dnAg
PSBOVUxMOwogCWh3bmEtPm5hX2ZsYWdzICY9IH5OQUZfQlVTWTsKQEAgLTE5MTYsNyArMjMwOSw4
IEBACiAgKiAocGFydCBhcyBhIHJlY2VpdmUgcmluZywgcGFydCBhcyBhIHRyYW5zbWl0IHJpbmcp
LgogICoKICAqIGNhbGxiYWNrIHRoYXQgb3ZlcndyaXRlcyB0aGUgaHduYSBub3RpZnkgY2FsbGJh
Y2suCi0gKiBQYWNrZXRzIGNvbWUgZnJvbSB0aGUgb3V0c2lkZSBvciBmcm9tIHRoZSBob3N0IHN0
YWNrIGFuZCBhcmUgcHV0IG9uIGFuIGh3bmEgcnggcmluZy4KKyAqIFBhY2tldHMgY29tZSBmcm9t
IHRoZSBvdXRzaWRlIG9yIGZyb20gdGhlIGhvc3Qgc3RhY2sgYW5kIGFyZSBwdXQgb24gYW4KKyAq
IGh3bmEgcnggcmluZy4KICAqIFRoZSBicmlkZ2Ugd3JhcHBlciB0aGVuIHNlbmRzIHRoZSBwYWNr
ZXRzIHRocm91Z2ggdGhlIGJyaWRnZS4KICAqLwogc3RhdGljIGludApAQCAtMTkyNywxOSArMjMy
MSwxOCBAQAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmJrcmluZzsKIAlzdHJ1Y3QgbmV0bWFwX3Zw
X2FkYXB0ZXIgKnZwbmEgPSAmYm5hLT51cDsKIAl1X2ludCByaW5nX25yID0ga3JpbmctPnJpbmdf
aWQ7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgcmV0ID0gTk1fSVJRX0NPTVBMRVRFRDsKKwlpbnQg
ZXJyb3I7CiAKIAlpZiAobmV0bWFwX3ZlcmJvc2UpCiAJICAgIEQoIiVzICVzIDB4JXgiLCBuYS0+
bmFtZSwga3JpbmctPm5hbWUsIGZsYWdzKTsKIAotCWlmICghbm1fbmV0bWFwX29uKG5hKSkKLQkJ
cmV0dXJuIDA7Ci0KIAlia3JpbmcgPSAmdnBuYS0+dXAudHhfcmluZ3NbcmluZ19ucl07CiAKIAkv
KiBtYWtlIHN1cmUgdGhlIHJpbmcgaXMgbm90IGRpc2FibGVkICovCi0JaWYgKG5tX2tyX3RyeWdl
dChrcmluZykpCi0JCXJldHVybiAwOworCWlmIChubV9rcl90cnlnZXQoa3JpbmcsIDAgLyogY2Fu
J3Qgc2xlZXAgKi8sIE5VTEwpKSB7CisJCXJldHVybiBFSU87CisJfQogCiAJaWYgKG5ldG1hcF92
ZXJib3NlKQogCSAgICBEKCIlcyBoZWFkICVkIGN1ciAlZCB0YWlsICVkIiwgIG5hLT5uYW1lLApA
QCAtMTk1MSw5ICsyMzQ0LDEwIEBACiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7
CiAJaWYgKGVycm9yKQogCQlnb3RvIHB1dF9vdXQ7Ci0JaWYgKGtyaW5nLT5ucl9od2N1ciA9PSBr
cmluZy0+bnJfaHd0YWlsICYmIG5ldG1hcF92ZXJib3NlKSB7Ci0JCUQoImhvdyBzdHJhbmdlLCBp
bnRlcnJ1cHQgd2l0aCBubyBwYWNrZXRzIG9uICVzIiwKLQkJCW5hLT5uYW1lKTsKKwlpZiAoa3Jp
bmctPm5yX2h3Y3VyID09IGtyaW5nLT5ucl9od3RhaWwpIHsKKwkJaWYgKG5ldG1hcF92ZXJib3Nl
KQorCQkJRCgiaG93IHN0cmFuZ2UsIGludGVycnVwdCB3aXRoIG5vIHBhY2tldHMgb24gJXMiLAor
CQkJICAgIG5hLT5uYW1lKTsKIAkJZ290byBwdXRfb3V0OwogCX0KIApAQCAtMTk3MCwyOCArMjM2
NCwzMiBAQAogCS8qIGFub3RoZXIgY2FsbCB0byBhY3R1YWxseSByZWxlYXNlIHRoZSBidWZmZXJz
ICovCiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7CiAKKwkvKiBUaGUgc2Vjb25k
IHJ4c3luYyBtYXkgaGF2ZSBmdXJ0aGVyIGFkdmFuY2VkIGh3dGFpbC4gSWYgdGhpcyBoYXBwZW5z
LAorCSAqICByZXR1cm4gTk1fSVJRX1JFU0NIRUQsIG90aGVyd2lzZSBqdXN0IHJldHVybiBOTV9J
UlFfQ09NUExFVEVELiAqLworCWlmIChrcmluZy0+cmN1ciAhPSBrcmluZy0+bnJfaHd0YWlsKSB7
CisJCXJldCA9IE5NX0lSUV9SRVNDSEVEOworCX0KIHB1dF9vdXQ6CiAJbm1fa3JfcHV0KGtyaW5n
KTsKLQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IHJldDsKIH0KIAog
CiAvKiBubV9yZWdpc3RlciBjYWxsYmFjayBmb3IgYndyYXAgKi8KIHN0YXRpYyBpbnQKLW5ldG1h
cF9id3JhcF9yZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCitu
ZXRtYXBfYndyYXBfcmVnKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKIHsK
IAlzdHJ1Y3QgbmV0bWFwX2J3cmFwX2FkYXB0ZXIgKmJuYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2J3
cmFwX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3
bmE7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpob3N0bmEgPSAmYm5hLT5ob3N0OwotCWlu
dCBlcnJvcjsKKwlpbnQgZXJyb3IsIGk7CiAJZW51bSB0eHJ4IHQ7CiAKIAlORCgiJXMgJXMiLCBu
YS0+bmFtZSwgb25vZmYgPyAib24iIDogIm9mZiIpOwogCiAJaWYgKG9ub2ZmKSB7Ci0JCWludCBp
OwotCiAJCS8qIG5ldG1hcF9kb19yZWdpZiBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIGJ3cmFwIG5h
LgogCQkgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogCQkgKiBt
ZW1vcnkgYWxsb2NhdG9yIGRvd24gdG8gdGhlIGh3bmEgYmVmb3JlCkBAIC0yMDEwLDE2ICsyNDA4
LDMyIEBACiAJCS8qIGNyb3NzLWxpbmsgdGhlIG5ldG1hcCByaW5ncwogCQkgKiBUaGUgb3JpZ2lu
YWwgbnVtYmVyIG9mIHJpbmdzIGNvbWVzIGZyb20gaHduYSwKIAkJICogcnggcmluZ3Mgb24gb25l
IHNpZGUgZXF1YWxzIHR4IHJpbmdzIG9uIHRoZSBvdGhlci4KLQkJICogV2UgbmVlZCB0byBkbyB0
aGlzIG5vdywgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uCi0JCSAqIG9mIHRoZSBrcmluZy0+cmlu
ZyBwb2ludGVycwogCQkgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90
eHJ4X3N3YXAodCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCi0JCQlmb3IgKGkgPSAwOyBp
IDwgbm1hX2dldF9ucmluZ3MobmEsIHIpICsgMTsgaSsrKSB7Ci0JCQkJTk1SKGh3bmEsIHQpW2ld
Lm5rcl9udW1fc2xvdHMgPSBOTVIobmEsIHIpW2ldLm5rcl9udW1fc2xvdHM7Ci0JCQkJTk1SKGh3
bmEsIHQpW2ldLnJpbmcgPSBOTVIobmEsIHIpW2ldLnJpbmc7CisJCQllbnVtIHR4cnggciA9IG5t
X3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KKwkJCWZvciAoaSA9IDA7
IGkgPCBubWFfZ2V0X25yaW5ncyhod25hLCByKSArIDE7IGkrKykgeworCQkJCU5NUihod25hLCBy
KVtpXS5yaW5nID0gTk1SKG5hLCB0KVtpXS5yaW5nOwogCQkJfQogCQl9CisKKwkJaWYgKG5hLT5u
YV9mbGFncyAmIE5BRl9IT1NUX1JJTkdTKSB7CisJCQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhu
YSA9ICZob3N0bmEtPnVwOworCQkJLyogdGhlIGhvc3RuYSByaW5ncyBhcmUgdGhlIGhvc3Qgcmlu
Z3Mgb2YgdGhlIGJ3cmFwLgorCQkJICogVGhlIGNvcnJlc3BvbmRpbmcga3JpbmdzIG11c3QgcG9p
bnQgYmFjayB0byB0aGUKKwkJCSAqIGhvc3RuYQorCQkJICovCisJCQlobmEtPnR4X3JpbmdzID0g
Jm5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXTsKKwkJCWhuYS0+dHhfcmluZ3NbMF0ubmEg
PSBobmE7CisJCQlobmEtPnJ4X3JpbmdzID0gJm5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jpbmdz
XTsKKwkJCWhuYS0+cnhfcmluZ3NbMF0ubmEgPSBobmE7CisJCX0KKwl9CisKKwkvKiBwYXNzIGRv
d24gdGhlIHBlbmRpbmcgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9yeF90eCh0KSB7
CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspCisJCQlO
TVIoaHduYSwgdClbaV0ubnJfcGVuZGluZ19tb2RlID0KKwkJCQlOTVIobmEsIHQpW2ldLm5yX3Bl
bmRpbmdfbW9kZTsKIAl9CiAKIAkvKiBmb3J3YXJkIHRoZSByZXF1ZXN0IHRvIHRoZSBod25hICov
CkBAIC0yMDI3LDYgKzI0NDEsMTMgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAor
CS8qIGNvcHkgdXAgdGhlIGN1cnJlbnQgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9y
eF90eCh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBp
KyspCisJCQlOTVIobmEsIHQpW2ldLm5yX21vZGUgPQorCQkJCU5NUihod25hLCB0KVtpXS5ucl9t
b2RlOworCX0KKwogCS8qIGltcGVyc29uYXRlIGEgbmV0bWFwX3ZwX2FkYXB0ZXIgKi8KIAluZXRt
YXBfdnBfcmVnKG5hLCBvbm9mZik7CiAJaWYgKGhvc3RuYS0+bmFfYmRnKQpAQCAtMjA0Niw4ICsy
NDY3LDE0IEBACiAJCQkvKiBhbHNvIGludGVyY2VwdCB0aGUgaG9zdCByaW5nIG5vdGlmeSAqLwog
CQkJaHduYS0+cnhfcmluZ3NbaV0ubm1fbm90aWZ5ID0gbmV0bWFwX2J3cmFwX2ludHJfbm90aWZ5
OwogCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5B
Rl9ORVRNQVBfT047CiAJfSBlbHNlIHsKIAkJdV9pbnQgaTsKKworCQlpZiAobmEtPmFjdGl2ZV9m
ZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwogCQkvKiByZXNl
dCBhbGwgbm90aWZ5IGNhbGxiYWNrcyAoaW5jbHVkaW5nIGhvc3QgcmluZykgKi8KIAkJZm9yIChp
ID0gMDsgaSA8PSBod25hLT5udW1fcnhfcmluZ3M7IGkrKykgewogCQkJaHduYS0+cnhfcmluZ3Nb
aV0ubm1fbm90aWZ5ID0gaHduYS0+cnhfcmluZ3NbaV0uc2F2ZV9ub3RpZnk7CkBAIC0yMDg5LDgg
KzI1MTYsOCBAQAogCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0KIAkJKHN0cnVj
dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqKW5hOwogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqaHdu
YSA9IGJuYS0+aHduYTsKLQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhvc3RuYSA9ICZibmEtPmhv
c3QudXA7Ci0JaW50IGVycm9yOworCWludCBpLCBlcnJvciA9IDA7CisJZW51bSB0eHJ4IHQ7CiAK
IAlORCgiJXMiLCBuYS0+bmFtZSk7CiAKQEAgLTIxMDIsMjYgKzI1MjksMjMgQEAKIAkvKiBhbHNv
IGNyZWF0ZSB0aGUgaHduYSBrcmluZ3MgKi8KIAllcnJvciA9IGh3bmEtPm5tX2tyaW5nc19jcmVh
dGUoaHduYSk7CiAJaWYgKGVycm9yKSB7Ci0JCW5ldG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsK
LQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9kZWxfdnBfcmluZ3M7CiAJfQotCS8qIHRoZSBj
b25uZWN0aW9uIGJldHdlZW4gdGhlIGJ3cmFwIGtyaW5ncyBhbmQgdGhlIGh3bmEga3JpbmdzCi0J
ICogd2lsbCBiZSBwZXJmb21lZCBsYXRlciwgaW4gdGhlIG5tX3JlZ2lzdGVyIGNhbGxiYWNrLCBz
aW5jZQotCSAqIG5vdyB0aGUga3JpbmctPnJpbmcgcG9pbnRlcnMgaGF2ZSBub3QgYmVlbiBpbml0
aWFsaXplZCB5ZXQKLQkgKi8KIAotCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUykg
ewotCQkvKiB0aGUgaG9zdG5hIHJpbmdzIGFyZSB0aGUgaG9zdCByaW5ncyBvZiB0aGUgYndyYXAu
Ci0JCSAqIFRoZSBjb3JyZXNwb25kaW5nIGtyaW5ncyBtdXN0IHBvaW50IGJhY2sgdG8gdGhlCi0J
CSAqIGhvc3RuYQotCQkgKi8KLQkJaG9zdG5hLT50eF9yaW5ncyA9ICZuYS0+dHhfcmluZ3NbbmEt
Pm51bV90eF9yaW5nc107Ci0JCWhvc3RuYS0+dHhfcmluZ3NbMF0ubmEgPSBob3N0bmE7Ci0JCWhv
c3RuYS0+cnhfcmluZ3MgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOwotCQlob3N0
bmEtPnJ4X3JpbmdzWzBdLm5hID0gaG9zdG5hOworCS8qIGdldCBlYWNoIHJpbmcgc2xvdCBudW1i
ZXIgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBod25hIHJpbmcgKi8KKwlmb3JfcnhfdHgodCkgewor
CQllbnVtIHR4cnggciA9IG5tX3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlgg
Ki8KKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKGh3bmEsIHIpICsgMTsgaSsrKSB7
CisJCQlOTVIobmEsIHQpW2ldLm5rcl9udW1fc2xvdHMgPSBOTVIoaHduYSwgcilbaV0ubmtyX251
bV9zbG90czsKKwkJfQogCX0KIAogCXJldHVybiAwOworCitlcnJfZGVsX3ZwX3JpbmdzOgorCW5l
dG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0y
MTQ5LDE5ICsyNTczLDE4IEBACiAJdV9pbnQgcmluZ19uID0ga3JpbmctPnJpbmdfaWQ7CiAJdV9p
bnQgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBuZXRtYXBfa3Jpbmcg
Kmh3X2tyaW5nOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JTkQoIiVzOiBuYSAl
cyBod25hICVzIiwgCisJTkQoIiVzOiBuYSAlcyBod25hICVzIiwKIAkJCShrcmluZyA/IGtyaW5n
LT5uYW1lIDogIk5VTEwhIiksCiAJCQkobmEgPyBuYS0+bmFtZSA6ICJOVUxMISIpLAogCQkJKGh3
bmEgPyBod25hLT5uYW1lIDogIk5VTEwhIikpOwogCWh3X2tyaW5nID0gJmh3bmEtPnR4X3Jpbmdz
W3Jpbmdfbl07CiAKLQlpZiAobm1fa3JfdHJ5Z2V0KGh3X2tyaW5nKSkKLQkJcmV0dXJuIDA7CisJ
aWYgKG5tX2tyX3RyeWdldChod19rcmluZywgMCwgTlVMTCkpIHsKKwkJcmV0dXJuIEVOWElPOwor
CX0KIAotCWlmICghbm1fbmV0bWFwX29uKGh3bmEpKQotCQlyZXR1cm4gMDsKIAkvKiBmaXJzdCBz
dGVwOiBzaW11bGF0ZSBhIHVzZXIgd2FrZXVwIG9uIHRoZSByeCByaW5nICovCiAJbmV0bWFwX3Zw
X3J4c3luYyhrcmluZywgZmxhZ3MpOwogCU5EKCIlc1slZF0gUFJFIHJ4KGMlM2QgdCUzZCBsJTNk
KSByaW5nKGglM2QgYyUzZCB0JTNkKSB0eChjJTNkIGh0JTNkIHQlM2QpIiwKQEAgLTIxNzUsNyAr
MjU5OCw3IEBACiAJaHdfa3JpbmctPnJoZWFkID0gaHdfa3JpbmctPnJjdXIgPSBrcmluZy0+bnJf
aHd0YWlsOwogCWVycm9yID0gaHdfa3JpbmctPm5tX3N5bmMoaHdfa3JpbmcsIGZsYWdzKTsKIAlp
ZiAoZXJyb3IpCi0JCWdvdG8gb3V0OworCQlnb3RvIHB1dF9vdXQ7CiAKIAkvKiB0aGlyZCBzdGVw
OiBub3cgd2UgYXJlIGJhY2sgdGhlIHJ4IHJpbmcgKi8KIAkvKiBjbGFpbSBvd25lcnNoaXAgb24g
YWxsIGh3IG93bmVkIGJ1ZnMgKi8KQEAgLTIxODgsOSArMjYxMSwxMCBAQAogCQlrcmluZy0+bnJf
aHdjdXIsIGtyaW5nLT5ucl9od3RhaWwsIGtyaW5nLT5ua3JfaHdsZWFzZSwKIAkJcmluZy0+aGVh
ZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsLAogCQlod19rcmluZy0+bnJfaHdjdXIsIGh3X2tyaW5n
LT5ucl9od3RhaWwsIGh3X2tyaW5nLT5ydGFpbCk7Ci1vdXQ6CitwdXRfb3V0OgogCW5tX2tyX3B1
dChod19rcmluZyk7Ci0JcmV0dXJuIGVycm9yOworCisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBO
TV9JUlFfQ09NUExFVEVEOwogfQogCiAKQEAgLTIyMTcsNDQgKzI2NDEsMjMgQEAKIAkJCS8qIG5v
dGhpbmcgdG8gZG8gKi8KIAkJCXJldHVybiAwOwogCQl9Ci0JCW5wcml2ID0gbWFsbG9jKHNpemVv
ZigqbnByaXYpLCBNX0RFVkJVRiwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJbnByaXYgPSBuZXRtYXBf
cHJpdl9uZXcoKTsKIAkJaWYgKG5wcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gRU5PTUVNOwotCQll
cnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5y
X2ZsYWdzKTsKKwkJbnByaXYtPm5wX2lmcCA9IG5hLT5pZnA7IC8qIGxldCB0aGUgcHJpdiBkZXN0
cnVjdG9yIHJlbGVhc2UgdGhlIHJlZiAqLworCQllcnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJp
diwgbmEsIDAsIE5SX1JFR19OSUNfU1cpOwogCQlpZiAoZXJyb3IpIHsKLQkJCWJ6ZXJvKG5wcml2
LCBzaXplb2YoKm5wcml2KSk7Ci0JCQlmcmVlKG5wcml2LCBNX0RFVkJVRik7CisJCQluZXRtYXBf
cHJpdl9kZWxldGUobnByaXYpOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWJuYS0+bmFfa3By
aXYgPSBucHJpdjsKIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9CVVNZOwogCX0gZWxzZSB7Ci0JCWlu
dCBsYXN0X2luc3RhbmNlOwotCiAJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSAvKiBub3QgcmVn
aXN0ZXJlZCAqLwogCQkJcmV0dXJuIEVJTlZBTDsKLQkJbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9k
dG9yX2xvY2tlZChibmEtPm5hX2twcml2KTsKLQkJaWYgKCFsYXN0X2luc3RhbmNlKSB7Ci0JCQlE
KCItLS0gZXJyb3IsIHRyeWluZyB0byBkZXRhY2ggYW4gZW50cnkgd2l0aCBhY3RpdmUgbW1hcHMi
KTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgewotCQkJc3RydWN0IG5tX2JyaWRnZSAq
YiA9IGJuYS0+dXAubmFfYmRnLAotCQkJCSpiaCA9IGJuYS0+aG9zdC5uYV9iZGc7Ci0JCQlucHJp
diA9IGJuYS0+bmFfa3ByaXY7Ci0JCQlibmEtPm5hX2twcml2ID0gTlVMTDsKLQkJCUQoImRlbGV0
aW5nIHByaXYiKTsKLQotCQkJYnplcm8obnByaXYsIHNpemVvZigqbnByaXYpKTsKLQkJCWZyZWUo
bnByaXYsIE1fREVWQlVGKTsKLQkJCWlmIChiKSB7Ci0JCQkJLyogWFhYIHRoZSBid3JhcCBkdG9y
IHNob3VsZCB0YWtlIGNhcmUKLQkJCQkgKiBvZiB0aGlzICgyMDE0LTA2LTE2KQotCQkJCSAqLwot
CQkJCW5ldG1hcF9iZGdfZGV0YWNoX2NvbW1vbihiLCBibmEtPnVwLmJkZ19wb3J0LAotCQkJCSAg
ICAoYmggPyBibmEtPmhvc3QuYmRnX3BvcnQgOiAtMSkpOwotCQkJfQotCQkJbmEtPm5hX2ZsYWdz
ICY9IH5OQUZfQlVTWTsKLQkJfQorCQluZXRtYXBfcHJpdl9kZWxldGUoYm5hLT5uYV9rcHJpdik7
CisJCWJuYS0+bmFfa3ByaXYgPSBOVUxMOworCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9CVVNZOwog
CX0KIAlyZXR1cm4gZXJyb3I7CiAKQEAgLTIyNzYsMTIgKzI2NzksMTQgQEAKIAkJcmV0dXJuIEVC
VVNZOwogCX0KIAotCWJuYSA9IG1hbGxvYyhzaXplb2YoKmJuYSksIE1fREVWQlVGLCBNX05PV0FJ
VCB8IE1fWkVSTyk7CisJYm5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqYm5hKSk7CiAJaWYgKGJu
YSA9PSBOVUxMKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfQogCiAJbmEgPSAmYm5hLT51cC51cDsK
KwkvKiBtYWtlIGJ3cmFwIGlmcCBwb2ludCB0byB0aGUgcmVhbCBpZnAgKi8KKwluYS0+aWZwID0g
aHduYS0+aWZwOwogCW5hLT5uYV9wcml2YXRlID0gYm5hOwogCXN0cm5jcHkobmEtPm5hbWUsIG5y
X25hbWUsIHNpemVvZihuYS0+bmFtZSkpOwogCS8qIGZpbGwgdGhlIHJpbmcgZGF0YSBmb3IgdGhl
IGJ3cmFwIGFkYXB0ZXIgd2l0aCByeC90eCBtZWFuaW5ncwpAQCAtMjI5NCw3ICsyNjk5LDcgQEAK
IAkJbm1hX3NldF9uZGVzYyhuYSwgdCwgbm1hX2dldF9uZGVzYyhod25hLCByKSk7CiAJfQogCW5h
LT5ubV9kdG9yID0gbmV0bWFwX2J3cmFwX2R0b3I7Ci0JbmEtPm5tX3JlZ2lzdGVyID0gbmV0bWFw
X2J3cmFwX3JlZ2lzdGVyOworCW5hLT5ubV9yZWdpc3RlciA9IG5ldG1hcF9id3JhcF9yZWc7CiAJ
Ly8gbmEtPm5tX3R4c3luYyA9IG5ldG1hcF9id3JhcF90eHN5bmM7CiAJLy8gbmEtPm5tX3J4c3lu
YyA9IG5ldG1hcF9id3JhcF9yeHN5bmM7CiAJbmEtPm5tX2NvbmZpZyA9IG5ldG1hcF9id3JhcF9j
b25maWc7CkBAIC0yMzAzLDEzICsyNzA4LDggQEAKIAluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX2J3
cmFwX25vdGlmeTsKIAluYS0+bm1fYmRnX2N0bCA9IG5ldG1hcF9id3JhcF9iZGdfY3RsOwogCW5h
LT5wZGV2ID0gaHduYS0+cGRldjsKLQluYS0+bm1fbWVtID0gbmV0bWFwX21lbV9wcml2YXRlX25l
dyhuYS0+bmFtZSwKLQkJCW5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fdHhfZGVzYywKLQkJCW5h
LT5udW1fcnhfcmluZ3MsIG5hLT5udW1fcnhfZGVzYywKLQkJCTAsIDAsICZlcnJvcik7Ci0JbmEt
Pm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7Ci0JaWYgKG5hLT5ubV9tZW0gPT0gTlVMTCkKLQkJ
Z290byBlcnJfcHV0OworCW5hLT5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChod25hLT5ubV9tZW0p
OworCW5hLT52aXJ0X2hkcl9sZW4gPSBod25hLT52aXJ0X2hkcl9sZW47CiAJYm5hLT51cC5yZXRy
eSA9IDE7IC8qIFhYWCBtYXliZSB0aGlzIHNob3VsZCBkZXBlbmQgb24gdGhlIGh3bmEgKi8KIAog
CWJuYS0+aHduYSA9IGh3bmE7CkBAIC0yMzMyLDcgKzI3MzIsNyBAQAogCQkvLyBob3N0bmEtPm5t
X3R4c3luYyA9IG5ldG1hcF9id3JhcF9ob3N0X3R4c3luYzsKIAkJLy8gaG9zdG5hLT5ubV9yeHN5
bmMgPSBuZXRtYXBfYndyYXBfaG9zdF9yeHN5bmM7CiAJCWhvc3RuYS0+bm1fbm90aWZ5ID0gbmV0
bWFwX2J3cmFwX25vdGlmeTsKLQkJaG9zdG5hLT5ubV9tZW0gPSBuYS0+bm1fbWVtOworCQlob3N0
bmEtPm5tX21lbSA9IG5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOwogCQlob3N0bmEtPm5hX3By
aXZhdGUgPSBibmE7CiAJCWhvc3RuYS0+bmFfdnAgPSAmYm5hLT51cDsKIAkJbmEtPm5hX2hvc3R2
cCA9IGh3bmEtPm5hX2hvc3R2cCA9CkBAIC0yMzQ5LDI3ICsyNzQ5LDEzIEBACiAJaWYgKGVycm9y
KSB7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQotCS8qIG1ha2UgYndyYXAgaWZwIHBvaW50IHRvIHRo
ZSByZWFsIGlmcAotCSAqIE5PVEU6IG5ldG1hcF9hdHRhY2hfY29tbW9uKCkgaW50ZXJwcmV0cyBh
IG5vbi1OVUxMIG5hLT5pZnAKLQkgKiBhcyBhIHJlcXVlc3QgdG8gbWFrZSB0aGUgaWZwIHBvaW50
IHRvIHRoZSBuYS4gU2luY2Ugd2UKLQkgKiBkbyBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIG5hIGFs
cmVhZHkgcG9pbnRlZCB0byBieSBod25hLT5pZnAsCi0JICogdGhlIGZvbGxvd2luZyBhc3NpZ25t
ZW50IGhhcyB0byBiZSBkZWxheWVkIHVudGlsIG5vdwotCSAqLwotCW5hLT5pZnAgPSBod25hLT5p
ZnA7CiAJaHduYS0+bmFfZmxhZ3MgfD0gTkFGX0JVU1k7Ci0JLyogbWFrZSBod25hIHBvaW50IHRv
IHRoZSBhbGxvY2F0b3Igd2UgYXJlIGFjdHVhbGx5IHVzaW5nLAotCSAqIHNvIHRoYXQgbW9uaXRv
cnMgd2lsbCBiZSBhYmxlIHRvIGZpbmQgaXQKLQkgKi8KLQlibmEtPnNhdmVfbm1kID0gaHduYS0+
bm1fbWVtOwotCWh3bmEtPm5tX21lbSA9IG5hLT5ubV9tZW07CiAJcmV0dXJuIDA7CiAKIGVycl9m
cmVlOgotCW5ldG1hcF9tZW1fZGVsZXRlKG5hLT5ubV9tZW0pOwotZXJyX3B1dDoKIAlod25hLT5u
YV92cCA9IGh3bmEtPm5hX2hvc3R2cCA9IE5VTEw7CiAJbmV0bWFwX2FkYXB0ZXJfcHV0KGh3bmEp
OwotCWZyZWUoYm5hLCBNX0RFVkJVRik7CisJbm1fb3NfZnJlZShibmEpOwogCXJldHVybiBlcnJv
cjsKIAogfQpAQCAtMjM4MCw4ICsyNzY2LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgbm1fYnJpZGdl
ICpiOwogCi0JYiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5tX2JyaWRnZSkgKiBuLCBNX0RFVkJV
RiwKLQkJTV9OT1dBSVQgfCBNX1pFUk8pOworCWIgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVj
dCBubV9icmlkZ2UpICogbik7CiAJaWYgKGIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZm9y
IChpID0gMDsgaSA8IG47IGkrKykKQEAgLTIzOTksNyArMjc4NCw3IEBACiAKIAlmb3IgKGkgPSAw
OyBpIDwgbjsgaSsrKQogCQlCREdfUldERVNUUk9ZKCZiW2ldKTsKLQlmcmVlKGIsIE1fREVWQlVG
KTsKKwlubV9vc19mcmVlKGIpOwogfQogCiBpbnQKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC8uZGVwZW5kLmlmX3B0bmV0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwLy5kZXBlbmQuaWZfcHRuZXQubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl
cGVuZC5pZl9wdG5ldC5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5pZl9wdG5ldC5vCTIwMTYtMTEtMjMg
MTc6MDU6NDIuMzQ0MzkwMDAwICswMDAwCkBAIC0wLDAgKzEsNjIgQEAKK2lmX3B0bmV0Lm86IFwK
KyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9u
ZXRtYXAvaWZfcHRuZXQuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9z
eXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3Ny
Yy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFj
aGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlw
ZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2Vs
ZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190
aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5
cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMv
c3lzL19udWxsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5
cy9zeXMvZXJybm8uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9z
eXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9f
YWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggXAorICBtYWNoaW5lL2F0b21pYy5oIG1h
Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tpby5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisg
IC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NkdC5oIC91c3Ivc3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NvY2tldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wY3B1LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmgg
bWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Iv
c3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGFza3F1ZXVlLmgg
L3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zbXAuaCAvdXNy
L3NyYy9zeXMvc3lzL2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9iaXRzZXQuaCBtYWNo
aW5lL3NtcC5oIC91c3Ivc3JjL3N5cy92bS92bS5oIFwKKyAgbWFjaGluZS92bS5oIG1hY2hpbmUv
c3BlY2lhbHJlZy5oIHg4Ni9zcGVjaWFscmVnLmggXAorICAvdXNyL3NyYy9zeXMvdm0vcG1hcC5o
IG1hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy92bS9fdm1fcmFkaXguaCBcCisgIC91c3Ivc3Jj
L3N5cy9uZXQvZXRoZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9z
eXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5o
IFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5o
IG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQv
dm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmgg
L3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZxLmggXAorICAv
dXNyL3NyYy9zeXMvbmV0L2lmX2FycC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfZGwuaCBcCisgIC91
c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX21lZGlhLmggXAor
ICAvdXNyL3NyYy9zeXMvbmV0L2lmX3ZsYW5fdmFyLmggL3Vzci9zcmMvc3lzL25ldC9icGYuaCBc
CisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3N5c3RtLmggL3Vzci9zcmMvc3lzL25ldGluZXQv
aW4uaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0Ni9pbjYuaCAvdXNyL3NyYy9zeXMvbmV0aW5l
dC9pcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvaXA2LmggL3Vzci9zcmMvc3lzL25ldGlu
ZXQ2L2lwNl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L3VkcC5oIC91c3Ivc3JjL3N5
cy9uZXRpbmV0L3RjcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvc2N0cC5oIC91c3Ivc3Jj
L3N5cy9uZXRpbmV0L3NjdHBfdWlvLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIG1h
Y2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1h
LmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNf
ZG1hLmggbWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2tvYmouaCBkZXZpY2VfaWYuaCBidXNfaWYuaCAvdXNyL3NyYy9zeXMv
c3lzL3JtYW4uaCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5oIC91
c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXJlZy5oIFwKKyAgb3B0X2luZXQuaCBvcHRfaW5ldDYuaCAv
dXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu
L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubyAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
Lm8JMjAxNi0xMS0yMyAxNzowNTozNS44MTcxMTQwMDAgKzAwMDAKQEAgLTAsMCArMSw1MCBAQAor
bmV0bWFwLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw
Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwLmMgXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg
L3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hpbmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFu
LmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMu
aCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9f
cHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9z
eXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMv
c3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Iv
c3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vz
ci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Iv
c3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNy
L3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxp
Z24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvY29uZi5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnRoYW5kbGVyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvbXV0ZXguaCAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2ZpbGlvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXR2YXIuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnQuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvb3NkLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrYnVmLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrc3RhdGUuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrb3B0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvcG9sbC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0b3JhZ2UuaCAvdXNyL3NyYy9zeXMvc3lz
L3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9qYWlsLmggL3Vzci9zcmMvc3lzL25ldC92
bmV0LmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAv
dXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQu
aCAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19z
dGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy92bS91
bWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBcCisgIG1hY2hp
bmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3Nl
Z21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIuaCBt
YWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMv
bmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZnEuaCAvdXNyL3NyYy9z
eXMvbmV0L2JwZi5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIFwKKyAgbWFjaGluZS9fYnVzLmgg
bWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvcmVmY291bnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpbWl0cy5oIFwKKyAgL3Vz
ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXAu
aCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9k
ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMv
bW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfbWJxLmggXAorICAvdXNyL2hv
bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt
YXBfbWVtMi5oCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVu
ZC5uZXRtYXBfZnJlZWJzZC5vIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5l
dG1hcF9mcmVlYnNkLm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0
bWFwX2ZyZWVic2QubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2ZyZWVic2QubwkyMDE2LTEx
LTIzIDE3OjA1OjM5LjYxMTU4NTAwMCArMDAwMApAQCAtMCwwICsxLDc2IEBACituZXRtYXBfZnJl
ZWJzZC5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u
Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgXAorICBvcHRfaW5ldC5oIG9wdF9pbmV0
Ni5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwu
aCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg
bWFjaGluZS9lbmRpYW4uaCB4ODYvZW5kaWFuLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL190eXBl
cy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmgg
eDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5o
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5o
IG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Iv
c3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAv
dXNyL3NyYy9zeXMvc3lzL2phaWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNy
L3NyYy9zeXMvc3lzL3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggL3Vzci9z
cmMvc3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdHJfY2xhc3MuaCAvdXNy
L3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIC91c3Iv
c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvcG9sbC5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL2NvbmYuaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9rdHIuaCAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9zeXNjYWxsc3Vici5oIC91c3Ivc3JjL3N5cy9zeXMvc2lnbmFsLmggXAorICBt
YWNoaW5lL3NpZ25hbC5oIHg4Ni9zaWduYWwuaCBtYWNoaW5lL3RyYXAuaCB4ODYvdHJhcC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy91aW8uaCAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y
YWdlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL21hYy5oIC91c3Ivc3JjL3N5cy9zeXMvbW91bnQu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdWNyZWQuaCAvdXNyL3NyYy9zeXMvYnNtL2F1ZGl0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2ttZ3IuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrbWdy
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j
ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lh
bHJlZy5oIFwKKyAgeDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hp
bmUvcG1hcC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy92
bS92bV9wYXJhbS5oIFwKKyAgbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL3ZtL3ZtX29i
amVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtX3BhZ2UuaCAvdXNyL3NyYy9zeXMvc3lzL3N5
c3RtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMvc3lzL19j
YWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIG1hY2hpbmUvX3N0ZGludC5o
IHg4Ni9fc3RkaW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCAvdXNyL3NyYy9z
eXMvdm0vdm1fcGFnZXIuaCBcCisgIC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMv
c3lzL21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmggL3Vzci9zcmMvc3lz
L3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdGhyZWFkLmggL3Vzci9zcmMvc3lz
L3N5cy9wcm9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NvbmR2YXIuaCAvdXNyL3NyYy9zeXMv
c3lzL3J0cHJpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ydW5xLmggbWFjaGluZS9ydW5xLmgg
L3Vzci9zcmMvc3lzL3N5cy9zaWdpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zaWduYWx2YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL3Vjb250ZXh0LmggXAorICBtYWNoaW5lL3Vjb250ZXh0LmggeDg2
L3Vjb250ZXh0LmggL3Vzci9zcmMvc3lzL3N5cy9fdWNvbnRleHQuaCBcCisgIC91c3Ivc3JjL3N5
cy9zeXMvX3ZtX2RvbWFpbi5oIC91c3Ivc3JjL3N5cy9zeXMvc2VxLmggbWFjaGluZS9jcHUuaCBc
CisgIG1hY2hpbmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBt
YWNoaW5lL3NlZ21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCBtYWNoaW5lL3Byb2MuaCAvdXNy
L3NyYy9zeXMvc3lzL3VuaXN0ZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zY2hlZC5oIC91c3Iv
c3JjL3N5cy9zeXMvc21wLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NwdXNldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lz
L25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9z
eXMvYnVmX3JpbmcuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9z
eXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeC5o
IC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lm
cS5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvZXRo
ZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX2RsLmggbWFjaGluZS9idXMuaCBcCisgIHg4Ni9i
dXMuaCBtYWNoaW5lL19idXMuaCBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1
c19kbWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbmV0
aW5ldC9pbi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQ2L2luNi5oIG1hY2hpbmUvaW5fY2tz
dW0uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u
ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25l
dC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMv
bmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvYnVzLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMv
a29iai5oIGRldmljZV9pZi5oIGJ1c19pZi5oIC91c3Ivc3JjL3N5cy9zeXMvcm1hbi5oIFwKKyAg
bWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5o
IFwKKyAgL3Vzci9zcmMvc3lzL2Rldi9wY2kvcGNpcmVnLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNw
cm90by5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9hY2wuaCAvdXNyL3NyYy9zeXMvc3lzL19mZmNv
dW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NlbWFwaG9yZS5oIC91c3Ivc3JjL3N5cy9z
eXMvd2FpdC5oIFwKKyAgL3Vzci9zcmMvc3lzL2JzbS9hdWRpdF9rZXZlbnRzLmgKZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9nZW5lcmljLm8g
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2dlbmVyaWMubwotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTIwMTYtMTEtMjMgMTc6MDU6MzcuMzgyMzc4
MDAwICswMDAwCkBAIC0wLDAgKzEsNDAgQEAKK25ldG1hcF9nZW5lcmljLm86IFwKKyAgL3Vzci9o
b21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0
bWFwX2dlbmVyaWMuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv
c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z
eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu
ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l
dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f
dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNyL3NyYy9zeXMvc3lz
L21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIC91c3Ivc3JjL3N5cy9zeXMv
X251bGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5
cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o
IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4
LmggL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFz
cy5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xv
Y2suaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5lL3BjcHUuaCBc
CisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9z
eXMvc3lzL19pb3ZlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc29ja2FkZHJfc3RvcmFnZS5o
IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5o
IC91c3Ivc3JjL3N5cy9uZXQvaWYuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWZfdmFyLmggL3Vz
ci9zcmMvc3lzL3N5cy9tYnVmLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggbWFjaGlu
ZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMv
c3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0
ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggXAorICAvdXNy
L3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5oIG1hY2hpbmUvY3B1
LmggXAorICBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1l
LmggbWFjaGluZS9zZWdtZW50cy5oIFwKKyAgeDg2L3NlZ21lbnRzLmggL3Vzci9zcmMvc3lzL25l
dC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggXAorICBtYWNoaW5lL2NvdW50ZXIu
aCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAor
ICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUv
X2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25l
dG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21l
L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw
X2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u
Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw
L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tYnEubyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWJxLm8KLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX21icS5vCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl
cGVuZC5uZXRtYXBfbWJxLm8JMjAxNi0xMS0yMyAxNzowNTozNy41MTAyMTMwMDAgKzAwMDAKQEAg
LTAsMCArMSwyNiBAQAorbmV0bWFwX21icS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw
L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYyBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3R5cGVzLmggL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIG1hY2hpbmUvZW5k
aWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5l
L190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRz
LmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3Bh
cmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lz
L2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNyL3NyYy9zeXMvc3lzL19s
b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMv
bXV0ZXguaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9w
Y3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19i
aXRzZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1s
b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jl
c291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmls
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2R0
LmggL3Vzci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggbWFjaGluZS9hdG9taWMuaCBcCisgIG1h
Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAvdXNyL3NyYy9zeXMvc3lz
L2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMv
c3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCAvdXNyL3Ny
Yy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3Jj
L3N5cy92bS91bWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggXAorICAvdXNyL2hv
bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt
YXBfbWJxLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5k
Lm5ldG1hcF9tZW0yLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
X21lbTIubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVt
Mi5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVtMi5vCTIwMTYtMTEtMjMgMTc6MDU6MzYu
OTIxNjU2MDAwICswMDAwCkBAIC0wLDAgKzEsNTMgQEAKK25ldG1hcF9tZW0yLm86IFwKKyAgL3Vz
ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAv
bmV0bWFwX21lbTIuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv
c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z
eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu
ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l
dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f
dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMvc3lzL3N5
cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMv
c3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5
cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o
IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4
LmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2Vy
X3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcHJvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxs
b3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9l
dmVudC5oIC91c3Ivc3JjL3N5cy9zeXMvY29uZHZhci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9s
b2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL29zZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9ydHByaW8uaCAvdXNyL3NyYy9zeXMvc3lzL3J1bnEuaCBtYWNoaW5lL3J1bnEuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ2lvLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3NpZ25hbC5oIG1hY2hpbmUvc2lnbmFsLmggeDg2L3NpZ25hbC5oIG1h
Y2hpbmUvdHJhcC5oIFwKKyAgeDg2L3RyYXAuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ25hbHZhci5o
IC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0Lmgg
L3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91
c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmgg
bWFjaGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy91Y29udGV4dC5oIFwKKyAgbWFjaGluZS91
Y29udGV4dC5oIHg4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9zeXMvX3Vjb250ZXh0LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3VjcmVkLmggL3Vzci9zcmMvc3lzL2JzbS9hdWRpdC5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9fdm1fZG9tYWluLmggL3Vzci9zcmMvc3lzL3N5cy9zZXEuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVu
Yy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYv
X3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3N5
cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIG1hY2hpbmUvY3B1Lmgg
bWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1lLmgg
bWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgbWFjaGluZS9wcm9jLmggL3Vz
ci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lhbHJlZy5oIFwKKyAg
eDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hpbmUvcG1hcC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRy
X3N0b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9z
eXMvc3lzY3RsLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9p
Zl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy92bS91bWEu
aCAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o
IC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmgg
bWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3N4LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCBcCisgIC91c3Iv
c3JjL3N5cy9uZXQvaWZxLmggbWFjaGluZS9idXMuaCB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmgg
XAorICBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1c19kbWEuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu
L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
X21vbml0b3IubyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbW9u
aXRvci5vCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25p
dG9yLm8JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25pdG9yLm8JMjAxNi0xMS0yMyAxNzow
NTo0MC42OTE4ODIwMDAgKzAwMDAKQEAgLTAsMCArMSw0MyBAQAorbmV0bWFwX21vbml0b3Iubzog
XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2
L25ldG1hcC9uZXRtYXBfbW9uaXRvci5jIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91
c3Ivc3JjL3N5cy9zeXMvdHlwZXMuaCBtYWNoaW5lL2VuZGlhbi5oIFwKKyAgeDg2L2VuZGlhbi5o
IC91c3Ivc3JjL3N5cy9zeXMvX3R5cGVzLmggbWFjaGluZS9fdHlwZXMuaCB4ODYvX3R5cGVzLmgg
XAorICBtYWNoaW5lL19saW1pdHMuaCB4ODYvX2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvX3B0
aHJlYWR0eXBlcy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc3RkaW50LmggL3Vzci9zcmMvc3lz
L3N5cy9zZWxlY3QuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NpZ3NldC5oIC91c3Ivc3JjL3N5
cy9zeXMvX3RpbWV2YWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZXNwZWMuaCAvdXNyL3Ny
Yy9zeXMvc3lzL190aW1lc3BlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIC91c3Iv
c3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3Ny
Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9z
cmMvc3lzL3N5cy9wcmlvcml0eS5oIG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWdu
LmggeDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wb2xsLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbG9ja19wcm9maWxlLmggL3Vzci9zcmMvc3lzL3N5cy9sb2Nrc3RhdC5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9zZHQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5l
L3BjcHUuaCBcCisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmgg
L3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAv
dXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCAv
dXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggXAorICAvdXNyL3NyYy9zeXMvbmV0
L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1
Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2NwdWZ1bmMuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy92bS91bWEuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1hY2hpbmUvcHNsLmgg
eDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVu
dHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3Rh
c2suaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25l
dC9pZnEuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5lL19idXMuaCBcCisgIG1hY2hp
bmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvcmVmY291bnQuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbGltaXRzLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxl
cy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv
c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91
c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFw
L25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25l
dG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvLmRlcGVuZC5uZXRtYXBfb2ZmbG9hZGluZ3MubwkyMDE2LTExLTIzIDE3OjA1OjM5Ljky
MzU4MDAwMCArMDAwMApAQCAtMCwwICsxLDQ0IEBACituZXRtYXBfb2ZmbG9hZGluZ3MubzogXAor
ICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25l
dG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAv
dXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4u
aCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5o
IFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19w
dGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5
cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9z
eXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9z
cmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNy
L3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggL3Vzci9z
cmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Iv
c3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGln
bi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9zb2NraW8uaCAvdXNyL3NyYy9zeXMvc3lzL2lvY2NvbS5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL29zZC5oIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL3NvY2tidWYuaCAvdXNyL3NyYy9zeXMvc3lzL190YXNrLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL3NvY2tzdGF0ZS5oIC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NvY2tvcHQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9faW92ZWMuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdl
LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNo
aW5lL2F0b21pYy5oIFwKKyAgbWFjaGluZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxs
b3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9z
dGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lz
L3N5cy9saWJrZXJuLmggXAorICAvdXNyL3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5
cy9zZHQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1h
Y2hpbmUvcHNsLmggeDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1h
Y2hpbmUvc2VnbWVudHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5l
dC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19iaXRzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNo
aW5lL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMv
a3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCAvdXNyL3Ny
Yy9zeXMvc3lzL3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9z
cmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNy
L3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggXAorICB4ODYvYnVzLmggbWFjaGluZS9f
YnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisg
IC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0
bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4v
Li4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv
c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfcGlwZS5vIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9waXBlLm8KLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3BpcGUubwkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5k
ZXBlbmQubmV0bWFwX3BpcGUubwkyMDE2LTExLTIzIDE3OjA1OjQwLjIzMjAzMjAwMCArMDAwMApA
QCAtMCwwICsxLDQzIEBACituZXRtYXBfcGlwZS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0
bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMgXAor
ICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmggL3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hp
bmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBt
YWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9f
bGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGlu
ZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxpZ24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lz
L3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMv
c3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbXV0ZXguaCAvdXNyL3NyYy9z
eXMvc3lzL3BvbGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9z
eXMva3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3J3bG9jay5oIC91c3Ivc3JjL3N5
cy9zeXMvX3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrX3Byb2ZpbGUuaCAvdXNy
L3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIC91c3Iv
c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgbWFjaGluZS9hdG9taWMu
aCAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3N5c2N0bC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0
b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWYuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zh
ci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9tYnVmLmggL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5o
IG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNo
aW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJu
LmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o
IG1hY2hpbmUvY3B1LmggbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1l
LmggeDg2L2ZyYW1lLmggbWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgL3Vz
ci9zcmMvc3lzL25ldC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggbWFjaGluZS9j
b3VudGVyLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9z
eC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9p
Zl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1
cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5
cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lz
L3N5cy9yZWZjb3VudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saW1pdHMuaCBcCisgIC91c3Iv
aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmgg
XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2
L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21l
L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw
X21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQu
bmV0bWFwX3B0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0
Lm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0Lm8JMTk3
MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC8uZGVwZW5kLm5ldG1hcF9wdC5vCTIwMTYtMTEtMjMgMTc6MDU6NDEuMzIyNTA2MDAw
ICswMDAwCkBAIC0wLDAgKzEsNDIgQEAKK25ldG1hcF9wdC5vOiBcCisgIC91c3IvaG9tZS9zdGV2
ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9wdC5j
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFj
aGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5o
IG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2
L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5oIG1h
Y2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Ivc3Jj
L3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNy
L3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNy
L3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIC91c3Iv
c3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y
YWdlLmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBt
YWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9j
YWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3NyYy9zeXMv
c3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBcCisgIG1h
Y2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3NlZ21lbnRzLmggeDg2L3NlZ21lbnRz
LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L3ZuZXQuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIu
aCBtYWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIC91c3Ivc3Jj
L3N5cy9zeXMvX2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3Jj
L3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hp
bmUvcGNwdS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9r
dHJfY2xhc3MuaCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lz
L25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmgg
XAorICB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMv
c3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAv
dXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1h
cC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4u
L2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3Iv
aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwX3Zp
cnQuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF92YWxlLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwLy5kZXBlbmQubmV0bWFwX3ZhbGUubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
LmRlcGVuZC5uZXRtYXBfdmFsZS5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfdmFsZS5vCTIw
MTYtMTEtMjMgMTc6MDU6MzguODA0NTI5MDAwICswMDAwCkBAIC0wLDAgKzEsNTAgQEAKK25ldG1h
cF92YWxlLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw
Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2Rl
ZnMuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9l
bmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190
eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMv
c3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Iv
c3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNy
L3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmgg
L3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8u
aCAvdXNyL3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmgg
L3Vzci9zcmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5o
IC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5l
L19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9jb25mLmggL3Vzci9zcmMvc3lzL3N5cy9ldmVudGhhbmRsZXIuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmggL3Vzci9zcmMvc3lzL3N5cy9rdHIuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc2R0LmggbWFjaGluZS9hdG9taWMuaCBtYWNoaW5lL2NwdWZ1bmMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZv
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2J1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvX3Rhc2suaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja3N0YXRlLmggL3Vzci9zcmMvc3lzL3N5cy9jYXByaWdo
dHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja29wdC5oIC91c3Ivc3JjL3N5cy9zeXMvbWFs
bG9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3BvbGwuaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j
ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nr
ZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggL3Vzci9zcmMvc3lzL3N5cy9fc29j
a2FkZHJfc3RvcmFnZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAvdXNyL3NyYy9z
eXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9z
eXMvbWJ1Zi5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5oIC91c3Ivc3JjL3N5cy9zeXMv
Y2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9z
eXMvc3RkaW50LmggXAorICBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIC91c3Ivc3Jj
L3N5cy9zeXMvbGlia2Vybi5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIC91c3Ivc3JjL3N5
cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNs
LmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4
Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291
bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAg
L3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIFwK
KyAgL3Vzci9zcmMvc3lzL25ldC9icGYuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5l
L19idXMuaCBcCisgIG1hY2hpbmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5o
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvZW5kaWFu
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3JlZmNvdW50LmggL3Vzci9zcmMvc3lzL3N5cy9saW1p
dHMuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u
ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwLy5naXRpZ25vcmUgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUK
LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUJMTk3MC0wMS0wMSAwMTow
MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZ2l0
aWdub3JlCTIwMTYtMTEtMjMgMTY6NTc6NTcuODU2NjM5MDAwICswMDAwCkBAIC0wLDAgKzEsMyBA
QAorKgorIU1ha2VmaWxlCishLmdpdGlnbm9yZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL01ha2VmaWxlIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtlZmls
ZQotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvTWFrZWZpbGUJMjAxNi0wOS0yOSAwMDoy
NDo1My4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtl
ZmlsZQkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1NjkzNDAwMCArMDAwMApAQCAtMSwxMyArMSwxNiBA
QAotIyAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL21vZHVsZXMvbmV0bWFwL01ha2VmaWxlIDI3
MjEwOCAyMDE0LTA5LTI1IDE0OjI1OjM4WiBsdWlnaSAkCisjICRGcmVlQlNEJAogIwogIyBDb21w
aWxlIG5ldG1hcCBhcyBhIG1vZHVsZSwgdXNlZnVsIGlmIHlvdSB3YW50IGEgbmV0bWFwIGJyaWRn
ZQogIyBvciBsb2FkYWJsZSBkcml2ZXJzLgogCisuaW5jbHVkZSA8YnNkLm93bi5taz4gIyBGcmVl
QlNEIDEwIGFuZCBlYXJsaWVyCisjIC5pbmNsdWRlICIke1NZU0RJUn0vY29uZi9rZXJuLm9wdHMu
bWsiCisKIC5QQVRIOiAkey5DVVJESVJ9Ly4uLy4uL2Rldi9uZXRtYXAKIC5QQVRILmg6ICR7LkNV
UkRJUn0vLi4vLi4vbmV0Ci1DRkxBR1MgKz0gLUkkey5DVVJESVJ9Ly4uLy4uLworQ0ZMQUdTICs9
IC1JJHsuQ1VSRElSfS8uLi8uLi8gLUQgSU5FVAogS01PRAk9IG5ldG1hcAotU1JDUwk9IGRldmlj
ZV9pZi5oIGJ1c19pZi5oIG9wdF9uZXRtYXAuaAorU1JDUwk9IGRldmljZV9pZi5oIGJ1c19pZi5o
IHBjaV9pZi5oIG9wdF9uZXRtYXAuaAogU1JDUwkrPSBuZXRtYXAuYyBuZXRtYXAuaCBuZXRtYXBf
a2Vybi5oCiBTUkNTCSs9IG5ldG1hcF9tZW0yLmMgbmV0bWFwX21lbTIuaAogU1JDUwkrPSBuZXRt
YXBfZ2VuZXJpYy5jCkBAIC0xNyw1ICsyMCw4IEBACiBTUkNTCSs9IG5ldG1hcF9vZmZsb2FkaW5n
cy5jCiBTUkNTCSs9IG5ldG1hcF9waXBlLmMKIFNSQ1MJKz0gbmV0bWFwX21vbml0b3IuYworU1JD
UwkrPSBuZXRtYXBfcHQuYworU1JDUwkrPSBpZl9wdG5ldC5jCitTUkNTCSs9IG9wdF9pbmV0Lmgg
b3B0X2luZXQ2LmgKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL2J1c19pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9idXNfaWYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvYnVzX2lmLmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9idXNfaWYuaAkyMDE2LTExLTIzIDE3OjA1OjMzLjg1NzI3NTAwMCArMDAwMApAQCAtMCww
ICsxLDEwNDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21hdGljYWxseS4K
KyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoKKyAqIENyZWF0
ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9idXNfaWYubQorICog
d2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291cmNlIGZpbGUgZm9y
IGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgQlVTIGJ1cyAtIEtP
YmogbWV0aG9kcyBmb3IgZHJpdmVycyBvZiBkZXZpY2VzIHdpdGggY2hpbGRyZW4KKyAqIEBicmll
ZiBBIHNldCBvZiBtZXRob2RzIHJlcXVpcmVkIGRldmljZSBkcml2ZXJzIHRoYXQgc3VwcG9ydAor
ICogY2hpbGQgZGV2aWNlcy4KKyAqIEB7CisgKi8KKworI2lmbmRlZiBfYnVzX2lmX2hfCisjZGVm
aW5lIF9idXNfaWZfaF8KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19QUklOVF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNf
cHJpbnRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IEJVU19QUklOVF9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3ByaW50X2NoaWxk
X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFByaW50
IGEgZGVzY3JpcHRpb24gb2YgYSBjaGlsZCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBm
cm9tIHN5c3RlbSBjb2RlIHdoaWNoIHByaW50cyBvdXQgYSBkZXNjcmlwdGlvbiBvZiBhCisgKiBk
ZXZpY2UuIEl0IHNob3VsZCBkZXNjcmliZSB0aGUgYXR0YWNobWVudCB0aGF0IHRoZSBjaGlsZCBo
YXMgd2l0aAorICogdGhlIHBhcmVudC4gRm9yIGluc3RhbmNlIHRoZSBUdXJib0xhc2VyIGJ1cyBw
cmludHMgd2hpY2ggbm9kZSB0aGUKKyAqIGRldmljZSBpcyBhdHRhY2hlZCB0by4gU2VlIGJ1c19n
ZW5lcmljX3ByaW50X2NoaWxkKCkgZm9yIG1vcmUgCisgKiBpbmZvcm1hdGlvbi4KKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBwcmludGVkCisgKiBA
cGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2UgdG8gZGVzY3JpYmUKKyAqCisgKiBAcmV0dXJu
cwkJdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG91dHB1dC4KKyAqLworCitzdGF0aWMgX19pbmxp
bmUgaW50IEJVU19QUklOVF9DSElMRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7
CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3By
aW50X2NoaWxkKTsKKwlyZXR1cm4gKChidXNfcHJpbnRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No
aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19QUk9C
RV9OT01BVENIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19wcm9i
ZV9ub21hdGNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBC
VVNfUFJPQkVfTk9NQVRDSCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19wcm9iZV9ub21h
dGNoX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFBy
aW50IGEgbm90aWZpY2F0aW9uIGFib3V0IGFuIHVucHJvYmVkIGNoaWxkIGRldmljZS4KKyAqCisg
KiBDYWxsZWQgZm9yIGVhY2ggY2hpbGQgZGV2aWNlIHRoYXQgZGlkIG5vdCBzdWNjZWVkIGluIHBy
b2JpbmcgZm9yIGEKKyAqIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3
aG9zZSBjaGlsZCB3YXMgYmVpbmcgcHJvYmVkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBk
ZXZpY2Ugd2hpY2ggZmFpbGVkIHRvIHByb2JlCisgKi8gICAKKworc3RhdGljIF9faW5saW5lIHZv
aWQgQlVTX1BST0JFX05PTUFUQ0goZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQorewor
CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19wcm9i
ZV9ub21hdGNoKTsKKwkoKGJ1c19wcm9iZV9ub21hdGNoX3QgKikgX20pKF9kZXYsIF9jaGlsZCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVBRF9JVkFS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19yZWFkX2l2YXJfZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19SRUFEX0lWQVIo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWFkX2l2YXJfdChkZXZpY2VfdCBfZGV2LCBk
ZXZpY2VfdCBfY2hpbGQsIGludCBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludHB0cl90ICpfcmVzdWx0KTsKKy8qKgorICogQGJyaWVmIFJlYWQgdGhlIHZhbHVlIG9mIGEg
YnVzLXNwZWNpZmljIGF0dHJpYnV0ZSBvZiBhIGRldmljZQorICoKKyAqIFRoaXMgbWV0aG9kLCBh
bG9uZyB3aXRoIEJVU19XUklURV9JVkFSKCkgbWFuYWdlcyBhIGJ1cy1zcGVjaWZpYyBzZXQKKyAq
IG9mIGluc3RhbmNlIHZhcmlhYmxlcyBvZiBhIGNoaWxkIGRldmljZS4gIFRoZSBpbnRlbnRpb24g
aXMgdGhhdAorICogZWFjaCBkaWZmZXJlbnQgdHlwZSBvZiBidXMgZGVmaW5lcyBhIHNldCBvZiBh
cHByb3ByaWF0ZSBpbnN0YW5jZQorICogdmFyaWFibGVzIChzdWNoIGFzIHBvcnRzIGFuZCBpcnFz
IGZvciBJU0EgYnVzIGV0Yy4pCisgKgorICogVGhpcyBpbmZvcm1hdGlvbiBjb3VsZCBiZSBnaXZl
biB0byB0aGUgY2hpbGQgZGV2aWNlIGFzIGEgc3RydWN0IGJ1dAorICogdGhhdCBtYWtlcyBpdCBo
YXJkIGZvciBhIGJ1cyB0byBhZGQgb3IgcmVtb3ZlIHZhcmlhYmxlcyB3aXRob3V0CisgKiBmb3Jj
aW5nIGFuIGVkaXQgYW5kIHJlY29tcGlsZSBmb3IgYWxsIGRyaXZlcnMgd2hpY2ggbWF5IG5vdCBi
ZQorICogcG9zc2libGUgZm9yIHZlbmRvciBzdXBwbGllZCBiaW5hcnkgZHJpdmVycy4KKyAqCisg
KiBUaGlzIG1ldGhvZCBjb3BpZXMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRv
IHRoZQorICogbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEBwICpfcmVzdWx0LgorICogCisgKiBAcGFy
YW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCB3YXMgYmVpbmcgZXhhbWluZWQKKyAqIEBw
YXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5jZSB2YXJpYWJsZSBpcwor
ICoJCQliZWluZyByZWFkCisgKiBAcGFyYW0gX2luZGV4CXRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0
byByZWFkCisgKiBAcGFyYW0gX3Jlc3VsdAlhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGluc3Rh
bmNlIHZhcmlhYmxlCisgKgkJCXZhbHVlCisgKiAKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICog
QHJldHZhbCBFTk9FTlQJbm8gc3VjaCBpbnN0YW5jZSB2YXJpYWJsZSBpcyBzdXBwb3J0ZWQgYnkg
QHAKKyAqCQkJX2RldiAKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRUFEX0lWQVIo
ZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX2luZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCAqX3Jlc3VsdCkKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVhZF9pdmFyKTsKKwly
ZXR1cm4gKChidXNfcmVhZF9pdmFyX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX2luZGV4LCBfcmVz
dWx0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19XUklU
RV9JVkFSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c193cml0ZV9p
dmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfV1JJ
VEVfSVZBUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3dyaXRlX2l2YXJfdChkZXZpY2Vf
dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludHB0cl90IF92YWx1ZSk7CisvKioKKyAqIEBicmllZiBXcml0ZSB0aGUgdmFs
dWUgb2YgYSBidXMtc3BlY2lmaWMgYXR0cmlidXRlIG9mIGEgZGV2aWNlCisgKiAKKyAqIFRoaXMg
bWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRvIEBwIF92YWx1
ZS4KKyAqIAorICogQHBhcmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgY2hpbGQgd2FzIGJlaW5n
IHVwZGF0ZWQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5j
ZSB2YXJpYWJsZSBpcworICoJCQliZWluZyB3cml0dGVuCisgKiBAcGFyYW0gX2luZGV4CXRoZSBp
bnN0YW5jZSB2YXJpYWJsZSB0byB3cml0ZQorICogQHBhcmFtIF92YWx1ZQl0aGUgdmFsdWUgdG8g
d3JpdGUgdG8gdGhhdCBpbnN0YW5jZSB2YXJpYWJsZQorICogCisgKiBAcmV0dmFsIDAJCXN1Y2Nl
c3MKKyAqIEByZXR2YWwgRU5PRU5UCW5vIHN1Y2ggaW5zdGFuY2UgdmFyaWFibGUgaXMgc3VwcG9y
dGVkIGJ5IEBwCisgKgkJCV9kZXYgCisgKiBAcmV0dmFsIEVJTlZBTAl0aGUgaW5zdGFuY2UgdmFy
aWFibGUgd2FzIHJlY29nbmlzZWQgYnV0CisgKgkJCWNvbnRhaW5zIGEgcmVhZC1vbmx5IHZhbHVl
CisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBCVVNfV1JJVEVfSVZBUihkZXZpY2VfdCBfZGV2
LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludHB0cl90IF92YWx1ZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfd3JpdGVfaXZhcik7CisJcmV0dXJuICgoYnVzX3dy
aXRlX2l2YXJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaW5keCwgX3ZhbHVlKTsKK30KKworLyoq
IEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19DSElMRF9ERUxFVEVEKCkgbWV0
aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9kZWxldGVkX2Rlc2M7
CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQ0hJTERfREVMRVRF
RCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19jaGlsZF9kZWxldGVkX3QoZGV2aWNlX3Qg
X2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0
IGEgY2hpbGQgd2FzIGRlbGV0ZWQKKyAqCisgKiBDYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBk
ZXZpY2VfZGVsZXRlX2NoaWxkKCkgdG8gYWxsb3cgdGhlIHBhcmVudAorICogdG8gdGVhcmRvd24g
YW55IGJ1cy1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2Rl
dgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBkZWxldGVkCisgKiBAcGFyYW0gX2No
aWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hpY2ggaXMgYmVpbmcgZGVsZXRlZAorICovCisKK3N0YXRp
YyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9ERUxFVEVEKGRldmljZV90IF9kZXYsIGRldmljZV90
IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2Rldikt
Pm9wcyxidXNfY2hpbGRfZGVsZXRlZCk7CisJKChidXNfY2hpbGRfZGVsZXRlZF90ICopIF9tKShf
ZGV2LCBfY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg
QlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IGJ1c19jaGlsZF9kZXRhY2hlZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVu
dGluZyB0aGUgQlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz
X2NoaWxkX2RldGFjaGVkX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgor
ICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEgY2hpbGQgd2FzIGRldGFjaGVkCisgKgorICog
Q2FsbGVkIGFmdGVyIHRoZSBjaGlsZCdzIERFVklDRV9ERVRBQ0goKSBtZXRob2QgdG8gYWxsb3cg
dGhlIHBhcmVudAorICogdG8gcmVjbGFpbSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBvbiBiZWhh
bGYgb2YgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBj
aGlsZCBjaGFuZ2VkIHN0YXRlCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hp
Y2ggY2hhbmdlZCBzdGF0ZQorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9E
RVRBQ0hFRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX2RldGFjaGVkKTsK
KwkoKGJ1c19jaGlsZF9kZXRhY2hlZF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0RSSVZFUl9BRERFRCgpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZHJpdmVyX2FkZGVkX2Rlc2M7Cisv
KiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfRFJJVkVSX0FEREVEKCkg
bWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVzX2RyaXZlcl9hZGRlZF90KGRldmljZV90IF9kZXYs
IGRyaXZlcl90ICpfZHJpdmVyKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEg
bmV3IGRyaXZlciB3YXMgYWRkZWQKKyAqIAorICogQ2FsbGVkIHdoZW4gYSBuZXcgZHJpdmVyIGlz
IGFkZGVkIHRvIHRoZSBkZXZjbGFzcyB3aGljaCBvd25zIHRoaXMKKyAqIGJ1cy4gVGhlIGdlbmVy
aWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcHJvYmUgYW5kCisg
KiBhdHRhY2ggYW55IHVuLW1hdGNoZWQgY2hpbGRyZW4gb2YgdGhlIGJ1cy4KKyAqIAorICogQHBh
cmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgZGV2Y2xhc3MgaGFkIGEgbmV3IGRyaXZlcgorICoJ
CQlhZGRlZCB0byBpdAorICogQHBhcmFtIF9kcml2ZXIJdGhlIG5ldyBkcml2ZXIgd2hpY2ggd2Fz
IGFkZGVkCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgQlVTX0RSSVZFUl9BRERFRChkZXZp
Y2VfdCBfZGV2LCBkcml2ZXJfdCAqX2RyaXZlcikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BM
T09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZHJpdmVyX2FkZGVkKTsKKwkoKGJ1c19kcml2
ZXJfYWRkZWRfdCAqKSBfbSkoX2RldiwgX2RyaXZlcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVl
IGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQUREX0NISUxEKCkgbWV0aG9kICovCitleHRlcm4gc3Ry
dWN0IGtvYmpvcF9kZXNjIGJ1c19hZGRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIEJVU19BRERfQ0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2
aWNlX3QgYnVzX2FkZF9jaGlsZF90KGRldmljZV90IF9kZXYsIHVfaW50IF9vcmRlciwgY29uc3Qg
Y2hhciAqX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3VuaXQp
OworLyoqCisgKiBAYnJpZWYgQ3JlYXRlIGEgbmV3IGNoaWxkIGRldmljZQorICoKKyAqIEZvciBi
dXNzZXMgd2hpY2ggdXNlIHVzZSBkcml2ZXJzIHN1cHBvcnRpbmcgREVWSUNFX0lERU5USUZZKCkg
dG8KKyAqIGVudW1lcmF0ZSB0aGVpciBkZXZpY2VzLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNy
ZWF0ZSBuZXcKKyAqIGRldmljZSBpbnN0YW5jZXMuIFRoZSBuZXcgZGV2aWNlIHdpbGwgYmUgYWRk
ZWQgYWZ0ZXIgdGhlIGxhc3QKKyAqIGV4aXN0aW5nIGNoaWxkIHdpdGggdGhlIHNhbWUgb3JkZXIu
IEltcGxlbWVudGF0aW9ucyBvZiBidXNfYWRkX2NoaWxkCisgKiBjYWxsIGRldmljZV9hZGRfY2hp
bGRfb3JkZXJlZCB0byBhZGQgdGhlIGNoaWxkIGFuZCBvZnRlbiBhZGQKKyAqIGEgc3VpdGFibGUg
aXZhciB0byB0aGUgZGV2aWNlIHNwZWNpZmljIHRvIHRoYXQgYnVzLgorICogCisgKiBAcGFyYW0g
X2RldgkJdGhlIGJ1cyBkZXZpY2Ugd2hpY2ggd2lsbCBiZSB0aGUgcGFyZW50IG9mIHRoZQorICoJ
CQluZXcgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX29yZGVyCWEgdmFsdWUgd2hpY2ggaXMgdXNl
ZCB0byBwYXJ0aWFsbHkgc29ydCB0aGUKKyAqCQkJY2hpbGRyZW4gb2YgQHAgX2RldiAtIGRldmlj
ZXMgY3JlYXRlZCB1c2luZworICoJCQlsb3dlciB2YWx1ZXMgb2YgQHAgX29yZGVyIGFwcGVhciBm
aXJzdCBpbiBAcAorICoJCQlfZGV2J3MgbGlzdCBvZiBjaGlsZHJlbgorICogQHBhcmFtIF9uYW1l
CQlkZXZjbGFzcyBuYW1lIGZvciBuZXcgZGV2aWNlIG9yIEBjIE5VTEwgaWYgbm90CisgKgkJCXNw
ZWNpZmllZAorICogQHBhcmFtIF91bml0CQl1bml0IG51bWJlciBmb3IgbmV3IGRldmljZSBvciBA
YyAtMSBpZiBub3QKKyAqCQkJc3BlY2lmaWVkCisgKi8KKworc3RhdGljIF9faW5saW5lIGRldmlj
ZV90IEJVU19BRERfQ0hJTEQoZGV2aWNlX3QgX2RldiwgdV9pbnQgX29yZGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25hbWUsIGludCBfdW5p
dCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi
dXNfYWRkX2NoaWxkKTsKKwlyZXR1cm4gKChidXNfYWRkX2NoaWxkX3QgKikgX20pKF9kZXYsIF9v
cmRlciwgX25hbWUsIF91bml0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19SRVNDQU4oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2Mg
YnVzX3Jlc2Nhbl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
QlVTX1JFU0NBTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc2Nhbl90KGRldmljZV90
IF9kZXYpOworLyoqCisgKiBAYnJpZWYgUmVzY2FuIHRoZSBidXMKKyAqCisgKiBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgYnkgYSBwYXJlbnQgYnJpZGdlIG9yIGRldmN0bCB0byB0cmlnZ2VyIGEgYnVz
CisgKiByZXNjYW4uICBUaGUgcmVzY2FuIHNob3VsZCBkZWxldGUgZGV2aWNlcyBubyBsb25nZXIg
cHJlc2VudCBhbmQKKyAqIGVudW1lcmF0ZSBkZXZpY2VzIHRoYXQgaGF2ZSBuZXdseSBhcnJpdmVk
LgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICovCisKK3N0YXRpYyBfX2lu
bGluZSBpbnQgQlVTX1JFU0NBTihkZXZpY2VfdCBfZGV2KQoreworCWtvYmpvcF90IF9tOworCUtP
QkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19yZXNjYW4pOworCXJldHVybiAoKGJ1
c19yZXNjYW5fdCAqKSBfbSkoX2Rldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg
a29iam9wX2Rlc2MgYnVzX2FsbG9jX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk
ZWYgc3RydWN0IHJlc291cmNlICogYnVzX2FsbG9jX3Jlc291cmNlX3QoZGV2aWNlX3QgX2Rldiwg
ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX3R5cGUsIGludCAqX3JpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX2VuZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQs
IHVfaW50IF9mbGFncyk7CisvKioKKyAqIEBicmllZiBBbGxvY2F0ZSBhIHN5c3RlbSByZXNvdXJj
ZQorICoKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBjaGlsZCBkZXZpY2VzIG9mIGEgYnVz
IHRvIGFsbG9jYXRlIHJlc291cmNlcy4KKyAqIFRoZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiA8bWFj
aGluZS9yZXNvdXJjZS5oPjsgdGhlIG1lYW5pbmcgb2YgdGhlCisgKiByZXNvdXJjZS1JRCBmaWVs
ZCB2YXJpZXMgZnJvbSBidXMgdG8gYnVzIChidXQgQHAgKnJpZCA9PSAwIGlzIGFsd2F5cworICog
dmFsaWQgaWYgdGhlIHJlc291cmNlIHR5cGUgaXMpLiBJZiBhIHJlc291cmNlIHdhcyBhbGxvY2F0
ZWQgYW5kIHRoZQorICogY2FsbGVyIGRpZCBub3QgdXNlIHRoZSBSRl9BQ1RJVkUgdG8gc3BlY2lm
eSB0aGF0IGl0IHNob3VsZCBiZQorICogYWN0aXZhdGVkIGltbWVkaWF0ZWx5LCB0aGUgY2FsbGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisgKiBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSB3
aGVuIGl0IGFjdHVhbGx5IHVzZXMgdGhlIHJlc291cmNlLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0
aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmlj
ZSB3aGljaCBpcyByZXF1ZXN0aW5nIGFuIGFsbG9jYXRpb24KKyAqIEBwYXJhbSBfdHlwZQkJdGhl
IHR5cGUgb2YgcmVzb3VyY2UgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbSBfcmlkCQlhIHBvaW50ZXIg
dG8gdGhlIHJlc291cmNlIGlkZW50aWZpZXIKKyAqIEBwYXJhbSBfc3RhcnQJaGludCBhdCB0aGUg
c3RhcnQgb2YgdGhlIHJlc291cmNlIHJhbmdlIC0gcGFzcworICoJCQlAYyAwIGZvciBhbnkgc3Rh
cnQgYWRkcmVzcworICogQHBhcmFtIF9lbmQJCWhpbnQgYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3Vy
Y2UgcmFuZ2UgLSBwYXNzCisgKgkJCUBjIH4wIGZvciBhbnkgZW5kIGFkZHJlc3MKKyAqIEBwYXJh
bSBfY291bnQJaGludCBhdCB0aGUgc2l6ZSBvZiByYW5nZSByZXF1aXJlZCAtIHBhc3MgQGMgMQor
ICoJCQlmb3IgYW55IHNpemUKKyAqIEBwYXJhbSBfZmxhZ3MJYW55IGV4dHJhIGZsYWdzIHRvIGNv
bnRyb2wgdGhlIHJlc291cmNlCisgKgkJCWFsbG9jYXRpb24gLSBzZWUgQGMgUkZfWFhYIGZsYWdz
IGluCisgKgkJCTxzeXMvcm1hbi5oPiBmb3IgZGV0YWlscworICogCisgKiBAcmV0dXJucwkJdGhl
IHJlc291cmNlIHdoaWNoIHdhcyBhbGxvY2F0ZWQgb3IgQGMgTlVMTCBpZiBubworICoJCQlyZXNv
dXJjZSBjb3VsZCBiZSBhbGxvY2F0ZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IHJl
c291cmNlICogQlVTX0FMTE9DX1JFU09VUkNFKGRldmljZV90IF9kZXYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90IF9jaGlsZCwg
aW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jlc190IF9lbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3Qg
X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1X2ludCBfZmxhZ3MpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i
al90KV9kZXYpLT5vcHMsYnVzX2FsbG9jX3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWxsb2Nf
cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3N0YXJ0LCBfZW5k
LCBfY291bnQsIF9mbGFncyk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgYnVzX2FjdGl2YXRlX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5
cGVkZWYgaW50IGJ1c19hY3RpdmF0ZV9yZXNvdXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90
IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9yaWQsIHN0cnVjdCByZXNvdXJjZSAqX3IpOworLyoqCisgKiBAYnJpZWYgQWN0aXZhdGUg
YSByZXNvdXJjZQorICoKKyAqIEFjdGl2YXRlIGEgcmVzb3VyY2UgcHJldmlvdXNseSBhbGxvY2F0
ZWQgd2l0aAorICogQlVTX0FMTE9DX1JFU09VUkNFKCkuICBUaGlzIG1heSBlbmFibGUgZGVjb2Rp
bmcgb2YgdGhpcyByZXNvdXJjZSBpbiBhCisgKiBkZXZpY2UgZm9yIGluc3RhbmNlLiAgSXQgd2ls
bCBhbHNvIGVzdGFibGlzaCBhIG1hcHBpbmcgZm9yIHRoZSByZXNvdXJjZQorICogdW5sZXNzIFJG
X1VOTUFQUEVEIHdhcyBzZXQgd2hlbiBhbGxvY2F0aW5nIHRoZSByZXNvdXJjZS4KKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2No
aWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90
eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBp
ZGVudGlmaWVyCisgKiBAcGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byBhY3RpdmF0ZQorICovCisK
K3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FDVElWQVRFX1JFU09VUkNFKGRldmljZV90IF9kZXYs
IGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfdHlwZSwgaW50IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpP
UExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSk7CisJcmV0
dXJuICgoYnVzX2FjdGl2YXRlX3Jlc291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUs
IF9yaWQsIF9yKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19NQVBfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz
X21hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0
aGUgQlVTX01BUF9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX21hcF9yZXNv
dXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlX21hcF9yZXF1ZXN0ICpfYXJncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFw
KTsKKy8qKgorICogQGJyaWVmIE1hcCBhIHJlc291cmNlCisgKgorICogQWxsb2NhdGUgYSBtYXBw
aW5nIGZvciBhIHJhbmdlIG9mIGFuIGFjdGl2ZSByZXNvdXJjZS4gIFRoZSBtYXBwaW5nCisgKiBp
cyBkZXNjcmliZWQgYnkgYSBzdHJ1Y3QgcmVzb3VyY2VfbWFwIG9iamVjdC4gIFRoaXMgbWF5IGZv
ciBpbnN0YW5jZQorICogbWFwIGEgbWVtb3J5IHJlZ2lvbiBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0
dWFsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNl
IG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRl
ZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAq
IEBwYXJhbSBfcgkJdGhlIHJlc291cmNlIHRvIG1hcAorICogQHBhcmFtIF9hcmdzCQlvcHRpb25h
bCBhdHRyaWJ1dGVzIG9mIHRoZSBtYXBwaW5nCisgKiBAcGFyYW0gX21hcAkJdGhlIG1hcHBpbmcK
KyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwX3JlcXVlc3QgKl9hcmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZV9tYXAgKl9tYXAp
Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVz
X21hcF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX21hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2
LCBfY2hpbGQsIF90eXBlLCBfciwgX2FyZ3MsIF9tYXApOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRl
cm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c191bm1hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9k
ICovCit0eXBlZGVmIGludCBidXNfdW5tYXBfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZp
Y2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFwKTsKKy8qKgorICogQGJyaWVmIFVubWFwIGEgcmVzb3Vy
Y2UKKyAqCisgKiBSZWxlYXNlIGEgbWFwcGluZyBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoCisg
KiBCVVNfTUFQX1JFU09VUkNFKCkuIFRoaXMgbWF5IGZvciBpbnN0YW5jZSB1bm1hcCBhIG1lbW9y
eSByZWdpb24KKyAqIGZyb20gdGhlIGtlcm5lbCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKyAq
CisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFy
YW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBh
cmFtIF90eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yCQl0aGUgcmVzb3Vy
Y2UKKyAqIEBwYXJhbSBfbWFwCQl0aGUgbWFwcGluZyB0byByZWxlYXNlCisgKi8KKworc3RhdGlj
IF9faW5saW5lIGludCBCVVNfVU5NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3Qg
X2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF90eXBl
LCBzdHJ1Y3QgcmVzb3VyY2UgKl9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJlc291cmNlX21hcCAqX21hcCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JK
T1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfdW5tYXBfcmVzb3VyY2UpOworCXJldHVy
biAoKGJ1c191bm1hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfciwg
X21hcCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVB
Q1RJVkFURV9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBi
dXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYg
aW50IGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yKTsKKy8qKgorICogQGJyaWVmIERlYWN0aXZhdGUg
YSByZXNvdXJjZQorICoKKyAqIERlYWN0aXZhdGUgYSByZXNvdXJjZSBwcmV2aW91c2x5IGFsbG9j
YXRlZCB3aXRoCisgKiBCVVNfQUxMT0NfUkVTT1VSQ0UoKS4gCisgKgorICogQHBhcmFtIF9kZXYJ
CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2
aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5
cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgor
ICogQHBhcmFtIF9yCQl0aGUgcmVzb3VyY2UgdG8gZGVhY3RpdmF0ZQorICovCisKK3N0YXRpYyBf
X2lubGluZSBpbnQgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX3R5cGUsIGludCBfcmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP
T0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlKTsKKwlyZXR1
cm4gKChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBl
LCBfcmlkLCBfcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBC
VVNfQURKVVNUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IGJ1c19hZGp1c3RfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1l
bnRpbmcgdGhlIEJVU19BREpVU1RfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1
c19hZGp1c3RfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBf
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug
Kl9yZXMsIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJtYW5fcmVzX3QgX2VuZCk7CisvKioKKyAqIEBicmllZiBBZGp1c3QgYSByZXNvdXJjZQor
ICoKKyAqIEFkanVzdCB0aGUgc3RhcnQgYW5kL29yIGVuZCBvZiBhIHJlc291cmNlIGFsbG9jYXRl
ZCBieQorICogQlVTX0FMTE9DX1JFU09VUkNFLiAgQXQgbGVhc3QgcGFydCBvZiB0aGUgbmV3IGFk
ZHJlc3MgcmFuZ2UgbXVzdCBvdmVybGFwCisgKiB3aXRoIHRoZSBleGlzdGluZyBhZGRyZXNzIHJh
bmdlLiAgSWYgdGhlIHN1Y2Nlc3NmdWwsIHRoZSByZXNvdXJjZSdzIHJhbmdlCisgKiB3aWxsIGJl
IGFkanVzdGVkIHRvIFtzdGFydCwgZW5kXSBvbiByZXR1cm4uCisgKgorICogQHBhcmFtIF9kZXYJ
CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2
aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5
cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmVzCQl0aGUgcmVzb3VyY2UgdG8gYWRqdXN0Cisg
KiBAcGFyYW0gX3N0YXJ0CXRoZSBuZXcgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgcmVzb3VyY2Ug
cmFuZ2UKKyAqIEBwYXJhbSBfZW5kCQl0aGUgbmV3IGVuZGluZyBhZGRyZXNzIG9mIHRoZSByZXNv
dXJjZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FESlVTVF9SRVNPVVJD
RShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF90eXBlLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsIHJt
YW5fcmVzX3QgX2VuZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp
X2RldiktPm9wcyxidXNfYWRqdXN0X3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWRqdXN0X3Jl
c291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUsIF9yZXMsIF9zdGFydCwgX2VuZCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVMRUFTRV9S
RVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfcmVsZWFz
ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
QlVTX1JFTEVBU0VfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWxlYXNl
X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBzdHJ1Y3QgcmVzb3Vy
Y2UgKl9yZXMpOworLyoqCisgKiBAYnJpZWYgUmVsZWFzZSBhIHJlc291cmNlCisgKgorICogRnJl
ZSBhIHJlc291cmNlIGFsbG9jYXRlZCBieSB0aGUgQlVTX0FMTE9DX1JFU09VUkNFLiAgVGhlIEBw
IF9yaWQKKyAqIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCBieSBC
VVNfQUxMT0NfUkVTT1VSQ0UoKQorICogKHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyB0aGUgb25lIHRoZSBjbGllbnQgcGFzc2VkKS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl
IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug
d2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90eXBlCQl0aGUgdHlwZSBv
ZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBpZGVudGlmaWVyCisgKiBA
cGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byByZWxlYXNlCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBCVVNfUkVMRUFTRV9SRVNPVVJDRShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfdHlwZSwgaW50
IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy
ZXNvdXJjZSAqX3JlcykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp
X2RldiktPm9wcyxidXNfcmVsZWFzZV9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX3JlbGVhc2Vf
cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3Jlcyk7Cit9CisK
Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfU0VUVVBfSU5UUigpIG1l
dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0dXBfaW50cl9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1NFVFVQX0lOVFIoKSBt
ZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19zZXR1cF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2
aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3Vy
Y2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZl
cl9maWx0ZXJfdCAqX2ZpbHRlciwgZHJpdmVyX2ludHJfdCAqX2ludHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKl9hcmcsIHZvaWQgKipfY29va2llcCk7CisvKioKKyAqIEBi
cmllZiBJbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBhc3NvY2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gd2l0aAorICog
YW4gaXJxIHJlc291cmNlLiBXaGVuIHRoZSBpbnRlcnJ1cHQgdHJpZ2dlcnMsIHRoZSBmdW5jdGlv
biBAcCBfaW50cgorICogd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgQHAgX2FyZyBh
cyBpdHMgc2luZ2xlCisgKiBhcmd1bWVudC4gVGhlIHZhbHVlIHJldHVybmVkIGluIEBwICpfY29v
a2llcCBpcyB1c2VkIHRvIGNhbmNlbCB0aGUKKyAqIGludGVycnVwdCBoYW5kbGVyIC0gdGhlIGNh
bGxlciBzaG91bGQgc2F2ZSB0aGlzIHZhbHVlIHRvIHVzZSBpbiBhCisgKiBmdXR1cmUgY2FsbCB0
byBCVVNfVEVBUkRPV05fSU5UUigpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBk
ZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxs
b2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNl
bnRpbmcgdGhlIGludGVycnVwdAorICogQHBhcmFtIF9mbGFncwlhIHNldCBvZiBiaXRzIGZyb20g
ZW51bSBpbnRyX3R5cGUgc3BlY2lmeWluZworICoJCQl0aGUgY2xhc3Mgb2YgaW50ZXJydXB0Cisg
KiBAcGFyYW0gX2ludHIJCXRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGludGVycnVwdAor
ICoJCQl0cmlnZ2VycworICogQHBhcmFtIF9hcmcJCWEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzaW5n
bGUgYXJndW1lbnQgaW4gY2FsbHMKKyAqCQkJdG8gQHAgX2ludHIKKyAqIEBwYXJhbSBfY29va2ll
cAlhIHBvaW50ZXIgdG8gYSBsb2NhdGlvbiB0byByZWNlaXZlIGEgY29va2llCisgKgkJCXZhbHVl
IHRoYXQgbWF5IGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSBpbnRlcnJ1cHQKKyAqCQkJaGFuZGxlcgor
ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVFVQX0lOVFIoZGV2aWNlX3QgX2Rldiwg
ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmVzb3VyY2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRyaXZlcl9maWx0ZXJfdCAqX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJpdmVyX2ludHJfdCAqX2ludHIsIHZvaWQgKl9hcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfY29va2llcCkKK3sKKwlrb2Jqb3Bf
dCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc2V0dXBfaW50cik7
CisJcmV0dXJuICgoYnVzX3NldHVwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxLCBf
ZmxhZ3MsIF9maWx0ZXIsIF9pbnRyLCBfYXJnLCBfY29va2llcCk7Cit9CisKKy8qKiBAYnJpZWYg
VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfVEVBUkRPV05fSU5UUigpIG1ldGhvZCAqLwor
ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfdGVhcmRvd25faW50cl9kZXNjOworLyoqIEBi
cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1RFQVJET1dOX0lOVFIoKSBtZXRo
b2QgKi8KK3R5cGVkZWYgaW50IGJ1c190ZWFyZG93bl9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2
aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVz
b3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUpOworLyoqCisgKiBAYnJpZWYgVW5pbnN0YWxsIGFu
IGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkaXNhc3Nv
Y2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqIHdpdGggYW4gaXJxIHJlc291
cmNlLiBUaGUgdmFsdWUgb2YgQHAgX2Nvb2tpZSBtdXN0IGJlIHRoZSB2YWx1ZQorICogcmV0dXJu
ZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gQlVTX1NFVFVQX0lOVFIoKS4KKyAqIAorICogQHBh
cmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGls
ZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJx
CQl0aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY29v
a2llCXRoZSBjb29raWUgdmFsdWUgcmV0dXJuZWQgd2hlbiB0aGUgaW50ZXJydXB0CisgKgkJCXdh
cyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19U
RUFSRE9XTl9JTlRSKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCB2b2lkICpf
Y29va2llKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+
b3BzLGJ1c190ZWFyZG93bl9pbnRyKTsKKwlyZXR1cm4gKChidXNfdGVhcmRvd25faW50cl90ICop
IF9tKShfZGV2LCBfY2hpbGQsIF9pcnEsIF9jb29raWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1NFVF9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJu
IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0X3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEg
ZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU0VUX1JFU09VUkNFKCkgbWV0aG9kICovCit0
eXBlZGVmIGludCBidXNfc2V0X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQs
IHJtYW5fcmVzX3QgX3N0YXJ0LCBybWFuX3Jlc190IF9jb3VudCk7CisvKioKKyAqIEBicmllZiBE
ZWZpbmUgYSByZXNvdXJjZSB3aGljaCBjYW4gYmUgYWxsb2NhdGVkIHdpdGgKKyAqIEJVU19BTExP
Q19SRVNPVVJDRSgpLgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgc29tZSBidXNzZXMg
KHR5cGljYWxseSBJU0EpIHRvIGFsbG93IGEKKyAqIGRyaXZlciB0byBkZXNjcmliZSBhIHJlc291
cmNlIHJhbmdlIHRoYXQgaXQgd291bGQgbGlrZSB0bworICogYWxsb2NhdGUuIFRoZSByZXNvdXJj
ZSBkZWZpbmVkIGJ5IEBwIF90eXBlIGFuZCBAcCBfcmlkIGlzIGRlZmluZWQKKyAqIHRvIHN0YXJ0
IGF0IEBwIF9zdGFydCBhbmQgdG8gaW5jbHVkZSBAcCBfY291bnQgaW5kaWNlcyBpbiBpdHMKKyAq
IHJhbmdlLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2No
aWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UK
KyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0
aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgc3RhcnQgb2YgdGhl
IHJlc291cmNlIHJhbmdlCisgKiBAcGFyYW0gX2NvdW50CXRoZSBzaXplIG9mIHRoZSByZXNvdXJj
ZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVF9SRVNPVVJDRShkZXZp
Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQpCit7CisJa29i
am9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3NldF9yZXNv
dXJjZSk7CisJcmV0dXJuICgoYnVzX3NldF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQs
IF90eXBlLCBfcmlkLCBfc3RhcnQsIF9jb3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRl
c2NyaXB0b3IgZm9yIHRoZSBCVVNfR0VUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3Ry
dWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk
ZWYgaW50IGJ1c19nZXRfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs
IGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1h
bl9yZXNfdCAqX3N0YXJ0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jl
c190ICpfY291bnRwKTsKKy8qKgorICogQGJyaWVmIERlc2NyaWJlIGEgcmVzb3VyY2UKKyAqCisg
KiBUaGlzIG1ldGhvZCBhbGxvd3MgYSBkcml2ZXIgdG8gZXhhbWluZSB0aGUgcmFuZ2UgdXNlZCBm
b3IgYSBnaXZlbgorICogcmVzb3VyY2Ugd2l0aG91dCBhY3R1YWxseSBhbGxvY2F0aW5nIGl0Lgor
ICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBA
cGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UKKyAqIEBwYXJh
bSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3Vy
Y2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9u
IHRvIHJlY2VpdmUgdGhlIHN0YXJ0CisgKgkJCWluZGV4IG9mIHRoZSByZXNvdXJjZSByYW5nZQor
ICogQHBhcmFtIF9jb3VudAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhl
IHNpemUKKyAqCQkJb2YgdGhlIHJlc291cmNlIHJhbmdlCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBCVVNfR0VUX1JFU09VUkNFKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50
IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBy
bWFuX3Jlc190ICpfc3RhcnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJtYW5fcmVzX3QgKl9jb3VudHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo
a29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX2dldF9y
ZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfcmlkLCBfc3RhcnRwLCBfY291
bnRwKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ERUxF
VEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX2Rl
bGV0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0
aGUgQlVTX0RFTEVURV9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19kZWxl
dGVfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQpOworLyoqCisgKiBA
YnJpZWYgRGVsZXRlIGEgcmVzb3VyY2UuCisgKiAKKyAqIFVzZSB0aGlzIHRvIGRlbGV0ZSBhIHJl
c291cmNlIChwb3NzaWJseSBvbmUgcHJldmlvdXNseSBhZGRlZCB3aXRoCisgKiBCVVNfU0VUX1JF
U09VUkNFKCkpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg
X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3Vy
Y2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlk
CQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJV
U19ERUxFVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3R5cGUsIGludCBfcmlkKQor
eworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19k
ZWxldGVfcmVzb3VyY2UpOworCSgoYnVzX2RlbGV0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBf
Y2hpbGQsIF90eXBlLCBfcmlkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBr
b2Jqb3BfZGVzYyBidXNfZ2V0X3Jlc291cmNlX2xpc3RfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLwor
dHlwZWRlZiBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqIGJ1c19nZXRfcmVzb3VyY2VfbGlzdF90KGRl
dmljZV90IF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFJldHVybiBhIHN0
cnVjdCByZXNvdXJjZV9saXN0LgorICoKKyAqIFVzZWQgYnkgZHJpdmVycyB3aGljaCB1c2UgYnVz
X2dlbmVyaWNfcmxfYWxsb2NfcmVzb3VyY2UoKSBldGMuIHRvCisgKiBpbXBsZW1lbnQgdGhlaXIg
cmVzb3VyY2UgaGFuZGxpbmcuIEl0IHNob3VsZCByZXR1cm4gdGhlIHJlc291cmNlCisgKiBsaXN0
IG9mIHRoZSBnaXZlbiBjaGlsZCBkZXZpY2UuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFy
ZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGlj
aCBvd25zIHRoZSByZXNvdXJjZSBsaXN0CisgKi8KKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBy
ZXNvdXJjZV9saXN0ICogQlVTX0dFVF9SRVNPVVJDRV9MSVNUKGRldmljZV90IF9kZXYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpf
dClfZGV2KS0+b3BzLGJ1c19nZXRfcmVzb3VyY2VfbGlzdCk7CisJcmV0dXJuICgoYnVzX2dldF9y
ZXNvdXJjZV9saXN0X3QgKikgX20pKF9kZXYsIF9jaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5p
cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQ0hJTERfUFJFU0VOVCgpIG1ldGhvZCAqLworZXh0
ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfY2hpbGRfcHJlc2VudF9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NISUxEX1BSRVNFTlQoKSBtZXRob2Qg
Ki8KK3R5cGVkZWYgaW50IGJ1c19jaGlsZF9wcmVzZW50X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIElzIHRoZSBoYXJkd2FyZSBkZXNjcmliZWQgYnkg
QHAgX2NoaWxkIHN0aWxsIGF0dGFjaGVkIHRvIHRoZQorICogc3lzdGVtPworICoKKyAqIFRoaXMg
bWV0aG9kIHNob3VsZCByZXR1cm4gMCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LiAgSXQK
KyAqIHNob3VsZCByZXR1cm4gLTEgaWYgaXQgaXMgcHJlc2VudC4gIEFueSBlcnJvcnMgaW4gZGV0
ZXJtaW5pbmcKKyAqIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhIG5vcm1hbCBlcnJubyB2YWx1ZS4g
IENsaWVudCBkcml2ZXJzIGFyZSB0bworICogYXNzdW1lIHRoYXQgdGhlIGRldmljZSBpcyBwcmVz
ZW50LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgKiBkZXRlcm1pbmluZyBpZiBpdCBpcyB0
aGVyZS4gIEJ1c3NlcyBhcmUgdG8gdHJ5IHRvIGF2b2lkIHJldHVybmluZworICogZXJyb3JzLCBi
dXQgbmV3Y2FyZCB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZGV2aWNlIGZhaWxzIHRvCisg
KiBpbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50
IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGljaCBp
cyBiZWluZyBleGFtaW5lZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NISUxEX1BS
RVNFTlQoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19jaGlsZF9wcmVzZW50KTsKKwly
ZXR1cm4gKChidXNfY2hpbGRfcHJlc2VudF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisv
KiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0NISUxEX1BOUElORk9fU1RS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9wbnBpbmZv
X3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NI
SUxEX1BOUElORk9fU1RSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfY2hpbGRfcG5waW5m
b19zdHJfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGNoYXIgKl9idWYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX2J1Zmxlbik7CisvKioKKyAq
IEBicmllZiBSZXR1cm5zIHRoZSBwbnAgaW5mbyBmb3IgdGhpcyBkZXZpY2UuCisgKgorICogUmV0
dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3JhZ2UgaXMgaW5zdWZmaWNpZW50IGZvciB0
aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJGTE9XLgorICoKKyAqIFRoZSBzdHJpbmcg
bXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICogbmFtZT12
YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3Rl
cnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlwaGVucyAoJy0nKS4gIFZhbHVlcyBjYW4g
Y29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBWYWx1ZXMgY29udGFp
bmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVkIHdpdGggZG91YmxlIHF1b3RlcyAoJyIn
KS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIGluCisgKiBxdW90ZWQgdmFsdWVzIGNh
biBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdcJykuCisgKiAKKyAqIEBwYXJhbSBfZGV2
CQl0aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRl
dmljZSB3aGljaCBpcyBiZWluZyBleGFtaW5lZAorICogQHBhcmFtIF9idWYJCXRoZSBhZGRyZXNz
IG9mIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBucAorICoJCQlzdHJpbmcKKyAqIEBwYXJhbSBf
YnVmbGVuCXRoZSBzaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBfYnVmCisgKi8K
Kworc3RhdGljIF9faW5saW5lIGludCBCVVNfQ0hJTERfUE5QSU5GT19TVFIoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9idWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09C
Sk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX3BucGluZm9fc3RyKTsKKwly
ZXR1cm4gKChidXNfY2hpbGRfcG5waW5mb19zdHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfYnVm
LCBfYnVmbGVuKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19DSElMRF9MT0NBVElPTl9TVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGlt
cGxlbWVudGluZyB0aGUgQlVTX0NISUxEX0xPQ0FUSU9OX1NUUigpIG1ldGhvZCAqLwordHlwZWRl
ZiBpbnQgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9j
aGlsZCwgY2hhciAqX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX2J1Zmxlbik7CisvKioKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBmb3Ig
dGhpcyBkZXZpY2UuCisgKgorICogUmV0dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3Jh
Z2UgaXMgaW5zdWZmaWNpZW50IGZvciB0aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJG
TE9XLgorICoKKyAqIFRoZSBzdHJpbmcgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBh
cmF0ZWQgbGlzdCBvZgorICogbmFtZT12YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRh
aW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlw
aGVucyAoJy0nKS4gIFZhbHVlcyBjYW4gY29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcnMuICBWYWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVk
IHdpdGggZG91YmxlIHF1b3RlcyAoJyInKS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVz
IGluCisgKiBxdW90ZWQgdmFsdWVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdc
JykuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAor
ICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGlzIGJlaW5nIGV4YW1pbmVkCisgKiBA
cGFyYW0gX2J1ZgkJdGhlIGFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbG9jYXRp
b24KKyAqCQkJc3RyaW5nCisgKiBAcGFyYW0gX2J1Zmxlbgl0aGUgc2l6ZSBvZiB0aGUgYnVmZmVy
IHBvaW50ZWQgdG8gYnkgQHAgX2J1ZgorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NI
SUxEX0xPQ0FUSU9OX1NUUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9i
dWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5v
cHMsYnVzX2NoaWxkX2xvY2F0aW9uX3N0cik7CisJcmV0dXJuICgoYnVzX2NoaWxkX2xvY2F0aW9u
X3N0cl90ICopIF9tKShfZGV2LCBfY2hpbGQsIF9idWYsIF9idWZsZW4pOworfQorCisvKiogQGJy
aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0JJTkRfSU5UUigpIG1ldGhvZCAqLwor
ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfYmluZF9pbnRyX2Rlc2M7CisvKiogQGJyaWVm
IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQklORF9JTlRSKCkgbWV0aG9kICovCit0
eXBlZGVmIGludCBidXNfYmluZF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX2lycSwgaW50
IF9jcHUpOworLyoqCisgKiBAYnJpZWYgQWxsb3cgZHJpdmVycyB0byByZXF1ZXN0IHRoYXQgYW4g
aW50ZXJydXB0IGJlIGJvdW5kIHRvIGEgc3BlY2lmaWMKKyAqIENQVS4KKyAqIAorICogQHBhcmFt
IF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0
aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJxCQl0
aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY3B1CQl0
aGUgQ1BVIHRvIGJpbmQgdGhlIGludGVycnVwdCB0bworICovCisKK3N0YXRpYyBfX2lubGluZSBp
bnQgQlVTX0JJTkRfSU5UUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCBpbnQgX2Nw
dSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi
dXNfYmluZF9pbnRyKTsKKwlyZXR1cm4gKChidXNfYmluZF9pbnRyX3QgKikgX20pKF9kZXYsIF9j
aGlsZCwgX2lycSwgX2NwdSk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgYnVzX2NvbmZpZ19pbnRyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19jb25m
aWdfaW50cl90KGRldmljZV90IF9kZXYsIGludCBfaXJxLCBlbnVtIGludHJfdHJpZ2dlciBfdHJp
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaW50cl9wb2xhcml0eSBfcG9s
KTsKKy8qKgorICogQGJyaWVmIEFsbG93IChidXMpIGRyaXZlcnMgdG8gc3BlY2lmeSB0aGUgdHJp
Z2dlciBtb2RlIGFuZCBwb2xhcml0eQorICogb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisg
KiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9pcnEJCXRoZSBp
bnRlcnJ1cHQgbnVtYmVyIHRvIG1vZGlmeQorICogQHBhcmFtIF90cmlnCQl0aGUgdHJpZ2dlciBt
b2RlIHJlcXVpcmVkCisgKiBAcGFyYW0gX3BvbAkJdGhlIGludGVycnVwdCBwb2xhcml0eSByZXF1
aXJlZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NPTkZJR19JTlRSKGRldmljZV90
IF9kZXYsIGludCBfaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51
bSBpbnRyX3RyaWdnZXIgX3RyaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtIGludHJfcG9sYXJpdHkgX3BvbCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfY29uZmlnX2ludHIpOworCXJldHVybiAoKGJ1c19j
b25maWdfaW50cl90ICopIF9tKShfZGV2LCBfaXJxLCBfdHJpZywgX3BvbCk7Cit9CisKKy8qKiBA
YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVTQ1JJQkVfSU5UUigpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZGVzY3JpYmVfaW50cl9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0RFU0NSSUJFX0lOVFIo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19kZXNjcmliZV9pbnRyX3QoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcik7CisvKioKKyAqIEBicmllZiBBbGxvdyBkcml2
ZXJzIHRvIGFzc29jaWF0ZSBhIGRlc2NyaXB0aW9uIHdpdGggYW4gYWN0aXZlCisgKiBpbnRlcnJ1
cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg
X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSBy
ZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIGlu
dGVycnVwdAorICogQHBhcmFtIF9jb29raWUJdGhlIGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB3aGVu
IHRoZSBpbnRlcnJ1cHQKKyAqCQkJd2FzIG9yaWdpbmFsbHkgcmVnaXN0ZXJlZAorICogQHBhcmFt
IF9kZXNjcgl0aGUgZGVzY3JpcHRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGludGVycnVwdAor
ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0RFU0NSSUJFX0lOVFIoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcikKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZGVzY3JpYmVfaW50cik7
CisJcmV0dXJuICgoYnVzX2Rlc2NyaWJlX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJx
LCBfY29va2llLCBfZGVzY3IpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZv
ciB0aGUgQlVTX0hJTlRFRF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3Bf
ZGVzYyBidXNfaGludGVkX2NoaWxkX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt
ZW50aW5nIHRoZSBCVVNfSElOVEVEX0NISUxEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz
X2hpbnRlZF9jaGlsZF90KGRldmljZV90IF9kZXYsIGNvbnN0IGNoYXIgKl9kbmFtZSwgaW50IF9k
dW5pdCk7CisvKioKKyAqIEBicmllZiBOb3RpZnkgYSAoYnVzKSBkcml2ZXIgYWJvdXQgYSBjaGls
ZCB0aGF0IHRoZSBoaW50cyBtZWNoYW5pc20KKyAqIGJlbGlldmVzIGl0IGhhcyBkaXNjb3ZlcmVk
LgorICoKKyAqIFRoZSBidXMgaXMgcmVzcG9uc2libGUgZm9yIHRoZW4gYWRkaW5nIHRoZSBjaGls
ZCBpbiB0aGUgcmlnaHQgb3JkZXIKKyAqIGFuZCBkaXNjb3ZlcmluZyBvdGhlciB0aGluZ3MgYWJv
dXQgdGhlIGNoaWxkLiAgVGhlIGJ1cyBkcml2ZXIgaXMKKyAqIGZyZWUgdG8gaWdub3JlIHRoaXMg
aGludCwgdG8gZG8gc3BlY2lhbCB0aGluZ3MsIGV0Yy4gIEl0IGlzIGFsbCB1cAorICogdG8gdGhl
IGJ1cyBkcml2ZXIgdG8gaW50ZXJwcmV0LgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2Fs
bGVkIGluIHJlc3BvbnNlIHRvIHRoZSBwYXJlbnQgYnVzIGFza2luZyBmb3IKKyAqIGhpbnRlZCBk
ZXZpY2VzIHRvIGJlIGVudW1lcmF0ZWQuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBidXMgZGV2
aWNlCisgKiBAcGFyYW0gX2RuYW1lCXRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugdy9vIHVuaXQgbnVt
YmVycworICogQHBhcmFtIF9kdW5pdAl0aGUgdW5pdCBudW1iZXIgb2YgdGhlIGRldmljZQorICov
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19ISU5URURfQ0hJTEQoZGV2aWNlX3QgX2Rldiwg
Y29uc3QgY2hhciAqX2RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX2R1bml0KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClf
ZGV2KS0+b3BzLGJ1c19oaW50ZWRfY2hpbGQpOworCSgoYnVzX2hpbnRlZF9jaGlsZF90ICopIF9t
KShfZGV2LCBfZG5hbWUsIF9kdW5pdCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgYnVzX2dldF9kbWFfdGFnX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1w
bGVtZW50aW5nIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK3R5cGVkZWYgYnVzX2Rt
YV90YWdfdCBidXNfZ2V0X2RtYV90YWdfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQp
OworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfZG1hX3RhZ190IGZvciB1c2Ugdy8gZGV2aWNl
cyBvbiB0aGUgYnVzLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA
cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byB3aGljaCB0aGUgdGFnIHdp
bGwgYmVsb25nCisgKi8KKworc3RhdGljIF9faW5saW5lIGJ1c19kbWFfdGFnX3QgQlVTX0dFVF9E
TUFfVEFHKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsK
KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZ2V0X2RtYV90YWcpOworCXJl
dHVybiAoKGJ1c19nZXRfZG1hX3RhZ190ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0aG9k
ICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfYnVzX3RhZ19kZXNjOworLyoq
IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0
aG9kICovCit0eXBlZGVmIGJ1c19zcGFjZV90YWdfdCBidXNfZ2V0X2J1c190YWdfdChkZXZpY2Vf
dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfc3Bh
Y2VfdGFnX3QgZm9yIHVzZSB3LyBkZXZpY2VzIG9uIHRoZSBidXMuCisgKgorICogQHBhcmFtIF9k
ZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUg
ZGV2aWNlIHRvIHdoaWNoIHRoZSB0YWcgd2lsbCBiZWxvbmcKKyAqLworCitzdGF0aWMgX19pbmxp
bmUgYnVzX3NwYWNlX3RhZ190IEJVU19HRVRfQlVTX1RBRyhkZXZpY2VfdCBfZGV2LCBkZXZpY2Vf
dCBfY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp
LT5vcHMsYnVzX2dldF9idXNfdGFnKTsKKwlyZXR1cm4gKChidXNfZ2V0X2J1c190YWdfdCAqKSBf
bSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig
dGhlIEJVU19ISU5UX0RFVklDRV9VTklUKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpv
cF9kZXNjIGJ1c19oaW50X2RldmljZV91bml0X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24g
aW1wbGVtZW50aW5nIHRoZSBCVVNfSElOVF9ERVZJQ0VfVU5JVCgpIG1ldGhvZCAqLwordHlwZWRl
ZiB2b2lkIGJ1c19oaW50X2RldmljZV91bml0X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25h
bWUsIGludCAqX3VuaXRwKTsKKy8qKgorICogQGJyaWVmIEFsbG93IHRoZSBidXMgdG8gZGV0ZXJt
aW5lIHRoZSB1bml0IG51bWJlciBvZiBhIGRldmljZS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl
IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug
d2hvc2UgdW5pdCBpcyB0byBiZSB3aXJlZAorICogQHBhcmFtIF9uYW1lCQl0aGUgbmFtZSBvZiB0
aGUgZGV2aWNlJ3MgbmV3IGRldmNsYXNzCisgKiBAcGFyYW0gX3VuaXRwCWEgcG9pbnRlciB0byB0
aGUgZGV2aWNlJ3MgbmV3IHVuaXQgdmFsdWUKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC
VVNfSElOVF9ERVZJQ0VfVU5JVChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfbmFtZSwg
aW50ICpfdW5pdHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9k
ZXYpLT5vcHMsYnVzX2hpbnRfZGV2aWNlX3VuaXQpOworCSgoYnVzX2hpbnRfZGV2aWNlX3VuaXRf
dCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfbmFtZSwgX3VuaXRwKTsKK30KKworLyoqIEBicmllZiBV
bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLworZXh0ZXJu
IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfbmV3X3Bhc3NfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLwordHlwZWRlZiB2
b2lkIGJ1c19uZXdfcGFzc190KGRldmljZV90IF9kZXYpOworLyoqCisgKiBAYnJpZWYgTm90aWZ5
IGEgYnVzIHRoYXQgdGhlIGJ1cyBwYXNzIGxldmVsIGhhcyBiZWVuIGNoYW5nZWQKKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIGJ1cyBkZXZpY2UKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC
VVNfTkVXX1BBU1MoZGV2aWNlX3QgX2RldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfbmV3X3Bhc3MpOworCSgoYnVzX25ld19wYXNzX3Qg
KikgX20pKF9kZXYpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg
QlVTX1JFTUFQX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz
X3JlbWFwX2ludHJfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IEJVU19SRU1BUF9JTlRSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfcmVtYXBfaW50cl90
KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSk7CisvKioKKyAqIEBi
cmllZiBOb3RpZnkgYSBidXMgdGhhdCBzcGVjaWZpZWQgY2hpbGQncyBJUlEgc2hvdWxkIGJlIHJl
bWFwcGVkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9j
aGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2lycQkJdGhlIGlycSBudW1iZXIKKyAq
LworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRU1BUF9JTlRSKGRldmljZV90IF9kZXYsIGRl
dmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVtYXBfaW50cik7CisJcmV0dXJuICgoYnVzX3Jl
bWFwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxKTsKK30KKworLyoqIEBicmllZiBV
bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19TVVNQRU5EX0NISUxEKCkgbWV0aG9kICovCitl
eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19zdXNwZW5kX2NoaWxkX2Rlc2M7CisvKiogQGJy
aWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU1VTUEVORF9DSElMRCgpIG1ldGhv
ZCAqLwordHlwZWRlZiBpbnQgYnVzX3N1c3BlbmRfY2hpbGRfdChkZXZpY2VfdCBfZGV2LCBkZXZp
Y2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgU3VzcGVuZCBhIGdpdmVuIGNoaWxkCisgKgor
ICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFt
IF9jaGlsZAl0aGUgZGV2aWNlIHRvIHN1c3BlbmQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50
IEJVU19TVVNQRU5EX0NISUxEKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc3VzcGVu
ZF9jaGlsZCk7CisJcmV0dXJuICgoYnVzX3N1c3BlbmRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No
aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19SRVNV
TUVfQ0hJTEQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX3Jlc3Vt
ZV9jaGlsZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVT
X1JFU1VNRV9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc3VtZV9jaGlsZF90
KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCk7CisvKioKKyAqIEBicmllZiBSZXN1bWUg
YSBnaXZlbiBjaGlsZAorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA
cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byByZXN1bWUKKyAqLworCitz
dGF0aWMgX19pbmxpbmUgaW50IEJVU19SRVNVTUVfQ0hJTEQoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2
KS0+b3BzLGJ1c19yZXN1bWVfY2hpbGQpOworCXJldHVybiAoKGJ1c19yZXN1bWVfY2hpbGRfdCAq
KSBfbSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19HRVRfRE9NQUlOKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k
ZXNjIGJ1c19nZXRfZG9tYWluX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfR0VUX0RPTUFJTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX2dldF9k
b21haW5fdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCAqX2RvbWFpbik7Cisv
KioKKyAqIEBicmllZiBHZXQgdGhlIFZNIGRvbWFpbiBoYW5kbGUgZm9yIHRoZSBnaXZlbiBidXMg
YW5kIGNoaWxkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFt
IF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2RvbWFpbglhIHBvaW50ZXIgdG8g
dGhlIGJ1cydzIGRvbWFpbiBoYW5kbGUgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGlu
ZSBpbnQgQlVTX0dFVF9ET01BSU4oZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQg
Kl9kb21haW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp
LT5vcHMsYnVzX2dldF9kb21haW4pOworCXJldHVybiAoKGJ1c19nZXRfZG9tYWluX3QgKikgX20p
KF9kZXYsIF9jaGlsZCwgX2RvbWFpbik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9w
X2Rlc2MgYnVzX2dldF9jcHVzX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19nZXRfY3B1
c190KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgZW51bSBjcHVfc2V0cyBfb3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX3NldHNpemUsIGNwdXNldF90ICpfY3B1
c2V0KTsKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgYSBzZXQgb2YgQ1BVcworICoKKyAqIEBwYXJh
bSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNl
CisgKiBAcGFyYW0gX29wCQl0eXBlIG9mIENQVXMgdG8gcmVxdWVzdAorICogQHBhcmFtIF9zZXRz
aXplCXRoZSBzaXplIG9mIHRoZSBzZXQgcGFzc2VkIGluIF9jcHVzZXQKKyAqIEBwYXJhbSBfY3B1
c2V0CWEgcG9pbnRlciB0byBhIGNwdXNldCB0byByZWNlaXZlIHRoZSByZXF1ZXN0ZWQKKyAqCQkJ
c2V0IG9mIENQVXMKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19HRVRfQ1BVUyhkZXZp
Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnVtIGNwdV9zZXRzIF9vcCwgc2l6ZV90IF9zZXRzaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3B1c2V0X3QgKl9jcHVzZXQpCit7CisJa29iam9wX3QgX207CisJ
S09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9jcHVzKTsKKwlyZXR1cm4g
KChidXNfZ2V0X2NwdXNfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfb3AsIF9zZXRzaXplLCBfY3B1
c2V0KTsKK30KKworI2VuZGlmIC8qIF9idXNfaWZfaF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9kZXZpY2VfaWYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvZGV2aWNlX2lmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL2RldmljZV9pZi5o
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvZGV2aWNlX2lmLmgJMjAxNi0xMS0yMyAxNzowNTozMy44MTMwNTYwMDAgKzAw
MDAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21h
dGljYWxseS4KKyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoK
KyAqIENyZWF0ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9kZXZp
Y2VfaWYubQorICogd2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291
cmNlIGZpbGUgZm9yIGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAg
REVWSUNFIGRldmljZSAtIEtPYmogbWV0aG9kcyBmb3IgYWxsIGRldmljZSBkcml2ZXJzCisgKiBA
YnJpZWYgQSBiYXNpYyBzZXQgb2YgbWV0aG9kcyByZXF1aXJlZCBmb3IgYWxsIGRldmljZSBkcml2
ZXJzLgorICoKKyAqIFRoZSBkZXZpY2UgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNl
cyB0byBkcml2ZXJzIGR1cmluZworICogYXV0b2NvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGVzIG1l
dGhvZHMgdG8gYWxsb3cgZHJpdmVycyB0byBoYW5kbGUKKyAqIHN5c3RlbS13aWRlIGV2ZW50cyBz
dWNoIGFzIHN1c3BlbmQsIHJlc3VtZSBvciBzaHV0ZG93bi4KKyAqIEB7CisgKi8KKworI2lmbmRl
ZiBfZGV2aWNlX2lmX2hfCisjZGVmaW5lIF9kZXZpY2VfaWZfaF8KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0
cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcHJvYmVfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQg
ZGV2aWNlX3Byb2JlX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFByb2JlIHRvIHNl
ZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyLgorICoKKyAqIFVzZXJzIHNob3VsZCBub3Qg
Y2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4gTm9ybWFsbHksIHRoaXMKKyAqIGlzIGNhbGxlZCB2
aWEgZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goKSB0byBzZWxlY3QgYSBkcml2ZXIKKyAqIGNhbGxp
bmcgdGhlIERFVklDRV9QUk9CRSgpIG9mIGFsbCBjYW5kaWRhdGUgZHJpdmVycyBhbmQgYXR0YWNo
CisgKiB0aGUgd2lubmluZyBkcml2ZXIgKGlmIGFueSkgdG8gdGhlIGRldmljZS4KKyAqCisgKiBU
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNlcyB0byBkZXZpY2UgZHJpdmVycy4K
KyAqIFR5cGljYWxseSwgdGhlIGRyaXZlciB3aWxsIGV4YW1pbmUgdGhlIGRldmljZSB0byBzZWUg
aWYKKyAqIGl0IGlzIHN1aXRhYmxlIGZvciB0aGlzIGRyaXZlci4gVGhpcyBtaWdodCBpbmNsdWRl
IGNoZWNraW5nCisgKiB0aGUgdmFsdWVzIG9mIHZhcmlvdXMgZGV2aWNlIGluc3RhbmNlIHZhcmlh
YmxlcyBvciByZWFkaW5nCisgKiBoYXJkd2FyZSByZWdpc3RlcnMuCisgKiAgCisgKiBJbiBzb21l
IGNhc2VzLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXZhaWxhYmxlCisgKiB3
aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBkZXZpY2UgKGZvciBpbnN0YW5jZSB0aGVyZSBtaWdodAor
ICogYmUgYSBnZW5lcmljIGRyaXZlciB3aGljaCB3b3JrcyBmb3IgYSBzZXQgb2YgbWFueSB0eXBl
cyBvZgorICogZGV2aWNlIGFuZCBhIG1vcmUgc3BlY2lmaWMgZHJpdmVyIHdoaWNoIHdvcmtzIGZv
ciBhIHN1YnNldAorICogb2YgZGV2aWNlcykuIEJlY2F1c2Ugb2YgdGhpcywgYSBkcml2ZXIgc2hv
dWxkIG5vdCBhc3N1bWUKKyAqIHRoYXQgaXQgd2lsbCBiZSB0aGUgZHJpdmVyIHRoYXQgYXR0YWNo
ZXMgdG8gdGhlIGRldmljZSBldmVuCisgKiBpZiBpdCByZXR1cm5zIGEgc3VjY2VzcyBzdGF0dXMg
ZnJvbSBERVZJQ0VfUFJPQkUoKS4gSW4gcGFydGljdWxhciwKKyAqIGEgZHJpdmVyIG11c3QgZnJl
ZSBhbnkgcmVzb3VyY2VzIHdoaWNoIGl0IGFsbG9jYXRlZCBkdXJpbmcKKyAqIHRoZSBwcm9iZSBi
ZWZvcmUgcmV0dXJuaW5nLiBUaGUgcmV0dXJuIHZhbHVlIG9mIERFVklDRV9QUk9CRSgpCisgKiBp
cyB1c2VkIHRvIGVsZWN0IHdoaWNoIGRyaXZlciBpcyB1c2VkIC0gdGhlIGRyaXZlciB3aGljaCBy
ZXR1cm5zCisgKiB0aGUgbGFyZ2VzdCBub24tZXJyb3IgdmFsdWUgd2lucyB0aGUgZWxlY3Rpb24g
YW5kIGF0dGFjaGVzIHRvCisgKiB0aGUgZGV2aWNlLiBDb21tb24gbm9uLWVycm9yIHZhbHVlcyBh
cmUgZGVzY3JpYmVkIGluIHRoZQorICogREVWSUNFX1BST0JFKDkpIG1hbnVhbCBwYWdlLgorICoK
KyAqIElmIGEgZHJpdmVyIG1hdGNoZXMgdGhlIGhhcmR3YXJlLCBpdCBzaG91bGQgc2V0IHRoZSBk
ZXZpY2UKKyAqIGRlc2NyaXB0aW9uIHN0cmluZyB1c2luZyBkZXZpY2Vfc2V0X2Rlc2MoKSBvcgor
ICogZGV2aWNlX3NldF9kZXNjX2NvcHkoKS4gVGhpcyBzdHJpbmcgaXMgdXNlZCB0byBnZW5lcmF0
ZSBhbgorICogaW5mb3JtYXRpdmUgbWVzc2FnZSB3aGVuIERFVklDRV9BVFRBQ0goKSBpcyBjYWxs
ZWQuCisgKiAKKyAqIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiBhIGRyaXZlciByZXR1cm5zIHplcm8s
IHRoZSBkcml2ZXIgZWxlY3Rpb24KKyAqIGlzIGN1dCBzaG9ydCBhbmQgdGhhdCBkcml2ZXIgd2ls
bCBhdHRhY2ggdG8gdGhlIGRldmljZQorICogaW1tZWRpYXRlbHkuIFRoaXMgc2hvdWxkIHJhcmVs
eSBiZSB1c2VkLgorICoKKyAqIEZvciBleGFtcGxlLCBhIHByb2JlIG1ldGhvZCBmb3IgYSBQQ0kg
ZGV2aWNlIGRyaXZlciBtaWdodCBsb29rCisgKiBsaWtlIHRoaXM6CisgKgorICogQGNvZGUKKyAq
IGludAorICogZm9vX3Byb2JlKGRldmljZV90IGRldikKKyAqIHsKKyAqICAgICAgICAgaWYgKHBj
aV9nZXRfdmVuZG9yKGRldikgPT0gRk9PVkVORE9SICYmCisgKiAgICAgICAgICAgICBwY2lfZ2V0
X2RldmljZShkZXYpID09IEZPT0RFVklDRSkgeworICogICAgICAgICAgICAgICAgIGRldmljZV9z
ZXRfZGVzYyhkZXYsICJGb28gZGV2aWNlIik7CisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIChC
VVNfUFJPQkVfREVGQVVMVCk7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgcmV0dXJuIChFTlhJ
Tyk7CisgKiB9CisgKiBAZW5kY29kZQorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g
YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz
IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcHJvYmUs
IGZvb19wcm9iZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSB0
byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJaWYgdGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZSBk
cml2ZXIgZm9yIHRoaXMKKyAqCQkJZGV2aWNlCisgKiBAcmV0dmFsIG5lZ2F0aXZlCWlmIHRoZSBk
cml2ZXIgY2FuIG1hdGNoIHRoaXMgZGV2aWNlIC0gdGhlCisgKgkJCWxlYXN0IG5lZ2F0aXZlIHZh
bHVlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZQorICoJCQlkcml2ZXIKKyAqIEByZXR2YWwgRU5YSU8J
aWYgdGhlIGRyaXZlciBkb2VzIG5vdCBtYXRjaCB0aGUgZGV2aWNlCisgKiBAcmV0dmFsIHBvc2l0
aXZlCWlmIHNvbWUga2luZCBvZiBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nCisgKgkJCXRoZSBw
cm9iZSwgYSByZWd1bGFyIHVuaXggZXJyb3IgY29kZSBzaG91bGQKKyAqCQkJYmUgcmV0dXJuZWQg
dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZXJyb3IKKyAqIEBzZWUgREVWSUNFX0FUVEFDSCgpLCBw
Y2lfZ2V0X3ZlbmRvcigpLCBwY2lfZ2V0X2RldmljZSgpCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBERVZJQ0VfUFJPQkUoZGV2aWNlX3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpP
UExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3Byb2JlKTsKKwlyZXR1cm4gKChkZXZp
Y2VfcHJvYmVfdCAqKSBfbSkoZGV2KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRv
ciBmb3IgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq
b3BfZGVzYyBkZXZpY2VfaWRlbnRpZnlfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBs
ZW1lbnRpbmcgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGRl
dmljZV9pZGVudGlmeV90KGRyaXZlcl90ICpkcml2ZXIsIGRldmljZV90IHBhcmVudCk7CisvKioK
KyAqIEBicmllZiBBbGxvdyBhIGRldmljZSBkcml2ZXIgdG8gZGV0ZWN0IGRldmljZXMgbm90IG90
aGVyd2lzZSBlbnVtZXJhdGVkLgorICoKKyAqIFRoZSBERVZJQ0VfSURFTlRJRlkoKSBtZXRob2Qg
aXMgdXNlZCBieSBzb21lIGRyaXZlcnMgKGUuZy4gdGhlIElTQQorICogYnVzIGRyaXZlcikgdG8g
aGVscCBwb3B1bGF0ZSB0aGUgYnVzIGRldmljZSB3aXRoIGEgdXNlZnVsIHNldCBvZgorICogY2hp
bGQgZGV2aWNlcywgbm9ybWFsbHkgYnkgY2FsbGluZyB0aGUgQlVTX0FERF9DSElMRCgpIG1ldGhv
ZCBvZgorICogdGhlIHBhcmVudCBkZXZpY2UuIEZvciBpbnN0YW5jZSwgdGhlIElTQSBidXMgZHJp
dmVyIHVzZXMgc2V2ZXJhbAorICogc3BlY2lhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGlzYWhp
bnQgZHJpdmVyIGFuZCB0aGUgcG5wIGRyaXZlciB0bworICogY3JlYXRlIGNoaWxkIGRldmljZXMg
YmFzZWQgb24gY29uZmlndXJhdGlvbiBoaW50cyBhbmQgUG5QIGJ1cworICogcHJvYmVzIHJlc3Bl
Y3RpdmVseS4KKyAqCisgKiBNYW55IGJ1cyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgdHJ1ZSBwbHVn
LWFuZC1wbGF5IGRvIG5vdCBuZWVkIHRvCisgKiB1c2UgdGhpcyBtZXRob2QgYXQgYWxsIHNpbmNl
IGNoaWxkIGRldmljZXMgY2FuIGJlIGRpc2NvdmVyZWQKKyAqIGF1dG9tYXRpY2FsbHkgd2l0aG91
dCBoZWxwIGZyb20gY2hpbGQgZHJpdmVycy4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9k
IGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2
ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX2lk
ZW50aWZ5LCBmb29faWRlbnRpZnkpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkcml2ZXIJ
dGhlIGRyaXZlciB3aG9zZSBpZGVudGlmeSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkCisgKiBAcGFy
YW0gcGFyZW50CXRoZSBwYXJlbnQgZGV2aWNlIHRvIHVzZSB3aGVuIGFkZGluZyBuZXcgY2hpbGRy
ZW4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBERVZJQ0VfSURFTlRJRlkoZHJpdmVyX3Qg
KmRyaXZlciwgZGV2aWNlX3QgcGFyZW50KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UChkcml2ZXItPm9wcyxkZXZpY2VfaWRlbnRpZnkpOworCSgoZGV2aWNlX2lkZW50aWZ5X3QgKikg
X20pKGRyaXZlciwgcGFyZW50KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIERFVklDRV9BVFRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgZGV2aWNlX2F0dGFjaF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGlu
ZyB0aGUgREVWSUNFX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX2F0dGFj
aF90KGRldmljZV90IGRldik7CisvKioKKyAqIEBicmllZiBBdHRhY2ggYSBkZXZpY2UgdG8gYSBk
ZXZpY2UgZHJpdmVyCisgKgorICogTm9ybWFsbHkgb25seSBjYWxsZWQgdmlhIGRldmljZV9wcm9i
ZV9hbmRfYXR0YWNoKCksIHRoaXMgaXMgY2FsbGVkCisgKiB3aGVuIGEgZHJpdmVyIGhhcyBzdWNj
ZWVkZWQgaW4gcHJvYmluZyBhZ2FpbnN0IGEgZGV2aWNlLgorICogVGhpcyBtZXRob2Qgc2hvdWxk
IGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIGFuZCBhbGxvY2F0ZSBvdGhlcgorICogc3lzdGVtIHJl
c291cmNlcyAoZS5nLiBkZXZmcyBlbnRyaWVzKSBhcyByZXF1aXJlZC4KKyAqCisgKiBUbyBpbmNs
dWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMK
KyAqIGluIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpN
RVRIT0QoZGV2aWNlX2F0dGFjaCwgZm9vX2F0dGFjaCkKKyAqIEBlbmRjb2RlCisgKgorICogQHBh
cmFtIGRldgkJdGhlIGRldmljZSB0byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJc3VjY2Vzcwor
ICogQHJldHZhbCBub24temVybwlpZiBzb21lIGtpbmQgb2YgZXJyb3Igd2FzIGRldGVjdGVkIGR1
cmluZworICoJCQl0aGUgYXR0YWNoLCBhIHJlZ3VsYXIgdW5peCBlcnJvciBjb2RlIHNob3VsZAor
ICoJCQliZSByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBlcnJvcgorICogQHNlZSBE
RVZJQ0VfUFJPQkUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX0FUVEFDSChk
ZXZpY2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl
diktPm9wcyxkZXZpY2VfYXR0YWNoKTsKKwlyZXR1cm4gKChkZXZpY2VfYXR0YWNoX3QgKikgX20p
KGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0Vf
REVUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9kZXRh
Y2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9E
RVRBQ0goKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9kZXRhY2hfdChkZXZpY2VfdCBk
ZXYpOworLyoqCisgKiBAYnJpZWYgRGV0YWNoIGEgZHJpdmVyIGZyb20gYSBkZXZpY2UuCisgKgor
ICogVGhpcyBjYW4gYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGlzIHJlcGxhY2luZyB0aGUKKyAqIGRy
aXZlciBzb2Z0d2FyZSBvciBpZiBhIGRldmljZSBpcyBhYm91dCB0byBiZSBwaHlzaWNhbGx5IHJl
bW92ZWQKKyAqIGZyb20gdGhlIHN5c3RlbSAoZS5nLiBmb3IgcmVtb3ZhYmxlIGhhcmR3YXJlIHN1
Y2ggYXMgVVNCIG9yIFBDQ0FSRCkuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBh
IGRldmljZSBkcml2ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3Mg
bWV0aG9kIGxpc3Q6CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9kZXRhY2gs
IGZvb19kZXRhY2gpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkZXYJCXRoZSBkZXZpY2Ug
dG8gZGV0YWNoCisgKgorICogQHJldHZhbCAwCQlzdWNjZXNzCisgKiBAcmV0dmFsIG5vbi16ZXJv
CXRoZSBkZXRhY2ggY291bGQgbm90IGJlIHBlcmZvcm1lZCwgZS5nLiBpZiB0aGUKKyAqCQkJZHJp
dmVyIGRvZXMgbm90IHN1cHBvcnQgZGV0YWNoaW5nLgorICoKKyAqIEBzZWUgREVWSUNFX0FUVEFD
SCgpCisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBERVZJQ0VfREVUQUNIKGRldmljZV90IGRl
dikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLGRl
dmljZV9kZXRhY2gpOworCXJldHVybiAoKGRldmljZV9kZXRhY2hfdCAqKSBfbSkoZGV2KTsKK30K
KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9TSFVURE9XTigp
IG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2Vfc2h1dGRvd25fZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9TSFVURE9X
TigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX3NodXRkb3duX3QoZGV2aWNlX3QgZGV2
KTsKKy8qKgorICogQGJyaWVmIENhbGxlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duLgorICoKKyAq
IFRoaXMgbWV0aG9kIGFsbG93cyBkcml2ZXJzIHRvIGRldGVjdCB3aGVuIHRoZSBzeXN0ZW0gaXMg
YmVpbmcgc2h1dCBkb3duLgorICogU29tZSBkcml2ZXJzIG5lZWQgdG8gdXNlIHRoaXMgdG8gcGxh
Y2UgdGhlaXIgaGFyZHdhcmUgaW4gYSBjb25zaXN0ZW50CisgKiBzdGF0ZSBiZWZvcmUgcmVib290
aW5nIHRoZSBjb21wdXRlci4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2
aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2ZXIncyBtZXRo
b2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBm
b29fc2h1dGRvd24pCisgKiBAZW5kY29kZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVW
SUNFX1NIVVRET1dOKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpZGV2KS0+b3BzLGRldmljZV9zaHV0ZG93bik7CisJcmV0dXJuICgoZGV2aWNl
X3NodXRkb3duX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBERVZJQ0VfU1VTUEVORCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq
b3BfZGVzYyBkZXZpY2Vfc3VzcGVuZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgREVWSUNFX1NVU1BFTkQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmlj
ZV9zdXNwZW5kX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVk
IGJ5IHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbSB3aGVuIGEKKyAqIHN1c3BlbmQgaGFz
IGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHNvbWUgYXV0b21hdGljCisgKiBtZWNo
YW5pc20uCisgKgorICogVGhpcyBnaXZlcyBkcml2ZXJzIGEgY2hhbmNlIHRvIHZldG8gdGhlIHN1
c3BlbmQgb3Igc2F2ZSB0aGVpcgorICogY29uZmlndXJhdGlvbiBiZWZvcmUgcG93ZXIgaXMgcmVt
b3ZlZC4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwg
dXNlIGEgbGluZSBsaWtlIHRoaXMgaW4KKyAqIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAq
CisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3N1c3BlbmQsIGZvb19zdXNwZW5kKQor
ICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHN1c3BlbmRl
ZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBlcnJv
ciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHByZXBhcmUgdGhlCisgKiAgICAgICAgICAg
ICAgICAgICAgICBkZXZpY2UgZm9yIHN1c3BlbnNpb24KKyAqCisgKiBAc2VlIERFVklDRV9SRVNV
TUUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1NVU1BFTkQoZGV2aWNlX3Qg
ZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMs
ZGV2aWNlX3N1c3BlbmQpOworCXJldHVybiAoKGRldmljZV9zdXNwZW5kX3QgKikgX20pKGRldik7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVTVU1F
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9yZXN1bWVfZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9SRVNVTUUo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9yZXN1bWVfdChkZXZpY2VfdCBkZXYpOwor
LyoqCisgKiBAYnJpZWYgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIHJlc3VtZXMgYWZ0
ZXIgYSBzdXNwZW5kLgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4gYSBkZXZpY2Ug
ZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidzIG1ldGhvZCBs
aXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVzdW1lLCBmb29fcmVz
dW1lKQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHJl
c3VtZWQKKyAqCisgKiBAcmV0dmFsIDAJCXN1Y2Nlc3MKKyAqIEByZXR2YWwgbm9uLXplcm8JYW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZQorICogICAgICAg
ICAgICAgICAgICAgICAgZGV2aWNlIGZyb20gc3VzcGVuc2lvbgorICoKKyAqIEBzZWUgREVWSUNF
X1NVU1BFTkQoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1JFU1VNRShkZXZp
Y2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldikt
Pm9wcyxkZXZpY2VfcmVzdW1lKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVzdW1lX3QgKikgX20pKGRl
dik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUVVJ
RVNDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcXVpZXNj
ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgREVWSUNFX1FV
SUVTQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9xdWllc2NlX3QoZGV2aWNlX3Qg
ZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBh
c2tlZCB0byBxdWllc2NlIGl0c2VsZi4KKyAqCisgKiBUaGUgZHJpdmVyIHNob3VsZCBhcnJhbmdl
IGZvciB0aGUgb3JkZXJseSBzaHV0ZG93biBvZiB0aGlzIGRldmljZS4KKyAqIEFsbCBmdXJ0aGVy
IGFjY2VzcyB0byB0aGUgZGV2aWNlIHNob3VsZCBiZSBjdXJ0YWlsZWQuICBTb29uIHRoZXJlCisg
KiB3aWxsIGJlIGEgcmVxdWVzdCB0byBkZXRhY2gsIGJ1dCB0aGVyZSB3b24ndCBuZWNlc3Nhcmls
eSBiZSBvbmUuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBhIGRldmljZSBkcml2
ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3MgbWV0aG9kIGxpc3Q6
CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9xdWllc2NlLCBmb29fcXVpZXNj
ZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSBiZWluZyBxdWll
c2NlZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBl
cnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHF1aWVzY2UgdGhlCisgKiAgICAgICAg
ICAgICAgICAgICAgICBkZXZpY2UKKyAqCisgKiBAc2VlIERFVklDRV9ERVRBQ0goKQorICovCisK
K3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1FVSUVTQ0UoZGV2aWNlX3QgZGV2KQoreworCWtv
YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3F1aWVz
Y2UpOworCXJldHVybiAoKGRldmljZV9xdWllc2NlX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBA
YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRob2Qg
Ki8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgZGV2aWNlX3JlZ2lzdGVyX2Rlc2M7CisvKiog
QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRo
b2QgKi8KK3R5cGVkZWYgdm9pZCAqIGRldmljZV9yZWdpc3Rlcl90KGRldmljZV90IGRldik7Cisv
KioKKyAqIEBicmllZiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgYXNrZWQgdG8g
cmVnaXN0ZXIgaGFuZGxlcnMuCisgKgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g
YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz
IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVnaXN0
ZXIsIGZvb19yZWdpc3RlcikKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRl
dmljZSBmb3Igd2hpY2ggaGFuZGxlcnMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQKKyAqCisgKiBAcmV0
dmFsIE5VTEwgICAgIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQKKyAqIEByZXR2YWwgbm9uLU5VTEwJ
YSBwb2ludGVyIHRvIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0YXRpYyBkcml2ZXIgc3RhdGUK
KyAqCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgKiBERVZJQ0VfUkVHSVNURVIoZGV2aWNl
X3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v
cHMsZGV2aWNlX3JlZ2lzdGVyKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVnaXN0ZXJfdCAqKSBfbSko
ZGV2KTsKK30KKworI2VuZGlmIC8qIF9kZXZpY2VfaWZfaF8gKi8KRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvaWZfcHRuZXQubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L2lmX3B0bmV0Lm8gZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9f
YWxpZ24uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYWxpZ24uaAkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvX2FsaWduLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L19hbGlnbi5oIDIxNTg1NiAyMDEwLTExLTI2IDEwOjU5OjIwWiB0aWpsICQgKi8KKworI2luY2x1
ZGUgPHg4Ni9fYWxpZ24uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL19idXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYnVz
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2J1cy5oCTE5NzAtMDEt
MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9fYnVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTS4gV2FybmVyIExvc2gu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1v
ZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fYnVzLmggMTQ1MjUzIDIwMDUtMDQt
MTggMjE6NDU6MzRaIGltcCAkCisgKi8KKworI2lmbmRlZiBBTUQ2NF9JTkNMVURFX19CVVNfSAor
I2RlZmluZSBBTUQ2NF9JTkNMVURFX19CVVNfSAorCisvKgorICogQnVzIGFkZHJlc3MgYW5kIHNp
emUgdHlwZXMKKyAqLwordHlwZWRlZiB1aW50NjRfdCBidXNfYWRkcl90OwordHlwZWRlZiB1aW50
NjRfdCBidXNfc2l6ZV90OworCisvKgorICogQWNjZXNzIG1ldGhvZHMgZm9yIGJ1cyByZXNvdXJj
ZXMgYW5kIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3R5cGVkZWYJdWludDY0X3QgYnVzX3NwYWNlX3Rh
Z190OwordHlwZWRlZgl1aW50NjRfdCBidXNfc3BhY2VfaGFuZGxlX3Q7CisKKyNlbmRpZiAvKiBB
TUQ2NF9JTkNMVURFX19CVVNfSCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvX2ludHR5cGVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvX2ludHR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
X2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19pbnR0eXBlcy5oCTIwMTYtMDktMjkgMDA6
MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUg
aXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS9faW50dHlwZXMuaCAyMTcxNTcgMjAxMS0wMS0wOCAxODowOTo0OFog
dGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX2ludHR5cGVzLmg+CmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fbGltaXRzLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBU
aGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fbGltaXRzLmggMjMyMjYyIDIwMTItMDItMjggMTg6
MjQ6MjhaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L19saW1pdHMuaD4KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19zdGRpbnQuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvX3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0K
KyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6
IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL19zdGRpbnQuaCAyMzIyNjQgMjAxMi0wMi0y
OCAxODozODozM1ogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3N0ZGludC5oPgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmggL3Vzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL190eXBlcy5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot
CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fdHlwZXMuaCAyMzIyNjEgMjAxMi0wMi0y
OCAxODoxNToyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3R5cGVzLmg+CmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hY3BpY2FfbWFjaGRlcC5o
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FjcGljYV9tYWNoZGVwLmgKLS0t
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw
dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvYWNwaWNhX21hY2hkZXAuaCAyNTQzMDUgMjAxMy0wOC0xMyAyMjowNToxMFogamtpbSAk
ICovCisKKyNpbmNsdWRlIDx4ODYvYWNwaWNhX21hY2hkZXAuaD4KZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvYXBtX2Jpb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTIw
MTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisg
KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTEx
IDE5OjM2OjIxWiBqa2ltICQgKi8KKworI2luY2x1ZGUgPHg4Ni9hcG1fYmlvcy5oPgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmggL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvYXNtLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbS5oCTIwMTYtMDktMjkg
MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTkgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpREVGUy5o
CTUuMSAoQmVya2VsZXkpIDQvMjMvOTAKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS9hc20uaCAyNzUwMDQgMjAxNC0xMS0yNSAwMzo1MDozMVogZW1hc3RlICQKKyAq
LworCisjaWZuZGVmIF9NQUNISU5FX0FTTV9IXworI2RlZmluZQlfTUFDSElORV9BU01fSF8KKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWZkZWYgUElDCisjZGVmaW5lCVBJQ19QTFQoeCkJ
eEBQTFQKKyNkZWZpbmUJUElDX0dPVCh4KQl4QEdPVFBDUkVMKCVyaXApCisjZWxzZQorI2RlZmlu
ZQlQSUNfUExUKHgpCXgKKyNlbmRpZgorCisvKgorICogQ05BTUUgYW5kIEhJREVOQU1FIG1hbmFn
ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0aGUg
ZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEgbmFt
ZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMgdG8g
dGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuICBISURFTkFNRSBpcyBn
aXZlbiBhbiBhc3NlbWJseS1sYW5ndWFnZSBuYW1lLCBhbmQgZXhwYW5kcworICogdG8gYSBwb3Nz
aWJseS1tb2RpZmllZCBmb3JtIHRoYXQgd2lsbCBiZSBpbnZpc2libGUgdG8gQyBwcm9ncmFtcy4K
KyAqLworI2RlZmluZSBDTkFNRShjc3ltKQkJY3N5bQorI2RlZmluZSBISURFTkFNRShhc21zeW0p
CS5hc21zeW0KKworI2RlZmluZSBfU1RBUlRfRU5UUlkJLnRleHQ7IC5wMmFsaWduIDQsMHg5MAor
CisjZGVmaW5lIF9FTlRSWSh4KQlfU1RBUlRfRU5UUlk7IFwKKwkJCS5nbG9ibCBDTkFNRSh4KTsg
LnR5cGUgQ05BTUUoeCksQGZ1bmN0aW9uOyBDTkFNRSh4KToKKworI2lmZGVmIFBST0YKKyNkZWZp
bmUJQUxURU5UUlkoeCkJX0VOVFJZKHgpOyBcCisJCQlwdXNocSAlcmJwOyBtb3ZxICVyc3AsJXJi
cDsgXAorCQkJY2FsbCBQSUNfUExUKEhJREVOQU1FKG1jb3VudCkpOyBcCisJCQlwb3BxICVyYnA7
IFwKKwkJCWptcCA5ZgorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCk7IFwKKwkJCXB1c2hxICVy
YnA7IG1vdnEgJXJzcCwlcmJwOyBcCisJCQljYWxsIFBJQ19QTFQoSElERU5BTUUobWNvdW50KSk7
IFwKKwkJCXBvcHEgJXJicDsgXAorCQkJOToKKyNlbHNlCisjZGVmaW5lCUFMVEVOVFJZKHgpCV9F
TlRSWSh4KQorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCkKKyNlbmRpZgorCisjZGVmaW5lCUVO
RCh4KQkJLnNpemUgeCwgLiAtIHgKKy8qCisgKiBXRUFLX1JFRkVSRU5DRSgpOiBjcmVhdGUgYSB3
ZWFrIHJlZmVyZW5jZSBhbGlhcyBmcm9tIHN5bS4gCisgKiBUaGUgbWFjcm8gaXMgbm90IGEgZ2Vu
ZXJhbCBhc20gbWFjcm8gdGhhdCB0YWtlcyBhcmJpdHJhcnkgbmFtZXMsCisgKiBidXQgb25lIHRo
YXQgdGFrZXMgb25seSBDIG5hbWVzLiBJdCBkb2VzIHRoZSBub24tbnVsbCBuYW1lCisgKiB0cmFu
c2xhdGlvbiBpbnNpZGUgdGhlIG1hY3JvLgorICovCisjZGVmaW5lCVdFQUtfUkVGRVJFTkNFKHN5
bSwgYWxpYXMpCQkJCQlcCisJLndlYWsgQ05BTUUoYWxpYXMpOwkJCQkJCVwKKwkuZXF1IENOQU1F
KGFsaWFzKSxDTkFNRShzeW0pCisKKyNkZWZpbmUgUkNTSUQoeCkJLnRleHQ7IC5hc2NpeiB4CisK
KyN1bmRlZiBfX0ZCU0RJRAorI2lmICFkZWZpbmVkKGxpbnQpICYmICFkZWZpbmVkKFNUUklQX0ZC
U0RJRCkKKyNkZWZpbmUgX19GQlNESUQocykJLmlkZW50IHMKKyNlbHNlCisjZGVmaW5lIF9fRkJT
RElEKHMpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBub3QgbGludCBhbmQgbm90IFNUUklQX0ZC
U0RJRCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0FTTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtYWNyb3MuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hc21hY3Jvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNDAgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m
IENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvYXNtYWNyb3MuaCAyNzQ0ODkgMjAxNC0xMS0xMyAyMjoxMTo0NFogc2NvdHRsICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX0FTTUFDUk9TX0hfCisjZGVmaW5lIF9NQUNISU5FX0FTTUFDUk9T
X0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogWFhYIHRvbyBtdWNoIGR1cGxpY2F0
aW9uIGluIHZhcmlvdXMgYXNtKi5oJ3MuICovCisKKy8qCisgKiBDTkFNRSBpcyB1c2VkIHRvIG1h
bmFnZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0
aGUgZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEg
bmFtZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMg
dG8gdGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuCisgKi8KKyNkZWZp
bmUgQ05BTUUoY3N5bSkJCWNzeW0KKworI2RlZmluZSBBTElHTl9EQVRBCS5wMmFsaWduIDMJLyog
OCBieXRlIGFsaWdubWVudCwgemVybyBmaWxsZWQgKi8KKyNpZmRlZiBHUFJPRgorI2RlZmluZSBB
TElHTl9URVhUCS5wMmFsaWduIDQsMHg5MAkvKiAxNi1ieXRlIGFsaWdubWVudCwgbm9wIGZpbGxl
ZCAqLworI2Vsc2UKKyNkZWZpbmUgQUxJR05fVEVYVAkucDJhbGlnbiA0LDB4OTAJLyogMTYtYnl0
ZSBhbGlnbm1lbnQsIG5vcCBmaWxsZWQgKi8KKyNlbmRpZgorI2RlZmluZSBTVVBFUkFMSUdOX1RF
WFQJLnAyYWxpZ24gNCwweDkwCS8qIDE2LWJ5dGUgYWxpZ25tZW50LCBub3AgZmlsbGVkICovCisK
KyNkZWZpbmUgR0VOX0VOVFJZKG5hbWUpCQlBTElHTl9URVhUOyAuZ2xvYmwgQ05BTUUobmFtZSk7
IFwKKwkJCQkudHlwZSBDTkFNRShuYW1lKSxAZnVuY3Rpb247IENOQU1FKG5hbWUpOgorI2RlZmlu
ZSBOT05fR1BST0ZfRU5UUlkobmFtZSkJR0VOX0VOVFJZKG5hbWUpCisjZGVmaW5lIE5PTl9HUFJP
Rl9SRVQJCS5ieXRlIDB4YzMJLyogb3Bjb2RlIGZvciBgcmV0JyAqLworCisjZGVmaW5lCUVORChu
YW1lKQkJLnNpemUgbmFtZSwgLiAtIG5hbWUKKworI2lmZGVmIEdQUk9GCisvKgorICogX19tY291
bnQgaXMgbGlrZSBbLl1tY291bnQgZXhjZXB0IHRoYXQgZG9lc24ndCByZXF1aXJlIGl0cyBjYWxs
ZXIgdG8gc2V0CisgKiB1cCBhIGZyYW1lIHBvaW50ZXIuICBJdCBtdXN0IGJlIGNhbGxlZCBiZWZv
cmUgcHVzaGluZyBhbnl0aGluZyBvbnRvIHRoZQorICogc3RhY2suICBnY2Mgc2hvdWxkIGV2ZW50
dWFsbHkgZ2VuZXJhdGUgY29kZSB0byBjYWxsIF9fbWNvdW50IGluIG1vc3QKKyAqIGNhc2VzLiAg
VGhpcyB3b3VsZCBtYWtlIC1wZyBpbiBjb21iaW5hdGlvbiB3aXRoIC1mb21pdC1mcmFtZS1wb2lu
dGVyCisgKiB1c2VmdWwuICBnY2MgaGFzIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBQUk9GSUxF
X0JFRk9SRV9QUk9MT0dVRSB0bworICogYWxsb3cgcHJvZmlsaW5nIGJlZm9yZSBzZXR0aW5nIHVw
IHRoZSBmcmFtZSBwb2ludGVyLCBidXQgdGhpcyBpcworICogaW5hZGVxdWF0ZSBmb3IgZ29vZCBo
YW5kbGluZyBvZiBzcGVjaWFsIGNhc2VzLCBlLmcuLCAtZnBpYyB3b3JrcyBiZXN0CisgKiB3aXRo
IHByb2ZpbGluZyBhZnRlciB0aGUgcHJvbG9ndWUuCisgKgorICogWy5dbWV4aXRjb3VudCBpcyBh
IG5ldyBmdW5jdGlvbiB0byBzdXBwb3J0IG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgaWYgYW4K
KyAqIGFjY3VyYXRlIGNsb2NrIGlzIGF2YWlsYWJsZS4gIEZvciBDIHNvdXJjZXMsIGNhbGxzIHRv
IGl0IGFyZSBnZW5lcmF0ZWQKKyAqIGJ5IHRoZSBGcmVlQlNEIGV4dGVuc2lvbiBgLW1wcm9maWxl
ci1lcGlsb2d1ZScgdG8gZ2NjLiAgSXQgaXMgYmVzdCB0bworICogY2FsbCBbLl1tZXhpdGNvdW50
IGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBsaWtlIHRoZSBNRVhJVENPVU5UIG1hY3JvIGRvZXMs
CisgKiBidXQgZ2NjIGN1cnJlbnRseSBnZW5lcmF0ZXMgY2FsbHMgdG8gaXQgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBlcGlsb2d1ZSB0bworICogYXZvaWQgcHJvYmxlbXMgd2l0aCAtZnBpYy4KKyAqCisg
KiBbLl1tY291bnQgYW5kIF9fbWNvdW50IG1heSBjbG9iYmVyIHRoZSBjYWxsLXVzZWQgcmVnaXN0
ZXJzIGFuZCAlZWYuCisgKiBbLl1tZXhpdGNvdW50IG1heSBjbG9iYmVyICVlY3ggYW5kICVlZi4K
KyAqCisgKiBDcm9zcy1qdW1waW5nIG1ha2VzIG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgdGlt
aW5nIG1vcmUgY29tcGxpY2F0ZWQuCisgKiBJdCBpcyBoYW5kbGVkIGluIG1hbnkgY2FzZXMgYnkg
Y2FsbGluZyBbLl1tZXhpdGNvdW50IGJlZm9yZSBqdW1waW5nLiAgSXQKKyAqIGlzIGhhbmRsZWQg
Zm9yIGNvbmRpdGlvbmFsIGp1bXBzIHVzaW5nIENST1NTSlVNUCgpIGFuZCBDUk9TU0pVTVBfTEFC
RUwoKS4KKyAqIEl0IGlzIGhhbmRsZWQgZm9yIHNvbWUgZmF1bHQtaGFuZGxpbmcganVtcHMgYnkg
bm90IHNoYXJpbmcgdGhlIGV4aXQKKyAqIHJvdXRpbmUuCisgKgorICogQUxURU5UUlkoKSBtdXN0
IGJlIGJlZm9yZSBhIGNvcnJlc3BvbmRpbmcgRU5UUlkoKSBzbyB0aGF0IGl0IGNhbiBqdW1wIHRv
CisgKiB0aGUgbWFpbiBlbnRyeSBwb2ludC4gIE5vdGUgdGhhdCBhbHQgZW50cmllcyBhcmUgY291
bnRlZCB0d2ljZS4gIFRoZXkKKyAqIGhhdmUgdG8gYmUgY291bnRlZCBhcyBvcmRpbmFyeSBlbnRy
aWVzIGZvciBncHJvZiB0byBnZXQgdGhlIGNhbGwgdGltZXMKKyAqIHJpZ2h0IGZvciB0aGUgb3Jk
aW5hcnkgZW50cmllcy4KKyAqCisgKiBIaWdoIGxvY2FsIGxhYmVscyBhcmUgdXNlZCBpbiBtYWNy
b3MgdG8gYXZvaWQgY2xhc2hlcyB3aXRoIGxvY2FsIGxhYmVscworICogaW4gZnVuY3Rpb25zLgor
ICoKKyAqIE9yZGluYXJ5IGByZXQnIGlzIHVzZWQgaW5zdGVhZCBvZiBhIG1hY3JvIGBSRVQnIGJl
Y2F1c2UgdGhlcmUgYXJlIGEgbG90CisgKiBvZiBgcmV0J3MuICAweGMzIGlzIHRoZSBvcGNvZGUg
Zm9yIGByZXQnIChgI2RlZmluZSByZXQgLi4uIHJldCcgY2FuJ3QKKyAqIGJlIHVzZWQgYmVjYXVz
ZSB0aGlzIGZpbGUgaXMgc29tZXRpbWVzIHByZXByb2Nlc3NlZCBpbiB0cmFkaXRpb25hbCBtb2Rl
KS4KKyAqIGByZXQnIGNsb2JiZXJzIGVmbGFncyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAq
LworI2RlZmluZSBBTFRFTlRSWShuYW1lKQkJR0VOX0VOVFJZKG5hbWUpIDsgTUNPVU5UIDsgTUVY
SVRDT1VOVCA7IGptcCA5ZgorI2RlZmluZQlDUk9TU0pVTVAoanRydWUsIGxhYmVsLCBqZmFsc2Up
IFwKKwlqZmFsc2UgOGY7IE1FWElUQ09VTlQ7IGptcCBfX0NPTkNBVCh0byxsYWJlbCk7IDg6Cisj
ZGVmaW5lIENST1NTSlVNUFRBUkdFVChsYWJlbCkgXAorCUFMSUdOX1RFWFQ7IF9fQ09OQ0FUKHRv
LGxhYmVsKTogOyBNQ09VTlQ7IGptcCBsYWJlbAorI2RlZmluZSBFTlRSWShuYW1lKQkJR0VOX0VO
VFJZKG5hbWUpIDsgOTogOyBNQ09VTlQKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQlwdXNo
cSBjYWxsZXIgOyBjYWxsIF9fbWNvdW50IDsgcG9wcSAlcmN4CisjZGVmaW5lIE1DT1VOVAkJCWNh
bGwgX19tY291bnQKKyNkZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCUdFTl9FTlRSWShuYW1lKSA7
IG5vcCA7IEFMSUdOX1RFWFQKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUgTUVYSVRDT1VOVAkJY2Fs
bCAubWV4aXRjb3VudAorI2RlZmluZSByZXQJCQlNRVhJVENPVU5UIDsgTk9OX0dQUk9GX1JFVAor
I2Vsc2UKKyNkZWZpbmUgTUVYSVRDT1VOVAorI2VuZGlmCisKKyNlbHNlIC8qICFHUFJPRiAqLwor
LyoKKyAqIEFMVEVOVFJZKCkgaGFzIHRvIGFsaWduIGJlY2F1c2UgaXQgaXMgYmVmb3JlIGEgY29y
cmVzcG9uZGluZyBFTlRSWSgpLgorICogRU5UUlkoKSBoYXMgdG8gYWxpZ24gdG8gYmVjYXVzZSB0
aGVyZSBtYXkgYmUgbm8gQUxURU5UUlkoKSBiZWZvcmUgaXQuCisgKiBJZiB0aGVyZSBpcyBhIHBy
ZXZpb3VzIEFMVEVOVFJZKCkgdGhlbiB0aGUgYWxpZ25tZW50IGNvZGUgZm9yIEVOVFJZKCkKKyAq
IGlzIGVtcHR5LgorICovCisjZGVmaW5lIEFMVEVOVFJZKG5hbWUpCQlHRU5fRU5UUlkobmFtZSkK
KyNkZWZpbmUJQ1JPU1NKVU1QKGp0cnVlLCBsYWJlbCwgamZhbHNlKQlqdHJ1ZSBsYWJlbAorI2Rl
ZmluZQlDUk9TU0pVTVBUQVJHRVQobGFiZWwpCisjZGVmaW5lIEVOVFJZKG5hbWUpCQlHRU5fRU5U
UlkobmFtZSkKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQorI2RlZmluZSBNQ09VTlQKKyNk
ZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCisjZGVmaW5lIE1FWElUQ09VTlQKKyNlbmRpZiAvKiBH
UFJPRiAqLworCisvKgorICogQ29udmVuaWVuY2UgZm9yIGFkZGluZyBmcmFtZSBwb2ludGVycyB0
byBoYW5kLWNvZGVkIEFTTS4gIFVzZWZ1bCBmb3IKKyAqIERUcmFjZSwgSFdQTUMsIGFuZCBLREIu
CisgKi8KKyNkZWZpbmUgUFVTSF9GUkFNRV9QT0lOVEVSCVwKKwlwdXNocQklcmJwIDsJCVwKKwlt
b3ZxCSVyc3AsICVyYnAgOworI2RlZmluZSBQT1BfRlJBTUVfUE9JTlRFUglcCisJcG9wcQklcmJw
CisKKyNpZmRlZiBMT0NPUkUKKy8qCisgKiBDb252ZW5pZW5jZSBtYWNybyBmb3IgZGVjbGFyaW5n
IGludGVycnVwdCBlbnRyeSBwb2ludHMuCisgKi8KKyNkZWZpbmUJSURUVkVDKG5hbWUpCUFMSUdO
X1RFWFQ7IC5nbG9ibCBfX0NPTkNBVChYLG5hbWUpOyBcCisJCQkudHlwZSBfX0NPTkNBVChYLG5h
bWUpLEBmdW5jdGlvbjsgX19DT05DQVQoWCxuYW1lKToKKworLyoKKyAqIE1hY3JvcyB0byBjcmVh
dGUgYW5kIGRlc3Ryb3kgYSB0cmFwIGZyYW1lLgorICovCisjZGVmaW5lIFBVU0hfRlJBTUUJCQkJ
CQkJXAorCXN1YnEJJFRGX1JJUCwlcnNwIDsJLyogc2tpcCBkdW1teSB0Zl9lcnIgYW5kIHRmX3Ry
YXBubyAqLwlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJv
bSBrZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBZZXMsIGRvbnQgc3dhcGdzIGFnYWluICovCQlc
CisJc3dhcGdzIDsJCQkJCQkJXAorMToJbW92cQklcmRpLFRGX1JESSglcnNwKSA7CQkJCQlcCisJ
bW92cQklcnNpLFRGX1JTSSglcnNwKSA7CQkJCQlcCisJbW92cQklcmR4LFRGX1JEWCglcnNwKSA7
CQkJCQlcCisJbW92cQklcmN4LFRGX1JDWCglcnNwKSA7CQkJCQlcCisJbW92cQklcjgsVEZfUjgo
JXJzcCkgOwkJCQkJXAorCW1vdnEJJXI5LFRGX1I5KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYXgs
VEZfUkFYKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYngsVEZfUkJYKCVyc3ApIDsJCQkJCVwKKwlt
b3ZxCSVyYnAsVEZfUkJQKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTAsVEZfUjEwKCVyc3ApIDsJ
CQkJCVwKKwltb3ZxCSVyMTEsVEZfUjExKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTIsVEZfUjEy
KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTMsVEZfUjEzKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVy
MTQsVEZfUjE0KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTUsVEZfUjE1KCVyc3ApIDsJCQkJCVwK
Kwltb3Z3CSVmcyxURl9GUyglcnNwKSA7CQkJCQlcCisJbW92dwklZ3MsVEZfR1MoJXJzcCkgOwkJ
CQkJXAorCW1vdncJJWVzLFRGX0VTKCVyc3ApIDsJCQkJCVwKKwltb3Z3CSVkcyxURl9EUyglcnNw
KSA7CQkJCQlcCisJbW92bAkkVEZfSEFTU0VHUyxURl9GTEFHUyglcnNwKSA7CQkJCVwKKwljbGQK
KworI2RlZmluZSBQT1BfRlJBTUUJCQkJCQkJXAorCW1vdnEJVEZfUkRJKCVyc3ApLCVyZGkgOwkJ
CQkJXAorCW1vdnEJVEZfUlNJKCVyc3ApLCVyc2kgOwkJCQkJXAorCW1vdnEJVEZfUkRYKCVyc3Ap
LCVyZHggOwkJCQkJXAorCW1vdnEJVEZfUkNYKCVyc3ApLCVyY3ggOwkJCQkJXAorCW1vdnEJVEZf
UjgoJXJzcCksJXI4IDsJCQkJCVwKKwltb3ZxCVRGX1I5KCVyc3ApLCVyOSA7CQkJCQlcCisJbW92
cQlURl9SQVgoJXJzcCksJXJheCA7CQkJCQlcCisJbW92cQlURl9SQlgoJXJzcCksJXJieCA7CQkJ
CQlcCisJbW92cQlURl9SQlAoJXJzcCksJXJicCA7CQkJCQlcCisJbW92cQlURl9SMTAoJXJzcCks
JXIxMCA7CQkJCQlcCisJbW92cQlURl9SMTEoJXJzcCksJXIxMSA7CQkJCQlcCisJbW92cQlURl9S
MTIoJXJzcCksJXIxMiA7CQkJCQlcCisJbW92cQlURl9SMTMoJXJzcCksJXIxMyA7CQkJCQlcCisJ
bW92cQlURl9SMTQoJXJzcCksJXIxNCA7CQkJCQlcCisJbW92cQlURl9SMTUoJXJzcCksJXIxNSA7
CQkJCQlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJvbSBr
ZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBrZWVwIGtlcm5lbCBHUy5iYXNlICovCQlcCisJY2xp
IDsJCQkJCQkJCVwKKwlzd2FwZ3MgOwkJCQkJCQlcCisxOglhZGRxCSRURl9SSVAsJXJzcAkvKiBz
a2lwIG92ZXIgdGZfZXJyLCB0Zl90cmFwbm8gKi8KKworLyoKKyAqIEFjY2VzcyBwZXItQ1BVIGRh
dGEuCisgKi8KKyNkZWZpbmUJUENQVShtZW1iZXIpCSVnczpQQ18gIyMgbWVtYmVyCisjZGVmaW5l
CVBDUFVfQUREUihtZW1iZXIsIHJlZykJCQkJCVwKKwltb3ZxICVnczpQQ19QUlZTUEFDRSwgcmVn
IDsJCQkJXAorCWFkZHEgJFBDXyAjIyBtZW1iZXIsIHJlZworCisjZW5kaWYgLyogTE9DT1JFICov
CisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBFTEZOT1RFKG5hbWUsIHR5cGUsIGRlc2N0eXBl
LCBkZXNjZGF0YS4uLikgXAorLnB1c2hzZWN0aW9uIC5ub3RlLm5hbWUgICAgICAgICAgICAgICAg
IDsgICAgICAgXAorICAuYWxpZ24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAg
ICAgXAorICAubG9uZyAyZiAtIDFmICAgICAgICAgLyogbmFtZXN6ICovICAgIDsgICAgICAgXAor
ICAubG9uZyA0ZiAtIDNmICAgICAgICAgLyogZGVzY3N6ICovICAgIDsgICAgICAgXAorICAubG9u
ZyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMTouYXNjaXogI25h
bWUgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMjouYWxpZ24gNCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMzpkZXNjdHlwZSBkZXNjZGF0YSAgICAg
ICAgICAgICAgICAgICAgIDsgICAgICAgXAorNDouYWxpZ24gNCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsgICAgICAgXAorLnBvcHNlY3Rpb24KKyNlbHNlIC8qICFfX1NURENfXywgaS5l
LiAtdHJhZGl0aW9uYWwgKi8KKyNkZWZpbmUgRUxGTk9URShuYW1lLCB0eXBlLCBkZXNjdHlwZSwg
ZGVzY2RhdGEpIFwKKy5wdXNoc2VjdGlvbiAubm90ZS5uYW1lICAgICAgICAgICAgICAgICA7ICAg
ICAgIFwKKyAgLmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwK
KyAgLmxvbmcgMmYgLSAxZiAgICAgICAgIC8qIG5hbWVzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxv
bmcgNGYgLSAzZiAgICAgICAgIC8qIGRlc2NzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxvbmcgdHlw
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzE6LmFzY2l6ICJuYW1lIiAg
ICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzI6LmFsaWduIDQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzM6ZGVzY3R5cGUgZGVzY2RhdGEgICAgICAgICAg
ICAgICAgICAgICA7ICAgICAgIFwKKzQ6LmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7ICAgICAgIFwKKy5wb3BzZWN0aW9uCisjZW5kaWYgLyogX19TVERDX18gKi8KKworI2Vu
ZGlmIC8qICFfTUFDSElORV9BU01BQ1JPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvYXRvbWljLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvYXRvbWljLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2F0b21pYy5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjI1IEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMTk5OCBEb3VnIFJhYnNvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvYXRvbWljLmggMjk5OTEyIDIwMTYtMDUt
MTYgMDc6MTk6MzNaIHNlcGhlICQKKyAqLworI2lmbmRlZiBfTUFDSElORV9BVE9NSUNfSF8KKyNk
ZWZpbmUJX01BQ0hJTkVfQVRPTUlDX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9y
IHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisK
Ky8qCisgKiBUbyBleHByZXNzIGludGVycHJvY2Vzc29yIChhcyBvcHBvc2VkIHRvIHByb2Nlc3Nv
ciBhbmQgZGV2aWNlKSBtZW1vcnkKKyAqIG9yZGVyaW5nIGNvbnN0cmFpbnRzLCB1c2UgdGhlIGF0
b21pY18qKCkgZnVuY3Rpb25zIHdpdGggYWNxdWlyZSBhbmQgcmVsZWFzZQorICogc2VtYW50aWNz
IHJhdGhlciB0aGFuIHRoZSAqbWIoKSBmdW5jdGlvbnMuICBBbiBhcmNoaXRlY3R1cmUncyBtZW1v
cnkKKyAqIG9yZGVyaW5nIChvciBtZW1vcnkgY29uc2lzdGVuY3kpIG1vZGVsIGdvdmVybnMgdGhl
IG9yZGVyIGluIHdoaWNoIGEKKyAqIHByb2dyYW0ncyBhY2Nlc3NlcyB0byBkaWZmZXJlbnQgbG9j
YXRpb25zIG1heSBiZSBwZXJmb3JtZWQgYnkgYW4KKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoYXQg
YXJjaGl0ZWN0dXJlLiAgSW4gZ2VuZXJhbCwgZm9yIG1lbW9yeSByZWdpb25zCisgKiBkZWZpbmVk
IGFzIHdyaXRlYmFjayBjYWNoZWFibGUsIHRoZSBtZW1vcnkgb3JkZXJpbmcgaW1wbGVtZW50ZWQg
YnkgYW1kNjQKKyAqIHByb2Nlc3NvcnMgcHJlc2VydmVzIHRoZSBwcm9ncmFtIG9yZGVyaW5nIG9m
IGEgbG9hZCBmb2xsb3dlZCBieSBhIGxvYWQsIGEKKyAqIGxvYWQgZm9sbG93ZWQgYnkgYSBzdG9y
ZSwgYW5kIGEgc3RvcmUgZm9sbG93ZWQgYnkgYSBzdG9yZS4gIE9ubHkgYSBzdG9yZQorICogZm9s
bG93ZWQgYnkgYSBsb2FkIHRvIGEgZGlmZmVyZW50IG1lbW9yeSBsb2NhdGlvbiBtYXkgYmUgcmVv
cmRlcmVkLgorICogVGhlcmVmb3JlLCBleGNlcHQgZm9yIHNwZWNpYWwgY2FzZXMsIGxpa2Ugbm9u
LXRlbXBvcmFsIG1lbW9yeSBhY2Nlc3NlcyBvcgorICogbWVtb3J5IHJlZ2lvbnMgZGVmaW5lZCBh
cyB3cml0ZSBjb21iaW5pbmcsIHRoZSBtZW1vcnkgb3JkZXJpbmcgZWZmZWN0cworICogcHJvdmlk
ZWQgYnkgdGhlIHNmZW5jZSBpbnN0cnVjdGlvbiBpbiB0aGUgd21iKCkgZnVuY3Rpb24gYW5kIHRo
ZSBsZmVuY2UKKyAqIGluc3RydWN0aW9uIGluIHRoZSBybWIoKSBmdW5jdGlvbiBhcmUgcmVkdW5k
YW50LiAgSW4gY29udHJhc3QsIHRoZQorICogYXRvbWljXyooKSBmdW5jdGlvbnMgd2l0aCBhY3F1
aXJlIGFuZCByZWxlYXNlIHNlbWFudGljcyBkbyBub3QgcGVyZm9ybQorICogcmVkdW5kYW50IGlu
c3RydWN0aW9ucyBmb3Igb3JkaW5hcnkgY2FzZXMgb2YgaW50ZXJwcm9jZXNzb3IgbWVtb3J5Cisg
KiBvcmRlcmluZyBvbiBhbnkgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lCW1iKCkJX19hc20g
X192b2xhdGlsZSgibWZlbmNlOyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lCXdtYigpCV9fYXNt
IF9fdm9sYXRpbGUoInNmZW5jZTsiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZQlybWIoKQlfX2Fz
bSBfX3ZvbGF0aWxlKCJsZmVuY2U7IiA6IDogOiAibWVtb3J5IikKKworLyoKKyAqIFZhcmlvdXMg
c2ltcGxlIG9wZXJhdGlvbnMgb24gbWVtb3J5LCBlYWNoIG9mIHdoaWNoIGlzIGF0b21pYyBpbiB0
aGUKKyAqIHByZXNlbmNlIG9mIGludGVycnVwdHMgYW5kIG11bHRpcGxlIHByb2Nlc3NvcnMuCisg
KgorICogYXRvbWljX3NldF9jaGFyKFAsIFYpCSgqKHVfY2hhciAqKShQKSB8PSAoVikpCisgKiBh
dG9taWNfY2xlYXJfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgJj0gfihWKSkKKyAqIGF0b21p
Y19hZGRfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgKz0gKFYpKQorICogYXRvbWljX3N1YnRy
YWN0X2NoYXIoUCwgVikJKCoodV9jaGFyICopKFApIC09IChWKSkKKyAqCisgKiBhdG9taWNfc2V0
X3Nob3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFyX3No
b3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfc2hvcnQo
UCwgVikJKCoodV9zaG9ydCAqKShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3Rfc2hvcnQo
UCwgVikJKCoodV9zaG9ydCAqKShQKSAtPSAoVikpCisgKgorICogYXRvbWljX3NldF9pbnQoUCwg
VikJCSgqKHVfaW50ICopKFApIHw9IChWKSkKKyAqIGF0b21pY19jbGVhcl9pbnQoUCwgVikJKCoo
dV9pbnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfaW50KFAsIFYpCQkoKih1X2ludCAq
KShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpCSgqKHVfaW50ICopKFAp
IC09IChWKSkKKyAqIGF0b21pY19zd2FwX2ludChQLCBWKQkocmV0dXJuICgqKHVfaW50ICopKFAp
KTsgKih1X2ludCAqKShQKSA9IChWKTspCisgKiBhdG9taWNfcmVhZGFuZGNsZWFyX2ludChQKQko
cmV0dXJuICgqKHVfaW50ICopKFApKTsgKih1X2ludCAqKShQKSA9IDA7KQorICoKKyAqIGF0b21p
Y19zZXRfbG9uZyhQLCBWKQkoKih1X2xvbmcgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFy
X2xvbmcoUCwgVikJKCoodV9sb25nICopKFApICY9IH4oVikpCisgKiBhdG9taWNfYWRkX2xvbmco
UCwgVikJKCoodV9sb25nICopKFApICs9IChWKSkKKyAqIGF0b21pY19zdWJ0cmFjdF9sb25nKFAs
IFYpCSgqKHVfbG9uZyAqKShQKSAtPSAoVikpCisgKiBhdG9taWNfc3dhcF9sb25nKFAsIFYpCShy
ZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcgKikoUCkgPSAoVik7KQorICogYXRvbWlj
X3JlYWRhbmRjbGVhcl9sb25nKFApCShyZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcg
KikoUCkgPSAwOykKKyAqLworCisvKgorICogVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgZXhwYW5k
ZWQgaW5saW5lIGluIHRoZSBzdGF0aWNhbGx5LWxpbmtlZAorICoga2VybmVsLiAgTG9jayBwcmVm
aXhlcyBhcmUgZ2VuZXJhdGVkIGlmIGFuIFNNUCBrZXJuZWwgaXMgYmVpbmcKKyAqIGJ1aWx0Lgor
ICoKKyAqIEtlcm5lbCBtb2R1bGVzIGNhbGwgcmVhbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGJ1aWx0
IGludG8gdGhlIGtlcm5lbC4KKyAqIFRoaXMgYWxsb3dzIGtlcm5lbCBtb2R1bGVzIHRvIGJlIHBv
cnRhYmxlIGJldHdlZW4gVVAgYW5kIFNNUCBzeXN0ZW1zLgorICovCisjaWYgZGVmaW5lZChLTERf
TU9EVUxFKSB8fCAhZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkKKyNkZWZpbmUJQVRPTUlDX0FTTShO
QU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCQlcCit2b2lkIGF0b21pY18jI05BTUUjI18jI1RZUEUo
dm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpOwlcCit2b2lkIGF0b21pY18jI05BTUUj
I19iYXJyXyMjVFlQRSh2b2xhdGlsZSB1XyMjVFlQRSAqcCwgdV8jI1RZUEUgdikKKworaW50CWF0
b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cGVjdCwgdV9pbnQg
c3JjKTsKK2ludAlhdG9taWNfY21wc2V0X2xvbmcodm9sYXRpbGUgdV9sb25nICpkc3QsIHVfbG9u
ZyBleHBlY3QsIHVfbG9uZyBzcmMpOwordV9pbnQJYXRvbWljX2ZldGNoYWRkX2ludCh2b2xhdGls
ZSB1X2ludCAqcCwgdV9pbnQgdik7Cit1X2xvbmcJYXRvbWljX2ZldGNoYWRkX2xvbmcodm9sYXRp
bGUgdV9sb25nICpwLCB1X2xvbmcgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRzZXRfaW50KHZvbGF0
aWxlIHVfaW50ICpwLCB1X2ludCB2KTsKK2ludAlhdG9taWNfdGVzdGFuZHNldF9sb25nKHZvbGF0
aWxlIHVfbG9uZyAqcCwgdV9pbnQgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9s
YXRpbGUgdV9pbnQgKnAsIHVfaW50IHYpOworaW50CWF0b21pY190ZXN0YW5kY2xlYXJfbG9uZyh2
b2xhdGlsZSB1X2xvbmcgKnAsIHVfaW50IHYpOwordm9pZAlhdG9taWNfdGhyZWFkX2ZlbmNlX2Fj
cSh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpOwordm9pZAlh
dG9taWNfdGhyZWFkX2ZlbmNlX3JlbCh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9z
ZXFfY3N0KHZvaWQpOworCisjZGVmaW5lCUFUT01JQ19MT0FEKFRZUEUpCQkJCQlcCit1XyMjVFlQ
RQlhdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpwKQorI2RlZmluZQlB
VE9NSUNfU1RPUkUoVFlQRSkJCQkJCVwKK3ZvaWQJCWF0b21pY19zdG9yZV9yZWxfIyNUWVBFKHZv
bGF0aWxlIHVfIyNUWVBFICpwLCB1XyMjVFlQRSB2KQorCisjZWxzZSAvKiAhS0xEX01PRFVMRSAm
JiBfX0dOVUNMSUtFX0FTTSAqLworCisvKgorICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxv
Y2sgcHJlZml4ZXMgc28gdGhhdCB0aGUgYmluYXJpZXMgd2lsbCBydW4KKyAqIG9uIGJvdGggU01Q
IGFuZCAhU01QIHN5c3RlbXMuCisgKi8KKyNpZiBkZWZpbmVkKFNNUCkgfHwgIWRlZmluZWQoX0tF
Uk5FTCkKKyNkZWZpbmUJTVBMT0NLRUQJImxvY2sgOyAiCisjZWxzZQorI2RlZmluZQlNUExPQ0tF
RAorI2VuZGlmCisKKy8qCisgKiBUaGUgYXNzZW1ibHkgaXMgdm9sYXRpbGl6ZWQgdG8gYXZvaWQg
Y29kZSBjaHVuayByZW1vdmFsIGJ5IHRoZSBjb21waWxlci4KKyAqIEdDQyBhZ2dyZXNzaXZlbHkg
cmVvcmRlcnMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGNsb2JiZXJpbmcgaXMgbmVjZXNzYXJ5Cisg
KiBpbiBvcmRlciB0byBhdm9pZCB0aGF0IGZvciBtZW1vcnkgYmFycmllcnMuCisgKi8KKyNkZWZp
bmUJQVRPTUlDX0FTTShOQU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCVwKK3N0YXRpYyBfX2lubGlu
ZSB2b2lkCQkJCQlcCithdG9taWNfIyNOQU1FIyNfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpw
LCB1XyMjVFlQRSB2KVwKK3sJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoTVBMT0NLRUQgT1AJ
CQlcCisJOiAiK20iICgqcCkJCQkJCVwKKwk6IENPTlMgKFYpCQkJCQlcCisJOiAiY2MiKTsJCQkJ
CVwKK30JCQkJCQkJXAorCQkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQlcCithdG9t
aWNfIyNOQU1FIyNfYmFycl8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYp
XAorewkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZShNUExPQ0tFRCBPUAkJCVwKKwk6ICIrbSIg
KCpwKQkJCQkJXAorCTogQ09OUyAoVikJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAor
fQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgc2V0
LCB1c2VkIGJ5IHRoZSBtdXRleCBmdW5jdGlvbnMKKyAqCisgKiBpZiAoKmRzdCA9PSBleHBlY3Qp
ICpkc3QgPSBzcmMgKGFsbCAzMiBiaXQgd29yZHMpCisgKgorICogUmV0dXJucyAwIG9uIGZhaWx1
cmUsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t
aWNfY21wc2V0X2ludCh2b2xhdGlsZSB1X2ludCAqZHN0LCB1X2ludCBleHBlY3QsIHVfaW50IHNy
YykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQg
IgkJIgorCSIJY21weGNoZ2wgJTMsJTEgOwkiCisJIiAgICAgICBzZXRlCSUwIDsJCSIKKwkiIyBh
dG9taWNfY21wc2V0X2ludCIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKmRz
dCksCQkJLyogMSAqLworCSAgIithIiAoZXhwZWN0KQkJCS8qIDIgKi8KKwk6ICJyIiAoc3JjKQkJ
CS8qIDMgKi8KKwk6ICJtZW1vcnkiLCAiY2MiKTsKKwlyZXR1cm4gKHJlcyk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSBpbnQKK2F0b21pY19jbXBzZXRfbG9uZyh2b2xhdGlsZSB1X2xvbmcgKmRzdCwg
dV9sb25nIGV4cGVjdCwgdV9sb25nIHNyYykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192
b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJY21weGNoZ3EgJTMsJTEgOwkiCisJIiAg
ICAgICBzZXRlCSUwIDsJCSIKKwkiIyBhdG9taWNfY21wc2V0X2xvbmciCisJOiAiPXEiIChyZXMp
LAkJCS8qIDAgKi8KKwkgICIrbSIgKCpkc3QpLAkJCS8qIDEgKi8KKwkgICIrYSIgKGV4cGVjdCkJ
CQkvKiAyICovCisJOiAiciIgKHNyYykJCQkvKiAzICovCisJOiAibWVtb3J5IiwgImNjIik7CisJ
cmV0dXJuIChyZXMpOworfQorCisvKgorICogQXRvbWljYWxseSBhZGQgdGhlIHZhbHVlIG9mIHYg
dG8gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBwIGFuZCByZXR1cm4KKyAqIHRoZSBwcmV2aW91
cyB2YWx1ZSBvZiAqcC4KKyAqLworc3RhdGljIF9faW5saW5lIHVfaW50CithdG9taWNfZmV0Y2hh
ZGRfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGls
ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJeGFkZGwJJTAsJTEgOwkJIgorCSIjIGF0b21pY19m
ZXRjaGFkZF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAx
ICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7Cit9CisKKy8qCisgKiBBdG9taWNhbGx5IGFk
ZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUgbG9uZyBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQg
cmV0dXJuCisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KK3N0YXRpYyBfX2lubGlu
ZSB1X2xvbmcKK2F0b21pY19mZXRjaGFkZF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25n
IHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgl4YWRk
cQklMCwlMSA7CQkiCisJIiMgYXRvbWljX2ZldGNoYWRkX2xvbmciCisJOiAiK3IiICh2KSwJCQkv
KiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7
Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK2F0b21pY190ZXN0YW5kc2V0X2ludCh2b2xhdGls
ZSB1X2ludCAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGls
ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzbAklMiwlMSA7CQkiCisJIglzZXRjCSUwIDsJ
CSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAgKi8K
KwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLworCTog
ImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9taWNf
dGVzdGFuZHNldF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIg
cmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzcQkl
MiwlMSA7CQkiCisJIglzZXRjCSUwIDsJCSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9sb25nIgor
CTogIj1xIiAocmVzKSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiAiSnIi
ICgodV9sb25nKSh2ICYgMHgzZikpCS8qIDIgKi8KKwk6ICJjYyIpOworCXJldHVybiAocmVzKTsK
K30KKworc3RhdGljIF9faW5saW5lIGludAorYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9sYXRp
bGUgdV9pbnQgKnAsIHVfaW50IHYpCit7CisJdV9jaGFyIHJlczsKKworCV9fYXNtIF9fdm9sYXRp
bGUoCisJIgkiIE1QTE9DS0VEICIJCSIKKwkiCWJ0cmwJJTIsJTEgOwkJIgorCSIJc2V0YwklMCA7
CQkiCisJIiMgYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAg
Ki8KKwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLwor
CTogImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t
aWNfdGVzdGFuZGNsZWFyX2xvbmcodm9sYXRpbGUgdV9sb25nICpwLCB1X2ludCB2KQoreworCXVf
Y2hhciByZXM7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgli
dHJxCSUyLCUxIDsJCSIKKwkiCXNldGMJJTAgOwkJIgorCSIjIGF0b21pY190ZXN0YW5kY2xlYXJf
bG9uZyIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKnApCQkJLyogMSAqLwor
CTogIkpyIiAoKHVfbG9uZykodiAmIDB4M2YpKQkvKiAyICovCisJOiAiY2MiKTsKKwlyZXR1cm4g
KHJlcyk7Cit9CisKKy8qCisgKiBXZSBhc3N1bWUgdGhhdCBhID0gYiB3aWxsIGRvIGF0b21pYyBs
b2FkcyBhbmQgc3RvcmVzLiAgRHVlIHRvIHRoZQorICogSUEzMiBtZW1vcnkgbW9kZWwsIGEgc2lt
cGxlIHN0b3JlIGd1YXJhbnRlZXMgcmVsZWFzZSBzZW1hbnRpY3MuCisgKgorICogSG93ZXZlciwg
YSBsb2FkIG1heSBwYXNzIGEgc3RvcmUgaWYgdGhleSBhcmUgcGVyZm9ybWVkIG9uIGRpc3RpbmN0
CisgKiBhZGRyZXNzZXMsIHNvIHdlIG5lZWQgYSBTdG9yZS9Mb2FkIGJhcnJpZXIgZm9yIHNlcXVl
bnRpYWxseQorICogY29uc2lzdGVudCBmZW5jZXMgaW4gU01QIGtlcm5lbHMuICBXZSB1c2UgImxv
Y2sgYWRkbCAkMCxtZW0iIGZvciBhCisgKiBTdG9yZS9Mb2FkIGJhcnJpZXIsIGFzIHJlY29tbWVu
ZGVkIGJ5IHRoZSBBTUQgU29mdHdhcmUgT3B0aW1pemF0aW9uCisgKiBHdWlkZSwgYW5kIG5vdCBt
ZmVuY2UuICBUbyBhdm9pZCBmYWxzZSBkYXRhIGRlcGVuZGVuY2llcywgd2UgdXNlIGEKKyAqIHNw
ZWNpYWwgYWRkcmVzcyBmb3IgIm1lbSIuICBJbiB0aGUga2VybmVsLCB3ZSB1c2UgYSBwcml2YXRl
IHBlci1jcHUKKyAqIGNhY2hlIGxpbmUuICBJbiB1c2VyIHNwYWNlLCB3ZSB1c2UgYSB3b3JkIGlu
IHRoZSBzdGFjaydzIHJlZCB6b25lCisgKiAoLTgoJXJzcCkpLgorICoKKyAqIEZvciBVUCBrZXJu
ZWxzLCBob3dldmVyLCB0aGUgbWVtb3J5IG9mIHRoZSBzaW5nbGUgcHJvY2Vzc29yIGlzCisgKiBh
bHdheXMgY29uc2lzdGVudCwgc28gd2Ugb25seSBuZWVkIHRvIHN0b3AgdGhlIGNvbXBpbGVyIGZy
b20KKyAqIHJlb3JkZXJpbmcgYWNjZXNzZXMgaW4gYSB3YXkgdGhhdCB2aW9sYXRlcyB0aGUgc2Vt
YW50aWNzIG9mIGFjcXVpcmUKKyAqIGFuZCByZWxlYXNlLgorICovCisKKyNpZiBkZWZpbmVkKF9L
RVJORUwpCisKKy8qCisgKiBPRkZTRVRPRl9NT05JVE9SQlVGID09IF9fcGNwdV9vZmZzZXQocGNf
bW9uaXRvcmJ1ZikuCisgKgorICogVGhlIG9wZW4tY29kZWQgbnVtYmVyIGlzIHVzZWQgaW5zdGVh
ZCBvZiB0aGUgc3ltYm9saWMgZXhwcmVzc2lvbiB0bworICogYXZvaWQgYSBkZXBlbmRlbmN5IG9u
IHN5cy9wY3B1LmggaW4gbWFjaGluZS9hdG9taWMuaCBjb25zdW1lcnMuCisgKiBBbiBhc3NlcnRp
b24gaW4gYW1kNjQvdm1fbWFjaGRlcC5jIGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgaXMgY29ycmVj
dC4KKyAqLworI2RlZmluZQlPRkZTRVRPRl9NT05JVE9SQlVGCTB4MTgwCisKKyNpZiBkZWZpbmVk
KFNNUCkKK3N0YXRpYyBfX2lubGluZSB2b2lkCitfX3N0b3JlbG9hZF9iYXJyaWVyKHZvaWQpCit7
CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLCUlZ3M6JTAiCisJICAgIDogIitt
IiAoKih1X2ludCAqKU9GRlNFVE9GX01PTklUT1JCVUYpIDogOiAibWVtb3J5IiwgImNjIik7Cit9
CisjZWxzZSAvKiBfS0VSTkVMICYmIFVQICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAorX19zdG9y
ZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19jb21waWxlcl9tZW1iYXIoKTsKK30KKyNlbmRp
ZiAvKiBTTVAgKi8KKyNlbHNlIC8qICFfS0VSTkVMICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
X19zdG9yZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibG9jazsg
YWRkbCAkMCwtOCglJXJzcCkiIDogOiA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKyNlbmRpZiAvKiBf
S0VSTkVMKi8KKworI2RlZmluZQlBVE9NSUNfTE9BRChUWVBFKQkJCQkJXAorc3RhdGljIF9faW5s
aW5lIHVfIyNUWVBFCQkJCQlcCithdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNU
WVBFICpwKQkJCVwKK3sJCQkJCQkJCVwKKwl1XyMjVFlQRSByZXM7CQkJCQkJXAorCQkJCQkJCQlc
CisJcmVzID0gKnA7CQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJcmV0dXJu
IChyZXMpOwkJCQkJCVwKK30JCQkJCQkJCVwKK3N0cnVjdCBfX2hhY2sKKworI2RlZmluZQlBVE9N
SUNfU1RPUkUoVFlQRSkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQkJXAorYXRvbWlj
X3N0b3JlX3JlbF8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpCVwKK3sJ
CQkJCQkJCVwKKwkJCQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJKnAgPSB2
OwkJCQkJCQlcCit9CQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKK3N0YXRpYyBfX2lubGluZSB2
b2lkCithdG9taWNfdGhyZWFkX2ZlbmNlX2FjcSh2b2lkKQoreworCisJX19jb21waWxlcl9tZW1i
YXIoKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2VfcmVs
KHZvaWQpCit7CisKKwlfX2NvbXBpbGVyX21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUg
dm9pZAorYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpCit7CisKKwlfX2NvbXBpbGVy
X21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX3RocmVhZF9mZW5j
ZV9zZXFfY3N0KHZvaWQpCit7CisKKwlfX3N0b3JlbG9hZF9iYXJyaWVyKCk7Cit9CisKKyNlbmRp
ZiAvKiBLTERfTU9EVUxFIHx8ICFfX0dOVUNMSUtFX0FTTSAqLworCitBVE9NSUNfQVNNKHNldCwJ
ICAgICBjaGFyLCAgIm9yYiAlYjEsJTAiLCAgImlxIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwg
ICAgY2hhciwgICJhbmRiICViMSwlMCIsICJpcSIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAg
IGNoYXIsICAiYWRkYiAlYjEsJTAiLCAiaXEiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBj
aGFyLCAgInN1YmIgJWIxLCUwIiwgImlxIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBz
aG9ydCwgIm9ydyAldzEsJTAiLCAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgc2hv
cnQsICJhbmR3ICV3MSwlMCIsICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIHNob3J0
LCAiYWRkdyAldzEsJTAiLCAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBzaG9ydCwg
InN1YncgJXcxLCUwIiwgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBpbnQsICAg
Im9ybCAlMSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgaW50LCAgICJh
bmRsICUxLCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGludCwgICAiYWRk
bCAlMSwlMCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBpbnQsICAgInN1Ymwg
JTEsJTAiLCAgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBsb25nLCAgIm9ycSAl
MSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgbG9uZywgICJhbmRxICUx
LCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGxvbmcsICAiYWRkcSAlMSwl
MCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBsb25nLCAgInN1YnEgJTEsJTAi
LCAgImlyIiwgIHYpOworCisjZGVmaW5lCUFUT01JQ19MT0FEU1RPUkUoVFlQRSkJCQkJCVwKKwlB
VE9NSUNfTE9BRChUWVBFKTsJCQkJCVwKKwlBVE9NSUNfU1RPUkUoVFlQRSkKKworQVRPTUlDX0xP
QURTVE9SRShjaGFyKTsKK0FUT01JQ19MT0FEU1RPUkUoc2hvcnQpOworQVRPTUlDX0xPQURTVE9S
RShpbnQpOworQVRPTUlDX0xPQURTVE9SRShsb25nKTsKKworI3VuZGVmIEFUT01JQ19BU00KKyN1
bmRlZiBBVE9NSUNfTE9BRAorI3VuZGVmIEFUT01JQ19TVE9SRQorI3VuZGVmIEFUT01JQ19MT0FE
U1RPUkUKKyNpZm5kZWYgV0FOVF9GVU5DVElPTlMKKworLyogUmVhZCB0aGUgY3VycmVudCB2YWx1
ZSBhbmQgc3RvcmUgYSBuZXcgdmFsdWUgaW4gdGhlIGRlc3RpbmF0aW9uLiAqLworI2lmZGVmIF9f
R05VQ0xJS0VfQVNNCisKK3N0YXRpYyBfX2lubGluZSB1X2ludAorYXRvbWljX3N3YXBfaW50KHZv
bGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGlsZSgKKwkiCXhj
aGdsCSUxLCUwIDsJCSIKKwkiIyBhdG9taWNfc3dhcF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAw
ICovCisJICAiK20iICgqcCkpOwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCitzdGF0aWMg
X19pbmxpbmUgdV9sb25nCithdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9s
b25nIHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJeGNoZ3EJJTEsJTAgOwkJIgorCSIj
IGF0b21pY19zd2FwX2xvbmciCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkp
OwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCisjZWxzZSAvKiAhX19HTlVDTElLRV9BU00g
Ki8KKwordV9pbnQJYXRvbWljX3N3YXBfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KTsK
K3VfbG9uZwlhdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25nIHYpOwor
CisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9j
aGFyCQlhdG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9jaGFyCQlh
dG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2NoYXIJCWF0b21p
Y19jbGVhcl9iYXJyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9jaGFyCQlhdG9taWNf
Y2xlYXJfYmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2NoYXIJCWF0b21pY19hZGRf
YmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfcmVsX2NoYXIJCWF0b21pY19hZGRfYmFycl9j
aGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfY2hhcglhdG9taWNfc3VidHJhY3RfYmFy
cl9jaGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfY2hhcglhdG9taWNfc3VidHJhY3Rf
YmFycl9jaGFyCisKKyNkZWZpbmUJYXRvbWljX3NldF9hY3Ffc2hvcnQJCWF0b21pY19zZXRfYmFy
cl9zaG9ydAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9zaG9ydAkJYXRvbWljX3NldF9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3Ffc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX3Nob3J0CQlhdG9taWNfYWRkX2JhcnJfc2hvcnQK
KyNkZWZpbmUJYXRvbWljX2FkZF9yZWxfc2hvcnQJCWF0b21pY19hZGRfYmFycl9zaG9ydAorI2Rl
ZmluZQlhdG9taWNfc3VidHJhY3RfYWNxX3Nob3J0CWF0b21pY19zdWJ0cmFjdF9iYXJyX3Nob3J0
CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfc2hvcnQJYXRvbWljX3N1YnRyYWN0X2JhcnJf
c2hvcnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9pbnQJCWF0b21pY19zZXRfYmFycl9pbnQK
KyNkZWZpbmUJYXRvbWljX3NldF9yZWxfaW50CQlhdG9taWNfc2V0X2JhcnJfaW50CisjZGVmaW5l
CWF0b21pY19jbGVhcl9hY3FfaW50CQlhdG9taWNfY2xlYXJfYmFycl9pbnQKKyNkZWZpbmUJYXRv
bWljX2NsZWFyX3JlbF9pbnQJCWF0b21pY19jbGVhcl9iYXJyX2ludAorI2RlZmluZQlhdG9taWNf
YWRkX2FjcV9pbnQJCWF0b21pY19hZGRfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX2FkZF9yZWxf
aW50CQlhdG9taWNfYWRkX2JhcnJfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfaW50
CQlhdG9taWNfc3VidHJhY3RfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X3JlbF9p
bnQJCWF0b21pY19zdWJ0cmFjdF9iYXJyX2ludAorI2RlZmluZQlhdG9taWNfY21wc2V0X2FjcV9p
bnQJCWF0b21pY19jbXBzZXRfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsX2ludAkJYXRv
bWljX2NtcHNldF9pbnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9sb25nCQlhdG9taWNfc2V0
X2JhcnJfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9sb25nCQlhdG9taWNfc2V0X2JhcnJf
bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2xvbmcJCWF0b21pY19jbGVhcl9iYXJyX2xv
bmcKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9sb25nCQlhdG9taWNfY2xlYXJfYmFycl9sb25n
CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVm
aW5lCWF0b21pY19hZGRfcmVsX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVmaW5lCWF0
b21pY19zdWJ0cmFjdF9hY3FfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVmaW5l
CWF0b21pY19zdWJ0cmFjdF9yZWxfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVm
aW5lCWF0b21pY19jbXBzZXRfYWNxX2xvbmcJCWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlh
dG9taWNfY21wc2V0X3JlbF9sb25nCQlhdG9taWNfY21wc2V0X2xvbmcKKworI2RlZmluZQlhdG9t
aWNfcmVhZGFuZGNsZWFyX2ludChwKQlhdG9taWNfc3dhcF9pbnQocCwgMCkKKyNkZWZpbmUJYXRv
bWljX3JlYWRhbmRjbGVhcl9sb25nKHApCWF0b21pY19zd2FwX2xvbmcocCwgMCkKKworLyogT3Bl
cmF0aW9ucyBvbiA4LWJpdCBieXRlcy4gKi8KKyNkZWZpbmUJYXRvbWljX3NldF84CQlhdG9taWNf
c2V0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfOAlhdG9taWNfc2V0X2FjcV9jaGFyCisj
ZGVmaW5lCWF0b21pY19zZXRfcmVsXzgJYXRvbWljX3NldF9yZWxfY2hhcgorI2RlZmluZQlhdG9t
aWNfY2xlYXJfOAkJYXRvbWljX2NsZWFyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX2FjcV84
CWF0b21pY19jbGVhcl9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfcmVsXzgJYXRvbWlj
X2NsZWFyX3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfOAkJYXRvbWljX2FkZF9jaGFyCisj
ZGVmaW5lCWF0b21pY19hZGRfYWNxXzgJYXRvbWljX2FkZF9hY3FfY2hhcgorI2RlZmluZQlhdG9t
aWNfYWRkX3JlbF84CWF0b21pY19hZGRfcmVsX2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0
XzgJYXRvbWljX3N1YnRyYWN0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV84CWF0
b21pY19zdWJ0cmFjdF9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsXzgJYXRv
bWljX3N1YnRyYWN0X3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV84CWF0b21pY19s
b2FkX2FjcV9jaGFyCisjZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfOAlhdG9taWNfc3RvcmVfcmVs
X2NoYXIKKworLyogT3BlcmF0aW9ucyBvbiAxNi1iaXQgd29yZHMuICovCisjZGVmaW5lCWF0b21p
Y19zZXRfMTYJCWF0b21pY19zZXRfc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfMTYJYXRv
bWljX3NldF9hY3Ffc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxfMTYJYXRvbWljX3NldF9y
ZWxfc2hvcnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyXzE2CQlhdG9taWNfY2xlYXJfc2hvcnQKKyNk
ZWZpbmUJYXRvbWljX2NsZWFyX2FjcV8xNglhdG9taWNfY2xlYXJfYWNxX3Nob3J0CisjZGVmaW5l
CWF0b21pY19jbGVhcl9yZWxfMTYJYXRvbWljX2NsZWFyX3JlbF9zaG9ydAorI2RlZmluZQlhdG9t
aWNfYWRkXzE2CQlhdG9taWNfYWRkX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxXzE2CWF0
b21pY19hZGRfYWNxX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzE2CWF0b21pY19hZGRf
cmVsX3Nob3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF8xNglhdG9taWNfc3VidHJhY3Rfc2hv
cnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV8xNglhdG9taWNfc3VidHJhY3RfYWNxX3No
b3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfMTYJYXRvbWljX3N1YnRyYWN0X3JlbF9z
aG9ydAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3FfMTYJYXRvbWljX2xvYWRfYWNxX3Nob3J0Cisj
ZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfMTYJYXRvbWljX3N0b3JlX3JlbF9zaG9ydAorCisvKiBP
cGVyYXRpb25zIG9uIDMyLWJpdCBkb3VibGUgd29yZHMuICovCisjZGVmaW5lCWF0b21pY19zZXRf
MzIJCWF0b21pY19zZXRfaW50CisjZGVmaW5lCWF0b21pY19zZXRfYWNxXzMyCWF0b21pY19zZXRf
YWNxX2ludAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF8zMglhdG9taWNfc2V0X3JlbF9pbnQKKyNk
ZWZpbmUJYXRvbWljX2NsZWFyXzMyCQlhdG9taWNfY2xlYXJfaW50CisjZGVmaW5lCWF0b21pY19j
bGVhcl9hY3FfMzIJYXRvbWljX2NsZWFyX2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3Jl
bF8zMglhdG9taWNfY2xlYXJfcmVsX2ludAorI2RlZmluZQlhdG9taWNfYWRkXzMyCQlhdG9taWNf
YWRkX2ludAorI2RlZmluZQlhdG9taWNfYWRkX2FjcV8zMglhdG9taWNfYWRkX2FjcV9pbnQKKyNk
ZWZpbmUJYXRvbWljX2FkZF9yZWxfMzIJYXRvbWljX2FkZF9yZWxfaW50CisjZGVmaW5lCWF0b21p
Y19zdWJ0cmFjdF8zMglhdG9taWNfc3VidHJhY3RfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFj
dF9hY3FfMzIJYXRvbWljX3N1YnRyYWN0X2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0
X3JlbF8zMglhdG9taWNfc3VidHJhY3RfcmVsX2ludAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3Ff
MzIJYXRvbWljX2xvYWRfYWNxX2ludAorI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzMyCWF0b21p
Y19zdG9yZV9yZWxfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfMzIJYXRvbWljX2NtcHNldF9p
bnQKKyNkZWZpbmUJYXRvbWljX2NtcHNldF9hY3FfMzIJYXRvbWljX2NtcHNldF9hY3FfaW50Cisj
ZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsXzMyCWF0b21pY19jbXBzZXRfcmVsX2ludAorI2RlZmlu
ZQlhdG9taWNfc3dhcF8zMgkJYXRvbWljX3N3YXBfaW50CisjZGVmaW5lCWF0b21pY19yZWFkYW5k
Y2xlYXJfMzIJYXRvbWljX3JlYWRhbmRjbGVhcl9pbnQKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRk
XzMyCWF0b21pY19mZXRjaGFkZF9pbnQKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRzZXRfMzIJYXRv
bWljX3Rlc3RhbmRzZXRfaW50CisjZGVmaW5lCWF0b21pY190ZXN0YW5kY2xlYXJfMzIJYXRvbWlj
X3Rlc3RhbmRjbGVhcl9pbnQKKworLyogT3BlcmF0aW9ucyBvbiA2NC1iaXQgcXVhZCB3b3Jkcy4g
Ki8KKyNkZWZpbmUJYXRvbWljX3NldF82NAkJYXRvbWljX3NldF9sb25nCisjZGVmaW5lCWF0b21p
Y19zZXRfYWNxXzY0CWF0b21pY19zZXRfYWNxX2xvbmcKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxf
NjQJYXRvbWljX3NldF9yZWxfbG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfNjQJCWF0b21pY19j
bGVhcl9sb25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3FfNjQJYXRvbWljX2NsZWFyX2FjcV9s
b25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfNjQJYXRvbWljX2NsZWFyX3JlbF9sb25nCisj
ZGVmaW5lCWF0b21pY19hZGRfNjQJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRk
X2FjcV82NAlhdG9taWNfYWRkX2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzY0CWF0
b21pY19hZGRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0XzY0CWF0b21pY19zdWJ0
cmFjdF9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfNjQJYXRvbWljX3N1YnRyYWN0
X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfNjQJYXRvbWljX3N1YnRyYWN0
X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV82NAlhdG9taWNfbG9hZF9hY3FfbG9u
ZworI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzY0CWF0b21pY19zdG9yZV9yZWxfbG9uZworI2Rl
ZmluZQlhdG9taWNfY21wc2V0XzY0CWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlhdG9taWNf
Y21wc2V0X2FjcV82NAlhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBz
ZXRfcmVsXzY0CWF0b21pY19jbXBzZXRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N3YXBfNjQJ
CWF0b21pY19zd2FwX2xvbmcKKyNkZWZpbmUJYXRvbWljX3JlYWRhbmRjbGVhcl82NAlhdG9taWNf
cmVhZGFuZGNsZWFyX2xvbmcKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRkXzY0CWF0b21pY19mZXRj
aGFkZF9sb25nCisjZGVmaW5lCWF0b21pY190ZXN0YW5kc2V0XzY0CWF0b21pY190ZXN0YW5kc2V0
X2xvbmcKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRjbGVhcl82NAlhdG9taWNfdGVzdGFuZGNsZWFy
X2xvbmcKKworLyogT3BlcmF0aW9ucyBvbiBwb2ludGVycy4gKi8KKyNkZWZpbmUJYXRvbWljX3Nl
dF9wdHIJCWF0b21pY19zZXRfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9wdHIJYXRvbWlj
X3NldF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9wdHIJYXRvbWljX3NldF9yZWxf
bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfcHRyCWF0b21pY19jbGVhcl9sb25nCisjZGVmaW5l
CWF0b21pY19jbGVhcl9hY3FfcHRyCWF0b21pY19jbGVhcl9hY3FfbG9uZworI2RlZmluZQlhdG9t
aWNfY2xlYXJfcmVsX3B0cglhdG9taWNfY2xlYXJfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX2Fk
ZF9wdHIJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX2FjcV9wdHIJYXRvbWlj
X2FkZF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX3JlbF9wdHIJYXRvbWljX2FkZF9yZWxf
bG9uZworI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcHRyCWF0b21pY19zdWJ0cmFjdF9sb25nCisj
ZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfcHRyCWF0b21pY19zdWJ0cmFjdF9hY3FfbG9uZwor
I2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsX3B0cglhdG9taWNfc3VidHJhY3RfcmVsX2xvbmcK
KyNkZWZpbmUJYXRvbWljX2xvYWRfYWNxX3B0cglhdG9taWNfbG9hZF9hY3FfbG9uZworI2RlZmlu
ZQlhdG9taWNfc3RvcmVfcmVsX3B0cglhdG9taWNfc3RvcmVfcmVsX2xvbmcKKyNkZWZpbmUJYXRv
bWljX2NtcHNldF9wdHIJYXRvbWljX2NtcHNldF9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRf
YWNxX3B0cglhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVs
X3B0cglhdG9taWNfY21wc2V0X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19zd2FwX3B0cgkJYXRv
bWljX3N3YXBfbG9uZworI2RlZmluZQlhdG9taWNfcmVhZGFuZGNsZWFyX3B0cglhdG9taWNfcmVh
ZGFuZGNsZWFyX2xvbmcKKworI2VuZGlmIC8qICFXQU5UX0ZVTkNUSU9OUyAqLworCisjZW5kaWYg
LyogIV9NQUNISU5FX0FUT01JQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvYnVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzLmgJMTk3
MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2J1cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21h
aW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9idXMu
aCAyNDQxOTEgMjAxMi0xMi0xMyAyMToyNzoyMFogamltaGFycmlzICQgKi8KKworI2luY2x1ZGUg
PHg4Ni9idXMuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9idXNfZG1h
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzX2RtYS5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9idXNfZG1hLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAx
MDAKQEAgLTAsMCArMSwzNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2NvdHQgTG9u
ZworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz
L2FtZDY0L2luY2x1ZGUvYnVzX2RtYS5oIDE0ODI3NSAyMDA1LTA3LTIyIDA0OjAzOjI1WiBvYnJp
ZW4gJAorICovCisKKyNpZm5kZWYgX0FNRDY0X0JVU19ETUFfSF8KKyNkZWZpbmUgX0FNRDY0X0JV
U19ETUFfSF8KKworI2luY2x1ZGUgPHN5cy9idXNfZG1hLmg+CisKKyNlbmRpZiAvKiBfQU1ENjRf
QlVTX0RNQV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvY2xvY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jbG9jay5o
Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Nsb2NrLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2Nsb2NrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NSBAQAorLyotCisgKiBLZXJuZWwgaW50ZXJmYWNlIHRvIG1hY2hpbmUtZGVwZW5k
ZW50IGNsb2NrIGRyaXZlci4KKyAqIEdhcnJldHQgV29sbG1hbiwgU2VwdGVtYmVyIDE5OTQuCisg
KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKgorICogJEZyZWVCU0Q6IHJl
bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2Nsb2NrLmggMjYzMDA4IDIwMTQtMDMtMTEgMTA6
MjA6NDJaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9DTE9DS19IXworI2RlZmlu
ZQlfTUFDSElORV9DTE9DS19IXworCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIGkzODYgdG8gY2xv
Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqIFhYWCBsYXJnZSBwYXJ0cyBvZiB0aGUgZHJpdmVyIGFu
ZCBpdHMgaW50ZXJmYWNlIGFyZSBtaXNwbGFjZWQuCisgKi8KK2V4dGVybiBpbnQJY2xraW50cl9w
ZW5kaW5nOworZXh0ZXJuIHVfaW50CWk4MjU0X2ZyZXE7CitleHRlcm4gaW50CWk4MjU0X21heF9j
b3VudDsKK2V4dGVybiB1aW50NjRfdAl0c2NfZnJlcTsKK2V4dGVybiBpbnQJdHNjX2lzX2ludmFy
aWFudDsKK2V4dGVybiBpbnQJdHNjX3BlcmZfc3RhdDsKKyNpZmRlZiBTTVAKK2V4dGVybiBpbnQJ
c21wX3RzYzsKKyNlbmRpZgorCit2b2lkCWk4MjU0X2luaXQodm9pZCk7Cit2b2lkCWk4MjU0X2Rl
bGF5KGludCk7Cit2b2lkCWNsb2NrX2luaXQodm9pZCk7CisKKy8qCisgKiBEcml2ZXIgdG8gY2xv
Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqLworCit2b2lkCXN0YXJ0cnRjbG9jayh2b2lkKTsKK3Zv
aWQJaW5pdF9UU0Modm9pZCk7CisKKyNkZWZpbmUJSEFTX1RJTUVSX1NQS1IgMQoraW50CXRpbWVy
X3Nwa3JfYWNxdWlyZSh2b2lkKTsKK2ludAl0aW1lcl9zcGtyX3JlbGVhc2Uodm9pZCk7Cit2b2lk
CXRpbWVyX3Nwa3Jfc2V0ZnJlcShpbnQgZnJlcSk7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK
KyNlbmRpZiAvKiAhX01BQ0hJTkVfQ0xPQ0tfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NvdW50ZXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9jb3VudGVyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvY291bnRlci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jb3VudGVyLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIgS29uc3RhbnRpbiBCZWxvdXNvdiA8a2liQEZyZWVCU0Qub3JnPgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvY291bnRlci5oIDMwMjM3MiAyMDE2LTA3LTA2IDE0OjA5OjQ5WiBud2hpdGVob3JuICQK
KyAqLworCisjaWZuZGVmIF9fTUFDSElORV9DT1VOVEVSX0hfXworI2RlZmluZSBfX01BQ0hJTkVf
Q09VTlRFUl9IX18KKworI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisKK2V4dGVybiBzdHJ1Y3QgcGNw
dSBfX3BjcHVbMV07CisKKyNkZWZpbmUJY291bnRlcl9lbnRlcigpCWRvIHt9IHdoaWxlICgwKQor
I2RlZmluZQljb3VudGVyX2V4aXQoKQlkbyB7fSB3aGlsZSAoMCkKKworI2lmZGVmIElOX1NVQlJf
Q09VTlRFUl9DCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Citjb3VudGVyX3U2NF9yZWFkX29uZSh1
aW50NjRfdCAqcCwgaW50IGNwdSkKK3sKKworCXJldHVybiAoKih1aW50NjRfdCAqKSgoY2hhciAq
KXAgKyBzaXplb2Yoc3RydWN0IHBjcHUpICogY3B1KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu
dDY0X3QKK2NvdW50ZXJfdTY0X2ZldGNoX2lubGluZSh1aW50NjRfdCAqcCkKK3sKKwl1aW50NjRf
dCByOworCWludCBpOworCisJciA9IDA7CisJQ1BVX0ZPUkVBQ0goaSkKKwkJciArPSBjb3VudGVy
X3U2NF9yZWFkX29uZSgodWludDY0X3QgKilwLCBpKTsKKworCXJldHVybiAocik7Cit9CisKK3N0
YXRpYyB2b2lkCitjb3VudGVyX3U2NF96ZXJvX29uZV9jcHUodm9pZCAqYXJnKQoreworCisJKigo
dWludDY0X3QgKikoKGNoYXIgKilhcmcgKyBzaXplb2Yoc3RydWN0IHBjcHUpICoKKwkgICAgUENQ
VV9HRVQoY3B1aWQpKSkgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvdW50ZXJfdTY0
X3plcm9faW5saW5lKGNvdW50ZXJfdTY0X3QgYykKK3sKKworCXNtcF9yZW5kZXp2b3VzKHNtcF9u
b19yZW5kZXZvdXNfYmFycmllciwgY291bnRlcl91NjRfemVyb19vbmVfY3B1LAorCSAgICBzbXBf
bm9fcmVuZGV2b3VzX2JhcnJpZXIsIGMpOworfQorI2VuZGlmCisKKyNkZWZpbmUJY291bnRlcl91
NjRfYWRkX3Byb3RlY3RlZChjLCBpKQljb3VudGVyX3U2NF9hZGQoYywgaSkKKworc3RhdGljIGlu
bGluZSB2b2lkCitjb3VudGVyX3U2NF9hZGQoY291bnRlcl91NjRfdCBjLCBpbnQ2NF90IGluYykK
K3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImFkZHFcdCUxLCUlZ3M6KCUwKSIKKwkgICAgOgorCSAg
ICA6ICJyIiAoKGNoYXIgKiljIC0gKGNoYXIgKikmX19wY3B1WzBdKSwgInJpIiAoaW5jKQorCSAg
ICA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworI2VuZGlmCS8qICEgX19NQUNISU5FX0NPVU5URVJf
SF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9j
cHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAotLS0gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw
MDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5MyBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2Rl
IGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICog
V2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBV
bml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZy
b206IEAoIyljcHUuaAk1LjQgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcv
MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaCAyNjc1MjYgMjAxNC0wNi0xNiAwODo0MzowM1og
cm95Z2VyICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0NQVV9IXworI2RlZmluZQlfTUFDSElO
RV9DUFVfSF8KKworLyoKKyAqIERlZmluaXRpb25zIHVuaXF1ZSB0byBpMzg2IGNwdSBzdXBwb3J0
LgorICovCisjaW5jbHVkZSA8bWFjaGluZS9wc2wuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1l
Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZWdtZW50cy5oPgorCisjZGVmaW5lCWNwdV9leGVjKHAp
CS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUJY3B1X3N3YXBpbihwKQkvKiBub3RoaW5nICovCisjZGVm
aW5lCWNwdV9nZXRzdGFjayh0ZCkJCSgodGQpLT50ZF9mcmFtZS0+dGZfcnNwKQorI2RlZmluZQlj
cHVfc2V0c3RhY2sodGQsIGFwKQkJKCh0ZCktPnRkX2ZyYW1lLT50Zl9yc3AgPSAoYXApKQorI2Rl
ZmluZQljcHVfc3BpbndhaXQoKQkJCWlhMzJfcGF1c2UoKQorCisjZGVmaW5lCVRSQVBGX1VTRVJN
T0RFKGZyYW1lcCkgXAorCShJU1BMKChmcmFtZXApLT50Zl9jcykgPT0gU0VMX1VQTCkKKyNkZWZp
bmUJVFJBUEZfUEMoZnJhbWVwKQkoKGZyYW1lcCktPnRmX3JpcCkKKworI2lmZGVmIF9LRVJORUwK
Ky8qCisgKiBTdHJ1Y3QgY29udGFpbmluZyBwb2ludGVycyB0byBDUFUgbWFuYWdlbWVudCBmdW5j
dGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9uIGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuICBT
ZWxlY3Rpb24gY2FuIGJlIG1hZGUsCisgKiBmb3IgZXhhbXBsZSwgYmFzZWQgb24gZGV0ZWN0aW9u
IG9mIGEgcGFydGljdWxhciBDUFUgdmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVu
dC4KKyAqLworc3RydWN0IGNwdV9vcHMgeworCXZvaWQgKCpjcHVfaW5pdCkodm9pZCk7CisJdm9p
ZCAoKmNwdV9yZXN1bWUpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdAljcHVfb3BzIGNwdV9v
cHM7CitleHRlcm4gY2hhcglidGV4dFtdOworZXh0ZXJuIGNoYXIJZXRleHRbXTsKKworLyogUmVz
dW1lIGhvb2sgZm9yIFZNTS4gKi8KK2V4dGVybgl2b2lkICgqdm1tX3Jlc3VtZV9wKSh2b2lkKTsK
Kwordm9pZAljcHVfaGFsdCh2b2lkKTsKK3ZvaWQJY3B1X3Jlc2V0KHZvaWQpOwordm9pZAlmb3Jr
X3RyYW1wb2xpbmUodm9pZCk7Cit2b2lkCXN3aV92bSh2b2lkICopOworCisvKgorICogUmV0dXJu
IGNvbnRlbnRzIG9mIGluLWNwdSBmYXN0IGNvdW50ZXIgYXMgYSBzb3J0IG9mICJib2dvLXRpbWUi
CisgKiBmb3IgcmFuZG9tLWhhcnZlc3RpbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBfX2lubGlu
ZSB1X2ludDY0X3QKK2dldF9jeWNsZWNvdW50KHZvaWQpCit7CisKKwlyZXR1cm4gKHJkdHNjKCkp
OworfQorCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdWZ1bmMuaCAvdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5jLmgKLS0tIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1ZnVuYy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5j
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NzEgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMp
IDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U
UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHVmdW5jLmggMjkxNjg4
IDIwMTUtMTItMDMgMTE6MTQ6MTRaIGtpYiAkCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBw
cm92aWRlIGFjY2VzcyB0byBzcGVjaWFsIGkzODYgaW5zdHJ1Y3Rpb25zLgorICogVGhpcyBpbiBp
bmNsdWRlZCBpbiBzeXMvc3lzdG0uaCwgYW5kIHRoYXQgZmlsZSBzaG91bGQgYmUKKyAqIHVzZWQg
aW4gcHJlZmVyZW5jZSB0byB0aGlzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVRlVOQ19I
XworI2RlZmluZQlfTUFDSElORV9DUFVGVU5DX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXwor
I2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2Vu
ZGlmCisKK3N0cnVjdCByZWdpb25fZGVzY3JpcHRvcjsKKworI2RlZmluZSByZWFkYih2YSkJKCoo
dm9sYXRpbGUgdWludDhfdCAqKSAodmEpKQorI2RlZmluZSByZWFkdyh2YSkJKCoodm9sYXRpbGUg
dWludDE2X3QgKikgKHZhKSkKKyNkZWZpbmUgcmVhZGwodmEpCSgqKHZvbGF0aWxlIHVpbnQzMl90
ICopICh2YSkpCisjZGVmaW5lIHJlYWRxKHZhKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAodmEp
KQorCisjZGVmaW5lIHdyaXRlYih2YSwgZCkJKCoodm9sYXRpbGUgdWludDhfdCAqKSAodmEpID0g
KGQpKQorI2RlZmluZSB3cml0ZXcodmEsIGQpCSgqKHZvbGF0aWxlIHVpbnQxNl90ICopICh2YSkg
PSAoZCkpCisjZGVmaW5lIHdyaXRlbCh2YSwgZCkJKCoodm9sYXRpbGUgdWludDMyX3QgKikgKHZh
KSA9IChkKSkKKyNkZWZpbmUgd3JpdGVxKHZhLCBkKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAo
dmEpID0gKGQpKQorCisjaWYgZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkgJiYgZGVmaW5lZChfX0ND
X1NVUFBPUlRTX19fSU5MSU5FKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnJlYWtwb2ludCh2
b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImludCAkMyIpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdV9pbnQKK2JzZmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAlyZXN1bHQ7CisKKwlfX2FzbSBf
X3ZvbGF0aWxlKCJic2ZsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ
cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCitic2ZxKHVfbG9u
ZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic2ZxICUx
LCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOwor
fQorCitzdGF0aWMgX19pbmxpbmUgdV9pbnQKK2JzcmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAly
ZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic3JsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkg
OiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUg
dV9sb25nCitic3JxKHVfbG9uZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBf
X3ZvbGF0aWxlKCJic3JxICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ
cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY2xmbHVzaCh1X2xv
bmcgYWRkcikKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsZmx1c2ggJTAiIDogOiAibSIgKCoo
Y2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZmx1c2hvcHQodV9s
b25nIGFkZHIpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCIuYnl0ZSAweDY2O2NsZmx1c2ggJTAi
IDogOiAibSIgKCooY2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2Ns
dHModm9pZCkKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsdHMiKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHZvaWQKK2Rpc2FibGVfaW50cih2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNs
aSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorZG9fY3B1aWQo
dV9pbnQgYXgsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgorCQkJIDog
Ij1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkKKwkJCSA6
ICAiMCIgKGF4KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjcHVpZF9jb3VudCh1X2lu
dCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgor
CQkJIDogIj1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkK
KwkJCSA6ICAiMCIgKGF4KSwgImMiIChjeCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
ZW5hYmxlX2ludHIodm9pZCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJzdGkiKTsKK30KKworI2lm
ZGVmIF9LRVJORUwKKworI2RlZmluZQlIQVZFX0lOTElORV9GRlMKKyNkZWZpbmUgICAgICAgIGZm
cyh4KSAgX19idWlsdGluX2Zmcyh4KQorCisjZGVmaW5lCUhBVkVfSU5MSU5FX0ZGU0wKKworc3Rh
dGljIF9faW5saW5lIGludAorZmZzbChsb25nIG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAg
PyBtYXNrIDogKGludClic2ZxKCh1X2xvbmcpbWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZF
X0lOTElORV9GRlNMTAorCitzdGF0aWMgX19pbmxpbmUgaW50CitmZnNsbChsb25nIGxvbmcgbWFz
aykKK3sKKwlyZXR1cm4gKGZmc2woKGxvbmcpbWFzaykpOworfQorCisjZGVmaW5lCUhBVkVfSU5M
SU5FX0ZMUworCitzdGF0aWMgX19pbmxpbmUgaW50CitmbHMoaW50IG1hc2spCit7CisJcmV0dXJu
IChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JsKCh1X2ludCltYXNrKSArIDEpOworfQorCisj
ZGVmaW5lCUhBVkVfSU5MSU5FX0ZMU0wKKworc3RhdGljIF9faW5saW5lIGludAorZmxzbChsb25n
IG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JxKCh1X2xvbmcp
bWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZFX0lOTElORV9GTFNMTAorCitzdGF0aWMgX19p
bmxpbmUgaW50CitmbHNsbChsb25nIGxvbmcgbWFzaykKK3sKKwlyZXR1cm4gKGZsc2woKGxvbmcp
bWFzaykpOworfQorCisjZW5kaWYgLyogX0tFUk5FTCAqLworCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAoraGFsdCh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImhsdCIpOworfQorCitzdGF0aWMg
X19pbmxpbmUgdV9jaGFyCitpbmIodV9pbnQgcG9ydCkKK3sKKwl1X2NoYXIJZGF0YTsKKworCV9f
YXNtIF9fdm9sYXRpbGUoImluYiAldzEsICUwIiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkp
OworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludAoraW5sKHVfaW50
IHBvcnQpCit7CisJdV9pbnQJZGF0YTsKKworCV9fYXNtIF9fdm9sYXRpbGUoImlubCAldzEsICUw
IiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0
YXRpYyBfX2lubGluZSB2b2lkCitpbnNiKHVfaW50IHBvcnQsIHZvaWQgKmFkZHIsIHNpemVfdCBj
b3VudCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgaW5zYiIKKwkJCSA6ICIrRCIg
KGFkZHIpLCAiK2MiIChjb3VudCkKKwkJCSA6ICJkIiAocG9ydCkKKwkJCSA6ICJtZW1vcnkiKTsK
K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2luc3codV9pbnQgcG9ydCwgdm9pZCAqYWRkciwg
c2l6ZV90IGNvdW50KQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNsZDsgcmVwOyBpbnN3IgorCQkJ
IDogIitEIiAoYWRkciksICIrYyIgKGNvdW50KQorCQkJIDogImQiIChwb3J0KQorCQkJIDogIm1l
bW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW5zbCh1X2ludCBwb3J0LCB2b2lk
ICphZGRyLCBzaXplX3QgY291bnQpCit7CisJX19hc20gX192b2xhdGlsZSgiY2xkOyByZXA7IGlu
c2wiCisJCQkgOiAiK0QiIChhZGRyKSwgIitjIiAoY291bnQpCisJCQkgOiAiZCIgKHBvcnQpCisJ
CQkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitpbnZkKHZvaWQpCit7
CisJX19hc20gX192b2xhdGlsZSgiaW52ZCIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9zaG9y
dAoraW53KHVfaW50IHBvcnQpCit7CisJdV9zaG9ydAlkYXRhOworCisJX19hc20gX192b2xhdGls
ZSgiaW53ICV3MSwgJTAiIDogIj1hIiAoZGF0YSkgOiAiTmQiIChwb3J0KSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291dGIodV9pbnQgcG9ydCwgdV9jaGFy
IGRhdGEpCit7CisJX19hc20gX192b2xhdGlsZSgib3V0YiAlMCwgJXcxIiA6IDogImEiIChkYXRh
KSwgIk5kIiAocG9ydCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorb3V0bCh1X2ludCBw
b3J0LCB1X2ludCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dGwgJTAsICV3MSIgOiA6
ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHNiKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2IiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHN3KHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c3ciCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHNsKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2wiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHcodV9pbnQgcG9ydCwgdV9zaG9ydCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dHcg
JTAsICV3MSIgOiA6ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5s
aW5lIHVfbG9uZworcG9wY250cSh1X2xvbmcgbWFzaykKK3sKKwl1X2xvbmcgcmVzdWx0OworCisJ
X19hc20gX192b2xhdGlsZSgicG9wY250cSAlMSwlMCIgOiAiPXIiIChyZXN1bHQpIDogInJtIiAo
bWFzaykpOworCXJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xm
ZW5jZSh2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibGZlbmNlIiA6IDogOiAibWVtb3J5
Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCittZmVuY2Uodm9pZCkKK3sKKworCV9fYXNt
IF9fdm9sYXRpbGUoIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAoraWEzMl9wYXVzZSh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoInBhdXNlIik7
Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2xvbmcKK3JlYWRfcmZsYWdzKHZvaWQpCit7CisJdV9s
b25nCXJmOworCisJX19hc20gX192b2xhdGlsZSgicHVzaGZxOyBwb3BxICUwIiA6ICI9ciIgKHJm
KSk7CisJcmV0dXJuIChyZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRtc3Io
dV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo
InJkbXNyIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpIDogImMiIChtc3IpKTsKKwlyZXR1cm4g
KGxvdyB8ICgodWludDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWlu
dDMyX3QKK3JkbXNyMzIodV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdzsKKworCV9fYXNtIF9f
dm9sYXRpbGUoInJkbXNyIiA6ICI9YSIgKGxvdykgOiAiYyIgKG1zcikgOiAicmR4Iik7CisJcmV0
dXJuIChsb3cpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcG1jKHVfaW50IHBt
YykKK3sKKwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJyZHBtYyIg
OiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSA6ICJjIiAocG1jKSk7CisJcmV0dXJuIChsb3cgfCAo
KHVpbnQ2NF90KWhpZ2ggPDwgMzIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90City
ZHRzYyh2b2lkKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo
InJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWlu
dDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3JkdHNj
MzIodm9pZCkKK3sKKwl1aW50MzJfdCBydjsKKworCV9fYXNtIF9fdm9sYXRpbGUoInJkdHNjIiA6
ICI9YSIgKHJ2KSA6IDogImVkeCIpOworCXJldHVybiAocnYpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAord2JpbnZkKHZvaWQpCit7CisJX19hc20gX192b2xhdGlsZSgid2JpbnZkIik7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit3cml0ZV9yZmxhZ3ModV9sb25nIHJmKQoreworCV9f
YXNtIF9fdm9sYXRpbGUoInB1c2hxICUwOyAgcG9wZnEiIDogOiAiciIgKHJmKSk7Cit9CisKK3N0
YXRpYyBfX2lubGluZSB2b2lkCit3cm1zcih1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCkKK3sK
Kwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlsb3cgPSBuZXd2YWw7CisJaGlnaCA9IG5ld3ZhbCA+
PiAzMjsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJ3cm1zciIgOiA6ICJhIiAobG93KSwgImQiIChoaWdo
KSwgImMiIChtc3IpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3IwKHVfbG9u
ZyBkYXRhKQoreworCisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWNyMCIgOiA6ICJyIiAo
ZGF0YSkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3IwKHZvaWQpCit7CisJdV9s
b25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3IwLCUwIiA6ICI9ciIgKGRh
dGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3Iy
KHZvaWQpCit7CisJdV9sb25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3Iy
LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorbG9hZF9jcjModV9sb25nIGRhdGEpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt
b3ZxICUwLCUlY3IzIiA6IDogInIiIChkYXRhKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHVfbG9uZworcmNyMyh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19hc20gX192
b2xhdGlsZSgibW92cSAlJWNyMywlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsK
K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3I0KHVfbG9uZyBkYXRhKQoreworCV9f
YXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjQiIDogOiAiciIgKGRhdGEpKTsKK30KKworc3Rh
dGljIF9faW5saW5lIHVfbG9uZworcmNyNCh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19h
c20gX192b2xhdGlsZSgibW92cSAlJWNyNCwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfbG9uZworcnhjcih1X2ludCByZWcpCit7CisJ
dV9pbnQgbG93LCBoaWdoOworCisJX19hc20gX192b2xhdGlsZSgieGdldGJ2IiA6ICI9YSIgKGxv
dyksICI9ZCIgKGhpZ2gpIDogImMiIChyZWcpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWludDY0X3Qp
aGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF94Y3IodV9pbnQg
cmVnLCB1X2xvbmcgdmFsKQoreworCXVfaW50IGxvdywgaGlnaDsKKworCWxvdyA9IHZhbDsKKwlo
aWdoID0gdmFsID4+IDMyOworCV9fYXNtIF9fdm9sYXRpbGUoInhzZXRidiIgOiA6ICJjIiAocmVn
KSwgImEiIChsb3cpLCAiZCIgKGhpZ2gpKTsKK30KKworLyoKKyAqIEdsb2JhbCBUTEIgZmx1c2gg
KGV4Y2VwdCBmb3IgdGhpc2UgZm9yIHBhZ2VzIG1hcmtlZCBQR19HKQorICovCitzdGF0aWMgX19p
bmxpbmUgdm9pZAoraW52bHRsYih2b2lkKQoreworCisJbG9hZF9jcjMocmNyMygpKTsKK30KKwor
I2lmbmRlZiBDUjRfUEdFCisjZGVmaW5lCUNSNF9QR0UJMHgwMDAwMDA4MAkvKiBQYWdlIGdsb2Jh
bCBlbmFibGUgKi8KKyNlbmRpZgorCisvKgorICogUGVyZm9ybSB0aGUgZ3VhcmFudGVlZCBpbnZh
bGlkYXRpb24gb2YgYWxsIFRMQiBlbnRyaWVzLiAgVGhpcworICogaW5jbHVkZXMgdGhlIGdsb2Jh
bCBlbnRyaWVzLCBhbmQgZW50cmllcyBpbiBhbGwgUENJRHMsIG5vdCBvbmx5IHRoZQorICogY3Vy
cmVudCBjb250ZXh0LiAgVGhlIGZ1bmN0aW9uIHdvcmtzIGJvdGggb24gbm9uLVBDSUQgQ1BVcyBh
bmQgQ1BVcworICogd2l0aCB0aGUgUENJRCB0dXJuZWQgb2ZmIG9yIG9uLiAgU2VlIElBLTMyIFNE
TSBWb2wuIDNhIDQuMTAuNC4xCisgKiBPcGVyYXRpb25zIHRoYXQgSW52YWxpZGF0ZSBUTEJzIGFu
ZCBQYWdpbmctU3RydWN0dXJlIENhY2hlcy4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2lu
dmx0bGJfZ2xvYih2b2lkKQoreworCXVpbnQ2NF90IGNyNDsKKworCWNyNCA9IHJjcjQoKTsKKwls
b2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7CisJLyoKKwkgKiBBbHRob3VnaCBwcmVlbXB0aW9uIGF0
IHRoaXMgcG9pbnQgY291bGQgYmUgZGV0cmltZW50YWwgdG8KKwkgKiBwZXJmb3JtYW5jZSwgaXQg
d291bGQgbm90IGxlYWQgdG8gYW4gZXJyb3IuICBQR19HIGlzIHNpbXBseQorCSAqIGlnbm9yZWQg
aWYgQ1I0LlBHRSBpcyBjbGVhci4gIE1vcmVvdmVyLCBpbiBjYXNlIHRoaXMgYmxvY2sKKwkgKiBp
cyByZS1lbnRlcmVkLCB0aGUgbG9hZF9jcjQoKSBlaXRoZXIgYWJvdmUgb3IgYmVsb3cgd2lsbAor
CSAqIG1vZGlmeSBDUjQuUEdFIGZsdXNoaW5nIHRoZSBUTEIuCisJICovCisJbG9hZF9jcjQoY3I0
IHwgQ1I0X1BHRSk7Cit9CisKKy8qCisgKiBUTEIgZmx1c2ggZm9yIGFuIGluZGl2aWR1YWwgcGFn
ZSAoZXZlbiBpZiBpdCBoYXMgUEdfRykuCisgKiBPbmx5IHdvcmtzIG9uIDQ4NisgQ1BVcyAoaTM4
NiBkb2VzIG5vdCBoYXZlIFBHX0cpLgorICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52bHBn
KHVfbG9uZyBhZGRyKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW52bHBnICUwIiA6IDogIm0i
ICgqKGNoYXIgKilhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZQlJTlZQQ0lEX0FERFIJ
MAorI2RlZmluZQlJTlZQQ0lEX0NUWAkxCisjZGVmaW5lCUlOVlBDSURfQ1RYR0xPQgkyCisjZGVm
aW5lCUlOVlBDSURfQUxMQ1RYCTMKKworc3RydWN0IGludnBjaWRfZGVzY3IgeworCXVpbnQ2NF90
CXBjaWQ6MTIgX19wYWNrZWQ7CisJdWludDY0X3QJcGFkOjUyIF9fcGFja2VkOworCXVpbnQ2NF90
CWFkZHI7Cit9IF9fcGFja2VkOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52cGNpZChzdHJ1
Y3QgaW52cGNpZF9kZXNjciAqZCwgaW50IHR5cGUpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJp
bnZwY2lkICglMCksJTEiCisJICAgIDogOiAiciIgKGQpLCAiciIgKCh1X2xvbmcpdHlwZSkgOiAi
bWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X3Nob3J0CityZnModm9pZCkKK3sKKwl1
X3Nob3J0IHNlbDsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUlZnMsJTAiIDogIj1ybSIgKHNl
bCkpOworCXJldHVybiAoc2VsKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfc2hvcnQKK3Jncyh2
b2lkKQoreworCXVfc2hvcnQgc2VsOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJSVncywlMCIg
OiAiPXJtIiAoc2VsKSk7CisJcmV0dXJuIChzZWwpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9z
aG9ydAorcnNzKHZvaWQpCit7CisJdV9zaG9ydCBzZWw7CisJX19hc20gX192b2xhdGlsZSgibW92
dyAlJXNzLCUwIiA6ICI9cm0iIChzZWwpKTsKKwlyZXR1cm4gKHNlbCk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSB2b2lkCitsb2FkX2RzKHVfc2hvcnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUo
Im1vdncgJTAsJSVkcyIgOiA6ICJybSIgKHNlbCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAorbG9hZF9lcyh1X3Nob3J0IHNlbCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUwLCUl
ZXMiIDogOiAicm0iIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NwdV9tb25p
dG9yKGNvbnN0IHZvaWQgKmFkZHIsIHVfbG9uZyBleHRlbnNpb25zLCB1X2ludCBoaW50cykKK3sK
KworCV9fYXNtIF9fdm9sYXRpbGUoIm1vbml0b3IiCisJICAgIDogOiAiYSIgKGFkZHIpLCAiYyIg
KGV4dGVuc2lvbnMpLCAiZCIgKGhpbnRzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitj
cHVfbXdhaXQodV9sb25nIGV4dGVuc2lvbnMsIHVfaW50IGhpbnRzKQoreworCisJX19hc20gX192
b2xhdGlsZSgibXdhaXQiIDogOiAiYSIgKGhpbnRzKSwgImMiIChleHRlbnNpb25zKSk7Cit9CisK
KyNpZmRlZiBfS0VSTkVMCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gPG1hY2hpbmUvc3BlY2lhbHJl
Zy5oPiBidXQgaXMgdG9vIHBhaW5mdWwgdG8gZ2V0IHRvICovCisjaWZuZGVmCU1TUl9GU0JBU0UK
KyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAwMTAwCisjZW5kaWYKK3N0YXRpYyBfX2lubGluZSB2
b2lkCitsb2FkX2ZzKHVfc2hvcnQgc2VsKQoreworCS8qIFByZXNlcnZlIHRoZSBmc2Jhc2UgdmFs
dWUgYWNyb3NzIHRoZSBzZWxlY3RvciBsb2FkICovCisJX19hc20gX192b2xhdGlsZSgicmRtc3I7
IG1vdncgJTAsJSVmczsgd3Jtc3IiCisJICAgIDogOiAicm0iIChzZWwpLCAiYyIgKE1TUl9GU0JB
U0UpIDogImVheCIsICJlZHgiKTsKK30KKworI2lmbmRlZglNU1JfR1NCQVNFCisjZGVmaW5lCU1T
Ul9HU0JBU0UJMHhjMDAwMDEwMQorI2VuZGlmCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9n
cyh1X3Nob3J0IHNlbCkKK3sKKwkvKgorCSAqIFByZXNlcnZlIHRoZSBnc2Jhc2UgdmFsdWUgYWNy
b3NzIHRoZSBzZWxlY3RvciBsb2FkLgorCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRpc2FibGUg
aW50ZXJydXB0cyBiZWNhdXNlIHRoZSBnc2Jhc2UKKwkgKiBiZWluZyB0cmFzaGVkIGhhcHBlbnMg
dG8gYmUgdGhlIGtlcm5lbCBnc2Jhc2UgYXQgdGhlIHRpbWUuCisJICovCisJX19hc20gX192b2xh
dGlsZSgicHVzaGZxOyBjbGk7IHJkbXNyOyBtb3Z3ICUwLCUlZ3M7IHdybXNyOyBwb3BmcSIKKwkg
ICAgOiA6ICJybSIgKHNlbCksICJjIiAoTVNSX0dTQkFTRSkgOiAiZWF4IiwgImVkeCIpOworfQor
I2Vsc2UKKy8qIFVzYWJsZSBieSB1c2VybGFuZCAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2xv
YWRfZnModV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibW92dyAlMCwlJWZzIiA6
IDogInJtIiAoc2VsKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2dzKHVfc2hv
cnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJTAsJSVncyIgOiA6ICJybSIgKHNl
bCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsaWR0KHN0cnVjdCByZWdp
b25fZGVzY3JpcHRvciAqYWRkcikKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsaWR0ICglMCkiIDog
OiAiciIgKGFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xsZHQodV9zaG9ydCBz
ZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibGxkdCAlMCIgOiA6ICJyIiAoc2VsKSk7Cit9CisK
K3N0YXRpYyBfX2lubGluZSB2b2lkCitsdHIodV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xh
dGlsZSgibHRyICUwIiA6IDogInIiIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2
NF90CityZHIwKHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt
b3ZxICUlZHIwLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0
aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjAodWludDY0X3QgZHIwKQoreworCV9fYXNtIF9fdm9s
YXRpbGUoIm1vdnEgJTAsJSVkcjAiIDogOiAiciIgKGRyMCkpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdWludDY0X3QKK3JkcjEodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9s
YXRpbGUoIm1vdnEgJSVkcjEsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2RyMSh1aW50NjRfdCBkcjEpCit7CisJX19h
c20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyMSIgOiA6ICJyIiAoZHIxKSk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB1aW50NjRfdAorcmRyMih2b2lkKQoreworCXVpbnQ2NF90IGRhdGE7CisJX19h
c20gX192b2xhdGlsZSgibW92cSAlJWRyMiwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfZHIyKHVpbnQ2NF90IGRyMikK
K3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUlZHIyIiA6IDogInIiIChkcjIpKTsKK30K
Kworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHIzKHZvaWQpCit7CisJdWludDY0X3QgZGF0
YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHIzLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwly
ZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjModWludDY0
X3QgZHIzKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVkcjMiIDogOiAiciIgKGRy
MykpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcjQodm9pZCkKK3sKKwl1aW50
NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVkcjQsJTAiIDogIj1yIiAoZGF0
YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2Ry
NCh1aW50NjRfdCBkcjQpCit7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyNCIgOiA6
ICJyIiAoZHI0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRyNSh2b2lkKQor
eworCXVpbnQ2NF90IGRhdGE7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlJWRyNSwlMCIgOiAi
PXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQK
K2xvYWRfZHI1KHVpbnQ2NF90IGRyNSkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUl
ZHI1IiA6IDogInIiIChkcjUpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHI2
KHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHI2
LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorbG9hZF9kcjYodWludDY0X3QgZHI2KQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1v
dnEgJTAsJSVkcjYiIDogOiAiciIgKGRyNikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0
X3QKK3Jkcjcodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1v
dnEgJSVkcjcsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitsb2FkX2RyNyh1aW50NjRfdCBkcjcpCit7CisJX19hc20gX192b2xh
dGlsZSgibW92cSAlMCwlJWRyNyIgOiA6ICJyIiAoZHI3KSk7Cit9CisKK3N0YXRpYyBfX2lubGlu
ZSByZWdpc3Rlcl90CitpbnRyX2Rpc2FibGUodm9pZCkKK3sKKwlyZWdpc3Rlcl90IHJmbGFnczsK
KworCXJmbGFncyA9IHJlYWRfcmZsYWdzKCk7CisJZGlzYWJsZV9pbnRyKCk7CisJcmV0dXJuIChy
ZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW50cl9yZXN0b3JlKHJlZ2lzdGVy
X3QgcmZsYWdzKQoreworCXdyaXRlX3JmbGFncyhyZmxhZ3MpOworfQorCisjZWxzZSAvKiAhKF9f
R05VQ0xJS0VfQVNNICYmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUpICovCisKK2ludAlicmVha3Bv
aW50KHZvaWQpOwordV9pbnQJYnNmbCh1X2ludCBtYXNrKTsKK3VfaW50CWJzcmwodV9pbnQgbWFz
ayk7Cit2b2lkCWNsZmx1c2godV9sb25nIGFkZHIpOwordm9pZAljbHRzKHZvaWQpOwordm9pZAlj
cHVpZF9jb3VudCh1X2ludCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKTsKK3ZvaWQJZGlzYWJsZV9p
bnRyKHZvaWQpOwordm9pZAlkb19jcHVpZCh1X2ludCBheCwgdV9pbnQgKnApOwordm9pZAllbmFi
bGVfaW50cih2b2lkKTsKK3ZvaWQJaGFsdCh2b2lkKTsKK3ZvaWQJaWEzMl9wYXVzZSh2b2lkKTsK
K3VfY2hhcglpbmIodV9pbnQgcG9ydCk7Cit1X2ludAlpbmwodV9pbnQgcG9ydCk7Cit2b2lkCWlu
c2IodV9pbnQgcG9ydCwgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJaW5zbCh1X2lu
dCBwb3J0LCB2b2lkICphZGRyLCBzaXplX3QgY291bnQpOwordm9pZAlpbnN3KHVfaW50IHBvcnQs
IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCk7CityZWdpc3Rlcl90CWludHJfZGlzYWJsZSh2b2lk
KTsKK3ZvaWQJaW50cl9yZXN0b3JlKHJlZ2lzdGVyX3QgcmYpOwordm9pZAlpbnZkKHZvaWQpOwor
dm9pZAlpbnZscGcodV9pbnQgYWRkcik7Cit2b2lkCWludmx0bGIodm9pZCk7Cit1X3Nob3J0CWlu
dyh1X2ludCBwb3J0KTsKK3ZvaWQJbGlkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKmFkZHIp
Owordm9pZAlsbGR0KHVfc2hvcnQgc2VsKTsKK3ZvaWQJbG9hZF9jcjAodV9sb25nIGNyMCk7Cit2
b2lkCWxvYWRfY3IzKHVfbG9uZyBjcjMpOwordm9pZAlsb2FkX2NyNCh1X2xvbmcgY3I0KTsKK3Zv
aWQJbG9hZF9kcjAodWludDY0X3QgZHIwKTsKK3ZvaWQJbG9hZF9kcjEodWludDY0X3QgZHIxKTsK
K3ZvaWQJbG9hZF9kcjIodWludDY0X3QgZHIyKTsKK3ZvaWQJbG9hZF9kcjModWludDY0X3QgZHIz
KTsKK3ZvaWQJbG9hZF9kcjQodWludDY0X3QgZHI0KTsKK3ZvaWQJbG9hZF9kcjUodWludDY0X3Qg
ZHI1KTsKK3ZvaWQJbG9hZF9kcjYodWludDY0X3QgZHI2KTsKK3ZvaWQJbG9hZF9kcjcodWludDY0
X3QgZHI3KTsKK3ZvaWQJbG9hZF9mcyh1X3Nob3J0IHNlbCk7Cit2b2lkCWxvYWRfZ3ModV9zaG9y
dCBzZWwpOwordm9pZAlsdHIodV9zaG9ydCBzZWwpOwordm9pZAlvdXRiKHVfaW50IHBvcnQsIHVf
Y2hhciBkYXRhKTsKK3ZvaWQJb3V0bCh1X2ludCBwb3J0LCB1X2ludCBkYXRhKTsKK3ZvaWQJb3V0
c2IodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
c2wodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
c3codV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
dyh1X2ludCBwb3J0LCB1X3Nob3J0IGRhdGEpOwordV9sb25nCXJjcjAodm9pZCk7Cit1X2xvbmcJ
cmNyMih2b2lkKTsKK3VfbG9uZwlyY3IzKHZvaWQpOwordV9sb25nCXJjcjQodm9pZCk7Cit1aW50
NjRfdCByZG1zcih1X2ludCBtc3IpOwordWludDMyX3QgcmRtc3IzMih1X2ludCBtc3IpOwordWlu
dDY0X3QgcmRwbWModV9pbnQgcG1jKTsKK3VpbnQ2NF90IHJkcjAodm9pZCk7Cit1aW50NjRfdCBy
ZHIxKHZvaWQpOwordWludDY0X3QgcmRyMih2b2lkKTsKK3VpbnQ2NF90IHJkcjModm9pZCk7Cit1
aW50NjRfdCByZHI0KHZvaWQpOwordWludDY0X3QgcmRyNSh2b2lkKTsKK3VpbnQ2NF90IHJkcjYo
dm9pZCk7Cit1aW50NjRfdCByZHI3KHZvaWQpOwordWludDY0X3QgcmR0c2Modm9pZCk7Cit1X2xv
bmcJcmVhZF9yZmxhZ3Modm9pZCk7Cit1X2ludAlyZnModm9pZCk7Cit1X2ludAlyZ3Modm9pZCk7
Cit2b2lkCXdiaW52ZCh2b2lkKTsKK3ZvaWQJd3JpdGVfcmZsYWdzKHVfaW50IHJmKTsKK3ZvaWQJ
d3Jtc3IodV9pbnQgbXNyLCB1aW50NjRfdCBuZXd2YWwpOworCisjZW5kaWYJLyogX19HTlVDTElL
RV9BU00gJiYgX19DQ19TVVBQT1JUU19fX0lOTElORSAqLworCit2b2lkCXJlc2V0X2RicmVncyh2
b2lkKTsKKworI2lmZGVmIF9LRVJORUwKK2ludAlyZG1zcl9zYWZlKHVfaW50IG1zciwgdWludDY0
X3QgKnZhbCk7CitpbnQJd3Jtc3Jfc2FmZSh1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCk7Cisj
ZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVGVU5DX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdXR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ4IEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBHLiBEZW1ldHJpb3UKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9y
IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9jcHV0eXBlcy5oIDI5MjY2OCAyMDE1LTEyLTIzIDIxOjQxOjQyWiBqaGIgJAorICov
CisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfQ1BVVFlQ
RVNfSF8KKworI2luY2x1ZGUgPHg4Ni9jcHV0eXBlcy5oPgorCisvKgorICogQ2xhc3NlcyBvZiBw
cm9jZXNzb3IuCisgKi8KKyNkZWZpbmUJQ1BVQ0xBU1NfWDg2CQkwCS8qIFg4NiAqLworI2RlZmlu
ZQlDUFVDTEFTU19LOAkJMQkvKiBLOCBBTUQ2NCBjbGFzcyAqLworCisvKgorICogS2luZHMgb2Yg
cHJvY2Vzc29yLgorICovCisjZGVmaW5lCUNQVV9YODYJCQkwCS8qIEludGVsICovCisjZGVmaW5l
CUNQVV9DTEFXSEFNTUVSCQkxCS8qIEFNRCBDbGF3aGFtbWVyICovCisjZGVmaW5lCUNQVV9TTEVE
R0VIQU1NRVIJMgkvKiBBTUQgU2xlZGdlaGFtbWVyICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVf
Q1BVVFlQRVNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL2RiX21hY2hkZXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9k
Yl9tYWNoZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZGJfbWFj
aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9kYl9tYWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5NCBAQAorLyotCisgKiBNYWNoIE9wZXJhdGlu
ZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2
ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNl
LCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBk
b2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNv
cHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
bGwgY29waWVzIG9mIHRoZQorICogc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZp
ZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGgg
bm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5F
R0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElT
IgorICogQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZ
IE9GIEFOWSBLSU5EIEZPUgorICogQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJP
TSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQ2FybmVnaWUgTWVsbG9uIHJlcXVl
c3RzIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgdG8gcmV0dXJuIHRvCisgKgorICogIFNvZnR3YXJl
IERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5D
TVUuRURVCisgKiAgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyAqICBDYXJuZWdpZSBNZWxs
b24gVW5pdmVyc2l0eQorICogIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorICoKKyAqIGFueSBp
bXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVn
aWUgTWVsbG9uCisgKiB0aGUgcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgor
ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9kYl9tYWNoZGVw
LmggMTM5NzMxIDIwMDUtMDEtMDUgMjA6MTc6MjFaIGltcCAkCisgKi8KKworI2lmbmRlZiBfTUFD
SElORV9EQl9NQUNIREVQX0hfCisjZGVmaW5lCV9NQUNISU5FX0RCX01BQ0hERVBfSF8KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3RyYXAuaD4KKwordHlw
ZWRlZgl2bV9vZmZzZXRfdAlkYl9hZGRyX3Q7CS8qIGFkZHJlc3MgLSB1bnNpZ25lZCAqLwordHlw
ZWRlZglsb25nCQlkYl9leHByX3Q7CS8qIGV4cHJlc3Npb24gLSBzaWduZWQgKi8KKworI2RlZmlu
ZQlQQ19SRUdTKCkJKChkYl9hZGRyX3Qpa2RiX3RocmN0eC0+cGNiX3JpcCkKKworI2RlZmluZQlC
S1BUX0lOU1QJMHhjYwkJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmluZQlCS1BU
X1NJWkUJKDEpCQkvKiBzaXplIG9mIGJyZWFrcG9pbnQgaW5zdCAqLworI2RlZmluZQlCS1BUX1NF
VChpbnN0KQkoQktQVF9JTlNUKQorCisjZGVmaW5lIEJLUFRfU0tJUAkJCQlcCitkbyB7CQkJCQkJ
XAorCWtkYl9mcmFtZS0+dGZfcmlwICs9IDE7CQkJXAorCWtkYl90aHJjdHgtPnBjYl9yaXAgKz0g
MTsJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZQlGSVhVUF9QQ19BRlRFUl9CUkVBSwkJCVwKK2Rv
IHsJCQkJCQlcCisJa2RiX2ZyYW1lLT50Zl9yaXAgLT0gMTsJCQlcCisJa2RiX3RocmN0eC0+cGNi
X3JpcCAtPSAxOwkJXAorfSB3aGlsZSgwKTsKKworI2RlZmluZQlkYl9jbGVhcl9zaW5nbGVfc3Rl
cAlrZGJfY3B1X2NsZWFyX3NpbmdsZXN0ZXAKKyNkZWZpbmUJZGJfc2V0X3NpbmdsZV9zdGVwCWtk
Yl9jcHVfc2V0X3NpbmdsZXN0ZXAKKworI2RlZmluZQlJU19CUkVBS1BPSU5UX1RSQVAodHlwZSwg
Y29kZSkJKCh0eXBlKSA9PSBUX0JQVEZMVCkKKy8qCisgKiBXYXRjaHBvaW50cyBhcmUgbm90IHN1
cHBvcnRlZC4gIFRoZSBkZWJ1ZyBleGNlcHRpb24gdHlwZSBpcyBpbiAlZHI2CisgKiBhbmQgbm90
IHlldCBpbiB0aGUgYXJncyB0byB0aGlzIG1hY3JvLgorICovCisjZGVmaW5lIElTX1dBVENIUE9J
TlRfVFJBUCh0eXBlLCBjb2RlKQkwCisKKyNkZWZpbmUJSV9DQUxMCQkweGU4CisjZGVmaW5lCUlf
Q0FMTEkJCTB4ZmYKKyNkZWZpbmUJSV9SRVQJCTB4YzMKKyNkZWZpbmUJSV9JUkVUCQkweGNmCisK
KyNkZWZpbmUJaW5zdF90cmFwX3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9JUkVUKQor
I2RlZmluZQlpbnN0X3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9SRVQpCisjZGVmaW5l
CWluc3RfY2FsbChpbnMpCQkoKChpbnMpJjB4ZmYpID09IElfQ0FMTCB8fCBcCisJCQkJICgoKGlu
cykmMHhmZikgPT0gSV9DQUxMSSAmJiBcCisJCQkJICAoKGlucykmMHgzODAwKSA9PSAweDEwMDAp
KQorI2RlZmluZSBpbnN0X2xvYWQoaW5zKQkJMAorI2RlZmluZSBpbnN0X3N0b3JlKGlucykJCTAK
KworLyoKKyAqIFRoZXJlIG5vIGludGVyZXN0aW5nIGFkZHJlc3NlcyBiZWxvdyBfa3N0YWNrID0g
MHhlZmJmZTAwMC4gIFRoZXJlCisgKiBhcmUgc21hbGwgYWJzb2x1dGUgdmFsdWVzIGZvciBHVVBS
T0YsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHNlZSB0aGVtLgorICogVHJlYXQgIm5lZ2F0aXZlIiBh
ZGRyZXNzZXMgYmVsb3cgX2tzdGFjayBhcyBub24tc21hbGwgdG8gYWxsb3cgZm9yCisgKiBmdXR1
cmUgcmVkdWN0aW9ucyBvZiBfa3N0YWNrIGFuZCB0byBhdm9pZCBzaWduIGV4dGVuc2lvbiBwcm9i
bGVtcy4KKyAqCisgKiBUaGVyZSBpcyBvbmUgaW50ZXJlc3Rpbmcgc3ltYm9sIGFib3ZlIC1kYl9t
YXhvZmYgPSAweGZmZmYwMDAwLAorICogbmFtZWx5IF9BUFREID0gMHhmZmZmZjAwMC4gIEFjY2Vw
dGluZyB0aGlzIHdvdWxkIG1lc3MgdXAgdGhlCisgKiBwcmludGluZyBvZiBzbWFsbCBuZWdhdGl2
ZSBvZmZzZXRzLiAgVGhlIG5leHQgbGFyZ2VzdCBzeW1ib2wgaXMKKyAqIF9BUFRtYXAgPSAweGZm
YzAwMDAwLiAgQWNjZXB0aW5nIHRoaXMgaXMgT0sgKHVubGVzcyBkYl9tYXhvZmYgaXMKKyAqIHNl
dCB0byA+PSAweDQwMDAwMCAtIChtYXggc3RhY2sgb2Zmc2V0KSkuCisgKi8KKyNkZWZpbmUJREJf
U01BTExfVkFMVUVfTUFYCTB4N2ZmZmZmZmYKKyNkZWZpbmUJREJfU01BTExfVkFMVUVfTUlOCSgt
MHg0MDAwMDEpCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfREJfTUFDSERFUF9IXyAqLwpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZHVtcC5oIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9kdW1wLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAkyMDE2LTA5
LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhp
cyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZHVtcC5oIDI3Njc3MiAyMDE1LTAxLTA3IDAxOjAxOjM5
WiBtYXJraiAkICovCisKKyNpbmNsdWRlIDx4ODYvZHVtcC5oPgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZWxmLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvZWxmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvZWxmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VsZi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl
IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9lbGYuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKworI2lu
Y2x1ZGUgPHg4Ni9lbGYuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2VuZGlhbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Vu
ZGlhbi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VuZGlhbi5oCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9lbmRpYW4uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMg
ZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv
ZW5kaWFuLmggMjMyMjY2IDIwMTItMDItMjggMTk6Mzk6NTRaIHRpamwgJCAqLworCisjaW5jbHVk
ZSA8eDg2L2VuZGlhbi5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvZXhlYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2V4ZWMu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9leGVjLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2V4ZWMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylleGVjLmgJOC4x
IChCZXJrZWxleSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL2V4ZWMuaCAxNDIxMDcgMjAwNS0wMi0xOSAyMToxNjo0OFogcnUgJAorICovCisKKyNp
Zm5kZWYJX01BQ0hJTkVfRVhFQ19IXworI2RlZmluZQlfTUFDSElORV9FWEVDX0hfCisKKyNkZWZp
bmUJX19MRFBHU1oJNDA5NgorCisjZW5kaWYgLyogIV9NQUNISU5FX0VYRUNfSF8gKi8KZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2ZkdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mZHQuaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBm
aWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzEx
LjAvc3lzL2FtZDY0L2luY2x1ZGUvZmR0LmggMjUwODQwIDIwMTMtMDUtMjEgMDM6MDU6NDlaIG1h
cmNlbCAkICovCisKKyNpbmNsdWRlIDx4ODYvZmR0Lmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL2Zsb2F0LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvZmxvYXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZmxvYXQuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu
IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUvZmxvYXQuaCAyMzI0OTEgMjAxMi0wMy0wNCAxNDowMDozMlogdGlqbCAkICov
CisKKyNpbmNsdWRlIDx4ODYvZmxvYXQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL2Zsb2F0aW5ncG9pbnQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9mbG9hdGluZ3BvaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvZmxvYXRpbmdwb2ludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdGluZ3Bv
aW50LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgQW5kcmV3IE1vb3JlLCBUYWxrZSBTdHVkaW8K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg
bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAq
ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMg
cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YK
KyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpIGZsb2F0aW5ncG9pbnQuaAkxLjAgKEJlcmtl
bGV5KSA5LzIzLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv
ZmxvYXRpbmdwb2ludC5oIDE0NDU0NCAyMDA1LTA0LTAyIDE3OjMxOjQyWiBuZXRjaGlsZCAkCisg
Ki8KKworI2lmbmRlZiBfRkxPQVRJTkdQT0lOVF9IXworI2RlZmluZSBfRkxPQVRJTkdQT0lOVF9I
XworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4K
KworI2VuZGlmIC8qICFfRkxPQVRJTkdQT0lOVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnB1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvZnB1LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
ZnB1LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAw
MDAwICswMTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRo
ZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29u
dHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
NC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkg
MS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ZwdS5o
IDI3MTE5MiAyMDE0LTA5LTA2IDE1OjIzOjI4WiBqaGIgJAorICovCisKKy8qCisgKiBGbG9hdGlu
ZyBQb2ludCBEYXRhIFN0cnVjdHVyZXMgYW5kIENvbnN0YW50cworICogVy4gSm9saXR6IDEvOTAK
KyAqLworCisjaWZuZGVmIF9NQUNISU5FX0ZQVV9IXworI2RlZmluZQlfTUFDSElORV9GUFVfSF8K
KworI2luY2x1ZGUgPHg4Ni9mcHUuaD4KKworI2lmZGVmIF9LRVJORUwKKworc3RydWN0IGZwdV9r
ZXJuX2N0eDsKKworI2RlZmluZQlQQ0JfVVNFUl9GUFUocGNiKSAoKChwY2IpLT5wY2JfZmxhZ3Mg
JiBQQ0JfS0VSTkZQVSkgPT0gMCkKKworI2RlZmluZQlYU0FWRV9BUkVBX0FMSUdOCTY0CisKK3Zv
aWQJZnB1ZG5hKHZvaWQpOwordm9pZAlmcHVkcm9wKHZvaWQpOwordm9pZAlmcHVleGl0KHN0cnVj
dCB0aHJlYWQgKnRkKTsKK2ludAlmcHVmb3JtYXQodm9pZCk7CitpbnQJZnB1Z2V0cmVncyhzdHJ1
Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCWZwdWluaXQodm9pZCk7Cit2b2lkCWZwdXJlc3RvcmUodm9p
ZCAqYWRkcik7Cit2b2lkCWZwdXJlc3VtZSh2b2lkICphZGRyKTsKK3ZvaWQJZnB1c2F2ZSh2b2lk
ICphZGRyKTsKK2ludAlmcHVzZXRyZWdzKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3Qgc2F2ZWZw
dSAqYWRkciwKKwkgICAgY2hhciAqeGZwdXN0YXRlLCBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwor
aW50CWZwdXNldHhzdGF0ZShzdHJ1Y3QgdGhyZWFkICp0ZCwgY2hhciAqeGZwdXN0YXRlLAorCSAg
ICBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwordm9pZAlmcHVzdXNwZW5kKHZvaWQgKmFkZHIpOwor
aW50CWZwdXRyYXBfc3NlKHZvaWQpOworaW50CWZwdXRyYXBfeDg3KHZvaWQpOwordm9pZAlmcHV1
c2VyaW5pdGVkKHN0cnVjdCB0aHJlYWQgKnRkKTsKK3N0cnVjdCBmcHVfa2Vybl9jdHggKmZwdV9r
ZXJuX2FsbG9jX2N0eCh1X2ludCBmbGFncyk7Cit2b2lkCWZwdV9rZXJuX2ZyZWVfY3R4KHN0cnVj
dCBmcHVfa2Vybl9jdHggKmN0eCk7CitpbnQJZnB1X2tlcm5fZW50ZXIoc3RydWN0IHRocmVhZCAq
dGQsIHN0cnVjdCBmcHVfa2Vybl9jdHggKmN0eCwKKwkgICAgdV9pbnQgZmxhZ3MpOworaW50CWZw
dV9rZXJuX2xlYXZlKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgZnB1X2tlcm5fY3R4ICpjdHgp
OworaW50CWZwdV9rZXJuX3RocmVhZCh1X2ludCBmbGFncyk7CitpbnQJaXNfZnB1X2tlcm5fdGhy
ZWFkKHVfaW50IGZsYWdzKTsKKworc3RydWN0IHNhdmVmcHUJKmZwdV9zYXZlX2FyZWFfYWxsb2Mo
dm9pZCk7Cit2b2lkCWZwdV9zYXZlX2FyZWFfZnJlZShzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKK3Zv
aWQJZnB1X3NhdmVfYXJlYV9yZXNldChzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKKworLyoKKyAqIEZs
YWdzIGZvciBmcHVfa2Vybl9hbGxvY19jdHgoKSwgZnB1X2tlcm5fZW50ZXIoKSBhbmQgZnB1X2tl
cm5fdGhyZWFkKCkuCisgKi8KKyNkZWZpbmUJRlBVX0tFUk5fTk9STUFMCTB4MDAwMAorI2RlZmlu
ZQlGUFVfS0VSTl9OT1dBSVQJMHgwMDAxCisjZGVmaW5lCUZQVV9LRVJOX0tUSFIJMHgwMDAyCisK
KyNlbmRpZgorCisjZW5kaWYgLyogIV9NQUNISU5FX0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnJhbWUuaCAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9mcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZyYW1lLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls
ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L3N5cy9hbWQ2NC9pbmNsdWRlL2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtp
YiAkICovCisKKyNpbmNsdWRlIDx4ODYvZnJhbWUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2dkYl9tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvZ2RiX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRl
cC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZ2RiX21hY2hkZXAuaCAxNjY1MjAgMjAwNy0wMi0wNSAy
MTo0ODozMlogamhiICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisj
ZGVmaW5lCV9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisKKyNkZWZpbmUJR0RCX0JVRlNaCShHREJf
TlJFR1MgKiAxNikKKyNkZWZpbmUJR0RCX05SRUdTCTU2CisjZGVmaW5lCUdEQl9SRUdfUEMJMTYK
Kworc3RhdGljIF9faW5saW5lIHNpemVfdAorZ2RiX2NwdV9yZWdzeihpbnQgcmVnbnVtKQorewor
CXJldHVybiAoKHJlZ251bSA+IDE2ICYmIHJlZ251bSA8IDI0KSA/IDQgOiA4KTsKK30KKworc3Rh
dGljIF9faW5saW5lIGludAorZ2RiX2NwdV9xdWVyeSh2b2lkKQoreworCXJldHVybiAoMCk7Cit9
CisKK3ZvaWQgKmdkYl9jcHVfZ2V0cmVnKGludCwgc2l6ZV90ICopOwordm9pZCBnZGJfY3B1X3Nl
dHJlZyhpbnQsIHZvaWQgKik7CitpbnQgZ2RiX2NwdV9zaWduYWwoaW50LCBpbnQpOworCisjZW5k
aWYgLyogIV9NQUNISU5FX0dEQl9NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pZWVlZnAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9pZWVlZnAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9pZWVlZnAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaWVlZWZwLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzMDggQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgQW5kcmV3IE1vb3Jl
LCBUYWxrZSBTdHVkaW8KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBB
bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo
aXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl
bWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl
IFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0
b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAJZnJvbTogQCgjKSBpZWVlZnAuaCAJ
MS4wIChCZXJrZWxleSkgOS8yMy85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL2llZWVmcC5oIDIyNjYwNyAyMDExLTEwLTIxIDA2OjQxOjQ2WiBkYXMgJAorICov
CisKKyNpZm5kZWYgX01BQ0hJTkVfSUVFRUZQX0hfCisjZGVmaW5lIF9NQUNISU5FX0lFRUVGUF9I
XworCisvKgorICogRGVwcmVjYXRlZCBoaXN0b3JpY2FsIEZQVSBjb250cm9sIGludGVyZmFjZQor
ICoKKyAqIElFRUUgZmxvYXRpbmcgcG9pbnQgdHlwZSwgY29uc3RhbnQgYW5kIGZ1bmN0aW9uIGRl
ZmluaXRpb25zLgorICogWFhYOiB7RlAsU1NFfSpGTEQgYW5kIHtGUCxTU0V9Kk9GRiBhcmUgdW5k
b2N1bWVudGVkIHBvbGx1dGlvbi4KKyAqLworCisjaWZuZGVmIF9TWVNfQ0RFRlNfSF8KKyNlcnJv
ciB0aGlzIGZpbGUgbmVlZHMgc3lzL2NkZWZzLmggYXMgYSBwcmVyZXF1aXNpdGUKKyNlbmRpZgor
CisvKgorICogUm91bmRpbmcgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJRlBfUk49MCwJ
Lyogcm91bmQgdG8gbmVhcmVzdCAqLworCUZQX1JNLAkJLyogcm91bmQgZG93biB0b3dhcmRzIG1p
bnVzIGluZmluaXR5ICovCisJRlBfUlAsCQkvKiByb3VuZCB1cCB0b3dhcmRzIHBsdXMgaW5maW5p
dHkgKi8KKwlGUF9SWgkJLyogdHJ1bmNhdGUgKi8KK30gZnBfcm5kX3Q7CisKKy8qCisgKiBQcmVj
aXNpb24gKGkuZS4sIHJvdW5kaW5nIHByZWNpc2lvbikgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51
bSB7CisJRlBfUFM9MCwJLyogMjQgYml0IChzaW5nbGUtcHJlY2lzaW9uKSAqLworCUZQX1BSUywJ
CS8qIHJlc2VydmVkICovCisJRlBfUEQsCQkvKiA1MyBiaXQgKGRvdWJsZS1wcmVjaXNpb24pICov
CisJRlBfUEUJCS8qIDY0IGJpdCAoZXh0ZW5kZWQtcHJlY2lzaW9uKSAqLworfSBmcF9wcmVjX3Q7
CisKKyNkZWZpbmUgZnBfZXhjZXB0X3QJaW50CisKKy8qCisgKiBFeGNlcHRpb24gYml0IG1hc2tz
LgorICovCisjZGVmaW5lIEZQX1hfSU5WCTB4MDEJLyogaW52YWxpZCBvcGVyYXRpb24gKi8KKyNk
ZWZpbmUgRlBfWF9ETk1MCTB4MDIJLyogZGVub3JtYWwgKi8KKyNkZWZpbmUgRlBfWF9EWgkJMHgw
NAkvKiB6ZXJvIGRpdmlkZSAqLworI2RlZmluZSBGUF9YX09GTAkweDA4CS8qIG92ZXJmbG93ICov
CisjZGVmaW5lIEZQX1hfVUZMCTB4MTAJLyogdW5kZXJmbG93ICovCisjZGVmaW5lIEZQX1hfSU1Q
CTB4MjAJLyogKGltKXByZWNpc2lvbiAqLworI2RlZmluZSBGUF9YX1NUSwkweDQwCS8qIHN0YWNr
IGZhdWx0ICovCisKKy8qCisgKiBGUFUgY29udHJvbCB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAq
LworI2RlZmluZSBGUF9NU0tTX0ZMRAkweDNmCS8qIGV4Y2VwdGlvbiBtYXNrcyBmaWVsZCAqLwor
I2RlZmluZSBGUF9QUkNfRkxECTB4MzAwCS8qIHByZWNpc2lvbiBjb250cm9sIGZpZWxkICovCisj
ZGVmaW5lCUZQX1JORF9GTEQJMHhjMDAJLyogcm91bmRpbmcgY29udHJvbCBmaWVsZCAqLworCisv
KgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZSBGUF9T
VEtZX0ZMRAkweDNmCS8qIHN0aWNreSBmbGFncyBmaWVsZCAqLworCisvKgorICogU1NFIG14Y3Ny
IHJlZ2lzdGVyIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZQlTU0VfU1RLWV9GTEQJMHgz
ZgkvKiBleGNlcHRpb24gZmxhZ3MgKi8KKyNkZWZpbmUJU1NFX0RBWl9GTEQJMHg0MAkvKiBEZW5v
cm1hbHMgYXJlIHplcm8gKi8KKyNkZWZpbmUJU1NFX01TS1NfRkxECTB4MWY4MAkvKiBleGNlcHRp
b24gbWFza3MgZmllbGQgKi8KKyNkZWZpbmUJU1NFX1JORF9GTEQJMHg2MDAwCS8qIHJvdW5kaW5n
IGNvbnRyb2wgKi8KKyNkZWZpbmUJU1NFX0ZaX0ZMRAkweDgwMDAJLyogZmx1c2ggdG8gemVybyBv
biB1bmRlcmZsb3cgKi8KKworLyoKKyAqIEZQVSBjb250cm9sIHdvcmQgYml0LWZpZWxkIG9mZnNl
dHMgKHNoaWZ0IGNvdW50cykuCisgKi8KKyNkZWZpbmUgRlBfTVNLU19PRkYJMAkvKiBleGNlcHRp
b24gbWFza3Mgb2Zmc2V0ICovCisjZGVmaW5lIEZQX1BSQ19PRkYJOAkvKiBwcmVjaXNpb24gY29u
dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJRlBfUk5EX09GRgkxMAkvKiByb3VuZGluZyBjb250cm9s
IG9mZnNldCAqLworCisvKgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBvZmZzZXRzIChz
aGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lIEZQX1NUS1lfT0ZGCTAJLyogc3RpY2t5IGZsYWdz
IG9mZnNldCAqLworCisvKgorICogU1NFIG14Y3NyIHJlZ2lzdGVyIGJpdC1maWVsZCBvZmZzZXRz
IChzaGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lCVNTRV9TVEtZX09GRgkwCS8qIGV4Y2VwdGlv
biBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0RBWl9PRkYJNgkvKiBEQVogZXhjZXB0aW9u
IG1hc2sgb2Zmc2V0ICovCisjZGVmaW5lCVNTRV9NU0tTX09GRgk3CS8qIG90aGVyIGV4Y2VwdGlv
biBtYXNrcyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX1JORF9PRkYJMTMJLyogcm91bmRpbmcgY29u
dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0ZaX09GRgkxNQkvKiBmbHVzaCB0byB6ZXJvIG9m
ZnNldCAqLworCisjaWZkZWYgX19HTlVDTElLRV9BU00KKworI2RlZmluZQlfX2ZsZGN3KGFkZHIp
CV9fYXNtIF9fdm9sYXRpbGUoImZsZGN3ICUwIiA6IDogIm0iICgqKGFkZHIpKSkKKyNkZWZpbmUJ
X19mbGRlbnYoYWRkcikJX19hc20gX192b2xhdGlsZSgiZmxkZW52ICUwIiA6IDogIm0iICgqKGFk
ZHIpKSkKKyNkZWZpbmUJX19mbnN0Y3coYWRkcikJX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUw
IiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmluZQlfX2Zuc3RlbnYoYWRkcikJX19hc20gX192b2xh
dGlsZSgiZm5zdGVudiAlMCIgOiAiPW0iICgqKGFkZHIpKSkKKyNkZWZpbmUJX19mbnN0c3coYWRk
cikJX19hc20gX192b2xhdGlsZSgiZm5zdHN3ICUwIiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmlu
ZQlfX2xkbXhjc3IoYWRkcikJX19hc20gX192b2xhdGlsZSgibGRteGNzciAlMCIgOiA6ICJtIiAo
KihhZGRyKSkpCisjZGVmaW5lCV9fc3RteGNzcihhZGRyKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdG14
Y3NyICUwIiA6ICI9bSIgKCooYWRkcikpKQorCisvKgorICogTG9hZCB0aGUgY29udHJvbCB3b3Jk
LiAgQmUgY2FyZWZ1bCBub3QgdG8gdHJhcCBpZiB0aGVyZSBpcyBhIGN1cnJlbnRseQorICogdW5t
YXNrZWQgZXhjZXB0aW9uIChvbmVzIHRoYXQgd2lsbCBiZWNvbWUgZnJlc2hseSB1bm1hc2tlZCBh
cmUgbm90IGEKKyAqIHByb2JsZW0pLiAgVGhpcyBjYXNlIG11c3QgYmUgaGFuZGxlZCBieSBhIHNh
dmUvcmVzdG9yZSBvZiB0aGUKKyAqIGVudmlyb25tZW50IG9yIGV2ZW4gb2YgdGhlIGZ1bGwgeDg3
IHN0YXRlLiAgQWNjZXNzaW5nIHRoZSBlbnZpcm9ubWVudAorICogaXMgdmVyeSBpbmVmZmljaWVu
dCwgc28gb25seSBkbyBpdCB3aGVuIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIF9faW5saW5lIHZv
aWQKK19fZm5sZGN3KHVuc2lnbmVkIHNob3J0IF9jdywgdW5zaWduZWQgc2hvcnQgX25ld2N3KQor
eworCXN0cnVjdCB7CisJCXVuc2lnbmVkIF9jdzsKKwkJdW5zaWduZWQgX290aGVyWzZdOworCX0g
X2VudjsKKwl1bnNpZ25lZCBzaG9ydCBfc3c7CisKKwlpZiAoKF9jdyAmIEZQX01TS1NfRkxEKSAh
PSBGUF9NU0tTX0ZMRCkgeworCQlfX2Zuc3RzdygmX3N3KTsKKwkJaWYgKCgoX3N3ICYgfl9jdykg
JiBGUF9TVEtZX0ZMRCkgIT0gMCkgeworCQkJX19mbnN0ZW52KCZfZW52KTsKKwkJCV9lbnYuX2N3
ID0gX25ld2N3OworCQkJX19mbGRlbnYoJl9lbnYpOworCQkJcmV0dXJuOworCQl9CisJfQorCV9f
ZmxkY3coJl9uZXdjdyk7Cit9CisKKy8qCisgKiBHZW5lcmFsIG5vdGVzIGFib3V0IGNvbmZsaWN0
aW5nIFNTRSB2cyBGUCBzdGF0dXMgYml0cy4KKyAqIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgc29m
dHdhcmUgd2lsbCBub3QgZmlkZGxlIHdpdGggdGhlIGNvbnRyb2wKKyAqIGJpdHMgb2YgdGhlIFNT
RSBhbmQgeDg3IGluIHN1Y2ggYSB3YXkgdG8gZ2V0IHRoZW0gb3V0IG9mIHN5bmMgYW5kCisgKiBz
dGlsbCBleHBlY3QgdGhpcyB0byB3b3JrLiAgQnJlYWsgdGhpcyBhdCB5b3VyIHBlcmlsLgorICog
QmVjYXVzZSBJIGJhc2VkIHRoaXMgb24gdGhlIGkzODYgcG9ydCwgdGhlIHg4NyBzdGF0ZSBpcyB1
c2VkIGZvcgorICogdGhlIGZwZ2V0KigpIGZ1bmN0aW9ucywgYW5kIGlzIHNoYWRvd2VkIGludG8g
dGhlIFNTRSBzdGF0ZSBmb3IKKyAqIHRoZSBmcHNldCooKSBmdW5jdGlvbnMuICBGb3IgZHVhbCBz
b3VyY2UgZnBnZXQqKCkgZnVuY3Rpb25zLCBJCisgKiBtZXJnZSB0aGUgdHdvIHRvZ2V0aGVyLiAg
SSB0aGluay4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBnZXRyb3VuZCh2
b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsKKworCV9fZm5zdGN3KCZfY3cpOworCXJldHVy
biAoKGZwX3JuZF90KSgoX2N3ICYgRlBfUk5EX0ZMRCkgPj4gRlBfUk5EX09GRikpOworfQorCitz
dGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBzZXRyb3VuZChmcF9ybmRfdCBfbSkKK3sKKwlm
cF9ybmRfdCBfcDsKKwl1bnNpZ25lZCBfbXhjc3I7CisJdW5zaWduZWQgc2hvcnQgX2N3LCBfbmV3
Y3c7CisKKwlfX2Zuc3RjdygmX2N3KTsKKwlfcCA9IChmcF9ybmRfdCkoKF9jdyAmIEZQX1JORF9G
TEQpID4+IEZQX1JORF9PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9STkRfRkxEOworCV9uZXdj
dyB8PSAoX20gPDwgRlBfUk5EX09GRikgJiBGUF9STkRfRkxEOworCV9fZm5sZGN3KF9jdywgX25l
d2N3KTsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX214Y3NyICY9IH5TU0VfUk5EX0ZMRDsKKwlf
bXhjc3IgfD0gKF9tIDw8IFNTRV9STkRfT0ZGKSAmIFNTRV9STkRfRkxEOworCV9fbGRteGNzcigm
X214Y3NyKTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQgdGhlIHJvdW5k
aW5nIHByZWNpc2lvbiBmb3IgeDg3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAqIFRoZXJlIGlz
IG5vIGVxdWl2YWxlbnQgU1NFIG1vZGUgb3IgY29udHJvbC4KKyAqLworCitzdGF0aWMgX19pbmxp
bmUgZnBfcHJlY190CitfX2ZwZ2V0cHJlYyh2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsK
KworCV9fZm5zdGN3KCZfY3cpOworCXJldHVybiAoKGZwX3ByZWNfdCkoKF9jdyAmIEZQX1BSQ19G
TEQpID4+IEZQX1BSQ19PRkYpKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX3ByZWNfdAorX19m
cHNldHByZWMoZnBfcHJlY190IF9tKQoreworCWZwX3ByZWNfdCBfcDsKKwl1bnNpZ25lZCBzaG9y
dCBfY3csIF9uZXdjdzsKKworCV9fZm5zdGN3KCZfY3cpOworCV9wID0gKGZwX3ByZWNfdCkoKF9j
dyAmIEZQX1BSQ19GTEQpID4+IEZQX1BSQ19PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9QUkNf
RkxEOworCV9uZXdjdyB8PSAoX20gPDwgRlBfUFJDX09GRikgJiBGUF9QUkNfRkxEOworCV9fZm5s
ZGN3KF9jdywgX25ld2N3KTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQg
dGhlIGV4Y2VwdGlvbiBtYXNrLgorICogTm90ZSB0aGF0IHRoZSB4ODcgbWFzayBiaXRzIGFyZSBp
bnZlcnRlZCBieSB0aGUgQVBJIC0tIGEgbWFzayBiaXQgb2YgMQorICogbWVhbnMgZGlzYWJsZSBm
b3IgeDg3IGFuZCBTU0UsIGJ1dCBmb3IgZnAqbWFzaygpIGl0IG1lYW5zIGVuYWJsZS4KKyAqLwor
CitzdGF0aWMgX19pbmxpbmUgZnBfZXhjZXB0X3QKK19fZnBnZXRtYXNrKHZvaWQpCit7CisJdW5z
aWduZWQgc2hvcnQgX2N3OworCisJX19mbnN0Y3coJl9jdyk7CisJcmV0dXJuICgofl9jdyAmIEZQ
X01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBmcF9leGNl
cHRfdAorX19mcHNldG1hc2soZnBfZXhjZXB0X3QgX20pCit7CisJZnBfZXhjZXB0X3QgX3A7CisJ
dW5zaWduZWQgX214Y3NyOworCXVuc2lnbmVkIHNob3J0IF9jdywgX25ld2N3OworCisJX19mbnN0
Y3coJl9jdyk7CisJX3AgPSAofl9jdyAmIEZQX01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRjsKKwlf
bmV3Y3cgPSBfY3cgJiB+RlBfTVNLU19GTEQ7CisJX25ld2N3IHw9ICh+X20gPDwgRlBfTVNLU19P
RkYpICYgRlBfTVNLU19GTEQ7CisJX19mbmxkY3coX2N3LCBfbmV3Y3cpOworCV9fc3RteGNzcigm
X214Y3NyKTsKKwkvKiBYWFggc2hvdWxkIHdlIGNsZWFyIG5vbi1pZWVlIFNTRV9EQVpfRkxEIGFu
ZCBTU0VfRlpfRkxEID8gKi8KKwlfbXhjc3IgJj0gflNTRV9NU0tTX0ZMRDsKKwlfbXhjc3IgfD0g
KH5fbSA8PCBTU0VfTVNLU19PRkYpICYgU1NFX01TS1NfRkxEOworCV9fbGRteGNzcigmX214Y3Ny
KTsKKwlyZXR1cm4gKF9wKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX2V4Y2VwdF90CitfX2Zw
Z2V0c3RpY2t5KHZvaWQpCit7CisJdW5zaWduZWQgX2V4LCBfbXhjc3I7CisJdW5zaWduZWQgc2hv
cnQgX3N3OworCisJX19mbnN0c3coJl9zdyk7CisJX2V4ID0gKF9zdyAmIEZQX1NUS1lfRkxEKSA+
PiBGUF9TVEtZX09GRjsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX2V4IHw9IChfbXhjc3IgJiBT
U0VfU1RLWV9GTEQpID4+IFNTRV9TVEtZX09GRjsKKwlyZXR1cm4gKChmcF9leGNlcHRfdClfZXgp
OworfQorCisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2lmICFkZWZpbmVkKF9fSUVF
RUZQX05PSU5MSU5FU19fKSAmJiBkZWZpbmVkKF9fR05VQ0xJS0VfQVNNKQorCisjZGVmaW5lCWZw
Z2V0bWFzaygpCV9fZnBnZXRtYXNrKCkKKyNkZWZpbmUJZnBnZXRwcmVjKCkJX19mcGdldHByZWMo
KQorI2RlZmluZQlmcGdldHJvdW5kKCkJX19mcGdldHJvdW5kKCkKKyNkZWZpbmUJZnBnZXRzdGlj
a3koKQlfX2ZwZ2V0c3RpY2t5KCkKKyNkZWZpbmUJZnBzZXRtYXNrKG0pCV9fZnBzZXRtYXNrKG0p
CisjZGVmaW5lCWZwc2V0cHJlYyhtKQlfX2Zwc2V0cHJlYyhtKQorI2RlZmluZQlmcHNldHJvdW5k
KG0pCV9fZnBzZXRyb3VuZChtKQorCisjZWxzZSAvKiAhKCFfX0lFRUVGUF9OT0lOTElORVNfXyAm
JiBfX0dOVUNMSUtFX0FTTSkgKi8KKworLyogQXVnbWVudCB0aGUgdXNlcmxhbmQgZGVjbGFyYXRp
b25zLiAqLworX19CRUdJTl9ERUNMUworZXh0ZXJuIGZwX3JuZF90ICAgIGZwZ2V0cm91bmQodm9p
ZCk7CitleHRlcm4gZnBfcm5kX3QgICAgZnBzZXRyb3VuZChmcF9ybmRfdCk7CitleHRlcm4gZnBf
ZXhjZXB0X3QgZnBnZXRtYXNrKHZvaWQpOworZXh0ZXJuIGZwX2V4Y2VwdF90IGZwc2V0bWFzayhm
cF9leGNlcHRfdCk7CitleHRlcm4gZnBfZXhjZXB0X3QgZnBnZXRzdGlja3kodm9pZCk7CitleHRl
cm4gZnBfZXhjZXB0X3QgZnBzZXRzdGlja3koZnBfZXhjZXB0X3QpOworZnBfcHJlY190CWZwZ2V0
cHJlYyh2b2lkKTsKK2ZwX3ByZWNfdAlmcHNldHByZWMoZnBfcHJlY190KTsKK19fRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiAhX19JRUVFRlBfTk9JTkxJTkVTX18gJiYgX19HTlVDTElLRV9BU00gKi8K
KworI2VuZGlmIC8qICFfTUFDSElORV9JRUVFRlBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2luX2Nrc3VtLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvaW5fY2tzdW0uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9pbl9ja3N1bS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pbl9ja3N1bS5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsODQgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKglmcm9tIHRhaG9lOglpbl9ja3N1bS5jCTEuMgk4Ni8wMS8wNQorICoJZnJv
bToJCUAoIylpbl9ja3N1bS5jCTEuMyAoQmVya2VsZXkpIDEvMTkvOTEKKyAqCWZyb206IElkOiBp
bl9ja3N1bS5jLHYgMS44IDE5OTUvMTIvMDMgMTg6MzU6MTkgYmRlIEV4cAorICogJEZyZWVCU0Q6
IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2luX2Nrc3VtLmggMjg2MzM2IDIwMTUtMDgt
MDUgMTk6MDU6MTJaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9JTl9DS1NVTV9I
XworI2RlZmluZQlfTUFDSElORV9JTl9DS1NVTV9IXwkxCisKKyNpZm5kZWYgX1NZU19DREVGU19I
XworI2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQor
I2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBpbl9ja3N1bShtLCBs
ZW4pCWluX2Nrc3VtX3NraXAobSwgbGVuLCAwKQorCisjaWYgZGVmaW5lZChJUFZFUlNJT04pICYm
IChJUFZFUlNJT04gPT0gNCkKKy8qCisgKiBJdCBpdCB1c2VmdWwgdG8gaGF2ZSBhbiBJbnRlcm5l
dCBjaGVja3N1bSByb3V0aW5lIHdoaWNoIGlzIGlubGluZWFibGUKKyAqIGFuZCBvcHRpbWl6ZWQg
c3BlY2lmaWNhbGx5IGZvciB0aGUgdGFzayBvZiBjb21wdXRpbmcgSVAgaGVhZGVyIGNoZWNrc3Vt
cworICogaW4gdGhlIG5vcm1hbCBjYXNlICh3aGVyZSB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhbmQg
dGhlIGhlYWRlciBsZW5ndGggaXMKKyAqIHRoZXJlZm9yZSBhbHdheXMgZXhhY3RseSBmaXZlIDMy
LWJpdCB3b3Jkcy4KKyAqLworI2lmZGVmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUKKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK2luX2Nrc3VtX3VwZGF0ZShzdHJ1Y3QgaXAgKmlwKQoreworCWludCBf
X3RtcHN1bTsKKwlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7CisJaXAt
PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7Cit9CisKKyNlbHNl
CisKKyNkZWZpbmUJaW5fY2tzdW1fdXBkYXRlKGlwKSBcCisJZG8geyBcCisJCWludCBfX3RtcHN1
bTsgXAorCQlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7IFwKKwkJaXAt
PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7IFwKKwl9IHdoaWxl
KDApCisKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisjaWYgZGVmaW5lZChJUFZF
UlNJT04pICYmIChJUFZFUlNJT04gPT0gNCkKK3VfaW50IGluX2Nrc3VtX2hkcihjb25zdCBzdHJ1
Y3QgaXAgKmlwKTsKKyNlbmRpZgordV9zaG9ydAlpbl9hZGR3b3JkKHVfc2hvcnQgc3VtLCB1X3No
b3J0IGIpOwordV9zaG9ydAlpbl9wc2V1ZG8odV9pbnQgc3VtLCB1X2ludCBiLCB1X2ludCBjKTsK
K3Vfc2hvcnQJaW5fY2tzdW1fc2tpcChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IHNraXAp
OworI2VuZGlmCisKKyNlbmRpZiAvKiBfTUFDSElORV9JTl9DS1NVTV9IXyAqLwpkaWZmIC11IC1y
IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgJMTk3MC0wMS0wMSAw
MTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL2ludHJfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsMTk0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBKb2huIEJhbGR3
aW4gPGpoYkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ludHJfbWFjaGRlcC5oIDMwMjg5NSAy
MDE2LTA3LTE1IDA5OjQ0OjQ4WiByb3lnZXIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX0lO
VFJfTUFDSERFUF9IX18KKyNkZWZpbmUJX19NQUNISU5FX0lOVFJfTUFDSERFUF9IX18KKworI2lm
ZGVmIF9LRVJORUwKKworLyoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBJL08gaW50ZXJydXB0
cyB3ZSBhbGxvdy4gIFRoaXMgbnVtYmVyIGlzIHJhdGhlcgorICogYXJiaXRyYXJ5IGFzIGl0IGlz
IGp1c3QgdGhlIG1heGltdW0gSVJRIHJlc291cmNlIHZhbHVlLiAgVGhlIGludGVycnVwdAorICog
c291cmNlIGZvciBhIGdpdmVuIElSUSBtYXBzIHRoYXQgSS9PIGludGVycnVwdCB0byBkZXZpY2Ug
aW50ZXJydXB0CisgKiBzb3VyY2Ugd2hldGhlciBpdCBiZSBhIHBpbiBvbiBhbiBpbnRlcnJ1cHQg
Y29udHJvbGxlciBvciBhbiBNU0kgaW50ZXJydXB0LgorICogVGhlIDE2IElTQSBJUlFzIGFyZSBh
c3NpZ25lZCBmaXhlZCBJRFQgdmVjdG9ycywgYnV0IGFsbCBvdGhlciBkZXZpY2UKKyAqIGludGVy
cnVwdHMgYWxsb2NhdGUgSURUIHZlY3RvcnMgb24gZGVtYW5kLiAgQ3VycmVudGx5IHdlIGhhdmUg
MTkxIElEVAorICogdmVjdG9ycyBhdmFpbGFibGUgZm9yIGRldmljZSBpbnRlcnJ1cHRzLiAgT24g
bWFueSBzeXN0ZW1zIHdpdGggSS9PIEFQSUNzLAorICogYSBsb3Qgb2YgdGhlIElSUXMgYXJlIG5v
dCB1c2VkLCBzbyB0aGlzIG51bWJlciBjYW4gYmUgbXVjaCBsYXJnZXIgdGhhbgorICogMTkxIGFu
ZCBzdGlsbCBiZSBzYWZlIHNpbmNlIG9ubHkgaW50ZXJydXB0IHNvdXJjZXMgaW4gYWN0dWFsIHVz
ZSB3aWxsCisgKiBhbGxvY2F0ZSBJRFQgdmVjdG9ycy4KKyAqCisgKiBUaGUgZmlyc3QgMjU1IElS
UXMgKDAgLSAyNTQpIGFyZSByZXNlcnZlZCBmb3IgSVNBIElSUXMgYW5kIFBDSSBpbnRsaW5lIElS
UXMuCisgKiBJUlEgdmFsdWVzIGZyb20gMjU2IHRvIDc2NyBhcmUgdXNlZCBieSBNU0kuICBXaGVu
IHJ1bm5pbmcgdW5kZXIgdGhlIFhlbgorICogSHlwZXJ2aXNvciwgSVJRIHZhbHVlcyBmcm9tIDc2
OCB0byA0ODYzIGFyZSBhdmFpbGFibGUgZm9yIGJpbmRpbmcgdG8KKyAqIGV2ZW50IGNoYW5uZWwg
ZXZlbnRzLiAgV2UgbGVhdmUgMjU1IHVudXNlZCB0byBhdm9pZCBjb25mdXNpb24gc2luY2UgMjU1
IGlzCisgKiB1c2VkIGluIFBDSSB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIElSUS4KKyAqLworI2Rl
ZmluZQlOVU1fTVNJX0lOVFMJNTEyCisjZGVmaW5lCUZJUlNUX01TSV9JTlQJMjU2CisjaWZkZWYg
WEVOSFZNCisjaW5jbHVkZSA8eGVuL3hlbi1vcy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv
ZXZlbnRfY2hhbm5lbC5oPgorI2RlZmluZQlOVU1fRVZUQ0hOX0lOVFMJTlJfRVZFTlRfQ0hBTk5F
TFMKKyNkZWZpbmUJRklSU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX01TSV9JTlQgKyBOVU1f
TVNJX0lOVFMpCisjZGVmaW5lCUxBU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX0VWVENITl9J
TlQgKyBOVU1fRVZUQ0hOX0lOVFMgLSAxKQorI2Vsc2UKKyNkZWZpbmUJTlVNX0VWVENITl9JTlRT
CTAKKyNlbmRpZgorI2RlZmluZQlOVU1fSU9fSU5UUwkoRklSU1RfTVNJX0lOVCArIE5VTV9NU0lf
SU5UUyArIE5VTV9FVlRDSE5fSU5UUykKKworLyoKKyAqIERlZmF1bHQgYmFzZSBhZGRyZXNzIGZv
ciBNU0kgbWVzc2FnZXMgb24geDg2IHBsYXRmb3Jtcy4KKyAqLworI2RlZmluZQlNU0lfSU5URUxf
QUREUl9CQVNFCQkweGZlZTAwMDAwCisKKy8qCisgKiAtIDEgPz8/IGR1bW15IGNvdW50ZXIuCisg
KiAtIDIgY291bnRlcnMgZm9yIGVhY2ggSS9PIGludGVycnVwdC4KKyAqIC0gMSBjb3VudGVyIGZv
ciBlYWNoIENQVSBmb3IgbGFwaWMgdGltZXIuCisgKiAtIDggY291bnRlcnMgZm9yIGVhY2ggQ1BV
IGZvciBJUEkgY291bnRlcnMgZm9yIFNNUC4KKyAqLworI2lmZGVmIFNNUAorI2RlZmluZQlJTlRS
Q05UX0NPVU5UCSgxICsgTlVNX0lPX0lOVFMgKiAyICsgKDEgKyA4KSAqIE1BWENQVSkKKyNlbHNl
CisjZGVmaW5lCUlOVFJDTlRfQ09VTlQJKDEgKyBOVU1fSU9fSU5UUyAqIDIgKyAxKQorI2VuZGlm
CisKKyNpZm5kZWYgTE9DT1JFCisKK3R5cGVkZWYgdm9pZCBpbnRoYW5kX3Qodm9pZCk7CisKKyNk
ZWZpbmUJSURUVkVDKG5hbWUpCV9fQ09OQ0FUKFgsbmFtZSkKKworc3RydWN0IGludHNyYzsKKwor
LyoKKyAqIE1ldGhvZHMgdGhhdCBhIFBJQyBwcm92aWRlcyB0byBtYXNrL3VubWFzayBhIGdpdmVu
IGludGVycnVwdCBzb3VyY2UsCisgKiAidHVybiBvbiIgdGhlIGludGVycnVwdCBvbiB0aGUgQ1BV
IHNpZGUgYnkgc2V0dGluZyB1cCBhbiBJRFQgZW50cnksIGFuZAorICogcmV0dXJuIHRoZSB2ZWN0
b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlLgorICovCitzdHJ1Y3QgcGljIHsKKwl2b2lk
ICgqcGljX2VuYWJsZV9zb3VyY2UpKHN0cnVjdCBpbnRzcmMgKik7CisJdm9pZCAoKnBpY19kaXNh
YmxlX3NvdXJjZSkoc3RydWN0IGludHNyYyAqLCBpbnQpOworCXZvaWQgKCpwaWNfZW9pX3NvdXJj
ZSkoc3RydWN0IGludHNyYyAqKTsKKwl2b2lkICgqcGljX2VuYWJsZV9pbnRyKShzdHJ1Y3QgaW50
c3JjICopOworCXZvaWQgKCpwaWNfZGlzYWJsZV9pbnRyKShzdHJ1Y3QgaW50c3JjICopOworCWlu
dCAoKnBpY192ZWN0b3IpKHN0cnVjdCBpbnRzcmMgKik7CisJaW50ICgqcGljX3NvdXJjZV9wZW5k
aW5nKShzdHJ1Y3QgaW50c3JjICopOworCXZvaWQgKCpwaWNfc3VzcGVuZCkoc3RydWN0IHBpYyAq
KTsKKwl2b2lkICgqcGljX3Jlc3VtZSkoc3RydWN0IHBpYyAqLCBib29sIHN1c3BlbmRfY2FuY2Vs
bGVkKTsKKwlpbnQgKCpwaWNfY29uZmlnX2ludHIpKHN0cnVjdCBpbnRzcmMgKiwgZW51bSBpbnRy
X3RyaWdnZXIsCisJICAgIGVudW0gaW50cl9wb2xhcml0eSk7CisJaW50ICgqcGljX2Fzc2lnbl9j
cHUpKHN0cnVjdCBpbnRzcmMgKiwgdV9pbnQgYXBpY19pZCk7CisJdm9pZCAoKnBpY19yZXByb2dy
YW1fcGluKShzdHJ1Y3QgaW50c3JjICopOworCVRBSUxRX0VOVFJZKHBpYykgcGljczsKK307CisK
Ky8qIEZsYWdzIGZvciBwaWNfZGlzYWJsZV9zb3VyY2UoKSAqLworZW51bSB7CisJUElDX0VPSSwK
KwlQSUNfTk9fRU9JLAorfTsKKworLyoKKyAqIEFuIGludGVycnVwdCBzb3VyY2UuICBUaGUgdXBw
ZXItbGF5ZXIgY29kZSB1c2VzIHRoZSBQSUMgbWV0aG9kcyB0bworICogY29udHJvbCBhIGdpdmVu
IHNvdXJjZS4gIFRoZSBsb3dlci1sYXllciBQSUMgZHJpdmVycyBjYW4gc3RvcmUgYWRkaXRpb25h
bAorICogcHJpdmF0ZSBkYXRhIGluIGEgZ2l2ZW4gaW50ZXJydXB0IHNvdXJjZSBzdWNoIGFzIGFu
IGludGVycnVwdCBwaW4gbnVtYmVyCisgKiBvciBhbiBJL08gQVBJQyBwb2ludGVyLgorICovCitz
dHJ1Y3QgaW50c3JjIHsKKwlzdHJ1Y3QgcGljICppc19waWM7CisJc3RydWN0IGludHJfZXZlbnQg
KmlzX2V2ZW50OworCXVfbG9uZyAqaXNfY291bnQ7CisJdV9sb25nICppc19zdHJheWNvdW50Owor
CXVfaW50IGlzX2luZGV4OworCXVfaW50IGlzX2hhbmRsZXJzOworfTsKKworc3RydWN0IHRyYXBm
cmFtZTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmUgaG9sZHMgcGVyLWNw
dSBkYXRhLCBhbmQgaXMgcGxhY2VkIGp1c3QKKyAqIGFib3ZlIHRoZSB0b3Agb2YgdGhlIHNwYWNl
IHVzZWQgZm9yIHRoZSBOTUkgc3RhY2suCisgKi8KK3N0cnVjdCBubWlfcGNwdSB7CisJcmVnaXN0
ZXJfdAlucF9wY3B1OworCXJlZ2lzdGVyX3QJX19wYWRkaW5nOwkvKiBwYWQgdG8gMTYgYnl0ZXMg
Ki8KK307CisKKyNpZmRlZiBTTVAKK2V4dGVybiBjcHVzZXRfdCBpbnRyX2NwdXM7CisjZW5kaWYK
K2V4dGVybiBzdHJ1Y3QgbXR4IGljdV9sb2NrOworZXh0ZXJuIGludCBlbGNyX2ZvdW5kOworCitl
eHRlcm4gaW50IG1zaXhfZGlzYWJsZV9taWdyYXRpb247CisKKyNpZm5kZWYgREVWX0FUUElDCit2
b2lkCWF0cGljX3Jlc2V0KHZvaWQpOworI2VuZGlmCisvKiBYWFg6IFRoZSBlbGNyXyogcHJvdG90
eXBlcyBwcm9iYWJseSBiZWxvbmcgc29tZXdoZXJlIGVsc2UuICovCitpbnQJZWxjcl9wcm9iZSh2
b2lkKTsKK2VudW0gaW50cl90cmlnZ2VyIGVsY3JfcmVhZF90cmlnZ2VyKHVfaW50IGlycSk7Cit2
b2lkCWVsY3JfcmVzdW1lKHZvaWQpOwordm9pZAllbGNyX3dyaXRlX3RyaWdnZXIodV9pbnQgaXJx
LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKTsKKyNpZmRlZiBTTVAKK3ZvaWQJaW50cl9hZGRf
Y3B1KHVfaW50IGNwdSk7CisjZW5kaWYKK2ludAlpbnRyX2FkZF9oYW5kbGVyKGNvbnN0IGNoYXIg
Km5hbWUsIGludCB2ZWN0b3IsIGRyaXZlcl9maWx0ZXJfdCBmaWx0ZXIsIAorCQkJIGRyaXZlcl9p
bnRyX3QgaGFuZGxlciwgdm9pZCAqYXJnLCBlbnVtIGludHJfdHlwZSBmbGFncywgCisJCQkgdm9p
ZCAqKmNvb2tpZXApOyAgICAKKyNpZmRlZiBTTVAKK2ludAlpbnRyX2JpbmQodV9pbnQgdmVjdG9y
LCB1X2NoYXIgY3B1KTsKKyNlbmRpZgoraW50CWludHJfY29uZmlnX2ludHIoaW50IHZlY3Rvciwg
ZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKKyAgICBlbnVtIGludHJfcG9sYXJpdHkgcG9sKTsKK2lu
dAlpbnRyX2Rlc2NyaWJlKHVfaW50IHZlY3Rvciwgdm9pZCAqaWgsIGNvbnN0IGNoYXIgKmRlc2Ny
KTsKK3ZvaWQJaW50cl9leGVjdXRlX2hhbmRsZXJzKHN0cnVjdCBpbnRzcmMgKmlzcmMsIHN0cnVj
dCB0cmFwZnJhbWUgKmZyYW1lKTsKK3VfaW50CWludHJfbmV4dF9jcHUodm9pZCk7CitzdHJ1Y3Qg
aW50c3JjICppbnRyX2xvb2t1cF9zb3VyY2UoaW50IHZlY3Rvcik7CitpbnQJaW50cl9yZWdpc3Rl
cl9waWMoc3RydWN0IHBpYyAqcGljKTsKK2ludAlpbnRyX3JlZ2lzdGVyX3NvdXJjZShzdHJ1Y3Qg
aW50c3JjICppc3JjKTsKK2ludAlpbnRyX3JlbW92ZV9oYW5kbGVyKHZvaWQgKmNvb2tpZSk7Cit2
b2lkCWludHJfcmVzdW1lKGJvb2wgc3VzcGVuZF9jYW5jZWxsZWQpOwordm9pZAlpbnRyX3N1c3Bl
bmQodm9pZCk7Cit2b2lkCWludHJfcmVwcm9ncmFtKHZvaWQpOwordm9pZAlpbnRyY250X2FkZChj
b25zdCBjaGFyICpuYW1lLCB1X2xvbmcgKipjb3VudHApOwordm9pZAluZXh1c19hZGRfaXJxKHVf
bG9uZyBpcnEpOworaW50CW1zaV9hbGxvYyhkZXZpY2VfdCBkZXYsIGludCBjb3VudCwgaW50IG1h
eGNvdW50LCBpbnQgKmlycXMpOwordm9pZAltc2lfaW5pdCh2b2lkKTsKK2ludAltc2lfbWFwKGlu
dCBpcnEsIHVpbnQ2NF90ICphZGRyLCB1aW50MzJfdCAqZGF0YSk7CitpbnQJbXNpX3JlbGVhc2Uo
aW50ICppcnFzLCBpbnQgY291bnQpOworaW50CW1zaXhfYWxsb2MoZGV2aWNlX3QgZGV2LCBpbnQg
KmlycSk7CitpbnQJbXNpeF9yZWxlYXNlKGludCBpcnEpOworCisjZW5kaWYJLyogIUxPQ09SRSAq
LworI2VuZGlmCS8qIF9LRVJORUwgKi8KKyNlbmRpZgkvKiAhX19NQUNISU5FX0lOVFJfTUFDSERF
UF9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l
L2lvZGV2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW9kZXYuaAotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pb2Rldi5oCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9pb2Rldi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmsgUiBWIE11cnJheQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoaXMgcG9zaXRpb24g
YW5kIHVuY2hhbmdlZC4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL2lvZGV2LmggMjA3MzI5IDIwMTAtMDQtMjggMTU6Mzg6MDFaIGF0dGlsaW8gJAor
ICovCisjaWZuZGVmIF9NQUNISU5FX0lPREVWX0hfCisjZGVmaW5lCV9NQUNISU5FX0lPREVWX0hf
CisKKyNpZmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisKKyNkZWZp
bmUJaW9kZXZfcmVhZF8xCWluYgorI2RlZmluZQlpb2Rldl9yZWFkXzIJaW53CisjZGVmaW5lCWlv
ZGV2X3JlYWRfNAlpbmwKKyNkZWZpbmUJaW9kZXZfd3JpdGVfMQlvdXRiCisjZGVmaW5lCWlvZGV2
X3dyaXRlXzIJb3V0dworI2RlZmluZQlpb2Rldl93cml0ZV80CW91dGwKKworaW50CSBpb2Rldl9v
cGVuKHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAkgaW9kZXZfY2xvc2Uoc3RydWN0IHRocmVhZCAq
dGQpOworaW50CSBpb2Rldl9pb2N0bCh1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworCisjZW5k
aWYgLyogX0tFUk5FTCAqLworI2VuZGlmIC8qIF9NQUNISU5FX0lPREVWX0hfICovCmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9rZGIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUva2RiLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1OSBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMDQgTWFyY2VsIE1vb2xlbmFhcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9rZGIuaCAxNzA0NzMgMjAwNy0wNi0wOSAyMTo1NToxN1ogbWFyY2VsICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX0tEQl9IXworI2RlZmluZSBfTUFDSElORV9LREJfSF8KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BzbC5oPgorCisjZGVm
aW5lCUtEQl9TVE9QUEVEUENCKHBjKQkmc3RvcHBjYnNbcGMtPnBjX2NwdWlkXQorCitzdGF0aWMg
X19pbmxpbmUgdm9pZAora2RiX2NwdV9jbGVhcl9zaW5nbGVzdGVwKHZvaWQpCit7CisJa2RiX2Zy
YW1lLT50Zl9yZmxhZ3MgJj0gflBTTF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2Ri
X2NwdV9zZXRfc2luZ2xlc3RlcCh2b2lkKQoreworCWtkYl9mcmFtZS0+dGZfcmZsYWdzIHw9IFBT
TF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2RiX2NwdV9zeW5jX2ljYWNoZSh1bnNp
Z25lZCBjaGFyICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sKK30KKworc3RhdGljIF9faW5saW5lIHZv
aWQKK2tkYl9jcHVfdHJhcChpbnQgdHlwZSwgaW50IGNvZGUpCit7Cit9CisKKyNlbmRpZiAvKiBf
TUFDSElORV9LREJfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xp
bWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xpbWl0cy5oCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9saW1pdHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDQ0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5Mwor
ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2
ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyls
aW1pdHMuaAk4LjMgKEJlcmtlbGV5KSAxLzQvOTQKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS9saW1pdHMuaCAxNDMwNjMgMjAwNS0wMy0wMiAyMTozMzoyOVogam9l
cmcgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5F
X0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZmRlZiBfX0NDX1NVUFBP
UlRTX1dBUk5JTkcKKyN3YXJuaW5nICJtYWNoaW5lL2xpbWl0cy5oIGlzIGRlcHJlY2F0ZWQuICBJ
bmNsdWRlIHN5cy9saW1pdHMuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL2xp
bWl0cy5oPgorCisjZW5kaWYgLyogIV9NQUNISU5FX0xJTUlUU19IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvbWRfdmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21kX3Zhci5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjMgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhl
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz
L2FtZDY0L2luY2x1ZGUvbWRfdmFyLmggMjk3Mzk5IDIwMTYtMDMtMjkgMTk6NTY6NDhaIGtpYiAk
CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9NRF9WQVJfSF8KKyNkZWZpbmUJX01BQ0hJTkVfTURf
VkFSX0hfCisKKyNpbmNsdWRlIDx4ODYveDg2X3Zhci5oPgorCitleHRlcm4gIHVpbnQ2NF90ICp2
bV9wYWdlX2R1bXA7CisKK3N0cnVjdAlzYXZlZnB1OworCit2b2lkCWFtZDY0X2RiX3Jlc3VtZV9k
YnJlZyh2b2lkKTsKK3ZvaWQJYW1kNjRfc3lzY2FsbChzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IHRy
YWNlZCk7Cit2b2lkCWRvcmV0aV9pcmV0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9pcmV0
KSk7Cit2b2lkCWRvcmV0aV9pcmV0X2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9p
cmV0X2ZhdWx0KSk7Cit2b2lkCWxkX2RzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2RzKSk7Cit2
b2lkCWxkX2VzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2VzKSk7Cit2b2lkCWxkX2ZzKHZvaWQp
IF9fYXNtKF9fU1RSSU5HKGxkX2ZzKSk7Cit2b2lkCWxkX2dzKHZvaWQpIF9fYXNtKF9fU1RSSU5H
KGxkX2dzKSk7Cit2b2lkCWxkX2ZzYmFzZSh2b2lkKSBfX2FzbShfX1NUUklORyhsZF9mc2Jhc2Up
KTsKK3ZvaWQJbGRfZ3NiYXNlKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2dzYmFzZSkpOwordm9p
ZAlkc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRzX2xvYWRfZmF1bHQpKTsKK3Zv
aWQJZXNfbG9hZF9mYXVsdCh2b2lkKSBfX2FzbShfX1NUUklORyhlc19sb2FkX2ZhdWx0KSk7Cit2
b2lkCWZzX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNfbG9hZF9mYXVsdCkpOwor
dm9pZAlnc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGdzX2xvYWRfZmF1bHQpKTsK
K3ZvaWQJZnNiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNiYXNlX2xvYWRf
ZmF1bHQpKTsKK3ZvaWQJZ3NiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZ3Ni
YXNlX2xvYWRfZmF1bHQpKTsKK3ZvaWQJZnBzdGF0ZV9kcm9wKHN0cnVjdCB0aHJlYWQgKnRkKTsK
K3ZvaWQJcGFnZXplcm8odm9pZCAqYWRkcik7Cit2b2lkCXNldGlkdChpbnQgaWR4LCBhbGlhc19m
b3JfaW50aGFuZF90ICpmdW5jLCBpbnQgdHlwLCBpbnQgZHBsLCBpbnQgaXN0KTsKK3N0cnVjdCBz
YXZlZnB1ICpnZXRfcGNiX3VzZXJfc2F2ZV90ZChzdHJ1Y3QgdGhyZWFkICp0ZCk7CitzdHJ1Y3Qg
c2F2ZWZwdSAqZ2V0X3BjYl91c2VyX3NhdmVfcGNiKHN0cnVjdCBwY2IgKnBjYik7CisKKyNlbmRp
ZiAvKiAhX01BQ0hJTkVfTURfVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9tZW1kZXYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9tZW1kZXYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9t
ZW1kZXYuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWVtZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w
MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDQgTWFyayBSIFYgTXVycmF5CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvbWVtZGV2LmggMjE3NTE1IDIwMTEtMDEt
MTcgMjI6NTg6MjhaIGpraW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTUVNREVWX0hfCisj
ZGVmaW5lCV9NQUNISU5FX01FTURFVl9IXworCisjZGVmaW5lCUNERVZfTUlOT1JfTUVNCTAKKyNk
ZWZpbmUJQ0RFVl9NSU5PUl9LTUVNCTEKKworZF9vcGVuX3QJbWVtb3BlbjsKK2RfcmVhZF90CW1l
bXJ3OworZF9pb2N0bF90CW1lbWlvY3RsOworZF9tbWFwX3QJbWVtbW1hcDsKKworI2VuZGlmIC8q
IF9NQUNISU5FX01FTURFVl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9tZXRhZGF0YS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21l
dGFkYXRhLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBp
biB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9h
bWQ2NC9pbmNsdWRlL21ldGFkYXRhLmggMjkzMzQzIDIwMTYtMDEtMDcgMTk6NDc6MjZaIGVtYXN0
ZSAkICovCisKKyNpbmNsdWRlIDx4ODYvbWV0YWRhdGEuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21pbmlkdW1wLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvbWluaWR1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9taW5pZHVtcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9taW5pZHVtcC5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAyMDA2IFBldGVyIFdlbW0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0
L2luY2x1ZGUvbWluaWR1bXAuaCAyMTUxMzMgMjAxMC0xMS0xMSAxODozNToyOFogYXZnICQKKyAq
LworCisjaWZuZGVmCV9NQUNISU5FX01JTklEVU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX01JTklE
VU1QX0hfIDEKKworI2RlZmluZQlNSU5JRFVNUF9NQUdJQwkJIm1pbmlkdW1wIEZyZWVCU0QvYW1k
NjQiCisjZGVmaW5lCU1JTklEVU1QX1ZFUlNJT04JMgorCitzdHJ1Y3QgbWluaWR1bXBoZHIgewor
CWNoYXIgbWFnaWNbMjRdOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3QgbXNnYnVmc2l6
ZTsKKwl1aW50MzJfdCBiaXRtYXBzaXplOworCXVpbnQzMl90IHBtYXBzaXplOworCXVpbnQ2NF90
IGtlcm5iYXNlOworCXVpbnQ2NF90IGRtYXBiYXNlOworCXVpbnQ2NF90IGRtYXBlbmQ7Cit9Owor
CisjZW5kaWYgLyogX01BQ0hJTkVfTUlOSURVTVBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21wX3dhdGNoZG9nLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvbXBfd2F0Y2hkb2cuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9tcF93YXRjaGRvZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9tcF93YXRj
aGRvZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMzQg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFJvYmVydCBOLiBNLiBXYXRzb24KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL21wX3dhdGNoZG9nLmggMTMzNzU5IDIwMDQtMDgtMTUgMTg6MDI6MDlaIHJ3YXRzb24g
JAorICovCisKKyNpZm5kZWYJX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8KKyNkZWZpbmUJX01BQ0hJ
TkVfTVBfV0FUQ0hET0dfSF8KKwordm9pZAlhcF93YXRjaGRvZyh1X2ludCBjcHVpZCk7CisKKyNl
bmRpZiAvKiAhX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL25leHVzdmFyLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvbmV4dXN2YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9uZXh1c3Zhci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9uZXh1c3Zhci5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDUgQEAKKy8qLQorICog
Q29weXJpZ2h0IDE5OTggTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICoK
KyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMg
c29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdp
dGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCisgKiBwZXJtaXNzaW9uIG5vdGljZSBhcHBl
YXIgaW4gYWxsIGNvcGllcywgdGhhdCBib3RoIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBzdXBwb3J0aW5n
IGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZAor
ICogaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9u
IG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJt
aXNzaW9uLiAgTS5JLlQuIG1ha2VzCisgKiBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1
aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHBy
b3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5Lgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0u
SS5ULiBESVNDTEFJTVMKKyAqIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkku
VC4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9uZXh1c3Zhci5oIDE3NzE1NyAyMDA4LTAzLTEzIDIw
OjM5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTkVYVVNWQVJfSF8KKyNkZWZp
bmUJX01BQ0hJTkVfTkVYVVNWQVJfSF8KKworc3RydWN0IG5leHVzX2RldmljZSB7CisJc3RydWN0
IHJlc291cmNlX2xpc3QJbnhfcmVzb3VyY2VzOworfTsKKworREVDTEFSRV9DTEFTUyhuZXh1c19k
cml2ZXIpOworCitleHRlcm4gc3RydWN0IHJtYW4gaXJxX3JtYW4sIGRycV9ybWFuLCBwb3J0X3Jt
YW4sIG1lbV9ybWFuOworCit2b2lkCW5leHVzX2luaXRfcmVzb3VyY2VzKHZvaWQpOworCisjZW5k
aWYgLyogIV9NQUNISU5FX05FWFVTVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHguaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9ucHguaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHgu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvbnB4LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L25weC5oIDIzMzA0NCAyMDEyLTAzLTE2IDIwOjI0OjMwWiB0aWpsICQgKi8KKworI2luY2x1ZGUg
PHg4Ni9mcHUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL29md19tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvb2Z3
X21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFj
aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMg
aW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv
YW1kNjQvaW5jbHVkZS9vZndfbWFjaGRlcC5oIDI1MDg0MCAyMDEzLTA1LTIxIDAzOjA1OjQ5WiBt
YXJjZWwgJCAqLworCisjaW5jbHVkZSA8eDg2L29md19tYWNoZGVwLmg+CmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYXJhbS5oIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BhcmFtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGFyYW0uaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE1NSBAQAorLyotCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz
aXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k
ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq
IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg
Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgUmFscGggQ2FtcGJlbGwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg
b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n
IGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl
bG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBp
dHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0
eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQor
ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcGFyYW0u
aAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUvcGFyYW0uaCAyOTc4NzcgMjAxNi0wNC0xMiAyMToyMzo0NFogamhiICQKKyAq
LworCisKKyNpZm5kZWYgX0FNRDY0X0lOQ0xVREVfUEFSQU1fSF8KKyNkZWZpbmUJX0FNRDY0X0lO
Q0xVREVfUEFSQU1fSF8KKworI2luY2x1ZGUgPG1hY2hpbmUvX2FsaWduLmg+CisKKy8qCisgKiBN
YWNoaW5lIGRlcGVuZGVudCBjb25zdGFudHMgZm9yIEFNRDY0LgorICovCisKKworI2RlZmluZSBf
X0hBVkVfQUNQSQorI2RlZmluZSBfX1BDSV9SRVJPVVRFX0lOVEVSUlVQVAorCisjaWZuZGVmIE1B
Q0hJTkUKKyNkZWZpbmUJTUFDSElORQkJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJTkVf
QVJDSAorI2RlZmluZQlNQUNISU5FX0FSQ0gJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJ
TkVfQVJDSDMyCisjZGVmaW5lCU1BQ0hJTkVfQVJDSDMyCSJpMzg2IgorI2VuZGlmCisKKyNpZiBk
ZWZpbmVkKFNNUCkgfHwgZGVmaW5lZChLTERfTU9EVUxFKQorI2lmbmRlZiBNQVhDUFUKKyNkZWZp
bmUgTUFYQ1BVCQkyNTYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTUFYQ1BVCQkxCisjZW5kaWYK
KworI2lmbmRlZiBNQVhNRU1ET00KKyNkZWZpbmUJTUFYTUVNRE9NCTgKKyNlbmRpZgorCisjZGVm
aW5lCUFMSUdOQllURVMJCV9BTElHTkJZVEVTCisjZGVmaW5lCUFMSUdOKHApCQlfQUxJR04ocCkK
Ky8qCisgKiBBTElHTkVEX1BPSU5URVIgaXMgYSBib29sZWFuIG1hY3JvIHRoYXQgY2hlY2tzIHdo
ZXRoZXIgYW4gYWRkcmVzcworICogaXMgdmFsaWQgdG8gZmV0Y2ggZGF0YSBlbGVtZW50cyBvZiB0
eXBlIHQgZnJvbSBvbiB0aGlzIGFyY2hpdGVjdHVyZS4KKyAqIFRoaXMgZG9lcyBub3QgcmVmbGVj
dCB0aGUgb3B0aW1hbCBhbGlnbm1lbnQsIGp1c3QgdGhlIHBvc3NpYmlsaXR5CisgKiAod2l0aGlu
IHJlYXNvbmFibGUgbGltaXRzKS4gCisgKi8KKyNkZWZpbmUJQUxJR05FRF9QT0lOVEVSKHAsIHQp
CTEKKworLyoKKyAqIENBQ0hFX0xJTkVfU0laRSBpcyB0aGUgY29tcGlsZS10aW1lIG1heGltdW0g
Y2FjaGUgbGluZSBzaXplIGZvciBhbgorICogYXJjaGl0ZWN0dXJlLiAgSXQgc2hvdWxkIGJlIHVz
ZWQgd2l0aCBhcHByb3ByaWF0ZSBjYXV0aW9uLgorICovCisjZGVmaW5lCUNBQ0hFX0xJTkVfU0hJ
RlQJNworI2RlZmluZQlDQUNIRV9MSU5FX1NJWkUJCSgxIDw8IENBQ0hFX0xJTkVfU0hJRlQpCisK
Ky8qIFNpemUgb2YgdGhlIGxldmVsIDEgcGFnZSB0YWJsZSB1bml0cyAqLworI2RlZmluZSBOUFRF
UEcJCShQQUdFX1NJWkUvKHNpemVvZiAocHRfZW50cnlfdCkpKQorI2RlZmluZQlOUFRFUEdTSElG
VAk5CQkvKiBMT0cyKE5QVEVQRykgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgkJLyogTE9HMihQ
QUdFX1NJWkUpICovCisjZGVmaW5lIFBBR0VfU0laRQkoMTw8UEFHRV9TSElGVCkJLyogYnl0ZXMv
cGFnZSAqLworI2RlZmluZSBQQUdFX01BU0sJKFBBR0VfU0laRS0xKQorLyogU2l6ZSBvZiB0aGUg
bGV2ZWwgMiBwYWdlIGRpcmVjdG9yeSB1bml0cyAqLworI2RlZmluZQlOUERFUEcJCShQQUdFX1NJ
WkUvKHNpemVvZiAocGRfZW50cnlfdCkpKQorI2RlZmluZQlOUERFUEdTSElGVAk5CQkvKiBMT0cy
KE5QREVQRykgKi8KKyNkZWZpbmUJUERSU0hJRlQJMjEgICAgICAgICAgICAgIC8qIExPRzIoTkJQ
RFIpICovCisjZGVmaW5lCU5CUERSCQkoMTw8UERSU0hJRlQpICAgLyogYnl0ZXMvcGFnZSBkaXIg
Ki8KKyNkZWZpbmUJUERSTUFTSwkJKE5CUERSLTEpCisvKiBTaXplIG9mIHRoZSBsZXZlbCAzIHBh
Z2UgZGlyZWN0b3J5IHBvaW50ZXIgdGFibGUgdW5pdHMgKi8KKyNkZWZpbmUJTlBEUEVQRwkJKFBB
R0VfU0laRS8oc2l6ZW9mIChwZHBfZW50cnlfdCkpKQorI2RlZmluZQlOUERQRVBHU0hJRlQJOQkJ
LyogTE9HMihOUERQRVBHKSAqLworI2RlZmluZQlQRFBTSElGVAkzMAkJLyogTE9HMihOQlBEUCkg
Ki8KKyNkZWZpbmUJTkJQRFAJCSgxPDxQRFBTSElGVCkJLyogYnl0ZXMvcGFnZSBkaXIgcHRyIHRh
YmxlICovCisjZGVmaW5lCVBEUE1BU0sJCShOQlBEUC0xKQorLyogU2l6ZSBvZiB0aGUgbGV2ZWwg
NCBwYWdlLW1hcCBsZXZlbC00IHRhYmxlIHVuaXRzICovCisjZGVmaW5lCU5QTUw0RVBHCShQQUdF
X1NJWkUvKHNpemVvZiAocG1sNF9lbnRyeV90KSkpCisjZGVmaW5lCU5QTUw0RVBHU0hJRlQJOQkJ
LyogTE9HMihOUE1MNEVQRykgKi8KKyNkZWZpbmUJUE1MNFNISUZUCTM5CQkvKiBMT0cyKE5CUE1M
NCkgKi8KKyNkZWZpbmUJTkJQTUw0CQkoMVVMPDxQTUw0U0hJRlQpLyogYnl0ZXMvcGFnZSBtYXAg
bGV2NCB0YWJsZSAqLworI2RlZmluZQlQTUw0TUFTSwkoTkJQTUw0LTEpCisKKyNkZWZpbmUJTUFY
UEFHRVNJWkVTCTMJLyogbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgKi8K
KworI2RlZmluZSBJT1BBR0VTCTIJCS8qIHBhZ2VzIG9mIGkvbyBwZXJtaXNzaW9uIGJpdG1hcCAq
LworLyoKKyAqIEkvTyBwZXJtaXNzaW9uIGJpdG1hcCBoYXMgYSBiaXQgZm9yIGVhY2ggSS9PIHBv
cnQgcGx1cyBhbiBhZGRpdGlvbmFsCisgKiBieXRlIGF0IHRoZSBlbmQgd2l0aCBhbGwgYml0cyBz
ZXQuIFNlZSBzZWN0aW9uICJJL08gUGVybWlzc2lvbiBCaXQgTWFwIgorICogaW4gdGhlIEludGVs
IFNETSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjZGVmaW5lCUlPUEVSTV9CSVRNQVBfU0laRQko
SU9QQUdFUyAqIFBBR0VfU0laRSArIDEpCisKKyNpZm5kZWYJS1NUQUNLX1BBR0VTCisjZGVmaW5l
CUtTVEFDS19QQUdFUwk0CS8qIHBhZ2VzIG9mIGtzdGFjayAod2l0aCBwY2IpICovCisjZW5kaWYK
KyNkZWZpbmUJS1NUQUNLX0dVQVJEX1BBR0VTIDEJLyogcGFnZXMgb2Yga3N0YWNrIGd1YXJkOyAw
IGRpc2FibGVzICovCisKKy8qCisgKiBNYWNoIGRlcml2ZWQgY29udmVyc2lvbiBtYWNyb3MKKyAq
LworI2RlZmluZQlyb3VuZF9wYWdlKHgpCSgoKCh1bnNpZ25lZCBsb25nKSh4KSkgKyBQQUdFX01B
U0spICYgfihQQUdFX01BU0spKQorI2RlZmluZQl0cnVuY19wYWdlKHgpCSgodW5zaWduZWQgbG9u
ZykoeCkgJiB+KFBBR0VfTUFTSykpCisjZGVmaW5lIHRydW5jXzJtcGFnZSh4KQkoKHVuc2lnbmVk
IGxvbmcpKHgpICYgflBEUk1BU0spCisjZGVmaW5lIHJvdW5kXzJtcGFnZSh4KQkoKCgodW5zaWdu
ZWQgbG9uZykoeCkpICsgUERSTUFTSykgJiB+UERSTUFTSykKKyNkZWZpbmUgdHJ1bmNfMWdwYWdl
KHgpCSgodW5zaWduZWQgbG9uZykoeCkgJiB+UERQTUFTSykKKworI2RlZmluZQlhdG9wKHgpCQko
KHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lCXB0b2EoeCkJCSgodW5z
aWduZWQgbG9uZykoeCkgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZQlhbWQ2NF9idG9wKHgpCSgo
dW5zaWduZWQgbG9uZykoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUJYW1kNjRfcHRvYih4KQko
KHVuc2lnbmVkIGxvbmcpKHgpIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUJcGd0b2soeCkJKCh1
bnNpZ25lZCBsb25nKSh4KSAqIChQQUdFX1NJWkUgLyAxMDI0KSkgCisKKyNkZWZpbmUJSU5LRVJO
RUwodmEpICgoKHZhKSA+PSBETUFQX01JTl9BRERSRVNTICYmICh2YSkgPCBETUFQX01BWF9BRERS
RVNTKSBcCisgICAgfHwgKCh2YSkgPj0gVk1fTUlOX0tFUk5FTF9BRERSRVNTICYmICh2YSkgPCBW
TV9NQVhfS0VSTkVMX0FERFJFU1MpKQorCisjZW5kaWYgLyogIV9BTUQ2NF9JTkNMVURFX1BBUkFN
X0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9w
Yy9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGMvYmlvcy5oCi0t
LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Jpb3MuaAkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvcGMvYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBA
IC0wLDAgKzEsMTIxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NyBNaWNoYWVsIFNtaXRo
CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSm9uYXRoYW4gTGVtb24KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjL2Jp
b3MuaCAyNzA4MjggMjAxNC0wOC0yOSAyMToyNTo0N1ogamhiICQKKyAqLworCisjaWZuZGVmIF9N
QUNISU5FX1BDX0JJT1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfUENfQklPU19IXworCisvKgorICog
SW50IDE1OkU4MjAgJ1NNQVAnIHN0cnVjdHVyZQorICovCisjZGVmaW5lIFNNQVBfU0lHCTB4NTM0
RDQxNTAJCQkvKiAnU01BUCcgKi8KKworI2RlZmluZQlTTUFQX1RZUEVfTUVNT1JZCTEKKyNkZWZp
bmUJU01BUF9UWVBFX1JFU0VSVkVECTIKKyNkZWZpbmUJU01BUF9UWVBFX0FDUElfUkVDTEFJTQkz
CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX05WUwk0CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX0VS
Uk9SCTUKKworI2RlZmluZQlTTUFQX1hBVFRSX0VOQUJMRUQJMHgwMDAwMDAwMQorI2RlZmluZQlT
TUFQX1hBVFRSX05PTl9WT0xBVElMRQkweDAwMDAwMDAyCisjZGVmaW5lCVNNQVBfWEFUVFJfTUFT
SwkJKFNNQVBfWEFUVFJfRU5BQkxFRCB8IFNNQVBfWEFUVFJfTk9OX1ZPTEFUSUxFKQorCitzdHJ1
Y3QgYmlvc19zbWFwIHsKKyAgICB1X2ludDY0X3QJYmFzZTsKKyAgICB1X2ludDY0X3QJbGVuZ3Ro
OworICAgIHVfaW50MzJfdAl0eXBlOworfSBfX3BhY2tlZDsKKworLyogU3RydWN0dXJlIGV4dGVu
ZGVkIHRvIGluY2x1ZGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZpZWxkIGluIEFDUEkgMy4wLiAqLwor
c3RydWN0IGJpb3Nfc21hcF94YXR0ciB7CisgICAgdV9pbnQ2NF90CWJhc2U7CisgICAgdV9pbnQ2
NF90CWxlbmd0aDsKKyAgICB1X2ludDMyX3QJdHlwZTsKKyAgICB1X2ludDMyX3QJeGF0dHI7Cit9
IF9fcGFja2VkOworCQorLyoKKyAqIFN5c3RlbSBNYW5hZ2VtZW50IEJJT1MKKyAqLworI2RlZmlu
ZQlTTUJJT1NfU1RBUlQJMHhmMDAwMAorI2RlZmluZQlTTUJJT1NfU1RFUAkweDEwCisjZGVmaW5l
CVNNQklPU19PRkYJMAorI2RlZmluZQlTTUJJT1NfTEVOCTQKKyNkZWZpbmUJU01CSU9TX1NJRwki
X1NNXyIKKworc3RydWN0IHNtYmlvc19lcHMgeworCXVpbnQ4X3QJCWFuY2hvcl9zdHJpbmdbNF07
CQkvKiAnX1NNXycgKi8KKwl1aW50OF90CQljaGVja3N1bTsKKwl1aW50OF90CQlsZW5ndGg7CisJ
dWludDhfdAkJbWFqb3JfdmVyc2lvbjsKKwl1aW50OF90CQltaW5vcl92ZXJzaW9uOworCXVpbnQx
Nl90CW1heGltdW1fc3RydWN0dXJlX3NpemU7CisJdWludDhfdAkJZW50cnlfcG9pbnRfcmV2aXNp
b247CisJdWludDhfdAkJZm9ybWF0dGVkX2FyZWFbNV07CisJdWludDhfdAkJaW50ZXJtZWRpYXRl
X2FuY2hvcl9zdHJpbmdbNV07CS8qICdfRE1JXycgKi8KKwl1aW50OF90CQlpbnRlcm1lZGlhdGVf
Y2hlY2tzdW07CisJdWludDE2X3QJc3RydWN0dXJlX3RhYmxlX2xlbmd0aDsKKwl1aW50MzJfdAlz
dHJ1Y3R1cmVfdGFibGVfYWRkcmVzczsKKwl1aW50MTZfdAludW1iZXJfc3RydWN0dXJlczsKKwl1
aW50OF90CQlCQ0RfcmV2aXNpb247Cit9OworCitzdHJ1Y3Qgc21iaW9zX3N0cnVjdHVyZV9oZWFk
ZXIgeworCXVpbnQ4X3QJCXR5cGU7CisJdWludDhfdAkJbGVuZ3RoOworCXVpbnQxNl90CWhhbmRs
ZTsKK307CisKKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lIEJJT1NfUEFERFJUT1ZBRERSKHgpCSgo
eCkgKyBLRVJOQkFTRSkKKyNkZWZpbmUgQklPU19WQUREUlRPUEFERFIoeCkJKCh4KSAtIEtFUk5C
QVNFKQorCitzdHJ1Y3QgYmlvc19vZW1fc2lnbmF0dXJlIHsKKwljaGFyICogYW5jaG9yOwkJLyog
c2VhcmNoIGFuY2hvciBzdHJpbmcgaW4gQklPUyBtZW1vcnkgKi8KKwlzaXplX3Qgb2Zmc2V0OwkJ
Lyogb2Zmc2V0IGZyb20gYW5jaG9yIChtYXkgYmUgbmVnYXRpdmUpICovCisJc2l6ZV90IHRvdGxl
bjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBCSU9TIHN0cmluZyB0byBjb3B5ICovCit9IF9fcGFja2Vk
OworCitzdHJ1Y3QgYmlvc19vZW1fcmFuZ2UgeworCXVfaW50IGZyb207CQkvKiBzaG91bGRuJ3Qg
YmUgYmVsb3cgMHhlMDAwMCAqLworCXVfaW50IHRvOwkJLyogc2hvdWxkbid0IGJlIGFib3ZlIDB4
ZmZmZmYgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiaW9zX29lbSB7CisJc3RydWN0IGJpb3Nf
b2VtX3JhbmdlIHJhbmdlOworCXN0cnVjdCBiaW9zX29lbV9zaWduYXR1cmUgc2lnbmF0dXJlW107
Cit9IF9fcGFja2VkOworCitpbnQJYmlvc19vZW1fc3RyaW5ncyhzdHJ1Y3QgYmlvc19vZW0gKm9l
bSwgdV9jaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW4pOwordWludDMyX3QgYmlvc19zaWdzZWFy
Y2godWludDMyX3Qgc3RhcnQsIHVfY2hhciAqc2lnLCBpbnQgc2lnbGVuLCBpbnQgcGFyYWxlbiwK
KwkgICAgaW50IHNpZ29mcyk7Cit2b2lkIGJpb3NfYWRkX3NtYXBfZW50cmllcyhzdHJ1Y3QgYmlv
c19zbWFwICpzbWFwYmFzZSwgdV9pbnQzMl90IHNtYXBzaXplLAorCSAgICB2bV9wYWRkcl90ICpw
aHlzbWFwLCBpbnQgKnBoeXNtYXBfaWR4KTsKKyNlbmRpZgorCisjZW5kaWYgLyogX01BQ0hJTkVf
UENfQklPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvcGMvZGlzcGxheS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Bj
L2Rpc3BsYXkuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYy9kaXNw
bGF5LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Rpc3BsYXkuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ1IEBACisvKgorICogSUJNIFBDIGRpc3BsYXkg
ZGVmaW5pdGlvbnMKKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvcGMvZGlzcGxheS5oIDEzOTczMCAyMDA1LTAxLTA1IDIwOjExOjEzWiBpbXAgJAorICovCisK
Ky8qIENvbG9yIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZH
X0JMQUNLCQkgICAwCisjZGVmaW5lCUZHX0JMVUUJCQkgICAxCisjZGVmaW5lCUZHX0dSRUVOCQkg
ICAyCisjZGVmaW5lCUZHX0NZQU4JCQkgICAzCisjZGVmaW5lCUZHX1JFRAkJCSAgIDQKKyNkZWZp
bmUJRkdfTUFHRU5UQQkJICAgNQorI2RlZmluZQlGR19CUk9XTgkJICAgNgorI2RlZmluZQlGR19M
SUdIVEdSRVkJCSAgIDcKKyNkZWZpbmUJRkdfREFSS0dSRVkJCSAgIDgKKyNkZWZpbmUJRkdfTElH
SFRCTFVFCQkgICA5CisjZGVmaW5lCUZHX0xJR0hUR1JFRU4JCSAgMTAKKyNkZWZpbmUJRkdfTElH
SFRDWUFOCQkgIDExCisjZGVmaW5lCUZHX0xJR0hUUkVECQkgIDEyCisjZGVmaW5lCUZHX0xJR0hU
TUFHRU5UQQkJICAxMworI2RlZmluZQlGR19ZRUxMT1cJCSAgMTQKKyNkZWZpbmUJRkdfV0hJVEUJ
CSAgMTUKKyNkZWZpbmUJRkdfQkxJTksJCTB4ODAKKworLyogQ29sb3IgYXR0cmlidXRlcyBmb3Ig
dGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfQkxBQ0sJCTB4MDAKKyNkZWZpbmUJQkdf
QkxVRQkJCTB4MTAKKyNkZWZpbmUJQkdfR1JFRU4JCTB4MjAKKyNkZWZpbmUJQkdfQ1lBTgkJCTB4
MzAKKyNkZWZpbmUJQkdfUkVECQkJMHg0MAorI2RlZmluZQlCR19NQUdFTlRBCQkweDUwCisjZGVm
aW5lCUJHX0JST1dOCQkweDYwCisjZGVmaW5lCUJHX0xJR0hUR1JFWQkJMHg3MAorCisvKiBNb25v
Y2hyb21lIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZHX1VO
REVSTElORQkJMHgwMQorI2RlZmluZQlGR19JTlRFTlNFCQkweDA4CisKKy8qIE1vbm9jaHJvbWUg
YXR0cmlidXRlcyBmb3IgdGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfSU5URU5TRQkJ
MHgxMApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNi
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjYi5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTU3IEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICogQ29weXJpZ2h0IChjKSAx
OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh
cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGNiLmgJNS4xMCAoQmVy
a2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVk
ZS9wY2IuaCAyOTA3MjggMjAxNS0xMS0xMiAyMjowMDo1OVogamhiICQKKyAqLworCisjaWZuZGVm
IF9BTUQ2NF9QQ0JfSF8KKyNkZWZpbmUgX0FNRDY0X1BDQl9IXworCisvKgorICogQU1ENjQgcHJv
Y2VzcyBjb250cm9sIGJsb2NrCisgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2ZwdS5oPgorI2luY2x1
ZGUgPG1hY2hpbmUvc2VnbWVudHMuaD4KKworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIE5COiBU
aGUgZmllbGRzIG1hcmtlZCB3aXRoICgqKSBhcmUgdXNlZCBieSBrZXJuZWwgZGVidWdnZXJzLiAg
VGhlaXIKKyAqIEFCSSBzaG91bGQgYmUgcHJlc2VydmVkLgorICovCitzdHJ1Y3QgcGNiIHsKKwly
ZWdpc3Rlcl90CXBjYl9yMTU7CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3IxNDsJLyogKCop
ICovCisJcmVnaXN0ZXJfdAlwY2JfcjEzOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yMTI7
CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3JicDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlw
Y2JfcnNwOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yYng7CS8qICgqKSAqLworCXJlZ2lz
dGVyX3QJcGNiX3JpcDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlwY2JfZnNiYXNlOworCXJlZ2lz
dGVyX3QJcGNiX2dzYmFzZTsKKwlyZWdpc3Rlcl90CXBjYl9rZ3NiYXNlOworCXJlZ2lzdGVyX3QJ
cGNiX2NyMDsKKwlyZWdpc3Rlcl90CXBjYl9jcjI7CisJcmVnaXN0ZXJfdAlwY2JfY3IzOworCXJl
Z2lzdGVyX3QJcGNiX2NyNDsKKwlyZWdpc3Rlcl90CXBjYl9kcjA7CisJcmVnaXN0ZXJfdAlwY2Jf
ZHIxOworCXJlZ2lzdGVyX3QJcGNiX2RyMjsKKwlyZWdpc3Rlcl90CXBjYl9kcjM7CisJcmVnaXN0
ZXJfdAlwY2JfZHI2OworCXJlZ2lzdGVyX3QJcGNiX2RyNzsKKworCXN0cnVjdCByZWdpb25fZGVz
Y3JpcHRvciBwY2JfZ2R0OworCXN0cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfaWR0OworCXN0
cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfbGR0OworCXVpbnQxNl90CXBjYl90cjsKKworCXVf
aW50CQlwY2JfZmxhZ3M7CisjZGVmaW5lCVBDQl9GVUxMX0lSRVQJMHgwMQkvKiBmdWxsIGlyZXQg
aXMgcmVxdWlyZWQgKi8KKyNkZWZpbmUJUENCX0RCUkVHUwkweDAyCS8qIHByb2Nlc3MgdXNpbmcg
ZGVidWcgcmVnaXN0ZXJzICovCisjZGVmaW5lCVBDQl9LRVJORlBVCTB4MDQJLyoga2VybmVsIHVz
ZXMgZnB1ICovCisjZGVmaW5lCVBDQl9GUFVJTklURE9ORQkweDA4CS8qIGZwdSBzdGF0ZSBpcyBp
bml0aWFsaXplZCAqLworI2RlZmluZQlQQ0JfVVNFUkZQVUlOSVRET05FIDB4MTAgLyogZnB1IHVz
ZXIgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUJUENCXzMyQklUCTB4NDAJLyogcHJv
Y2VzcyBoYXMgMzIgYml0IGNvbnRleHQgKHNlZ3MgZXRjKSAqLworCisJdWludDE2X3QJcGNiX2lu
aXRpYWxfZnB1Y3c7CisKKwkvKiBjb3B5aW4vb3V0IGZhdWx0IHJlY292ZXJ5ICovCisJY2FkZHJf
dAkJcGNiX29uZmF1bHQ7CisKKwl1aW50NjRfdAlwY2JfcGFkMDsKKworCS8qIGxvY2FsIHRzcywg
d2l0aCBpL28gYml0bWFwOyBOVUxMIGZvciBjb21tb24gKi8KKwlzdHJ1Y3QgYW1kNjR0c3MgKnBj
Yl90c3NwOworCisJLyogbW9kZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisJcmVnaXN0ZXJfdAlw
Y2JfZWZlcjsKKwlyZWdpc3Rlcl90CXBjYl9zdGFyOworCXJlZ2lzdGVyX3QJcGNiX2xzdGFyOwor
CXJlZ2lzdGVyX3QJcGNiX2NzdGFyOworCXJlZ2lzdGVyX3QJcGNiX3NmbWFzazsKKworCXN0cnVj
dCBzYXZlZnB1CSpwY2Jfc2F2ZTsKKworCXVpbnQ2NF90CXBjYl9wYWRbNV07Cit9OworCisvKiBQ
ZXItQ1BVIHN0YXRlIHNhdmVkIGR1cmluZyBzdXNwZW5kIGFuZCByZXN1bWUuICovCitzdHJ1Y3Qg
c3VzcHBjYiB7CisJc3RydWN0IHBjYglzcF9wY2I7CisKKwkvKiBmcHUgY29udGV4dCBmb3Igc3Vz
cGVuZC9yZXN1bWUgKi8KKwl2b2lkCQkqc3BfZnB1c3VzcGVuZDsKK307CisjZW5kaWYKKworI2lm
ZGVmIF9LRVJORUwKK3N0cnVjdCB0cmFwZnJhbWU7CisKKy8qCisgKiBUaGUgcGNiX2ZsYWdzIGlz
IG9ubHkgbW9kaWZpZWQgYnkgY3VycmVudCB0aHJlYWQsIG9yIGJ5IG90aGVyIHRocmVhZHMKKyAq
IHdoZW4gY3VycmVudCB0aHJlYWQgaXMgc3RvcHBlZC4gIEhvd2V2ZXIsIGN1cnJlbnQgdGhyZWFk
IG1heSBjaGFuZ2UgaXQKKyAqIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IGluIGNwdV9zd2l0
Y2goKSwgb3IgaW4gdGhlIHRyYXAgaGFuZGxlci4KKyAqIFdoZW4gd2UgcmVhZC1tb2RpZnktd3Jp
dGUgcGNiX2ZsYWdzIGZyb20gQyBzb3VyY2VzLCBjb21waWxlciBtYXkgZ2VuZXJhdGUKKyAqIGNv
ZGUgdGhhdCBpcyBub3QgYXRvbWljIHJlZ2FyZGluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJ
ZiBhIHRyYXAgb3IKKyAqIGludGVycnVwdCBoYXBwZW5zIGFuZCBhbnkgZmxhZyBpcyBtb2RpZmll
ZCBmcm9tIHRoZSBoYW5kbGVyLCBpdCBjYW4gYmUKKyAqIGNsb2JiZXJlZCB3aXRoIHRoZSBjYWNo
ZWQgdmFsdWUgbGF0ZXIuICBUaGVyZWZvcmUsIHdlIGltcGxlbWVudCBzZXR0aW5nCisgKiBhbmQg
Y2xlYXJpbmcgZmxhZ3Mgd2l0aCBzaW5nbGUtaW5zdHJ1Y3Rpb24gZnVuY3Rpb25zLCB3aGljaCBk
byBub3QgcmFjZQorICogd2l0aCBwb3NzaWJsZSBtb2RpZmljYXRpb24gb2YgdGhlIGZsYWdzIGZy
b20gdGhlIHRyYXAgb3IgaW50ZXJydXB0IGNvbnRleHQsCisgKiBiZWNhdXNlIHRyYXBzIGFuZCBp
bnRlcnJ1cHRzIGFyZSBleGVjdXRlZCBvbmx5IG9uIGluc3RydWN0aW9uIGJvdW5kYXJ5LgorICov
CitzdGF0aWMgX19pbmxpbmUgdm9pZAorc2V0X3BjYl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNv
bnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20gX192b2xhdGlsZSgib3JsICUxLCUwIgorCSAg
ICA6ICI9bSIgKHBjYi0+cGNiX2ZsYWdzKSA6ICJpciIgKGZsYWdzKSwgIm0iIChwY2ItPnBjYl9m
bGFncykKKwkgICAgOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZWFyX3Bj
Yl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNvbnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20g
X192b2xhdGlsZSgiYW5kbCAlMSwlMCIKKwkgICAgOiAiPW0iIChwY2ItPnBjYl9mbGFncykgOiAi
aXIiICh+ZmxhZ3MpLCAibSIgKHBjYi0+cGNiX2ZsYWdzKQorCSAgICA6ICJjYyIpOworfQorCit2
b2lkCW1ha2VjdHgoc3RydWN0IHRyYXBmcmFtZSAqLCBzdHJ1Y3QgcGNiICopOworaW50CXNhdmVj
dHgoc3RydWN0IHBjYiAqKSBfX3JldHVybnNfdHdpY2U7Cit2b2lkCXJlc3VtZWN0eChzdHJ1Y3Qg
cGNiICopOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BTUQ2NF9QQ0JfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjaV9jZmdyZWcuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wY2lfY2ZncmVnLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNpX2NmZ3JlZy5oCTE5NzAtMDEtMDEgMDE6MDA6
MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu
ZS9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAq
LworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjaV9jZmdyZWcu
aCAyMjM0NDAgMjAxMS0wNi0yMiAyMTowNDoxM1ogamhiICQgKi8KKworI2luY2x1ZGUgPHg4Ni9w
Y2lfY2ZncmVnLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNwdS5oCi0t
LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjcHUuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvcGNwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsMjUxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgUGV0ZXIgV2VtbSA8cGV0ZXJAbmV0cGxl
eC5jb20uYXU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcv
MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wY3B1LmggMjgyNjg0IDIwMTUtMDUtMDkgMTk6MTE6MDFa
IGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QQ1BVX0hfCisjZGVmaW5lCV9NQUNISU5F
X1BDUFVfSF8KKworI2lmbmRlZiBfU1lTX0NERUZTX0hfCisjZXJyb3IgInN5cy9jZGVmcy5oIGlz
IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZpbGUiCisjZW5kaWYKKworLyoKKyAqIFRoZSBTTVAg
cGFydHMgYXJlIHNldHVwIGluIHBtYXAuYyBhbmQgbG9jb3JlLnMgZm9yIHRoZSBCU1AsIGFuZAor
ICogbXBfbWFjaGRlcC5jIHNldHMgdXAgdGhlIGRhdGEgZm9yIHRoZSBBUCdzIHRvICJzZWUiIHdo
ZW4gdGhleSBhd2FrZS4KKyAqIFRoZSByZWFzb24gZm9yIGRvaW5nIGl0IHZpYSBhIHN0cnVjdCBp
cyBzbyB0aGF0IGFuIGFycmF5IG9mIHBvaW50ZXJzCisgKiB0byBlYWNoIENQVSdzIGRhdGEgY2Fu
IGJlIHNldCB1cCBmb3IgdGhpbmdzIGxpa2UgImNoZWNrIGN1cnByb2Mgb24gYWxsCisgKiBvdGhl
ciBwcm9jZXNzb3JzIgorICovCisjZGVmaW5lCVBDUFVfTURfRklFTERTCQkJCQkJCVwKKwljaGFy
CXBjX21vbml0b3JidWZbMTI4XSBfX2FsaWduZWQoMTI4KTsgLyogY2FjaGUgbGluZSAqLwlcCisJ
c3RydWN0CXBjcHUgKnBjX3BydnNwYWNlOwkvKiBTZWxmLXJlZmVyZW5jZSAqLwkJXAorCXN0cnVj
dAlwbWFwICpwY19jdXJwbWFwOwkJCQkJXAorCXN0cnVjdAlhbWQ2NHRzcyAqcGNfdHNzcDsJLyog
VFNTIHNlZ21lbnQgYWN0aXZlIG9uIENQVSAqLwlcCisJc3RydWN0CWFtZDY0dHNzICpwY19jb21t
b250c3NwOy8qIENvbW1vbiBUU1MgZm9yIHRoZSBDUFUgKi8JXAorCXJlZ2lzdGVyX3QgcGNfcnNw
MDsJCQkJCQlcCisJcmVnaXN0ZXJfdCBwY19zY3JhdGNoX3JzcDsJLyogVXNlciAlcnNwIGluIHN5
c2NhbGwgKi8JXAorCXVfaW50CXBjX2FwaWNfaWQ7CQkJCQkJXAorCXVfaW50ICAgcGNfYWNwaV9p
ZDsJCS8qIEFDUEkgQ1BVIGlkICovCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVICVmcyBkZXNj
cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IJKnBjX2ZzMzJw
OwkJCVwKKwkvKiBQb2ludGVyIHRvIHRoZSBDUFUgJWdzIGRlc2NyaXB0b3IgKi8JCQkJXAorCXN0
cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvcgkqcGNfZ3MzMnA7CQkJXAorCS8qIFBvaW50ZXIg
dG8gdGhlIENQVSBMRFQgZGVzY3JpcHRvciAqLwkJCQlcCisJc3RydWN0IHN5c3RlbV9zZWdtZW50
X2Rlc2NyaXB0b3IgKnBjX2xkdDsJCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVIFRTUyBkZXNj
cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqcGNfdHNz
OwkJCVwKKwl1aW50NjRfdAlwY19wbV9zYXZlX2NudDsJCQkJCVwKKwl1X2ludAlwY19jbWNpX21h
c2s7CQkvKiBNQ3ggYmFua3MgZm9yIENNQ0kgKi8JXAorCXVpbnQ2NF90IHBjX2RicmVnWzE2XTsJ
CS8qIGRkYiBkZWJ1Z2dpbmcgcmVncyAqLwlcCisJaW50IHBjX2RicmVnX2NtZDsJCS8qIGRkYiBk
ZWJ1Z2dpbmcgcmVnIGNtZCAqLwlcCisJdV9pbnQJcGNfdmNwdV9pZDsJCS8qIFhlbiB2Q1BVIElE
ICovCQlcCisJdWludDMyX3QgcGNfcGNpZF9uZXh0OwkJCQkJCVwKKwl1aW50MzJfdCBwY19wY2lk
X2dlbjsJCQkJCQlcCisJY2hhcglfX3BhZFsxNDldCQkvKiBiZSBkaXZpc29yIG9mIFBBR0VfU0la
RQlcCisJCQkJCSAgIGFmdGVyIGNhY2hlIGFsaWdubWVudCAqLworCisjZGVmaW5lCVBDX0RCUkVH
X0NNRF9OT05FCTAKKyNkZWZpbmUJUENfREJSRUdfQ01EX0xPQUQJMQorCisjaWZkZWYgX0tFUk5F
TAorCisjaWZkZWYgbGludAorCitleHRlcm4gc3RydWN0IHBjcHUgKnBjcHVwOworCisjZGVmaW5l
CVBDUFVfR0VUKG1lbWJlcikJKHBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX0FE
RChtZW1iZXIsIHZhbCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyICs9ICh2YWwpKQorI2RlZmluZQlQ
Q1BVX0lOQyhtZW1iZXIpCVBDUFVfQUREKG1lbWJlciwgMSkKKyNkZWZpbmUJUENQVV9QVFIobWVt
YmVyKQkoJnBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX1NFVChtZW1iZXIsIHZh
bCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyID0gKHZhbCkpCisKKyNlbGlmIGRlZmluZWQoX19HTlVD
TElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikKKworLyoKKyAqIEV2YWx1
YXRlcyB0byB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAq
LworI2RlZmluZQlfX3BjcHVfb2Zmc2V0KG5hbWUpCQkJCQkJXAorCV9fb2Zmc2V0b2Yoc3RydWN0
IHBjcHUsIG5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMgdG8gdGhlIHR5cGUgb2YgdGhlIHBlci1j
cHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX3BjcHVfdHlwZShuYW1lKQkJCQkJCVwK
KwlfX3R5cGVvZigoKHN0cnVjdCBwY3B1ICopMCktPm5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMg
dG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmlu
ZQlfX1BDUFVfUFRSKG5hbWUpIF9fZXh0ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5h
bWUpICpfX3A7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVn
czolMSwlMDsgYWRkcSAlMiwlMCIJCQlcCisJICAgIDogIj1yIiAoX19wKQkJCQkJCVwKKwkgICAg
OiAibSIgKCooc3RydWN0IHBjcHUgKikoX19wY3B1X29mZnNldChwY19wcnZzcGFjZSkpKSwJXAor
CSAgICAgICJpIiAoX19wY3B1X29mZnNldChuYW1lKSkpOwkJCQlcCisJCQkJCQkJCQlcCisJX19w
OwkJCQkJCQkJXAorfSkKKworLyoKKyAqIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIHBl
ci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX1BDUFVfR0VUKG5hbWUpIF9fZXh0
ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5hbWUpIF9fcmVzOwkJCQkJXAorCXN0cnVj
dCBfX3MgewkJCQkJCQlcCisJCXVfY2hhcglfX2JbTUlOKHNpemVvZihfX3BjcHVfdHlwZShuYW1l
KSksIDgpXTsJCVwKKwl9IF9fczsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9f
cmVzKSA9PSAxIHx8IHNpemVvZihfX3JlcykgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fcmVz
KSA9PSA0IHx8IHNpemVvZihfX3JlcykgPT0gOCkgewkJCVwKKwkJX19hc20gX192b2xhdGlsZSgi
bW92ICUlZ3M6JTEsJTAiCQkJXAorCQkgICAgOiAiPXIiIChfX3MpCQkJCQlcCisJCSAgICA6ICJt
IiAoKihzdHJ1Y3QgX19zICopKF9fcGNwdV9vZmZzZXQobmFtZSkpKSk7CVwKKwkJKihzdHJ1Y3Qg
X19zICopKHZvaWQgKikmX19yZXMgPSBfX3M7CQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJX19y
ZXMgPSAqX19QQ1BVX1BUUihuYW1lKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JlczsJCQkJCQkJ
CVwKK30pCisKKy8qCisgKiBBZGRzIHRoZSB2YWx1ZSB0byB0aGUgcGVyLWNwdSBjb3VudGVyIG5h
bWUuICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIG11c3QgYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0
byBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lCV9fUENQVV9BREQobmFtZSwgdmFsKSBkbyB7CQkJ
CQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJCQlcCisJc3RydWN0IF9fcyB7CQkJCQkJ
CVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSwgOCldOwkJXAor
CX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fdmFsID0gKHZhbCk7CQkJCQkJCVwKKwlp
ZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihfX3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAg
c2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3ZhbCkgPT0gOCkgewkJCVwKKwkJX19zID0g
KihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJh
ZGQgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIgKCooc3RydWN0IF9fcyAqKShfX3BjcHVf
b2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9fcykpOwkJCQkJXAorCX0gZWxzZQkJCQkJ
CQkJXAorCQkqX19QQ1BVX1BUUihuYW1lKSArPSBfX3ZhbDsJCQkJXAorfSB3aGlsZSAoMCkKKwor
LyoKKyAqIEluY3JlbWVudHMgdGhlIHZhbHVlIG9mIHRoZSBwZXItY3B1IGNvdW50ZXIgbmFtZS4g
IFRoZSBpbXBsZW1lbnRhdGlvbgorICogbXVzdCBiZSBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGlu
dGVycnVwdHMuCisgKi8KKyNkZWZpbmUJX19QQ1BVX0lOQyhuYW1lKSBkbyB7CQkJCQkJXAorCUNU
QVNTRVJUKHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMSB8fAkJCVwKKwkgICAgc2l6ZW9m
KF9fcGNwdV90eXBlKG5hbWUpKSA9PSAyIHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBl
KG5hbWUpKSA9PSA0IHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9PSA4
KTsJCQkJXAorCWlmIChzaXplb2YoX19wY3B1X3R5cGUobmFtZSkpID09IDEpIHsJCQkJXAorCQlf
X2FzbSBfX3ZvbGF0aWxlKCJpbmNiICUlZ3M6JTAiCQkJCVwKKwkJICAgIDogIj1tIiAoKihfX3Bj
cHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJCSAgICA6ICJtIiAoKihf
X3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkpO1wKKwl9IGVsc2UgaWYg
KHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMikgewkJCVwKKwkJX19hc20gX192b2xhdGls
ZSgiaW5jdyAlJWdzOiUwIgkJCQlcCisJCSAgICA6ICI9bSIgKCooX19wY3B1X3R5cGUobmFtZSkg
KikoX19wY3B1X29mZnNldChuYW1lKSkpXAorCQkgICAgOiAibSIgKCooX19wY3B1X3R5cGUobmFt
ZSkgKikoX19wY3B1X29mZnNldChuYW1lKSkpKTtcCisJfSBlbHNlIGlmIChzaXplb2YoX19wY3B1
X3R5cGUobmFtZSkpID09IDQpIHsJCQlcCisJCV9fYXNtIF9fdm9sYXRpbGUoImluY2wgJSVnczol
MCIJCQkJXAorCQkgICAgOiAiPW0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9vZmZz
ZXQobmFtZSkpKVwKKwkJICAgIDogIm0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9v
ZmZzZXQobmFtZSkpKSk7XAorCX0gZWxzZSBpZiAoc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9
PSA4KSB7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJpbmNxICUlZ3M6JTAiCQkJCVwKKwkJICAg
IDogIj1tIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJ
CSAgICA6ICJtIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkp
O1wKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZSB0byB2YWx1ZSB2YWwuCisgKi8KKyNkZWZpbmUJX19Q
Q1BVX1NFVChuYW1lLCB2YWwpIHsJCQkJCQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJ
CQlcCisJc3RydWN0IF9fcyB7CQkJCQkJCVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNw
dV90eXBlKG5hbWUpKSwgOCldOwkJXAorCX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9f
dmFsID0gKHZhbCk7CQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihf
X3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3Zh
bCkgPT0gOCkgewkJCVwKKwkJX19zID0gKihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJ
XAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJtb3YgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIg
KCooc3RydWN0IF9fcyAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9f
cykpOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKl9fUENQVV9QVFIobmFtZSkgPSBfX3Zh
bDsJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZQlQQ1BVX0dFVChtZW1iZXIpCV9fUENQ
VV9HRVQocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9BREQobWVtYmVyLCB2YWwpCV9fUENQ
VV9BREQocGNfICMjIG1lbWJlciwgdmFsKQorI2RlZmluZQlQQ1BVX0lOQyhtZW1iZXIpCV9fUENQ
VV9JTkMocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9QVFIobWVtYmVyKQlfX1BDUFVfUFRS
KHBjXyAjIyBtZW1iZXIpCisjZGVmaW5lCVBDUFVfU0VUKG1lbWJlciwgdmFsKQlfX1BDUFVfU0VU
KHBjXyAjIyBtZW1iZXIsIHZhbCkKKworI2RlZmluZQlPRkZTRVRPRl9DVVJUSFJFQUQJMAorI2lm
ZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV251bGwtZGVyZWZlcmVuY2UiCisjZW5kaWYKK3N0YXRp
YyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCB0aHJlYWQgKgorX19jdXJ0aHJlYWQodm9pZCkKK3sK
KwlzdHJ1Y3QgdGhyZWFkICp0ZDsKKworCV9fYXNtKCJtb3ZxICUlZ3M6JTEsJTAiIDogIj1yIiAo
dGQpCisJICAgIDogIm0iICgqKGNoYXIgKilPRkZTRVRPRl9DVVJUSFJFQUQpKTsKKwlyZXR1cm4g
KHRkKTsKK30KKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
KyNlbmRpZgorI2RlZmluZQljdXJ0aHJlYWQJCShfX2N1cnRocmVhZCgpKQorCisjZGVmaW5lCU9G
RlNFVE9GX0NVUlBDQgkJMzIKK3N0YXRpYyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCBwY2IgKgor
X19jdXJwY2Iodm9pZCkKK3sKKwlzdHJ1Y3QgcGNiICpwY2I7CisKKwlfX2FzbSgibW92cSAlJWdz
OiUxLCUwIiA6ICI9ciIgKHBjYikgOiAibSIgKCooY2hhciAqKU9GRlNFVE9GX0NVUlBDQikpOwor
CXJldHVybiAocGNiKTsKK30KKyNkZWZpbmUJY3VycGNiCQkoX19jdXJwY2IoKSkKKworI2RlZmlu
ZQlJU19CU1AoKQkoUENQVV9HRVQoY3B1aWQpID09IDApCisKKyNlbHNlIC8qICFsaW50IHx8IGRl
ZmluZWQoX19HTlVDTElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikgKi8K
KworI2Vycm9yICJ0aGlzIGZpbGUgbmVlZHMgdG8gYmUgcG9ydGVkIHRvIHlvdXIgY29tcGlsZXIi
CisKKyNlbmRpZiAvKiBsaW50LCBldGMuICovCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNl
bmRpZiAvKiAhX01BQ0hJTkVfUENQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL3BtYXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWFw
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtYXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAw
MCArMDEwMApAQCAtMCwwICsxLDQyMSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0
ZXIgV2VtbS4KKyAqIENvcHlyaWdodCAoYykgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k
ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq
IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg
Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgV2lsbGlhbSBKb2xpdHogb2YgVVVO
RVQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF
TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor
ICogRGVyaXZlZCBmcm9tIGhwMzAwIHZlcnNpb24gYnkgTWlrZSBIaWJsZXIsIHRoaXMgdmVyc2lv
biBieSBXaWxsaWFtCisgKiBKb2xpdHogdXNlcyBhIHJlY3Vyc2l2ZSBtYXAgW2EgcGRlIHBvaW50
cyB0byB0aGUgcGFnZSBkaXJlY3RvcnldIHRvCisgKiBtYXAgdGhlIHBhZ2UgdGFibGVzIHVzaW5n
IHRoZSBwYWdldGFibGVzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgZG9uZSB0bworICogcmVkdWNlIHRo
ZSBpbXBhY3Qgb24ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGZvciBsb3RzIG9mIHNwYXJzZSBhZGRy
ZXNzCisgKiBzcGFjZSwgYW5kIHRvIHJlZHVjZSB0aGUgY29zdCBvZiBtZW1vcnkgdG8gZWFjaCBw
cm9jZXNzLgorICoKKyAqCWZyb206IGhwMzAwOiBAKCMpcG1hcC5oCTcuMiAoQmVya2VsZXkpIDEy
LzE2LzkwCisgKglmcm9tOiBAKCMpcG1hcC5oCTcuNCAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wbWFwLmggMjk5MzUwIDIwMTYt
MDUtMTAgMDk6NTg6NTFaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QTUFQX0hfCisj
ZGVmaW5lCV9NQUNISU5FX1BNQVBfSF8KKworLyoKKyAqIFBhZ2UtZGlyZWN0b3J5IGFuZCBwYWdl
LXRhYmxlIGVudHJpZXMgZm9sbG93IHRoaXMgZm9ybWF0LCB3aXRoIGEgZmV3CisgKiBvZiB0aGUg
ZmllbGRzIG5vdCBwcmVzZW50IGhlcmUgYW5kIHRoZXJlLCBkZXBlbmRpbmcgb24gYSBsb3Qgb2Yg
dGhpbmdzLgorICovCisJCQkJLyogLS0tLSBJbnRlbCBOb21lbmNsYXR1cmUgLS0tLSAqLworI2Rl
ZmluZQlYODZfUEdfVgkweDAwMQkvKiBQCVZhbGlkCQkJKi8KKyNkZWZpbmUJWDg2X1BHX1JXCTB4
MDAyCS8qIFIvVwlSZWFkL1dyaXRlCQkqLworI2RlZmluZQlYODZfUEdfVQkweDAwNAkvKiBVL1Mg
IFVzZXIvU3VwZXJ2aXNvcgkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BXVAkweDAwOAkvKiBQV1QJ
V3JpdGUgdGhyb3VnaAkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BDRAkweDAxMAkvKiBQQ0QJQ2Fj
aGUgZGlzYWJsZQkJKi8KKyNkZWZpbmUJWDg2X1BHX0EJMHgwMjAJLyogQQlBY2Nlc3NlZAkJKi8K
KyNkZWZpbmUJWDg2X1BHX00JMHgwNDAJLyogRAlEaXJ0eQkJCSovCisjZGVmaW5lCVg4Nl9QR19Q
UwkweDA4MAkvKiBQUwlQYWdlIHNpemUgKDA9NGssMT0yTSkJKi8KKyNkZWZpbmUJWDg2X1BHX1BU
RV9QQVQJMHgwODAJLyogUEFUCVBBVCBpbmRleAkJKi8KKyNkZWZpbmUJWDg2X1BHX0cJMHgxMDAJ
LyogRwlHbG9iYWwJCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwxCTB4MjAwCS8qICAgIC8JQXZh
aWxhYmxlIGZvciBzeXN0ZW0JKi8KKyNkZWZpbmUJWDg2X1BHX0FWQUlMMgkweDQwMAkvKiAgIDwJ
cHJvZ3JhbW1lcnMgdXNlCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwzCTB4ODAwCS8qICAgIFwJ
CQkJKi8KKyNkZWZpbmUJWDg2X1BHX1BERV9QQVQJMHgxMDAwCS8qIFBBVAlQQVQgaW5kZXgJCSov
CisjZGVmaW5lCVg4Nl9QR19OWAkoMXVsPDw2MykgLyogTm8tZXhlY3V0ZSAqLworI2RlZmluZQlY
ODZfUEdfQVZBSUwoeCkJKDF1bCA8PCAoeCkpCisKKy8qIFBhZ2UgbGV2ZWwgY2FjaGUgY29udHJv
bCBmaWVsZHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIFBBVCB0eXBlICovCisjZGVmaW5lCVg4Nl9Q
R19QREVfQ0FDSEUgKFg4Nl9QR19QREVfUEFUIHwgWDg2X1BHX05DX1BXVCB8IFg4Nl9QR19OQ19Q
Q0QpCisjZGVmaW5lCVg4Nl9QR19QVEVfQ0FDSEUgKFg4Nl9QR19QVEVfUEFUIHwgWDg2X1BHX05D
X1BXVCB8IFg4Nl9QR19OQ19QQ0QpCisKKy8qCisgKiBJbnRlbCBleHRlbmRlZCBwYWdlIHRhYmxl
IChFUFQpIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlFUFRfUEdfUkVBRAkJMHgwMDEJ
LyogUglSZWFkCQkqLworI2RlZmluZQlFUFRfUEdfV1JJVEUJCTB4MDAyCS8qIFcJV3JpdGUJCSov
CisjZGVmaW5lCUVQVF9QR19FWEVDVVRFCQkweDAwNAkvKiBYCUV4ZWN1dGUJCSovCisjZGVmaW5l
CUVQVF9QR19JR05PUkVfUEFUCTB4MDQwCS8qIElQQVQJSWdub3JlIFBBVAkqLworI2RlZmluZQlF
UFRfUEdfUFMJCTB4MDgwCS8qIFBTCVBhZ2Ugc2l6ZQkqLworI2RlZmluZQlFUFRfUEdfQQkJMHgx
MDAJLyogQQlBY2Nlc3NlZAkqLworI2RlZmluZQlFUFRfUEdfTQkJMHgyMDAJLyogRAlEaXJ0eQkJ
Ki8KKyNkZWZpbmUJRVBUX1BHX01FTU9SWV9UWVBFKHgpCSgoeCkgPDwgMykgLyogTVQgTWVtb3J5
IFR5cGUJKi8KKworLyoKKyAqIERlZmluZSB0aGUgUEdfeHggbWFjcm9zIGluIHRlcm1zIG9mIHRo
ZSBiaXRzIG9uIHg4NiBQVEVzLgorICovCisjZGVmaW5lCVBHX1YJCVg4Nl9QR19WCisjZGVmaW5l
CVBHX1JXCQlYODZfUEdfUlcKKyNkZWZpbmUJUEdfVQkJWDg2X1BHX1UKKyNkZWZpbmUJUEdfTkNf
UFdUCVg4Nl9QR19OQ19QV1QKKyNkZWZpbmUJUEdfTkNfUENECVg4Nl9QR19OQ19QQ0QKKyNkZWZp
bmUJUEdfQQkJWDg2X1BHX0EKKyNkZWZpbmUJUEdfTQkJWDg2X1BHX00KKyNkZWZpbmUJUEdfUFMJ
CVg4Nl9QR19QUworI2RlZmluZQlQR19QVEVfUEFUCVg4Nl9QR19QVEVfUEFUCisjZGVmaW5lCVBH
X0cJCVg4Nl9QR19HCisjZGVmaW5lCVBHX0FWQUlMMQlYODZfUEdfQVZBSUwxCisjZGVmaW5lCVBH
X0FWQUlMMglYODZfUEdfQVZBSUwyCisjZGVmaW5lCVBHX0FWQUlMMwlYODZfUEdfQVZBSUwzCisj
ZGVmaW5lCVBHX1BERV9QQVQJWDg2X1BHX1BERV9QQVQKKyNkZWZpbmUJUEdfTlgJCVg4Nl9QR19O
WAorI2RlZmluZQlQR19QREVfQ0FDSEUJWDg2X1BHX1BERV9DQUNIRQorI2RlZmluZQlQR19QVEVf
Q0FDSEUJWDg2X1BHX1BURV9DQUNIRQorCisvKiBPdXIgdmFyaW91cyBpbnRlcnByZXRhdGlvbnMg
b2YgdGhlIGFib3ZlICovCisjZGVmaW5lCVBHX1cJCVg4Nl9QR19BVkFJTDMJLyogIldpcmVkIiBw
c2V1ZG9mbGFnICovCisjZGVmaW5lCVBHX01BTkFHRUQJWDg2X1BHX0FWQUlMMgorI2RlZmluZQlF
UFRfUEdfRU1VTF9WCVg4Nl9QR19BVkFJTCg1MikKKyNkZWZpbmUJRVBUX1BHX0VNVUxfUlcJWDg2
X1BHX0FWQUlMKDUzKQorI2RlZmluZQlQR19GUkFNRQkoMHgwMDBmZmZmZmZmZmZmMDAwdWwpCisj
ZGVmaW5lCVBHX1BTX0ZSQU1FCSgweDAwMGZmZmZmZmZlMDAwMDB1bCkKKworLyoKKyAqIFByb21v
dGlvbiB0byBhIDJNQiAoUERFKSBwYWdlIG1hcHBpbmcgcmVxdWlyZXMgdGhhdCB0aGUgY29ycmVz
cG9uZGluZyA0S0IKKyAqIChQVEUpIHBhZ2UgbWFwcGluZ3MgaGF2ZSBpZGVudGljYWwgc2V0dGlu
Z3MgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICovCisjZGVmaW5lCVBHX1BURV9QUk9NT1RF
CShQR19OWCB8IFBHX01BTkFHRUQgfCBQR19XIHwgUEdfRyB8IFBHX1BURV9DQUNIRSB8IFwKKwkg
ICAgUEdfTSB8IFBHX0EgfCBQR19VIHwgUEdfUlcgfCBQR19WKQorCisvKgorICogUGFnZSBQcm90
ZWN0aW9uIEV4Y2VwdGlvbiBiaXRzCisgKi8KKworI2RlZmluZSBQR0VYX1AJCTB4MDEJLyogUHJv
dGVjdGlvbiB2aW9sYXRpb24gdnMuIG5vdCBwcmVzZW50ICovCisjZGVmaW5lIFBHRVhfVwkJMHgw
MgkvKiBkdXJpbmcgYSBXcml0ZSBjeWNsZSAqLworI2RlZmluZSBQR0VYX1UJCTB4MDQJLyogYWNj
ZXNzIGZyb20gVXNlciBtb2RlIChVUEwpICovCisjZGVmaW5lIFBHRVhfUlNWCTB4MDgJLyogcmVz
ZXJ2ZWQgUFRFIGZpZWxkIGlzIG5vbi16ZXJvICovCisjZGVmaW5lIFBHRVhfSQkJMHgxMAkvKiBk
dXJpbmcgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggKi8KKworLyogCisgKiB1bmRlZiB0aGUgUEdfeHgg
bWFjcm9zIHRoYXQgZGVmaW5lIGJpdHMgaW4gdGhlIHJlZ3VsYXIgeDg2IFBURXMgdGhhdAorICog
aGF2ZSBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiBuZXN0ZWQgUFRFcy4gVGhpcyBpcyBkb25lIHdo
ZW4gY29tcGlsaW5nCisgKiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhlIGRpZmZl
cmVuY2VzIGJldHdlZW4gcmVndWxhciB4ODYgYW5kCisgKiBuZXN0ZWQgUFRFcy4KKyAqCisgKiBU
aGUgYXBwcm9wcmlhdGUgYml0bWFzayB3aWxsIGJlIGNhbGN1bGF0ZWQgYXQgcnVudGltZSBiYXNl
ZCBvbiB0aGUgcG1hcAorICogdHlwZS4KKyAqLworI2lmZGVmIEFNRDY0X05QVF9BV0FSRQorI3Vu
ZGVmIFBHX0FWQUlMMQkJLyogWDg2X1BHX0FWQUlMMSBhbGlhc2VzIHdpdGggRVBUX1BHX00gKi8K
KyN1bmRlZiBQR19HCisjdW5kZWYgUEdfQQorI3VuZGVmIFBHX00KKyN1bmRlZiBQR19QREVfUEFU
CisjdW5kZWYgUEdfUERFX0NBQ0hFCisjdW5kZWYgUEdfUFRFX1BBVAorI3VuZGVmIFBHX1BURV9D
QUNIRQorI3VuZGVmIFBHX1JXCisjdW5kZWYgUEdfVgorI2VuZGlmCisKKy8qCisgKiBQdGUgcmVs
YXRlZCBtYWNyb3MuICBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IGhhdmluZyB0byBkZWFsIHdpdGgK
KyAqIHRoZSBzaWduIGV4dGVuc2lvbiBvZiB0aGUgNDh0aCBiaXQuCisgKi8KKyNkZWZpbmUgS1ZB
RERSKGw0LCBsMywgbDIsIGwxKSAoIFwKKwkoKHVuc2lnbmVkIGxvbmcpLTEgPDwgNDcpIHwgXAor
CSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRTSElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25n
KShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5zaWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZU
KSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8PCBQQUdFX1NISUZUKSkKKworI2RlZmluZSBV
VkFERFIobDQsIGwzLCBsMiwgbDEpICggXAorCSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRT
SElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25nKShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5z
aWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZUKSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8
PCBQQUdFX1NISUZUKSkKKworLyoKKyAqIE51bWJlciBvZiBrZXJuZWwgUE1MNCBzbG90cy4gIENh
biBiZSBhbnl3aGVyZSBmcm9tIDEgdG8gNjQgb3Igc28sCisgKiBidXQgc2V0dGluZyBpdCBsYXJn
ZXIgdGhhbiBORE1QTUw0RSBtYWtlcyBubyBzZW5zZS4KKyAqCisgKiBFYWNoIHNsb3QgcHJvdmlk
ZXMgLjUgVEIgb2Yga2VybmVsIHZpcnR1YWwgc3BhY2UuCisgKi8KKyNkZWZpbmUgTktQTUw0RQkJ
NAorCisjZGVmaW5lCU5VUE1MNEUJCShOUE1MNEVQRy8yKQkvKiBudW1iZXIgb2YgdXNlcmxhbmQg
UE1MNCBwYWdlcyAqLworI2RlZmluZQlOVVBEUEUJCShOVVBNTDRFKk5QRFBFUEcpLyogbnVtYmVy
IG9mIHVzZXJsYW5kIFBEUCBwYWdlcyAqLworI2RlZmluZQlOVVBERQkJKE5VUERQRSpOUERFUEcp
CS8qIG51bWJlciBvZiB1c2VybGFuZCBQRCBlbnRyaWVzICovCisKKy8qCisgKiBORE1QTUw0RSBp
cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgUE1MNCBlbnRyaWVzIHRoYXQgd2lsbCBiZQorICogdXNl
ZCB0byBpbXBsZW1lbnQgdGhlIGRpcmVjdCBtYXAuICBJdCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdv
LAorICogYW5kIHNob3VsZCBnZW5lcmFsbHkgZXhjZWVkIE5LUE1MNEUuICBUaGUgbWF4aW11bSBw
b3NzaWJsZQorICogdmFsdWUgaXMgNjQ7IHVzaW5nIDEyOCB3aWxsIG1ha2UgdGhlIGRpcmVjdCBt
YXAgaW50cnVkZSBpbnRvCisgKiB0aGUgcmVjdXJzaXZlIHBhZ2UgdGFibGUgbWFwLgorICovCisj
ZGVmaW5lCU5ETVBNTDRFCTgKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBjb250cm9sIHRoZSBsYXlv
dXQgb2YgdmlydHVhbCBtZW1vcnkuICBUaGUgc3RhcnRpbmcgYWRkcmVzcworICogb2YgdGhlIGRp
cmVjdCBtYXAsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgRE1QTUw0SSwgbXVzdCBiZSBhIG11bHRp
cGxlIG9mCisgKiBpdHMgc2l6ZS4gIChTZWUgdGhlIFBIWVNfVE9fRE1BUCgpIGFuZCBETUFQX1RP
X1BIWVMoKSBtYWNyb3MuKQorICoKKyAqIE5vdGU6IEtQTUw0SSBpcyB0aGUgaW5kZXggb2YgdGhl
IChzaW5nbGUpIGxldmVsIDQgcGFnZSB0aGF0IG1hcHMKKyAqIHRoZSBLVkEgdGhhdCBob2xkcyBL
RVJOQkFTRSwgd2hpbGUgS1BNTDRCQVNFIGlzIHRoZSBpbmRleCBvZiB0aGUKKyAqIGZpcnN0IGxl
dmVsIDQgcGFnZSB0aGF0IG1hcHMgVk1fTUlOX0tFUk5FTF9BRERSRVNTLiAgSWYgTktQTUw0RQor
ICogaXMgMSwgdGhlc2UgYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgS1BNTDRCQVNFIDwgS1BNTDRJ
IGFuZCBleHRyYQorICogbGV2ZWwgNCBQREVzIGFyZSBuZWVkZWQgdG8gbWFwIGZyb20gVk1fTUlO
X0tFUk5FTF9BRERSRVNTIHVwIHRvCisgKiBLRVJOQkFTRS4KKyAqCisgKiAoS1BNTDRJIGNvbWJp
bmVzIHdpdGggS1BEUEkgdG8gY2hvb3NlIHdoZXJlIEtFUk5CQVNFIHN0YXJ0cy4KKyAqIE9yLCBp
biBvdGhlciB3b3JkcywgS1BNTDRJIHByb3ZpZGVzIGJpdHMgMzkuLjQ3IG9mIEtFUk5CQVNFLAor
ICogYW5kIEtQRFBJIHByb3ZpZGVzIGJpdHMgMzAuLjM4LikKKyAqLworI2RlZmluZQlQTUw0UE1M
NEkJKE5QTUw0RVBHLzIpCS8qIEluZGV4IG9mIHJlY3Vyc2l2ZSBwbWw0IG1hcHBpbmcgKi8KKwor
I2RlZmluZQlLUE1MNEJBU0UJKE5QTUw0RVBHLU5LUE1MNEUpIC8qIEtWTSBhdCBoaWdoZXN0IGFk
ZHJlc3NlcyAqLworI2RlZmluZQlETVBNTDRJCQlyb3VuZGRvd24oS1BNTDRCQVNFLU5ETVBNTDRF
LCBORE1QTUw0RSkgLyogQmVsb3cgS1ZNICovCisKKyNkZWZpbmUJS1BNTDRJCQkoTlBNTDRFUEct
MSkKKyNkZWZpbmUJS1BEUEkJCShOUERQRVBHLTIpCS8qIGtlcm5iYXNlIGF0IC0yR0IgKi8KKwor
LyoKKyAqIFhYWCBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSBJIGd1ZXNzLi4uCisgKi8KKyNk
ZWZpbmUgSVNBX0hPTEVfU1RBUlQgICAgMHhhMDAwMAorI2RlZmluZSBJU0FfSE9MRV9MRU5HVEgg
KDB4MTAwMDAwLUlTQV9IT0xFX1NUQVJUKQorCisjZGVmaW5lCVBNQVBfUENJRF9OT05FCQkweGZm
ZmZmZmZmCisjZGVmaW5lCVBNQVBfUENJRF9LRVJOCQkwCisjZGVmaW5lCVBNQVBfUENJRF9PVkVS
TUFYCTB4MTAwMAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Cisj
aW5jbHVkZSA8c3lzL19jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvX2xvY2suaD4KKyNpbmNsdWRl
IDxzeXMvX211dGV4Lmg+CisKKyNpbmNsdWRlIDx2bS9fdm1fcmFkaXguaD4KKwordHlwZWRlZiB1
X2ludDY0X3QgcGRfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHB0X2VudHJ5X3Q7Cit0eXBl
ZGVmIHVfaW50NjRfdCBwZHBfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHBtbDRfZW50cnlf
dDsKKworLyoKKyAqIEFkZHJlc3Mgb2YgY3VycmVudCBhZGRyZXNzIHNwYWNlIHBhZ2UgdGFibGUg
bWFwcyBhbmQgZGlyZWN0b3JpZXMuCisgKi8KKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lCWFkZHJf
UFRtYXAJKEtWQUREUihQTUw0UE1MNEksIDAsIDAsIDApKQorI2RlZmluZQlhZGRyX1BEbWFwCShL
VkFERFIoUE1MNFBNTDRJLCBQTUw0UE1MNEksIDAsIDApKQorI2RlZmluZQlhZGRyX1BEUG1hcAko
S1ZBRERSKFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEksIDApKQorI2RlZmluZQlhZGRy
X1BNTDRtYXAJKEtWQUREUihQTUw0UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1M
NEkpKQorI2RlZmluZQlhZGRyX1BNTDRwbWw0ZQkoYWRkcl9QTUw0bWFwICsgKFBNTDRQTUw0SSAq
IHNpemVvZihwbWw0X2VudHJ5X3QpKSkKKyNkZWZpbmUJUFRtYXAJCSgocHRfZW50cnlfdCAqKShh
ZGRyX1BUbWFwKSkKKyNkZWZpbmUJUERtYXAJCSgocGRfZW50cnlfdCAqKShhZGRyX1BEbWFwKSkK
KyNkZWZpbmUJUERQbWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QRFBtYXApKQorI2RlZmluZQlQ
TUw0bWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QTUw0bWFwKSkKKyNkZWZpbmUJUE1MNHBtbDRl
CSgocGRfZW50cnlfdCAqKShhZGRyX1BNTDRwbWw0ZSkpCisKK2V4dGVybiBpbnQgbmtwdDsJCS8q
IEluaXRpYWwgbnVtYmVyIG9mIGtlcm5lbCBwYWdlIHRhYmxlcyAqLworZXh0ZXJuIHVfaW50NjRf
dCBLUERQcGh5czsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBrZXJuZWwgbGV2ZWwgMyAqLworZXh0
ZXJuIHVfaW50NjRfdCBLUE1MNHBoeXM7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Yga2VybmVsIGxl
dmVsIDQgKi8KKworLyoKKyAqIHZpcnR1YWwgYWRkcmVzcyB0byBwYWdlIHRhYmxlIGVudHJ5IGFu
ZAorICogdG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqIE5vdGU6IHRoZXNlIHdvcmsgcmVjdXJzaXZl
bHksIHRodXMgdnRvcHRlIG9mIGEgcHRlIHdpbGwgZ2l2ZQorICogdGhlIGNvcnJlc3BvbmRpbmcg
cGRlIHRoYXQgaW4gdHVybiBtYXBzIGl0LgorICovCitwdF9lbnRyeV90ICp2dG9wdGUodm1fb2Zm
c2V0X3QpOworI2RlZmluZQl2dG9waHlzKHZhKQlwbWFwX2tleHRyYWN0KCgodm1fb2Zmc2V0X3Qp
ICh2YSkpKQorCisjZGVmaW5lCXB0ZV9sb2FkX3N0b3JlKHB0ZXAsIHB0ZSkJYXRvbWljX3N3YXBf
bG9uZyhwdGVwLCBwdGUpCisjZGVmaW5lCXB0ZV9sb2FkX2NsZWFyKHB0ZXApCQlhdG9taWNfc3dh
cF9sb25nKHB0ZXAsIDApCisjZGVmaW5lCXB0ZV9zdG9yZShwdGVwLCBwdGUpIGRvIHsgXAorCSoo
dV9sb25nICopKHB0ZXApID0gKHVfbG9uZykocHRlKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJ
cHRlX2NsZWFyKHB0ZXApCQkJcHRlX3N0b3JlKHB0ZXAsIDApCisKKyNkZWZpbmUJcGRlX3N0b3Jl
KHBkZXAsIHBkZSkJCXB0ZV9zdG9yZShwZGVwLCBwZGUpCisKK2V4dGVybiBwdF9lbnRyeV90IHBn
X254OworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisvKgorICogUG1hcCBzdHVmZgorICovCitz
dHJ1Y3QJcHZfZW50cnk7CitzdHJ1Y3QJcHZfY2h1bms7CisKKy8qCisgKiBMb2NrcworICogKHAp
IFBWIGxpc3QgbG9jaworICovCitzdHJ1Y3QgbWRfcGFnZSB7CisJVEFJTFFfSEVBRCgsIHB2X2Vu
dHJ5KQlwdl9saXN0OyAgLyogKHApICovCisJaW50CQkJcHZfZ2VuOyAgIC8qIChwKSAqLworCWlu
dAkJCXBhdF9tb2RlOworfTsKKworZW51bSBwbWFwX3R5cGUgeworCVBUX1g4NiwJCQkvKiByZWd1
bGFyIHg4NiBwYWdlIHRhYmxlcyAqLworCVBUX0VQVCwJCQkvKiBJbnRlbCdzIG5lc3RlZCBwYWdl
IHRhYmxlcyAqLworCVBUX1JWSSwJCQkvKiBBTUQncyBuZXN0ZWQgcGFnZSB0YWJsZXMgKi8KK307
CisKK3N0cnVjdCBwbWFwX3BjaWRzIHsKKwl1aW50MzJfdAlwbV9wY2lkOworCXVpbnQzMl90CXBt
X2dlbjsKK307CisKKy8qCisgKiBUaGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoS1ZBKSBvZiB0
aGUgbGV2ZWwgNCBwYWdlIHRhYmxlIHBhZ2UgaXMgYWx3YXlzCisgKiB3aXRoaW4gdGhlIGRpcmVj
dCBtYXAgKERNQVApIHJlZ2lvbi4KKyAqLworc3RydWN0IHBtYXAgeworCXN0cnVjdCBtdHgJCXBt
X210eDsKKwlwbWw0X2VudHJ5X3QJCSpwbV9wbWw0OwkvKiBLVkEgb2YgbGV2ZWwgNCBwYWdlIHRh
YmxlICovCisJdWludDY0X3QJCXBtX2NyMzsKKwlUQUlMUV9IRUFEKCxwdl9jaHVuaykJcG1fcHZj
aHVuazsJLyogbGlzdCBvZiBtYXBwaW5ncyBpbiBwbWFwICovCisJY3B1c2V0X3QJCXBtX2FjdGl2
ZTsJLyogYWN0aXZlIG9uIGNwdXMgKi8KKwllbnVtIHBtYXBfdHlwZQkJcG1fdHlwZTsJLyogcmVn
dWxhciBvciBuZXN0ZWQgdGFibGVzICovCisJc3RydWN0IHBtYXBfc3RhdGlzdGljcwlwbV9zdGF0
czsJLyogcG1hcCBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX3JhZGl4CQlwbV9yb290OwkvKiBz
cGFyZSBwYWdlIHRhYmxlIHBhZ2VzICovCisJbG9uZwkJCXBtX2VwdGdlbjsJLyogRVBUIHBtYXAg
Z2VuZXJhdGlvbiBpZCAqLworCWludAkJCXBtX2ZsYWdzOworCXN0cnVjdCBwbWFwX3BjaWRzCXBt
X3BjaWRzW01BWENQVV07Cit9OworCisvKiBmbGFncyAqLworI2RlZmluZQlQTUFQX05FU1RFRF9J
UElNQVNLCTB4ZmYKKyNkZWZpbmUJUE1BUF9QREVfU1VQRVJQQUdFCSgxIDw8IDgpCS8qIHN1cHBv
cnRzIDJNQiBzdXBlcnBhZ2VzICovCisjZGVmaW5lCVBNQVBfRU1VTEFURV9BRF9CSVRTCSgxIDw8
IDkpCS8qIG5lZWRzIEEvRCBiaXRzIGVtdWxhdGlvbiAqLworI2RlZmluZQlQTUFQX1NVUFBPUlRT
X0VYRUNfT05MWQkoMSA8PCAxMCkJLyogZXhlY3V0ZSBvbmx5IG1hcHBpbmdzIG9rICovCisKK3R5
cGVkZWYgc3RydWN0IHBtYXAJKnBtYXBfdDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1
Y3QgcG1hcAlrZXJuZWxfcG1hcF9zdG9yZTsKKyNkZWZpbmUga2VybmVsX3BtYXAJKCZrZXJuZWxf
cG1hcF9zdG9yZSkKKworI2RlZmluZQlQTUFQX0xPQ0socG1hcCkJCW10eF9sb2NrKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9MT0NLX0FTU0VSVChwbWFwLCB0eXBlKSBcCisJCQkJbXR4
X2Fzc2VydCgmKHBtYXApLT5wbV9tdHgsICh0eXBlKSkKKyNkZWZpbmUJUE1BUF9MT0NLX0RFU1RS
T1kocG1hcCkJbXR4X2Rlc3Ryb3koJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX0xPQ0tf
SU5JVChwbWFwKQltdHhfaW5pdCgmKHBtYXApLT5wbV9tdHgsICJwbWFwIiwgXAorCQkJCSAgICBO
VUxMLCBNVFhfREVGIHwgTVRYX0RVUE9LKQorI2RlZmluZQlQTUFQX0xPQ0tFRChwbWFwKQltdHhf
b3duZWQoJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX01UWChwbWFwKQkJKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9UUllMT0NLKHBtYXApCW10eF90cnlsb2NrKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9VTkxPQ0socG1hcCkJbXR4X3VubG9jaygmKHBtYXApLT5w
bV9tdHgpCisKK2ludAlwbWFwX3Bpbml0X3R5cGUocG1hcF90IHBtYXAsIGVudW0gcG1hcF90eXBl
IHBtX3R5cGUsIGludCBmbGFncyk7CitpbnQJcG1hcF9lbXVsYXRlX2FjY2Vzc2VkX2RpcnR5KHBt
YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgaW50IGZ0eXBlKTsKKyNlbmRpZgorCisvKgorICog
Rm9yIGVhY2ggdm1fcGFnZV90LCB0aGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSB2YWxp
ZCB2aXJ0dWFsCisgKiBtYXBwaW5ncyBvZiB0aGF0IHBhZ2UuICBBbiBlbnRyeSBpcyBhIHB2X2Vu
dHJ5X3QsIHRoZSBsaXN0IGlzIHB2X2xpc3QuCisgKi8KK3R5cGVkZWYgc3RydWN0IHB2X2VudHJ5
IHsKKwl2bV9vZmZzZXRfdAlwdl92YTsJCS8qIHZpcnR1YWwgYWRkcmVzcyBmb3IgbWFwcGluZyAq
LworCVRBSUxRX0VOVFJZKHB2X2VudHJ5KQlwdl9uZXh0OworfSAqcHZfZW50cnlfdDsKKworLyoK
KyAqIHB2X2VudHJpZXMgYXJlIGFsbG9jYXRlZCBpbiBjaHVua3MgcGVyLXByb2Nlc3MuICBUaGlz
IGF2b2lkcyB0aGUKKyAqIG5lZWQgdG8gdHJhY2sgcGVyLXBtYXAgYXNzaWdubWVudHMuCisgKi8K
KyNkZWZpbmUJX05QQ00JMworI2RlZmluZQlfTlBDUFYJMTY4CitzdHJ1Y3QgcHZfY2h1bmsgewor
CXBtYXBfdAkJCXBjX3BtYXA7CisJVEFJTFFfRU5UUlkocHZfY2h1bmspCXBjX2xpc3Q7CisJdWlu
dDY0X3QJCXBjX21hcFtfTlBDTV07CS8qIGJpdG1hcDsgMSA9IGZyZWUgKi8KKwlUQUlMUV9FTlRS
WShwdl9jaHVuaykJcGNfbHJ1OworCXN0cnVjdCBwdl9lbnRyeQkJcGNfcHZlbnRyeVtfTlBDUFZd
OworfTsKKworI2lmZGVmCV9LRVJORUwKKworZXh0ZXJuIGNhZGRyX3QJQ0FERFIxOworZXh0ZXJu
IHB0X2VudHJ5X3QgKkNNQVAxOworZXh0ZXJuIHZtX3BhZGRyX3QgcGh5c19hdmFpbFtdOworZXh0
ZXJuIHZtX3BhZGRyX3QgZHVtcF9hdmFpbFtdOworZXh0ZXJuIHZtX29mZnNldF90IHZpcnR1YWxf
YXZhaWw7CitleHRlcm4gdm1fb2Zmc2V0X3QgdmlydHVhbF9lbmQ7CitleHRlcm4gdm1fcGFkZHJf
dCBkbWFwbGltaXQ7CisKKyNkZWZpbmUJcG1hcF9wYWdlX2dldF9tZW1hdHRyKG0pCSgodm1fbWVt
YXR0cl90KShtKS0+bWQucGF0X21vZGUpCisjZGVmaW5lCXBtYXBfcGFnZV9pc193cml0ZV9tYXBw
ZWQobSkJKCgobSktPmFmbGFncyAmIFBHQV9XUklURUFCTEUpICE9IDApCisjZGVmaW5lCXBtYXBf
dW5tYXBiaW9zKHZhLCBzeikJcG1hcF91bm1hcGRldigodmEpLCAoc3opKQorCitzdHJ1Y3QgdGhy
ZWFkOworCit2b2lkCXBtYXBfYWN0aXZhdGVfc3coc3RydWN0IHRocmVhZCAqKTsKK3ZvaWQJcG1h
cF9ib290c3RyYXAodm1fcGFkZHJfdCAqKTsKK2ludAlwbWFwX2NoYW5nZV9hdHRyKHZtX29mZnNl
dF90LCB2bV9zaXplX3QsIGludCk7Cit2b2lkCXBtYXBfZGVtb3RlX0RNQVAodm1fcGFkZHJfdCBi
YXNlLCB2bV9zaXplX3QgbGVuLCBib29sZWFuX3QgaW52YWxpZGF0ZSk7Cit2b2lkCXBtYXBfaW5p
dF9wYXQodm9pZCk7Cit2b2lkCXBtYXBfa2VudGVyKHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90
IHBhKTsKK3ZvaWQJKnBtYXBfa2VudGVyX3RlbXBvcmFyeSh2bV9wYWRkcl90IHBhLCBpbnQgaSk7
Cit2bV9wYWRkcl90IHBtYXBfa2V4dHJhY3Qodm1fb2Zmc2V0X3QpOwordm9pZAlwbWFwX2tyZW1v
dmUodm1fb2Zmc2V0X3QpOwordm9pZAkqcG1hcF9tYXBiaW9zKHZtX3BhZGRyX3QsIHZtX3NpemVf
dCk7Cit2b2lkCSpwbWFwX21hcGRldih2bV9wYWRkcl90LCB2bV9zaXplX3QpOwordm9pZAkqcG1h
cF9tYXBkZXZfYXR0cih2bV9wYWRkcl90LCB2bV9zaXplX3QsIGludCk7Citib29sZWFuX3QgcG1h
cF9wYWdlX2lzX21hcHBlZCh2bV9wYWdlX3QgbSk7Cit2b2lkCXBtYXBfcGFnZV9zZXRfbWVtYXR0
cih2bV9wYWdlX3QgbSwgdm1fbWVtYXR0cl90IG1hKTsKK3ZvaWQJcG1hcF91bm1hcGRldih2bV9v
ZmZzZXRfdCwgdm1fc2l6ZV90KTsKK3ZvaWQJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcF90LCB2
bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9yYW5nZShwbWFwX3QsIHZtX29mZnNl
dF90LCB2bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9hbGwocG1hcF90KTsKK3Zv
aWQJcG1hcF9pbnZhbGlkYXRlX2NhY2hlKHZvaWQpOwordm9pZAlwbWFwX2ludmFsaWRhdGVfY2Fj
aGVfcGFnZXModm1fcGFnZV90ICpwYWdlcywgaW50IGNvdW50KTsKK3ZvaWQJcG1hcF9pbnZhbGlk
YXRlX2NhY2hlX3JhbmdlKHZtX29mZnNldF90IHN2YSwgdm1fb2Zmc2V0X3QgZXZhLAorCSAgICBi
b29sZWFuX3QgZm9yY2UpOwordm9pZAlwbWFwX2dldF9tYXBwaW5nKHBtYXBfdCBwbWFwLCB2bV9v
ZmZzZXRfdCB2YSwgdWludDY0X3QgKnB0ciwgaW50ICpudW0pOworYm9vbGVhbl90IHBtYXBfbWFw
X2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3QgKiwgaW50LCBib29sZWFuX3Qp
Owordm9pZAlwbWFwX3VubWFwX2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3Qg
KiwgaW50LCBib29sZWFuX3QpOworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFM
T0NPUkUgKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9QTUFQX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWNfbWRlcC5oIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtY19tZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0MSBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBKb3NlcGggS29zaHkKKyAqIENvcHlyaWdo
dCAoYykgMjAwNyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgQS4g
Sm9zZXBoIEtvc2h5IHVuZGVyCisgKiBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5k
YXRpb24gYW5kIEdvb2dsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS9wbWNfbWRlcC5oIDI4NTA0MSAyMDE1LTA3LTAyIDE0OjM3OjIxWiBraWIgJAor
ICovCisKKy8qIE1hY2hpbmUgZGVwZW5kZW50IGludGVyZmFjZXMgKi8KKworI2lmbmRlZiBfTUFD
SElORV9QTUNfTURFUF9ICisjZGVmaW5lCV9NQUNISU5FX1BNQ19NREVQX0ggMQorCisjaWZkZWYJ
X0tFUk5FTAorc3RydWN0IHBtY19tZGVwOworI2VuZGlmCisKKyNpbmNsdWRlIDxkZXYvaHdwbWMv
aHdwbWNfYW1kLmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX2NvcmUuaD4KKyNpbmNsdWRl
IDxkZXYvaHdwbWMvaHdwbWNfcGl2Lmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX3RzYy5o
PgorI2luY2x1ZGUgPGRldi9od3BtYy9od3BtY191bmNvcmUuaD4KKworLyoKKyAqIEludGVsIHBy
b2Nlc3NvcnMgaW1wbGVtZW50aW5nIFYyIGFuZCBsYXRlciBvZiB0aGUgSW50ZWwgcGVyZm9ybWFu
Y2UKKyAqIG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBoYXZlIFBNQ3Mgb2YgdGhlIGZvbGxvd2lu
ZyBjbGFzc2VzOiBUU0MsCisgKiBJQUYsIElBUCwgVUNGIGFuZCBVQ1AuCisgKi8KKyNkZWZpbmUJ
UE1DX01ERVBfQ0xBU1NfSU5ERVhfVFNDCTEKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhf
SzgJCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfUDQJCTIKKyNkZWZpbmUJUE1DX01E
RVBfQ0xBU1NfSU5ERVhfSUFQCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfSUFGCTMK
KyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfVUNQCTQKKyNkZWZpbmUJUE1DX01ERVBfQ0xB
U1NfSU5ERVhfVUNGCTUKKworLyoKKyAqIE9uIHRoZSBhbWQ2NCBwbGF0Zm9ybSB3ZSBzdXBwb3J0
IHRoZSBmb2xsb3dpbmcgUE1Dcy4KKyAqCisgKiBUU0MJCVRoZSB0aW1lc3RhbXAgY291bnRlcgor
ICogSzgJCUFNRCBBdGhsb242NCBhbmQgT3B0ZXJvbiBQTUNzIGluIDY0IGJpdCBtb2RlLgorICog
UElWCQlJbnRlbCBQNC9IVFQgYW5kIFA0L0VNVDY0CisgKiBJQVAJCUludGVsIENvcmUvQ29yZTIv
QXRvbSBDUFVzIGluIDY0IGJpdHMgbW9kZS4KKyAqIElBRgkJSW50ZWwgZml4ZWQtZnVuY3Rpb24g
UE1DcyBpbiBDb3JlMiBhbmQgbGF0ZXIgQ1BVcy4KKyAqIFVDUAkJSW50ZWwgVW5jb3JlIHByb2dy
YW1tYWJsZSBQTUNzLgorICogVUNGCQlJbnRlbCBVbmNvcmUgZml4ZWQtZnVuY3Rpb24gUE1Dcy4K
KyAqLworCit1bmlvbiBwbWNfbWRfb3BfcG1jYWxsb2NhdGUgIHsKKwlzdHJ1Y3QgcG1jX21kX2Ft
ZF9vcF9wbWNhbGxvY2F0ZQlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZfb3BfcG1jYWxsb2Nh
dGUJcG1faWFmOworCXN0cnVjdCBwbWNfbWRfaWFwX29wX3BtY2FsbG9jYXRlCXBtX2lhcDsKKwlz
dHJ1Y3QgcG1jX21kX3VjZl9vcF9wbWNhbGxvY2F0ZQlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91
Y3Bfb3BfcG1jYWxsb2NhdGUJcG1fdWNwOworCXN0cnVjdCBwbWNfbWRfcDRfb3BfcG1jYWxsb2Nh
dGUJCXBtX3A0OworCXVpbnQ2NF90CQkJCV9fcGFkWzRdOworfTsKKworLyogTG9nZ2luZyAqLwor
I2RlZmluZQlQTUNMT0dfUkVBREFERFIJCVBNQ0xPR19SRUFENjQKKyNkZWZpbmUJUE1DTE9HX0VN
SVRBRERSCQlQTUNMT0dfRU1JVDY0CisKKyNpZmRlZglfS0VSTkVMCisKK3VuaW9uIHBtY19tZF9w
bWMgeworCXN0cnVjdCBwbWNfbWRfYW1kX3BtYwlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZf
cG1jCXBtX2lhZjsKKwlzdHJ1Y3QgcG1jX21kX2lhcF9wbWMJcG1faWFwOworCXN0cnVjdCBwbWNf
bWRfdWNmX3BtYwlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91Y3BfcG1jCXBtX3VjcDsKKwlzdHJ1
Y3QgcG1jX21kX3A0X3BtYwlwbV9wNDsKK307CisKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19Q
QyhURikJKChURiktPnRmX3JpcCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19GUChURikJKChU
RiktPnRmX3JicCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19VU0VSX1NQKFRGKQkoKFRGKS0+
dGZfcnNwKQorI2RlZmluZQlQTUNfVFJBUEZSQU1FX1RPX0tFUk5FTF9TUChURikJKChURiktPnRm
X3JzcCkKKworI2RlZmluZQlQTUNfQVRfRlVOQ1RJT05fUFJPTE9HVUVfUFVTSF9CUChJKQkJXAor
CSgoKEkpICYgMHhmZmZmZmZmZikgPT0gMHhlNTg5NDg1NSkgLyogcHVzaHEgJXJicDsgbW92cSAl
cnNwLCVyYnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX1BST0xPR1VFX01PVl9TUF9CUChJ
KQkJXAorCSgoKEkpICYgMHgwMGZmZmZmZikgPT0gMHgwMGU1ODk0OCkgLyogbW92cSAlcnNwLCVy
YnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX0VQSUxPR1VFX1JFVChJKQkJCVwKKwkoKChJ
KSAmIDB4RkYpID09IDB4QzMpCQkgICAvKiByZXQgKi8KKworI2RlZmluZQlQTUNfSU5fVFJBUF9I
QU5ETEVSKFBDKSAJCQlcCisJKChQQykgPj0gKHVpbnRwdHJfdCkgc3RhcnRfZXhjZXB0aW9ucyAm
JglcCisJIChQQykgPCAodWludHB0cl90KSBlbmRfZXhjZXB0aW9ucykKKworI2RlZmluZQlQTUNf
SU5fS0VSTkVMX1NUQUNLKFMsU1RBUlQsRU5EKQkJXAorCSgoUykgPj0gKFNUQVJUKSAmJiAoUykg
PCAoRU5EKSkKKyNkZWZpbmUJUE1DX0lOX0tFUk5FTCh2YSkgSU5LRVJORUwodmEpCisKKyNkZWZp
bmUJUE1DX0lOX1VTRVJTUEFDRSh2YSkgKCh2YSkgPD0gVk1fTUFYVVNFUl9BRERSRVNTKQorCisv
KiBCdWlsZCBhIGZha2Uga2VybmVsIHRyYXBmcmFtZSBmcm9tIGN1cnJlbnQgaW5zdHJ1Y3Rpb24g
cG9pbnRlci4gKi8KKyNkZWZpbmUgUE1DX0ZBS0VfVFJBUEZSQU1FKFRGKQkJCQkJCVwKKwlkbyB7
CQkJCQkJCQlcCisJKFRGKS0+dGZfY3MgPSAwOyAoVEYpLT50Zl9yZmxhZ3MgPSAwOwkJCQlcCisJ
X19hc20gX192b2xhdGlsZSgibW92cSAlJXJicCwlMCIgOiAiPXIiICgoVEYpLT50Zl9yYnApKTsJ
XAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVyc3AsJTAiIDogIj1yIiAoKFRGKS0+dGZfcnNw
KSk7CVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjYWxsIDFmIFxuXHQxOiBwb3AgJTAiIDogIj1yIigo
VEYpLT50Zl9yaXApKTsJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8K
Kwordm9pZAlzdGFydF9leGNlcHRpb25zKHZvaWQpLCBlbmRfZXhjZXB0aW9ucyh2b2lkKTsKKwor
c3RydWN0IHBtY19tZGVwICpwbWNfYW1kX2luaXRpYWxpemUodm9pZCk7Cit2b2lkCXBtY19hbWRf
ZmluYWxpemUoc3RydWN0IHBtY19tZGVwICpfbWQpOworc3RydWN0IHBtY19tZGVwICpwbWNfaW50
ZWxfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQJcG1jX2ludGVsX2ZpbmFsaXplKHN0cnVjdCBwbWNf
bWRlcCAqX21kKTsKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9Q
TUNfTURFUF9IICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9wcGlyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcHBpcmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAK
QEAgLTAsMCArMSw0OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVEFLQUhBU0hJIFlv
c2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL3BwaXJlZy5oIDE0NjIxMSAyMDA1LTA1LTE0IDA5OjEwOjAyWiBueWFuICQKKyAq
LworCisjaWZuZGVmIF9NQUNISU5FX1BQSVJFR19IXworI2RlZmluZSBfTUFDSElORV9QUElSRUdf
SF8KKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlJT19QUEkJCTB4NjEJLyogUHJvZ3JhbW1h
YmxlIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisKKy8qCisgKiBQUEkgc3BlYWtlciBjb250cm9s
IHZhbHVlcworICovCisKKyNkZWZpbmUJUElUX0VOQUJMRVRNUjIJMHgwMQkvKiBFbmFibGUgdGlt
ZXIvY291bnRlciAyICovCisjZGVmaW5lCVBJVF9TUEtSREFUQQkweDAyCS8qIERpcmVjdCB0byBz
cGVha2VyICovCisKKyNkZWZpbmUJUElUX1NQS1IJKFBJVF9FTkFCTEVUTVIyIHwgUElUX1NQS1JE
QVRBKQorCisjZGVmaW5lCXBwaV9zcGtyX29uKCkJb3V0YihJT19QUEksIGluYihJT19QUEkpIHwg
UElUX1NQS1IpCisjZGVmaW5lCXBwaV9zcGtyX29mZigpCW91dGIoSU9fUFBJLCBpbmIoSU9fUFBJ
KSAmIH5QSVRfU1BLUikKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qIF9NQUNI
SU5FX1BQSVJFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvcHJvYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2Mu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcm9jLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3Byb2MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEgUmVnZW50cyBvZiB0aGUg
VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXByb2MuaAk3LjEgKEJl
cmtlbGV5KSA1LzE1LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvcHJvYy5oIDI5OTc4OCAyMDE2LTA1LTE0IDIzOjM1OjExWiBraWIgJAorICovCisKKyNpZm5k
ZWYgX01BQ0hJTkVfUFJPQ19IXworI2RlZmluZQlfTUFDSElORV9QUk9DX0hfCisKKyNpbmNsdWRl
IDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NlZ21lbnRzLmg+CisKKy8qCisgKiBM
aXN0IG9mIGxvY2tzCisgKglrIC0gb25seSBhY2Nlc3NlZCBieSBjdXJ0aHJlYWQKKyAqCXBwIC0g
cG1hcC5jOmludmxfZ2VuX210eAorICovCisKK3N0cnVjdCBwcm9jX2xkdCB7CisJY2FkZHJfdCBs
ZHRfYmFzZTsKKwlpbnQgICAgIGxkdF9yZWZjbnQ7Cit9OworCitzdHJ1Y3QgcG1hcF9pbnZsX2dl
biB7CisJdV9sb25nIGdlbjsJCQkvKiAoaykgKi8KKwlMSVNUX0VOVFJZKHBtYXBfaW52bF9nZW4p
IGxpbms7CS8qIChwcCkgKi8KK307CisKKy8qCisgKiBNYWNoaW5lLWRlcGVuZGVudCBwYXJ0IG9m
IHRoZSBwcm9jIHN0cnVjdHVyZSBmb3IgQU1ENjQuCisgKi8KK3N0cnVjdCBtZHRocmVhZCB7CisJ
aW50CW1kX3NwaW5sb2NrX2NvdW50OwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NhdmVkX2Zs
YWdzOwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NwdXJmbHRfYWRkcjsJLyogKGspIFNwdXJp
b3VzIHBhZ2UgZmF1bHQgYWRkcmVzcy4gKi8KKwlzdHJ1Y3QgcG1hcF9pbnZsX2dlbiBtZF9pbnZs
X2dlbjsKK307CisKK3N0cnVjdCBtZHByb2MgeworCXN0cnVjdCBwcm9jX2xkdCAqbWRfbGR0Owkv
KiAodCkgcGVyLXByb2Nlc3MgbGR0ICovCisJc3RydWN0IHN5c3RlbV9zZWdtZW50X2Rlc2NyaXB0
b3IgbWRfbGR0X3NkOworfTsKKworI2RlZmluZQlLSU5GT19QUk9DX1NJWkUgMTA4OAorI2RlZmlu
ZQlLSU5GT19QUk9DMzJfU0laRSA3NjgKKworI2lmZGVmCV9LRVJORUwKKworLyogR2V0IHRoZSBj
dXJyZW50IGtlcm5lbCB0aHJlYWQgc3RhY2sgdXNhZ2UuICovCisjZGVmaW5lIEdFVF9TVEFDS19V
U0FHRSh0b3RhbCwgdXNlZCkgZG8gewkJCQlcCisJc3RydWN0IHRocmVhZAkqdGQgPSBjdXJ0aHJl
YWQ7CQkJCVwKKwkodG90YWwpID0gdGQtPnRkX2tzdGFja19wYWdlcyAqIFBBR0VfU0laRTsJCQlc
CisJKHVzZWQpID0gKGNoYXIgKil0ZC0+dGRfa3N0YWNrICsJCQkJXAorCSAgICB0ZC0+dGRfa3N0
YWNrX3BhZ2VzICogUEFHRV9TSVpFIC0JCQkJXAorCSAgICAoY2hhciAqKSZ0ZDsJCQkJCQlcCit9
IHdoaWxlICgwKQorCit2b2lkIHNldF91c2VyX2xkdChzdHJ1Y3QgbWRwcm9jICopOworc3RydWN0
IHByb2NfbGR0ICp1c2VyX2xkdF9hbGxvYyhzdHJ1Y3QgcHJvYyAqLCBpbnQpOwordm9pZCB1c2Vy
X2xkdF9mcmVlKHN0cnVjdCB0aHJlYWQgKik7Cit2b2lkIHVzZXJfbGR0X2RlcmVmKHN0cnVjdCBw
cm9jX2xkdCAqKTsKK3N0cnVjdCBzeXNhcmNoX2FyZ3M7CitpbnQgc3lzYXJjaF9sZHQoc3RydWN0
IHRocmVhZCAqdGQsIHN0cnVjdCBzeXNhcmNoX2FyZ3MgKnVhcCwgaW50IHVhcF9zcGFjZSk7Citp
bnQgYW1kNjRfc2V0X2xkdF9kYXRhKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgc3RhcnQsIGludCBu
dW0sCisgICAgc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNjcyk7CisKK2V4dGVy
biBzdHJ1Y3QgbXR4IGR0X2xvY2s7CitleHRlcm4gaW50IG1heF9sZHRfc2VnbWVudDsKKworc3Ry
dWN0IHN5c2NhbGxfYXJncyB7CisJdV9pbnQgY29kZTsKKwlzdHJ1Y3Qgc3lzZW50ICpjYWxscDsK
KwlyZWdpc3Rlcl90IGFyZ3NbOF07CisJaW50IG5hcmc7Cit9OworI2VuZGlmICAvKiBfS0VSTkVM
ICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfUFJPQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9wcm9maWxlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAkyMDE2LTA5
LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDIwMSBAQAorLyotCisgKiBD
b3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHJvZmlsZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMK
KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wcm9maWxlLmggMjE0
MzQ2IDIwMTAtMTAtMjUgMTU6Mjg6MDNaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9Q
Uk9GSUxFX0hfCisjZGVmaW5lCV9NQUNISU5FX1BST0ZJTEVfSF8KKworI2lmbmRlZiBfU1lTX0NE
RUZTX0hfCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHN5cy9jZGVmcy5oIGFzIGEgcHJlcmVxdWlz
aXRlCisjZW5kaWYKKworI2lmZGVmIF9LRVJORUwKKworLyoKKyAqIENvbmZpZyBnZW5lcmF0ZXMg
c29tZXRoaW5nIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIGFsaWduIGZ1bmN0aW9ucyBvbiAxNgor
ICogYnl0ZSBib3VuZGFyaWVzLiAgQSBzdHJpY3QgYWxpZ25tZW50IGlzIGdvb2QgZm9yIGtlZXBp
bmcgdGhlIHRhYmxlcyBzbWFsbC4KKyAqLworI2RlZmluZQlGVU5DVElPTl9BTElHTk1FTlQJMTYK
KworLyoKKyAqIFRoZSBrZXJuZWwgdXNlcyBhc3NlbWJsZXIgc3R1YnMgaW5zdGVhZCBvZiB1bnBv
cnRhYmxlIGlubGluZXMuCisgKiBUaGlzIGlzIG1haW5seSB0byBzYXZlIGEgbGl0dGxlIHRpbWUg
d2hlbiBwcm9maWxpbmcgaXMgbm90IGVuYWJsZWQsCisgKiB3aGljaCBpcyB0aGUgdXN1YWwgY2Fz
ZSBmb3IgdGhlIGtlcm5lbC4KKyAqLworI2RlZmluZQlfTUNPVU5UX0RFQ0wgdm9pZCBtY291bnQK
KyNkZWZpbmUJTUNPVU5UCisKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUJTUNPVU5UX0RFQ0wocykK
KyNkZWZpbmUJTUNPVU5UX0VOVEVSKHMpCisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCisjaWZkZWYg
X19HTlVDTElLRV9BU00KKyNkZWZpbmUJTUNPVU5UX09WRVJIRUFEKGxhYmVsKQkJCQkJCVwKKwlf
X2FzbSBfX3ZvbGF0aWxlKCJwdXNocSAlMDsgY2FsbCBfX21jb3VudDsgcG9wcSAlJXJjeCIJCVwK
KwkJCSA6CQkJCQkJXAorCQkJIDogImkiIChsYWJlbCkJCQkJCVwKKwkJCSA6ICJheCIsICJkeCIs
ICJjeCIsICJkaSIsICJzaSIsICJyOCIsICJyOSIsICJtZW1vcnkiKQorI2RlZmluZQlNRVhJVENP
VU5UX09WRVJIRUFEKCkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZSgiY2FsbCAubWV4aXRjb3Vu
dDsgMToiCQkJCVwKKwkJCSA6IDoJCQkJCQlcCisJCQkgOiAiYXgiLCAiZHgiLCAiY3giLCAiZGki
LCAic2kiLCAicjgiLCAicjkiLCAibWVtb3J5IikKKyNkZWZpbmUJTUVYSVRDT1VOVF9PVkVSSEVB
RF9HRVRMQUJFTChsYWJlbHApCQkJCVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICQxYiwlMCIg
OiAiPXJtIiAobGFiZWxwKSkKKyNlbGlmIGRlZmluZWQobGludCkKKyNkZWZpbmUJTUNPVU5UX09W
RVJIRUFEKGxhYmVsKQorI2RlZmluZQlNRVhJVENPVU5UX09WRVJIRUFEKCkKKyNkZWZpbmUJTUVY
SVRDT1VOVF9PVkVSSEVBRF9HRVRMQUJFTCgpCisjZWxzZQorI2Vycm9yIHRoaXMgZmlsZSBuZWVk
cyB0byBiZSBwb3J0ZWQgdG8geW91ciBjb21waWxlcgorI2VuZGlmIC8qICFfX0dOVUNMSUtFX0FT
TSAqLworI2Vsc2UgLyogIUdVUFJPRiAqLworI2RlZmluZQlNQ09VTlRfREVDTChzKQlyZWdpc3Rl
cl90IHM7CisjaWZkZWYgU01QCitleHRlcm4gaW50CW1jb3VudF9sb2NrOworI2RlZmluZQlNQ09V
TlRfRU5URVIocykJeyBzID0gaW50cl9kaXNhYmxlKCk7IFwKKyAJCQkgIHdoaWxlICghYXRvbWlj
X2NtcHNldF9hY3FfaW50KCZtY291bnRfbG9jaywgMCwgMSkpIFwKKwkJCSAgCS8qIG5vdGhpbmcg
Ki8gOyB9CisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCXsgYXRvbWljX3N0b3JlX3JlbF9pbnQoJm1j
b3VudF9sb2NrLCAwKTsgXAorCQkJICBpbnRyX3Jlc3RvcmUocyk7IH0KKyNlbHNlCisjZGVmaW5l
CU1DT1VOVF9FTlRFUihzKQl7IHMgPSBpbnRyX2Rpc2FibGUoKTsgfQorI2RlZmluZQlNQ09VTlRf
RVhJVChzKQkoaW50cl9yZXN0b3JlKHMpKQorI2VuZGlmCisjZW5kaWYgLyogR1VQUk9GICovCisK
K3ZvaWQgYmludHIodm9pZCk7Cit2b2lkIGJ0cmFwKHZvaWQpOwordm9pZCBlaW50cih2b2lkKTsK
K3ZvaWQgdXNlcih2b2lkKTsKKworI2RlZmluZQlNQ09VTlRfRlJPTVBDX1VTRVIocGMpCQkJCQlc
CisJKChwYyA8ICh1aW50ZnB0cl90KVZNX01BWFVTRVJfQUREUkVTUykgPyAodWludGZwdHJfdCl1
c2VyIDogcGMpCisKKyNkZWZpbmUJTUNPVU5UX0ZST01QQ19JTlRSKHBjKQkJCQkJXAorCSgocGMg
Pj0gKHVpbnRmcHRyX3QpYnRyYXAgJiYgcGMgPCAodWludGZwdHJfdCllaW50cikgPwlcCisJICAg
ICgocGMgPj0gKHVpbnRmcHRyX3QpYmludHIpID8gKHVpbnRmcHRyX3QpYmludHIgOglcCisJCSh1
aW50ZnB0cl90KWJ0cmFwKSA6IH4wVUwpCisKKyNlbHNlIC8qICFfS0VSTkVMICovCisKKyNkZWZp
bmUJRlVOQ1RJT05fQUxJR05NRU5UCTQKKworI2RlZmluZQlfTUNPVU5UX0RFQ0wgXAorc3RhdGlj
IHZvaWQgX21jb3VudCh1aW50ZnB0cl90IGZyb21wYywgdWludGZwdHJfdCBzZWxmcGMpIF9fdXNl
ZDsgXAorc3RhdGljIHZvaWQgX21jb3VudAorCisjaWZkZWYgX19HTlVDTElLRV9BU00KKyNkZWZp
bmUJTUNPVU5UIF9fYXNtKCIJCQlcblwKKwkudGV4dAkJCQlcblwKKwkucDJhbGlnbiA0LDB4OTAJ
CQlcblwKKwkuZ2xvYmwJLm1jb3VudAkJCVxuXAorCS50eXBlCS5tY291bnQsQGZ1bmN0aW9uCVxu
XAorLm1jb3VudDoJCQkJXG5cCisJcHVzaHEJJXJkaQkJCVxuXAorCXB1c2hxCSVyc2kJCQlcblwK
KwlwdXNocQklcmR4CQkJXG5cCisJcHVzaHEJJXJjeAkJCVxuXAorCXB1c2hxCSVyOAkJCVxuXAor
CXB1c2hxCSVyOQkJCVxuXAorCXB1c2hxCSVyYXgJCQlcblwKKwltb3ZxCTgoJXJicCksJXJkaQkJ
XG5cCisJbW92cQk3KjgoJXJzcCksJXJzaQkJXG5cCisJY2FsbAlfbWNvdW50CQkJXG5cCisJcG9w
cQklcmF4CQkJXG5cCisJcG9wcQklcjkJCQlcblwKKwlwb3BxCSVyOAkJCVxuXAorCXBvcHEJJXJj
eAkJCVxuXAorCXBvcHEJJXJkeAkJCVxuXAorCXBvcHEJJXJzaQkJCVxuXAorCXBvcHEJJXJkaQkJ
CVxuXAorCXJldAkJCQlcblwKKwkuc2l6ZQkubWNvdW50LCAuIC0gLm1jb3VudCIpOworI2lmIDAK
Ky8qCisgKiBXZSBjb3VsZCB1c2UgdGhpcywgZXhjZXB0IGl0IGRvZXNuJ3QgcHJlc2VydmUgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUKKyAqIGJlaW5nIHBhc3NlZCB3aXRoIGFyZ3VtZW50cyB0byB0
aGUgZnVuY3Rpb24gdGhhdCB3ZSB3ZXJlIGluc2VydGVkCisgKiBpbnRvLiAgSSd2ZSBsZWZ0IGl0
IGhlcmUgYXMgZG9jdW1lbnRhdGlvbiBvZiB3aGF0IHRoZSBjb2RlIGFib3ZlIGlzCisgKiBzdXBw
b3NlZCB0byBkby4KKyAqLworI2RlZmluZQlNQ09VTlQJCQkJCQkJCVwKK3ZvaWQJCQkJCQkJCQlc
CittY291bnQoKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKwl1aW50ZnB0cl90IHNlbGZwYywgZnJv
bXBjOwkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogRmluZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9y
IG1jb3VudCwJCQkJXAorCSAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIG1jb3VudCdzIGNh
bGxlci4JCQlcCisJICoJCQkJCQkJCVwKKwkgKiBzZWxmcGMgPSBwYyBwdXNoZWQgYnkgY2FsbCB0
byBtY291bnQJCQkJXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxIDgoJSVyYnApLCUwIiA6
ICI9ciIgKHNlbGZwYykpOwkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIGZyb21wYyA9IHBjIHB1c2hl
ZCBieSBjYWxsIHRvIG1jb3VudCdzIGNhbGxlci4JCVwKKwkgKiBUaGUgY2FsbGVyJ3Mgc3RhY2sg
ZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCwgc28gJXJicCBpcwlcCisJICogdGhlIGNhbGxl
cidzIGZyYW1lIHBvaW50ZXIuICBUaGUgY2FsbGVyJ3MgcmFkZHIgaXMgaW4gdGhlCVwKKwkgKiBj
YWxsZXIncyBmcmFtZSBmb2xsb3dpbmcgdGhlIGNhbGxlcidzIGNhbGxlcidzIGZyYW1lIHBvaW50
ZXIuXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxICglJXJicCksJTAiIDogIj1yIiAoZnJv
bXBjKSk7CQkJXAorCWZyb21wYyA9ICgodWludGZwdHJfdCAqKWZyb21wYylbMV07CQkJCVwKKwlf
bWNvdW50KGZyb21wYywgc2VsZnBjKTsJCQkJCVwKK30KKyNlbmRpZgorI2Vsc2UgLyogIV9fR05V
Q0xJS0VfQVNNICovCisjZGVmaW5lCU1DT1VOVAorI2VuZGlmIC8qIF9fR05VQ0xJS0VfQVNNICov
CisKK3R5cGVkZWYJdV9sb25nCXVpbnRmcHRyX3Q7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK
Ky8qCisgKiBBbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgY2FuIGhvbGQgbm9uLW5lZ2F0
aXZlIGRpZmZlcmVuY2UgYmV0d2VlbgorICogZnVuY3Rpb24gcG9pbnRlcnMuCisgKi8KK3R5cGVk
ZWYJdV9sb25nCWZwdHJkaWZmX3Q7CisKKyNpZmRlZiBfS0VSTkVMCisKK3ZvaWQJbWNvdW50KHVp
bnRmcHRyX3QgZnJvbXBjLCB1aW50ZnB0cl90IHNlbGZwYyk7CisKKyNlbHNlIC8qICFfS0VSTkVM
ICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworI2lmZGVmIF9f
R05VQ0xJS0VfQVNNCit2b2lkCW1jb3VudCh2b2lkKSBfX2FzbSgiLm1jb3VudCIpOworI2VuZGlm
CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNI
SU5FX1BST0ZJTEVfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3BzbC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5o
Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9wc2wuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCww
ICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICov
CisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvcHNsLmggMjMzMjA0
IDIwMTItMDMtMTkgMjE6Mjk6NTdaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L3BzbC5oPgpk
aWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B0
cmFjZS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBA
QAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdHJhY2UuaCAyMzI1MjAgMjAx
Mi0wMy0wNCAyMDoyNDoyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcHRyYWNlLmg+CmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wdmNsb2NrLmgg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHZjbG9jay5oCi0tLSB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B2Y2xvY2suaAkxOTcwLTAxLTAxIDAxOjAwOjAw
LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
cHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs
NiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8q
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdmNsb2NrLmggMjc4MTgz
IDIwMTUtMDItMDQgMDg6MjY6NDNaIGJyeWFudiAkICovCisKKyNpbmNsdWRlIDx4ODYvcHZjbG9j
ay5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVn
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlZy5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot
CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWcuaCAyMzMxMjQgMjAxMi0wMy0xOCAx
OTowNjozOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcmVnLmg+CmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZWxvYy5oIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlbG9jLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcmVsb2MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVsb2MuaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ5IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg
Q2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICoKKyAqCUAoIylyZWxvYy5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWxvYy5oIDEyNzkxNCAyMDA0
LTA0LTA1IDIxOjI5OjQxWiBpbXAgJAorICovCisKKyNpZm5kZWYgX0kzODZfTUFDSElORV9SRUxP
Q19IXworI2RlZmluZSBfSTM4Nl9NQUNISU5FX1JFTE9DX0hfCisKKy8qIFJlbG9jYXRpb24gZm9y
bWF0LiAqLworc3RydWN0IHJlbG9jYXRpb25faW5mbyB7CisJaW50IHJfYWRkcmVzczsJCQkgIC8q
IG9mZnNldCBpbiB0ZXh0IG9yIGRhdGEgc2VnbWVudCAqLworCXVuc2lnbmVkIGludCAgIHJfc3lt
Ym9sbnVtIDogMjQsICAvKiBvcmRpbmFsIG51bWJlciBvZiBhZGQgc3ltYm9sICovCisJCQkgICBy
X3BjcmVsIDogIDEsICAvKiAxIGlmIHZhbHVlIHNob3VsZCBiZSBwYy1yZWxhdGl2ZSAqLworCQkJ
ICByX2xlbmd0aCA6ICAyLCAgLyogbG9nIGJhc2UgMiBvZiB2YWx1ZSdzIHdpZHRoICovCisJCQkg
IHJfZXh0ZXJuIDogIDEsICAvKiAxIGlmIG5lZWQgdG8gYWRkIHN5bWJvbCB0byB2YWx1ZSAqLwor
CQkJIHJfYmFzZXJlbCA6ICAxLCAgLyogbGlua2FnZSB0YWJsZSByZWxhdGl2ZSAqLworCQkJcl9q
bXB0YWJsZSA6ICAxLCAgLyogcmVsb2NhdGUgdG8ganVtcCB0YWJsZSAqLworCQkJcl9yZWxhdGl2
ZSA6ICAxLCAgLyogbG9hZCBhZGRyZXNzIHJlbGF0aXZlICovCisJCQkgICAgcl9jb3B5IDogIDE7
ICAvKiBydW4gdGltZSBjb3B5ICovCit9OworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Jlc291cmNlLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcmVzb3VyY2UuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9yZXNvdXJjZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZXNvdXJjZS5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDcgQEAKKy8qICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZXNvdXJjZS5oIDI2MTc5MCAyMDE0
LTAyLTEyIDA0OjMwOjM3WiBqaGIgJCAqLworLyotCisgKiBDb3B5cmlnaHQgMTk5OCBNYXNzYWNo
dXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgKgorICogUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBk
b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5Cisg
KiBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMKKyAqIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCB0aGF0
IGJvdGggdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRo
YXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkCisgKiBpbiBhZHZlcnRpc2luZyBvciBw
dWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMK
KyAqIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0
d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0
IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0uSS5ULiBESVNDTEFJTVMKKyAqIEFM
TCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX
QVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkkuVC4gQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAq
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfUkVTT1VSQ0VfSF8KKyNkZWZp
bmUJX01BQ0hJTkVfUkVTT1VSQ0VfSF8JMQorCisvKgorICogRGVmaW5pdGlvbnMgb2YgcmVzb3Vy
Y2UgdHlwZXMgZm9yIEludGVsIEFyY2hpdGVjdHVyZSBtYWNoaW5lcworICogd2l0aCBzdXBwb3J0
IGZvciBsZWdhY3kgSVNBIGRldmljZXMgYW5kIGRyaXZlcnMuCisgKi8KKworI2RlZmluZQlTWVNf
UkVTX0lSUQkxCS8qIGludGVycnVwdCBsaW5lcyAqLworI2RlZmluZQlTWVNfUkVTX0RSUQkyCS8q
IGlzYSBkbWEgbGluZXMgKi8KKyNkZWZpbmUJU1lTX1JFU19NRU1PUlkJMwkvKiBpL28gbWVtb3J5
ICovCisjZGVmaW5lCVNZU19SRVNfSU9QT1JUCTQJLyogaS9vIHBvcnRzICovCisjaWZkZWYgTkVX
X1BDSUIKKyNkZWZpbmUJUENJX1JFU19CVVMJNQkvKiBQQ0kgYnVzIG51bWJlcnMgKi8KKyNlbmRp
ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFU09VUkNFX0hfICovCmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ydW5xLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL3J1bnEuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDAxIEpha2UgQnVya2hvbGRlciA8amFrZUBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3J1
bnEuaCAxMzk3MzEgMjAwNS0wMS0wNSAyMDoxNzoyMVogaW1wICQKKyAqLworCisjaWZuZGVmCV9N
QUNISU5FX1JVTlFfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUlVOUV9IXworCisjZGVmaW5lCVJRQl9M
RU4JCSgxKQkJLyogTnVtYmVyIG9mIHByaW9yaXR5IHN0YXR1cyB3b3Jkcy4gKi8KKyNkZWZpbmUJ
UlFCX0wyQlBXCSg2KQkJLyogTG9nMihzaXplb2YocnFiX3dvcmRfdCkgKiBOQkJZKSkuICovCisj
ZGVmaW5lCVJRQl9CUFcJCSgxPDxSUUJfTDJCUFcpCS8qIEJpdHMgaW4gYW4gcnFiX3dvcmRfdC4g
Ki8KKworI2RlZmluZQlSUUJfQklUKHByaSkJKDF1bCA8PCAoKHByaSkgJiAoUlFCX0JQVyAtIDEp
KSkKKyNkZWZpbmUJUlFCX1dPUkQocHJpKQkoKHByaSkgPj4gUlFCX0wyQlBXKQorCisjZGVmaW5l
CVJRQl9GRlMod29yZCkJKGJzZnEod29yZCkpCisKKy8qCisgKiBUeXBlIG9mIHJ1biBxdWV1ZSBz
dGF0dXMgd29yZC4KKyAqLwordHlwZWRlZgl1X2ludDY0X3QJcnFiX3dvcmRfdDsKKworI2VuZGlm
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZWdtZW50
cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NlZ21lbnRzLmgKLS0tIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2VnbWVudHMuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDEwNiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTAgV2lsbGlhbSBG
LiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5
CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF
TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor
ICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkgNS85LzkxCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvc2VnbWVudHMuaCAyNTg2NjAgMjAxMy0x
MS0yNiAxOTozODo0Mloga2liICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1NFR01FTlRTX0hf
CisjZGVmaW5lCV9NQUNISU5FX1NFR01FTlRTX0hfCisKKy8qCisgKiBBTUQ2NCBTZWdtZW50YXRp
b24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKyNpbmNsdWRlIDx4ODYv
c2VnbWVudHMuaD4KKworLyoKKyAqIFN5c3RlbSBzZWdtZW50IGRlc2NyaXB0b3JzICgxMjggYml0
IHdpZGUpCisgKi8KK3N0cnVjdAlzeXN0ZW1fc2VnbWVudF9kZXNjcmlwdG9yIHsKKwl1X2ludDY0
X3Qgc2RfbG9saW1pdDoxNjsJLyogc2VnbWVudCBleHRlbnQgKGxzYikgKi8KKwl1X2ludDY0X3Qg
c2RfbG9iYXNlOjI0OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgKGxzYikgKi8KKwl1X2ludDY0
X3Qgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdV9pbnQ2NF90IHNkX2RwbDoyOwkJ
Lyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdV9pbnQ2NF90IHNkX3A6
MTsJCS8qIHNlZ21lbnQgZGVzY3JpcHRvciBwcmVzZW50ICovCisJdV9pbnQ2NF90IHNkX2hpbGlt
aXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdV9pbnQ2NF90IHNkX3h4MDozOwkJ
LyogdW51c2VkICovCisJdV9pbnQ2NF90IHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5
IChieXRlL3BhZ2UgdW5pdHMpKi8KKwl1X2ludDY0X3Qgc2RfaGliYXNlOjQwIF9fcGFja2VkOy8q
IHNlZ21lbnQgYmFzZSBhZGRyZXNzICAobXNiKSAqLworCXVfaW50NjRfdCBzZF94eDE6ODsKKwl1
X2ludDY0X3Qgc2RfbWJ6OjU7CQkvKiBNVVNUIGJlIHplcm8gKi8KKwl1X2ludDY0X3Qgc2RfeHgy
OjE5OworfSBfX3BhY2tlZDsKKworLyoKKyAqIFNvZnR3YXJlIGRlZmluaXRpb25zIGFyZSBpbiB0
aGlzIGNvbnZlbmllbnQgZm9ybWF0LAorICogd2hpY2ggYXJlIHRyYW5zbGF0ZWQgaW50byBpbmNv
bnZlbmllbnQgc2VnbWVudCBkZXNjcmlwdG9ycworICogd2hlbiBuZWVkZWQgdG8gYmUgdXNlZCBi
eSB0aGUgMzg2IGhhcmR3YXJlCisgKi8KKworc3RydWN0CXNvZnRfc2VnbWVudF9kZXNjcmlwdG9y
IHsKKwl1bnNpZ25lZCBsb25nIHNzZF9iYXNlOwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICov
CisJdW5zaWduZWQgbG9uZyBzc2RfbGltaXQ7CS8qIHNlZ21lbnQgZXh0ZW50ICovCisJdW5zaWdu
ZWQgbG9uZyBzc2RfdHlwZTo1OwkvKiBzZWdtZW50IHR5cGUgKi8KKwl1bnNpZ25lZCBsb25nIHNz
ZF9kcGw6MjsJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdW5zaWdu
ZWQgbG9uZyBzc2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByZXNlbnQgKi8KKwl1bnNp
Z25lZCBsb25nIHNzZF9sb25nOjE7CS8qIGxvbmcgbW9kZSAoZm9yICVjcykgKi8KKwl1bnNpZ25l
ZCBsb25nIHNzZF9kZWYzMjoxOwkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJdW5z
aWduZWQgbG9uZyBzc2RfZ3JhbjoxOwkvKiBsaW1pdCBncmFudWxhcml0eSAoYnl0ZS9wYWdlIHVu
aXRzKSovCit9IF9fcGFja2VkOworCisvKgorICogcmVnaW9uIGRlc2NyaXB0b3JzLCB1c2VkIHRv
IGxvYWQgZ2R0L2lkdCB0YWJsZXMgYmVmb3JlIHNlZ21lbnRzIHlldCBleGlzdC4KKyAqLworc3Ry
dWN0IHJlZ2lvbl9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCByZF9saW1pdDoxNjsJCS8qIHNlZ21l
bnQgZXh0ZW50ICovCisJdWludDY0X3QgcmRfYmFzZTo2NCBfX3BhY2tlZDsJLyogYmFzZSBhZGRy
ZXNzICAqLworfSBfX3BhY2tlZDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1Y3QgdXNl
cl9zZWdtZW50X2Rlc2NyaXB0b3IgZ2R0W107CitleHRlcm4gc3RydWN0IHNvZnRfc2VnbWVudF9k
ZXNjcmlwdG9yIGdkdF9zZWdzW107CitleHRlcm4gc3RydWN0IGdhdGVfZGVzY3JpcHRvciAqaWR0
OworZXh0ZXJuIHN0cnVjdCByZWdpb25fZGVzY3JpcHRvciByX2dkdCwgcl9pZHQ7CisKK3ZvaWQJ
bGdkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKnJkcCk7Cit2b2lkCXNkdG9zc2Qoc3RydWN0
IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpzZHAsCisJICAgIHN0cnVjdCBzb2Z0X3NlZ21lbnRf
ZGVzY3JpcHRvciAqc3NkcCk7Cit2b2lkCXNzZHRvc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNj
cmlwdG9yICpzc2RwLAorCSAgICBzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IgKnNkcCk7
Cit2b2lkCXNzZHRvc3lzc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNjcmlwdG9yICpzc2RwLAor
CSAgICBzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqc2RwKTsKK3ZvaWQJdXBkYXRl
X2dkdF9nc2Jhc2Uoc3RydWN0IHRocmVhZCAqdGQsIHVpbnQzMl90IGJhc2UpOwordm9pZAl1cGRh
dGVfZ2R0X2ZzYmFzZShzdHJ1Y3QgdGhyZWFkICp0ZCwgdWludDMyX3QgYmFzZSk7CisjZW5kaWYg
LyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX1NFR01FTlRTX0hfICovCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2V0am1w
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisv
Ki0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3NldGptcC5oIDIzMjI3NSAyMDEyLTAy
LTI4IDIyOjE3OjUyWiB0aWpsICQgKi8KKworI2luY2x1ZGUgPHg4Ni9zZXRqbXAuaD4KZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCi0tLSB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZl9idWYu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDUxIEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBBbGFuIEwuIENveCA8YWxjQGNzLnJpY2Uu
ZWR1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAv
c3lzL2FtZDY0L2luY2x1ZGUvc2ZfYnVmLmggMjY5NTc3IDIwMTQtMDgtMDUgMDk6NDQ6MTBaIGds
ZWJpdXMgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0ZfQlVGX0hfCisjZGVmaW5lIF9NQUNI
SU5FX1NGX0JVRl9IXworCisvKgorICogT24gdGhpcyBtYWNoaW5lLCB0aGUgb25seSBwdXJwb3Nl
IGZvciB3aGljaCBzZl9idWYgaXMgdXNlZCBpcyB0byBpbXBsZW1lbnQKKyAqIGFuIG9wYXF1ZSBw
b2ludGVyIHJlcXVpcmVkIGJ5IHRoZSBtYWNoaW5lLWluZGVwZW5kZW50IHBhcnRzIG9mIHRoZSBr
ZXJuZWwuCisgKiBUaGF0IHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgdm1fcGFnZSB0aGF0IGlzICJt
YXBwZWQiIGJ5IHRoZSBzZl9idWYuICBUaGUKKyAqIGFjdHVhbCBtYXBwaW5nIGlzIHByb3ZpZGVk
IGJ5IHRoZSBkaXJlY3QgdmlydHVhbC10by1waHlzaWNhbCBtYXBwaW5nLiAgCisgKi8KK3N0YXRp
YyBpbmxpbmUgdm1fb2Zmc2V0X3QKK3NmX2J1Zl9rdmEoc3RydWN0IHNmX2J1ZiAqc2YpCit7CisK
KwlyZXR1cm4gKFBIWVNfVE9fRE1BUChWTV9QQUdFX1RPX1BIWVMoKHZtX3BhZ2VfdClzZikpKTsK
K30KKworc3RhdGljIGlubGluZSB2bV9wYWdlX3QKK3NmX2J1Zl9wYWdlKHN0cnVjdCBzZl9idWYg
KnNmKQoreworCisJcmV0dXJuICgodm1fcGFnZV90KXNmKTsKK30KKyNlbmRpZiAvKiAhX01BQ0hJ
TkVfU0ZfQlVGX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9zaWdmcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Np
Z2ZyYW1lLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw
dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvc2lnZnJhbWUuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor
I2luY2x1ZGUgPHg4Ni9zaWdmcmFtZS5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc2lnbmFsLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvc2lnbmFsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2ln
bmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NpZ25hbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl
IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9zaWduYWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor
I2luY2x1ZGUgPHg4Ni9zaWduYWwuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL3NtcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l
L3NtcC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NtcC5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9zbXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApA
QCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVF
Ui1XQVJFIExJQ0VOU0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90
ZSB0aGlzIGZpbGUuICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBj
YW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUg
ZGF5LCBhbmQgeW91IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1
eSBtZSBhIGJlZXIgaW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3NtcC5oIDI5MTk0OSAyMDE1LTEyLTA3IDE3OjQxOjIwWiBraWIgJAorICoKKyAqLworCisjaWZu
ZGVmIF9NQUNISU5FX1NNUF9IXworI2RlZmluZSBfTUFDSElORV9TTVBfSF8KKworI2lmZGVmIF9L
RVJORUwKKworI2lmZGVmIFNNUAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8eDg2L3g4
Nl9zbXAuaD4KKworZXh0ZXJuIGludCBwbWFwX3BjaWRfZW5hYmxlZDsKK2V4dGVybiBpbnQgaW52
cGNpZF93b3JrczsKKworLyogZ2xvYmFsIHN5bWJvbHMgaW4gbXBib290LlMgKi8KK2V4dGVybiBj
aGFyCQkJbXB0cmFtcF9zdGFydFtdOworZXh0ZXJuIGNoYXIJCQltcHRyYW1wX2VuZFtdOworZXh0
ZXJuIHVfaW50MzJfdAkJbXB0cmFtcF9wYWdldGFibGVzOworCisvKiBJUEkgaGFuZGxlcnMgKi8K
K2ludGhhbmRfdAorCUlEVFZFQyhpbnZsdGxiX3BjaWQpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGds
b2JhbCwgcGNpZCAqLworCUlEVFZFQyhpbnZsdGxiX2ludnBjaWQpLC8qIFRMQiBzaG9vdGRvd25z
IC0gZ2xvYmFsLCBpbnZwY2lkICovCisJSURUVkVDKGp1c3RyZXR1cm4pOwkvKiBpbnRlcnJ1cHQg
Q1BVIHdpdGggbWluaW11bSBvdmVyaGVhZCAqLworCit2b2lkCWludmx0bGJfcGNpZF9oYW5kbGVy
KHZvaWQpOwordm9pZAlpbnZsdGxiX2ludnBjaWRfaGFuZGxlcih2b2lkKTsKK2ludAluYXRpdmVf
c3RhcnRfYWxsX2Fwcyh2b2lkKTsKKworI2VuZGlmIC8qICFMT0NPUkUgKi8KKyNlbmRpZiAvKiBT
TVAgKi8KKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9TTVBfSF8g
Ki8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NwZWNp
YWxyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgK
LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3BlY2lhbHJlZy5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3NwZWNpYWxyZWcuaCAyMzMyMDcgMjAxMi0wMy0xOSAyMTozNDoxMVogdGlqbCAkICovCisKKyNp
bmNsdWRlIDx4ODYvc3BlY2lhbHJlZy5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9zdGFjay5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNr
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJs
aWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvc3RhY2suaCAyODc2NDMgMjAxNS0wOS0xMSAwMzoyNDowN1ogbWFya2ogJCAqLworCisjaW5j
bHVkZSA8eDg2L3N0YWNrLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9zdGRhcmcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z
dGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zdGRhcmcuaAkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc3RkYXJnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3N0ZGFyZy5oIDIzMjI3NiAyMDEyLTAyLTI4IDIyOjMwOjU4WiB0aWpsICQgKi8KKworI2luY2x1
ZGUgPHg4Ni9zdGRhcmcuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3N5c2FyY2guaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z
eXNhcmNoLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3lzYXJjaC5o
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9zeXNhcmNoLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi
bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs
dWRlL3N5c2FyY2guaCAyMzMyMDkgMjAxMi0wMy0xOSAyMTo1NzozMVogdGlqbCAkICovCisKKyNp
bmNsdWRlIDx4ODYvc3lzYXJjaC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvdGltZXJyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS90aW1lcnJlZy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rp
bWVycmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RpbWVycmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgVEFLQUhBU0hJIFlvc2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJl
bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3RpbWVycmVnLmggMTc3NjQyIDIwMDgtMDMtMjYg
MjA6MDk6MjFaIHBoayAkCisgKi8KKworLyoKKyAqIFRoZSBvdXRwdXRzIG9mIHRoZSB0aHJlZSB0
aW1lcnMgYXJlIGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorICoKKyAqCSB0aW1lciAwIC0+IGlycSAw
CisgKgkgdGltZXIgMSAtPiBkbWEgY2hhbiAwIChmb3IgZHJhbSByZWZyZXNoKQorICogCSB0aW1l
ciAyIC0+IHNwZWFrZXIgKHZpYSBrZXlib2FyZCBjb250cm9sbGVyKQorICoKKyAqIFRpbWVyIDAg
aXMgdXNlZCB0byBjYWxsIGhhcmRjbG9jay4KKyAqIFRpbWVyIDIgaXMgdXNlZCB0byBnZW5lcmF0
ZSBjb25zb2xlIGJlZXBzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVElNRVJSRUdfSF8KKyNk
ZWZpbmUgX01BQ0hJTkVfVElNRVJSRUdfSF8KKworI2lmZGVmIF9LRVJORUwKKworI2luY2x1ZGUg
PGRldi9pYy9pODI1M3JlZy5oPgorCisjZGVmaW5lCUlPX1RJTUVSMQkweDQwCQkvKiA4MjUzIFRp
bWVyICMxICovCisjZGVmaW5lCVRJTUVSX0NOVFIwCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05U
UjApCisjZGVmaW5lCVRJTUVSX0NOVFIxCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjEpCisj
ZGVmaW5lCVRJTUVSX0NOVFIyCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjIpCisjZGVmaW5l
CVRJTUVSX01PREUJKElPX1RJTUVSMSArIFRJTUVSX1JFR19NT0RFKQorCisjZW5kaWYgLyogX0tF
Uk5FTCAqLworCisjZW5kaWYgLyogX01BQ0hJTkVfVElNRVJSRUdfSF8gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RyYXAuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvdHJhcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls
ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L3N5cy9hbWQ2NC9pbmNsdWRlL3RyYXAuaCAyMzI0OTIgMjAxMi0wMy0wNCAxNDoxMjo1N1ogdGlq
bCAkICovCisKKyNpbmNsdWRlIDx4ODYvdHJhcC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvdHNzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNz
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rzcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAw
ICswMTAwCkBAIC0wLDAgKzEsNzAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBS
ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJp
YnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHNzLmgJNS40IChCZXJrZWxleSkgMS8x
OC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3Rzcy5oIDE0
NTEyMCAyMDA1LTA0LTE1IDE4OjM5OjMxWiBwZXRlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElO
RV9UU1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfVFNTX0hfIDEKKworLyoKKyAqIGFtZDY0IENvbnRl
eHQgRGF0YSBUeXBlCisgKgorICogVGhlIGFsaWdubWVudCBpcyBwcmV0dHkgbWVzc2VkIHVwIGhl
cmUgZHVlIHRvIHJldXNlIG9mIHRoZSBvcmlnaW5hbCAzMiBiaXQKKyAqIGZpZWxkcy4gIEl0IG1p
Z2h0IGJlIHdvcnRoIHRyeWluZyB0byBzZXQgdGhlIHRzcyBvbiBhICs0IGJ5dGUgb2Zmc2V0IHRv
CisgKiBtYWtlIHRoZSA2NCBiaXQgZmllbGRzIGFsaWduZWQgaW4gcHJhY3RpY2UuCisgKi8KK3N0
cnVjdCBhbWQ2NHRzcyB7CisJdV9pbnQzMl90CXRzc19yc3ZkMDsKKwl1X2ludDY0X3QJdHNzX3Jz
cDAgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDAgKi8KKwl1X2ludDY0
X3QJdHNzX3JzcDEgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDEgKi8K
Kwl1X2ludDY0X3QJdHNzX3JzcDIgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciBy
aW5nIDIgKi8KKwl1X2ludDMyX3QJdHNzX3JzdmQxOworCXVfaW50MzJfdAl0c3NfcnN2ZDI7CisJ
dV9pbnQ2NF90CXRzc19pc3QxIF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3RhY2sgdGFibGUgMSAq
LworCXVfaW50NjRfdAl0c3NfaXN0MiBfX3BhY2tlZDsJLyogSW50ZXJydXB0IHN0YWNrIHRhYmxl
IDIgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDMgX19wYWNrZWQ7CS8qIEludGVycnVwdCBzdGFjayB0
YWJsZSAzICovCisJdV9pbnQ2NF90CXRzc19pc3Q0IF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3Rh
Y2sgdGFibGUgNCAqLworCXVfaW50NjRfdAl0c3NfaXN0NSBfX3BhY2tlZDsJLyogSW50ZXJydXB0
IHN0YWNrIHRhYmxlIDUgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDYgX19wYWNrZWQ7CS8qIEludGVy
cnVwdCBzdGFjayB0YWJsZSA2ICovCisJdV9pbnQ2NF90CXRzc19pc3Q3IF9fcGFja2VkOwkvKiBJ
bnRlcnJ1cHQgc3RhY2sgdGFibGUgNyAqLworCXVfaW50MzJfdAl0c3NfcnN2ZDM7CisJdV9pbnQz
Ml90CXRzc19yc3ZkNDsKKwl1X2ludDE2X3QJdHNzX3JzdmQ1OworCXVfaW50MTZfdAl0c3NfaW9i
YXNlOwkvKiBpbyBiaXRtYXAgb2Zmc2V0ICovCit9OworCisjaWZkZWYgX0tFUk5FTAorZXh0ZXJu
IHN0cnVjdCBhbWQ2NHRzcyBjb21tb25fdHNzW107CisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNI
SU5FX1RTU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvdWNvbnRleHQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS91Y29u
dGV4dC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJ
MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi
bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs
dWRlL3Vjb250ZXh0LmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtpYiAkICovCisKKyNp
bmNsdWRlIDx4ODYvdWNvbnRleHQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL3ZhcmFyZ3MuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS92YXJhcmdzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmFy
YXJncy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92YXJhcmdzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w
MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRv
cmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJp
dmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4
IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRo
CisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp
bmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k
IGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz
aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl2YXJh
cmdzLmgJOC4yIChCZXJrZWxleSkgMy8yMi85NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5
cy9hbWQ2NC9pbmNsdWRlL3ZhcmFyZ3MuaCAxNDM0MzQgMjAwNS0wMy0xMSAyMjoxNjowOVogcGV0
ZXIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVkFSQVJHU19IXworI2RlZmluZQlfTUFDSElO
RV9WQVJBUkdTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBu
ZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpZmRlZiBfX0dO
VUNMSUtFX0JVSUxUSU5fVkFSQVJHUworCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjaWZu
ZGVmIF9WQV9MSVNUX0RFQ0xBUkVECisjZGVmaW5lCV9WQV9MSVNUX0RFQ0xBUkVECit0eXBlZGVm
CV9fdmFfbGlzdAl2YV9saXN0OworI2VuZGlmCisKK3R5cGVkZWYgaW50IF9fYnVpbHRpbl92YV9h
bGlzdF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpOworCisjZGVmaW5lCXZh
X2FsaXN0CQlfX2J1aWx0aW5fdmFfYWxpc3QKKyNkZWZpbmUJdmFfZGNsCQkJX19idWlsdGluX3Zh
X2FsaXN0X3QgX19idWlsdGluX3ZhX2FsaXN0OyAuLi4KKyNkZWZpbmUJdmFfc3RhcnQoYXApCQlf
X2J1aWx0aW5fdmFyYXJnc19zdGFydChhcCkKKyNkZWZpbmUJdmFfYXJnKGFwLCB0eXBlKQlfX2J1
aWx0aW5fdmFfYXJnKChhcCksIHR5cGUpCisjZGVmaW5lCXZhX2VuZChhcCkJCV9fYnVpbHRpbl92
YV9lbmQoYXApCisKKyNlbHNlCS8qICFfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUyAqLworCit0
eXBlZGVmIGNoYXIgKnZhX2xpc3Q7CisKKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz
aXplb2YodHlwZSkgKyBzaXplb2YoaW50KSAtIDEpIC8gc2l6ZW9mKGludCkpICogc2l6ZW9mKGlu
dCkpCisKKyNpZiBkZWZpbmVkKF9fR05VQ0xJS0VfQlVJTFRJTl9WQUFMSVNUKQorI2RlZmluZQl2
YV9hbGlzdAlfX2J1aWx0aW5fdmFfYWxpc3QKKyNlbmRpZgorI2RlZmluZQl2YV9kY2wJaW50IHZh
X2FsaXN0OyAuLi4KKworI2RlZmluZQl2YV9zdGFydChhcCkgXAorCSgoYXApID0gKHZhX2xpc3Qp
JnZhX2FsaXN0KQorCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKikoKGFw
KSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorCisjZGVmaW5l
CXZhX2VuZChhcCkKKworI2VuZGlmIC8qIF9fR05VQ0xJS0VfQlVJTFRJTl9WQVJBUkdTICovCisK
KyNlbmRpZiAvKiAhX01BQ0hJTkVfVkFSQVJHU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmRzby5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3Zkc28uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu
ZS92ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zkc28uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRo
ZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0
L2luY2x1ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJCAqLworCisj
aW5jbHVkZSA8eDg2L3Zkc28uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3ZtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm0u
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bS5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS92bS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsNDUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IEh1ZHNvbiBSaXZlciBUcmFkaW5n
IExMQworICogV3JpdHRlbiBieTogSm9obiBILiBCYWxkd2luIDxqaGJARnJlZUJTRC5vcmc+Cisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS92bS5oIDI4MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisK
KyNpZm5kZWYgX01BQ0hJTkVfVk1fSF8KKyNkZWZpbmUJX01BQ0hJTkVfVk1fSF8KKworI2luY2x1
ZGUgPG1hY2hpbmUvc3BlY2lhbHJlZy5oPgorCisvKiBNZW1vcnkgYXR0cmlidXRlcy4gKi8KKyNk
ZWZpbmUJVk1fTUVNQVRUUl9VTkNBQ0hFQUJMRQkJKCh2bV9tZW1hdHRyX3QpUEFUX1VOQ0FDSEVB
QkxFKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX0NPTUJJTklORwkoKHZtX21lbWF0dHJfdClQ
QVRfV1JJVEVfQ09NQklOSU5HKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX1RIUk9VR0gJKCh2
bV9tZW1hdHRyX3QpUEFUX1dSSVRFX1RIUk9VR0gpCisjZGVmaW5lCVZNX01FTUFUVFJfV1JJVEVf
UFJPVEVDVEVECSgodm1fbWVtYXR0cl90KVBBVF9XUklURV9QUk9URUNURUQpCisjZGVmaW5lCVZN
X01FTUFUVFJfV1JJVEVfQkFDSwkJKCh2bV9tZW1hdHRyX3QpUEFUX1dSSVRFX0JBQ0spCisjZGVm
aW5lCVZNX01FTUFUVFJfV0VBS19VTkNBQ0hFQUJMRQkoKHZtX21lbWF0dHJfdClQQVRfVU5DQUNI
RUQpCisKKyNkZWZpbmUJVk1fTUVNQVRUUl9ERUZBVUxUCQlWTV9NRU1BVFRSX1dSSVRFX0JBQ0sK
KworI2VuZGlmIC8qICFfTUFDSElORV9WTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvdm1tLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1t
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oCTIwMTYtMTEtMzAgMTA6NTY6MDUuNzg0OTk5MDAw
ICswMDAwCkBAIC0wLDAgKzEsNjg0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRB
cHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL3ZtbS5oIDI5OTAxMCAyMDE2LTA1LTAzIDIyOjEzOjA0WiBwZmcgJAorICovCisKKyNp
Zm5kZWYgX1ZNTV9IXworI2RlZmluZQlfVk1NX0hfCisKKyNpbmNsdWRlIDx4ODYvc2VnbWVudHMu
aD4KKworZW51bSB2bV9zdXNwZW5kX2hvdyB7CisJVk1fU1VTUEVORF9OT05FLAorCVZNX1NVU1BF
TkRfUkVTRVQsCisJVk1fU1VTUEVORF9QT1dFUk9GRiwKKwlWTV9TVVNQRU5EX0hBTFQsCisJVk1f
U1VTUEVORF9UUklQTEVGQVVMVCwKKwlWTV9TVVNQRU5EX0xBU1QKK307CisKKy8qCisgKiBJZGVu
dGlmaWVycyBmb3IgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgcmVnaXN0ZXJzLgorICovCitlbnVt
IHZtX3JlZ19uYW1lIHsKKwlWTV9SRUdfR1VFU1RfUkFYLAorCVZNX1JFR19HVUVTVF9SQlgsCisJ
Vk1fUkVHX0dVRVNUX1JDWCwKKwlWTV9SRUdfR1VFU1RfUkRYLAorCVZNX1JFR19HVUVTVF9SU0ks
CisJVk1fUkVHX0dVRVNUX1JESSwKKwlWTV9SRUdfR1VFU1RfUkJQLAorCVZNX1JFR19HVUVTVF9S
OCwKKwlWTV9SRUdfR1VFU1RfUjksCisJVk1fUkVHX0dVRVNUX1IxMCwKKwlWTV9SRUdfR1VFU1Rf
UjExLAorCVZNX1JFR19HVUVTVF9SMTIsCisJVk1fUkVHX0dVRVNUX1IxMywKKwlWTV9SRUdfR1VF
U1RfUjE0LAorCVZNX1JFR19HVUVTVF9SMTUsCisJVk1fUkVHX0dVRVNUX0NSMCwKKwlWTV9SRUdf
R1VFU1RfQ1IzLAorCVZNX1JFR19HVUVTVF9DUjQsCisJVk1fUkVHX0dVRVNUX0RSNywKKwlWTV9S
RUdfR1VFU1RfUlNQLAorCVZNX1JFR19HVUVTVF9SSVAsCisJVk1fUkVHX0dVRVNUX1JGTEFHUywK
KwlWTV9SRUdfR1VFU1RfRVMsCisJVk1fUkVHX0dVRVNUX0NTLAorCVZNX1JFR19HVUVTVF9TUywK
KwlWTV9SRUdfR1VFU1RfRFMsCisJVk1fUkVHX0dVRVNUX0ZTLAorCVZNX1JFR19HVUVTVF9HUywK
KwlWTV9SRUdfR1VFU1RfTERUUiwKKwlWTV9SRUdfR1VFU1RfVFIsCisJVk1fUkVHX0dVRVNUX0lE
VFIsCisJVk1fUkVHX0dVRVNUX0dEVFIsCisJVk1fUkVHX0dVRVNUX0VGRVIsCisJVk1fUkVHX0dV
RVNUX0NSMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUwLAorCVZNX1JFR19HVUVTVF9QRFBURTEsCisJ
Vk1fUkVHX0dVRVNUX1BEUFRFMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUzLAorCVZNX1JFR19HVUVT
VF9JTlRSX1NIQURPVywKKwlWTV9SRUdfTEFTVAorfTsKKworZW51bSB4MmFwaWNfc3RhdGUgewor
CVgyQVBJQ19ESVNBQkxFRCwKKwlYMkFQSUNfRU5BQkxFRCwKKwlYMkFQSUNfU1RBVEVfTEFTVAor
fTsKKworI2RlZmluZQlWTV9JTlRJTkZPX1ZFQ1RPUihpbmZvKQkoKGluZm8pICYgMHhmZikKKyNk
ZWZpbmUJVk1fSU5USU5GT19ERUxfRVJSQ09ERQkweDgwMAorI2RlZmluZQlWTV9JTlRJTkZPX1JT
VkQJCTB4N2ZmZmYwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19WQUxJRAkweDgwMDAwMDAwCisjZGVm
aW5lCVZNX0lOVElORk9fVFlQRQkJMHg3MDAKKyNkZWZpbmUJVk1fSU5USU5GT19IV0lOVFIJKDAg
PDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19OTUkJCSgyIDw8IDgpCisjZGVmaW5lCVZNX0lOVElO
Rk9fSFdFWENFUFRJT04JKDMgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19TV0lOVFIJKDQgPDwg
OCkKKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlWTV9NQVhfTkFNRUxFTgkzMgorCitzdHJ1
Y3Qgdm07CitzdHJ1Y3Qgdm1fZXhjZXB0aW9uOworc3RydWN0IHNlZ19kZXNjOworc3RydWN0IHZt
X2V4aXQ7CitzdHJ1Y3Qgdm1fcnVuOworc3RydWN0IHZocGV0Oworc3RydWN0IHZpb2FwaWM7Citz
dHJ1Y3QgdmxhcGljOworc3RydWN0IHZtc3BhY2U7CitzdHJ1Y3Qgdm1fb2JqZWN0Oworc3RydWN0
IHZtX2d1ZXN0X3BhZ2luZzsKK3N0cnVjdCBwbWFwOworCitzdHJ1Y3Qgdm1fZXZlbnRpbmZvIHsK
Kwl2b2lkCSpycHRyOwkJLyogcmVuZGV6dm91cyBjb29raWUgKi8KKwlpbnQJKnNwdHI7CQkvKiBz
dXNwZW5kIGNvb2tpZSAqLworCWludAkqaXB0cjsJCS8qIHJlcWlkbGUgY29va2llICovCit9Owor
Cit0eXBlZGVmIGludAkoKnZtbV9pbml0X2Z1bmNfdCkoaW50IGlwaW51bSk7Cit0eXBlZGVmIGlu
dAkoKnZtbV9jbGVhbnVwX2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQJKCp2bW1fcmVzdW1l
X2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKgkoKnZtaV9pbml0X2Z1bmNfdCkoc3RydWN0
IHZtICp2bSwgc3RydWN0IHBtYXAgKnBtYXApOwordHlwZWRlZiBpbnQJKCp2bWlfcnVuX2Z1bmNf
dCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgcmVnaXN0ZXJfdCByaXAsCisJCSAgICBzdHJ1Y3QgcG1h
cCAqcG1hcCwgc3RydWN0IHZtX2V2ZW50aW5mbyAqaW5mbyk7Cit0eXBlZGVmIHZvaWQJKCp2bWlf
Y2xlYW51cF9mdW5jX3QpKHZvaWQgKnZtaSk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfcmVnaXN0
ZXJfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCAq
cmV0dmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGlu
dCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90IHZhbCk7Cit0eXBlZGVmIGludAko
KnZtaV9nZXRfZGVzY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3Ry
dWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9kZXNjX3QpKHZvaWQg
KnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwor
dHlwZWRlZiBpbnQJKCp2bWlfZ2V0X2NhcF90KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVt
LCBpbnQgKnJldHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfY2FwX3QpKHZvaWQgKnZtaSwg
aW50IHZjcHUsIGludCBudW0sIGludCB2YWwpOwordHlwZWRlZiBzdHJ1Y3Qgdm1zcGFjZSAqICgq
dm1pX3Ztc3BhY2VfYWxsb2MpKHZtX29mZnNldF90IG1pbiwgdm1fb2Zmc2V0X3QgbWF4KTsKK3R5
cGVkZWYgdm9pZAkoKnZtaV92bXNwYWNlX2ZyZWUpKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlKTsK
K3R5cGVkZWYgc3RydWN0IHZsYXBpYyAqICgqdm1pX3ZsYXBpY19pbml0KSh2b2lkICp2bWksIGlu
dCB2Y3B1KTsKK3R5cGVkZWYgdm9pZAkoKnZtaV92bGFwaWNfY2xlYW51cCkodm9pZCAqdm1pLCBz
dHJ1Y3QgdmxhcGljICp2bGFwaWMpOworCitzdHJ1Y3Qgdm1tX29wcyB7CisJdm1tX2luaXRfZnVu
Y190CQlpbml0OwkJLyogbW9kdWxlIHdpZGUgaW5pdGlhbGl6YXRpb24gKi8KKwl2bW1fY2xlYW51
cF9mdW5jX3QJY2xlYW51cDsKKwl2bW1fcmVzdW1lX2Z1bmNfdAlyZXN1bWU7CisKKwl2bWlfaW5p
dF9mdW5jX3QJCXZtaW5pdDsJCS8qIHZtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJdm1p
X3J1bl9mdW5jX3QJCXZtcnVuOworCXZtaV9jbGVhbnVwX2Z1bmNfdAl2bWNsZWFudXA7CisJdm1p
X2dldF9yZWdpc3Rlcl90CXZtZ2V0cmVnOworCXZtaV9zZXRfcmVnaXN0ZXJfdAl2bXNldHJlZzsK
Kwl2bWlfZ2V0X2Rlc2NfdAkJdm1nZXRkZXNjOworCXZtaV9zZXRfZGVzY190CQl2bXNldGRlc2M7
CisJdm1pX2dldF9jYXBfdAkJdm1nZXRjYXA7CisJdm1pX3NldF9jYXBfdAkJdm1zZXRjYXA7CisJ
dm1pX3Ztc3BhY2VfYWxsb2MJdm1zcGFjZV9hbGxvYzsKKwl2bWlfdm1zcGFjZV9mcmVlCXZtc3Bh
Y2VfZnJlZTsKKwl2bWlfdmxhcGljX2luaXQJCXZsYXBpY19pbml0OworCXZtaV92bGFwaWNfY2xl
YW51cAl2bGFwaWNfY2xlYW51cDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3Bz
X2ludGVsOworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfYW1kOworCitpbnQgdm1fY3Jl
YXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCB2bSAqKnJldHZtKTsKK3ZvaWQgdm1fZGVzdHJv
eShzdHJ1Y3Qgdm0gKnZtKTsKK2ludCB2bV9yZWluaXQoc3RydWN0IHZtICp2bSk7Citjb25zdCBj
aGFyICp2bV9uYW1lKHN0cnVjdCB2bSAqdm0pOworCisvKgorICogQVBJcyB0aGF0IG1vZGlmeSB0
aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIGFsbCB2Y3B1cyB0byBiZSBmcm96ZW4uCisgKi8K
K2ludCB2bV9tbWFwX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwgaW50IHNl
Z2lkLCB2bV9vb2Zmc2V0X3Qgb2ZmLAorICAgIHNpemVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxh
Z3MpOworaW50IHZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf
dCBsZW4sIGJvb2wgc3lzbWVtKTsKK3ZvaWQgdm1fZnJlZV9tZW1zZWcoc3RydWN0IHZtICp2bSwg
aW50IGlkZW50KTsKK2ludCB2bV9tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdw
YSwgc2l6ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50IHZtX21hcF91c2VybWVtKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0
aHJlYWQgKnRkKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3Qg
Z3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGlu
dCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVj
dCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CisKKy8qCisgKiBBUElzIHRo
YXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIG9ubHkgYSAqc2luZ2xlKiB2
Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEgcmVhZCBsb2NrIG9uIHRoZSBn
dWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0aW9uIHJlcXVpcmVzICphbGwq
IHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfZ2V0bmV4dChzdHJ1Y3Qgdm0g
KnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdv
ZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3MpOworaW50IHZtX2dldF9tZW1z
ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxlbiwgYm9vbCAqc3lzbWVtLAor
ICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAqdm1fZ3BhX2hvbGQoc3RydWN0
IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLAorICAgIGludCBw
cm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVhc2Uodm9pZCAqY29va2llKTsK
K2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2bV9wYWRk
cl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHUs
IGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFsKTsKK2ludCB2bV9nZXRfc2Vn
X2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2Vn
X2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50
IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOworaW50IHZtX3J1
bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7CitpbnQgdm1fc3VzcGVuZChz
dHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7CitpbnQgdm1faW5qZWN0X25t
aShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1pX3BlbmRpbmcoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQg
dmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsK
K2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQg
dm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOworc3RydWN0IHZsYXBp
YyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7CitzdHJ1Y3QgdmlvYXBpYyAqdm1f
aW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2bV9ocGV0KHN0cnVjdCB2bSAq
dm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg
dHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0X3gyYXBpY19zdGF0ZShzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgKnN0YXRlKTsKK2ludCB2bV9z
ZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0
ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgYXBpY2lk
KTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpOworc3RydWN0
IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOwordm9pZCB2
bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXAp
Owordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWlu
dDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2
Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZt
LCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYgX1NZU19fQ1BVU0VUX0hfCisv
KgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGluICdkZXN0JyBhbmQgZXhlY3V0
ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5jKGFyZyknIGlzIG5vdCBhbGxv
d2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2UgdGhlIHRocmVhZCB0byBiZSBw
dXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMgaXMgYmVpbmcgaW5pdGlhdGVk
IGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1aWQnIG11c3QgcmVmZXIgdG8g
dGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byAtMS4KKyAqCisgKiBUaGUg
Y2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRpYXRpbmcgdGhlIHJlbmRlenZv
dXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIG1heSBjYXVzZSB2Y3B1
cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rlc3QnIHRvIGJlIHN0YWxsZWQu
IFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1cyBtYWtpbmcKKyAqIGZvcndh
cmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBwcm9ncmVzcy4KKyAqLwordHlw
ZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6dm91c19mdW5jX3QgZnVuYywg
dm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0cnVjdCB2bSAqdm0pOworY3B1
c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7CisjZW5kaWYJLyogX1NZU19f
Q1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVuZGV6dm91c19wZW5k
aW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCooKHVpbnRwdHJf
dCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVf
c3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv
LT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNwdV9yZXFpZGxlKHN0cnVjdCB2
bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZvLT5pcHRyKTsKK30KKworLyoK
KyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVzL3Nsb3QvZnVuYyBpcyBzdXBw
b3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNlLgorICoKKyAqIFJldHVybiAw
IG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50IGJ1cywgaW50IHNsb3QsIGlu
dCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVjdCB2bSAqdm0pOworCitlbnVt
IHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pFTiwKKwlWQ1BVX1JVTk5JTkcs
CisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZt
LCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKTsK
K2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwg
aW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQordmNwdV9pc19ydW5uaW5nKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7CisJcmV0dXJuICh2Y3B1X2dl
dF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5OSU5HKTsKK30KKworI2lmZGVm
IF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNwdV9zaG91bGRfeWllbGQoc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhyZWFkLT50ZF9mbGFncyAmIChU
REZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJldHVybiAoMSk7CisJZWxzZSBp
ZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0
dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2bV9nZXRfdm1zcGFjZShzdHJ1
Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0cnVjdCB2bSAqdm0pOworc3Ry
dWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnBtdG1yICp2bV9w
bXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7
CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2goc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmpl
Y3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyAwIG9uCisgKiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAq
IFdyYXBwZXIgZnVuY3Rpb25zIGxpa2UgJ3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVy
cmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVu
Zm9yY2UgdGhlIHRyYXAtbGlrZSBvciBmYXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNl
cHRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhl
IGNvbnRleHQgb2YgdGhlIHRocmVhZCB0aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1Lgor
ICovCitpbnQgdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBp
bnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlkLAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0
YXJ0X2luc3RydWN0aW9uKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVy
IGEgVk0tZXhpdCB0aGF0IG9jY3VycmVkIGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVw
dCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJRFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRl
c2NyaWJlZAorICogaW4gRmlndXJlIDE1LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2Vw
dHMiLCBBUE0sIFZvbCAyLgorICoKKyAqIElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0
aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vzc2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZt
X2V4aXRfaW50aW5mbygpIHRvIGV4dGluZ3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcu
LAorICogaWYgdGhlIHRhc2sgc3dpdGNoIGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFz
ayBnYXRlIHRoZW4gaXQgc2hvdWxkCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5m
bz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRp
bmcgYW55bW9yZS4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24t
emVybyBvbiBmYWlsdXJlLgorICovCitpbnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIHVpbnQ2NF90IGludGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZNLWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICog
ZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5qZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rp
b24gY29tYmluZXMKKyAqIG5lc3RlZCBldmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1
bHQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRv
IGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgor
ICovCitpbnQgdm1fZW50cnlfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50
NjRfdCAqaW5mbyk7CisKK2ludCB2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25h
bWUgdm1fc2VnbWVudF9uYW1lKGludCBzZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWlu
Zm8geworCXVpbnQ2NF90CWdwYTsKKwlzaXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJ
CSpjb29raWU7Cit9OworCisvKgorICogU2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zy
b20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAn
bGVuJyBieXRlcyBsb25nLiBUaGUgJ3Byb3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZv
cgorICogYSBjb3B5aW4gb3IgUFJPVF9XUklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2
YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAw
CQkgICAxCQlBbiBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFV
TFQJICBOL0EJCVVucmVjb3ZlcmFibGUgZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNh
biBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlpbigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisg
KiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuIFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3Vs
ZCBiZSBmcmVlZCBieSBjYWxsaW5nCisgKiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUg
Y29weSBpcyBkb25lLgorICovCitpbnQgdm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQg
dmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xh
LCBzaXplX3QgbGVuLCBpbnQgcHJvdCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAg
ICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQgKmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93
bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZv
LAorICAgIGludCBudW1fY29weWluZm8pOwordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRk
ciwgc2l6ZV90IGxlbik7Cit2b2lkIHZtX2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisgICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywg
c2l6ZV90IGxlbik7CisKK2ludCB2Y3B1X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCk7CisjZW5kaWYJLyogS0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2
CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNwdXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBv
cHRpb25hbCB2bW0gY2FwYWJpbGl0aWVzCisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NB
UF9IQUxUX0VYSVQsCisJVk1fQ0FQX01UUkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJ
Vk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVTVCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1f
Q0FQX01BWAorfTsKKworZW51bSB2bV9pbnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlM
RVZFTF9UUklHR0VSCit9OworCisvKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBvbiBWTV9JT19SRUdf
SEFORExFUiBpb2N0bC4gKi8KK2VudW0gdm1faW9fcmVnaF90eXBlIHsKKwlWTV9JT19SRUdIX0RF
TEVURSwKKwlWTV9JT19SRUdIX0tXRVZFTlRTLAkvKiBrZXJuZWwgd2FpdCBldmVudHMgKi8KKwlW
TV9JT19SRUdIX01BWAorfTsKKworLyoKKyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZv
cm1hdCBzcGVjaWZpZWQgaW4gVGFibGUgMjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVy
ZSBNYW51YWwgdm9sIDNiLgorICoKKyAqIFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3Mn
IGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNl
Z21lbnQgVW51c2FibGUuCisgKi8KK3N0cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsK
Kwl1aW50MzJfdAlsaW1pdDsKKwl1aW50MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVT
Q19UWVBFKGFjY2VzcykJCSgoYWNjZXNzKSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBM
KGFjY2VzcykJCSgoKGFjY2VzcykgPj4gNSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNF
TlQoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVT
Q19ERUYzMihhY2Nlc3MpCQkoKChhY2Nlc3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlT
RUdfREVTQ19HUkFOVUxBUklUWShhY2Nlc3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDAp
CisjZGVmaW5lCVNFR19ERVNDX1VOVVNBQkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDAp
ID8gMSA6IDApCisKK2VudW0gdm1fY3B1X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01P
REVfUFJPVEVDVEVELAorCUNQVV9NT0RFX0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAo
Q1MuTCA9IDApICovCisJQ1BVX01PREVfNjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAx
KSAqLworfTsKKworZW51bSB2bV9wYWdpbmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQ
QUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdfTU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9Owor
CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJ
ZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19t
b2RlOworfTsKKworLyoKKyAqIFRoZSBkYXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3An
IGFyZSBtZWFudCB0byBiZSBvcGFxdWUgdG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rp
b24gZGVjb2RpbmcuIFRoZSBvbmx5IHJlYXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQg
dG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNlIHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBz
dHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFj
dHVhbCBvcGNvZGUgYnl0ZSAqLworCXVpbnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0
aW9uIChlLmcuIE1PVikgKi8KKwl1aW50MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklF
X0lOU1RfU0laRQkxNQorc3RydWN0IHZpZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpF
XTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMgKi8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXpl
IG9mIHRoZSBpbnN0cnVjdGlvbiAqLworCXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50
OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAq
LworCXVpbnQ4X3QJCXJleF93OjEsCQkvKiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJ
cmV4X3g6MSwKKwkJCXJleF9iOjEsCisJCQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50
OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHByZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBS
RVBORS9SRVBOWiBwcmVmaXggKi8KKwkJCW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNp
emUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJzaXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBv
dmVycmlkZSAqLworCQkJc2VnbWVudF9vdmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICov
CisKKwl1aW50OF90CQltb2Q6MiwJCQkvKiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJt
OjQ7CisKKwl1aW50OF90CQlzczoyLAkJCS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJ
YmFzZTo0OworCisJdWludDhfdAkJZGlzcF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisK
Kwl1aW50OF90CQlzY2FsZTsKKwlpbnQJCWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf
eHl6ICovCisJaW50CQlpbmRleF9yZWdpc3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlp
bnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8qIFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJ
CWRpc3BsYWNlbWVudDsJCS8qIG9wdGlvbmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRf
dAkJaW1tZWRpYXRlOwkJLyogb3B0aW9uYWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4
X3QJCWRlY29kZWQ7CS8qIHNldCB0byAxIGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlz
dHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9wY29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2
bV9leGl0Y29kZSB7CisJVk1fRVhJVENPREVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZN
X0VYSVRDT0RFX0JPR1VTLAorCVZNX0VYSVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNS
LAorCVZNX0VYSVRDT0RFX0hMVCwKKwlWTV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9Q
QVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJTkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZN
X0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlWTV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0
byBiZSBTUElORE9XTl9DUFUgKi8KKwlWTV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRD
T0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJVENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lO
T1VUX1NUUiwKKwlWTV9FWElUQ09ERV9UQVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9S
LAorCVZNX0VYSVRDT0RFX01XQUlULAorCVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9S
RVFJRExFLAorCVZNX0VYSVRDT0RFX01BWAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50
MTZfdAlieXRlczozOwkvKiAxIG9yIDIgb3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2
X3QJc3RyaW5nOjE7CisJdWludDE2X3QJcmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJf
dAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsK
KwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICov
CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVp
bnQ2NF90CWNyMDsKKwl1aW50NjRfdAlpbmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0x
ICglcmN4KSwgcmVwPTAgKDEpICovCisJaW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1l
IHNlZ19uYW1lOworCXN0cnVjdCBzZWdfZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19z
d2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FMTCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9J
RFRfR0FURSwJLyogdGFzayBnYXRlIGluIElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dp
dGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQll
eHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUgdG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAll
cnJjb2RlOworCWludAkJZXJyY29kZV92YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5l
dyBzdGFjayAqLworCWVudW0gdGFza19zd2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1f
Z3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4
aXRjb2RlCWV4aXRjb2RlOworCWludAkJCWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24g
Ki8KKwl1aW50NjRfdAkJcmlwOworCXVuaW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0Owor
CQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlub3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90
CWdwYTsKKwkJCWludAkJZmF1bHRfdHlwZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1
aW50NjRfdAlncGE7CisJCQl1aW50NjRfdAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJ
aW50CQljc19kOwkJLyogQ1MuRCAqLworCQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7
CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJfSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVj
aWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4gdGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNv
ZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1leGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJ
c3RhdHVzOwkJLyogdm14IGluc3Qgc3RhdHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29u
JyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlvbicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0
dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJCXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0
X3QJZXhpdF9xdWFsaWZpY2F0aW9uOworCQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2lu
c3RfdHlwZScgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgor
CQkJICovCisJCQlpbnQJCWluc3RfdHlwZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7
CisJCS8qCisJCSAqIFNWTSBzcGVjaWZpYyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJ
CXVpbnQ2NF90CWV4aXRjb2RlOworCQkJdWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJ
ZXhpdGluZm8yOworCQl9IHN2bTsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBl
Y3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJ
aW50CQl2Y3B1OworCQkJdWludDY0X3QJcmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsK
KwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJfSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3Rv
cjsKKwkJfSBpb2FwaWNfZW9pOworCQlzdHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBo
b3c7CisJCX0gc3VzcGVuZGVkOworCQlzdHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7
CisJfSB1OworfTsKKworLyogQVBJcyB0byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICov
Cit2b2lkIHZtX2luamVjdF9mYXVsdCh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3Rvciwg
aW50IGVycmNvZGVfdmFsaWQsCisgICAgaW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUg
dm9pZAordm1faW5qZWN0X3VkKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9m
YXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAordm1faW5qZWN0X2dwKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVs
dCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
dm1faW5qZWN0X2FjKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9p
bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVy
cmNvZGUpCit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29k
ZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJy
b3JfY29kZSwgdWludDY0X3QgY3IyKTsKKworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9p
ZCAqdm0sIGludCB2Y3B1aWQpOworCisjZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmgub3JpZyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW0uaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9y
aWcJMjAxNi0xMS0zMCAxMDo1Mjo1My44MjI5NTkwMDAgKzAwMDAKQEAgLTAsMCArMSw2NzUgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5F
VEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk
RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmggMjk5MDEwIDIwMTYt
MDUtMDMgMjI6MTM6MDRaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NX0hfCisjZGVmaW5lCV9W
TU1fSF8KKworI2luY2x1ZGUgPHg4Ni9zZWdtZW50cy5oPgorCitlbnVtIHZtX3N1c3BlbmRfaG93
IHsKKwlWTV9TVVNQRU5EX05PTkUsCisJVk1fU1VTUEVORF9SRVNFVCwKKwlWTV9TVVNQRU5EX1BP
V0VST0ZGLAorCVZNX1NVU1BFTkRfSEFMVCwKKwlWTV9TVVNQRU5EX1RSSVBMRUZBVUxULAorCVZN
X1NVU1BFTkRfTEFTVAorfTsKKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBhcmNoaXRlY3R1cmFs
bHkgZGVmaW5lZCByZWdpc3RlcnMuCisgKi8KK2VudW0gdm1fcmVnX25hbWUgeworCVZNX1JFR19H
VUVTVF9SQVgsCisJVk1fUkVHX0dVRVNUX1JCWCwKKwlWTV9SRUdfR1VFU1RfUkNYLAorCVZNX1JF
R19HVUVTVF9SRFgsCisJVk1fUkVHX0dVRVNUX1JTSSwKKwlWTV9SRUdfR1VFU1RfUkRJLAorCVZN
X1JFR19HVUVTVF9SQlAsCisJVk1fUkVHX0dVRVNUX1I4LAorCVZNX1JFR19HVUVTVF9SOSwKKwlW
TV9SRUdfR1VFU1RfUjEwLAorCVZNX1JFR19HVUVTVF9SMTEsCisJVk1fUkVHX0dVRVNUX1IxMiwK
KwlWTV9SRUdfR1VFU1RfUjEzLAorCVZNX1JFR19HVUVTVF9SMTQsCisJVk1fUkVHX0dVRVNUX1Ix
NSwKKwlWTV9SRUdfR1VFU1RfQ1IwLAorCVZNX1JFR19HVUVTVF9DUjMsCisJVk1fUkVHX0dVRVNU
X0NSNCwKKwlWTV9SRUdfR1VFU1RfRFI3LAorCVZNX1JFR19HVUVTVF9SU1AsCisJVk1fUkVHX0dV
RVNUX1JJUCwKKwlWTV9SRUdfR1VFU1RfUkZMQUdTLAorCVZNX1JFR19HVUVTVF9FUywKKwlWTV9S
RUdfR1VFU1RfQ1MsCisJVk1fUkVHX0dVRVNUX1NTLAorCVZNX1JFR19HVUVTVF9EUywKKwlWTV9S
RUdfR1VFU1RfRlMsCisJVk1fUkVHX0dVRVNUX0dTLAorCVZNX1JFR19HVUVTVF9MRFRSLAorCVZN
X1JFR19HVUVTVF9UUiwKKwlWTV9SRUdfR1VFU1RfSURUUiwKKwlWTV9SRUdfR1VFU1RfR0RUUiwK
KwlWTV9SRUdfR1VFU1RfRUZFUiwKKwlWTV9SRUdfR1VFU1RfQ1IyLAorCVZNX1JFR19HVUVTVF9Q
RFBURTAsCisJVk1fUkVHX0dVRVNUX1BEUFRFMSwKKwlWTV9SRUdfR1VFU1RfUERQVEUyLAorCVZN
X1JFR19HVUVTVF9QRFBURTMsCisJVk1fUkVHX0dVRVNUX0lOVFJfU0hBRE9XLAorCVZNX1JFR19M
QVNUCit9OworCitlbnVtIHgyYXBpY19zdGF0ZSB7CisJWDJBUElDX0RJU0FCTEVELAorCVgyQVBJ
Q19FTkFCTEVELAorCVgyQVBJQ19TVEFURV9MQVNUCit9OworCisjZGVmaW5lCVZNX0lOVElORk9f
VkVDVE9SKGluZm8pCSgoaW5mbykgJiAweGZmKQorI2RlZmluZQlWTV9JTlRJTkZPX0RFTF9FUlJD
T0RFCTB4ODAwCisjZGVmaW5lCVZNX0lOVElORk9fUlNWRAkJMHg3ZmZmZjAwMAorI2RlZmluZQlW
TV9JTlRJTkZPX1ZBTElECTB4ODAwMDAwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19UWVBFCQkweDcw
MAorI2RlZmluZQlWTV9JTlRJTkZPX0hXSU5UUgkoMCA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP
X05NSQkJKDIgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19IV0VYQ0VQVElPTgkoMyA8PCA4KQor
I2RlZmluZQlWTV9JTlRJTkZPX1NXSU5UUgkoNCA8PCA4KQorCisjaWZkZWYgX0tFUk5FTAorCisj
ZGVmaW5lCVZNX01BWF9OQU1FTEVOCTMyCisKK3N0cnVjdCB2bTsKK3N0cnVjdCB2bV9leGNlcHRp
b247CitzdHJ1Y3Qgc2VnX2Rlc2M7CitzdHJ1Y3Qgdm1fZXhpdDsKK3N0cnVjdCB2bV9ydW47Citz
dHJ1Y3QgdmhwZXQ7CitzdHJ1Y3QgdmlvYXBpYzsKK3N0cnVjdCB2bGFwaWM7CitzdHJ1Y3Qgdm1z
cGFjZTsKK3N0cnVjdCB2bV9vYmplY3Q7CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nOworc3RydWN0
IHBtYXA7CisKK3N0cnVjdCB2bV9ldmVudGluZm8geworCXZvaWQJKnJwdHI7CQkvKiByZW5kZXp2
b3VzIGNvb2tpZSAqLworCWludAkqc3B0cjsJCS8qIHN1c3BlbmQgY29va2llICovCisJaW50CSpp
cHRyOwkJLyogcmVxaWRsZSBjb29raWUgKi8KK307CisKK3R5cGVkZWYgaW50CSgqdm1tX2luaXRf
ZnVuY190KShpbnQgaXBpbnVtKTsKK3R5cGVkZWYgaW50CSgqdm1tX2NsZWFudXBfZnVuY190KSh2
b2lkKTsKK3R5cGVkZWYgdm9pZAkoKnZtbV9yZXN1bWVfZnVuY190KSh2b2lkKTsKK3R5cGVkZWYg
dm9pZCAqCSgqdm1pX2luaXRfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3QgcG1hcCAqcG1h
cCk7Cit0eXBlZGVmIGludAkoKnZtaV9ydW5fZnVuY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBy
ZWdpc3Rlcl90IHJpcCwKKwkJICAgIHN0cnVjdCBwbWFwICpwbWFwLCBzdHJ1Y3Qgdm1fZXZlbnRp
bmZvICppbmZvKTsKK3R5cGVkZWYgdm9pZAkoKnZtaV9jbGVhbnVwX2Z1bmNfdCkodm9pZCAqdm1p
KTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGludCB2Y3B1
LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2
bWlfc2V0X3JlZ2lzdGVyX3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAg
ICAgdWludDY0X3QgdmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9kZXNjX3QpKHZvaWQgKnZt
aSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwordHlw
ZWRlZiBpbnQJKCp2bWlfc2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwK
KwkJCQkgIHN0cnVjdCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfY2Fw
X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sIGludCAqcmV0dmFsKTsKK3R5cGVkZWYg
aW50CSgqdm1pX3NldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwgaW50IHZh
bCk7Cit0eXBlZGVmIHN0cnVjdCB2bXNwYWNlICogKCp2bWlfdm1zcGFjZV9hbGxvYykodm1fb2Zm
c2V0X3QgbWluLCB2bV9vZmZzZXRfdCBtYXgpOwordHlwZWRlZiB2b2lkCSgqdm1pX3Ztc3BhY2Vf
ZnJlZSkoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UpOwordHlwZWRlZiBzdHJ1Y3QgdmxhcGljICog
KCp2bWlfdmxhcGljX2luaXQpKHZvaWQgKnZtaSwgaW50IHZjcHUpOwordHlwZWRlZiB2b2lkCSgq
dm1pX3ZsYXBpY19jbGVhbnVwKSh2b2lkICp2bWksIHN0cnVjdCB2bGFwaWMgKnZsYXBpYyk7CisK
K3N0cnVjdCB2bW1fb3BzIHsKKwl2bW1faW5pdF9mdW5jX3QJCWluaXQ7CQkvKiBtb2R1bGUgd2lk
ZSBpbml0aWFsaXphdGlvbiAqLworCXZtbV9jbGVhbnVwX2Z1bmNfdAljbGVhbnVwOworCXZtbV9y
ZXN1bWVfZnVuY190CXJlc3VtZTsKKworCXZtaV9pbml0X2Z1bmNfdAkJdm1pbml0OwkJLyogdm0t
c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKwl2bWlfcnVuX2Z1bmNfdAkJdm1ydW47CisJdm1p
X2NsZWFudXBfZnVuY190CXZtY2xlYW51cDsKKwl2bWlfZ2V0X3JlZ2lzdGVyX3QJdm1nZXRyZWc7
CisJdm1pX3NldF9yZWdpc3Rlcl90CXZtc2V0cmVnOworCXZtaV9nZXRfZGVzY190CQl2bWdldGRl
c2M7CisJdm1pX3NldF9kZXNjX3QJCXZtc2V0ZGVzYzsKKwl2bWlfZ2V0X2NhcF90CQl2bWdldGNh
cDsKKwl2bWlfc2V0X2NhcF90CQl2bXNldGNhcDsKKwl2bWlfdm1zcGFjZV9hbGxvYwl2bXNwYWNl
X2FsbG9jOworCXZtaV92bXNwYWNlX2ZyZWUJdm1zcGFjZV9mcmVlOworCXZtaV92bGFwaWNfaW5p
dAkJdmxhcGljX2luaXQ7CisJdm1pX3ZsYXBpY19jbGVhbnVwCXZsYXBpY19jbGVhbnVwOworfTsK
KworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfaW50ZWw7CitleHRlcm4gc3RydWN0IHZt
bV9vcHMgdm1tX29wc19hbWQ7CisKK2ludCB2bV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3Ry
dWN0IHZtICoqcmV0dm0pOwordm9pZCB2bV9kZXN0cm95KHN0cnVjdCB2bSAqdm0pOworaW50IHZt
X3JlaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK2NvbnN0IGNoYXIgKnZtX25hbWUoc3RydWN0IHZtICp2
bSk7CisKKy8qCisgKiBBUElzIHRoYXQgbW9kaWZ5IHRoZSBndWVzdCBtZW1vcnkgbWFwIHJlcXVp
cmUgYWxsIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfbWVtc2VnKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisg
ICAgc2l6ZV90IGxlbiwgaW50IHByb3QsIGludCBmbGFncyk7CitpbnQgdm1fYWxsb2NfbWVtc2Vn
KHN0cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwordm9p
ZCB2bV9mcmVlX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOworaW50IHZtX21hcF9t
bWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90
IGhwYSk7CitpbnQgdm1fdW5tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwg
c2l6ZV90IGxlbik7CitpbnQgdm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0gKnZtLCBpbnQgYnVz
LCBpbnQgc2xvdCwgaW50IGZ1bmMpOworaW50IHZtX3VuYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0g
KnZtLCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpOworCisvKgorICogQVBJcyB0aGF0IGlu
c3BlY3QgdGhlIGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBvbmx5IGEgKnNpbmdsZSogdmNwdSB0
bworICogYmUgZnJvemVuLiBUaGlzIGFjdHMgbGlrZSBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3Qg
bWVtb3J5IG1hcCBzaW5jZSBhbnkKKyAqIG1vZGlmaWNhdGlvbiByZXF1aXJlcyAqYWxsKiB2Y3B1
cyB0byBiZSBmcm96ZW4uCisgKi8KK2ludCB2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtICp2bSwg
dm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRfdCAqc2Vnb2ZmLCBz
aXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKTsKK2ludCB2bV9nZXRfbWVtc2VnKHN0
cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90ICpsZW4sIGJvb2wgKnN5c21lbSwKKyAgICBz
dHJ1Y3Qgdm1fb2JqZWN0ICoqb2JqcHRyKTsKK3ZvaWQgKnZtX2dwYV9ob2xkKHN0cnVjdCB2bSAq
LCBpbnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwKKyAgICBpbnQgcHJvdCwg
dm9pZCAqKmNvb2tpZSk7Cit2b2lkIHZtX2dwYV9yZWxlYXNlKHZvaWQgKmNvb2tpZSk7Citib29s
IHZtX21lbV9hbGxvY2F0ZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJfdCBn
cGEpOworCitpbnQgdm1fZ2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg
cmVnLCB1aW50NjRfdCAqcmV0dmFsKTsKK2ludCB2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2
bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90IHZhbCk7CitpbnQgdm1fZ2V0X3NlZ19kZXNj
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNj
ICpyZXRfZGVzYyk7CitpbnQgdm1fc2V0X3NlZ19kZXNjKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK2ludCB2bV9ydW4oc3Ry
dWN0IHZtICp2bSwgc3RydWN0IHZtX3J1biAqdm1ydW4pOworaW50IHZtX3N1c3BlbmQoc3RydWN0
IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpOworaW50IHZtX2luamVjdF9ubWkoc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUpOworaW50IHZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQpOwordm9pZCB2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCk7CitpbnQgdm1faW5qZWN0X2V4dGludChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQg
dm1fZXh0aW50X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX2V4
dGludF9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3N0cnVjdCB2bGFwaWMgKnZt
X2xhcGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpOworc3RydWN0IHZpb2FwaWMgKnZtX2lvYXBp
YyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2aHBldCAqdm1faHBldChzdHJ1Y3Qgdm0gKnZtKTsK
K2ludCB2bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUs
IGludCAqdmFsKTsKK2ludCB2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dSwgaW50IHR5cGUsIGludCB2YWwpOworaW50IHZtX2dldF94MmFwaWNfc3RhdGUoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHUsIGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSk7CitpbnQgdm1fc2V0X3gy
YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgc3Rh
dGUpOworaW50IHZtX2FwaWNpZDJ2Y3B1aWQoc3RydWN0IHZtICp2bSwgaW50IGFwaWNpZCk7Citp
bnQgdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3N0cnVjdCB2bV9l
eGl0ICp2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXhp
dF9zdXNwZW5kZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3Zv
aWQgdm1fZXhpdF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90
IHJpcCk7Cit2b2lkIHZtX2V4aXRfYXN0cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk
LCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlcWlkbGUoc3RydWN0IHZtICp2bSwgaW50
IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKKworI2lmZGVmIF9TWVNfX0NQVVNFVF9IXworLyoKKyAq
IFJlbmRlenZvdXMgYWxsIHZjcHVzIHNwZWNpZmllZCBpbiAnZGVzdCcgYW5kIGV4ZWN1dGUgJ2Z1
bmMoYXJnKScuCisgKiBUaGUgcmVuZGV6dm91cyAnZnVuYyhhcmcpJyBpcyBub3QgYWxsb3dlZCB0
byBkbyBhbnl0aGluZyB0aGF0IHdpbGwKKyAqIGNhdXNlIHRoZSB0aHJlYWQgdG8gYmUgcHV0IHRv
IHNsZWVwLgorICoKKyAqIElmIHRoZSByZW5kZXp2b3VzIGlzIGJlaW5nIGluaXRpYXRlZCBmcm9t
IGEgdmNwdSBjb250ZXh0IHRoZW4gdGhlCisgKiAndmNwdWlkJyBtdXN0IHJlZmVyIHRvIHRoYXQg
dmNwdSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gLTEuCisgKgorICogVGhlIGNhbGxl
ciBjYW5ub3QgaG9sZCBhbnkgbG9ja3Mgd2hlbiBpbml0aWF0aW5nIHRoZSByZW5kZXp2b3VzLgor
ICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIEFQSSBtYXkgY2F1c2UgdmNwdXMgb3Ro
ZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQKKyAqIGJ5ICdkZXN0JyB0byBiZSBzdGFsbGVkLiBUaGUg
Y2FsbGVyIHNob3VsZCBub3QgcmVseSBvbiBhbnkgdmNwdXMgbWFraW5nCisgKiBmb3J3YXJkIHBy
b2dyZXNzIHdoZW4gdGhlIHJlbmRlenZvdXMgaXMgaW4gcHJvZ3Jlc3MuCisgKi8KK3R5cGVkZWYg
dm9pZCAoKnZtX3JlbmRlenZvdXNfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2
b2lkICphcmcpOwordm9pZCB2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg
KmFyZyk7CitjcHVzZXRfdCB2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm0gKnZtKTsKK2NwdXNldF90
IHZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pOworI2VuZGlmCS8qIF9TWVNfX0NQVVNF
VF9IXyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3JlbmRlenZvdXNfcGVuZGluZyhz
dHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqKCh1aW50cHRyX3QgKiko
aW5mby0+cnB0cikpICE9IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3N1c3Bl
bmRlZChzdHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+c3B0
cik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVxaWRsZShzdHJ1Y3Qgdm1fZXZl
bnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+aXB0cik7Cit9CisKKy8qCisgKiBS
ZXR1cm4gMSBpZiBkZXZpY2UgaW5kaWNhdGVkIGJ5IGJ1cy9zbG90L2Z1bmMgaXMgc3VwcG9zZWQg
dG8gYmUgYQorICogcGNpIHBhc3N0aHJvdWdoIGRldmljZS4KKyAqCisgKiBSZXR1cm4gMCBvdGhl
cndpc2UuCisgKi8KK2ludCB2bW1faXNfcHB0ZGV2KGludCBidXMsIGludCBzbG90LCBpbnQgZnVu
Yyk7CisKK3ZvaWQgKnZtX2lvbW11X2RvbWFpbihzdHJ1Y3Qgdm0gKnZtKTsKKworZW51bSB2Y3B1
X3N0YXRlIHsKKwlWQ1BVX0lETEUsCisJVkNQVV9GUk9aRU4sCisJVkNQVV9SVU5OSU5HLAorCVZD
UFVfU0xFRVBJTkcsCit9OworCitpbnQgdmNwdV9zZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50
IHZjcHUsIGVudW0gdmNwdV9zdGF0ZSBzdGF0ZSwKKyAgICBib29sIGZyb21faWRsZSk7CitlbnVt
IHZjcHVfc3RhdGUgdmNwdV9nZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCAq
aG9zdGNwdSk7CisKK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfaXNfcnVubmluZyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KQoreworCXJldHVybiAodmNwdV9nZXRfc3Rh
dGUodm0sIHZjcHUsIGhvc3RjcHUpID09IFZDUFVfUlVOTklORyk7Cit9CisKKyNpZmRlZiBfU1lT
X1BST0NfSF8KK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfc2hvdWxkX3lpZWxkKHN0cnVjdCB2
bSAqdm0sIGludCB2Y3B1KQoreworCisJaWYgKGN1cnRocmVhZC0+dGRfZmxhZ3MgJiAoVERGX0FT
VFBFTkRJTkcgfCBUREZfTkVFRFJFU0NIRUQpKQorCQlyZXR1cm4gKDEpOworCWVsc2UgaWYgKGN1
cnRocmVhZC0+dGRfb3dlcHJlZW1wdCkKKwkJcmV0dXJuICgxKTsKKwllbHNlCisJCXJldHVybiAo
MCk7Cit9CisjZW5kaWYKKwordm9pZCAqdmNwdV9zdGF0cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dSk7Cit2b2lkIHZjcHVfbm90aWZ5X2V2ZW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGJv
b2wgbGFwaWNfaW50cik7CitzdHJ1Y3Qgdm1zcGFjZSAqdm1fZ2V0X3Ztc3BhY2Uoc3RydWN0IHZt
ICp2bSk7CitzdHJ1Y3QgdmF0cGljICp2bV9hdHBpYyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2
YXRwaXQgKnZtX2F0cGl0KHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZwbXRtciAqdm1fcG10bXIo
c3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnJ0YyAqdm1fcnRjKHN0cnVjdCB2bSAqdm0pOworCisv
KgorICogSW5qZWN0IGV4Y2VwdGlvbiAndmVjdG9yJyBpbnRvIHRoZSBndWVzdCB2Y3B1LiBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgMCBvbgorICogc3VjY2VzcyBhbmQgbm9uLXplcm8gb24gZmFpbHVy
ZS4KKyAqCisgKiBXcmFwcGVyIGZ1bmN0aW9ucyBsaWtlICd2bV9pbmplY3RfZ3AoKScgc2hvdWxk
IGJlIHByZWZlcnJlZCB0byBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGJlY2F1
c2UgdGhleSBlbmZvcmNlIHRoZSB0cmFwLWxpa2Ugb3IgZmF1bHQtbGlrZQorICogYmVoYXZpb3Ig
b2YgYW4gZXhjZXB0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0aHJlYWQgdGhhdCBpcworICogZXhlY3V0aW5nIHRo
aXMgdmNwdS4KKyAqLworaW50IHZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtICp2bSwgaW50
IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycl92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2Rl
LCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBhZnRlciBhIFZNLWV4aXQgdGhhdCBvY2N1cnJlZCBkdXJpbmcgZXhjZXB0aW9uIG9yCisg
KiBpbnRlcnJ1cHQgZGVsaXZlcnkgdGhyb3VnaCB0aGUgSURULiBUaGUgZm9ybWF0IG9mICdpbnRp
bmZvJyBpcyBkZXNjcmliZWQKKyAqIGluIEZpZ3VyZSAxNS0xLCAiRVhJVElOVElORk8gZm9yIEFs
bCBJbnRlcmNlcHRzIiwgQVBNLCBWb2wgMi4KKyAqCisgKiBJZiBhIFZNLWV4aXQgaGFuZGxlciBj
b21wbGV0ZXMgdGhlIGV2ZW50IGRlbGl2ZXJ5IHN1Y2Nlc3NmdWxseSB0aGVuIGl0CisgKiBzaG91
bGQgY2FsbCB2bV9leGl0X2ludGluZm8oKSB0byBleHRpbmd1aXNoIHRoZSBwZW5kaW5nIGV2ZW50
LiBGb3IgZS5nLiwKKyAqIGlmIHRoZSB0YXNrIHN3aXRjaCBlbXVsYXRpb24gaXMgdHJpZ2dlcmVk
IHZpYSBhIHRhc2sgZ2F0ZSB0aGVuIGl0IHNob3VsZAorICogY2FsbCB0aGlzIGZ1bmN0aW9uIHdp
dGggJ2ludGluZm89MCcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXh0ZXJuYWwgZXZlbnQKKyAqIGlz
IG5vdCBwZW5kaW5nIGFueW1vcmUuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIDAgb24gc3VjY2Vz
cyBhbmQgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IHZtX2V4aXRfaW50aW5mbyhzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbnRpbmZvKTsKKworLyoKKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBldmVyeSBWTS1lbnRyeSB0byByZXRyaWV2ZSBhIHBl
bmRpbmcKKyAqIGV2ZW50IHRoYXQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0LiBU
aGlzIGZ1bmN0aW9uIGNvbWJpbmVzCisgKiBuZXN0ZWQgZXZlbnRzIGludG8gYSBkb3VibGUgb3Ig
dHJpcGxlIGZhdWx0LgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIHRo
YXQgbmVlZCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBndWVzdAorICogYW5kIG5vbi16ZXJvIG90
aGVyd2lzZS4KKyAqLworaW50IHZtX2VudHJ5X2ludGluZm8oc3RydWN0IHZtICp2bSwgaW50IHZj
cHVpZCwgdWludDY0X3QgKmluZm8pOworCitpbnQgdm1fZ2V0X2ludGluZm8oc3RydWN0IHZtICp2
bSwgaW50IHZjcHVpZCwgdWludDY0X3QgKmluZm8xLCB1aW50NjRfdCAqaW5mbzIpOworCitlbnVt
IHZtX3JlZ19uYW1lIHZtX3NlZ21lbnRfbmFtZShpbnQgc2VnX2VuY29kaW5nKTsKKworc3RydWN0
IHZtX2NvcHlpbmZvIHsKKwl1aW50NjRfdAlncGE7CisJc2l6ZV90CQlsZW47CisJdm9pZAkJKmh2
YTsKKwl2b2lkCQkqY29va2llOworfTsKKworLyoKKyAqIFNldCB1cCAnY29weWluZm9bXScgdG8g
Y29weSB0by9mcm9tIGd1ZXN0IGxpbmVhciBhZGRyZXNzIHNwYWNlIHN0YXJ0aW5nCisgKiBhdCAn
Z2xhJyBhbmQgJ2xlbicgYnl0ZXMgbG9uZy4gVGhlICdwcm90JyBzaG91bGQgYmUgc2V0IHRvIFBS
T1RfUkVBRCBmb3IKKyAqIGEgY29weWluIG9yIFBST1RfV1JJVEUgZm9yIGEgY29weW91dC4gCisg
KgorICogcmV0dmFsCWlzX2ZhdWx0CUludGVycHJldGF0aW9uCisgKiAgIDAJCSAgIDAJCVN1Y2Nl
c3MKKyAqICAgMAkJICAgMQkJQW4gZXhjZXB0aW9uIHdhcyBpbmplY3RlZCBpbnRvIHRoZSBndWVz
dAorICogRUZBVUxUCSAgTi9BCQlVbnJlY292ZXJhYmxlIGVycm9yCisgKgorICogVGhlICdjb3B5
aW5mb1tdJyBjYW4gYmUgcGFzc2VkIHRvICd2bV9jb3B5aW4oKScgb3IgJ3ZtX2NvcHlvdXQoKScg
b25seSBpZgorICogdGhlIHJldHVybiB2YWx1ZSBpcyAwLiBUaGUgJ2NvcHlpbmZvW10nIHJlc291
cmNlcyBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZworICogJ3ZtX2NvcHlfdGVhcmRvd24oKScg
YWZ0ZXIgdGhlIGNvcHkgaXMgZG9uZS4KKyAqLworaW50IHZtX2NvcHlfc2V0dXAoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nLAorICAgIHVp
bnQ2NF90IGdsYSwgc2l6ZV90IGxlbiwgaW50IHByb3QsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29w
eWluZm8sCisgICAgaW50IG51bV9jb3B5aW5mbywgaW50ICppc19mYXVsdCk7Cit2b2lkIHZtX2Nv
cHlfdGVhcmRvd24oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZv
ICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvKTsKK3ZvaWQgdm1fY29weWluKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8sCisgICAg
dm9pZCAqa2FkZHIsIHNpemVfdCBsZW4pOwordm9pZCB2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAq
Y29weWluZm8sIHNpemVfdCBsZW4pOworCitpbnQgdmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQpOworI2VuZGlmCS8qIEtFUk5FTCAqLworCisjZGVmaW5lCVZN
X01BWENQVQkxNgkJCS8qIG1heGltdW0gdmlydHVhbCBjcHVzICovCisKKy8qCisgKiBJZGVudGlm
aWVycyBmb3Igb3B0aW9uYWwgdm1tIGNhcGFiaWxpdGllcworICovCitlbnVtIHZtX2NhcF90eXBl
IHsKKwlWTV9DQVBfSEFMVF9FWElULAorCVZNX0NBUF9NVFJBUF9FWElULAorCVZNX0NBUF9QQVVT
RV9FWElULAorCVZNX0NBUF9VTlJFU1RSSUNURURfR1VFU1QsCisJVk1fQ0FQX0VOQUJMRV9JTlZQ
Q0lELAorCVZNX0NBUF9NQVgKK307CisKK2VudW0gdm1faW50cl90cmlnZ2VyIHsKKwlFREdFX1RS
SUdHRVIsCisJTEVWRUxfVFJJR0dFUgorfTsKKwkKKy8qCisgKiBUaGUgJ2FjY2VzcycgZmllbGQg
aGFzIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFRhYmxlIDIxLTIgb2YgdGhlIEludGVsCisgKiBB
cmNoaXRlY3R1cmUgTWFudWFsIHZvbCAzYi4KKyAqCisgKiBYWFggVGhlIGNvbnRlbnRzIG9mIHRo
ZSAnYWNjZXNzJyBmaWVsZCBhcmUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgZXhjZXB0CisgKiBi
aXQgMTYgLSBTZWdtZW50IFVudXNhYmxlLgorICovCitzdHJ1Y3Qgc2VnX2Rlc2MgeworCXVpbnQ2
NF90CWJhc2U7CisJdWludDMyX3QJbGltaXQ7CisJdWludDMyX3QJYWNjZXNzOworfTsKKyNkZWZp
bmUJU0VHX0RFU0NfVFlQRShhY2Nlc3MpCQkoKGFjY2VzcykgJiAweDAwMWYpCisjZGVmaW5lCVNF
R19ERVNDX0RQTChhY2Nlc3MpCQkoKChhY2Nlc3MpID4+IDUpICYgMHgzKQorI2RlZmluZQlTRUdf
REVTQ19QUkVTRU5UKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MDA4MCkgPyAxIDogMCkKKyNkZWZp
bmUJU0VHX0RFU0NfREVGMzIoYWNjZXNzKQkJKCgoYWNjZXNzKSAmIDB4NDAwMCkgPyAxIDogMCkK
KyNkZWZpbmUJU0VHX0RFU0NfR1JBTlVMQVJJVFkoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHg4MDAw
KSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19VTlVTQUJMRShhY2Nlc3MpCSgoKGFjY2Vzcykg
JiAweDEwMDAwKSA/IDEgOiAwKQorCitlbnVtIHZtX2NwdV9tb2RlIHsKKwlDUFVfTU9ERV9SRUFM
LAorCUNQVV9NT0RFX1BST1RFQ1RFRCwKKwlDUFVfTU9ERV9DT01QQVRJQklMSVRZLAkJLyogSUEt
MzJFIG1vZGUgKENTLkwgPSAwKSAqLworCUNQVV9NT0RFXzY0QklULAkJCS8qIElBLTMyRSBtb2Rl
IChDUy5MID0gMSkgKi8KK307CisKK2VudW0gdm1fcGFnaW5nX21vZGUgeworCVBBR0lOR19NT0RF
X0ZMQVQsCisJUEFHSU5HX01PREVfMzIsCisJUEFHSU5HX01PREVfUEFFLAorCVBBR0lOR19NT0RF
XzY0LAorfTsKKworc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyB7CisJdWludDY0X3QJY3IzOworCWlu
dAkJY3BsOworCWVudW0gdm1fY3B1X21vZGUgY3B1X21vZGU7CisJZW51bSB2bV9wYWdpbmdfbW9k
ZSBwYWdpbmdfbW9kZTsKK307CisKKy8qCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmVzICd2aWUnIGFu
ZCAndmllX29wJyBhcmUgbWVhbnQgdG8gYmUgb3BhcXVlIHRvIHRoZQorICogY29uc3VtZXJzIG9m
IGluc3RydWN0aW9uIGRlY29kaW5nLiBUaGUgb25seSByZWFzb24gd2h5IHRoZWlyIGNvbnRlbnRz
CisgKiBuZWVkIHRvIGJlIGV4cG9zZWQgaXMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSAn
dm1fZXhpdCcgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdmllX29wIHsKKwl1aW50OF90CQlvcF9i
eXRlOwkvKiBhY3R1YWwgb3Bjb2RlIGJ5dGUgKi8KKwl1aW50OF90CQlvcF90eXBlOwkvKiB0eXBl
IG9mIG9wZXJhdGlvbiAoZS5nLiBNT1YpICovCisJdWludDE2X3QJb3BfZmxhZ3M7Cit9OworCisj
ZGVmaW5lCVZJRV9JTlNUX1NJWkUJMTUKK3N0cnVjdCB2aWUgeworCXVpbnQ4X3QJCWluc3RbVklF
X0lOU1RfU0laRV07CS8qIGluc3RydWN0aW9uIGJ5dGVzICovCisJdWludDhfdAkJbnVtX3ZhbGlk
OwkJLyogc2l6ZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwl1aW50OF90CQludW1fcHJvY2Vzc2Vk
OworCisJdWludDhfdAkJYWRkcnNpemU6NCwgb3BzaXplOjQ7CS8qIGFkZHJlc3MgYW5kIG9wZXJh
bmQgc2l6ZXMgKi8KKwl1aW50OF90CQlyZXhfdzoxLAkJLyogUkVYIHByZWZpeCAqLworCQkJcmV4
X3I6MSwKKwkJCXJleF94OjEsCisJCQlyZXhfYjoxLAorCQkJcmV4X3ByZXNlbnQ6MSwKKwkJCXJl
cHpfcHJlc2VudDoxLAkJLyogUkVQL1JFUEUvUkVQWiBwcmVmaXggKi8KKwkJCXJlcG56X3ByZXNl
bnQ6MSwJLyogUkVQTkUvUkVQTlogcHJlZml4ICovCisJCQlvcHNpemVfb3ZlcnJpZGU6MSwJLyog
T3BlcmFuZCBzaXplIG92ZXJyaWRlICovCisJCQlhZGRyc2l6ZV9vdmVycmlkZToxLAkvKiBBZGRy
ZXNzIHNpemUgb3ZlcnJpZGUgKi8KKwkJCXNlZ21lbnRfb3ZlcnJpZGU6MTsJLyogU2VnbWVudCBv
dmVycmlkZSAqLworCisJdWludDhfdAkJbW9kOjIsCQkJLyogTW9kUk0gYnl0ZSAqLworCQkJcmVn
OjQsCisJCQlybTo0OworCisJdWludDhfdAkJc3M6MiwJCQkvKiBTSUIgYnl0ZSAqLworCQkJaW5k
ZXg6NCwKKwkJCWJhc2U6NDsKKworCXVpbnQ4X3QJCWRpc3BfYnl0ZXM7CisJdWludDhfdAkJaW1t
X2J5dGVzOworCisJdWludDhfdAkJc2NhbGU7CisJaW50CQliYXNlX3JlZ2lzdGVyOwkJLyogVk1f
UkVHX0dVRVNUX3h5eiAqLworCWludAkJaW5kZXhfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf
eHl6ICovCisJaW50CQlzZWdtZW50X3JlZ2lzdGVyOwkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisK
KwlpbnQ2NF90CQlkaXNwbGFjZW1lbnQ7CQkvKiBvcHRpb25hbCBhZGRyIGRpc3BsYWNlbWVudCAq
LworCWludDY0X3QJCWltbWVkaWF0ZTsJCS8qIG9wdGlvbmFsIGltbWVkaWF0ZSBvcGVyYW5kICov
CisKKwl1aW50OF90CQlkZWNvZGVkOwkvKiBzZXQgdG8gMSBpZiBzdWNjZXNzZnVsbHkgZGVjb2Rl
ZCAqLworCisJc3RydWN0IHZpZV9vcAlvcDsJCQkvKiBvcGNvZGUgZGVzY3JpcHRpb24gKi8KK307
CisKK2VudW0gdm1fZXhpdGNvZGUgeworCVZNX0VYSVRDT0RFX0lOT1VULAorCVZNX0VYSVRDT0RF
X1ZNWCwKKwlWTV9FWElUQ09ERV9CT0dVUywKKwlWTV9FWElUQ09ERV9SRE1TUiwKKwlWTV9FWElU
Q09ERV9XUk1TUiwKKwlWTV9FWElUQ09ERV9ITFQsCisJVk1fRVhJVENPREVfTVRSQVAsCisJVk1f
RVhJVENPREVfUEFVU0UsCisJVk1fRVhJVENPREVfUEFHSU5HLAorCVZNX0VYSVRDT0RFX0lOU1Rf
RU1VTCwKKwlWTV9FWElUQ09ERV9TUElOVVBfQVAsCisJVk1fRVhJVENPREVfREVQUkVDQVRFRDEs
CS8qIHVzZWQgdG8gYmUgU1BJTkRPV05fQ1BVICovCisJVk1fRVhJVENPREVfUkVOREVaVk9VUywK
KwlWTV9FWElUQ09ERV9JT0FQSUNfRU9JLAorCVZNX0VYSVRDT0RFX1NVU1BFTkRFRCwKKwlWTV9F
WElUQ09ERV9JTk9VVF9TVFIsCisJVk1fRVhJVENPREVfVEFTS19TV0lUQ0gsCisJVk1fRVhJVENP
REVfTU9OSVRPUiwKKwlWTV9FWElUQ09ERV9NV0FJVCwKKwlWTV9FWElUQ09ERV9TVk0sCisJVk1f
RVhJVENPREVfUkVRSURMRSwKKwlWTV9FWElUQ09ERV9NQVgKK307CisKK3N0cnVjdCB2bV9pbm91
dCB7CisJdWludDE2X3QJYnl0ZXM6MzsJLyogMSBvciAyIG9yIDQgKi8KKwl1aW50MTZfdAlpbjox
OworCXVpbnQxNl90CXN0cmluZzoxOworCXVpbnQxNl90CXJlcDoxOworCXVpbnQxNl90CXBvcnQ7
CisJdWludDMyX3QJZWF4OwkJLyogdmFsaWQgZm9yIG91dCAqLworfTsKKworc3RydWN0IHZtX2lu
b3V0X3N0ciB7CisJc3RydWN0IHZtX2lub3V0CWlub3V0OwkJLyogbXVzdCBiZSB0aGUgZmlyc3Qg
ZWxlbWVudCAqLworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCXVpbnQ2NF90CXJm
bGFnczsKKwl1aW50NjRfdAljcjA7CisJdWludDY0X3QJaW5kZXg7CisJdWludDY0X3QJY291bnQ7
CQkvKiByZXA9MSAoJXJjeCksIHJlcD0wICgxKSAqLworCWludAkJYWRkcnNpemU7CisJZW51bSB2
bV9yZWdfbmFtZSBzZWdfbmFtZTsKKwlzdHJ1Y3Qgc2VnX2Rlc2Mgc2VnX2Rlc2M7Cit9OworCitl
bnVtIHRhc2tfc3dpdGNoX3JlYXNvbiB7CisJVFNSX0NBTEwsCisJVFNSX0lSRVQsCisJVFNSX0pN
UCwKKwlUU1JfSURUX0dBVEUsCS8qIHRhc2sgZ2F0ZSBpbiBJRFQgKi8KK307CisKK3N0cnVjdCB2
bV90YXNrX3N3aXRjaCB7CisJdWludDE2X3QJdHNzc2VsOwkJLyogbmV3IFRTUyBzZWxlY3RvciAq
LworCWludAkJZXh0OwkJLyogdGFzayBzd2l0Y2ggZHVlIHRvIGV4dGVybmFsIGV2ZW50ICovCisJ
dWludDMyX3QJZXJyY29kZTsKKwlpbnQJCWVycmNvZGVfdmFsaWQ7CS8qIHB1c2ggJ2VycmNvZGUn
IG9uIHRoZSBuZXcgc3RhY2sgKi8KKwllbnVtIHRhc2tfc3dpdGNoX3JlYXNvbiByZWFzb247CisJ
c3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7Cit9OworCitzdHJ1Y3Qgdm1fZXhpdCB7CisJ
ZW51bSB2bV9leGl0Y29kZQlleGl0Y29kZTsKKwlpbnQJCQlpbnN0X2xlbmd0aDsJLyogMCBtZWFu
cyB1bmtub3duICovCisJdWludDY0X3QJCXJpcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB2bV9pbm91
dAlpbm91dDsKKwkJc3RydWN0IHZtX2lub3V0X3N0ciBpbm91dF9zdHI7CisJCXN0cnVjdCB7CisJ
CQl1aW50NjRfdAlncGE7CisJCQlpbnQJCWZhdWx0X3R5cGU7CisJCX0gcGFnaW5nOworCQlzdHJ1
Y3QgeworCQkJdWludDY0X3QJZ3BhOworCQkJdWludDY0X3QJZ2xhOworCQkJdWludDY0X3QJY3Nf
YmFzZTsKKwkJCWludAkJY3NfZDsJCS8qIENTLkQgKi8KKwkJCXN0cnVjdCB2bV9ndWVzdF9wYWdp
bmcgcGFnaW5nOworCQkJc3RydWN0IHZpZQl2aWU7CisJCX0gaW5zdF9lbXVsOworCQkvKgorCQkg
KiBWTVggc3BlY2lmaWMgcGF5bG9hZC4gVXNlZCB3aGVuIHRoZXJlIGlzIG5vICJiZXR0ZXIiCisJ
CSAqIGV4aXRjb2RlIHRvIHJlcHJlc2VudCB0aGUgVk0tZXhpdC4KKwkJICovCisJCXN0cnVjdCB7
CisJCQlpbnQJCXN0YXR1czsJCS8qIHZteCBpbnN0IHN0YXR1cyAqLworCQkJLyoKKwkJCSAqICdl
eGl0X3JlYXNvbicgYW5kICdleGl0X3F1YWxpZmljYXRpb24nIGFyZSB2YWxpZAorCQkJICogb25s
eSBpZiAnc3RhdHVzJyBpcyB6ZXJvLgorCQkJICovCisJCQl1aW50MzJfdAlleGl0X3JlYXNvbjsK
KwkJCXVpbnQ2NF90CWV4aXRfcXVhbGlmaWNhdGlvbjsKKwkJCS8qCisJCQkgKiAnaW5zdF9lcnJv
cicgYW5kICdpbnN0X3R5cGUnIGFyZSB2YWxpZAorCQkJICogb25seSBpZiAnc3RhdHVzJyBpcyBu
b24temVyby4KKwkJCSAqLworCQkJaW50CQlpbnN0X3R5cGU7CisJCQlpbnQJCWluc3RfZXJyb3I7
CisJCX0gdm14OworCQkvKgorCQkgKiBTVk0gc3BlY2lmaWMgcGF5bG9hZC4KKwkJICovCisJCXN0
cnVjdCB7CisJCQl1aW50NjRfdAlleGl0Y29kZTsKKwkJCXVpbnQ2NF90CWV4aXRpbmZvMTsKKwkJ
CXVpbnQ2NF90CWV4aXRpbmZvMjsKKwkJfSBzdm07CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdAlj
b2RlOwkJLyogZWN4IHZhbHVlICovCisJCQl1aW50NjRfdAl3dmFsOworCQl9IG1zcjsKKwkJc3Ry
dWN0IHsKKwkJCWludAkJdmNwdTsKKwkJCXVpbnQ2NF90CXJpcDsKKwkJfSBzcGludXBfYXA7CisJ
CXN0cnVjdCB7CisJCQl1aW50NjRfdAlyZmxhZ3M7CisJCX0gaGx0OworCQlzdHJ1Y3QgeworCQkJ
aW50CQl2ZWN0b3I7CisJCX0gaW9hcGljX2VvaTsKKwkJc3RydWN0IHsKKwkJCWVudW0gdm1fc3Vz
cGVuZF9ob3cgaG93OworCQl9IHN1c3BlbmRlZDsKKwkJc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHRh
c2tfc3dpdGNoOworCX0gdTsKK307CisKKy8qIEFQSXMgdG8gaW5qZWN0IGZhdWx0cyBpbnRvIHRo
ZSBndWVzdCAqLwordm9pZCB2bV9pbmplY3RfZmF1bHQodm9pZCAqdm0sIGludCB2Y3B1aWQsIGlu
dCB2ZWN0b3IsIGludCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKTsKKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF91ZCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2
bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX1VELCAwLCAwKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHZvaWQKK3ZtX2luamVjdF9ncCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2bV9p
bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0dQLCAxLCAwKTsKK30KKworc3RhdGljIF9faW5s
aW5lIHZvaWQKK3ZtX2luamVjdF9hYyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUp
Cit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9BQywgMSwgZXJyY29kZSk7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bV9pbmplY3Rfc3Modm9pZCAqdm0sIGludCB2Y3B1
aWQsIGludCBlcnJjb2RlKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfU1Ms
IDEsIGVycmNvZGUpOworfQorCit2b2lkIHZtX2luamVjdF9wZih2b2lkICp2bSwgaW50IHZjcHVp
ZCwgaW50IGVycm9yX2NvZGUsIHVpbnQ2NF90IGNyMik7CisKK2ludCB2bV9yZXN0YXJ0X2luc3Ry
dWN0aW9uKHZvaWQgKnZtLCBpbnQgdmNwdWlkKTsKKworI2VuZGlmCS8qIF9WTU1fSF8gKi8KZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2LmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2Rldi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92
bW1fZGV2LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43ODY1ODMwMDAgKzAwMDAKQEAgLTAsMCArMSw0
MTAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIE5FVEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQ
LCBJTkMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
CisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tX2Rldi5oIDI5
ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKyNpZm5kZWYJX1ZNTV9ERVZf
SF8KKyNkZWZpbmUJX1ZNTV9ERVZfSF8KKworI2lmZGVmIF9LRVJORUwKK3ZvaWQJdm1tZGV2X2lu
aXQodm9pZCk7CitpbnQJdm1tZGV2X2NsZWFudXAodm9pZCk7CisjZW5kaWYKKworc3RydWN0IHZt
X21lbW1hcCB7CisJdm1fcGFkZHJfdAlncGE7CisJaW50CQlzZWdpZDsJCS8qIG1lbW9yeSBzZWdt
ZW50ICovCisJdm1fb29mZnNldF90CXNlZ29mZjsJCS8qIG9mZnNldCBpbnRvIG1lbW9yeSBzZWdt
ZW50ICovCisJc2l6ZV90CQlsZW47CQkvKiBtbWFwIGxlbmd0aCAqLworCWludAkJcHJvdDsJCS8q
IFJXWCAqLworCWludAkJZmxhZ3M7Cit9OworI2RlZmluZQlWTV9NRU1NQVBfRl9XSVJFRAkweDAx
CisjZGVmaW5lCVZNX01FTU1BUF9GX0lPTU1VCTB4MDIKKworI2RlZmluZQlWTV9NRU1TRUdfTkFN
RShtKQkoKG0pLT5uYW1lWzBdICE9ICdcMCcgPyAobSktPm5hbWUgOiBOVUxMKQorc3RydWN0IHZt
X21lbXNlZyB7CisJaW50CQlzZWdpZDsKKwlzaXplX3QJCWxlbjsKKwljaGFyCQluYW1lW1NQRUNO
QU1FTEVOICsgMV07Cit9OworCitzdHJ1Y3Qgdm1fcmVnaXN0ZXIgeworCWludAkJY3B1aWQ7CisJ
aW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJdWludDY0X3QJcmVndmFsOwor
fTsKKworc3RydWN0IHZtX3NlZ19kZXNjIHsJCQkvKiBkYXRhIG9yIGNvZGUgc2VnbWVudCAqLwor
CWludAkJY3B1aWQ7CisJaW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJc3Ry
dWN0IHNlZ19kZXNjIGRlc2M7Cit9OworCitzdHJ1Y3Qgdm1fcnVuIHsKKwlpbnQJCWNwdWlkOwor
CXN0cnVjdCB2bV9leGl0CXZtX2V4aXQ7Cit9OworCitzdHJ1Y3Qgdm1fZXhjZXB0aW9uIHsKKwlp
bnQJCWNwdWlkOworCWludAkJdmVjdG9yOworCXVpbnQzMl90CWVycm9yX2NvZGU7CisJaW50CQll
cnJvcl9jb2RlX3ZhbGlkOworCWludAkJcmVzdGFydF9pbnN0cnVjdGlvbjsKK307CisKK3N0cnVj
dCB2bV9sYXBpY19tc2kgeworCXVpbnQ2NF90CW1zZzsKKwl1aW50NjRfdAlhZGRyOworfTsKKwor
c3RydWN0IHZtX2xhcGljX2lycSB7CisJaW50CQljcHVpZDsKKwlpbnQJCXZlY3RvcjsKK307CisK
K3N0cnVjdCB2bV9pb2FwaWNfaXJxIHsKKwlpbnQJCWlycTsKK307CisKK3N0cnVjdCB2bV9pc2Ff
aXJxIHsKKwlpbnQJCWF0cGljX2lycTsKKwlpbnQJCWlvYXBpY19pcnE7Cit9OworCitzdHJ1Y3Qg
dm1faXNhX2lycV90cmlnZ2VyIHsKKwlpbnQJCWF0cGljX2lycTsKKwllbnVtIHZtX2ludHJfdHJp
Z2dlciB0cmlnZ2VyOworfTsKKworc3RydWN0IHZtX2NhcGFiaWxpdHkgeworCWludAkJY3B1aWQ7
CisJZW51bSB2bV9jYXBfdHlwZSBjYXB0eXBlOworCWludAkJY2FwdmFsOworCWludAkJYWxsY3B1
czsKK307CisKK3N0cnVjdCB2bV9wcHRkZXYgeworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp
bnQJCWZ1bmM7Cit9OworCitzdHJ1Y3Qgdm1fcHB0ZGV2X21taW8geworCWludAkJYnVzOworCWlu
dAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJdm1fcGFkZHJfdAlncGE7CisJdm1fcGFkZHJfdAlocGE7
CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fTUFQX1VTRVJfQlVGIGlv
Y3RsIGluIHZtbWFwaS5jICovCitzdHJ1Y3Qgdm1fdXNlcl9idWYgeworCXZtX3BhZGRyX3QJZ3Bh
OworCXZvaWQgCQkqYWRkcjsKKwlzaXplX3QJCWxlbjsKK307CisKKy8qIEFyZ3VtZW50IGZvciBW
TV9JT19SRUdfSEFORExFUiBpb2N0bCBpbiB2bW1hcGkuYyAqLworc3RydWN0IHZtX2lvX3JlZ19o
YW5kbGVyIHsKKwl1aW50MTZfdAkJcG9ydDsJCS8qIEkvTyBhZGRyZXNzICovCisJdWludDE2X3QJ
CWluOwkJLyogMCBvdXQsIDEgaW4gKi8KKwl1aW50MzJfdAkJbWFza19kYXRhOwkvKiAwIG1lYW5z
IG1hdGNoIGFueXRoaW5nICovCisJdWludDMyX3QJCWRhdGE7CQkvKiBkYXRhIHRvIG1hdGNoICov
CisJZW51bSB2bV9pb19yZWdoX3R5cGUJdHlwZTsJCS8qIGhhbmRsZXIgdHlwZSAqLworCXZvaWQJ
CQkqYXJnOwkJLyogaGFuZGxlciBhcmd1bWVudCAqLworfTsKKworc3RydWN0IHZtX3BwdGRldl9t
c2kgeworCWludAkJdmNwdTsKKwlpbnQJCWJ1czsKKwlpbnQJCXNsb3Q7CisJaW50CQlmdW5jOwor
CWludAkJbnVtdmVjOwkJLyogMCBtZWFucyBkaXNhYmxlZCAqLworCXVpbnQ2NF90CW1zZzsKKwl1
aW50NjRfdAlhZGRyOworfTsKKworc3RydWN0IHZtX3BwdGRldl9tc2l4IHsKKwlpbnQJCXZjcHU7
CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCWlkeDsKKwl1aW50
NjRfdAltc2c7CisJdWludDMyX3QJdmVjdG9yX2NvbnRyb2w7CisJdWludDY0X3QJYWRkcjsKK307
CisKK3N0cnVjdCB2bV9ubWkgeworCWludAkJY3B1aWQ7Cit9OworCisjZGVmaW5lCU1BWF9WTV9T
VEFUUwk2NAorc3RydWN0IHZtX3N0YXRzIHsKKwlpbnQJCWNwdWlkOwkJCQkvKiBpbiAqLworCWlu
dAkJbnVtX2VudHJpZXM7CQkJLyogb3V0ICovCisJc3RydWN0IHRpbWV2YWwJdHY7CisJdWludDY0
X3QJc3RhdGJ1ZltNQVhfVk1fU1RBVFNdOworfTsKKworc3RydWN0IHZtX3N0YXRfZGVzYyB7CisJ
aW50CQlpbmRleDsJCQkJLyogaW4gKi8KKwljaGFyCQlkZXNjWzEyOF07CQkJLyogb3V0ICovCit9
OworCitzdHJ1Y3Qgdm1feDJhcGljIHsKKwlpbnQJCQljcHVpZDsKKwllbnVtIHgyYXBpY19zdGF0
ZQlzdGF0ZTsKK307CisKK3N0cnVjdCB2bV9ncGFfcHRlIHsKKwl1aW50NjRfdAlncGE7CQkJCS8q
IGluICovCisJdWludDY0X3QJcHRlWzRdOwkJCQkvKiBvdXQgKi8KKwlpbnQJCXB0ZW51bTsKK307
CisKK3N0cnVjdCB2bV9ocGV0X2NhcCB7CisJdWludDMyX3QJY2FwYWJpbGl0aWVzOwkvKiBsb3dl
ciAzMiBiaXRzIG9mIEhQRVQgY2FwYWJpbGl0aWVzICovCit9OworCitzdHJ1Y3Qgdm1fc3VzcGVu
ZCB7CisJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7Cit9OworCitzdHJ1Y3Qgdm1fZ2xhMmdwYSB7
CisJaW50CQl2Y3B1aWQ7CQkvKiBpbnB1dHMgKi8KKwlpbnQgCQlwcm90OwkJLyogUFJPVF9SRUFE
IG9yIFBST1RfV1JJVEUgKi8KKwl1aW50NjRfdAlnbGE7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu
ZyBwYWdpbmc7CisJaW50CQlmYXVsdDsJCS8qIG91dHB1dHMgKi8KKwl1aW50NjRfdAlncGE7Cit9
OworCitzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1IHsKKwlpbnQJCXZjcHVpZDsKK307CisKK3N0cnVj
dCB2bV9jcHVzZXQgeworCWludAkJd2hpY2g7CisJaW50CQljcHVzZXRzaXplOworCWNwdXNldF90
CSpjcHVzOworfTsKKyNkZWZpbmUJVk1fQUNUSVZFX0NQVVMJCTAKKyNkZWZpbmUJVk1fU1VTUEVO
REVEX0NQVVMJMQorCitzdHJ1Y3Qgdm1faW50aW5mbyB7CisJaW50CQl2Y3B1aWQ7CisJdWludDY0
X3QJaW5mbzE7CisJdWludDY0X3QJaW5mbzI7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX3RpbWUgewor
CXRpbWVfdAkJc2VjczsKK307CisKK3N0cnVjdCB2bV9ydGNfZGF0YSB7CisJaW50CQlvZmZzZXQ7
CisJdWludDhfdAkJdmFsdWU7Cit9OworCitlbnVtIHsKKwkvKiBnZW5lcmFsIHJvdXRpbmVzICov
CisJSU9DTlVNX0FCSVZFUlMgPSAwLAorCUlPQ05VTV9SVU4gPSAxLAorCUlPQ05VTV9TRVRfQ0FQ
QUJJTElUWSA9IDIsCisJSU9DTlVNX0dFVF9DQVBBQklMSVRZID0gMywKKwlJT0NOVU1fU1VTUEVO
RCA9IDQsCisJSU9DTlVNX1JFSU5JVCA9IDUsCisKKwkvKiBtZW1vcnkgYXBpcyAqLworCUlPQ05V
TV9NQVBfTUVNT1JZID0gMTAsCQkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfTUVNT1JZ
X1NFRyA9IDExLAkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfR1BBX1BNQVAgPSAxMiwK
KwlJT0NOVU1fR0xBMkdQQSA9IDEzLAorCUlPQ05VTV9BTExPQ19NRU1TRUcgPSAxNCwKKwlJT0NO
VU1fR0VUX01FTVNFRyA9IDE1LAorCUlPQ05VTV9NTUFQX01FTVNFRyA9IDE2LAorCUlPQ05VTV9N
TUFQX0dFVE5FWFQgPSAxNywKKworCS8qIHJlZ2lzdGVyL3N0YXRlIGFjY2Vzc29ycyAqLworCUlP
Q05VTV9TRVRfUkVHSVNURVIgPSAyMCwKKwlJT0NOVU1fR0VUX1JFR0lTVEVSID0gMjEsCisJSU9D
TlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMiwKKwlJT0NOVU1fR0VUX1NFR01FTlRfREVT
Q1JJUFRPUiA9IDIzLAorCisJLyogaW50ZXJydXB0IGluamVjdGlvbiAqLworCUlPQ05VTV9HRVRf
SU5USU5GTyA9IDI4LAorCUlPQ05VTV9TRVRfSU5USU5GTyA9IDI5LAorCUlPQ05VTV9JTkpFQ1Rf
RVhDRVBUSU9OID0gMzAsCisJSU9DTlVNX0xBUElDX0lSUSA9IDMxLAorCUlPQ05VTV9JTkpFQ1Rf
Tk1JID0gMzIsCisJSU9DTlVNX0lPQVBJQ19BU1NFUlRfSVJRID0gMzMsCisJSU9DTlVNX0lPQVBJ
Q19ERUFTU0VSVF9JUlEgPSAzNCwKKwlJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSA9IDM1LAorCUlP
Q05VTV9MQVBJQ19NU0kgPSAzNiwKKwlJT0NOVU1fTEFQSUNfTE9DQUxfSVJRID0gMzcsCisJSU9D
TlVNX0lPQVBJQ19QSU5DT1VOVCA9IDM4LAorCUlPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OID0g
MzksCisKKwkvKiBQQ0kgcGFzcy10aHJ1ICovCisJSU9DTlVNX0JJTkRfUFBUREVWID0gNDAsCisJ
SU9DTlVNX1VOQklORF9QUFRERVYgPSA0MSwKKwlJT0NOVU1fTUFQX1BQVERFVl9NTUlPID0gNDIs
CisJSU9DTlVNX1BQVERFVl9NU0kgPSA0MywKKwlJT0NOVU1fUFBUREVWX01TSVggPSA0NCwKKwor
CS8qIHN0YXRpc3RpY3MgKi8KKwlJT0NOVU1fVk1fU1RBVFMgPSA1MCwgCisJSU9DTlVNX1ZNX1NU
QVRfREVTQyA9IDUxLAorCisJLyoga2VybmVsIGRldmljZSBzdGF0ZSAqLworCUlPQ05VTV9TRVRf
WDJBUElDX1NUQVRFID0gNjAsCisJSU9DTlVNX0dFVF9YMkFQSUNfU1RBVEUgPSA2MSwKKwlJT0NO
VU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTID0gNjIsCisKKwkvKiBsZWdhY3kgaW50ZXJydXB0IGlu
amVjdGlvbiAqLworCUlPQ05VTV9JU0FfQVNTRVJUX0lSUSA9IDgwLAorCUlPQ05VTV9JU0FfREVB
U1NFUlRfSVJRID0gODEsCisJSU9DTlVNX0lTQV9QVUxTRV9JUlEgPSA4MiwKKwlJT0NOVU1fSVNB
X1NFVF9JUlFfVFJJR0dFUiA9IDgzLAorCisJLyogdm1fY3B1c2V0ICovCisJSU9DTlVNX0FDVElW
QVRFX0NQVSA9IDkwLAorCUlPQ05VTV9HRVRfQ1BVU0VUID0gOTEsCisKKwkvKiBSVEMgKi8KKwlJ
T0NOVU1fUlRDX1JFQUQgPSAxMDAsCisJSU9DTlVNX1JUQ19XUklURSA9IDEwMSwKKwlJT0NOVU1f
UlRDX1NFVFRJTUUgPSAxMDIsCisJSU9DTlVNX1JUQ19HRVRUSU1FID0gMTAzLAorCisJLyogaG9z
dCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVNX01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJ
T0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCit9OworCisjZGVmaW5lCVZNX1JVTgkJXAorCV9J
T1dSKCd2JywgSU9DTlVNX1JVTiwgc3RydWN0IHZtX3J1bikKKyNkZWZpbmUJVk1fU1VTUEVORAlc
CisJX0lPVygndicsIElPQ05VTV9TVVNQRU5ELCBzdHJ1Y3Qgdm1fc3VzcGVuZCkKKyNkZWZpbmUJ
Vk1fUkVJTklUCVwKKwlfSU8oJ3YnLCBJT0NOVU1fUkVJTklUKQorI2RlZmluZQlWTV9BTExPQ19N
RU1TRUcJXAorCV9JT1coJ3YnLCBJT0NOVU1fQUxMT0NfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtc2Vn
KQorI2RlZmluZQlWTV9HRVRfTUVNU0VHCVwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfTUVNU0VH
LCBzdHJ1Y3Qgdm1fbWVtc2VnKQorI2RlZmluZQlWTV9NTUFQX01FTVNFRwlcCisJX0lPVygndics
IElPQ05VTV9NTUFQX01FTVNFRywgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fTU1BUF9H
RVRORVhUCVwKKwlfSU9XUigndicsIElPQ05VTV9NTUFQX0dFVE5FWFQsIHN0cnVjdCB2bV9tZW1t
YXApCisjZGVmaW5lCVZNX1NFVF9SRUdJU1RFUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfUkVH
SVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZpbmUJVk1fR0VUX1JFR0lTVEVSIFwKKwlf
SU9XUigndicsIElPQ05VTV9HRVRfUkVHSVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZp
bmUJVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfU0VH
TUVOVF9ERVNDUklQVE9SLCBzdHJ1Y3Qgdm1fc2VnX2Rlc2MpCisjZGVmaW5lCVZNX0dFVF9TRUdN
RU5UX0RFU0NSSVBUT1IgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBU
T1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fSU5KRUNUX0VYQ0VQVElPTglcCisJ
X0lPVygndicsIElPQ05VTV9JTkpFQ1RfRVhDRVBUSU9OLCBzdHJ1Y3Qgdm1fZXhjZXB0aW9uKQor
I2RlZmluZQlWTV9MQVBJQ19JUlEgCQlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19JUlEsIHN0
cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX0xPQ0FMX0lSUSAJXAorCV9JT1co
J3YnLCBJT0NOVU1fTEFQSUNfTE9DQUxfSVJRLCBzdHJ1Y3Qgdm1fbGFwaWNfaXJxKQorI2RlZmlu
ZQlWTV9MQVBJQ19NU0kJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX01TSSwgc3RydWN0IHZt
X2xhcGljX21zaSkKKyNkZWZpbmUJVk1fSU9BUElDX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJ
T0NOVU1fSU9BUElDX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlW
TV9JT0FQSUNfREVBU1NFUlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19ERUFTU0VS
VF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUFVMU0VfSVJR
CVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19QVUxTRV9JUlEsIHN0cnVjdCB2bV9pb2FwaWNf
aXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUElOQ09VTlQJXAorCV9JT1IoJ3YnLCBJT0NOVU1fSU9B
UElDX1BJTkNPVU5ULCBpbnQpCisjZGVmaW5lCVZNX0lTQV9BU1NFUlRfSVJRCVwKKwlfSU9XKCd2
JywgSU9DTlVNX0lTQV9BU1NFUlRfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1f
SVNBX0RFQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JU0FfREVBU1NFUlRfSVJRLCBz
dHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNBX1BVTFNFX0lSUQlcCisJX0lPVygndics
IElPQ05VTV9JU0FfUFVMU0VfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNB
X1NFVF9JUlFfVFJJR0dFUglcCisJX0lPVygndicsIElPQ05VTV9JU0FfU0VUX0lSUV9UUklHR0VS
LCBzdHJ1Y3Qgdm1faXNhX2lycV90cmlnZ2VyKQorI2RlZmluZQlWTV9TRVRfQ0FQQUJJTElUWSBc
CisJX0lPVygndicsIElPQ05VTV9TRVRfQ0FQQUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkp
CisjZGVmaW5lCVZNX0dFVF9DQVBBQklMSVRZIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfQ0FQ
QUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkpCisjZGVmaW5lCVZNX0JJTkRfUFBUREVWIFwK
KwlfSU9XKCd2JywgSU9DTlVNX0JJTkRfUFBUREVWLCBzdHJ1Y3Qgdm1fcHB0ZGV2KQorI2RlZmlu
ZQlWTV9VTkJJTkRfUFBUREVWIFwKKwlfSU9XKCd2JywgSU9DTlVNX1VOQklORF9QUFRERVYsIHN0
cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX01BUF9QUFRERVZfTU1JTyBcCisJX0lPVygndics
IElPQ05VTV9NQVBfUFBUREVWX01NSU8sIHN0cnVjdCB2bV9wcHRkZXZfbW1pbykKKyNkZWZpbmUJ
Vk1fTUFQX1VTRVJfQlVGIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9VU0VSX0JVRiwgc3RydWN0
IHZtX3VzZXJfYnVmKQorI2RlZmluZQlWTV9JT19SRUdfSEFORExFUiBcCisJX0lPVygndicsIElP
Q05VTV9JT19SRUdfSEFORExFUiwgc3RydWN0IHZtX2lvX3JlZ19oYW5kbGVyKQorI2RlZmluZQlW
TV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9w
cHRkZXZfbXNpKQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9Q
UFRERVZfTVNJWCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1J
IFwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5l
CVZNX1NUQVRTIFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRz
KQorI2RlZmluZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVT
Qywgc3RydWN0IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJ
X0lPVygndicsIElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2Rl
ZmluZQlWTV9HRVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElD
X1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJ
RVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1f
aHBldF9jYXApCisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1f
R0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJ
X0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZN
X0FDVElWQVRFX0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2
bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVN
X0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwK
KwlfSU9XKCd2JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZp
bmUJVk1fR0VUX0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1
Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVN
X1JUQ19XUklURSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJ
X0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUg
Vk1fUlRDX1NFVFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2
bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1f
UlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNU
UlVDVElPTiBcCisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisj
ZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt
bV9kZXYuaC5vcmlnIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYu
aC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaC5v
cmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2Lmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU0
LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQtMTYgMDM6NDQ6NTBaIGdq
YiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlfVk1NX0RFVl9IXworCisj
aWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2ludAl2bW1kZXZfY2xlYW51
cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2bV9wYWRkcl90CWdwYTsK
KwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9vb2Zmc2V0X3QJc2Vnb2Zm
OwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXplX3QJCWxlbjsJCS8qIG1t
YXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50CQlmbGFnczsKK307Cisj
ZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1fTUVNTUFQX0ZfSU9NTVUJ
MHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5hbWVbMF0gIT0gJ1wwJyA/
IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlpbnQJCXNlZ2lkOworCXNp
emVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsKK307CisKK3N0cnVjdCB2
bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVn
X25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qgdm1fc2VnX2Rlc2MgewkJ
CS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ
CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2MgZGVzYzsKK307CisKK3N0
cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4aXQJdm1fZXhpdDsKK307
CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJaW50CQl2ZWN0b3I7CisJ
dWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFsaWQ7CisJaW50CQlyZXN0
YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21zaSB7CisJdWludDY0X3QJ
bXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHsKKwlpbnQJ
CWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lvYXBpY19pcnEgeworCWlu
dAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJYXRwaWNfaXJxOworCWlu
dAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgeworCWludAkJ
YXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7Cit9OworCitzdHJ1Y3Qg
dm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2NhcF90eXBlIGNhcHR5cGU7
CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3RydWN0IHZtX3BwdGRldiB7
CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307CisKK3N0cnVjdCB2bV9w
cHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwl2bV9w
YWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxlbjsKK307CisKK3N0cnVj
dCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7CisJaW50CQlzbG90Owor
CWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlzYWJsZWQgKi8KKwl1aW50
NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpeCB7
CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJaW50
CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9jb250cm9sOworCXVpbnQ2
NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNwdWlkOworfTsKKworI2Rl
ZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJaW50CQljcHVpZDsJCQkJ
LyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLworCXN0cnVjdCB0aW1ldmFs
CXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307CisKK3N0cnVjdCB2bV9z
dGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hhcgkJZGVzY1sxMjhdOwkJ
CS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50CQkJY3B1aWQ7CisJZW51
bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3BhX3B0ZSB7CisJdWludDY0
X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJLyogb3V0ICovCisJaW50
CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVpbnQzMl90CWNhcGFiaWxp
dGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGllcyAqLworfTsKKworc3Ry
dWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93OworfTsKKworc3RydWN0
IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICovCisJaW50IAkJcHJvdDsJ
CS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJZ2xhOworCXN0cnVjdCB2
bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBvdXRwdXRzICovCisJdWlu
dDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7CisJaW50CQl2Y3B1aWQ7
Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOworCWludAkJY3B1c2V0c2l6
ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElWRV9DUFVTCQkwCisjZGVm
aW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGluZm8geworCWludAkJdmNw
dWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOworfTsKKworc3RydWN0IHZt
X3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX2RhdGEgewor
CWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51bSB7CisJLyogZ2VuZXJh
bCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NOVU1fUlVOID0gMSwKKwlJ
T0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQQUJJTElUWSA9IDMsCisJ
SU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAorCisJLyogbWVtb3J5IGFw
aXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NO
VU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NOVU1fR0VUX0dQ
QV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NOVU1fQUxMT0NfTUVNU0VH
ID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1fTU1BUF9NRU1TRUcgPSAx
NiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdpc3Rlci9zdGF0ZSBhY2Nl
c3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9DTlVNX0dFVF9SRUdJU1RF
UiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0gMjIsCisJSU9DTlVNX0dF
VF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVwdCBpbmplY3Rpb24gKi8K
KwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lOVElORk8gPSAyOSwKKwlJ
T0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJQ19JUlEgPSAzMSwKKwlJ
T0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSA9IDMzLAor
CUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVNX0lPQVBJQ19QVUxTRV9J
UlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVNX0xBUElDX0xPQ0FMX0lS
USA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJT0NOVU1fUkVTVEFSVF9J
TlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLworCUlPQ05VTV9CSU5EX1BQ
VERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJSU9DTlVNX01BUF9QUFRE
RVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJSU9DTlVNX1BQVERFVl9N
U0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZNX1NUQVRTID0gNTAsIAor
CUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBkZXZpY2Ugc3RhdGUgKi8K
KwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9HRVRfWDJBUElDX1NUQVRF
ID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYyLAorCisJLyogbGVnYWN5
IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VSVF9JUlEgPSA4MCwKKwlJ
T0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0FfUFVMU0VfSVJRID0gODIs
CisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8qIHZtX2NwdXNldCAqLwor
CUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQVVNFVCA9IDkxLAorCisJ
LyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05VTV9SVENfV1JJVEUgPSAx
MDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9SVENfR0VUVElNRSA9IDEw
MywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlVOLCBzdHJ1
Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2JywgSU9DTlVNX1NVU1BF
TkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJXAorCV9JTygndicsIElP
Q05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJX0lPVygndicsIElPQ05V
TV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5lCVZNX0dFVF9NRU1TRUcJ
XAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVm
aW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01NQVBfTUVNU0VHLCBzdHJ1
Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAorCV9JT1dSKCd2JywgSU9D
TlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fU0VUX1JFR0lT
VEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVy
KQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9SRUdJ
U1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRfU0VHTUVOVF9ERVNDUklQ
VE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IsIHN0cnVjdCB2
bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPV1Io
J3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0IHZtX3NlZ19kZXNjKQor
I2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9F
WENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZNX0xBUElDX0lSUSAJCVwK
KwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xhcGljX2lycSkKKyNkZWZp
bmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19MT0NBTF9J
UlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX01TSQkJXAorCV9JT1co
J3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNpKQorI2RlZmluZQlWTV9J
T0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSwg
c3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19ERUFTU0VSVF9JUlEJXAor
CV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19p
cnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9B
UElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19Q
SU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09VTlQsIGludCkKKyNkZWZp
bmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSVNBX0FTU0VSVF9JUlEs
IHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NFUlRfSVJRCVwKKwlfSU9X
KCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmlu
ZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9QVUxTRV9JUlEsIHN0
cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9UUklHR0VSCVwKKwlfSU9X
KCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdn
ZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9D
QVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fR0VUX0NBUEFCSUxJ
VFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJp
bGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fQklORF9Q
UFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklORF9QUFRERVYgXAorCV9J
T1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKKyNkZWZpbmUJ
Vk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywg
c3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2
JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNpKQorI2RlZmluZQlWTV9Q
UFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJWCwgc3RydWN0IHZtX3Bw
dGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lO
SkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRTIFwKKwlfSU9XUigndics
IElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmluZQlWTV9TVEFUX0RFU0Mg
XAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0IHZtX3N0YXRfZGVzYykK
KyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndicsIElPQ05VTV9TRVRfWDJB
UElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfWDJBUElDX1NUQVRF
IFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGlj
KQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1f
R0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXApCisjZGVmaW5lCVZNX0dF
VF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1f
Z3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQ
QSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRFX0NQVQlcCisJX0lPVygn
dicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5l
CVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9j
cHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9J
TlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VUX0lOVElORk8JXAorCV9J
T1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUg
Vk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklURSwgc3RydWN0IHZtX3J0
Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JF
QUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NFVFRJTUUJXAorCV9JT1co
J3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1f
UlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9y
dGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBcCisJX0lPVygndicsIElP
Q05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11
bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oCTIwMTYtMDktMjkg
MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTE2IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAxMiBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggMjk4MDk0IDIw
MTYtMDQtMTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0lOU1RSVUNUSU9O
X0VNVUxfSF8KKyNkZWZpbmUJX1ZNTV9JTlNUUlVDVElPTl9FTVVMX0hfCisKKyNpbmNsdWRlIDxz
eXMvbW1hbi5oPgorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRl
IG1lbW9yeSByZWdpb25zLgorICovCit0eXBlZGVmIGludCAoKm1lbV9yZWdpb25fcmVhZF90KSh2
b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJIHVpbnQ2NF90ICpydmFsLCBp
bnQgcnNpemUsIHZvaWQgKmFyZyk7CisKK3R5cGVkZWYgaW50ICgqbWVtX3JlZ2lvbl93cml0ZV90
KSh2b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJICB1aW50NjRfdCB3dmFs
LCBpbnQgd3NpemUsIHZvaWQgKmFyZyk7CisKKy8qCisgKiBFbXVsYXRlIHRoZSBkZWNvZGVkICd2
aWUnIGluc3RydWN0aW9uLgorICoKKyAqIFRoZSBjYWxsYmFja3MgJ21ycicgYW5kICdtcncnIGVt
dWxhdGUgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgbWVtb3J5IHJlZ2lvbgorICogY29udGFpbmlu
ZyAnZ3BhJy4gJ21yYXJnJyBpcyBhbiBvcGFxdWUgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgaW50
byB0aGUKKyAqIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiAndm9pZCAqdm0nIHNob3VsZCBi
ZSAnc3RydWN0IHZtIConIHdoZW4gY2FsbGVkIGZyb20ga2VybmVsIGNvbnRleHQgYW5kCisgKiAn
c3RydWN0IHZtY3R4IConIHdoZW4gY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LgorICogcworICov
CitpbnQgdm1tX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCBjcHVpZCwgdWludDY0
X3QgZ3BhLCBzdHJ1Y3QgdmllICp2aWUsCisgICAgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFn
aW5nLCBtZW1fcmVnaW9uX3JlYWRfdCBtcnIsCisgICAgbWVtX3JlZ2lvbl93cml0ZV90IG1ydywg
dm9pZCAqbXJhcmcpOworCitpbnQgdmllX3VwZGF0ZV9yZWdpc3Rlcih2b2lkICp2bSwgaW50IHZj
cHVpZCwgZW51bSB2bV9yZWdfbmFtZSByZWcsCisgICAgdWludDY0X3QgdmFsLCBpbnQgc2l6ZSk7
CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgYW4gYWxpZ25tZW50IGNoZWNrIGV4Y2VwdGlvbiBzaG91
bGQgYmUgaW5qZWN0ZWQgYW5kIDAgb3RoZXJ3aXNlLgorICovCitpbnQgdmllX2FsaWdubWVudF9j
aGVjayhpbnQgY3BsLCBpbnQgb3BlcmFuZF9zaXplLCB1aW50NjRfdCBjcjAsCisgICAgdWludDY0
X3QgcmZsYWdzLCB1aW50NjRfdCBnbGEpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlICdnbGEnIGlz
IG5vdCBjYW5vbmljYWwgYW5kIDAgb3RoZXJ3aXNlLiAqLworaW50IHZpZV9jYW5vbmljYWxfY2hl
Y2soZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZSwgdWludDY0X3QgZ2xhKTsKKwordWludDY0X3Qg
dmllX3NpemUybWFzayhpbnQgc2l6ZSk7CisKK2ludCB2aWVfY2FsY3VsYXRlX2dsYShlbnVtIHZt
X2NwdV9tb2RlIGNwdV9tb2RlLCBlbnVtIHZtX3JlZ19uYW1lIHNlZywKKyAgICBzdHJ1Y3Qgc2Vn
X2Rlc2MgKmRlc2MsIHVpbnQ2NF90IG9mZiwgaW50IGxlbmd0aCwgaW50IGFkZHJzaXplLCBpbnQg
cHJvdCwKKyAgICB1aW50NjRfdCAqZ2xhKTsKKworI2lmZGVmIF9LRVJORUwKKy8qCisgKiBBUElz
IHRvIGZldGNoIGFuZCBkZWNvZGUgdGhlIGluc3RydWN0aW9uIGZyb20gbmVzdGVkIHBhZ2UgZmF1
bHQgaGFuZGxlci4KKyAqCisgKiAndmllJyBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxs
aW5nICd2bW1fZmV0Y2hfaW5zdHJ1Y3Rpb24oKScKKyAqLworaW50IHZtbV9mZXRjaF9pbnN0cnVj
dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQsCisJCQkgIHN0cnVjdCB2bV9ndWVzdF9wYWdp
bmcgKmd1ZXN0X3BhZ2luZywKKwkJCSAgdWludDY0X3QgcmlwLCBpbnQgaW5zdF9sZW5ndGgsIHN0
cnVjdCB2aWUgKnZpZSwKKwkJCSAgaW50ICppc19mYXVsdCk7CisKKy8qCisgKiBUcmFuc2xhdGUg
dGhlIGd1ZXN0IGxpbmVhciBhZGRyZXNzICdnbGEnIHRvIGEgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVz
cy4KKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJ
J2dwYScgY29udGFpbnMgcmVzdWx0IG9mIHRoZSB0cmFuc2xhdGlvbgorICogICAwCQkgICAxCQlB
biBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJ
CUFuIHVucmVjb3ZlcmFibGUgaHlwZXJ2aXNvciBlcnJvciBvY2N1cnJlZAorICovCitpbnQgdm1f
Z2xhMmdwYShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n
ICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdwYSwgaW50
ICppc19mYXVsdCk7CisKK3ZvaWQgdmllX2luaXQoc3RydWN0IHZpZSAqdmllLCBjb25zdCBjaGFy
ICppbnN0X2J5dGVzLCBpbnQgaW5zdF9sZW5ndGgpOworCisvKgorICogRGVjb2RlIHRoZSBpbnN0
cnVjdGlvbiBmZXRjaGVkIGludG8gJ3ZpZScgc28gaXQgY2FuIGJlIGVtdWxhdGVkLgorICoKKyAq
ICdnbGEnIGlzIHRoZSBndWVzdCBsaW5lYXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgaGFyZHdh
cmUgYXNzaXN0CisgKiB0aGF0IGNhdXNlZCB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgZmF1bHQuIEl0
IGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQKKyAqIHRoZSBzb2Z0d2FyZSBpbnN0cnVjdGlvbiBkZWNv
ZGluZyBpcyBpbiBhZ3JlZW1lbnQgd2l0aCB0aGUgaGFyZHdhcmUuCisgKiAKKyAqIFNvbWUgaGFy
ZHdhcmUgYXNzaXN0cyBkbyBub3QgcHJvdmlkZSB0aGUgJ2dsYScgdG8gdGhlIGh5cGVydmlzb3Iu
CisgKiBUbyBza2lwIHRoZSAnZ2xhJyB2ZXJpZmljYXRpb24gZm9yIHRoaXMgb3IgYW55IG90aGVy
IHJlYXNvbiBwYXNzCisgKiBpbiBWSUVfSU5WQUxJRF9HTEEgaW5zdGVhZC4KKyAqLworI2RlZmlu
ZQlWSUVfSU5WQUxJRF9HTEEJCSgxVUwgPDwgNjMpCS8qIGEgbm9uLWNhbm9uaWNhbCBhZGRyZXNz
ICovCitpbnQgdm1tX2RlY29kZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQs
IHVpbnQ2NF90IGdsYSwKKwkJCSAgIGVudW0gdm1fY3B1X21vZGUgY3B1X21vZGUsIGludCBjc2Qs
IHN0cnVjdCB2aWUgKnZpZSk7CisjZW5kaWYJLyogX0tFUk5FTCAqLworCisjZW5kaWYJLyogX1ZN
TV9JTlNUUlVDVElPTl9FTVVMX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvdm1wYXJhbS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt
cGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1wYXJhbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQu
MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjI3IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NCBKb2huIFMuIER5c29uCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJv
bSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHou
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s
bG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy
ZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5
IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9t
OiBAKCMpdm1wYXJhbS5oCTUuOSAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bXBhcmFtLmggMjg0MTQ3IDIwMTUtMDYtMDggMDQ6
NTk6MzJaIGFsYyAkCisgKi8KKworCisjaWZuZGVmIF9NQUNISU5FX1ZNUEFSQU1fSF8KKyNkZWZp
bmUJX01BQ0hJTkVfVk1QQVJBTV9IXyAxCisKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBjb25z
dGFudHMgZm9yIEFNRDY0LgorICovCisKKy8qCisgKiBWaXJ0dWFsIG1lbW9yeSByZWxhdGVkIGNv
bnN0YW50cywgYWxsIGluIGJ5dGVzCisgKi8KKyNkZWZpbmUJTUFYVFNJWgkJKDEyOFVMKjEwMjQq
MTAyNCkJLyogbWF4IHRleHQgc2l6ZSAqLworI2lmbmRlZiBERkxEU0laCisjZGVmaW5lCURGTERT
SVoJCSgzMjc2OFVMKjEwMjQqMTAyNCkJLyogaW5pdGlhbCBkYXRhIHNpemUgbGltaXQgKi8KKyNl
bmRpZgorI2lmbmRlZiBNQVhEU0laCisjZGVmaW5lCU1BWERTSVoJCSgzMjc2OFVMKjEwMjQqMTAy
NCkJLyogbWF4IGRhdGEgc2l6ZSAqLworI2VuZGlmCisjaWZuZGVmCURGTFNTSVoKKyNkZWZpbmUJ
REZMU1NJWgkJKDhVTCoxMDI0KjEwMjQpCQkvKiBpbml0aWFsIHN0YWNrIHNpemUgbGltaXQgKi8K
KyNlbmRpZgorI2lmbmRlZglNQVhTU0laCisjZGVmaW5lCU1BWFNTSVoJCSg1MTJVTCoxMDI0KjEw
MjQpCS8qIG1heCBzdGFjayBzaXplICovCisjZW5kaWYKKyNpZm5kZWYgU0dST1dTSVoKKyNkZWZp
bmUJU0dST1dTSVoJKDEyOFVMKjEwMjQpCQkvKiBhbW91bnQgdG8gZ3JvdyBzdGFjayAqLworI2Vu
ZGlmCisKKy8qCisgKiBXZSBwcm92aWRlIGEgbWFjaGluZSBzcGVjaWZpYyBzaW5nbGUgcGFnZSBh
bGxvY2F0b3IgdGhyb3VnaCB0aGUgdXNlCisgKiBvZiB0aGUgZGlyZWN0IG1hcHBlZCBzZWdtZW50
LiAgVGhpcyB1c2VzIDJNQiBwYWdlcyBmb3IgcmVkdWNlZAorICogVExCIHByZXNzdXJlLgorICov
CisjZGVmaW5lCVVNQV9NRF9TTUFMTF9BTExPQworCisvKgorICogVGhlIHBoeXNpY2FsIGFkZHJl
c3Mgc3BhY2UgaXMgZGVuc2VseSBwb3B1bGF0ZWQuCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19E
RU5TRQorCisvKgorICogVGhlIG51bWJlciBvZiBQSFlTU0VHIGVudHJpZXMgbXVzdCBiZSBvbmUg
Z3JlYXRlciB0aGFuIHRoZSBudW1iZXIKKyAqIG9mIHBoeXNfYXZhaWwgZW50cmllcyBiZWNhdXNl
IHRoZSBwaHlzX2F2YWlsIGVudHJ5IHRoYXQgc3BhbnMgdGhlCisgKiBsYXJnZXN0IHBoeXNpY2Fs
IGFkZHJlc3MgdGhhdCBpcyBhY2Nlc3NpYmxlIGJ5IElTQSBETUEgaXMgc3BsaXQKKyAqIGludG8g
dHdvIFBIWVNTRUcgZW50cmllcy4gCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19NQVgJCTYzCisK
Ky8qCisgKiBDcmVhdGUgdHdvIGZyZWUgcGFnZSBwb29sczogVk1fRlJFRVBPT0xfREVGQVVMVCBp
cyB0aGUgZGVmYXVsdCBwb29sCisgKiBmcm9tIHdoaWNoIHBoeXNpY2FsIHBhZ2VzIGFyZSBhbGxv
Y2F0ZWQgYW5kIFZNX0ZSRUVQT09MX0RJUkVDVCBpcworICogdGhlIHBvb2wgZnJvbSB3aGljaCBw
aHlzaWNhbCBwYWdlcyBmb3IgcGFnZSB0YWJsZXMgYW5kIHNtYWxsIFVNQQorICogb2JqZWN0cyBh
cmUgYWxsb2NhdGVkLgorICovCisjZGVmaW5lCVZNX05GUkVFUE9PTAkJMgorI2RlZmluZQlWTV9G
UkVFUE9PTF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRVBPT0xfRElSRUNUCTEKKworLyoKKyAq
IENyZWF0ZSB1cCB0byB0aHJlZSBmcmVlIHBhZ2UgbGlzdHM6IFZNX0ZSRUVMSVNUX0RNQTMyIGlz
IGZvciBwaHlzaWNhbCBwYWdlcworICogdGhhdCBoYXZlIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWxv
dyA0RyBidXQgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IElTQSBETUEsCisgKiBhbmQgVk1fRlJFRUxJ
U1RfSVNBRE1BIGlzIGZvciBwaHlzaWNhbCBwYWdlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGJ5IElT
QQorICogRE1BLgorICovCisjZGVmaW5lCVZNX05GUkVFTElTVAkJMworI2RlZmluZQlWTV9GUkVF
TElTVF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRUxJU1RfRE1BMzIJMQorI2RlZmluZQlWTV9G
UkVFTElTVF9JU0FETUEJMgorCisvKgorICogQ3JlYXRlIHRoZSBETUEzMiBmcmVlIGxpc3Qgb25s
eSBpZiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIGFib3ZlCisgKiBwaHlzaWNhbCBhZGRy
ZXNzIDRHIGlzIGF0IGxlYXN0IDE2TSwgd2hpY2ggYW1vdW50cyB0byA2NEdCIG9mIHBoeXNpY2Fs
CisgKiBtZW1vcnkuCisgKi8KKyNkZWZpbmUJVk1fRE1BMzJfTlBBR0VTX1RIUkVTSE9MRAkxNjc3
NzIxNgorCisvKgorICogQW4gYWxsb2NhdGlvbiBzaXplIG9mIDE2TUIgaXMgc3VwcG9ydGVkIGlu
IG9yZGVyIHRvIG9wdGltaXplIHRoZQorICogdXNlIG9mIHRoZSBkaXJlY3QgbWFwIGJ5IFVNQS4g
IFNwZWNpZmljYWxseSwgYSBjYWNoZSBsaW5lIGNvbnRhaW5zCisgKiBhdCBtb3N0IDggUERFcywg
Y29sbGVjdGl2ZWx5IG1hcHBpbmcgMTZNQiBvZiBwaHlzaWNhbCBtZW1vcnkuICBCeQorICogcmVk
dWNpbmcgdGhlIG51bWJlciBvZiBkaXN0aW5jdCAxNk1CICJwYWdlcyIgdGhhdCBhcmUgdXNlZCBi
eSBVTUEsCisgKiB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRvciByZWR1Y2VzIHRoZSBsaWtl
bGlob29kIG9mIGJvdGggMk1CCisgKiBwYWdlIFRMQiBtaXNzZXMgYW5kIGNhY2hlIG1pc3NlcyBj
YXVzZWQgYnkgMk1CIHBhZ2UgVExCIG1pc3Nlcy4KKyAqLworI2RlZmluZQlWTV9ORlJFRU9SREVS
CQkxMworCisvKgorICogRW5hYmxlIHN1cGVycGFnZSByZXNlcnZhdGlvbnM6IDEgbGV2ZWwuCisg
Ki8KKyNpZm5kZWYJVk1fTlJFU0VSVkxFVkVMCisjZGVmaW5lCVZNX05SRVNFUlZMRVZFTAkJMQor
I2VuZGlmCisKKy8qCisgKiBMZXZlbCAwIHJlc2VydmF0aW9ucyBjb25zaXN0IG9mIDUxMiBwYWdl
cy4KKyAqLworI2lmbmRlZglWTV9MRVZFTF8wX09SREVSCisjZGVmaW5lCVZNX0xFVkVMXzBfT1JE
RVIJOQorI2VuZGlmCisKKyNpZmRlZglTTVAKKyNkZWZpbmUJUEFfTE9DS19DT1VOVAkyNTYKKyNl
bmRpZgorCisvKgorICogVmlydHVhbCBhZGRyZXNzZXMgb2YgdGhpbmdzLiAgRGVyaXZlZCBmcm9t
IHRoZSBwYWdlIGRpcmVjdG9yeSBhbmQKKyAqIHBhZ2UgdGFibGUgaW5kZXhlcyBmcm9tIHBtYXAu
aCBmb3IgcHJlY2lzaW9uLgorICoKKyAqIDB4MDAwMDAwMDAwMDAwMDAwMCAtIDB4MDAwMDdmZmZm
ZmZmZmZmZiAgIHVzZXIgbWFwCisgKiAweDAwMDA4MDAwMDAwMDAwMDAgLSAweGZmZmY3ZmZmZmZm
ZmZmZmYgICBkb2VzIG5vdCBleGlzdCAoaG9sZSkKKyAqIDB4ZmZmZjgwMDAwMDAwMDAwMCAtIDB4
ZmZmZjgwNDAyMDEwMGZmZiAgIHJlY3Vyc2l2ZSBwYWdlIHRhYmxlICg1MTJHQiBzbG90KQorICog
MHhmZmZmODA0MDIwMTAxMDAwIC0gMHhmZmZmZjdmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm
ZmZmODAwMDAwMDAwMDAgLSAweGZmZmZmYmZmZmZmZmZmZmYgICA0VEIgZGlyZWN0IG1hcAorICog
MHhmZmZmZmMwMDAwMDAwMDAwIC0gMHhmZmZmZmRmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm
ZmZmZTAwMDAwMDAwMDAgLSAweGZmZmZmZmZmZmZmZmZmZmYgICAyVEIga2VybmVsIG1hcAorICoK
KyAqIFdpdGhpbiB0aGUga2VybmVsIG1hcDoKKyAqCisgKiAweGZmZmZmZmZmODAwMDAwMDAgICAg
ICAgICAgICAgICAgICAgICAgICBLRVJOQkFTRQorICovCisKKyNkZWZpbmUJVk1fTUlOX0tFUk5F
TF9BRERSRVNTCUtWQUREUihLUE1MNEJBU0UsIDAsIDAsIDApCisjZGVmaW5lCVZNX01BWF9LRVJO
RUxfQUREUkVTUwlLVkFERFIoS1BNTDRCQVNFICsgTktQTUw0RSAtIDEsIFwKKwkJCQkJTlBEUEVQ
Ry0xLCBOUERFUEctMSwgTlBURVBHLTEpCisKKyNkZWZpbmUJRE1BUF9NSU5fQUREUkVTUwlLVkFE
RFIoRE1QTUw0SSwgMCwgMCwgMCkKKyNkZWZpbmUJRE1BUF9NQVhfQUREUkVTUwlLVkFERFIoRE1Q
TUw0SSArIE5ETVBNTDRFLCAwLCAwLCAwKQorCisjZGVmaW5lCUtFUk5CQVNFCQlLVkFERFIoS1BN
TDRJLCBLUERQSSwgMCwgMCkKKworI2RlZmluZQlVUFRfTUFYX0FERFJFU1MJCUtWQUREUihQTUw0
UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEkpCisjZGVmaW5lCVVQVF9NSU5f
QUREUkVTUwkJS1ZBRERSKFBNTDRQTUw0SSwgMCwgMCwgMCkKKworI2RlZmluZQlWTV9NQVhVU0VS
X0FERFJFU1MJVVZBRERSKE5VUE1MNEUsIDAsIDAsIDApCisKKyNkZWZpbmUJU0hBUkVEUEFHRQkJ
KFZNX01BWFVTRVJfQUREUkVTUyAtIFBBR0VfU0laRSkKKyNkZWZpbmUJVVNSU1RBQ0sJCVNIQVJF
RFBBR0UKKworI2RlZmluZQlWTV9NQVhfQUREUkVTUwkJVVBUX01BWF9BRERSRVNTCisjZGVmaW5l
CVZNX01JTl9BRERSRVNTCQkoMCkKKworLyoKKyAqIFhYWCBBbGxvd2luZyBkbWFwbGltaXQgPT0g
MCBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciB2dCg0KSBlZmlmYidzCisgKiBlYXJseSB1
c2Ugb2YgUEhZU19UT19ETUFQIGJlZm9yZSB0aGUgbWFwcGluZyBpcyBhY3R1YWxseSBzZXR1cC4g
VGhpcyB3b3JrcworICogYmVjYXVzZSB0aGUgcmVzdWx0IGlzIG5vdCBhY3R1YWxseSBhY2Nlc3Nl
ZCB1bnRpbCBsYXRlciwgYnV0IHRoZSBlYXJseQorICogdnQgZmIgc3RhcnR1cCBuZWVkcyB0byBi
ZSByZXdvcmtlZC4KKyAqLworI2RlZmluZQlQSFlTX1RPX0RNQVAoeCkJKHsJCQkJCQlcCisJS0FT
U0VSVChkbWFwbGltaXQgPT0gMCB8fCAoeCkgPCBkbWFwbGltaXQsCQkJXAorCSAgICAoInBoeXNp
Y2FsIGFkZHJlc3MgJSNqeCBub3QgY292ZXJlZCBieSB0aGUgRE1BUCIsCQlcCisJICAgICh1aW50
bWF4X3QpeCkpOwkJCQkJCVwKKwkoeCkgfCBETUFQX01JTl9BRERSRVNTOyB9KQorCisjZGVmaW5l
CURNQVBfVE9fUEhZUyh4KQkoewkJCQkJCVwKKwlLQVNTRVJUKCh4KSA8IChETUFQX01JTl9BRERS
RVNTICsgZG1hcGxpbWl0KSAmJgkJCVwKKwkgICAgKHgpID49IERNQVBfTUlOX0FERFJFU1MsCQkJ
CQlcCisJICAgICgidmlydHVhbCBhZGRyZXNzICUjanggbm90IGNvdmVyZWQgYnkgdGhlIERNQVAi
LAkJXAorCSAgICAodWludG1heF90KXgpKTsJCQkJCQlcCisJKHgpICYgfkRNQVBfTUlOX0FERFJF
U1M7IH0pCisKKy8qCisgKiBIb3cgbWFueSBwaHlzaWNhbCBwYWdlcyBwZXIga21lbSBhcmVuYSB2
aXJ0dWFsIHBhZ2UuCisgKi8KKyNpZm5kZWYgVk1fS01FTV9TSVpFX1NDQUxFCisjZGVmaW5lCVZN
X0tNRU1fU0laRV9TQ0FMRQkoMSkKKyNlbmRpZgorCisvKgorICogT3B0aW9uYWwgY2VpbGluZyAo
aW4gYnl0ZXMpIG9uIHRoZSBzaXplIG9mIHRoZSBrbWVtIGFyZW5hOiA2MCUgb2YgdGhlCisgKiBr
ZXJuZWwgbWFwLgorICovCisjaWZuZGVmIFZNX0tNRU1fU0laRV9NQVgKKyNkZWZpbmUJVk1fS01F
TV9TSVpFX01BWAkoKFZNX01BWF9LRVJORUxfQUREUkVTUyAtIFwKKyAgICBWTV9NSU5fS0VSTkVM
X0FERFJFU1MgKyAxKSAqIDMgLyA1KQorI2VuZGlmCisKKy8qIGluaXRpYWwgcGFnZWluIHNpemUg
b2YgYmVnaW5uaW5nIG9mIGV4ZWN1dGFibGUgZmlsZSAqLworI2lmbmRlZiBWTV9JTklUSUFMX1BB
R0VJTgorI2RlZmluZQlWTV9JTklUSUFMX1BBR0VJTgkxNgorI2VuZGlmCisKKyNkZWZpbmUJWkVS
T19SRUdJT05fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQkvKiAyTUIgKi8KKworI2VuZGlmIC8qIF9N
QUNISU5FX1ZNUEFSQU1fSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3hlbi9oeXBlcmNhbGwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS94ZW4vaHlwZXJjYWxsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUveGVuL2h5cGVyY2FsbC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4vaHlwZXJjYWxsLmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKyAqIGh5cGVyY2FsbC5oCisgKiAKKyAqIEZyZWVCU0Qtc3Bl
Y2lmaWMgaHlwZXJ2aXNvciBoYW5kbGluZy4KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIw
MDQsIEsgQSBGcmFzZXIKKyAqIAorICogNjQtYml0IHVwZGF0ZXM6CisgKiAgIEJlbmphbWluIExp
dSA8YmVuamFtaW4ubGl1QGludGVsLmNvbT4KKyAqICAgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWpp
bWFAaW50ZWwuY29tPgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRl
ZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGlu
dG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
bGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2Ug
ZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Cisg
KiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRv
IHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp
Y2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz
dWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu
Y2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO
RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor
ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS94ZW4vaHlwZXJjYWxsLmggMjg5
MDMzIDIwMTUtMTAtMDggMTY6Mzk6NDNaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfX01BQ0hJ
TkVfWEVOX0hZUEVSQ0FMTF9IX18KKyNkZWZpbmUgX19NQUNISU5FX1hFTl9IWVBFUkNBTExfSF9f
CisKKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2lmbmRlZiBfX1hFTl9IWVBFUlZJU09SX0hf
XworIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2Vu
ZGlmCisKK2V4dGVybiBjaGFyICpoeXBlcmNhbGxfcGFnZTsKKworI2RlZmluZSBfX1NUUih4KSAj
eAorI2RlZmluZSBTVFIoeCkgX19TVFIoeCkKKyNkZWZpbmUJRU5PWEVOU1lTCTM4CisjZGVmaW5l
IENPTkZJR19YRU5fQ09NUEFUCTB4MDMwMDAyCisjZGVmaW5lIF9fbXVzdF9jaGVjaworCisjZGVm
aW5lIEhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJCVwKKwkiY2FsbCBoeXBlcmNhbGxfcGFnZSArICgi
U1RSKF9fSFlQRVJWSVNPUl8jI25hbWUpIiAqIDMyKSIKKworI2RlZmluZSBfaHlwZXJjYWxsMCh0
eXBlLCBuYW1lKQkJCVwKKyh7CQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCVwKKwlfX2FzbV9fIHZv
bGF0aWxlICgJCQkJXAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQlcCisJCTogIj1hIiAoX19yZXMp
CQkJXAorCQk6CQkJCVwKKwkJOiAibWVtb3J5IiApOwkJCVwKKwlfX3JlczsJCQkJCVwKK30pCisK
KyNkZWZpbmUgX2h5cGVyY2FsbDEodHlwZSwgbmFtZSwgYTEpCQkJCVwKKyh7CQkJCQkJCQlcCisJ
dHlwZSBfX3JlczsJCQkJCQlcCisJbG9uZyBfX2lnbjE7CQkJCQkJXAorCV9fYXNtX18gdm9sYXRp
bGUgKAkJCQkJCVwKKwkJSFlQRVJDQUxMX1NUUihuYW1lKQkJCQlcCisJCTogIj1hIiAoX19yZXMp
LCAiPUQiIChfX2lnbjEpCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSkJCQkJXAorCQk6ICJtZW1v
cnkiICk7CQkJCQlcCisJX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDIo
dHlwZSwgbmFtZSwgYTEsIGEyKQkJCQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJ
XAorCWxvbmcgX19pZ24xLCBfX2lnbjI7CQkJCQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJ
XAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9f
aWduMSksICI9UyIgKF9faWduMikJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcp
KGEyKSkJCVwKKwkJOiAibWVtb3J5IiApOwkJCQkJXAorCV9fcmVzOwkJCQkJCQlcCit9KQorCisj
ZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJXAorKHsJCQkJCQkJ
CVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25nIF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJ
CVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJ
XAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24yKSwgCVwKKwkJ
Ij1kIiAoX19pZ24zKQkJCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEy
KSksCQlcCisJCSIzIiAoKGxvbmcpKGEzKSkJCQkJXAorCQk6ICJtZW1vcnkiICk7CQkJCQlcCisJ
X19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDQodHlwZSwgbmFtZSwgYTEs
IGEyLCBhMywgYTQpCQkJXAorKHsJCQkJCQkJCVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25n
IF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2Fz
bV9fKCJyMTAiKSA9IChsb25nKShhNCk7CQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJXAor
CQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9faWdu
MSksICI9UyIgKF9faWduMiksCVwKKwkJICAiPWQiIChfX2lnbjMpLCAiK3IiIChfX2FyZzQpCQkJ
XAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgo
bG9uZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAor
fSkKKworI2RlZmluZSBfaHlwZXJjYWxsNSh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCwgYTUp
CQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJXAorCWxvbmcgX19pZ24xLCBfX2ln
bjIsIF9faWduMzsJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19hcmc0IF9fYXNtX18oInIxMCIpID0g
KGxvbmcpKGE0KTsJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNSBfX2FzbV9fKCJyOCIpID0gKGxv
bmcpKGE1KTsJCVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIo
bmFtZSkJCQkJXAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24y
KSwJXAorCQkgICI9ZCIgKF9faWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkJXAor
CQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgobG9u
ZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAorfSkK
Kworc3RhdGljIGlubGluZSBpbnQKK3ByaXZjbWRfaHlwZXJjYWxsKGxvbmcgb3AsIGxvbmcgYTEs
IGxvbmcgYTIsIGxvbmcgYTMsIGxvbmcgYTQsIGxvbmcgYTUpCit7CisJaW50IF9fcmVzOworCWxv
bmcgX19pZ24xLCBfX2lnbjIsIF9faWduMzsKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2FzbV9f
KCJyMTAiKSA9IChsb25nKShhNCk7CisJcmVnaXN0ZXIgbG9uZyBfX2FyZzUgX19hc21fXygicjgi
KSA9IChsb25nKShhNSk7CisJbG9uZyBfX2NhbGwgPSAobG9uZykmaHlwZXJjYWxsX3BhZ2UgKyAo
b3AgKiAzMik7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgKKwkJImNhbGwgKiVbY2FsbF0iCisJCTog
Ij1hIiAoX19yZXMpLCAiPUQiIChfX2lnbjEpLCAiPVMiIChfX2lnbjIpLAorCQkgICI9ZCIgKF9f
aWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkKKwkJOiAiMSIgKChsb25nKShhMSkp
LCAiMiIgKChsb25nKShhMikpLAorCQkgICIzIiAoKGxvbmcpKGEzKSksIFtjYWxsXSAiYSIgKF9f
Y2FsbCkKKwkJOiAibWVtb3J5IiApOworCisJcmV0dXJuIChfX3Jlcyk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZSgKKwljb25z
dCB0cmFwX2luZm9fdCAqdGFibGUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKGludCwgc2V0X3Ry
YXBfdGFibGUsIHRhYmxlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI
WVBFUlZJU09SX21tdV91cGRhdGUoCisJbW11X3VwZGF0ZV90ICpyZXEsIHVuc2lnbmVkIGludCBj
b3VudCwgdW5zaWduZWQgaW50ICpzdWNjZXNzX2NvdW50LAorCWRvbWlkX3QgZG9taWQpCit7CisJ
cmV0dXJuIF9oeXBlcmNhbGw0KGludCwgbW11X3VwZGF0ZSwgcmVxLCBjb3VudCwgc3VjY2Vzc19j
b3VudCwgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVS
VklTT1JfbW11ZXh0X29wKAorCXN0cnVjdCBtbXVleHRfb3AgKm9wLCB1bnNpZ25lZCBpbnQgY291
bnQsIHVuc2lnbmVkIGludCAqc3VjY2Vzc19jb3VudCwKKwlkb21pZF90IGRvbWlkKQoreworCXJl
dHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdWV4dF9vcCwgb3AsIGNvdW50LCBzdWNjZXNzX2NvdW50
LCBkb21pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNP
Ul9zZXRfZ2R0KAorCXVuc2lnbmVkIGxvbmcgKmZyYW1lX2xpc3QsIHVuc2lnbmVkIGludCBlbnRy
aWVzKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNldF9nZHQsIGZyYW1lX2xpc3QsIGVu
dHJpZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jf
c3RhY2tfc3dpdGNoKAorCXVuc2lnbmVkIGxvbmcgc3MsIHVuc2lnbmVkIGxvbmcgZXNwKQorewor
CXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHN0YWNrX3N3aXRjaCwgc3MsIGVzcCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tzKAor
CXVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBmYWlsc2FmZV9hZGRy
ZXNzLCAKKwl1bnNpZ25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKK3sKKwlyZXR1cm4gX2h5cGVy
Y2FsbDMoaW50LCBzZXRfY2FsbGJhY2tzLAorCQkJICAgZXZlbnRfYWRkcmVzcywgZmFpbHNhZmVf
YWRkcmVzcywgc3lzY2FsbF9hZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVS
VklTT1JfZnB1X3Rhc2tzd2l0Y2goCisJaW50IHNldCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDEo
aW50LCBmcHVfdGFza3N3aXRjaCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0
X2NoZWNrCitIWVBFUlZJU09SX3NjaGVkX29wX2NvbXBhdCgKKwlpbnQgY21kLCB1bnNpZ25lZCBs
b25nIGFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzY2hlZF9vcF9jb21wYXQsIGNt
ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3NjaGVkX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIo
aW50LCBzY2hlZF9vcCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgX19tdXN0
X2NoZWNrCitIWVBFUlZJU09SX3NldF90aW1lcl9vcCgKKwl1aW50NjRfdCB0aW1lb3V0KQorewor
CXJldHVybiBfaHlwZXJjYWxsMShsb25nLCBzZXRfdGltZXJfb3AsIHRpbWVvdXQpOworfQorCitz
dGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfcGxhdGZvcm1fb3AoCisJ
c3RydWN0IHhlbl9wbGF0Zm9ybV9vcCAqcGxhdGZvcm1fb3ApCit7CisJcGxhdGZvcm1fb3AtPmlu
dGVyZmFjZV92ZXJzaW9uID0gWEVOUEZfSU5URVJGQUNFX1ZFUlNJT047CisJcmV0dXJuIF9oeXBl
cmNhbGwxKGludCwgcGxhdGZvcm1fb3AsIHBsYXRmb3JtX29wKTsKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3NldF9kZWJ1Z3JlZygKKwl1bnNpZ25lZCBp
bnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQs
IHNldF9kZWJ1Z3JlZywgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfZ2V0X2RlYnVncmVnKAorCXVuc2lnbmVkIGlu
dCByZWcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcsIGdldF9kZWJ1Z3Jl
ZywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3VwZGF0ZV9kZXNjcmlwdG9yKAorCXVuc2lnbmVkIGxvbmcgbWEsIHVuc2lnbmVkIGxvbmcgd29y
ZCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIHdv
cmQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfbWVt
b3J5X29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVy
Y2FsbDIoaW50LCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQg
X19tdXN0X2NoZWNrCitIWVBFUlZJU09SX211bHRpY2FsbCgKKwltdWx0aWNhbGxfZW50cnlfdCAq
Y2FsbF9saXN0LCB1bnNpZ25lZCBpbnQgbnJfY2FsbHMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwy
KGludCwgbXVsdGljYWxsLCBjYWxsX2xpc3QsIG5yX2NhbGxzKTsKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAorCXVuc2ln
bmVkIGxvbmcgdmEsIHVpbnQ2NF90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJ
cmV0dXJuIF9oeXBlcmNhbGwzKGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLCBuZXdfdmFsLCBm
bGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9l
dmVudF9jaGFubmVsX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlw
ZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19Y
RU5fQ09NUEFUIDw9IDB4MDMwMDAyCisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVO
U1lTKSkgeworCQlzdHJ1Y3QgZXZ0Y2huX29wIG9wOworCQlvcC5jbWQgPSBjbWQ7CisJCW1lbWNw
eSgmb3AudSwgYXJnLCBzaXplb2Yob3AudSkpOworCQlyYyA9IF9oeXBlcmNhbGwxKGludCwgZXZl
bnRfY2hhbm5lbF9vcF9jb21wYXQsICZvcCk7CisJCW1lbWNweShhcmcsICZvcC51LCBzaXplb2Yo
b3AudSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGlu
dCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfeGVuX3ZlcnNpb24oCisJaW50IGNtZCwgdm9pZCAq
YXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHhlbl92ZXJzaW9uLCBjbWQsIGFyZyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jb25zb2xl
X2lvKAorCWludCBjbWQsIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgY2hhciAqc3RyKQorewor
CXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGNvbnNvbGVfaW8sIGNtZCwgY291bnQsIHN0cik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9waHlzZGV2X29w
KAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBo
eXNkZXZfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19YRU5fQ09NUEFUIDw9IDB4MDMwMDAy
CisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVOU1lTKSkgeworCQlzdHJ1Y3QgcGh5
c2Rldl9vcCBvcDsKKwkJb3AuY21kID0gY21kOworCQltZW1jcHkoJm9wLnUsIGFyZywgc2l6ZW9m
KG9wLnUpKTsKKwkJcmMgPSBfaHlwZXJjYWxsMShpbnQsIHBoeXNkZXZfb3BfY29tcGF0LCAmb3Ap
OworCQltZW1jcHkoYXJnLCAmb3AudSwgc2l6ZW9mKG9wLnUpKTsKKwl9CisjZW5kaWYKKworCXJl
dHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X2dyYW50X3RhYmxlX29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVvcCwgdW5zaWduZWQg
aW50IGNvdW50KQoreworCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGdyYW50X3RhYmxlX29wLCBj
bWQsIHVvcCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZ
UEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4oCisJdW5zaWduZWQgbG9uZyB2
YSwgdWludDY0X3QgbmV3X3ZhbCwgdW5zaWduZWQgbG9uZyBmbGFncywgZG9taWRfdCBkb21pZCkK
K3sKKwlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFp
biwgdmEsCisJCQkgICBuZXdfdmFsLCBmbGFncywgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jfdm1fYXNzaXN0KAorCXVuc2lnbmVkIGludCBj
bWQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHZtX2Fz
c2lzdCwgY21kLCB0eXBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI
WVBFUlZJU09SX3ZjcHVfb3AoCisJaW50IGNtZCwgdW5zaWduZWQgaW50IHZjcHVpZCwgdm9pZCAq
ZXh0cmFfYXJncykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB2Y3B1X29wLCBjbWQsIHZj
cHVpZCwgZXh0cmFfYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjawor
SFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKAorCWludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFs
dWUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2
YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9z
dXNwZW5kKAorCXVuc2lnbmVkIGxvbmcgc3JlYykKK3sKKwlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24g
c2NoZWRfc2h1dGRvd24gPSB7CisJCS5yZWFzb24gPSBTSFVURE9XTl9zdXNwZW5kCisJfTsKKwor
CWludCByYyA9IF9oeXBlcmNhbGwzKGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sCisJ
CQkgICAgICZzY2hlZF9zaHV0ZG93biwgc3JlYyk7CisKKyNpZiBDT05GSUdfWEVOX0NPTVBBVCA8
PSAweDAzMDAwMgorCWlmIChyYyA9PSAtRU5PWEVOU1lTKQorCQlyYyA9IF9oeXBlcmNhbGwzKGlu
dCwgc2NoZWRfb3BfY29tcGF0LCBTQ0hFRE9QX3NodXRkb3duLAorCQkJCSBTSFVURE9XTl9zdXNw
ZW5kLCBzcmVjKTsKKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCisjaWYgQ09ORklHX1hFTl9D
T01QQVQgPD0gMHgwMzAwMDIKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX25taV9vcCgK
Kwl1bnNpZ25lZCBsb25nIG9wLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGlu
dCwgbm1pX29wLCBvcCwgYXJnKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19YRU4KK3N0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfaHZtX29w
KAorICAgIGludCBvcCwgdm9pZCAqYXJnKQoreworICAgIHJldHVybiBfaHlwZXJjYWxsMih1bnNp
Z25lZCBsb25nLCBodm1fb3AsIG9wLCBhcmcpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUg
aW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jYWxsYmFja19vcCgKKwlpbnQgY21kLCBjb25z
dCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgY2FsbGJhY2tfb3AsIGNt
ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3hlbm9wcm9mX29wKAorCWludCBvcCwgdm9pZCAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxs
MihpbnQsIHhlbm9wcm9mX29wLCBvcCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19t
dXN0X2NoZWNrCitIWVBFUlZJU09SX2tleGVjX29wKAorCXVuc2lnbmVkIGxvbmcgb3AsIHZvaWQg
KmFyZ3MpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwga2V4ZWNfb3AsIG9wLCBhcmdzKTsK
K30KKworI3VuZGVmIF9fbXVzdF9jaGVjaworCisjZW5kaWYgLyogX19NQUNISU5FX1hFTl9IWVBF
UkNBTExfSF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS94ZW4vc3luY2hfYml0b3BzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUveGVuL3N5bmNoX2JpdG9wcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL3hlbi9zeW5jaF9iaXRvcHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUveGVuL3N5bmNoX2JpdG9w
cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTI5IEBA
CisjaWZuZGVmIF9fWEVOX1NZTkNIX0JJVE9QU19IX18KKyNkZWZpbmUgX19YRU5fU1lOQ0hfQklU
T1BTX0hfXworCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICogSGVh
dmlseSBtb2RpZmllZCB0byBwcm92aWRlIGd1YXJhbnRlZWQgc3Ryb25nIHN5bmNocm9uaXNhdGlv
bgorICogd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggWGVuIG9yIG90aGVyIGd1ZXN0IE9TZXMgcnVu
bmluZyBvbiBvdGhlciBDUFVzLgorICovCisKKworI2RlZmluZSBBRERSICgqKHZvbGF0aWxlIGxv
bmcgKikgYWRkcikKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzeW5jaF9zZXRfYml0KGludCBu
ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAK
KyAgICAgICAgImxvY2sgYnRzbCAlMSwlMCIKKyAgICAgICAgOiAiPW0iIChBRERSKSA6ICJJciIg
KG5yKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3luY2hfY2xl
YXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18gKAorICAgICAgICAibG9jayBidHJsICUxLCUwIgorICAgICAgICA6ICI9bSIgKEFE
RFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9p
ZCBzeW5jaF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAg
X19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAibG9jayBidGNsICUxLCUwIgorICAgICAg
ICA6ICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9f
aW5saW5lX18gaW50IHN5bmNoX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk
ICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK
KyAgICAgICAgImxvY2sgYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg
KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy
biBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jbGVh
cl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0Owor
ICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgImxvY2sgYnRybCAlMiwlMVxuXHRz
YmJsICUwLCUwIgorICAgICAgICA6ICI9ciIgKG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAo
bnIpIDogIm1lbW9yeSIpOworICAgIHJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGlu
ZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq
IGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK
KyAgICAgICAgImxvY2sgYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg
KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy
biBvbGRiaXQ7Cit9CisKK3N0cnVjdCBfX3N5bmNoX3hjaGdfZHVtbXkgeyB1bnNpZ25lZCBsb25n
IGFbMTAwXTsgfTsKKyNkZWZpbmUgX19zeW5jaF94Zyh4KSAoKHZvbGF0aWxlIHN0cnVjdCBfX3N5
bmNoX3hjaGdfZHVtbXkgKikoeCkpCisKKyNkZWZpbmUgc3luY2hfY21weGNoZyhwdHIsIG9sZCwg
bmV3KSBcCisoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNoX2NtcHhjaGcoKHB0ciksXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShvbGQpLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5l
dyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKihwdHIp
KSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3N5bmNoX2NtcHhjaGcodm9sYXRp
bGUgdm9pZCAqcHRyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgICB1bnNp
Z25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRj
aCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhj
aGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwg
Im0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAi
bWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxl
X18oImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAg
ICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xk
KQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19h
c21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICVrMSwlMiIKKwkJCQkgICAgIDogIj1h
IihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJ
CSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2Owor
CWNhc2UgODoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdxICUxLCUyIgor
CQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9fc3luY2hf
eGcocHRyKSksCisJCQkJICAgICAgICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJ
cmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGlu
dCBzeW5jaF9jb25zdF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRy
KQoreworICAgIHJldHVybiAoKDFVTCA8PCAobnIgJiAzMSkpICYgCisgICAgICAgICAgICAoKChj
b25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOworfQor
CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc3luY2hfdmFyX3Rlc3RfYml0KGludCBuciwgdm9sYXRp
bGUgdm9pZCAqIGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKyAgICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoCisgICAgICAgICJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKyAgICAgICAgOiAiPXIi
IChvbGRiaXQpIDogIm0iIChBRERSKSwgIklyIiAobnIpICk7CisgICAgcmV0dXJuIG9sZGJpdDsK
K30KKworI2RlZmluZSBzeW5jaF90ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0
YW50X3AobnIpID8gXAorIHN5bmNoX2NvbnN0X3Rlc3RfYml0KChuciksKGFkZHIpKSA6IFwKKyBz
eW5jaF92YXJfdGVzdF9iaXQoKG5yKSwoYWRkcikpKQorCisjZW5kaWYgLyogX19YRU5fU1lOQ0hf
QklUT1BTX0hfXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUveGVuL3hlbi1vcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hl
bi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4veGVu
LW9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hlbi94ZW4tb3MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu
IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUveGVuL3hlbi1vcy5oIDI4OTY4NSAyMDE1LTEwLTIxIDEwOjA0OjM1WiByb3ln
ZXIgJCAqLworCisjaW5jbHVkZSA8eDg2L3hlbi94ZW4tb3MuaD4KRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbmV0bWFwLmtvIGFuZCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bmV0bWFwLmtvIGRpZmZlcgpGaWxlcyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXAu
byBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcC5vIGRpZmZlcgpGaWxlcyB1
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfZnJlZWJzZC5vIGFuZCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2ZyZWVic2QubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2dlbmVyaWMubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL25ldG1hcF9nZW5lcmljLm8gZGlmZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL25ldG1hcF9tYnEubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25l
dG1hcF9tYnEubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFw
X21lbTIubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tZW0yLm8gZGlm
ZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tb25pdG9yLm8gYW5k
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfbW9uaXRvci5vIGRpZmZlcgpGaWxl
cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MubyBhbmQgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5vIGRpZmZlcgpGaWxl
cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfcGlwZS5vIGFuZCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX3BpcGUubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbmV0bWFwX3B0Lm8gYW5kIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9uZXRtYXBfcHQubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0
bWFwX3ZhbGUubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF92YWxlLm8g
ZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQu
aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0LmgJMjAxNi0xMS0y
MyAxNzowNTozMy45MDc1OTAwMDAgKzAwMDAKQEAgLTAsMCArMSwyIEBACisjZGVmaW5lIElORVQg
MQorI2RlZmluZSBUQ1BfT0ZGTE9BRCAxCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvb3B0X2luZXQ2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0
Ni5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9vcHRfaW5ldDYuaAkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L29wdF9pbmV0Ni5oCTIwMTYtMTEtMjMgMTc6MDU6MzMuOTA5ODE2MDAwICswMDAwCkBAIC0wLDAg
KzEgQEAKKyNkZWZpbmUgSU5FVDYgMQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3BjaV9pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvcGNpX2lmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAky
MDE2LTExLTIzIDE3OjA1OjMzLjg5NzE5MTAwMCArMDAwMApAQCAtMCwwICsxLDQyNiBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwcm9kdWNlZCBhdXRvbWF0aWNhbGx5LgorICogRG8gbm90IG1vZGlm
eSBhbnl0aGluZyBpbiBoZXJlIGJ5IGhhbmQuCisgKgorICogQ3JlYXRlZCBmcm9tIHNvdXJjZSBm
aWxlCisgKiAgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaV9pZi5tCisgKiB3aXRoCisgKiAgIG1h
a2VvYmpvcHMuYXdrCisgKgorICogU2VlIHRoZSBzb3VyY2UgZmlsZSBmb3IgbGVnYWwgaW5mb3Jt
YXRpb24KKyAqLworCisKKyNpZm5kZWYgX3BjaV9pZl9oXworI2RlZmluZSBfcGNpX2lmX2hfCisK
Kworc3RydWN0IG52bGlzdDsKKworZW51bSBwY2lfaWRfdHlwZSB7CisgICAgUENJX0lEX1JJRCwK
KyAgICBQQ0lfSURfTVNJLAorfTsKKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig
dGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVz
YyBwY2lfcmVhZF9jb25maWdfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRp
bmcgdGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRlZiB1X2ludDMyX3QgcGNp
X3JlYWRfY29uZmlnX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHJlZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7CisKK3N0YXRpYyBf
X2lubGluZSB1X2ludDMyX3QgUENJX1JFQURfQ09ORklHKGRldmljZV90IGRldiwgZGV2aWNlX3Qg
Y2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkdGgpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl
diktPm9wcyxwY2lfcmVhZF9jb25maWcpOworCXJldHVybiAoKHBjaV9yZWFkX2NvbmZpZ190ICop
IF9tKShkZXYsIGNoaWxkLCByZWcsIHdpZHRoKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVz
Y3JpcHRvciBmb3IgdGhlIFBDSV9XUklURV9DT05GSUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1
Y3Qga29iam9wX2Rlc2MgcGNpX3dyaXRlX2NvbmZpZ19kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0
aW9uIGltcGxlbWVudGluZyB0aGUgUENJX1dSSVRFX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRl
ZiB2b2lkIHBjaV93cml0ZV9jb25maWdfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBp
bnQgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgdmFsLCBp
bnQgd2lkdGgpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfV1JJVEVfQ09ORklHKGRldmlj
ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVfaW50MzJfdCB2YWwsIGludCB3aWR0aCkKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV93cml0ZV9jb25maWcpOwor
CSgocGNpX3dyaXRlX2NvbmZpZ190ICopIF9tKShkZXYsIGNoaWxkLCByZWcsIHZhbCwgd2lkdGgp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9QT1dF
UlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9nZXRfcG93
ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJ
X0dFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3Bvd2Vyc3Rh
dGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu
dCBQQ0lfR0VUX1BPV0VSU1RBVEUoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfcG93
ZXJzdGF0ZSk7CisJcmV0dXJuICgocGNpX2dldF9wb3dlcnN0YXRlX3QgKikgX20pKGRldiwgY2hp
bGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX1NFVF9Q
T1dFUlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9zZXRf
cG93ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
UENJX1NFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfc2V0X3Bvd2Vy
c3RhdGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgc3RhdGUpOworCitzdGF0
aWMgX19pbmxpbmUgaW50IFBDSV9TRVRfUE9XRVJTVEFURShkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkLCBpbnQgc3RhdGUpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i
al90KWRldiktPm9wcyxwY2lfc2V0X3Bvd2Vyc3RhdGUpOworCXJldHVybiAoKHBjaV9zZXRfcG93
ZXJzdGF0ZV90ICopIF9tKShkZXYsIGNoaWxkLCBzdGF0ZSk7Cit9CisKKy8qKiBAYnJpZWYgVW5p
cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfR0VUX1ZQRF9JREVOVCgpIG1ldGhvZCAqLworZXh0
ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZ2V0X3ZwZF9pZGVudF9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0dFVF9WUERfSURFTlQoKSBtZXRob2Qg
Ki8KK3R5cGVkZWYgaW50IHBjaV9nZXRfdnBkX2lkZW50X3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlk
ZW50cHRyKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfR0VUX1ZQRF9JREVOVChkZXZpY2Vf
dCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqaWRlbnRwdHIpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9P
S1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfZ2V0X3ZwZF9pZGVudCk7CisJcmV0dXJuICgocGNp
X2dldF92cGRfaWRlbnRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaWRlbnRwdHIpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9WUERfUkVBRE9OTFkoKSBt
ZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2dldF92cGRfcmVhZG9ubHlf
ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9HRVRfVlBE
X1JFQURPTkxZKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3ZwZF9yZWFkb25seV90
KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGNvbnN0IGNoYXIgKmt3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdnB0cik7CisKK3N0YXRpYyBf
X2lubGluZSBpbnQgUENJX0dFVF9WUERfUkVBRE9OTFkoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj
aGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqa3csIGNvbnN0IGNoYXIgKip2cHRyKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2dldF92cGRfcmVhZG9ubHkpOworCXJldHVybiAoKHBj
aV9nZXRfdnBkX3JlYWRvbmx5X3QgKikgX20pKGRldiwgY2hpbGQsIGt3LCB2cHRyKTsKK30KKwor
LyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9FTkFCTEVfQlVTTUFTVEVS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9lbmFibGVfYnVzbWFz
dGVyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5B
QkxFX0JVU01BU1RFUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2VuYWJsZV9idXNtYXN0
ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu
dCBQQ0lfRU5BQkxFX0JVU01BU1RFUihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQorewor
CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2VuYWJs
ZV9idXNtYXN0ZXIpOworCXJldHVybiAoKHBjaV9lbmFibGVfYnVzbWFzdGVyX3QgKikgX20pKGRl
diwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ
X0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IHBjaV9kaXNhYmxlX2J1c21hc3Rlcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgUENJX0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZGlzYWJsZV9idXNtYXN0ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsK
Kworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRElTQUJMRV9CVVNNQVNURVIoZGV2aWNlX3QgZGV2
LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2Jq
X3QpZGV2KS0+b3BzLHBjaV9kaXNhYmxlX2J1c21hc3Rlcik7CisJcmV0dXJuICgocGNpX2Rpc2Fi
bGVfYnVzbWFzdGVyX3QgKikgX20pKGRldiwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0VOQUJMRV9JTygpIG1ldGhvZCAqLworZXh0ZXJuIHN0
cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxlX2lvX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5BQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZW5hYmxlX2lvX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNl
KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRU5BQkxFX0lPKGRldmljZV90IGRldiwgZGV2
aWNlX3QgY2hpbGQsIGludCBzcGFjZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo
KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfaW8pOworCXJldHVybiAoKHBjaV9lbmFibGVf
aW9fdCAqKSBfbSkoZGV2LCBjaGlsZCwgc3BhY2UpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBk
ZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVfSU8oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1
Y3Qga29iam9wX2Rlc2MgcGNpX2Rpc2FibGVfaW9fZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIFBDSV9ESVNBQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZGlzYWJsZV9pb190KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBzcGFj
ZSk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0RJU0FCTEVfSU8oZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNlKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfaW8pOworCXJldHVybiAoKHBjaV9kaXNh
YmxlX2lvX3QgKikgX20pKGRldiwgY2hpbGQsIHNwYWNlKTsKK30KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9BU1NJR05fSU5URVJSVVBUKCkgbWV0aG9kICovCitl
eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9hc3NpZ25faW50ZXJydXB0X2Rlc2M7CisvKiog
QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQVNTSUdOX0lOVEVSUlVQVCgp
IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2Fzc2lnbl9pbnRlcnJ1cHRfdChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfQVNTSUdOX0lO
VEVSUlVQVChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Fzc2lnbl9pbnRlcnJ1cHQpOwor
CXJldHVybiAoKHBjaV9hc3NpZ25faW50ZXJydXB0X3QgKikgX20pKGRldiwgY2hpbGQpOworfQor
CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0
aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2NhcF9kZXNjOworLyoq
IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0aG9k
ICovCit0eXBlZGVmIGludCBwY2lfZmluZF9jYXBfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNo
aWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2Fw
cmVnKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRklORF9DQVAoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50IGNhcGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChr
b2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2NhcCk7CisJcmV0dXJuICgocGNpX2ZpbmRfY2FwX3Qg
KikgX20pKGRldiwgY2hpbGQsIGNhcGFiaWxpdHksIGNhcHJlZyk7Cit9CisKKy8qKiBAYnJpZWYg
VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8KK2V4
dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2ZpbmRfZXh0Y2FwX2Rlc2M7CisvKiogQGJyaWVm
IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8K
K3R5cGVkZWYgaW50IHBjaV9maW5kX2V4dGNhcF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hp
bGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj
YXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0VYVENBUChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGNhcGFiaWxpdHksIGludCAqY2FwcmVnKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP
T0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2ZpbmRfZXh0Y2FwKTsKKwlyZXR1cm4gKChwY2lf
ZmluZF9leHRjYXBfdCAqKSBfbSkoZGV2LCBjaGlsZCwgY2FwYWJpbGl0eSwgY2FwcmVnKTsKK30K
KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9GSU5EX0hUQ0FQKCkg
bWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2h0Y2FwX2Rlc2M7
CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9IVENBUCgp
IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2ZpbmRfaHRjYXBfdChkZXZpY2VfdCBkZXYsIGRl
dmljZV90IGNoaWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICpjYXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0hUQ0FQKGRl
dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlL
T0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2h0Y2FwKTsKKwlyZXR1cm4g
KChwY2lfZmluZF9odGNhcF90ICopIF9tKShkZXYsIGNoaWxkLCBjYXBhYmlsaXR5LCBjYXByZWcp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX01T
SSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpX2Rl
c2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQUxMT0NfTVNJ
KCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfYWxsb2NfbXNpX3QoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0FM
TE9DX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgKmNvdW50KQoreworCWtv
YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2FsbG9jX21z
aSk7CisJcmV0dXJuICgocGNpX2FsbG9jX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBjb3VudCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQUxMT0NfTVNJ
WCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpeF9k
ZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0FMTE9DX01T
SVgoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9hbGxvY19tc2l4X3QoZGV2aWNlX3QgZGV2
LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJ
X0FMTE9DX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCkKK3sK
Kwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxv
Y19tc2l4KTsKKwlyZXR1cm4gKChwY2lfYWxsb2NfbXNpeF90ICopIF9tKShkZXYsIGNoaWxkLCBj
b3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRU5B
QkxFX01TSSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxl
X21zaV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0VO
QUJMRV9NU0koKSBtZXRob2QgKi8KK3R5cGVkZWYgdm9pZCBwY2lfZW5hYmxlX21zaV90KGRldmlj
ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVpbnQ2NF90IGFkZHJlc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MTZfdCBkYXRhKTsKKworc3RhdGljIF9faW5saW5lIHZvaWQg
UENJX0VOQUJMRV9NU0koZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQxNl90IGRhdGEp
Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lf
ZW5hYmxlX21zaSk7CisJKChwY2lfZW5hYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBhZGRy
ZXNzLCBkYXRhKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBD
SV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lf
ZW5hYmxlX21zaXhfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IFBDSV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIHBjaV9lbmFibGVfbXNp
eF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVfaW50IGluZGV4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQzMl90IGRhdGEpOwor
CitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfRU5BQkxFX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCwgdV9pbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKK3sKKwlrb2Jqb3BfdCBfbTsK
KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfbXNpeCk7CisJKChw
Y2lfZW5hYmxlX21zaXhfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaW5kZXgsIGFkZHJlc3MsIGRhdGEp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVf
TVNJKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9kaXNhYmxlX21z
aV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0RJU0FC
TEVfTVNJKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgcGNpX2Rpc2FibGVfbXNpX3QoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9ESVNB
QkxFX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfbXNpKTsKKwkoKHBj
aV9kaXNhYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRU1BUF9NU0lYKCkgbWV0aG9kICovCitleHRlcm4g
c3RydWN0IGtvYmpvcF9kZXNjIHBjaV9yZW1hcF9tc2l4X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVu
Y3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfUkVNQVBfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRl
ZiBpbnQgcGNpX3JlbWFwX21zaXhfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQg
Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfaW50ICp2ZWN0b3Jz
KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfUkVNQVBfTVNJWChkZXZpY2VfdCBkZXYsIGRl
dmljZV90IGNoaWxkLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVfaW50ICp2ZWN0b3JzKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX3JlbWFwX21zaXgpOworCXJldHVybiAoKHBjaV9yZW1h
cF9tc2l4X3QgKikgX20pKGRldiwgY2hpbGQsIGNvdW50LCB2ZWN0b3JzKTsKK30KKworLyoqIEBi
cmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhvZCAq
LworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfcmVsZWFzZV9tc2lfZGVzYzsKKy8qKiBA
YnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhv
ZCAqLwordHlwZWRlZiBpbnQgcGNpX3JlbGVhc2VfbXNpX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX1JFTEVBU0VfTVNJKGRldmljZV90
IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo
a29ial90KWRldiktPm9wcyxwY2lfcmVsZWFzZV9tc2kpOworCXJldHVybiAoKHBjaV9yZWxlYXNl
X21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp
cHRvciBmb3IgdGhlIFBDSV9NU0lfQ09VTlQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgcGNpX21zaV9jb3VudF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgUENJX01TSV9DT1VOVCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX21z
aV9jb3VudF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxp
bmUgaW50IFBDSV9NU0lfQ09VTlQoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2lfY291
bnQpOworCXJldHVybiAoKHBjaV9tc2lfY291bnRfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisK
Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfTVNJWF9DT1VOVCgpIG1l
dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfbXNpeF9jb3VudF9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfQ09VTlQoKSBt
ZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9tc2l4X2NvdW50X3QoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX01TSVhfQ09VTlQoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo
KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2l4X2NvdW50KTsKKwlyZXR1cm4gKChwY2lfbXNpeF9j
b3VudF90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp
cHRvciBmb3IgdGhlIFBDSV9NU0lYX1BCQV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg
a29iam9wX2Rlc2MgcGNpX21zaXhfcGJhX2Jhcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9u
IGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfUEJBX0JBUigpIG1ldGhvZCAqLwordHlwZWRlZiBp
bnQgcGNpX21zaXhfcGJhX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitz
dGF0aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1BCQV9CQVIoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+
b3BzLHBjaV9tc2l4X3BiYV9iYXIpOworCXJldHVybiAoKHBjaV9tc2l4X3BiYV9iYXJfdCAqKSBf
bSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRo
ZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgcGNpX21zaXhfdGFibGVfYmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt
ZW50aW5nIHRoZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBj
aV9tc2l4X3RhYmxlX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0
aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1RBQkxFX0JBUihkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v
cHMscGNpX21zaXhfdGFibGVfYmFyKTsKKwlyZXR1cm4gKChwY2lfbXNpeF90YWJsZV9iYXJfdCAq
KSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBQQ0lfR0VUX0lEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBj
aV9nZXRfaWRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD
SV9HRVRfSUQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9nZXRfaWRfdChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkLCBlbnVtIHBjaV9pZF90eXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludHB0cl90ICppZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0dF
VF9JRChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVudW0gcGNpX2lkX3R5cGUgdHlwZSwgdWludHB0cl90ICppZCkKK3sKKwlrb2Jq
b3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfaWQpOwor
CXJldHVybiAoKHBjaV9nZXRfaWRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgdHlwZSwgaWQpOworfQor
CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX0RFVklORk8o
KSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2FsbG9jX2RldmluZm9f
ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9BTExPQ19E
RVZJTkZPKCkgbWV0aG9kICovCit0eXBlZGVmIHN0cnVjdCBwY2lfZGV2aW5mbyAqIHBjaV9hbGxv
Y19kZXZpbmZvX3QoZGV2aWNlX3QgZGV2KTsKKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBwY2lf
ZGV2aW5mbyAqIFBDSV9BTExPQ19ERVZJTkZPKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxvY19kZXZpbmZvKTsK
KwlyZXR1cm4gKChwY2lfYWxsb2NfZGV2aW5mb190ICopIF9tKShkZXYpOworfQorCisvKiogQGJy
aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9kICov
CitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9jaGlsZF9hZGRlZF9kZXNjOworLyoqIEBi
cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9k
ICovCit0eXBlZGVmIHZvaWQgcGNpX2NoaWxkX2FkZGVkX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9DSElMRF9BRERFRChkZXZpY2Vf
dCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgo
KGtvYmpfdClkZXYpLT5vcHMscGNpX2NoaWxkX2FkZGVkKTsKKwkoKHBjaV9jaGlsZF9hZGRlZF90
ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIFBDSV9JT1ZfQVRUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k
ZXNjIHBjaV9pb3ZfYXR0YWNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBQQ0lfSU9WX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2lvdl9h
dHRhY2hfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgbnZsaXN0ICpwZl9zY2hlbWEsIHN0cnVjdCBudmxpc3QgKnZmX3Nj
aGVtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisK
K3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0lPVl9BVFRBQ0goZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG52bGlz
dCAqcGZfc2NoZW1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
bnZsaXN0ICp2Zl9zY2hlbWEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJa29iam9wX3QgX207CisJ
S09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2F0dGFjaCk7CisJcmV0dXJu
ICgocGNpX2lvdl9hdHRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCwgcGZfc2NoZW1hLCB2Zl9zY2hl
bWEsIG5hbWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ
X0lPVl9ERVRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2lv
dl9kZXRhY2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD
SV9JT1ZfREVUQUNIKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfaW92X2RldGFjaF90KGRl
dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9J
T1ZfREVUQUNIKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2RldGFjaCk7CisJcmV0
dXJuICgocGNpX2lvdl9kZXRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJp
ZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQ1JFQVRFX0lPVl9DSElMRCgpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfY3JlYXRlX2lvdl9jaGlsZF9kZXNj
OworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NSRUFURV9JT1Zf
Q0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2aWNlX3QgcGNpX2NyZWF0ZV9pb3ZfY2hpbGRf
dChkZXZpY2VfdCBidXMsIGRldmljZV90IHBmLCB1aW50MTZfdCByaWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgdmlkLCB1aW50MTZfdCBkaWQpOwor
CitzdGF0aWMgX19pbmxpbmUgZGV2aWNlX3QgUENJX0NSRUFURV9JT1ZfQ0hJTEQoZGV2aWNlX3Qg
YnVzLCBkZXZpY2VfdCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MTZfdCByaWQsIHVpbnQxNl90IHZpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkaWQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KWJ1cyktPm9wcyxwY2lfY3JlYXRlX2lvdl9jaGlsZCk7
CisJcmV0dXJuICgocGNpX2NyZWF0ZV9pb3ZfY2hpbGRfdCAqKSBfbSkoYnVzLCBwZiwgcmlkLCB2
aWQsIGRpZCk7Cit9CisKKyNlbmRpZiAvKiBfcGNpX2lmX2hfICovCmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvX2FsaWduLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9f
YWxpZ24uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fYWxpZ24uaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDUyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMSBE
YXZpZCBFLiBPJ0JyaWVuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhl
IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJr
ZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNp
bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK
KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRo
aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkg
b2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGFyYW0uaAk1LjggKEJlcmtlbGV5KSA2
LzI4LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19hbGlnbi5o
IDMwMTAzNyAyMDE2LTA1LTMxIDEzOjMxOjE5WiBlZCAkCisgKi8KKworI2lmbmRlZiBfWDg2X0lO
Q0xVREVfX0FMSUdOX0hfCisjZGVmaW5lCV9YODZfSU5DTFVERV9fQUxJR05fSF8KKworLyoKKyAq
IFJvdW5kIHAgKHBvaW50ZXIgb3IgYnl0ZSBpbmRleCkgdXAgdG8gYSBjb3JyZWN0bHktYWxpZ25l
ZCB2YWx1ZQorICogZm9yIGFsbCBkYXRhIHR5cGVzIChpbnQsIGxvbmcsIC4uLikuICAgVGhlIHJl
c3VsdCBpcyB1bnNpZ25lZCBpbnQKKyAqIGFuZCBtdXN0IGJlIGNhc3QgdG8gYW55IGRlc2lyZWQg
cG9pbnRlciB0eXBlLgorICovCisjZGVmaW5lCV9BTElHTkJZVEVTCShzaXplb2YoX19yZWdpc3Rl
cl90KSAtIDEpCisjZGVmaW5lCV9BTElHTihwKQkoKChfX3VpbnRwdHJfdCkocCkgKyBfQUxJR05C
WVRFUykgJiB+X0FMSUdOQllURVMpCisKKyNlbmRpZiAvKiAhX1g4Nl9JTkNMVURFX19BTElHTl9I
XyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9faW50dHlw
ZXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19pbnR0eXBlcy5oCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2lu
dHR5cGVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwy
MjEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl
ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICog
YnkgS2xhdXMgS2xlaW4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJRnJvbTogJE5ldEJTRDog
aW50X2ZtdGlvLmgsdiAxLjIgMjAwMS8wNC8yNiAxNjoyNToyMSBrbGVpbmsgRXhwICQKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvX2ludHR5cGVzLmggMjE3MTU3IDIw
MTEtMDEtMDggMTg6MDk6NDhaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfSU5UVFlQ
RVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfSU5UVFlQRVNfSF8KKworLyoKKyAqIE1hY3JvcyBmb3Ig
Zm9ybWF0IHNwZWNpZmllcnMuCisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCV9fUFJJ
NjQJCSJsIgorI2RlZmluZQlfX1BSSXB0cgkibCIKKyNlbHNlCisjZGVmaW5lCV9fUFJJNjQJCSJs
bCIKKyNkZWZpbmUJX19QUklwdHIKKyNlbmRpZgorCisvKiBmcHJpbnRmKDMpIG1hY3JvcyBmb3Ig
c2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVBSSWQ4CQkiZCIJCS8qIGludDhfdCAqLwor
I2RlZmluZQlQUklkMTYJCSJkIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlQUklkMzIJCSJkIgkJ
LyogaW50MzJfdCAqLworI2RlZmluZQlQUklkNjQJCV9fUFJJNjQiZCIJLyogaW50NjRfdCAqLwor
I2RlZmluZQlQUklkTEVBU1Q4CSJkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSWRM
RUFTVDE2CSJkIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklkTEVBU1QzMgkiZCIJ
CS8qIGludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJZExFQVNUNjQJX19QUkk2NCJkIgkvKiBp
bnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRGQVNUOAkiZCIJCS8qIGludF9mYXN0OF90ICov
CisjZGVmaW5lCVBSSWRGQVNUMTYJImQiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ
ZEZBU1QzMgkiZCIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklkRkFTVDY0CV9fUFJJ
NjQiZCIJLyogaW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRNQVgJCSJqZCIJCS8qIGludG1h
eF90ICovCisjZGVmaW5lCVBSSWRQVFIJCV9fUFJJcHRyImQiCS8qIGludHB0cl90ICovCisKKyNk
ZWZpbmUJUFJJaTgJCSJpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVBSSWkxNgkJImkiCQkvKiBp
bnQxNl90ICovCisjZGVmaW5lCVBSSWkzMgkJImkiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBS
SWk2NAkJX19QUkk2NCJpIgkvKiBpbnQ2NF90ICovCisjZGVmaW5lCVBSSWlMRUFTVDgJImkiCQkv
KiBpbnRfbGVhc3Q4X3QgICovCisjZGVmaW5lCVBSSWlMRUFTVDE2CSJpIgkJLyogaW50X2xlYXN0
MTZfdCAqLworI2RlZmluZQlQUklpTEVBU1QzMgkiaSIJCS8qIGludF9sZWFzdDMyX3QgKi8KKyNk
ZWZpbmUJUFJJaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l
CVBSSWlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSWlGQVNUMTYJImki
CQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJaUZBU1QzMgkiaSIJCS8qIGludF9mYXN0
MzJfdCAqLworI2RlZmluZQlQUklpRkFTVDY0CV9fUFJJNjQiaSIJLyogaW50X2Zhc3Q2NF90ICov
CisjZGVmaW5lCVBSSWlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSWlQVFIJ
CV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZwcmludGYoMykgbWFjcm9zIGZvciB1
bnNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlQUklvOAkJIm8iCQkvKiB1aW50OF90ICov
CisjZGVmaW5lCVBSSW8xNgkJIm8iCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlQUklvMzIJCSJv
IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJbzY0CQlfX1BSSTY0Im8iCS8qIHVpbnQ2NF90
ICovCisjZGVmaW5lCVBSSW9MRUFTVDgJIm8iCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5l
CVBSSW9MRUFTVDE2CSJvIgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJb0xFQVNU
MzIJIm8iCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlQUklvTEVBU1Q2NAlfX1BSSTY0
Im8iCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSW9GQVNUOAkibyIJCS8qIHVpbnRf
ZmFzdDhfdCAqLworI2RlZmluZQlQUklvRkFTVDE2CSJvIgkJLyogdWludF9mYXN0MTZfdCAqLwor
I2RlZmluZQlQUklvRkFTVDMyCSJvIgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklv
RkFTVDY0CV9fUFJJNjQibyIJLyogdWludF9mYXN0NjRfdCAqLworI2RlZmluZQlQUklvTUFYCQki
am8iCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJb1BUUgkJX19QUklwdHIibyIJLyogdWlu
dHB0cl90ICovCisKKyNkZWZpbmUJUFJJdTgJCSJ1IgkJLyogdWludDhfdCAqLworI2RlZmluZQlQ
Ukl1MTYJCSJ1IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJdTMyCQkidSIJCS8qIHVpbnQz
Ml90ICovCisjZGVmaW5lCVBSSXU2NAkJX19QUkk2NCJ1IgkvKiB1aW50NjRfdCAqLworI2RlZmlu
ZQlQUkl1TEVBU1Q4CSJ1IgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlQUkl1TEVBU1Qx
NgkidSIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSXVMRUFTVDMyCSJ1IgkJLyog
dWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUNjQJX19QUkk2NCJ1IgkvKiB1aW50
X2xlYXN0NjRfdCAqLworI2RlZmluZQlQUkl1RkFTVDgJInUiCQkvKiB1aW50X2Zhc3Q4X3QgKi8K
KyNkZWZpbmUJUFJJdUZBU1QxNgkidSIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ
dUZBU1QzMgkidSIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUZBU1Q2NAlfX1BS
STY0InUiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJUFJJdU1BWAkJImp1IgkJLyogdWlu
dG1heF90ICovCisjZGVmaW5lCVBSSXVQVFIJCV9fUFJJcHRyInUiCS8qIHVpbnRwdHJfdCAqLwor
CisjZGVmaW5lCVBSSXg4CQkieCIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJUFJJeDE2CQkieCIJ
CS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSXgzMgkJIngiCQkvKiB1aW50MzJfdCAqLworI2Rl
ZmluZQlQUkl4NjQJCV9fUFJJNjQieCIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNU
OAkieCIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUMTYJIngiCQkvKiB1
aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUkl4TEVBU1QzMgkieCIJCS8qIHVpbnRfbGVhc3Qz
Ml90ICovCisjZGVmaW5lCVBSSXhMRUFTVDY0CV9fUFJJNjQieCIJLyogdWludF9sZWFzdDY0X3Qg
Ki8KKyNkZWZpbmUJUFJJeEZBU1Q4CSJ4IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBS
SXhGQVNUMTYJIngiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSXhGQVNUMzIJIngi
CQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVBSSXhGQVNUNjQJX19QUkk2NCJ4IgkvKiB1
aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSXhNQVgJCSJqeCIJCS8qIHVpbnRtYXhfdCAqLwor
I2RlZmluZQlQUkl4UFRSCQlfX1BSSXB0ciJ4IgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlQ
UklYOAkJIlgiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSVgxNgkJIlgiCQkvKiB1aW50MTZf
dCAqLworI2RlZmluZQlQUklYMzIJCSJYIgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJWDY0
CQlfX1BSSTY0IlgiCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDgJIlgiCQkvKiB1
aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDE2CSJYIgkJLyogdWludF9sZWFzdDE2
X3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUMzIJIlgiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2Rl
ZmluZQlQUklYTEVBU1Q2NAlfX1BSSTY0IlgiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l
CVBSSVhGQVNUOAkiWCIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklYRkFTVDE2CSJY
IgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklYRkFTVDMyCSJYIgkJLyogdWludF9m
YXN0MzJfdCAqLworI2RlZmluZQlQUklYRkFTVDY0CV9fUFJJNjQiWCIJLyogdWludF9mYXN0NjRf
dCAqLworI2RlZmluZQlQUklYTUFYCQkialgiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJ
WFBUUgkJX19QUklwdHIiWCIJLyogdWludHB0cl90ICovCisKKy8qIGZzY2FuZigzKSBtYWNyb3Mg
Zm9yIHNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlTQ05kOAkJImhoZCIJCS8qIGludDhf
dCAqLworI2RlZmluZQlTQ05kMTYJCSJoZCIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJU0NOZDMy
CQkiZCIJCS8qIGludDMyX3QgKi8KKyNkZWZpbmUJU0NOZDY0CQlfX1BSSTY0ImQiCS8qIGludDY0
X3QgKi8KKyNkZWZpbmUJU0NOZExFQVNUOAkiaGhkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVm
aW5lCVNDTmRMRUFTVDE2CSJoZCIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOZExF
QVNUMzIJImQiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVNDTmRMRUFTVDY0CV9fUFJJ
NjQiZCIJLyogaW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ05kRkFTVDgJImQiCQkvKiBpbnRf
ZmFzdDhfdCAqLworI2RlZmluZQlTQ05kRkFTVDE2CSJkIgkJLyogaW50X2Zhc3QxNl90ICovCisj
ZGVmaW5lCVNDTmRGQVNUMzIJImQiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOZEZB
U1Q2NAlfX1BSSTY0ImQiCS8qIGludF9mYXN0NjRfdCAqLworI2RlZmluZQlTQ05kTUFYCQkiamQi
CQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlTQ05kUFRSCQlfX1BSSXB0ciJkIgkvKiBpbnRwdHJf
dCAqLworCisjZGVmaW5lCVNDTmk4CQkiaGhpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVNDTmkx
NgkJImhpIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlTQ05pMzIJCSJpIgkJLyogaW50MzJfdCAq
LworI2RlZmluZQlTQ05pNjQJCV9fUFJJNjQiaSIJLyogaW50NjRfdCAqLworI2RlZmluZQlTQ05p
TEVBU1Q4CSJoaGkiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUMTYJImhp
IgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ05pTEVBU1QzMgkiaSIJCS8qIGludF9s
ZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2
NF90ICovCisjZGVmaW5lCVNDTmlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5l
CVNDTmlGQVNUMTYJImkiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOaUZBU1QzMgki
aSIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ05pRkFTVDY0CV9fUFJJNjQiaSIJLyog
aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVNDTmlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisj
ZGVmaW5lCVNDTmlQVFIJCV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZzY2FuZigz
KSBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVNDTm84CQkiaGhv
IgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ05vMTYJCSJobyIJCS8qIHVpbnQxNl90ICovCisj
ZGVmaW5lCVNDTm8zMgkJIm8iCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ05vNjQJCV9fUFJJ
NjQibyIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJU0NOb0xFQVNUOAkiaGhvIgkJLyogdWludF9s
ZWFzdDhfdCAqLworI2RlZmluZQlTQ05vTEVBU1QxNgkiaG8iCQkvKiB1aW50X2xlYXN0MTZfdCAq
LworI2RlZmluZQlTQ05vTEVBU1QzMgkibyIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5l
CVNDTm9MRUFTVDY0CV9fUFJJNjQibyIJLyogdWludF9sZWFzdDY0X3QgKi8KKyNkZWZpbmUJU0NO
b0ZBU1Q4CSJvIgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTm9GQVNUMTYJIm8iCQkv
KiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTm9GQVNUMzIJIm8iCQkvKiB1aW50X2Zhc3Qz
Ml90ICovCisjZGVmaW5lCVNDTm9GQVNUNjQJX19QUkk2NCJvIgkvKiB1aW50X2Zhc3Q2NF90ICov
CisjZGVmaW5lCVNDTm9NQVgJCSJqbyIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ05vUFRS
CQlfX1BSSXB0ciJvIgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlTQ051OAkJImhodSIJCS8q
IHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOdTE2CQkiaHUiCQkvKiB1aW50MTZfdCAqLworI2RlZmlu
ZQlTQ051MzIJCSJ1IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJU0NOdTY0CQlfX1BSSTY0InUi
CS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVNDTnVMRUFTVDgJImhodSIJCS8qIHVpbnRfbGVhc3Q4
X3QgKi8KKyNkZWZpbmUJU0NOdUxFQVNUMTYJImh1IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNk
ZWZpbmUJU0NOdUxFQVNUMzIJInUiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ051
TEVBU1Q2NAlfX1BSSTY0InUiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVNDTnVGQVNU
OAkidSIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ051RkFTVDE2CSJ1IgkJLyogdWlu
dF9mYXN0MTZfdCAqLworI2RlZmluZQlTQ051RkFTVDMyCSJ1IgkJLyogdWludF9mYXN0MzJfdCAq
LworI2RlZmluZQlTQ051RkFTVDY0CV9fUFJJNjQidSIJLyogdWludF9mYXN0NjRfdCAqLworI2Rl
ZmluZQlTQ051TUFYCQkianUiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOdVBUUgkJX19Q
UklwdHIidSIJLyogdWludHB0cl90ICovCisKKyNkZWZpbmUJU0NOeDgJCSJoaHgiCQkvKiB1aW50
OF90ICovCisjZGVmaW5lCVNDTngxNgkJImh4IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NO
eDMyCQkieCIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTng2NAkJX19QUkk2NCJ4IgkvKiB1
aW50NjRfdCAqLworI2RlZmluZQlTQ054TEVBU1Q4CSJoaHgiCQkvKiB1aW50X2xlYXN0OF90ICov
CisjZGVmaW5lCVNDTnhMRUFTVDE2CSJoeCIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5l
CVNDTnhMRUFTVDMyCSJ4IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOeExFQVNU
NjQJX19QUkk2NCJ4IgkvKiB1aW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ054RkFTVDgJIngi
CQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QxNgkieCIJCS8qIHVpbnRfZmFz
dDE2X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QzMgkieCIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNk
ZWZpbmUJU0NOeEZBU1Q2NAlfX1BSSTY0IngiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJ
U0NOeE1BWAkJImp4IgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVNDTnhQVFIJCV9fUFJJcHRy
IngiCS8qIHVpbnRwdHJfdCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0lOVFRZUEVTX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fbGltaXRzLmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMDEgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWxpbWl0cy5oCTguMyAoQmVya2VsZXkpIDEvNC85
NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9fbGltaXRzLmggMjM1
OTM5IDIwMTItMDUtMjQgMjE6NDQ6NDZaIG9icmllbiAkCisgKi8KKworI2lmbmRlZglfTUFDSElO
RV9fTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5FX19MSU1JVFNfSF8KKworLyoKKyAqIEFjY29y
ZGluZyB0byBBTlNJIChzZWN0aW9uIDIuMi40LjIpLCB0aGUgdmFsdWVzIGJlbG93IG11c3QgYmUg
dXNhYmxlIGJ5CisgKiAjaWYgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLiAgQWRkaXRpb25hbGx5
LCB0aGUgZXhwcmVzc2lvbiBtdXN0IGhhdmUgdGhlCisgKiBzYW1lIHR5cGUgYXMgd291bGQgYW4g
ZXhwcmVzc2lvbiB0aGF0IGlzIGFuIG9iamVjdCBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlw
ZSBjb252ZXJ0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbnRlZ3JhbCBwcm9tb3Rpb25zLiAgVGhlIHN1
YnRyYWN0aW9uIGZvcgorICogSU5UX01JTiwgZXRjLiwgaXMgc28gdGhlIHZhbHVlIGlzIG5vdCB1
bnNpZ25lZDsgZS5nLiwgMHg4MDAwMDAwMCBpcyBhbgorICogdW5zaWduZWQgaW50IGZvciAzMi1i
aXQgdHdvJ3MgY29tcGxlbWVudCBBTlNJIGNvbXBpbGVycyAoc2VjdGlvbiAzLjEuMy4yKS4KKyAq
LworCisjZGVmaW5lCV9fQ0hBUl9CSVQJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICov
CisKKyNkZWZpbmUJX19TQ0hBUl9NQVgJMHg3ZgkJLyogbWF4IHZhbHVlIGZvciBhIHNpZ25lZCBj
aGFyICovCisjZGVmaW5lCV9fU0NIQVJfTUlOCSgtMHg3ZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3Ig
YSBzaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVUNIQVJfTUFYCTB4ZmYJCS8qIG1heCB2YWx1
ZSBmb3IgYW4gdW5zaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVVNIUlRfTUFYCTB4ZmZmZgkJ
LyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBzaG9ydCAqLworI2RlZmluZQlfX1NIUlRfTUFY
CTB4N2ZmZgkJLyogbWF4IHZhbHVlIGZvciBhIHNob3J0ICovCisjZGVmaW5lCV9fU0hSVF9NSU4J
KC0weDdmZmYgLSAxKQkvKiBtaW4gdmFsdWUgZm9yIGEgc2hvcnQgKi8KKworI2RlZmluZQlfX1VJ
TlRfTUFYCTB4ZmZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBpbnQgKi8KKyNk
ZWZpbmUJX19JTlRfTUFYCTB4N2ZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiBpbnQgKi8KKyNk
ZWZpbmUJX19JTlRfTUlOCSgtMHg3ZmZmZmZmZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3IgYW4gaW50
ICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1VMT05HX01BWAkweGZmZmZmZmZmZmZm
ZmZmZmYJLyogbWF4IGZvciBhbiB1bnNpZ25lZCBsb25nICovCisjZGVmaW5lCV9fTE9OR19NQVgJ
MHg3ZmZmZmZmZmZmZmZmZmZmCS8qIG1heCBmb3IgYSBsb25nICovCisjZGVmaW5lCV9fTE9OR19N
SU4JKC0weDdmZmZmZmZmZmZmZmZmZmYgLSAxKSAvKiBtaW4gZm9yIGEgbG9uZyAqLworI2Vsc2UK
KyNkZWZpbmUJX19VTE9OR19NQVgJMHhmZmZmZmZmZlVMCisjZGVmaW5lCV9fTE9OR19NQVgJMHg3
ZmZmZmZmZkwKKyNkZWZpbmUJX19MT05HX01JTgkoLTB4N2ZmZmZmZmZMIC0gMSkKKyNlbmRpZgor
CisJCQkvKiBtYXggdmFsdWUgZm9yIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyAqLworI2RlZmluZQlf
X1VMTE9OR19NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisjZGVmaW5lCV9fTExPTkdfTUFYCTB4
N2ZmZmZmZmZmZmZmZmZmZkxMCS8qIG1heCB2YWx1ZSBmb3IgYSBsb25nIGxvbmcgKi8KKyNkZWZp
bmUJX19MTE9OR19NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTCAtIDEpICAvKiBtaW4gZm9yIGEg
bG9uZyBsb25nICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1NTSVpFX01BWAlfX0xP
TkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCisjZGVmaW5lCV9fU0laRV9UX01B
WAlfX1VMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCisjZGVmaW5lCV9fT0ZG
X01BWAlfX0xPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYW4gb2ZmX3QgKi8KKyNkZWZpbmUJX19P
RkZfTUlOCV9fTE9OR19NSU4JLyogbWluIHZhbHVlIGZvciBhbiBvZmZfdCAqLworLyogUXVhZHMg
YW5kIGxvbmdzIGFyZSB0aGUgc2FtZSBvbiB0aGUgYW1kNjQuICBFbnN1cmUgdGhleSBzdGF5IGlu
IHN5bmMuICovCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBm
b3IgYSB1cXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NQVgJX19MT05HX01BWAkvKiBtYXggdmFs
dWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MT05HX01JTgkvKiBtaW4g
dmFsdWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fTE9OR19CSVQJNjQKKyNlbHNlCisjZGVm
aW5lCV9fU1NJWkVfTUFYCV9fSU5UX01BWAorI2RlZmluZQlfX1NJWkVfVF9NQVgJX19VSU5UX01B
WAorI2RlZmluZQlfX09GRl9NQVgJX19MTE9OR19NQVgKKyNkZWZpbmUJX19PRkZfTUlOCV9fTExP
TkdfTUlOCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxMT05HX01BWAorI2RlZmluZQlfX1FVQURf
TUFYCV9fTExPTkdfTUFYCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MTE9OR19NSU4KKyNkZWZpbmUJ
X19MT05HX0JJVAkzMgorI2VuZGlmCisKKyNkZWZpbmUJX19XT1JEX0JJVAkzMgorCisvKiBNaW5p
bXVtIHNpZ25hbCBzdGFjayBzaXplLiAqLworI2RlZmluZQlfX01JTlNJR1NUS1NaCSg1MTIgKiA0
KQorCisjZW5kaWYgLyogIV9NQUNISU5FX19MSU1JVFNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvX3N0ZGludC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv
X3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19zdGRpbnQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE5MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDEsIDIwMDIgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo
YykgMjAwMSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRl
ZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEtsYXVzIEtsZWluLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz
ZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu
b3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRz
IGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3Vu
ZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwg
SU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19zdGRp
bnQuaCAzMDEwMzAgMjAxNi0wNS0zMSAwODozODoyNFogZWQgJAorICovCisKKyNpZm5kZWYgX01B
Q0hJTkVfX1NURElOVF9IXworI2RlZmluZQlfTUFDSElORV9fU1RESU5UX0hfCisKKyNpbmNsdWRl
IDxtYWNoaW5lL19saW1pdHMuaD4KKworI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZp
bmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCisKKyNkZWZpbmUJSU5UOF9DKGMpCQkoYykKKyNk
ZWZpbmUJSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCUlOVDMyX0MoYykJCShjKQorCisjZGVmaW5l
CVVJTlQ4X0MoYykJCShjKQorI2RlZmluZQlVSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCVVJTlQz
Ml9DKGMpCQkoYyAjIyBVKQorCisjaWZkZWYJX19MUDY0X18KKyNkZWZpbmUJSU5UNjRfQyhjKQkJ
KGMgIyMgTCkKKyNkZWZpbmUJVUlOVDY0X0MoYykJCShjICMjIFVMKQorI2Vsc2UKKyNkZWZpbmUJ
SU5UNjRfQyhjKQkJKGMgIyMgTEwpCisjZGVmaW5lCVVJTlQ2NF9DKGMpCQkoYyAjIyBVTEwpCisj
ZW5kaWYKKworI2RlZmluZQlJTlRNQVhfQyhjKQkJSU5UNjRfQyhjKQorI2RlZmluZQlVSU5UTUFY
X0MoYykJCVVJTlQ2NF9DKGMpCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwg
ZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKSAqLworCisjaWYgIWRlZmluZWQoX19jcGx1
c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKworLyoKKyAqIElTTy9JRUMg
OTg5OToxOTk5CisgKiA3LjE4LjIuMSBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBl
cworICovCisjZGVmaW5lCUlOVDhfTUlOCSgtMHg3Zi0xKQorI2RlZmluZQlJTlQxNl9NSU4JKC0w
eDdmZmYtMSkKKyNkZWZpbmUJSU5UMzJfTUlOCSgtMHg3ZmZmZmZmZi0xKQorCisjZGVmaW5lCUlO
VDhfTUFYCTB4N2YKKyNkZWZpbmUJSU5UMTZfTUFYCTB4N2ZmZgorI2RlZmluZQlJTlQzMl9NQVgJ
MHg3ZmZmZmZmZgorCisjZGVmaW5lCVVJTlQ4X01BWAkweGZmCisjZGVmaW5lCVVJTlQxNl9NQVgJ
MHhmZmZmCisjZGVmaW5lCVVJTlQzMl9NQVgJMHhmZmZmZmZmZlUKKworI2lmZGVmIF9fTFA2NF9f
CisjZGVmaW5lCUlOVDY0X01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZi0xKQorI2RlZmluZQlJTlQ2
NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCVVJTlQ2NF9NQVgJMHhmZmZmZmZmZmZm
ZmZmZmZmCisjZWxzZQorI2RlZmluZQlJTlQ2NF9NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0x
KQorI2RlZmluZQlJTlQ2NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNkZWZpbmUJVUlOVDY0
X01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwKKyNlbmRpZgorCisvKgorICogSVNPL0lFQyA5ODk5
OjE5OTkKKyAqIDcuMTguMi4yICBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVz
CisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIg
dHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFTVDhfTUlOCUlOVDhfTUlOCisjZGVmaW5lCUlOVF9M
RUFTVDE2X01JTglJTlQxNl9NSU4KKyNkZWZpbmUJSU5UX0xFQVNUMzJfTUlOCUlOVDMyX01JTgor
I2RlZmluZQlJTlRfTEVBU1Q2NF9NSU4JSU5UNjRfTUlOCisKKy8qIE1heGltdW0gdmFsdWVzIG9m
IG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIgdHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFT
VDhfTUFYCUlOVDhfTUFYCisjZGVmaW5lCUlOVF9MRUFTVDE2X01BWAlJTlQxNl9NQVgKKyNkZWZp
bmUJSU5UX0xFQVNUMzJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlJTlRfTEVBU1Q2NF9NQVgJSU5U
NjRfTUFYCisKKy8qIE1heGltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50
ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJVUlOVF9MRUFTVDhfTUFYCSBVSU5UOF9NQVgKKyNkZWZp
bmUJVUlOVF9MRUFTVDE2X01BWCBVSU5UMTZfTUFYCisjZGVmaW5lCVVJTlRfTEVBU1QzMl9NQVgg
VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKworLyoKKyAq
IElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuMyAgTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11
bS13aWR0aCBpbnRlZ2VyIHR5cGVzCisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIGZhc3Rlc3Qg
bWluaW11bS13aWR0aCBzaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJSU5UX0ZBU1Q4
X01JTglJTlQzMl9NSU4KKyNkZWZpbmUJSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCisjZGVmaW5l
CUlOVF9GQVNUMzJfTUlOCUlOVDMyX01JTgorI2RlZmluZQlJTlRfRkFTVDY0X01JTglJTlQ2NF9N
SU4KKworLyogTWF4aW11bSB2YWx1ZXMgb2YgZmFzdGVzdCBtaW5pbXVtLXdpZHRoIHNpZ25lZCBp
bnRlZ2VyIHR5cGVzLiAqLworI2RlZmluZQlJTlRfRkFTVDhfTUFYCUlOVDMyX01BWAorI2RlZmlu
ZQlJTlRfRkFTVDE2X01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJSU5UX0ZBU1QzMl9NQVgJSU5UMzJf
TUFYCisjZGVmaW5lCUlOVF9GQVNUNjRfTUFYCUlOVDY0X01BWAorCisvKiBNYXhpbXVtIHZhbHVl
cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNk
ZWZpbmUJVUlOVF9GQVNUOF9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QxNl9NQVgJ
VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QzMl9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlV
SU5UX0ZBU1Q2NF9NQVgJVUlOVDY0X01BWAorCisvKgorICogSVNPL0lFQyA5ODk5OjE5OTkKKyAq
IDcuMTguMi40ICBMaW1pdHMgb2YgaW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2Jq
ZWN0IHBvaW50ZXJzCisgKi8KKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlJTlRQVFJfTUlOCUlO
VDY0X01JTgorI2RlZmluZQlJTlRQVFJfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UUFRSX01B
WAlVSU5UNjRfTUFYCisjZWxzZQorI2RlZmluZQlJTlRQVFJfTUlOCUlOVDMyX01JTgorI2RlZmlu
ZQlJTlRQVFJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlVSU5UUFRSX01BWAlVSU5UMzJfTUFYCisj
ZW5kaWYKKworLyoKKyAqIElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuNSAgTGltaXRzIG9m
IGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMKKyAqLworI2RlZmluZQlJTlRNQVhfTUlOCUlO
VDY0X01JTgorI2RlZmluZQlJTlRNQVhfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UTUFYX01B
WAlVSU5UNjRfTUFYCisKKy8qCisgKiBJU08vSUVDIDk4OTk6MTk5OQorICogNy4xOC4zICBMaW1p
dHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcworICovCisjaWZkZWYJX19MUDY0X18KKy8qIExpbWl0
cyBvZiBwdHJkaWZmX3QuICovCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDY0X01JTgkKKyNkZWZp
bmUJUFRSRElGRl9NQVgJSU5UNjRfTUFYCisKKy8qIExpbWl0cyBvZiBzaWdfYXRvbWljX3QuICov
CisjZGVmaW5lCVNJR19BVE9NSUNfTUlOCV9fTE9OR19NSU4KKyNkZWZpbmUJU0lHX0FUT01JQ19N
QVgJX19MT05HX01BWAorCisvKiBMaW1pdCBvZiBzaXplX3QuICovCisjZGVmaW5lCVNJWkVfTUFY
CVVJTlQ2NF9NQVgKKyNlbHNlCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDMyX01JTgorI2RlZmlu
ZQlQVFJESUZGX01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJU0lHX0FUT01JQ19NSU4JSU5UMzJfTUlO
CisjZGVmaW5lCVNJR19BVE9NSUNfTUFYCUlOVDMyX01BWAorI2RlZmluZQlTSVpFX01BWAlVSU5U
MzJfTUFYCisjZW5kaWYKKworLyogTGltaXRzIG9mIHdpbnRfdC4gKi8KKyNkZWZpbmUJV0lOVF9N
SU4JSU5UMzJfTUlOCisjZGVmaW5lCVdJTlRfTUFYCUlOVDMyX01BWAorCisjZW5kaWYgLyogIWRl
ZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykgKi8KKwor
I2VuZGlmIC8qICFfTUFDSElORV9fU1RESU5UX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L190eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDE3NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTWlrZSBC
YXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5Mwor
ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l
bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlz
cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNs
dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3Ju
aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U
UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKglGcm9tOiBAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAorICoJRnJvbTog
QCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0CisgKiAkRnJlZUJTRDogcmVsZW5nLzEx
LjAvc3lzL3g4Ni9pbmNsdWRlL190eXBlcy5oIDMwMTAyOSAyMDE2LTA1LTMxIDA4OjM2OjM5WiBl
ZCAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9fVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVf
X1RZUEVTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBuZWVk
cyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpbmNsdWRlIDxtYWNo
aW5lL19saW1pdHMuaD4KKworI2RlZmluZSBfX05PX1NUUklDVF9BTElHTk1FTlQKKworLyoKKyAq
IEJhc2ljIHR5cGVzIHVwb24gd2hpY2ggbW9zdCBvdGhlciB0eXBlcyBhcmUgYnVpbHQuCisgKi8K
K3R5cGVkZWYJc2lnbmVkIGNoYXIJCV9faW50OF90OwordHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlf
X3VpbnQ4X3Q7Cit0eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBz
aG9ydAkJX191aW50MTZfdDsKK3R5cGVkZWYJaW50CQkJX19pbnQzMl90OwordHlwZWRlZgl1bnNp
Z25lZCBpbnQJCV9fdWludDMyX3Q7CisjaWZkZWYJX19MUDY0X18KK3R5cGVkZWYJbG9uZwkJCV9f
aW50NjRfdDsKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwkJX191aW50NjRfdDsKKyNlbHNlCisjaWZu
ZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRpZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJ
bG9uZyBsb25nCQlfX2ludDY0X3Q7CisjaWZuZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRp
ZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7
CisjZW5kaWYKKworLyoKKyAqIFN0YW5kYXJkIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8KKyNpZmRl
ZglfX0xQNjRfXwordHlwZWRlZglfX2ludDMyX3QJX19jbG9ja190OwkJLyogY2xvY2soKS4uLiAq
LwordHlwZWRlZglfX2ludDY0X3QJX19jcml0aWNhbF90OwordHlwZWRlZglkb3VibGUJCV9fZG91
YmxlX3Q7Cit0eXBlZGVmCWZsb2F0CQlfX2Zsb2F0X3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2lu
dGZwdHJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9faW50cHRyX3Q7CisjZWxzZQordHlwZWRlZgl1
bnNpZ25lZCBsb25nCV9fY2xvY2tfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9fY3JpdGljYWxfdDsK
K3R5cGVkZWYJbG9uZyBkb3VibGUJX19kb3VibGVfdDsKK3R5cGVkZWYJbG9uZyBkb3VibGUJX19m
bG9hdF90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRmcHRyX3Q7Cit0eXBlZGVmCV9faW50MzJf
dAlfX2ludHB0cl90OworI2VuZGlmCit0eXBlZGVmCV9faW50NjRfdAlfX2ludG1heF90OwordHlw
ZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDhfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9faW50X2Zh
c3QxNl90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9faW50
NjRfdAlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX19pbnQ4X3QJX19pbnRfbGVhc3Q4X3Q7Cit0
eXBlZGVmCV9faW50MTZfdAlfX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX2lu
dF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2ludF9sZWFzdDY0X3Q7CisjaWZkZWYJ
X19MUDY0X18KK3R5cGVkZWYJX19pbnQ2NF90CV9fcHRyZGlmZl90OwkJLyogcHRyMSAtIHB0cjIg
Ki8KK3R5cGVkZWYJX19pbnQ2NF90CV9fcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9f
c2Vnc3pfdDsJCS8qIHNlZ21lbnQgc2l6ZSAoaW4gcGFnZXMpICovCit0eXBlZGVmCV9fdWludDY0
X3QJX19zaXplX3Q7CQkvKiBzaXplb2YoKSAqLwordHlwZWRlZglfX2ludDY0X3QJX19zc2l6ZV90
OwkJLyogYnl0ZSBjb3VudCBvciBlcnJvciAqLwordHlwZWRlZglfX2ludDY0X3QJX190aW1lX3Q7
CQkvKiB0aW1lKCkuLi4gKi8KK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRmcHRyX3Q7Cit0eXBl
ZGVmCV9fdWludDY0X3QJX191aW50cHRyX3Q7CisjZWxzZQordHlwZWRlZglfX2ludDMyX3QJX19w
dHJkaWZmX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3JlZ2lzdGVyX3Q7Cit0eXBlZGVmCV9faW50
MzJfdAlfX3NlZ3N6X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX19zaXplX3Q7Cit0eXBlZGVmCV9f
aW50MzJfdAlfX3NzaXplX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3RpbWVfdDsKK3R5cGVkZWYJ
X191aW50MzJfdAlfX3VpbnRmcHRyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50cHRyX3Q7
CisjZW5kaWYKK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRtYXhfdDsKK3R5cGVkZWYJX191aW50
MzJfdAlfX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3VpbnRfZmFzdDE2X3Q7
Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50X2Zhc3QzMl90OwordHlwZWRlZglfX3VpbnQ2NF90
CV9fdWludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50OF90CV9fdWludF9sZWFzdDhfdDsKK3R5
cGVkZWYJX191aW50MTZfdAlfX3VpbnRfbGVhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CV9f
dWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX191aW50X2xlYXN0NjRfdDsKKyNp
ZmRlZglfX0xQNjRfXwordHlwZWRlZglfX3VpbnQ2NF90CV9fdV9yZWdpc3Rlcl90OwordHlwZWRl
ZglfX3VpbnQ2NF90CV9fdm1fb2Zmc2V0X3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX192bV9wYWRk
cl90OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fc2l6ZV90OworI2Vsc2UKK3R5cGVkZWYJX191
aW50MzJfdAlfX3VfcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3ZtX29mZnNldF90
OworI2lmZGVmIFBBRQordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGFkZHJfdDsKKyNlbHNlCit0
eXBlZGVmCV9fdWludDMyX3QJX192bV9wYWRkcl90OworI2VuZGlmCit0eXBlZGVmCV9fdWludDMy
X3QJX192bV9zaXplX3Q7CisjZW5kaWYKK3R5cGVkZWYJX19pbnQ2NF90CV9fdm1fb29mZnNldF90
OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGluZGV4X3Q7Cit0eXBlZGVmCWludAkJX19fd2No
YXJfdDsKKworI2RlZmluZQlfX1dDSEFSX01JTglfX0lOVF9NSU4JLyogbWluIHZhbHVlIGZvciBh
IHdjaGFyX3QgKi8KKyNkZWZpbmUJX19XQ0hBUl9NQVgJX19JTlRfTUFYCS8qIG1heCB2YWx1ZSBm
b3IgYSB3Y2hhcl90ICovCisKKy8qCisgKiBVbnVzdWFsIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8K
KyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUwordHlwZWRlZglfX2J1aWx0aW5fdmFf
bGlzdAlfX3ZhX2xpc3Q7CS8qIGludGVybmFsbHkga25vd24gdG8gZ2NjICovCisjZWxzZQorI2lm
ZGVmIF9fTFA2NF9fCitzdHJ1Y3QgX19zX3ZhX2xpc3QgeworCV9fdWludDMyX3QJX3BhZDFbMl07
CS8qIGdwX29mZnNldCwgZnBfb2Zmc2V0ICovCisJX191aW50NjRfdAlfcGFkMlsyXTsJLyogb3Zl
cmZsb3dfYXJnX2FyZWEsIHJlZ19zYXZlX2FyZWEgKi8KK307Cit0eXBlZGVmCXN0cnVjdCBfX3Nf
dmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Cisj
ZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19HTlVDX1ZBX0xJU1RfQ09NUEFUSUJJTElUWSkg
JiYgIWRlZmluZWQoX19HTlVDX1ZBX0xJU1QpIFwKKyAgICAmJiAhZGVmaW5lZChfX05PX0dOVUNf
VkFfTElTVCkKKyNkZWZpbmUgX19HTlVDX1ZBX0xJU1QKK3R5cGVkZWYgX192YV9saXN0CQlfX2du
dWNfdmFfbGlzdDsJLyogY29tcGF0aWJpbGl0eSB3L0dOVSBoZWFkZXJzKi8KKyNlbmRpZgorCisj
ZW5kaWYgLyogIV9NQUNISU5FX19UWVBFU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9hY3BpY2FfbWFjaGRlcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2FjcGljYV9tYWNoZGVwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAky
MDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDg4IEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAwMiBNaXRzdXJ1IElXQVNBS0kKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9hY3BpY2Ff
bWFjaGRlcC5oIDI5ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3BpY2FfbWFjaGRlcC5oIC0gYXJjaC1z
cGVjaWZpYyBkZWZpbmVzLCBldGMuCisgKiAgICAgICAkUmV2aXNpb24kCisgKgorICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCisjaWZuZGVmIF9fQUNQSUNBX01BQ0hERVBfSF9fCisjZGVmaW5lCV9f
QUNQSUNBX01BQ0hERVBfSF9fCisKKyNpZmRlZiBfS0VSTkVMCisvKgorICogQ2FsbGluZyBjb252
ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRv
IGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAg
IC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzIAorICogQUNQSV9JTlRFUk5BTF9YRkFDRSAgICAg
IC0gSW50ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRSAg
LSBJbnRlcm5hbCB2YXJpYWJsZS1wYXJhbWV0ZXIgbGlzdCBpbnRlcmZhY2VzCisgKi8KKyNkZWZp
bmUJQUNQSV9TWVNURU1fWEZBQ0UKKyNkZWZpbmUJQUNQSV9FWFRFUk5BTF9YRkFDRQorI2RlZmlu
ZQlBQ1BJX0lOVEVSTkFMX1hGQUNFCisjZGVmaW5lCUFDUElfSU5URVJOQUxfVkFSX1hGQUNFCisK
Ky8qIEFzbSBtYWNyb3MgKi8KKworI2RlZmluZQlBQ1BJX0FTTV9NQUNST1MKKyNkZWZpbmUJQlJF
QUtQT0lOVDMKKyNkZWZpbmUJQUNQSV9ESVNBQkxFX0lSUVMoKSBkaXNhYmxlX2ludHIoKQorI2Rl
ZmluZQlBQ1BJX0VOQUJMRV9JUlFTKCkgIGVuYWJsZV9pbnRyKCkKKworI2RlZmluZQlBQ1BJX0ZM
VVNIX0NQVV9DQUNIRSgpCXdiaW52ZCgpCisKKy8qIFNlY3Rpb24gNS4yLjEwLjE6IGdsb2JhbCBs
b2NrIGFjcXVpcmUvcmVsZWFzZSBmdW5jdGlvbnMgKi8KK2ludAlhY3BpX2FjcXVpcmVfZ2xvYmFs
X2xvY2sodm9sYXRpbGUgdWludDMyX3QgKik7CitpbnQJYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2Nr
KHZvbGF0aWxlIHVpbnQzMl90ICopOworI2RlZmluZQlBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0so
R0xwdHIsIEFjcSkJZG8gewkJCVwKKwkoQWNxKSA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygm
KChHTHB0ciktPkdsb2JhbExvY2spKTsJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJQUNQSV9SRUxF
QVNFX0dMT0JBTF9MT0NLKEdMcHRyLCBBY3EpCWRvIHsJCQlcCisJKEFjcSkgPSBhY3BpX3JlbGVh
c2VfZ2xvYmFsX2xvY2soJigoR0xwdHIpLT5HbG9iYWxMb2NrKSk7CVwKK30gd2hpbGUgKDApCisg
CitlbnVtIGludHJfdHJpZ2dlcjsKK2VudW0gaW50cl9wb2xhcml0eTsKKwordm9pZAlhY3BpX1Nl
dERlZmF1bHRJbnRyTW9kZWwoaW50IG1vZGVsKTsKK3ZvaWQJYWNwaV9jcHVfYzEodm9pZCk7Cit2
b2lkCWFjcGlfY3B1X2lkbGVfbXdhaXQodWludDMyX3QgbXdhaXRfaGludCk7Cit2b2lkCSphY3Bp
X21hcF90YWJsZSh2bV9wYWRkcl90IHBhLCBjb25zdCBjaGFyICpzaWcpOwordm9pZAlhY3BpX3Vu
bWFwX3RhYmxlKHZvaWQgKnRhYmxlKTsKK3ZtX3BhZGRyX3QgYWNwaV9maW5kX3RhYmxlKGNvbnN0
IGNoYXIgKnNpZyk7Cit2b2lkCW1hZHRfcGFyc2VfaW50ZXJydXB0X3ZhbHVlcyh2b2lkICplbnRy
eSwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgKnRyaWcsIGVudW0gaW50cl9wb2xhcml0eSAqcG9s
KTsKKworZXh0ZXJuIGludCBtYWR0X2ZvdW5kX3NjaV9vdmVycmlkZTsKKworI2VuZGlmIC8qIF9L
RVJORUwgKi8KKworI2VuZGlmIC8qIF9fQUNQSUNBX01BQ0hERVBfSF9fICovCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2FwaWNyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcGljcmVnLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1MTYgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAxOTk2LCBieSBQZXRlciBXZW1tIGFuZCBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1h
eSBOT1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2
ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoK
KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYXBpY3JlZy5oIDI5NzM0
NyAyMDE2LTAzLTI4IDA5OjQzOjQwWiBraWIgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDUkVH
X0hfCisjZGVmaW5lIF9YODZfQVBJQ1JFR19IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMg
ZGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFBlbnRpdW0gUDU0QysgQnVpbHQtaW4gQVBJQwor
ICogKEFkdmFuY2VkIHByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikKKyAqIAorICog
QmFzZSBBZGRyZXNzIG9mIEJ1aWx0LWluIEFQSUMgaW4gbWVtb3J5IGxvY2F0aW9uCisgKiBpcyAw
eGZlZTAwMDAwLgorICogCisgKiBNYXAgb2YgQVBJQyBSZWdpc3RlcnM6CisgKiAKKyAqIE9mZnNl
dCAoaGV4KSAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgIFJlYWQvV3JpdGUgc3Rh
dGUKKyAqIDAwMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDEwICAgICAgICAgICAgIFJlc2Vy
dmVkCisgKiAwMjAgSUQgICAgICAgICAgTG9jYWwgQVBJQyBJRCAgICAgICAgICAgICAgICAgICBS
L1cKKyAqIDAzMCBWRVIgICAgICAgICBMb2NhbCBBUElDIFZlcnNpb24gICAgICAgICAgICAgIFIK
KyAqIDA0MCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDUwICAgICAgICAgICAgIFJlc2VydmVk
CisgKiAwNjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDA3MCAgICAgICAgICAgICBSZXNlcnZl
ZAorICogMDgwICAgICAgICAgICAgIFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgUi9X
CisgKiAwOTAgICAgICAgICAgICAgQXJiaXRyYXRpb24gUHJpb3JpdHkgUmVnaXN0ZXIgICBSCisg
KiAwQTAgICAgICAgICAgICAgUHJvY2Vzc29yIFByaW9yaXR5IFJlZ2lzdGVyICAgICBSCisgKiAw
QjAgICAgICAgICAgICAgRU9JIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICBXCisgKiAwQzAg
UlJSICAgICAgICAgUmVtb3RlIHJlYWQgICAgICAgICAgICAgICAgICAgICBSCisgKiAwRDAgICAg
ICAgICAgICAgTG9naWNhbCBEZXN0aW5hdGlvbiAgICAgICAgICAgICBSL1cKKyAqIDBFMCAgICAg
ICAgICAgICBEZXN0aW5hdGlvbiBGb3JtYXQgUmVnaXN0ZXIgICAgIDAuLjI3IFI7ICAyOC4uMzEg
Ui9XCisgKiAwRjAgU1ZSICAgICAgICAgU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWcuICAw
Li4zICBSOyAgNC4uOSAgIFIvVworICogMTAwICAgICAgICAgICAgIElTUiAgMDAwLTAzMSAgICAg
ICAgICAgICAgICAgICAgUgorICogMTEwICAgICAgICAgICAgIElTUiAgMDMyLTA2MyAgICAgICAg
ICAgICAgICAgICAgUgorICogMTIwICAgICAgICAgICAgIElTUiAgMDY0LTA5NSAgICAgICAgICAg
ICAgICAgICAgUgorICogMTMwICAgICAgICAgICAgIElTUiAgMDk1LTEyOCAgICAgICAgICAgICAg
ICAgICAgUgorICogMTQwICAgICAgICAgICAgIElTUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAg
ICAgUgorICogMTUwICAgICAgICAgICAgIElTUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAg
UgorICogMTYwICAgICAgICAgICAgIElTUiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgor
ICogMTcwICAgICAgICAgICAgIElTUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICog
MTgwICAgICAgICAgICAgIFRNUiAgMDAwLTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMTkw
ICAgICAgICAgICAgIFRNUiAgMDMyLTA2MyAgICAgICAgICAgICAgICAgICAgUgorICogMUEwICAg
ICAgICAgICAgIFRNUiAgMDY0LTA5NSAgICAgICAgICAgICAgICAgICAgUgorICogMUIwICAgICAg
ICAgICAgIFRNUiAgMDk1LTEyOCAgICAgICAgICAgICAgICAgICAgUgorICogMUMwICAgICAgICAg
ICAgIFRNUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAgICAgUgorICogMUQwICAgICAgICAgICAg
IFRNUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAgUgorICogMUUwICAgICAgICAgICAgIFRN
UiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgorICogMUYwICAgICAgICAgICAgIFRNUiAg
MjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICogMjAwICAgICAgICAgICAgIElSUiAgMDAw
LTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMjEwICAgICAgICAgICAgIElSUiAgMDMyLTA2
MyAgICAgICAgICAgICAgICAgICAgUgorICogMjIwICAgICAgICAgICAgIElSUiAgMDY0LTA5NSAg
ICAgICAgICAgICAgICAgICAgUgorICogMjMwICAgICAgICAgICAgIElSUiAgMDk1LTEyOCAgICAg
ICAgICAgICAgICAgICAgUgorICogMjQwICAgICAgICAgICAgIElSUiAgMTI4LTE1OSAgICAgICAg
ICAgICAgICAgICAgUgorICogMjUwICAgICAgICAgICAgIElSUiAgMTYwLTE5MSAgICAgICAgICAg
ICAgICAgICAgUgorICogMjYwICAgICAgICAgICAgIElSUiAgMTkyLTIyMyAgICAgICAgICAgICAg
ICAgICAgUgorICogMjcwICAgICAgICAgICAgIElSUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAg
ICAgUgorICogMjgwICAgICAgICAgICAgIEVycm9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAg
UgorICogMjkwICAgICAgICAgICAgIFJlc2VydmVkCisgKiAyQTAgICAgICAgICAgICAgUmVzZXJ2
ZWQKKyAqIDJCMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMkMwICAgICAgICAgICAgIFJlc2Vy
dmVkCisgKiAyRDAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDJFMCAgICAgICAgICAgICBSZXNl
cnZlZAorICogMkYwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoQ01DSSkgICAgICAg
Ui9XCisgKiAzMDAgSUNSX0xPVyAgICAgSW50ZXJydXB0IENvbW1hbmQgUmVnLiAoMC0zMSkgICBS
L1cKKyAqIDMxMCBJQ1JfSEkgICAgICBJbnRlcnJ1cHQgQ29tbWFuZCBSZWcuICgzMi02MykgIFIv
VworICogMzIwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoVGltZXIpICAgICAgUi9X
CisgKiAzMzAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChUaGVybWFsKSAgICBSL1cg
KFBJVispCisgKiAzNDAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChQZXJmb3JtYW5j
ZSkgUi9XIChQNispCisgKiAzNTAgTFZUMSAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChMSU5U
MCkgICAgICBSL1cKKyAqIDM2MCBMVlQyICAgICAgICBMb2NhbCBWZWN0b3IgVGFibGUgKExJTlQx
KSAgICAgIFIvVworICogMzcwIExWVDMgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoRVJST1Ip
ICAgICAgUi9XCisgKiAzODAgICAgICAgICAgICAgSW5pdGlhbCBDb3VudCBSZWcuIGZvciBUaW1l
ciAgICBSL1cKKyAqIDM5MCAgICAgICAgICAgICBDdXJyZW50IENvdW50IG9mIFRpbWVyICAgICAg
ICAgIFIKKyAqIDNBMCAgICAgICAgICAgICBSZXNlcnZlZAorICogM0IwICAgICAgICAgICAgIFJl
c2VydmVkCisgKiAzQzAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDNEMCAgICAgICAgICAgICBS
ZXNlcnZlZAorICogM0UwICAgICAgICAgICAgIFRpbWVyIERpdmlkZSBDb25maWd1cmF0aW9uIFJl
Zy4gUi9XCisgKiAzRjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqLworCisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKKyAqIGdsb2JhbCBkZWZpbmVzLCBldGMuCisgKi8KKworCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIHN0cnVjdHVyZQorICovCisKKyNpZm5kZWYgTE9D
T1JFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgUEFEMwlpbnQgOiAzMjsgaW50
IDogMzI7IGludCA6IDMyCisjZGVmaW5lIFBBRDQJaW50IDogMzI7IGludCA6IDMyOyBpbnQgOiAz
MjsgaW50IDogMzIKKworc3RydWN0IExBUElDIHsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKKwkv
KiByZXNlcnZlZCAqLwkJUEFENDsKKwl1X2ludDMyX3QgaWQ7CQlQQUQzOworCXVfaW50MzJfdCB2
ZXJzaW9uOwlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ
QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVf
aW50MzJfdCB0cHI7CQlQQUQzOworCXVfaW50MzJfdCBhcHI7CQlQQUQzOworCXVfaW50MzJfdCBw
cHI7CQlQQUQzOworCXVfaW50MzJfdCBlb2k7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0
OworCXVfaW50MzJfdCBsZHI7CQlQQUQzOworCXVfaW50MzJfdCBkZnI7CQlQQUQzOworCXVfaW50
MzJfdCBzdnI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IwOwkJUEFEMzsKKwl1X2ludDMyX3QgaXNy
MTsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IzOwkJUEFE
MzsKKwl1X2ludDMyX3QgaXNyNDsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjU7CQlQQUQzOworCXVf
aW50MzJfdCBpc3I2OwkJUEFEMzsKKwl1X2ludDMyX3QgaXNyNzsJCVBBRDM7CisJdV9pbnQzMl90
IHRtcjA7CQlQQUQzOworCXVfaW50MzJfdCB0bXIxOwkJUEFEMzsKKwl1X2ludDMyX3QgdG1yMjsJ
CVBBRDM7CisJdV9pbnQzMl90IHRtcjM7CQlQQUQzOworCXVfaW50MzJfdCB0bXI0OwkJUEFEMzsK
Kwl1X2ludDMyX3QgdG1yNTsJCVBBRDM7CisJdV9pbnQzMl90IHRtcjY7CQlQQUQzOworCXVfaW50
MzJfdCB0bXI3OwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMDsJCVBBRDM7CisJdV9pbnQzMl90IGly
cjE7CQlQQUQzOworCXVfaW50MzJfdCBpcnIyOwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMzsJCVBB
RDM7CisJdV9pbnQzMl90IGlycjQ7CQlQQUQzOworCXVfaW50MzJfdCBpcnI1OwkJUEFEMzsKKwl1
X2ludDMyX3QgaXJyNjsJCVBBRDM7CisJdV9pbnQzMl90IGlycjc7CQlQQUQzOworCXVfaW50MzJf
dCBlc3I7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ
QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8q
IHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVfaW50MzJfdCBs
dnRfY21jaTsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX2xvOwlQQUQzOworCXVfaW50MzJfdCBpY3Jf
aGk7CVBBRDM7CisJdV9pbnQzMl90IGx2dF90aW1lcjsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0X3Ro
ZXJtYWw7CVBBRDM7CisJdV9pbnQzMl90IGx2dF9wY2ludDsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0
X2xpbnQwOwlQQUQzOworCXVfaW50MzJfdCBsdnRfbGludDE7CVBBRDM7CisJdV9pbnQzMl90IGx2
dF9lcnJvcjsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX3RpbWVyOwlQQUQzOworCXVfaW50MzJfdCBj
Y3JfdGltZXI7CVBBRDM7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8J
CVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJ
dV9pbnQzMl90IGRjcl90aW1lcjsJUEFEMzsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKK307CisK
K3R5cGVkZWYgc3RydWN0IExBUElDIGxhcGljX3Q7CisKK2VudW0gTEFQSUNfUkVHSVNURVJTIHsK
KwlMQVBJQ19JRAk9IDB4MiwKKwlMQVBJQ19WRVJTSU9OCT0gMHgzLAorCUxBUElDX1RQUgk9IDB4
OCwKKwlMQVBJQ19BUFIJPSAweDksCisJTEFQSUNfUFBSCT0gMHhhLAorCUxBUElDX0VPSQk9IDB4
YiwKKwlMQVBJQ19MRFIJPSAweGQsCisJTEFQSUNfREZSCT0gMHhlLCAvKiBOb3QgaW4geDJBUElD
ICovCisJTEFQSUNfU1ZSCT0gMHhmLAorCUxBUElDX0lTUjAJPSAweDEwLAorCUxBUElDX0lTUjEJ
PSAweDExLAorCUxBUElDX0lTUjIJPSAweDEyLAorCUxBUElDX0lTUjMJPSAweDEzLAorCUxBUElD
X0lTUjQJPSAweDE0LAorCUxBUElDX0lTUjUJPSAweDE1LAorCUxBUElDX0lTUjYJPSAweDE2LAor
CUxBUElDX0lTUjcJPSAweDE3LAorCUxBUElDX1RNUjAJPSAweDE4LAorCUxBUElDX1RNUjEJPSAw
eDE5LAorCUxBUElDX1RNUjIJPSAweDFhLAorCUxBUElDX1RNUjMJPSAweDFiLAorCUxBUElDX1RN
UjQJPSAweDFjLAorCUxBUElDX1RNUjUJPSAweDFkLAorCUxBUElDX1RNUjYJPSAweDFlLAorCUxB
UElDX1RNUjcJPSAweDFmLAorCUxBUElDX0lSUjAJPSAweDIwLAorCUxBUElDX0lSUjEJPSAweDIx
LAorCUxBUElDX0lSUjIJPSAweDIyLAorCUxBUElDX0lSUjMJPSAweDIzLAorCUxBUElDX0lSUjQJ
PSAweDI0LAorCUxBUElDX0lSUjUJPSAweDI1LAorCUxBUElDX0lSUjYJPSAweDI2LAorCUxBUElD
X0lSUjcJPSAweDI3LAorCUxBUElDX0VTUgk9IDB4MjgsCisJTEFQSUNfTFZUX0NNQ0kJPSAweDJm
LAorCUxBUElDX0lDUl9MTwk9IDB4MzAsCisJTEFQSUNfSUNSX0hJCT0gMHgzMSwgLyogTm90IGlu
IHgyQVBJQyAqLworCUxBUElDX0xWVF9USU1FUgk9IDB4MzIsCisJTEFQSUNfTFZUX1RIRVJNQUwg
PSAweDMzLAorCUxBUElDX0xWVF9QQ0lOVAk9IDB4MzQsCisJTEFQSUNfTFZUX0xJTlQwCT0gMHgz
NSwKKwlMQVBJQ19MVlRfTElOVDEJPSAweDM2LAorCUxBUElDX0xWVF9FUlJPUgk9IDB4MzcsCisJ
TEFQSUNfSUNSX1RJTUVSCT0gMHgzOCwKKwlMQVBJQ19DQ1JfVElNRVIJPSAweDM5LAorCUxBUElD
X0RDUl9USU1FUgk9IDB4M2UsCisJTEFQSUNfU0VMRl9JUEkJPSAweDNmLCAvKiBPbmx5IGluIHgy
QVBJQyAqLworfTsKKworLyoKKyAqIFRoZSBMQVBJQ19TRUxGX0lQSSByZWdpc3RlciBvbmx5IGV4
aXN0cyBpbiB4MkFQSUMgbW9kZS4gIFRoZQorICogZm9ybXVsYSBiZWxvdyBpcyBhcHBsaWNhYmxl
IG9ubHkgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlZ2lvbiwKKyAqIGkuZS4gZm9yIHhBUElDIG1v
ZGUsIHdoZXJlIExBUElDX1NFTEZfSVBJIGZpbmVseSBzZXJ2ZXMgYXMgdGhlCisgKiBhZGRyZXNz
IHBhc3QgZW5kIG9mIHRoZSByZWdpb24uCisgKi8KKyNkZWZpbmUJTEFQSUNfTUVNX1JFR0lPTiAo
TEFQSUNfU0VMRl9JUEkgKiAweDEwKQorCisjZGVmaW5lCUxBUElDX01FTV9NVUwJMHgxMAorCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiBJL08gQVBJQyBzdHJ1Y3R1cmUKKyAqLworCitzdHJ1
Y3QgSU9BUElDIHsKKwl1X2ludDMyX3QgaW9yZWdzZWw7CVBBRDM7CisJdV9pbnQzMl90IGlvd2lu
OwlQQUQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgSU9BUElDIGlvYXBpY190OworCisjdW5kZWYg
UEFENAorI3VuZGVmIFBBRDMKKworI2VuZGlmICAvKiAhTE9DT1JFICovCisKKworLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgorICogdmFyaW91cyBjb2RlICdsb2dpY2FsJyB2YWx1ZXMKKyAqLworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIGRlZmluZXMKKyAqLworCisvKiBk
ZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBMT0NBTCAoQ1BVKSBBUElDcyAqLworI2RlZmlu
ZSBERUZBVUxUX0FQSUNfQkFTRQkweGZlZTAwMDAwCisKKy8qIGNvbnN0YW50cyByZWxhdGluZyB0
byBBUElDIElEIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUElDX0lEX01BU0sJCTB4ZmYwMDAwMDAK
KyNkZWZpbmUJQVBJQ19JRF9TSElGVAkJMjQKKyNkZWZpbmUJQVBJQ19JRF9DTFVTVEVSCQkweGYw
CisjZGVmaW5lCUFQSUNfSURfQ0xVU1RFUl9JRAkweDBmCisjZGVmaW5lCUFQSUNfTUFYX0NMVVNU
RVIJMHhlCisjZGVmaW5lCUFQSUNfTUFYX0lOVFJBQ0xVU1RFUl9JRCAzCisjZGVmaW5lCUFQSUNf
SURfQ0xVU1RFUl9TSElGVAk0CisKKy8qIGZpZWxkcyBpbiBWRVIgKi8KKyNkZWZpbmUgQVBJQ19W
RVJfVkVSU0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIEFQSUNfVkVSX01BWExWVAkJMHgwMGZmMDAw
MAorI2RlZmluZSBNQVhMVlRTSElGVAkJMTYKKyNkZWZpbmUgQVBJQ19WRVJfRU9JX1NVUFBSRVNT
SU9OIDB4MDEwMDAwMDAKKworLyogZmllbGRzIGluIExEUiAqLworI2RlZmluZQlBUElDX0xEUl9S
RVNFUlZFRAkweDAwZmZmZmZmCisKKy8qIGZpZWxkcyBpbiBERlIgKi8KKyNkZWZpbmUJQVBJQ19E
RlJfUkVTRVJWRUQJMHgwZmZmZmZmZgorI2RlZmluZQlBUElDX0RGUl9NT0RFTF9NQVNLCTB4ZjAw
MDAwMDAKKyNkZWZpbmUJQVBJQ19ERlJfTU9ERUxfRkxBVAkweGYwMDAwMDAwCisjZGVmaW5lCUFQ
SUNfREZSX01PREVMX0NMVVNURVIJMHgwMDAwMDAwMAorCisvKiBmaWVsZHMgaW4gU1ZSICovCisj
ZGVmaW5lIEFQSUNfU1ZSX1ZFQ1RPUgkJMHgwMDAwMDBmZgorI2RlZmluZSBBUElDX1NWUl9WRUNf
UFJPRwkweDAwMDAwMGYwCisjZGVmaW5lIEFQSUNfU1ZSX1ZFQ19GSVgJMHgwMDAwMDAwZgorI2Rl
ZmluZSBBUElDX1NWUl9FTkFCTEUJCTB4MDAwMDAxMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX1NXRElT
CQkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX1NWUl9TV0VOCQkweDAwMDAwMTAwCisjZGVmaW5l
IEFQSUNfU1ZSX0ZPQ1VTCQkweDAwMDAwMjAwCisjIGRlZmluZSBBUElDX1NWUl9GRU4JCTB4MDAw
MDAwMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX0ZESVMJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQVBJQ19T
VlJfRU9JX1NVUFBSRVNTSU9OIDB4MDAwMDEwMDAKKworLyogZmllbGRzIGluIFRQUiAqLworI2Rl
ZmluZSBBUElDX1RQUl9QUklPCQkweDAwMDAwMGZmCisjIGRlZmluZSBBUElDX1RQUl9JTlQJCTB4
MDAwMDAwZjAKKyMgZGVmaW5lIEFQSUNfVFBSX1NVQgkJMHgwMDAwMDAwZgorCisvKiBmaWVsZHMg
aW4gRVNSICovCisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfQ1NfRVJST1IJCTB4MDAwMDAwMDEKKyNk
ZWZpbmUJQVBJQ19FU1JfUkVDRUlWRV9DU19FUlJPUgkweDAwMDAwMDAyCisjZGVmaW5lCUFQSUNf
RVNSX1NFTkRfQUNDRVBUCQkweDAwMDAwMDA0CisjZGVmaW5lCUFQSUNfRVNSX1JFQ0VJVkVfQUND
RVBUCQkweDAwMDAwMDA4CisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfSUxMRUdBTF9WRUNUT1IJMHgw
MDAwMDAyMAorI2RlZmluZQlBUElDX0VTUl9SRUNFSVZFX0lMTEVHQUxfVkVDVE9SCTB4MDAwMDAw
NDAKKyNkZWZpbmUJQVBJQ19FU1JfSUxMRUdBTF9SRUdJU1RFUgkweDAwMDAwMDgwCisKKy8qIGZp
ZWxkcyBpbiBJQ1JfTE9XICovCisjZGVmaW5lIEFQSUNfVkVDVE9SX01BU0sJMHgwMDAwMDBmZgor
CisjZGVmaW5lIEFQSUNfREVMTU9ERV9NQVNLCTB4MDAwMDA3MDAKKyMgZGVmaW5lIEFQSUNfREVM
TU9ERV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTE9XUFJJTwkweDAw
MDAwMTAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfU01JCTB4MDAwMDAyMDAKKyMgZGVmaW5lIEFQ
SUNfREVMTU9ERV9SUgkweDAwMDAwMzAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTk1JCTB4MDAw
MDA0MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9JTklUCTB4MDAwMDA1MDAKKyMgZGVmaW5lIEFQ
SUNfREVMTU9ERV9TVEFSVFVQCTB4MDAwMDA2MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9SRVNW
CTB4MDAwMDA3MDAKKworI2RlZmluZSBBUElDX0RFU1RNT0RFX01BU0sJMHgwMDAwMDgwMAorIyBk
ZWZpbmUgQVBJQ19ERVNUTU9ERV9QSFkJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUTU9E
RV9MT0cJMHgwMDAwMDgwMAorCisjZGVmaW5lIEFQSUNfREVMU1RBVF9NQVNLCTB4MDAwMDEwMDAK
KyMgZGVmaW5lIEFQSUNfREVMU1RBVF9JRExFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfREVM
U1RBVF9QRU5ECTB4MDAwMDEwMDAKKworI2RlZmluZSBBUElDX1JFU1YxX01BU0sJCTB4MDAwMDIw
MDAKKworI2RlZmluZSBBUElDX0xFVkVMX01BU0sJCTB4MDAwMDQwMDAKKyMgZGVmaW5lIEFQSUNf
TEVWRUxfREVBU1NFUlQJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19MRVZFTF9BU1NFUlQJMHgw
MDAwNDAwMAorCisjZGVmaW5lIEFQSUNfVFJJR01PRF9NQVNLCTB4MDAwMDgwMDAKKyMgZGVmaW5l
IEFQSUNfVFJJR01PRF9FREdFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfVFJJR01PRF9MRVZF
TAkweDAwMDA4MDAwCisKKyNkZWZpbmUgQVBJQ19SUlNUQVRfTUFTSwkweDAwMDMwMDAwCisjIGRl
ZmluZSBBUElDX1JSU1RBVF9JTlZBTElECTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfUlJTVEFU
X0lOUFJPRwkweDAwMDEwMDAwCisjIGRlZmluZSBBUElDX1JSU1RBVF9WQUxJRAkweDAwMDIwMDAw
CisjIGRlZmluZSBBUElDX1JSU1RBVF9SRVNWCTB4MDAwMzAwMDAKKworI2RlZmluZSBBUElDX0RF
U1RfTUFTSwkJMHgwMDBjMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUX0RFU1RGTEQJMHgwMDAwMDAw
MAorIyBkZWZpbmUgQVBJQ19ERVNUX1NFTEYJCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfREVT
VF9BTExJU0VMRgkweDAwMDgwMDAwCisjIGRlZmluZSBBUElDX0RFU1RfQUxMRVNFTEYJMHgwMDBj
MDAwMAorCisjZGVmaW5lIEFQSUNfUkVTVjJfTUFTSwkJMHhmZmYwMDAwMAorCisjZGVmaW5lCUFQ
SUNfSUNSTE9fUkVTVl9NQVNLCShBUElDX1JFU1YxX01BU0sgfCBBUElDX1JFU1YyX01BU0spCisK
Ky8qIGZpZWxkcyBpbiBMVlQxLzIgKi8KKyNkZWZpbmUgQVBJQ19MVlRfVkVDVE9SCQkweDAwMDAw
MGZmCisjZGVmaW5lIEFQSUNfTFZUX0RNCQkweDAwMDAwNzAwCisjIGRlZmluZSBBUElDX0xWVF9E
TV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0xWVF9ETV9TTUkJMHgwMDAwMDIwMAor
IyBkZWZpbmUgQVBJQ19MVlRfRE1fTk1JCTB4MDAwMDA0MDAKKyMgZGVmaW5lIEFQSUNfTFZUX0RN
X0lOSVQJMHgwMDAwMDUwMAorIyBkZWZpbmUgQVBJQ19MVlRfRE1fRVhUSU5UCTB4MDAwMDA3MDAK
KyNkZWZpbmUgQVBJQ19MVlRfRFMJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQVBJQ19MVlRfSUlQUAkJ
MHgwMDAwMjAwMAorI2RlZmluZSBBUElDX0xWVF9JSVBQX0lOVEFMTwkweDAwMDAyMDAwCisjZGVm
aW5lIEFQSUNfTFZUX0lJUFBfSU5UQUhJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQVBJQ19MVlRfUklS
UgkJMHgwMDAwNDAwMAorI2RlZmluZSBBUElDX0xWVF9UTQkJMHgwMDAwODAwMAorI2RlZmluZSBB
UElDX0xWVF9NCQkweDAwMDEwMDAwCisKKworLyogZmllbGRzIGluIExWVCBUaW1lciAqLworI2Rl
ZmluZSBBUElDX0xWVFRfVkVDVE9SCTB4MDAwMDAwZmYKKyNkZWZpbmUgQVBJQ19MVlRUX0RTCQkw
eDAwMDAxMDAwCisjZGVmaW5lIEFQSUNfTFZUVF9NCQkweDAwMDEwMDAwCisjZGVmaW5lIEFQSUNf
TFZUVF9UTQkJMHgwMDA2MDAwMAorIyBkZWZpbmUgQVBJQ19MVlRUX1RNX09ORV9TSE9UCTB4MDAw
MDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9QRVJJT0RJQwkweDAwMDIwMDAwCisjIGRlZmlu
ZSBBUElDX0xWVFRfVE1fVFNDRExUCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9S
U1JWCTB4MDAwNjAwMDAKKworLyogQVBJQyB0aW1lciBjdXJyZW50IGNvdW50ICovCisjZGVmaW5l
CUFQSUNfVElNRVJfTUFYX0NPVU5UCTB4ZmZmZmZmZmYKKworLyogZmllbGRzIGluIFREQ1IgKi8K
KyNkZWZpbmUgQVBJQ19URENSXzIJCTB4MDAKKyNkZWZpbmUgQVBJQ19URENSXzQJCTB4MDEKKyNk
ZWZpbmUgQVBJQ19URENSXzgJCTB4MDIKKyNkZWZpbmUgQVBJQ19URENSXzE2CQkweDAzCisjZGVm
aW5lIEFQSUNfVERDUl8zMgkJMHgwOAorI2RlZmluZSBBUElDX1REQ1JfNjQJCTB4MDkKKyNkZWZp
bmUgQVBJQ19URENSXzEyOAkJMHgwYQorI2RlZmluZSBBUElDX1REQ1JfMQkJMHgwYgorCisvKiBM
VlQgdGFibGUgaW5kaWNlcyAqLworI2RlZmluZQlBUElDX0xWVF9MSU5UMAkJMAorI2RlZmluZQlB
UElDX0xWVF9MSU5UMQkJMQorI2RlZmluZQlBUElDX0xWVF9USU1FUgkJMgorI2RlZmluZQlBUElD
X0xWVF9FUlJPUgkJMworI2RlZmluZQlBUElDX0xWVF9QTUMJCTQKKyNkZWZpbmUJQVBJQ19MVlRf
VEhFUk1BTAk1CisjZGVmaW5lCUFQSUNfTFZUX0NNQ0kJCTYKKyNkZWZpbmUJQVBJQ19MVlRfTUFY
CQlBUElDX0xWVF9DTUNJCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkvTyBBUElDIGRl
ZmluZXMKKyAqLworCisvKiBkZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBhbiBJTyBBUElD
ICovCisjZGVmaW5lIERFRkFVTFRfSU9fQVBJQ19CQVNFCTB4ZmVjMDAwMDAKKworLyogd2luZG93
IHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBJT0FQSUNfV0lORE9XCQkweDEwCisjZGVmaW5l
IElPQVBJQ19FT0lSCQkweDQwCisKKy8qIGluZGV4ZXMgaW50byBJTyBBUElDICovCisjZGVmaW5l
IElPQVBJQ19JRAkJMHgwMAorI2RlZmluZSBJT0FQSUNfVkVSCQkweDAxCisjZGVmaW5lIElPQVBJ
Q19BUkIJCTB4MDIKKyNkZWZpbmUgSU9BUElDX1JFRFRCTAkJMHgxMAorI2RlZmluZSBJT0FQSUNf
UkVEVEJMMAkJSU9BUElDX1JFRFRCTAorI2RlZmluZSBJT0FQSUNfUkVEVEJMMQkJKElPQVBJQ19S
RURUQkwrMHgwMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDIJCShJT0FQSUNfUkVEVEJMKzB4MDQp
CisjZGVmaW5lIElPQVBJQ19SRURUQkwzCQkoSU9BUElDX1JFRFRCTCsweDA2KQorI2RlZmluZSBJ
T0FQSUNfUkVEVEJMNAkJKElPQVBJQ19SRURUQkwrMHgwOCkKKyNkZWZpbmUgSU9BUElDX1JFRFRC
TDUJCShJT0FQSUNfUkVEVEJMKzB4MGEpCisjZGVmaW5lIElPQVBJQ19SRURUQkw2CQkoSU9BUElD
X1JFRFRCTCsweDBjKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMNwkJKElPQVBJQ19SRURUQkwrMHgw
ZSkKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDgJCShJT0FQSUNfUkVEVEJMKzB4MTApCisjZGVmaW5l
IElPQVBJQ19SRURUQkw5CQkoSU9BUElDX1JFRFRCTCsweDEyKQorI2RlZmluZSBJT0FQSUNfUkVE
VEJMMTAJCShJT0FQSUNfUkVEVEJMKzB4MTQpCisjZGVmaW5lIElPQVBJQ19SRURUQkwxMQkJKElP
QVBJQ19SRURUQkwrMHgxNikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDEyCQkoSU9BUElDX1JFRFRC
TCsweDE4KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTMJCShJT0FQSUNfUkVEVEJMKzB4MWEpCisj
ZGVmaW5lIElPQVBJQ19SRURUQkwxNAkJKElPQVBJQ19SRURUQkwrMHgxYykKKyNkZWZpbmUgSU9B
UElDX1JFRFRCTDE1CQkoSU9BUElDX1JFRFRCTCsweDFlKQorI2RlZmluZSBJT0FQSUNfUkVEVEJM
MTYJCShJT0FQSUNfUkVEVEJMKzB4MjApCisjZGVmaW5lIElPQVBJQ19SRURUQkwxNwkJKElPQVBJ
Q19SRURUQkwrMHgyMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDE4CQkoSU9BUElDX1JFRFRCTCsw
eDI0KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTkJCShJT0FQSUNfUkVEVEJMKzB4MjYpCisjZGVm
aW5lIElPQVBJQ19SRURUQkwyMAkJKElPQVBJQ19SRURUQkwrMHgyOCkKKyNkZWZpbmUgSU9BUElD
X1JFRFRCTDIxCQkoSU9BUElDX1JFRFRCTCsweDJhKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMjIJ
CShJT0FQSUNfUkVEVEJMKzB4MmMpCisjZGVmaW5lIElPQVBJQ19SRURUQkwyMwkJKElPQVBJQ19S
RURUQkwrMHgyZSkKKworLyogZmllbGRzIGluIFZFUiAqLworI2RlZmluZSBJT0FSVF9WRVJfVkVS
U0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIElPQVJUX1ZFUl9NQVhSRURJUgkweDAwZmYwMDAwCisj
ZGVmaW5lIE1BWFJFRElSU0hJRlQJCTE2CisKKy8qCisgKiBmaWVsZHMgaW4gdGhlIElPIEFQSUMn
cyByZWRpcmVjdGlvbiB0YWJsZSBlbnRyaWVzCisgKi8KKyNkZWZpbmUgSU9BUlRfREVTVAlBUElD
X0lEX01BU0sJLyogYnJvYWRjYXN0IGFkZHI6IGFsbCBBUElDcyAqLworCisjZGVmaW5lIElPQVJU
X1JFU1YJMHgwMGZlMDAwMAkvKiByZXNlcnZlZCAqLworCisjZGVmaW5lIElPQVJUX0lOVE1BU0sJ
MHgwMDAxMDAwMAkvKiBSL1c6IElOVGVycnVwdCBtYXNrICovCisjIGRlZmluZSBJT0FSVF9JTlRN
Q0xSCTB4MDAwMDAwMDAJLyogICAgICAgY2xlYXIsIGFsbG93IElOVHMgKi8KKyMgZGVmaW5lIElP
QVJUX0lOVE1TRVQJMHgwMDAxMDAwMAkvKiAgICAgICBzZXQsIGluaGliaXQgSU5UcyAqLworCisj
ZGVmaW5lIElPQVJUX1RSR1JNT0QJMHgwMDAwODAwMAkvKiBSL1c6IHRyaWdnZXIgbW9kZSAqLwor
IyBkZWZpbmUgSU9BUlRfVFJHUkVERwkweDAwMDAwMDAwCS8qICAgICAgIGVkZ2UgKi8KKyMgZGVm
aW5lIElPQVJUX1RSR1JMVkwJMHgwMDAwODAwMAkvKiAgICAgICBsZXZlbCAqLworCisjZGVmaW5l
IElPQVJUX1JFTV9JUlIJMHgwMDAwNDAwMAkvKiBSTzogcmVtb3RlIElSUiAqLworCisjZGVmaW5l
IElPQVJUX0lOVFBPTAkweDAwMDAyMDAwCS8qIFIvVzogSU5UIGlucHV0IHBpbiBwb2xhcml0eSAq
LworIyBkZWZpbmUgSU9BUlRfSU5UQUhJCTB4MDAwMDAwMDAJLyogICAgICBhY3RpdmUgaGlnaCAq
LworIyBkZWZpbmUgSU9BUlRfSU5UQUxPCTB4MDAwMDIwMDAJLyogICAgICBhY3RpdmUgbG93ICov
CisKKyNkZWZpbmUgSU9BUlRfREVMSVZTCTB4MDAwMDEwMDAJLyogUk86IGRlbGl2ZXJ5IHN0YXR1
cyAqLworCisjZGVmaW5lIElPQVJUX0RFU1RNT0QJMHgwMDAwMDgwMAkvKiBSL1c6IGRlc3RpbmF0
aW9uIG1vZGUgKi8KKyMgZGVmaW5lIElPQVJUX0RFU1RQSFkJMHgwMDAwMDAwMAkvKiAgICAgIHBo
eXNpY2FsICovCisjIGRlZmluZSBJT0FSVF9ERVNUTE9HCTB4MDAwMDA4MDAJLyogICAgICBsb2dp
Y2FsICovCisKKyNkZWZpbmUgSU9BUlRfREVMTU9ECTB4MDAwMDA3MDAJLyogUi9XOiBkZWxpdmVy
eSBtb2RlICovCisjIGRlZmluZSBJT0FSVF9ERUxGSVhFRAkweDAwMDAwMDAwCS8qICAgICAgIGZp
eGVkICovCisjIGRlZmluZSBJT0FSVF9ERUxMT1BSSQkweDAwMDAwMTAwCS8qICAgICAgIGxvd2Vz
dCBwcmlvcml0eSAqLworIyBkZWZpbmUgSU9BUlRfREVMU01JCTB4MDAwMDAyMDAJLyogICAgICAg
U3lzdGVtIE1hbmFnZW1lbnQgSU5UICovCisjIGRlZmluZSBJT0FSVF9ERUxSU1YxCTB4MDAwMDAz
MDAJLyogICAgICAgcmVzZXJ2ZWQgKi8KKyMgZGVmaW5lIElPQVJUX0RFTE5NSQkweDAwMDAwNDAw
CS8qICAgICAgIE5NSSBzaWduYWwgKi8KKyMgZGVmaW5lIElPQVJUX0RFTElOSVQJMHgwMDAwMDUw
MAkvKiAgICAgICBJTklUIHNpZ25hbCAqLworIyBkZWZpbmUgSU9BUlRfREVMUlNWMgkweDAwMDAw
NjAwCS8qICAgICAgIHJlc2VydmVkICovCisjIGRlZmluZSBJT0FSVF9ERUxFWElOVAkweDAwMDAw
NzAwCS8qICAgICAgIEV4dGVybmFsIElOVGVycnVwdCAqLworCisjZGVmaW5lIElPQVJUX0lOVFZF
QwkweDAwMDAwMGZmCS8qIFIvVzogSU5UZXJydXB0IHZlY3RvciBmaWVsZCAqLworCisjZW5kaWYg
LyogX1g4Nl9BUElDUkVHX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2FwaWN2YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2
YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2YXIuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9hcGljdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIEpvaG4gQmFsZHdpbiA8
amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDog
cmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2FwaWN2YXIuaCAzMDEwMTUgMjAxNi0wNS0zMSAw
NDo0Nzo1M1ogc2VwaGUgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDVkFSX0hfCisjZGVmaW5l
IF9YODZfQVBJQ1ZBUl9IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMgdmFyaWFibGUgZGVm
aW5pdGlvbnMuCisgKi8KKworLyoKKyAqIExheW91dCBvZiBsb2NhbCBBUElDIGludGVycnVwdCB2
ZWN0b3JzOgorICoKKyAqCTB4ZmYgKDI1NSkgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgIHwgMTUgKFNwdXJpb3VzIC8gSVBJcyAvIExvY2FsIEludGVy
cnVwdHMpCisgKgkweGYwICgyNDApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICB8IDE0IChJL08gSW50ZXJydXB0cyAvIFRpbWVyKQorICoJMHhlMCAo
MjI0KSAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
fCAxMyAoSS9PIEludGVycnVwdHMpCisgKgkweGQwICgyMDgpICArLS0tLS0tLS0tLS0tLSsKKyAq
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDEyIChJL08gSW50ZXJydXB0cykKKyAq
CTB4YzAgKDE5MikgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgIHwgMTEgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHhiMCAoMTc2KSAgKy0tLS0tLS0tLS0t
LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxMCAoSS9PIEludGVycnVw
dHMpCisgKgkweGEwICgxNjApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICB8IDkgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg5MCAoMTQ0KSAgKy0tLS0t
LS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA4IChJL08gSW50
ZXJydXB0cyAvIFN5c3RlbSBDYWxscykKKyAqCTB4ODAgKDEyOCkgICstLS0tLS0tLS0tLS0tKwor
ICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgNyAoSS9PIEludGVycnVwdHMpCisg
KgkweDcwICgxMTIpICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICB8IDYgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg2MCAoOTYpICAgKy0tLS0tLS0tLS0t
LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA1IChJL08gSW50ZXJydXB0
cykKKyAqCTB4NTAgKDgwKSAgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgIHwgNCAoSS9PIEludGVycnVwdHMpCisgKgkweDQwICg2NCkgICArLS0tLS0t
LS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDMgKEkvTyBJbnRl
cnJ1cHRzKQorICoJMHgzMCAoNDgpICAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgfCAyIChBVFBJQyBJbnRlcnJ1cHRzKQorICoJMHgyMCAoMzIpICAg
Ky0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxIChF
eGNlcHRpb25zLCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgxMCAoMTYpICAgKy0tLS0tLS0t
LS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAwIChFeGNlcHRpb25z
LCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgwMCAoMCkgICAgKy0tLS0tLS0tLS0tLS0rCisg
KgorICogTm90ZTogMHg4MCBuZWVkcyB0byBiZSBoYW5kbGVkIHNwZWNpYWxseSBhbmQgbm90IGFs
bG9jYXRlZCB0byBhbgorICogSS9PIGRldmljZSEKKyAqLworCisjZGVmaW5lCU1BWF9BUElDX0lE
CTB4ZmUKKyNkZWZpbmUJQVBJQ19JRF9BTEwJMHhmZgorCisvKiBJL08gSW50ZXJydXB0cyBhcmUg
dXNlZCBmb3IgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIElTQSwgUENJLCBldGMuICovCisjZGVm
aW5lCUFQSUNfSU9fSU5UUwkoSURUX0lPX0lOVFMgKyAxNikKKyNkZWZpbmUJQVBJQ19OVU1fSU9J
TlRTCTE5MQorCisvKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIHVzZWQgZm9yIGNsb2NrIGhhbmRs
aW5nIGFuZCBkcml2ZXMgaGFyZGNsb2NrLCBldGMuICovCisjZGVmaW5lCUFQSUNfVElNRVJfSU5U
CShBUElDX0lPX0lOVFMgKyBBUElDX05VTV9JT0lOVFMpCisKKy8qICAKKyAqKioqKioqKioqKioq
KioqKioqKiogISEhIFdBUk5JTkcgISEhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
ICogRWFjaCBsb2NhbCBhcGljIGhhcyBhbiBpbnRlcnJ1cHQgcmVjZWl2ZSBmaWZvIHRoYXQgaXMg
dHdvIGVudHJpZXMgZGVlcAorICogZm9yIGVhY2ggaW50ZXJydXB0IHByaW9yaXR5IGNsYXNzICho
aWdoZXIgNCBiaXRzIG9mIGludGVycnVwdCB2ZWN0b3IpLgorICogT25jZSB0aGUgZmlmbyBpcyBm
dWxsIHRoZSBBUElDIGNhbiBubyBsb25nZXIgcmVjZWl2ZSBpbnRlcnJ1cHRzIGZvciB0aGlzCisg
KiBjbGFzcyBhbmQgc2VuZGluZyBJUElzIGZyb20gb3RoZXIgQ1BVcyB3aWxsIGJlIGJsb2NrZWQu
CisgKiBUbyBhdm9pZCBkZWFkbG9ja3MgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiB0d28g
SVBJIGludGVycnVwdHMKKyAqIHBlbmRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAqIEN1cnJlbnRs
eSB0aGlzIGlzIGd1YXJhbnRlZWQgYnkgZGl2aWRpbmcgdGhlIElQSXMgaW4gdHdvIGdyb3VwcyB0
aGF0IGhhdmUgCisgKiBlYWNoIGF0IG1vc3Qgb25lIElQSSBpbnRlcnJ1cHQgcGVuZGluZy4gVGhl
IGZpcnN0IGdyb3VwIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNtcF9pcGlfbXR4IGFuZCB3YWl0
cyBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIElQSSAoT25seSBvbmUgSVBJIHVzZXIgCisgKiBh
dCBhIHRpbWUpIFRoZSBzZWNvbmQgZ3JvdXAgdXNlcyBhIHNpbmdsZSBpbnRlcnJ1cHQgYW5kIGEg
Yml0bWFwIHRvIGF2b2lkCisgKiByZWR1bmRhbnQgSVBJIGludGVycnVwdHMuCisgKi8gCisKKy8q
IEludGVycnVwdHMgZm9yIGxvY2FsIEFQSUMgTFZUIGVudHJpZXMgb3RoZXIgdGhhbiB0aGUgdGlt
ZXIuICovCisjZGVmaW5lCUFQSUNfTE9DQUxfSU5UUwkyNDAKKyNkZWZpbmUJQVBJQ19FUlJPUl9J
TlQJQVBJQ19MT0NBTF9JTlRTCisjZGVmaW5lCUFQSUNfVEhFUk1BTF9JTlQgKEFQSUNfTE9DQUxf
SU5UUyArIDEpCisjZGVmaW5lCUFQSUNfQ01DX0lOVAkoQVBJQ19MT0NBTF9JTlRTICsgMikKKyNk
ZWZpbmUJQVBJQ19JUElfSU5UUwkoQVBJQ19MT0NBTF9JTlRTICsgMykKKworI2RlZmluZQlJUElf
UkVOREVaVk9VUwkoQVBJQ19JUElfSU5UUykJCS8qIEludGVyLUNQVSByZW5kZXp2b3VzLiAqLwor
I2RlZmluZQlJUElfSU5WTFRMQgkoQVBJQ19JUElfSU5UUyArIDEpCS8qIFRMQiBTaG9vdGRvd24g
SVBJcyAqLworI2RlZmluZQlJUElfSU5WTFBHCShBUElDX0lQSV9JTlRTICsgMikKKyNkZWZpbmUJ
SVBJX0lOVkxSTkcJKEFQSUNfSVBJX0lOVFMgKyAzKQorI2RlZmluZQlJUElfSU5WTENBQ0hFCShB
UElDX0lQSV9JTlRTICsgNCkKKy8qIFZlY3RvciB0byBoYW5kbGUgYml0bWFwIGJhc2VkIElQSXMg
Ki8KKyNkZWZpbmUJSVBJX0JJVE1BUF9WRUNUT1IJKEFQSUNfSVBJX0lOVFMgKyA1KSAKKworLyog
SVBJcyBoYW5kbGVkIGJ5IElQSV9CSVRNQVBfVkVDVE9SICovCisjZGVmaW5lCUlQSV9BU1QJCTAg
CS8qIEdlbmVyYXRlIHNvZnR3YXJlIHRyYXAuICovCisjZGVmaW5lIElQSV9QUkVFTVBUICAgICAx
CisjZGVmaW5lIElQSV9IQVJEQ0xPQ0sgICAyCisjZGVmaW5lIElQSV9CSVRNQVBfTEFTVCBJUElf
SEFSRENMT0NLCisjZGVmaW5lIElQSV9JU19CSVRNQVBFRCh4KSAoKHgpIDw9IElQSV9CSVRNQVBf
TEFTVCkKKworI2RlZmluZQlJUElfU1RPUAkoQVBJQ19JUElfSU5UUyArIDYpCS8qIFN0b3AgQ1BV
IHVudGlsIHJlc3RhcnRlZC4gKi8KKyNkZWZpbmUJSVBJX1NVU1BFTkQJKEFQSUNfSVBJX0lOVFMg
KyA3KQkvKiBTdXNwZW5kIENQVSB1bnRpbCByZXN0YXJ0ZWQuICovCisjaWZkZWYgX19pMzg2X18K
KyNkZWZpbmUJSVBJX0xBWllQTUFQCShBUElDX0lQSV9JTlRTICsgOCkJLyogTGF6eSBwbWFwIHJl
bGVhc2UuICovCisjZGVmaW5lCUlQSV9EWU5fRklSU1QJKEFQSUNfSVBJX0lOVFMgKyA5KQorI2Vs
c2UKKyNkZWZpbmUJSVBJX0RZTl9GSVJTVAkoQVBJQ19JUElfSU5UUyArIDgpCisjZW5kaWYKKyNk
ZWZpbmUJSVBJX0RZTl9MQVNUCSgyNTMpCQkJLyogSVBJcyBhbGxvY2F0ZWQgYXQgcnVudGltZSAq
LworCisvKgorICogSVBJX1NUT1BfSEFSRCBkb2VzIG5vdCBuZWVkIHRvIG9jY3VweSBhIHNsb3Qg
aW4gdGhlIElQSSB2ZWN0b3Igc3BhY2Ugc2luY2UKKyAqIGl0IGlzIGRlbGl2ZXJlZCB1c2luZyBh
biBOTUkgYW55d2F5cy4KKyAqLworI2RlZmluZQlJUElfTk1JX0ZJUlNUCTI1NAorI2RlZmluZQlJ
UElfVFJBQ0UJMjU0CQkJLyogSW50ZXJydXB0IGZvciB0cmFjaW5nLiAqLworI2RlZmluZQlJUElf
U1RPUF9IQVJECTI1NQkJCS8qIFN0b3AgQ1BVIHdpdGggYSBOTUkuICovCisKKy8qCisgKiBUaGUg
c3B1cmlvdXMgaW50ZXJydXB0IGNhbiBzaGFyZSB0aGUgcHJpb3JpdHkgY2xhc3Mgd2l0aCB0aGUg
SVBJcyBzaW5jZQorICogaXQgaXMgbm90IGEgbm9ybWFsIGludGVycnVwdC4gKERvZXMgbm90IHVz
ZSB0aGUgQVBJQydzIGludGVycnVwdCBmaWZvKQorICovCisjZGVmaW5lCUFQSUNfU1BVUklPVVNf
SU5UIDI1NQorCisjaWZuZGVmIExPQ09SRQorCisjZGVmaW5lCUFQSUNfSVBJX0RFU1RfU0VMRgkt
MQorI2RlZmluZQlBUElDX0lQSV9ERVNUX0FMTAktMgorI2RlZmluZQlBUElDX0lQSV9ERVNUX09U
SEVSUwktMworCisjZGVmaW5lCUFQSUNfQlVTX1VOS05PV04JLTEKKyNkZWZpbmUJQVBJQ19CVVNf
SVNBCQkwCisjZGVmaW5lCUFQSUNfQlVTX0VJU0EJCTEKKyNkZWZpbmUJQVBJQ19CVVNfUENJCQky
CisjZGVmaW5lCUFQSUNfQlVTX01BWAkJQVBJQ19CVVNfUENJCisKKyNkZWZpbmUJSVJRX0VYVElO
VAkJKE5VTV9JT19JTlRTICsgMSkKKyNkZWZpbmUJSVJRX05NSQkJCShOVU1fSU9fSU5UUyArIDIp
CisjZGVmaW5lCUlSUV9TTUkJCQkoTlVNX0lPX0lOVFMgKyAzKQorI2RlZmluZQlJUlFfRElTQUJM
RUQJCShOVU1fSU9fSU5UUyArIDQpCisKKy8qCisgKiBBbiBBUElDIGVudW1lcmF0b3IgaXMgYSBw
c3VlZG8gYnVzIGRyaXZlciB0aGF0IGVudW1lcmF0ZXMgQVBJQydzIGluY2x1ZGluZworICogQ1BV
J3MgYW5kIEkvTyBBUElDJ3MuCisgKi8KK3N0cnVjdCBhcGljX2VudW1lcmF0b3IgeworCWNvbnN0
IGNoYXIgKmFwaWNfbmFtZTsKKwlpbnQgKCphcGljX3Byb2JlKSh2b2lkKTsKKwlpbnQgKCphcGlj
X3Byb2JlX2NwdXMpKHZvaWQpOworCWludCAoKmFwaWNfc2V0dXBfbG9jYWwpKHZvaWQpOworCWlu
dCAoKmFwaWNfc2V0dXBfaW8pKHZvaWQpOworCVNMSVNUX0VOVFJZKGFwaWNfZW51bWVyYXRvcikg
YXBpY19uZXh0OworfTsKKworaW50aGFuZF90CisJSURUVkVDKGFwaWNfaXNyMSksIElEVFZFQyhh
cGljX2lzcjIpLCBJRFRWRUMoYXBpY19pc3IzKSwKKwlJRFRWRUMoYXBpY19pc3I0KSwgSURUVkVD
KGFwaWNfaXNyNSksIElEVFZFQyhhcGljX2lzcjYpLAorCUlEVFZFQyhhcGljX2lzcjcpLCBJRFRW
RUMoY21jaW50KSwgSURUVkVDKGVycm9yaW50KSwKKwlJRFRWRUMoc3B1cmlvdXNpbnQpLCBJRFRW
RUModGltZXJpbnQpOworCitleHRlcm4gdm1fcGFkZHJfdCBsYXBpY19wYWRkcjsKK2V4dGVybiBp
bnQgYXBpY19jcHVpZHNbXTsKKwordm9pZAlhcGljX3JlZ2lzdGVyX2VudW1lcmF0b3Ioc3RydWN0
IGFwaWNfZW51bWVyYXRvciAqZW51bWVyYXRvcik7Cit2b2lkCSppb2FwaWNfY3JlYXRlKHZtX3Bh
ZGRyX3QgYWRkciwgaW50MzJfdCBhcGljX2lkLCBpbnQgaW50YmFzZSk7CitpbnQJaW9hcGljX2Rp
c2FibGVfcGluKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGluKTsKK2ludAlpb2FwaWNfZ2V0X3ZlY3Rv
cih2b2lkICpjb29raWUsIHVfaW50IHBpbik7Cit2b2lkCWlvYXBpY19yZWdpc3Rlcih2b2lkICpj
b29raWUpOworaW50CWlvYXBpY19yZW1hcF92ZWN0b3Iodm9pZCAqY29va2llLCB1X2ludCBwaW4s
IGludCB2ZWN0b3IpOworaW50CWlvYXBpY19zZXRfYnVzKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGlu
LCBpbnQgYnVzX3R5cGUpOworaW50CWlvYXBpY19zZXRfZXh0aW50KHZvaWQgKmNvb2tpZSwgdV9p
bnQgcGluKTsKK2ludAlpb2FwaWNfc2V0X25taSh2b2lkICpjb29raWUsIHVfaW50IHBpbik7Citp
bnQJaW9hcGljX3NldF9wb2xhcml0eSh2b2lkICpjb29raWUsIHVfaW50IHBpbiwgZW51bSBpbnRy
X3BvbGFyaXR5IHBvbCk7CitpbnQJaW9hcGljX3NldF90cmlnZ2VybW9kZSh2b2lkICpjb29raWUs
IHVfaW50IHBpbiwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgdHJpZ2dlcik7CitpbnQJaW9hcGlj
X3NldF9zbWkodm9pZCAqY29va2llLCB1X2ludCBwaW4pOworCisvKgorICogU3RydWN0IGNvbnRh
aW5pbmcgcG9pbnRlcnMgdG8gQVBJQyBmdW5jdGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9u
IGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuCisgKi8KK3N0cnVjdCBhcGljX29wcyB7CisJdm9pZAko
KmNyZWF0ZSkodV9pbnQsIGludCk7CisJdm9pZAkoKmluaXQpKHZtX3BhZGRyX3QpOworCXZvaWQJ
KCp4YXBpY19tb2RlKSh2b2lkKTsKKwl2b2lkCSgqc2V0dXApKGludCk7CisJdm9pZAkoKmR1bXAp
KGNvbnN0IGNoYXIgKik7CisJdm9pZAkoKmRpc2FibGUpKHZvaWQpOworCXZvaWQJKCplb2kpKHZv
aWQpOworCWludAkoKmlkKSh2b2lkKTsKKwlpbnQJKCppbnRyX3BlbmRpbmcpKHVfaW50KTsKKwl2
b2lkCSgqc2V0X2xvZ2ljYWxfaWQpKHVfaW50LCB1X2ludCwgdV9pbnQpOworCXVfaW50CSgqY3B1
aWQpKHVfaW50KTsKKworCS8qIFZlY3RvcnMgKi8KKwl1X2ludAkoKmFsbG9jX3ZlY3RvcikodV9p
bnQsIHVfaW50KTsKKwl1X2ludAkoKmFsbG9jX3ZlY3RvcnMpKHVfaW50LCB1X2ludCAqLCB1X2lu
dCwgdV9pbnQpOworCXZvaWQJKCplbmFibGVfdmVjdG9yKSh1X2ludCwgdV9pbnQpOworCXZvaWQJ
KCpkaXNhYmxlX3ZlY3RvcikodV9pbnQsIHVfaW50KTsKKwl2b2lkCSgqZnJlZV92ZWN0b3IpKHVf
aW50LCB1X2ludCwgdV9pbnQpOworCisKKwkvKiBQTUMgKi8KKwlpbnQJKCplbmFibGVfcG1jKSh2
b2lkKTsKKwl2b2lkCSgqZGlzYWJsZV9wbWMpKHZvaWQpOworCXZvaWQJKCpyZWVuYWJsZV9wbWMp
KHZvaWQpOworCisJLyogQ01DICovCisJdm9pZAkoKmVuYWJsZV9jbWMpKHZvaWQpOworCisJLyog
SVBJICovCisJdm9pZAkoKmlwaV9yYXcpKHJlZ2lzdGVyX3QsIHVfaW50KTsKKwl2b2lkCSgqaXBp
X3ZlY3RvcmVkKSh1X2ludCwgaW50KTsKKwlpbnQJKCppcGlfd2FpdCkoaW50KTsKKwlpbnQJKCpp
cGlfYWxsb2MpKGludGhhbmRfdCAqaXBpZnVuYyk7CisJdm9pZAkoKmlwaV9mcmVlKShpbnQgdmVj
dG9yKTsKKworCS8qIExWVCAqLworCWludAkoKnNldF9sdnRfbWFzaykodV9pbnQsIHVfaW50LCB1
X2NoYXIpOworCWludAkoKnNldF9sdnRfbW9kZSkodV9pbnQsIHVfaW50LCB1X2ludDMyX3QpOwor
CWludAkoKnNldF9sdnRfcG9sYXJpdHkpKHVfaW50LCB1X2ludCwgZW51bSBpbnRyX3BvbGFyaXR5
KTsKKwlpbnQJKCpzZXRfbHZ0X3RyaWdnZXJtb2RlKSh1X2ludCwgdV9pbnQsIGVudW0gaW50cl90
cmlnZ2VyKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXBpY19vcHMgYXBpY19vcHM7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZAorbGFwaWNfY3JlYXRlKHVfaW50IGFwaWNfaWQsIGludCBib290X2NwdSkK
K3sKKworCWFwaWNfb3BzLmNyZWF0ZShhcGljX2lkLCBib290X2NwdSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZAorbGFwaWNfaW5pdCh2bV9wYWRkcl90IGFkZHIpCit7CisKKwlhcGljX29wcy5p
bml0KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3hhcGljX21vZGUodm9p
ZCkKK3sKKworCWFwaWNfb3BzLnhhcGljX21vZGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
CitsYXBpY19zZXR1cChpbnQgYm9vdCkKK3sKKworCWFwaWNfb3BzLnNldHVwKGJvb3QpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2R1bXAoY29uc3QgY2hhciAqc3RyKQoreworCisJ
YXBpY19vcHMuZHVtcChzdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2Fi
bGUodm9pZCkKK3sKKworCWFwaWNfb3BzLmRpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkCitsYXBpY19lb2kodm9pZCkKK3sKKworCWFwaWNfb3BzLmVvaSgpOworfQorCitzdGF0aWMg
aW5saW5lIGludAorbGFwaWNfaWQodm9pZCkKK3sKKworCXJldHVybiAoYXBpY19vcHMuaWQoKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pbnRyX3BlbmRpbmcodV9pbnQgdmVjdG9y
KQoreworCisJcmV0dXJuIChhcGljX29wcy5pbnRyX3BlbmRpbmcodmVjdG9yKSk7Cit9CisKKy8q
IFhYWDogVU5VU0VEICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3NldF9sb2dpY2FsX2lk
KHVfaW50IGFwaWNfaWQsIHVfaW50IGNsdXN0ZXIsIHVfaW50IGNsdXN0ZXJfaWQpCit7CisKKwlh
cGljX29wcy5zZXRfbG9naWNhbF9pZChhcGljX2lkLCBjbHVzdGVyLCBjbHVzdGVyX2lkKTsKK30K
Kworc3RhdGljIGlubGluZSB1X2ludAorYXBpY19jcHVpZCh1X2ludCBhcGljX2lkKQoreworCisJ
cmV0dXJuIChhcGljX29wcy5jcHVpZChhcGljX2lkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9p
bnQKK2FwaWNfYWxsb2NfdmVjdG9yKHVfaW50IGFwaWNfaWQsIHVfaW50IGlycSkKK3sKKworCXJl
dHVybiAoYXBpY19vcHMuYWxsb2NfdmVjdG9yKGFwaWNfaWQsIGlycSkpOworfQorCitzdGF0aWMg
aW5saW5lIHVfaW50CithcGljX2FsbG9jX3ZlY3RvcnModV9pbnQgYXBpY19pZCwgdV9pbnQgKmly
cXMsIHVfaW50IGNvdW50LCB1X2ludCBhbGlnbikKK3sKKworCXJldHVybiAoYXBpY19vcHMuYWxs
b2NfdmVjdG9ycyhhcGljX2lkLCBpcnFzLCBjb3VudCwgYWxpZ24pKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkCithcGljX2VuYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9pbnQgdmVjdG9y
KQoreworCisJYXBpY19vcHMuZW5hYmxlX3ZlY3RvcihhcGljX2lkLCB2ZWN0b3IpOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQKK2FwaWNfZGlzYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9p
bnQgdmVjdG9yKQoreworCisJYXBpY19vcHMuZGlzYWJsZV92ZWN0b3IoYXBpY19pZCwgdmVjdG9y
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithcGljX2ZyZWVfdmVjdG9yKHVfaW50IGFwaWNf
aWQsIHVfaW50IHZlY3RvciwgdV9pbnQgaXJxKQoreworCisJYXBpY19vcHMuZnJlZV92ZWN0b3Io
YXBpY19pZCwgdmVjdG9yLCBpcnEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfZW5h
YmxlX3BtYyh2b2lkKQoreworCisJcmV0dXJuIChhcGljX29wcy5lbmFibGVfcG1jKCkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2FibGVfcG1jKHZvaWQpCit7CisKKwlhcGlj
X29wcy5kaXNhYmxlX3BtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3JlZW5h
YmxlX3BtYyh2b2lkKQoreworCisJYXBpY19vcHMucmVlbmFibGVfcG1jKCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZAorbGFwaWNfZW5hYmxlX2NtYyh2b2lkKQoreworCisJYXBpY19vcHMuZW5h
YmxlX2NtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV9yYXcocmVnaXN0
ZXJfdCBpY3JsbywgdV9pbnQgZGVzdCkKK3sKKworCWFwaWNfb3BzLmlwaV9yYXcoaWNybG8sIGRl
c3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV92ZWN0b3JlZCh1X2ludCB2
ZWN0b3IsIGludCBkZXN0KQoreworCisJYXBpY19vcHMuaXBpX3ZlY3RvcmVkKHZlY3RvciwgZGVz
dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pcGlfd2FpdChpbnQgZGVsYXkpCit7
CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV93YWl0KGRlbGF5KSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgaW50CitsYXBpY19pcGlfYWxsb2MoaW50aGFuZF90ICppcGlmdW5jKQoreworCisJcmV0dXJu
IChhcGljX29wcy5pcGlfYWxsb2MoaXBpZnVuYykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK
K2xhcGljX2lwaV9mcmVlKGludCB2ZWN0b3IpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV9m
cmVlKHZlY3RvcikpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2dF9tYXNr
KHVfaW50IGFwaWNfaWQsIHVfaW50IGx2dCwgdV9jaGFyIG1hc2tlZCkKK3sKKworCXJldHVybiAo
YXBpY19vcHMuc2V0X2x2dF9tYXNrKGFwaWNfaWQsIGx2dCwgbWFza2VkKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgaW50CitsYXBpY19zZXRfbHZ0X21vZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0
LCB1X2ludDMyX3QgbW9kZSkKK3sKKworCXJldHVybiAoYXBpY19vcHMuc2V0X2x2dF9tb2RlKGFw
aWNfaWQsIGx2dCwgbW9kZSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2
dF9wb2xhcml0eSh1X2ludCBhcGljX2lkLCB1X2ludCBsdnQsIGVudW0gaW50cl9wb2xhcml0eSBw
b2wpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLnNldF9sdnRfcG9sYXJpdHkoYXBpY19pZCwgbHZ0
LCBwb2wpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2xhcGljX3NldF9sdnRfdHJpZ2dlcm1v
ZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKQor
eworCisJcmV0dXJuIChhcGljX29wcy5zZXRfbHZ0X3RyaWdnZXJtb2RlKGFwaWNfaWQsIGx2dCwg
dHJpZ2dlcikpOworfQorCit2b2lkCWxhcGljX2hhbmRsZV9jbWModm9pZCk7Cit2b2lkCWxhcGlj
X2hhbmRsZV9lcnJvcih2b2lkKTsKK3ZvaWQJbGFwaWNfaGFuZGxlX2ludHIoaW50IHZlY3Rvciwg
c3RydWN0IHRyYXBmcmFtZSAqZnJhbWUpOwordm9pZAlsYXBpY19oYW5kbGVfdGltZXIoc3RydWN0
IHRyYXBmcmFtZSAqZnJhbWUpOworCitleHRlcm4gaW50IHgyYXBpY19tb2RlOworZXh0ZXJuIGlu
dCBsYXBpY19lb2lfc3VwcHJlc3Npb247CisKKyNpZmRlZiBfU1lTX1NZU0NUTF9IXworU1lTQ1RM
X0RFQ0woX2h3X2FwaWMpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhTE9DT1JFICovCisjZW5kaWYg
LyogX1g4Nl9BUElDVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcG1f
Ymlvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYXBtX2Jpb3MuaAkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9hcG1fYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsMjY0IEBACisvKi0KKyAqIEFQTSAoQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVu
dCkgQklPUyBEZXZpY2UgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0LTE5OTUgYnkg
SE9TT0tBV0EsIFRhdHN1bWkgPGhvc29rYXdhQG10LmNzLmtlaW8uYWMuanA+CisgKgorICogVGhp
cyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCwgbW9kaWZpZWQsIGNvcGllZCwgYW5kIGRpc3RyaWJ1dGVk
LCBpbgorICogYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGFi
b3ZlIGNvcHlyaWdodCBhbmQKKyAqIHRoZXNlIHRlcm1zIGFyZSByZXRhaW5lZC4gVW5kZXIgbm8g
Y2lyY3Vtc3RhbmNlcyBpcyB0aGUgYXV0aG9yCisgKiByZXNwb25zaWJsZSBmb3IgdGhlIHByb3Bl
ciBmdW5jdGlvbmluZyBvZiB0aGlzIHNvZnR3YXJlLCBub3IgZG9lcworICogdGhlIGF1dGhvciBh
c3N1bWUgYW55IHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2VzIGluY3VycmVkIHdpdGggaXRzCisg
KiB1c2UuCisgKgorICogQXVnLCAxOTk0CUltcGxlbWVudGVkIG9uIEZyZWVCU0QgMS4xLjUuMVIg
KFRvc2hpYmEgQVZTMDAxV0QpCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTExIDE5OjM2OjIxWiBqa2ltICQKKyAq
LworCisjaWZuZGVmIF9YODZfQVBNX0JJT1NfSF8KKyNkZWZpbmUJX1g4Nl9BUE1fQklPU19IXwor
CisjaWZuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1
ZGUgPHN5cy9pb2Njb20uaD4KKworLyogQklPUyBpZCAqLworI2RlZmluZSBBUE1fQklPUwkJMHg1
MworI2RlZmluZSBBUE1fSU5UCQkJMHgxNQorCisvKiBBUE0gZmxhZ3MgKi8KKyNkZWZpbmUgQVBN
XzE2QklUX1NVUFBPUlQJMHgwMQorI2RlZmluZSBBUE1fMzJCSVRfU1VQUE9SVAkweDAyCisjZGVm
aW5lIEFQTV9DUFVJRExFX1NMT1cJMHgwNAorI2RlZmluZSBBUE1fRElTQUJMRUQJCTB4MDgKKyNk
ZWZpbmUgQVBNX0RJU0VOR0FHRUQJCTB4MTAKKworLyogQVBNIGluaXRpYWxpemVyIHBoeXNpY2Fs
IGFkZHJlc3MgKi8KKyNkZWZpbmUgQVBNX09VUkFERFIJCTB4MDAwODAwMDAKKworLyogQVBNIGZ1
bmN0aW9ucyAqLworI2RlZmluZSBBUE1fSU5TVENIRUNLCQkweDAwCisjZGVmaW5lIEFQTV9SRUFM
Q09OTkVDVAkJMHgwMQorI2RlZmluZSBBUE1fUFJPVDE2Q09OTkVDVAkweDAyCisjZGVmaW5lIEFQ
TV9QUk9UMzJDT05ORUNUCTB4MDMKKyNkZWZpbmUgQVBNX0RJU0NPTk5FQ1QJCTB4MDQKKyNkZWZp
bmUgQVBNX0NQVUlETEUJCTB4MDUKKyNkZWZpbmUgQVBNX0NQVUJVU1kJCTB4MDYKKyNkZWZpbmUg
QVBNX1NFVFBXU1RBVEUJCTB4MDcKKyNkZWZpbmUgQVBNX0VOQUJMRURJU0FCTEVQTQkweDA4Cisj
ZGVmaW5lIEFQTV9SRVNUT1JFREVGQVVMVAkweDA5CisjZGVmaW5lCUFQTV9HRVRQV1NUQVRVUwkJ
MHgwYQorI2RlZmluZSBBUE1fR0VUUE1FVkVOVAkJMHgwYgorI2RlZmluZSBBUE1fR0VUUFdTVEFU
RQkJMHgwYworI2RlZmluZSBBUE1fRU5BQkxFRElTQUJMRURQTQkweDBkCisjZGVmaW5lIEFQTV9E
UlZWRVJTSU9OCQkweDBlCisjZGVmaW5lIEFQTV9FTkdBR0VESVNFTkdBR0VQTQkweDBmCisjZGVm
aW5lIEFQTV9HRVRDQVBBQklMSVRJRVMJMHgxMAorI2RlZmluZSBBUE1fUkVTVU1FVElNRVIJCTB4
MTEKKyNkZWZpbmUgQVBNX1JFU1VNRU9OUklORwkweDEyCisjZGVmaW5lIEFQTV9USU1FUlJFUVVF
U1RTCTB4MTMKKyNkZWZpbmUgQVBNX09FTUZVTkMJCTB4ODAKKworLyogZXJyb3IgY29kZSAqLwor
I2RlZmluZSBBUE1FX09LCQkJMHgwMAorI2RlZmluZSBBUE1FX1BNRElTQUJMRUQJCTB4MDEKKyNk
ZWZpbmUgQVBNRV9SRUFMRVNUQUJMSVNIRUQJMHgwMgorI2RlZmluZSBBUE1FX05PVENPTk5FQ1RF
RAkweDAzCisjZGVmaW5lIEFQTUVfUFJPVDE2RVNUQUJMSVNIRUQJMHgwNQorI2RlZmluZSBBUE1F
X1BST1QxNk5PVFNVUFBPUlRFRAkweDA2CisjZGVmaW5lIEFQTUVfUFJPVDMyRVNUQUJMSVNIRUQJ
MHgwNworI2RlZmluZSBBUE1FX1BST1QzMk5PVERVUFBPUlRFRAkweDA4CisjZGVmaW5lIEFQTUVf
VU5LTk9XTkRFVklDRUlECTB4MDkKKyNkZWZpbmUgQVBNRV9PVVRPRlJBTkdFCQkweDBhCisjZGVm
aW5lIEFQTUVfTk9URU5HQUdFRAkJMHgwYgorI2RlZmluZSBBUE1FX0NBTlRFTlRFUlNUQVRFCTB4
NjAKKyNkZWZpbmUgQVBNRV9OT1BNRVZFTlQJCTB4ODAKKyNkZWZpbmUgQVBNRV9OT0FQTVBSRVNF
TlQJMHg4NgorCisKKy8qIGRldmljZSBjb2RlICovCisjZGVmaW5lIFBNRFZfQVBNQklPUwkJMHgw
MDAwCisjZGVmaW5lIFBNRFZfQUxMREVWCQkweDAwMDEKKyNkZWZpbmUgUE1EVl9ESVNQMAkJMHgw
MTAwCisjZGVmaW5lIFBNRFZfRElTUDEJCTB4MDEwMQorI2RlZmluZSBQTURWX0RJU1BBTEwJCTB4
MDFmZgorI2RlZmluZSBQTURWXzJORFNUT1JBR0UwCTB4MDIwMAorI2RlZmluZSBQTURWXzJORFNU
T1JBR0UxCTB4MDIwMQorI2RlZmluZSBQTURWXzJORFNUT1JBR0UyCTB4MDIwMgorI2RlZmluZSBQ
TURWXzJORFNUT1JBR0UzCTB4MDIwMworI2RlZmluZSBQTURWX1BBUkFMTEVMMAkJMHgwMzAwCisj
ZGVmaW5lIFBNRFZfUEFSQUxMRUwxCQkweDAzMDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwwCQkweDA0
MDAKKyNkZWZpbmUgUE1EVl9TRVJJQUwxCQkweDA0MDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwyCQkw
eDA0MDIKKyNkZWZpbmUgUE1EVl9TRVJJQUwzCQkweDA0MDMKKyNkZWZpbmUgUE1EVl9TRVJJQUw0
CQkweDA0MDQKKyNkZWZpbmUgUE1EVl9TRVJJQUw1CQkweDA0MDUKKyNkZWZpbmUgUE1EVl9TRVJJ
QUw2CQkweDA0MDYKKyNkZWZpbmUgUE1EVl9TRVJJQUw3CQkweDA0MDcKKyNkZWZpbmUgUE1EVl9O
RVQwCQkweDA1MDAKKyNkZWZpbmUgUE1EVl9ORVQxCQkweDA1MDEKKyNkZWZpbmUgUE1EVl9ORVQy
CQkweDA1MDIKKyNkZWZpbmUgUE1EVl9ORVQzCQkweDA1MDMKKyNkZWZpbmUgUE1EVl9QQ01DSUEw
CQkweDA2MDAKKyNkZWZpbmUgUE1EVl9QQ01DSUExCQkweDA2MDEKKyNkZWZpbmUgUE1EVl9QQ01D
SUEyCQkweDA2MDIKKyNkZWZpbmUgUE1EVl9QQ01DSUEzCQkweDA2MDMKKy8qIDB4MDcwMCAtIDB4
N2ZmZglSZXNlcnZlZAkJCSovCisjZGVmaW5lIFBNRFZfQkFUVF9CQVNFCQkweDgwMDAKKyNkZWZp
bmUgUE1EVl9CQVRUMAkJMHg4MDAxCisjZGVmaW5lIFBNRFZfQkFUVDEJCTB4ODAwMgorI2RlZmlu
ZSBQTURWX0JBVFRfQUxMCQkweDgwZmYKKy8qIDB4ODEwMCAtIDB4ZGZmZglSZXNlcnZlZAkJCSov
CisvKiAweGUwMDAgLSAweGVmZmYJT0VNLWRlZmluZWQgcG93ZXIgZGV2aWNlIElEcwkqLworLyog
MHhmMDAwIC0gMHhmZmZmCVJlc2VydmVkCQkJKi8KKworLyogUG93ZXIgc3RhdGUgKi8KKyNkZWZp
bmUgUE1TVF9BUE1FTkFCTEVECQkweDAwMDAKKyNkZWZpbmUgUE1TVF9TVEFOREJZCQkweDAwMDEK
KyNkZWZpbmUgUE1TVF9TVVNQRU5ECQkweDAwMDIKKyNkZWZpbmUgUE1TVF9PRkYJCTB4MDAwMwor
I2RlZmluZSBQTVNUX0xBU1RSRVFOT1RJRlkJMHgwMDA0CisjZGVmaW5lIFBNU1RfTEFTVFJFUVJF
SkVDVAkweDAwMDUKKy8qIDB4MDAwNiAtIDB4MDAxZglSZXNlcnZlZCBzeXN0ZW0gc3RhdGVzCQkq
LworLyogMHgwMDIwIC0gMHgwMDNmCU9FTS1kZWZpbmVkIHN5c3RlbSBzdGF0ZXMJKi8KKy8qIDB4
MDA0MCAtIDB4MDA3ZglPRU0tZGVmaW5lZCBkZXZpY2Ugc3RhdGVzCSovCisvKiAweDAwODAgLSAw
eGZmZmYJUmVzZXJ2ZWQgZGV2aWNlIHN0YXRlcwkJKi8KKworI2lmICFkZWZpbmVkKEFTU0VNQkxF
UikgJiYgIWRlZmluZWQoSU5JVElBTElaRVIpCisKKy8qIEMgZGVmaW5pdGlvbnMgKi8KK3N0cnVj
dCBhcG1ob29rIHsKKwlzdHJ1Y3QgYXBtaG9vawkqYWhfbmV4dDsKKwlpbnQJCSgqYWhfZnVuKSh2
b2lkICphaF9hcmcpOworCXZvaWQJCSphaF9hcmc7CisJY29uc3QgY2hhcgkqYWhfbmFtZTsKKwlp
bnQJCWFoX29yZGVyOworfTsKKyNkZWZpbmUgQVBNX0hPT0tfTk9ORQkJKC0xKQorI2RlZmluZSBB
UE1fSE9PS19TVVNQRU5EICAgICAgICAwCisjZGVmaW5lIEFQTV9IT09LX1JFU1VNRSAgICAgICAg
IDEKKyNkZWZpbmUgTkFQTV9IT09LICAgICAgICAgICAgICAgMgorCisjaWZkZWYgX0tFUk5FTAor
Cit2b2lkIGFwbV9zdXNwZW5kKGludCBzdGF0ZSk7CitzdHJ1Y3QgYXBtaG9vayAqYXBtX2hvb2tf
ZXN0YWJsaXNoIChpbnQgYXBtaCwgc3RydWN0IGFwbWhvb2sgKik7Cit2b2lkIGFwbV9ob29rX2Rp
c2VzdGFibGlzaCAoaW50IGFwbWgsIHN0cnVjdCBhcG1ob29rICopOwordm9pZCBhcG1fY3B1X2lk
bGUodm9pZCk7Cit2b2lkIGFwbV9jcHVfYnVzeSh2b2lkKTsKKworI2VuZGlmCisKKyNlbmRpZiAv
KiAhQVNTRU1CTEVSICYmICFJTklUSUFMSVpFUiAqLworCisjZGVmaW5lIEFQTV9NSU5fT1JERVIJ
CTB4MDAKKyNkZWZpbmUgQVBNX01JRF9PUkRFUgkJMHg4MAorI2RlZmluZSBBUE1fTUFYX09SREVS
CQkweGZmCisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQgY29kZSAqLworI2RlZmluZSBQTUVW
X05PRVZFTlQJCTB4MDAwMAorI2RlZmluZSBQTUVWX1NUQU5EQllSRVEJCTB4MDAwMQorI2RlZmlu
ZSBQTUVWX1NVU1BFTkRSRVEJCTB4MDAwMgorI2RlZmluZSBQTUVWX05PUk1SRVNVTUUJCTB4MDAw
MworI2RlZmluZSBQTUVWX0NSSVRSRVNVTUUJCTB4MDAwNAorI2RlZmluZSBQTUVWX0JBVFRFUllM
T1cJCTB4MDAwNQorI2RlZmluZSBQTUVWX1BPV0VSU1RBVEVDSEFOR0UJMHgwMDA2CisjZGVmaW5l
IFBNRVZfVVBEQVRFVElNRQkJMHgwMDA3CisjZGVmaW5lIFBNRVZfQ1JJVFNVU1BFTkQJMHgwMDA4
CisjZGVmaW5lIFBNRVZfVVNFUlNUQU5EQllSRVEJMHgwMDA5CisjZGVmaW5lIFBNRVZfVVNFUlNV
U1BFTkRSRVEJMHgwMDBhCisjZGVmaW5lIFBNRVZfU1RBTkRCWVJFU1VNRQkweDAwMGIKKyNkZWZp
bmUgUE1FVl9DQVBBQklMSVRJRVNDSEFOR0UgMHgwMDBjCisvKiAweDAwMGQgLSAweDAwZmYJUmVz
ZXJ2ZWQgc3lzdGVtIGV2ZW50cwkqLworLyogMHgwMTAwIC0gMHgwMWZmCVJlc2VydmVkIGRldmlj
ZSBldmVudHMJKi8KKy8qIDB4MDIwMCAtIDB4MDJmZglPRU0tZGVmaW5lZCBBUE0gZXZlbnRzCSov
CisvKiAweDAzMDAgLSAweGZmZmYJUmVzZXJ2ZWQJCSovCisjZGVmaW5lIFBNRVZfREVGQVVMVAkJ
MHhmZmZmZmZmZgkvKiB1c2VkIGZvciBjdXN0b21pemF0aW9uICovCisKKyNpZiAhZGVmaW5lZChB
U1NFTUJMRVIpICYmICFkZWZpbmVkKElOSVRJQUxJWkVSKQorCisvKgorICogT2xkIGFwbV9pbmZv
IHN0cnVjdHVyZSwgcmV0dXJuZWQgYnkgdGhlIEFQTUlPX0dFVElORk9fT0xEIGlvY3RsLiAgVGhp
cworICogaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZXhlY3V0YWJsZXMu
CisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvX29sZCB7CisJdV9pbnQJYWlfbWFqb3I7CS8q
IEFQTSBtYWpvciB2ZXJzaW9uICovCisJdV9pbnQJYWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJz
aW9uICovCisJdV9pbnQJYWlfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1cyAqLworCXVfaW50CWFp
X2JhdHRfc3RhdDsJLyogQmF0dGVyeSBzdGF0dXMgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8q
IFJlbWFpbmluZyBiYXR0ZXJ5IGxpZmUgKi8KKwl1X2ludAlhaV9zdGF0dXM7CS8qIFN0YXR1cyBv
ZiBBUE0gc3VwcG9ydCAoZW5hYmxlZC9kaXNhYmxlZCkgKi8KK30gKmFwbV9pbmZvX29sZF90Owor
CisvKgorICogU3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBBUE1JT19HRVRJTkZPIGlvY3RsLgor
ICoKKyAqIEluIHRoZSBjb21tZW50cyBiZWxvdywgdGhlIHBhcmVudGhlc2l6ZWQgbnVtYmVycyBp
bmRpY2F0ZSB0aGUgbWluaW11bQorICogdmFsdWUgb2YgYWlfaW5mb3ZlcnNpb24gZm9yIHdoaWNo
IGVhY2ggZmllbGQgaXMgdmFsaWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvIHsKKwl1
X2ludAlhaV9pbmZvdmVyc2lvbjsJLyogSW5kaWNhdGVzIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQg
Ki8KKwl1X2ludAlhaV9tYWpvcjsJLyogQVBNIG1ham9yIHZlcnNpb24gKDApICovCisJdV9pbnQJ
YWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJzaW9uICgwKSAqLworCXVfaW50CWFpX2FjbGluZTsJ
LyogQUMgbGluZSBzdGF0dXMgKDApICovCisJdV9pbnQJYWlfYmF0dF9zdGF0OwkvKiBCYXR0ZXJ5
IHN0YXR1cyAoMCkgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5
IGxpZmUgaW4gcGVyY2VudCAoMCkgKi8KKwlpbnQJYWlfYmF0dF90aW1lOwkvKiBSZW1haW5pbmcg
YmF0dGVyeSB0aW1lIGluIHNlY29uZHMgKDApICovCisJdV9pbnQJYWlfc3RhdHVzOwkvKiBUcnVl
IGlmIGVuYWJsZWQgKDApICovCisJdV9pbnQJYWlfYmF0dGVyaWVzOwkvKiBOdW1iZXIgb2YgYmF0
dGVyaWVzICgxKSAqLworCXVfaW50CWFpX2NhcGFiaWxpdGllczsvKiBBUE0gQ2FwYWJpbGl0aWVz
ICgxKSAqLworCXVfaW50CWFpX3NwYXJlWzZdOwkvKiBGb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwor
fSAqYXBtX2luZm9fdDsKKworLyogQmF0dGVyeSBmbGFnICovCisjZGVmaW5lIEFQTV9CQVRUX0hJ
R0gJCTB4MDEKKyNkZWZpbmUgQVBNX0JBVFRfTE9XCQkweDAyCisjZGVmaW5lIEFQTV9CQVRUX0NS
SVRJQ0FMCTB4MDQKKyNkZWZpbmUgQVBNX0JBVFRfQ0hBUkdJTkcJMHgwOAorI2RlZmluZSBBUE1f
QkFUVF9OT1RfUFJFU0VOVAkweDEwCisjZGVmaW5lIEFQTV9CQVRUX05PX1NZU1RFTQkweDgwCisK
K3R5cGVkZWYgc3RydWN0IGFwbV9wd3N0YXR1cyB7CisJdV9pbnQJYXBfZGV2aWNlOwkvKiBEZXZp
Y2UgY29kZSBvZiBiYXR0ZXJ5ICovCisJdV9pbnQJYXBfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1
cyAoMCkgKi8KKwl1X2ludAlhcF9iYXR0X3N0YXQ7CS8qIEJhdHRlcnkgc3RhdHVzICgwKSAqLwor
CXVfaW50CWFwX2JhdHRfZmxhZzsJLyogQmF0dGVyeSBmbGFnICgwKSAqLworCXVfaW50CWFwX2Jh
dHRfbGlmZTsJLyogUmVtYWluaW5nIGJhdHRlcnkgbGlmZSBpbiBwZXJjZW50ICgwKSAqLworCWlu
dAlhcF9iYXR0X3RpbWU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5IHRpbWUgaW4gc2Vjb25kcyAoMCkg
Ki8KK30gKmFwbV9wd3N0YXR1c190OworCitzdHJ1Y3QgYXBtX2Jpb3NfYXJnIHsKKyAgICAgICAg
dWludDMyX3QgZWF4OworICAgICAgICB1aW50MzJfdCBlYng7CisgICAgICAgIHVpbnQzMl90IGVj
eDsKKyAgICAgICAgdWludDMyX3QgZWR4OworICAgICAgICB1aW50MzJfdCBlc2k7CisgICAgICAg
IHVpbnQzMl90IGVkaTsKK307CisKK3N0cnVjdCBhcG1fZXZlbnRfaW5mbyB7CisJdV9pbnQgdHlw
ZTsKKwl1X2ludCBpbmRleDsKKwl1X2ludCBzcGFyZVs4XTsKK307CisKKyNkZWZpbmUgQVBNSU9f
U1VTUEVORAkJX0lPKCdQJywgMSkKKyNkZWZpbmUgQVBNSU9fR0VUSU5GT19PTEQJX0lPUignUCcs
IDIsIHN0cnVjdCBhcG1faW5mb19vbGQpCisjZGVmaW5lIEFQTUlPX0VOQUJMRQkJX0lPKCdQJywg
NSkKKyNkZWZpbmUgQVBNSU9fRElTQUJMRQkJX0lPKCdQJywgNikKKyNkZWZpbmUgQVBNSU9fSEFM
VENQVQkJX0lPKCdQJywgNykKKyNkZWZpbmUgQVBNSU9fTk9USEFMVENQVQlfSU8oJ1AnLCA4KQor
I2RlZmluZSBBUE1JT19ESVNQTEFZCQlfSU9XKCdQJywgOSwgaW50KQorI2RlZmluZSBBUE1JT19C
SU9TCQlfSU9XUignUCcsIDEwLCBzdHJ1Y3QgYXBtX2Jpb3NfYXJnKQorI2RlZmluZSBBUE1JT19H
RVRJTkZPCQlfSU9SKCdQJywgMTEsIHN0cnVjdCBhcG1faW5mbykKKyNkZWZpbmUgQVBNSU9fU1RB
TkRCWQkJX0lPKCdQJywgMTIpCisjZGVmaW5lIEFQTUlPX0dFVFBXU1RBVFVTCV9JT1dSKCdQJywg
MTMsIHN0cnVjdCBhcG1fcHdzdGF0dXMpCisvKiBmb3IgL2Rldi9hcG1jdGwgKi8KKyNkZWZpbmUg
QVBNSU9fTkVYVEVWRU5UCQlfSU9SKCdBJywgMTAwLCBzdHJ1Y3QgYXBtX2V2ZW50X2luZm8pCisj
ZGVmaW5lIEFQTUlPX1JFSkVDVExBU1RSRVEJX0lPKCdQJywgMTAxKQorCisjZW5kaWYgLyogIUFT
U0VNQkxFUiAmJiAhSU5JVElBTElaRVIgKi8KKworI2VuZGlmIC8qICFfWDg2X0FQTV9CSU9TX0hf
ICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1cy5oIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni9idXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXMuaAkyMDE2LTA5LTI5IDAwOjI0
OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDExMDQgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSBLQVRPIFRha2Vub3JpLCAxOTk5LgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBV
bnB1Ymxpc2hlZCByaWdodHMgcmVzZXJ2ZWQgdW5kZXIgdGhlIGNvcHlyaWdodAorICogbGF3cyBv
ZiBKYXBhbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRo
aXMgZmlsZSB1bm1vZGlmaWVkLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9idXMu
aCAyODY2NjcgMjAxNS0wOC0xMiAxNToyNjozMlogbWFyY2VsICQKKyAqLworCisvKgkkTmV0QlNE
OiBidXMuaCx2IDEuMTIgMTk5Ny8xMC8wMSAwODoyNToxNSBmdmRsIEV4cCAkCSovCisKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t
IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgSmFz
b24gUi4gVGhvcnBlIG9mIHRoZSBOdW1lcmljYWwgQWVyb3NwYWNlIFNpbXVsYXRpb24gRmFjaWxp
dHksCisgKiBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD
T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB
VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2IENoYXJsZXMgTS4gSGFubnVtLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NiBDaHJpc3RvcGhlciBHLiBEZW1l
dHJpb3UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlz
aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJl
CisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAg
ICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgQ2hyaXN0b3Bo
ZXIgRy4gRGVtZXRyaW91CisgKglmb3IgdGhlIE5ldEJTRCBQcm9qZWN0LgorICogNC4gVGhlIG5h
bWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9YODZfQlVT
X0hfCisjZGVmaW5lIF9YODZfQlVTX0hfCisKKyNpbmNsdWRlIDxtYWNoaW5lL19idXMuaD4KKyNp
bmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4KKworI2lmbmRlZiBfX0dOVUNMSUtFX0FTTQorIyBp
Zm5kZWYgbGludAorIyAgZXJyb3IgIm5vIGFzc2VtYmxlciBjb2RlIGZvciB5b3VyIGNvbXBpbGVy
IgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSB4ODYgYnVzIHNwYWNl
IHRhZywgbm90IHRvIGJlIHVzZWQgZGlyZWN0bHkgYnkgTUkgY29kZS4KKyAqLworI2RlZmluZQlY
ODZfQlVTX1NQQUNFX0lPCTAJLyogc3BhY2UgaXMgaS9vIHNwYWNlICovCisjZGVmaW5lCVg4Nl9C
VVNfU1BBQ0VfTUVNCTEJLyogc3BhY2UgaXMgbWVtIHNwYWNlICovCisKKyNkZWZpbmUgQlVTX1NQ
QUNFX01BWFNJWkVfMjRCSVQJMHhGRkZGRkYKKyNkZWZpbmUgQlVTX1NQQUNFX01BWFNJWkVfMzJC
SVQgMHhGRkZGRkZGRgorI2RlZmluZSBCVVNfU1BBQ0VfTUFYU0laRQkweEZGRkZGRkZGCisjZGVm
aW5lIEJVU19TUEFDRV9NQVhBRERSXzI0QklUCTB4RkZGRkZGCisjZGVmaW5lIEJVU19TUEFDRV9N
QVhBRERSXzMyQklUIDB4RkZGRkZGRkYKKyNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5l
ZChQQUUpCisjZGVmaW5lIEJVU19TUEFDRV9NQVhBRERSCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAor
I2Vsc2UKKyNkZWZpbmUgQlVTX1NQQUNFX01BWEFERFIJMHhGRkZGRkZGRgorI2VuZGlmCisKKyNk
ZWZpbmUgQlVTX1NQQUNFX0lOVkFMSURfREFUQQkofjApCisjZGVmaW5lIEJVU19TUEFDRV9VTlJF
U1RSSUNURUQJKH4wKQorCisvKgorICogTWFwIGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2Ug
aW50byBDUFUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorICovCisKK2ludCBidXNfc3BhY2VfbWFw
KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplLAor
ICAgIGludCBmbGFncywgYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAqIFVubWFw
IGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2UuCisgKi8KKwordm9pZCBidXNfc3BhY2VfdW5t
YXAoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAgICBidXNf
c2l6ZV90IHNpemUpOworCisvKgorICogR2V0IGEgbmV3IGhhbmRsZSBmb3IgYSBzdWJyZWdpb24g
b2YgYW4gYWxyZWFkeS1tYXBwZWQgYXJlYSBvZiBidXMgc3BhY2UuCisgKi8KKworc3RhdGljIF9f
aW5saW5lIGludCBidXNfc3BhY2Vfc3VicmVnaW9uKGJ1c19zcGFjZV90YWdfdCB0LAorCQkJCQli
dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQlidXNfc2l6ZV90IG9mZnNldCwgYnVzX3NpemVf
dCBzaXplLAorCQkJCQlidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKTsKKworc3RhdGljIF9faW5s
aW5lIGludAorYnVzX3NwYWNlX3N1YnJlZ2lvbihidXNfc3BhY2VfdGFnX3QgdCBfX3VudXNlZCwg
YnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6
ZV90IHNpemUgX191bnVzZWQsCisJCSAgICBidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKQorewor
CisJKm5ic2hwID0gYnNoICsgb2Zmc2V0OworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBBbGxv
Y2F0ZSBhIHJlZ2lvbiBvZiBtZW1vcnkgdGhhdCBpcyBhY2Nlc3NpYmxlIHRvIGRldmljZXMgaW4g
YnVzIHNwYWNlLgorICovCisKK2ludAlidXNfc3BhY2VfYWxsb2MoYnVzX3NwYWNlX3RhZ190IHQs
IGJ1c19hZGRyX3QgcnN0YXJ0LAorCQkJYnVzX2FkZHJfdCByZW5kLCBidXNfc2l6ZV90IHNpemUs
IGJ1c19zaXplX3QgYWxpZ24sCisJCQlidXNfc2l6ZV90IGJvdW5kYXJ5LCBpbnQgZmxhZ3MsIGJ1
c19hZGRyX3QgKmFkZHJwLAorCQkJYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAq
IEZyZWUgYSByZWdpb24gb2YgYnVzIHNwYWNlIGFjY2Vzc2libGUgbWVtb3J5LgorICovCisKK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9mcmVlKGJ1c19zcGFjZV90YWdfdCB0LCBidXNf
c3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICBidXNfc2l6ZV90IHNpemUpOworCitzdGF0aWMg
X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2ZyZWUoYnVzX3NwYWNlX3RhZ190IHQgX191bnVzZWQs
IGJ1c19zcGFjZV9oYW5kbGVfdCBic2ggX191bnVzZWQsCisJICAgICAgIGJ1c19zaXplX3Qgc2l6
ZSBfX3VudXNlZCkKK3sKK30KKworCisvKgorICogUmVhZCBhIDEsIDIsIDQsIG9yIDggYnl0ZSBx
dWFudGl0eSBmcm9tIGJ1cyBzcGFjZQorICogZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0
LgorICovCitzdGF0aWMgX19pbmxpbmUgdV9pbnQ4X3QgYnVzX3NwYWNlX3JlYWRfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5kbGUsCisJCQkJCSAg
YnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUgdV9pbnQxNl90IGJ1c19zcGFj
ZV9yZWFkXzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90
IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUg
dV9pbnQzMl90IGJ1c19zcGFjZV9yZWFkXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAg
YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOwor
CisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgYnVzX3NwYWNlX3Jl
YWRfOChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5k
bGUsCisJCQkJCSAgYnVzX3NpemVfdCBvZmZzZXQpOworI2VuZGlmCisKK3N0YXRpYyBfX2lubGlu
ZSB1X2ludDhfdAorYnVzX3NwYWNlX3JlYWRfMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3Bh
Y2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQpCit7CisKKwlpZiAodGFn
ID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW5iKGhhbmRsZSArIG9mZnNldCkpOwor
CXJldHVybiAoKih2b2xhdGlsZSB1X2ludDhfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKwor
c3RhdGljIF9faW5saW5lIHVfaW50MTZfdAorYnVzX3NwYWNlX3JlYWRfMihidXNfc3BhY2VfdGFn
X3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQp
Cit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW53KGhhbmRs
ZSArIG9mZnNldCkpOworCXJldHVybiAoKih2b2xhdGlsZSB1X2ludDE2X3QgKikoaGFuZGxlICsg
b2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludDMyX3QKK2J1c19zcGFjZV9yZWFk
XzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1
c19zaXplX3Qgb2Zmc2V0KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQly
ZXR1cm4gKGlubChoYW5kbGUgKyBvZmZzZXQpKTsKKwlyZXR1cm4gKCoodm9sYXRpbGUgdV9pbnQz
Ml90ICopKGhhbmRsZSArIG9mZnNldCkpOworfQorCisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMg
X19pbmxpbmUgdWludDY0X3QKK2J1c19zcGFjZV9yZWFkXzgoYnVzX3NwYWNlX3RhZ190IHRhZywg
YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1c19zaXplX3Qgb2Zmc2V0KQoreworCisJ
aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSAvKiBObyA4IGJ5dGUgSU8gc3BhY2UgYWNjZXNz
IG9uIHg4NiAqLworCQlyZXR1cm4gKEJVU19TUEFDRV9JTlZBTElEX0RBVEEpOworCXJldHVybiAo
Kih2b2xhdGlsZSB1aW50NjRfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKyNlbmRpZgorCisv
KgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0aWVzIGZyb20gYnVz
IHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZS9vZmZzZXQgYW5kIGNvcHkgaW50byBi
dWZmZXIgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFk
X211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5kbGVf
dCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsCisJCQkJ
CSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVh
ZF9tdWx0aV8yKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkJCQkgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MTZfdCAqYWRkciwKKwkJ
CQkJICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9y
ZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5k
bGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAor
CQkJCQkgICAgc2l6ZV90IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFj
ZV9yZWFkX211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJz
aCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDhfdCAqYWRkciwgc2l6ZV90IGNv
dW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQlpbnNiKGJzaCArIG9m
ZnNldCwgYWRkciwgY291bnQpOworCWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f
YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CW1vdmIgKCUyKSwl
JWFsCQkJCVxuXAorCQkJc3Rvc2IJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1E
IiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAi
IChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5Iik7CisjZW5kaWYK
Kwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9tdWx0aV8yKGJ1
c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNf
c2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAo
dGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWluc3coYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3Vu
dCk7CisJZWxzZSB7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgi
CQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJMToJbW92dyAoJTIpLCUlYXgJCQkJXG5cCisJCQlz
dG9zdwkJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAo
Y291bnQpCQkJOgorCQkgICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNv
dW50KQk6CisJCSAgICAiJWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1
X2ludDMyX3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19T
UEFDRV9JTykKKwkJaW5zbChic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ
CQkJCVxuXAorCQkxOgltb3ZsICglMiksJSVlYXgJCQkJXG5cCisJCQlzdG9zbAkJCQkJXG5cCisJ
CQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJOgorCQkg
ICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KQk6CisJCSAgICAi
JWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworI2lmIDAJLyogQ2F1c2UgYSBsaW5r
IGVycm9yIGZvciBidXNfc3BhY2VfcmVhZF9tdWx0aV84ICovCisjZGVmaW5lCWJ1c19zcGFjZV9y
ZWFkX211bHRpXzgJISEhIGJ1c19zcGFjZV9yZWFkX211bHRpXzggdW5pbXBsZW1lbnRlZCAhISEK
KyNlbmRpZgorCisvKgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0
aWVzIGZyb20gYnVzIHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZSBhbmQgc3RhcnRp
bmcgYXQgYG9mZnNldCcgYW5kIGNvcHkgaW50bworICogYnVmZmVyIHByb3ZpZGVkLgorICovCitz
dGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVhZF9yZWdpb25fMShidXNfc3BhY2VfdGFn
X3QgdGFnLAorCQkJCQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50OF90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl8yKGJ1c19zcGFj
ZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAg
ICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBj
b3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl80KGJ1
c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJ
CQkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNp
emVfdCBjb3VudCk7CisKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX3Jl
Z2lvbl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQli
dXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0
OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ
CWNsZAkJCQkJXG5cCisJCTE6CWluYiAldzIsJSVhbAkJCQlcblwKKwkJCXN0b3NiCQkJCQlcblwK
KwkJCWluY2wgJTIJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1EIiAoYWRkciks
ICI9YyIgKGNvdW50KSwgIj1kIiAoX3BvcnRfKQk6CisJCSAgICAiMCIgKGFkZHIpLCAiMSIgKGNv
dW50KSwgIjIiIChfcG9ydF8pCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2Vu
ZGlmCisJfSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNl
dDsKKyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJ
CQljbGQJCQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2IiCQkJCQk6CisJCSAgICAi
PUQiIChhZGRyKSwgIj1jIiAoY291bnQpLCAiPVMiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRk
ciksICIxIiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOwor
I2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3JlYWRfcmVn
aW9uXzIoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1
c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0
OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ
CWNsZAkJCQkJXG5cCisJCTE6CWludyAldzIsJSVheAkJCQlcblwKKwkJCXN0b3N3CQkJCQlcblwK
KwkJCWFkZGwgJDIsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRy
KSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIxIiAo
Y291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7Cisj
ZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsgb2Zm
c2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwK
KwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzdyIJCQkJCToKKwkJICAg
ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAiIChh
ZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNjIik7
CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9y
ZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJ
YnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJ
aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZz
ZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAor
CQkJY2xkCQkJCQlcblwKKwkJMToJaW5sICV3MiwlJWVheAkJCQlcblwKKwkJCXN0b3NsCQkJCQlc
blwKKwkJCWFkZGwgJDQsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChh
ZGRyKSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIx
IiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7
CisjZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsg
b2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc
blwKKwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzbCIJCQkJCToKKwkJ
ICAgICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAi
IChhZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNj
Iik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVz
X3NwYWNlX3JlYWRfcmVnaW9uXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfcmVnaW9uXzgJ
ISEhIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKwor
LyoKKyAqIFdyaXRlIHRoZSAxLCAyLCA0LCBvciA4IGJ5dGUgdmFsdWUgYHZhbHVlJyB0byBidXMg
c3BhY2UKKyAqIGRlc2NyaWJlZCBieSB0YWcvaGFuZGxlL29mZnNldC4KKyAqLworCitzdGF0aWMg
X19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfd3JpdGVfMShidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ
CSAgICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9m
ZnNldCwgdV9pbnQ4X3QgdmFsdWUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vf
d3JpdGVfMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCSAgICAgICBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKTsK
Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190
IHRhZywKKwkJCQkgICAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkgICAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSk7CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV84KGJ1c19zcGFjZV90YWdfdCB0YWcs
CisJCQkJICAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJICAgICAgIGJ1c19zaXpl
X3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSk7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lIHZv
aWQKK2J1c19zcGFjZV93cml0ZV8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5k
bGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgdmFsdWUpCit7
CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGIoYnNoICsgb2Zmc2V0LCB2
YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGJzaCArIG9mZnNldCkgPSB2
YWx1ZTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV8yKGJ1c19z
cGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6
ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQ
QUNFX0lPKQorCQlvdXR3KGJzaCArIG9mZnNldCwgdmFsdWUpOworCWVsc2UKKwkJKih2b2xhdGls
ZSB1X2ludDE2X3QgKikoYnNoICsgb2Zmc2V0KSA9IHZhbHVlOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3QgdmFs
dWUpCit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGwoYnNoICsgb2Zm
c2V0LCB2YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShic2ggKyBvZmZz
ZXQpID0gdmFsdWU7Cit9CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0YXRpYyBfX2lubGluZSB2b2lk
CitidXNfc3BhY2Vfd3JpdGVfOChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgLyogTm8gOCBieXRlIElPIHNwYWNlIGFjY2VzcyBv
biB4ODYgKi8KKwkJcmV0dXJuOworCWVsc2UKKwkJKih2b2xhdGlsZSB1aW50NjRfdCAqKShic2gg
KyBvZmZzZXQpID0gdmFsdWU7Cit9CisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3VudCcgMSwg
MiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyCisgKiBwcm92aWRlZCB0
byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0LgorICovCisKK3N0YXRp
YyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0
YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgICBidXNfc2l6
ZV90IG9mZnNldCwKKwkJCQkJICAgICBjb25zdCB1X2ludDhfdCAqYWRkciwKKwkJCQkJICAgICBz
aXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX211bHRp
XzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNo
LAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgIGNvbnN0IHVfaW50MTZf
dCAqYWRkciwKKwkJCQkJICAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9p
ZCBidXNfc3BhY2Vfd3JpdGVfbXVsdGlfNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAg
IGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmZzZXQsCisJ
CQkJCSAgICAgY29uc3QgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZz
ZXQsIGNvbnN0IHVfaW50OF90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAodGFnID09
IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dHNiKGJzaCArIG9mZnNldCwgYWRkciwgY291bnQpOwor
CWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc
blwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlcblwKKwkJCW1vdmIgJSVhbCwoJTIp
CQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50
KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJ
OgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMihidXNfc3BhY2VfdGFnX3Qg
dGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZzZXQsIGNvbnN0
IHVfaW50MTZfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKQorCQlvdXRzdyhic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsK
KyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQlj
bGQJCQkJCVxuXAorCQkxOglsb2RzdwkJCQkJXG5cCisJCQltb3Z3ICUlYXgsKCUyKQkJCQlcblwK
KwkJCWxvb3AgMWIiCQkJCToKKwkJICAgICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQk6CisJ
CSAgICAiciIgKGJzaCArIG9mZnNldCksICIwIiAoYWRkciksICIxIiAoY291bnQpCToKKwkJICAg
ICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVz
X3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2ludDMy
X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9J
TykKKwkJb3V0c2woYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3VudCk7CisJZWxzZSB7CisjaWZkZWYg
X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc
blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJbW92bCAlJWVheCwoJTIpCQkJCVxuXAorCQkJbG9v
cCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJy
IiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgi
LCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGlu
ayBlcnJvciBmb3IgYnVzX3NwYWNlX3dyaXRlX211bHRpXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNl
X3dyaXRlX211bHRpXzgodCwgaCwgbywgYSwgYykJCQkJXAorCQkJISEhIGJ1c19zcGFjZV93cml0
ZV9tdWx0aV84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3Vu
dCcgMSwgMiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyIHByb3ZpZGVk
CisgKiB0byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUgc3RhcnRpbmcgYXQgYG9m
ZnNldCcuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lv
bl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBi
c2gsCisJCQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2lu
dDhfdCAqYWRkciwKKwkJCQkJICAgICAgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBfX2lubGluZSB2
b2lkIGJ1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkg
ICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICAgICBidXNfc2l6ZV90IG9mZnNl
dCwKKwkJCQkJICAgICAgY29uc3QgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgICBzaXplX3Qg
Y291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1
c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJ
CQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2ludDMyX3Qg
KmFkZHIsCisJCQkJCSAgICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lk
CitidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaCwKKwkJCSBidXNfc2l6ZV90IG9mZnNldCwgY29uc3QgdV9pbnQ4X3QgKmFk
ZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgewor
CQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f
YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlc
blwKKwkJCW91dGIgJSVhbCwldzAJCQkJXG5cCisJCQlpbmNsICUwCQkJCQlcblwKKwkJCWxvb3Ag
MWIiCQkJCToKKwkJICAgICI9ZCIgKF9wb3J0XyksICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJ
OgorCQkgICAgIjAiIChfcG9ydF8pLCAiMSIgKGFkZHIpLCAiMiIgKGNvdW50KQk6CisJCSAgICAi
JWVheCIsICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWJ1c19zcGFjZV9o
YW5kbGVfdCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJ
X19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJCXJlcG5lCQkJCQlc
blwKKwkJCW1vdnNiIgkJCQkJOgorCQkgICAgIj1EIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9
YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp
CToKKwkJICAgICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIF9faW5s
aW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLCBi
dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJIGJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2lu
dDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFD
RV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0Vf
QVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxv
ZHN3CQkJCQlcblwKKwkJCW91dHcgJSVheCwldzAJCQkJXG5cCisJCQlhZGRsICQyLCUwCQkJCVxu
XAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9
YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp
CToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJ
YnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNpZmRlZiBfX0dOVUNM
SUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJCQkJCVxuXAorCQkJ
cmVwbmUJCQkJCVxuXAorCQkJbW92c3ciCQkJCQk6CisJCSAgICAiPUQiIChfcG9ydF8pLCAiPVMi
IChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwgIjEiIChhZGRyKSwg
IjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitz
dGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1c19zcGFjZV90
YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkgYnVzX3NpemVfdCBvZmZzZXQs
IGNvbnN0IHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBY
ODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYg
X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc
blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJb3V0bCAlJWVheCwldzAJCQkJXG5cCisJCQlhZGRs
ICQ0LCUwCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1T
IiAoYWRkciksICI9YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciks
ICIyIiAoY291bnQpCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJ
fSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ
CQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2wiCQkJCQk6CisJCSAgICAiPUQiIChf
cG9ydF8pLCAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwg
IjEiIChhZGRyKSwgIjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlm
CisJfQorfQorCisjaWYgMAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV93cml0
ZV9yZWdpb25fOCAqLworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzgJCQkJCVwKKwkJ
CSEhISBidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgor
CisvKgorICogV3JpdGUgdGhlIDEsIDIsIDQsIG9yIDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMg
c3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFuZGxlL29mZnNldCBgY291bnQnIHRpbWVzLgor
ICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBi
dXNfc2l6ZV90IG9mZnNldCwKKwkJCQkJICAgdV9pbnQ4X3QgdmFsdWUsIHNpemVfdCBjb3VudCk7
CitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3Rh
Z190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgYnVzX3Np
emVfdCBvZmZzZXQsCisJCQkJCSAgIHVfaW50MTZfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KTsKK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfNChidXNfc3BhY2VfdGFnX3Qg
dGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBidXNfc2l6ZV90
IG9mZnNldCwKKwkJCQkJICAgdV9pbnQzMl90IHZhbHVlLCBzaXplX3QgY291bnQpOworCitzdGF0
aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0
YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1
X2ludDhfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy
ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls
ZSAoY291bnQtLSkKKwkJCW91dGIoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50
LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9p
bnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIg
PSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXdoaWxl
IChjb3VudC0tKQorCQkJb3V0dyhhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQl3aGlsZSAoY291bnQt
LSkKKwkJCSoodm9sYXRpbGUgdV9pbnQxNl90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVf
aW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy
ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls
ZSAoY291bnQtLSkKKwkJCW91dGwoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50
LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyKSA9IHZhbHVlOworfQorCisjaWYg
MAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCAqLworI2Rl
ZmluZQlidXNfc3BhY2Vfc2V0X211bHRpXzggISEhIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCB1bmlt
cGxlbWVudGVkICEhIQorI2VuZGlmCisKKy8qCisgKiBXcml0ZSBgY291bnQnIDEsIDIsIDQsIG9y
IDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMgc3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFu
ZGxlIHN0YXJ0aW5nIGF0IGBvZmZzZXQnLgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1
c19zcGFjZV9zZXRfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19z
cGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz
X3NwYWNlX3NldF9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw
YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz
X3NwYWNlX3NldF9yZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw
YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
YnVzX3NwYWNlX3NldF9yZWdpb25fMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFu
ZGxlX3QgYnNoLAorCQkgICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50OF90IHZhbHVlLCBz
aXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7
CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBj
b3VudC0tLCBhZGRyKyspCisJCQlvdXRiKGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBj
b3VudCAhPSAwOyBjb3VudC0tLCBhZGRyKyspCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFk
ZHIpID0gdmFsdWU7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X3Jl
Z2lvbl8yKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAg
ICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7
CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09
IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBjb3VudC0tLCBhZGRyICs9
IDIpCisJCQlvdXR3KGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBjb3VudCAhPSAwOyBj
b3VudC0tLCBhZGRyICs9IDIpCisJCQkqKHZvbGF0aWxlIHVfaW50MTZfdCAqKShhZGRyKSA9IHZh
bHVlOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9yZWdpb25fNChi
dXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkgICAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19z
cGFjZV9oYW5kbGVfdCBhZGRyID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkciArPSA0KQorCQkJ
b3V0bChhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwg
YWRkciArPSA0KQorCQkJKih2b2xhdGlsZSB1X2ludDMyX3QgKikoYWRkcikgPSB2YWx1ZTsKK30K
KworI2lmIDAJLyogQ2F1c2UgYSBsaW5rIGVycm9yIGZvciBidXNfc3BhY2Vfc2V0X3JlZ2lvbl84
ICovCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzgJISEhIGJ1c19zcGFjZV9zZXRfcmVn
aW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQ29weSBgY291bnQnIDEs
IDIsIDQsIG9yIDggYnl0ZSB2YWx1ZXMgZnJvbSBidXMgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0IHRh
Zy9ic2gxL29mZjEgdG8gYnVzIHNwYWNlIHN0YXJ0aW5nIGF0IHRhZy9ic2gyL29mZjIuCisgKi8K
Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoYnVzX3NwYWNl
X3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMSwKKwkJCQkJICAg
ICBidXNfc2l6ZV90IG9mZjEsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaDIsCisJ
CQkJCSAgICAgYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxp
bmUgdm9pZCBidXNfc3BhY2VfY29weV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ
CQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zm
MSwKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCQkJICAgICBidXNfc2l6
ZV90IG9mZjIsIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFj
ZV9jb3B5X3JlZ2lvbl80KGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaDEsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmYxLAorCQkJCQkgICAgIGJ1
c19zcGFjZV9oYW5kbGVfdCBic2gyLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90
IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8x
KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3Np
emVfdCBvZmYxLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwg
c2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYx
OworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9
PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3Jj
IGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50
LS0sIGFkZHIxKyssIGFkZHIyKyspCisJCQkJb3V0YihhZGRyMiwgaW5iKGFkZHIxKSk7CisJCX0g
ZWxzZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAo
YWRkcjEgKz0gKGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50
ICE9IDA7IGNvdW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJb3V0YihhZGRyMiwgaW5iKGFk
ZHIxKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWRkcjEgPj0gYWRkcjIpIHsKKwkJCS8qIHNy
YyBhZnRlciBkZXN0OiBjb3B5IGZvcndhcmQgKi8KKwkJCWZvciAoOyBjb3VudCAhPSAwOyBjb3Vu
dC0tLCBhZGRyMSsrLCBhZGRyMisrKQorCQkJCSoodm9sYXRpbGUgdV9pbnQ4X3QgKikoYWRkcjIp
ID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJ
CQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0g
KGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNv
dW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRy
MikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIxKTsKKwkJfQorCX0KK30K
Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKGJ1c19zcGFj
ZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3NpemVfdCBvZmYx
LCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90IGNv
dW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYxOworCWJ1c19z
cGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3JjIGFmdGVyIGRl
c3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIx
ICs9IDIsIGFkZHIyICs9IDIpCisJCQkJb3V0dyhhZGRyMiwgaW53KGFkZHIxKSk7CisJCX0gZWxz
ZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRk
cjEgKz0gMiAqIChjb3VudCAtIDEpLCBhZGRyMiArPSAyICogKGNvdW50IC0gMSk7CisJCQkgICAg
Y291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgLT0gMiwgYWRkcjIgLT0gMikKKwkJCQlvdXR3KGFk
ZHIyLCBpbncoYWRkcjEpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikg
eworCQkJLyogc3JjIGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50
ICE9IDA7IGNvdW50LS0sIGFkZHIxICs9IDIsIGFkZHIyICs9IDIpCisJCQkJKih2b2xhdGlsZSB1
X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRk
cjEpOworCQl9IGVsc2UgeworCQkJLyogZGVzdCBhZnRlciBzcmM6IGNvcHkgYmFja3dhcmRzICov
CisJCQlmb3IgKGFkZHIxICs9IDIgKiAoY291bnQgLSAxKSwgYWRkcjIgKz0gMiAqIChjb3VudCAt
IDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIxIC09IDIsIGFkZHIyIC09IDIp
CisJCQkJKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGls
ZSB1X2ludDE2X3QgKikoYWRkcjEpOworCQl9CisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAorYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaDEsCisJCQlidXNfc2l6ZV90IG9mZjEsIGJ1c19zcGFjZV9oYW5kbGVfdCBi
c2gyLAorCQkJYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hh
bmRsZV90IGFkZHIxID0gYnNoMSArIG9mZjE7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIyID0g
YnNoMiArIG9mZjI7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pIHsKKwkJaWYgKGFk
ZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVzdDogY29weSBmb3J3YXJkICovCisJ
CQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgKz0gNCwgYWRkcjIgKz0gNCkKKwkJ
CQlvdXRsKGFkZHIyLCBpbmwoYWRkcjEpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlc3QgYWZ0ZXIg
c3JjOiBjb3B5IGJhY2t3YXJkcyAqLworCQkJZm9yIChhZGRyMSArPSA0ICogKGNvdW50IC0gMSks
IGFkZHIyICs9IDQgKiAoY291bnQgLSAxKTsKKwkJCSAgICBjb3VudCAhPSAwOyBjb3VudC0tLCBh
ZGRyMSAtPSA0LCBhZGRyMiAtPSA0KQorCQkJCW91dGwoYWRkcjIsIGlubChhZGRyMSkpOworCQl9
CisJfSBlbHNlIHsKKwkJaWYgKGFkZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVz
dDogY29weSBmb3J3YXJkICovCisJCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEg
Kz0gNCwgYWRkcjIgKz0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMikgPQor
CQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJCQkv
KiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0gNCAq
IChjb3VudCAtIDEpLCBhZGRyMiArPSA0ICogKGNvdW50IC0gMSk7CisJCQkgICAgY291bnQgIT0g
MDsgY291bnQtLSwgYWRkcjEgLT0gNCwgYWRkcjIgLT0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50
MzJfdCAqKShhZGRyMikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7
CisJCX0KKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVzX3NwYWNl
X2NvcHlfOCAqLworI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fOAkhISEgYnVzX3NwYWNl
X2NvcHlfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQnVzIHJl
YWQvd3JpdGUgYmFycmllciBtZXRob2RzLgorICoKKyAqCXZvaWQgYnVzX3NwYWNlX2JhcnJpZXIo
YnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAqCQkJICAgICAg
IGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKyAqCisgKgor
ICogTm90ZSB0aGF0IEJVU19TUEFDRV9CQVJSSUVSX1dSSVRFIGRvZXNuJ3QgZG8gYW55dGhpbmcg
b3RoZXIgdGhhbgorICogcHJldmVudCByZW9yZGVyaW5nIGJ5IHRoZSBjb21waWxlcjsgYWxsIElu
dGVsIHg4NiBwcm9jZXNzb3JzIGN1cnJlbnRseQorICogcmV0aXJlIG9wZXJhdGlvbnMgb3V0c2lk
ZSB0aGUgQ1BVIGluIHByb2dyYW0gb3JkZXIuCisgKi8KKyNkZWZpbmUJQlVTX1NQQUNFX0JBUlJJ
RVJfUkVBRAkweDAxCQkvKiBmb3JjZSByZWFkIGJhcnJpZXIgKi8KKyNkZWZpbmUJQlVTX1NQQUNF
X0JBUlJJRVJfV1JJVEUJMHgwMgkJLyogZm9yY2Ugd3JpdGUgYmFycmllciAqLworCitzdGF0aWMg
X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2JhcnJpZXIoYnVzX3NwYWNlX3RhZ190IHRhZyBfX3Vu
dXNlZCwgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCBfX3VudXNlZCwKKwkJICBidXNfc2l6ZV90IG9m
ZnNldCBfX3VudXNlZCwgYnVzX3NpemVfdCBsZW4gX191bnVzZWQsIGludCBmbGFncykKK3sKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCWlmIChmbGFncyAmIEJVU19TUEFDRV9CQVJSSUVSX1JFQUQp
CisjaWZkZWYgX19hbWQ2NF9fCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCgl
JXJzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbHNlCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7
IGFkZGwgJDAsMCglJWVzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCWVsc2UKKwkJX19j
b21waWxlcl9tZW1iYXIoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQlVTX1NQQUNFX05PX0xFR0FD
WQorI3VuZGVmIGluYgorI3VuZGVmIG91dGIKKyNkZWZpbmUgaW5iKGEpIGNvbXBpbGVyX2Vycm9y
CisjZGVmaW5lIGludyhhKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBpbmwoYSkgY29tcGlsZXJf
ZXJyb3IKKyNkZWZpbmUgb3V0YihhLCBiKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBvdXR3KGEs
IGIpIGNvbXBpbGVyX2Vycm9yCisjZGVmaW5lIG91dGwoYSwgYikgY29tcGlsZXJfZXJyb3IKKyNl
bmRpZgorCisjaW5jbHVkZSA8bWFjaGluZS9idXNfZG1hLmg+CisKKy8qCisgKiBTdHJlYW0gYWNj
ZXNzZXMgYXJlIHRoZSBzYW1lIGFzIG5vcm1hbCBhY2Nlc3NlcyBvbiB4ODY7IHRoZXJlIGFyZSBu
bworICogc3VwcG9ydGVkIGJ1cyBzeXN0ZW1zIHdpdGggYW4gZW5kaWFuZXNzIGRpZmZlcmVudCBm
cm9tIHRoZSBob3N0IG9uZS4KKyAqLworI2RlZmluZQlidXNfc3BhY2VfcmVhZF9zdHJlYW1fMSh0
LCBoLCBvKQlidXNfc3BhY2VfcmVhZF8xKCh0KSwgKGgpLCAobykpCisjZGVmaW5lCWJ1c19zcGFj
ZV9yZWFkX3N0cmVhbV8yKHQsIGgsIG8pCWJ1c19zcGFjZV9yZWFkXzIoKHQpLCAoaCksIChvKSkK
KyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfc3RyZWFtXzQodCwgaCwgbykJYnVzX3NwYWNlX3JlYWRf
NCgodCksIChoKSwgKG8pKQorCisjZGVmaW5lCWJ1c19zcGFjZV9yZWFkX211bHRpX3N0cmVhbV8x
KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9tdWx0aV8xKCh0KSwgKGgpLCAobyks
IChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfcmVhZF9tdWx0aV9zdHJlYW1fMih0LCBoLCBv
LCBhLCBjKSBcCisJYnVzX3NwYWNlX3JlYWRfbXVsdGlfMigodCksIChoKSwgKG8pLCAoYSksIChj
KSkKKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfbXVsdGlfc3RyZWFtXzQodCwgaCwgbywgYSwgYykg
XAorCWJ1c19zcGFjZV9yZWFkX211bHRpXzQoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisKKyNk
ZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3N0cmVhbV8xKHQsIGgsIG8sIHYpIFwKKwlidXNfc3BhY2Vf
d3JpdGVfMSgodCksIChoKSwgKG8pLCAodikpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9zdHJl
YW1fMih0LCBoLCBvLCB2KSBcCisJYnVzX3NwYWNlX3dyaXRlXzIoKHQpLCAoaCksIChvKSwgKHYp
KQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfc3RyZWFtXzQodCwgaCwgbywgdikgXAorCWJ1c19z
cGFjZV93cml0ZV80KCh0KSwgKGgpLCAobyksICh2KSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3Jp
dGVfbXVsdGlfc3RyZWFtXzEodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0
aV8xKCh0KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVs
dGlfc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV8yKCh0
KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVsdGlfc3Ry
ZWFtXzQodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV80KCh0KSwgKGgp
LCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfbXVsdGlfc3RyZWFtXzEo
dCwgaCwgbywgdiwgYykgXAorCWJ1c19zcGFjZV9zZXRfbXVsdGlfMSgodCksIChoKSwgKG8pLCAo
diksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9tdWx0aV9zdHJlYW1fMih0LCBoLCBvLCB2
LCBjKSBcCisJYnVzX3NwYWNlX3NldF9tdWx0aV8yKCh0KSwgKGgpLCAobyksICh2KSwgKGMpKQor
I2RlZmluZQlidXNfc3BhY2Vfc2V0X211bHRpX3N0cmVhbV80KHQsIGgsIG8sIHYsIGMpIFwKKwli
dXNfc3BhY2Vfc2V0X211bHRpXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisKKyNkZWZpbmUJ
YnVzX3NwYWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3Bh
Y2VfcmVhZF9yZWdpb25fMSgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3Nw
YWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8yKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVh
ZF9yZWdpb25fMigodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3Jl
YWRfcmVnaW9uX3N0cmVhbV80KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9yZWdp
b25fNCgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVf
cmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2Vfd3JpdGVfcmVnaW9u
XzEoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9yZWdp
b25fc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9yZWdpb25fMigo
dCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl9z
dHJlYW1fNCh0LCBoLCBvLCBhLCBjKSBcCisJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KCh0KSwg
KGgpLCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uX3N0cmVh
bV8xKHQsIGgsIG8sIHYsIGMpIFwKKwlidXNfc3BhY2Vfc2V0X3JlZ2lvbl8xKCh0KSwgKGgpLCAo
byksICh2KSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfc2V0X3JlZ2lvbl9zdHJlYW1fMih0LCBo
LCBvLCB2LCBjKSBcCisJYnVzX3NwYWNlX3NldF9yZWdpb25fMigodCksIChoKSwgKG8pLCAodiks
IChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9yZWdpb25fc3RyZWFtXzQodCwgaCwgbywgdiwg
YykgXAorCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisK
KyNkZWZpbmUJYnVzX3NwYWNlX2NvcHlfcmVnaW9uX3N0cmVhbV8xKHQsIGgxLCBvMSwgaDIsIG8y
LCBjKSBcCisJYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoKHQpLCAoaDEpLCAobzEpLCAoaDIpLCAo
bzIpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl9zdHJlYW1fMih0LCBoMSwg
bzEsIGgyLCBvMiwgYykgXAorCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKCh0KSwgKGgxKSwgKG8x
KSwgKGgyKSwgKG8yKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fc3RyZWFt
XzQodCwgaDEsIG8xLCBoMiwgbzIsIGMpIFwKKwlidXNfc3BhY2VfY29weV9yZWdpb25fNCgodCks
IChoMSksIChvMSksIChoMiksIChvMiksIChjKSkKKworI2VuZGlmIC8qIF9YODZfQlVTX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1c2RtYV9pbXBs
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXNkbWFfaW1wbC5oCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzZG1hX2ltcGwuaAkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9i
dXNkbWFfaW1wbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBGcmVlQlNEIEZvdW5kYXRp
b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2
ZWxvcGVkIGJ5IEtvbnN0YW50aW4gQmVsb3Vzb3YgPGtpYkBGcmVlQlNELm9yZz4KKyAqIHVuZGVy
IHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYnVzZG1hX2ltcGwuaCAyNTczMDggMjAxMy0xMC0y
OSAwNzoyNTo1NFoga2liICQKKyAqLworCisjaWZuZGVmCV9fWDg2X0JVU0RNQV9JTVBMX0gKKyNk
ZWZpbmUJX19YODZfQlVTRE1BX0lNUExfSAorCitzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIHsK
KwlzdHJ1Y3QgYnVzX2RtYV9pbXBsICppbXBsOworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24g
KnBhcmVudDsKKwlidXNfc2l6ZV90CSAgYWxpZ25tZW50OworCWJ1c19hZGRyX3QJICBib3VuZGFy
eTsKKwlidXNfYWRkcl90CSAgbG93YWRkcjsKKwlidXNfYWRkcl90CSAgaGlnaGFkZHI7CisJYnVz
X2RtYV9maWx0ZXJfdCAqZmlsdGVyOworCXZvaWQJCSAqZmlsdGVyYXJnOworCWJ1c19zaXplX3QJ
ICBtYXhzaXplOworCXVfaW50CQkgIG5zZWdtZW50czsKKwlidXNfc2l6ZV90CSAgbWF4c2Vnc3o7
CisJaW50CQkgIGZsYWdzOworCWJ1c19kbWFfbG9ja190CSAqbG9ja2Z1bmM7CisJdm9pZAkJICps
b2NrZnVuY2FyZzsKKwlpbnQJCSAgcmVmX2NvdW50OworfTsKKworc3RydWN0IGJ1c19kbWFfaW1w
bCB7CisJaW50ICgqdGFnX2NyZWF0ZSkoYnVzX2RtYV90YWdfdCBwYXJlbnQsCisJICAgIGJ1c19z
aXplX3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIs
CisJICAgIGJ1c19hZGRyX3QgaGlnaGFkZHIsIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwKKwkg
ICAgdm9pZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsIGludCBuc2VnbWVudHMsCisJ
ICAgIGJ1c19zaXplX3QgbWF4c2Vnc3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tm
dW5jLAorCSAgICB2b2lkICpsb2NrZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCk7CisJaW50
ICgqdGFnX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCk7CisJaW50ICgqbWFwX2NyZWF0ZSko
YnVzX2RtYV90YWdfdCBkbWF0LCBpbnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCk7CisJaW50
ICgqbWFwX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk7CisJ
aW50ICgqbWVtX2FsbG9jKShidXNfZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2YWRkciwgaW50IGZs
YWdzLAorCSAgICBidXNfZG1hbWFwX3QgKm1hcHApOworCXZvaWQgKCptZW1fZnJlZSkoYnVzX2Rt
YV90YWdfdCBkbWF0LCB2b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbG9h
ZF9tYSkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICBzdHJ1Y3Qg
dm1fcGFnZSAqKm1hLCBidXNfc2l6ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3MsCisJ
ICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfcGh5
cykoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICB2bV9wYWRkcl90
IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50
X3QgKnNlZ3MsIGludCAqc2VncCk7CisJaW50ICgqbG9hZF9idWZmZXIpKGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1Zmxl
biwgcG1hcF90IHBtYXAsIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms
IGludCAqc2VncCk7CisJdm9pZCAoKm1hcF93YWl0b2spKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz
X2RtYW1hcF90IG1hcCwKKwkgICAgc3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxs
YmFja190ICpjYWxsYmFjaywKKwkgICAgdm9pZCAqY2FsbGJhY2tfYXJnKTsKKwlidXNfZG1hX3Nl
Z21lbnRfdCAqKCptYXBfY29tcGxldGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90
IG1hcCwKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9y
KTsKKwl2b2lkICgqbWFwX3VubG9hZCkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg
bWFwKTsKKwl2b2lkICgqbWFwX3N5bmMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90
IG1hcCwKKwkgICAgYnVzX2RtYXN5bmNfb3BfdCBvcCk7Cit9OworCit2b2lkIGJ1c19kbWFfZGZs
dF9sb2NrKHZvaWQgKmFyZywgYnVzX2RtYV9sb2NrX29wX3Qgb3ApOworaW50IGJ1c19kbWFfcnVu
X2ZpbHRlcihzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICpkbWF0LCBidXNfYWRkcl90IHBhZGRy
KTsKK2ludCBjb21tb25fYnVzX2RtYV90YWdfY3JlYXRlKHN0cnVjdCBidXNfZG1hX3RhZ19jb21t
b24gKnBhcmVudCwKKyAgICBidXNfc2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJv
dW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVz
X2RtYV9maWx0ZXJfdCAqZmlsdGVyLCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6
ZSwKKyAgICBpbnQgbnNlZ21lbnRzLCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1
c19kbWFfbG9ja190ICpsb2NrZnVuYywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6
LCB2b2lkICoqZG1hdCk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfYm91
bmNlX2ltcGw7CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvY3B1dHlw
ZXMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2NwdXR5cGVzLmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvY3B1dHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApA
QCAtMCwwICsxLDU0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBH
LiBEZW1ldHJpb3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvY3B1dHlwZXMuaCAyOTI2NjggMjAxNS0xMi0yMyAyMTo0
MTo0MlogamhiICQKKyAqLworCisjaWZuZGVmIF9YODZfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX1g4
Nl9DUFVUWVBFU19IXworCisvKgorICogVmVuZG9ycyBvZiBwcm9jZXNzb3IuCisgKi8KKyNkZWZp
bmUJQ1BVX1ZFTkRPUl9OU0MJCTB4MTAwYgkJLyogTlNDICovCisjZGVmaW5lCUNQVV9WRU5ET1Jf
SUJNCQkweDEwMTQJCS8qIElCTSAqLworI2RlZmluZQlDUFVfVkVORE9SX0FNRAkJMHgxMDIyCQkv
KiBBTUQgKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9TSVMJCTB4MTAzOQkJLyogU2lTICovCisjZGVm
aW5lCUNQVV9WRU5ET1JfVU1DCQkweDEwNjAJCS8qIFVNQyAqLworI2RlZmluZQlDUFVfVkVORE9S
X05FWEdFTgkweDEwNzQJCS8qIE5leGdlbiAqLworI2RlZmluZQlDUFVfVkVORE9SX0NZUklYCTB4
MTA3OAkJLyogQ3lyaXggKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9JRFQJCTB4MTExZAkJLyogQ2Vu
dGF1ci9JRFQvVklBICovCisjZGVmaW5lCUNQVV9WRU5ET1JfVFJBTlNNRVRBCTB4MTI3OQkJLyog
VHJhbnNtZXRhICovCisjZGVmaW5lCUNQVV9WRU5ET1JfSU5URUwJMHg4MDg2CQkvKiBJbnRlbCAq
LworI2RlZmluZQlDUFVfVkVORE9SX1JJU0UJCTB4ZGVhZDJiYWQJLyogUmlzZSAqLworI2RlZmlu
ZQlDUFVfVkVORE9SX0NFTlRBVVIJQ1BVX1ZFTkRPUl9JRFQKKworI2lmbmRlZiBMT0NPUkUKK2V4
dGVybiBpbnQJY3B1OworZXh0ZXJuIGludAljcHVfY2xhc3M7CisjZW5kaWYKKworI2VuZGlmIC8q
ICFfWDg2X0NQVVRZUEVTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2R1bXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9k
dW1wLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgRU1DIENvcnAuCisgKiBBdXRob3I6IENvbnJh
ZCBNZXllciA8Y29ucmFkLm1leWVyQGlzaWxvbi5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvZHVtcC5oIDI3Njc3
MiAyMDE1LTAxLTA3IDAxOjAxOjM5WiBtYXJraiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9E
VU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX0RVTVBfSF8KKworI2lmZGVmIF9fYW1kNjRfXworI2Rl
ZmluZQlLRVJORUxEVU1QX0FSQ0hfVkVSU0lPTglLRVJORUxEVU1QX0FNRDY0X1ZFUlNJT04KKyNk
ZWZpbmUJRU1fVkFMVUUJCUVNX1g4Nl82NAorI2Vsc2UKKyNkZWZpbmUJS0VSTkVMRFVNUF9BUkNI
X1ZFUlNJT04JS0VSTkVMRFVNUF9JMzg2X1ZFUlNJT04KKyNkZWZpbmUJRU1fVkFMVUUJCUVNXzM4
NgorI2VuZGlmCisKKy8qIDIwIHBoeXNfYXZhaWwgZW50cnkgcGFpcnMgY29ycmVzcG9uZCB0byAx
MCBwYSdzICovCisjZGVmaW5lCURVTVBTWVNfTURfUEFfTlBBSVJTCTEwCisjZGVmaW5lCURVTVBT
WVNfTlVNX0FVWF9IRFJTCTAKKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3BhX2luaXQo
dm9pZCkKK3sKKworCWR1bXBzeXNfZ2VuX3BhX2luaXQoKTsKK30KKworc3RhdGljIGlubGluZSBz
dHJ1Y3QgZHVtcF9wYSAqCitkdW1wc3lzX3BhX25leHQoc3RydWN0IGR1bXBfcGEgKnApCit7CisK
KwlyZXR1cm4gKGR1bXBzeXNfZ2VuX3BhX25leHQocCkpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQKK2R1bXBzeXNfd2JpbnZfYWxsKHZvaWQpCit7CisKKwlkdW1wc3lzX2dlbl93Ymludl9hbGwo
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3VubWFwX2NodW5rKHZtX3BhZGRy
X3QgcGEsIHNpemVfdCBzLCB2b2lkICp2YSkKK3sKKworCWR1bXBzeXNfZ2VuX3VubWFwX2NodW5r
KHBhLCBzLCB2YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkdW1wc3lzX3dyaXRlX2F1eF9o
ZWFkZXJzKHN0cnVjdCBkdW1wZXJpbmZvICpkaSkKK3sKKworCXJldHVybiAoZHVtcHN5c19nZW5f
d3JpdGVfYXV4X2hlYWRlcnMoZGkpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2R1bXBzeXMo
c3RydWN0IGR1bXBlcmluZm8gKmRpKQoreworCisJcmV0dXJuIChkdW1wc3lzX2dlbmVyaWMoZGkp
KTsKK30KKworI2VuZGlmICAvKiAhX01BQ0hJTkVfRFVNUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9lbGYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2VsZi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZWxmLmgJ
MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC94ODYvZWxmLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAK
QEAgLTAsMCArMSwyMTUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgSm9obiBE
LiBQb2xzdHJhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VsZi5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBr
aWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRUxGX0hfCisjZGVmaW5lCV9NQUNISU5FX0VM
Rl9IXyAxCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NQUNISU5FX0VMRl9X
QU5UXzMyQklUKQorCisvKgorICogRUxGIGRlZmluaXRpb25zIGZvciB0aGUgaTM4NiBhcmNoaXRl
Y3R1cmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9lbGYzMi5oPgkvKiBEZWZpbml0aW9ucyBjb21t
b24gdG8gYWxsIDMyIGJpdCBhcmNoaXRlY3R1cmVzLiAqLworI2lmIGRlZmluZWQoX19FTEZfV09S
RF9TSVpFKSAmJiBfX0VMRl9XT1JEX1NJWkUgPT0gNjQKKyNpbmNsdWRlIDxzeXMvZWxmNjQuaD4J
LyogRGVmaW5pdGlvbnMgY29tbW9uIHRvIGFsbCA2NCBiaXQgYXJjaGl0ZWN0dXJlcy4gKi8KKyNl
bmRpZgorCisjaWZuZGVmIF9fRUxGX1dPUkRfU0laRQorI2RlZmluZQlfX0VMRl9XT1JEX1NJWkUJ
MzIJLyogVXNlZCBieSA8c3lzL2VsZl9nZW5lcmljLmg+ICovCisjZW5kaWYKKworI2luY2x1ZGUg
PHN5cy9lbGZfZ2VuZXJpYy5oPgorCisjZGVmaW5lCUVMRl9BUkNICUVNXzM4NgorCisjZGVmaW5l
CUVMRl9NQUNISU5FX09LKHgpICgoeCkgPT0gRU1fMzg2IHx8ICh4KSA9PSBFTV80ODYpCisKKy8q
CisgKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8g
dGhlIGludGVycHJldGVyLgorICoKKyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQg
QUJJIHNwZWNpZmljYXRpb24gbmFtZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlz
IGNsYWltIHRvIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoICJfdCIuCisgKi8KKwordHlwZWRlZiBz
dHJ1Y3QgewkvKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlp
bnQJYV90eXBlOwkJCS8qIEVudHJ5IHR5cGUuICovCisJdW5pb24geworCQlsb25nCWFfdmFsOwkJ
LyogSW50ZWdlciB2YWx1ZS4gKi8KKwkJdm9pZAkqYV9wdHI7CQkvKiBBZGRyZXNzLiAqLworCQl2
b2lkCSgqYV9mY24pKHZvaWQpOwkvKiBGdW5jdGlvbiBwb2ludGVyIChub3QgdXNlZCkuICovCisJ
fSBhX3VuOworfSBFbGYzMl9BdXhpbmZvOworCisjaWYgX19FTEZfV09SRF9TSVpFID09IDY0Cisv
KiBGYWtlIGZvciBhbWQ2NCBsb2FkZXIgc3VwcG9ydCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWlu
dCBmYWtlOworfSBFbGY2NF9BdXhpbmZvOworI2VuZGlmCisKK19fRWxmVHlwZShBdXhpbmZvKTsK
KworLyogVmFsdWVzIGZvciBhX3R5cGUuICovCisjZGVmaW5lCUFUX05VTEwJCTAJLyogVGVybWlu
YXRlcyB0aGUgdmVjdG9yLiAqLworI2RlZmluZQlBVF9JR05PUkUJMQkvKiBJZ25vcmVkIGVudHJ5
LiAqLworI2RlZmluZQlBVF9FWEVDRkQJMgkvKiBGaWxlIGRlc2NyaXB0b3Igb2YgcHJvZ3JhbSB0
byBsb2FkLiAqLworI2RlZmluZQlBVF9QSERSCQkzCS8qIFByb2dyYW0gaGVhZGVyIG9mIHByb2dy
YW0gYWxyZWFkeSBsb2FkZWQuICovCisjZGVmaW5lCUFUX1BIRU5UCTQJLyogU2l6ZSBvZiBlYWNo
IHByb2dyYW0gaGVhZGVyIGVudHJ5LiAqLworI2RlZmluZQlBVF9QSE5VTQk1CS8qIE51bWJlciBv
ZiBwcm9ncmFtIGhlYWRlciBlbnRyaWVzLiAqLworI2RlZmluZQlBVF9QQUdFU1oJNgkvKiBQYWdl
IHNpemUgaW4gYnl0ZXMuICovCisjZGVmaW5lCUFUX0JBU0UJCTcJLyogSW50ZXJwcmV0ZXIncyBi
YXNlIGFkZHJlc3MuICovCisjZGVmaW5lCUFUX0ZMQUdTCTgJLyogRmxhZ3MgKHVudXNlZCBmb3Ig
aTM4NikuICovCisjZGVmaW5lCUFUX0VOVFJZCTkJLyogV2hlcmUgaW50ZXJwcmV0ZXIgc2hvdWxk
IHRyYW5zZmVyIGNvbnRyb2wuICovCisjZGVmaW5lCUFUX05PVEVMRgkxMAkvKiBQcm9ncmFtIGlz
IG5vdCBFTEYgPz8gKi8KKyNkZWZpbmUJQVRfVUlECQkxMQkvKiBSZWFsIHVpZC4gKi8KKyNkZWZp
bmUJQVRfRVVJRAkJMTIJLyogRWZmZWN0aXZlIHVpZC4gKi8KKyNkZWZpbmUJQVRfR0lECQkxMwkv
KiBSZWFsIGdpZC4gKi8KKyNkZWZpbmUJQVRfRUdJRAkJMTQJLyogRWZmZWN0aXZlIGdpZC4gKi8K
KyNkZWZpbmUJQVRfRVhFQ1BBVEgJMTUJLyogUGF0aCB0byB0aGUgZXhlY3V0YWJsZS4gKi8KKyNk
ZWZpbmUJQVRfQ0FOQVJZCTE2CS8qIENhbmFyeSBmb3IgU1NQLiAqLworI2RlZmluZQlBVF9DQU5B
UllMRU4JMTcJLyogTGVuZ3RoIG9mIHRoZSBjYW5hcnkuICovCisjZGVmaW5lCUFUX09TUkVMREFU
RQkxOAkvKiBPU1JFTERBVEUuICovCisjZGVmaW5lCUFUX05DUFVTCTE5CS8qIE51bWJlciBvZiBD
UFVzLiAqLworI2RlZmluZQlBVF9QQUdFU0laRVMJMjAJLyogUGFnZXNpemVzLiAqLworI2RlZmlu
ZQlBVF9QQUdFU0laRVNMRU4JMjEJLyogTnVtYmVyIG9mIHBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJ
QVRfVElNRUtFRVAJMjIJLyogUG9pbnRlciB0byB0aW1laGFuZHMuICovCisjZGVmaW5lCUFUX1NU
QUNLUFJPVAkyMwkvKiBJbml0aWFsIHN0YWNrIHByb3RlY3Rpb24uICovCisKKyNkZWZpbmUJQVRf
Q09VTlQJMjQJLyogQ291bnQgb2YgZGVmaW5lZCBhdXggZW50cnkgdHlwZXMuICovCisKKy8qCisg
KiBSZWxvY2F0aW9uIHR5cGVzLgorICovCisKKyNkZWZpbmUJUl8zODZfQ09VTlQJMzgJLyogQ291
bnQgb2YgZGVmaW5lZCByZWxvY2F0aW9uIHR5cGVzLiAqLworCisvKiBEZWZpbmUgIm1hY2hpbmUi
IGNoYXJhY3RlcmlzdGljcyAqLworI2RlZmluZQlFTEZfVEFSR19DTEFTUwlFTEZDTEFTUzMyCisj
ZGVmaW5lCUVMRl9UQVJHX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUJRUxGX1RBUkdfTUFDSAlF
TV8zODYKKyNkZWZpbmUJRUxGX1RBUkdfVkVSCTEKKworI2RlZmluZQlFVF9EWU5fTE9BRF9BRERS
IDB4MDEwMDEwMDAKKworI2VsaWYgZGVmaW5lZChfX2FtZDY0X18pCisKKy8qCisgKiBFTEYgZGVm
aW5pdGlvbnMgZm9yIHRoZSBBTUQ2NCBhcmNoaXRlY3R1cmUuCisgKi8KKworI2lmbmRlZiBfX0VM
Rl9XT1JEX1NJWkUKKyNkZWZpbmUJX19FTEZfV09SRF9TSVpFCTY0CS8qIFVzZWQgYnkgPHN5cy9l
bGZfZ2VuZXJpYy5oPiAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2VsZjMyLmg+CS8qIERlZmlu
aXRpb25zIGNvbW1vbiB0byBhbGwgMzIgYml0IGFyY2hpdGVjdHVyZXMuICovCisjaW5jbHVkZSA8
c3lzL2VsZjY0Lmg+CS8qIERlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgNjQgYml0IGFyY2hpdGVj
dHVyZXMuICovCisjaW5jbHVkZSA8c3lzL2VsZl9nZW5lcmljLmg+CisKKyNkZWZpbmUJRUxGX0FS
Q0gJRU1fWDg2XzY0CisjZGVmaW5lCUVMRl9BUkNIMzIJRU1fMzg2CisKKyNkZWZpbmUJRUxGX01B
Q0hJTkVfT0soeCkgKCh4KSA9PSBFTV9YODZfNjQpCisKKy8qCisgKiBBdXhpbGlhcnkgdmVjdG9y
IGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGludGVycHJldGVyLgorICoK
KyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQgQUJJIHNwZWNpZmljYXRpb24gbmFt
ZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlzIGNsYWltIHRvIGFsbCBzeW1ib2xz
IGVuZGluZyB3aXRoICJfdCIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsJLyogQXV4aWxpYXJ5IHZl
Y3RvciBlbnRyeSBvbiBpbml0aWFsIHN0YWNrICovCisJaW50CWFfdHlwZTsJCQkvKiBFbnRyeSB0
eXBlLiAqLworCXVuaW9uIHsKKwkJaW50CWFfdmFsOwkJLyogSW50ZWdlciB2YWx1ZS4gKi8KKwl9
IGFfdW47Cit9IEVsZjMyX0F1eGluZm87CisKKwordHlwZWRlZiBzdHJ1Y3QgewkvKiBBdXhpbGlh
cnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlsb25nCWFfdHlwZTsJCQkvKiBF
bnRyeSB0eXBlLiAqLworCXVuaW9uIHsKKwkJbG9uZwlhX3ZhbDsJCS8qIEludGVnZXIgdmFsdWUu
ICovCisJCXZvaWQJKmFfcHRyOwkJLyogQWRkcmVzcy4gKi8KKwkJdm9pZAkoKmFfZmNuKSh2b2lk
KTsJLyogRnVuY3Rpb24gcG9pbnRlciAobm90IHVzZWQpLiAqLworCX0gYV91bjsKK30gRWxmNjRf
QXV4aW5mbzsKKworX19FbGZUeXBlKEF1eGluZm8pOworCisvKiBWYWx1ZXMgZm9yIGFfdHlwZS4g
Ki8KKyNkZWZpbmUJQVRfTlVMTAkJMAkvKiBUZXJtaW5hdGVzIHRoZSB2ZWN0b3IuICovCisjZGVm
aW5lCUFUX0lHTk9SRQkxCS8qIElnbm9yZWQgZW50cnkuICovCisjZGVmaW5lCUFUX0VYRUNGRAky
CS8qIEZpbGUgZGVzY3JpcHRvciBvZiBwcm9ncmFtIHRvIGxvYWQuICovCisjZGVmaW5lCUFUX1BI
RFIJCTMJLyogUHJvZ3JhbSBoZWFkZXIgb2YgcHJvZ3JhbSBhbHJlYWR5IGxvYWRlZC4gKi8KKyNk
ZWZpbmUJQVRfUEhFTlQJNAkvKiBTaXplIG9mIGVhY2ggcHJvZ3JhbSBoZWFkZXIgZW50cnkuICov
CisjZGVmaW5lCUFUX1BITlVNCTUJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyIGVudHJpZXMu
ICovCisjZGVmaW5lCUFUX1BBR0VTWgk2CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcy4gKi8KKyNkZWZp
bmUJQVRfQkFTRQkJNwkvKiBJbnRlcnByZXRlcidzIGJhc2UgYWRkcmVzcy4gKi8KKyNkZWZpbmUJ
QVRfRkxBR1MJOAkvKiBGbGFncyAodW51c2VkIGZvciBpMzg2KS4gKi8KKyNkZWZpbmUJQVRfRU5U
UlkJOQkvKiBXaGVyZSBpbnRlcnByZXRlciBzaG91bGQgdHJhbnNmZXIgY29udHJvbC4gKi8KKyNk
ZWZpbmUJQVRfTk9URUxGCTEwCS8qIFByb2dyYW0gaXMgbm90IEVMRiA/PyAqLworI2RlZmluZQlB
VF9VSUQJCTExCS8qIFJlYWwgdWlkLiAqLworI2RlZmluZQlBVF9FVUlECQkxMgkvKiBFZmZlY3Rp
dmUgdWlkLiAqLworI2RlZmluZQlBVF9HSUQJCTEzCS8qIFJlYWwgZ2lkLiAqLworI2RlZmluZQlB
VF9FR0lECQkxNAkvKiBFZmZlY3RpdmUgZ2lkLiAqLworI2RlZmluZQlBVF9FWEVDUEFUSAkxNQkv
KiBQYXRoIHRvIHRoZSBleGVjdXRhYmxlLiAqLworI2RlZmluZQlBVF9DQU5BUlkJMTYJLyogQ2Fu
YXJ5IGZvciBTU1AgKi8KKyNkZWZpbmUJQVRfQ0FOQVJZTEVOCTE3CS8qIExlbmd0aCBvZiB0aGUg
Y2FuYXJ5LiAqLworI2RlZmluZQlBVF9PU1JFTERBVEUJMTgJLyogT1NSRUxEQVRFLiAqLworI2Rl
ZmluZQlBVF9OQ1BVUwkxOQkvKiBOdW1iZXIgb2YgQ1BVcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJ
WkVTCTIwCS8qIFBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJWkVTTEVOCTIxCS8qIE51
bWJlciBvZiBwYWdlc2l6ZXMuICovCisjZGVmaW5lCUFUX1RJTUVLRUVQCTIyCS8qIFBvaW50ZXIg
dG8gdGltZWhhbmRzLiAqLworI2RlZmluZQlBVF9TVEFDS1BST1QJMjMJLyogSW5pdGlhbCBzdGFj
ayBwcm90ZWN0aW9uLiAqLworCisjZGVmaW5lCUFUX0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmlu
ZWQgYXV4IGVudHJ5IHR5cGVzLiAqLworCisvKgorICogUmVsb2NhdGlvbiB0eXBlcy4KKyAqLwor
CisjZGVmaW5lCVJfWDg2XzY0X0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmluZWQgcmVsb2NhdGlv
biB0eXBlcy4gKi8KKworLyogRGVmaW5lICJtYWNoaW5lIiBjaGFyYWN0ZXJpc3RpY3MgKi8KKyNp
ZiBfX0VMRl9XT1JEX1NJWkUgPT0gMzIKKyNkZWZpbmUgRUxGX1RBUkdfQ0xBU1MgIEVMRkNMQVNT
MzIKKyNlbHNlCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTICBFTEZDTEFTUzY0CisjZW5kaWYKKyNk
ZWZpbmUJRUxGX1RBUkdfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZQlFTEZfVEFSR19NQUNICUVN
X1g4Nl82NAorI2RlZmluZQlFTEZfVEFSR19WRVIJMQorCisjaWYgX19FTEZfV09SRF9TSVpFID09
IDMyCisjZGVmaW5lCUVUX0RZTl9MT0FEX0FERFIgMHgwMTAwMTAwMAorI2Vsc2UKKyNkZWZpbmUJ
RVRfRFlOX0xPQURfQUREUiAweDAxMDIxMDAwCisjZW5kaWYKKworI2VuZGlmIC8qIF9faTM4Nl9f
LCBfX2FtZDY0X18gKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9FTEZfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9lbmRpYW4uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2VuZGlhbi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2VuZGlhbi5oCTIwMTYtMDktMjkgMDA6MjQ6
NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTMxIEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMTk4NywgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJF
R0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
CisgKglAKCMpZW5kaWFuLmgJNy44IChCZXJrZWxleSkgNC8zLzkxCisgKiAkRnJlZUJTRDogcmVs
ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VuZGlhbi5oIDIzMzY4NCAyMDEyLTAzLTI5IDIzOjMx
OjQ4WiBkaW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRU5ESUFOX0hfCisjZGVmaW5lCV9N
QUNISU5FX0VORElBTl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lz
L190eXBlcy5oPgorCisvKgorICogRGVmaW5lIHRoZSBvcmRlciBvZiAzMi1iaXQgd29yZHMgaW4g
NjQtYml0IHdvcmRzLgorICovCisjZGVmaW5lCV9RVUFEX0hJR0hXT1JEIDEKKyNkZWZpbmUJX1FV
QURfTE9XV09SRCAwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgYnl0ZSBvcmRlciwgYWNjb3Jk
aW5nIHRvIGJ5dGUgc2lnbmlmaWNhbmNlIGZyb20gbG93CisgKiBhZGRyZXNzIHRvIGhpZ2guCisg
Ki8KKyNkZWZpbmUJX0xJVFRMRV9FTkRJQU4JMTIzNAkvKiBMU0IgZmlyc3Q6IGkzODYsIHZheCAq
LworI2RlZmluZQlfQklHX0VORElBTgk0MzIxCS8qIE1TQiBmaXJzdDogNjgwMDAsIGlibSwgbmV0
ICovCisjZGVmaW5lCV9QRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBm
aXJzdCBpbiBsb25nICovCisKKyNkZWZpbmUJX0JZVEVfT1JERVIJX0xJVFRMRV9FTkRJQU4KKwor
LyoKKyAqIERlcHJlY2F0ZWQgdmFyaWFudHMgdGhhdCBkb24ndCBoYXZlIGVub3VnaCB1bmRlcnNj
b3JlcyB0byBiZSB1c2VmdWwgaW4gbW9yZQorICogc3RyaWN0IG5hbWVzcGFjZXMuCisgKi8KKyNp
ZiBfX0JTRF9WSVNJQkxFCisjZGVmaW5lCUxJVFRMRV9FTkRJQU4JX0xJVFRMRV9FTkRJQU4KKyNk
ZWZpbmUJQklHX0VORElBTglfQklHX0VORElBTgorI2RlZmluZQlQRFBfRU5ESUFOCV9QRFBfRU5E
SUFOCisjZGVmaW5lCUJZVEVfT1JERVIJX0JZVEVfT1JERVIKKyNlbmRpZgorCisjZGVmaW5lCV9f
YnN3YXAxNl9nZW4oeCkJKF9fdWludDE2X3QpKCh4KSA8PCA4IHwgKHgpID4+IDgpCisjZGVmaW5l
CV9fYnN3YXAzMl9nZW4oeCkJCVwKKwkoKChfX3VpbnQzMl90KV9fYnN3YXAxNigoeCkgJiAweGZm
ZmYpIDw8IDE2KSB8IF9fYnN3YXAxNigoeCkgPj4gMTYpKQorI2RlZmluZQlfX2Jzd2FwNjRfZ2Vu
KHgpCQlcCisJKCgoX191aW50NjRfdClfX2Jzd2FwMzIoKHgpICYgMHhmZmZmZmZmZikgPDwgMzIp
IHwgX19ic3dhcDMyKCh4KSA+PiAzMikpCisKKyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fQ09O
U1RBTlRfUAorI2RlZmluZQlfX2Jzd2FwMTYoeCkJCQkJXAorCSgoX191aW50MTZfdCkoX19idWls
dGluX2NvbnN0YW50X3AoeCkgPwlcCisJICAgIF9fYnN3YXAxNl9nZW4oKF9fdWludDE2X3QpKHgp
KSA6IF9fYnN3YXAxNl92YXIoeCkpKQorI2RlZmluZQlfX2Jzd2FwMzIoeCkJCQlcCisJKF9fYnVp
bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwMzJfZ2VuKChfX3VpbnQzMl90KSh4
KSkgOiBfX2Jzd2FwMzJfdmFyKHgpKQorI2RlZmluZQlfX2Jzd2FwNjQoeCkJCQlcCisJKF9fYnVp
bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwNjRfZ2VuKChfX3VpbnQ2NF90KSh4
KSkgOiBfX2Jzd2FwNjRfdmFyKHgpKQorI2Vsc2UKKy8qIFhYWCB0aGVzZSBhcmUgYnJva2VuIGZv
ciB1c2UgaW4gc3RhdGljIGluaXRpYWxpemVycy4gKi8KKyNkZWZpbmUJX19ic3dhcDE2KHgpCV9f
YnN3YXAxNl92YXIoeCkKKyNkZWZpbmUJX19ic3dhcDMyKHgpCV9fYnN3YXAzMl92YXIoeCkKKyNk
ZWZpbmUJX19ic3dhcDY0KHgpCV9fYnN3YXA2NF92YXIoeCkKKyNlbmRpZgorCisvKiBUaGVzZSBh
cmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgdG8gYXZvaWQgbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiB4
LiAqLworCitzdGF0aWMgX19pbmxpbmUgX191aW50MTZfdAorX19ic3dhcDE2X3ZhcihfX3VpbnQx
Nl90IF94KQoreworCisJcmV0dXJuIChfX2Jzd2FwMTZfZ2VuKF94KSk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSBfX3VpbnQzMl90CitfX2Jzd2FwMzJfdmFyKF9fdWludDMyX3QgX3gpCit7CisKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCV9fYXNtKCJic3dhcCAlMCIgOiAiK3IiIChfeCkpOworCXJl
dHVybiAoX3gpOworI2Vsc2UKKwlyZXR1cm4gKF9fYnN3YXAzMl9nZW4oX3gpKTsKKyNlbmRpZgor
fQorCitzdGF0aWMgX19pbmxpbmUgX191aW50NjRfdAorX19ic3dhcDY0X3ZhcihfX3VpbnQ2NF90
IF94KQoreworCisjaWYgZGVmaW5lZChfX2FtZDY0X18pICYmIGRlZmluZWQoX19HTlVDTElLRV9B
U00pCisJX19hc20oImJzd2FwICUwIiA6ICIrciIgKF94KSk7CisJcmV0dXJuIChfeCk7CisjZWxz
ZQorCS8qCisJICogSXQgaXMgaW1wb3J0YW50IGZvciB0aGUgb3B0aW1pemF0aW9ucyB0aGF0IHRo
ZSBmb2xsb3dpbmcgaXMgbm90CisJICogcmVhbGx5IGdlbmVyaWMsIGJ1dCBleHBhbmRzIHRvIDIg
X19ic3dhcDMyX3ZhcigpJ3MuCisJICovCisJcmV0dXJuIChfX2Jzd2FwNjRfZ2VuKF94KSk7Cisj
ZW5kaWYKK30KKworI2RlZmluZQlfX2h0b25sKHgpCV9fYnN3YXAzMih4KQorI2RlZmluZQlfX2h0
b25zKHgpCV9fYnN3YXAxNih4KQorI2RlZmluZQlfX250b2hsKHgpCV9fYnN3YXAzMih4KQorI2Rl
ZmluZQlfX250b2hzKHgpCV9fYnN3YXAxNih4KQorCisjZW5kaWYgLyogIV9NQUNISU5FX0VORElB
Tl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mZHQu
aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMjAxNi0wOS0yOSAw
MDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzNiBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2ZkdC5oIDI2MDMy
NyAyMDE0LTAxLTA1IDE4OjQ2OjU4WiBud2hpdGVob3JuICQKKyAqLworCisjaWZuZGVmIF9NQUNI
SU5FX0ZEVF9IXworI2RlZmluZSBfTUFDSElORV9GRFRfSF8KKworX19CRUdJTl9ERUNMUworaW50
IHg4Nl9pbml0X2ZkdCh2b2lkKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTUFDSElORV9G
RFRfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmxv
YXQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mbG9hdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5OCBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDE5ODkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJF
R0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICoJZnJvbTogQCgjKWZsb2F0LmgJNy4xIChCZXJrZWxleSkgNS84LzkwCisgKiAk
RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2Zsb2F0LmggMjg2MzI3IDIwMTUt
MDgtMDUgMTc6MDU6MzVaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9GTE9BVF9I
XworI2RlZmluZSBfTUFDSElORV9GTE9BVF9IXyAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
KworX19CRUdJTl9ERUNMUworZXh0ZXJuIGludCBfX2ZsdF9yb3VuZHModm9pZCk7CitfX0VORF9E
RUNMUworCisjZGVmaW5lIEZMVF9SQURJWAkyCQkvKiBiICovCisjZGVmaW5lIEZMVF9ST1VORFMJ
X19mbHRfcm91bmRzKCkKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQorI2lmZGVmIF9fTFA2
NF9fCisjZGVmaW5lCUZMVF9FVkFMX01FVEhPRAkwCQkvKiBubyBwcm9tb3Rpb25zICovCisjZWxz
ZQorI2RlZmluZQlGTFRfRVZBTF9NRVRIT0QJKC0xKQkJLyogaTM4NyBzZW1hbnRpY3MgYXJlLi4u
aW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorI2RlZmluZQlERUNJTUFMX0RJRwkyMQkJLyogbWF4IHBy
ZWNpc2lvbiBpbiBkZWNpbWFsIGRpZ2l0cyAqLworI2VuZGlmCisKKyNkZWZpbmUgRkxUX01BTlRf
RElHCTI0CQkvKiBwICovCisjZGVmaW5lIEZMVF9FUFNJTE9OCTEuMTkyMDkyOTBFLTA3RgkvKiBi
KiooMS1wKSAqLworI2RlZmluZSBGTFRfRElHCQk2CQkvKiBmbG9vcigocC0xKSpsb2cxMChiKSkr
KGIgPT0gMTApICovCisjZGVmaW5lIEZMVF9NSU5fRVhQCSgtMTI1KQkJLyogZW1pbiAqLworI2Rl
ZmluZSBGTFRfTUlOCQkxLjE3NTQ5NDM1RS0zOEYJLyogYioqKGVtaW4tMSkgKi8KKyNkZWZpbmUg
RkxUX01JTl8xMF9FWFAJKC0zNykJCS8qIGNlaWwobG9nMTAoYioqKGVtaW4tMSkpKSAqLworI2Rl
ZmluZSBGTFRfTUFYX0VYUAkxMjgJCS8qIGVtYXggKi8KKyNkZWZpbmUgRkxUX01BWAkJMy40MDI4
MjM0N0UrMzhGCS8qICgxLWIqKigtcCkpKmIqKmVtYXggKi8KKyNkZWZpbmUgRkxUX01BWF8xMF9F
WFAJMzgJCS8qIGZsb29yKGxvZzEwKCgxLWIqKigtcCkpKmIqKmVtYXgpKSAqLworI2lmIF9fSVNP
X0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUZMVF9UUlVFX01JTgkxLjQwMTI5ODQ2RS00NUYJ
LyogYioqKGVtaW4tcCkgKi8KKyNkZWZpbmUJRkxUX0RFQ0lNQUxfRElHCTkJCS8qIGNlaWwoMStw
KmxvZzEwKGIpKSAqLworI2RlZmluZQlGTFRfSEFTX1NVQk5PUk0JMQorI2VuZGlmIC8qIF9fSVNP
X0NfVklTSUJMRSA+PSAyMDExICovCisKKyNkZWZpbmUgREJMX01BTlRfRElHCTUzCisjZGVmaW5l
IERCTF9FUFNJTE9OCTIuMjIwNDQ2MDQ5MjUwMzEzMUUtMTYKKyNkZWZpbmUgREJMX0RJRwkJMTUK
KyNkZWZpbmUgREJMX01JTl9FWFAJKC0xMDIxKQorI2RlZmluZSBEQkxfTUlOCQkyLjIyNTA3Mzg1
ODUwNzIwMTRFLTMwOAorI2RlZmluZSBEQkxfTUlOXzEwX0VYUAkoLTMwNykKKyNkZWZpbmUgREJM
X01BWF9FWFAJMTAyNAorI2RlZmluZSBEQkxfTUFYCQkxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOAor
I2RlZmluZSBEQkxfTUFYXzEwX0VYUAkzMDgKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMjAxMQor
I2RlZmluZQlEQkxfVFJVRV9NSU4JNC45NDA2NTY0NTg0MTI0NjU0RS0zMjQKKyNkZWZpbmUJREJM
X0RFQ0lNQUxfRElHCTE3CisjZGVmaW5lCURCTF9IQVNfU1VCTk9STQkxCisjZW5kaWYgLyogX19J
U09fQ19WSVNJQkxFID49IDIwMTEgKi8KKworI2RlZmluZSBMREJMX01BTlRfRElHCTY0CisjZGVm
aW5lIExEQkxfRVBTSUxPTgkxLjA4NDIwMjE3MjQ4NTUwNDQzNDBFLTE5TAorI2RlZmluZSBMREJM
X0RJRwkxOAorI2RlZmluZSBMREJMX01JTl9FWFAJKC0xNjM4MSkKKyNkZWZpbmUgTERCTF9NSU4J
My4zNjIxMDMxNDMxMTIwOTM1MDYzRS00OTMyTAorI2RlZmluZSBMREJMX01JTl8xMF9FWFAJKC00
OTMxKQorI2RlZmluZSBMREJMX01BWF9FWFAJMTYzODQKKyNkZWZpbmUgTERCTF9NQVgJMS4xODk3
MzE0OTUzNTcyMzE3NjUwRSs0OTMyTAorI2RlZmluZSBMREJMX01BWF8xMF9FWFAJNDkzMgorI2lm
IF9fSVNPX0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUxEQkxfVFJVRV9NSU4JMy42NDUxOTk1
MzE4ODI0NzQ2MDI1RS00OTUxTAorI2RlZmluZQlMREJMX0RFQ0lNQUxfRElHIDIxCisjZGVmaW5l
CUxEQkxfSEFTX1NVQk5PUk0gMQorI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAyMDExICov
CisKKyNlbmRpZiAvKiBfTUFDSElORV9GTE9BVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mcHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L2ZwdS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnB1LmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvZnB1LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSwyMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRo
ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVy
a2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVH
RU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkgMS8xOC85MQorICogJEZy
ZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9mcHUuaCAyNzQ4MTcgMjAxNC0xMS0y
MSAyMDo1MzoxN1ogamhiICQKKyAqLworCisvKgorICogRmxvYXRpbmcgUG9pbnQgRGF0YSBTdHJ1
Y3R1cmVzIGFuZCBDb25zdGFudHMKKyAqIFcuIEpvbGl0eiAxLzkwCisgKi8KKworI2lmbmRlZiBf
WDg2X0ZQVV9IXworI2RlZmluZQlfWDg2X0ZQVV9IXworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1h
dGlvbiBvZiBmbG9hdGluZyBwb2ludCB1bml0LiAqLworc3RydWN0IGVudjg3IHsKKwlpbnQzMl90
CQllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAoMTZiaXRzKSAqLworCWludDMyX3QJCWVuX3N3OwkJ
Lyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8KKwlpbnQzMl90CQllbl90dzsJCS8qIHRhZyB3b3Jk
ICgxNmJpdHMpICovCisJaW50MzJfdAkJZW5fZmlwOwkJLyogZnAgaW5zdHJ1Y3Rpb24gcG9pbnRl
ciAqLworCXVpbnQxNl90CWVuX2ZjczsJCS8qIGZwIGNvZGUgc2VnbWVudCBzZWxlY3RvciAqLwor
CXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJpdHMpICov
CisJaW50MzJfdAkJZW5fZm9vOwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwlpbnQzMl90CQll
bl9mb3M7CQkvKiBmcCBvcGVyYW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KK307CisKKy8qIENvbnRl
bnRzIG9mIGVhY2ggeDg3IGZsb2F0aW5nIHBvaW50IGFjY3VtdWxhdG9yLiAqLworc3RydWN0IGZw
YWNjODcgeworCXVpbnQ4X3QJCWZwX2J5dGVzWzEwXTsKK307CisKKy8qIEZsb2F0aW5nIHBvaW50
IGNvbnRleHQuIChpMzg2IGZuc2F2ZS9mcnN0b3IpICovCitzdHJ1Y3Qgc2F2ZTg3IHsKKwlzdHJ1
Y3QgZW52ODcJc3ZfZW52OwkJLyogZmxvYXRpbmcgcG9pbnQgY29udHJvbC9zdGF0dXMgKi8KKwlz
dHJ1Y3QgZnBhY2M4Nwlzdl9hY1s4XTsJLyogYWNjdW11bGF0b3IgY29udGVudHMsIDAtNyAqLwor
CXVpbnQ4X3QJCXN2X3BhZDBbNF07CS8qIHNhdmVkIHN0YXR1cyB3b3JkIChub3cgdW51c2VkKSAq
LworCXVpbnQ4X3QJCXN2X3BhZFs2NF07Cit9OworCisvKiBDb250ZW50cyBvZiBlYWNoIFNTRSBl
eHRlbmRlZCBhY2N1bXVsYXRvci4gKi8KK3N0cnVjdCB4bW1hY2MgeworCXVpbnQ4X3QJCXhtbV9i
eXRlc1sxNl07Cit9OworCisvKiBDb250ZW50cyBvZiB0aGUgdXBwZXIgMTYgYnl0ZXMgb2YgZWFj
aCBBVlggZXh0ZW5kZWQgYWNjdW11bGF0b3IuICovCitzdHJ1Y3QgeW1tYWNjIHsKKwl1aW50OF90
CQl5bW1fYnl0ZXNbMTZdOworfTsKKworLyogUmVuYW1lIHN0cnVjdHMgYmVsb3cgZGVwZW5kaW5n
IG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLiAqLworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCV9f
ZW52eG1tMzIJZW52eG1tCisjZWxzZQorI2RlZmluZQlfX2VudnhtbTMyCWVudnhtbTMyCisjZGVm
aW5lCV9fZW52eG1tNjQJZW52eG1tCisjZW5kaWYKKworc3RydWN0IF9fZW52eG1tMzIgeworCXVp
bnQxNl90CWVuX2N3OwkJLyogY29udHJvbCB3b3JkICgxNmJpdHMpICovCisJdWludDE2X3QJZW5f
c3c7CQkvKiBzdGF0dXMgd29yZCAoMTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3R3OwkJLyogdGFn
IHdvcmQgKDE2Yml0cykgKi8KKwl1aW50MTZfdAllbl9vcGNvZGU7CS8qIG9wY29kZSBsYXN0IGV4
ZWN1dGVkICgxMSBiaXRzKSAqLworCXVpbnQzMl90CWVuX2ZpcDsJCS8qIGZwIGluc3RydWN0aW9u
IHBvaW50ZXIgKi8KKwl1aW50MTZfdAllbl9mY3M7CQkvKiBmcCBjb2RlIHNlZ21lbnQgc2VsZWN0
b3IgKi8KKwl1aW50MTZfdAllbl9wYWQwOwkvKiBwYWRkaW5nICovCisJdWludDMyX3QJZW5fZm9v
OwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwl1aW50MTZfdAllbl9mb3M7CQkvKiBmcCBvcGVy
YW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1aW50MTZfdAllbl9wYWQxOwkvKiBwYWRkaW5nICov
CisJdWludDMyX3QJZW5fbXhjc3I7CS8qIFNTRSBjb250cm9sL3N0YXR1cyByZWdpc3RlciAqLwor
CXVpbnQzMl90CWVuX214Y3NyX21hc2s7CS8qIHZhbGlkIGJpdHMgaW4gbXhjc3IgKi8KK307CisK
K3N0cnVjdCBfX2VudnhtbTY0IHsKKwl1aW50MTZfdAllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAo
MTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3N3OwkJLyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8K
Kwl1aW50OF90CQllbl90dzsJCS8qIHRhZyB3b3JkICg4Yml0cykgKi8KKwl1aW50OF90CQllbl96
ZXJvOworCXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJp
dHMgKSAqLworCXVpbnQ2NF90CWVuX3JpcDsJCS8qIGZwIGluc3RydWN0aW9uIHBvaW50ZXIgKi8K
Kwl1aW50NjRfdAllbl9yZHA7CQkvKiBmcCBvcGVyYW5kIHBvaW50ZXIgKi8KKwl1aW50MzJfdAll
bl9teGNzcjsJLyogU1NFIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisJdWludDMyX3QJZW5f
bXhjc3JfbWFzazsJLyogdmFsaWQgYml0cyBpbiBteGNzciAqLworfTsKKworLyogRmxvYXRpbmcg
cG9pbnQgY29udGV4dC4gKGkzODYgZnhzYXZlL2Z4cnN0b3IpICovCitzdHJ1Y3Qgc2F2ZXhtbSB7
CisJc3RydWN0IF9fZW52eG1tMzIJc3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3
CWZwX2FjYzsKKwkJdWludDhfdAkJZnBfcGFkWzZdOyAgICAgIC8qIHBhZGRpbmcgKi8KKwl9IHN2
X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVs4XTsKKwl1aW50OF90CQkJc3ZfcGFkWzIy
NF07Cit9IF9fYWxpZ25lZCgxNik7CisKKyNpZmRlZiBfX2kzODZfXwordW5pb24gc2F2ZWZwdSB7
CisJc3RydWN0IHNhdmU4Nwlzdl84NzsKKwlzdHJ1Y3Qgc2F2ZXhtbQlzdl94bW07Cit9OworI2Vs
c2UKKy8qIEZsb2F0aW5nIHBvaW50IGNvbnRleHQuIChhbWQ2NCBmeHNhdmUvZnhyc3RvcikgKi8K
K3N0cnVjdCBzYXZlZnB1IHsKKwlzdHJ1Y3QgX19lbnZ4bW02NAlzdl9lbnY7CisJc3RydWN0IHsK
KwkJc3RydWN0IGZwYWNjODcJZnBfYWNjOworCQl1aW50OF90CQlmcF9wYWRbNl07CS8qIHBhZGRp
bmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVsxNl07CisJdWludDhf
dAkJCXN2X3BhZFs5Nl07Cit9IF9fYWxpZ25lZCgxNik7CisjZW5kaWYKKworc3RydWN0IHhzdGF0
ZV9oZHIgeworCXVpbnQ2NF90CXhzdGF0ZV9idjsKKwl1aW50NjRfdAl4c3RhdGVfeGNvbXBfYnY7
CisJdWludDhfdAkJeHN0YXRlX3JzcnYwWzhdOworCXVpbnQ4X3QJCXhzdGF0ZV9yc3J2WzQwXTsK
K307CisjZGVmaW5lCVhTVEFURV9YQ09NUF9CVl9DT01QQUNUCSgxVUxMIDw8IDYzKQorCitzdHJ1
Y3Qgc2F2ZXhtbV94c3RhdGUgeworCXN0cnVjdCB4c3RhdGVfaGRyCXN4X2hkOworCXN0cnVjdCB5
bW1hY2MJCXN4X3ltbVsxNl07Cit9OworCitzdHJ1Y3Qgc2F2ZXhtbV95bW0geworCXN0cnVjdCBf
X2VudnhtbTMyCXN2X2VudjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZnBhY2M4NwlmcF9hY2M7CisJ
CWludDhfdAkJZnBfcGFkWzZdOwkvKiBwYWRkaW5nICovCisJfSBzdl9mcFs4XTsKKwlzdHJ1Y3Qg
eG1tYWNjCQlzdl94bW1bMTZdOworCXVpbnQ4X3QJCQlzdl9wYWRbOTZdOworCXN0cnVjdCBzYXZl
eG1tX3hzdGF0ZQlzdl94c3RhdGU7Cit9IF9fYWxpZ25lZCg2NCk7CisKK3N0cnVjdCBzYXZlZnB1
X3hzdGF0ZSB7CisJc3RydWN0IHhzdGF0ZV9oZHIJc3hfaGQ7CisJc3RydWN0IHltbWFjYwkJc3hf
eW1tWzE2XTsKK307CisKK3N0cnVjdCBzYXZlZnB1X3ltbSB7CisJc3RydWN0IF9fZW52eG1tNjQJ
c3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3CWZwX2FjYzsKKwkJaW50OF90CQlm
cF9wYWRbNl07CS8qIHBhZGRpbmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2
X3htbVsxNl07CisJdWludDhfdAkJCXN2X3BhZFs5Nl07CisJc3RydWN0IHNhdmVmcHVfeHN0YXRl
CXN2X3hzdGF0ZTsKK30gX19hbGlnbmVkKDY0KTsKKworI3VuZGVmIF9fZW52eG1tMzIKKyN1bmRl
ZiBfX2VudnhtbTY0CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZGVmYXVsdCBjb250cm9sIHdvcmQg
Zm9yIGkzODcncyBhbmQgbGF0ZXIgY29wcm9jZXNzb3JzIGlzCisgKiAweDM3RiwgZ2l2aW5nOgor
ICoKKyAqCXJvdW5kIHRvIG5lYXJlc3QKKyAqCTY0LWJpdCBwcmVjaXNpb24KKyAqCWFsbCBleGNl
cHRpb25zIG1hc2tlZC4KKyAqCisgKiBGcmVlQlNEL2kzODYgdXNlcyA1MyBiaXQgcHJlY2lzaW9u
IGZvciB0aGluZ3MgbGlrZSBmYWRkL2ZzdWIvZnNxcnQgZXRjCisgKiBiZWNhdXNlIG9mIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gbWVtb3J5IGFuZCBmcHUgcmVnaXN0ZXIgc3RhY2sgYXJndW1lbnRz
LgorICogSWYgaXRzIHVzaW5nIGFuIGludGVybWVkaWF0ZSBmcHUgcmVnaXN0ZXIsIGl0IGhhcyA4
MC82NCBiaXRzIHRvIHdvcmsKKyAqIHdpdGguICBJZiBpdCB1c2VzIG1lbW9yeSwgaXQgaGFzIDY0
LzUzIGJpdHMgdG8gd29yayB3aXRoLiAgSG93ZXZlciwKKyAqIGdjYyBpcyBhd2FyZSBvZiB0aGlz
IGFuZCBnb2VzIHRvIGEgZmFpciBiaXQgb2YgdHJvdWJsZSB0byBtYWtlIHRoZQorICogYmVzdCB1
c2Ugb2YgaXQuCisgKgorICogVGhpcyBpcyBtb3N0bHkgYWNhZGVtaWMgZm9yIEFNRDY0LCBiZWNh
dXNlIHRoZSBBQkkgcHJlZmVycyB0aGUgdXNlCisgKiBTU0UyIGJhc2VkIG1hdGguICBGb3IgRnJl
ZUJTRC9hbWQ2NCwgd2UgZ28gd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqLworI2RlZmlu
ZQlfX0lOSVRJQUxfRlBVQ1dfXwkweDAzN0YKKyNkZWZpbmUJX19JTklUSUFMX0ZQVUNXX0kzODZf
XwkweDEyN0YKKyNkZWZpbmUJX19JTklUSUFMX05QWENXX18JX19JTklUSUFMX0ZQVUNXX0kzODZf
XworI2RlZmluZQlfX0lOSVRJQUxfTVhDU1JfXwkweDFGODAKKyNkZWZpbmUJX19JTklUSUFMX01Y
Q1NSX01BU0tfXwkweEZGQkYKKworLyoKKyAqIFRoZSBjdXJyZW50IHZhbHVlIG9mICV4Y3IwIGlz
IHNhdmVkIGluIHRoZSBzdl9wYWRbXSBmaWVsZCBvZiB0aGUgRlBVCisgKiBzdGF0ZSBpbiB0aGUg
TlRfWDg2X1hTVEFURSBub3RlIGluIGNvcmUgZHVtcHMuICBUaGlzIG9mZnNldCBpcyBjaG9zZW4K
KyAqIHRvIG1hdGNoIHRoZSBvZmZzZXQgdXNlZCBieSBOVF9YODZfWFNUQVRFIGluIG90aGVyIHN5
c3RlbXMuCisgKi8KKyNkZWZpbmUJWDg2X1hTVEFURV9YQ1IwX09GRlNFVAk0NjQKKworI2VuZGlm
IC8qICFfWDg2X0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9mcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnJhbWUuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTow
MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv
ZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0
OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENvcHlyaWdo
dCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t
IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKWZyYW1lLmgJ
NS4yIChCZXJrZWxleSkgMS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9mcmFtZS5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBraWIgJAorICovCisK
KyNpZm5kZWYgX01BQ0hJTkVfRlJBTUVfSF8KKyNkZWZpbmUgX01BQ0hJTkVfRlJBTUVfSF8gMQor
CisvKgorICogU3lzdGVtIHN0YWNrIGZyYW1lcy4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKy8q
CisgKiBFeGNlcHRpb24vVHJhcCBTdGFjayBGcmFtZQorICovCisKK3N0cnVjdCB0cmFwZnJhbWUg
eworCWludAl0Zl9mczsKKwlpbnQJdGZfZXM7CisJaW50CXRmX2RzOworCWludAl0Zl9lZGk7CisJ
aW50CXRmX2VzaTsKKwlpbnQJdGZfZWJwOworCWludAl0Zl9pc3A7CisJaW50CXRmX2VieDsKKwlp
bnQJdGZfZWR4OworCWludAl0Zl9lY3g7CisJaW50CXRmX2VheDsKKwlpbnQJdGZfdHJhcG5vOwor
CS8qIGJlbG93IHBvcnRpb24gZGVmaW5lZCBpbiAzODYgaGFyZHdhcmUgKi8KKwlpbnQJdGZfZXJy
OworCWludAl0Zl9laXA7CisJaW50CXRmX2NzOworCWludAl0Zl9lZmxhZ3M7CisJLyogYmVsb3cg
b25seSB3aGVuIGNyb3NzaW5nIHJpbmdzIChlLmcuIHVzZXIgdG8ga2VybmVsKSAqLworCWludAl0
Zl9lc3A7CisJaW50CXRmX3NzOworfTsKKworLyogU3VwZXJzZXQgb2YgdHJhcCBmcmFtZSwgZm9y
IHRyYXBzIGZyb20gdmlydHVhbC04MDg2IG1vZGUgKi8KKworc3RydWN0IHRyYXBmcmFtZV92bTg2
IHsKKwlpbnQJdGZfZnM7CisJaW50CXRmX2VzOworCWludAl0Zl9kczsKKwlpbnQJdGZfZWRpOwor
CWludAl0Zl9lc2k7CisJaW50CXRmX2VicDsKKwlpbnQJdGZfaXNwOworCWludAl0Zl9lYng7CisJ
aW50CXRmX2VkeDsKKwlpbnQJdGZfZWN4OworCWludAl0Zl9lYXg7CisJaW50CXRmX3RyYXBubzsK
KwkvKiBiZWxvdyBwb3J0aW9uIGRlZmluZWQgaW4gMzg2IGhhcmR3YXJlICovCisJaW50CXRmX2Vy
cjsKKwlpbnQJdGZfZWlwOworCWludAl0Zl9jczsKKwlpbnQJdGZfZWZsYWdzOworCS8qIGJlbG93
IG9ubHkgd2hlbiBjcm9zc2luZyByaW5ncyAoZS5nLiB1c2VyIHRvIGtlcm5lbCkgKi8KKwlpbnQJ
dGZfZXNwOworCWludAl0Zl9zczsKKwkvKiBiZWxvdyBvbmx5IHdoZW4gc3dpdGNoaW5nIG91dCBv
ZiBWTTg2IG1vZGUgKi8KKwlpbnQJdGZfdm04Nl9lczsKKwlpbnQJdGZfdm04Nl9kczsKKwlpbnQJ
dGZfdm04Nl9mczsKKwlpbnQJdGZfdm04Nl9nczsKK307CisjZW5kaWYgLyogX19pMzg2X18gKi8K
KworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIEV4Y2VwdGlvbi9UcmFwIFN0YWNrIEZyYW1lCisg
KgorICogVGhlIG9yZGVyaW5nIG9mIHRoaXMgaXMgc3BlY2lmaWNhbGx5IHNvIHRoYXQgd2UgY2Fu
IHRha2UgZmlyc3QgNgorICogdGhlIHN5c2NhbGwgYXJndW1lbnRzIGRpcmVjdGx5IGZyb20gdGhl
IGJlZ2lubmluZyBvZiB0aGUgZnJhbWUuCisgKi8KKworc3RydWN0IHRyYXBmcmFtZSB7CisJcmVn
aXN0ZXJfdAl0Zl9yZGk7CisJcmVnaXN0ZXJfdAl0Zl9yc2k7CisJcmVnaXN0ZXJfdAl0Zl9yZHg7
CisJcmVnaXN0ZXJfdAl0Zl9yY3g7CisJcmVnaXN0ZXJfdAl0Zl9yODsKKwlyZWdpc3Rlcl90CXRm
X3I5OworCXJlZ2lzdGVyX3QJdGZfcmF4OworCXJlZ2lzdGVyX3QJdGZfcmJ4OworCXJlZ2lzdGVy
X3QJdGZfcmJwOworCXJlZ2lzdGVyX3QJdGZfcjEwOworCXJlZ2lzdGVyX3QJdGZfcjExOworCXJl
Z2lzdGVyX3QJdGZfcjEyOworCXJlZ2lzdGVyX3QJdGZfcjEzOworCXJlZ2lzdGVyX3QJdGZfcjE0
OworCXJlZ2lzdGVyX3QJdGZfcjE1OworCXVpbnQzMl90CXRmX3RyYXBubzsKKwl1aW50MTZfdAl0
Zl9mczsKKwl1aW50MTZfdAl0Zl9nczsKKwlyZWdpc3Rlcl90CXRmX2FkZHI7CisJdWludDMyX3QJ
dGZfZmxhZ3M7CisJdWludDE2X3QJdGZfZXM7CisJdWludDE2X3QJdGZfZHM7CisJLyogYmVsb3cg
cG9ydGlvbiBkZWZpbmVkIGluIGhhcmR3YXJlICovCisJcmVnaXN0ZXJfdAl0Zl9lcnI7CisJcmVn
aXN0ZXJfdAl0Zl9yaXA7CisJcmVnaXN0ZXJfdAl0Zl9jczsKKwlyZWdpc3Rlcl90CXRmX3JmbGFn
czsKKwlyZWdpc3Rlcl90CXRmX3JzcDsKKwlyZWdpc3Rlcl90CXRmX3NzOworfTsKKworI2RlZmlu
ZQlURl9IQVNTRUdTCTB4MQorI2RlZmluZQlURl9IQVNCQVNFUwkweDIKKyNkZWZpbmUJVEZfSEFT
RlBYU1RBVEUJMHg0CisjZW5kaWYgLyogX19hbWQ2NF9fICovCisKKyNlbmRpZiAvKiBfTUFDSElO
RV9GUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni9pbml0LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvaW5pdC5oCTIw
MTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTggQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAyMDEzIFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXgu
Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5
cy94ODYvaW5jbHVkZS9pbml0LmggMjcyMzEwIDIwMTQtMDktMzAgMTY6NDY6NDVaIHJveWdlciAk
CisgKi8KKworI2lmbmRlZiBfX1g4Nl9JTklUX0hfXworI2RlZmluZSBfX1g4Nl9JTklUX0hfXwor
LyoKKyAqIFN0cnVjdCBjb250YWluaW5nIHBvaW50ZXJzIHRvIGluaXQgZnVuY3Rpb25zIHdob3Nl
CisgKiBpbXBsZW1lbnRhdGlvbiBpcyBydW4gdGltZSBzZWxlY3RhYmxlLiAgU2VsZWN0aW9uIGNh
biBiZSBtYWRlLAorICogZm9yIGV4YW1wbGUsIGJhc2VkIG9uIGRldGVjdGlvbiBvZiBhIEJJT1Mg
dmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KKyAqLworc3RydWN0IGluaXRf
b3BzIHsKKwljYWRkcl90CSgqcGFyc2VfcHJlbG9hZF9kYXRhKSh1X2ludDY0X3QpOworCXZvaWQJ
KCplYXJseV9jbG9ja19zb3VyY2VfaW5pdCkodm9pZCk7CisJdm9pZAkoKmVhcmx5X2RlbGF5KShp
bnQpOworCXZvaWQJKCpwYXJzZV9tZW1tYXApKGNhZGRyX3QsIHZtX3BhZGRyX3QgKiwgaW50ICop
OworCXVfaW50CSgqbXBfYm9vdGFkZHJlc3MpKHVfaW50KTsKKwlpbnQJKCpzdGFydF9hbGxfYXBz
KSh2b2lkKTsKKwl2b2lkCSgqbXNpX2luaXQpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBp
bml0X29wcyBpbml0X29wczsKKworLyogS25vYiB0byBkaXNhYmxlIGFjcGlfY3B1IGRldmljZXMg
Ki8KK2V4dGVybiBib29sIGFjcGlfY3B1X2Rpc2FibGVkOworCisvKiBLbm9iIHRvIGRpc2FibGUg
YWNwaV9ocGV0IGRldmljZSAqLworZXh0ZXJuIGJvb2wgYWNwaV9ocGV0X2Rpc2FibGVkOworCisv
KiBLbm9iIHRvIGRpc2FibGUgYWNwaV90aW1lciBkZXZpY2UgKi8KK2V4dGVybiBib29sIGFjcGlf
dGltZXJfZGlzYWJsZWQ7CisKKyNlbmRpZiAvKiBfX1g4Nl9JTklUX0hfXyAqLwpkaWZmIC11IC1y
IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9sZWdhY3l2YXIuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L2xlZ2FjeXZhci5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMjAxNi0w
OS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw3MSBAQAorLyotCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDAgUGV0ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvbGVnYWN5dmFyLmggMjk0ODgzIDIwMTYtMDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAq
LworCisjaWZuZGVmIF9YODZfTEVHQUNZVkFSX0hfCisjZGVmaW5lCV9YODZfTEVHQUNZVkFSX0hf
CisKK2VudW0gbGVnYWN5X2RldmljZV9pdmFycyB7CisJTEVHQUNZX0lWQVJfUENJRE9NQUlOLAor
CUxFR0FDWV9JVkFSX1BDSUJVUywKKwlMRUdBQ1lfSVZBUl9QQ0lTTE9ULAorCUxFR0FDWV9JVkFS
X1BDSUZVTkMKK307CisKKyNkZWZpbmUgTEVHQUNZX0FDQ0VTU09SKHZhciwgaXZhciwgdHlwZSkJ
CQkJXAorICAgIF9fQlVTX0FDQ0VTU09SKGxlZ2FjeSwgdmFyLCBMRUdBQ1ksIGl2YXIsIHR5cGUp
CisKK0xFR0FDWV9BQ0NFU1NPUihwY2lkb21haW4sCQlQQ0lET01BSU4sCXVpbnQzMl90KQorTEVH
QUNZX0FDQ0VTU09SKHBjaWJ1cywJCQlQQ0lCVVMsCQl1aW50MzJfdCkKK0xFR0FDWV9BQ0NFU1NP
UihwY2lzbG90LAkJUENJU0xPVCwJaW50KQorTEVHQUNZX0FDQ0VTU09SKHBjaWZ1bmMsCQlQQ0lG
VU5DLAlpbnQpCisKKyN1bmRlZiBMRUdBQ1lfQUNDRVNTT1IKKworaW50CWxlZ2FjeV9wY2liX21h
eHNsb3RzKGRldmljZV90IGRldik7Cit1aW50MzJfdCBsZWdhY3lfcGNpYl9yZWFkX2NvbmZpZyhk
ZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9pbnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2lu
dCByZWcsIGludCBieXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfcmVhZF9pdmFyKGRldmljZV90IGRl
diwgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwKKyAgICB1aW50cHRyX3QgKnJlc3VsdCk7Cit2
b2lkCWxlZ2FjeV9wY2liX3dyaXRlX2NvbmZpZyhkZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9p
bnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2ludCByZWcsIHVpbnQzMl90IGRhdGEsIGludCBi
eXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfd3JpdGVfaXZhcihkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkLCBpbnQgd2hpY2gsCisgICAgdWludHB0cl90IHZhbHVlKTsKK3N0cnVjdCByZXNvdXJj
ZSAqbGVnYWN5X3BjaWJfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGls
ZCwKKyAgICBpbnQgdHlwZSwgaW50ICpyaWQsIHJtYW5fcmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3Qg
ZW5kLCBybWFuX3Jlc190IGNvdW50LAorICAgIHVfaW50IGZsYWdzKTsKK2ludAlsZWdhY3lfcGNp
Yl9hZGp1c3RfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUs
CisgICAgc3RydWN0IHJlc291cmNlICpyLCBybWFuX3Jlc190IHN0YXJ0LCBybWFuX3Jlc190IGVu
ZCk7CitpbnQJbGVnYWN5X3BjaWJfcmVsZWFzZV9yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmlj
ZV90IGNoaWxkLCBpbnQgdHlwZSwKKyAgICBpbnQgcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpOwor
aW50CWxlZ2FjeV9wY2liX2FsbG9jX21zaShkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGlu
dCBjb3VudCwKKyAgICBpbnQgbWF4Y291bnQsIGludCAqaXJxcyk7CitpbnQJbGVnYWN5X3BjaWJf
YWxsb2NfbXNpeChkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGludCAqaXJxKTsKK2ludAls
ZWdhY3lfcGNpYl9tYXBfbXNpKGRldmljZV90IHBjaWIsIGRldmljZV90IGRldiwgaW50IGlycSwK
KyAgICB1aW50NjRfdCAqYWRkciwgdWludDMyX3QgKmRhdGEpOworCisjZW5kaWYgLyogIV9YODZf
TEVHQUNZVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L21jYS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbWNhLmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkyMDE2
LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU2IEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMjAwOSBIdWRzb24gUml2ZXIgVHJhZGluZyBMTEMKKyAqIFdyaXR0ZW4g
Ynk6IEpvaG4gSC4gQmFsZHdpbiA8amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL21jYS5oIDI4
MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisKKyNpZm5kZWYgX19YODZfTUNB
X0hfXworI2RlZmluZQlfX1g4Nl9NQ0FfSF9fCisKK3N0cnVjdCBtY2FfcmVjb3JkIHsKKwl1aW50
NjRfdAltcl9zdGF0dXM7CisJdWludDY0X3QJbXJfYWRkcjsKKwl1aW50NjRfdAltcl9taXNjOwor
CXVpbnQ2NF90CW1yX3RzYzsKKwlpbnQJCW1yX2FwaWNfaWQ7CisJaW50CQltcl9iYW5rOworCXVp
bnQ2NF90CW1yX21jZ19jYXA7CisJdWludDY0X3QJbXJfbWNnX3N0YXR1czsKKwlpbnQJCW1yX2Nw
dV9pZDsKKwlpbnQJCW1yX2NwdV92ZW5kb3JfaWQ7CisJaW50CQltcl9jcHU7Cit9OworCisjaWZk
ZWYgX0tFUk5FTAorCit2b2lkCWNtY19pbnRyKHZvaWQpOwordm9pZAltY2FfaW5pdCh2b2lkKTsK
K3ZvaWQJbWNhX2ludHIodm9pZCk7Cit2b2lkCW1jYV9yZXN1bWUodm9pZCk7CisKKyNlbmRpZgor
CisjZW5kaWYgLyogIV9fWDg2X01DQV9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L21ldGFkYXRhLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tZXRhZGF0
YS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0
ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbWV0YWRhdGEuaCAyOTMzNDMg
MjAxNi0wMS0wNyAxOTo0NzoyNlogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX01F
VEFEQVRBX0hfCisjZGVmaW5lCV9NQUNISU5FX01FVEFEQVRBX0hfCisKKyNkZWZpbmUJTU9ESU5G
T01EX1NNQVAJCTB4MTAwMQorI2RlZmluZQlNT0RJTkZPTURfU01BUF9YQVRUUgkweDEwMDIKKyNk
ZWZpbmUJTU9ESU5GT01EX0RUQlAJCTB4MTAwMworI2RlZmluZQlNT0RJTkZPTURfRUZJX01BUAkw
eDEwMDQKKyNkZWZpbmUJTU9ESU5GT01EX0VGSV9GQgkweDEwMDUKKyNkZWZpbmUJTU9ESU5GT01E
X01PRFVMRVAJMHgxMDA2CisKK3N0cnVjdCBlZmlfbWFwX2hlYWRlciB7CisJdWludDY0X3QJbWVt
b3J5X3NpemU7CisJdWludDY0X3QJZGVzY3JpcHRvcl9zaXplOworCXVpbnQzMl90CWRlc2NyaXB0
b3JfdmVyc2lvbjsKK307CisKK3N0cnVjdCBlZmlfZmIgeworCXVpbnQ2NF90CWZiX2FkZHI7CisJ
dWludDY0X3QJZmJfc2l6ZTsKKwl1aW50MzJfdAlmYl9oZWlnaHQ7CisJdWludDMyX3QJZmJfd2lk
dGg7CisJdWludDMyX3QJZmJfc3RyaWRlOworCXVpbnQzMl90CWZiX21hc2tfcmVkOworCXVpbnQz
Ml90CWZiX21hc2tfZ3JlZW47CisJdWludDMyX3QJZmJfbWFza19ibHVlOworCXVpbnQzMl90CWZi
X21hc2tfcmVzZXJ2ZWQ7Cit9OworCisjZW5kaWYgLyogIV9NQUNISU5FX01FVEFEQVRBX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tcHRhYmxlLmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyMDQgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTk2LCBieSBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1heSBO
T1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbXB0YWJsZS5oIDI1OTIyOCAy
MDEzLTEyLTExIDIxOjE5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX01QVEFC
TEVfSF9fCisjZGVmaW5lCV9fTUFDSElORV9NUFRBQkxFX0hfXworCitlbnVtIGJ1c1R5cGVzIHsK
KyAgICBOT0JVUyA9IDAsCisgICAgQ0JVUyA9IDEsCisgICAgQ0JVU0lJID0gMiwKKyAgICBFSVNB
ID0gMywKKyAgICBJU0EgPSA2LAorICAgIE1DQSA9IDksCisgICAgUENJID0gMTMsCisgICAgWFBS
RVNTID0gMTgsCisgICAgTUFYX0JVU1RZUEUgPSAxOCwKKyAgICBVTktOT1dOX0JVU1RZUEUgPSAw
eGZmCit9OworCisvKiBNUCBGbG9hdGluZyBQb2ludGVyIFN0cnVjdHVyZSAqLwordHlwZWRlZiBz
dHJ1Y3QgTVBGUFMgeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQzMl90IHBhcDsKKwl1
aW50OF90CWxlbmd0aDsKKwl1aW50OF90CXNwZWNfcmV2OworCXVpbnQ4X3QJY2hlY2tzdW07CisJ
dWludDhfdAljb25maWdfdHlwZTsKKwl1aW50OF90CW1wZmIyOworCXVpbnQ4X3QJbXBmYjM7CisJ
dWludDhfdAltcGZiNDsKKwl1aW50OF90CW1wZmI1OworfSBfX3BhY2tlZCAqbXBmcHNfdDsKKwor
I2RlZmluZQlNUEZCMl9JTUNSX1BSRVNFTlQJMHg4MAorI2RlZmluZQlNUEZCMl9NVUxfQ0xLX1NS
Q1MJMHg0MAorCisvKiBNUCBDb25maWd1cmF0aW9uIFRhYmxlIEhlYWRlciAqLwordHlwZWRlZiBz
dHJ1Y3QgTVBDVEggeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQxNl90IGJhc2VfdGFi
bGVfbGVuZ3RoOworCXVpbnQ4X3QJc3BlY19yZXY7CisJdWludDhfdAljaGVja3N1bTsKKwl1aW50
OF90CW9lbV9pZFs4XTsKKwl1aW50OF90CXByb2R1Y3RfaWRbMTJdOworCXVpbnQzMl90IG9lbV90
YWJsZV9wb2ludGVyOworCXVpbnQxNl90IG9lbV90YWJsZV9zaXplOworCXVpbnQxNl90IGVudHJ5
X2NvdW50OworCXVpbnQzMl90IGFwaWNfYWRkcmVzczsKKwl1aW50MTZfdCBleHRlbmRlZF90YWJs
ZV9sZW5ndGg7CisJdWludDhfdAlleHRlbmRlZF90YWJsZV9jaGVja3N1bTsKKwl1aW50OF90CXJl
c2VydmVkOworfSBfX3BhY2tlZCAqbXBjdGhfdDsKKworLyogQmFzZSB0YWJsZSBlbnRyaWVzICov
CisKKyNkZWZpbmUJTVBDVF9FTlRSWV9QUk9DRVNTT1IJMAorI2RlZmluZQlNUENUX0VOVFJZX0JV
UwkJMQorI2RlZmluZQlNUENUX0VOVFJZX0lPQVBJQwkyCisjZGVmaW5lCU1QQ1RfRU5UUllfSU5U
CQkzCisjZGVmaW5lCU1QQ1RfRU5UUllfTE9DQUxfSU5UCTQKKwordHlwZWRlZiBzdHJ1Y3QgUFJP
Q0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGljX2lkOworCXVpbnQ4X3QJYXBp
Y192ZXJzaW9uOworCXVpbnQ4X3QJY3B1X2ZsYWdzOworCXVpbnQzMl90IGNwdV9zaWduYXR1cmU7
CisJdWludDMyX3QgZmVhdHVyZV9mbGFnczsKKwl1aW50MzJfdCByZXNlcnZlZDE7CisJdWludDMy
X3QgcmVzZXJ2ZWQyOworfSBfX3BhY2tlZCAqcHJvY19lbnRyeV9wdHI7CisKKyNkZWZpbmUgUFJP
Q0VOVFJZX0ZMQUdfRU4JMHgwMQorI2RlZmluZSBQUk9DRU5UUllfRkxBR19CUAkweDAyCisKK3R5
cGVkZWYgc3RydWN0IEJVU0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlidXNfaWQ7
CisJdWludDhfdAlidXNfdHlwZVs2XTsKK30gX19wYWNrZWQgKmJ1c19lbnRyeV9wdHI7CisKK3R5
cGVkZWYgc3RydWN0IElPQVBJQ0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGlj
X2lkOworCXVpbnQ4X3QJYXBpY192ZXJzaW9uOworCXVpbnQ4X3QJYXBpY19mbGFnczsKKwl1aW50
MzJfdCBhcGljX2FkZHJlc3M7Cit9IF9fcGFja2VkICppb19hcGljX2VudHJ5X3B0cjsKKworI2Rl
ZmluZSBJT0FQSUNFTlRSWV9GTEFHX0VOCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgSU5URU5UUlkg
eworCXVpbnQ4X3QJdHlwZTsKKwl1aW50OF90CWludF90eXBlOworCXVpbnQxNl90IGludF9mbGFn
czsKKwl1aW50OF90CXNyY19idXNfaWQ7CisJdWludDhfdAlzcmNfYnVzX2lycTsKKwl1aW50OF90
CWRzdF9hcGljX2lkOworCXVpbnQ4X3QJZHN0X2FwaWNfaW50OworfSBfX3BhY2tlZCAqaW50X2Vu
dHJ5X3B0cjsKKworI2RlZmluZQlJTlRFTlRSWV9UWVBFX0lOVCAgCTAKKyNkZWZpbmUJSU5URU5U
UllfVFlQRV9OTUkJMQorI2RlZmluZQlJTlRFTlRSWV9UWVBFX1NNSQkyCisjZGVmaW5lCUlOVEVO
VFJZX1RZUEVfRVhUSU5UCTMKKworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWQkJCTB4
MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWV9DT05GT1JNCQkweDAKKyNkZWZpbmUJ
SU5URU5UUllfRkxBR1NfUE9MQVJJVFlfQUNUSVZFSEkJMHgxCisjZGVmaW5lCUlOVEVOVFJZX0ZM
QUdTX1BPTEFSSVRZX0FDVElWRUxPCTB4MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19UUklHR0VS
CQkJMHhjCisjZGVmaW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfQ09ORk9STQkJMHgwCisjZGVm
aW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfRURHRQkJMHg0CisjZGVmaW5lCUlOVEVOVFJZX0ZM
QUdTX1RSSUdHRVJfTEVWRUwJCTB4YworCisvKiBFeHRlbmRlZCB0YWJsZSBlbnRyaWVzICovCisK
K3R5cGVkZWYJc3RydWN0IEVYVEVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlsZW5n
dGg7Cit9IF9fcGFja2VkICpleHRfZW50cnlfcHRyOworCisjZGVmaW5lCU1QQ1RfRVhURU5UUllf
U0FTCTB4ODAKKyNkZWZpbmUJTVBDVF9FWFRFTlRSWV9CSEQJMHg4MQorI2RlZmluZQlNUENUX0VY
VEVOVFJZX0NCQVNNCTB4ODIKKwordHlwZWRlZiBzdHJ1Y3QgU0FTRU5UUlkgeworCXVpbnQ4X3QJ
dHlwZTsKKwl1aW50OF90CWxlbmd0aDsKKwl1aW50OF90CWJ1c19pZDsKKwl1aW50OF90CWFkZHJl
c3NfdHlwZTsKKwl1aW50NjRfdCBhZGRyZXNzX2Jhc2U7CisJdWludDY0X3QgYWRkcmVzc19sZW5n
dGg7Cit9IF9fcGFja2VkICpzYXNfZW50cnlfcHRyOworCisjZGVmaW5lCVNBU0VOVFJZX1RZUEVf
SU8JMAorI2RlZmluZQlTQVNFTlRSWV9UWVBFX01FTU9SWQkxCisjZGVmaW5lCVNBU0VOVFJZX1RZ
UEVfUFJFRkVUQ0gJMgorCit0eXBlZGVmIHN0cnVjdCBCSERFTlRSWSB7CisJdWludDhfdAl0eXBl
OworCXVpbnQ4X3QJbGVuZ3RoOworCXVpbnQ4X3QJYnVzX2lkOworCXVpbnQ4X3QJYnVzX2luZm87
CisJdWludDhfdAlwYXJlbnRfYnVzOworCXVpbnQ4X3QJcmVzZXJ2ZWRbM107Cit9IF9fcGFja2Vk
ICpiaGRfZW50cnlfcHRyOworCisjZGVmaW5lCUJIREVOVFJZX0lORk9fU1VCVFJBQ1RJVkVfREVD
T0RFCTB4MQorCit0eXBlZGVmIHN0cnVjdCBDQkFTTUVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJ
dWludDhfdAlsZW5ndGg7CisJdWludDhfdAlidXNfaWQ7CisJdWludDhfdAlhZGRyZXNzX21vZDsK
Kwl1aW50MzJfdCBwcmVkZWZpbmVkX3JhbmdlOworfSBfX3BhY2tlZCAqY2Jhc21fZW50cnlfcHRy
OworCisjZGVmaW5lCUNCQVNNRU5UUllfQUREUkVTU19NT0RfQURECQkweDAKKyNkZWZpbmUJQ0JB
U01FTlRSWV9BRERSRVNTX01PRF9TVUJUUkFDVAkJMHgxCisKKyNkZWZpbmUJQ0JBU01FTlRSWV9S
QU5HRV9JU0FfSU8JCTAKKyNkZWZpbmUJQ0JBU01FTlRSWV9SQU5HRV9WR0FfSU8JCTEKKworI2lm
ZGVmIF9LRVJORUwKK3N0cnVjdCBtcHRhYmxlX2hvc3RiX3NvZnRjIHsKKyNpZmRlZiBORVdfUENJ
QgorCXN0cnVjdCBwY2liX2hvc3RfcmVzb3VyY2VzIHNjX2hvc3RfcmVzOworCWludAkJc2NfZGVj
b2Rlc192Z2FfaW87CisJaW50CQlzY19kZWNvZGVzX2lzYV9pbzsKKyNlbmRpZgorfTsKKworI2lm
ZGVmIE5FV19QQ0lCCit2b2lkCW1wdGFibGVfcGNpX2hvc3RfcmVzX2luaXQoZGV2aWNlX3QgcGNp
Yik7CisjZW5kaWYKK2ludAltcHRhYmxlX3BjaV9wcm9iZV90YWJsZShpbnQgYnVzKTsKK2ludAlt
cHRhYmxlX3BjaV9yb3V0ZV9pbnRlcnJ1cHQoZGV2aWNlX3QgcGNpYiwgZGV2aWNlX3QgZGV2LCBp
bnQgcGluKTsKKyNlbmRpZgorI2VuZGlmIC8qICFfX01BQ0hJTkVfTVBUQUJMRV9IX18gKi8KZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvb2Z3X21hY2hkZXAuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19tYWNoZGVwLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9vZndfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19t
YWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0
MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4
Ni9pbmNsdWRlL29md19tYWNoZGVwLmggMjg3MjYwIDIwMTUtMDgtMjggMTU6NDE6MDlaIGltcCAk
CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9PRldfTUFDSERFUF9IXworI2RlZmluZSBfTUFDSElO
RV9PRldfTUFDSERFUF9IXworCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDx2
bS92bS5oPgorCit0eXBlZGVmCXVpbnQzMl90CWNlbGxfdDsKKworc3RydWN0IG1lbV9yZWdpb24g
eworCXZtX29mZnNldF90CW1yX3N0YXJ0OworCXZtX3NpemVfdAltcl9zaXplOworfTsKKworI2Vu
ZGlmIC8qIF9NQUNISU5FX09GV19NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L3BjaV9jZmdyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L3BjaV9jZmdyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2
L3BjaV9jZmdyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2MCBAQAorLyotCisgKiBDb3B5cmlnaHQg
KGMpIDE5OTcsIFN0ZWZhbiBFc3NlciA8c2VAZnJlZWJzZC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgor
ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wY2lfY2ZncmVnLmggMjk0ODgzIDIwMTYt
MDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAqCisgKi8KKworI2lmbmRlZiBfX1g4Nl9QQ0lf
Q0ZHUkVHX0hfXworI2RlZmluZQlfX1g4Nl9QQ0lfQ0ZHUkVHX0hfXworCisjZGVmaW5lIENPTkYx
X0FERFJfUE9SVCAgICAweDBjZjgKKyNkZWZpbmUgQ09ORjFfREFUQV9QT1JUICAgIDB4MGNmYwor
CisjZGVmaW5lIENPTkYxX0VOQUJMRSAgICAgICAweDgwMDAwMDAwdWwKKyNkZWZpbmUgQ09ORjFf
RU5BQkxFX0NISyAgIDB4ODAwMDAwMDB1bAorI2RlZmluZSBDT05GMV9FTkFCTEVfTVNLICAgMHg3
ZjAwMDAwMHVsCisjZGVmaW5lIENPTkYxX0VOQUJMRV9DSEsxICAweGZmMDAwMDAxdWwKKyNkZWZp
bmUgQ09ORjFfRU5BQkxFX01TSzEgIDB4ODAwMDAwMDF1bAorI2RlZmluZSBDT05GMV9FTkFCTEVf
UkVTMSAgMHg4MDAwMDAwMHVsCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1BPUlQgIDB4MGNmOAor
I2RlZmluZSBDT05GMl9GT1JXQVJEX1BPUlQgMHgwY2ZhCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxF
X0NISyAgIDB4MGUKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1JFUyAgIDB4MGUKKworcm1hbl9yZXNf
dAlob3N0Yl9hbGxvY19zdGFydChpbnQgdHlwZSwgcm1hbl9yZXNfdCBzdGFydCwgcm1hbl9yZXNf
dCBlbmQsIHJtYW5fcmVzX3QgY291bnQpOworaW50CQlwY2llX2NmZ3JlZ29wZW4odWludDY0X3Qg
YmFzZSwgdWludDhfdCBtaW5idXMsIHVpbnQ4X3QgbWF4YnVzKTsKK2ludAkJcGNpX2NmZ3JlZ29w
ZW4odm9pZCk7Cit1X2ludDMyX3QJcGNpX2NmZ3JlZ3JlYWQoaW50IGJ1cywgaW50IHNsb3QsIGlu
dCBmdW5jLCBpbnQgcmVnLCBpbnQgYnl0ZXMpOwordm9pZAkJcGNpX2NmZ3JlZ3dyaXRlKGludCBi
dXMsIGludCBzbG90LCBpbnQgZnVuYywgaW50IHJlZywgdV9pbnQzMl90IGRhdGEsIGludCBieXRl
cyk7CisjaWZkZWYgX19IQVZFX1BJUgordm9pZAkJcGNpX3Bpcl9vcGVuKHZvaWQpOworaW50CQlw
Y2lfcGlyX3Byb2JlKGludCBidXMsIGludCByZXF1aXJlX3BhcnNlKTsKK2ludAkJcGNpX3Bpcl9y
b3V0ZV9pbnRlcnJ1cHQoaW50IGJ1cywgaW50IGRldmljZSwgaW50IGZ1bmMsIGludCBwaW4pOwor
I2VuZGlmCisKKyNlbmRpZiAvKiAhX19YODZfUENJX0NGR1JFR19IX18gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHNsLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni9wc2wuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Bz
bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L3BzbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICsw
MTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdl
bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0
ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcHNsLmgJNS4yIChCZXJrZWxleSkgMS8xOC85
MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wc2wuaCAyNTgxMzUg
MjAxMy0xMS0xNCAxNTozNzoyMFogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1BT
TF9IXworI2RlZmluZQlfTUFDSElORV9QU0xfSF8KKworLyoKKyAqIDM4NiBwcm9jZXNzb3Igc3Rh
dHVzIGxvbmd3b3JkLgorICovCisjZGVmaW5lCVBTTF9DCQkweDAwMDAwMDAxCS8qIGNhcnJ5IGJp
dCAqLworI2RlZmluZQlQU0xfUEYJCTB4MDAwMDAwMDQJLyogcGFyaXR5IGJpdCAqLworI2RlZmlu
ZQlQU0xfQUYJCTB4MDAwMDAwMTAJLyogYmNkIGNhcnJ5IGJpdCAqLworI2RlZmluZQlQU0xfWgkJ
MHgwMDAwMDA0MAkvKiB6ZXJvIGJpdCAqLworI2RlZmluZQlQU0xfTgkJMHgwMDAwMDA4MAkvKiBu
ZWdhdGl2ZSBiaXQgKi8KKyNkZWZpbmUJUFNMX1QJCTB4MDAwMDAxMDAJLyogdHJhY2UgZW5hYmxl
IGJpdCAqLworI2RlZmluZQlQU0xfSQkJMHgwMDAwMDIwMAkvKiBpbnRlcnJ1cHQgZW5hYmxlIGJp
dCAqLworI2RlZmluZQlQU0xfRAkJMHgwMDAwMDQwMAkvKiBzdHJpbmcgaW5zdHJ1Y3Rpb24gZGly
ZWN0aW9uIGJpdCAqLworI2RlZmluZQlQU0xfVgkJMHgwMDAwMDgwMAkvKiBvdmVyZmxvdyBiaXQg
Ki8KKyNkZWZpbmUJUFNMX0lPUEwJMHgwMDAwMzAwMAkvKiBpL28gcHJpdmlsZWdlIGxldmVsICov
CisjZGVmaW5lCVBTTF9OVAkJMHgwMDAwNDAwMAkvKiBuZXN0ZWQgdGFzayBiaXQgKi8KKyNkZWZp
bmUJUFNMX1JGCQkweDAwMDEwMDAwCS8qIHJlc3VtZSBmbGFnIGJpdCAqLworI2RlZmluZQlQU0xf
Vk0JCTB4MDAwMjAwMDAJLyogdmlydHVhbCA4MDg2IG1vZGUgYml0ICovCisjZGVmaW5lCVBTTF9B
QwkJMHgwMDA0MDAwMAkvKiBhbGlnbm1lbnQgY2hlY2tpbmcgKi8KKyNkZWZpbmUJUFNMX1ZJRgkJ
MHgwMDA4MDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUJUFNMX1ZJ
UAkJMHgwMDEwMDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lCVBT
TF9JRAkJMHgwMDIwMDAwMAkvKiBpZGVudGlmaWNhdGlvbiBiaXQgKi8KKworLyoKKyAqIFRoZSBp
NDg2IG1hbnVhbCBzYXlzIHRoYXQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgcmVzZXJ2
ZWQgZmxhZ3MsCisgKiBidXQgdGhpcyBpcyB0b28gbXVjaCB0cm91YmxlIHNpbmNlIHRoZSByZXNl
cnZlZCBmbGFncyBkZXBlbmQgb24gdGhlIGNwdQorICogYW5kIHNldHRpbmcgdGhlbSB0byB0aGVp
ciBoaXN0b3JpY2FsIHZhbHVlcyB3b3JrcyBpbiBwcmFjdGljZS4KKyAqLworI2RlZmluZQlQU0xf
UkVTRVJWRURfREVGQVVMVAkweDAwMDAwMDAyCisKKy8qCisgKiBJbml0aWFsIGZsYWdzIGZvciBr
ZXJuZWwgYW5kIHVzZXIgbW9kZS4gIFRoZSBrZXJuZWwgbGF0ZXIgaW5oZXJpdHMKKyAqIFBTTF9J
IGFuZCBzb21lIG90aGVyIGZsYWdzIGZyb20gdXNlciBtb2RlLgorICovCisjZGVmaW5lCVBTTF9L
RVJORUwJUFNMX1JFU0VSVkVEX0RFRkFVTFQKKyNkZWZpbmUJUFNMX1VTRVIJKFBTTF9SRVNFUlZF
RF9ERUZBVUxUIHwgUFNMX0kpCisKKy8qCisgKiBCaXRzIHRoYXQgY2FuIGJlIGNoYW5nZWQgaW4g
dXNlciBtb2RlIG9uIDQ4NidzLiAgV2UgYWxsb3cgdGhlc2UgYml0cworICogdG8gYmUgY2hhbmdl
ZCB1c2luZyBwdHJhY2UoKSwgc2lncmV0dXJuKCkgYW5kIHByb2Nmcy4gIFNldHRpbmcgUFNfTlQK
KyAqIGlzIHVuZGVzaXJhYmxlIGJ1dCBpdCBtYXkgYXMgd2VsbCBiZSBhbGxvd2VkIHNpbmNlIHVz
ZXJzIGNhbiBpbmZsaWN0CisgKiBpdCBvbiB0aGUga2VybmVsIGRpcmVjdGx5LiAgQ2hhbmdlcyB0
byBQU0xfQUMgYXJlIHNpbGVudGx5IGlnbm9yZWQgb24KKyAqIDM4NidzLgorICoKKyAqIFVzZXJz
IGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgcHJpdmlsZWdlZCBmbGFnIFBTTF9SRi4gIFRoZSBj
cHUgc2V0cyBQU0xfUkYKKyAqIGluIHRmX2VmbGFncyBmb3IgZmF1bHRzLiAgRGVidWdnZXJzIHNo
b3VsZCBzb21ldGltZXMgc2V0IGl0IHRoZXJlIHRvby4KKyAqIHRmX2VmbGFncyBpcyBrZXB0IGlu
IHRoZSBzaWduYWwgY29udGV4dCBkdXJpbmcgc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGVyZSBpcwor
ICogbm8gb3RoZXIgcGxhY2UgdG8gcmVtZW1iZXIgaXQsIHNvIHRoZSBQU0xfUkYgYml0IG1heSBi
ZSBjb3JydXB0ZWQgYnkgdGhlCisgKiBzaWduYWwgaGFuZGxlciB3aXRob3V0IHVzIGtub3dpbmcu
ICBDb3JydXB0aW9uIG9mIHRoZSBQU0xfUkYgYml0IGF0IHdvcnN0CisgKiBjYXVzZXMgb25lIG1v
cmUgb3Igb25lIGxlc3MgZGVidWdnZXIgdHJhcCwgc28gYWxsb3dpbmcgaXQgaXMgZmFpcmx5Cisg
KiBoYXJtbGVzcy4gICAKKyAqLworI2RlZmluZQlQU0xfVVNFUkNIQU5HRSAoUFNMX0MgfCBQU0xf
UEYgfCBQU0xfQUYgfCBQU0xfWiB8IFBTTF9OIHwgUFNMX1QgXAorCQkJfCBQU0xfRCB8IFBTTF9W
IHwgUFNMX05UIHwgUFNMX1JGIHwgUFNMX0FDIHwgUFNMX0lEKQorCisjZW5kaWYgLyogIV9NQUNI
SU5FX1BTTF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni9wdHJhY2UuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3B0cmFjZS5oCi0tLSB1
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRy
YWNlLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2NSBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRo
ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHRyYWNlLmgJOC4xIChCZXJrZWxl
eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wdHJh
Y2UuaCAyODQ5MTkgMjAxNS0wNi0yOSAwNzowNzoyNFoga2liICQKKyAqLworCisjaWZuZGVmIF9N
QUNISU5FX1BUUkFDRV9IXworI2RlZmluZSBfTUFDSElORV9QVFJBQ0VfSF8KKworI2RlZmluZQlf
X0hBVkVfUFRSQUNFX01BQ0hERVAKKworLyoKKyAqIE9uIGFtZDY0IChQVF9GSVJTVE1BQ0ggKyAw
KSBhbmQgKFBUX0ZJUlNUTUFDSCArIDEpIGFyZSBvbGQgdmFsdWVzIGZvcgorICogUFRfR0VUWFNU
QVRFX09MRCBhbmQgUFRfU0VUWFNUQVRFX09MRC4gIFRoZXkgc2hvdWxkIG5vdCBiZSAocmUpdXNl
ZC4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUJUFRfR0VUWE1NUkVHUwkoUFRfRklS
U1RNQUNIICsgMCkKKyNkZWZpbmUJUFRfU0VUWE1NUkVHUwkoUFRfRklSU1RNQUNIICsgMSkKKyNl
bmRpZgorI2lmZGVmIF9LRVJORUwKKyNkZWZpbmUJUFRfR0VUWFNUQVRFX09MRCAoUFRfRklSU1RN
QUNIICsgMikKKyNkZWZpbmUJUFRfU0VUWFNUQVRFX09MRCAoUFRfRklSU1RNQUNIICsgMykKKyNl
bmRpZgorI2RlZmluZQlQVF9HRVRYU1RBVEVfSU5GTyAoUFRfRklSU1RNQUNIICsgNCkKKyNkZWZp
bmUJUFRfR0VUWFNUQVRFCShQVF9GSVJTVE1BQ0ggKyA1KQorI2RlZmluZQlQVF9TRVRYU1RBVEUJ
KFBUX0ZJUlNUTUFDSCArIDYpCisjZGVmaW5lCVBUX0dFVEZTQkFTRQkoUFRfRklSU1RNQUNIICsg
NykKKyNkZWZpbmUJUFRfU0VURlNCQVNFCShQVF9GSVJTVE1BQ0ggKyA4KQorI2RlZmluZQlQVF9H
RVRHU0JBU0UJKFBUX0ZJUlNUTUFDSCArIDkpCisjZGVmaW5lCVBUX1NFVEdTQkFTRQkoUFRfRklS
U1RNQUNIICsgMTApCisKKy8qIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgUFRfR0VUWFNUQVRFX0lO
Rk8uICovCitzdHJ1Y3QgcHRyYWNlX3hzdGF0ZV9pbmZvIHsKKwl1aW50NjRfdAl4c2F2ZV9tYXNr
OworCXVpbnQzMl90CXhzYXZlX2xlbjsKK307CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wdmNsb2NrLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9wdmNsb2NrLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9w
dmNsb2NrLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0
LCBCcnlhbiBWZW50ZWljaGVyIDxicnlhbnZARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvcHZjbG9j
ay5oIDI3ODE4NCAyMDE1LTAyLTA0IDA4OjMzOjA0WiBicnlhbnYgJAorICovCisKKyNpZm5kZWYg
WDg2X1BWQ0xPQ0sKKyNkZWZpbmUgWDg2X1BWQ0xPQ0sKKworc3RydWN0IHB2Y2xvY2tfdmNwdV90
aW1lX2luZm8geworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJcGFkMDsKKwl1aW50NjRf
dAl0c2NfdGltZXN0YW1wOworCXVpbnQ2NF90CXN5c3RlbV90aW1lOworCXVpbnQzMl90CXRzY190
b19zeXN0ZW1fbXVsOworCWludDhfdAkJdHNjX3NoaWZ0OworCXVpbnQ4X3QJCWZsYWdzOworCXVp
bnQ4X3QJCXBhZFsyXTsKK307CisKKyNkZWZpbmUgUFZDTE9DS19GTEFHX1RTQ19TVEFCTEUJCTB4
MDEKKyNkZWZpbmUgUFZDTE9DS19GTEFHX0dVRVNUX1BBU1VFRAkweDAyCisKK3N0cnVjdCBwdmNs
b2NrX3dhbGxfY2xvY2sgeworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJc2VjOworCXVp
bnQzMl90CW5zZWM7Cit9OworCit2b2lkCQlwdmNsb2NrX3Jlc3VtZSh2b2lkKTsKK3VpbnQ2NF90
CXB2Y2xvY2tfZ2V0X2xhc3RfY3ljbGVzKHZvaWQpOwordWludDY0X3QJcHZjbG9ja190c2NfZnJl
cShzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqdGkpOwordWludDY0X3QJcHZjbG9ja19n
ZXRfdGltZWNvdW50KHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICp0aSk7Cit2b2lkCQlw
dmNsb2NrX2dldF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2MsCisJCSAg
ICBzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L3JlZy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94
ODYvcmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9yZWcuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9yZWcuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCww
ICsxLDI1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENv
cHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl
ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpv
bGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXJl
Zy5oCTUuNSAoQmVya2VsZXkpIDEvMTgvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv
eDg2L2luY2x1ZGUvcmVnLmggMjgxMjY2IDIwMTUtMDQtMDggMTY6MzA6NDVaIGpoYiAkCisgKi8K
KworI2lmbmRlZiBfTUFDSElORV9SRUdfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUkVHX0hfCisKKyNp
bmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorCisjaWZkZWYgX19pMzg2X18KKy8qCisgKiBJbmRp
Y2VzIGZvciByZWdpc3RlcnMgaW4gYHN0cnVjdCB0cmFwZnJhbWUnIGFuZCBgc3RydWN0IHJlZ3Mn
LgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuICBJbiB0aGUga2VybmVsLCBp
dCBpcyBvbmx5IHVzZWQgaW4gRlBVCisgKiBlbXVsYXRvcnMgdG8gY29udmVydCBmcm9tIHJlZ2lz
dGVyIG51bWJlcnMgZW5jb2RlZCBpbiBpbnN0cnVjdGlvbnMgdG8KKyAqIHJlZ2lzdGVyIHZhbHVl
cy4gIEV2ZXJ5dGhpbmcgZWxzZSBqdXN0IGFjY2Vzc2VzIHRoZSByZWxldmFudCBzdHJ1Y3QKKyAq
IG1lbWJlcnMuICBJbiB1c2VybGFuZCwgZGVidWdnZXJzIHRlbmQgdG8gYWJ1c2UgdGhpcyBpbnRl
cmZhY2Ugc2luY2UKKyAqIHRoZXkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IGBzdHJ1Y3QgcmVncycg
aXMgYSBzdHJ1Y3QuICBJIGhvcGUgdGhleSBoYXZlCisgKiBzdG9wcGVkIGFjY2Vzc2luZyB0aGUg
cmVnaXN0ZXJzIGluIHRoZSB0cmFwIGZyYW1lIHZpYSBQVF97UkVBRCxXUklURX1fVQorICogYW5k
IHdlIGNhbiBzdG9wIHN1cHBvcnRpbmcgdGhlIHVzZXIgYXJlYSBzb29uLgorICovCisjZGVmaW5l
CXRGUwkoMCkKKyNkZWZpbmUJdEVTCSgxKQorI2RlZmluZQl0RFMJKDIpCisjZGVmaW5lCXRFREkJ
KDMpCisjZGVmaW5lCXRFU0kJKDQpCisjZGVmaW5lCXRFQlAJKDUpCisjZGVmaW5lCXRJU1AJKDYp
CisjZGVmaW5lCXRFQlgJKDcpCisjZGVmaW5lCXRFRFgJKDgpCisjZGVmaW5lCXRFQ1gJKDkpCisj
ZGVmaW5lCXRFQVgJKDEwKQorI2RlZmluZQl0RVJSCSgxMikKKyNkZWZpbmUJdEVJUAkoMTMpCisj
ZGVmaW5lCXRDUwkoMTQpCisjZGVmaW5lCXRFRkxBR1MJKDE1KQorI2RlZmluZQl0RVNQCSgxNikK
KyNkZWZpbmUJdFNTCSgxNykKKworLyoKKyAqIEluZGljZXMgZm9yIHJlZ2lzdGVycyBpbiBgc3Ry
dWN0IHJlZ3MnIG9ubHkuCisgKgorICogU29tZSByZWdpc3RlcnMgbGl2ZSBpbiB0aGUgcGNiIGFu
ZCBhcmUgb25seSBpbiBhbiAiYXJyYXkiIHdpdGggdGhlCisgKiBvdGhlciByZWdpc3RlcnMgaW4g
YXBwbGljYXRpb24gaW50ZXJmYWNlcyB0aGF0IGNvcHkgYWxsIHRoZSByZWdpc3RlcnMKKyAqIHRv
IG9yIGZyb20gYSBgc3RydWN0IHJlZ3MnLgorICovCisjZGVmaW5lCXRHUwkoMTgpCisjZW5kaWYg
LyogX19pMzg2X18gKi8KKworLyogUmVuYW1lIHRoZSBzdHJ1Y3RzIGJlbG93IGRlcGVuZGluZyBv
biB0aGUgbWFjaGluZSBhcmNoaXRlY3R1cmUuICovCisjaWZkZWYJX19pMzg2X18KKyNkZWZpbmUJ
X19yZWczMgkJcmVnCisjZGVmaW5lCV9fZnByZWczMglmcHJlZworI2RlZmluZQlfX2RicmVnMzIJ
ZGJyZWcKKyNlbHNlCisjZGVmaW5lCV9fcmVnMzIJCXJlZzMyCisjZGVmaW5lCV9fcmVnNjQJCXJl
ZworI2RlZmluZQlfX2ZwcmVnMzIJZnByZWczMgorI2RlZmluZQlfX2ZwcmVnNjQJZnByZWcKKyNk
ZWZpbmUJX19kYnJlZzMyCWRicmVnMzIKKyNkZWZpbmUJX19kYnJlZzY0CWRicmVnCisjZGVmaW5l
CV9fSEFWRV9SRUczMgorI2VuZGlmCisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2
aWEgL3Byb2MvJHBpZC9yZWdzIGFuZCBQVF97U0VULEdFVH1SRUdTLgorICovCitzdHJ1Y3QgX19y
ZWczMiB7CisJX191aW50MzJfdAlyX2ZzOworCV9fdWludDMyX3QJcl9lczsKKwlfX3VpbnQzMl90
CXJfZHM7CisJX191aW50MzJfdAlyX2VkaTsKKwlfX3VpbnQzMl90CXJfZXNpOworCV9fdWludDMy
X3QJcl9lYnA7CisJX191aW50MzJfdAlyX2lzcDsKKwlfX3VpbnQzMl90CXJfZWJ4OworCV9fdWlu
dDMyX3QJcl9lZHg7CisJX191aW50MzJfdAlyX2VjeDsKKwlfX3VpbnQzMl90CXJfZWF4OworCV9f
dWludDMyX3QJcl90cmFwbm87CisJX191aW50MzJfdAlyX2VycjsKKwlfX3VpbnQzMl90CXJfZWlw
OworCV9fdWludDMyX3QJcl9jczsKKwlfX3VpbnQzMl90CXJfZWZsYWdzOworCV9fdWludDMyX3QJ
cl9lc3A7CisJX191aW50MzJfdAlyX3NzOworCV9fdWludDMyX3QJcl9nczsKK307CisKK3N0cnVj
dCBfX3JlZzY0IHsKKwlfX2ludDY0X3QJcl9yMTU7CisJX19pbnQ2NF90CXJfcjE0OworCV9faW50
NjRfdAlyX3IxMzsKKwlfX2ludDY0X3QJcl9yMTI7CisJX19pbnQ2NF90CXJfcjExOworCV9faW50
NjRfdAlyX3IxMDsKKwlfX2ludDY0X3QJcl9yOTsKKwlfX2ludDY0X3QJcl9yODsKKwlfX2ludDY0
X3QJcl9yZGk7CisJX19pbnQ2NF90CXJfcnNpOworCV9faW50NjRfdAlyX3JicDsKKwlfX2ludDY0
X3QJcl9yYng7CisJX19pbnQ2NF90CXJfcmR4OworCV9faW50NjRfdAlyX3JjeDsKKwlfX2ludDY0
X3QJcl9yYXg7CisJX191aW50MzJfdAlyX3RyYXBubzsKKwlfX3VpbnQxNl90CXJfZnM7CisJX191
aW50MTZfdAlyX2dzOworCV9fdWludDMyX3QJcl9lcnI7CisJX191aW50MTZfdAlyX2VzOworCV9f
dWludDE2X3QJcl9kczsKKwlfX2ludDY0X3QJcl9yaXA7CisJX19pbnQ2NF90CXJfY3M7CisJX19p
bnQ2NF90CXJfcmZsYWdzOworCV9faW50NjRfdAlyX3JzcDsKKwlfX2ludDY0X3QJcl9zczsKK307
CisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2aWEgL3Byb2MvJHBpZC9mcHJlZ3Mu
CisgKgorICogWFhYIHNob3VsZCBnZXQgc3RydWN0IGZyb20gZnB1LmguICBIZXJlIHdlIGdpdmUg
YSBzbGlnaHRseQorICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0b28gbXVjaCBk
ZXRhaWwuICBQZXJoYXBzCisgKiBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBpcyBiZXN0Lgor
ICovCitzdHJ1Y3QgX19mcHJlZzMyIHsKKwlfX3VpbnQzMl90CWZwcl9lbnZbN107CisJX191aW50
OF90CWZwcl9hY2NbOF1bMTBdOworCV9fdWludDMyX3QJZnByX2V4X3N3OworCV9fdWludDhfdAlm
cHJfcGFkWzY0XTsKK307CisKK3N0cnVjdCBfX2ZwcmVnNjQgeworCV9fdWludDY0X3QJZnByX2Vu
dls0XTsKKwlfX3VpbnQ4X3QJZnByX2FjY1s4XVsxNl07CisJX191aW50OF90CWZwcl94YWNjWzE2
XVsxNl07CisJX191aW50NjRfdAlmcHJfc3BhcmVbMTJdOworfTsKKworLyoKKyAqIFJlZ2lzdGVy
IHNldCBhY2Nlc3NpYmxlIHZpYSBQVF9HRVRYTU1SRUdTIChpMzg2KS4KKyAqLworc3RydWN0IHht
bXJlZyB7CisJLyoKKwkgKiBYWFggc2hvdWxkIGdldCBzdHJ1Y3QgZnJvbSBucHguaC4gIEhlcmUg
d2UgZ2l2ZSBhIHNsaWdodGx5CisJICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0
b28gbXVjaCBkZXRhaWwuICBQZXJoYXBzCisJICogYW4gYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3Mg
aXMgYmVzdC4KKwkgKi8KKwlfX3VpbnQzMl90CXhtbV9lbnZbOF07CisJX191aW50OF90CXhtbV9h
Y2NbOF1bMTZdOworCV9fdWludDhfdAl4bW1fcmVnWzhdWzE2XTsKKwlfX3VpbnQ4X3QJeG1tX3Bh
ZFsyMjRdOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIHNldCBhY2Nlc3NpYmxlIHZpYSAvcHJvYy8k
cGlkL2RicmVncy4KKyAqLworc3RydWN0IF9fZGJyZWczMiB7CisJX191aW50MzJfdAlkcls4XTsJ
LyogZGVidWcgcmVnaXN0ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJl
Z2lzdGVycyAqLworCQkJCS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2
OiBkZWJ1ZyBzdGF0dXMgKi8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCit9Owor
CitzdHJ1Y3QgX19kYnJlZzY0IHsKKwlfX3VpbnQ2NF90CWRyWzE2XTsJLyogZGVidWcgcmVnaXN0
ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycyAqLworCQkJ
CS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2OiBkZWJ1ZyBzdGF0dXMg
Ki8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCisJCQkJLyogSW5kZXggOC0xNTog
cmVzZXJ2ZWQgKi8KK307CisKKyNkZWZpbmUJREJSRUdfRFI3X0xPQ0FMX0VOQUJMRQkweDAxCisj
ZGVmaW5lCURCUkVHX0RSN19HTE9CQUxfRU5BQkxFCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0xF
Tl8xCQkweDAwCS8qIDEgYnl0ZSBsZW5ndGggICAgICAgICAgKi8KKyNkZWZpbmUJREJSRUdfRFI3
X0xFTl8yCQkweDAxCisjZGVmaW5lCURCUkVHX0RSN19MRU5fNAkJMHgwMworI2RlZmluZQlEQlJF
R19EUjdfTEVOXzgJCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0VYRUMJCTB4MDAJLyogYnJlYWsg
b24gZXhlY3V0ZSAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfV1JPTkxZCTB4MDEJLyogYnJl
YWsgb24gd3JpdGUgICAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfUkRXUgkJMHgwMwkvKiBi
cmVhayBvbiByZWFkIG9yIHdyaXRlICovCisjZGVmaW5lCURCUkVHX0RSN19NQVNLKGkpCVwKKwko
KF9fdV9yZWdpc3Rlcl90KSgweGYpIDw8ICgoaSkgKiA0ICsgMTYpIHwgMHgzIDw8IChpKSAqIDIp
CisjZGVmaW5lCURCUkVHX0RSN19TRVQoaSwgbGVuLCBhY2Nlc3MsIGVuYWJsZSkJCQkJXAorCSgo
X191X3JlZ2lzdGVyX3QpKChsZW4pIDw8IDIgfCAoYWNjZXNzKSkgPDwgKChpKSAqIDQgKyAxNikg
fCAJXAorCShlbmFibGUpIDw8IChpKSAqIDIpCisjZGVmaW5lCURCUkVHX0RSN19HRAkJMHgyMDAw
CisjZGVmaW5lCURCUkVHX0RSN19FTkFCTEVEKGQsIGkpCSgoKGQpICYgMHgzIDw8IChpKSAqIDIp
ICE9IDApCisjZGVmaW5lCURCUkVHX0RSN19BQ0NFU1MoZCwgaSkJKChkKSA+PiAoKGkpICogNCAr
IDE2KSAmIDB4MykKKyNkZWZpbmUJREJSRUdfRFI3X0xFTihkLCBpKQkoKGQpID4+ICgoaSkgKiA0
ICsgMTgpICYgMHgzKQorCisjZGVmaW5lCURCUkVHX0RSWChkLHgpCSgoZCktPmRyWyh4KV0pCS8q
IHJlZmVyZW5jZSBkcjAgLSBkcjcgYnkKKwkJCQkJICAgcmVnaXN0ZXIgbnVtYmVyICovCisKKyN1
bmRlZiBfX3JlZzMyCisjdW5kZWYgX19yZWc2NAorI3VuZGVmIF9fZnByZWczMgorI3VuZGVmIF9f
ZnByZWc2NAorI3VuZGVmIF9fZGJyZWczMgorI3VuZGVmIF9fZGJyZWc2NAorCisjaWZkZWYgX0tF
Uk5FTAorLyoKKyAqIFhYWCB0aGVzZSBpbnRlcmZhY2VzIGFyZSBNSSwgc28gdGhleSBzaG91bGQg
YmUgZGVjbGFyZWQgaW4gYSBNSSBwbGFjZS4KKyAqLworaW50CWZpbGxfcmVncyhzdHJ1Y3QgdGhy
ZWFkICosIHN0cnVjdCByZWcgKik7CitpbnQJZmlsbF9mcmFtZV9yZWdzKHN0cnVjdCB0cmFwZnJh
bWUgKiwgc3RydWN0IHJlZyAqKTsKK2ludAlzZXRfcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVj
dCByZWcgKik7CitpbnQJZmlsbF9mcHJlZ3Moc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWcg
Kik7CitpbnQJc2V0X2ZwcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBmcHJlZyAqKTsKK2lu
dAlmaWxsX2RicmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBkYnJlZyAqKTsKK2ludAlzZXRf
ZGJyZWdzKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnICopOworI2lmZGVmIENPTVBBVF9G
UkVFQlNEMzIKK2ludAlmaWxsX3JlZ3MzMihzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCByZWczMiAq
KTsKK2ludAlzZXRfcmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHJlZzMyICopOworaW50
CWZpbGxfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlz
ZXRfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlmaWxs
X2RicmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CitpbnQJc2V0X2Ri
cmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CisjZW5kaWYKKyNlbmRp
ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvc2VnbWVudHMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Nl
Z21lbnRzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDI3OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5
ODksIDE5OTAgV2lsbGlhbSBGLiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVn
ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1
dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkg
NS85LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NlZ21lbnRz
LmggMjgyMjc0IDIwMTUtMDQtMzAgMTU6NDg6NDhaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfWDg2
X1NFR01FTlRTX0hfCisjZGVmaW5lCV9YODZfU0VHTUVOVFNfSF8KKworLyoKKyAqIFg4NiBTZWdt
ZW50YXRpb24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKy8qCisgKiBT
ZWxlY3RvcnMKKyAqLworI2RlZmluZQlTRUxfUlBMX01BU0sJMwkJLyogcmVxdWVzdGVyIHByaXYg
bGV2ZWwgKi8KKyNkZWZpbmUJSVNQTChzKQkJKChzKSYzKQkJLyogcHJpb3JpdHkgbGV2ZWwgb2Yg
YSBzZWxlY3RvciAqLworI2RlZmluZQlTRUxfS1BMCQkwCQkvKiBrZXJuZWwgcHJpb3JpdHkgbGV2
ZWwgKi8KKyNkZWZpbmUJU0VMX1VQTAkJMwkJLyogdXNlciBwcmlvcml0eSBsZXZlbCAqLworI2Rl
ZmluZQlJU0xEVChzKQkoKHMpJlNFTF9MRFQpCS8qIGlzIGl0IGxvY2FsIG9yIGdsb2JhbCAqLwor
I2RlZmluZQlTRUxfTERUCQk0CQkvKiBsb2NhbCBkZXNjcmlwdG9yIHRhYmxlICovCisjZGVmaW5l
CUlEWFNFTChzKQkoKChzKT4+MykgJiAweDFmZmYpIC8qIGluZGV4IG9mIHNlbGVjdG9yICovCisj
ZGVmaW5lCUxTRUwocyxyKQkoKChzKTw8MykgfCBTRUxfTERUIHwgcikgLyogYSBsb2NhbCBzZWxl
Y3RvciAqLworI2RlZmluZQlHU0VMKHMscikJKCgocyk8PDMpIHwgcikJLyogYSBnbG9iYWwgc2Vs
ZWN0b3IgKi8KKworLyoKKyAqIFVzZXIgc2VnbWVudCBkZXNjcmlwdG9ycyAoJWNzLCAlZHMgZXRj
IGZvciBpMzg2IGFwcHMuIDY0IGJpdCB3aWRlKQorICogRm9yIGxvbmctbW9kZSBhcHBzLCAlY3Mg
b25seSBoYXMgdGhlIGNvbmZvcm1pbmcgYml0IGluIHNkX3R5cGUsIHRoZSBzZF9kcGwsCisgKiBz
ZF9wLCBzZF9sIGFuZCBzZF9kZWYzMiB3aGljaCBtdXN0IGJlIHplcm8pLiAgJWRzIG9ubHkgaGFz
IHNkX3AuCisgKi8KK3N0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIHNkX2xv
bGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVuc2lnbmVkIHNkX2xvYmFz
ZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJdW5zaWduZWQgc2RfdHlw
ZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBsOjI7CQkvKiBzZWdtZW50
IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBzZF9wOjE7CQkvKiBzZWdt
ZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hpbGltaXQ6NDsJCS8qIHNl
Z21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MjsJCS8qIHVudXNlZCAqLwor
CXVuc2lnbmVkIHNkX2RlZjMyOjE7CQkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJ
dW5zaWduZWQgc2RfZ3JhbjoxOwkJLyogbGltaXQgZ3JhbnVsYXJpdHkgKGJ5dGUvcGFnZSB1bml0
cykqLworCXVuc2lnbmVkIHNkX2hpYmFzZTo4OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICht
c2IpICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3Igewor
CXVuc2lnbmVkIHNkX2xvbGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVu
c2lnbmVkIHNkX2xvYmFzZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJ
dW5zaWduZWQgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBs
OjI7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBz
ZF9wOjE7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hp
bGltaXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MTsJ
CS8qIHVudXNlZCAqLworCXVuc2lnbmVkIHNkX2xvbmc6MTsJCS8qIGxvbmcgbW9kZSAoY3Mgb25s
eSkgKi8KKwl1bnNpZ25lZCBzZF9kZWYzMjoxOwkJLyogZGVmYXVsdCAzMiB2cyAxNiBiaXQgc2l6
ZSAqLworCXVuc2lnbmVkIHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5IChieXRlL3Bh
Z2UgdW5pdHMpKi8KKwl1bnNpZ25lZCBzZF9oaWJhc2U6ODsJCS8qIHNlZ21lbnQgYmFzZSBhZGRy
ZXNzICAobXNiKSAqLworfSBfX3BhY2tlZDsKKworI2RlZmluZQlVU0RfR0VUQkFTRShzZCkJCSgo
KHNkKS0+c2RfbG9iYXNlKSB8IChzZCktPnNkX2hpYmFzZSA8PCAyNCkKKyNkZWZpbmUJVVNEX1NF
VEJBU0Uoc2QsIGIpCShzZCktPnNkX2xvYmFzZSA9IChiKTsJXAorCQkJCShzZCktPnNkX2hpYmFz
ZSA9ICgoYikgPj4gMjQpOworI2RlZmluZQlVU0RfR0VUTElNSVQoc2QpCSgoKHNkKS0+c2RfbG9s
aW1pdCkgfCAoc2QpLT5zZF9oaWxpbWl0IDw8IDE2KQorI2RlZmluZQlVU0RfU0VUTElNSVQoc2Qs
IGwpCShzZCktPnNkX2xvbGltaXQgPSAobCk7CVwKKwkJCQkoc2QpLT5zZF9oaWxpbWl0ID0gKChs
KSA+PiAxNik7CisKKyNpZmRlZiBfX2kzODZfXworLyoKKyAqIEdhdGUgZGVzY3JpcHRvcnMgKGUu
Zy4gaW5kaXJlY3QgZGVzY3JpcHRvcnMpCisgKi8KK3N0cnVjdCBnYXRlX2Rlc2NyaXB0b3Igewor
CXVuc2lnbmVkIGdkX2xvb2Zmc2V0OjE2OwkvKiBnYXRlIG9mZnNldCAobHNiKSAqLworCXVuc2ln
bmVkIGdkX3NlbGVjdG9yOjE2OwkvKiBnYXRlIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1bnNpZ25l
ZCBnZF9zdGtjcHk6NTsJCS8qIG51bWJlciBvZiBzdGFjayB3ZHMgdG8gY3B5ICovCisJdW5zaWdu
ZWQgZ2RfeHg6MzsJCS8qIHVudXNlZCAqLworCXVuc2lnbmVkIGdkX3R5cGU6NTsJCS8qIHNlZ21l
bnQgdHlwZSAqLworCXVuc2lnbmVkIGdkX2RwbDoyOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHBy
aW9yaXR5IGxldmVsICovCisJdW5zaWduZWQgZ2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9y
IHByZXNlbnQgKi8KKwl1bnNpZ25lZCBnZF9oaW9mZnNldDoxNjsJLyogZ2F0ZSBvZmZzZXQgKG1z
YikgKi8KK30gX19wYWNrZWQ7CisKKy8qCisgKiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5p
b24gZGVzY3JpcHRvciB7CisJc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciBzZDsKKwlzdHJ1Y3Qg
Z2F0ZV9kZXNjcmlwdG9yIGdkOworfTsKKyNlbHNlCisvKgorICogR2F0ZSBkZXNjcmlwdG9ycyAo
ZS5nLiBpbmRpcmVjdCBkZXNjcmlwdG9ycywgdHJhcCwgaW50ZXJydXB0IGV0Yy4gMTI4IGJpdCkK
KyAqIE9ubHkgaW50ZXJydXB0IGFuZCB0cmFwIGdhdGVzIGhhdmUgZ2RfaXN0LgorICovCitzdHJ1
Y3QgZ2F0ZV9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCBnZF9sb29mZnNldDoxNjsJLyogZ2F0ZSBv
ZmZzZXQgKGxzYikgKi8KKwl1aW50NjRfdCBnZF9zZWxlY3RvcjoxNjsJLyogZ2F0ZSBzZWdtZW50
IHNlbGVjdG9yICovCisJdWludDY0X3QgZ2RfaXN0OjM7CQkvKiBJU1QgdGFibGUgaW5kZXggKi8K
Kwl1aW50NjRfdCBnZF94eDo1OwkJLyogdW51c2VkICovCisJdWludDY0X3QgZ2RfdHlwZTo1OwkJ
Lyogc2VnbWVudCB0eXBlICovCisJdWludDY0X3QgZ2RfZHBsOjI7CQkvKiBzZWdtZW50IGRlc2Ny
aXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1aW50NjRfdCBnZF9wOjE7CQkvKiBzZWdtZW50IGRl
c2NyaXB0b3IgcHJlc2VudCAqLworCXVpbnQ2NF90IGdkX2hpb2Zmc2V0OjQ4OwkvKiBnYXRlIG9m
ZnNldCAobXNiKSAqLworCXVpbnQ2NF90IHNkX3h4MTozMjsKK30gX19wYWNrZWQ7CisKKy8qCisg
KiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5pb24gZGVzY3JpcHRvciB7CisJc3RydWN0IHVz
ZXJfc2VnbWVudF9kZXNjcmlwdG9yIHNkOworCXN0cnVjdCBnYXRlX2Rlc2NyaXB0b3IgZ2Q7Cit9
OworI2VuZGlmCisKKwkvKiBzeXN0ZW0gc2VnbWVudHMgYW5kIGdhdGUgdHlwZXMgKi8KKyNkZWZp
bmUJU0RUX1NZU05VTEwJIDAJLyogc3lzdGVtIG51bGwgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NlRT
UwkgMQkvKiBzeXN0ZW0gMjg2IFRTUyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJU0RUX1NZU0xEVAkg
MgkvKiBzeXN0ZW0gbG9jYWwgZGVzY3JpcHRvciB0YWJsZSAqLworI2RlZmluZQlTRFRfU1lTMjg2
QlNZCSAzCS8qIHN5c3RlbSAyODYgVFNTIGJ1c3kgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NkNHVAkg
NAkvKiBzeXN0ZW0gMjg2IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTVEFTS0dUCSA1CS8q
IHN5c3RlbSB0YXNrIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NklHVAkgNgkvKiBzeXN0ZW0g
Mjg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVMyODZUR1QJIDcJLyogc3lzdGVt
IDI4NiB0cmFwIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZU05VTEwyCSA4CS8qIHN5c3RlbSBudWxs
IGFnYWluICovCisjZGVmaW5lCVNEVF9TWVMzODZUU1MJIDkJLyogc3lzdGVtIDM4NiBUU1MgYXZh
aWxhYmxlICovCisjZGVmaW5lCVNEVF9TWVNUU1MJIDkJLyogc3lzdGVtIGF2YWlsYWJsZSA2NCBi
aXQgVFNTICovCisjZGVmaW5lCVNEVF9TWVNOVUxMMwkxMAkvKiBzeXN0ZW0gbnVsbCBhZ2FpbiAq
LworI2RlZmluZQlTRFRfU1lTMzg2QlNZCTExCS8qIHN5c3RlbSAzODYgVFNTIGJ1c3kgKi8KKyNk
ZWZpbmUJU0RUX1NZU0JTWQkxMQkvKiBzeXN0ZW0gYnVzeSA2NCBiaXQgVFNTICovCisjZGVmaW5l
CVNEVF9TWVMzODZDR1QJMTIJLyogc3lzdGVtIDM4NiBjYWxsIGdhdGUgKi8KKyNkZWZpbmUJU0RU
X1NZU0NHVAkxMgkvKiBzeXN0ZW0gNjQgYml0IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lT
TlVMTDQJMTMJLyogc3lzdGVtIG51bGwgYWdhaW4gKi8KKyNkZWZpbmUJU0RUX1NZUzM4NklHVAkx
NAkvKiBzeXN0ZW0gMzg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNJR1QJMTQJ
Lyogc3lzdGVtIDY0IGJpdCBpbnRlcnJ1cHQgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTMzg2VEdU
CTE1CS8qIHN5c3RlbSAzODYgdHJhcCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNUR1QJMTUJLyog
c3lzdGVtIDY0IGJpdCB0cmFwIGdhdGUgKi8KKworCS8qIG1lbW9yeSBzZWdtZW50IHR5cGVzICov
CisjZGVmaW5lCVNEVF9NRU1STwkxNgkvKiBtZW1vcnkgcmVhZCBvbmx5ICovCisjZGVmaW5lCVNE
VF9NRU1ST0EJMTcJLyogbWVtb3J5IHJlYWQgb25seSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRf
TUVNUlcJMTgJLyogbWVtb3J5IHJlYWQgd3JpdGUgKi8KKyNkZWZpbmUJU0RUX01FTVJXQQkxOQkv
KiBtZW1vcnkgcmVhZCB3cml0ZSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRfTUVNUk9ECTIwCS8q
IG1lbW9yeSByZWFkIG9ubHkgZXhwYW5kIGR3biBsaW1pdCAqLworI2RlZmluZQlTRFRfTUVNUk9E
QQkyMQkvKiBtZW1vcnkgcmVhZCBvbmx5IGV4cGFuZCBkd24gbGltaXQgYWNjZXNzZWQgKi8KKyNk
ZWZpbmUJU0RUX01FTVJXRAkyMgkvKiBtZW1vcnkgcmVhZCB3cml0ZSBleHBhbmQgZHduIGxpbWl0
ICovCisjZGVmaW5lCVNEVF9NRU1SV0RBCTIzCS8qIG1lbW9yeSByZWFkIHdyaXRlIGV4cGFuZCBk
d24gbGltaXQgYWNjZXNzZWQqLworI2RlZmluZQlTRFRfTUVNRQkyNAkvKiBtZW1vcnkgZXhlY3V0
ZSBvbmx5ICovCisjZGVmaW5lCVNEVF9NRU1FQQkyNQkvKiBtZW1vcnkgZXhlY3V0ZSBvbmx5IGFj
Y2Vzc2VkICovCisjZGVmaW5lCVNEVF9NRU1FUgkyNgkvKiBtZW1vcnkgZXhlY3V0ZSByZWFkICov
CisjZGVmaW5lCVNEVF9NRU1FUkEJMjcJLyogbWVtb3J5IGV4ZWN1dGUgcmVhZCBhY2Nlc3NlZCAq
LworI2RlZmluZQlTRFRfTUVNRUMJMjgJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBjb25mb3JtaW5n
ICovCisjZGVmaW5lCVNEVF9NRU1FQUMJMjkJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBhY2Nlc3Nl
ZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkMJMzAJLyogbWVtb3J5IGV4ZWN1dGUg
cmVhZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkFDCTMxCS8qIG1lbW9yeSBleGVj
dXRlIHJlYWQgYWNjZXNzZWQgY29uZm9ybWluZyAqLworCisvKgorICogU2l6ZSBvZiBJRFQgdGFi
bGUKKyAqLworI2RlZmluZQlOSURUCQkyNTYJLyogMzIgcmVzZXJ2ZWQsIDB4ODAgc3lzY2FsbCwg
bW9zdCBhcmUgaC93ICovCisjZGVmaW5lCU5SU1ZJRFQJCTMyCS8qIHJlc2VydmVkIGVudHJpZXMg
Zm9yIGNwdSBleGNlcHRpb25zICovCisKKy8qCisgKiBFbnRyaWVzIGluIHRoZSBJbnRlcnJ1cHQg
RGVzY3JpcHRvciBUYWJsZSAoSURUKQorICovCisjZGVmaW5lCUlEVF9ERQkJMAkvKiAjREU6IERp
dmlkZSBFcnJvciAqLworI2RlZmluZQlJRFRfREIJCTEJLyogI0RCOiBEZWJ1ZyAqLworI2RlZmlu
ZQlJRFRfTk1JCQkyCS8qIE5vbm1hc2thYmxlIEV4dGVybmFsIEludGVycnVwdCAqLworI2RlZmlu
ZQlJRFRfQlAJCTMJLyogI0JQOiBCcmVha3BvaW50ICovCisjZGVmaW5lCUlEVF9PRgkJNAkvKiAj
T0Y6IE92ZXJmbG93ICovCisjZGVmaW5lCUlEVF9CUgkJNQkvKiAjQlI6IEJvdW5kIFJhbmdlIEV4
Y2VlZGVkICovCisjZGVmaW5lCUlEVF9VRAkJNgkvKiAjVUQ6IFVuZGVmaW5lZC9JbnZhbGlkIE9w
Y29kZSAqLworI2RlZmluZQlJRFRfTk0JCTcJLyogI05NOiBObyBNYXRoIENvcHJvY2Vzc29yICov
CisjZGVmaW5lCUlEVF9ERgkJOAkvKiAjREY6IERvdWJsZSBGYXVsdCAqLworI2RlZmluZQlJRFRf
RlBVR1AJOQkvKiBDb3Byb2Nlc3NvciBTZWdtZW50IE92ZXJydW4gKi8KKyNkZWZpbmUJSURUX1RT
CQkxMAkvKiAjVFM6IEludmFsaWQgVFNTICovCisjZGVmaW5lCUlEVF9OUAkJMTEJLyogI05QOiBT
ZWdtZW50IE5vdCBQcmVzZW50ICovCisjZGVmaW5lCUlEVF9TUwkJMTIJLyogI1NTOiBTdGFjayBT
ZWdtZW50IEZhdWx0ICovCisjZGVmaW5lCUlEVF9HUAkJMTMJLyogI0dQOiBHZW5lcmFsIFByb3Rl
Y3Rpb24gRmF1bHQgKi8KKyNkZWZpbmUJSURUX1BGCQkxNAkvKiAjUEY6IFBhZ2UgRmF1bHQgKi8K
KyNkZWZpbmUJSURUX01GCQkxNgkvKiAjTUY6IEZQVSBGbG9hdGluZy1Qb2ludCBFcnJvciAqLwor
I2RlZmluZQlJRFRfQUMJCTE3CS8qICNBQzogQWxpZ25tZW50IENoZWNrICovCisjZGVmaW5lCUlE
VF9NQwkJMTgJLyogI01DOiBNYWNoaW5lIENoZWNrICovCisjZGVmaW5lCUlEVF9YRgkJMTkJLyog
I1hGOiBTSU1EIEZsb2F0aW5nLVBvaW50IEV4Y2VwdGlvbiAqLworI2RlZmluZQlJRFRfSU9fSU5U
UwlOUlNWSURUCS8qIEJhc2Ugb2YgSURUIGVudHJpZXMgZm9yIEkvTyBpbnRlcnJ1cHRzLiAqLwor
I2RlZmluZQlJRFRfU1lTQ0FMTAkweDgwCS8qIFN5c3RlbSBDYWxsIEludGVycnVwdCBWZWN0b3Ig
Ki8KKyNkZWZpbmUJSURUX0RUUkFDRV9SRVQJMHg5MgkvKiBEVHJhY2UgcGlkIHByb3ZpZGVyIElu
dGVycnVwdCBWZWN0b3IgKi8KKyNkZWZpbmUJSURUX0VWVENITgkweDkzCS8qIFhlbiBIVk0gRXZl
bnQgQ2hhbm5lbCBJbnRlcnJ1cHQgVmVjdG9yICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQor
LyoKKyAqIEVudHJpZXMgaW4gdGhlIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlIChHRFQpCisgKiBO
b3RlIHRoYXQgZWFjaCA0IGVudHJpZXMgc2hhcmUgYSBzaW5nbGUgMzIgYnl0ZSBMMSBjYWNoZSBs
aW5lLgorICogU29tZSBvZiB0aGUgZmFzdCBzeXNjYWxsIGluc3RydWN0aW9ucyByZXF1aXJlIGEg
c3BlY2lmaWMgb3JkZXIgaGVyZS4KKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERl
c2NyaXB0b3IgKi8KKyNkZWZpbmUJR1BSSVZfU0VMCTEJLyogU01QIFBlci1Qcm9jZXNzb3IgUHJp
dmF0ZSBEYXRhICovCisjZGVmaW5lCUdVRlNfU0VMCTIJLyogVXNlciAlZnMgRGVzY3JpcHRvciAo
b3JkZXIgY3JpdGljYWw6IDEpICovCisjZGVmaW5lCUdVR1NfU0VMCTMJLyogVXNlciAlZ3MgRGVz
Y3JpcHRvciAob3JkZXIgY3JpdGljYWw6IDIpICovCisjZGVmaW5lCUdDT0RFX1NFTAk0CS8qIEtl
cm5lbCBDb2RlIERlc2NyaXB0b3IgKG9yZGVyIGNyaXRpY2FsOiAxKSAqLworI2RlZmluZQlHREFU
QV9TRUwJNQkvKiBLZXJuZWwgRGF0YSBEZXNjcmlwdG9yIChvcmRlciBjcml0aWNhbDogMikgKi8K
KyNkZWZpbmUJR1VDT0RFX1NFTAk2CS8qIFVzZXIgQ29kZSBEZXNjcmlwdG9yIChvcmRlciBjcml0
aWNhbDogMykgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIgRGF0YSBEZXNjcmlwdG9y
IChvcmRlciBjcml0aWNhbDogNCkgKi8KKyNkZWZpbmUJR0JJT1NMT1dNRU1fU0VMCTgJLyogQklP
UyBsb3cgbWVtb3J5IGFjY2VzcyAobXVzdCBiZSBlbnRyeSA4KSAqLworI2RlZmluZQlHUFJPQzBf
U0VMCTkJLyogVGFzayBzdGF0ZSBwcm9jZXNzIHNsb3QgemVybyBhbmQgdXAgKi8KKyNkZWZpbmUJ
R0xEVF9TRUwJMTAJLyogRGVmYXVsdCBVc2VyIExEVCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJ
MTEJLyogVXNlciBMRFQgKi8KKyNkZWZpbmUJR1BBTklDX1NFTAkxMgkvKiBUYXNrIHN0YXRlIHRv
IGNvbnNpZGVyIHBhbmljIGZyb20gKi8KKyNkZWZpbmUJR0JJT1NDT0RFMzJfU0VMCTEzCS8qIEJJ
T1MgaW50ZXJmYWNlICgzMmJpdCBDb2RlKSAqLworI2RlZmluZQlHQklPU0NPREUxNl9TRUwJMTQJ
LyogQklPUyBpbnRlcmZhY2UgKDE2Yml0IENvZGUpICovCisjZGVmaW5lCUdCSU9TREFUQV9TRUwJ
MTUJLyogQklPUyBpbnRlcmZhY2UgKERhdGEpICovCisjZGVmaW5lCUdCSU9TVVRJTF9TRUwJMTYJ
LyogQklPUyBpbnRlcmZhY2UgKFV0aWxpdHkpICovCisjZGVmaW5lCUdCSU9TQVJHU19TRUwJMTcJ
LyogQklPUyBpbnRlcmZhY2UgKEFyZ3VtZW50cykgKi8KKyNkZWZpbmUJR05ESVNfU0VMCTE4CS8q
IEZvciB0aGUgTkRJUyBsYXllciAqLworI2RlZmluZQlOR0RUCQkxOQorCisvKgorICogRW50cmll
cyBpbiB0aGUgTG9jYWwgRGVzY3JpcHRvciBUYWJsZSAoTERUKQorICovCisjZGVmaW5lCUxTWVM1
Q0FMTFNfU0VMCTAJLyogZm9yY2VkIGJ5IGludGVsIEJDUyAqLworI2RlZmluZQlMU1lTNVNJR1Jf
U0VMCTEKKyNkZWZpbmUJTDQzQlNEQ0FMTFNfU0VMCTIJLyogbm90eWV0ICovCisjZGVmaW5lCUxV
Q09ERV9TRUwJMworI2RlZmluZQlMU09MMjZDQUxMU19TRUwJNAkvKiBTb2xhcmlzID49IDIuNiBz
eXN0ZW0gY2FsbCBnYXRlICovCisjZGVmaW5lCUxVREFUQV9TRUwJNQorLyogc2VwYXJhdGUgc3Rh
Y2ssIGVzLGZzLGdzIHNlbHMgPyAqLworLyogI2RlZmluZQlMUE9TSVhDQUxMU19TRUwJNSovCS8q
IG5vdHlldCAqLworI2RlZmluZQlMQlNESUNBTExTX1NFTAkxNgkvKiBCU0RJIHN5c3RlbSBjYWxs
IGdhdGUgKi8KKyNkZWZpbmUJTkxEVAkJKExCU0RJQ0FMTFNfU0VMICsgMSkKKworI2Vsc2UgLyog
IV9faTM4Nl9fICovCisvKgorICogRW50cmllcyBpbiB0aGUgR2xvYmFsIERlc2NyaXB0b3IgVGFi
bGUgKEdEVCkKKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERlc2NyaXB0b3IgKi8K
KyNkZWZpbmUJR05VTEwyX1NFTAkxCS8qIE51bGwgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUZT
MzJfU0VMCTIJLyogVXNlciAzMiBiaXQgJWZzIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VHUzMy
X1NFTAkzCS8qIFVzZXIgMzIgYml0ICVncyBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdDT0RFX1NF
TAk0CS8qIEtlcm5lbCBDb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR0RBVEFfU0VMCTUJLyog
S2VybmVsIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREUzMl9TRUwJNgkvKiBVc2Vy
IDMyIGJpdCBjb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIg
MzIvNjQgYml0IERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREVfU0VMCTgJLyogVXNl
ciA2NCBiaXQgQ29kZSBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdQUk9DMF9TRUwJOQkvKiBUU1Mg
Zm9yIGVudGVyaW5nIGtlcm5lbCBldGMgKi8KKy8qIHNsb3QgMTAgaXMgc2Vjb25kIGhhbGYgb2Yg
R1BST0MwX1NFTCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJMTEJLyogTERUICovCisvKiBzbG90
IDEyIGlzIHNlY29uZCBoYWxmIG9mIEdVU0VSTERUX1NFTCAqLworI2RlZmluZQlOR0RUIAkJMTMK
KyNlbmRpZiAvKiBfX2kzODZfXyAqLworCisjZW5kaWYgLyogIV9YODZfU0VHTUVOVFNfSF8gKi8K
ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2V0am1wLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTIwMTYtMDkt
MjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTAgQEAKKy8qLQorICogQ29w
eXJpZ2h0IChjKSAxOTk4IEpvaG4gQmlycmVsbCA8amJAY2ltbG9naWMuY29tLmF1Pi4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY28tY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSk9ITiBCSVJSRUxMIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U
UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc2V0am1wLmggMjMyMjc1IDIw
MTItMDItMjggMjI6MTc6NTJaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0VUSk1Q
X0hfCisjZGVmaW5lCV9NQUNISU5FX1NFVEpNUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CisKKyNkZWZpbmUJX0pCTEVOCTEyCQkvKiBTaXplIG9mIHRoZSBqbXBfYnVmIG9uIEFNRDY0LiAq
LworCisvKgorICogam1wX2J1ZiBhbmQgc2lnam1wX2J1ZiBhcmUgZW5jYXBzdWxhdGVkIGluIGRp
ZmZlcmVudCBzdHJ1Y3RzIHRvIGZvcmNlCisgKiBjb21waWxlLXRpbWUgZGlhZ25vc3RpY3MgZm9y
IG1pc21hdGNoZXMuICBUaGUgc3RydWN0cyBhcmUgdGhlIHNhbWUKKyAqIGludGVybmFsbHkgdG8g
YXZvaWQgc29tZSBydW4tdGltZSBlcnJvcnMgZm9yIG1pc21hdGNoZXMuCisgKi8KKyNpZiBfX0JT
RF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hTSV9WSVNJQkxFCit0eXBlZGVmCXN0
cnVjdCBfc2lnam1wX2J1ZiB7IGxvbmcgX3NqYltfSkJMRU5dOyB9IHNpZ2ptcF9idWZbMV07Cisj
ZW5kaWYKKwordHlwZWRlZglzdHJ1Y3QgX2ptcF9idWYgeyBsb25nIF9qYltfSkJMRU5dOyB9IGpt
cF9idWZbMV07CisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU0VUSk1QX0hfICovCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ2ZyYW1lLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvc2lnZnJhbWUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCTIwMTYtMDktMjkg
MDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzIgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVs
ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NpZ2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6
Mzk6NTJaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1NJR0ZSQU1FX0hfCisjZGVmaW5lCV9Y
ODZfU0lHRlJBTUVfSF8KKworLyoKKyAqIFNpZ25hbCBmcmFtZXMsIGFyZ3VtZW50cyBwYXNzZWQg
dG8gYXBwbGljYXRpb24gc2lnbmFsIGhhbmRsZXJzLgorICovCisKKyNpZmRlZiBfX2kzODZfXwor
c3RydWN0IHNpZ2ZyYW1lIHsKKwkvKgorCSAqIFRoZSBmaXJzdCBmb3VyIG1lbWJlcnMgbWF5IGJl
IHVzZWQgYnkgYXBwbGljYXRpb25zLgorCSAqCisJICogTk9URTogVGhlIDR0aCBhcmd1bWVudCBp
cyB1bmRvY3VtZW50ZWQsIGlsbCBjb21tZW50ZWQKKwkgKiBvbiBhbmQgc2VlbXMgdG8gYmUgc29t
ZXdoYXQgQlNEICJzdGFuZGFyZCIuICBIYW5kbGVycworCSAqIGluc3RhbGxlZCB3aXRoIHNpZ3Zl
YyBtYXkgYmUgdXNpbmcgaXQuCisJICovCisJcmVnaXN0ZXJfdAlzZl9zaWdudW07CisJcmVnaXN0
ZXJfdAlzZl9zaWdpbmZvOwkvKiBjb2RlIG9yIHBvaW50ZXIgdG8gc2Zfc2kgKi8KKwlyZWdpc3Rl
cl90CXNmX3Vjb250ZXh0OwkvKiBwb2ludHMgdG8gc2ZfdWMgKi8KKwlyZWdpc3Rlcl90CXNmX2Fk
ZHI7CS8qIHVuZG9jdW1lbnRlZCA0dGggYXJnICovCisKKwl1bmlvbiB7CisJCV9fc2lnaW5mb2hh
bmRsZXJfdAkqc2ZfYWN0aW9uOworCQlfX3NpZ2hhbmRsZXJfdAkJKnNmX2hhbmRsZXI7CisJfSBz
Zl9haHU7CisJdWNvbnRleHRfdAlzZl91YzsJCS8qID0gKnNmX3Vjb250ZXh0ICovCisJc2lnaW5m
b190CXNmX3NpOwkJLyogPSAqc2Zfc2lnaW5mbyAoU0FfU0lHSU5GTyBjYXNlKSAqLworfTsKKyNl
bmRpZiAvKiBfX2kzODZfXyAqLworCisjaWZkZWYgX19hbWQ2NF9fCitzdHJ1Y3Qgc2lnZnJhbWUg
eworCXVuaW9uIHsKKwkJX19zaWdpbmZvaGFuZGxlcl90CSpzZl9hY3Rpb247CisJCV9fc2lnaGFu
ZGxlcl90CQkqc2ZfaGFuZGxlcjsKKwl9IHNmX2FodTsKKwl1Y29udGV4dF90CXNmX3VjOwkJLyog
PSAqc2ZfdWNvbnRleHQgKi8KKwlzaWdpbmZvX3QJc2Zfc2k7CQkvKiA9ICpzZl9zaWdpbmZvIChT
QV9TSUdJTkZPIGNhc2UpICovCit9OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjZW5kaWYg
LyogX1g4Nl9TSUdGUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9zaWduYWwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ25h
bC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2lnbmFsLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvc2lnbmFsLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSwxNjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg2LCAxOTg5LCAxOTkxLCAxOTkz
CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc2lnbmFsLmgJOC4xIChCZXJrZWxl
eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9zaWdu
YWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQKKyAqLworCisjaWZuZGVmIF9Y
ODZfU0lHTkFMX0gKKyNkZWZpbmUJX1g4Nl9TSUdOQUxfSCAxCisKKy8qCisgKiBNYWNoaW5lLWRl
cGVuZGVudCBzaWduYWwgZGVmaW5pdGlvbnMKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CisjaW5jbHVkZSA8c3lzL19zaWdzZXQuaD4KKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNpbmNsdWRl
IDxtYWNoaW5lL3RyYXAuaD4JLyogY29kZXMgZm9yIFNJR0lMTCwgU0lHRlBFICovCisjZW5kaWYK
KworI2lmZGVmIF9faTM4Nl9fCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JT
RF9WSVNJQkxFCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNjX21hc2s7
CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2Nfb25zdGFjazsJCS8qIHNpZ3N0
YWNrIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2NfZ3M7CQkJLyogbWFjaGluZSBzdGF0ZSAo
c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlpbnQJc2NfZnM7CisJaW50CXNjX2VzOworCWludAlzY19k
czsKKwlpbnQJc2NfZWRpOworCWludAlzY19lc2k7CisJaW50CXNjX2VicDsKKwlpbnQJc2NfaXNw
OworCWludAlzY19lYng7CisJaW50CXNjX2VkeDsKKwlpbnQJc2NfZWN4OworCWludAlzY19lYXg7
CisJaW50CXNjX3RyYXBubzsKKwlpbnQJc2NfZXJyOworCWludAlzY19laXA7CisJaW50CXNjX2Nz
OworCWludAlzY19lZmw7CisJaW50CXNjX2VzcDsKKwlpbnQJc2Nfc3M7CisJaW50CXNjX2xlbjsJ
CQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKwkvKgorCSAqIFNlZSA8bWFjaGluZS91Y29udGV4
dC5oPiBhbmQgPG1hY2hpbmUvbnB4Lmg+IGZvcgorCSAqIHRoZSBmb2xsb3dpbmcgZmllbGRzLgor
CSAqLworCWludAlzY19mcGZvcm1hdDsKKwlpbnQJc2Nfb3duZWRmcDsKKwlpbnQJc2NfZmxhZ3M7
CisJaW50CXNjX2Zwc3RhdGVbMTI4XSBfX2FsaWduZWQoMTYpOworCisJaW50CXNjX2ZzYmFzZTsK
KwlpbnQJc2NfZ3NiYXNlOworCisJaW50CXNjX3hmcHVzdGF0ZTsKKwlpbnQJc2NfeGZwdXN0YXRl
X2xlbjsKKworCWludAlzY19zcGFyZTJbNF07Cit9OworCisjZGVmaW5lCXNjX3NwCQlzY19lc3AK
KyNkZWZpbmUJc2NfZnAJCXNjX2VicAorI2RlZmluZQlzY19wYwkJc2NfZWlwCisjZGVmaW5lCXNj
X3BzCQlzY19lZmwKKyNkZWZpbmUJc2NfZWZsYWdzCXNjX2VmbAorCisjZW5kaWYgLyogX19CU0Rf
VklTSUJMRSAqLworI2VuZGlmIC8qIF9faTM4Nl9fICovCisKKyNpZmRlZiBfX2FtZDY0X18KK3R5
cGVkZWYgbG9uZyBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JTRF9WSVNJQkxFCisvKgorICogSW5m
b3JtYXRpb24gcHVzaGVkIG9uIHN0YWNrIHdoZW4gYSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICog
VGhpcyBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcmVzdG9yZSBzdGF0ZSBmb2xsb3dpbmcKKyAq
IGV4ZWN1dGlvbiBvZiB0aGUgc2lnbmFsIGhhbmRsZXIuICBJdCBpcyBhbHNvIG1hZGUgYXZhaWxh
YmxlCisgKiB0byB0aGUgaGFuZGxlciB0byBhbGxvdyBpdCB0byByZXN0b3JlIHN0YXRlIHByb3Bl
cmx5IGlmCisgKiBhIG5vbi1zdGFuZGFyZCBleGl0IGlzIHBlcmZvcm1lZC4KKyAqCisgKiBUaGUg
c2VxdWVuY2Ugb2YgdGhlIGZpZWxkcy9yZWdpc3RlcnMgYWZ0ZXIgc2NfbWFzayBpbiBzdHJ1Y3QK
KyAqIHNpZ2NvbnRleHQgbXVzdCBtYXRjaCB0aG9zZSBpbiBtY29udGV4dF90IGFuZCBzdHJ1Y3Qg
dHJhcGZyYW1lLgorICovCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNj
X21hc2s7CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlsb25nCXNjX29uc3RhY2s7CQkv
KiBzaWdzdGFjayBzdGF0ZSB0byByZXN0b3JlICovCisJbG9uZwlzY19yZGk7CQkvKiBtYWNoaW5l
IHN0YXRlIChzdHJ1Y3QgdHJhcGZyYW1lKSAqLworCWxvbmcJc2NfcnNpOworCWxvbmcJc2NfcmR4
OworCWxvbmcJc2NfcmN4OworCWxvbmcJc2Nfcjg7CisJbG9uZwlzY19yOTsKKwlsb25nCXNjX3Jh
eDsKKwlsb25nCXNjX3JieDsKKwlsb25nCXNjX3JicDsKKwlsb25nCXNjX3IxMDsKKwlsb25nCXNj
X3IxMTsKKwlsb25nCXNjX3IxMjsKKwlsb25nCXNjX3IxMzsKKwlsb25nCXNjX3IxNDsKKwlsb25n
CXNjX3IxNTsKKwlpbnQJc2NfdHJhcG5vOworCXNob3J0CXNjX2ZzOworCXNob3J0CXNjX2dzOwor
CWxvbmcJc2NfYWRkcjsKKwlpbnQJc2NfZmxhZ3M7CisJc2hvcnQJc2NfZXM7CisJc2hvcnQJc2Nf
ZHM7CisJbG9uZwlzY19lcnI7CisJbG9uZwlzY19yaXA7CisJbG9uZwlzY19jczsKKwlsb25nCXNj
X3JmbGFnczsKKwlsb25nCXNjX3JzcDsKKwlsb25nCXNjX3NzOworCWxvbmcJc2NfbGVuOwkJCS8q
IHNpemVvZihtY29udGV4dF90KSAqLworCS8qCisJICogU2VlIDxtYWNoaW5lL3Vjb250ZXh0Lmg+
IGFuZCA8bWFjaGluZS9mcHUuaD4gZm9yIHRoZSBmb2xsb3dpbmcKKwkgKiBmaWVsZHMuCisJICov
CisJbG9uZwlzY19mcGZvcm1hdDsKKwlsb25nCXNjX293bmVkZnA7CisJbG9uZwlzY19mcHN0YXRl
WzY0XSBfX2FsaWduZWQoMTYpOworCisJbG9uZwlzY19mc2Jhc2U7CisJbG9uZwlzY19nc2Jhc2U7
CisKKwlsb25nCXNjX3hmcHVzdGF0ZTsKKwlsb25nCXNjX3hmcHVzdGF0ZV9sZW47CisKKwlsb25n
CXNjX3NwYXJlWzRdOworfTsKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisjZW5kaWYgLyog
X19hbWQ2NF9fICovCisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9zcGVjaWFscmVnLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9z
cGVjaWFscmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zcGVjaWFscmVn
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvc3BlY2lhbHJlZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAw
MDAwICswMTAwCkBAIC0wLDAgKzEsODc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSBU
aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZl
cnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTog
QCgjKXNwZWNpYWxyZWcuaAk3LjEgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc3BlY2lhbHJlZy5oIDI5ODEwMSAyMDE2LTA0LTE2IDA2
OjA3OjEzWiBraWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU1BFQ0lBTFJFR19IXworI2Rl
ZmluZQlfTUFDSElORV9TUEVDSUFMUkVHX0hfCisKKy8qCisgKiBCaXRzIGluIDM4NiBzcGVjaWFs
IHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfUEUJMHgwMDAwMDAwMQkvKiBQcm90ZWN0ZWQg
bW9kZSBFbmFibGUgKi8KKyNkZWZpbmUJQ1IwX01QCTB4MDAwMDAwMDIJLyogIk1hdGgiIChmcHUp
IFByZXNlbnQgKi8KKyNkZWZpbmUJQ1IwX0VNCTB4MDAwMDAwMDQJLyogRU11bGF0ZSBGUFUgaW5z
dHJ1Y3Rpb25zLiAodHJhcCBFU0Mgb25seSkgKi8KKyNkZWZpbmUJQ1IwX1RTCTB4MDAwMDAwMDgJ
LyogVGFzayBTd2l0Y2hlZCAoaWYgTVAsIHRyYXAgRVNDIGFuZCBXQUlUKSAqLworI2RlZmluZQlD
UjBfUEcJMHg4MDAwMDAwMAkvKiBQYUdpbmcgZW5hYmxlICovCisKKy8qCisgKiBCaXRzIGluIDQ4
NiBzcGVjaWFsIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfTkUJMHgwMDAwMDAyMAkvKiBO
dW1lcmljIEVycm9yIGVuYWJsZSAoRVgxNiB2cyBJUlExMykgKi8KKyNkZWZpbmUJQ1IwX1dQCTB4
MDAwMTAwMDAJLyogV3JpdGUgUHJvdGVjdCAoaG9ub3IgcGFnZSBwcm90ZWN0IGluCisJCQkJCQkJ
ICAgYWxsIG1vZGVzKSAqLworI2RlZmluZQlDUjBfQU0JMHgwMDA0MDAwMAkvKiBBbGlnbm1lbnQg
TWFzayAoc2V0IHRvIGVuYWJsZSBBQyBmbGFnKSAqLworI2RlZmluZQlDUjBfTlcgIDB4MjAwMDAw
MDAJLyogTm90IFdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUJQ1IwX0NEICAweDQwMDAwMDAwCS8q
IENhY2hlIERpc2FibGUgKi8KKworI2RlZmluZQlDUjNfUENJRF9TQVZFIDB4ODAwMDAwMDAwMDAw
MDAwMAorI2RlZmluZQlDUjNfUENJRF9NQVNLIDB4ZmZmCisKKy8qCisgKiBCaXRzIGluIFBQcm8g
c3BlY2lhbCByZWdpc3RlcnMKKyAqLworI2RlZmluZQlDUjRfVk1FCTB4MDAwMDAwMDEJLyogVmly
dHVhbCA4MDg2IG1vZGUgZXh0ZW5zaW9ucyAqLworI2RlZmluZQlDUjRfUFZJCTB4MDAwMDAwMDIJ
LyogUHJvdGVjdGVkLW1vZGUgdmlydHVhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNSNF9UU0QJ
MHgwMDAwMDAwNAkvKiBUaW1lIHN0YW1wIGRpc2FibGUgKi8KKyNkZWZpbmUJQ1I0X0RFCTB4MDAw
MDAwMDgJLyogRGVidWdnaW5nIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUJQ1I0X1BTRQkweDAwMDAw
MDEwCS8qIFBhZ2Ugc2l6ZSBleHRlbnNpb25zICovCisjZGVmaW5lCUNSNF9QQUUJMHgwMDAwMDAy
MAkvKiBQaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbiAqLworI2RlZmluZQlDUjRfTUNFCTB4MDAw
MDAwNDAJLyogTWFjaGluZSBjaGVjayBlbmFibGUgKi8KKyNkZWZpbmUJQ1I0X1BHRQkweDAwMDAw
MDgwCS8qIFBhZ2UgZ2xvYmFsIGVuYWJsZSAqLworI2RlZmluZQlDUjRfUENFCTB4MDAwMDAxMDAJ
LyogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyIGVuYWJsZSAqLworI2RlZmluZQlDUjRf
RlhTUiAweDAwMDAwMjAwCS8qIEZhc3QgRlBVIHNhdmUvcmVzdG9yZSB1c2VkIGJ5IE9TICovCisj
ZGVmaW5lCUNSNF9YTU0JMHgwMDAwMDQwMAkvKiBlbmFibGUgU0lNRC9NTVgyIHRvIHVzZSBleGNl
cHQgMTYgKi8KKyNkZWZpbmUJQ1I0X1ZNWEUgMHgwMDAwMjAwMAkvKiBlbmFibGUgVk1YIG9wZXJh
dGlvbiAoSW50ZWwtc3BlY2lmaWMpICovCisjZGVmaW5lCUNSNF9GU0dTQkFTRSAweDAwMDEwMDAw
CS8qIEVuYWJsZSBGUy9HUyBCQVNFIGFjY2Vzc2luZyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJ
Q1I0X1BDSURFIDB4MDAwMjAwMDAJLyogRW5hYmxlIENvbnRleHQgSUQgKi8KKyNkZWZpbmUJQ1I0
X1hTQVZFIDB4MDAwNDAwMDAJLyogWFNFVEJWL1hHRVRCViAqLworI2RlZmluZQlDUjRfU01FUCAw
eDAwMTAwMDAwCS8qIFN1cGVydmlzb3ItTW9kZSBFeGVjdXRpb24gUHJldmVudGlvbiAqLworCisv
KgorICogQml0cyBpbiBBTUQ2NCBzcGVjaWFsIHJlZ2lzdGVycy4gIEVGRVIgaXMgNjQgYml0cyB3
aWRlLgorICovCisjZGVmaW5lCUVGRVJfU0NFIDB4MDAwMDAwMDAxCS8qIFN5c3RlbSBDYWxsIEV4
dGVuc2lvbnMgKFIvVykgKi8KKyNkZWZpbmUJRUZFUl9MTUUgMHgwMDAwMDAxMDAJLyogTG9uZyBt
b2RlIGVuYWJsZSAoUi9XKSAqLworI2RlZmluZQlFRkVSX0xNQSAweDAwMDAwMDQwMAkvKiBMb25n
IG1vZGUgYWN0aXZlIChSKSAqLworI2RlZmluZQlFRkVSX05YRSAweDAwMDAwMDgwMAkvKiBQVEUg
Tm8tRXhlY3V0ZSBiaXQgZW5hYmxlIChSL1cpICovCisjZGVmaW5lCUVGRVJfU1ZNIDB4MDAwMDAx
MDAwCS8qIFNWTSBlbmFibGUgYml0IGZvciBBTUQsIHJlc2VydmVkIGZvciBJbnRlbCAqLworI2Rl
ZmluZQlFRkVSX0xNU0xFIDB4MDAwMDAyMDAwCS8qIExvbmcgTW9kZSBTZWdtZW50IExpbWl0IEVu
YWJsZSAqLworI2RlZmluZQlFRkVSX0ZGWFNSIDB4MDAwMDA0MDAwCS8qIEZhc3QgRlhTQVZFL0ZT
UlNUT1IgKi8KKyNkZWZpbmUJRUZFUl9UQ0UgICAweDAwMDAwODAwMAkvKiBUcmFuc2xhdGlvbiBD
YWNoZSBFeHRlbnNpb24gKi8KKworLyoKKyAqIEludGVsIEV4dGVuZGVkIEZlYXR1cmVzIHJlZ2lz
dGVycworICovCisjZGVmaW5lCVhDUjAJMAkJLyogWEZFQVRVUkVfRU5BQkxFRF9NQVNLIHJlZ2lz
dGVyICovCisKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9YODcJCTB4MDAwMDAwMDEKKyNkZWZp
bmUJWEZFQVRVUkVfRU5BQkxFRF9TU0UJCTB4MDAwMDAwMDIKKyNkZWZpbmUJWEZFQVRVUkVfRU5B
QkxFRF9ZTU1fSEkxMjgJMHgwMDAwMDAwNAorI2RlZmluZQlYRkVBVFVSRV9FTkFCTEVEX0FWWAkJ
WEZFQVRVUkVfRU5BQkxFRF9ZTU1fSEkxMjgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRS
RUdTCTB4MDAwMDAwMDgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRDU1IJCTB4MDAwMDAw
MTAKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9PUE1BU0sJCTB4MDAwMDAwMjAKKyNkZWZpbmUJ
WEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYJMHgwMDAwMDA0MAorI2RlZmluZQlYRkVBVFVSRV9F
TkFCTEVEX0hJMTZfWk1NCTB4MDAwMDAwODAKKworI2RlZmluZQlYRkVBVFVSRV9BVlgJCQkJCVwK
KyAgICAoWEZFQVRVUkVfRU5BQkxFRF9YODcgfCBYRkVBVFVSRV9FTkFCTEVEX1NTRSB8IFhGRUFU
VVJFX0VOQUJMRURfQVZYKQorI2RlZmluZQlYRkVBVFVSRV9BVlg1MTIJCQkJCQlcCisgICAgKFhG
RUFUVVJFX0VOQUJMRURfT1BNQVNLIHwgWEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYgfAlcCisg
ICAgWEZFQVRVUkVfRU5BQkxFRF9ISTE2X1pNTSkKKyNkZWZpbmUJWEZFQVRVUkVfTVBYCQkJCQlc
CisgICAgKFhGRUFUVVJFX0VOQUJMRURfQk5EUkVHUyB8IFhGRUFUVVJFX0VOQUJMRURfQk5EQ1NS
KQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gZmVhdHVyZXMgcmVnaXN0ZXIKKyAqLworI2Rl
ZmluZQlDUFVJRF9GUFUJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9WTUUJMHgwMDAwMDAwMgor
I2RlZmluZQlDUFVJRF9ERQkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1BTRQkweDAwMDAwMDA4
CisjZGVmaW5lCUNQVUlEX1RTQwkweDAwMDAwMDEwCisjZGVmaW5lCUNQVUlEX01TUgkweDAwMDAw
MDIwCisjZGVmaW5lCUNQVUlEX1BBRQkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEX01DRQkweDAw
MDAwMDgwCisjZGVmaW5lCUNQVUlEX0NYOAkweDAwMDAwMTAwCisjZGVmaW5lCUNQVUlEX0FQSUMJ
MHgwMDAwMDIwMAorI2RlZmluZQlDUFVJRF9CMTAJMHgwMDAwMDQwMAorI2RlZmluZQlDUFVJRF9T
RVAJMHgwMDAwMDgwMAorI2RlZmluZQlDUFVJRF9NVFJSCTB4MDAwMDEwMDAKKyNkZWZpbmUJQ1BV
SURfUEdFCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfTUNBCTB4MDAwMDQwMDAKKyNkZWZpbmUJ
Q1BVSURfQ01PVgkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEX1BBVAkweDAwMDEwMDAwCisjZGVm
aW5lCUNQVUlEX1BTRTM2CTB4MDAwMjAwMDAKKyNkZWZpbmUJQ1BVSURfUFNOCTB4MDAwNDAwMDAK
KyNkZWZpbmUJQ1BVSURfQ0xGU0gJMHgwMDA4MDAwMAorI2RlZmluZQlDUFVJRF9CMjAJMHgwMDEw
MDAwMAorI2RlZmluZQlDUFVJRF9EUwkweDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX0FDUEkJMHgw
MDQwMDAwMAorI2RlZmluZQlDUFVJRF9NTVgJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9GWFNS
CTB4MDEwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURf
WE1NCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFMgkweDA0MDAwMDAwCisjZGVmaW5lCUNQ
VUlEX1NTCTB4MDgwMDAwMDAKKyNkZWZpbmUJQ1BVSURfSFRUCTB4MTAwMDAwMDAKKyNkZWZpbmUJ
Q1BVSURfVE0JMHgyMDAwMDAwMAorI2RlZmluZQlDUFVJRF9JQTY0CTB4NDAwMDAwMDAKKyNkZWZp
bmUJQ1BVSURfUEJFCTB4ODAwMDAwMDAKKworI2RlZmluZQlDUFVJRDJfU1NFMwkweDAwMDAwMDAx
CisjZGVmaW5lCUNQVUlEMl9QQ0xNVUxRRFEgMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRDJfRFRF
UzY0CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSUQyX01PTgkweDAwMDAwMDA4CisjZGVmaW5lCUNQ
VUlEMl9EU19DUEwJMHgwMDAwMDAxMAorI2RlZmluZQlDUFVJRDJfVk1YCTB4MDAwMDAwMjAKKyNk
ZWZpbmUJQ1BVSUQyX1NNWAkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEMl9FU1QJMHgwMDAwMDA4
MAorI2RlZmluZQlDUFVJRDJfVE0yCTB4MDAwMDAxMDAKKyNkZWZpbmUJQ1BVSUQyX1NTU0UzCTB4
MDAwMDAyMDAKKyNkZWZpbmUJQ1BVSUQyX0NOWFRJRAkweDAwMDAwNDAwCisjZGVmaW5lCUNQVUlE
Ml9TREJHCTB4MDAwMDA4MDAKKyNkZWZpbmUJQ1BVSUQyX0ZNQQkweDAwMDAxMDAwCisjZGVmaW5l
CUNQVUlEMl9DWDE2CTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSUQyX1hUUFIJMHgwMDAwNDAwMAor
I2RlZmluZQlDUFVJRDJfUERDTQkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEMl9QQ0lECTB4MDAw
MjAwMDAKKyNkZWZpbmUJQ1BVSUQyX0RDQQkweDAwMDQwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0
MQkweDAwMDgwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0MgkweDAwMTAwMDAwCisjZGVmaW5lCUNQ
VUlEMl9YMkFQSUMJMHgwMDIwMDAwMAorI2RlZmluZQlDUFVJRDJfTU9WQkUJMHgwMDQwMDAwMAor
I2RlZmluZQlDUFVJRDJfUE9QQ05UCTB4MDA4MDAwMDAKKyNkZWZpbmUJQ1BVSUQyX1RTQ0RMVAkw
eDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9BRVNOSQkweDAyMDAwMDAwCisjZGVmaW5lCUNQVUlE
Ml9YU0FWRQkweDA0MDAwMDAwCisjZGVmaW5lCUNQVUlEMl9PU1hTQVZFCTB4MDgwMDAwMDAKKyNk
ZWZpbmUJQ1BVSUQyX0FWWAkweDEwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9GMTZDCTB4MjAwMDAw
MDAKKyNkZWZpbmUJQ1BVSUQyX1JEUkFORAkweDQwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9IVgkw
eDgwMDAwMDAwCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgVGhlcm1hbCBhbmQgUG93
ZXIgTWFuYWdlbWVudCBmbGFncworICogQ1BVSUQuNiBFQVggYW5kIEVDWC4KKyAqLworI2RlZmlu
ZQlDUFVUUE0xX1NFTlNPUgkweDAwMDAwMDAxCisjZGVmaW5lCUNQVVRQTTFfVFVSQk8JMHgwMDAw
MDAwMgorI2RlZmluZQlDUFVUUE0xX0FSQVQJMHgwMDAwMDAwNAorI2RlZmluZQlDUFVUUE0yX0VG
RlJFUQkweDAwMDAwMDAxCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgQU1EIGV4dGVu
ZGVkIGNwdWlkIGZsYWdzCisgKi8KKyNkZWZpbmUJQU1ESURfU1lTQ0FMTAkweDAwMDAwODAwCisj
ZGVmaW5lCUFNRElEX01QCTB4MDAwODAwMDAKKyNkZWZpbmUJQU1ESURfTlgJMHgwMDEwMDAwMAor
I2RlZmluZQlBTURJRF9FWFRfTU1YCTB4MDA0MDAwMDAKKyNkZWZpbmUJQU1ESURfRkZYU1IJMHgw
MjAwMDAwMAorI2RlZmluZQlBTURJRF9QQUdFMUdCCTB4MDQwMDAwMDAKKyNkZWZpbmUJQU1ESURf
UkRUU0NQCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESURfTE0JMHgyMDAwMDAwMAorI2RlZmluZQlB
TURJRF9FWFRfM0ROT1cJMHg0MDAwMDAwMAorI2RlZmluZQlBTURJRF8zRE5PVwkweDgwMDAwMDAw
CisKKyNkZWZpbmUJQU1ESUQyX0xBSEYJMHgwMDAwMDAwMQorI2RlZmluZQlBTURJRDJfQ01QCTB4
MDAwMDAwMDIKKyNkZWZpbmUJQU1ESUQyX1NWTQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRElEMl9F
WFRfQVBJQwkweDAwMDAwMDA4CisjZGVmaW5lCUFNRElEMl9DUjgJMHgwMDAwMDAxMAorI2RlZmlu
ZQlBTURJRDJfQUJNCTB4MDAwMDAwMjAKKyNkZWZpbmUJQU1ESUQyX1NTRTRBCTB4MDAwMDAwNDAK
KyNkZWZpbmUJQU1ESUQyX01BUwkweDAwMDAwMDgwCisjZGVmaW5lCUFNRElEMl9QUkVGRVRDSAkw
eDAwMDAwMTAwCisjZGVmaW5lCUFNRElEMl9PU1ZXCTB4MDAwMDAyMDAKKyNkZWZpbmUJQU1ESUQy
X0lCUwkweDAwMDAwNDAwCisjZGVmaW5lCUFNRElEMl9YT1AJMHgwMDAwMDgwMAorI2RlZmluZQlB
TURJRDJfU0tJTklUCTB4MDAwMDEwMDAKKyNkZWZpbmUJQU1ESUQyX1dEVAkweDAwMDAyMDAwCisj
ZGVmaW5lCUFNRElEMl9MV1AJMHgwMDAwODAwMAorI2RlZmluZQlBTURJRDJfRk1BNAkweDAwMDEw
MDAwCisjZGVmaW5lCUFNRElEMl9UQ0UJMHgwMDAyMDAwMAorI2RlZmluZQlBTURJRDJfTk9ERV9J
RAkweDAwMDgwMDAwCisjZGVmaW5lCUFNRElEMl9UQk0JMHgwMDIwMDAwMAorI2RlZmluZQlBTURJ
RDJfVE9QT0xPR1kJMHgwMDQwMDAwMAorI2RlZmluZQlBTURJRDJfUENYQwkweDAwODAwMDAwCisj
ZGVmaW5lCUFNRElEMl9QTlhDCTB4MDEwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX0RCRQkweDA0MDAw
MDAwCisjZGVmaW5lCUFNRElEMl9QVFNDCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX1BUU0NF
TDJJCTB4MTAwMDAwMDAKKworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWF4IGluZm8KKyAq
LworI2RlZmluZQlDUFVJRF9TVEVQUElORwkJMHgwMDAwMDAwZgorI2RlZmluZQlDUFVJRF9NT0RF
TAkJMHgwMDAwMDBmMAorI2RlZmluZQlDUFVJRF9GQU1JTFkJCTB4MDAwMDBmMDAKKyNkZWZpbmUJ
Q1BVSURfRVhUX01PREVMCQkweDAwMGYwMDAwCisjZGVmaW5lCUNQVUlEX0VYVF9GQU1JTFkJMHgw
ZmYwMDAwMAorI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCUNQVUlEX1RPX01PREVMKGlkKSBcCisg
ICAgKCgoKGlkKSAmIENQVUlEX01PREVMKSA+PiA0KSB8IFwKKyAgICAoKCgoaWQpICYgQ1BVSURf
RkFNSUxZKSA+PSAweDYwMCkgPyBcCisgICAgKCgoaWQpICYgQ1BVSURfRVhUX01PREVMKSA+PiAx
MikgOiAwKSkKKyNkZWZpbmUJQ1BVSURfVE9fRkFNSUxZKGlkKSBcCisgICAgKCgoKGlkKSAmIENQ
VUlEX0ZBTUlMWSkgPj4gOCkgKyBcCisgICAgKCgoKGlkKSAmIENQVUlEX0ZBTUlMWSkgPT0gMHhm
MDApID8gXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9GQU1JTFkpID4+IDIwKSA6IDApKQorI2Vs
c2UKKyNkZWZpbmUJQ1BVSURfVE9fTU9ERUwoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfTU9E
RUwpID4+IDQpIHwgXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9NT0RFTCkgPj4gMTIpKQorI2Rl
ZmluZQlDUFVJRF9UT19GQU1JTFkoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfRkFNSUxZKSA+
PiA4KSArIFwKKyAgICAoKChpZCkgJiBDUFVJRF9FWFRfRkFNSUxZKSA+PiAyMCkpCisjZW5kaWYK
KworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWJ4IGluZm8KKyAqLworI2RlZmluZQlDUFVJ
RF9CUkFORF9JTkRFWAkweDAwMDAwMGZmCisjZGVmaW5lCUNQVUlEX0NMRlVTSF9TSVpFCTB4MDAw
MGZmMDAKKyNkZWZpbmUJQ1BVSURfSFRUX0NPUkVTCQkweDAwZmYwMDAwCisjZGVmaW5lCUNQVUlE
X0xPQ0FMX0FQSUNfSUQJMHhmZjAwMDAwMAorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNSBp
bmZvCisgKi8KKyNkZWZpbmUJQ1BVSUQ1X01PTl9NSU5fU0laRQkweDAwMDBmZmZmCS8qIGVheCAq
LworI2RlZmluZQlDUFVJRDVfTU9OX01BWF9TSVpFCTB4MDAwMGZmZmYJLyogZWJ4ICovCisjZGVm
aW5lCUNQVUlENV9NT05fTVdBSVRfRVhUCTB4MDAwMDAwMDEJLyogZWN4ICovCisjZGVmaW5lCUNQ
VUlENV9NV0FJVF9JTlRSQlJFQUsJMHgwMDAwMDAwMgkvKiBlY3ggKi8KKworLyoKKyAqIE1XQUlU
IGNwdSBwb3dlciBzdGF0ZXMuICBMb3dlciA0IGJpdHMgYXJlIHN1Yi1zdGF0ZXMuCisgKi8KKyNk
ZWZpbmUJTVdBSVRfQzAJMHhmMAorI2RlZmluZQlNV0FJVF9DMQkweDAwCisjZGVmaW5lCU1XQUlU
X0MyCTB4MTAKKyNkZWZpbmUJTVdBSVRfQzMJMHgyMAorI2RlZmluZQlNV0FJVF9DNAkweDMwCisK
Ky8qCisgKiBNV0FJVCBleHRlbnNpb25zLgorICovCisvKiBJbnRlcnJ1cHQgYnJlYWtzIE1XQUlU
IGV2ZW4gd2hlbiBtYXNrZWQuICovCisjZGVmaW5lCU1XQUlUX0lOVFJCUkVBSwkJMHgwMDAwMDAw
MQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNiBlY3ggaW5mbworICovCisjZGVmaW5lCUNQ
VUlEX1BFUkZfU1RBVAkJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9QRVJGX0JJQVMJCTB4MDAw
MDAwMDgKKworLyogCisgKiBDUFVJRCBpbnN0cnVjdGlvbiAweGIgZWJ4IGluZm8uCisgKi8KKyNk
ZWZpbmUJQ1BVSURfVFlQRV9JTlZBTAkwCisjZGVmaW5lCUNQVUlEX1RZUEVfU01UCQkxCisjZGVm
aW5lCUNQVUlEX1RZUEVfQ09SRQkJMgorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gMHhkIFBy
b2Nlc3NvciBFeHRlbmRlZCBTdGF0ZSBFbnVtZXJhdGlvbiBTdWItbGVhZiAxCisgKi8KKyNkZWZp
bmUJQ1BVSURfRVhUU1RBVEVfWFNBVkVPUFQJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9FWFRT
VEFURV9YU0FWRUMJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YSU5VU0UJMHgw
MDAwMDAwNAorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YU0FWRVMJMHgwMDAwMDAwOAorCisvKgor
ICogQU1EIGV4dGVuZGVkIGZ1bmN0aW9uIDgwMDBfMDAwN2ggZWR4IGluZm8KKyAqLworI2RlZmlu
ZQlBTURQTV9UUwkJMHgwMDAwMDAwMQorI2RlZmluZQlBTURQTV9GSUQJCTB4MDAwMDAwMDIKKyNk
ZWZpbmUJQU1EUE1fVklECQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRFBNX1RUUAkJMHgwMDAwMDAw
OAorI2RlZmluZQlBTURQTV9UTQkJMHgwMDAwMDAxMAorI2RlZmluZQlBTURQTV9TVEMJCTB4MDAw
MDAwMjAKKyNkZWZpbmUJQU1EUE1fMTAwTUhaX1NURVBTCTB4MDAwMDAwNDAKKyNkZWZpbmUJQU1E
UE1fSFdfUFNUQVRFCQkweDAwMDAwMDgwCisjZGVmaW5lCUFNRFBNX1RTQ19JTlZBUklBTlQJMHgw
MDAwMDEwMAorI2RlZmluZQlBTURQTV9DUEIJCTB4MDAwMDAyMDAKKworLyoKKyAqIEFNRCBleHRl
bmRlZCBmdW5jdGlvbiA4MDAwXzAwMDhoIGVjeCBpbmZvCisgKi8KKyNkZWZpbmUJQU1ESURfQ01Q
X0NPUkVTCQkweDAwMDAwMGZmCisjZGVmaW5lCUFNRElEX0NPUkVJRF9TSVpFCTB4MDAwMGYwMDAK
KyNkZWZpbmUJQU1ESURfQ09SRUlEX1NJWkVfU0hJRlQJMTIKKworLyoKKyAqIENQVUlEIGluc3Ry
dWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVieCBpbmZvCisg
Ki8KKyNkZWZpbmUJQ1BVSURfU1RERVhUX0ZTR1NCQVNFCTB4MDAwMDAwMDEKKyNkZWZpbmUJQ1BV
SURfU1RERVhUX1RTQ19BREpVU1QJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9TVERFWFRfU0dY
CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JNSTEJMHgwMDAwMDAwOAorI2RlZmlu
ZQlDUFVJRF9TVERFWFRfSExFCTB4MDAwMDAwMTAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0FWWDIJ
MHgwMDAwMDAyMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRkRQX0VYQwkweDAwMDAwMDQwCisjZGVm
aW5lCUNQVUlEX1NUREVYVF9TTUVQCTB4MDAwMDAwODAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JN
STIJMHgwMDAwMDEwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRVJNUwkweDAwMDAwMjAwCisjZGVm
aW5lCUNQVUlEX1NUREVYVF9JTlZQQ0lECTB4MDAwMDA0MDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU
X1JUTQkweDAwMDAwODAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUU0JMHgwMDAwMTAwMAorI2Rl
ZmluZQlDUFVJRF9TVERFWFRfTkZQVVNHCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU
X01QWAkweDAwMDA0MDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUUUJMHgwMDAwODAwMAorI2Rl
ZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyRgkweDAwMDEwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVY
VF9BVlg1MTJEUQkweDAwMDIwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9SRFNFRUQJMHgwMDA0
MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQURYCTB4MDAwODAwMDAKKyNkZWZpbmUJQ1BVSURf
U1RERVhUX1NNQVAJMHgwMDEwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEySUZNQQkw
eDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QQ09NTUlUCTB4MDA0MDAwMDAKKyNkZWZp
bmUJQ1BVSURfU1RERVhUX0NMRkxVU0hPUFQJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF
WFRfQ0xXQgkweDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUk9DVFJBQ0UJMHgwMjAw
MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyUEYJMHgwNDAwMDAwMAorI2RlZmluZQlD
UFVJRF9TVERFWFRfQVZYNTEyRVIJMHgwODAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZY
NTEyQ0QJMHgxMDAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfU0hBCTB4MjAwMDAwMDAKKyNk
ZWZpbmUJQ1BVSURfU1RERVhUX0FWWDUxMkJXCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIGlu
c3RydWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVjeCBpbmZv
CisgKi8KKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9QUkVGRVRDSFdUMSAweDAwMDAwMDAxCisjZGVm
aW5lCUNQVUlEX1NUREVYVDJfVU1JUAkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1NUREVYVDJf
UEtVCTB4MDAwMDAwMDgKKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9PU1BLRQkweDAwMDAwMDEwCisj
ZGVmaW5lCUNQVUlEX1NUREVYVDJfUkRQSUQJMHgwMDQwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF
WFQyX1NHWExDCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIG1hbnVmYWN0dXJlcnMgaWRlbnRp
ZmllcnMKKyAqLworI2RlZmluZQlBTURfVkVORE9SX0lECQkiQXV0aGVudGljQU1EIgorI2RlZmlu
ZQlDRU5UQVVSX1ZFTkRPUl9JRAkiQ2VudGF1ckhhdWxzIgorI2RlZmluZQlDWVJJWF9WRU5ET1Jf
SUQJCSJDeXJpeEluc3RlYWQiCisjZGVmaW5lCUlOVEVMX1ZFTkRPUl9JRAkJIkdlbnVpbmVJbnRl
bCIKKyNkZWZpbmUJTkVYR0VOX1ZFTkRPUl9JRAkiTmV4R2VuRHJpdmVuIgorI2RlZmluZQlOU0Nf
VkVORE9SX0lECQkiR2VvZGUgYnkgTlNDIgorI2RlZmluZQlSSVNFX1ZFTkRPUl9JRAkJIlJpc2VS
aXNlUmlzZSIKKyNkZWZpbmUJU0lTX1ZFTkRPUl9JRAkJIlNpUyBTaVMgU2lTICIKKyNkZWZpbmUJ
VFJBTlNNRVRBX1ZFTkRPUl9JRAkiR2VudWluZVRNeDg2IgorI2RlZmluZQlVTUNfVkVORE9SX0lE
CQkiVU1DIFVNQyBVTUMgIgorCisvKgorICogTW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciB0
aGUgaTM4NiBmYW1pbHkKKyAqLworI2RlZmluZQlNU1JfUDVfTUNfQUREUgkJMHgwMDAKKyNkZWZp
bmUJTVNSX1A1X01DX1RZUEUJCTB4MDAxCisjZGVmaW5lCU1TUl9UU0MJCQkweDAxMAorI2RlZmlu
ZQlNU1JfUDVfQ0VTUgkJMHgwMTEKKyNkZWZpbmUJTVNSX1A1X0NUUjAJCTB4MDEyCisjZGVmaW5l
CU1TUl9QNV9DVFIxCQkweDAxMworI2RlZmluZQlNU1JfSUEzMl9QTEFURk9STV9JRAkweDAxNwor
I2RlZmluZQlNU1JfQVBJQ0JBU0UJCTB4MDFiCisjZGVmaW5lCU1TUl9FQkxfQ1JfUE9XRVJPTgkw
eDAyYQorI2RlZmluZQlNU1JfVEVTVF9DVEwJCTB4MDMzCisjZGVmaW5lCU1TUl9JQTMyX0ZFQVRV
UkVfQ09OVFJPTCAweDAzYQorI2RlZmluZQlNU1JfQklPU19VUERUX1RSSUcJMHgwNzkKKyNkZWZp
bmUJTVNSX0JCTF9DUl9EMAkJMHgwODgKKyNkZWZpbmUJTVNSX0JCTF9DUl9EMQkJMHgwODkKKyNk
ZWZpbmUJTVNSX0JCTF9DUl9EMgkJMHgwOGEKKyNkZWZpbmUJTVNSX0JJT1NfU0lHTgkJMHgwOGIK
KyNkZWZpbmUJTVNSX1BFUkZDVFIwCQkweDBjMQorI2RlZmluZQlNU1JfUEVSRkNUUjEJCTB4MGMy
CisjZGVmaW5lCU1TUl9QTEFURk9STV9JTkZPCTB4MGNlCisjZGVmaW5lCU1TUl9NUEVSRgkJMHgw
ZTcKKyNkZWZpbmUJTVNSX0FQRVJGCQkweDBlOAorI2RlZmluZQlNU1JfSUEzMl9FWFRfQ09ORklH
CTB4MGVlCS8qIFVuZG9jdW1lbnRlZC4gQ29yZSBTb2xvL0R1byBvbmx5ICovCisjZGVmaW5lCU1T
Ul9NVFJSY2FwCQkweDBmZQorI2RlZmluZQlNU1JfQkJMX0NSX0FERFIJCTB4MTE2CisjZGVmaW5l
CU1TUl9CQkxfQ1JfREVDQwkJMHgxMTgKKyNkZWZpbmUJTVNSX0JCTF9DUl9DVEwJCTB4MTE5Cisj
ZGVmaW5lCU1TUl9CQkxfQ1JfVFJJRwkJMHgxMWEKKyNkZWZpbmUJTVNSX0JCTF9DUl9CVVNZCQkw
eDExYgorI2RlZmluZQlNU1JfQkJMX0NSX0NUTDMJCTB4MTFlCisjZGVmaW5lCU1TUl9TWVNFTlRF
Ul9DU19NU1IJMHgxNzQKKyNkZWZpbmUJTVNSX1NZU0VOVEVSX0VTUF9NU1IJMHgxNzUKKyNkZWZp
bmUJTVNSX1NZU0VOVEVSX0VJUF9NU1IJMHgxNzYKKyNkZWZpbmUJTVNSX01DR19DQVAJCTB4MTc5
CisjZGVmaW5lCU1TUl9NQ0dfU1RBVFVTCQkweDE3YQorI2RlZmluZQlNU1JfTUNHX0NUTAkJMHgx
N2IKKyNkZWZpbmUJTVNSX0VWTlRTRUwwCQkweDE4NgorI2RlZmluZQlNU1JfRVZOVFNFTDEJCTB4
MTg3CisjZGVmaW5lCU1TUl9USEVSTV9DT05UUk9MCTB4MTlhCisjZGVmaW5lCU1TUl9USEVSTV9J
TlRFUlJVUFQJMHgxOWIKKyNkZWZpbmUJTVNSX1RIRVJNX1NUQVRVUwkweDE5YworI2RlZmluZQlN
U1JfSUEzMl9NSVNDX0VOQUJMRQkweDFhMAorI2RlZmluZQlNU1JfSUEzMl9URU1QRVJBVFVSRV9U
QVJHRVQJMHgxYTIKKyNkZWZpbmUJTVNSX1RVUkJPX1JBVElPX0xJTUlUCTB4MWFkCisjZGVmaW5l
CU1TUl9UVVJCT19SQVRJT19MSU1JVDEJMHgxYWUKKyNkZWZpbmUJTVNSX0RFQlVHQ1RMTVNSCQkw
eDFkOQorI2RlZmluZQlNU1JfTEFTVEJSQU5DSEZST01JUAkweDFkYgorI2RlZmluZQlNU1JfTEFT
VEJSQU5DSFRPSVAJMHgxZGMKKyNkZWZpbmUJTVNSX0xBU1RJTlRGUk9NSVAJMHgxZGQKKyNkZWZp
bmUJTVNSX0xBU1RJTlRUT0lQCQkweDFkZQorI2RlZmluZQlNU1JfUk9CX0NSX0JLVVBUTVBEUjYJ
MHgxZTAKKyNkZWZpbmUJTVNSX01UUlJWYXJCYXNlCQkweDIwMAorI2RlZmluZQlNU1JfTVRSUjY0
a0Jhc2UJCTB4MjUwCisjZGVmaW5lCU1TUl9NVFJSMTZrQmFzZQkJMHgyNTgKKyNkZWZpbmUJTVNS
X01UUlI0a0Jhc2UJCTB4MjY4CisjZGVmaW5lCU1TUl9QQVQJCQkweDI3NworI2RlZmluZQlNU1Jf
TUMwX0NUTDIJCTB4MjgwCisjZGVmaW5lCU1TUl9NVFJSZGVmVHlwZQkJMHgyZmYKKyNkZWZpbmUJ
TVNSX01DMF9DVEwJCTB4NDAwCisjZGVmaW5lCU1TUl9NQzBfU1RBVFVTCQkweDQwMQorI2RlZmlu
ZQlNU1JfTUMwX0FERFIJCTB4NDAyCisjZGVmaW5lCU1TUl9NQzBfTUlTQwkJMHg0MDMKKyNkZWZp
bmUJTVNSX01DMV9DVEwJCTB4NDA0CisjZGVmaW5lCU1TUl9NQzFfU1RBVFVTCQkweDQwNQorI2Rl
ZmluZQlNU1JfTUMxX0FERFIJCTB4NDA2CisjZGVmaW5lCU1TUl9NQzFfTUlTQwkJMHg0MDcKKyNk
ZWZpbmUJTVNSX01DMl9DVEwJCTB4NDA4CisjZGVmaW5lCU1TUl9NQzJfU1RBVFVTCQkweDQwOQor
I2RlZmluZQlNU1JfTUMyX0FERFIJCTB4NDBhCisjZGVmaW5lCU1TUl9NQzJfTUlTQwkJMHg0MGIK
KyNkZWZpbmUJTVNSX01DM19DVEwJCTB4NDBjCisjZGVmaW5lCU1TUl9NQzNfU1RBVFVTCQkweDQw
ZAorI2RlZmluZQlNU1JfTUMzX0FERFIJCTB4NDBlCisjZGVmaW5lCU1TUl9NQzNfTUlTQwkJMHg0
MGYKKyNkZWZpbmUJTVNSX01DNF9DVEwJCTB4NDEwCisjZGVmaW5lCU1TUl9NQzRfU1RBVFVTCQkw
eDQxMQorI2RlZmluZQlNU1JfTUM0X0FERFIJCTB4NDEyCisjZGVmaW5lCU1TUl9NQzRfTUlTQwkJ
MHg0MTMKKyNkZWZpbmUJTVNSX1JBUExfUE9XRVJfVU5JVAkweDYwNgorI2RlZmluZQlNU1JfUEtH
X0VORVJHWV9TVEFUVVMJMHg2MTEKKyNkZWZpbmUJTVNSX0RSQU1fRU5FUkdZX1NUQVRVUwkweDYx
OQorI2RlZmluZQlNU1JfUFAwX0VORVJHWV9TVEFUVVMJMHg2MzkKKyNkZWZpbmUJTVNSX1BQMV9F
TkVSR1lfU1RBVFVTCTB4NjQxCisjZGVmaW5lCU1TUl9UU0NfREVBRExJTkUJMHg2ZTAJLyogV3Jp
dGVzIGFyZSBub3Qgc2VyaWFsaXppbmcgKi8KKworLyoKKyAqIFZNWCBNU1JzCisgKi8KKyNkZWZp
bmUJTVNSX1ZNWF9CQVNJQwkJMHg0ODAKKyNkZWZpbmUJTVNSX1ZNWF9QSU5CQVNFRF9DVExTCTB4
NDgxCisjZGVmaW5lCU1TUl9WTVhfUFJPQ0JBU0VEX0NUTFMJMHg0ODIKKyNkZWZpbmUJTVNSX1ZN
WF9FWElUX0NUTFMJMHg0ODMKKyNkZWZpbmUJTVNSX1ZNWF9FTlRSWV9DVExTCTB4NDg0CisjZGVm
aW5lCU1TUl9WTVhfQ1IwX0ZJWEVEMAkweDQ4NgorI2RlZmluZQlNU1JfVk1YX0NSMF9GSVhFRDEJ
MHg0ODcKKyNkZWZpbmUJTVNSX1ZNWF9DUjRfRklYRUQwCTB4NDg4CisjZGVmaW5lCU1TUl9WTVhf
Q1I0X0ZJWEVEMQkweDQ4OQorI2RlZmluZQlNU1JfVk1YX1BST0NCQVNFRF9DVExTMgkweDQ4Ygor
I2RlZmluZQlNU1JfVk1YX0VQVF9WUElEX0NBUAkweDQ4YworI2RlZmluZQlNU1JfVk1YX1RSVUVf
UElOQkFTRURfQ1RMUwkweDQ4ZAorI2RlZmluZQlNU1JfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMJ
MHg0OGUKKyNkZWZpbmUJTVNSX1ZNWF9UUlVFX0VYSVRfQ1RMUwkweDQ4ZgorI2RlZmluZQlNU1Jf
Vk1YX1RSVUVfRU5UUllfQ1RMUwkweDQ5MAorCisvKgorICogWDJBUElDIE1TUnMuCisgKiBXcml0
ZXMgYXJlIG5vdCBzZXJpYWxpemluZy4KKyAqLworI2RlZmluZQlNU1JfQVBJQ18wMDAJCTB4ODAw
CisjZGVmaW5lCU1TUl9BUElDX0lECQkweDgwMgorI2RlZmluZQlNU1JfQVBJQ19WRVJTSU9OCTB4
ODAzCisjZGVmaW5lCU1TUl9BUElDX1RQUgkJMHg4MDgKKyNkZWZpbmUJTVNSX0FQSUNfRU9JCQkw
eDgwYgorI2RlZmluZQlNU1JfQVBJQ19MRFIJCTB4ODBkCisjZGVmaW5lCU1TUl9BUElDX1NWUgkJ
MHg4MGYKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMAkJMHg4MTAKKyNkZWZpbmUJTVNSX0FQSUNfSVNS
MQkJMHg4MTEKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMgkJMHg4MTIKKyNkZWZpbmUJTVNSX0FQSUNf
SVNSMwkJMHg4MTMKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNAkJMHg4MTQKKyNkZWZpbmUJTVNSX0FQ
SUNfSVNSNQkJMHg4MTUKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNgkJMHg4MTYKKyNkZWZpbmUJTVNS
X0FQSUNfSVNSNwkJMHg4MTcKKyNkZWZpbmUJTVNSX0FQSUNfVE1SMAkJMHg4MTgKKyNkZWZpbmUJ
TVNSX0FQSUNfSVJSMAkJMHg4MjAKKyNkZWZpbmUJTVNSX0FQSUNfRVNSCQkweDgyOAorI2RlZmlu
ZQlNU1JfQVBJQ19MVlRfQ01DSQkweDgyRgorI2RlZmluZQlNU1JfQVBJQ19JQ1IJCTB4ODMwCisj
ZGVmaW5lCU1TUl9BUElDX0xWVF9USU1FUgkweDgzMgorI2RlZmluZQlNU1JfQVBJQ19MVlRfVEhF
Uk1BTAkweDgzMworI2RlZmluZQlNU1JfQVBJQ19MVlRfUENJTlQJMHg4MzQKKyNkZWZpbmUJTVNS
X0FQSUNfTFZUX0xJTlQwCTB4ODM1CisjZGVmaW5lCU1TUl9BUElDX0xWVF9MSU5UMQkweDgzNgor
I2RlZmluZQlNU1JfQVBJQ19MVlRfRVJST1IJMHg4MzcKKyNkZWZpbmUJTVNSX0FQSUNfSUNSX1RJ
TUVSCTB4ODM4CisjZGVmaW5lCU1TUl9BUElDX0NDUl9USU1FUgkweDgzOQorI2RlZmluZQlNU1Jf
QVBJQ19EQ1JfVElNRVIJMHg4M2UKKyNkZWZpbmUJTVNSX0FQSUNfU0VMRl9JUEkJMHg4M2YKKwor
I2RlZmluZQlNU1JfSUEzMl9YU1MJCTB4ZGEwCisKKy8qCisgKiBDb25zdGFudHMgcmVsYXRlZCB0
byBNU1Incy4KKyAqLworI2RlZmluZQlBUElDQkFTRV9SRVNFUlZFRAkweDAwMDAwMmZmCisjZGVm
aW5lCUFQSUNCQVNFX0JTUAkJMHgwMDAwMDEwMAorI2RlZmluZQlBUElDQkFTRV9YMkFQSUMJCTB4
MDAwMDA0MDAKKyNkZWZpbmUJQVBJQ0JBU0VfRU5BQkxFRAkweDAwMDAwODAwCisjZGVmaW5lCUFQ
SUNCQVNFX0FERFJFU1MJMHhmZmZmZjAwMAorCisvKiBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wg
cmVsYXRlZCAqLworI2RlZmluZQlJQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLCTB4MDEJLyogbG9j
ayBiaXQgKi8KKyNkZWZpbmUJSUEzMl9GRUFUVVJFX0NPTlRST0xfU01YX0VOCTB4MDIJLyogZW5h
YmxlIFZNWCBpbnNpZGUgU01YICovCisjZGVmaW5lCUlBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWF9F
TgkweDA0CS8qIGVuYWJsZSBWTVggb3V0c2lkZSBTTVggKi8KKworLyogTVNSIElBMzJfTUlTQ19F
TkFCTEUgKi8KKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0ZBU1RTVFIJMHgwMDAwMDAwMDAwMDAwMDAx
VUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9BVENDRQkweDAwMDAwMDAwMDAwMDAwMDhVTEwKKyNk
ZWZpbmUJSUEzMl9NSVNDX0VOX1BFUkZNT04JMHgwMDAwMDAwMDAwMDAwMDgwVUxMCisjZGVmaW5l
CUlBMzJfTUlTQ19FTl9QRUJTVQkweDAwMDAwMDAwMDAwMDEwMDBVTEwKKyNkZWZpbmUJSUEzMl9N
SVNDX0VOX0VTU1RFCTB4MDAwMDAwMDAwMDAxMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5f
TU9ORQkweDAwMDAwMDAwMDAwNDAwMDBVTEwKKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0xJTUNQVUlE
CTB4MDAwMDAwMDAwMDQwMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5feFRQUkQJMHgwMDAw
MDAwMDAwODAwMDAwVUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9YREQJMHgwMDAwMDAwNDAwMDAw
MDAwVUxMCisKKy8qCisgKiBQQVQgbW9kZXMuCisgKi8KKyNkZWZpbmUJUEFUX1VOQ0FDSEVBQkxF
CQkweDAwCisjZGVmaW5lCVBBVF9XUklURV9DT01CSU5JTkcJMHgwMQorI2RlZmluZQlQQVRfV1JJ
VEVfVEhST1VHSAkweDA0CisjZGVmaW5lCVBBVF9XUklURV9QUk9URUNURUQJMHgwNQorI2RlZmlu
ZQlQQVRfV1JJVEVfQkFDSwkJMHgwNgorI2RlZmluZQlQQVRfVU5DQUNIRUQJCTB4MDcKKyNkZWZp
bmUJUEFUX1ZBTFVFKGksIG0pCQkoKGxvbmcgbG9uZykobSkgPDwgKDggKiAoaSkpKQorI2RlZmlu
ZQlQQVRfTUFTSyhpKQkJUEFUX1ZBTFVFKGksIDB4ZmYpCisKKy8qCisgKiBDb25zdGFudHMgcmVs
YXRlZCB0byBNVFJScworICovCisjZGVmaW5lCU1UUlJfVU5DQUNIRUFCTEUJMHgwMAorI2RlZmlu
ZQlNVFJSX1dSSVRFX0NPTUJJTklORwkweDAxCisjZGVmaW5lCU1UUlJfV1JJVEVfVEhST1VHSAkw
eDA0CisjZGVmaW5lCU1UUlJfV1JJVEVfUFJPVEVDVEVECTB4MDUKKyNkZWZpbmUJTVRSUl9XUklU
RV9CQUNLCQkweDA2CisjZGVmaW5lCU1UUlJfTjY0SwkJOAkvKiBudW1iZXJzIG9mIGZpeGVkLXNp
emUgZW50cmllcyAqLworI2RlZmluZQlNVFJSX04xNksJCTE2CisjZGVmaW5lCU1UUlJfTjRLCQk2
NAorI2RlZmluZQlNVFJSX0NBUF9XQwkJMHgwMDAwMDAwMDAwMDAwNDAwCisjZGVmaW5lCU1UUlJf
Q0FQX0ZJWEVECQkweDAwMDAwMDAwMDAwMDAxMDAKKyNkZWZpbmUJTVRSUl9DQVBfVkNOVAkJMHgw
MDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfREVGX0VOQUJMRQkJMHgwMDAwMDAwMDAwMDAw
ODAwCisjZGVmaW5lCU1UUlJfREVGX0ZJWEVEX0VOQUJMRQkweDAwMDAwMDAwMDAwMDA0MDAKKyNk
ZWZpbmUJTVRSUl9ERUZfVFlQRQkJMHgwMDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfUEhZ
U0JBU0VfUEhZU0JBU0UJMHgwMDBmZmZmZmZmZmZmMDAwCisjZGVmaW5lCU1UUlJfUEhZU0JBU0Vf
VFlQRQkweDAwMDAwMDAwMDAwMDAwZmYKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19QSFlTTUFTSwkw
eDAwMGZmZmZmZmZmZmYwMDAKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19WQUxJRAkweDAwMDAwMDAw
MDAwMDA4MDAKKworLyoKKyAqIEN5cml4IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBhY2Nlc3Np
YmxlIGFzIElPIHBvcnRzLgorICovCisjZGVmaW5lCUNDUjAJCQkweGMwCS8qIENvbmZpZ3VyYXRp
b24gY29udHJvbCByZWdpc3RlciAwICovCisjZGVmaW5lCUNDUjBfTkMwCQkweDAxCS8qIEZpcnN0
IDY0SyBvZiBlYWNoIDFNIG1lbW9yeSByZWdpb24gaXMKKwkJCQkJCQkJICAgbm9uLWNhY2hlYWJs
ZSAqLworI2RlZmluZQlDQ1IwX05DMQkJMHgwMgkvKiA2NDBLLTFNIHJlZ2lvbiBpcyBub24tY2Fj
aGVhYmxlICovCisjZGVmaW5lCUNDUjBfQTIwTQkJMHgwNAkvKiBFbmFibGVzIEEyME0jIGlucHV0
IHBpbiAqLworI2RlZmluZQlDQ1IwX0tFTgkJMHgwOAkvKiBFbmFibGVzIEtFTiMgaW5wdXQgcGlu
ICovCisjZGVmaW5lCUNDUjBfRkxVU0gJCTB4MTAJLyogRW5hYmxlcyBGTFVTSCMgaW5wdXQgcGlu
ICovCisjZGVmaW5lCUNDUjBfQkFSQgkJMHgyMAkvKiBGbHVzaGVzIGludGVybmFsIGNhY2hlIHdo
ZW4gZW50ZXJpbmcgaG9sZAorCQkJCQkJCQkgICBzdGF0ZSAqLworI2RlZmluZQlDQ1IwX0NPCQkJ
MHg0MAkvKiBDYWNoZSBvcmc6IDE9ZGlyZWN0IG1hcHBlZCwgMD0yeCBzZXQKKwkJCQkJCQkJICAg
YXNzb2MgKi8KKyNkZWZpbmUJQ0NSMF9TVVNQRU5ECTB4ODAJLyogRW5hYmxlcyBTVVNQIyBhbmQg
U1VTUEEjIHBpbnMgKi8KKworI2RlZmluZQlDQ1IxCQkJMHhjMQkvKiBDb25maWd1cmF0aW9uIGNv
bnRyb2wgcmVnaXN0ZXIgMSAqLworI2RlZmluZQlDQ1IxX1JQTAkJMHgwMQkvKiBFbmFibGVzIFJQ
TFNFVCBhbmQgUlBMVkFMIyBwaW5zICovCisjZGVmaW5lCUNDUjFfU01JCQkweDAyCS8qIEVuYWJs
ZXMgU01NIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMV9TTUFDCQkweDA0CS8qIFN5c3RlbSBtYW5hZ2Vt
ZW50IG1lbW9yeSBhY2Nlc3MgKi8KKyNkZWZpbmUJQ0NSMV9NTUFDCQkweDA4CS8qIE1haW4gbWVt
b3J5IGFjY2VzcyAqLworI2RlZmluZQlDQ1IxX05PX0xPQ0sJMHgxMAkvKiBOZWdhdGUgTE9DSyMg
Ki8KKyNkZWZpbmUJQ0NSMV9TTTMJCTB4ODAJLyogU01NIGFkZHJlc3Mgc3BhY2UgYWRkcmVzcyBy
ZWdpb24gMyAqLworCisjZGVmaW5lCUNDUjIJCQkweGMyCisjZGVmaW5lCUNDUjJfV0IJCQkweDAy
CS8qIEVuYWJsZXMgV0IgY2FjaGUgaW50ZXJmYWNlIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMl9TQURT
CQkweDAyCS8qIFNsb3cgQURTICovCisjZGVmaW5lCUNDUjJfTE9DS19OVwkweDA0CS8qIExPQ0sg
TlcgQml0ICovCisjZGVmaW5lCUNDUjJfU1VTUF9ITFQJMHgwOAkvKiBTdXNwZW5kIG9uIEhBTFQg
Ki8KKyNkZWZpbmUJQ0NSMl9XVDEJCTB4MTAJLyogV1QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NS
Ml9XUFIxCQkweDEwCS8qIFdyaXRlLXByb3RlY3QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NSMl9C
QVJCCQkweDIwCS8qIEZsdXNoZXMgd3JpdGUtYmFjayBjYWNoZSB3aGVuIGVudGVyaW5nCisJCQkJ
CQkJCSAgIGhvbGQgc3RhdGUuICovCisjZGVmaW5lCUNDUjJfQldSVAkJMHg0MAkvKiBFbmFibGVz
IGJ1cnN0IHdyaXRlIGN5Y2xlcyAqLworI2RlZmluZQlDQ1IyX1VTRV9TVVNQCTB4ODAJLyogRW5h
YmxlcyBzdXNwZW5kIHBpbnMgKi8KKworI2RlZmluZQlDQ1IzCQkJMHhjMworI2RlZmluZQlDQ1Iz
X1NNSUxPQ0sJMHgwMQkvKiBTTU0gcmVnaXN0ZXIgbG9jayAqLworI2RlZmluZQlDQ1IzX05NSQkJ
MHgwMgkvKiBFbmFibGVzIE5NSSBkdXJpbmcgU01NICovCisjZGVmaW5lCUNDUjNfTElOQlJTVAkw
eDA0CS8qIExpbmVhciBhZGRyZXNzIGJ1cnN0IGN5Y2xlcyAqLworI2RlZmluZQlDQ1IzX1NNTU1P
REUJMHgwOAkvKiBTTU0gTW9kZSAqLworI2RlZmluZQlDQ1IzX01BUEVOMAkJMHgxMAkvKiBFbmFi
bGVzIE1hcDAgKi8KKyNkZWZpbmUJQ0NSM19NQVBFTjEJCTB4MjAJLyogRW5hYmxlcyBNYXAxICov
CisjZGVmaW5lCUNDUjNfTUFQRU4yCQkweDQwCS8qIEVuYWJsZXMgTWFwMiAqLworI2RlZmluZQlD
Q1IzX01BUEVOMwkJMHg4MAkvKiBFbmFibGVzIE1hcDMgKi8KKworI2RlZmluZQlDQ1I0CQkJMHhl
OAorI2RlZmluZQlDQ1I0X0lPTUFTSwkJMHgwNworI2RlZmluZQlDQ1I0X01FTQkJMHgwOAkvKiBF
bmFibGVzIG1vbW9yeSBieXBhc3NpbmcgKi8KKyNkZWZpbmUJQ0NSNF9EVEUJCTB4MTAJLyogRW5h
YmxlcyBkaXJlY3RvcnkgdGFibGUgZW50cnkgY2FjaGUgKi8KKyNkZWZpbmUJQ0NSNF9GQVNURlBF
CTB4MjAJLyogRmFzdCBGUFUgZXhjZXB0aW9uICovCisjZGVmaW5lCUNDUjRfQ1BVSUQJCTB4ODAJ
LyogRW5hYmxlcyBDUFVJRCBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lCUNDUjUJCQkweGU5Cisj
ZGVmaW5lCUNDUjVfV1RfQUxMT0MJMHgwMQkvKiBXcml0ZS10aHJvdWdoIGFsbG9jYXRlICovCisj
ZGVmaW5lCUNDUjVfU0xPUAkJMHgwMgkvKiBMT09QIGluc3RydWN0aW9uIHNsb3dlZCBkb3duICov
CisjZGVmaW5lCUNDUjVfTEJSMQkJMHgxMAkvKiBMb2NhbCBidXMgcmVnaW9uIDEgKi8KKyNkZWZp
bmUJQ0NSNV9BUlJFTgkJMHgyMAkvKiBFbmFibGVzIEFSUiByZWdpb24gKi8KKworI2RlZmluZQlD
Q1I2CQkJMHhlYQorCisjZGVmaW5lCUNDUjcJCQkweGViCisKKy8qIFBlcmZvcm1hbmNlIENvbnRy
b2wgUmVnaXN0ZXIgKDV4ODYgb25seSkuICovCisjZGVmaW5lCVBDUjAJCQkweDIwCisjZGVmaW5l
CVBDUjBfUlNUSwkJMHgwMQkvKiBFbmFibGVzIHJldHVybiBzdGFjayAqLworI2RlZmluZQlQQ1Iw
X0JUQgkJMHgwMgkvKiBFbmFibGVzIGJyYW5jaCB0YXJnZXQgYnVmZmVyICovCisjZGVmaW5lCVBD
UjBfTE9PUAkJMHgwNAkvKiBFbmFibGVzIGxvb3AgKi8KKyNkZWZpbmUJUENSMF9BSVMJCTB4MDgJ
LyogRW5hYmxlcyBhbGwgaW5zdHJjdXRpb25zIHN0YWxsZWQgdG8KKwkJCQkJCQkJICAgc2VyaWFs
aXplIHBpcGUuICovCisjZGVmaW5lCVBDUjBfTUxSCQkweDEwCS8qIEVuYWJsZXMgcmVvcmRlcmlu
ZyBvZiBtaXNhbGlnbmVkIGxvYWRzICovCisjZGVmaW5lCVBDUjBfQlRCUlQJCTB4NDAJLyogRW5h
YmxlcyBCVEIgdGVzdCByZWdpc3Rlci4gKi8KKyNkZWZpbmUJUENSMF9MU1NFUgkJMHg4MAkvKiBE
aXNhYmxlIHJlb3JkZXIgKi8KKworLyogRGV2aWNlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVycyAq
LworI2RlZmluZQlESVIwCQkJMHhmZQorI2RlZmluZQlESVIxCQkJMHhmZgorCisvKgorICogTWFj
aGluZSBDaGVjayByZWdpc3RlciBjb25zdGFudHMuCisgKi8KKyNkZWZpbmUJTUNHX0NBUF9DT1VO
VAkJMHgwMDAwMDBmZgorI2RlZmluZQlNQ0dfQ0FQX0NUTF9QCQkweDAwMDAwMTAwCisjZGVmaW5l
CU1DR19DQVBfRVhUX1AJCTB4MDAwMDAyMDAKKyNkZWZpbmUJTUNHX0NBUF9DTUNJX1AJCTB4MDAw
MDA0MDAKKyNkZWZpbmUJTUNHX0NBUF9URVNfUAkJMHgwMDAwMDgwMAorI2RlZmluZQlNQ0dfQ0FQ
X0VYVF9DTlQJCTB4MDBmZjAwMDAKKyNkZWZpbmUJTUNHX0NBUF9TRVJfUAkJMHgwMTAwMDAwMAor
I2RlZmluZQlNQ0dfU1RBVFVTX1JJUFYJCTB4MDAwMDAwMDEKKyNkZWZpbmUJTUNHX1NUQVRVU19F
SVBWCQkweDAwMDAwMDAyCisjZGVmaW5lCU1DR19TVEFUVVNfTUNJUAkJMHgwMDAwMDAwNAorI2Rl
ZmluZQlNQ0dfQ1RMX0VOQUJMRQkJMHhmZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCU1DR19DVExf
RElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lCU1TUl9NQ19DVEwoeCkJCShNU1Jf
TUMwX0NUTCArICh4KSAqIDQpCisjZGVmaW5lCU1TUl9NQ19TVEFUVVMoeCkJKE1TUl9NQzBfU1RB
VFVTICsgKHgpICogNCkKKyNkZWZpbmUJTVNSX01DX0FERFIoeCkJCShNU1JfTUMwX0FERFIgKyAo
eCkgKiA0KQorI2RlZmluZQlNU1JfTUNfTUlTQyh4KQkJKE1TUl9NQzBfTUlTQyArICh4KSAqIDQp
CisjZGVmaW5lCU1TUl9NQ19DVEwyKHgpCQkoTVNSX01DMF9DVEwyICsgKHgpKQkvKiBJZiBNQ0df
Q0FQX0NNQ0lfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfTUNBX0VSUk9SCTB4MDAwMDAwMDAwMDAw
ZmZmZgorI2RlZmluZQlNQ19TVEFUVVNfTU9ERUxfRVJST1IJMHgwMDAwMDAwMGZmZmYwMDAwCisj
ZGVmaW5lCU1DX1NUQVRVU19PVEhFUl9JTkZPCTB4MDFmZmZmZmYwMDAwMDAwMAorI2RlZmluZQlN
Q19TVEFUVVNfQ09SX0NPVU5UCTB4MDAxZmZmYzAwMDAwMDAwMAkvKiBJZiBNQ0dfQ0FQX0NNQ0lf
UCAqLworI2RlZmluZQlNQ19TVEFUVVNfVEVTX1NUQVRVUwkweDAwNjAwMDAwMDAwMDAwMDAJLyog
SWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfQVIJCTB4MDA4MDAwMDAwMDAw
MDAwMAkvKiBJZiBNQ0dfQ0FQX1RFU19QICovCisjZGVmaW5lCU1DX1NUQVRVU19TCQkweDAxMDAw
MDAwMDAwMDAwMDAJLyogSWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfUEND
CQkweDAyMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX0FERFJWCQkweDA0MDAwMDAw
MDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX01JU0NWCQkweDA4MDAwMDAwMDAwMDAwMDAKKyNk
ZWZpbmUJTUNfU1RBVFVTX0VOCQkweDEwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVT
X1VDCQkweDIwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX09WRVIJCTB4NDAwMDAw
MDAwMDAwMDAwMAorI2RlZmluZQlNQ19TVEFUVVNfVkFMCQkweDgwMDAwMDAwMDAwMDAwMDAKKyNk
ZWZpbmUJTUNfTUlTQ19SQV9MU0IJCTB4MDAwMDAwMDAwMDAwMDAzZgkvKiBJZiBNQ0dfQ0FQX1NF
Ul9QICovCisjZGVmaW5lCU1DX01JU0NfQUREUkVTU19NT0RFCTB4MDAwMDAwMDAwMDAwMDFjMAkv
KiBJZiBNQ0dfQ0FQX1NFUl9QICovCisjZGVmaW5lCU1DX0NUTDJfVEhSRVNIT0xECTB4MDAwMDAw
MDAwMDAwN2ZmZgorI2RlZmluZQlNQ19DVEwyX0NNQ0lfRU4JCTB4MDAwMDAwMDA0MDAwMDAwMAor
CisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIDMtYnl0ZSByZWdpc3RlcnMgY29udHJvbCB0aGUg
bm9uLWNhY2hlYWJsZSByZWdpb25zLgorICogVGhlc2UgcmVnaXN0ZXJzIG11c3QgYmUgd3JpdHRl
biBhcyB0aHJlZSBzZXBhcmF0ZSBieXRlcy4KKyAqCisgKiBOQ1J4KzA6IEEzMS1BMjQgb2Ygc3Rh
cnRpbmcgYWRkcmVzcworICogTkNSeCsxOiBBMjMtQTE2IG9mIHN0YXJ0aW5nIGFkZHJlc3MKKyAq
IE5DUngrMjogQTE1LUExMiBvZiBzdGFydGluZyBhZGRyZXNzIHwgTkNSX1NJWkVfeHguCisgKgor
ICogVGhlIG5vbi1jYWNoZWFibGUgcmVnaW9uJ3Mgc3RhcnRpbmcgYWRkcmVzcyBtdXN0IGJlIGFs
aWduZWQgdG8gdGhlCisgKiBzaXplIGluZGljYXRlZCBieSB0aGUgTkNSX1NJWkVfeHggZmllbGQu
CisgKi8KKyNkZWZpbmUJTkNSMQkweGM0CisjZGVmaW5lCU5DUjIJMHhjNworI2RlZmluZQlOQ1Iz
CTB4Y2EKKyNkZWZpbmUJTkNSNAkweGNkCisKKyNkZWZpbmUJTkNSX1NJWkVfMEsJMAorI2RlZmlu
ZQlOQ1JfU0laRV80SwkxCisjZGVmaW5lCU5DUl9TSVpFXzhLCTIKKyNkZWZpbmUJTkNSX1NJWkVf
MTZLCTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJLCTQKKyNkZWZpbmUJTkNSX1NJWkVfNjRLCTUKKyNk
ZWZpbmUJTkNSX1NJWkVfMTI4Swk2CisjZGVmaW5lCU5DUl9TSVpFXzI1NksJNworI2RlZmluZQlO
Q1JfU0laRV81MTJLCTgKKyNkZWZpbmUJTkNSX1NJWkVfMU0JOQorI2RlZmluZQlOQ1JfU0laRV8y
TQkxMAorI2RlZmluZQlOQ1JfU0laRV80TQkxMQorI2RlZmluZQlOQ1JfU0laRV84TQkxMgorI2Rl
ZmluZQlOQ1JfU0laRV8xNk0JMTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJNCTE0CisjZGVmaW5lCU5D
Ul9TSVpFXzRHCTE1CisKKy8qCisgKiBUaGUgYWRkcmVzcyByZWdpb24gcmVnaXN0ZXJzIGFyZSB1
c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIGFuZAorICogc2l6ZSBmb3IgdGhlIGVpZ2h0IGFk
ZHJlc3MgcmVnaW9ucy4KKyAqCisgKiBBUlJ4ICsgMDogQTMxLUEyNCBvZiBzdGFydCBhZGRyZXNz
CisgKiBBUlJ4ICsgMTogQTIzLUExNiBvZiBzdGFydCBhZGRyZXNzCisgKiBBUlJ4ICsgMjogQTE1
LUExMiBvZiBzdGFydCBhZGRyZXNzIHwgQVJSX1NJWkVfeHgKKyAqLworI2RlZmluZQlBUlIwCTB4
YzQKKyNkZWZpbmUJQVJSMQkweGM3CisjZGVmaW5lCUFSUjIJMHhjYQorI2RlZmluZQlBUlIzCTB4
Y2QKKyNkZWZpbmUJQVJSNAkweGQwCisjZGVmaW5lCUFSUjUJMHhkMworI2RlZmluZQlBUlI2CTB4
ZDYKKyNkZWZpbmUJQVJSNwkweGQ5CisKKyNkZWZpbmUJQVJSX1NJWkVfMEsJCTAKKyNkZWZpbmUJ
QVJSX1NJWkVfNEsJCTEKKyNkZWZpbmUJQVJSX1NJWkVfOEsJCTIKKyNkZWZpbmUJQVJSX1NJWkVf
MTZLCTMKKyNkZWZpbmUJQVJSX1NJWkVfMzJLCTQKKyNkZWZpbmUJQVJSX1NJWkVfNjRLCTUKKyNk
ZWZpbmUJQVJSX1NJWkVfMTI4Swk2CisjZGVmaW5lCUFSUl9TSVpFXzI1NksJNworI2RlZmluZQlB
UlJfU0laRV81MTJLCTgKKyNkZWZpbmUJQVJSX1NJWkVfMU0JCTkKKyNkZWZpbmUJQVJSX1NJWkVf
Mk0JCTEwCisjZGVmaW5lCUFSUl9TSVpFXzRNCQkxMQorI2RlZmluZQlBUlJfU0laRV84TQkJMTIK
KyNkZWZpbmUJQVJSX1NJWkVfMTZNCTEzCisjZGVmaW5lCUFSUl9TSVpFXzMyTQkxNAorI2RlZmlu
ZQlBUlJfU0laRV80RwkJMTUKKworLyoKKyAqIFRoZSByZWdpb24gY29udHJvbCByZWdpc3RlcnMg
c3BlY2lmeSB0aGUgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBBUlJ4IGFkZHJl
cyByZWdpb25zLgorICovCisjZGVmaW5lCVJDUjAJMHhkYworI2RlZmluZQlSQ1IxCTB4ZGQKKyNk
ZWZpbmUJUkNSMgkweGRlCisjZGVmaW5lCVJDUjMJMHhkZgorI2RlZmluZQlSQ1I0CTB4ZTAKKyNk
ZWZpbmUJUkNSNQkweGUxCisjZGVmaW5lCVJDUjYJMHhlMgorI2RlZmluZQlSQ1I3CTB4ZTMKKwor
I2RlZmluZQlSQ1JfUkNECTB4MDEJLyogRGlzYWJsZXMgY2FjaGluZyBmb3IgQVJSeCAoeCA9IDAt
NikuICovCisjZGVmaW5lCVJDUl9SQ0UJMHgwMQkvKiBFbmFibGVzIGNhY2hpbmcgZm9yIEFSUjcu
ICovCisjZGVmaW5lCVJDUl9XV08JMHgwMgkvKiBXZWFrIHdyaXRlIG9yZGVyaW5nLiAqLworI2Rl
ZmluZQlSQ1JfV0wJMHgwNAkvKiBXZWFrIGxvY2tpbmcuICovCisjZGVmaW5lCVJDUl9XRwkweDA4
CS8qIFdyaXRlIGdhdGhlcmluZy4gKi8KKyNkZWZpbmUJUkNSX1dUCTB4MTAJLyogV3JpdGUtdGhy
b3VnaC4gKi8KKyNkZWZpbmUJUkNSX05MQgkweDIwCS8qIExCQSMgcGluIGlzIG5vdCBhc3NlcnRl
ZC4gKi8KKworLyogQU1EIFdyaXRlIEFsbG9jYXRlIFRvcC1PZi1NZW1vcnkgYW5kIENvbnRyb2wg
UmVnaXN0ZXIgKi8KKyNkZWZpbmUJQU1EX1dUX0FMTE9DX1RNRQkweDQwMDAwCS8qIHRvcC1vZi1t
ZW1vcnkgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19QUkUJMHgyMDAwMAkvKiBwcm9n
cmFtbWFibGUgcmFuZ2UgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19GUkUJMHgxMDAw
MAkvKiBmaXhlZCAoQTAwMDAtRkZGRkYpIHJhbmdlIGVuYWJsZSAqLworCisvKiBBTUQ2NCBNU1In
cyAqLworI2RlZmluZQlNU1JfRUZFUgkweGMwMDAwMDgwCS8qIGV4dGVuZGVkIGZlYXR1cmVzICov
CisjZGVmaW5lCU1TUl9TVEFSCTB4YzAwMDAwODEJLyogbGVnYWN5IG1vZGUgU1lTQ0FMTCB0YXJn
ZXQvY3Mvc3MgKi8KKyNkZWZpbmUJTVNSX0xTVEFSCTB4YzAwMDAwODIJLyogbG9uZyBtb2RlIFNZ
U0NBTEwgdGFyZ2V0IHJpcCAqLworI2RlZmluZQlNU1JfQ1NUQVIJMHhjMDAwMDA4MwkvKiBjb21w
YXQgbW9kZSBTWVNDQUxMIHRhcmdldCByaXAgKi8KKyNkZWZpbmUJTVNSX1NGX01BU0sJMHhjMDAw
MDA4NAkvKiBzeXNjYWxsIGZsYWdzIG1hc2sgKi8KKyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAw
MTAwCS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgJWZzICJzZWdtZW50IiAqLworI2RlZmluZQlNU1Jf
R1NCQVNFCTB4YzAwMDAxMDEJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSAlZ3MgInNlZ21lbnQiICov
CisjZGVmaW5lCU1TUl9LR1NCQVNFCTB4YzAwMDAxMDIJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSBr
ZXJuZWwgJWdzICovCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwwCTB4YzAwMTAwMDAKKyNkZWZpbmUJ
TVNSX1BFUkZFVlNFTDEJMHhjMDAxMDAwMQorI2RlZmluZQlNU1JfUEVSRkVWU0VMMgkweGMwMDEw
MDAyCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwzCTB4YzAwMTAwMDMKKyNkZWZpbmUJTVNSX0s3X1BF
UkZDVFIwCTB4YzAwMTAwMDQKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIxCTB4YzAwMTAwMDUKKyNk
ZWZpbmUJTVNSX0s3X1BFUkZDVFIyCTB4YzAwMTAwMDYKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIz
CTB4YzAwMTAwMDcKKyNkZWZpbmUJTVNSX1NZU0NGRwkweGMwMDEwMDEwCisjZGVmaW5lCU1TUl9I
V0NSCTB4YzAwMTAwMTUKKyNkZWZpbmUJTVNSX0lPUlJCQVNFMAkweGMwMDEwMDE2CisjZGVmaW5l
CU1TUl9JT1JSTUFTSzAJMHhjMDAxMDAxNworI2RlZmluZQlNU1JfSU9SUkJBU0UxCTB4YzAwMTAw
MTgKKyNkZWZpbmUJTVNSX0lPUlJNQVNLMQkweGMwMDEwMDE5CisjZGVmaW5lCU1TUl9UT1BfTUVN
CTB4YzAwMTAwMWEJLyogYm91bmRhcnkgZm9yIHJhbSBiZWxvdyA0RyAqLworI2RlZmluZQlNU1Jf
VE9QX01FTTIJMHhjMDAxMDAxZAkvKiBib3VuZGFyeSBmb3IgcmFtIGFib3ZlIDRHICovCisjZGVm
aW5lCU1TUl9OQl9DRkcxCTB4YzAwMTAwMWYJLyogTkIgY29uZmlndXJhdGlvbiAxICovCisjZGVm
aW5lCU1TUl9QX1NUQVRFX0xJTUlUIDB4YzAwMTAwNjEJLyogUC1zdGF0ZSBDdXJyZW50IExpbWl0
IFJlZ2lzdGVyICovCisjZGVmaW5lCU1TUl9QX1NUQVRFX0NPTlRST0wgMHhjMDAxMDA2MgkvKiBQ
LXN0YXRlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RBVEVfU1RBVFVTIDB4
YzAwMTAwNjMJLyogUC1zdGF0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RB
VEVfQ09ORklHKG4pICgweGMwMDEwMDY0ICsgKG4pKSAvKiBQLXN0YXRlIENvbmZpZyAqLworI2Rl
ZmluZQlNU1JfU01NX0FERFIJMHhjMDAxMDExMgkvKiBTTU0gVFNFRyBiYXNlIGFkZHJlc3MgKi8K
KyNkZWZpbmUJTVNSX1NNTV9NQVNLCTB4YzAwMTAxMTMJLyogU01NIFRTRUcgYWRkcmVzcyBtYXNr
ICovCisjZGVmaW5lCU1TUl9FWFRGRUFUVVJFUwkweGMwMDExMDA1CS8qIEV4dGVuZGVkIENQVUlE
IEZlYXR1cmVzIG92ZXJyaWRlICovCisjZGVmaW5lCU1TUl9JQ19DRkcJMHhjMDAxMTAyMQkvKiBJ
bnN0cnVjdGlvbiBDYWNoZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCU1TUl9LOF9VQ09ERV9V
UERBVEUJMHhjMDAxMDAyMAkvKiB1cGRhdGUgbWljcm9jb2RlICovCisjZGVmaW5lCU1TUl9NQzBf
Q1RMX01BU0sJMHhjMDAxMDA0NAorI2RlZmluZQlNU1JfVk1fQ1IJCTB4YzAwMTAxMTQgLyogU1ZN
OiBmZWF0dXJlIGNvbnRyb2wgKi8KKyNkZWZpbmUJTVNSX1ZNX0hTQVZFX1BBCQkweGMwMDEwMTE3
IC8qIFNWTTogaG9zdCBzYXZlIGFyZWEgYWRkcmVzcyAqLworCisvKiBNU1JfVk1fQ1IgcmVsYXRl
ZCAqLworI2RlZmluZQlWTV9DUl9TVk1ESVMJCTB4MTAJLyogU1ZNOiBkaXNhYmxlZCBieSBCSU9T
ICovCisKKy8qIFZJQSBBQ0UgY3J5cHRvIGZlYXR1cmVzZXQ6IGZvciB2aWFfZmVhdHVyZV9ybmcg
Ki8KKyNkZWZpbmUJVklBX0hBU19STkcJCTEJLyogY3B1IGhhcyBSTkcgKi8KKworLyogVklBIEFD
RSBjcnlwdG8gZmVhdHVyZXNldDogZm9yIHZpYV9mZWF0dXJlX3hjcnlwdCAqLworI2RlZmluZQlW
SUFfSEFTX0FFUwkJMQkvKiBjcHUgaGFzIEFFUyAqLworI2RlZmluZQlWSUFfSEFTX1NIQQkJMgkv
KiBjcHUgaGFzIFNIQTEgJiBTSEEyNTYgKi8KKyNkZWZpbmUJVklBX0hBU19NTQkJNAkvKiBjcHUg
aGFzIFJTQSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJVklBX0hBU19BRVNDVFIJCTgJLyogY3B1
IGhhcyBBRVMtQ1RSIGluc3RydWN0aW9ucyAqLworCisvKiBDZW50YXVyIEV4dGVuZGVkIEZlYXR1
cmUgZmxhZ3MgKi8KKyNkZWZpbmUJVklBX0NQVUlEX0hBU19STkcJMHgwMDAwMDQKKyNkZWZpbmUJ
VklBX0NQVUlEX0RPX1JORwkweDAwMDAwOAorI2RlZmluZQlWSUFfQ1BVSURfSEFTX0FDRQkweDAw
MDA0MAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFCTB4MDAwMDgwCisjZGVmaW5lCVZJQV9DUFVJ
RF9IQVNfQUNFMgkweDAwMDEwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFMgkweDAwMDIwMAor
I2RlZmluZQlWSUFfQ1BVSURfSEFTX1BIRQkweDAwMDQwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9f
UEhFCTB4MDAwODAwCisjZGVmaW5lCVZJQV9DUFVJRF9IQVNfUE1NCTB4MDAxMDAwCisjZGVmaW5l
CVZJQV9DUFVJRF9ET19QTU0JMHgwMDIwMDAKKworLyogVklBIEFDRSB4Y3J5cHQtKiBpbnN0cnVj
dGlvbiBjb250ZXh0IGNvbnRyb2wgb3B0aW9ucyAqLworI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19S
T1VORF9NCQkweDAwMDAwMDBmCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19NCQkweDAwMDAw
MDcwCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19BRVMJCTB4MDAwMDAwMDAKKyNkZWZpbmUJ
VklBX0NSWVBUX0NXTE9fS0VZR0VOX00JCTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NX
TE9fS0VZR0VOX0hXCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZR0VOX1NX
CTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fTk9STUFMCQkweDAwMDAwMDAwCisj
ZGVmaW5lCVZJQV9DUllQVF9DV0xPX0lOVEVSTUVESUFURQkweDAwMDAwMTAwCisjZGVmaW5lCVZJ
QV9DUllQVF9DV0xPX0VOQ1JZUFQJCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9f
REVDUllQVAkJMHgwMDAwMDIwMAorI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19LRVkxMjgJCTB4MDAw
MDAwMGEJLyogMTI4Yml0LCAxMCByZHMgKi8KKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZMTky
CQkweDAwMDAwNDBjCS8qIDE5MmJpdCwgMTIgcmRzICovCisjZGVmaW5lCVZJQV9DUllQVF9DV0xP
X0tFWTI1NgkJMHgwMDAwMDgwZQkvKiAyNTZiaXQsIDE1IHJkcyAqLworCisjZW5kaWYgLyogIV9N
QUNISU5FX1NQRUNJQUxSRUdfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0YWNr
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zdGFjay5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr
MSw2MSBAQAorLyotCisgKiBNYWNoIE9wZXJhdGluZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykg
MTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFu
dGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorICogc29mdHdh
cmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlv
bnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGlu
ZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMKKyAqIENPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBE
SVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORCBGT1IKKyAqIEFOWSBEQU1BR0VTIFdI
QVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAq
IENhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVy
biB0bworICoKKyAqICBTb2Z0d2FyZSBEaXN0cmlidXRpb24gQ29vcmRpbmF0b3IgIG9yICBTb2Z0
d2FyZS5EaXN0cmlidXRpb25AQ1MuQ01VLkVEVQorICogIFNjaG9vbCBvZiBDb21wdXRlciBTY2ll
bmNlCisgKiAgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAqICBQaXR0c2J1cmdoIFBBIDE1
MjEzLTM4OTAKKyAqCisgKiBhbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5
IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorICogcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0
aGVzZSBjaGFuZ2VzLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvc3RhY2suaCAyODc2NDUgMjAxNS0wOS0xMSAwMzo1NDozN1ogbWFya2ogJAorICovCisKKyNp
Zm5kZWYgX1g4Nl9TVEFDS19ICisjZGVmaW5lCV9YODZfU1RBQ0tfSAorCisvKgorICogU3RhY2sg
dHJhY2UuCisgKi8KKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9mcmFtZSB7CisJc3Ry
dWN0IGkzODZfZnJhbWUJKmZfZnJhbWU7CisJdV9pbnQJCQlmX3JldGFkZHI7CisJdV9pbnQJCQlm
X2FyZzA7Cit9OworI2VuZGlmCisKKyNpZmRlZiBfX2FtZDY0X18KK3N0cnVjdCBhbWQ2NF9mcmFt
ZSB7CisJc3RydWN0IGFtZDY0X2ZyYW1lCSpmX2ZyYW1lOworCXVfbG9uZwkJCWZfcmV0YWRkcjsK
K307CisKK3N0cnVjdCBpMzg2X2ZyYW1lIHsKKwl1aW50MzJfdAkJZl9mcmFtZTsKKwl1aW50MzJf
dAkJZl9yZXRhZGRyOworCXVpbnQzMl90CQlmX2FyZzA7Cit9OworI2VuZGlmIC8qIF9fYW1kNjRf
XyAqLworCisjaWZkZWYgX0tFUk5FTAoraW50CXN0YWNrX25taV9oYW5kbGVyKHN0cnVjdCB0cmFw
ZnJhbWUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qICFfWDg2X1NUQUNLX0ggKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3RkYXJnLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9zdGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L3N0ZGFyZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0ZGFyZy5oCTIwMTYtMDktMjkgMDA6MjQ6
NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDAyIERhdmlkIEUuIE8nQnJpZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9zdGRhcmcuaCAyNTYxMDUgMjAxMy0xMC0wNyAxMDowMToyM1ogcGhrICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX1NUREFSR19IXworI2RlZmluZQlfTUFDSElORV9TVERBUkdfSF8K
KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworI2lm
bmRlZiBfVkFfTElTVF9ERUNMQVJFRAorI2RlZmluZQlfVkFfTElTVF9ERUNMQVJFRAordHlwZWRl
ZglfX3ZhX2xpc3QJdmFfbGlzdDsKKyNlbmRpZgorCisjaWZkZWYgX19HTlVDTElLRV9CVUlMVElO
X1NUREFSRworCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJX19idWlsdGluX3ZhX3N0
YXJ0KChhcCksIChsYXN0KSkKKworI2RlZmluZQl2YV9hcmcoYXAsIHR5cGUpIFwKKwlfX2J1aWx0
aW5fdmFfYXJnKChhcCksIHR5cGUpCisKKyNkZWZpbmUJX192YV9jb3B5KGRlc3QsIHNyYykgXAor
CV9fYnVpbHRpbl92YV9jb3B5KChkZXN0KSwgKHNyYykpCisKKyNpZiBfX0lTT19DX1ZJU0lCTEUg
Pj0gMTk5OQorI2RlZmluZQl2YV9jb3B5KGRlc3QsIHNyYykgXAorCV9fdmFfY29weShkZXN0LCBz
cmMpCisjZW5kaWYKKworI2RlZmluZQl2YV9lbmQoYXApIFwKKwlfX2J1aWx0aW5fdmFfZW5kKGFw
KQorCisjZWxpZiBkZWZpbmVkKGxpbnQpCisvKiBQcm92aWRlIGEgZmFrZSBpbXBsZW1lbnRhdGlv
biBmb3IgbGludCdzIGJlbmVmaXQgKi8KKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz
aXplb2YodHlwZSkgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVvZihsb25nKSkgKiBzaXplb2Yo
bG9uZykpCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJKChhcCkgPSAodmFfbGlzdCkm
KGxhc3QpICsgX192YV9zaXplKGxhc3QpKQorI2RlZmluZSB2YV9jb3B5KGRzdCwgc3JjKSBcCisJ
KChkc3QpID0gKHNyYykpCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKiko
KGFwKSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorI2RlZmlu
ZQl2YV9lbmQoYXApCisKKyNlbHNlCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHRvIGJlIHBvcnRl
ZCB0byB5b3VyIGNvbXBpbGVyCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9TVERBUkdf
SF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJj
aC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCi0tLSB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw
MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N5c2FyY2gu
aAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzOCBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvc3lzYXJjaC5oIDIzMzIwOSAyMDEyLTAzLTE5IDIxOjU3OjMxWiB0aWpsICQKKyAqLworCisv
KgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN5c2NhbGxzIChYODYpCisgKi8KKyNpZm5kZWYg
X01BQ0hJTkVfU1lTQVJDSF9IXworI2RlZmluZSBfTUFDSElORV9TWVNBUkNIX0hfCisKKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBJMzg2X0dFVF9MRFQJMAorI2RlZmluZSBJMzg2
X1NFVF9MRFQJMQorI2RlZmluZQlMRFRfQVVUT19BTExPQwkweGZmZmZmZmZmCisJCQkJLyogSTM4
Nl9JT1BMICovCisjZGVmaW5lIEkzODZfR0VUX0lPUEVSTQkzCisjZGVmaW5lIEkzODZfU0VUX0lP
UEVSTQk0CisJCQkJLyogeHh4eHggKi8KKyNkZWZpbmUJSTM4Nl9WTTg2CQk2CS8qIFhYWCBOb3Qg
aW1wbGVtZW50YWJsZSBvbiBhbWQ2NCAqLworI2RlZmluZQlJMzg2X0dFVF9GU0JBU0UJCTcKKyNk
ZWZpbmUJSTM4Nl9TRVRfRlNCQVNFCQk4CisjZGVmaW5lCUkzODZfR0VUX0dTQkFTRQkJOQorI2Rl
ZmluZQlJMzg2X1NFVF9HU0JBU0UJCTEwCisjZGVmaW5lCUkzODZfR0VUX1hGUFVTVEFURQkxMQor
CisvKiBMZWF2ZSBzcGFjZSBmb3IgMC0xMjcgZm9yIHRvIGF2b2lkIHRyYW5zbGF0aW5nIHN5c2Nh
bGxzICovCisjZGVmaW5lCUFNRDY0X0dFVF9GU0JBU0UJMTI4CisjZGVmaW5lCUFNRDY0X1NFVF9G
U0JBU0UJMTI5CisjZGVmaW5lCUFNRDY0X0dFVF9HU0JBU0UJMTMwCisjZGVmaW5lCUFNRDY0X1NF
VF9HU0JBU0UJMTMxCisjZGVmaW5lCUFNRDY0X0dFVF9YRlBVU1RBVEUJMTMyCisKK3N0cnVjdCBp
Mzg2X2lvcGVybV9hcmdzIHsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IGxl
bmd0aDsKKwlpbnQJZW5hYmxlOworfTsKKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9s
ZHRfYXJncyB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuaW9uIGRlc2NyaXB0b3IgKmRlc2Nz
OworCXVuc2lnbmVkIGludCBudW07Cit9OworCitzdHJ1Y3QgaTM4Nl92bTg2X2FyZ3MgeworCWlu
dAlzdWJfb3A7CQkJLyogc3ViLW9wZXJhdGlvbiB0byBwZXJmb3JtICovCisJY2hhcgkqc3ViX2Fy
Z3M7CQkvKiBhcmdzICovCit9OworCitzdHJ1Y3QgaTM4Nl9nZXRfeGZwdXN0YXRlIHsKKwl2b2lk
ICphZGRyOworCWludCBsZW47Cit9OworI2Vsc2UKK3N0cnVjdCBpMzg2X2xkdF9hcmdzIHsKKwl1
bnNpZ25lZCBpbnQgc3RhcnQ7CisJc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNj
cyBfX3BhY2tlZDsKKwl1bnNpZ25lZCBpbnQgbnVtOworfTsKKworc3RydWN0IGkzODZfZ2V0X3hm
cHVzdGF0ZSB7CisJdW5zaWduZWQgaW50IGFkZHI7CisJaW50IGxlbjsKK307CisKK3N0cnVjdCBh
bWQ2NF9nZXRfeGZwdXN0YXRlIHsKKwl2b2lkICphZGRyOworCWludCBsZW47Cit9OworI2VuZGlm
CisKKyNpZm5kZWYgX0tFUk5FTAordW5pb24gZGVzY3JpcHRvcjsKK3N0cnVjdCBkYnJlZzsKKwor
X19CRUdJTl9ERUNMUworaW50IGkzODZfZ2V0X2xkdChpbnQsIHVuaW9uIGRlc2NyaXB0b3IgKiwg
aW50KTsKK2ludCBpMzg2X3NldF9sZHQoaW50LCB1bmlvbiBkZXNjcmlwdG9yICosIGludCk7Citp
bnQgaTM4Nl9nZXRfaW9wZXJtKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICosIGludCAqKTsK
K2ludCBpMzg2X3NldF9pb3Blcm0odW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGludCk7Citp
bnQgaTM4Nl92bTg2KGludCwgdm9pZCAqKTsKK2ludCBpMzg2X2dldF9mc2Jhc2Uodm9pZCAqKik7
CitpbnQgaTM4Nl9nZXRfZ3NiYXNlKHZvaWQgKiopOworaW50IGkzODZfc2V0X2ZzYmFzZSh2b2lk
ICopOworaW50IGkzODZfc2V0X2dzYmFzZSh2b2lkICopOworaW50IGkzODZfc2V0X3dhdGNoKGlu
dCwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgc3RydWN0IGRicmVnICopOworaW50IGkzODZfY2xy
X3dhdGNoKGludCwgc3RydWN0IGRicmVnICopOworaW50IGFtZDY0X2dldF9mc2Jhc2Uodm9pZCAq
Kik7CitpbnQgYW1kNjRfZ2V0X2dzYmFzZSh2b2lkICoqKTsKK2ludCBhbWQ2NF9zZXRfZnNiYXNl
KHZvaWQgKik7CitpbnQgYW1kNjRfc2V0X2dzYmFzZSh2b2lkICopOworaW50IHN5c2FyY2goaW50
LCB2b2lkICopOworX19FTkRfREVDTFMKKyNlbHNlCitzdHJ1Y3QgdGhyZWFkOwordW5pb24gZGVz
Y3JpcHRvcjsKKworaW50IGkzODZfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2
X2xkdF9hcmdzICopOworaW50IGkzODZfc2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBp
Mzg2X2xkdF9hcmdzICosIHVuaW9uIGRlc2NyaXB0b3IgKik7CitpbnQgaTM4Nl9nZXRfaW9wZXJt
KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7CitpbnQgaTM4Nl9z
ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp
bnQgYW1kNjRfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2xkdF9hcmdzICop
OworaW50IGFtZDY0X3NldF9sZHQoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgaTM4Nl9sZHRfYXJn
cyAqLAorICAgIHN0cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvciAqKTsKK2ludCBhbWQ2NF9n
ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp
bnQgYW1kNjRfc2V0X2lvcGVybShzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2lvcGVybV9h
cmdzICopOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU1lTQVJDSF9IXyAqLwpkaWZm
IC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmggL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni90cmFwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdHJhcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUu
MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAx
OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh
cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHJhcC5oCTUuNCAoQmVy
a2VsZXkpIDUvOS85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS90
cmFwLmggMjU3NDE3IDIwMTMtMTAtMzEgMDI6MzU6MDBaIG1hcmtqICQKKyAqLworCisjaWZuZGVm
IF9NQUNISU5FX1RSQVBfSF8KKyNkZWZpbmUJX01BQ0hJTkVfVFJBUF9IXworCisvKgorICogVHJh
cCB0eXBlIHZhbHVlcworICogYWxzbyBrbm93biBpbiB0cmFwLmMgZm9yIG5hbWUgc3RyaW5ncwor
ICovCisKKyNkZWZpbmUJVF9QUklWSU5GTFQJMQkvKiBwcml2aWxlZ2VkIGluc3RydWN0aW9uICov
CisjZGVmaW5lCVRfQlBURkxUCTMJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmlu
ZQlUX0FSSVRIVFJBUAk2CS8qIGFyaXRobWV0aWMgdHJhcCAqLworI2RlZmluZQlUX1BST1RGTFQJ
OQkvKiBwcm90ZWN0aW9uIGZhdWx0ICovCisjZGVmaW5lCVRfVFJDVFJBUAkxMAkvKiBkZWJ1ZyBl
eGNlcHRpb24gKHNpYykgKi8KKyNkZWZpbmUJVF9QQUdFRkxUCTEyCS8qIHBhZ2UgZmF1bHQgKi8K
KyNkZWZpbmUJVF9BTElHTkZMVAkxNAkvKiBhbGlnbm1lbnQgZmF1bHQgKi8KKworI2RlZmluZQlU
X0RJVklERQkxOAkvKiBpbnRlZ2VyIGRpdmlkZSBmYXVsdCAqLworI2RlZmluZQlUX05NSQkJMTkJ
Lyogbm9uLW1hc2thYmxlIHRyYXAgKi8KKyNkZWZpbmUJVF9PRkxPVwkJMjAJLyogb3ZlcmZsb3cg
dHJhcCAqLworI2RlZmluZQlUX0JPVU5ECQkyMQkvKiBib3VuZCBpbnN0cnVjdGlvbiBmYXVsdCAq
LworI2RlZmluZQlUX0ROQQkJMjIJLyogZGV2aWNlIG5vdCBhdmFpbGFibGUgZmF1bHQgKi8KKyNk
ZWZpbmUJVF9ET1VCTEVGTFQJMjMJLyogZG91YmxlIGZhdWx0ICovCisjZGVmaW5lCVRfRlBPUEZM
VAkyNAkvKiBmcCBjb3Byb2Nlc3NvciBvcGVyYW5kIGZldGNoIGZhdWx0ICovCisjZGVmaW5lCVRf
VFNTRkxUCTI1CS8qIGludmFsaWQgdHNzIGZhdWx0ICovCisjZGVmaW5lCVRfU0VHTlBGTFQJMjYJ
Lyogc2VnbWVudCBub3QgcHJlc2VudCBmYXVsdCAqLworI2RlZmluZQlUX1NUS0ZMVAkyNwkvKiBz
dGFjayBmYXVsdCAqLworI2RlZmluZQlUX01DSEsJCTI4CS8qIG1hY2hpbmUgY2hlY2sgdHJhcCAq
LworI2RlZmluZQlUX1hNTUZMVAkyOQkvKiBTSU1EIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiAq
LworI2RlZmluZQlUX1JFU0VSVkVECTMwCS8qIHJlc2VydmVkICh1bmtub3duKSAqLworI2RlZmlu
ZQlUX0RUUkFDRV9SRVQJMzIJLyogRFRyYWNlIHBpZCByZXR1cm4gKi8KKworLyogWFhYIG1vc3Qg
b2YgdGhlIGZvbGxvd2luZyBjb2RlcyBhcmVuJ3QgdXNlZCwgYnV0IGNvdWxkIGJlLiAqLworCisv
KiBkZWZpbml0aW9ucyBmb3IgPHN5cy9zaWduYWwuaD4gKi8KKyNkZWZpbmUJICAgIElMTF9SRVNB
RF9GQVVMVAlUX1JFU0FERkxUCisjZGVmaW5lCSAgICBJTExfUFJJVklOX0ZBVUxUCVRfUFJJVklO
RkxUCisjZGVmaW5lCSAgICBJTExfUkVTT1BfRkFVTFQJVF9SRVNPUEZMVAorI2RlZmluZQkgICAg
SUxMX0FMSUdOX0ZBVUxUCVRfQUxJR05GTFQKKyNkZWZpbmUJICAgIElMTF9GUE9QX0ZBVUxUCVRf
RlBPUEZMVAkvKiBjb3Byb2Nlc3NvciBvcGVyYW5kIGZhdWx0ICovCisKKy8qIG9sZCBGcmVlQlNE
IG1hY3JvcywgZGVwcmVjYXRlZCAqLworI2RlZmluZQlGUEVfSU5UT1ZGX1RSQVAJMHgxCS8qIGlu
dGVnZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJRlBFX0lOVERJVl9UUkFQCTB4MgkvKiBpbnRlZ2Vy
IGRpdmlkZSBieSB6ZXJvICovCisjZGVmaW5lCUZQRV9GTFRESVZfVFJBUAkweDMJLyogZmxvYXRp
bmcvZGVjaW1hbCBkaXZpZGUgYnkgemVybyAqLworI2RlZmluZQlGUEVfRkxUT1ZGX1RSQVAJMHg0
CS8qIGZsb2F0aW5nIG92ZXJmbG93ICovCisjZGVmaW5lCUZQRV9GTFRVTkRfVFJBUAkweDUJLyog
ZmxvYXRpbmcgdW5kZXJmbG93ICovCisjZGVmaW5lCUZQRV9GUFVfTlBfVFJBUAkweDYJLyogZmxv
YXRpbmcgcG9pbnQgdW5pdCBub3QgcHJlc2VudCAgKi8KKyNkZWZpbmUJRlBFX1NVQlJOR19UUkFQ
CTB4NwkvKiBzdWJyYW5nZSBvdXQgb2YgYm91bmRzICovCisKKy8qIGNvZGVzIGZvciBTSUdCVVMg
Ki8KKyNkZWZpbmUJICAgIEJVU19QQUdFX0ZBVUxUCVRfUEFHRUZMVAkvKiBwYWdlIGZhdWx0IHBy
b3RlY3Rpb24gYmFzZSAqLworI2RlZmluZQkgICAgQlVTX1NFR05QX0ZBVUxUCVRfU0VHTlBGTFQJ
Lyogc2VnbWVudCBub3QgcHJlc2VudCAqLworI2RlZmluZQkgICAgQlVTX1NUS19GQVVMVAlUX1NU
S0ZMVAkvKiBzdGFjayBzZWdtZW50ICovCisjZGVmaW5lCSAgICBCVVNfU0VHTV9GQVVMVAlUX1JF
U0VSVkVECS8qIHNlZ21lbnQgcHJvdGVjdGlvbiBiYXNlICovCisKKy8qIFRyYXAncyBjb21pbmcg
ZnJvbSB1c2VyIG1vZGUgKi8KKyNkZWZpbmUJVF9VU0VSCTB4MTAwCisKKyNlbmRpZiAvKiAhX01B
Q0hJTkVfVFJBUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L3g4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdWNvbnRleHQu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Vjb250ZXh0LmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvdWNvbnRleHQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDE3MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbQorICog
Q29weXJpZ2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3Vjb250ZXh0LmggMjk1NTYxIDIwMTYtMDIt
MTIgMDc6Mzg6MTlaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1VDT05URVhUX0hfCisjZGVm
aW5lCV9YODZfVUNPTlRFWFRfSF8KKworI2lmZGVmIF9faTM4Nl9fCisvKiBLZWVwIF9NQ18qIHZh
bHVlcyBzaW1pbGFyIHRvIGFtZDY0ICovCisjZGVmaW5lCV9NQ19IQVNTRUdTCTB4MQorI2RlZmlu
ZQlfTUNfSEFTQkFTRVMJMHgyCisjZGVmaW5lCV9NQ19IQVNGUFhTVEFURQkweDQKKyNkZWZpbmUJ
X01DX0ZMQUdfTUFTSwkoX01DX0hBU1NFR1MgfCBfTUNfSEFTQkFTRVMgfCBfTUNfSEFTRlBYU1RB
VEUpCisKK3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworCS8qCisJICogVGhlIGRlZmluaXRp
b24gb2YgbWNvbnRleHRfdCBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YKKwkgKiBzdHJ1Y3Qgc2ln
Y29udGV4dCBhZnRlciB0aGUgc2NfbWFzayBtZW1iZXIuICBUaGlzIGlzIHNvCisJICogdGhhdCB3
ZSBjYW4gc3VwcG9ydCBzaWdjb250ZXh0IGFuZCB1Y29udGV4dF90IGF0IHRoZSBzYW1lCisJICog
dGltZS4KKwkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfb25zdGFjazsJLyogWFhYIC0gc2lnY29udGV4
dCBjb21wYXQuICovCisJX19yZWdpc3Rlcl90CW1jX2dzOwkJLyogbWFjaGluZSBzdGF0ZSAoc3Ry
dWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfZnM7CisJX19yZWdpc3Rlcl90CW1j
X2VzOworCV9fcmVnaXN0ZXJfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZWRpOworCV9fcmVn
aXN0ZXJfdAltY19lc2k7CisJX19yZWdpc3Rlcl90CW1jX2VicDsKKwlfX3JlZ2lzdGVyX3QJbWNf
aXNwOworCV9fcmVnaXN0ZXJfdAltY19lYng7CisJX19yZWdpc3Rlcl90CW1jX2VkeDsKKwlfX3Jl
Z2lzdGVyX3QJbWNfZWN4OworCV9fcmVnaXN0ZXJfdAltY19lYXg7CisJX19yZWdpc3Rlcl90CW1j
X3RyYXBubzsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJyOworCV9fcmVnaXN0ZXJfdAltY19laXA7CisJ
X19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0ZXJfdAltY19lZmxhZ3M7CisJX19yZWdpc3Rl
cl90CW1jX2VzcDsKKwlfX3JlZ2lzdGVyX3QJbWNfc3M7CisKKwlpbnQJbWNfbGVuOwkJCS8qIHNp
emVvZihtY29udGV4dF90KSAqLworI2RlZmluZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyog
ZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UXzM4
NwkJMHgxMDAwMQorI2RlZmluZQlfTUNfRlBGTVRfWE1NCQkweDEwMDAyCisJaW50CW1jX2ZwZm9y
bWF0OworI2RlZmluZQlfTUNfRlBPV05FRF9OT05FCTB4MjAwMDAJLyogRlAgc3RhdGUgbm90IHVz
ZWQgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfRlBVCQkweDIwMDAxCS8qIEZQIHN0YXRlIGNhbWUg
ZnJvbSBGUFUgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfUENCCQkweDIwMDAyCS8qIEZQIHN0YXRl
IGNhbWUgZnJvbSBQQ0IgKi8KKwlpbnQJbWNfb3duZWRmcDsKKwlfX3JlZ2lzdGVyX3QgbWNfZmxh
Z3M7CisJLyoKKwkgKiBTZWUgPG1hY2hpbmUvbnB4Lmg+IGZvciB0aGUgaW50ZXJuYWxzIG9mIG1j
X2Zwc3RhdGVbXS4KKwkgKi8KKwlpbnQJbWNfZnBzdGF0ZVsxMjhdIF9fYWxpZ25lZCgxNik7CisK
KwlfX3JlZ2lzdGVyX3QgbWNfZnNiYXNlOworCV9fcmVnaXN0ZXJfdCBtY19nc2Jhc2U7CisKKwlf
X3JlZ2lzdGVyX3QgbWNfeGZwdXN0YXRlOworCV9fcmVnaXN0ZXJfdCBtY194ZnB1c3RhdGVfbGVu
OworCisJaW50CW1jX3NwYXJlMls0XTsKK30gbWNvbnRleHRfdDsKKyNlbmRpZiAvKiBfX2kzODZf
XyAqLworCisjaWZkZWYgX19hbWQ2NF9fCisvKgorICogbWNfdHJhcG5vIGJpdHMuIFNoYWxsIGJl
IGluIHN5bmMgd2l0aCBURl9YWFguCisgKi8KKyNkZWZpbmUJX01DX0hBU1NFR1MJMHgxCisjZGVm
aW5lCV9NQ19IQVNCQVNFUwkweDIKKyNkZWZpbmUJX01DX0hBU0ZQWFNUQVRFCTB4NAorI2RlZmlu
ZQlfTUNfRkxBR19NQVNLCShfTUNfSEFTU0VHUyB8IF9NQ19IQVNCQVNFUyB8IF9NQ19IQVNGUFhT
VEFURSkKKwordHlwZWRlZiBzdHJ1Y3QgX19tY29udGV4dCB7CisJLyoKKwkgKiBUaGUgZGVmaW5p
dGlvbiBvZiBtY29udGV4dF90IG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZgorCSAqIHN0cnVjdCBz
aWdjb250ZXh0IGFmdGVyIHRoZSBzY19tYXNrIG1lbWJlci4gIFRoaXMgaXMgc28KKwkgKiB0aGF0
IHdlIGNhbiBzdXBwb3J0IHNpZ2NvbnRleHQgYW5kIHVjb250ZXh0X3QgYXQgdGhlIHNhbWUKKwkg
KiB0aW1lLgorCSAqLworCV9fcmVnaXN0ZXJfdAltY19vbnN0YWNrOwkvKiBYWFggLSBzaWdjb250
ZXh0IGNvbXBhdC4gKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcmRpOwkJLyogbWFjaGluZSBzdGF0ZSAo
c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcnNpOworCV9fcmVnaXN0ZXJf
dAltY19yZHg7CisJX19yZWdpc3Rlcl90CW1jX3JjeDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjg7CisJ
X19yZWdpc3Rlcl90CW1jX3I5OworCV9fcmVnaXN0ZXJfdAltY19yYXg7CisJX19yZWdpc3Rlcl90
CW1jX3JieDsKKwlfX3JlZ2lzdGVyX3QJbWNfcmJwOworCV9fcmVnaXN0ZXJfdAltY19yMTA7CisJ
X19yZWdpc3Rlcl90CW1jX3IxMTsKKwlfX3JlZ2lzdGVyX3QJbWNfcjEyOworCV9fcmVnaXN0ZXJf
dAltY19yMTM7CisJX19yZWdpc3Rlcl90CW1jX3IxNDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjE1Owor
CV9fdWludDMyX3QJbWNfdHJhcG5vOworCV9fdWludDE2X3QJbWNfZnM7CisJX191aW50MTZfdAlt
Y19nczsKKwlfX3JlZ2lzdGVyX3QJbWNfYWRkcjsKKwlfX3VpbnQzMl90CW1jX2ZsYWdzOworCV9f
dWludDE2X3QJbWNfZXM7CisJX191aW50MTZfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJy
OworCV9fcmVnaXN0ZXJfdAltY19yaXA7CisJX19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0
ZXJfdAltY19yZmxhZ3M7CisJX19yZWdpc3Rlcl90CW1jX3JzcDsKKwlfX3JlZ2lzdGVyX3QJbWNf
c3M7CisKKwlsb25nCW1jX2xlbjsJCQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKworI2RlZmlu
ZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyogZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZp
Z3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UX1hNTQkJMHgxMDAwMgorCWxvbmcJbWNfZnBmb3Jt
YXQ7CisjZGVmaW5lCV9NQ19GUE9XTkVEX05PTkUJMHgyMDAwMAkvKiBGUCBzdGF0ZSBub3QgdXNl
ZCAqLworI2RlZmluZQlfTUNfRlBPV05FRF9GUFUJCTB4MjAwMDEJLyogRlAgc3RhdGUgY2FtZSBm
cm9tIEZQVSAqLworI2RlZmluZQlfTUNfRlBPV05FRF9QQ0IJCTB4MjAwMDIJLyogRlAgc3RhdGUg
Y2FtZSBmcm9tIFBDQiAqLworCWxvbmcJbWNfb3duZWRmcDsKKwkvKgorCSAqIFNlZSA8bWFjaGlu
ZS9mcHUuaD4gZm9yIHRoZSBpbnRlcm5hbHMgb2YgbWNfZnBzdGF0ZVtdLgorCSAqLworCWxvbmcJ
bWNfZnBzdGF0ZVs2NF0gX19hbGlnbmVkKDE2KTsKKworCV9fcmVnaXN0ZXJfdAltY19mc2Jhc2U7
CisJX19yZWdpc3Rlcl90CW1jX2dzYmFzZTsKKworCV9fcmVnaXN0ZXJfdAltY194ZnB1c3RhdGU7
CisJX19yZWdpc3Rlcl90CW1jX3hmcHVzdGF0ZV9sZW47CisKKwlsb25nCW1jX3NwYXJlWzRdOwor
fSBtY29udGV4dF90OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjaWZkZWYgX19MSU5UX18K
K3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworfSBtY29udGV4dF90OworI2VuZGlmIC8qIF9f
TElOVF9fICovCisKKyNlbmRpZiAvKiAhX1g4Nl9VQ09OVEVYVF9IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92ZHNvLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni92ZHNvLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92
ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC94ODYvdmRzby5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAw
ICswMTAwCkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IDIwMTIgS29uc3RhbnRp
biBCZWxvdXNvdiA8a2liQEZyZWVCU0QuT1JHPi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJAorICovCisKKyNpZm5k
ZWYgX1g4Nl9WRFNPX0gKKyNkZWZpbmUJX1g4Nl9WRFNPX0gKKworI2RlZmluZQlWRFNPX1RJTUVI
QU5EU19NRAkJCVwKKwl1aW50MzJfdAl0aF94ODZfc2hpZnQ7CQlcCisJdWludDMyX3QJdGhfcmVz
WzddOworCisjaWZkZWYgX0tFUk5FTAorI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKworI2RlZmlu
ZQlWRFNPX1RJTUVIQU5EU19NRDMyCVZEU09fVElNRUhBTkRTX01ECisKKyNlbmRpZgorI2VuZGlm
CisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdm13
YXJlLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92bXdhcmUuaAotLS0gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw
MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5o
CTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgSnVuZy11ayBLaW0gPGpraW1ARnJlZUJTRC5v
cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMveDg2L2luY2x1ZGUvdm13YXJlLmggMjc4NzQ5IDIwMTUtMDItMTQgMDk6MDA6MTJaIGtpYiAk
CisgKi8KKworI2lmbmRlZiBfWDg2X1ZNV0FSRV9IXworI2RlZmluZQlfWDg2X1ZNV0FSRV9IXwor
CisjZGVmaW5lCVZNV19IVk1BR0lDCQkweDU2NGQ1ODY4CisjZGVmaW5lCVZNV19IVlBPUlQJCTB4
NTY1OAorCisjZGVmaW5lCVZNV19IVkNNRF9HRVRWRVJTSU9OCTEwCisjZGVmaW5lCVZNV19IVkNN
RF9HRVRIWgkJNDUKKyNkZWZpbmUJVk1XX0hWQ01EX0dFVFZDUFVfSU5GTwk2OAorCisjZGVmaW5l
CVZNV19WQ1BVSU5GT19MRUdBQ1lfWDJBUElDCSgxIDw8IDMpCisjZGVmaW5lCVZNV19WQ1BVSU5G
T19WQ1BVX1JFU0VSVkVECSgxIDw8IDMxKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm13YXJl
X2h2Y2FsbCh1X2ludCBjbWQsIHVfaW50ICpwKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW5s
ICV3MywgJTAiCisJOiAiPWEiIChwWzBdKSwgIj1iIiAocFsxXSksICI9YyIgKHBbMl0pLCAiPWQi
IChwWzNdKQorCTogIjAiIChWTVdfSFZNQUdJQyksICIxIiAoVUlOVF9NQVgpLCAiMiIgKGNtZCks
ICIzIiAoVk1XX0hWUE9SVCkKKwk6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qICFfWDg2X1ZN
V0FSRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94
ODZfc21wLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgKLS0tIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYveDg2
X3NtcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTAz
IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVFUi1XQVJFIExJQ0VO
U0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90ZSB0aGlzIGZpbGUu
ICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBjYW4gZG8gd2hhdGV2
ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUgZGF5LCBhbmQgeW91
IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1eSBtZSBhIGJlZXIg
aW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
KgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS94ODZfc21wLmggMjkx
OTQ5IDIwMTUtMTItMDcgMTc6NDE6MjBaIGtpYiAkCisgKgorICovCisKKyNpZm5kZWYgX1g4Nl9Y
ODZfU01QX0hfCisjZGVmaW5lCV9YODZfWDg2X1NNUF9IXworCisjaW5jbHVkZSA8c3lzL2J1cy5o
PgorI2luY2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFj
aGRlcC5oPgorI2luY2x1ZGUgPHg4Ni9hcGljdmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wY2Iu
aD4KKworc3RydWN0IHBtYXA7CisKKy8qIGdsb2JhbCBkYXRhIGluIG1wX3g4Ni5jICovCitleHRl
cm4gaW50IG1wX25hcHM7CitleHRlcm4gaW50IGJvb3RfY3B1X2lkOworZXh0ZXJuIHN0cnVjdCBw
Y2Igc3RvcHBjYnNbXTsKK2V4dGVybiBpbnQgY3B1X2FwaWNfaWRzW107CitleHRlcm4gaW50IGJv
b3RBUDsKK2V4dGVybiB2b2lkICpkcGNwdTsKK2V4dGVybiBjaGFyICpib290U1RLOworZXh0ZXJu
IHZvaWQgKmJvb3RzdGFja3NbXTsKK2V4dGVybiB2b2xhdGlsZSB1X2ludCBjcHVfaXBpX3BlbmRp
bmdbXTsKK2V4dGVybiB2b2xhdGlsZSBpbnQgYXBzX3JlYWR5OworZXh0ZXJuIHN0cnVjdCBtdHgg
YXBfYm9vdF9tdHg7CitleHRlcm4gaW50IGNwdV9sb2dpY2FsOworZXh0ZXJuIGludCBjcHVfY29y
ZXM7CitleHRlcm4gdm9sYXRpbGUgaW50IHNtcF90bGJfd2FpdDsKK2V4dGVybiBzdHJ1Y3QgcG1h
cCAqc21wX3RsYl9wbWFwOworZXh0ZXJuIHVfaW50IHhoaXRzX2dibFtdOworZXh0ZXJuIHVfaW50
IHhoaXRzX3BnW107CitleHRlcm4gdV9pbnQgeGhpdHNfcm5nW107CitleHRlcm4gdV9pbnQgaXBp
X2dsb2JhbDsKK2V4dGVybiB1X2ludCBpcGlfcGFnZTsKK2V4dGVybiB1X2ludCBpcGlfcmFuZ2U7
CitleHRlcm4gdV9pbnQgaXBpX3JhbmdlX3NpemU7CisKK3N0cnVjdCBjcHVfaW5mbyB7CisJaW50
CWNwdV9wcmVzZW50OjE7CisJaW50CWNwdV9ic3A6MTsKKwlpbnQJY3B1X2Rpc2FibGVkOjE7CisJ
aW50CWNwdV9oeXBlcnRocmVhZDoxOworfTsKK2V4dGVybiBzdHJ1Y3QgY3B1X2luZm8gY3B1X2lu
Zm9bXTsKKworI2lmZGVmIENPVU5UX0lQSVMKK2V4dGVybiB1X2xvbmcgKmlwaV9pbnZsdGxiX2Nv
dW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9uZyAqaXBpX2ludmxybmdfY291bnRzW01BWENQVV07
CitleHRlcm4gdV9sb25nICppcGlfaW52bHBnX2NvdW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9u
ZyAqaXBpX2ludmxjYWNoZV9jb3VudHNbTUFYQ1BVXTsKK2V4dGVybiB1X2xvbmcgKmlwaV9yZW5k
ZXp2b3VzX2NvdW50c1tNQVhDUFVdOworI2VuZGlmCisKKy8qIElQSSBoYW5kbGVycyAqLworaW50
aGFuZF90CisJSURUVkVDKGludmx0bGIpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGdsb2JhbCAqLwor
CUlEVFZFQyhpbnZscGcpLAkJLyogVExCIHNob290ZG93bnMgLSAxIHBhZ2UgKi8KKwlJRFRWRUMo
aW52bHJuZyksCS8qIFRMQiBzaG9vdGRvd25zIC0gcGFnZSByYW5nZSAqLworCUlEVFZFQyhpbnZs
Y2FjaGUpLAkvKiBXcml0ZSBiYWNrIGFuZCBpbnZhbGlkYXRlIGNhY2hlICovCisJSURUVkVDKGlw
aV9pbnRyX2JpdG1hcF9oYW5kbGVyKSwgLyogQml0bWFwIGJhc2VkIElQSXMgKi8gCisJSURUVkVD
KGNwdXN0b3ApLAkvKiBDUFUgc3RvcHMgJiB3YWl0cyB0byBiZSByZXN0YXJ0ZWQgKi8KKwlJRFRW
RUMoY3B1c3VzcGVuZCksCS8qIENQVSBzdXNwZW5kcyAmIHdhaXRzIHRvIGJlIHJlc3VtZWQgKi8K
KwlJRFRWRUMocmVuZGV6dm91cyk7CS8qIGhhbmRsZSBDUFUgcmVuZGV6dm91cyAqLworCisvKiBm
dW5jdGlvbnMgaW4geDg2X21wLmMgKi8KK3ZvaWQJYXNzaWduX2NwdV9pZHModm9pZCk7Cit2b2lk
CWNwdV9hZGQodV9pbnQgYXBpY19pZCwgY2hhciBib290X2NwdSk7Cit2b2lkCWNwdXN0b3BfaGFu
ZGxlcih2b2lkKTsKK3ZvaWQJY3B1c3VzcGVuZF9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3Nl
Y29uZGFyeV90YWlsKHZvaWQpOwordm9pZAlpbnZsdGxiX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu
dmxwZ19oYW5kbGVyKHZvaWQpOwordm9pZAlpbnZscm5nX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu
dmxjYWNoZV9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3NlY29uZGFyeSh2b2lkKTsKK3ZvaWQJ
aXBpX3N0YXJ0dXAoaW50IGFwaWNfaWQsIGludCB2ZWN0b3IpOwordm9pZAlpcGlfYWxsX2J1dF9z
ZWxmKHVfaW50IGlwaSk7Cit2b2lkIAlpcGlfYml0bWFwX2hhbmRsZXIoc3RydWN0IHRyYXBmcmFt
ZSBmcmFtZSk7Cit2b2lkCWlwaV9jcHUoaW50IGNwdSwgdV9pbnQgaXBpKTsKK2ludAlpcGlfbm1p
X2hhbmRsZXIodm9pZCk7Cit2b2lkCWlwaV9zZWxlY3RlZChjcHVzZXRfdCBjcHVzLCB1X2ludCBp
cGkpOwordV9pbnQJbXBfYm9vdGFkZHJlc3ModV9pbnQpOwordm9pZAlzZXRfaW50ZXJydXB0X2Fw
aWNfaWRzKHZvaWQpOwordm9pZAlzbXBfY2FjaGVfZmx1c2godm9pZCk7Cit2b2lkCXNtcF9tYXNr
ZWRfaW52bHBnKGNwdXNldF90IG1hc2ssIHZtX29mZnNldF90IGFkZHIpOwordm9pZAlzbXBfbWFz
a2VkX2ludmxwZ19yYW5nZShjcHVzZXRfdCBtYXNrLCB2bV9vZmZzZXRfdCBzdGFydHZhLAorCSAg
ICB2bV9vZmZzZXRfdCBlbmR2YSk7Cit2b2lkCXNtcF9tYXNrZWRfaW52bHRsYihjcHVzZXRfdCBt
YXNrLCBzdHJ1Y3QgcG1hcCAqcG1hcCk7Cit2b2lkCW1lbV9yYW5nZV9BUF9pbml0KHZvaWQpOwor
dm9pZAl0b3BvX3Byb2JlKHZvaWQpOwordm9pZAlpcGlfc2VuZF9jcHUoaW50IGNwdSwgdV9pbnQg
aXBpKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L3g4Nl92YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni94ODZfdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr
MSwxMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3g4Nl92YXIuaCAyOTc4NTcgMjAxNi0wNC0x
MiAxMzozMDozOVogYXZnICQKKyAqLworCisjaWZuZGVmIF9YODZfWDg2X1ZBUl9IXworI2RlZmlu
ZQlfWDg2X1g4Nl9WQVJfSF8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgbWFjaGluZS1kZXBlbmRl
bnQgZGVjbGFyYXRpb25zLgorICovCisKK2V4dGVybglsb25nCU1heG1lbTsKK2V4dGVybgl1X2lu
dAliYXNlbWVtOworZXh0ZXJuCWludAlidXNkbWFfc3dpX3BlbmRpbmc7CitleHRlcm4JdV9pbnQJ
Y3B1X2V4dGhpZ2g7CitleHRlcm4JdV9pbnQJY3B1X2ZlYXR1cmU7CitleHRlcm4JdV9pbnQJY3B1
X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWFtZF9mZWF0dXJlOworZXh0ZXJuCXVfaW50CWFtZF9m
ZWF0dXJlMjsKK2V4dGVybgl1X2ludAlhbWRfcG1pbmZvOworZXh0ZXJuCXVfaW50CXZpYV9mZWF0
dXJlX3JuZzsKK2V4dGVybgl1X2ludAl2aWFfZmVhdHVyZV94Y3J5cHQ7CitleHRlcm4JdV9pbnQJ
Y3B1X2NsZmx1c2hfbGluZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9zdGRleHRfZmVhdHVyZTsK
K2V4dGVybgl1X2ludAljcHVfc3RkZXh0X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWNwdV9meHNy
OworZXh0ZXJuCXVfaW50CWNwdV9oaWdoOworZXh0ZXJuCXVfaW50CWNwdV9pZDsKK2V4dGVybgl1
X2ludAljcHVfbWF4X2V4dF9zdGF0ZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9teGNzcl9tYXNr
OworZXh0ZXJuCXVfaW50CWNwdV9wcm9jaW5mbzsKK2V4dGVybgl1X2ludAljcHVfcHJvY2luZm8y
OworZXh0ZXJuCWNoYXIJY3B1X3ZlbmRvcltdOworZXh0ZXJuCXVfaW50CWNwdV92ZW5kb3JfaWQ7
CitleHRlcm4JdV9pbnQJY3B1X21vbl9td2FpdF9mbGFnczsKK2V4dGVybgl1X2ludAljcHVfbW9u
X21pbl9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9tb25fbWF4X3NpemU7CitleHRlcm4JdV9pbnQJ
Y3B1X21heHBoeWFkZHI7CitleHRlcm4JY2hhcgljdHhfc3dpdGNoX3hzYXZlW107CitleHRlcm4J
dV9pbnQJaHZfaGlnaDsKK2V4dGVybgljaGFyCWh2X3ZlbmRvcltdOworZXh0ZXJuCWNoYXIJa3N0
YWNrW107CitleHRlcm4JY2hhcglzaWdjb2RlW107CitleHRlcm4JaW50CXN6c2lnY29kZTsKK2V4
dGVybglpbnQJdm1fcGFnZV9kdW1wX3NpemU7CitleHRlcm4JaW50CXdvcmthcm91bmRfZXJyYXR1
bTM4MzsKK2V4dGVybglpbnQJX3VkYXRhc2VsOworZXh0ZXJuCWludAlfdWNvZGVzZWw7CitleHRl
cm4JaW50CV91Y29kZTMyc2VsOworZXh0ZXJuCWludAlfdWZzc2VsOworZXh0ZXJuCWludAlfdWdz
c2VsOworZXh0ZXJuCWludAl1c2VfeHNhdmU7CitleHRlcm4JdWludDY0X3QgeHNhdmVfbWFzazsK
Kworc3RydWN0CXBjYjsKK3N0cnVjdAl0aHJlYWQ7CitzdHJ1Y3QJcmVnOworc3RydWN0CWZwcmVn
Oworc3RydWN0ICBkYnJlZzsKK3N0cnVjdAlkdW1wZXJpbmZvOworCisvKgorICogVGhlIGludGVy
ZmFjZSB0eXBlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBlbnRyeSBwb2ludCBjYW5ub3QgYmUK
KyAqIGV4cHJlc3NlZCBpbiBDLiAgVXNlIHNpbXBsZXN0IG5vbi12YXJpYWRpYyBmdW5jdGlvbiB0
eXBlIGFzIGFuCisgKiBhcHByb3hpbWF0aW9uLgorICovCit0eXBlZGVmIHZvaWQgYWxpYXNfZm9y
X2ludGhhbmRfdCh2b2lkKTsKKwordm9pZAkqYWxsb2NfZnB1c2F2ZShpbnQgZmxhZ3MpOwordm9p
ZAlidXNkbWFfc3dpKHZvaWQpOworYm9vbAljcHVfbXdhaXRfdXNhYmxlKHZvaWQpOwordm9pZAlj
cHVfcHJvYmVfYW1kYzFlKHZvaWQpOwordm9pZAljcHVfc2V0cmVncyh2b2lkKTsKK3ZvaWQJZHVt
cF9hZGRfcGFnZSh2bV9wYWRkcl90KTsKK3ZvaWQJZHVtcF9kcm9wX3BhZ2Uodm1fcGFkZHJfdCk7
Cit2b2lkCWlkZW50aWZ5X2NwdSh2b2lkKTsKK3ZvaWQJaW5pdGlhbGl6ZWNwdSh2b2lkKTsKK3Zv
aWQJaW5pdGlhbGl6ZWNwdWNhY2hlKHZvaWQpOworYm9vbAlmaXhfY3B1aWQodm9pZCk7Cit2b2lk
CWZpbGx3KGludCAvKnVfc2hvcnQqLyBwYXQsIHZvaWQgKmJhc2UsIHNpemVfdCBjbnQpOworaW50
CWlzX3BoeXNpY2FsX21lbW9yeSh2bV9wYWRkcl90IGFkZHIpOworaW50CWlzYV9ubWkoaW50IGNk
KTsKK3ZvaWQJcGFuaWNpZmNwdXVuc3VwcG9ydGVkKHZvaWQpOwordm9pZAlwYWdlY29weSh2b2lk
ICpmcm9tLCB2b2lkICp0byk7Cit2b2lkCXByaW50Y3B1aW5mbyh2b2lkKTsKK2ludAl1c2VyX2Ri
cmVnX3RyYXAodm9pZCk7CitpbnQJbWluaWR1bXBzeXMoc3RydWN0IGR1bXBlcmluZm8gKik7Citz
dHJ1Y3QgcGNiICpnZXRfcGNiX3RkKHN0cnVjdCB0aHJlYWQgKnRkKTsKKworI2VuZGlmCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ZW4veGVuLW9z
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzOCBAQAor
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiB4ODYveGVuL3hlbi1vcy5oCisgKgorICogUmFuZG9t
IGNvbGxlY3Rpb24gb2YgbWFjcm9zIGFuZCBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChj
KSAyMDAzLCAyMDA0IEtlaXIgRnJhc2VyIChvbiBiZWhhbGYgb2YgdGhlIFhlbiB0ZWFtKQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk
LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IK
KyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv
IHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh
bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg
KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8x
MS4wL3N5cy94ODYvaW5jbHVkZS94ZW4veGVuLW9zLmggMjg5Njg2IDIwMTUtMTAtMjEgMTA6NDQ6
MDdaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXwor
I2RlZmluZSBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXworCisvKiBFdmVyeXRoaW5nIGJlbG93
IHRoaXMgcG9pbnQgaXMgbm90IGluY2x1ZGVkIGJ5IGFzc2VtYmxlciAoLlMpIGZpbGVzLiAqLwor
I2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2Vu
ZGlmIC8qIF9NQUNISU5FX1g4Nl9YRU5fWEVOX09TX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy92bW0vTWFrZWZpbGUgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2Vm
aWxlCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI0
OjUyLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl
CTIwMTYtMTEtMzAgMTA6NTY6MDUuODA1NzYwMDAwICswMDAwCkBAIC0yMSw2ICsyMSw3IEBACiAJ
dm1tX2lvcG9ydC5jCVwKIAl2bW1fbGFwaWMuYwlcCiAJdm1tX21lbS5jCVwKKwl2bW1fdXNlcm1l
bS5jCVwKIAl2bW1fc3RhdC5jCVwKIAl2bW1fdXRpbC5jCVwKIAl4ODYuYwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxlLm9yaWcgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvdm1tL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl
Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZS5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNjcwMjA4MDAw
ICswMDAwCkBAIC0wLDAgKzEsNzkgQEAKKyMgJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9tb2R1
bGVzL3ZtbS9NYWtlZmlsZSAyNzk5NzEgMjAxNS0wMy0xNCAwMjozMjowOFogbmVlbCAkCisKK0tN
T0Q9CXZtbQorCitTUkNTPQlvcHRfYWNwaS5oIG9wdF9kZGIuaCBkZXZpY2VfaWYuaCBidXNfaWYu
aCBwY2lfaWYuaAorU1JDUys9CXZteF9hc3N5bS5oIHN2bV9hc3N5bS5oCitEUFNSQ1M9CXZteF9n
ZW5hc3N5bS5jIHN2bV9nZW5hc3N5bS5jCisKK0NGTEFHUys9IC1EVk1NX0tFRVBfU1RBVFMgLURT
TVAKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0KK0NGTEFHUys9IC1JJHsu
Q1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW8KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9h
bWQ2NC92bW0vaW50ZWwKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vYW1k
CisKKyMgZ2VuZXJpYyB2bW0gc3VwcG9ydAorLlBBVEg6ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQv
dm1tCitTUkNTKz0Jdm1tLmMJCVwKKwl2bW1fZGV2LmMJXAorCXZtbV9ob3N0LmMJXAorCXZtbV9p
bnN0cnVjdGlvbl9lbXVsLmMJXAorCXZtbV9pb3BvcnQuYwlcCisJdm1tX2xhcGljLmMJXAorCXZt
bV9tZW0uYwlcCisJdm1tX3N0YXQuYwlcCisJdm1tX3V0aWwuYwlcCisJeDg2LmMKKworLlBBVEg6
ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQvdm1tL2lvCitTUkNTKz0JaW9tbXUuYwkJXAorCXBwdC5j
ICAgICAgICAgICBcCisJdmF0cGljLmMJXAorCXZhdHBpdC5jCVwKKwl2aHBldC5jCQlcCisJdmlv
YXBpYy5jCVwKKwl2bGFwaWMuYwlcCisJdnBtdG1yLmMJXAorCXZydGMuYworCisjIGludGVsLXNw
ZWNpZmljIGZpbGVzCisuUEFUSDogJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW50ZWwKK1NS
Q1MrPQllcHQuYwkJXAorCXZtY3MuYwkJXAorCXZteF9tc3IuYwlcCisJdm14X3N1cHBvcnQuUwlc
CisJdm14LmMJCVwKKwl2dGQuYworCisjIGFtZC1zcGVjaWZpYyBmaWxlcworLlBBVEg6ICR7LkNV
UkRJUn0vLi4vLi4vYW1kNjQvdm1tL2FtZAorU1JDUys9CXZtY2IuYwkJXAorCXN2bS5jCQlcCisJ
c3ZtX3N1cHBvcnQuUwlcCisJbnB0LmMJCVwKKwlhbWR2LmMJCVwKKwlzdm1fbXNyLmMKKworQ0xF
QU5GSUxFUz0Jdm14X2Fzc3ltLmggdm14X2dlbmFzc3ltLm8gc3ZtX2Fzc3ltLmggc3ZtX2dlbmFz
c3ltLm8KKwordm14X2Fzc3ltLmg6ICAgIHZteF9nZW5hc3N5bS5vCisJc2ggJHtTWVNESVJ9L2tl
cm4vZ2VuYXNzeW0uc2ggdm14X2dlbmFzc3ltLm8gPiAkey5UQVJHRVR9CisKK3N2bV9hc3N5bS5o
OiAgICBzdm1fZ2VuYXNzeW0ubworCXNoICR7U1lTRElSfS9rZXJuL2dlbmFzc3ltLnNoIHN2bV9n
ZW5hc3N5bS5vID4gJHsuVEFSR0VUfQorCit2bXhfc3VwcG9ydC5vOgorCSR7Q0N9IC1jIC14IGFz
c2VtYmxlci13aXRoLWNwcCAtRExPQ09SRSAke0NGTEFHU30gXAorCSAgICAkey5JTVBTUkN9IC1v
ICR7LlRBUkdFVH0KKworc3ZtX3N1cHBvcnQubzoKKwkke0NDfSAtYyAteCBhc3NlbWJsZXItd2l0
aC1jcHAgLURMT0NPUkUgJHtDRkxBR1N9IFwKKwkgICAgJHsuSU1QU1JDfSAtbyAkey5UQVJHRVR9
CisKK3ZteF9nZW5hc3N5bS5vOgorCSR7Q0N9IC1jICR7Q0ZMQUdTOk4tZm5vLWNvbW1vbn0gJHsu
SU1QU1JDfQorCitzdm1fZ2VuYXNzeW0ubzoKKwkke0NDfSAtYyAke0NGTEFHUzpOLWZuby1jb21t
b259ICR7LklNUFNSQ30KKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL25ldC9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcC5oCi0tLSB1c3Iv
c3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTc3ODgw
MDAgKzAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9uZXQvbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp
ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9uZXQvbmV0bWFwLmggMjUxMTM5IDIwMTMtMDUtMzAg
MTQ6MDc6MTRaIGx1aWdpICQKICAqCiAgKiBEZWZpbml0aW9ucyBvZiBjb25zdGFudHMgYW5kIHRo
ZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIG5ldG1hcAogICogZnJhbWV3b3JrLCBmb3IgdGhlIHBh
cnQgdmlzaWJsZSB0byBib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlLgpAQCAtMTM3LDYgKzEzNywy
NiBAQAogICoJbmV0bWFwOmZvby1rCQkJdGhlIGstdGggTklDIHJpbmcgcGFpcgogICoJbmV0bWFw
OmZvb3trCQkJUElQRSByaW5nIHBhaXIgaywgbWFzdGVyIHNpZGUKICAqCW5ldG1hcDpmb299awkJ
CVBJUEUgcmluZyBwYWlyIGssIHNsYXZlIHNpZGUKKyAqCisgKiBTb21lIG5vdGVzIGFib3V0IGhv
c3QgcmluZ3M6CisgKgorICogKyBUaGUgUlggaG9zdCByaW5nIGlzIHVzZWQgdG8gc3RvcmUgdGhv
c2UgcGFja2V0cyB0aGF0IHRoZSBob3N0IG5ldHdvcmsKKyAqICAgc3RhY2sgaXMgdHJ5aW5nIHRv
IHRyYW5zbWl0IHRocm91Z2ggYSBOSUMgcXVldWUsIGJ1dCBvbmx5IGlmIHRoYXQgcXVldWUKKyAq
ICAgaXMgY3VycmVudGx5IGluIG5ldG1hcCBtb2RlLiBOZXRtYXAgd2lsbCBub3QgaW50ZXJjZXB0
IGhvc3Qgc3RhY2sgbWJ1ZnMKKyAqICAgZGVzaWduYXRlZCB0byBOSUMgcXVldWVzIHRoYXQgYXJl
IG5vdCBpbiBuZXRtYXAgbW9kZS4gQXMgYSBjb25zZXF1ZW5jZSwKKyAqICAgcmVnaXN0ZXJpbmcg
YSBuZXRtYXAgcG9ydCB3aXRoIG5ldG1hcDpmb29eIGlzIG5vdCBlbm91Z2ggdG8gaW50ZXJjZXB0
CisgKiAgIG1idWZzIGluIHRoZSBSWCBob3N0IHJpbmc7IHRoZSBuZXRtYXAgcG9ydCBzaG91bGQg
YmUgcmVnaXN0ZXJlZCB3aXRoCisgKiAgIG5ldG1hcDpmb28qLCBvciBhbm90aGVyIHJlZ2lzdHJh
dGlvbiBzaG91bGQgYmUgZG9uZSB0byBvcGVuIGF0IGxlYXN0IGEKKyAqICAgTklDIFRYIHF1ZXVl
IGluIG5ldG1hcCBtb2RlLgorICoKKyAqICsgTmV0bWFwIGlzIG5vdCBjdXJyZW50bHkgYWJsZSB0
byBkZWFsIHdpdGggaW50ZXJjZXB0ZWQgdHJhc21pdCBtYnVmcyB3aGljaAorICogICByZXF1aXJl
IG9mZmxvYWRpbmdzIGxpa2UgVFNPLCBVRk8sIGNoZWNrc3VtbWluZyBvZmZsb2FkaW5ncywgZXRj
LiBJdCBpcworICogICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkaXNhYmxlIHRob3Nl
IG9mZmxvYWRpbmdzIChlLmcuIHVzaW5nCisgKiAgIGlmY29uZmlnIG9uIEZyZWVCU0Qgb3IgZXRo
dG9vbCAtSyBvbiBMaW51eCkgZm9yIGFuIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nCisgKiAgIHVz
ZWQgaW4gbmV0bWFwIG1vZGUuIElmIHRoZSBvZmZsb2FkaW5ncyBhcmUgbm90IGRpc2FibGVkLCBH
U08gYW5kL29yCisgKiAgIHVuY2hlY2tzdW1tZWQgcGFja2V0cyBtYXkgYmUgZHJvcHBlZCBpbW1l
ZGlhdGVseSBvciBlbmQgdXAgaW4gdGhlIGhvc3QgUlgKKyAqICAgcmluZywgYW5kIHdpbGwgYmUg
ZHJvcHBlZCBhcyBzb29uIGFzIHRoZSBwYWNrZXQgcmVhY2hlcyBhbm90aGVyIG5ldG1hcAorICog
ICBhZGFwdGVyLgogICovCiAKIC8qCkBAIC0yNzcsNyArMjk3LDExIEBACiAJc3RydWN0IHRpbWV2
YWwJdHM7CQkvKiAoaykgdGltZSBvZiBsYXN0ICpzeW5jKCkgKi8KIAogCS8qIG9wYXF1ZSByb29t
IGZvciBhIG11dGV4IG9yIHNpbWlsYXIgb2JqZWN0ICovCi0JdWludDhfdAkJc2VtWzEyOF0gX19h
dHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTk1fQ0FDSEVfQUxJR04pKSk7CisjaWYgIWRlZmluZWQo
X1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisJdWludDhfdAlfX2F0dHJpYnV0ZV9fKChf
X2FsaWduZWRfXyhOTV9DQUNIRV9BTElHTikpKSBzZW1bMTI4XTsKKyNlbHNlCisJdWludDhfdAlf
X2RlY2xzcGVjKGFsaWduKE5NX0NBQ0hFX0FMSUdOKSkgc2VtWzEyOF07CisjZW5kaWYKIAogCS8q
IHRoZSBzbG90cyBmb2xsb3cuIFRoaXMgc3RydWN0IGhhcyB2YXJpYWJsZSBzaXplICovCiAJc3Ry
dWN0IG5ldG1hcF9zbG90IHNsb3RbMF07CS8qIGFycmF5IG9mIHNsb3RzLiAqLwpAQCAtNDk2LDYg
KzUyMCwxMiBAQAogI2RlZmluZSBORVRNQVBfQkRHX09GRlNFVAlORVRNQVBfQkRHX1ZORVRfSERS
CS8qIGRlcHJlY2F0ZWQgYWxpYXMgKi8KICNkZWZpbmUgTkVUTUFQX0JER19ORVdJRgk2CS8qIGNy
ZWF0ZSBhIHZpcnR1YWwgcG9ydCAqLwogI2RlZmluZSBORVRNQVBfQkRHX0RFTElGCTcJLyogZGVz
dHJveSBhIHZpcnR1YWwgcG9ydCAqLworI2RlZmluZSBORVRNQVBfUFRfSE9TVF9DUkVBVEUJOAkv
KiBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgKi8KKyNkZWZpbmUgTkVUTUFQX1BUX0hPU1RfREVM
RVRFCTkJLyogZGVsZXRlIHB0bmV0bWFwIGt0aHJlYWRzICovCisjZGVmaW5lIE5FVE1BUF9CREdf
UE9MTElOR19PTgkxMAkvKiBkZWxldGUgcG9sbGluZyBrdGhyZWFkICovCisjZGVmaW5lIE5FVE1B
UF9CREdfUE9MTElOR19PRkYJMTEJLyogZGVsZXRlIHBvbGxpbmcga3RocmVhZCAqLworI2RlZmlu
ZSBORVRNQVBfVk5FVF9IRFJfR0VUCTEyICAgICAgLyogZ2V0IHRoZSBwb3J0IHZpcnRpby1uZXQt
aGRyIGxlbmd0aCAqLworI2RlZmluZSBORVRNQVBfUE9PTFNfSU5GT19HRVQJMTMJLyogZ2V0IG1l
bW9yeSBhbGxvY2F0b3IgcG9vbHMgaW5mbyAqLwogCXVpbnQxNl90CW5yX2FyZzE7CS8qIHJlc2Vy
dmUgZXh0cmEgcmluZ3MgaW4gTklPQ1JFR0lGICovCiAjZGVmaW5lIE5FVE1BUF9CREdfSE9TVAkJ
MQkvKiBhdHRhY2ggdGhlIGhvc3Qgc3RhY2sgb24gQVRUQUNIICovCiAKQEAgLTUyMSw3ICs1NTEs
NjEgQEAKICNkZWZpbmUgTlJfWkNPUFlfTU9OCTB4NDAwCiAvKiByZXF1ZXN0IGV4Y2x1c2l2ZSBh
Y2Nlc3MgdG8gdGhlIHNlbGVjdGVkIHJpbmdzICovCiAjZGVmaW5lIE5SX0VYQ0xVU0lWRQkweDgw
MAorLyogcmVxdWVzdCBwdG5ldG1hcCBob3N0IHN1cHBvcnQgKi8KKyNkZWZpbmUgTlJfUEFTU1RI
Uk9VR0hfSE9TVAlOUl9QVE5FVE1BUF9IT1NUIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgTlJf
UFRORVRNQVBfSE9TVAkweDEwMDAKKyNkZWZpbmUgTlJfUlhfUklOR1NfT05MWQkweDIwMDAKKyNk
ZWZpbmUgTlJfVFhfUklOR1NfT05MWQkweDQwMDAKKy8qIEFwcGxpY2F0aW9ucyBzZXQgdGhpcyBm
bGFnIGlmIHRoZXkgYXJlIGFibGUgdG8gZGVhbCB3aXRoIHZpcnRpby1uZXQgaGVhZGVycywKKyAq
IHRoYXQgaXMgc2VuZC9yZWNlaXZlIGZyYW1lcyB0aGF0IHN0YXJ0IHdpdGggYSB2aXJ0aW8tbmV0
IGhlYWRlci4KKyAqIElmIG5vdCBzZXQsIE5JT0NSRUdJRiB3aWxsIGZhaWwgd2l0aCBuZXRtYXAg
cG9ydHMgdGhhdCByZXF1aXJlIGFwcGxpY2F0aW9ucworICogdG8gdXNlIHRob3NlIGhlYWRlcnMu
IElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlCisgKiBORVRN
QVBfVk5FVF9IRFJfR0VUIGNvbW1hbmQgdG8gZmlndXJlIG91dCB0aGUgaGVhZGVyIGxlbmd0aC4g
Ki8KKyNkZWZpbmUgTlJfQUNDRVBUX1ZORVRfSERSCTB4ODAwMAorCisjZGVmaW5lCU5NX0JER19O
QU1FCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCisKKy8qCisgKiBX
aW5kb3dzIGRvZXMgbm90IGhhdmUgX0lPV1IoKS4gX0lPKCksIF9JT1coKSBhbmQgX0lPUigpIGFy
ZSBkZWZpbmVkCisgKiBpbiB3czJkZWYuaCBidXQgbm90IHN1cmUgaWYgdGhleSBhcmUgaW4gdGhl
IGZvcm0gd2UgbmVlZC4KKyAqIFhYWCBzbyB3ZSByZWRlZmluZSB0aGVtCisgKiBpbiBhIGNvbnZl
bmllbnQgd2F5IHRvIHVzZSBmb3IgRGV2aWNlSW9Db250cm9sIHNpZ25hdHVyZXMKKyAqLworI2lm
ZGVmIF9XSU4zMgorI3VuZGVmIF9JTwkvLyB3czJkZWYuaAorI2RlZmluZSBfV0lOX05NX0lPQ1RM
X1RZUEUgNDAwMDAKKyNkZWZpbmUgX0lPKF9jLCBfbikJQ1RMX0NPREUoX1dJTl9OTV9JT0NUTF9U
WVBFLCAoKF9uKSArIDB4ODAwKSAsIFwKKwkJTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NF
U1MgICkKKyNkZWZpbmUgX0lPX2RpcmVjdChfYywgX24pCUNUTF9DT0RFKF9XSU5fTk1fSU9DVExf
VFlQRSwgKChfbikgKyAweDgwMCkgLCBcCisJCU1FVEhPRF9PVVRfRElSRUNULCBGSUxFX0FOWV9B
Q0NFU1MgICkKKworI2RlZmluZSBfSU9XUihfYywgX24sIF9zKQlfSU8oX2MsIF9uKQorCisvKiBX
ZSBoYXZlc29tZSBpbnRlcm5hbCBzeXNjdGwgaW4gYWRkaXRpb24gdG8gdGhlIGV4dGVybmFsbHkg
dmlzaWJsZSBvbmVzICovCisjZGVmaW5lIE5FVE1BUF9NTUFQIF9JT19kaXJlY3QoJ2knLCAxNjAp
CS8vIG5vdGUgTUVUSE9EX09VVF9ESVJFQ1QKKyNkZWZpbmUgTkVUTUFQX1BPTEwgX0lPKCdpJywg
MTYyKQorCisvKiBhbmQgYWxzbyB0d28gc2V0c29ja29wdCBmb3Igc3lzY3RsIGVtdWxhdGlvbiAq
LworI2RlZmluZSBORVRNQVBfU0VUU09DS09QVCBfSU8oJ2knLCAxNDApCisjZGVmaW5lIE5FVE1B
UF9HRVRTT0NLT1BUIF9JTygnaScsIDE0MSkKKworCisvL1RoZXNlIGxpbmtuYW1lcyBhcmUgZm9y
IHRoZSBOZXRtYXAgQ29yZSBEcml2ZXIKKyNkZWZpbmUgTkVUTUFQX05UX0RFVklDRV9OQU1FCQkJ
TCJcXERldmljZVxcTkVUTUFQIgorI2RlZmluZSBORVRNQVBfRE9TX0RFVklDRV9OQU1FCQkJTCJc
XERvc0RldmljZXNcXG5ldG1hcCIKKworLy9EZWZpbml0aW9uIG9mIGEgc3RydWN0dXJlIHVzZWQg
dG8gcGFzcyBhIHZpcnR1YWwgYWRkcmVzcyB3aXRoaW4gYW4gSU9DVEwKK3R5cGVkZWYgc3RydWN0
IF9NRU1PUllfRU5UUlkgeworCVBWT0lEICAgICAgIHBVc2VybW9kZVZpcnR1YWxBZGRyZXNzOwor
fSBNRU1PUllfRU5UUlksICpQTUVNT1JZX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUE9MTF9S
RVFVRVNUX0RBVEEgeworCWludCBldmVudHM7CisJaW50IHRpbWVvdXQ7CisJaW50IHJldmVudHM7
Cit9IFBPTExfUkVRVUVTVF9EQVRBOwogCisjZW5kaWYgLyogX1dJTjMyICovCiAKIC8qCiAgKiBG
cmVlQlNEIHVzZXMgdGhlIHNpemUgdmFsdWUgZW1iZWRkZWQgaW4gdGhlIF9JT1dSIHRvIGRldGVy
bWluZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL25ldC9uZXRtYXBfdXNlci5oIC91c3Ivc3Jj
L3N5cy9uZXQvbmV0bWFwX3VzZXIuaAotLS0gdXNyL3NyYy9zeXMvbmV0L25ldG1hcF91c2VyLmgJ
MjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9uZXQv
bmV0bWFwX3VzZXIuaAkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1ODM1MTAwMCArMDAwMApAQCAtMSw1
ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBVbml2ZXJzaXRhYCBkaSBQ
aXNhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgVW5p
dmVyc2l0YWAgZGkgUGlzYQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjYsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL25ldC9uZXRtYXBfdXNlci5oIDI4NTM0OSAyMDE1LTA3LTEwIDA1
OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqCiAgKiBGdW5jdGlvbnMgYW5kIG1hY3Jv
cyB0byBtYW5pcHVsYXRlIG5ldG1hcCBzdHJ1Y3R1cmVzIGFuZCBwYWNrZXRzCiAgKiBpbiB1c2Vy
c3BhY2UuIFNlZSBuZXRtYXAoNCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCkBAIC02NSw5ICs2Niwz
MSBAQAogI2lmbmRlZiBfTkVUX05FVE1BUF9VU0VSX0hfCiAjZGVmaW5lIF9ORVRfTkVUTUFQX1VT
RVJfSF8KIAorI2RlZmluZSBORVRNQVBfREVWSUNFX05BTUUgIi9kZXYvbmV0bWFwIgorCisjaWZk
ZWYgX19DWUdXSU5fXworLyoKKyAqIHdlIGNhbiBjb21waWxlIHVzZXJzcGFjZSBhcHBzIHdpdGgg
ZWl0aGVyIGN5Z3dpbiBvciBtc3ZjLAorICogYW5kIHdlIHVzZSBfV0lOMzIgdG8gaWRlbnRpZnkg
d2luZG93cyBzcGVjaWZpYyBjb2RlCisgKi8KKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIF9XSU4z
MgorI2VuZGlmCS8qIF9XSU4zMiAqLworCisjZW5kaWYJLyogX19DWUdXSU5fXyAqLworCisjaWZk
ZWYgX1dJTjMyCisjdW5kZWYgTkVUTUFQX0RFVklDRV9OQU1FCisjZGVmaW5lIE5FVE1BUF9ERVZJ
Q0VfTkFNRSAiL3Byb2Mvc3lzL0Rvc0RldmljZXMvR2xvYmFsL25ldG1hcCIKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjaW5jbHVkZSA8V2luRGVmLmg+CisjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgor
I2VuZGlmIC8qIF9XSU4zMiAqLworCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPgkJLyogYXBwbGUgbmVlZHMgc29ja2FkZHIgKi8KICNpbmNsdWRlIDxuZXQvaWYu
aD4JCS8qIElGTkFNU0laICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2lmbmRlZiBsaWtlbHkK
ICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCkBAIC0xNzIsMTcg
KzE5NSwyMyBAQAogICAgIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RydWN0IG5tX3BrdGhkciB7
CS8qIHNhbWUgYXMgcGNhcF9wa3RoZHIgKi8KK3N0cnVjdCBubV9wa3RoZHIgewkvKiBmaXJzdCBw
YXJ0IGlzIHRoZSBzYW1lIGFzIHBjYXBfcGt0aGRyICovCiAJc3RydWN0IHRpbWV2YWwJdHM7CiAJ
dWludDMyX3QJY2FwbGVuOwogCXVpbnQzMl90CWxlbjsKKworCXVpbnQ2NF90IGZsYWdzOwkvKiBO
TV9NT1JFX1BLVFMgZXRjICovCisjZGVmaW5lIE5NX01PUkVfUEtUUwkxCisJc3RydWN0IG5tX2Rl
c2MgKmQ7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90OworCXVpbnQ4X3QgKmJ1ZjsKIH07CiAK
IHN0cnVjdCBubV9zdGF0IHsJLyogc2FtZSBhcyBwY2FwX3N0YXQJKi8KIAl1X2ludAlwc19yZWN2
OwogCXVfaW50CXBzX2Ryb3A7CiAJdV9pbnQJcHNfaWZkcm9wOwotI2lmZGVmIFdJTjMyCisjaWZk
ZWYgV0lOMzIgLyogWFhYIG9yIF9XSU4zMiA/ICovCiAJdV9pbnQJYnNfY2FwdDsKICNlbmRpZiAv
KiBXSU4zMiAqLwogfTsKQEAgLTI4NCwxMiArMzEzLDE0IEBACiAgKgkJLU5OCQliaW5kIGluZGl2
aWR1YWwgTklDIHJpbmcgcGFpcgogICoJCXtOTgkJYmluZCBtYXN0ZXIgc2lkZSBvZiBwaXBlIE5O
CiAgKgkJfU5OCQliaW5kIHNsYXZlIHNpZGUgb2YgcGlwZSBOTgotICoJCWEgc3VmZml4IHN0YXJ0
aW5nIHdpdGggKyBhbmQgdGhlIGZvbGxvd2luZyBmbGFncywKKyAqCQlhIHN1ZmZpeCBzdGFydGlu
ZyB3aXRoIC8gYW5kIHRoZSBmb2xsb3dpbmcgZmxhZ3MsCiAgKgkJaW4gYW55IG9yZGVyOgogICoJ
CXgJCWV4Y2x1c2l2ZSBhY2Nlc3MKICAqCQl6CQl6ZXJvIGNvcHkgbW9uaXRvcgogICoJCXQJCW1v
bml0b3IgdHggc2lkZQogICoJCXIJCW1vbml0b3Igcnggc2lkZQorICoJCVIJCWJpbmQgb25seSBS
WCByaW5nKHMpCisgKgkJVAkJYmluZCBvbmx5IFRYIHJpbmcocykKICAqCiAgKiByZXEJCXByb3Zp
ZGVzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBubXJlcSBiZWZvcmUgcGFyc2luZyBpZm5hbWUuCiAg
KgkJUmVtZW1iZXIgdGhhdCB0aGUgaWZuYW1lIHBhcnNpbmcgd2lsbCBvdmVycmlkZSB0aGUgcmlu
ZwpAQCAtMzI5LDYgKzM2MCwxMyBAQAogc3RhdGljIGludCBubV9jbG9zZShzdHJ1Y3Qgbm1fZGVz
YyAqKTsKIAogLyoKKyAqIG5tX21tYXAoKSAgICBkbyBtbWFwIG9yIGluaGVyaXQgZnJvbSBwYXJl
bnQgaWYgdGhlIG5yX2FyZzIKKyAqICAgICAgICAgICAgICAobWVtb3J5IGJsb2NrKSBtYXRjaGVz
LgorICovCisKK3N0YXRpYyBpbnQgbm1fbW1hcChzdHJ1Y3Qgbm1fZGVzYyAqLCBjb25zdCBzdHJ1
Y3Qgbm1fZGVzYyAqKTsKKworLyoKICAqIG5tX2luamVjdCgpIGlzIHRoZSBzYW1lIGFzIHBjYXBf
aW5qZWN0KCkKICAqIG5tX2Rpc3BhdGNoKCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9kaXNwYXRjaCgp
CiAgKiBubV9uZXh0cGt0KCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9uZXh0KCkKQEAgLTMzOCwxMyAr
Mzc2LDI0NyBAQAogc3RhdGljIGludCBubV9kaXNwYXRjaChzdHJ1Y3Qgbm1fZGVzYyAqLCBpbnQs
IG5tX2NiX3QsIHVfY2hhciAqKTsKIHN0YXRpYyB1X2NoYXIgKm5tX25leHRwa3Qoc3RydWN0IG5t
X2Rlc2MgKiwgc3RydWN0IG5tX3BrdGhkciAqKTsKIAorI2lmZGVmIF9XSU4zMgorCitpbnRwdHJf
dCBfZ2V0X29zZmhhbmRsZShpbnQpOyAvKiBkZWZpbmVkIGluIGlvLmggaW4gd2luZG93cyAqLwor
CisvKgorICogSW4gd2luZG93cyB3ZSBkbyBub3QgaGF2ZSB5ZXQgbmF0aXZlIHBvbGwgc3VwcG9y
dCwgc28gd2Uga2VlcCB0cmFjaworICogb2YgZmlsZSBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRv
IG5ldG1hcCBwb3J0cyB0byBlbXVsYXRlIHBvbGwgb24KKyAqIHRoZW0gYW5kIGZhbGwgYmFjayBv
biByZWd1bGFyIHBvbGwgb24gb3RoZXIgZmlsZSBkZXNjcmlwdG9ycy4KKyAqLworc3RydWN0IHdp
bl9uZXRtYXBfZmRfbGlzdCB7CisJc3RydWN0IHdpbl9uZXRtYXBfZmRfbGlzdCAqbmV4dDsKKwlp
bnQgd2luX25ldG1hcF9mZDsKKwlIQU5ETEUgd2luX25ldG1hcF9oYW5kbGU7Cit9OworCisvKgor
ICogbGlzdCBoZWFkIGNvbnRhaW5pbmcgYWxsIHRoZSBuZXRtYXAgb3BlbmVkIGZkIGFuZCB0aGVp
cgorICogd2luZG93cyBIQU5ETEUgY291bnRlcnBhcnRzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd2lu
X25ldG1hcF9mZF9saXN0ICp3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsKKworc3RhdGljIHZvaWQK
K3dpbl9pbnNlcnRfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s
aXN0ICpjdXJyOworCisJZm9yIChjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0KSB7CisJCWlmIChmZCA9PSBjdXJyLT53aW5fbmV0bWFwX2ZkKSB7
CisJCQlyZXR1cm47CisJCX0KKwl9CisJY3VyciA9IGNhbGxvYygxLCBzaXplb2YoKmN1cnIpKTsK
KwljdXJyLT5uZXh0ID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJY3Vyci0+d2luX25ldG1h
cF9mZCA9IGZkOworCWN1cnItPndpbl9uZXRtYXBfaGFuZGxlID0gSW50VG9QdHIoX2dldF9vc2Zo
YW5kbGUoZmQpKTsKKwl3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZCA9IGN1cnI7Cit9CisKK3ZvaWQK
K3dpbl9yZW1vdmVfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s
aXN0ICpjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJc3RydWN0IHdpbl9uZXRtYXBf
ZmRfbGlzdCAqcHJldiA9IE5VTEw7CisJZm9yICg7IGN1cnIgOyBwcmV2ID0gY3VyciwgY3VyciA9
IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkICE9IGN1cnItPndpbl9uZXRtYXBfZmQpCisJCQljb250
aW51ZTsKKwkJLyogZm91bmQgdGhlIGVudHJ5ICovCisJCWlmIChwcmV2ID09IE5VTEwpIHsgLyog
d2UgYXJlIGZyZWVpbmcgdGhlIGZpcnN0IGVudHJ5ICovCisJCQl3aW5fbmV0bWFwX2ZkX2xpc3Rf
aGVhZCA9IGN1cnItPm5leHQ7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4
dDsKKwkJfQorCQlmcmVlKGN1cnIpOworCQlicmVhazsKKwl9Cit9CisKKworSEFORExFCit3aW5f
Z2V0X25ldG1hcF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCB3aW5fbmV0bWFwX2ZkX2xpc3Qg
KmN1cnI7CisKKwlmb3IgKGN1cnIgPSB3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkID09IGN1cnItPndpbl9uZXRtYXBfZmQpIHsKKwkJ
CXJldHVybiBjdXJyLT53aW5fbmV0bWFwX2hhbmRsZTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsK
K30KKworLyoKKyAqIHdlIG5lZWQgdG8gd3JhcCBpb2N0bCBhbmQgbW1hcCwgYXQgbGVhc3QgZm9y
IHRoZSBuZXRtYXAgZmlsZSBkZXNjcmlwdG9ycworICovCisKKy8qCisgKiB1c2UgdGhpcyBmdW5j
dGlvbiBvbmx5IGZyb20gbmV0bWFwX3VzZXIuaCBpbnRlcm5hbCBmdW5jdGlvbnMKKyAqIHNhbWUg
YXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0
aWMgaW50Cit3aW5fbm1faW9jdGxfaW50ZXJuYWwoSEFORExFIGgsIGludDMyX3QgY3RsQ29kZSwg
dm9pZCAqYXJnKQoreworCURXT1JEIGJSZXR1cm4gPSAwLCBzekluLCBzek91dDsKKwlCT09MIGlv
Y3RsUmV0dXJuU3RhdHVzOworCXZvaWQgKmluUGFyYW0gPSBhcmcsICpvdXRQYXJhbSA9IGFyZzsK
KworCXN3aXRjaCAoY3RsQ29kZSkgeworCWNhc2UgTkVUTUFQX1BPTEw6CisJCXN6SW4gPSBzaXpl
b2YoUE9MTF9SRVFVRVNUX0RBVEEpOworCQlzek91dCA9IHNpemVvZihQT0xMX1JFUVVFU1RfREFU
QSk7CisJCWJyZWFrOworCWNhc2UgTkVUTUFQX01NQVA6CisJCXN6SW4gPSAwOworCQlzek91dCA9
IHNpemVvZih2b2lkKik7CisJCWluUGFyYW0gPSBOVUxMOyAvKiBub3RoaW5nIG9uIGlucHV0ICov
CisJCWJyZWFrOworCWNhc2UgTklPQ1RYU1lOQzoKKwljYXNlIE5JT0NSWFNZTkM6CisJCXN6SW4g
PSAwOworCQlzek91dCA9IDA7CisJCWJyZWFrOworCWNhc2UgTklPQ1JFR0lGOgorCQlzekluID0g
c2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJCXN6T3V0ID0gc2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJ
CWJyZWFrOworCWNhc2UgTklPQ0NPTkZJRzoKKwkJRCgidW5zdXBwb3J0ZWQgTklPQ0NPTkZJRyEi
KTsKKwkJcmV0dXJuIC0xOworCisJZGVmYXVsdDogLyogYSByZWd1bGFyIGlvY3RsICovCisJCUQo
ImludmFsaWQgaW9jdGwgJXggb24gbmV0bWFwIGZkIiwgY3RsQ29kZSk7CisJCXJldHVybiAtMTsK
Kwl9CisKKwlpb2N0bFJldHVyblN0YXR1cyA9IERldmljZUlvQ29udHJvbChoLAorCQkJCWN0bENv
ZGUsIGluUGFyYW0sIHN6SW4sCisJCQkJb3V0UGFyYW0sIHN6T3V0LAorCQkJCSZiUmV0dXJuLCBO
VUxMKTsKKwkvLyBYWFggbm90ZSB3aW5kb3dzIHJldHVybnMgMCBvbiBlcnJvciBvciBhc3luYyBj
YWxsLCAxIG9uIHN1Y2Nlc3MKKwkvLyB3ZSBjb3VsZCBjYWxsIEdldExhc3RFcnJvcigpIHRvIGZp
Z3VyZSBvdXQgd2hhdCBoYXBwZW5lZAorCXJldHVybiBpb2N0bFJldHVyblN0YXR1cyA/IDAgOiAt
MTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgd2hhdCBtdXN0IGJlIGNhbGxlZCBmcm9t
IHVzZXItc3BhY2UgcHJvZ3JhbXMKKyAqIHNhbWUgYXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNj
ZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50Cit3aW5fbm1faW9jdGwoaW50IGZk
LCBpbnQzMl90IGN0bENvZGUsIHZvaWQgKmFyZykKK3sKKwlIQU5ETEUgaCA9IHdpbl9nZXRfbmV0
bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7CisJCXJldHVybiBpb2N0bChmZCwg
Y3RsQ29kZSwgYXJnKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gd2luX25tX2lvY3RsX2ludGVybmFs
KGgsIGN0bENvZGUsIGFyZyk7CisJfQorfQorCisjZGVmaW5lIGlvY3RsIHdpbl9ubV9pb2N0bCAv
KiBmcm9tIG5vdyBvbiwgd2l0aGluIHRoaXMgZmlsZSAuLi4gKi8KKworLyoKKyAqIFdlIGNhbm5v
dCB1c2UgdGhlIG5hdGl2ZSBtbWFwIG9uIHdpbmRvd3MKKyAqIFRoZSBvbmx5IHBhcmFtZXRlciB1
c2VkIGlzICJmZCIsIHRoZSBvdGhlciBvbmVzIGFyZSBqdXN0IGRlY2xhcmVkIHRvCisgKiBtYWtl
IHRoaXMgc2lnbmF0dXJlIGNvbXBhcmFibGUgdG8gdGhlIEZyZWVCU0QvTGludXggb25lCisgKi8K
K3N0YXRpYyB2b2lkICoKK3dpbjMyX21tYXBfZW11bGF0ZWQodm9pZCAqYWRkciwgc2l6ZV90IGxl
bmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBpbnQzMl90IG9mZnNldCkKK3sKKwlI
QU5ETEUgaCA9IHdpbl9nZXRfbmV0bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7
CisJCXJldHVybiBtbWFwKGFkZHIsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOwor
CX0gZWxzZSB7CisJCU1FTU9SWV9FTlRSWSByZXQ7CisKKwkJcmV0dXJuIHdpbl9ubV9pb2N0bF9p
bnRlcm5hbChoLCBORVRNQVBfTU1BUCwgJnJldCkgPworCQkJTlVMTCA6IHJldC5wVXNlcm1vZGVW
aXJ0dWFsQWRkcmVzczsKKwl9Cit9CisKKyNkZWZpbmUgbW1hcCB3aW4zMl9tbWFwX2VtdWxhdGVk
CisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPiAvKiBYWFggbmVlZGVkIHRvIHVzZSB0aGUgc3RydWN0
dXJlIHBvbGxmZCAqLworCitzdGF0aWMgaW50Cit3aW5fbm1fcG9sbChzdHJ1Y3QgcG9sbGZkICpm
ZHMsIGludCBuZmRzLCBpbnQgdGltZW91dCkKK3sKKwlIQU5ETEUgaDsKKworCWlmIChuZmRzICE9
IDEgfHwgZmRzID09IE5VTEwgfHwgKGggPSB3aW5fZ2V0X25ldG1hcF9oYW5kbGUoZmRzLT5mZCkp
ID09IE5VTEwpIHs7CisJCXJldHVybiBwb2xsKGZkcywgbmZkcywgdGltZW91dCk7CisJfSBlbHNl
IHsKKwkJUE9MTF9SRVFVRVNUX0RBVEEgcHJkOworCisJCXByZC50aW1lb3V0ID0gdGltZW91dDsK
KwkJcHJkLmV2ZW50cyA9IGZkcy0+ZXZlbnRzOworCisJCXdpbl9ubV9pb2N0bF9pbnRlcm5hbCho
LCBORVRNQVBfUE9MTCwgJnByZCk7CisJCWlmICgocHJkLnJldmVudHMgPT0gUE9MTEVSUikgfHwg
KHByZC5yZXZlbnRzID09IFNUQVRVU19USU1FT1VUKSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJ
CXJldHVybiAxOworCX0KK30KKworI2RlZmluZSBwb2xsIHdpbl9ubV9wb2xsCisKK3N0YXRpYyBp
bnQKK3dpbl9ubV9vcGVuKGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisKKwlpZiAoc3Ry
Y21wKHBhdGhuYW1lLCBORVRNQVBfREVWSUNFX05BTUUpID09IDApIHsKKwkJaW50IGZkID0gb3Bl
bihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CisJCWlmIChmZCA8IDApIHsKKwkJCXJldHVy
biAtMTsKKwkJfQorCisJCXdpbl9pbnNlcnRfZmRfcmVjb3JkKGZkKTsKKwkJcmV0dXJuIGZkOwor
CX0gZWxzZSB7CisJCXJldHVybiBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisJfQorfQorCisjZGVm
aW5lIG9wZW4gd2luX25tX29wZW4KKworc3RhdGljIGludAord2luX25tX2Nsb3NlKGludCBmZCkK
K3sKKwlpZiAoZmQgIT0gLTEpIHsKKwkJY2xvc2UoZmQpOworCQlpZiAod2luX2dldF9uZXRtYXBf
aGFuZGxlKGZkKSAhPSBOVUxMKSB7CisJCQl3aW5fcmVtb3ZlX2ZkX3JlY29yZChmZCk7CisJCX0K
Kwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2xvc2Ugd2luX25tX2Nsb3NlCisKKyNlbmRp
ZiAvKiBfV0lOMzIgKi8KKworc3RhdGljIGludAorbm1faXNfaWRlbnRpZmllcihjb25zdCBjaGFy
ICpzLCBjb25zdCBjaGFyICplKQoreworCWZvciAoOyBzICE9IGU7IHMrKykgeworCQlpZiAoIWlz
YWxudW0oKnMpICYmICpzICE9ICdfJykgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1
cm4gMTsKK30KIAogLyoKICAqIFRyeSB0byBvcGVuLCByZXR1cm4gZGVzY3JpcHRvciBpZiBzdWNj
ZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4KICAqIEFuIGludmFsaWQgbmV0bWFwIG5hbWUgd2lsbCBy
ZXR1cm4gZXJybm8gPSAwOwogICogWW91IGNhbiBwYXNzIGEgcG9pbnRlciB0byBhIHByZS1maWxs
ZWQgbm1fZGVzYyB0byBhZGQgc3BlY2lhbAogICogcGFyYW1ldGVycy4gRmxhZ3MgaXMgdXNlZCBh
cyBmb2xsb3dzCi0gKiBOTV9PUEVOX05PX01NQVAJdXNlIHRoZSBtZW1vcnkgZnJvbSBhcmcsIG9u
bHkKKyAqIE5NX09QRU5fTk9fTU1BUAl1c2UgdGhlIG1lbW9yeSBmcm9tIGFyZywgb25seSBYWFgg
YXZvaWQgbW1hcAogICoJCQlpZiB0aGUgbnJfYXJnMiAobWVtb3J5IGJsb2NrKSBtYXRjaGVzLgog
ICogTk1fT1BFTl9BUkcxCQl1c2UgcmVxLm5yX2FyZzEgZnJvbSBhcmcKICAqIE5NX09QRU5fQVJH
MgkJdXNlIHJlcS5ucl9hcmcyIGZyb20gYXJnCkBAIC0zNTksMjAgKzYzMSw0OSBAQAogCXVfaW50
IG5hbWVsZW47CiAJdWludDMyX3QgbnJfcmluZ2lkID0gMCwgbnJfZmxhZ3MsIG5yX3JlZzsKIAlj
b25zdCBjaGFyICpwb3J0ID0gTlVMTDsKKwljb25zdCBjaGFyICp2cG5hbWUgPSBOVUxMOwogI2Rl
ZmluZSBNQVhFUlJNU0cgODAKIAljaGFyIGVycm1zZ1tNQVhFUlJNU0ddID0gIiI7Ci0JZW51bSB7
IFBfU1RBUlQsIFBfUk5HU0ZYT0ssIFBfR0VUTlVNLCBQX0ZMQUdTLCBQX0ZMQUdTT0sgfSBwX3N0
YXRlOworCWVudW0geyBQX1NUQVJULCBQX1JOR1NGWE9LLCBQX0dFVE5VTSwgUF9GTEFHUywgUF9G
TEFHU09LLCBQX01FTUlEIH0gcF9zdGF0ZTsKKwlpbnQgaXNfdmFsZTsKIAlsb25nIG51bTsKKwl1
aW50MTZfdCBucl9hcmcyID0gMDsKIAotCWlmIChzdHJuY21wKGlmbmFtZSwgIm5ldG1hcDoiLCA3
KSAmJiBzdHJuY21wKGlmbmFtZSwgInZhbGUiLCA0KSkgeworCWlmIChzdHJuY21wKGlmbmFtZSwg
Im5ldG1hcDoiLCA3KSAmJgorCQkJc3RybmNtcChpZm5hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4o
Tk1fQkRHX05BTUUpKSkgewogCQllcnJubyA9IDA7IC8qIG5hbWUgbm90IHJlY29nbmlzZWQsIG5v
dCBhbiBlcnJvciAqLwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKGlmbmFtZVswXSA9PSAnbicp
CisKKwlpc192YWxlID0gKGlmbmFtZVswXSA9PSAndicpOworCWlmIChpc192YWxlKSB7CisJCXBv
cnQgPSBpbmRleChpZm5hbWUsICc6Jyk7CisJCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJCXNucHJp
bnRmKGVycm1zZywgTUFYRVJSTVNHLAorCQkJCSAibWlzc2luZyAnOicgaW4gdmFsZSBuYW1lIik7
CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAoIW5tX2lzX2lkZW50aWZpZXIoaWZuYW1lICsg
NCwgcG9ydCkpIHsKKwkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBicmlk
Z2UgbmFtZSIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJdnBuYW1lID0gKytwb3J0OworCX0g
ZWxzZSB7CiAJCWlmbmFtZSArPSA3OworCQlwb3J0ID0gaWZuYW1lOworCX0KKwogCS8qIHNjYW4g
Zm9yIGEgc2VwYXJhdG9yICovCi0JZm9yIChwb3J0ID0gaWZuYW1lOyAqcG9ydCAmJiAhaW5kZXgo
Ii0qXnt9LyIsICpwb3J0KTsgcG9ydCsrKQorCWZvciAoOyAqcG9ydCAmJiAhaW5kZXgoIi0qXnt9
L0AiLCAqcG9ydCk7IHBvcnQrKykKIAkJOworCisJaWYgKGlzX3ZhbGUgJiYgIW5tX2lzX2lkZW50
aWZpZXIodnBuYW1lLCBwb3J0KSkgeworCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImlu
dmFsaWQgYnJpZGdlIHBvcnQgbmFtZSIpOworCQlnb3RvIGZhaWw7CisJfQorCiAJbmFtZWxlbiA9
IHBvcnQgLSBpZm5hbWU7CiAJaWYgKG5hbWVsZW4gPj0gc2l6ZW9mKGQtPnJlcS5ucl9uYW1lKSkg
ewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm5hbWUgdG9vIGxvbmciKTsKQEAgLTQw
Nyw2ICs3MDgsOSBAQAogCQkJY2FzZSAnLyc6IC8qIHN0YXJ0IG9mIGZsYWdzICovCiAJCQkJcF9z
dGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzogLyogc3RhcnQgb2YgbWVt
aWQgKi8KKwkJCQlwX3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJ
CQkJc25wcmludGYoZXJybXNnLCBNQVhFUlJNU0csICJ1bmtub3duIG1vZGlmaWVyOiAnJWMnIiwg
KnBvcnQpOwogCQkJCWdvdG8gZmFpbDsKQEAgLTQxOCw2ICs3MjIsOSBAQAogCQkJY2FzZSAnLyc6
CiAJCQkJcF9zdGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzoKKwkJCQlw
X3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJc25wcmludGYo
ZXJybXNnLCBNQVhFUlJNU0csICJ1bmV4cGVjdGVkIGNoYXJhY3RlcjogJyVjJyIsICpwb3J0KTsK
IAkJCQlnb3RvIGZhaWw7CkBAIC00MzYsNiArNzQzLDExIEBACiAJCQlicmVhazsKIAkJY2FzZSBQ
X0ZMQUdTOgogCQljYXNlIFBfRkxBR1NPSzoKKwkJCWlmICgqcG9ydCA9PSAnQCcpIHsKKwkJCQlw
b3J0Kys7CisJCQkJcF9zdGF0ZSA9IFBfTUVNSUQ7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzd2l0
Y2ggKCpwb3J0KSB7CiAJCQljYXNlICd4JzoKIAkJCQlucl9mbGFncyB8PSBOUl9FWENMVVNJVkU7
CkBAIC00NDksNiArNzYxLDEyIEBACiAJCQljYXNlICdyJzoKIAkJCQlucl9mbGFncyB8PSBOUl9N
T05JVE9SX1JYOwogCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJbnJfZmxhZ3MgfD0gTlJf
UlhfUklOR1NfT05MWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCW5yX2ZsYWdzIHw9
IE5SX1RYX1JJTkdTX09OTFk7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXNucHJpbnRm
KGVycm1zZywgTUFYRVJSTVNHLCAidW5yZWNvZ25pemVkIGZsYWc6ICclYyciLCAqcG9ydCk7CiAJ
CQkJZ290byBmYWlsOwpAQCAtNDU2LDEyICs3NzQsMzAgQEAKIAkJCXBvcnQrKzsKIAkJCXBfc3Rh
dGUgPSBQX0ZMQUdTT0s7CiAJCQlicmVhazsKKwkJY2FzZSBQX01FTUlEOgorCQkJaWYgKG5yX2Fy
ZzIgIT0gMCkgeworCQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiZG91YmxlIHNldHRp
bmcgb2YgbWVtaWQiKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQludW0gPSBzdHJ0b2wocG9y
dCwgKGNoYXIgKiopJnBvcnQsIDEwKTsKKwkJCWlmIChudW0gPD0gMCkgeworCQkJCXNucHJpbnRm
KGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBtZW1pZCAlbGQsIG11c3QgYmUgPjAiLCBudW0p
OworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCW5yX2FyZzIgPSBudW07CisJCQlwX3N0YXRlID0g
UF9STkdTRlhPSzsKKwkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChwX3N0YXRlICE9IFBfU1RBUlQg
JiYgcF9zdGF0ZSAhPSBQX1JOR1NGWE9LICYmIHBfc3RhdGUgIT0gUF9GTEFHU09LKSB7CiAJCXNu
cHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAidW5leHBlY3RlZCBlbmQgb2YgcG9ydCBuYW1lIik7
CiAJCWdvdG8gZmFpbDsKIAl9CisJaWYgKChucl9mbGFncyAmIE5SX1pDT1BZX01PTikgJiYKKwkg
ICAhKG5yX2ZsYWdzICYgKE5SX01PTklUT1JfVFh8TlJfTU9OSVRPUl9SWCkpKSB7CisJCXNucHJp
bnRmKGVycm1zZywgTUFYRVJSTVNHLCAiJ3onIHVzZWQgYnV0IG5laXRoZXIgJ3InLCBub3IgJ3Qn
IGZvdW5kIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJTkQoImZsYWdzOiAlcyAlcyAlcyAlcyIsCiAJ
CQkobnJfZmxhZ3MgJiBOUl9FWENMVVNJVkUpID8gIkVYQ0xVU0lWRSIgOiAiIiwKIAkJCShucl9m
bGFncyAmIE5SX1pDT1BZX01PTikgPyAiWkNPUFlfTU9OIiA6ICIiLApAQCAtNDc0LDcgKzgxMCw3
IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlkLT5zZWxmID0gZDsJLyogc2V0IHRoaXMgZWFybHkg
c28gbm1fY2xvc2UoKSB3b3JrcyAqLwotCWQtPmZkID0gb3BlbigiL2Rldi9uZXRtYXAiLCBPX1JE
V1IpOworCWQtPmZkID0gb3BlbihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CiAJaWYgKGQt
PmZkIDwgMCkgewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImNhbm5vdCBvcGVuIC9k
ZXYvbmV0bWFwOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAJCWdvdG8gZmFpbDsKQEAgLTQ4Nyw3
ICs4MjMsOSBAQAogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBvdmVycmlkZGVuIGJ5IGlmbmFtZSBh
bmQgZmxhZ3MgcHJvY2Vzc2luZyAqLwogCWQtPnJlcS5ucl9yaW5naWQgfD0gbnJfcmluZ2lkOwot
CWQtPnJlcS5ucl9mbGFncyA9IG5yX2ZsYWdzOworCWQtPnJlcS5ucl9mbGFncyB8PSBucl9mbGFn
czsKKwlpZiAobnJfYXJnMikKKwkJZC0+cmVxLm5yX2FyZzIgPSBucl9hcmcyOwogCW1lbWNweShk
LT5yZXEubnJfbmFtZSwgaWZuYW1lLCBuYW1lbGVuKTsKIAlkLT5yZXEubnJfbmFtZVtuYW1lbGVu
XSA9ICdcMCc7CiAJLyogb3B0aW9uYWxseSBpbXBvcnQgaW5mbyBmcm9tIHBhcmVudCAqLwpAQCAt
NTI5LDMxICs4NjcsMTAgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmIChJU19ORVRNQVBfREVT
QyhwYXJlbnQpICYmIHBhcmVudC0+bWVtICYmCi0JICAgIHBhcmVudC0+cmVxLm5yX2FyZzIgPT0g
ZC0+cmVxLm5yX2FyZzIpIHsKLQkJLyogZG8gbm90IG1tYXAsIGluaGVyaXQgZnJvbSBwYXJlbnQg
Ki8KLQkJZC0+bWVtc2l6ZSA9IHBhcmVudC0+bWVtc2l6ZTsKLQkJZC0+bWVtID0gcGFyZW50LT5t
ZW07Ci0JfSBlbHNlIHsKLQkJLyogWFhYIFRPRE86IGNoZWNrIGlmIG1lbXNpemUgaXMgdG9vIGxh
cmdlIChvciB0aGVyZSBpcyBvdmVyZmxvdykgKi8KLQkJZC0+bWVtc2l6ZSA9IGQtPnJlcS5ucl9t
ZW1zaXplOwotCQlkLT5tZW0gPSBtbWFwKDAsIGQtPm1lbXNpemUsIFBST1RfV1JJVEUgfCBQUk9U
X1JFQUQsIE1BUF9TSEFSRUQsCi0JCQkJZC0+ZmQsIDApOwotCQlpZiAoZC0+bWVtID09IE1BUF9G
QUlMRUQpIHsKLQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAibW1hcCBmYWlsZWQ6ICVz
Iiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQlkLT5kb25lX21tYXAg
PSAxOwotCX0KLQl7Ci0JCXN0cnVjdCBuZXRtYXBfaWYgKm5pZnAgPSBORVRNQVBfSUYoZC0+bWVt
LCBkLT5yZXEubnJfb2Zmc2V0KTsKLQkJc3RydWN0IG5ldG1hcF9yaW5nICpyID0gTkVUTUFQX1JY
UklORyhuaWZwLCApOwotCi0JCSooc3RydWN0IG5ldG1hcF9pZiAqKikodWludHB0cl90KSYoZC0+
bmlmcCkgPSBuaWZwOwotCQkqKHN0cnVjdCBuZXRtYXBfcmluZyAqKikodWludHB0cl90KSZkLT5z
b21lX3JpbmcgPSByOwotCQkqKHZvaWQgKiopKHVpbnRwdHJfdCkmZC0+YnVmX3N0YXJ0ID0gTkVU
TUFQX0JVRihyLCAwKTsKLQkJKih2b2lkICoqKSh1aW50cHRyX3QpJmQtPmJ1Zl9lbmQgPQotCQkJ
KGNoYXIgKilkLT5tZW0gKyBkLT5tZW1zaXplOworICAgICAgICAvKiBpZiBwYXJlbnQgaXMgZGVm
aW5lZCwgZG8gbm1fbW1hcCgpIGV2ZW4gaWYgTk1fT1BFTl9OT19NTUFQIGlzIHNldCAqLworCWlm
ICgoIShuZXdfZmxhZ3MgJiBOTV9PUEVOX05PX01NQVApIHx8IHBhcmVudCkgJiYgbm1fbW1hcChk
LCBwYXJlbnQpKSB7CisJICAgICAgICBzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm1tYXAg
ZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlucl9y
ZWcgPSBkLT5yZXEubnJfZmxhZ3MgJiBOUl9SRUdfTUFTSzsKQEAgLTYyNiwxNCArOTQzLDU0IEBA
CiAJCXJldHVybiBFSU5WQUw7CiAJaWYgKGQtPmRvbmVfbW1hcCAmJiBkLT5tZW0pCiAJCW11bm1h
cChkLT5tZW0sIGQtPm1lbXNpemUpOwotCWlmIChkLT5mZCAhPSAtMSkKKwlpZiAoZC0+ZmQgIT0g
LTEpIHsKIAkJY2xvc2UoZC0+ZmQpOworCX0KKwogCWJ6ZXJvKGQsIHNpemVvZigqZCkpOwogCWZy
ZWUoZCk7CiAJcmV0dXJuIDA7CiB9CiAKIAorc3RhdGljIGludAorbm1fbW1hcChzdHJ1Y3Qgbm1f
ZGVzYyAqZCwgY29uc3Qgc3RydWN0IG5tX2Rlc2MgKnBhcmVudCkKK3sKKwkvL1hYWCBUT0RPOiBj
aGVjayBpZiBtbWFwIGlzIGFscmVhZHkgZG9uZQorCisJaWYgKElTX05FVE1BUF9ERVNDKHBhcmVu
dCkgJiYgcGFyZW50LT5tZW0gJiYKKwkgICAgcGFyZW50LT5yZXEubnJfYXJnMiA9PSBkLT5yZXEu
bnJfYXJnMikgeworCQkvKiBkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCAqLworCQlE
KCJkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCIpOworCQlkLT5tZW1zaXplID0gcGFy
ZW50LT5tZW1zaXplOworCQlkLT5tZW0gPSBwYXJlbnQtPm1lbTsKKwl9IGVsc2UgeworCQkvKiBY
WFggVE9ETzogY2hlY2sgaWYgbWVtc2l6ZSBpcyB0b28gbGFyZ2UgKG9yIHRoZXJlIGlzIG92ZXJm
bG93KSAqLworCQlkLT5tZW1zaXplID0gZC0+cmVxLm5yX21lbXNpemU7CisJCWQtPm1lbSA9IG1t
YXAoMCwgZC0+bWVtc2l6ZSwgUFJPVF9XUklURSB8IFBST1RfUkVBRCwgTUFQX1NIQVJFRCwKKwkJ
CQlkLT5mZCwgMCk7CisJCWlmIChkLT5tZW0gPT0gTUFQX0ZBSUxFRCkgeworCQkJZ290byBmYWls
OworCQl9CisJCWQtPmRvbmVfbW1hcCA9IDE7CisJfQorCXsKKwkJc3RydWN0IG5ldG1hcF9pZiAq
bmlmcCA9IE5FVE1BUF9JRihkLT5tZW0sIGQtPnJlcS5ucl9vZmZzZXQpOworCQlzdHJ1Y3QgbmV0
bWFwX3JpbmcgKnIgPSBORVRNQVBfUlhSSU5HKG5pZnAsICk7CisKKwkJKihzdHJ1Y3QgbmV0bWFw
X2lmICoqKSh1aW50cHRyX3QpJihkLT5uaWZwKSA9IG5pZnA7CisJCSooc3RydWN0IG5ldG1hcF9y
aW5nICoqKSh1aW50cHRyX3QpJmQtPnNvbWVfcmluZyA9IHI7CisJCSoodm9pZCAqKikodWludHB0
cl90KSZkLT5idWZfc3RhcnQgPSBORVRNQVBfQlVGKHIsIDApOworCQkqKHZvaWQgKiopKHVpbnRw
dHJfdCkmZC0+YnVmX2VuZCA9CisJCQkoY2hhciAqKWQtPm1lbSArIGQtPm1lbXNpemU7CisJfQor
CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmV0dXJuIEVJTlZBTDsKK30KKwogLyoKICAqIFNhbWUg
cHJvdG90eXBlIGFzIHBjYXBfaW5qZWN0KCksIG9ubHkgbmVlZCB0byBjYXN0LgogICovCkBAIC02
NzQsNiArMTAzMSw5IEBACiB7CiAJaW50IG4gPSBkLT5sYXN0X3J4X3JpbmcgLSBkLT5maXJzdF9y
eF9yaW5nICsgMTsKIAlpbnQgYywgZ290ID0gMCwgcmkgPSBkLT5jdXJfcnhfcmluZzsKKwlkLT5o
ZHIuYnVmID0gTlVMTDsKKwlkLT5oZHIuZmxhZ3MgPSBOTV9NT1JFX1BLVFM7CisJZC0+aGRyLmQg
PSBkOwogCiAJaWYgKGNudCA9PSAwKQogCQljbnQgPSAtMTsKQEAgLTY5MCwxNyArMTA1MCwyNCBA
QAogCQkJcmkgPSBkLT5maXJzdF9yeF9yaW5nOwogCQlyaW5nID0gTkVUTUFQX1JYUklORyhkLT5u
aWZwLCByaSk7CiAJCWZvciAoIDsgIW5tX3JpbmdfZW1wdHkocmluZykgJiYgY250ICE9IGdvdDsg
Z290KyspIHsKLQkJCXVfaW50IGkgPSByaW5nLT5jdXI7Ci0JCQl1X2ludCBpZHggPSByaW5nLT5z
bG90W2ldLmJ1Zl9pZHg7Ci0JCQl1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilORVRNQVBfQlVGKHJp
bmcsIGlkeCk7Ci0KKwkJCXVfaW50IGlkeCwgaTsKKwkJCWlmIChkLT5oZHIuYnVmKSB7IC8qIGZy
b20gcHJldmlvdXMgcm91bmQgKi8KKwkJCQljYihhcmcsICZkLT5oZHIsIGQtPmhkci5idWYpOwor
CQkJfQorCQkJaSA9IHJpbmctPmN1cjsKKwkJCWlkeCA9IHJpbmctPnNsb3RbaV0uYnVmX2lkeDsK
KwkJCWQtPmhkci5zbG90ID0gJnJpbmctPnNsb3RbaV07CisJCQlkLT5oZHIuYnVmID0gKHVfY2hh
ciAqKU5FVE1BUF9CVUYocmluZywgaWR4KTsKIAkJCS8vIF9fYnVpbHRpbl9wcmVmZXRjaChidWYp
OwogCQkJZC0+aGRyLmxlbiA9IGQtPmhkci5jYXBsZW4gPSByaW5nLT5zbG90W2ldLmxlbjsKIAkJ
CWQtPmhkci50cyA9IHJpbmctPnRzOwotCQkJY2IoYXJnLCAmZC0+aGRyLCBidWYpOwogCQkJcmlu
Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBpKTsKIAkJfQogCX0KKwlp
ZiAoZC0+aGRyLmJ1ZikgeyAvKiBmcm9tIHByZXZpb3VzIHJvdW5kICovCisJCWQtPmhkci5mbGFn
cyA9IDA7CisJCWNiKGFyZywgJmQtPmhkciwgZC0+aGRyLmJ1Zik7CisJfQogCWQtPmN1cl9yeF9y
aW5nID0gcmk7CiAJcmV0dXJuIGdvdDsKIH0KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9uZXQv
bmV0bWFwX3ZpcnQuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgKLS0tIHVzci9zcmMv
c3lzL25ldC9uZXRtYXBfdmlydC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44
NTg5MjQwMDAgKzAwMDAKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBMdWlnaSBSaXp6bworICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgR2l1c2VwcGUg
TGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBORVRNQVBfVklS
VF9ICisjZGVmaW5lIE5FVE1BUF9WSVJUX0gKKworLyoKKyAqIHB0bmV0bWFwX21lbWRldjogZGV2
aWNlIHVzZWQgdG8gZXhwb3NlIG1lbW9yeSBpbnRvIHRoZSBndWVzdCBWTQorICoKKyAqIFRoZXNl
IG1hY3JvcyBhcmUgdXNlZCBpbiB0aGUgaHlwZXJ2aXNvciBmcm9udGVuZCAoUUVNVSwgYmh5dmUp
IGFuZCBpbiB0aGUKKyAqIGd1ZXN0IGRldmljZSBkcml2ZXIuCisgKi8KKworLyogUENJIGlkZW50
aWZpZXJzIGFuZCBQQ0kgQkFScyBmb3IgdGhlIHB0bmV0bWFwIG1lbWRldgorICogYW5kIHB0bmV0
bWFwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLworI2RlZmluZSBQVE5FVE1BUF9NRU1ERVZfTkFNRSAg
ICAgICAgICAgICJwdG5ldG1hcC1tZW1kZXYiCisjZGVmaW5lIFBUTkVUTUFQX1BDSV9WRU5ET1Jf
SUQgICAgICAgICAgMHgxYjM2ICAvKiBRRU1VIHZpcnR1YWwgZGV2aWNlcyAqLworI2RlZmluZSBQ
VE5FVE1BUF9QQ0lfREVWSUNFX0lEICAgICAgICAgIDB4MDAwYyAgLyogbWVtb3J5IGRldmljZSAq
LworI2RlZmluZSBQVE5FVE1BUF9QQ0lfTkVUSUZfSUQgICAgICAgICAgIDB4MDAwZCAgLyogcHRu
ZXQgbmV0d29yayBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUFRORVRNQVBfSU9fUENJX0JBUiAgICAg
ICAgICAgICAwCisjZGVmaW5lIFBUTkVUTUFQX01FTV9QQ0lfQkFSICAgICAgICAgICAgMQorI2Rl
ZmluZSBQVE5FVE1BUF9NU0lYX1BDSV9CQVIgICAgICAgICAgIDIKKworLyogUmVnaXN0ZXJzIGZv
ciB0aGUgcHRuZXRtYXAgbWVtZGV2ICovCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fTUVNU0laRV9M
TwkwCS8qIG5ldG1hcCBtZW1vcnkgc2l6ZSAobG93KSAqLworI2RlZmluZSBQVE5FVF9NREVWX0lP
X01FTVNJWkVfSEkJNAkvKiBuZXRtYXBfbWVtb3J5X3NpemUgKGhpZ2gpICovCisjZGVmaW5lIFBU
TkVUX01ERVZfSU9fTUVNSUQJCTgJLyogbWVtb3J5IGFsbG9jYXRvciBJRCBpbiB0aGUgaG9zdCAq
LworI2RlZmluZSBQVE5FVF9NREVWX0lPX0lGX1BPT0xfT0ZTCTY0CisjZGVmaW5lIFBUTkVUX01E
RVZfSU9fSUZfUE9PTF9PQkpOVU0JNjgKKyNkZWZpbmUgUFRORVRfTURFVl9JT19JRl9QT09MX09C
SlNaCTcyCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fUklOR19QT09MX09GUwk3NgorI2RlZmluZSBQ
VE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpOVU0JODAKKyNkZWZpbmUgUFRORVRfTURFVl9JT19S
SU5HX1BPT0xfT0JKU1oJODQKKyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PRlMJODgK
KyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU0JOTIKKyNkZWZpbmUgUFRORVRf
TURFVl9JT19CVUZfUE9PTF9PQkpTWgk5NgorI2RlZmluZSBQVE5FVF9NREVWX0lPX0VORAkJMTAw
CisKKy8qCisgKiBwdG5ldG1hcCBjb25maWd1cmF0aW9uCisgKgorICogVGhlIHB0bmV0IGt0aHJl
YWRzIChydW5uaW5nIGluIGhvc3Qga2VybmVsLXNwYWNlKSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQK
KyAqIGluIG9yZGVyIHRvIGtub3cgaG93IHRvIGludGVyY2VwdCBndWVzdCBraWNrcyAoSS9PIHJl
Z2lzdGVyIHdyaXRlcykgYW5kCisgKiBob3cgdG8gaW5qZWN0IE1TSS1YIGludGVycnVwdHMgdG8g
dGhlIGd1ZXN0LiBUaGUgY29uZmlndXJhdGlvbiBtYXkgdmFyeQorICogZGVwZW5kaW5nIG9uIHRo
ZSBoeXBlcnZpc29yLiBDdXJyZW50bHksIHdlIHN1cHBvcnQgUUVNVS9LVk0gb24gTGludXggYW5k
CisgKiBhbmQgYmh5dmUgb24gRnJlZUJTRC4KKyAqIFRoZSBjb25maWd1cmF0aW9uIGlzIHBhc3Nl
ZCBieSB0aGUgaHlwZXJ2aXNvciB0byB0aGUgaG9zdCBuZXRtYXAgbW9kdWxlCisgKiBieSBtZWFu
cyBvZiBhbiBpb2N0bCgpIHdpdGggbnJfY21kPU5FVE1BUF9QVF9IT1NUX0NSRUFURSwgYW5kIGl0
IGlzCisgKiBzcGVjaWZpZWQgYnkgdGhlIHB0bmV0bWFwX2NmZyBzdHJ1Y3QuIFRoaXMgc3RydWN0
IGNvbnRhaW5zIGFuIGhlYWRlcgorICogd2l0aCBnZW5lcmFsIGluZm9ybWF0aW9ucyBhbmQgYW4g
YXJyYXkgb2YgZW50cmllcyB3aG9zZSBzaXplIGRlcGVuZHMKKyAqIG9uIHRoZSBoeXBlcnZpc29y
LiBUaGUgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFIGNvbW1hbmQgaXMgaXNzdWVkIGV2ZXJ5CisgKiB0
aW1lIHRoZSBrdGhyZWFkcyBhcmUgc3RhcnRlZC4KKyAqLworc3RydWN0IHB0bmV0bWFwX2NmZyB7
CisjZGVmaW5lIFBUTkVUTUFQX0NGR1RZUEVfUUVNVQkJMHgxCisjZGVmaW5lIFBUTkVUTUFQX0NG
R1RZUEVfQkhZVkUJCTB4MgorCXVpbnQxNl90IGNmZ3R5cGU7CS8qIGhvdyB0byBpbnRlcnByZXQg
dGhlIGNmZyBlbnRyaWVzICovCisJdWludDE2X3QgZW50cnlfc2l6ZTsJLyogc2l6ZSBvZiBhIGNv
bmZpZyBlbnRyeSAqLworCXVpbnQzMl90IG51bV9yaW5nczsJLyogbnVtYmVyIG9mIGNvbmZpZyBl
bnRyaWVzICovCisJdm9pZCAqcHRyaW5nczsJCS8qIHB0cmluZ3MgaW5zaWRlIENTQiAqLworCS8q
IENvbmZpZ3VyYXRpb24gZW50cmllcyBhcmUgYWxsb2NhdGVkIHJpZ2h0IGFmdGVyIHRoZSBzdHJ1
Y3QuICovCit9OworCisvKiBDb25maWd1cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgUUVN
VS4gKi8KK3N0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11IHsKKwl1aW50MzJfdCBpb2V2ZW50
ZmQ7CS8qIHRvIGludGVyY2VwdCBndWVzdCByZWdpc3RlciBhY2Nlc3MgKi8KKwl1aW50MzJfdCBp
cnFmZDsJCS8qIHRvIGluamVjdCBndWVzdCBpbnRlcnJ1cHRzICovCit9OworCisvKiBDb25maWd1
cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgYmh5dmUuICovCitzdHJ1Y3QgcHRuZXRtYXBf
Y2ZnZW50cnlfYmh5dmUgeworCXVpbnQ2NF90IHdjaGFuOwkJLyogdHNsZWVwKCkgcGFyYW1ldGVy
LCB0byB3YWtlIHVwIGt0aHJlYWQgKi8KKwl1aW50MzJfdCBpb2N0bF9mZDsJLyogaW9jdGwgZmQg
Ki8KKwkvKiBpb2N0bCBwYXJhbWV0ZXJzIHRvIHNlbmQgaXJxICovCisJdWludDMyX3QgaW9jdGxf
Y21kOworCS8qIHZtbS5rbyBNU0lYIHBhcmFtZXRlcnMgZm9yIElPQ1RMICovCisJc3RydWN0IHsK
KwkJdWludDY0X3QgICAgICAgIG1zZ19kYXRhOworCQl1aW50NjRfdCAgICAgICAgYWRkcjsKKwl9
IGlvY3RsX2RhdGE7Cit9OworCisvKgorICogU3RydWN0dXJlIGZpbGxlZC1pbiBieSB0aGUga2Vy
bmVsIHdoZW4gYXNrZWQgZm9yIGFsbG9jYXRvciBpbmZvCisgKiB0aHJvdWdoIE5FVE1BUF9QT09M
U19JTkZPX0dFVC4gVXNlZCBieSBoeXBlcnZpc29ycyBzdXBwb3J0aW5nCisgKiBwdG5ldG1hcC4K
KyAqLworc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHsKKwl1aW50NjRfdCBtZW1zaXplOwkvKiBz
YW1lIGFzIG5tci0+bnJfbWVtc2l6ZSAqLworCXVpbnQzMl90IG1lbWlkOwkJLyogc2FtZSBhcyBu
bXItPm5yX2FyZzIgKi8KKwl1aW50MzJfdCBpZl9wb29sX29mZnNldDsKKwl1aW50MzJfdCBpZl9w
b29sX29ianRvdGFsOworCXVpbnQzMl90IGlmX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCByaW5n
X3Bvb2xfb2Zmc2V0OworCXVpbnQzMl90IHJpbmdfcG9vbF9vYmp0b3RhbDsKKwl1aW50MzJfdCBy
aW5nX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCBidWZfcG9vbF9vZmZzZXQ7CisJdWludDMyX3Qg
YnVmX3Bvb2xfb2JqdG90YWw7CisJdWludDMyX3QgYnVmX3Bvb2xfb2Jqc2l6ZTsKK307CisKKy8q
CisgKiBQYXNzIGEgcG9pbnRlciB0byBhIHVzZXJzcGFjZSBidWZmZXIgdG8gYmUgcGFzc2VkIHRv
IGtlcm5lbHNwYWNlIGZvciB3cml0ZQorICogb3IgcmVhZC4gVXNlZCBieSBORVRNQVBfUFRfSE9T
VF9DUkVBVEUgYW5kIE5FVE1BUF9QT09MU19JTkZPX0dFVC4KKyAqLworc3RhdGljIGlubGluZSB2
b2lkCitubXJlcV9wb2ludGVyX3B1dChzdHJ1Y3Qgbm1yZXEgKm5tciwgdm9pZCAqdXNlcnB0cikK
K3sKKwl1aW50cHRyX3QgKnBwID0gKHVpbnRwdHJfdCAqKSZubXItPm5yX2FyZzE7CisJKnBwID0g
KHVpbnRwdHJfdCl1c2VycHRyOworfQorCisvKiBwdG5ldG1hcCBmZWF0dXJlcyAqLworI2RlZmlu
ZSBQVE5FVE1BUF9GX1ZORVRfSERSICAgICAgICAxCisKKy8qIEkvTyByZWdpc3RlcnMgZm9yIHRo
ZSBwdG5ldCBkZXZpY2UuICovCisjZGVmaW5lIFBUTkVUX0lPX1BURkVBVAkJMAorI2RlZmluZSBQ
VE5FVF9JT19QVENUTAkJNAorI2RlZmluZSBQVE5FVF9JT19NQUNfTE8JCTgKKyNkZWZpbmUgUFRO
RVRfSU9fTUFDX0hJCQkxMgorI2RlZmluZSBQVE5FVF9JT19DU0JCQUgJCTE2CisjZGVmaW5lIFBU
TkVUX0lPX0NTQkJBTAkJMjAKKyNkZWZpbmUgUFRORVRfSU9fTklGUF9PRlMJMjQKKyNkZWZpbmUg
UFRORVRfSU9fTlVNX1RYX1JJTkdTCTI4CisjZGVmaW5lIFBUTkVUX0lPX05VTV9SWF9SSU5HUwkz
MgorI2RlZmluZSBQVE5FVF9JT19OVU1fVFhfU0xPVFMJMzYKKyNkZWZpbmUgUFRORVRfSU9fTlVN
X1JYX1NMT1RTCTQwCisjZGVmaW5lIFBUTkVUX0lPX1ZORVRfSERSX0xFTgk0NAorI2RlZmluZSBQ
VE5FVF9JT19IT1NUTUVNSUQJNDgKKyNkZWZpbmUgUFRORVRfSU9fRU5ECQk1MgorI2RlZmluZSBQ
VE5FVF9JT19LSUNLX0JBU0UJMTI4CisjZGVmaW5lIFBUTkVUX0lPX01BU0sJCTB4ZmYKKworLyog
cHRuZXRtYXAgY29udHJvbCBjb21tYW5kcyAodmFsdWVzIGZvciBQVENUTCByZWdpc3RlcikgKi8K
KyNkZWZpbmUgUFRORVRNQVBfUFRDVExfQ1JFQVRFCQkxCisjZGVmaW5lIFBUTkVUTUFQX1BUQ1RM
X0RFTEVURQkJMgorCisvKiBJZiBkZWZpbmVkLCBDU0IgaXMgYWxsb2NhdGVkIGJ5IHRoZSBndWVz
dCwgbm90IGJ5IHRoZSBob3N0LiAqLworI2RlZmluZSBQVE5FVF9DU0JfQUxMT0MKKworLyogcHRu
ZXRtYXAgcmluZyBmaWVsZHMgc2hhcmVkIGJldHdlZW4gZ3Vlc3QgYW5kIGhvc3QgKi8KK3N0cnVj
dCBwdG5ldF9yaW5nIHsKKwkvKiBYWFggcmV2aXNlIHRoZSBsYXlvdXQgdG8gbWluaW1pemUgY2Fj
aGUgYm91bmNlcy4gKi8KKwl1aW50MzJfdCBoZWFkOwkJICAvKiBHVysgSFIrIHRoZSBoZWFkIG9m
IHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGN1cjsJCSAgLyogR1crIEhSKyB0
aGUgY3VyIG9mIHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGd1ZXN0X25lZWRf
a2ljazsgLyogR1crIEhSKyBob3N0LS0+Z3Vlc3Qgbm90aWZpY2F0aW9uIGVuYWJsZSAqLworCXVp
bnQzMl90IHN5bmNfZmxhZ3M7CSAgLyogR1crIEhSKyB0aGUgZmxhZ3Mgb2YgdGhlIGd1ZXN0IFt0
eHxyeF1zeW5jKCkgKi8KKwl1aW50MzJfdCBod2N1cjsJCSAgLyogR1IrIEhXKyB0aGUgaHdjdXIg
b2YgdGhlIGhvc3QgbmV0bWFwX2tyaW5nICovCisJdWludDMyX3QgaHd0YWlsOwkgIC8qIEdSKyBI
VysgdGhlIGh3dGFpbCBvZiB0aGUgaG9zdCBuZXRtYXBfa3JpbmcgKi8KKwl1aW50MzJfdCBob3N0
X25lZWRfa2ljazsgIC8qIEdSKyBIVysgZ3Vlc3QtLT5ob3N0IG5vdGlmaWNhdGlvbiBlbmFibGUg
Ki8KKwljaGFyIHBhZFs0XTsKK307CisKKy8qIENTQiBmb3IgdGhlIHB0bmV0IGRldmljZS4gKi8K
K3N0cnVjdCBwdG5ldF9jc2IgeworI2RlZmluZSBORVRNQVBfVklSVF9DU0JfU0laRSAgIDQwOTYK
KwlzdHJ1Y3QgcHRuZXRfcmluZyByaW5nc1tORVRNQVBfVklSVF9DU0JfU0laRS9zaXplb2Yoc3Ry
dWN0IHB0bmV0X3JpbmcpXTsKK307CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisKKy8q
IHB0bmV0bWFwX21lbWRldiByb3V0aW5lcyB1c2VkIHRvIHRhbGsgd2l0aCBwdG5ldG1hcF9tZW1k
ZXYgZGV2aWNlIGRyaXZlciAqLworc3RydWN0IHB0bmV0bWFwX21lbWRldjsKK2ludCBubV9vc19w
dF9tZW1kZXZfaW9tYXAoc3RydWN0IHB0bmV0bWFwX21lbWRldiAqLCB2bV9wYWRkcl90ICosIHZv
aWQgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICopOwordm9pZCBubV9v
c19wdF9tZW1kZXZfaW91bm1hcChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICopOwordWludDMyX3Qg
bm1fb3NfcHRfbWVtZGV2X2lvcmVhZChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVuc2lnbmVk
IGludCk7CisKKy8qIEd1ZXN0IGRyaXZlcjogV3JpdGUga3JpbmcgcG9pbnRlcnMgKGN1ciwgaGVh
ZCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRtYXBf
aG9zdF9yZWFkX2tyaW5nX2NzYigpLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9n
dWVzdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgKnB0ciwgdWludDMyX3QgY3Vy
LAorCQkJICAgICAgIHVpbnQzMl90IGhlYWQpCit7CisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRv
IHdyaXRlIGN1ciBhbmQgaGVhZCB0byB0aGUgQ1NCIGJ1dCB3ZSBjYW5ub3QgZG8gaXQgYXRvbWlj
YWxseS4KKyAgICAgKiBUaGVyZSBpcyBubyB3YXkgd2UgY2FuIHByZXZlbnQgdGhlIGhvc3QgZnJv
bSByZWFkaW5nIHRoZSB1cGRhdGVkIHZhbHVlCisgICAgICogb2Ygb25lIG9mIHRoZSB0d28gYW5k
IHRoZSBvbGQgdmFsdWUgb2YgdGhlIG90aGVyLiBIb3dldmVyLCBpZiB3ZSBtYWtlCisgICAgICog
c3VyZSB0aGF0IHRoZSBob3N0IG5ldmVyIHJlYWRzIGEgdmFsdWUgb2YgaGVhZCBtb3JlIHJlY2Vu
dCB0aGFuIHRoZQorICAgICAqIHZhbHVlIG9mIGN1ciB3ZSBhcmUgc2FmZS4gV2UgY2FuIGFsbG93
IHRoZSBob3N0IHRvIHJlYWQgYSB2YWx1ZSBvZiBjdXIKKyAgICAgKiBtb3JlIHJlY2VudCB0aGFu
IHRoZSB2YWx1ZSBvZiBoZWFkLCBzaW5jZSBpbiB0aGUgbmV0bWFwIHJpbmcgY3VyIGNhbiBiZQor
ICAgICAqIGFoZWFkIG9mIGhlYWQgYW5kIGN1ciBjYW5ub3Qgd3JhcCBhcm91bmQgaGVhZCBiZWNh
dXNlIGl0IG11c3QgYmUgYmVoaW5kCisgICAgICogdGFpbC4gSW52ZXJ0aW5nIHRoZSBvcmRlciBv
ZiB3cml0ZXMgYmVsb3cgY291bGQgaW5zdGVhZCByZXN1bHQgaW50byB0aGUKKyAgICAgKiBob3N0
IHRvIHRoaW5rIGhlYWQgd2VudCBhaGVhZCBvZiBjdXIsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBz
eW5jCisgICAgICogcHJvbG9ndWUgdG8gZmFpbC4KKyAgICAgKgorICAgICAqIFRoZSBmb2xsb3dp
bmcgbWVtb3J5IGJhcnJpZXIgc2NoZW1lIGlzIHVzZWQgdG8gbWFrZSB0aGlzIGhhcHBlbjoKKyAg
ICAgKgorICAgICAqICAgICAgICAgIEd1ZXN0ICAgICAgICAgICAgICBIb3N0CisgICAgICoKKyAg
ICAgKiAgICAgICAgICBTVE9SRShjdXIpICAgICAgICAgTE9BRChoZWFkKQorICAgICAqICAgICAg
ICAgIG1iKCkgPC0tLS0tLS0tLS0tPiBtYigpCisgICAgICogICAgICAgICAgU1RPUkUoaGVhZCkg
ICAgICAgIExPQUQoY3VyKQorICAgICAqLworICAgIHB0ci0+Y3VyID0gY3VyOworICAgIG1iKCk7
CisgICAgcHRyLT5oZWFkID0gaGVhZDsKK30KKworLyogR3Vlc3QgZHJpdmVyOiBSZWFkIGtyaW5n
IHBvaW50ZXJzIChod2N1ciwgaHd0YWlsKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJvdXRpbmUg
aXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2hvc3Rfd3JpdGVfa3JpbmdfY3NiKCkuICovCitzdGF0
aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2d1ZXN0X3JlYWRfa3JpbmdfY3NiKHN0cnVjdCBwdG5l
dF9yaW5nICpwdHIsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQoreworICAgIC8qCisgICAg
ICogV2UgcGxhY2UgYSBtZW1vcnkgYmFycmllciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdXBkYXRl
IG9mIGh3dGFpbCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGh3Y3VyLgor
ICAgICAqIChzZWUgZXhwbGFuYXRpb24gaW4gcHRuZXRtYXBfaG9zdF93cml0ZV9rcmluZ19jc2Ip
LgorICAgICAqLworICAgIGtyaW5nLT5ucl9od3RhaWwgPSBwdHItPmh3dGFpbDsKKyAgICBtYigp
OworICAgIGtyaW5nLT5ucl9od2N1ciA9IHB0ci0+aHdjdXI7Cit9CisKKyNlbmRpZiAvKiBXSVRI
X1BUTkVUTUFQX0dVRVNUICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0hPU1QKKy8qCisgKiBw
dG5ldG1hcCBrZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKiAqLworCisvKiBGdW5jdGlvbnMgdG8g
cmVhZCBhbmQgd3JpdGUgQ1NCIGZpZWxkcyBpbiB0aGUgaG9zdCAqLworI2lmIGRlZmluZWQgKGxp
bnV4KQorI2RlZmluZSBDU0JfUkVBRChjc2IsIGZpZWxkLCByKSAoZ2V0X3VzZXIociwgJmNzYi0+
ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUoY3NiLCBmaWVsZCwgdikgKHB1dF91c2VyKHYsICZj
c2ItPmZpZWxkKSkKKyNlbHNlICAvKiAhIGxpbnV4ICovCisjZGVmaW5lIENTQl9SRUFEKGNzYiwg
ZmllbGQsIHIpIChyID0gZnV3b3JkMzIoJmNzYi0+ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUo
Y3NiLCBmaWVsZCwgdikgKHN1d29yZDMyKCZjc2ItPmZpZWxkLCB2KSkKKyNlbmRpZiAvKiAhIGxp
bnV4ICovCisKKy8qIEhvc3QgbmV0bWFwOiBXcml0ZSBrcmluZyBwb2ludGVycyAoaHdjdXIsIGh3
dGFpbCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRt
YXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IoKS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRuZXRt
YXBfaG9zdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHIsIHVp
bnQzMl90IGh3Y3VyLAorICAgICAgICB1aW50MzJfdCBod3RhaWwpCit7CisgICAgLyoKKyAgICAg
KiBUaGUgc2FtZSBzY2hlbWUgdXNlZCBpbiBwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2Io
KSBhcHBsaWVzIGhlcmUuCisgICAgICogV2UgYWxsb3cgdGhlIGd1ZXN0IHRvIHJlYWQgYSB2YWx1
ZSBvZiBod2N1ciBtb3JlIHJlY2VudCB0aGFuIHRoZSB2YWx1ZQorICAgICAqIG9mIGh3dGFpbCwg
c2luY2UgdGhpcyB3b3VsZCBhbnl3YXkgcmVzdWx0IGluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRo
ZQorICAgICAqIHJpbmcgc3RhdGUgKGFuZCBod2N1ciBjYW4gbmV2ZXIgd3JhcGFyb3VuZCBod3Rh
aWwsIHNpbmNlIGh3Y3VyIG11c3QgYmUKKyAgICAgKiBiZWhpbmQgaGVhZCkuCisgICAgICoKKyAg
ICAgKiBUaGUgZm9sbG93aW5nIG1lbW9yeSBiYXJyaWVyIHNjaGVtZSBpcyB1c2VkIHRvIG1ha2Ug
dGhpcyBoYXBwZW46CisgICAgICoKKyAgICAgKiAgICAgICAgICBHdWVzdCAgICAgICAgICAgICAg
ICBIb3N0CisgICAgICoKKyAgICAgKiAgICAgICAgICBTVE9SRShod2N1cikgICAgICAgICBMT0FE
KGh3dGFpbCkKKyAgICAgKiAgICAgICAgICBtYigpIDwtLS0tLS0tLS0tLS0tPiBtYigpCisgICAg
ICogICAgICAgICAgU1RPUkUoaHd0YWlsKSAgICAgICAgTE9BRChod2N1cikKKyAgICAgKi8KKyAg
ICBDU0JfV1JJVEUocHRyLCBod2N1ciwgaHdjdXIpOworICAgIG1iKCk7CisgICAgQ1NCX1dSSVRF
KHB0ciwgaHd0YWlsLCBod3RhaWwpOworfQorCisvKiBIb3N0IG5ldG1hcDogUmVhZCBrcmluZyBw
b2ludGVycyAoaGVhZCwgY3VyLCBzeW5jX2ZsYWdzKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJv
dXRpbmUgaXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYigpLiAq
Lworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHN0cnVj
dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyLAorCQkJICAgICBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnNo
YWRvd19yaW5nLAorCQkJICAgICB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgLyoKKyAgICAg
KiBXZSBwbGFjZSBhIG1lbW9yeSBiYXJyaWVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cGRhdGUg
b2YgaGVhZCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGN1ci4KKyAgICAg
KiAoc2VlIGV4cGxhbmF0aW9uIGluIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYikuCisg
ICAgICovCisgICAgQ1NCX1JFQUQocHRyLCBoZWFkLCBzaGFkb3dfcmluZy0+aGVhZCk7CisgICAg
bWIoKTsKKyAgICBDU0JfUkVBRChwdHIsIGN1ciwgc2hhZG93X3JpbmctPmN1cik7CisgICAgQ1NC
X1JFQUQocHRyLCBzeW5jX2ZsYWdzLCBzaGFkb3dfcmluZy0+ZmxhZ3MpOworfQorCisjZW5kaWYg
LyogV0lUSF9QVE5FVE1BUF9IT1NUICovCisKKyNlbmRpZiAvKiBORVRNQVBfVklSVF9IICovCmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvdXNyL3NyYy8u
YXJjY29uZmlnCi0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2NvbmZpZwkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyL3NyYy8uYXJjY29uZmlnCTIwMTYt
MDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNSBAQAoreworCSJyZXBv
c2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKKwkicGhhYnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jl
dmlld3MuZnJlZWJzZC5vcmcvIiwKKwkiaGlzdG9yeS5pbW11dGFibGUiIDogdHJ1ZQorfQpkaWZm
IC11IC1yIC1OIHVzci9zcmMvdXNyL3NyYy8uYXJjbGludCAvdXNyL3NyYy91c3Ivc3JjLy5hcmNs
aW50Ci0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoy
NjozNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNSBAQAoreworICAiZXhjbHVkZSI6ICIo
Y29udHJpYnxjcnlwdG8pIiwKKyAgImxpbnRlcnMiOiB7CisgICAgInB5dGhvbiI6IHsKKyAgICAg
ICJ0eXBlIjogInBlcDgiLAorICAgICAgImluY2x1ZGUiOiAiKFxcLnB5JCkiCisgICAgfSwKKyAg
ICAic3BlbGxpbmciOiB7CisgICAgICAidHlwZSI6ICJzcGVsbGluZyIKKyAgICB9LAorICAgICJj
aG1vZCI6IHsKKyAgICAgICJ0eXBlIjogImNobW9kIgorICAgIH0sCisgICAgIm1lcmdlLWNvbmZs
aWN0IjogeworICAgICAgInR5cGUiOiAibWVyZ2UtY29uZmxpY3QiCisgICAgfSwKKyAgICAiZmls
ZW5hbWUiOiB7CisgICAgICAidHlwZSI6ICJmaWxlbmFtZSIKKyAgICB9LAorICAgICJqc29uIjog
eworICAgICAgInR5cGUiOiAianNvbiIsCisgICAgICAiaW5jbHVkZSI6ICIoXFwuYXJjbGludHxc
XC5qc29uJCkiCisgICAgfQorICB9Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9NYWtlZmlsZSAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQotLS0gdXNyL3Ny
Yy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI1OjA3LjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUJMjAxNi0xMS0zMCAxMDo1
NjowNS44MDcyNTAwMDAgKzAwMDAKQEAgLTI3LDYgKzI3LDggQEAKIAltZW0uYwkJCVwKIAltZXZl
bnQuYwkJXAogCW1wdGJsLmMJCQlcCisJbmV0X2JhY2tlbmRzLmMJCVwKKwluZXRfdXRpbHMuYwkJ
XAogCXBjaV9haGNpLmMJCVwKIAlwY2lfZW11bC5jCQlcCiAJcGNpX2ZidWYuYwkJXApAQCAtMzQs
NiArMzYsOCBAQAogCXBjaV9pcnEuYwkJXAogCXBjaV9scGMuYwkJXAogCXBjaV9wYXNzdGhydS5j
CQlcCisJcGNpX3B0bmV0bWFwX21lbWRldi5jCVwKKwlwY2lfcHRuZXRtYXBfbmV0aWYuYwlcCiAJ
cGNpX3ZpcnRpb19ibG9jay5jCVwKIAlwY2lfdmlydGlvX25ldC5jCVwKIAlwY2lfdmlydGlvX3Ju
ZC5jCVwKQEAgLTYyLDYgKzY2LDggQEAKIExJQkFERD0Jdm1tYXBpIG1kIHB0aHJlYWQgegogCiBD
RkxBR1MrPSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvZGV2L3VzYi9jb250cm9sbGVyCitDRkxBR1Mr
PSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvCitDRkxBR1MrPSAtRFdJVEhfTkVUTUFQCiAKIFdBUk5T
Pz0JMgogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZS5vcmln
IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvdXNyLnNi
aW4vYmh5dmUvTWFrZWZpbGUub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUub3JpZwkyMDE2LTExLTMwIDEw
OjUyOjU5Ljg4MzE2NDAwMCArMDAwMApAQCAtMCwwICsxLDY4IEBACisjCisjICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZSAzMDIzMzIgMjAxNi0wNy0wNCAwMzox
OTowNlogZ3JlaGFuICQKKyMKKworUFJPRz0JYmh5dmUKK1BBQ0tBR0U9CWJoeXZlCisKK0RFQlVH
X0ZMQUdTPSAtZyAtTzAKKworTUFOPQliaHl2ZS44CisKK0JIWVZFX1NZU0RJUj89JHtTUkNUT1B9
CisKK1NSQ1M9CVwKKwlhdGtiZGMuYwkJXAorCWFjcGkuYwkJCVwKKwliaHl2ZWdjLmMJCVwKKwli
aHl2ZXJ1bi5jCQlcCisJYmxvY2tfaWYuYwkJXAorCWJvb3Ryb20uYwkJXAorCWNvbnNvbGUuYwkJ
XAorCWNvbnNwb3J0LmMJCVwKKwlkYmdwb3J0LmMJCVwKKwlmd2N0bC5jCQkJXAorCWlub3V0LmMJ
CQlcCisJaW9hcGljLmMJCVwKKwltZW0uYwkJCVwKKwltZXZlbnQuYwkJXAorCW1wdGJsLmMJCQlc
CisJcGNpX2FoY2kuYwkJXAorCXBjaV9lbXVsLmMJCVwKKwlwY2lfZmJ1Zi5jCQlcCisJcGNpX2hv
c3RicmlkZ2UuYwlcCisJcGNpX2lycS5jCQlcCisJcGNpX2xwYy5jCQlcCisJcGNpX3Bhc3N0aHJ1
LmMJCVwKKwlwY2lfdmlydGlvX2Jsb2NrLmMJXAorCXBjaV92aXJ0aW9fbmV0LmMJXAorCXBjaV92
aXJ0aW9fcm5kLmMJXAorCXBjaV91YXJ0LmMJCVwKKwlwY2lfeGhjaS5jCQlcCisJcG0uYwkJCVwK
Kwlwb3N0LmMJCQlcCisJcHMya2JkLmMJCVwKKwlwczJtb3VzZS5jCQlcCisJcmZiLmMJCQlcCisJ
cnRjLmMJCQlcCisJc21iaW9zdGJsLmMJCVwKKwlzb2Nrc3RyZWFtLmMJCVwKKwl0YXNrX3N3aXRj
aC5jCQlcCisJdWFydF9lbXVsLmMJCVwKKwl1c2JfZW11bC5jCQlcCisJdXNiX21vdXNlLmMJCVwK
Kwl2aXJ0aW8uYwkJXAorCXZnYS5jCQkJXAorCXhtc3IuYwkJCVwKKwlzcGludXBfYXAuYworCisu
UEFUSDogICR7QkhZVkVfU1lTRElSfS9zeXMvYW1kNjQvdm1tCitTUkNTKz0Jdm1tX2luc3RydWN0
aW9uX2VtdWwuYworCitMSUJBREQ9CXZtbWFwaSBtZCBwdGhyZWFkIHoKKworQ0ZMQUdTKz0gLUkk
e0JIWVZFX1NZU0RJUn0vc3lzL2Rldi91c2IvY29udHJvbGxlcgorCitXQVJOUz89CTIKKworLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUv
bmV0X2JhY2tlbmRzLmMgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMKLS0t
IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5k
cy5jCTIwMTYtMTItMDEgMTE6MTM6NTQuODEyNjc5MDAwICswMDAwCkBAIC0wLDAgKzEsMTA4MiBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBWaW5jZW56byBNYWZmaW9uZQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAor
ICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG11bHRp
cGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0bWFwLCAuLi4pLAorICogdG8gYmUg
dXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZpcnRpby1uZXQgYW5kIHB0bmV0Lgor
ICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUuZy4gc2VuZC9yZWNlaXZlIHBhY2tl
dHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9ydGVkIGJ5IG5ldF9iYWNrZW5kcy5o
LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+Cisj
aW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2luY2x1ZGUgPHBvbGwuaD4K
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1ldmVudC5oIgorI2luY2x1ZGUgIm5l
dF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtlcl9zZXQuaD4KKworLyoKKyAqIEVh
Y2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0
aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5ldCBiYWNrZW5kcyBBUEkuCisgKiBU
aGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBpbXBsZW1lbnQgYmFja2VuZHMgaW4g
c2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCB7CisJY29uc3QgY2hhciAq
bmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8qCisJICogVGhlIGluaXQgYW5kIGNs
ZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHksCisJICogdmlydGlvLW5ldCBzaG91
bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQpKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq
cGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisJ
LyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFuc21pdCByZXF1ZXN0LiBUaGUgc2Nh
dHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBoYXMgJ2lvdmNu
dCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBhY2tldCB0byBzZW5kLiAnbGVuJyBp
cyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRlcy4KKwkgKi8KKwlpbnQgKCpzZW5k
KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCWludCBpb3Zj
bnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUg
Z3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5jdGlvbgorCSAqIHJldHVybnMgYSBw
b3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlY3RvcgorCSAqIHByb3ZpZGVkIGJ5
IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50cyBpbiBpdCkgd2lsbAorCSAqIGNv
bnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0LiBUaGUgJ21vcmUnIGZsYWcgd2ls
bAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsgd2FzIHRoZSBsYXN0IG9uZSBmb3Ig
dGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVyd2lzZS4gVGhlIGZ1bmN0aW9uIHJl
dHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywgb3IgMCBpZiB0aGUgYmFja2VuZCBk
b2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVjZWl2ZS4KKwkgKiBOb3RlIHRoYXQg
aXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2FsbGJhY2sgbWFueQorCSAqIHRpbWVz
IHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRpbmcgb2YgaG93IGJpZyBpcworCSAq
IGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgqcmVjdikoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworCisJLyoKKwkgKiBBc2sg
dGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIGl0IGlzIGFibGUgdG8KKwkg
KiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNPLCBVRk8gYW5kIGNoZWNrc3VtIG9m
ZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJlY3Rpb24gYW5kIGZvciBib3RoIElQ
djQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl
bmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUvZGlzYWJsZSB0
aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJlcyAoY2FwYWJpbGl0aWVzKS4KKwkg
Ki8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0
dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hkcl9sZW4pOworCisJc3RydWN0IHBj
aV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2lnbmVkIGludCBiZV92bmV0X2hkcl9s
ZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsKKwl2b2lkICpwcml2OwkvKiBQb2lu
dGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307CisKK1NFVF9ERUNMQVJFKG5ldF9i
YWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNkZWZpbmUgVk5FVF9IRFJfTEVOCXNp
emVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2RlZmluZSBXUFJJTlRGKHBhcmFtcykg
cHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5kICovCitzdGF0aWMgaW50CituZXRi
ZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwK
KwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCSh2b2lkKWRldm5hbWU7
ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQor
eworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldGJlX251bGxfZ2V0X2NhcChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWlu
dDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7
ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3Qg
aW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKQoreworCSh2
b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZvaWQpbGVuOyAodm9pZCltb3JlOwor
CXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30KKworc3RhdGljIGludAorbmV0YmVf
bnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQg
aW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsKKwlmcHJpbnRm
KHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xuIik7CisJcmV0dXJuIC0xOyAvKiBu
ZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5k
IG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQgPSBuZXRiZV9udWxsX2luaXQsCisJ
LmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNlbmQgPSBuZXRiZV9udWxsX3NlbmQs
CisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9j
YXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRf
YmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJhY2tlbmQgKi8KKworc3RydWN0IHRh
cF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsKKworc3RhdGljIHZvaWQKK3RhcF9j
bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IHRhcF9wcml2ICpwcml2
ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJbWV2ZW50X2RlbGV0ZShwcml2LT5t
ZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2ID0gTlVMTDsKKwl9CisJaWYgKGJl
LT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQliZS0+ZmQgPSAtMTsKKwl9Cit9CisK
K3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIg
KmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCWNoYXIg
dGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOworCXN0cnVjdCB0YXBfcHJpdiAqcHJp
djsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJUQVAgYmFja2VuZCByZXF1aXJl
cyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdiA9IGNh
bGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgewor
CQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9
CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNhdCh0YnVmLCBkZXZuYW1lLCBzaXpl
b2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKGZkID09IC0xKSB7
CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMgZmFpbGVkXG4iLCB0YnVmKSk7CisJ
CWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9uLWJsb2NraW5nIGFuZCByZWdpc3Rl
ciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgZXZlbnQgbG9vcAorCSAqLwor
CWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2
aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+
bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwgcGFyYW0pOworCWlmIChwcml2LT5t
ZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5vdCByZWdpc3RlciBldmVudFxuIikp
OworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZkOworCWJlLT5wcml2ID0gcHJpdjsK
KworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51cChiZSk7CisJcmV0dXJuIC0xOwor
fQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAg
ZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJaW50IG1vcmUp
Cit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KKworCSh2b2lk
KW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBh
bmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1
YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxl
IGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlv
dl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gKHNpemVfdCkoNjAgLSBsZW4p
OworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3cml0ZXYoYmUtPmZkLCBpb3YsIGlv
dmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCWludCByZXQ7CisKKwkvKiBTaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQgKi8KKwlhc3NlcnQoYmUt
PmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUtPmZkLCBpb3YsIGlvdmNudCk7CisK
KwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9DSykgeworCQlyZXR1cm4gMDsKKwl9
CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0X3QKK3RhcF9nZXRfY2FwKHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIDA7IC8vIG5vdGhpbmcg
ZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpi
ZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZv
aWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hkcl9sZW4pID8gLTEgOiAwOworfQor
CitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNrZW5kID0geworCS5uYW1lID0gInRh
cHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNsZWFudXAgPSB0YXBfY2xlYW51cCwK
Kwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3JlY3YsCisJLmdldF9jYXAgPSB0YXBf
Z2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2Jh
Y2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lUSF9ORVRNQVAKKworLyoKKyAqIFRo
ZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIHN1cHBv
cnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9GRUFUVVJFUyAoVklSVElPX05FVF9G
X0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfSE9TVF9U
U082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV
TSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNP
NiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZpbmUgTkVUTUFQX1BPTExNQVNLIChQ
T0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKworc3RydWN0IG5ldG1hcF9wcml2IHsK
KwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5tX2Rlc2MgKm5tZDsKKwl1aW50MTZf
dCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4OworCXN0cnVjdCBuZXRtYXBfcmluZyAq
dHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2JhY2tlbmRfY2JfdCBjYjsKKwl2b2lk
ICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0ZSBwdG5ldG1hcDsKK307CisKK3N0
YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZvaWQgKnBhcmFtKQoreworCXN0cnVj
dCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBi
ZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQgcmV0OworCisJZm9yICg7Oykgewor
CQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBORVRNQVBfUE9MTE1BU0s7CisJCXJl
dCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJldCA9PSAtMSAmJiBlcnJubyAhPSBF
SU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZhaWxlZCwgJWRcbiIsIGVycm5vKSk7
CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZlbnRzICYgTkVUTUFQX1BPTExNQVNL
KSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwgcHJpdi0+Y2JfcGFyYW0pOworCQl9
CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitubXJlcV9pbml0KHN0cnVj
dCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpy
ZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1lLCBzaXplb2YocmVxLT5ucl9uYW1l
KSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsKK30KKworc3RhdGljIGludAorbmV0
bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgaW50IHZuZXRfaGRy
X2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSByZXE7CisJc3RydWN0IG5ldG1hcF9w
cml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0KCZyZXEsIHByaXYtPmlmbmFtZSk7
CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7CisJcmVxLm5yX2FyZzEgPSB2bmV0
X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl
cnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5ldCBoZWFkZXIgbGVuZ3RoICVkXG4i
LAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWJlLT5iZV92bmV0
X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor
bmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdW5zaWduZWQg
dm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4gPSBiZS0+YmVfdm5ldF9oZHJfbGVu
OworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09IHByZXZfaGRyX2xlbikgeworCQly
ZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgdm5ldF9o
ZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOworCX0KKworCW5ldG1hcF9zZXRfdm5l
dF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1
aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlyZXR1
cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRfSERSX0xFTikgPworCQkJTkVUTUFQ
X0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3NldF9jYXAoc3RydWN0IG5l
dF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJICAgICAgIHVuc2lnbmVkIHZuZXRf
aGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRy
X2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhlIGZlYXR1cmVzIHdlIGFncmVlZCB1
cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBf
c3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKQoreworCXB0bi0+YWNrZWRfZmVh
dHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1cmVzOworCisJcmV0dXJuIHB0bi0+
YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqCitnZXRfcHRuZXRt
YXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg
PSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gcGk7CisJ
c3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGEg
cHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJlLT5zZXRfY2FwICE9IG5ldG1hcF9z
ZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2ZsYWdzICYgTlJfUFRORVRNQVBfSE9T
VCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5h
bWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5GT19HRVQ7CisJbm1yZXFfcG9pbnRl
cl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYs
ICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXJyID0gcHRuX21l
bWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJaWYgKGVycikgeworCQlyZXR1cm4g
TlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFwOworfQorCitpbnQKK3B0bmV0bWFw
X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBuZXRtYXBf
aWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw
X3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5pZikpOworCWlmIChwcml2LT5ubWQg
PT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCW5pZi0+bmlmcF9vZmZzZXQgPSBw
cml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1fdHhfcmluZ3MgPSBwcml2LT5ubWQt
PnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5ncyA9IHByaXYtPm5tZC0+cmVxLm5y
X3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfc2xv
dHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9zbG90czsKKwor
CXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0
bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gcHRuLT5uZXRt
YXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOwor
CX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50CitwdG5ldG1hcF9jcmVhdGUoc3Ry
dWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlz
dHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJl
cSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ
fQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRtYXAgZXZsb29wIGhlcmUuICovCisK
KwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBmb3IgdGhpcyBpbnRlcmZhY2UuICov
CisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCW5tcmVxX3BvaW50ZXJfcHV0KCZy
ZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0NSRUFURTsKKwllcnIgPSBp
b2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJZnBy
aW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBrdGhyZWFkcyBvbiAi
CisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUsIGVycm5vKTsKKwkJ
cmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAxOworCisJcmV0dXJuIDA7Cit9CisK
K2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQoreworCXN0
cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisJc3RydWN0IG5tcmVx
IHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ
fQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNl
LiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21kID0gTkVU
TUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHByaXYtPm5tZC0+ZmQsIE5JT0NSRUdJ
RiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmFibGUgdG8g
Y3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIlcyBbZXJybm89JWRdIiwgX19mdW5j
X18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4gZXJyOworCX0KKworCXB0bi0+cnVu
bmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2luaXQoc3Ry
dWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkgICAgbmV0X2JhY2tl
bmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3QgY2hhciAqbmRuYW1lID0gIi9kZXYv
bmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBubXJl
cSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwpOworCisJcHJpdiA9IGNhbGxvYygx
LCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlX
UFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRlIGRhdGFcbiIpKTsKKwkJcmV0dXJu
IC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBkZXZuYW1lLCBzaXplb2YocHJpdi0+
aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2LT5pZm5hbWUpIC0gMV0gPSAnXDAn
OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEubnJfZmxhZ3MgPSBwdG5l
dG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJpdi0+bm1kID0gbm1fb3Blbihwcml2
LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBOVUxMKTsKKwlpZiAocHJpdi0+bm1k
ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBubV9vcGVuKCk6IGRldmljZSAnJXMn
LCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMpXG4iLAorCQkJCW5kbmFtZSwgZGV2
bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJpdik7CisJCXJldHVybiAtMTsKKwl9
CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5yX2FyZzI7CisJcHJpdi0+dHggPSBO
RVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+cnggPSBORVRNQVBfUlhS
SU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2IgPSBjYjsKKwlwcml2LT5jYl9wYXJh
bSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7CisJYmUtPnByaXYgPSBwcml2Owor
CisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2OworCXByaXYtPnB0bmV0bWFwLmZl
YXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9mZWF0dXJlcyA9IDA7CisJcHJpdi0+
cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFwKSB7CisJCWlmIChuZXRtYXBfaGFz
X3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgeworCQkJcHJpdi0+cHRuZXRtYXAuZmVh
dHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQorCX0gZWxzZSB7CisJCWNoYXIgdG5h
bWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3IgbmV0bWFwIHBvbGwuICovCisJCXB0
aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxMLCBuZXRtYXBfZXZsb29wX3RocmVh
ZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBzaXplb2YodG5hbWUpLCAibmV0bWFw
LWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHByaXYtPmV2bG9vcF90
aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9j
bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpw
cml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJaWYgKHByaXYtPnB0bmV0bWFw
LnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJpdi0+cHRuZXRtYXApOworCQl9CisJ
CW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnByaXYpOworCQliZS0+cHJpdiA9IE5V
TEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZhc3QgY29weSByb3V0aW5lIG9ubHkg
Zm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJsYXBwZWQuICovCitzdGF0aWMgaW5s
aW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMsIHZvaWQgKl9kc3QsIGludCBsKQor
eworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOworICAgIHVpbnQ2NF90ICpkc3QgPSBf
ZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAgYmNvcHkoc3JjLCBkc3QsIGwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBsID4gMDsgbCAtPSA2NCkgeworICAg
ICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAg
KmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr
KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq
c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQK
K25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAor
CSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQgbW9yZSkKK3sKKwlzdHJ1Y3QgbmV0
bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJ
aW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOworCXVpbnQzMl90IGhlYWQ7CisJdm9p
ZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8PSAwIHx8IHNpemUgPD0gMCkgewor
CQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwgaW92Y250LCBzaXplKTsKKwkJcmV0
dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhlYWQgPSByaW5nLT5oZWFkOworCWlm
IChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVz
Iiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs
IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVmX3NpemUgPSByaW5nLT5ucl9idWZf
c2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9IDA7IGogPCBpb3ZjbnQ7IGorKykg
eworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3ZfbGVuOworCQl2b2lkICppb3ZfZnJh
Z19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3BsaXQgZWFjaCBpb3ZlYyBmcmFnbWVu
dCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBuZWNlc3NhcnkuICovCisJCWZvciAo
OzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVuID0gaW92X2ZyYWdfc2l6ZSA8IG5t
X2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9zaXplOworCQkJcGt0X2NvcHkoaW92
X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxl
bjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1ZiArPSBjb3B5bGVuOwor
CQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gKz0gY29weWxlbjsKKwor
CQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQlyaW5n
LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQlyaW5nLT5zbG90W2hlYWRdLmZsYWdz
ID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19uZXh0KHJpbmcsIGhlYWQpOworCQkJ
aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdlIHJhbiBvdXQgb2YgbmV0bWFwIHNs
b3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3ZlYyBmcmFnbWVudHMuICovCisJCQkJ
UkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCQkJZ290byB0eHN5bmM7
CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVm
X2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1Zl9zaXplOworCQkJbm1fYnVmX2xl
biA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUgbGFzdCBzbG90LCB3aGljaCBtdXN0
IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5t
X2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IDA7CisJaGVhZCA9IG5tX3Jpbmdf
bmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUgcmluZy0+aGVhZCBhbmQgcmluZy0+
Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJaWYgKG1vcmUpIHsv
LyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0dXJuIDA7CisJfQordHhzeW5jOgor
CWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVj
ICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnBy
aXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Jp
bmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWludCBpb3ZfZnJhZ19zaXplOworCWlu
dCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlhc3NlcnQoaW92Y250KTsKKworCXJp
bmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpb3ZfZnJhZ19idWYgPSBpb3Yt
Pmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlvdl9sZW47CisKKwlkbyB7CisJCWlu
dCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJaWYgKGhlYWQgPT0gcmluZy0+dGFp
bCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0gcmluZy0+c2xvdCArIGhlYWQ7CisJ
CW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVmX2lkeCk7CisJCW5tX2J1Zl9sZW4g
PSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50IGNvcHlsZW4gPSBubV9idWZfbGVu
IDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3ZfZnJhZ19zaXplOworCisJCQlwa3Rf
Y29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7CisJCQlubV9idWYgKz0gY29weWxl
bjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlvdl9mcmFnX2J1ZiArPSBjb3B5bGVu
OworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJdG90bGVuICs9IGNvcHlsZW47CisK
KwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW92Kys7
CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkgeworCQkJCS8qIE5vIHNwYWNlIHRv
IHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9wICVkIGJ5dGVzIiwgdG90bGVuKTsK
KwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9mcmFnX2J1ZiA9IGlvdi0+aW92X2Jh
c2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCQl9CisKKwkJaGVhZCA9IG5t
X3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUgKHNsb3QtPmZsYWdzICYgTlNfTU9S
RUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRtYXAuICovCisJcmluZy0+aGVhZCA9
IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVuOworfQorCitzdGF0aWMgc3RydWN0
IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5uYW1lID0gIm5ldG1hcHx2YWxlIiwK
KwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0gbmV0bWFwX2NsZWFudXAsCisJLnNl
bmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9yZWN2LAorCS5nZXRfY2FwID0gbmV0
bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VU
KG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKworI2VuZGlmIC8qIFdJVEhfTkVUTUFQ
ICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlzIHByb3Blcmx5IGluaXRpYWxpemVk
CisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK
KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChiZS0+bmFtZSA9PSBOVUxMKSB7CisJ
CWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAlcFxuIiwgYmUpOworCQliZS0+bmFt
ZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5pbml0ID09IE5VTEwpIHsKKwkJZnBy
aW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOwor
CQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJaWYgKGJlLT5jbGVhbnVwID09IE5V
TEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNsZWFudXAgZm9yICVwICVzXG4iLCBi
ZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJlX251bGxfY2xlYW51cDsKKwl9CisJ
aWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHNlbmQg
Zm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+c2VuZCA9IG5ldGJlX251bGxfc2Vu
ZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNz
aW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+cmVjdiA9IG5ldGJl
X251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09IE5VTEwpIHsKKwkJZnByaW50Zihz
dGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4iLAorCQkJYmUsIGJlLT5uYW1lKTsK
KwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7CisJfQorCWlmIChiZS0+c2V0X2Nh
cCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZXRfY2FwIGZvciAlcCAl
c1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRfY2FwID0gbmV0YmVfbnVsbF9zZXRf
Y2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQgb2YgcHJlZml4ZXMgc2VwYXJhdGVk
IGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9zdCBwYXJ0IG9mIG5hbWUgbWF0Y2hl
cyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCituZXRiZV9uYW1lX21hdGNo
KGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqbiA9
IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlpZiAoIWtleXMgfHwgIW5hbWUpCisJ
CXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysrKSApIHsKKwkJaWYgKGMgPT0gJ3wn
KSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJaWYgKGdvb2QpCisJCQkJYnJlYWs7
CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJCW4gPSBuYW1lOworCQkJZ29vZCA9
IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpuKyspIHsKKwkJCWdvb2QgPSBOVUxM
OyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0KKwl9CisJcmV0dXJuIGdvb2Q7Cit9
CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQgYXR0YWNoIHRvIHRoZSBmcm9udGVu
ZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVuZCBpbml0aWFsaXphdGlvbi4KKyAq
IGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBs
aW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUsYmFja2VuZC1uYW1lWyxvdGhlci1h
cmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sgc3VwcGxpZWQgYnkgdGhlIGZyb250
ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2ZW50IGxvb3Agd2hlbiBhIHJlY2Vp
dmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlwZXJ2aXNvciwKKyAqIHBhcmFtIGlz
IGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3JtYWxseSB1c2VkIGFzCisgKgl0aGUg
YXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3RydWN0IG5ldF9iYWNrZW5kICoKK25l
dGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq
cGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJlLCAqYmUsICp0YmUgPSBOVUxMOwor
CWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdvcmsgYmFja2VuZCBkZXBlbmRpbmcg
b24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFtZS4gbmV0X2JhY2tlbmRfcyBpcyBi
dWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VUX0ZPUkVBQ0gocGJlLCBuZXRfYmFj
a2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgqcGJlKS0+bmFtZSwgZGV2bmFtZSkp
IHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodGJlID09IE5VTEwp
CisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQgPyAqLworCWJlID0gY2FsbG9jKDEs
IHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5IHRoZSB0ZW1wbGF0ZSAqLworCW5l
dGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBmaWVsZHMgKi8KKwliZS0+ZmQg
PSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0gcGFyYW07CisJYmUtPmJlX3ZuZXRf
aGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IDA7CisKKwkvKiBpbml0aWFsaXpl
IHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUsIGRldm5hbWUsIGNiLCBwYXJhbSk7
CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBOVUxMOworCX0KKwlyZXR1cm4gYmU7
Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlp
ZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVhbnVwKGJlKTsKKwlmcmVlKGJlKTsK
K30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK
KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJlLT5nZXRfY2FwKGJlKTsK
K30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90
IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgcmV0Owor
CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogVGhlcmUgYXJlIG9ubHkgdGhy
ZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJfbGVuICYmIHZuZXRfaGRyX2xlbiAh
PSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9IChWTkVUX0hEUl9MRU4gLSBzaXpl
b2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IHZu
ZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJlLCBmZWF0dXJlcywgdm5ldF9oZHJf
bGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9PSAwIHx8CisJICAgICAgIGJlLT5i
ZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisKKwlyZXR1cm4gcmV0Owor
fQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoKK2lvdl90cmltKHN0cnVjdCBpb3Zl
YyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVj
ICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0g
dGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3Zf
bGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCppb3Zj
bnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0gJmlvdlsxXTsKKwl9IGVsc2Ugewor
CQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0cl90KWlvdlswXS5pb3ZfYmFzZSAr
IHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwlyZXR1cm4gKHJpb3YpOworfQorCit2
b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92
LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50IG1vcmUpCit7CisJaWYgKGJlID09
IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJRCgic2VuZGluZyBpb3ZjbnQgJWQg
bGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7CisJZm9yIChpPTA7IGkgPCBpb3Zj
bnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAoaW50KWlvdltpXS5pb3ZfbGVuLCBp
b3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5iZV92bmV0X2hkcl9sZW4gIT0gYmUt
PmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92bmV0X2hk
cl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBiZS0+ZmVfdm5l
dF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92LCBpb3ZjbnQsIGxlbiwgbW9yZSk7
Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ugb2YgZXJyb3JzCisgKi8KK2ludAor
bmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50
IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7IC8qIGxlbmd0aCBvZiBwcmVwZW5k
ZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJ
CXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hk
cl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgKnZoOworCisJCS8qIEhlcmUgd2Ug
YXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAqLworCQlobGVuID0gYmUtPmZlX3Zu
ZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0aGUgcnggaGVhZGVyLCBh
bmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdCBmb3IgdGhlIHBh
Y2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5pb3ZfYmFzZTsKKwkJaW92ID0gaW92
X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgorCQkgKiBIZXJlIHdlIGFyZSBzdXJl
IGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhlIG9ubHkgdmFsaWQgZmllbGQgaW4g
dGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJzIGlmIG1l
cmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2aCwgMCwgaGxl
bik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7CisJCQl2aC0+dnJoX2J1ZnMgPSAx
OworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlvdiwgaW92Y250KTsKKwlpZiAocmV0
ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog
UmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBkaXNjYXJkIGl0LgorICogUmV0dXJu
cyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBvciB6ZXJvIGlmIG5vIHBhY2tldCB3
YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIGNh
c2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRf
YmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0aGUgZHVtbXlidWYgaXMgb25seSB1
c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IHRv
IGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25seSBtYWtlIGl0IGxhcmdlIGVub3Vn
aCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZb
NjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSBkdW1teWJ1
ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7CisKKwlyZXR1cm4gbmV0YmVfcmVj
dihiZSwgJmlvdiwgMSk7Cit9CisKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZl
L25ldF9iYWNrZW5kcy5jLm9yaWcgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRz
LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuOTEyNTI2MDAwICsw
MDAwCkBAIC0wLDAgKzEsMjE2NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBW
aW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
U2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMg
ZmlsZSBpbXBsZW1lbnRzIG11bHRpcGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0
bWFwLCAuLi4pLAorICogdG8gYmUgdXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZp
cnRpby1uZXQgYW5kIHB0bmV0LgorICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUu
Zy4gc2VuZC9yZWNlaXZlIHBhY2tldHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9y
dGVkIGJ5IG5ldF9iYWNrZW5kcy5oLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNp
bmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lz
L21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5j
bHVkZSA8bmV0L2lmLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5o
PgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1l
dmVudC5oIgorI2luY2x1ZGUgIm5ldF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtl
cl9zZXQuaD4KKworLyoKKyAqIEVhY2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBv
ZiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5l
dCBiYWNrZW5kcyBBUEkuCisgKiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBp
bXBsZW1lbnQgYmFja2VuZHMgaW4gc2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFj
a2VuZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8q
CisJICogVGhlIGluaXQgYW5kIGNsZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHks
CisJICogdmlydGlvLW5ldCBzaG91bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQp
KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2Jh
Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKTsKKworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFu
c21pdCByZXF1ZXN0LiBUaGUgc2NhdHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkg
dGhlIGNhbGxlciBoYXMgJ2lvdmNudCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBh
Y2tldCB0byBzZW5kLiAnbGVuJyBpcyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRl
cy4KKwkgKi8KKwlpbnQgKCpzZW5kKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92
ZWMgKmlvdiwKKwkJCWludCBpb3ZjbnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoK
KwkgKiBDYWxsZWQgdG8gc2VydmUgZ3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5j
dGlvbgorCSAqIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZl
Y3RvcgorCSAqIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50
cyBpbiBpdCkgd2lsbAorCSAqIGNvbnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0
LiBUaGUgJ21vcmUnIGZsYWcgd2lsbAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsg
d2FzIHRoZSBsYXN0IG9uZSBmb3IgdGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVy
d2lzZS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywg
b3IgMCBpZiB0aGUgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVj
ZWl2ZS4KKwkgKiBOb3RlIHRoYXQgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2Fs
bGJhY2sgbWFueQorCSAqIHRpbWVzIHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRp
bmcgb2YgaG93IGJpZyBpcworCSAqIGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgq
cmVjdikoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3Zj
bnQpOworCisJLyoKKwkgKiBBc2sgdGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1
cmVzIGl0IGlzIGFibGUgdG8KKwkgKiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNP
LCBVRk8gYW5kIGNoZWNrc3VtIG9mZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJl
Y3Rpb24gYW5kIGZvciBib3RoIElQdjQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRf
Y2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2Vu
ZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJl
cyAoY2FwYWJpbGl0aWVzKS4KKwkgKi8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl
bmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hk
cl9sZW4pOworCisJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2ln
bmVkIGludCBiZV92bmV0X2hkcl9sZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsK
Kwl2b2lkICpwcml2OwkvKiBQb2ludGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307
CisKK1NFVF9ERUNMQVJFKG5ldF9iYWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNk
ZWZpbmUgVk5FVF9IRFJfTEVOCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2Rl
ZmluZSBXUFJJTlRGKHBhcmFtcykgcHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5k
ICovCitzdGF0aWMgaW50CituZXRiZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg
Y29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFt
KQoreworCSh2b2lkKWRldm5hbWU7ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAt
MTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1
Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QK
K25ldGJlX251bGxfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJl
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hk
cl9sZW4pCit7CisJKHZvaWQpYmU7ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBs
ZW4sIGludCBtb3JlKQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZv
aWQpbGVuOyAodm9pZCltb3JlOworCXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30K
Kworc3RhdGljIGludAorbmV0YmVfbnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0
cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2
b2lkKWlvdmNudDsKKwlmcHJpbnRmKHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xu
Iik7CisJcmV0dXJuIC0xOyAvKiBuZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0
aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQg
PSBuZXRiZV9udWxsX2luaXQsCisJLmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNl
bmQgPSBuZXRiZV9udWxsX3NlbmQsCisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9j
YXAgPSBuZXRiZV9udWxsX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAs
Cit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJh
Y2tlbmQgKi8KKworc3RydWN0IHRhcF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsK
Kworc3RhdGljIHZvaWQKK3RhcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ
c3RydWN0IHRhcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJ
bWV2ZW50X2RlbGV0ZShwcml2LT5tZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2
ID0gTlVMTDsKKwl9CisJaWYgKGJlLT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQli
ZS0+ZmQgPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFj
a2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZv
aWQgKnBhcmFtKQoreworCWNoYXIgdGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOwor
CXN0cnVjdCB0YXBfcHJpdiAqcHJpdjsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYo
KCJUQVAgYmFja2VuZCByZXF1aXJlcyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4g
LTE7CisJfQorCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJ
aWYgKHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4i
KSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNh
dCh0YnVmLCBkZXZuYW1lLCBzaXplb2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRX
Uik7CisJaWYgKGZkID09IC0xKSB7CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMg
ZmFpbGVkXG4iLCB0YnVmKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9u
LWJsb2NraW5nIGFuZCByZWdpc3RlciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0
aGUgZXZlbnQgbG9vcAorCSAqLworCWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7
CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8g
ZXJyb3I7CisJfQorCisJcHJpdi0+bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwg
cGFyYW0pOworCWlmIChwcml2LT5tZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5v
dCByZWdpc3RlciBldmVudFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZk
OworCWJlLT5wcml2ID0gcHJpdjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51
cChiZSk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIg
Y2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50
MzJfdCBsZW4sCisJaW50IG1vcmUpCit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHpl
cm8gYnl0ZXMgKi8KKworCSh2b2lkKW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwg
NjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50
IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBh
biBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYw
KSB7CisJCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVu
ID0gKHNpemVfdCkoNjAgLSBsZW4pOworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3
cml0ZXYoYmUtPmZkLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQorewor
CWludCByZXQ7CisKKwkvKiBTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0
YXAgZmQgKi8KKwlhc3NlcnQoYmUtPmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUt
PmZkLCBpb3YsIGlvdmNudCk7CisKKwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9D
SykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0
X3QKK3RhcF9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJ
cmV0dXJuIDA7IC8vIG5vdGhpbmcgZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAo
c3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2
bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hk
cl9sZW4pID8gLTEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNr
ZW5kID0geworCS5uYW1lID0gInRhcHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNs
ZWFudXAgPSB0YXBfY2xlYW51cCwKKwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3Jl
Y3YsCisJLmdldF9jYXAgPSB0YXBfZ2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAor
fTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lU
SF9ORVRNQVAKKworLyoKKyAqIFRoZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0
aW8tbmV0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9G
RUFUVVJFUyAoVklSVElPX05FVF9GX0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAor
CQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlW
SVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlW
SVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZp
bmUgTkVUTUFQX1BPTExNQVNLIChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKwor
c3RydWN0IG5ldG1hcF9wcml2IHsKKwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5t
X2Rlc2MgKm5tZDsKKwl1aW50MTZfdCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4Owor
CXN0cnVjdCBuZXRtYXBfcmluZyAqdHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2Jh
Y2tlbmRfY2JfdCBjYjsKKwl2b2lkICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0
ZSBwdG5ldG1hcDsKK307CisKK3N0YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZv
aWQgKnBhcmFtKQoreworCXN0cnVjdCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3Qg
bmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQg
cmV0OworCisJZm9yICg7OykgeworCQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBO
RVRNQVBfUE9MTE1BU0s7CisJCXJldCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJl
dCA9PSAtMSAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZh
aWxlZCwgJWRcbiIsIGVycm5vKSk7CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZl
bnRzICYgTkVUTUFQX1BPTExNQVNLKSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwg
cHJpdi0+Y2JfcGFyYW0pOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2
b2lkCitubXJlcV9pbml0KHN0cnVjdCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVt
c2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1l
LCBzaXplb2YocmVxLT5ucl9uYW1lKSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsK
K30KKworc3RhdGljIGludAorbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgaW50IHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSBy
ZXE7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0
KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7
CisJcmVxLm5yX2FyZzEgPSB2bmV0X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9D
UkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5l
dCBoZWFkZXIgbGVuZ3RoICVkXG4iLAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJy
OworCX0KKworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9i
YWNrZW5kICpiZSwgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4g
PSBiZS0+YmVfdm5ldF9oZHJfbGVuOworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09
IHByZXZfaGRyX2xlbikgeworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3Zu
ZXRfaGRyX2xlbihiZSwgdm5ldF9oZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOwor
CX0KKworCW5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0
dXJuIDE7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9i
YWNrZW5kICpiZSkKK3sKKwlyZXR1cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRf
SERSX0xFTikgPworCQkJTkVUTUFQX0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0
bWFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJ
ICAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0
X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhl
IGZlYXR1cmVzIHdlIGFncmVlZCB1cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0
dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVz
KQoreworCXB0bi0+YWNrZWRfZmVhdHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1
cmVzOworCisJcmV0dXJuIHB0bi0+YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqCitnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1
Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0
bWFwX3Bvb2xzX2luZm8gcGk7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyog
Q2hlY2sgdGhhdCB0aGlzIGlzIGEgcHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJl
LT5zZXRfY2FwICE9IG5ldG1hcF9zZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2Zs
YWdzICYgTlJfUFRORVRNQVBfSE9TVCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFf
aW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5G
T19HRVQ7CisJbm1yZXFfcG9pbnRlcl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2
LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7
CisJfQorCisJZXJyID0gcHRuX21lbWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJ
aWYgKGVycikgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFw
OworfQorCitpbnQKK3B0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICpwdG4sIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJp
diAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5p
ZikpOworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKwor
CW5pZi0+bmlmcF9vZmZzZXQgPSBwcml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1f
dHhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5n
cyA9IHByaXYtPm5tZC0+cmVxLm5yX3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJp
di0+bm1kLT5yZXEubnJfdHhfc2xvdHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQt
PnJlcS5ucl9yeF9zbG90czsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9o
b3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9w
cml2ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkg
eworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50
CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5l
dG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1h
cF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5p
bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRt
YXAgZXZsb29wIGhlcmUuICovCisKKwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBm
b3IgdGhpcyBpbnRlcmZhY2UuICovCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOwor
CW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9I
T1NUX0NSRUFURTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEp
OworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBw
dG5ldG1hcCBrdGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2
LT5pZm5hbWUsIGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAx
OworCisJcmV0dXJuIDA7Cit9CisKK2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqcHRuKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw
X3ByaXY7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5p
bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVh
ZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1l
KTsKKwlyZXEubnJfY21kID0gTkVUTUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHBy
aXYtPm5tZC0+ZmQsIE5JT0NSRUdJRiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIl
cyBbZXJybm89JWRdIiwgX19mdW5jX18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4g
ZXJyOworCX0KKworCXB0bi0+cnVubmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGludAorbmV0bWFwX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2
bmFtZSwKKwkgICAgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3Qg
Y2hhciAqbmRuYW1lID0gIi9kZXYvbmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg
PSBOVUxMOworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwp
OworCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYg
KHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRl
IGRhdGFcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBk
ZXZuYW1lLCBzaXplb2YocHJpdi0+aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2
LT5pZm5hbWUpIC0gMV0gPSAnXDAnOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsK
KwlyZXEubnJfZmxhZ3MgPSBwdG5ldG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJp
di0+bm1kID0gbm1fb3Blbihwcml2LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBO
VUxMKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBu
bV9vcGVuKCk6IGRldmljZSAnJXMnLCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMp
XG4iLAorCQkJCW5kbmFtZSwgZGV2bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJp
dik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5y
X2FyZzI7CisJcHJpdi0+dHggPSBORVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJ
cHJpdi0+cnggPSBORVRNQVBfUlhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2Ig
PSBjYjsKKwlwcml2LT5jYl9wYXJhbSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7
CisJYmUtPnByaXYgPSBwcml2OworCisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2
OworCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9m
ZWF0dXJlcyA9IDA7CisJcHJpdi0+cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFw
KSB7CisJCWlmIChuZXRtYXBfaGFzX3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgewor
CQkJcHJpdi0+cHRuZXRtYXAuZmVhdHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQor
CX0gZWxzZSB7CisJCWNoYXIgdG5hbWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3Ig
bmV0bWFwIHBvbGwuICovCisJCXB0aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxM
LCBuZXRtYXBfZXZsb29wX3RocmVhZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBz
aXplb2YodG5hbWUpLCAibmV0bWFwLWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9u
YW1lX25wKHByaXYtPmV2bG9vcF90aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQKK25ldG1hcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ
c3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsK
KwkJaWYgKHByaXYtPnB0bmV0bWFwLnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJp
di0+cHRuZXRtYXApOworCQl9CisJCW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnBy
aXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZh
c3QgY29weSByb3V0aW5lIG9ubHkgZm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJs
YXBwZWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMs
IHZvaWQgKl9kc3QsIGludCBsKQoreworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOwor
ICAgIHVpbnQ2NF90ICpkc3QgPSBfZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAg
YmNvcHkoc3JjLCBkc3QsIGwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBs
ID4gMDsgbCAtPSA2NCkgeworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr
KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq
c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysr
OworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LAorCSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQg
bW9yZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3Qg
bmV0bWFwX3JpbmcgKnJpbmc7CisJaW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOwor
CXVpbnQzMl90IGhlYWQ7CisJdm9pZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8
PSAwIHx8IHNpemUgPD0gMCkgeworCQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwg
aW92Y250LCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhl
YWQgPSByaW5nLT5oZWFkOworCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5v
IHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9i
dWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVm
X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9
IDA7IGogPCBpb3ZjbnQ7IGorKykgeworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3Zf
bGVuOworCQl2b2lkICppb3ZfZnJhZ19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3Bs
aXQgZWFjaCBpb3ZlYyBmcmFnbWVudCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBu
ZWNlc3NhcnkuICovCisJCWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVu
ID0gaW92X2ZyYWdfc2l6ZSA8IG5tX2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9z
aXplOworCQkJcGt0X2NvcHkoaW92X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlp
b3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJ
CW5tX2J1ZiArPSBjb3B5bGVuOworCQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1
Zl9sZW4gKz0gY29weWxlbjsKKworCQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJy
ZWFrOworCQkJfQorCisJCQlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQly
aW5nLT5zbG90W2hlYWRdLmZsYWdzID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19u
ZXh0KHJpbmcsIGhlYWQpOworCQkJaWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdl
IHJhbiBvdXQgb2YgbmV0bWFwIHNsb3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3Zl
YyBmcmFnbWVudHMuICovCisJCQkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6
ZSk7CisJCQkJZ290byB0eHN5bmM7CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs
IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1
Zl9zaXplOworCQkJbm1fYnVmX2xlbiA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUg
bGFzdCBzbG90LCB3aGljaCBtdXN0IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5n
LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9
IDA7CisJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUg
cmluZy0+aGVhZCBhbmQgcmluZy0+Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBo
ZWFkOworCisJaWYgKG1vcmUpIHsvLyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0
dXJuIDA7CisJfQordHhzeW5jOgorCWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1h
cF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVM
TDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWlu
dCBpb3ZfZnJhZ19zaXplOworCWludCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlh
c3NlcnQoaW92Y250KTsKKworCXJpbmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsK
Kwlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlv
dl9sZW47CisKKwlkbyB7CisJCWludCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJ
aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0g
cmluZy0+c2xvdCArIGhlYWQ7CisJCW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVm
X2lkeCk7CisJCW5tX2J1Zl9sZW4gPSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50
IGNvcHlsZW4gPSBubV9idWZfbGVuIDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3Zf
ZnJhZ19zaXplOworCisJCQlwa3RfY29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7
CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlv
dl9mcmFnX2J1ZiArPSBjb3B5bGVuOworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJ
dG90bGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVh
azsKKwkJCX0KKworCQkJaW92Kys7CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkg
eworCQkJCS8qIE5vIHNwYWNlIHRvIHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9w
ICVkIGJ5dGVzIiwgdG90bGVuKTsKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9m
cmFnX2J1ZiA9IGlvdi0+aW92X2Jhc2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVu
OworCQl9CisKKwkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUg
KHNsb3QtPmZsYWdzICYgTlNfTU9SRUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRt
YXAuICovCisJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVu
OworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5u
YW1lID0gIm5ldG1hcHx2YWxlIiwKKwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0g
bmV0bWFwX2NsZWFudXAsCisJLnNlbmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9y
ZWN2LAorCS5nZXRfY2FwID0gbmV0bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0
X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKwor
I2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlz
IHByb3Blcmx5IGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChi
ZS0+bmFtZSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAl
cFxuIiwgYmUpOworCQliZS0+bmFtZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5p
bml0ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVz
XG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJ
aWYgKGJlLT5jbGVhbnVwID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNs
ZWFudXAgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJl
X251bGxfY2xlYW51cDsKKwl9CisJaWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50Zihz
dGRlcnIsICJtaXNzaW5nIHNlbmQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+
c2VuZCA9IG5ldGJlX251bGxfc2VuZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJ
ZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUp
OworCQliZS0+cmVjdiA9IG5ldGJlX251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09
IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4i
LAorCQkJYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7
CisJfQorCWlmIChiZS0+c2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz
c2luZyBzZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRf
Y2FwID0gbmV0YmVfbnVsbF9zZXRfY2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQg
b2YgcHJlZml4ZXMgc2VwYXJhdGVkIGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9z
dCBwYXJ0IG9mIG5hbWUgbWF0Y2hlcyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hh
ciAqCituZXRiZV9uYW1lX21hdGNoKGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisJY29uc3QgY2hhciAqbiA9IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlp
ZiAoIWtleXMgfHwgIW5hbWUpCisJCXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysr
KSApIHsKKwkJaWYgKGMgPT0gJ3wnKSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJ
aWYgKGdvb2QpCisJCQkJYnJlYWs7CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJ
CW4gPSBuYW1lOworCQkJZ29vZCA9IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpu
KyspIHsKKwkJCWdvb2QgPSBOVUxMOyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0K
Kwl9CisJcmV0dXJuIGdvb2Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQg
YXR0YWNoIHRvIHRoZSBmcm9udGVuZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVu
ZCBpbml0aWFsaXphdGlvbi4KKyAqIGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBw
bGllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUs
YmFja2VuZC1uYW1lWyxvdGhlci1hcmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sg
c3VwcGxpZWQgYnkgdGhlIGZyb250ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2
ZW50IGxvb3Agd2hlbiBhIHJlY2VpdmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlw
ZXJ2aXNvciwKKyAqIHBhcmFtIGlzIGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3Jt
YWxseSB1c2VkIGFzCisgKgl0aGUgYXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3Ry
dWN0IG5ldF9iYWNrZW5kICoKK25ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2Jh
Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJl
LCAqYmUsICp0YmUgPSBOVUxMOworCWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdv
cmsgYmFja2VuZCBkZXBlbmRpbmcgb24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFt
ZS4gbmV0X2JhY2tlbmRfcyBpcyBidWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VU
X0ZPUkVBQ0gocGJlLCBuZXRfYmFja2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgq
cGJlKS0+bmFtZSwgZGV2bmFtZSkpIHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQor
CX0KKwlpZiAodGJlID09IE5VTEwpCisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQg
PyAqLworCWJlID0gY2FsbG9jKDEsIHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5
IHRoZSB0ZW1wbGF0ZSAqLworCW5ldGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFs
bCBmaWVsZHMgKi8KKwliZS0+ZmQgPSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0g
cGFyYW07CisJYmUtPmJlX3ZuZXRfaGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9
IDA7CisKKwkvKiBpbml0aWFsaXplIHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUs
IGRldm5hbWUsIGNiLCBwYXJhbSk7CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBO
VUxMOworCX0KKwlyZXR1cm4gYmU7Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5l
dF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVh
bnVwKGJlKTsKKwlmcmVlKGJlKTsKK30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0
dXJuIGJlLT5nZXRfY2FwKGJlKTsKK30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRf
YmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRy
X2xlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJ
LyogVGhlcmUgYXJlIG9ubHkgdGhyZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJf
bGVuICYmIHZuZXRfaGRyX2xlbiAhPSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9
IChWTkVUX0hEUl9MRU4gLSBzaXplb2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUt
PmZlX3ZuZXRfaGRyX2xlbiA9IHZuZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJl
LCBmZWF0dXJlcywgdm5ldF9oZHJfbGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9
PSAwIHx8CisJICAgICAgIGJlLT5iZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xl
bik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoK
K2lvdl90cmltKHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRs
ZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1l
IGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0
bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09
IDApIHsKKwkJYXNzZXJ0KCppb3ZjbnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0g
JmlvdlsxXTsKKwl9IGVsc2UgeworCQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0
cl90KWlvdlswXS5pb3ZfYmFzZSArIHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwly
ZXR1cm4gKHJpb3YpOworfQorCit2b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50
IG1vcmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJ
RCgic2VuZGluZyBpb3ZjbnQgJWQgbGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7
CisJZm9yIChpPTA7IGkgPCBpb3ZjbnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAo
aW50KWlvdltpXS5pb3ZfbGVuLCBpb3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5i
ZV92bmV0X2hkcl9sZW4gIT0gYmUtPmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFy
ZSBzdXJlIGJlLT5iZV92bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92
LCAmaW92Y250LCBiZS0+ZmVfdm5ldF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92
LCBpb3ZjbnQsIGxlbiwgbW9yZSk7Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ug
b2YgZXJyb3JzCisgKi8KK2ludAorbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBz
dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7
IC8qIGxlbmd0aCBvZiBwcmVwZW5kZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0Owor
CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJf
bGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIg
KnZoOworCisJCS8qIEhlcmUgd2UgYXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAq
LworCQlobGVuID0gYmUtPmZlX3ZuZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRl
ciB0byB0aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZv
bGxvd2luZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5p
b3ZfYmFzZTsKKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgor
CQkgKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhl
IG9ubHkgdmFsaWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51
bWJlciBvZiBidWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICov
CisJCW1lbXNldCh2aCwgMCwgaGxlbik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7
CisJCQl2aC0+dnJoX2J1ZnMgPSAxOworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlv
diwgaW92Y250KTsKKwlpZiAocmV0ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1
cm4gcmV0OworfQorCisvKgorICogUmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBk
aXNjYXJkIGl0LgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBv
ciB6ZXJvIGlmIG5vIHBhY2tldCB3YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBj
b2RlIGlzIHJldHVybmVkIGluIGNhc2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9y
eF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0
aGUgZHVtbXlidWYgaXMgb25seSB1c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJl
IGlzIG5vIG5lZWQgZm9yIGl0IHRvIGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25s
eSBtYWtlIGl0IGxhcmdlIGVub3VnaCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3Rh
dGljIHVpbnQ4X3QgZHVtbXlidWZbNjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlp
b3YuaW92X2Jhc2UgPSBkdW1teWJ1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7
CisKKwlyZXR1cm4gbmV0YmVfcmVjdihiZSwgJmlvdiwgMSk7Cit9CisKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisg
KiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
CisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBtdWx0aXBsZSBuZXR3b3JrIGJhY2tl
bmRzIChudWxsLCB0YXAsIG5ldG1hcCwgLi4uKSwKKyAqIHRvIGJlIHVzZWQgYnkgbmV0d29yayBm
cm9udGVuZHMgc3VjaCBhcyB2aXJ0aW8tbmV0IGFuZCBwdG5ldC4KKyAqIFRoZSBBUEkgdG8gYWNj
ZXNzIHRoZSBiYWNrZW5kIChlLmcuIHNlbmQvcmVjZWl2ZSBwYWNrZXRzLCBuZWdvdGlhdGUKKyAq
IGZlYXR1cmVzKSBpcyBleHBvcnRlZCBieSBuZXRfYmFja2VuZHMuaC4KKyAqLworCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0
bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkvKiB1
X3Nob3J0IGV0YyAqLworI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lu
Y2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8YXNzZXJ0
Lmg+CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKwor
I2luY2x1ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisKKy8qCisgKiBFYWNoIG5ldHdvcmsgYmFja2Vu
ZCByZWdpc3RlcnMgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhcmUKKyAqIHVzZWQg
dG8gaW1wbGVtZW50IHRoZSBuZXQgYmFja2VuZHMgQVBJLgorICogVGhpcyBtaWdodCBuZWVkIHRv
IGJlIGV4cG9zZWQgaWYgd2UgaW1wbGVtZW50IGJhY2tlbmRzIGluIHNlcGFyYXRlIGZpbGVzLgor
ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Yg
dGhlIGJhY2tlbmQgKi8KKwkvKgorCSAqIFRoZSBpbml0IGFuZCBjbGVhbnVwIGZ1bmN0aW9ucyBh
cmUgdXNlZCBpbnRlcm5hbGx5LAorCSAqIHZpcnRpby1uZXQgc2hvdWxkIG5ldmVyIHVzZSBpdC4K
KwkgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpk
ZXZuYW1lLAorCQkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKTsKKwl2b2lkICgq
Y2xlYW51cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworCS8qCisJICogQ2FsbGVkIHRv
IHNlcnZlIGEgZ3Vlc3QgdHJhbnNtaXQgcmVxdWVzdC4gVGhlIHNjYXR0ZXItZ2F0aGVyCisJICog
dmVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgaGFzICdpb3ZjbnQnIGVsZW1lbnRzIGFuZCBj
b250YWlucworCSAqIHRoZSBwYWNrZXQgdG8gc2VuZC4gJ2xlbicgaXMgdGhlIGxlbmd0aCBvZiB3
aG9sZSBwYWNrZXQgaW4gYnl0ZXMuCisJICovCisJaW50ICgqc2VuZCkoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCQlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4s
IGludCBtb3JlKTsKKworCS8qCisJICogQ2FsbGVkIHRvIHNlcnZlIGd1ZXN0IHJlY2VpdmUgcmVx
dWVzdC4gV2hlbiB0aGUgZnVuY3Rpb24KKwkgKiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUsIHRo
ZSBzY2F0dGVyLWdhdGhlciB2ZWN0b3IKKwkgKiBwcm92aWRlZCBieSB0aGUgY2FsbGVyIChoYXZp
bmcgJ2lvdmNudCcgZWxlbWVudHMgaW4gaXQpIHdpbGwKKwkgKiBjb250YWluIGEgY2h1bmsgb2Yg
dGhlIHJlY2VpdmVkIHBhY2tldC4gVGhlICdtb3JlJyBmbGFnIHdpbGwKKwkgKiBiZSBzZXQgaWYg
dGhlIHJldHVybmVkIGNodW5rIHdhcyB0aGUgbGFzdCBvbmUgZm9yIHRoZSBjdXJyZW50CisJICog
cGFja2V0LCBhbmQgMCBvdGhlcndpc2UuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjaHVuayBz
aXplCisJICogaW4gYnl0ZXMsIG9yIDAgaWYgdGhlIGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgbmV3
IHBhY2tldCB0bworCSAqIHJlY2VpdmUuCisJICogTm90ZSB0aGF0IGl0IG1heSBiZSBuZWNlc3Nh
cnkgdG8gY2FsbCB0aGlzIGNhbGxiYWNrIG1hbnkKKwkgKiB0aW1lcyB0byByZWNlaXZlIGEgc2lu
Z2xlIHBhY2tldCwgZGVwZW5kaW5nIG9mIGhvdyBiaWcgaXMKKwkgKiBidWZmZXJzIHlvdSBwcm92
aWRlLgorCSAqLworCWludCAoKnJlY3YpKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBp
b3ZlYyAqaW92LCBpbnQgaW92Y250KTsKKworCS8qCisJICogQXNrIHRoZSBiYWNrZW5kIGZvciB0
aGUgdmlydGlvLW5ldCBmZWF0dXJlcyBpdCBpcyBhYmxlIHRvCisJICogc3VwcG9ydC4gUG9zc2li
bGUgZmVhdHVyZXMgYXJlIFRTTywgVUZPIGFuZCBjaGVja3N1bSBvZmZsb2FkaW5nCisJICogaW4g
Ym90aCByeCBhbmQgdHggZGlyZWN0aW9uIGFuZCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LgorCSAq
LworCXVpbnQ2NF90ICgqZ2V0X2NhcCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKwkvKgor
CSAqIFRlbGwgdGhlIGJhY2tlbmQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHNwZWNpZmllZCB2aXJ0
aW8tbmV0CisJICogZmVhdHVyZXMgKGNhcGFiaWxpdGllcykuCisJICovCisJaW50ICgqc2V0X2Nh
cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSAgICAgICB1
bnNpZ25lZCBpbnQgdm5ldF9oZHJfbGVuKTsKKworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNj
OworCWludCBmZDsKKwl1bnNpZ25lZCBpbnQgYmVfdm5ldF9oZHJfbGVuOworCXVuc2lnbmVkIGlu
dCBmZV92bmV0X2hkcl9sZW47CisJdm9pZCAqcHJpdjsJLyogUG9pbnRlciB0byBiYWNrZW5kLXNw
ZWNpZmljIGRhdGEuICovCit9OworCitTRVRfREVDTEFSRShuZXRfYmFja2VuZF9zLCBzdHJ1Y3Qg
bmV0X2JhY2tlbmQpOworCisjZGVmaW5lIFZORVRfSERSX0xFTglzaXplb2Yoc3RydWN0IHZpcnRp
b19uZXRfcnhoZHIpCisKKyNkZWZpbmUgV1BSSU5URihwYXJhbXMpIHByaW50ZiBwYXJhbXMKKwor
LyogdGhlIG51bGwgYmFja2VuZCAqLworc3RhdGljIGludAorbmV0YmVfbnVsbF9pbml0KHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j
Yl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwkodm9pZClkZXZuYW1lOyAodm9pZCljYjsgKHZvaWQp
cGFyYW07CisJYmUtPmZkID0gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRi
ZV9udWxsX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwkodm9pZCliZTsKK30K
Kworc3RhdGljIHVpbnQ2NF90CituZXRiZV9udWxsX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5k
ICpiZSkKK3sKKwkodm9pZCliZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0YmVf
bnVsbF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAor
CQkJdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOyAodm9pZClmZWF0dXJlczsg
KHZvaWQpdm5ldF9oZHJfbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9u
dWxsX3NlbmQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJaW50
IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSkKK3sKKwkodm9pZCliZTsgKHZvaWQpaW92
OyAodm9pZClpb3ZjbnQ7ICh2b2lkKWxlbjsgKHZvaWQpbW9yZTsKKwlyZXR1cm4gMDsgLyogcHJl
dGVuZCB3ZSBzZW5kICovCit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfcmVjdihzdHJ1Y3Qg
bmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwkodm9p
ZCliZTsgKHZvaWQpaW92OyAodm9pZClpb3ZjbnQ7CisJZnByaW50ZihzdGRlcnIsICJuZXRiZV9u
dWxsX3JlY3YgY2FsbGVkID9cbiIpOworCXJldHVybiAtMTsgLyogbmV2ZXIgY2FsbGVkLCBpIGJl
bGlldmUgKi8KK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuX2JlID0geworCS5uYW1l
ID0gIm51bGwiLAorCS5pbml0ID0gbmV0YmVfbnVsbF9pbml0LAorCS5jbGVhbnVwID0gbmV0YmVf
bnVsbF9jbGVhbnVwLAorCS5zZW5kID0gbmV0YmVfbnVsbF9zZW5kLAorCS5yZWN2ID0gbmV0YmVf
bnVsbF9yZWN2LAorCS5nZXRfY2FwID0gbmV0YmVfbnVsbF9nZXRfY2FwLAorCS5zZXRfY2FwID0g
bmV0YmVfbnVsbF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgbl9iZSk7
CisKKworLyogdGhlIHRhcCBiYWNrZW5kICovCisKK3N0cnVjdCB0YXBfcHJpdiB7CisJc3RydWN0
IG1ldmVudCAqbWV2cDsKK307CisKK3N0YXRpYyB2b2lkCit0YXBfY2xlYW51cChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCB0YXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCisJ
aWYgKGJlLT5wcml2KSB7CisJCW1ldmVudF9kZWxldGUocHJpdi0+bWV2cCk7CisJCWZyZWUoYmUt
PnByaXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWlmIChiZS0+ZmQgIT0gLTEpIHsKKwkJ
Y2xvc2UoYmUtPmZkKTsKKwkJYmUtPmZkID0gLTE7CisJfQorfQorCitzdGF0aWMgaW50Cit0YXBf
aW5pdChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpkZXZuYW1lLAorCSBuZXRf
YmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwljaGFyIHRidWZbODBdOworCWludCBm
ZDsKKwlpbnQgb3B0ID0gMTsKKwlzdHJ1Y3QgdGFwX3ByaXYgKnByaXY7CisKKwlpZiAoY2IgPT0g
TlVMTCkgeworCQlXUFJJTlRGKCgiVEFQIGJhY2tlbmQgcmVxdWlyZXMgbm9uLU5VTEwgY2FsbGJh
Y2tcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0
cnVjdCB0YXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoInRhcF9w
cml2IGFsbG9jIGZhaWxlZFxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RyY3B5KHRidWYs
ICIvZGV2LyIpOworCXN0cmxjYXQodGJ1ZiwgZGV2bmFtZSwgc2l6ZW9mKHRidWYpKTsKKworCWZk
ID0gb3Blbih0YnVmLCBPX1JEV1IpOworCWlmIChmZCA9PSAtMSkgeworCQlXUFJJTlRGKCgib3Bl
biBvZiB0YXAgZGV2aWNlICVzIGZhaWxlZFxuIiwgdGJ1ZikpOworCQlnb3RvIGVycm9yOworCX0K
KworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKwkgKiBu
b3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkgKi8KKwlpZiAoaW9jdGwoZmQsIEZJ
T05CSU8sICZvcHQpIDwgMCkgeworCQlXUFJJTlRGKCgidGFwIGRldmljZSBPX05PTkJMT0NLIGZh
aWxlZFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCXByaXYtPm1ldnAgPSBtZXZlbnRfYWRk
KGZkLCBFVkZfUkVBRCwgY2IsIHBhcmFtKTsKKwlpZiAocHJpdi0+bWV2cCA9PSBOVUxMKSB7CisJ
CVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIpKTsKKwkJZ290byBlcnJvcjsK
Kwl9CisKKwliZS0+ZmQgPSBmZDsKKwliZS0+cHJpdiA9IHByaXY7CisKKwlyZXR1cm4gMDsKKwor
ZXJyb3I6CisJdGFwX2NsZWFudXAoYmUpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIENhbGxl
ZCB0byBzZW5kIGEgYnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0
aWMgaW50Cit0YXBfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLAorCWludCBtb3JlKQoreworCXN0YXRpYyBjaGFy
IHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCisKKwkodm9pZCltb3JlOworCS8qCisJICog
SWYgdGhlIGxlbmd0aCBpcyA8IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBl
eHRyYSB6ZXJvJ2Qgc2VnbWVudCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkg
KiB0aGVyZSBpcyBhbHdheXMgYW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgor
CSAqLworCWlmIChsZW4gPCA2MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJ
aW92W2lvdmNudF0uaW92X2xlbiA9IChzaXplX3QpKDYwIC0gbGVuKTsKKwkJaW92Y250Kys7CisJ
fQorCisJcmV0dXJuIChpbnQpd3JpdGV2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworfQorCitzdGF0
aWMgaW50Cit0YXBfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCkKK3sKKwlpbnQgcmV0OworCisJLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxl
ZCB3aXRob3V0IGEgdmFsaWQgdGFwIGZkICovCisJYXNzZXJ0KGJlLT5mZCAhPSAtMSk7CisKKwly
ZXQgPSAoaW50KXJlYWR2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworCisJaWYgKHJldCA8IDAgJiYg
ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJldDsK
K30KKworc3RhdGljIHVpbnQ2NF90Cit0YXBfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
KQoreworCSh2b2lkKWJlOworCXJldHVybiAwOyAvLyBub3RoaW5nIGV4dHJhCit9CisKK3N0YXRp
YyBpbnQKK3RhcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1
cmVzLAorCQkgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOworCXJldHVybiAo
ZmVhdHVyZXMgfHwgdm5ldF9oZHJfbGVuKSA/IC0xIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBu
ZXRfYmFja2VuZCB0YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJ0YXB8dm1tbmV0IiwKKwkuaW5p
dCA9IHRhcF9pbml0LAorCS5jbGVhbnVwID0gdGFwX2NsZWFudXAsCisJLnNlbmQgPSB0YXBfc2Vu
ZCwKKwkucmVjdiA9IHRhcF9yZWN2LAorCS5nZXRfY2FwID0gdGFwX2dldF9jYXAsCisJLnNldF9j
YXAgPSB0YXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIHRhcF9iYWNr
ZW5kKTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKy8qCisgKiBUaGUgbmV0bWFwIGJhY2tlbmQK
KyAqLworCisvKiBUaGUgdmlydGlvLW5ldCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgbmV0bWFwLiAq
LworI2RlZmluZSBORVRNQVBfRkVBVFVSRVMgKFZJUlRJT19ORVRfRl9DU1VNIHwgVklSVElPX05F
VF9GX0hPU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0hPU1RfVFNPNiB8IFZJUlRJT19ORVRf
Rl9IT1NUX1VGTyB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX0NTVU0gfCBWSVJUSU9fTkVUX0Zf
R1VFU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX1RTTzYgfCBWSVJUSU9fTkVUX0Zf
R1VFU1RfVUZPKQorCisjZGVmaW5lIE5FVE1BUF9QT0xMTUFTSyAoUE9MTElOIHwgUE9MTFJETk9S
TSB8IFBPTExSREJBTkQpCisKK3N0cnVjdCBuZXRtYXBfcHJpdiB7CisJY2hhciBpZm5hbWVbSUZO
QU1TSVpdOworCXN0cnVjdCBubV9kZXNjICpubWQ7CisJdWludDE2X3QgbWVtaWQ7CisJc3RydWN0
IG5ldG1hcF9yaW5nICpyeDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnR4OworCXB0aHJlYWRfdCBl
dmxvb3BfdGlkOworCW5ldF9iYWNrZW5kX2NiX3QgY2I7CisJdm9pZCAqY2JfcGFyYW07CisKKwlz
dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgcHRuZXRtYXA7Cit9OworCitzdGF0aWMgdm9pZCAqCituZXRt
YXBfZXZsb29wX3RocmVhZCh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
ID0gcGFyYW07CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0
IHBvbGxmZCBwZmQ7CisJaW50IHJldDsKKworCWZvciAoOzspIHsKKwkJcGZkLmZkID0gYmUtPmZk
OworCQlwZmQuZXZlbnRzID0gTkVUTUFQX1BPTExNQVNLOworCQlyZXQgPSBwb2xsKCZwZmQsIDEs
IElORlRJTSk7CisJCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJCVdQUklO
VEYoKCJuZXRtYXAgcG9sbCBmYWlsZWQsICVkXG4iLCBlcnJubykpOworCQl9IGVsc2UgaWYgKHJl
dCA9PSAxICYmIChwZmQucmV2ZW50cyAmIE5FVE1BUF9QT0xMTUFTSykpIHsKKwkJCXByaXYtPmNi
KHBmZC5mZCwgRVZGX1JFQUQsIHByaXYtPmNiX3BhcmFtKTsKKwkJfQorCX0KKworCXJldHVybiBO
VUxMOworfQorCitzdGF0aWMgdm9pZAorbm1yZXFfaW5pdChzdHJ1Y3Qgbm1yZXEgKnJlcSwgY2hh
ciAqaWZuYW1lKQoreworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisJc3RybmNweShy
ZXEtPm5yX25hbWUsIGlmbmFtZSwgc2l6ZW9mKHJlcS0+bnJfbmFtZSkpOworCXJlcS0+bnJfdmVy
c2lvbiA9IE5FVE1BUF9BUEk7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfdm5ldF9oZHJf
bGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGludCB2bmV0X2hkcl9sZW4pCit7CisJaW50IGVy
cjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5w
cml2OworCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBO
RVRNQVBfQkRHX1ZORVRfSERSOworCXJlcS5ucl9hcmcxID0gdm5ldF9oZHJfbGVuOworCWVyciA9
IGlvY3RsKGJlLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCVdQUklOVEYo
KCJVbmFibGUgdG8gc2V0IHZuZXQgaGVhZGVyIGxlbmd0aCAlZFxuIiwKKwkJCQl2bmV0X2hkcl9s
ZW4pKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwliZS0+YmVfdm5ldF9oZHJfbGVuID0gdm5ldF9o
ZHJfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9oYXNfdm5ldF9o
ZHJfbGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sK
KwlpbnQgcHJldl9oZHJfbGVuID0gYmUtPmJlX3ZuZXRfaGRyX2xlbjsKKwlpbnQgcmV0OworCisJ
aWYgKHZuZXRfaGRyX2xlbiA9PSBwcmV2X2hkcl9sZW4pIHsKKwkJcmV0dXJuIDE7CisJfQorCisJ
cmV0ID0gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7CisJaWYgKHJl
dCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwluZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgcHJl
dl9oZHJfbGVuKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldG1hcF9n
ZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJcmV0dXJuIG5ldG1hcF9oYXNfdm5l
dF9oZHJfbGVuKGJlLCBWTkVUX0hEUl9MRU4pID8KKwkJCU5FVE1BUF9GRUFUVVJFUyA6IDA7Cit9
CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVp
bnQ2NF90IGZlYXR1cmVzLAorCSAgICAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJcmV0
dXJuIG5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCB2bmV0X2hkcl9sZW4pOworfQorCisvKiBT
dG9yZSBhbmQgcmV0dXJuIHRoZSBmZWF0dXJlcyB3ZSBhZ3JlZWQgdXBvbi4gKi8KK3VpbnQzMl90
CitwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHVpbnQz
Ml90IHdhbnRlZF9mZWF0dXJlcykKK3sKKwlwdG4tPmFja2VkX2ZlYXR1cmVzID0gcHRuLT5mZWF0
dXJlcyAmIHdhbnRlZF9mZWF0dXJlczsKKworCXJldHVybiBwdG4tPmFja2VkX2ZlYXR1cmVzOwor
fQorCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKgorZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFj
a2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUgPyBiZS0+cHJpdiA6
IE5VTEw7CisJc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHBpOworCXN0cnVjdCBubXJlcSByZXE7
CisJaW50IGVycjsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHB0bmV0bWFwIGJhY2tlbmQu
ICovCisJaWYgKCFiZSB8fCBiZS0+c2V0X2NhcCAhPSBuZXRtYXBfc2V0X2NhcCB8fAorCQkJIShw
cml2LT5ubWQtPnJlcS5ucl9mbGFncyAmIE5SX1BUTkVUTUFQX0hPU1QpKSB7CisJCXJldHVybiBO
VUxMOworCX0KKworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21k
ID0gTkVUTUFQX1BPT0xTX0lORk9fR0VUOworCW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsICZwaSk7
CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJy
KSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWVyciA9IHB0bl9tZW1kZXZfYXR0YWNoKHByaXYt
Pm5tZC0+bWVtLCAmcGkpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0
dXJuICZwcml2LT5wdG5ldG1hcDsKK30KKworaW50CitwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0
cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZikKK3sK
KwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCisJbWVtc2V0
KG5pZiwgMCwgc2l6ZW9mKCpuaWYpKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0
dXJuIEVJTlZBTDsKKwl9CisKKwluaWYtPm5pZnBfb2Zmc2V0ID0gcHJpdi0+bm1kLT5yZXEubnJf
b2Zmc2V0OworCW5pZi0+bnVtX3R4X3JpbmdzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfcmluZ3M7
CisJbmlmLT5udW1fcnhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9yaW5nczsKKwluaWYt
Pm51bV90eF9zbG90cyA9IHByaXYtPm5tZC0+cmVxLm5yX3R4X3Nsb3RzOworCW5pZi0+bnVtX3J4
X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfcnhfc2xvdHM7CisKKwlyZXR1cm4gMDsKK30KKwor
aW50CitwdG5ldG1hcF9nZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQor
eworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwlpZiAo
cHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJp
di0+bWVtaWQ7Cit9CisKK2ludAorcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0
ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpCit7CisJc3RydWN0IG5ldG1hcF9wcml2
ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBlcnI7
CisKKwlpZiAocHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIFhYWCBXZSBz
aG91bGQgc3RvcCB0aGUgbmV0bWFwIGV2bG9vcCBoZXJlLiAqLworCisJLyogQXNrIG5ldG1hcCB0
byBjcmVhdGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJl
cSwgcHJpdi0+aWZuYW1lKTsKKwlubXJlcV9wb2ludGVyX3B1dCgmcmVxLCBjZmcpOworCXJlcS5u
cl9jbWQgPSBORVRNQVBfUFRfSE9TVF9DUkVBVEU7CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5m
ZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6
IFVuYWJsZSB0byBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgb24gIgorCQkJIiVzIFtlcnJubz0l
ZF0iLCBfX2Z1bmNfXywgcHJpdi0+aWZuYW1lLCBlcnJubyk7CisJCXJldHVybiBlcnI7CisJfQor
CisJcHRuLT5ydW5uaW5nID0gMTsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2Rl
bGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bikKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYg
KnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsK
KworCWlmICghcHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIEFzayBuZXRt
YXAgdG8gZGVsZXRlIGt0aHJlYWRzIGZvciB0aGlzIGludGVyZmFjZS4gKi8KKwlubXJlcV9pbml0
KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0RFTEVU
RTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl
cnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBr
dGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUs
IGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAwOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJICAgIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQg
KnBhcmFtKQoreworCWNvbnN0IGNoYXIgKm5kbmFtZSA9ICIvZGV2L25ldG1hcCI7CisJc3RydWN0
IG5ldG1hcF9wcml2ICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBwdG5l
dG1hcCA9IChjYiA9PSBOVUxMKTsKKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBu
ZXRtYXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSBh
bGxvYyBuZXRtYXAgcHJpdmF0ZSBkYXRhXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJu
Y3B5KHByaXYtPmlmbmFtZSwgZGV2bmFtZSwgc2l6ZW9mKHByaXYtPmlmbmFtZSkpOworCXByaXYt
PmlmbmFtZVtzaXplb2YocHJpdi0+aWZuYW1lKSAtIDFdID0gJ1wwJzsKKworCW1lbXNldCgmcmVx
LCAwLCBzaXplb2YocmVxKSk7CisJcmVxLm5yX2ZsYWdzID0gcHRuZXRtYXAgPyBOUl9QVE5FVE1B
UF9IT1NUIDogMDsKKworCXByaXYtPm5tZCA9IG5tX29wZW4ocHJpdi0+aWZuYW1lLCAmcmVxLCBO
RVRNQVBfTk9fVFhfUE9MTCwgTlVMTCk7CisJaWYgKHByaXYtPm5tZCA9PSBOVUxMKSB7CisJCVdQ
UklOVEYoKCJVbmFibGUgdG8gbm1fb3BlbigpOiBkZXZpY2UgJyVzJywgIgorCQkJCSJpbnRlcmZh
Y2UgJyVzJywgZXJybm8gKCVzKVxuIiwKKwkJCQluZG5hbWUsIGRldm5hbWUsIHN0cmVycm9yKGVy
cm5vKSkpOworCQlmcmVlKHByaXYpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdi0+bWVtaWQg
PSBwcml2LT5ubWQtPnJlcS5ucl9hcmcyOworCXByaXYtPnR4ID0gTkVUTUFQX1RYUklORyhwcml2
LT5ubWQtPm5pZnAsIDApOworCXByaXYtPnJ4ID0gTkVUTUFQX1JYUklORyhwcml2LT5ubWQtPm5p
ZnAsIDApOworCXByaXYtPmNiID0gY2I7CisJcHJpdi0+Y2JfcGFyYW0gPSBwYXJhbTsKKwliZS0+
ZmQgPSBwcml2LT5ubWQtPmZkOworCWJlLT5wcml2ID0gcHJpdjsKKworCXByaXYtPnB0bmV0bWFw
Lm5ldG1hcF9wcml2ID0gcHJpdjsKKwlwcml2LT5wdG5ldG1hcC5mZWF0dXJlcyA9IDA7CisJcHJp
di0+cHRuZXRtYXAuYWNrZWRfZmVhdHVyZXMgPSAwOworCXByaXYtPnB0bmV0bWFwLnJ1bm5pbmcg
PSAwOworCWlmIChwdG5ldG1hcCkgeworCQlpZiAobmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUs
IFZORVRfSERSX0xFTikpIHsKKwkJCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzIHw9IFBUTkVUTUFQ
X0ZfVk5FVF9IRFI7CisJCX0KKwl9IGVsc2UgeworCQljaGFyIHRuYW1lWzQwXTsKKworCQkvKiBD
cmVhdGUgYSB0aHJlYWQgZm9yIG5ldG1hcCBwb2xsLiAqLworCQlwdGhyZWFkX2NyZWF0ZSgmcHJp
di0+ZXZsb29wX3RpZCwgTlVMTCwgbmV0bWFwX2V2bG9vcF90aHJlYWQsICh2b2lkICopYmUpOwor
CQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgIm5ldG1hcC1ldmxvb3AtJXAiLCBwcml2
KTsKKwkJcHRocmVhZF9zZXRfbmFtZV9ucChwcml2LT5ldmxvb3BfdGlkLCB0bmFtZSk7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfY2xlYW51cChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2Owor
CisJaWYgKGJlLT5wcml2KSB7CisJCWlmIChwcml2LT5wdG5ldG1hcC5ydW5uaW5nKSB7CisJCQlw
dG5ldG1hcF9kZWxldGUoJnByaXYtPnB0bmV0bWFwKTsKKwkJfQorCQlubV9jbG9zZShwcml2LT5u
bWQpOworCQlmcmVlKGJlLT5wcml2KTsKKwkJYmUtPnByaXYgPSBOVUxMOworCX0KKwliZS0+ZmQg
PSAtMTsKK30KKworLyogQSBmYXN0IGNvcHkgcm91dGluZSBvbmx5IGZvciBtdWx0aXBsZXMgb2Yg
NjQgYnl0ZXMsIG5vbiBvdmVybGFwcGVkLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwa3RfY29w
eShjb25zdCB2b2lkICpfc3JjLCB2b2lkICpfZHN0LCBpbnQgbCkKK3sKKyAgICBjb25zdCB1aW50
NjRfdCAqc3JjID0gX3NyYzsKKyAgICB1aW50NjRfdCAqZHN0ID0gX2RzdDsKKyAgICBpZiAobCA+
PSAxMDI0KSB7CisgICAgICAgIGJjb3B5KHNyYywgZHN0LCBsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBmb3IgKDsgbCA+IDA7IGwgLT0gNjQpIHsKKyAgICAgICAgKmRzdCsrID0gKnNy
YysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsK
KyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAg
ICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAq
ZHN0KysgPSAqc3JjKys7CisgICAgfQorfQorCitzdGF0aWMgaW50CituZXRtYXBfc2VuZChzdHJ1
Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkgICAgaW50IGlvdmNudCwg
dWludDMyX3Qgc2l6ZSwgaW50IG1vcmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0g
YmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCWludCBubV9idWZfc2l6ZTsK
KwlpbnQgbm1fYnVmX2xlbjsKKwl1aW50MzJfdCBoZWFkOworCXZvaWQgKm5tX2J1ZjsKKwlpbnQg
ajsKKworCWlmIChpb3ZjbnQgPD0gMCB8fCBzaXplIDw9IDApIHsKKwkJRCgiV3JvbmcgaW92OiBp
b3ZjbnQgJWQgc2l6ZSAlZCIsIGlvdmNudCwgc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCXJp
bmcgPSBwcml2LT50eDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpZiAoaGVhZCA9PSByaW5nLT50
YWlsKSB7CisJCVJEKDEsICJObyBzcGFjZSwgZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQlnb3Rv
IHR4c3luYzsKKwl9CisJbm1fYnVmID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRd
LmJ1Zl9pZHgpOworCW5tX2J1Zl9zaXplID0gcmluZy0+bnJfYnVmX3NpemU7CisJbm1fYnVmX2xl
biA9IDA7CisKKwlmb3IgKGogPSAwOyBqIDwgaW92Y250OyBqKyspIHsKKwkJaW50IGlvdl9mcmFn
X3NpemUgPSBpb3Zbal0uaW92X2xlbjsKKwkJdm9pZCAqaW92X2ZyYWdfYnVmID0gaW92W2pdLmlv
dl9iYXNlOworCisJCS8qIFNwbGl0IGVhY2ggaW92ZWMgZnJhZ21lbnQgb3ZlciBtb3JlIG5ldG1h
cCBzbG90cywgaWYKKwkJICAgbmVjZXNzYXJ5LiAqLworCQlmb3IgKDs7KSB7CisJCQlpbnQgY29w
eWxlbjsKKworCQkJY29weWxlbiA9IGlvdl9mcmFnX3NpemUgPCBubV9idWZfc2l6ZSA/IGlvdl9m
cmFnX3NpemUgOiBubV9idWZfc2l6ZTsKKwkJCXBrdF9jb3B5KGlvdl9mcmFnX2J1Ziwgbm1fYnVm
LCBjb3B5bGVuKTsKKworCQkJaW92X2ZyYWdfYnVmICs9IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19z
aXplIC09IGNvcHlsZW47CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9zaXplIC09
IGNvcHlsZW47CisJCQlubV9idWZfbGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChpb3ZfZnJhZ19z
aXplID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmluZy0+c2xvdFtoZWFkXS5sZW4g
PSBubV9idWZfbGVuOworCQkJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IE5TX01PUkVGUkFHOwor
CQkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKwkJCWlmIChoZWFkID09IHJpbmct
PnRhaWwpIHsKKwkJCQkvKiBXZSByYW4gb3V0IG9mIG5ldG1hcCBzbG90cyB3aGlsZQorCQkJCSAq
IHNwbGl0dGluZyB0aGUgaW92ZWMgZnJhZ21lbnRzLiAqLworCQkJCVJEKDEsICJObyBzcGFjZSwg
ZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQkJCWdvdG8gdHhzeW5jOworCQkJfQorCQkJbm1fYnVm
ID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRdLmJ1Zl9pZHgpOworCQkJbm1fYnVm
X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwkJCW5tX2J1Zl9sZW4gPSAwOworCQl9CisJfQor
CisJLyogQ29tcGxldGUgdGhlIGxhc3Qgc2xvdCwgd2hpY2ggbXVzdCBub3QgaGF2ZSBOU19NT1JF
RlJBRyBzZXQuICovCisJcmluZy0+c2xvdFtoZWFkXS5sZW4gPSBubV9idWZfbGVuOworCXJpbmct
PnNsb3RbaGVhZF0uZmxhZ3MgPSAwOworCWhlYWQgPSBubV9yaW5nX25leHQocmluZywgaGVhZCk7
CisKKwkvKiBOb3cgdXBkYXRlIHJpbmctPmhlYWQgYW5kIHJpbmctPmN1ci4gKi8KKwlyaW5nLT5o
ZWFkID0gcmluZy0+Y3VyID0gaGVhZDsKKworCWlmIChtb3JlKSB7Ly8gJiYgbm1fcmluZ19zcGFj
ZShyaW5nKSA+IDY0CisJCXJldHVybiAwOworCX0KK3R4c3luYzoKKwlpb2N0bChiZS0+ZmQsIE5J
T0NUWFNZTkMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9y
ZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250
KQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCXN0cnVjdCBuZXRt
YXBfc2xvdCAqc2xvdCA9IE5VTEw7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXZvaWQg
Kmlvdl9mcmFnX2J1ZjsKKwlpbnQgaW92X2ZyYWdfc2l6ZTsKKwlpbnQgdG90bGVuID0gMDsKKwl1
aW50MzJfdCBoZWFkOworCisJYXNzZXJ0KGlvdmNudCk7CisKKwlyaW5nID0gcHJpdi0+cng7CisJ
aGVhZCA9IHJpbmctPmhlYWQ7CisJaW92X2ZyYWdfYnVmID0gaW92LT5pb3ZfYmFzZTsKKwlpb3Zf
ZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCisJZG8geworCQlpbnQgbm1fYnVmX2xlbjsKKwkJ
dm9pZCAqbm1fYnVmOworCisJCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCXJldHVybiAw
OworCQl9CisKKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFkOworCQlubV9idWYgPSBORVRNQVBf
QlVGKHJpbmcsIHNsb3QtPmJ1Zl9pZHgpOworCQlubV9idWZfbGVuID0gc2xvdC0+bGVuOworCisJ
CWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuID0gbm1fYnVmX2xlbiA8IGlvdl9mcmFnX3NpemUg
PyBubV9idWZfbGVuIDogaW92X2ZyYWdfc2l6ZTsKKworCQkJcGt0X2NvcHkobm1fYnVmLCBpb3Zf
ZnJhZ19idWYsIGNvcHlsZW4pOworCQkJbm1fYnVmICs9IGNvcHlsZW47CisJCQlubV9idWZfbGVu
IC09IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3Np
emUgLT0gY29weWxlbjsKKwkJCXRvdGxlbiArPSBjb3B5bGVuOworCisJCQlpZiAobm1fYnVmX2xl
biA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlvdisrOworCQkJaW92Y250LS07CisJ
CQlpZiAoaW92Y250ID09IDApIHsKKwkJCQkvKiBObyBzcGFjZSB0byByZWNlaXZlLiAqLworCQkJ
CUQoIlNob3J0IGlvdiwgZHJvcCAlZCBieXRlcyIsIHRvdGxlbik7CisJCQkJcmV0dXJuIC1FTk9T
UEM7CisJCQl9CisJCQlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCQkJaW92X2ZyYWdf
c2l6ZSA9IGlvdi0+aW92X2xlbjsKKwkJfQorCisJCWhlYWQgPSBubV9yaW5nX25leHQocmluZywg
aGVhZCk7CisKKwl9IHdoaWxlIChzbG90LT5mbGFncyAmIE5TX01PUkVGUkFHKTsKKworCS8qIFJl
bGVhc2Ugc2xvdHMgdG8gbmV0bWFwLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFk
OworCisJcmV0dXJuIHRvdGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuZXRt
YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJuZXRtYXB8dmFsZSIsCisJLmluaXQgPSBuZXRtYXBf
aW5pdCwKKwkuY2xlYW51cCA9IG5ldG1hcF9jbGVhbnVwLAorCS5zZW5kID0gbmV0bWFwX3NlbmQs
CisJLnJlY3YgPSBuZXRtYXBfcmVjdiwKKwkuZ2V0X2NhcCA9IG5ldG1hcF9nZXRfY2FwLAorCS5z
ZXRfY2FwID0gbmV0bWFwX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBu
ZXRtYXBfYmFja2VuZCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisvKgorICogbWFr
ZSBzdXJlIGEgYmFja2VuZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZAorICovCitzdGF0aWMgdm9p
ZAorbmV0YmVfZml4KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp
CisJCXJldHVybjsKKwlpZiAoYmUtPm5hbWUgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwg
Im1pc3NpbmcgbmFtZSBmb3IgJXBcbiIsIGJlKTsKKwkJYmUtPm5hbWUgPSAidW5uYW1lZCBuZXRi
ZSI7CisJfQorCWlmIChiZS0+aW5pdCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz
c2luZyBpbml0IGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmluaXQgPSBuZXRi
ZV9udWxsX2luaXQ7CisJfQorCWlmIChiZS0+Y2xlYW51cCA9PSBOVUxMKSB7CisJCWZwcmludGYo
c3RkZXJyLCAibWlzc2luZyBjbGVhbnVwIGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJ
YmUtPmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXA7CisJfQorCWlmIChiZS0+c2VuZCA9PSBO
VUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZW5kIGZvciAlcCAlc1xuIiwgYmUs
IGJlLT5uYW1lKTsKKwkJYmUtPnNlbmQgPSBuZXRiZV9udWxsX3NlbmQ7CisJfQorCWlmIChiZS0+
cmVjdiA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyByZWN2IGZvciAlcCAl
c1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPnJlY3YgPSBuZXRiZV9udWxsX3JlY3Y7CisJfQor
CWlmIChiZS0+Z2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBn
ZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5nZXRfY2FwID0g
bmV0YmVfbnVsbF9nZXRfY2FwOworCX0KKwlpZiAoYmUtPnNldF9jYXAgPT0gTlVMTCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgIm1pc3Npbmcgc2V0X2NhcCBmb3IgJXAgJXNcbiIsCisJCQliZSwgYmUt
Pm5hbWUpOworCQliZS0+c2V0X2NhcCA9IG5ldGJlX251bGxfc2V0X2NhcDsKKwl9Cit9CisKKy8q
CisgKiBrZXlzIGlzIGEgc2V0IG9mIHByZWZpeGVzIHNlcGFyYXRlZCBieSAnfCcsCisgKiByZXR1
cm4gMSBpZiB0aGUgbGVmdG1vc3QgcGFydCBvZiBuYW1lIG1hdGNoZXMgb25lIHByZWZpeC4KKyAq
Lworc3RhdGljIGNvbnN0IGNoYXIgKgorbmV0YmVfbmFtZV9tYXRjaChjb25zdCBjaGFyICprZXlz
LCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKm4gPSBuYW1lLCAqZ29vZCA9IGtl
eXM7CisJY2hhciBjOworCisJaWYgKCFrZXlzIHx8ICFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwl3
aGlsZSAoIChjID0gKmtleXMrKykgKSB7CisJCWlmIChjID09ICd8JykgeyAvKiByZWFjaGVkIHRo
ZSBzZXBhcmF0b3IgKi8KKwkJCWlmIChnb29kKQorCQkJCWJyZWFrOworCQkJLyogcHJlcGFyZSBm
b3IgbmV3IHJvdW5kICovCisJCQluID0gbmFtZTsKKwkJCWdvb2QgPSBrZXlzOworCQl9IGVsc2Ug
aWYgKGdvb2QgJiYgYyAhPSAqbisrKSB7CisJCQlnb29kID0gTlVMTDsgLyogZHJvcCB0aWxsIG5l
eHQga2V5d29yZCAqLworCQl9CisJfQorCXJldHVybiBnb29kOworfQorCisvKgorICogSW5pdGlh
bGl6ZSBhIGJhY2tlbmQgYW5kIGF0dGFjaCB0byB0aGUgZnJvbnRlbmQuCisgKiBUaGlzIGlzIGNh
bGxlZCBkdXJpbmcgZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24uCisgKiBkZXZuYW1lIGlzIHRoZSBi
YWNrZW5kLW5hbWUgYXMgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAqIAllLmcuIC1z
IDI6MCxmcm9udGVuZC1uYW1lLGJhY2tlbmQtbmFtZVssb3RoZXItYXJnc10KKyAqIGNiIGlzIHRo
ZSByZWNlaXZlIGNhbGxiYWNrIHN1cHBsaWVkIGJ5IHRoZSBmcm9udGVuZCwKKyAqCWFuZCBpdCBp
cyBpbnZva2VkIGluIHRoZSBldmVudCBsb29wIHdoZW4gYSByZWNlaXZlCisgKglldmVudCBpcyBn
ZW5lcmF0ZWQgaW4gdGhlIGh5cGVydmlzb3IsCisgKiBwYXJhbSBpcyBhIHBvaW50ZXIgdG8gdGhl
IGZyb250ZW5kLCBhbmQgbm9ybWFsbHkgdXNlZCBhcworICoJdGhlIGFyZ3VtZW50IGZvciB0aGUg
Y2FsbGJhY2suCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCAqCituZXRiZV9pbml0KGNvbnN0IGNo
YXIgKmRldm5hbWUsIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCXN0cnVj
dCBuZXRfYmFja2VuZCAqKnBiZSwgKmJlLCAqdGJlID0gTlVMTDsKKwlpbnQgZXJyOworCisJLyoK
KwkgKiBGaW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQgZGVwZW5kaW5nIG9uIHRoZSB1c2VyLXByb3Zp
ZGVkCisJICogZGV2aWNlIG5hbWUuIG5ldF9iYWNrZW5kX3MgaXMgYnVpbHQgdXNpbmcgYSBsaW5r
ZXIgc2V0LgorCSAqLworCVNFVF9GT1JFQUNIKHBiZSwgbmV0X2JhY2tlbmRfcykgeworCQlpZiAo
bmV0YmVfbmFtZV9tYXRjaCgoKnBiZSktPm5hbWUsIGRldm5hbWUpKSB7CisJCQl0YmUgPSAqcGJl
OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHRiZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsg
Lyogb3IgbnVsbCBiYWNrZW5kID8gKi8KKwliZSA9IGNhbGxvYygxLCBzaXplb2YoKmJlKSk7CisJ
KmJlID0gKnRiZTsJLyogY29weSB0aGUgdGVtcGxhdGUgKi8KKwluZXRiZV9maXgoYmUpOyAvKiBt
YWtlIHN1cmUgd2UgaGF2ZSBhbGwgZmllbGRzICovCisJYmUtPmZkID0gLTE7CisJYmUtPnByaXYg
PSBOVUxMOworCWJlLT5zYyA9IHBhcmFtOworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSAwOworCWJl
LT5mZV92bmV0X2hkcl9sZW4gPSAwOworCisJLyogaW5pdGlhbGl6ZSB0aGUgYmFja2VuZCAqLwor
CWVyciA9IGJlLT5pbml0KGJlLCBkZXZuYW1lLCBjYiwgcGFyYW0pOworCWlmIChlcnIpIHsKKwkJ
ZnJlZShiZSk7CisJCWJlID0gTlVMTDsKKwl9CisJcmV0dXJuIGJlOworfQorCit2b2lkCituZXRi
ZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJ
CXJldHVybjsKKwliZS0+Y2xlYW51cChiZSk7CisJZnJlZShiZSk7Cit9CisKK3VpbnQ2NF90Citu
ZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp
CisJCXJldHVybiAwOworCXJldHVybiBiZS0+Z2V0X2NhcChiZSk7Cit9CisKK2ludAorbmV0YmVf
c2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkgICAg
ICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxM
KQorCQlyZXR1cm4gMDsKKworCS8qIFRoZXJlIGFyZSBvbmx5IHRocmVlIHZhbGlkIGxlbmd0aHMu
ICovCisJaWYgKHZuZXRfaGRyX2xlbiAmJiB2bmV0X2hkcl9sZW4gIT0gVk5FVF9IRFJfTEVOCisJ
CSYmIHZuZXRfaGRyX2xlbiAhPSAoVk5FVF9IRFJfTEVOIC0gc2l6ZW9mKHVpbnQxNl90KSkpCisJ
CXJldHVybiAtMTsKKworCWJlLT5mZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwly
ZXQgPSBiZS0+c2V0X2NhcChiZSwgZmVhdHVyZXMsIHZuZXRfaGRyX2xlbik7CisJYXNzZXJ0KGJl
LT5iZV92bmV0X2hkcl9sZW4gPT0gMCB8fAorCSAgICAgICBiZS0+YmVfdm5ldF9oZHJfbGVuID09
IGJlLT5mZV92bmV0X2hkcl9sZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5s
aW5lIHN0cnVjdCBpb3ZlYyAqCitpb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICppb3Zj
bnQsIHVuc2lnbmVkIGludCB0bGVuKQoreworCXN0cnVjdCBpb3ZlYyAqcmlvdjsKKworCS8qIFhY
WCBzaG9ydC1jdXQ6IGFzc3VtZSBmaXJzdCBzZWdtZW50IGlzID49IHRsZW4gKi8KKwlhc3NlcnQo
aW92WzBdLmlvdl9sZW4gPj0gdGxlbik7CisKKwlpb3ZbMF0uaW92X2xlbiAtPSB0bGVuOworCWlm
IChpb3ZbMF0uaW92X2xlbiA9PSAwKSB7CisJCWFzc2VydCgqaW92Y250ID4gMSk7CisJCSppb3Zj
bnQgLT0gMTsKKwkJcmlvdiA9ICZpb3ZbMV07CisJfSBlbHNlIHsKKwkJaW92WzBdLmlvdl9iYXNl
ID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0uaW92X2Jhc2UgKyB0bGVuKTsKKwkJcmlvdiA9
ICZpb3ZbMF07CisJfQorCisJcmV0dXJuIChyaW92KTsKK30KKwordm9pZAorbmV0YmVfc2VuZChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgdWlu
dDMyX3QgbGVuLAorCSAgIGludCBtb3JlKQoreworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm47
CisjaWYgMAorCWludCBpOworCUQoInNlbmRpbmcgaW92Y250ICVkIGxlbiAlZCBpb3ZlYyAlcCIs
IGlvdmNudCwgbGVuLCBpb3YpOworCWZvciAoaT0wOyBpIDwgaW92Y250OyBpKyspCisJCUQoIiAg
ICUzZDogJTRkICVwIiwgaSwgKGludClpb3ZbaV0uaW92X2xlbiwgaW92W2ldLmlvdl9iYXNlKTsK
KyNlbmRpZgorCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4p
IHsKKwkJLyogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+YmVfdm5ldF9oZHJfbGVuIGlzIDAuICovCisJ
CWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNudCwgYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisJfQor
CisJYmUtPnNlbmQoYmUsIGlvdiwgaW92Y250LCBsZW4sIG1vcmUpOworfQorCisvKgorICogY2Fu
IHJldHVybiAtMSBpbiBjYXNlIG9mIGVycm9ycworICovCitpbnQKK25ldGJlX3JlY3Yoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJdW5z
aWduZWQgaW50IGhsZW4gPSAwOyAvKiBsZW5ndGggb2YgcHJlcGVuZGVkIHZpcnRpby1uZXQgaGVh
ZGVyICovCisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlp
ZiAoYmUtPmJlX3ZuZXRfaGRyX2xlbiAhPSBiZS0+ZmVfdm5ldF9oZHJfbGVuKSB7CisJCXN0cnVj
dCB2aXJ0aW9fbmV0X3J4aGRyICp2aDsKKworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92
bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaGxlbiA9IGJlLT5mZV92bmV0X2hkcl9sZW47CisJCS8q
CisJCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKKwkJICog
ZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgorCQkg
Ki8KKwkJdmggPSBpb3ZbMF0uaW92X2Jhc2U7CisJCWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNu
dCwgaGxlbik7CisKKwkJLyoKKwkJICogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+ZmVfdm5ldF9oZHJf
bGVuIGlzIDAuCisJCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSByeCBwYWNrZXQgaGVh
ZGVyIGlzIHRoZQorCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQgcnggYnVmcyB3ZXJl
IG5lZ290aWF0ZWQuCisJCSAqLworCQltZW1zZXQodmgsIDAsIGhsZW4pOworCisJCWlmIChobGVu
ID09IFZORVRfSERSX0xFTikgeworCQkJdmgtPnZyaF9idWZzID0gMTsKKwkJfQorCX0KKworCXJl
dCA9IGJlLT5yZWN2KGJlLCBpb3YsIGlvdmNudCk7CisJaWYgKHJldCA+IDApIHsKKwkJcmV0ICs9
IGhsZW47CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlYWQgYSBwYWNrZXQgZnJv
bSB0aGUgYmFja2VuZCBhbmQgZGlzY2FyZCBpdC4KKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhl
IGRpc2NhcmRlZCBwYWNrZXQgb3IgemVybyBpZiBubyBwYWNrZXQgd2FzIGF2YWlsYWJsZS4KKyAq
IEEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIHJlYWQgZXJyb3Iu
CisgKi8KK2ludAorbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQorewor
CS8qCisJICogTVAgbm90ZTogdGhlIGR1bW15YnVmIGlzIG9ubHkgdXNlZCB0byBkaXNjYXJkIGZy
YW1lcywKKwkgKiBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3Ig
bG9ja2VkLgorCSAqIFdlIG9ubHkgbWFrZSBpdCBsYXJnZSBlbm91Z2ggZm9yIFRTTy1zaXplZCBz
ZWdtZW50LgorCSAqLworCXN0YXRpYyB1aW50OF90IGR1bW15YnVmWzY1NTM2KzY0XTsKKwlzdHJ1
Y3QgaW92ZWMgaW92OworCisJaW92Lmlvdl9iYXNlID0gZHVtbXlidWY7CisJaW92Lmlvdl9sZW4g
PSBzaXplb2YoZHVtbXlidWYpOworCisJcmV0dXJuIG5ldGJlX3JlY3YoYmUsICZpb3YsIDEpOwor
fQorCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaCAv
dXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaAotLS0gdXNyL3NyYy91c3Iuc2Jp
bi9iaHl2ZS9uZXRfYmFja2VuZHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgJMjAxNi0xMS0zMCAx
MDo1NjowNS44NDE5NTgwMDAgKzAwMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lIDx2Lm1hZmZpb25lQGdtYWlsLmNvbT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19ORVRfQkFDS0VORFNfSF9fCisjZGVm
aW5lIF9fTkVUX0JBQ0tFTkRTX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBX
SVRIX05FVE1BUAorI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFw
X3ZpcnQuaD4KKyNkZWZpbmUgTkVUTUFQX1dJVEhfTElCUworI2luY2x1ZGUgPG5ldC9uZXRtYXBf
dXNlci5oPgorI2lmIChORVRNQVBfQVBJIDwgMTEpCisjZXJyb3IgIk5ldG1hcCBBUEkgdmVyc2lv
biBtdXN0IGJlID49IDExIgorI2VuZGlmCisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2lu
Y2x1ZGUgIm1ldmVudC5oIgorCitleHRlcm4gaW50IG5ldG1hcF9pb2N0bF9jb3VudGVyOworCit0
eXBlZGVmIHZvaWQgKCpuZXRfYmFja2VuZF9jYl90KShpbnQsIGVudW0gZXZfdHlwZSwgdm9pZCAq
cGFyYW0pOworCisvKiBJbnRlcmZhY2UgYmV0d2VlbiB2aXJ0aW8tbmV0IGFuZCB0aGUgbmV0d29y
ayBiYWNrZW5kLiAqLworc3RydWN0IG5ldF9iYWNrZW5kOworCitzdHJ1Y3QgbmV0X2JhY2tlbmQg
Km5ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2Is
IHZvaWQgKnBhcmFtKTsKK3ZvaWQJbmV0YmVfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
KTsKK3VpbnQ2NF90IG5ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CitpbnQJ
IG5ldGJlX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgY2FwLAorCQkJ
ICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbik7Cit2b2lkCW5ldGJlX3NlbmQoc3RydWN0IG5ldF9i
YWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCSAgIGludCBpb3ZjbnQsIHVpbnQzMl90
IGxlbiwgaW50IG1vcmUpOworaW50CW5ldGJlX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg
c3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworaW50CW5ldGJlX3J4X2Rpc2NhcmQoc3Ry
dWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworLyoKKyAqIE5ldHdvcmsgZGV2aWNlIGNhcGFiaWxp
dGllcyB0YWtlbiBmcm9tIFZpcnRJTyBzdGFuZGFyZC4KKyAqIERlc3BpdGUgdGhlIG5hbWUsIHRo
ZXNlIGNhcGFiaWxpdGllcyBjYW4gYmUgdXNlZCBieSBkaWZmZXJlbnQgZnJvbnRlbnRzCisgKiAo
dmlydGlvLW5ldCwgcHRuZXQpIGFuZCBzdXBwb3J0ZWQgYnkgZGlmZmVyZW50IGJhY2tlbmRzIChu
ZXRtYXAsIHRhcCwgLi4uKS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAg
MCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwor
I2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAq
LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRl
ZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAko
MSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0Zf
R1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlW
SVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRo
IEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVz
dCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDEx
KSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNP
NgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf
Rl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLworI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8g
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4g
bWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2
KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlWSVJUSU9fTkVU
X0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLworI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJY
IG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5
KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJVklSVElPX05F
VF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3Jh
dHVpdG91cyBwa3RzICovCisKKy8qCisgKiBGaXhlZCBuZXR3b3JrIGhlYWRlciBzaXplCisgKi8K
K3N0cnVjdCB2aXJ0aW9fbmV0X3J4aGRyIHsKKwl1aW50OF90CQl2cmhfZmxhZ3M7CisJdWludDhf
dAkJdnJoX2dzb190eXBlOworCXVpbnQxNl90CXZyaF9oZHJfbGVuOworCXVpbnQxNl90CXZyaF9n
c29fc2l6ZTsKKwl1aW50MTZfdAl2cmhfY3N1bV9zdGFydDsKKwl1aW50MTZfdAl2cmhfY3N1bV9v
ZmZzZXQ7CisJdWludDE2X3QJdnJoX2J1ZnM7Cit9IF9fcGFja2VkOworCisvKgorICogcHRuZXRt
YXAgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IHB0bmV0bWFwX3N0YXRlIHsKKwl2b2lkCQkqbmV0
bWFwX3ByaXY7CisKKwkvKiBUcnVlIGlmIHB0bmV0bWFwIGt0aHJlYWRzIGFyZSBydW5uaW5nLiAq
LworCWludAkJcnVubmluZzsKKworCS8qIEZlYXR1cmUgYWNrbm93ZWxlZGdlbWVudCBzdXBwb3J0
LiAqLworCXVuc2lnbmVkIGxvbmcJZmVhdHVyZXM7CisJdW5zaWduZWQgbG9uZwlhY2tlZF9mZWF0
dXJlczsKKworCS8qIEluZm8gYWJvdXQgbmV0bWFwIG1lbW9yeS4gKi8KKwl1aW50MzJfdAltZW1z
aXplOworCXZvaWQJCSptZW07Cit9OworCisjaWZkZWYgV0lUSF9ORVRNQVAKKy8qIFVzZWQgdG8g
Z2V0IHJlYWQtb25seSBpbmZvLiAqLworc3RydWN0IG5ldG1hcF9pZl9pbmZvIHsKKwl1aW50MzJf
dCBuaWZwX29mZnNldDsKKwl1aW50MTZfdCBudW1fdHhfcmluZ3M7CisJdWludDE2X3QgbnVtX3J4
X3JpbmdzOworCXVpbnQxNl90IG51bV90eF9zbG90czsKKwl1aW50MTZfdCBudW1fcnhfc2xvdHM7
Cit9OworCitpbnQgcHRuX21lbWRldl9hdHRhY2godm9pZCAqbWVtX3B0ciwgc3RydWN0IG5ldG1h
cF9wb29sc19pbmZvICopOworaW50IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0
bWFwX3N0YXRlICpwdG4sCisJCQkgICBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZik7CitzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKiBnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7
Cit1aW50MzJfdCBwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw
dG4sCisJCQkgICAgICAgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKTsKK2ludCBwdG5ldG1hcF9n
ZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKK2ludCBwdG5ldG1hcF9j
cmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm
Zyk7CitpbnQgcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKKyNl
bmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAicGNpX2VtdWwuaCIKK2ludCBuZXRf
cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOwordm9pZCBuZXRfZ2Vu
bWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworCisjZW5kaWYg
LyogX19ORVRfQkFDS0VORFNfSF9fICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNCBWaW5j
ZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAor
ICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hfXworI2RlZmluZSBfX05FVF9CQUNLRU5E
U19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNs
dWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5l
IE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVU
TUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJIHZlcnNpb24gbXVzdCBiZSA+PSAxMSIK
KyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJtZXZlbnQuaCIK
KworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRlcjsKKwordHlwZWRlZiB2b2lkICgqbmV0
X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUsIHZvaWQgKnBhcmFtKTsKKworLyogSW50
ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhlIG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0
cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9iYWNrZW5kICpuZXRiZV9pbml0KGNvbnN0
IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSk7Cit2
b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7Cit1aW50NjRfdCBuZXRi
ZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworaW50CSBuZXRiZV9zZXRfY2FwKHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNhcCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0
X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVj
dCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKTsK
K2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92
LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBW
aXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBuYW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMg
Y2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50cworICogKHZpcnRpby1uZXQsIHB0bmV0
KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNrZW5kcyAobmV0bWFwLCB0YXAsIC4uLiku
CisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0JKDEgPDwgIDApIC8qIGhvc3QgaGFuZGxl
cyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8
ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05F
VF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGllcyBNQUMgKi8KKyNkZWZpbmUJVklSVElP
X05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRlcHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBH
U08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0
IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzYJKDEgPDwg
IDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU
X0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJ
VklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkgLyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8K
KyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAkoMSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2
IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhv
c3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwg
MTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhvc3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwkoMSA8PCAxNikgLyogY29uZmlnIHN0YXR1
cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVlEJKDEgPDwg
MTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hhbm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8K
KyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgkoMSA8PCAxOSkgLyogY29udHJvbCBjaGFu
bmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9BTk5PVU5D
RSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBzZW5kIGdyYXR1aXRvdXMgcGt0cyAqLwor
CisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1Y3QgdmlydGlvX25l
dF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsK
Kwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3NpemU7CisJdWludDE2
X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0OworCXVpbnQxNl90
CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHB0bmV0bWFwIGRlZmluaXRpb25zCisg
Ki8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9pZAkJKm5ldG1hcF9wcml2OworCisJLyog
VHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVubmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7
CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQgc3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBs
b25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNrZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZv
IGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMyX3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVt
OworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBVc2VkIHRvIGdldCByZWFkLW9ubHkgaW5m
by4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJdWludDMyX3QgbmlmcF9vZmZzZXQ7CisJ
dWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90IG51bV9yeF9yaW5nczsKKwl1aW50MTZf
dCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4X3Nsb3RzOworfTsKKworaW50IHB0bl9t
ZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVjdCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsK
K2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAor
CQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYpOworc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDMyX3QgcHRuZXRt
YXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgICAgIHVp
bnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRuZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5l
dG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpOworaW50IHB0bmV0bWFw
X2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CisjZW5kaWYgLyogV0lUSF9ORVRN
QVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitpbnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1h
Y19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQgbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rl
dmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKworI2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRT
X0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVmluY2Vuem8gTWFmZmlvbmUgPHYu
bWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICog
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBf
X05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRfQkFDS0VORFNfSF9fCisKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQCisjaW5jbHVkZSA8bmV0L25ldG1hcC5o
PgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgorI2RlZmluZSBORVRNQVBfV0lUSF9MSUJT
CisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+CisjaWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNl
cnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUgPj0gMTEiCisjZW5kaWYKKyNlbmRpZiAv
KiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0
bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9pZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGlu
dCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisKKy8qIEludGVyZmFjZSBiZXR3ZWVuIHZp
cnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQuICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7
CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5pdChjb25zdCBjaGFyICpkZXZuYW1lLAor
CQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOwordm9pZAluZXRiZV9jbGVhbnVw
KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3Qg
bmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQg
KmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWduZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJ
bmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJ
ICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSk7CitpbnQJbmV0YmVfcmVjdihz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCk7Citp
bnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisvKgorICog
TmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2VuIGZyb20gVmlydElPIHN0YW5kYXJkLgor
ICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJpbGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRp
ZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBi
eSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFwLCAuLi4pLgorICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAq
LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFu
ZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NQUMJKDEgPDwgIDUp
IC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HU09fREVQUkVD
CSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhhbmRsZXMgR1NPICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y0ICov
CisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4g
cmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8q
IGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVT
VF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19O
RVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmlu
ZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEyKSAvKiBob3N0IGNhbiByY3YgVFNPdjYg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNOCSgxIDw8IDEzKSAvKiBob3N0IGNhbiBy
Y3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1VGTwkoMSA8PCAx
NCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVG
CSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBidWZmZXJzICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZpZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxl
ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZRCSgxIDw8IDE3KSAvKiBjb250cm9sIGNo
YW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4
KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBwb3J0ICovCisjZGVmaW5lCVZJUlRJT19O
RVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmlu
ZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIx
KSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBrdHMgKi8KKworLyoKKyAqIEZpeGVkIG5l
dHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgeworCXVpbnQ4
X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3NvX3R5cGU7CisJdWludDE2X3QJdnJoX2hk
cl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOworCXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0
OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1aW50MTZfdAl2cmhfYnVmczsKK30gX19w
YWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0aW9ucworICovCitzdHJ1Y3QgcHRuZXRt
YXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsKKworCS8qIFRydWUgaWYgcHRuZXRtYXAg
a3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQlydW5uaW5nOworCisJLyogRmVhdHVyZSBh
Y2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5zaWduZWQgbG9uZwlmZWF0dXJlczsKKwl1
bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJLyogSW5mbyBhYm91dCBuZXRtYXAgbWVt
b3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9pZAkJKm1lbTsKK307CisKKyNpZmRlZiBX
SVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1vbmx5IGluZm8uICovCitzdHJ1Y3QgbmV0
bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zmc2V0OworCXVpbnQxNl90IG51bV90eF9y
aW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJdWludDE2X3QgbnVtX3R4X3Nsb3RzOwor
CXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2ludCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lk
ICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0
X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgIHN0cnVjdCBuZXRt
YXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqIGdldF9wdG5ldG1hcChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhz
dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgICAgICB1aW50MzJfdCB3YW50ZWRfZmVh
dHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwg
c3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBwdG5ldG1hcF9kZWxldGUoc3RydWN0IHB0
bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRl
ICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICpt
YWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhf
dCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9CQUNLRU5EU19IX18gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5kcy5oLm9yaWcgL3Vzci9zcmMv
dXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTIwMTYt
MTEtMzAgMTA6NTI6NTkuOTE3NDc3MDAwICswMDAwCkBAIC0wLDAgKzEsMjg4IEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMjAxNCBWaW5jZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5j
b20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAq
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hf
XworI2RlZmluZSBfX05FVF9CQUNLRU5EU19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisj
aWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNsdWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0
L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQv
bmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVUTUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJ
IHZlcnNpb24gbXVzdCBiZSA+PSAxMSIKKyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICov
CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRl
cjsKKwordHlwZWRlZiB2b2lkICgqbmV0X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUs
IHZvaWQgKnBhcmFtKTsKKworLyogSW50ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhl
IG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9i
YWNrZW5kICpuZXRiZV9pbml0KGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j
Yl90IGNiLCB2b2lkICpwYXJhbSk7Cit2b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSk7Cit1aW50NjRfdCBuZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUp
OworaW50CSBuZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNh
cCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1
aW50MzJfdCBsZW4sIGludCBtb3JlKTsKK2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2Vu
ZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNj
YXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBj
YXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBWaXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBu
YW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50
cworICogKHZpcnRpby1uZXQsIHB0bmV0KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNr
ZW5kcyAobmV0bWFwLCB0YXAsIC4uLikuCisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0J
KDEgPDwgIDApIC8qIGhvc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tz
dW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGll
cyBNQUMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRl
cHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBHU08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU
X1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElP
X05FVF9GX0dVRVNUX1RTTzYJKDEgPDwgIDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNk
ZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBU
U08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkg
LyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAko
MSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9I
T1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhvc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJU
SU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwgMTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04g
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiBy
Y3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhv
c3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwko
MSA8PCAxNikgLyogY29uZmlnIHN0YXR1cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklS
VElPX05FVF9GX0NUUkxfVlEJKDEgPDwgMTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hh
bm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgko
MSA8PCAxOSkgLyogY29udHJvbCBjaGFubmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9HVUVTVF9BTk5PVU5DRSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBz
ZW5kIGdyYXR1aXRvdXMgcGt0cyAqLworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6
ZQorICovCitzdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOwor
CXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZf
dAl2cmhfZ3NvX3NpemU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJo
X2NzdW1fb2Zmc2V0OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAq
IHB0bmV0bWFwIGRlZmluaXRpb25zCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9p
ZAkJKm5ldG1hcF9wcml2OworCisJLyogVHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVu
bmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQg
c3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBsb25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNr
ZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZvIGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMy
X3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVtOworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBV
c2VkIHRvIGdldCByZWFkLW9ubHkgaW5mby4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJ
dWludDMyX3QgbmlmcF9vZmZzZXQ7CisJdWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90
IG51bV9yeF9yaW5nczsKKwl1aW50MTZfdCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4
X3Nsb3RzOworfTsKKworaW50IHB0bl9tZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVj
dCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsKK2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVj
dCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYp
Oworc3RydWN0IHB0bmV0bWFwX3N0YXRlICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2Vu
ZCAqYmUpOwordWludDMyX3QgcHRuZXRtYXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9z
dGF0ZSAqcHRuLAorCQkJICAgICAgIHVpbnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRu
ZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRu
ZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBf
Y2ZnICpjZmcpOworaW50IHB0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0
bik7CisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitp
bnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQg
bmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKwor
I2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRTX0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTQgVmluY2Vuem8gTWFmZmlvbmUgPHYubWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBfX05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRf
QkFDS0VORFNfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQ
CisjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgor
I2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+Cisj
aWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNlcnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUg
Pj0gMTEiCisjZW5kaWYKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2
ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9p
ZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGludCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisK
Ky8qIEludGVyZmFjZSBiZXR3ZWVuIHZpcnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQu
ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5p
dChjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFy
YW0pOwordm9pZAluZXRiZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0
X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0
X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWdu
ZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJbmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
LCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQg
bW9yZSk7CitpbnQJbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92
ZWMgKmlvdiwgaW50IGlvdmNudCk7CitpbnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2Jh
Y2tlbmQgKmJlKTsKKworCisvKgorICogTmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2Vu
IGZyb20gVmlydElPIHN0YW5kYXJkLgorICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJp
bGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRpZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0
LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFw
LCAuLi4pLgorICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0
IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV
TQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9NQUMJKDEgPDwgIDUpIC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5l
CVZJUlRJT19ORVRfRl9HU09fREVQUkVDCSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhh
bmRsZXMgR1NPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAv
KiBndWVzdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082
CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf
Rl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8qIGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisj
ZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3Yg
VUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3Qg
Y2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEy
KSAvKiBob3N0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNO
CSgxIDw8IDEzKSAvKiBob3N0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9IT1NUX1VGTwkoMSA8PCAxNCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmlu
ZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBi
dWZmZXJzICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZp
ZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZR
CSgxIDw8IDE3KSAvKiBjb250cm9sIGNoYW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBw
b3J0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRy
b2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1Rf
QU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIxKSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBr
dHMgKi8KKworLyoKKyAqIEZpeGVkIG5ldHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZp
cnRpb19uZXRfcnhoZHIgeworCXVpbnQ4X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3Nv
X3R5cGU7CisJdWludDE2X3QJdnJoX2hkcl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOwor
CXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1
aW50MTZfdAl2cmhfYnVmczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0
aW9ucworICovCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsK
KworCS8qIFRydWUgaWYgcHRuZXRtYXAga3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQly
dW5uaW5nOworCisJLyogRmVhdHVyZSBhY2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5z
aWduZWQgbG9uZwlmZWF0dXJlczsKKwl1bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJ
LyogSW5mbyBhYm91dCBuZXRtYXAgbWVtb3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9p
ZAkJKm1lbTsKK307CisKKyNpZmRlZiBXSVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1v
bmx5IGluZm8uICovCitzdHJ1Y3QgbmV0bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zm
c2V0OworCXVpbnQxNl90IG51bV90eF9yaW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJ
dWludDE2X3QgbnVtX3R4X3Nsb3RzOworCXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2lu
dCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2lu
Zm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg
KnB0biwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqIGdldF9wdG5ldG1hcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90
IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAg
ICAgICB1aW50MzJfdCB3YW50ZWRfZmVhdHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVt
aWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBw
dG5ldG1hcF9kZWxldGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJ
VEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhj
aGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0
IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9C
QUNLRU5EU19IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91
dGlscy5jIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jCi0tLSB1c3Ivc3JjL3Vz
ci5zYmluL2JoeXZlL25ldF91dGlscy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYwkyMDE2LTEyLTAxIDEz
OjE4OjUxLjcxOTAzNjAwMCArMDAwMApAQCAtMCwwICsxLDg2IEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IK
KyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4K
KyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0
aW9ucywgdXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBp
biBwY2lfdmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19z
dHIsIHVpbnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7
CisgICAgICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQURE
Ul9MRU5dID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2Vw
KCZtYWNfc3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3Ry
Y21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1h
Y19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVM
VElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3Rl
dCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIs
ICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1
Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRl
ZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgs
CisJICogZm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQg
ZGV2IG5hbWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2
XTsKKwljaGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQt
JWQtJXMiLCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJ
bml0KCZtZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJs
ZW4obnN0cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAw
eDAwOworCW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJb
M10gPSBkaWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0g
ZGlnZXN0WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0
aWxzLmMub3JpZyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYy5vcmlnCi0tLSB1
c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5j
Lm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1OS45MjEwMDkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNzIg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIKKyNpbmNsdWRlICJiaHl2ZXJ1bi5o
IgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoK
KyAqIFNvbWUgdXRpbHMgZnVuY3Rpb25zLCB1c2VkIGJ5IG5ldCBmcm9udC1lbmRzLiBPcmlnaW5h
bGx5LCB0aGV5IHdlcmUKKyAqIGluIHBjaV92aXJ0aW9fbmV0LmMuCisgKi8KKworaW50CituZXRf
cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0
cnVjdCBldGhlcl9hZGRyICplYTsKKyAgICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFy
IHplcm9fYWRkcltFVEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAg
ICAgICB0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKKworICAgICAgICBpZiAoKG1hY19z
dHIgIT0gTlVMTCkgJiYgKCFzdHJjbXAodG1wc3RyLCJtYWMiKSkpIHsKKyAgICAgICAgICAgICAg
ICBlYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CisKKyAgICAgICAgICAgICAgICBpZiAoZWEgPT0g
TlVMTCB8fCBFVEhFUl9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorICAgICAgICAgICAgICAg
ICAgICBtZW1jbXAoZWEtPm9jdGV0LCB6ZXJvX2FkZHIsIEVUSEVSX0FERFJfTEVOKSA9PSAwKSB7
CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUlOVkFMKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShtYWNfYWRkciwgZWEtPm9jdGV0LCBF
VEhFUl9BRERSX0xFTik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKDApOworfQorCit2
b2lkCituZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIp
Cit7CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBNQUMgYWRkcmVzcyBpcyB0aGUgc3RhbmRhcmQgTmV0
QXBwIE9VSSBvZiAwMC1hMC05OCwKKwkgKiBmb2xsb3dlZCBieSBhbiBNRDUgb2YgdGhlIFBDSSBz
bG90L2Z1bmMgbnVtYmVyIGFuZCBkZXYgbmFtZQorCSAqLworCU1ENV9DVFggbWRjdHg7CisJdW5z
aWduZWQgY2hhciBkaWdlc3RbMTZdOworCWNoYXIgbnN0cls4MF07CisKKwlzbnByaW50Zihuc3Ry
LCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIsIHBpLT5waV9zbG90LAorCSAgICBwaS0+cGlfZnVu
Yywgdm1uYW1lKTsKKworCU1ENUluaXQoJm1kY3R4KTsKKwlNRDVVcGRhdGUoJm1kY3R4LCBuc3Ry
LCAodW5zaWduZWQgaW50KXN0cmxlbihuc3RyKSk7CisJTUQ1RmluYWwoZGlnZXN0LCAmbWRjdHgp
OworCisJbWFjYWRkclswXSA9IDB4MDA7CisJbWFjYWRkclsxXSA9IDB4YTA7CisJbWFjYWRkclsy
XSA9IDB4OTg7CisJbWFjYWRkclszXSA9IGRpZ2VzdFswXTsKKwltYWNhZGRyWzRdID0gZGlnZXN0
WzFdOworCW1hY2FkZHJbNV0gPSBkaWdlc3RbMl07Cit9CisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAibmV0
X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4KKyNpbmNs
dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0aW9ucywg
dXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBpbiBwY2lf
dmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVp
bnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7CisgICAg
ICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQUREUl9MRU5d
ID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2VwKCZtYWNf
c3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRt
cHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1hY19zdHIp
OworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVMVElDQVNU
KGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3RldCwgemVy
b19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZh
bGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1Y3QgcGNp
X2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRlZmF1bHQg
TUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICog
Zm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5h
bWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKwlj
aGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMi
LCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJbml0KCZt
ZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJsZW4obnN0
cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAweDAwOwor
CW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJbM10gPSBk
aWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0gZGlnZXN0
WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgg
L3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgKLS0tIHVzci9zcmMvdXNyLnNiaW4v
Ymh5dmUvbmV0X3V0aWxzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5oCTIwMTYtMTEtMzAgMTA6NTY6MDUu
ODQ3NzIyMDAwICswMDAwCkBAIC0wLDAgKzEsMTAyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRf
VVRJTFNfSF8KKyNkZWZpbmUgX05FVF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSAicGNpX2VtdWwuaCIKKwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5z
dCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3Ry
LCB1aW50OF90ICptYWNfYWRkcik7CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICog
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAor
ICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBfTkVUX1VUSUxTX0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhz
dHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2Vt
YWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJ
TFNfSF8gKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX05FVF9VVElMU19IXworI2RlZmluZSBfTkVUX1VU
SUxTX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJwY2lfZW11bC5oIgorCit2
b2lkCW5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7
CitpbnQJbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKKyNl
bmRpZiAvKiBfTkVUX1VUSUxTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfdXRpbHMuaC5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5o
Lm9yaWcKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgub3JpZwkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUv
bmV0X3V0aWxzLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjkyMzAzMTAwMCArMDAwMApAQCAt
MCwwICsxLDY4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRfVVRJTFNfSF8KKyNkZWZpbmUgX05F
VF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAicGNpX2VtdWwuaCIK
Kwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2Fk
ZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7
CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEg
TmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUX1VUSUxT
X0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBp
LCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWlu
dDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJTFNfSF8gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9tZW1kZXYuYyAvdXNyL3NyYy91
c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMKLS0tIHVzci9zcmMvdXNyLnNiaW4v
Ymh5dmUvcGNpX3B0bmV0bWFwX21lbWRldi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMJ
MjAxNi0xMS0zMCAxMDo1NjoxMC40NDQwODUwMDAgKzAwMDAKQEAgLTAsMCArMSwzNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnph
cmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG5ldC9p
Zi5oPgkvKiBJRk5BTVNJWiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxu
ZXQvbmV0bWFwX3ZpcnQuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8
dm1tYXBpLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgi
CisKKy8qCisgKiBwdG5ldG1hcCBtZW1kZXYgUENJIGRldmljZQorICoKKyAqIFRoaXMgZGV2aWNl
IGlzIHVzZWQgdG8gbWFwIGEgbmV0bWFwIG1lbW9yeSBhbGxvY2F0b3Igb24gdGhlIGd1ZXN0IFZN
CisgKiB0aHJvdWdoIFBDSV9CQVIuIFRoZSBzYW1lIGFsbG9jYXRvciBjYW4gYmUgc2hhcmVkIGJl
dHdlZW4gbXVsdGlwbGUgcHRuZXRtYXAKKyAqIHBvcnRzIGluIHRoZSBndWVzdC4KKyAqCisgKiBF
YWNoIG5ldG1hcCBhbGxvY2F0b3IgaGFzIGEgdW5pcXVlIElEIGFzc2lnbmVkIGJ5IHRoZSBuZXRt
YXAgaG9zdCBtb2R1bGUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgYmFzZWQg
b24gdGhlIFFFTVUvS1ZNIG9uZS4KKyAqLworc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgeworCXN0
cnVjdCBwY2lfZGV2aW5zdCAqcGk7CQkvKiBQQ0kgZGV2aWNlIGluc3RhbmNlICovCisKKwl2b2lk
ICptZW1fcHRyOwkJCS8qIG5ldG1hcCBzaGFyZWQgbWVtb3J5ICovCisJc3RydWN0IG5ldG1hcF9w
b29sc19pbmZvIGluZm87CisKKwlUQUlMUV9FTlRSWShwdG5fbWVtZGV2X3NvZnRjKSBuZXh0Owor
fTsKK3N0YXRpYyBUQUlMUV9IRUFEKCwgcHRuX21lbWRldl9zb2Z0YykgcHRuX21lbWRldnMgPSBU
QUlMUV9IRUFEX0lOSVRJQUxJWkVSKHB0bl9tZW1kZXZzKTsKKworLyoKKyAqIHB0bl9tZW1kZXZf
c29mdGMgY2FuIGJlIGNyZWF0ZWQgYnkgcGVfaW5pdCBvciBwdG5ldG1hcCBiYWNrZW5kLAorICog
dGhpcyBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGlj
IHN0cnVjdCBwdG5fbWVtZGV2X3NvZnRjICoKK3B0bl9tZW1kZXZfY3JlYXRlKCkKK3sKKwlzdHJ1
Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0
IHB0bl9tZW1kZXZfc29mdGMpKTsKKwlpZiAoc2MgIT0gTlVMTCkgeworCQlUQUlMUV9JTlNFUlRf
VEFJTCgmcHRuX21lbWRldnMsIHNjLCBuZXh0KTsKKwl9CisKKwlyZXR1cm4gc2M7Cit9CisKK3N0
YXRpYyB2b2lkCitwdG5fbWVtZGV2X2RlbGV0ZShzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2Mp
Cit7CisJVEFJTFFfUkVNT1ZFKCZwdG5fbWVtZGV2cywgc2MsIG5leHQpOworCisJZnJlZShzYyk7
Cit9CisKKy8qCisgKiBGaW5kIHB0bl9tZW1kZXYgdGhyb3VnaCBtZW1pZCAobmV0bWFwIG1lbW9y
eSBhbGxvY2F0b3IgSUQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqCitw
dG5fbWVtZGV2X2ZpbmRfbWVtaWQodWludDMyX3QgbWVtX2lkKQoreworCXN0cnVjdCBwdG5fbWVt
ZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4dCkg
eworCQlpZiAoc2MtPm1lbV9wdHIgIT0gTlVMTCAmJiBtZW1faWQgPT0gc2MtPmluZm8ubWVtaWQp
IHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICog
RmluZCBwdG5fbWVtZGV2IHRoYXQgaGFzIG5vdCBuZXRtYXAgbWVtb3J5IChhdHRhY2hlZCBieSBw
dG5ldG1hcCBiYWNrZW5kKQorICovCitzdGF0aWMgc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKgor
cHRuX21lbWRldl9maW5kX2VtcHR5X21lbSgpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMg
KnNjOworCisJVEFJTFFfRk9SRUFDSChzYywgJnB0bl9tZW1kZXZzLCBuZXh0KSB7CisJCWlmIChz
Yy0+bWVtX3B0ciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gc2M7CisJCX0KKwl9CisKKwlyZXR1cm4g
TlVMTDsKK30KKworLyoKKyAqIEZpbmQgcHRuX21lbWRldiB0aGF0IGhhcyBub3QgUENJIGRldmlj
ZSBpc3RhbmNlIChjcmVhdGVkIGJ5IHBlX2luaXQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21l
bWRldl9zb2Z0YyAqCitwdG5fbWVtZGV2X2ZpbmRfZW1wdHlfcGkoKQoreworCXN0cnVjdCBwdG5f
bWVtZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4
dCkgeworCQlpZiAoc2MtPnBpID09IE5VTEwpIHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKwor
CXJldHVybiBOVUxMOworfQorCisvKgorICogSGFuZGxlIHJlYWQgb24gcHRuZXRtYXAtbWVtZGV2
IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB1aW50NjRfdAorcHRuX3BjaV9yZWFkKHN0cnVjdCB2bWN0
eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgIGludCBiYXJp
ZHgsIHVpbnQ2NF90IG9mZnNldCwgaW50IHNpemUpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29m
dGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwor
CWlmIChiYXJpZHggPT0gUFRORVRNQVBfSU9fUENJX0JBUikgeworCQlzd2l0Y2ggKG9mZnNldCkg
eworCQljYXNlIFBUTkVUX01ERVZfSU9fTUVNU0laRV9MTzoKKwkJCXJldHVybiBzYy0+aW5mby5t
ZW1zaXplICYgMHhmZmZmZmZmZjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01FTVNJWkVfSEk6CisJ
CQlyZXR1cm4gc2MtPmluZm8ubWVtc2l6ZSA+PiAzMjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01F
TUlEOgorCQkJcmV0dXJuIHNjLT5pbmZvLm1lbWlkOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZf
UE9PTF9PRlM6CisJCQlyZXR1cm4gc2MtPmluZm8uaWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO
RVRfTURFVl9JT19JRl9QT09MX09CSk5VTToKKwkJCXJldHVybiBzYy0+aW5mby5pZl9wb29sX29i
anRvdGFsOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZfUE9PTF9PQkpTWjoKKwkJCXJldHVybiBz
Yy0+aW5mby5pZl9wb29sX29ianNpemU7CisJCWNhc2UgUFRORVRfTURFVl9JT19SSU5HX1BPT0xf
T0ZTOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRORVRf
TURFVl9JT19SSU5HX1BPT0xfT0JKTlVNOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9v
Ymp0b3RhbDsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpTWjoKKwkJCXJldHVy
biBzYy0+aW5mby5yaW5nX3Bvb2xfb2Jqc2l6ZTsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX0JVRl9Q
T09MX09GUzoKKwkJCXJldHVybiBzYy0+aW5mby5idWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO
RVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU06CisJCQlyZXR1cm4gc2MtPmluZm8uYnVmX3Bvb2xf
b2JqdG90YWw7CisJCWNhc2UgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpTWjoKKwkJCXJldHVy
biBzYy0+aW5mby5idWZfcG9vbF9vYmpzaXplOworCQl9CisJfQorCisJcHJpbnRmKCIlczogVW5l
eHBlY3RlZCByZWdpc3RlciByZWFkIFtiYXIgJXUsIG9mZnNldCAlbHggc2l6ZSAlZF1cbiIsCisJ
CV9fZnVuY19fLCBiYXJpZHgsIG9mZnNldCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoK
KyAqIEhhbmRsZSB3cml0ZSBvbiBwdG5ldG1hcC1tZW1kZXYgcmVnaXN0ZXIgKHVudXNlZCBmb3Ig
bm93KQorICovCitzdGF0aWMgdm9pZAorcHRuX3BjaV93cml0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IHZjcHUsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksCisJICAgICAgaW50IGJhcmlkeCwgdWlu
dDY0X3Qgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDY0X3QgdmFsdWUpCit7CisJc3RydWN0IHB0bl9t
ZW1kZXZfc29mdGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1
cm47CisKKwlwcmludGYoIiVzOiBVbmV4cGVjdGVkIHJlZ2lzdGVyIHdyaXRlIFtiYXIgJXUsIG9m
ZnNldCAlbHggc2l6ZSAlZCAiCisJICAgICAgICJ2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFy
aWR4LCBvZmZzZXQsIHNpemUsIHZhbHVlKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgcHRu
ZXRtYXAtbWVtZGV2IFBDSSBCQVJzLiBQQ0kgQkFScyBjYW4gb25seSBiZSBjcmVhdGVkCisgKiB3
aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIGNyZWF0ZWQgYW5kIHRoZSBuZXRtYXAgbWVtb3J5IGlzIGF0
dGFjaGVkLgorICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHN0cnVj
dCBwdG5fbWVtZGV2X3NvZnRjICpzYykKK3sKKwlpbnQgcmV0OworCisJaWYgKHNjLT5waSA9PSBO
VUxMIHx8IHNjLT5tZW1fcHRyID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogQWxsb2NhdGUg
YSBCQVIgZm9yIGFuIEkvTyByZWdpb24uICovCisJcmV0ID0gcGNpX2VtdWxfYWxsb2NfYmFyKHNj
LT5waSwgUFRORVRNQVBfSU9fUENJX0JBUiwgUENJQkFSX0lPLAorCQkJCSBQVE5FVF9NREVWX0lP
X0VORCk7CisJaWYgKHJldCkgeworCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogaW9iYXIgYWxs
b2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBbGxv
Y2F0ZSBhIEJBUiBmb3IgYSBtZW1vcnkgcmVnaW9uLiAqLworCXJldCA9IHBjaV9lbXVsX2FsbG9j
X2JhcihzYy0+cGksIFBUTkVUTUFQX01FTV9QQ0lfQkFSLCBQQ0lCQVJfTUVNMzIsCisJCQlzYy0+
aW5mby5tZW1zaXplKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBt
ZW1iYXIgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
KwkvKiBNYXAgbmV0bWFwIG1lbW9yeSBvbiB0aGUgbWVtb3J5IEJBUi4gKi8KKwlyZXQgPSB2bV9t
YXBfdXNlcl9idWYoc2MtPnBpLT5waV92bWN0eCwKKwkJCSAgICAgIHNjLT5waS0+cGlfYmFyW1BU
TkVUTUFQX01FTV9QQ0lfQkFSXS5hZGRyLAorCQkJICAgICAgc2MtPmluZm8ubWVtc2l6ZSwgc2Mt
Pm1lbV9wdHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IG1lbWJh
ciBtYXAgZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7
Cit9CisKKy8qCisgKiBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyBpbnQK
K3B0bl9tZW1kZXZfaW5pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgc3RydWN0IHBjaV9kZXZpbnN0ICpw
aSwgY2hhciAqb3B0cykKK3sKKwlzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisJaW50IHJl
dDsKKworCXNjID0gcHRuX21lbWRldl9maW5kX2VtcHR5X3BpKCk7CisJaWYgKHNjID09IE5VTEwp
IHsKKwkJc2MgPSBwdG5fbWVtZGV2X2NyZWF0ZSgpOworCQlpZiAoc2MgPT0gTlVMTCkgeworCQkJ
cHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNhbGxvYyBlcnJvclxuIik7CisJCQlyZXR1cm4gKEVO
T01FTSk7CisJCX0KKwl9CisKKwkvKiBMaW5rIG91ciBzb2Z0YyBpbiB0aGUgcGNpX2Rldmluc3Qu
ICovCisJcGktPnBpX2FyZyA9IHNjOworCXNjLT5waSA9IHBpOworCisJLyogSW5pdGlhbGl6ZSBQ
Q0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8KKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9W
RU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1JfSUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQ
Q0lSX0RFVklDRSwgUFRORVRNQVBfUENJX0RFVklDRV9JRCk7CisJcGNpX3NldF9jZmdkYXRhOChw
aSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJ
Ul9TVUJERVZfMCwgMSk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCVkVORF8wLCBQ
VE5FVE1BUF9QQ0lfVkVORE9SX0lEKTsKKworCS8qIENvbmZpZ3VyZSBQQ0ktQkFScy4gKi8KKwly
ZXQgPSBwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHNjKTsKKwlpZiAocmV0KSB7CisJCXByaW50
ZigicHRuZXRtYXBfbWVtZGV2OiBjb25maWd1cmUgZXJyb3JcbiIpOworCQlnb3RvIGVycjsKKwl9
CisKKwlyZXR1cm4gMDsKK2VycjoKKwlwdG5fbWVtZGV2X2RlbGV0ZShzYyk7CisJcGktPnBpX2Fy
ZyA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHVzZWQgYnkgcHRuZXRtYXAgYmFj
a2VuZCB0byBhdHRhY2ggdGhlIG5ldG1hcCBtZW1vcnkgYWxsb2NhdG9yIHRvIHRoZQorICogcHRu
ZXRtYXAtbWVtZGV2LiAoc2hhcmVkIHdpdGggdGhlIGd1ZXN0IFZNIHRocm91Z2ggUENJLUJBUikK
KyAqLworaW50CitwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFw
X3Bvb2xzX2luZm8gKmluZm8pCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKnNjOworCWlu
dCByZXQ7CisKKwkvKiBpZiBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG1lbV9pZCBpcyBhbHJlYWR5
IGF0dGFjaGVkLCB3ZSBhcmUgZG9uZSAqLworCWlmIChwdG5fbWVtZGV2X2ZpbmRfbWVtaWQoaW5m
by0+bWVtaWQpKSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBhbHJlYWR5IGF0dGNoZWRc
biIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzYyA9IHB0bl9tZW1kZXZfZmluZF9lbXB0eV9tZW0o
KTsKKwlpZiAoc2MgPT0gTlVMTCkgeworCQlzYyA9IHB0bl9tZW1kZXZfY3JlYXRlKCk7CisJCWlm
IChzYyA9PSBOVUxMKSB7CisJCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogY2FsbG9jIGVycm9y
XG4iKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCX0KKworCXNjLT5tZW1fcHRyID0gbWVt
X3B0cjsKKwlzYy0+aW5mbyA9ICppbmZvOworCisJLyogY29uZmlndXJlIGRldmljZSBQQ0ktQkFS
cyAqLworCXJldCA9IHB0bl9tZW1kZXZfY29uZmlndXJlX2JhcnMoc2MpOworCWlmIChyZXQpIHsK
KwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNvbmZpZ3VyZSBlcnJvclxuIik7CisJCWdvdG8g
ZXJyOworCX0KKworCisJcmV0dXJuIDA7CitlcnI6CisJcHRuX21lbWRldl9kZWxldGUoc2MpOwor
CXNjLT5waS0+cGlfYXJnID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGNpX2Rl
dmVtdSBwY2lfZGVfcHRuZXRtYXAgPSB7CisJLnBlX2VtdSA9IAlQVE5FVE1BUF9NRU1ERVZfTkFN
RSwKKwkucGVfaW5pdCA9CXB0bl9tZW1kZXZfaW5pdCwKKwkucGVfYmFyd3JpdGUgPQlwdG5fcGNp
X3dyaXRlLAorCS5wZV9iYXJyZWFkID0JcHRuX3BjaV9yZWFkCit9OworUENJX0VNVUxfU0VUKHBj
aV9kZV9wdG5ldG1hcCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMgL3Vzci9zcmMvdXNy
LnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5
dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9uZXRpZi5jCTIwMTYt
MTEtMzAgMTA6NTY6MTAuNDU1ODI0MDAwICswMDAwCkBAIC0wLDAgKzEsNDExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRp
b24gb2YgdGhlIHB0bmV0IG5ldHdvcmsgZnJvbnRlbmQsIHRvIGJlIHVzZWQKKyAqIHdpdGggbmV0
bWFwIGJhY2tlbmQuCisgKi8KKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgkvKiBJRk5BTVNJ
WiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3ZpcnQu
aD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lu
Y2x1ZGUgPHN5cy9fY3B1c2V0Lmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW0uaD4KKyNpbmNsdWRl
IDxtYWNoaW5lL3ZtbV9kZXYuaD4JLyogVk1fTEFQSUNfTVNJICovCisjaW5jbHVkZSA8dm1tYXBp
Lmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5j
bHVkZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAibmV0X2JhY2tlbmRzLmgiCisKKyNpZm5kZWYg
UFRORVRfQ1NCX0FMTE9DCisjZXJyb3IgIkh5cGVydmlzb3ItYWxsb2NhdGVkIENTQiBub3Qgc3Vw
cG9ydGVkIgorI2VuZGlmCisKKworc3RydWN0IHB0bmV0X3NvZnRjIHsKKwlzdHJ1Y3QgcGNpX2Rl
dmluc3QJKnBpOworCisJc3RydWN0IG5ldF9iYWNrZW5kCSpiZTsKKwlzdHJ1Y3QgcHRuZXRtYXBf
c3RhdGUJKnB0YmU7CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1aW50MzJfdAkJaW9y
ZWdzW1BUTkVUX0lPX0VORCA+PiAyXTsKKwl2b2lkCQkJKmNzYjsKK307CisKK3N0YXRpYyBpbnQK
K3B0bmV0X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1bnNpZ25l
ZCBpbnQgbnVtX3JpbmdzOworCXN0cnVjdCBuZXRtYXBfaWZfaW5mbyBuaWY7CisJaW50IHJldDsK
KworCXJldCA9IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc2MtPnB0YmUsICZuaWYpOworCWlmIChy
ZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05JRlBfT0ZT
ID4+IDJdID0gbmlmLm5pZnBfb2Zmc2V0OworCXNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJ
TkdTID4+IDJdID0gbmlmLm51bV90eF9yaW5nczsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05VTV9S
WF9SSU5HUyA+PiAyXSA9IG5pZi5udW1fcnhfcmluZ3M7CisJc2MtPmlvcmVnc1tQVE5FVF9JT19O
VU1fVFhfU0xPVFMgPj4gMl0gPSBuaWYubnVtX3R4X3Nsb3RzOworCXNjLT5pb3JlZ3NbUFRORVRf
SU9fTlVNX1JYX1NMT1RTID4+IDJdID0gbmlmLm51bV9yeF9zbG90czsKKworCW51bV9yaW5ncyA9
IHNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJTkdTID4+IDJdICsKKwkJICAgIHNjLT5pb3Jl
Z3NbUFRORVRfSU9fTlVNX1JYX1JJTkdTID4+IDJdOworCWlmIChzYy0+bnVtX3JpbmdzICYmIG51
bV9yaW5ncyAmJiBzYy0+bnVtX3JpbmdzICE9IG51bV9yaW5ncykgeworCQlmcHJpbnRmKHN0ZGVy
ciwgIk51bWJlciBvZiByaW5ncyBjaGFuZ2VkOiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJu
IEVJTlZBTDsKKwl9CisJc2MtPm51bV9yaW5ncyA9IG51bV9yaW5nczsKKworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50CitwdG5ldF9wdGN0bF9jcmVhdGUoc3RydWN0IHB0bmV0X3NvZnRjICpz
YykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnZW50cnlfYmh5dmUgKmNmZ2VudHJ5OworCXN0cnVj
dCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5w
aV92bWN0eDsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGtpY2tf
YWRkcjsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgIiVzOiBVbmV4cGVjdGVkIE5VTEwgQ1NCIiwgX19mdW5jX18pOworCQly
ZXR1cm4gLTE7CisJfQorCisJY2ZnID0gY2FsbG9jKDEsIHNpemVvZigqY2ZnKSArIHNjLT5udW1f
cmluZ3MgKiBzaXplb2YoKmNmZ2VudHJ5KSk7CisKKwljZmctPmNmZ3R5cGUgPSBQVE5FVE1BUF9D
RkdUWVBFX0JIWVZFOworCWNmZy0+ZW50cnlfc2l6ZSA9IHNpemVvZigqY2ZnZW50cnkpOworCWNm
Zy0+bnVtX3JpbmdzID0gc2MtPm51bV9yaW5nczsKKwljZmctPnB0cmluZ3MgPSBzYy0+Y3NiOwor
CisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1BUF9JT19QQ0lfQkFSXS5hZGRyICsgUFRO
RVRfSU9fS0lDS19CQVNFOworCWNmZ2VudHJ5ID0gKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9i
aHl2ZSAqKShjZmcgKyAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyss
IGtpY2tfYWRkciArPSA0LCBjZmdlbnRyeSsrKSB7CisJCXN0cnVjdCBtc2l4X3RhYmxlX2VudHJ5
ICptdGU7CisJCXVpbnQ2NF90IGNvb2tpZSA9IHNjLT5pb3JlZ3NbUFRORVRfSU9fTUFDX0xPID4+
IDJdICsgNCppOworCisJCWNmZ2VudHJ5LT5pb2N0bF9mZCA9IHZtX2dldF9mZCh2bWN0eCk7CisJ
CWNmZ2VudHJ5LT5pb2N0bF9jbWQgPSBWTV9MQVBJQ19NU0k7CisJCW10ZSA9ICZwaS0+cGlfbXNp
eC50YWJsZVtpXTsKKwkJY2ZnZW50cnktPmlvY3RsX2RhdGEuYWRkciA9IG10ZS0+YWRkcjsKKwkJ
Y2ZnZW50cnktPmlvY3RsX2RhdGEubXNnX2RhdGEgPSBtdGUtPm1zZ19kYXRhOworCisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6IHZlY3RvciAldSwgYWRkciAlbHUsIGRhdGEgJXUsICIKKwkJCQkia2lj
a19hZGRyICV1LCBjb29raWU6ICVwXG4iLAorCQkJX19mdW5jX18sIGksIG10ZS0+YWRkciwgbXRl
LT5tc2dfZGF0YSwga2lja19hZGRyLAorCQkJKHZvaWQqKWNvb2tpZSk7CisKKwkJcmV0ID0gdm1f
aW9fcmVnX2hhbmRsZXIodm1jdHgsIGtpY2tfYWRkciAvKiBpb2FkZHIgKi8sCisJCQkJCTAgLyog
aW4gKi8sIDAgLyogbWFza19kYXRhICovLAorCQkJCQkwIC8qIGRhdGEgKi8sIFZNX0lPX1JFR0hf
S1dFVkVOVFMsCisJCQkJCSh2b2lkKiljb29raWUgLyogY29va2llICovKTsKKwkJaWYgKHJldCkg
eworCQkJZnByaW50ZihzdGRlcnIsICIlczogdm1faW9fcmVnX2hhbmRsZXIgJWRcbiIsCisJCQkJ
X19mdW5jX18sIHJldCk7CisJCX0KKwkJY2ZnZW50cnktPndjaGFuID0gKHVpbnQ2NF90KSBjb29r
aWU7CisJfQorCisJcmV0ID0gcHRuZXRtYXBfY3JlYXRlKHNjLT5wdGJlLCBjZmcpOworCWZyZWUo
Y2ZnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3B0Y3RsX2RlbGV0
ZShzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBz
Yy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5waV92bWN0eDsKKwl1bnNpZ25lZCBp
bnQga2lja19hZGRyOworCWludCBpOworCisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1B
UF9JT19QQ0lfQkFSXS5hZGRyICsgUFRORVRfSU9fS0lDS19CQVNFOworCisJZm9yIChpID0gMDsg
aSA8IHNjLT5udW1fcmluZ3M7IGkrKywga2lja19hZGRyICs9IDQpIHsKKwkJdm1faW9fcmVnX2hh
bmRsZXIodm1jdHgsIGtpY2tfYWRkciwgMCwgMCwgMCwKKwkJCQkgIFZNX0lPX1JFR0hfREVMRVRF
LCAwKTsKKwl9CisKKwlyZXR1cm4gcHRuZXRtYXBfZGVsZXRlKHNjLT5wdGJlKTsKK30KKworc3Rh
dGljIHZvaWQKK3B0bmV0X3B0Y3RsKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHVpbnQ2NF90IGNt
ZCkKK3sKKwlpbnQgcmV0ID0gRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBUTkVU
TUFQX1BUQ1RMX0NSRUFURToKKwkJLyogUmVhY3QgdG8gYSBSRUdJRiBpbiB0aGUgZ3Vlc3QuICov
CisJCXJldCA9IHB0bmV0X3B0Y3RsX2NyZWF0ZShzYyk7CisJCWJyZWFrOworCisJY2FzZSBQVE5F
VE1BUF9QVENUTF9ERUxFVEU6CisJCS8qIFJlYWN0IHRvIGFuIFVOUkVHSUYgaW4gdGhlIGd1ZXN0
LiAqLworCQlyZXQgPSBwdG5ldF9wdGN0bF9kZWxldGUoc2MpOworCQlicmVhazsKKwl9CisKKwlz
Yy0+aW9yZWdzW1BUTkVUX0lPX1BUQ1RMID4+IDJdID0gcmV0OworfQorCitzdGF0aWMgdm9pZAor
cHRuZXRfY3NiX21hcHBpbmcoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBi
YXNlID0gKCh1aW50NjRfdClzYy0+aW9yZWdzW1BUTkVUX0lPX0NTQkJBSCA+PiAyXSA8PCAzMikg
fAorCQkJc2MtPmlvcmVnc1tQVE5FVF9JT19DU0JCQUwgPj4gMl07CisJdWludDY0X3QgbGVuID0g
NDA5NjsKKworCXNjLT5jc2IgPSBOVUxMOworCWlmIChiYXNlKSB7CisJCXNjLT5jc2IgPSBwYWRk
cl9ndWVzdDJob3N0KHNjLT5waS0+cGlfdm1jdHgsIGJhc2UsIGxlbik7CisJfQorfQorCitzdGF0
aWMgdm9pZAorcHRuZXRfYmFyX3dyaXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3Ry
dWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQs
IGludCBzaXplLCB1aW50NjRfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0g
cGktPnBpX2FyZzsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkvKiBSZWRpcmVjdCB0byBNU0kt
WCBlbXVsYXRpb24gY29kZS4gKi8KKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2Jhcihw
aSkgfHwKKwkJCWJhcmlkeCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlwY2lfZW11bF9t
c2l4X3R3cml0ZShwaSwgb2Zmc2V0LCBzaXplLCB2YWx1ZSk7CisJCXJldHVybjsKKwl9CisKKwlp
ZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJb2Zmc2V0ICY9IFBUTkVUX0lPX01BU0s7CisJ
aW5kZXggPSBvZmZzZXQgPj4gMjsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBfSU9fUENJX0JB
UiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IFVu
ZXhwZWN0ZWQgcmVnaXN0ZXIgd3JpdGUgW2JhciAldSwgIgorCQkJIm9mZnNldCAlbHggc2l6ZSAl
ZCB2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFyaWR4LAorCQkJb2Zmc2V0LCBzaXplLCB2YWx1
ZSk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKG9mZnNldCkgeworCWNhc2UgUFRORVRfSU9f
UFRGRUFUOgorCQl2YWx1ZSA9IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzYy0+cHRiZSwgdmFsdWUp
OworCQlzYy0+aW9yZWdzW2luZGV4XSA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgUFRORVRf
SU9fUFRDVEw6CisJCXB0bmV0X3B0Y3RsKHNjLCB2YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBQ
VE5FVF9JT19DU0JCQUg6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJCWJyZWFrOwor
CisJY2FzZSBQVE5FVF9JT19DU0JCQUw6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJ
CXB0bmV0X2NzYl9tYXBwaW5nKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFBUTkVUX0lPX1ZORVRf
SERSX0xFTjoKKwkJaWYgKG5ldGJlX3NldF9jYXAoc2MtPmJlLCBuZXRiZV9nZXRfY2FwKHNjLT5i
ZSksCisJCQkJICB2YWx1ZSkgPT0gMCkgeworCQkJc2MtPmlvcmVnc1tpbmRleF0gPSB2YWx1ZTsK
KwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcHRuZXRfYmFyX3JlYWQo
c3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLAorCSAg
ICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQsIGludCBzaXplKQoreworCXN0cnVjdCBw
dG5ldF9zb2Z0YyAqc2MgPSBwaS0+cGlfYXJnOworCXVpbnQ2NF90IGluZGV4ID0gb2Zmc2V0ID4+
IDI7CisKKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2JhcihwaSkgfHwKKwkJCWJhcmlk
eCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlyZXR1cm4gcGNpX2VtdWxfbXNpeF90cmVh
ZChwaSwgb2Zmc2V0LCBzaXplKTsKKwl9CisKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7
CisKKwlvZmZzZXQgJj0gUFRORVRfSU9fTUFTSzsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBf
SU9fUENJX0JBUiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJy
LCAiJXM6IFVuZXhwZWN0ZWQgcmVnaXN0ZXIgcmVhZCBbYmFyICV1LCAiCisJCQkib2Zmc2V0ICVs
eCBzaXplICVkXVxuIiwgX19mdW5jX18sIGJhcmlkeCwgb2Zmc2V0LAorCQkJc2l6ZSk7CisJCXJl
dHVybiAwOworCX0KKworCXN3aXRjaCAob2Zmc2V0KSB7CisJCWNhc2UgUFRORVRfSU9fTklGUF9P
RlM6CisJCWNhc2UgUFRORVRfSU9fTlVNX1RYX1JJTkdTOgorCQljYXNlIFBUTkVUX0lPX05VTV9S
WF9SSU5HUzoKKwkJY2FzZSBQVE5FVF9JT19OVU1fVFhfU0xPVFM6CisJCWNhc2UgUFRORVRfSU9f
TlVNX1JYX1NMT1RTOgorCQkJLyogRmlsbCBpbiBkZXZpY2UgcmVnaXN0ZXJzIHdpdGggaW5mb3Jt
YXRpb24gYWJvdXQKKwkJCSAqIG5pZnBfb2Zmc2V0LCBudW1fKnhfcmluZ3MsIGFuZCBudW1fKnhf
c2xvdHMuICovCisJCQlwdG5ldF9nZXRfbmV0bWFwX2lmKHNjKTsKKwkJCWJyZWFrOworCisJCWNh
c2UgUFRORVRfSU9fSE9TVE1FTUlEOgorCQkJc2MtPmlvcmVnc1tpbmRleF0gPSBwdG5ldG1hcF9n
ZXRfaG9zdG1lbWlkKHNjLT5wdGJlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzYy0+aW9y
ZWdzW2luZGV4XTsKK30KKworLyogUENJIGRldmljZSBpbml0aWFsaXphdGlvbi4gKi8KK3N0YXRp
YyBpbnQKK3B0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAq
cGksIGNoYXIgKm9wdHMpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKwljaGFyICpwdG9w
dHMsICpkZXZuYW1lOworCXVpbnQ4X3QgbWFjYWRkcls2XTsKKwlpbnQgbWFjX3Byb3ZpZGVkID0g
MDsKKwlpbnQgcmV0OworCisJc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzYykpOworCWlmIChzYyA9
PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVu
Y19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExpbmsgb3VyIHNvZnRjIGluIHRoZSBwY2lf
ZGV2aW5zdC4gKi8KKwlwaS0+cGlfYXJnID0gc2M7CisJc2MtPnBpID0gcGk7CisKKwkvKiBQYXJz
ZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gKi8KKwlpZiAob3B0cyA9PSBOVUxMKSB7CisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6IE5vIGJhY2tlbmQgc3BlY2lmaWVkXG4iLCBfX2Z1bmNfXyk7CisJCXJl
dHVybiAtMTsKKwl9CisKKwlkZXZuYW1lID0gcHRvcHRzID0gc3RyZHVwKG9wdHMpOworCSh2b2lk
KSBzdHJzZXAoJnB0b3B0cywgIiwiKTsKKworCWlmIChwdG9wdHMgIT0gTlVMTCkgeworCQlyZXQg
PSBuZXRfcGFyc2VtYWMocHRvcHRzLCBtYWNhZGRyKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlm
cmVlKGRldm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltYWNfcHJvdmlkZWQgPSAxOwor
CX0KKworCWlmICghbWFjX3Byb3ZpZGVkKSB7CisJCW5ldF9nZW5tYWMocGksIG1hY2FkZHIpOwor
CX0KKworCS8qIEluaXRpYWxpemUgYmFja2VuZC4gQSBOVUxMIGNhbGxiYWNrIGlzIHVzZWQgaGVy
ZSB0byB0ZWxsCisJICogdGhlIGFzayB0aGUgbmV0bWFwIGJhY2tlbmQgdG8gdXNlIHB0bmV0bWFw
LiAqLworCXNjLT5iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgTlVMTCwgc2MpOworCWlmICghc2Mt
PmJlKSB7CisJCWZwcmludGYoc3RkZXJyLCAibmV0IGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gZmFp
bGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZyZWUoZGV2bmFtZSk7CisKKwlzYy0+cHRi
ZSA9IGdldF9wdG5ldG1hcChzYy0+YmUpOworCWlmICghc2MtPnB0YmUpIHsKKwkJZnByaW50Zihz
dGRlcnIsICIlczogZmFpbGVkIHRvIGdldCBwdG5ldG1hcFxuIiwgX19mdW5jX18pOworCQlyZXR1
cm4gLTE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8K
KwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9WRU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1Jf
SUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgUFRORVRNQVBfUENJX05F
VElGX0lEKTsKKwlwY2lfc2V0X2NmZ2RhdGE4KHBpLCBQQ0lSX0NMQVNTLCBQQ0lDX05FVFdPUksp
OworCXBjaV9zZXRfY2ZnZGF0YTgocGksIFBDSVJfU1VCQ0xBU1MsIFBDSVNfTkVUV09SS19FVEhF
Uk5FVCk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCREVWXzAsIDEpOworCXBjaV9z
ZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX1NVQlZFTkRfMCwgUFRORVRNQVBfUENJX1ZFTkRPUl9JRCk7
CisKKwkvKiBBbGxvY2F0ZSBhIEJBUiBmb3IgYW4gSS9PIHJlZ2lvbi4gKi8KKwlyZXQgPSBwY2lf
ZW11bF9hbGxvY19iYXIocGksIFBUTkVUTUFQX0lPX1BDSV9CQVIsIFBDSUJBUl9JTywKKwkJCQkg
UFRORVRfSU9fTUFTSyArIDEpOworCWlmIChyZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczog
ZmFpbGVkIHRvIGFsbG9jYXRlIEJBUiBbJWRdXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJl
dHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMgYW5kIGRhdGEgc3RydWN0
dXJlcy4gKi8KKwltZW1zZXQoc2MtPmlvcmVncywgMCwgc2l6ZW9mKHNjLT5pb3JlZ3MpKTsKKwlz
Yy0+Y3NiID0gTlVMTDsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19ISSA+PiAyXSA9IChtYWNh
ZGRyWzBdIDw8IDgpIHwgbWFjYWRkclsxXTsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19MTyA+
PiAyXSA9IChtYWNhZGRyWzJdIDw8IDI0KSB8CisJCQkJCSAgIChtYWNhZGRyWzNdIDw8IDE2KSB8
CisJCQkJCSAgIChtYWNhZGRyWzRdIDw8IDgpIHwgbWFjYWRkcls1XTsKKworCXNjLT5udW1fcmlu
Z3MgPSAwOworCXB0bmV0X2dldF9uZXRtYXBfaWYoc2MpOworCisJLyogQWxsb2NhdGUgYSBCQVIg
Zm9yIE1TSS1YIHZlY3RvcnMuICovCisJcGNpX2VtdWxfYWRkX21zaXhjYXAocGksIHNjLT5udW1f
cmluZ3MsIFBUTkVUTUFQX01TSVhfUENJX0JBUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0
IHBjaV9kZXZlbXUgcGNpX2RlX3B0bmV0ID0geworCS5wZV9lbXUgPSAJInB0bmV0IiwKKwkucGVf
aW5pdCA9CXB0bmV0X2luaXQsCisJLnBlX2JhcndyaXRlID0JcHRuZXRfYmFyX3dyaXRlLAorCS5w
ZV9iYXJyZWFkID0JcHRuZXRfYmFyX3JlYWQsCit9OworUENJX0VNVUxfU0VUKHBjaV9kZV9wdG5l
dCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNy
LnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lf
dmlydGlvX25ldC5jCi0tLSB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJ
MjAxNi0wOS0yOSAwMDoyNTowNy4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmlu
L2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJMjAxNi0xMS0zMCAxMDo1NjoxMC40NTkzNDMwMDAgKzAw
MDAKQEAgLTI2LDYgKzI2LDIyIEBACiAgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvdXNyLnNiaW4v
Ymh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0wMy0xNCAwODo0ODoxNlogZ25uICQK
ICAqLwogCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRpb24gb2YgdGhlIHZp
cnRpby1uZXQgbmV0d29yayBmcm9udGVuZC4gTmV0d29yaworICogYmFja2VuZHMgYXJlIGluIG5l
dF9iYWNrZW5kcy5jLgorICoKKyAqIFRoZSBmcm9udGVuZCBpcyBzZWxlY3RlZCB1c2luZyB0aGUg
cGVfZW11IGZpZWxkIG9mIHRoZSBkZXNjcmlwdG9yLAorICogVXBvbiBhIG1hdGNoLCB0aGUgcGVf
aW5pdCBmdW5jdGlvbiBpcyBpbnZva2VkLCB3aGljaCBpbml0aWFsaXplcworICogdGhlIGVtdWxh
dGVkIFBDSSBkZXZpY2UsIGF0dGFjaGVzIHRvIHRoZSBiYWNrZW5kLCBhbmQgY2FsbHMgdmlydGlv
CisgKiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCisgKgorICogUENJIHJlZ2lzdGVyIHJlYWQv
d3JpdGVzIGFyZSBoYW5kbGVkIHRocm91Z2ggZ2VuZXJpYyBQQ0kgbWV0aG9kcworICoKKyAqIHZp
cnRpbyBUWCBpcyBoYW5kbGVkIGJ5IGEgZGVkaWNhdGVkIHRocmVhZCwgcGNpX3Z0bmV0X3R4X3Ro
cmVhZCgpCisgKiB2aXJ0aW8gUlggaXMgaGFuZGxlZCBieSB0aGUgYmFja2VuZCAob2Z0ZW4gd2l0
aCBzb21lIGhlbHBlciB0aHJlYWQpLAorICogCXdoaWNoIGluIHR1cm4gY2FsbHMgYSBmcm9udGVu
ZCBjYWxsYmFjaywgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrKCkKKyAqLworCiAjaW5jbHVkZSA8c3lz
L2NkZWZzLmg+CiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3Vzci5zYmluL2JoeXZl
L3BjaV92aXJ0aW9fbmV0LmMgMjk2ODI5IDIwMTYtMDMtMTQgMDg6NDg6MTZaIGdubiAkIik7CiAK
QEAgLTM2LDEwICs1Miw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8bWFj
aGluZS9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KLSNpZm5kZWYgTkVUTUFQ
X1dJVEhfTElCUwotI2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCi0jZW5kaWYKLSNpbmNsdWRlIDxu
ZXQvbmV0bWFwX3VzZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KIAog
I2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTUwLDcgKzYzLDYgQEAK
ICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8bWQ1Lmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUg
PHB0aHJlYWRfbnAuaD4KIApAQCAtNTgsMzYgKzcwLDE2IEBACiAjaW5jbHVkZSAicGNpX2VtdWwu
aCIKICNpbmNsdWRlICJtZXZlbnQuaCIKICNpbmNsdWRlICJ2aXJ0aW8uaCIKKyNpbmNsdWRlICJu
ZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJlc3MgZ2VuZXJhdGlvbiAqLworI2luY2x1ZGUgIm5l
dF9iYWNrZW5kcy5oIiAvKiBWaXJ0SU8gY2FwYWJpbGl0aWVzICovCiAKICNkZWZpbmUgVlRORVRf
UklOR1NaCTEwMjQKIAogI2RlZmluZSBWVE5FVF9NQVhTRUdTCTI1NgogCi0vKgotICogSG9zdCBj
YXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ugb25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KLSAq
LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBh
cnRpYWwgY2tzdW0gKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEp
IC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0Zf
TUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAqLwotI2RlZmluZQlWSVJUSU9fTkVU
X0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAq
LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2Fu
IHJjdiBUU092NCAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkg
LyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNO
CSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJU
SU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLwotI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNP
djQgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBj
YW4gcmN2IFRTT3Y2ICovCi0jZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykg
LyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9T
VF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8gKi8KLSNkZWZpbmUJVklSVElPX05F
VF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLwot
I2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZp
ZWxkIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykg
LyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RS
TF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLwotI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwg
VkxBTiBmaWx0ZXJpbmcgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwK
LQkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCi0KKy8q
IE91ciBjYXBhYmlsaXRpZXM6IHdlIGRvbid0IHN1cHBvcnQgVklSVElPX05FVF9GX01SR19SWEJV
RiBhdCB0aGUgbW9tZW50LiAqLwogI2RlZmluZSBWVE5FVF9TX0hPU1RDQVBTICAgICAgXAotICAo
IFZJUlRJT19ORVRfRl9NQUMgfCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIHwgVklSVElPX05FVF9G
X1NUQVRVUyB8IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX1NUQVRVUyB8
IFwKICAgICBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgfCBWSVJUSU9fUklOR19GX0lORElSRUNU
X0RFU0MpCiAKIC8qCkBAIC05Niw2ICs4OCw3IEBACiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcg
ewogCXVpbnQ4X3QgIG1hY1s2XTsKIAl1aW50MTZfdCBzdGF0dXM7CisJdWludDE2X3QgbWF4X3Zp
cnRxdWV1ZV9wYWlyczsKIH0gX19wYWNrZWQ7CiAKIC8qCkBAIC0xMDgsMTkgKzEwMSw2IEBACiAj
ZGVmaW5lIFZUTkVUX01BWFEJMwogCiAvKgotICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQot
ICovCi1zdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7Ci0JdWludDhfdAkJdnJoX2ZsYWdzOwotCXVp
bnQ4X3QJCXZyaF9nc29fdHlwZTsKLQl1aW50MTZfdAl2cmhfaGRyX2xlbjsKLQl1aW50MTZfdAl2
cmhfZ3NvX3NpemU7Ci0JdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7Ci0JdWludDE2X3QJdnJoX2Nz
dW1fb2Zmc2V0OwotCXVpbnQxNl90CXZyaF9idWZzOwotfSBfX3BhY2tlZDsKLQotLyoKICAqIERl
YnVnIHByaW50ZgogICovCiBzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKQEAgLTEzNCwzMSAr
MTE0LDI0IEBACiAJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CiAJc3RydWN0IHZxdWV1ZV9p
bmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOwogCXB0aHJlYWRfbXV0ZXhfdCB2c2NfbXR4
OwotCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOwogCi0JaW50CQl2c2NfdGFwZmQ7Ci0Jc3RydWN0
IG5tX2Rlc2MJKnZzY19ubWQ7CisJc3RydWN0IG5ldF9iYWNrZW5kICp2c2NfYmU7CiAKIAlpbnQJ
CXZzY19yeF9yZWFkeTsKIAl2b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNr
ZWQgb3V0c2lkZSBsb2NrICovCiAKIAl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0
ZWQgZmVhdHVyZXMgKi8KIAkKLQlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsK
LQogCXB0aHJlYWRfbXV0ZXhfdAlyeF9tdHg7Ci0JaW50CQlyeF9pbl9wcm9ncmVzczsKLQlpbnQJ
CXJ4X3ZoZHJsZW47CisJdW5zaWduZWQgaW50CXJ4X3ZoZHJsZW47CiAJaW50CQlyeF9tZXJnZTsJ
LyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCiAKIAlwdGhyZWFkX3QgCXR4X3RpZDsKIAlwdGhy
ZWFkX211dGV4X3QJdHhfbXR4OwogCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7CiAJaW50CQl0eF9p
bl9wcm9ncmVzczsKKwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKIAotCXZv
aWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKTsKLQl2b2lkICgq
cGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp
b3YsCi0JCQkgICAgIGludCBpb3ZjbnQsIGludCBsZW4pOwogfTsKIAogc3RhdGljIHZvaWQgcGNp
X3Z0bmV0X3Jlc2V0KHZvaWQgKik7CkBAIC0xODEsNiArMTU0LDcgQEAKIAogLyoKICAqIElmIHRo
ZSB0cmFuc21pdCB0aHJlYWQgaXMgYWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4K
KyAqIE9ubHkgdXNlZCBvbmNlIGluIHBjaV92dG5ldF9yZXNldCgpCiAgKi8KIHN0YXRpYyB2b2lk
CiBwY2lfdnRuZXRfdHh3YWl0KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQpAQCAtMTk3LDIw
ICsxNzEsMTggQEAKIAogLyoKICAqIElmIHRoZSByZWNlaXZlIHRocmVhZCBpcyBhY3RpdmUgdGhl
biBzdGFsbCB1bnRpbCBpdCBpcyBkb25lLgorICogSXQgaXMgZW5vdWdoIHRvIGxvY2sgYW5kIHVu
bG9jayB0aGUgUlggbXV0ZXguCisgKiBPbmx5IHVzZWQgb25jZSBpbiBwY2lfdnRuZXRfcmVzZXQo
KQogICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3J4d2FpdChzdHJ1Y3QgcGNpX3Z0bmV0X3Nv
ZnRjICpzYykKIHsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7Ci0Jd2hpbGUg
KHNjLT5yeF9pbl9wcm9ncmVzcykgewotCQlwdGhyZWFkX211dGV4X3VubG9jaygmc2MtPnJ4X210
eCk7Ci0JCXVzbGVlcCgxMDAwMCk7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7
Ci0JfQogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzYy0+cnhfbXR4KTsKIH0KIAorLyogaGFuZGxl
ciBmb3IgdmlydGlvX3Jlc2V0ICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3Jlc2V0KHZvaWQg
KnZzYykKIHsKQEAgLTIzNywzNjAgKzIwOSw4MCBAQAogCXNjLT5yZXNldHRpbmcgPSAwOwogfQog
Ci0vKgotICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2
aWNlCi0gKi8KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfdGFwX3R4KHN0cnVjdCBwY2lfdnRuZXRf
c29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKLQkJIGludCBsZW4pCi17
Ci0Jc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KLQotCWlmIChzYy0+
dnNjX3RhcGZkID09IC0xKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIElmIHRoZSBsZW5ndGggaXMg
PCA2MCwgcGFkIG91dCB0byB0aGF0IGFuZCBhZGQgdGhlCi0JICogZXh0cmEgemVybydkIHNlZ21l
bnQgdG8gdGhlIGlvdi4gSXQgaXMgZ3VhcmFudGVlZCB0aGF0Ci0JICogdGhlcmUgaXMgYWx3YXlz
IGFuIGV4dHJhIGlvdiBhdmFpbGFibGUgYnkgdGhlIGNhbGxlci4KLQkgKi8KLQlpZiAobGVuIDwg
NjApIHsKLQkJaW92W2lvdmNudF0uaW92X2Jhc2UgPSBwYWQ7Ci0JCWlvdltpb3ZjbnRdLmlvdl9s
ZW4gPSA2MCAtIGxlbjsKLQkJaW92Y250Kys7Ci0JfQotCSh2b2lkKSB3cml0ZXYoc2MtPnZzY190
YXBmZCwgaW92LCBpb3ZjbnQpOwotfQotCi0vKgotICogIENhbGxlZCB3aGVuIHRoZXJlIGlzIHJl
YWQgYWN0aXZpdHkgb24gdGhlIHRhcCBmaWxlIGRlc2NyaXB0b3IuCi0gKiBFYWNoIGJ1ZmZlciBw
b3N0ZWQgYnkgdGhlIGd1ZXN0IGlzIGFzc3VtZWQgdG8gYmUgYWJsZSB0byBjb250YWluCi0gKiBh
biBlbnRpcmUgZXRoZXJuZXQgZnJhbWUgKyByeCBoZWFkZXIuCi0gKiAgTVAgbm90ZTogdGhlIGR1
bW15YnVmIGlzIG9ubHkgdXNlZCBmb3IgZGlzY2FyZGluZyBmcmFtZXMsIHNvIHRoZXJlCi0gKiBp
cyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3IgbG9ja2VkLgotICovCi1zdGF0aWMg
dWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKLQotc3RhdGljIF9faW5saW5lIHN0cnVjdCBpb3ZlYyAq
Ci1yeF9pb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICpuaW92LCBpbnQgdGxlbikKLXsK
LQlzdHJ1Y3QgaW92ZWMgKnJpb3Y7Ci0KLQkvKiBYWFggc2hvcnQtY3V0OiBhc3N1bWUgZmlyc3Qg
c2VnbWVudCBpcyA+PSB0bGVuICovCi0JYXNzZXJ0KGlvdlswXS5pb3ZfbGVuID49IHRsZW4pOwot
Ci0JaW92WzBdLmlvdl9sZW4gLT0gdGxlbjsKLQlpZiAoaW92WzBdLmlvdl9sZW4gPT0gMCkgewot
CQlhc3NlcnQoKm5pb3YgPiAxKTsKLQkJKm5pb3YgLT0gMTsKLQkJcmlvdiA9ICZpb3ZbMV07Ci0J
fSBlbHNlIHsKLQkJaW92WzBdLmlvdl9iYXNlID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0u
aW92X2Jhc2UgKyB0bGVuKTsKLQkJcmlvdiA9ICZpb3ZbMF07Ci0JfQotCi0JcmV0dXJuIChyaW92
KTsKLX0KLQogc3RhdGljIHZvaWQKLXBjaV92dG5ldF90YXBfcngoc3RydWN0IHBjaV92dG5ldF9z
b2Z0YyAqc2MpCitwY2lfdnRuZXRfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCiB7Ci0J
c3RydWN0IGlvdmVjIGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7CisJc3RydWN0IGlvdmVjIGlv
dltWVE5FVF9NQVhTRUdTICsgMV07CiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2b2lkICp2
cng7CiAJaW50IGxlbiwgbjsKIAl1aW50MTZfdCBpZHg7CiAKLQkvKgotCSAqIFNob3VsZCBuZXZl
ciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIHRhcCBmZAotCSAqLwotCWFzc2VydChzYy0+dnNj
X3RhcGZkICE9IC0xKTsKLQotCS8qCi0JICogQnV0LCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBy
eCByaW5nIGhhc24ndCB5ZXQKLQkgKiBiZWVuIHNldCB1cCBvciB0aGUgZ3Vlc3QgaXMgcmVzZXR0
aW5nIHRoZSBkZXZpY2UuCi0JICovCiAJaWYgKCFzYy0+dnNjX3J4X3JlYWR5IHx8IHNjLT5yZXNl
dHRpbmcpIHsKIAkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCisJCSAq
IFRoZSByeCByaW5nIGhhcyBub3QgeWV0IGJlZW4gc2V0IHVwIG9yIHRoZSBndWVzdCBpcworCQkg
KiByZXNldHRpbmcgdGhlIGRldmljZS4gRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCiAJ
CSAqLwotCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15
YnVmKSk7CisJCW5ldGJlX3J4X2Rpc2NhcmQoc2MtPnZzY19iZSk7CiAJCXJldHVybjsKIAl9CiAK
LQkvKgotCSAqIENoZWNrIGZvciBhdmFpbGFibGUgcnggYnVmZmVycwotCSAqLwogCXZxID0gJnNj
LT52c2NfcXVldWVzW1ZUTkVUX1JYUV07CiAJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CiAJCS8q
Ci0JCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCi0JCSAq
IGVtcHR5LCBpZiB0aGF0J3MgbmVnb3RpYXRlZC4KKwkJICogTm8gYXZhaWxhYmxlIHJ4IGJ1ZmZl
cnMuIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLgorCQkgKiBJbnRlcnJ1cHQgb24gZW1w
dHksIGlmIHRoYXQncyBuZWdvdGlhdGVkLgogCQkgKi8KLQkJKHZvaWQpIHJlYWQoc2MtPnZzY190
YXBmZCwgZHVtbXlidWYsIHNpemVvZihkdW1teWJ1ZikpOworCQluZXRiZV9yeF9kaXNjYXJkKHNj
LT52c2NfYmUpOwogCQl2cV9lbmRjaGFpbnModnEsIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8g
ewotCQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCisJCS8qIEdldCBkZXNj
cmlwdG9yIGNoYWluIGludG8gaW92ICovCiAJCW4gPSB2cV9nZXRjaGFpbih2cSwgJmlkeCwgaW92
LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKIAkJYXNzZXJ0KG4gPj0gMSAmJiBuIDw9IFZUTkVUX01B
WFNFR1MpOwogCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5k
IHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNr
ZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNlOwotCQlyaW92ID0gcnhf
aW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxlbiA9IHJlYWR2KHNjLT52
c2NfdGFwZmQsIHJpb3YsIG4pOwotCi0JCWlmIChsZW4gPCAwICYmIGVycm5vID09IEVXT1VMREJM
T0NLKSB7Ci0JCQkvKgotCQkJICogTm8gbW9yZSBwYWNrZXRzLCBidXQgc3RpbGwgc29tZSBhdmFp
bCByaW5nCi0JCQkgKiBlbnRyaWVzLiAgSW50ZXJydXB0IGlmIG5lZWRlZC9hcHByb3ByaWF0ZS4K
LQkJCSAqLwotCQkJdnFfcmV0Y2hhaW4odnEpOwotCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsKLQkJ
CXJldHVybjsKLQkJfQotCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSBy
eCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQg
cnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+cnhf
dmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19uZXRf
cnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7Ci0J
CX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNoYWlu
cy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVuKTsK
LQl9IHdoaWxlICh2cV9oYXNfZGVzY3ModnEpKTsKLQotCS8qIEludGVycnVwdCBpZiBuZWVkZWQs
IGluY2x1ZGluZyBmb3IgTk9USUZZX09OX0VNUFRZLiAqLwotCXZxX2VuZGNoYWlucyh2cSwgMSk7
Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLXBjaV92dG5ldF9uZXRtYXBfd3JpdGV2KHN0cnVj
dCBubV9kZXNjICpubWQsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQotewotCWludCBy
LCBpOwotCWludCBsZW4gPSAwOwotCi0JZm9yIChyID0gbm1kLT5jdXJfdHhfcmluZzsgOyApIHsK
LQkJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0gTkVUTUFQX1RYUklORyhubWQtPm5pZnAsIHIp
OwotCQl1aW50MzJfdCBjdXIsIGlkeDsKLQkJY2hhciAqYnVmOwotCi0JCWlmIChubV9yaW5nX2Vt
cHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+bGFzdF90eF9yaW5nKQotCQkJ
CXIgPSBubWQtPmZpcnN0X3R4X3Jpbmc7Ci0JCQlpZiAociA9PSBubWQtPmN1cl90eF9yaW5nKQot
CQkJCWJyZWFrOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3VyID0gcmluZy0+Y3VyOwotCQlpZHgg
PSByaW5nLT5zbG90W2N1cl0uYnVmX2lkeDsKLQkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgp
OworCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT52c2NfYmUsIGlvdiwgbik7CiAKLQkJZm9yIChpID0g
MDsgaSA8IGlvdmNudDsgaSsrKSB7Ci0JCQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4
KQotCQkJCWJyZWFrOwotCQkJbWVtY3B5KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3Zb
aV0uaW92X2xlbik7Ci0JCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+c2xv
dFtjdXJdLmxlbiA9IGxlbjsKLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4
dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl90eF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg
TklPQ1RYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAobGVuKTsKLX0KLQot
c3RhdGljIF9faW5saW5lIGludAotcGNpX3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVz
YyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKLXsKLQlpbnQgbGVuID0gMDsK
LQlpbnQgaSA9IDA7Ci0JaW50IHI7Ci0KLQlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkg
ewotCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwg
cik7Ci0JCXVpbnQzMl90IGN1ciwgaWR4OwotCQljaGFyICpidWY7Ci0JCXNpemVfdCBsZWZ0Owot
Ci0JCWlmIChubV9yaW5nX2VtcHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+
bGFzdF9yeF9yaW5nKQotCQkJCXIgPSBubWQtPmZpcnN0X3J4X3Jpbmc7Ci0JCQlpZiAociA9PSBu
bWQtPmN1cl9yeF9yaW5nKQotCQkJCWJyZWFrOwotCQkJY29udGludWU7CisJCWlmIChsZW4gPCAw
KSB7CisJCQlicmVhazsKIAkJfQotCQljdXIgPSByaW5nLT5jdXI7Ci0JCWlkeCA9IHJpbmctPnNs
b3RbY3VyXS5idWZfaWR4OwotCQlidWYgPSBORVRNQVBfQlVGKHJpbmcsIGlkeCk7Ci0JCWxlZnQg
PSByaW5nLT5zbG90W2N1cl0ubGVuOwotCi0JCWZvciAoaSA9IDA7IGkgPCBpb3ZjbnQgJiYgbGVm
dCA+IDA7IGkrKykgewotCQkJaWYgKGlvdltpXS5pb3ZfbGVuID4gbGVmdCkKLQkJCQlpb3ZbaV0u
aW92X2xlbiA9IGxlZnQ7Ci0JCQltZW1jcHkoaW92W2ldLmlvdl9iYXNlLCAmYnVmW2xlbl0sIGlv
dltpXS5pb3ZfbGVuKTsKLQkJCWxlbiArPSBpb3ZbaV0uaW92X2xlbjsKLQkJCWxlZnQgLT0gaW92
W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4
dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl9yeF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg
TklPQ1JYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQlmb3IgKDsgaSA8IGlvdmNudDsgaSsr
KQotCQlpb3ZbaV0uaW92X2xlbiA9IDA7Ci0KLQlyZXR1cm4gKGxlbik7Ci19Ci0KLS8qCi0gKiBD
YWxsZWQgdG8gc2VuZCBhIGJ1ZmZlciBjaGFpbiBvdXQgdG8gdGhlIHZhbGUgcG9ydAotICovCi1z
dGF0aWMgdm9pZAotcGNpX3Z0bmV0X25ldG1hcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpz
Yywgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCi0JCSAgICBpbnQgbGVuKQotewotCXN0
YXRpYyBjaGFyIHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCi0KLQlpZiAoc2MtPnZzY19u
bWQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAs
IHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQotCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRv
IHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAotCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBl
eHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCi0JICovCi0JaWYgKGxlbiA8IDYwKSB7
Ci0JCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOwotCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0g
NjAgLSBsZW47Ci0JCWlvdmNudCsrOwotCX0KLQkodm9pZCkgcGNpX3Z0bmV0X25ldG1hcF93cml0
ZXYoc2MtPnZzY19ubWQsIGlvdiwgaW92Y250KTsKLX0KLQotc3RhdGljIHZvaWQKLXBjaV92dG5l
dF9uZXRtYXBfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGlvdmVj
IGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7Ci0Jc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2
b2lkICp2cng7Ci0JaW50IGxlbiwgbjsKLQl1aW50MTZfdCBpZHg7Ci0KLQkvKgotCSAqIFNob3Vs
ZCBuZXZlciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIG5ldG1hcCBkZXNjcmlwdG9yCi0JICov
Ci0JYXNzZXJ0KHNjLT52c2Nfbm1kICE9IE5VTEwpOwotCi0JLyoKLQkgKiBCdXQsIHdpbGwgYmUg
Y2FsbGVkIHdoZW4gdGhlIHJ4IHJpbmcgaGFzbid0IHlldAotCSAqIGJlZW4gc2V0IHVwIG9yIHRo
ZSBndWVzdCBpcyByZXNldHRpbmcgdGhlIGRldmljZS4KLQkgKi8KLQlpZiAoIXNjLT52c2Nfcnhf
cmVhZHkgfHwgc2MtPnJlc2V0dGluZykgewotCQkvKgotCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5k
IHRyeSBsYXRlci4KLQkJICovCi0JCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9p
ZCAqKWR1bW15YnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgZm9yIGF2YWls
YWJsZSByeCBidWZmZXJzCi0JICovCi0JdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXTsK
LQlpZiAoIXZxX2hhc19kZXNjcyh2cSkpIHsKLQkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFu
ZCB0cnkgbGF0ZXIuICBJbnRlcnJ1cHQgb24KLQkJICogZW1wdHksIGlmIHRoYXQncyBuZWdvdGlh
dGVkLgotCQkgKi8KLQkJKHZvaWQpIG5tX25leHRwa3Qoc2MtPnZzY19ubWQsICh2b2lkICopZHVt
bXlidWYpOwotCQl2cV9lbmRjaGFpbnModnEsIDEpOwotCQlyZXR1cm47Ci0JfQotCi0JZG8gewot
CQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCi0JCW4gPSB2cV9nZXRjaGFp
bih2cSwgJmlkeCwgaW92LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKLQkJYXNzZXJ0KG4gPj0gMSAm
JiBuIDw9IFZUTkVUX01BWFNFR1MpOwotCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhl
IHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcg
aXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNl
OwotCQlyaW92ID0gcnhfaW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxl
biA9IHBjaV92dG5ldF9uZXRtYXBfcmVhZHYoc2MtPnZzY19ubWQsIHJpb3YsIG4pOwogCiAJCWlm
IChsZW4gPT0gMCkgewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgcGFja2V0cywgYnV0IHN0aWxsIHNv
bWUgYXZhaWwgcmluZwogCQkJICogZW50cmllcy4gIEludGVycnVwdCBpZiBuZWVkZWQvYXBwcm9w
cmlhdGUuCiAJCQkgKi8KLQkJCXZxX3JldGNoYWluKHZxKTsKKwkJCXZxX3JldGNoYWluKHZxKTsg
LyogcmV0dXJuIHRoZSBzbG90IHRvIHRoZSB2cSAqLwogCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsK
IAkJCXJldHVybjsKIAkJfQogCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRo
ZSByeCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJn
ZWQgcnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+
cnhfdmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19u
ZXRfcnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7
Ci0JCX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNo
YWlucy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVu
KTsKKwkJLyogUHVibGlzaCB0aGUgaW5mbyB0byB0aGUgZ3Vlc3QgKi8KKwkJdnFfcmVsY2hhaW4o
dnEsIGlkeCwgKHVpbnQzMl90KWxlbik7CiAJfSB3aGlsZSAodnFfaGFzX2Rlc2NzKHZxKSk7CiAK
IAkvKiBJbnRlcnJ1cHQgaWYgbmVlZGVkLCBpbmNsdWRpbmcgZm9yIE5PVElGWV9PTl9FTVBUWS4g
Ki8KIAl2cV9lbmRjaGFpbnModnEsIDEpOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gdGhlcmUg
aXMgcmVhZCBhY3Rpdml0eSBvbiB0aGUgdGFwIGZpbGUgZGVzY3JpcHRvci4KKyAqIEVhY2ggYnVm
ZmVyIHBvc3RlZCBieSB0aGUgZ3Vlc3QgaXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGNvbnRhaW4K
KyAqIGFuIGVudGlyZSBldGhlcm5ldCBmcmFtZSArIHJ4IGhlYWRlci4KKyAqLwogc3RhdGljIHZv
aWQKIHBjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lk
ICpwYXJhbSkKIHsKIAlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOwogCisJKHZv
aWQpZmQ7ICh2b2lkKXR5cGU7CiAJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsKLQlz
Yy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOwotCXNjLT5wY2lfdnRuZXRfcngoc2MpOwotCXNjLT5yeF9p
bl9wcm9ncmVzcyA9IDA7CisJcGNpX3Z0bmV0X3J4KHNjKTsKIAlwdGhyZWFkX211dGV4X3VubG9j
aygmc2MtPnJ4X210eCk7Ci0KIH0KIAorLyogY2FsbGJhY2sgd2hlbiB3cml0aW5nIHRvIHRoZSBQ
Q0kgcmVnaXN0ZXIgKi8KIHN0YXRpYyB2b2lkCiBwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNj
LCBzdHJ1Y3QgdnF1ZXVlX2luZm8gKnZxKQogewpAQCAtNjA1LDM1ICsyOTcsMzMgQEAKIAl9CiB9
CiAKKy8qIFRYIHByb2Nlc3NpbmcgKGd1ZXN0IHRvIGhvc3QpLCBjYWxsZWQgaW4gdGhlIHR4IHRo
cmVhZCAqLwogc3RhdGljIHZvaWQKIHBjaV92dG5ldF9wcm9jdHgoc3RydWN0IHBjaV92dG5ldF9z
b2Z0YyAqc2MsIHN0cnVjdCB2cXVldWVfaW5mbyAqdnEpCiB7CiAJc3RydWN0IGlvdmVjIGlvdltW
VE5FVF9NQVhTRUdTICsgMV07CiAJaW50IGksIG47Ci0JaW50IHBsZW4sIHRsZW47CisJdWludDMy
X3QgbGVuOwogCXVpbnQxNl90IGlkeDsKIAogCS8qCi0JICogT2J0YWluIGNoYWluIG9mIGRlc2Ny
aXB0b3JzLiAgVGhlIGZpcnN0IG9uZSBpcwotCSAqIHJlYWxseSB0aGUgaGVhZGVyIGRlc2NyaXB0
b3IsIHNvIHdlIG5lZWQgdG8gc3VtCi0JICogdXAgdHdvIGxlbmd0aHM6IHBhY2tldCBsZW5ndGgg
YW5kIHRyYW5zZmVyIGxlbmd0aC4KKwkgKiBPYnRhaW4gY2hhaW4gb2YgZGVzY3JpcHRvcnMuIFRo
ZSBmaXJzdCBkZXNjcmlwdG9yIGFsc28KKwkgKiBjb250YWlucyB0aGUgdmlydGlvLW5ldCBoZWFk
ZXIuCiAJICovCiAJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1Ms
IE5VTEwpOwogCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKLQlwbGVuID0g
MDsKLQl0bGVuID0gaW92WzBdLmlvdl9sZW47Ci0JZm9yIChpID0gMTsgaSA8IG47IGkrKykgewot
CQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOwotCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVuOworCWxl
biA9IDA7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlsZW4gKz0gaW92W2ldLmlvdl9s
ZW47CiAJfQogCi0JRFBSSU5URigoInZpcnRpbzogcGFja2V0IHNlbmQsICVkIGJ5dGVzLCAlZCBz
ZWdzXG5cciIsIHBsZW4sIG4pKTsKLQlzYy0+cGNpX3Z0bmV0X3R4KHNjLCAmaW92WzFdLCBuIC0g
MSwgcGxlbik7CisJbmV0YmVfc2VuZChzYy0+dnNjX2JlLCBpb3YsIG4sIGxlbiwgMCAvKiBtb3Jl
ICovKTsKIAotCS8qIGNoYWluIGlzIHByb2Nlc3NlZCwgcmVsZWFzZSBpdCBhbmQgc2V0IHRsZW4g
Ki8KLQl2cV9yZWxjaGFpbih2cSwgaWR4LCB0bGVuKTsKKwkvKiBjaGFpbiBpcyBwcm9jZXNzZWQs
IHJlbGVhc2UgaXQgYW5kIHNldCBsZW4gKi8KKwl2cV9yZWxjaGFpbih2cSwgaWR4LCBsZW4pOwog
fQogCisvKiBjYWxsYmFjayB3aGVuIHdyaXRpbmcgdG8gdGhlIFBDSSByZWdpc3RlciAqLwogc3Rh
dGljIHZvaWQKIHBjaV92dG5ldF9waW5nX3R4cSh2b2lkICp2c2MsIHN0cnVjdCB2cXVldWVfaW5m
byAqdnEpCiB7CkBAIC02NjMsNiArMzUzLDE0IEBACiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsK
IAlpbnQgZXJyb3I7CiAKKwl7CisJCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+dnNjX3Zz
LnZzX3BpOworCQljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCQlzbnByaW50Zih0bmFtZSwg
c2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVkIHR4IiwgcGktPnBpX3Nsb3QsCisJCQkJcGktPnBp
X2Z1bmMpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHB0aHJlYWRfc2VsZigpLCB0bmFtZSk7CisJ
fQorCiAJdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXTsKIAogCS8qCkBAIC03MTcsMTA5
ICs0MTUsMjcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50Ci1wY2lfdnRuZXRfcGFyc2VtYWMoY2hh
ciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCi17Ci0gICAgICAgIHN0cnVjdCBldGhlcl9h
ZGRyICplYTsKLSAgICAgICAgY2hhciAqdG1wc3RyOwotICAgICAgICBjaGFyIHplcm9fYWRkcltF
VEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotICAgICAgICB0bXBzdHIg
PSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKLSAgICAgICAKLSAgICAgICAgaWYgKChtYWNfc3RyICE9
IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7Ci0gICAgICAgICAgICAgICAgZWEg
PSBldGhlcl9hdG9uKG1hY19zdHIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwg
fHwgRVRIRVJfSVNfTVVMVElDQVNUKGVhLT5vY3RldCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
bWVtY21wKGVhLT5vY3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgewotCQkJ
ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKEVJTlZBTCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJf
QUREUl9MRU4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICgwKTsKLX0KLQotc3RhdGlj
IHZvaWQKLXBjaV92dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNo
YXIgKmRldm5hbWUpCi17Ci0JY2hhciB0YnVmWzgwXTsKLQotCXN0cmNweSh0YnVmLCAiL2Rldi8i
KTsKLQlzdHJsY2F0KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7Ci0KLQlzYy0+cGNpX3Z0
bmV0X3J4ID0gcGNpX3Z0bmV0X3RhcF9yeDsKLQlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0
X3RhcF90eDsKLQotCXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7Ci0JaWYgKHNj
LT52c2NfdGFwZmQgPT0gLTEpIHsKLQkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBm
YWlsZWRcbiIsIHRidWYpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogU2V0IG5vbi1ibG9j
a2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKLQkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2
ZW50IGxvb3AKLQkgKi8KLQlpbnQgb3B0ID0gMTsKLQlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwg
RklPTkJJTywgJm9wdCkgPCAwKSB7Ci0JCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sg
ZmFpbGVkXG4iKSk7Ci0JCWNsb3NlKHNjLT52c2NfdGFwZmQpOwotCQlzYy0+dnNjX3RhcGZkID0g
LTE7Ci0JfQotCi0Jc2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAotCQkJ
CSAgRVZGX1JFQUQsCi0JCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCi0JCQkJICBzYyk7Ci0J
aWYgKHNjLT52c2NfbWV2cCA9PSBOVUxMKSB7Ci0JCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0
ZXIgZXZlbnRcbiIpKTsKLQkJY2xvc2Uoc2MtPnZzY190YXBmZCk7Ci0JCXNjLT52c2NfdGFwZmQg
PSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVj
dCBwY2lfdnRuZXRfc29mdGMgKnNjLCBjaGFyICppZm5hbWUpCi17Ci0Jc2MtPnBjaV92dG5ldF9y
eCA9IHBjaV92dG5ldF9uZXRtYXBfcng7Ci0Jc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9u
ZXRtYXBfdHg7Ci0KLQlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsK
LQlpZiAoc2MtPnZzY19ubWQgPT0gTlVMTCkgewotCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAg
ZGV2aWNlICVzIGZhaWxlZFxuIiwgaWZuYW1lKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+dnNj
X21ldnAgPSBtZXZlbnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKLQkJCQkgIEVWRl9SRUFELAotCQkJ
CSAgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrLAotCQkJCSAgc2MpOwotCWlmIChzYy0+dnNjX21ldnAg
PT0gTlVMTCkgewotCQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7Ci0J
CW5tX2Nsb3NlKHNjLT52c2Nfbm1kKTsKLQkJc2MtPnZzY19ubWQgPSBOVUxMOwotCX0KLX0KLQot
c3RhdGljIGludAogcGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lf
ZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCiB7Ci0JTUQ1X0NUWCBtZGN0eDsKLQl1bnNpZ25lZCBj
aGFyIGRpZ2VzdFsxNl07Ci0JY2hhciBuc3RyWzgwXTsKLQljaGFyIHRuYW1lW01BWENPTUxFTiAr
IDFdOwogCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjOwogCWNoYXIgKmRldm5hbWU7CiAJY2hh
ciAqdnRvcHRzOwogCWludCBtYWNfcHJvdmlkZWQ7CisJc3RydWN0IHZpcnRpb19jb25zdHMgKnZj
OwogCi0Jc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMpKTsKKwkv
KgorCSAqIEFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgZnVydGhlciB2aXJ0aW8gaW5pdGlh
bGl6YXRpb25zLgorCSAqIHNjIGFsc28gY29udGFpbnMgYSBjb3B5IG9mIHRoZSB2dG5ldF92aV9j
b25zdHMsCisJICogYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoYW5nZSBkZXBlbmRpbmcgb24K
KwkgKiB0aGUgYmFja2VuZC4KKwkgKi8KKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBj
aV92dG5ldF9zb2Z0YykgKworCQkJc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fY29uc3RzKSk7CisJdmMg
PSAoc3RydWN0IHZpcnRpb19jb25zdHMgKikoc2MgKyAxKTsKKwltZW1jcHkodmMsICZ2dG5ldF92
aV9jb25zdHMsIHNpemVvZigqdmMpKTsKIAogCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnZzY19t
dHgsIE5VTEwpOwogCi0Jdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3ZzLCAmdnRuZXRfdmlfY29u
c3RzLCBzYywgcGksIHNjLT52c2NfcXVldWVzKTsKLQlzYy0+dnNjX3ZzLnZzX210eCA9ICZzYy0+
dnNjX210eDsKLQogCXNjLT52c2NfcXVldWVzW1ZUTkVUX1JYUV0udnFfcXNpemUgPSBWVE5FVF9S
SU5HU1o7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9ub3RpZnkgPSBwY2lfdnRuZXRf
cGluZ19yeHE7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJ
TkdTWjsKQEAgLTgzMCwxMiArNDQ2LDEwIEBACiAjZW5kaWYKICAKIAkvKgotCSAqIEF0dGVtcHQg
dG8gb3BlbiB0aGUgdGFwIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKwkgKiBBdHRl
bXB0IHRvIG9wZW4gdGhlIGJhY2tlbmQgZGV2aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcwog
CSAqIGlmIHNwZWNpZmllZAogCSAqLwogCW1hY19wcm92aWRlZCA9IDA7Ci0Jc2MtPnZzY190YXBm
ZCA9IC0xOwotCXNjLT52c2Nfbm1kID0gTlVMTDsKIAlpZiAob3B0cyAhPSBOVUxMKSB7CiAJCWlu
dCBlcnI7CiAKQEAgLTg0Myw3ICs0NTcsNyBAQAogCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMsICIs
Iik7CiAKIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Ci0JCQllcnIgPSBwY2lfdnRuZXRfcGFyc2Vt
YWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJZXJyID0gbmV0X3BhcnNlbWFjKHZ0
b3B0cywgc2MtPnZzY19jb25maWcubWFjKTsKIAkJCWlmIChlcnIgIT0gMCkgewogCQkJCWZyZWUo
ZGV2bmFtZSk7CiAJCQkJcmV0dXJuIChlcnIpOwpAQCAtODUxLDMzICs0NjUsMTggQEAKIAkJCW1h
Y19wcm92aWRlZCA9IDE7CiAJCX0KIAotCQlpZiAoc3RybmNtcChkZXZuYW1lLCAidmFsZSIsIDQp
ID09IDApCi0JCQlwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHNjLCBkZXZuYW1lKTsKLQkJaWYgKHN0
cm5jbXAoZGV2bmFtZSwgInRhcCIsIDMpID09IDAgfHwKLQkJICAgIHN0cm5jbXAoZGV2bmFtZSwg
InZtbmV0IiwgNSkgPT0gMCkKLQkJCXBjaV92dG5ldF90YXBfc2V0dXAoc2MsIGRldm5hbWUpOwor
CQlzYy0+dnNjX2JlID0gbmV0YmVfaW5pdChkZXZuYW1lLCBwY2lfdnRuZXRfcnhfY2FsbGJhY2ss
IHNjKTsKKwkJaWYgKCFzYy0+dnNjX2JlKSB7CisJCQlXUFJJTlRGKCgibmV0IGJhY2tlbmQgaW5p
dGlhbGl6YXRpb24gZmFpbGVkXG4iKSk7CisJCX0gZWxzZSB7CisJCQl2Yy0+dmNfaHZfY2FwcyB8
PSBuZXRiZV9nZXRfY2FwKHNjLT52c2NfYmUpOworCQl9CiAKIAkJZnJlZShkZXZuYW1lKTsKIAl9
CiAKLQkvKgotCSAqIFRoZSBkZWZhdWx0IE1BQyBhZGRyZXNzIGlzIHRoZSBzdGFuZGFyZCBOZXRB
cHAgT1VJIG9mIDAwLWEwLTk4LAotCSAqIGZvbGxvd2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNs
b3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCi0JICovCiAJaWYgKCFtYWNfcHJvdmlkZWQpIHsK
LQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwK
LQkJICAgIHBpLT5waV9mdW5jLCB2bW5hbWUpOwotCi0JCU1ENUluaXQoJm1kY3R4KTsKLQkJTUQ1
VXBkYXRlKCZtZGN0eCwgbnN0ciwgc3RybGVuKG5zdHIpKTsKLQkJTUQ1RmluYWwoZGlnZXN0LCAm
bWRjdHgpOwotCi0JCXNjLT52c2NfY29uZmlnLm1hY1swXSA9IDB4MDA7Ci0JCXNjLT52c2NfY29u
ZmlnLm1hY1sxXSA9IDB4YTA7Ci0JCXNjLT52c2NfY29uZmlnLm1hY1syXSA9IDB4OTg7Ci0JCXNj
LT52c2NfY29uZmlnLm1hY1szXSA9IGRpZ2VzdFswXTsKLQkJc2MtPnZzY19jb25maWcubWFjWzRd
ID0gZGlnZXN0WzFdOwotCQlzYy0+dnNjX2NvbmZpZy5tYWNbNV0gPSBkaWdlc3RbMl07CisJCW5l
dF9nZW5tYWMocGksIHNjLT52c2NfY29uZmlnLm1hYyk7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBj
b25maWcgc3BhY2UgKi8KQEAgLTg4NywyMiArNDg2LDIzIEBACiAJcGNpX3NldF9jZmdkYXRhMTYo
cGksIFBDSVJfU1VCREVWXzAsIFZJUlRJT19UWVBFX05FVCk7CiAJcGNpX3NldF9jZmdkYXRhMTYo
cGksIFBDSVJfU1VCVkVORF8wLCBWSVJUSU9fVkVORE9SKTsKIAotCS8qIExpbmsgaXMgdXAgaWYg
d2UgbWFuYWdlZCB0byBvcGVuIHRhcCBkZXZpY2Ugb3IgdmFsZSBwb3J0LiAqLwotCXNjLT52c2Nf
Y29uZmlnLnN0YXR1cyA9IChvcHRzID09IE5VTEwgfHwgc2MtPnZzY190YXBmZCA+PSAwIHx8Ci0J
ICAgIHNjLT52c2Nfbm1kICE9IE5VTEwpOworCS8qIExpbmsgaXMgdXAgaWYgd2UgbWFuYWdlZCB0
byBvcGVuIGJhY2tlbmQgZGV2aWNlLiAqLworCXNjLT52c2NfY29uZmlnLnN0YXR1cyA9IChvcHRz
ID09IE5VTEwgfHwgc2MtPnZzY19iZSk7CiAJCisJdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3Zz
LCB2Yywgc2MsIHBpLCBzYy0+dnNjX3F1ZXVlcyk7CisJc2MtPnZzY192cy52c19tdHggPSAmc2Mt
PnZzY19tdHg7CisKIAkvKiB1c2UgQkFSIDEgdG8gbWFwIE1TSS1YIHRhYmxlIGFuZCBQQkEsIGlm
IHdlJ3JlIHVzaW5nIE1TSS1YICovCiAJaWYgKHZpX2ludHJfaW5pdCgmc2MtPnZzY192cywgMSwg
ZmJzZHJ1bl92aXJ0aW9fbXNpeCgpKSkKIAkJcmV0dXJuICgxKTsKIAogCS8qIHVzZSBCQVIgMCB0
byBtYXAgY29uZmlnIHJlZ3MgaW4gSU8gc3BhY2UgKi8KLQl2aV9zZXRfaW9fYmFyKCZzYy0+dnNj
X3ZzLCAwKTsKKwl2aV9zZXRfaW9fYmFyKCZzYy0+dnNjX3ZzLCAwKTsJLyogY2FsbHMgaW50byB2
aXJ0aW8gKi8KIAogCXNjLT5yZXNldHRpbmcgPSAwOwogCiAJc2MtPnJ4X21lcmdlID0gMTsKIAlz
Yy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcik7Ci0Jc2MtPnJ4
X2luX3Byb2dyZXNzID0gMDsKIAlwdGhyZWFkX211dGV4X2luaXQoJnNjLT5yeF9tdHgsIE5VTEwp
OyAKIAogCS8qIApAQCAtOTE0LDkgKzUxNCw2IEBACiAJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+
dHhfbXR4LCBOVUxMKTsKIAlwdGhyZWFkX2NvbmRfaW5pdCgmc2MtPnR4X2NvbmQsIE5VTEwpOwog
CXB0aHJlYWRfY3JlYXRlKCZzYy0+dHhfdGlkLCBOVUxMLCBwY2lfdnRuZXRfdHhfdGhyZWFkLCAo
dm9pZCAqKXNjKTsKLQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVk
IHR4IiwgcGktPnBpX3Nsb3QsCi0JICAgIHBpLT5waV9mdW5jKTsKLSAgICAgICAgcHRocmVhZF9z
ZXRfbmFtZV9ucChzYy0+dHhfdGlkLCB0bmFtZSk7CiAKIAlyZXR1cm4gKDApOwogfQpAQCAtOTI3
LDggKzUyNCw4IEBACiAJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MgPSB2c2M7CiAJdm9pZCAq
cHRyOwogCi0JaWYgKG9mZnNldCA8IDYpIHsKLQkJYXNzZXJ0KG9mZnNldCArIHNpemUgPD0gNik7
CisJaWYgKG9mZnNldCA8IChpbnQpc2l6ZW9mKHNjLT52c2NfY29uZmlnLm1hYykpIHsKKwkJYXNz
ZXJ0KG9mZnNldCArIHNpemUgPD0gKGludClzaXplb2Yoc2MtPnZzY19jb25maWcubWFjKSk7CiAJ
CS8qCiAJCSAqIFRoZSBkcml2ZXIgaXMgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNz
CiAJCSAqLwpAQCAtOTYwLDE0ICs1NTcsMTcgQEAKIAogCXNjLT52c2NfZmVhdHVyZXMgPSBuZWdv
dGlhdGVkX2ZlYXR1cmVzOwogCi0JaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAmIFZJUlRJT19ORVRf
Rl9NUkdfUlhCVUYpKSB7CisJaWYgKCEobmVnb3RpYXRlZF9mZWF0dXJlcyAmIFZJUlRJT19ORVRf
Rl9NUkdfUlhCVUYpKSB7CiAJCXNjLT5yeF9tZXJnZSA9IDA7CiAJCS8qIG5vbi1tZXJnZSByeCBo
ZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCiAJCXNjLT5yeF92aGRybGVuIC09IDI7CiAJfQor
CisJLyogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUgc29tZSBjYXBhYmlsaXRpZXMgaXQgaGFz
IGFkdmVydGlzZWQuICovCisJbmV0YmVfc2V0X2NhcChzYy0+dnNjX2JlLCBuZWdvdGlhdGVkX2Zl
YXR1cmVzLCBzYy0+cnhfdmhkcmxlbik7CiB9CiAKLXN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92
bmV0ID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92bmV0ID0gewogCS5wZV9l
bXUgPSAJInZpcnRpby1uZXQiLAogCS5wZV9pbml0ID0JcGNpX3Z0bmV0X2luaXQsCiAJLnBlX2Jh
cndyaXRlID0JdmlfcGNpX3dyaXRlLApkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5
dmUvcGNpX3ZpcnRpb19uZXQuYy5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0
aW9fbmV0LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5j
Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vz
ci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMub3JpZwkyMDE2LTA5LTI5IDAwOjI1OjA3LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDk3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC91c3Iu
c2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5jIDI5NjgyOSAyMDE2LTAzLTE0IDA4OjQ4OjE2WiBn
bm4gJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog
cmVsZW5nLzExLjAvdXNyLnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0w
My0xNCAwODo0ODoxNlogZ25uICQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1
ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUg
PHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2F0
b21pYy5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2lmbmRlZiBORVRNQVBfV0lUSF9M
SUJTCisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9uZXRt
YXBfdXNlci5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUg
PHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1
bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5jbHVkZSAibWV2ZW50LmgiCisjaW5jbHVk
ZSAidmlydGlvLmgiCisKKyNkZWZpbmUgVlRORVRfUklOR1NaCTEwMjQKKworI2RlZmluZSBWVE5F
VF9NQVhTRUdTCTI1NgorCisvKgorICogSG9zdCBjYXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ug
b25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NV
TQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklS
VElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBj
a3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBs
aWVzIE1BQyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyog
ZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VF
U1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJU
SU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwor
I2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2
IFRTTyB3aXRoIEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEw
KSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080
CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVD
TiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2Fu
IHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyog
aG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVT
CSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlW
SVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJs
ZSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBj
aGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFO
CSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJ
VklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2Fu
IHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCisKKyNkZWZpbmUgVlRORVRfU19IT1NUQ0FQUyAgICAg
IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX01SR19SWEJVRiB8IFZJUlRJ
T19ORVRfRl9TVEFUVVMgfCBcCisgICAgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZIHwgVklSVElP
X1JJTkdfRl9JTkRJUkVDVF9ERVNDKQorCisvKgorICogUENJIGNvbmZpZy1zcGFjZSAicmVnaXN0
ZXJzIgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgeworCXVpbnQ4X3QgIG1hY1s2XTsK
Kwl1aW50MTZfdCBzdGF0dXM7Cit9IF9fcGFja2VkOworCisvKgorICogUXVldWUgZGVmaW5pdGlv
bnMuCisgKi8KKyNkZWZpbmUgVlRORVRfUlhRCTAKKyNkZWZpbmUgVlRORVRfVFhRCTEKKyNkZWZp
bmUgVlRORVRfQ1RMUQkyCS8qIE5COiBub3QgeWV0IHN1cHBvcnRlZCAqLworCisjZGVmaW5lIFZU
TkVUX01BWFEJMworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1
Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZy
aF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3Np
emU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0
OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIERlYnVnIHByaW50
ZgorICovCitzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKKyNkZWZpbmUgRFBSSU5URihwYXJh
bXMpIGlmIChwY2lfdnRuZXRfZGVidWcpIHByaW50ZiBwYXJhbXMKKyNkZWZpbmUgV1BSSU5URihw
YXJhbXMpIHByaW50ZiBwYXJhbXMKKworLyoKKyAqIFBlci1kZXZpY2Ugc29mdGMKKyAqLworc3Ry
dWN0IHBjaV92dG5ldF9zb2Z0YyB7CisJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CisJc3Ry
dWN0IHZxdWV1ZV9pbmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOworCXB0aHJlYWRfbXV0
ZXhfdCB2c2NfbXR4OworCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOworCisJaW50CQl2c2NfdGFw
ZmQ7CisJc3RydWN0IG5tX2Rlc2MJKnZzY19ubWQ7CisKKwlpbnQJCXZzY19yeF9yZWFkeTsKKwl2
b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNrZWQgb3V0c2lkZSBsb2NrICov
CisKKwl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0ZWQgZmVhdHVyZXMgKi8KKwkK
KwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKKworCXB0aHJlYWRfbXV0ZXhf
dAlyeF9tdHg7CisJaW50CQlyeF9pbl9wcm9ncmVzczsKKwlpbnQJCXJ4X3ZoZHJsZW47CisJaW50
CQlyeF9tZXJnZTsJLyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCisKKwlwdGhyZWFkX3QgCXR4
X3RpZDsKKwlwdGhyZWFkX211dGV4X3QJdHhfbXR4OworCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7
CisJaW50CQl0eF9pbl9wcm9ncmVzczsKKworCXZvaWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBw
Y2lfdnRuZXRfc29mdGMgKnNjKTsKKwl2b2lkICgqcGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0
bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIGludCBpb3ZjbnQsIGlu
dCBsZW4pOworfTsKKworc3RhdGljIHZvaWQgcGNpX3Z0bmV0X3Jlc2V0KHZvaWQgKik7CisvKiBz
dGF0aWMgdm9pZCBwY2lfdnRuZXRfbm90aWZ5KHZvaWQgKiwgc3RydWN0IHZxdWV1ZV9pbmZvICop
OyAqLworc3RhdGljIGludCBwY2lfdnRuZXRfY2ZncmVhZCh2b2lkICosIGludCwgaW50LCB1aW50
MzJfdCAqKTsKK3N0YXRpYyBpbnQgcGNpX3Z0bmV0X2NmZ3dyaXRlKHZvaWQgKiwgaW50LCBpbnQs
IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIHBjaV92dG5ldF9uZWdfZmVhdHVyZXModm9pZCAqLCB1
aW50NjRfdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2NvbnN0cyB2dG5ldF92aV9jb25zdHMg
PSB7CisJInZ0bmV0IiwJCS8qIG91ciBuYW1lICovCisJVlRORVRfTUFYUSAtIDEsCQkvKiB3ZSBj
dXJyZW50bHkgc3VwcG9ydCAyIHZpcnRxdWV1ZXMgKi8KKwlzaXplb2Yoc3RydWN0IHZpcnRpb19u
ZXRfY29uZmlnKSwgLyogY29uZmlnIHJlZyBzaXplICovCisJcGNpX3Z0bmV0X3Jlc2V0LAkvKiBy
ZXNldCAqLworCU5VTEwsCQkJLyogZGV2aWNlLXdpZGUgcW5vdGlmeSAtLSBub3QgdXNlZCAqLwor
CXBjaV92dG5ldF9jZmdyZWFkLAkvKiByZWFkIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfY2Zn
d3JpdGUsCS8qIHdyaXRlIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfbmVnX2ZlYXR1cmVzLAkv
KiBhcHBseSBuZWdvdGlhdGVkIGZlYXR1cmVzICovCisJVlRORVRfU19IT1NUQ0FQUywJLyogb3Vy
IGNhcGFiaWxpdGllcyAqLworfTsKKworLyoKKyAqIElmIHRoZSB0cmFuc21pdCB0aHJlYWQgaXMg
YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj
aV92dG5ldF90eHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXdoaWxlIChzYy0+dHhfaW5fcHJvZ3Jlc3MpIHsK
KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor
CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu
bG9jaygmc2MtPnR4X210eCk7Cit9CisKKy8qCisgKiBJZiB0aGUgcmVjZWl2ZSB0aHJlYWQgaXMg
YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj
aV92dG5ldF9yeHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCXdoaWxlIChzYy0+cnhfaW5fcHJvZ3Jlc3MpIHsK
KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor
CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu
bG9jaygmc2MtPnJ4X210eCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcmVzZXQodm9p
ZCAqdnNjKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCisJRFBSSU5U
RigoInZ0bmV0OiBkZXZpY2UgcmVzZXQgcmVxdWVzdGVkICFcbiIpKTsKKworCXNjLT5yZXNldHRp
bmcgPSAxOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdGhy
ZWFkcyB0byBmaW5pc2ggdGhlaXIKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCXBjaV92dG5ldF90
eHdhaXQoc2MpOworCXBjaV92dG5ldF9yeHdhaXQoc2MpOworCisJc2MtPnZzY19yeF9yZWFkeSA9
IDA7CisJc2MtPnJ4X21lcmdlID0gMTsKKwlzYy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3Qg
dmlydGlvX25ldF9yeGhkcik7CisKKwkvKiBub3cgcmVzZXQgcmluZ3MsIE1TSS1YIHZlY3RvcnMs
IGFuZCBuZWdvdGlhdGVkIGNhcGFiaWxpdGllcyAqLworCXZpX3Jlc2V0X2Rldigmc2MtPnZzY192
cyk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKK30KKworLyoKKyAqIENhbGxlZCB0byBzZW5kIGEg
YnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0aWMgdm9pZAorcGNp
X3Z0bmV0X3RhcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp
b3YsIGludCBpb3ZjbnQsCisJCSBpbnQgbGVuKQoreworCXN0YXRpYyBjaGFyIHBhZFs2MF07IC8q
IGFsbCB6ZXJvIGJ5dGVzICovCisKKwlpZiAoc2MtPnZzY190YXBmZCA9PSAtMSkKKwkJcmV0dXJu
OworCisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQg
YWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJh
bnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5
IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlvdl9i
YXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gNjAgLSBsZW47CisJCWlvdmNudCsr
OworCX0KKwkodm9pZCkgd3JpdGV2KHNjLT52c2NfdGFwZmQsIGlvdiwgaW92Y250KTsKK30KKwor
LyoKKyAqICBDYWxsZWQgd2hlbiB0aGVyZSBpcyByZWFkIGFjdGl2aXR5IG9uIHRoZSB0YXAgZmls
ZSBkZXNjcmlwdG9yLgorICogRWFjaCBidWZmZXIgcG9zdGVkIGJ5IHRoZSBndWVzdCBpcyBhc3N1
bWVkIHRvIGJlIGFibGUgdG8gY29udGFpbgorICogYW4gZW50aXJlIGV0aGVybmV0IGZyYW1lICsg
cnggaGVhZGVyLgorICogIE1QIG5vdGU6IHRoZSBkdW1teWJ1ZiBpcyBvbmx5IHVzZWQgZm9yIGRp
c2NhcmRpbmcgZnJhbWVzLCBzbyB0aGVyZQorICogaXMgbm8gbmVlZCBmb3IgaXQgdG8gYmUgcGVy
LXZ0bmV0IG9yIGxvY2tlZC4KKyAqLworc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZbMjA0OF07CisK
K3N0YXRpYyBfX2lubGluZSBzdHJ1Y3QgaW92ZWMgKgorcnhfaW92X3RyaW0oc3RydWN0IGlvdmVj
ICppb3YsIGludCAqbmlvdiwgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJ
LyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFz
c2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47
CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCpuaW92ID4gMSk7CisJCSpu
aW92IC09IDE7CisJCXJpb3YgPSAmaW92WzFdOworCX0gZWxzZSB7CisJCWlvdlswXS5pb3ZfYmFz
ZSA9ICh2b2lkICopKCh1aW50cHRyX3QpaW92WzBdLmlvdl9iYXNlICsgdGxlbik7CisJCXJpb3Yg
PSAmaW92WzBdOworCX0KKworCXJldHVybiAocmlvdik7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfdGFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBpb3Zl
YyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJ
dm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBTaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQKKwkgKi8KKwlhc3NlcnQo
c2MtPnZzY190YXBmZCAhPSAtMSk7CisKKwkvKgorCSAqIEJ1dCwgd2lsbCBiZSBjYWxsZWQgd2hl
biB0aGUgcnggcmluZyBoYXNuJ3QgeWV0CisJICogYmVlbiBzZXQgdXAgb3IgdGhlIGd1ZXN0IGlz
IHJlc2V0dGluZyB0aGUgZGV2aWNlLgorCSAqLworCWlmICghc2MtPnZzY19yeF9yZWFkeSB8fCBz
Yy0+cmVzZXR0aW5nKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVy
LgorCQkgKi8KKwkJKHZvaWQpIHJlYWQoc2MtPnZzY190YXBmZCwgZHVtbXlidWYsIHNpemVvZihk
dW1teWJ1ZikpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgYXZhaWxhYmxl
IHJ4IGJ1ZmZlcnMKKwkgKi8KKwl2cSA9ICZzYy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdOworCWlm
ICghdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkvKgorCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5kIHRy
eSBsYXRlci4gIEludGVycnVwdCBvbgorCQkgKiBlbXB0eSwgaWYgdGhhdCdzIG5lZ290aWF0ZWQu
CisJCSAqLworCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1
bW15YnVmKSk7CisJCXZxX2VuZGNoYWlucyh2cSwgMSk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7
CisJCS8qCisJCSAqIEdldCBkZXNjcmlwdG9yIGNoYWluLgorCQkgKi8KKwkJbiA9IHZxX2dldGNo
YWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1MsIE5VTEwpOworCQlhc3NlcnQobiA+PSAx
ICYmIG4gPD0gVlRORVRfTUFYU0VHUyk7CisKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0
aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2lu
ZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2cnggPSBpb3ZbMF0uaW92X2Jh
c2U7CisJCXJpb3YgPSByeF9pb3ZfdHJpbShpb3YsICZuLCBzYy0+cnhfdmhkcmxlbik7CisKKwkJ
bGVuID0gcmVhZHYoc2MtPnZzY190YXBmZCwgcmlvdiwgbik7CisKKwkJaWYgKGxlbiA8IDAgJiYg
ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1
dCBzdGlsbCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVl
ZGVkL2FwcHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRj
aGFpbnModnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFs
aWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBi
dWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNl
dCh2cngsIDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlz
dHJ1Y3QgdmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgt
PnZyaF9idWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQg
aGFuZGxlIG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsg
c2MtPnJ4X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50
ZXJydXB0IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFf
ZW5kY2hhaW5zKHZxLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNpX3Z0bmV0X25l
dG1hcF93cml0ZXYoc3RydWN0IG5tX2Rlc2MgKm5tZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBp
b3ZjbnQpCit7CisJaW50IHIsIGk7CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKHIgPSBubWQtPmN1
cl90eF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfVFhS
SU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4OworCQljaGFyICpidWY7CisK
KwkJaWYgKG5tX3JpbmdfZW1wdHkocmluZykpIHsKKwkJCXIrKzsKKwkJCWlmIChyID4gbm1kLT5s
YXN0X3R4X3JpbmcpCisJCQkJciA9IG5tZC0+Zmlyc3RfdHhfcmluZzsKKwkJCWlmIChyID09IG5t
ZC0+Y3VyX3R4X3JpbmcpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQljdXIgPSBy
aW5nLT5jdXI7CisJCWlkeCA9IHJpbmctPnNsb3RbY3VyXS5idWZfaWR4OworCQlidWYgPSBORVRN
QVBfQlVGKHJpbmcsIGlkeCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGlvdmNudDsgaSsrKSB7CisJ
CQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4KQorCQkJCWJyZWFrOworCQkJbWVtY3B5
KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0g
aW92W2ldLmlvdl9sZW47CisJCX0KKwkJcmluZy0+c2xvdFtjdXJdLmxlbiA9IGxlbjsKKwkJcmlu
Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBjdXIpOworCQlubWQtPmN1
cl90eF9yaW5nID0gcjsKKwkJaW9jdGwobm1kLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisJCWJy
ZWFrOworCX0KKworCXJldHVybiAobGVuKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNp
X3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVzYyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCkKK3sKKwlpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisJaW50IHI7CisK
Kwlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4
OworCQljaGFyICpidWY7CisJCXNpemVfdCBsZWZ0OworCisJCWlmIChubV9yaW5nX2VtcHR5KHJp
bmcpKSB7CisJCQlyKys7CisJCQlpZiAociA+IG5tZC0+bGFzdF9yeF9yaW5nKQorCQkJCXIgPSBu
bWQtPmZpcnN0X3J4X3Jpbmc7CisJCQlpZiAociA9PSBubWQtPmN1cl9yeF9yaW5nKQorCQkJCWJy
ZWFrOworCQkJY29udGludWU7CisJCX0KKwkJY3VyID0gcmluZy0+Y3VyOworCQlpZHggPSByaW5n
LT5zbG90W2N1cl0uYnVmX2lkeDsKKwkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgpOworCQls
ZWZ0ID0gcmluZy0+c2xvdFtjdXJdLmxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW92Y250ICYm
IGxlZnQgPiAwOyBpKyspIHsKKwkJCWlmIChpb3ZbaV0uaW92X2xlbiA+IGxlZnQpCisJCQkJaW92
W2ldLmlvdl9sZW4gPSBsZWZ0OworCQkJbWVtY3B5KGlvdltpXS5pb3ZfYmFzZSwgJmJ1ZltsZW5d
LCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47CisJCQlsZWZ0IC09
IGlvdltpXS5pb3ZfbGVuOworCQl9CisJCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBubV9yaW5n
X25leHQocmluZywgY3VyKTsKKwkJbm1kLT5jdXJfcnhfcmluZyA9IHI7CisJCWlvY3RsKG5tZC0+
ZmQsIE5JT0NSWFNZTkMsIE5VTEwpOworCQlicmVhazsKKwl9CisJZm9yICg7IGkgPCBpb3ZjbnQ7
IGkrKykKKwkJaW92W2ldLmlvdl9sZW4gPSAwOworCisJcmV0dXJuIChsZW4pOworfQorCisvKgor
ICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB2YWxlIHBvcnQKKyAq
Lworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9uZXRtYXBfdHgoc3RydWN0IHBjaV92dG5ldF9zb2Z0
YyAqc2MsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LAorCQkgICAgaW50IGxlbikKK3sK
KwlzdGF0aWMgY2hhciBwYWRbNjBdOyAvKiBhbGwgemVybyBieXRlcyAqLworCisJaWYgKHNjLT52
c2Nfbm1kID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxlbmd0aCBpcyA8
IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBleHRyYSB6ZXJvJ2Qgc2VnbWVu
dCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkgKiB0aGVyZSBpcyBhbHdheXMg
YW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgorCSAqLworCWlmIChsZW4gPCA2
MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJaW92W2lvdmNudF0uaW92X2xl
biA9IDYwIC0gbGVuOworCQlpb3ZjbnQrKzsKKwl9CisJKHZvaWQpIHBjaV92dG5ldF9uZXRtYXBf
d3JpdGV2KHNjLT52c2Nfbm1kLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfbmV0bWFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBp
b3ZlYyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7
CisJdm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCBuZXRtYXAgZGVzY3JpcHRvcgor
CSAqLworCWFzc2VydChzYy0+dnNjX25tZCAhPSBOVUxMKTsKKworCS8qCisJICogQnV0LCB3aWxs
IGJlIGNhbGxlZCB3aGVuIHRoZSByeCByaW5nIGhhc24ndCB5ZXQKKwkgKiBiZWVuIHNldCB1cCBv
ciB0aGUgZ3Vlc3QgaXMgcmVzZXR0aW5nIHRoZSBkZXZpY2UuCisJICovCisJaWYgKCFzYy0+dnNj
X3J4X3JlYWR5IHx8IHNjLT5yZXNldHRpbmcpIHsKKwkJLyoKKwkJICogRHJvcCB0aGUgcGFja2V0
IGFuZCB0cnkgbGF0ZXIuCisJCSAqLworCQkodm9pZCkgbm1fbmV4dHBrdChzYy0+dnNjX25tZCwg
KHZvaWQgKilkdW1teWJ1Zik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBh
dmFpbGFibGUgcnggYnVmZmVycworCSAqLworCXZxID0gJnNjLT52c2NfcXVldWVzW1ZUTkVUX1JY
UV07CisJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tl
dCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCisJCSAqIGVtcHR5LCBpZiB0aGF0J3MgbmVn
b3RpYXRlZC4KKwkJICovCisJCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9pZCAq
KWR1bW15YnVmKTsKKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKwkJcmV0dXJuOworCX0KKworCWRv
IHsKKwkJLyoKKwkJICogR2V0IGRlc2NyaXB0b3IgY2hhaW4uCisJCSAqLworCQluID0gdnFfZ2V0
Y2hhaW4odnEsICZpZHgsIGlvdiwgVlRORVRfTUFYU0VHUywgTlVMTCk7CisJCWFzc2VydChuID49
IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKworCQkvKgorCQkgKiBHZXQgYSBwb2ludGVyIHRv
IHRoZSByeCBoZWFkZXIsIGFuZCB1c2UgdGhlCisJCSAqIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93
aW5nIGl0IGZvciB0aGUgcGFja2V0IGJ1ZmZlci4KKwkJICovCisJCXZyeCA9IGlvdlswXS5pb3Zf
YmFzZTsKKwkJcmlvdiA9IHJ4X2lvdl90cmltKGlvdiwgJm4sIHNjLT5yeF92aGRybGVuKTsKKwor
CQlsZW4gPSBwY2lfdnRuZXRfbmV0bWFwX3JlYWR2KHNjLT52c2Nfbm1kLCByaW92LCBuKTsKKwor
CQlpZiAobGVuID09IDApIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1dCBzdGls
bCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVlZGVkL2Fw
cHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRjaGFpbnMo
dnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFsaWQgZmll
bGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJz
IGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2cngs
IDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlzdHJ1Y3Qg
dmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgtPnZyaF9i
dWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQgaGFuZGxl
IG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsgc2MtPnJ4
X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50ZXJydXB0
IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFfZW5kY2hh
aW5zKHZxLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQg
ZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0
X3NvZnRjICpzYyA9IHBhcmFtOworCisJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsK
KwlzYy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOworCXNjLT5wY2lfdnRuZXRfcngoc2MpOworCXNjLT5y
eF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOwor
Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNjLCBzdHJ1Y3Qg
dnF1ZXVlX2luZm8gKnZxKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOwor
CisJLyoKKwkgKiBBIHFub3RpZnkgbWVhbnMgdGhhdCB0aGUgcnggcHJvY2VzcyBjYW4gbm93IGJl
Z2luCisJICovCisJaWYgKHNjLT52c2NfcnhfcmVhZHkgPT0gMCkgeworCQlzYy0+dnNjX3J4X3Jl
YWR5ID0gMTsKKwkJdnEtPnZxX3VzZWQtPnZ1X2ZsYWdzIHw9IFZSSU5HX1VTRURfRl9OT19OT1RJ
Rlk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcGNpX3Z0bmV0X3Byb2N0eChzdHJ1Y3QgcGNpX3Z0
bmV0X3NvZnRjICpzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlzdHJ1Y3QgaW92ZWMg
aW92W1ZUTkVUX01BWFNFR1MgKyAxXTsKKwlpbnQgaSwgbjsKKwlpbnQgcGxlbiwgdGxlbjsKKwl1
aW50MTZfdCBpZHg7CisKKwkvKgorCSAqIE9idGFpbiBjaGFpbiBvZiBkZXNjcmlwdG9ycy4gIFRo
ZSBmaXJzdCBvbmUgaXMKKwkgKiByZWFsbHkgdGhlIGhlYWRlciBkZXNjcmlwdG9yLCBzbyB3ZSBu
ZWVkIHRvIHN1bQorCSAqIHVwIHR3byBsZW5ndGhzOiBwYWNrZXQgbGVuZ3RoIGFuZCB0cmFuc2Zl
ciBsZW5ndGguCisJICovCisJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01B
WFNFR1MsIE5VTEwpOworCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKwlw
bGVuID0gMDsKKwl0bGVuID0gaW92WzBdLmlvdl9sZW47CisJZm9yIChpID0gMTsgaSA8IG47IGkr
KykgeworCQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOworCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVu
OworCX0KKworCURQUklOVEYoKCJ2aXJ0aW86IHBhY2tldCBzZW5kLCAlZCBieXRlcywgJWQgc2Vn
c1xuXHIiLCBwbGVuLCBuKSk7CisJc2MtPnBjaV92dG5ldF90eChzYywgJmlvdlsxXSwgbiAtIDEs
IHBsZW4pOworCisJLyogY2hhaW4gaXMgcHJvY2Vzc2VkLCByZWxlYXNlIGl0IGFuZCBzZXQgdGxl
biAqLworCXZxX3JlbGNoYWluKHZxLCBpZHgsIHRsZW4pOworfQorCitzdGF0aWMgdm9pZAorcGNp
X3Z0bmV0X3BpbmdfdHhxKHZvaWQgKnZzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlz
dHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCS8qCisJICogQW55IHJpbmcgZW50
cmllcyB0byBwcm9jZXNzPworCSAqLworCWlmICghdnFfaGFzX2Rlc2NzKHZxKSkKKwkJcmV0dXJu
OworCisJLyogU2lnbmFsIHRoZSB0eCB0aHJlYWQgZm9yIHByb2Nlc3NpbmcgKi8KKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXZxLT52cV91c2VkLT52dV9mbGFncyB8PSBWUklO
R19VU0VEX0ZfTk9fTk9USUZZOworCWlmIChzYy0+dHhfaW5fcHJvZ3Jlc3MgPT0gMCkKKwkJcHRo
cmVhZF9jb25kX3NpZ25hbCgmc2MtPnR4X2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz
Yy0+dHhfbXR4KTsKK30KKworLyoKKyAqIFRocmVhZCB3aGljaCB3aWxsIGhhbmRsZSBwcm9jZXNz
aW5nIG9mIFRYIGRlc2MKKyAqLworc3RhdGljIHZvaWQgKgorcGNpX3Z0bmV0X3R4X3RocmVhZCh2
b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOworCXN0
cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJaW50IGVycm9yOworCisJdnEgPSAmc2MtPnZzY19xdWV1
ZXNbVlRORVRfVFhRXTsKKworCS8qCisJICogTGV0IHVzIHdhaXQgdGlsbCB0aGUgdHggcXVldWUg
cG9pbnRlcnMgZ2V0IGluaXRpYWxpc2VkICYKKwkgKiBmaXJzdCB0eCBzaWduYWxlZAorCSAqLwor
CXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnR4X210eCk7CisJZXJyb3IgPSBwdGhyZWFkX2NvbmRf
d2FpdCgmc2MtPnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwlhc3NlcnQoZXJyb3IgPT0gMCk7CisK
Kwlmb3IgKDs7KSB7CisJCS8qIG5vdGUgLSB0eCBtdXRleCBpcyBsb2NrZWQgaGVyZSAqLworCQl3
aGlsZSAoc2MtPnJlc2V0dGluZyB8fCAhdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkJdnEtPnZxX3Vz
ZWQtPnZ1X2ZsYWdzICY9IH5WUklOR19VU0VEX0ZfTk9fTk9USUZZOworCQkJbWIoKTsKKwkJCWlm
ICghc2MtPnJlc2V0dGluZyAmJiB2cV9oYXNfZGVzY3ModnEpKQorCQkJCWJyZWFrOworCisJCQlz
Yy0+dHhfaW5fcHJvZ3Jlc3MgPSAwOworCQkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdCgmc2Mt
PnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwkJCWFzc2VydChlcnJvciA9PSAwKTsKKwkJfQorCQl2
cS0+dnFfdXNlZC0+dnVfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwkJc2MtPnR4
X2luX3Byb2dyZXNzID0gMTsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOwor
CisJCWRvIHsKKwkJCS8qCisJCQkgKiBSdW4gdGhyb3VnaCBlbnRyaWVzLCBwbGFjaW5nIHRoZW0g
aW50bworCQkJICogaW92ZWNzIGFuZCBzZW5kaW5nIHdoZW4gYW4gZW5kLW9mLXBhY2tldAorCQkJ
ICogaXMgZm91bmQKKwkJCSAqLworCQkJcGNpX3Z0bmV0X3Byb2N0eChzYywgdnEpOworCQl9IHdo
aWxlICh2cV9oYXNfZGVzY3ModnEpKTsKKworCQkvKgorCQkgKiBHZW5lcmF0ZSBhbiBpbnRlcnJ1
cHQgaWYgbmVlZGVkLgorCQkgKi8KKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKworCQlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KK30KKworI2lmZGVmIG5vdHlldAorc3RhdGlj
IHZvaWQKK3BjaV92dG5ldF9waW5nX2N0bHEodm9pZCAqdnNjLCBzdHJ1Y3QgdnF1ZXVlX2luZm8g
KnZxKQoreworCisJRFBSSU5URigoInZ0bmV0OiBjb250cm9sIHFub3RpZnkhXG5cciIpKTsKK30K
KyNlbmRpZgorCitzdGF0aWMgaW50CitwY2lfdnRuZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwg
dWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0cnVjdCBldGhlcl9hZGRyICplYTsKKyAg
ICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFyIHplcm9fYWRkcltFVEhFUl9BRERSX0xF
Tl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAgICAgICB0bXBzdHIgPSBzdHJzZXAoJm1h
Y19zdHIsIj0iKTsKKyAgICAgICAKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICgh
c3RyY21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9u
KG1hY19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNf
TVVMVElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5v
Y3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRl
cnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92
dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNoYXIgKmRldm5hbWUp
Cit7CisJY2hhciB0YnVmWzgwXTsKKworCXN0cmNweSh0YnVmLCAiL2Rldi8iKTsKKwlzdHJsY2F0
KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7CisKKwlzYy0+cGNpX3Z0bmV0X3J4ID0gcGNp
X3Z0bmV0X3RhcF9yeDsKKwlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0X3RhcF90eDsKKwor
CXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKHNjLT52c2NfdGFwZmQg
PT0gLTEpIHsKKwkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBmYWlsZWRcbiIsIHRi
dWYpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVn
aXN0ZXIgZm9yIHJlYWQKKwkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkg
Ki8KKwlpbnQgb3B0ID0gMTsKKwlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwgRklPTkJJTywgJm9w
dCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7
CisJCWNsb3NlKHNjLT52c2NfdGFwZmQpOworCQlzYy0+dnNjX3RhcGZkID0gLTE7CisJfQorCisJ
c2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAorCQkJCSAgRVZGX1JFQUQs
CisJCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCisJCQkJICBzYyk7CisJaWYgKHNjLT52c2Nf
bWV2cCA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIp
KTsKKwkJY2xvc2Uoc2MtPnZzY190YXBmZCk7CisJCXNjLT52c2NfdGFwZmQgPSAtMTsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVjdCBwY2lfdnRuZXRf
c29mdGMgKnNjLCBjaGFyICppZm5hbWUpCit7CisJc2MtPnBjaV92dG5ldF9yeCA9IHBjaV92dG5l
dF9uZXRtYXBfcng7CisJc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9uZXRtYXBfdHg7CisK
KwlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsKKwlpZiAoc2MtPnZz
Y19ubWQgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAgZGV2aWNlICVzIGZh
aWxlZFxuIiwgaWZuYW1lKSk7CisJCXJldHVybjsKKwl9CisKKwlzYy0+dnNjX21ldnAgPSBtZXZl
bnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKKwkJCQkgIEVWRl9SRUFELAorCQkJCSAgcGNpX3Z0bmV0
X3J4X2NhbGxiYWNrLAorCQkJCSAgc2MpOworCWlmIChzYy0+dnNjX21ldnAgPT0gTlVMTCkgewor
CQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7CisJCW5tX2Nsb3NlKHNj
LT52c2Nfbm1kKTsKKwkJc2MtPnZzY19ubWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludAor
cGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGks
IGNoYXIgKm9wdHMpCit7CisJTUQ1X0NUWCBtZGN0eDsKKwl1bnNpZ25lZCBjaGFyIGRpZ2VzdFsx
Nl07CisJY2hhciBuc3RyWzgwXTsKKwljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCXN0cnVj
dCBwY2lfdnRuZXRfc29mdGMgKnNjOworCWNoYXIgKmRldm5hbWU7CisJY2hhciAqdnRvcHRzOwor
CWludCBtYWNfcHJvdmlkZWQ7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBjaV92
dG5ldF9zb2Z0YykpOworCisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+dnNjX210eCwgTlVMTCk7
CisKKwl2aV9zb2Z0Y19saW5rdXAoJnNjLT52c2NfdnMsICZ2dG5ldF92aV9jb25zdHMsIHNjLCBw
aSwgc2MtPnZzY19xdWV1ZXMpOworCXNjLT52c2NfdnMudnNfbXR4ID0gJnNjLT52c2NfbXR4Owor
CisJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJTkdTWjsKKwlz
Yy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdLnZxX25vdGlmeSA9IHBjaV92dG5ldF9waW5nX3J4cTsK
KwlzYy0+dnNjX3F1ZXVlc1tWVE5FVF9UWFFdLnZxX3FzaXplID0gVlRORVRfUklOR1NaOworCXNj
LT52c2NfcXVldWVzW1ZUTkVUX1RYUV0udnFfbm90aWZ5ID0gcGNpX3Z0bmV0X3BpbmdfdHhxOwor
I2lmZGVmIG5vdHlldAorCXNjLT52c2NfcXVldWVzW1ZUTkVUX0NUTFFdLnZxX3FzaXplID0gVlRO
RVRfUklOR1NaOworICAgICAgICBzYy0+dnNjX3F1ZXVlc1tWVE5FVF9DVExRXS52cV9ub3RpZnkg
PSBwY2lfdnRuZXRfcGluZ19jdGxxOworI2VuZGlmCisgCisJLyoKKwkgKiBBdHRlbXB0IHRvIG9w
ZW4gdGhlIHRhcCBkZXZpY2UgYW5kIHJlYWQgdGhlIE1BQyBhZGRyZXNzCisJICogaWYgc3BlY2lm
aWVkCisJICovCisJbWFjX3Byb3ZpZGVkID0gMDsKKwlzYy0+dnNjX3RhcGZkID0gLTE7CisJc2Mt
PnZzY19ubWQgPSBOVUxMOworCWlmIChvcHRzICE9IE5VTEwpIHsKKwkJaW50IGVycjsKKworCQlk
ZXZuYW1lID0gdnRvcHRzID0gc3RyZHVwKG9wdHMpOworCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMs
ICIsIik7CisKKwkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7CisJCQllcnIgPSBwY2lfdnRuZXRfcGFy
c2VtYWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJaWYgKGVyciAhPSAwKSB7CisJ
CQkJZnJlZShkZXZuYW1lKTsKKwkJCQlyZXR1cm4gKGVycik7CisJCQl9CisJCQltYWNfcHJvdmlk
ZWQgPSAxOworCQl9CisKKwkJaWYgKHN0cm5jbXAoZGV2bmFtZSwgInZhbGUiLCA0KSA9PSAwKQor
CQkJcGNpX3Z0bmV0X25ldG1hcF9zZXR1cChzYywgZGV2bmFtZSk7CisJCWlmIChzdHJuY21wKGRl
dm5hbWUsICJ0YXAiLCAzKSA9PSAwIHx8CisJCSAgICBzdHJuY21wKGRldm5hbWUsICJ2bW5ldCIs
IDUpID09IDApCisJCQlwY2lfdnRuZXRfdGFwX3NldHVwKHNjLCBkZXZuYW1lKTsKKworCQlmcmVl
KGRldm5hbWUpOworCX0KKworCS8qCisJICogVGhlIGRlZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhl
IHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICogZm9sbG93ZWQgYnkgYW4gTUQ1
IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5hbWUKKwkgKi8KKwlpZiAoIW1h
Y19wcm92aWRlZCkgeworCQlzbnByaW50Zihuc3RyLCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIs
IHBpLT5waV9zbG90LAorCQkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwkJTUQ1SW5pdCgm
bWRjdHgpOworCQlNRDVVcGRhdGUoJm1kY3R4LCBuc3RyLCBzdHJsZW4obnN0cikpOworCQlNRDVG
aW5hbChkaWdlc3QsICZtZGN0eCk7CisKKwkJc2MtPnZzY19jb25maWcubWFjWzBdID0gMHgwMDsK
KwkJc2MtPnZzY19jb25maWcubWFjWzFdID0gMHhhMDsKKwkJc2MtPnZzY19jb25maWcubWFjWzJd
ID0gMHg5ODsKKwkJc2MtPnZzY19jb25maWcubWFjWzNdID0gZGlnZXN0WzBdOworCQlzYy0+dnNj
X2NvbmZpZy5tYWNbNF0gPSBkaWdlc3RbMV07CisJCXNjLT52c2NfY29uZmlnLm1hY1s1XSA9IGRp
Z2VzdFsyXTsKKwl9CisKKwkvKiBpbml0aWFsaXplIGNvbmZpZyBzcGFjZSAqLworCXBjaV9zZXRf
Y2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgVklSVElPX0RFVl9ORVQpOworCXBjaV9zZXRfY2Zn
ZGF0YTE2KHBpLCBQQ0lSX1ZFTkRPUiwgVklSVElPX1ZFTkRPUik7CisJcGNpX3NldF9jZmdkYXRh
OChwaSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg
UENJUl9TVUJERVZfMCwgVklSVElPX1RZUEVfTkVUKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg
UENJUl9TVUJWRU5EXzAsIFZJUlRJT19WRU5ET1IpOworCisJLyogTGluayBpcyB1cCBpZiB3ZSBt
YW5hZ2VkIHRvIG9wZW4gdGFwIGRldmljZSBvciB2YWxlIHBvcnQuICovCisJc2MtPnZzY19jb25m
aWcuc3RhdHVzID0gKG9wdHMgPT0gTlVMTCB8fCBzYy0+dnNjX3RhcGZkID49IDAgfHwKKwkgICAg
c2MtPnZzY19ubWQgIT0gTlVMTCk7CisJCisJLyogdXNlIEJBUiAxIHRvIG1hcCBNU0ktWCB0YWJs
ZSBhbmQgUEJBLCBpZiB3ZSdyZSB1c2luZyBNU0ktWCAqLworCWlmICh2aV9pbnRyX2luaXQoJnNj
LT52c2NfdnMsIDEsIGZic2RydW5fdmlydGlvX21zaXgoKSkpCisJCXJldHVybiAoMSk7CisKKwkv
KiB1c2UgQkFSIDAgdG8gbWFwIGNvbmZpZyByZWdzIGluIElPIHNwYWNlICovCisJdmlfc2V0X2lv
X2Jhcigmc2MtPnZzY192cywgMCk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKKworCXNjLT5yeF9t
ZXJnZSA9IDE7CisJc2MtPnJ4X3ZoZHJsZW4gPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfcnho
ZHIpOworCXNjLT5yeF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+
cnhfbXR4LCBOVUxMKTsgCisKKwkvKiAKKwkgKiBJbml0aWFsaXplIHR4IHNlbWFwaG9yZSAmIHNw
YXduIFRYIHByb2Nlc3NpbmcgdGhyZWFkLgorCSAqIEFzIG9mIG5vdywgb25seSBvbmUgdGhyZWFk
IGZvciBUWCBkZXNjIHByb2Nlc3NpbmcgaXMKKwkgKiBzcGF3bmVkLiAKKwkgKi8KKwlzYy0+dHhf
aW5fcHJvZ3Jlc3MgPSAwOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnR4X210eCwgTlVMTCk7
CisJcHRocmVhZF9jb25kX2luaXQoJnNjLT50eF9jb25kLCBOVUxMKTsKKwlwdGhyZWFkX2NyZWF0
ZSgmc2MtPnR4X3RpZCwgTlVMTCwgcGNpX3Z0bmV0X3R4X3RocmVhZCwgKHZvaWQgKilzYyk7CisJ
c25wcmludGYodG5hbWUsIHNpemVvZih0bmFtZSksICJ2dG5ldC0lZDolZCB0eCIsIHBpLT5waV9z
bG90LAorCSAgICBwaS0+cGlfZnVuYyk7CisgICAgICAgIHB0aHJlYWRfc2V0X25hbWVfbnAoc2Mt
PnR4X3RpZCwgdG5hbWUpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0
bmV0X2NmZ3dyaXRlKHZvaWQgKnZzYywgaW50IG9mZnNldCwgaW50IHNpemUsIHVpbnQzMl90IHZh
bHVlKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCXZvaWQgKnB0cjsK
KworCWlmIChvZmZzZXQgPCA2KSB7CisJCWFzc2VydChvZmZzZXQgKyBzaXplIDw9IDYpOworCQkv
KgorCQkgKiBUaGUgZHJpdmVyIGlzIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcwor
CQkgKi8KKwkJcHRyID0gJnNjLT52c2NfY29uZmlnLm1hY1tvZmZzZXRdOworCQltZW1jcHkocHRy
LCAmdmFsdWUsIHNpemUpOworCX0gZWxzZSB7CisJCS8qIHNpbGVudGx5IGlnbm9yZSBvdGhlciB3
cml0ZXMgKi8KKwkJRFBSSU5URigoInZ0bmV0OiB3cml0ZSB0byByZWFkb25seSByZWcgJWRcblxy
Iiwgb2Zmc2V0KSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0
bmV0X2NmZ3JlYWQodm9pZCAqdnNjLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDMyX3QgKnJl
dHZhbCkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKwl2b2lkICpwdHI7
CisKKwlwdHIgPSAodWludDhfdCAqKSZzYy0+dnNjX2NvbmZpZyArIG9mZnNldDsKKwltZW1jcHko
cmV0dmFsLCBwdHIsIHNpemUpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfbmVnX2ZlYXR1cmVzKHZvaWQgKnZzYywgdWludDY0X3QgbmVnb3RpYXRlZF9mZWF0dXJl
cykKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCXNjLT52c2NfZmVh
dHVyZXMgPSBuZWdvdGlhdGVkX2ZlYXR1cmVzOworCisJaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAm
IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpKSB7CisJCXNjLT5yeF9tZXJnZSA9IDA7CisJCS8qIG5v
bi1tZXJnZSByeCBoZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCisJCXNjLT5yeF92aGRybGVu
IC09IDI7CisJfQorfQorCitzdHJ1Y3QgcGNpX2RldmVtdSBwY2lfZGVfdm5ldCA9IHsKKwkucGVf
ZW11ID0gCSJ2aXJ0aW8tbmV0IiwKKwkucGVfaW5pdCA9CXBjaV92dG5ldF9pbml0LAorCS5wZV9i
YXJ3cml0ZSA9CXZpX3BjaV93cml0ZSwKKwkucGVfYmFycmVhZCA9CXZpX3BjaV9yZWFkCit9Owor
UENJX0VNVUxfU0VUKHBjaV9kZV92bmV0KTsK

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; name="test_results.txt"
Content-Description: test_results.txt
Content-Disposition: attachment; filename="test_results.txt"; size=5125;
	creation-date="Fri, 02 Dec 2016 14:17:58 GMT";
	modification-date="Fri, 02 Dec 2016 14:17:58 GMT"
Content-Transfer-Encoding: base64

VEFQOgoKMzc1Ljc0ODcxOCBtYWluX3RocmVhZCBbMjMyNV0gNjcuNTIyIEtwcHMgKDY3Ljg1OSBL
cGt0cyAzMi41NzIgTWJwcyBpbiAxMDA0OTg2IHVzZWMpIDI1My4yMSBhdmdfYmF0Y2ggOTk5OTkg
bWluX3NwYWNlCjM3Ni43NTE3MzYgbWFpbl90aHJlYWQgWzIzMjVdIDY2LjQ4NCBLcHBzICg2Ni42
ODUgS3BrdHMgMzIuMDA5IE1icHMgaW4gMTAwMzAxNyB1c2VjKSAyNDguODIgYXZnX2JhdGNoIDk5
OTk5IG1pbl9zcGFjZQozNzcuNzYxNTMzIG1haW5fdGhyZWFkIFsyMzI1XSA2NS4wNDMgS3BwcyAo
NjUuNjgwIEtwa3RzIDMxLjUyNiBNYnBzIGluIDEwMDk3OTcgdXNlYykgMjUyLjYyIGF2Z19iYXRj
aCA5OTk5OSBtaW5fc3BhY2UKMzc4Ljc2NjczOCBtYWluX3RocmVhZCBbMjMyNV0gNjUuMzI5IEtw
cHMgKDY1LjY2OSBLcGt0cyAzMS41MjEgTWJwcyBpbiAxMDA1MjA2IHVzZWMpIDI1Ny41MyBhdmdf
YmF0Y2ggOTk5OTkgbWluX3NwYWNlCjM3OS43ODAzOTggbWFpbl90aHJlYWQgWzIzMjVdIDY4LjAw
NiBLcHBzICg2OC45MzUgS3BrdHMgMzMuMDg5IE1icHMgaW4gMTAxMzY2MCB1c2VjKSAyNTMuNDQg
YXZnX2JhdGNoIDk5OTk5IG1pbl9zcGFjZQozODAuNzg1NzMzIG1haW5fdGhyZWFkIFsyMzI1XSA2
NC4yNjIgS3BwcyAoNjQuNjA1IEtwa3RzIDMxLjAxMCBNYnBzIGluIDEwMDUzMzUgdXNlYykgMjUx
LjM4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMzgxLjc5MjM2MCBtYWluX3RocmVhZCBbMjMy
NV0gNjcuMjkwIEtwcHMgKDY3LjczNiBLcGt0cyAzMi41MTMgTWJwcyBpbgoKCgoKTkVUTUFQIHdp
dGggVmFsZSBWTTEgKFRYKTogCjA1Mi4xMjI3NDUgbWFpbl90aHJlYWQgWzIzMjVdIDEyMS42MTcg
S3BwcyAoMTIxLjczNSBLcGt0cyA1OC40MzMgTWJwcyBpbiAxMDAwOTczIHVzZWMpIDIwOS44OSBh
dmdfYmF0Y2ggMCBtaW5fc3BhY2UKMDUzLjIzNDc4OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjE3
OCBLcHBzICgxNjAuMzMyIEtwa3RzIDc2Ljk1OSBNYnBzIGluIDExMTIwNDMgdXNlYykgMjE0LjYz
IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU0LjIzOTc1MSBtYWluX3RocmVhZCBbMjMyNV0g
MTM5LjA3MiBLcHBzICgxMzkuNzYyIEtwa3RzIDY3LjA4NiBNYnBzIGluIDEwMDQ5NjIgdXNlYykg
MjE1LjY4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU1LjI0OTc5NCBtYWluX3RocmVhZCBb
MjMyNV0gMTUyLjg4OCBLcHBzICgxNTQuNDI0IEtwa3RzIDc0LjEyNCBNYnBzIGluIDEwMTAwNDQg
dXNlYykgMjEwLjY3IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU2LjI2MDc5OSBtYWluX3Ro
cmVhZCBbMjMyNV0gMTQyLjU2NiBLcHBzICgxNDQuMTM1IEtwa3RzIDY5LjE4NSBNYnBzIGluIDEw
MTEwMDUgdXNlYykgMjE0LjgxIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU3LjI2NTIyNSBt
YWluX3RocmVhZCBbMjMyNV0gMTQzLjU3NSBLcHBzICgxNDQuMjEwIEtwa3RzIDY5LjIyMSBNYnBz
IGluIDEwMDQ0MjYgdXNlYykgMjE1LjU2IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU4LjI3
MzQ2OCBtYWluX3RocmVhZCBbMjMyNV0gMTU0LjkxMiBLcHBzICgxNTYuMTg5IEtwa3RzIDc0Ljk3
MSBNYnBzIGluIDEwMDgyNDIgdXNlYykgMjA5LjkzIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UK
MDU5LjI3ODc5NSBtYWluX3RocmVhZCBbMjMyNV0gMTQxLjcyMiBLcHBzICgxNDIuNDc3IEtwa3Rz
IDY4LjM4OSBNYnBzIGluIDEwMDUzMjggdXNlYykgMjE3Ljg1IGF2Z19iYXRjaCA5OTk5OSBtaW5f
c3BhY2UKMDYwLjM0MDY5OSBtYWluX3RocmVhZCBbMjMyNV0gMTQ1Ljg3MSBLcHBzICgxNTQuOTAx
IEtwa3RzIDc0LjM1MiBNYnBzIGluIDEwNjE5MDQgdXNlYykgMjE1LjE0IGF2Z19iYXRjaCA5OTk5
OSBtaW5fc3BhY2UKMDYxLjM0NTc0OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjIyMSBLcHBzICgx
NDQuOTQ5IEtwa3RzIDY5LjU3NiBNYnBzIGluIDEwMDUwNDggdXNlYykgMjA5LjE2IGF2Z19iYXRj
aCA5OTk5OSBtaW5fc3BhY2UKCgpORVRNQVAgd2l0aCBWYWxlIFZNMihSWCk6CjA1NC45Njg1NzQg
bWFpbl90aHJlYWQgWzIzMjVdIDQ5Ljk1MiBLcHBzICg1NC4zNjIgS3BrdHMgMjYuMDk0IE1icHMg
aW4gMTA4ODI5MCB1c2VjKSA3NC42NyBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU2LjAxNzQyNiBt
YWluX3RocmVhZCBbMjMyNV0gNjQuMjkwIEtwcHMgKDY3LjQzMSBLcGt0cyAzMi4zNjcgTWJwcyBp
biAxMDQ4ODUyIHVzZWMpIDEzMi4yMiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU3LjAyMTAzNiBt
YWluX3RocmVhZCBbMjMyNV0gOTMuNDA1IEtwcHMgKDkzLjc0MiBLcGt0cyA0NC45OTYgTWJwcyBp
biAxMDAzNjEwIHVzZWMpIDY4LjYzIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNTguMDMyNjUwIG1h
aW5fdGhyZWFkIFsyMzI1XSA4MS4wNTggS3BwcyAoODEuOTk5IEtwa3RzIDM5LjM2MCBNYnBzIGlu
IDEwMTE2MTQgdXNlYykgODAuMzkgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA1OS4wNTkxNzYgbWFp
bl90aHJlYWQgWzIzMjVdIDg1LjgxNiBLcHBzICg4OC4wOTIgS3BrdHMgNDIuMjg0IE1icHMgaW4g
MTAyNjUyNiB1c2VjKSA3My44NCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYwLjA3ODU2MyBtYWlu
X3RocmVhZCBbMjMyNV0gNjYuOTU5IEtwcHMgKDY4LjA5NiBLcGt0cyAzMi42ODYgTWJwcyBpbiAx
MDE2OTg1IHVzZWMpIDUxMi4wMCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYxLjA4ODczOCBtYWlu
X3RocmVhZCBbMjMyNV0gNzkuOTExIEtwcHMgKDgwLjkxNiBLcGt0cyAzOC44NDAgTWJwcyBpbiAx
MDEyNTc2IHVzZWMpIDEzNy4xNSBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYyLjEwNDUwNSBtYWlu
X3RocmVhZCBbMjMyNV0gOTAuODE0IEtwcHMgKDkyLjAwNyBLcGt0cyA0NC4xNjMgTWJwcyBpbiAx
MDEzMTM4IHVzZWMpIDczLjIwIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNjMuMTE1NDMzIG1haW5f
dGhyZWFkIFsyMzI1XSA4Ni4yMzMgS3BwcyAoODcuNDAyIEtwa3RzIDQxLjk1MyBNYnBzIGluIDEw
MTM1NTggdXNlYykgOTQuMjggYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NC4xMzQ0OTcgbWFpbl90
aHJlYWQgWzIzMjVdIDg2LjM1MSBLcHBzICg4Ny45OTcgS3BrdHMgNDIuMjM5IE1icHMgaW4gMTAx
OTA2MiB1c2VjKSA0MTMuMTMgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NS4xNDg5ODMgbWFpbl90
aHJlYWQgWzIzMjVdIDY5LjQ4MyBLcHBzICg3MC4zOTAgS3BrdHMgMzMuNzg3IE1icHMgaW4gMTAx
MzA1NyB1c2VjKSAxODYuMjIgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ni4xNzI1NTUgbWFpbl90
aHJlYWQgWzIzMjVdIDkxLjM0NyBLcHBzICg5My41NzMgS3BrdHMgNDQuOTE1IE1icHMgaW4gMTAy
NDM2NSB1c2VjKSAxMjUuNjAgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ny4xOTA2OTkgbWFpbl90
aHJlYWQgWzIzMjVdIDc5LjI4MCBLcHBzICg4MC43NjkgS3BrdHMgMzguNzY5IE1icHMgaW4gMTAx
ODc4MiB1c2VjKSAxMTQuNTcgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2OC4yMDkwNTggbWFpbl90
aHJlYWQgWzIzMjVdIDEwNy4xMDAgS3BwcyAoMTA5LjA2NiBLcGt0cyA1Mi4zNTIgTWJwcyBpbiAx
MDE4MzU4IHVzZWMpIDMzLjI0IGF2Z19iYXRjaCAxIG1pbl9zcGFjZQoKCgpQVE5FVChWTTEgVFgp
OgoKOTIwLjcwNzkwMCBtYWluX3RocmVhZCBbMjMyNV0gNy4yMTYgTXBwcyAoNy4yMzggTXBrdHMg
NC4xNjkgR2JwcyBpbiAxMDAzMDQzIHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWluX3Nw
YWNlCjkyMS43MDk4OTAgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTE0IE1wcHMgKDcuMTI4IE1wa3Rz
IDQuMTA2IEdicHMgaW4gMTAwMTk4OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1pbl9z
cGFjZQo5MjIuNzEyODY1IG1haW5fdGhyZWFkIFsyMzI1XSA3LjI3NyBNcHBzICg3LjI5OSBNcGt0
cyA0LjIwNCBHYnBzIGluIDEwMDI5NzUgdXNlYykgNTExLjUwIGF2Z19iYXRjaCA5OTk5OSBtaW5f
c3BhY2UKOTIzLjcxNTc4MyBtYWluX3RocmVhZCBbMjMyNV0gNS45ODAgTXBwcyAoNS45OTcgTXBr
dHMgMy40NTQgR2JwcyBpbiAxMDAyOTE4IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWlu
X3NwYWNlCjkyNC43MTc5MjYgbWFpbl90aHJlYWQgWzIzMjVdIDcuMjU3IE1wcHMgKDcuMjczIE1w
a3RzIDQuMTg5IEdicHMgaW4gMTAwMjE0MyB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1p
bl9zcGFjZQo5MjYuNzM4NTcyIG1haW5fdGhyZWFkIFsyMzI1XSA3LjM2NSBNcHBzICgxNC44ODMg
TXBrdHMgOC41NzIgR2JwcyBpbiAyMDIwNjQ2IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkg
bWluX3NwYWNlCjkyNy43MzkzMjEgbWFpbl90aHJlYWQgWzIzMjVdIDYuMTk2IE1wcHMgKDYuMjAw
IE1wa3RzIDMuNTcxIEdicHMgaW4gMTAwMDc0OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5
IG1pbl9zcGFjZQoKCgpQVE5FVChWTTIgUlgpOgoKOTI3Ljc2MTA0MiBtYWluX3RocmVhZCBbMjMy
NV0gNi4xNjMgTXBwcyAoNi4xOTYgTXBrdHMgMy41NjkgR2JwcyBpbiAxMDA1Mzg4IHVzZWMpIDUx
MS40NiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTI4Ljc2MzQxMCBtYWluX3RocmVhZCBbMjMyNV0g
Ny4yNDkgTXBwcyAoNy4yNjYgTXBrdHMgNC4xODUgR2JwcyBpbiAxMDAyMzY3IHVzZWMpIDUxMS41
MCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTMwLjQ0MTI1MSBtYWluX3RocmVhZCBbMjMyNV0gNy40
NTUgTXBwcyAoMTIuNTA4IE1wa3RzIDcuMjA1IEdicHMgaW4gMTY3Nzg0MiB1c2VjKSA1MTEuNTAg
YXZnX2JhdGNoIDEgbWluX3NwYWNlCjkzMi4yOTg0NjMgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTUx
IE1wcHMgKDEzLjI4MCBNcGt0cyA3LjY0OSBHYnBzIGluIDE4NTcyMTIgdXNlYykgNTExLjUwIGF2
Z19iYXRjaCAxIG1pbl9zcGFjZQo5MzMuMjk5MjE3IG1haW5fdGhyZWFkIFsyMzI1XSA2Ljk1NyBN
cHBzICg2Ljk2MyBNcGt0cyA0LjAxMCBHYnBzIGluIDEwMDA3NTQgdXNlYykgNTExLjUwIGF2Z19i
YXRjaCAxIG1pbl9zcGFjZQo5MzQuMzAyMjQ0IG1haW5fdGhyZWFkIFsyMzI1XSA3LjQ5NiBNcHBz
ICg3LjUxOSBNcGt0cyA0LjMzMSBHYnBzIGluIDEwMDMwMjcgdXNlYykgNTExLjUwIGF2Zw==

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; name="kernel_dumps.txt"
Content-Description: kernel_dumps.txt
Content-Disposition: attachment; filename="kernel_dumps.txt"; size=3734;
	creation-date="Fri, 02 Dec 2016 14:18:14 GMT";
	modification-date="Fri, 02 Dec 2016 14:18:14 GMT"
Content-Transfer-Encoding: base64

OTU3LjI4NTYyNCBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0
ZXIgMHhmZmZmZjgwMDEyYTVjYzAwIGdvZXMgb24KOTU3LjI4NzI1NyBbIDQ4N10gZ2VuZXJpY19u
ZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2VuZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAx
MmE1Y2MwMCBnb2VzIG9uCjk1Ny4yODg5NzkgWyA0OTRdIGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVy
ICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAweGZmZmZmODAwMTJhNWNjMDAgZ29lcyBv
bgo5NTcuNTg0Mjg1IG1haW4gWzI3NzBdIG1hcHBlZCAzMzQ5ODBLQiBhdCAweDgwMTYwMDAwMApT
ZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVzLCAxIHRocmVhZHMgYW5kIDEgY3B1cy4K
MTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAwOjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZm
OmZmKQo5NTcuNjcxMTMyIG1haW4gWzI4NjddIFNlbmRpbmcgNTEyIHBhY2tldHMgZXZlcnkgIDAu
MDAwMDAwMDAwIHMKOTU3LjY4NDExMiBzdGFydF90aHJlYWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBm
b3IgcGh5IHJlc2V0Cjk1OS43Mzc3MDMgc3RhcnRfdGhyZWFkcyBbMjIzN10gUmVhZHkuLi4KOTU5
LjczODQyNCBtYWluIFsyODgwXSBmYWlsZWQgdG8gaW5zdGFsbCBeQyBoYW5kbGVyOiBJbnZhbGlk
IGFyZ3VtZW50Cjk1OS43Mzk0MzUgc2VuZGVyX2JvZHkgWzE0MzZdIHN0YXJ0LCBmZCAzIG1haW5f
ZmQgMwoKCkZhdGFsIHRyYXAgMTg6IGludGVnZXIgZGl2aWRlIGZhdWx0IHdoaWxlIGluIGtlcm5l
bCBtb2RlCmNwdWlkID0gMDsgYXBpYyBpZCA9IDAwCmluc3RydWN0aW9uIHBvaW50ZXIJPSAweDIw
OjB4ZmZmZmZmZmY4MDkwNTZiNQpzdGFjayBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZl
MDFiZmQ3NzYzMApmcmFtZSBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZlMDFiZmQ3NzY4
MApjb2RlIHNlZ21lbnQJCT0gYmFzZSAweDAsIGxpbWl0IDB4ZmZmZmYsIHR5cGUgMHgxYgoJCQk9
IERQTCAwLCBwcmVzIDEsIGxvbmcgMSwgZGVmMzIgMCwgZ3JhbiAxCnByb2Nlc3NvciBlZmxhZ3MJ
PSBpbnRlcnJ1cHQgZW5hYmxlZCwgcmVzdW1lLCBJT1BMID0gMApjdXJyZW50IHByb2Nlc3MJCT0g
MjQ4MCAocGt0LWdlbikKdHJhcCBudW1iZXIJCT0gMTgKcGFuaWM6IGludGVnZXIgZGl2aWRlIGZh
dWx0CmNwdWlkID0gMApLREI6IHN0YWNrIGJhY2t0cmFjZToKIzAgMHhmZmZmZmZmZjgwYjA4OGM3
IGF0IGtkYl9iYWNrdHJhY2UrMHg2NwojMSAweGZmZmZmZmZmODBhYmRjMzIgYXQgdnBhbmljKzB4
MTgyCiMyIDB4ZmZmZmZmZmY4MGFiZGFhMyBhdCBwYW5pYysweDQzCiMzIDB4ZmZmZmZmZmY4MGY4
NGQzMSBhdCB0cmFwX2ZhdGFsKzB4MzUxCiM0IDB4ZmZmZmZmZmY4MGY4NDljOCBhdCB0cmFwKzB4
NzY4CiM1IDB4ZmZmZmZmZmY4MGY2NzdkMSBhdCBjYWxsdHJhcCsweDgKIzYgMHhmZmZmZmZmZjgy
NjI5NmI4IGF0IG5tX29zX2dlbmVyaWNfeG1pdF9mcmFtZSsweDQ4CiM3IDB4ZmZmZmZmZmY4MjYy
MzNiZiBhdCBnZW5lcmljX25ldG1hcF90eHN5bmMrMHgyOWYKIzggMHhmZmZmZmZmZjgyNjFkNGZm
IGF0IG5ldG1hcF9wb2xsKzB4NTBmCiM5IDB4ZmZmZmZmZmY4MjYyYTY3MiBhdCBmcmVlYnNkX25l
dG1hcF9wb2xsKzB4MzIKIzEwIDB4ZmZmZmZmZmY4MDk2YWQ5MCBhdCBkZXZmc19wb2xsX2YrMHg3
MAojMTEgMHhmZmZmZmZmZjgwYjI3YzIwIGF0IGtlcm5fcG9sbCsweDY1MAojMTIgMHhmZmZmZmZm
ZjgwYjI3NWMxIGF0IHN5c19wb2xsKzB4NjEKIzEzIDB4ZmZmZmZmZmY4MGY4NTY4ZSBhdCBhbWQ2
NF9zeXNjYWxsKzB4NGNlCiMxNCAweGZmZmZmZmZmODBmNjdhYmIgYXQgWGZhc3Rfc3lzY2FsbCsw
eGZiClVwdGltZTogMjBtNDBzCgoKCgoKNzg2LjI0MzM1NSBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBf
cmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0ZXIgMHhmZmZmZjgwMDEyYWUyMDAwIGdvZXMgb24KNzg2
LjI0NDg5MSBbIDQ4N10gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2Vu
ZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAxMmFlMjAwMCBnb2VzIG9uCjc4Ni4yNDY1MDggWyA0OTRd
IGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVyICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAw
eGZmZmZmODAwMTJhZTIwMDAgZ29lcyBvbgo3ODYuMjcwMjA2IG1haW4gWzI3NzBdIG1hcHBlZCAz
MzQ5ODBLQiBhdCAweDgwMTYwMDAwMApTZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVz
LCAxIHRocmVhZHMgYW5kIDEgY3B1cy4KMTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAw
OjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZmOmZmKQo3ODYuMzQ1MTM2IG1haW4gWzI4NjddIFNlbmRp
bmcgNTEyIHBhY2tldHMgZXZlcnkgIDAuMDAwMDAwMDAwIHMKNzg2LjM2MzM5NSBzdGFydF90aHJl
YWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBmb3IgcGh5IHJlc2V0Cjc4OC40MjY2MTQgc3RhcnRfdGhy
ZWFkcyBbMjIzN10gUmVhZHkuLi4KNzg4LjQyNzQ1NCBzZW5kZXJfYm9keSBbMTQzNl0gc3RhcnQs
IGZkIDMgbWFpbl9mZCAzCgoKRmF0YWwgdHJhcCAxODogaW50ZWdlciBkaXZpZGUgZmF1bHQgd2hp
bGUgaW4ga2VybmVsIG1vZGUKY3B1aWQgPSAwOyBhcGljIGlkID0gMDAKaW5zdHJ1Y3Rpb24gcG9p
bnRlcgk9IDB4MjA6MHhmZmZmZmZmZjgwOTA1NmI1CnN0YWNrIHBvaW50ZXIJICAgICAgICA9IDB4
Mjg6MHhmZmZmZmUwMWJmZDU5NjMwCmZyYW1lIHBvaW50ZXIJICAgICAgICA9IDB4Mjg6MHhmZmZm
ZmUwMWJmZDU5NjgwCmNvZGUgc2VnbWVudAkJPSBiYXNlIDB4MCwgbGltaXQgMHhmZmZmZiwgdHlw
ZSAweDFiCgkJCT0gRFBMIDAsIHByZXMgMSwgbG9uZyAxLCBkZWYzMiAwLCBncmFuIDEKcHJvY2Vz
c29yIGVmbGFncwk9IGludGVycnVwdCBlbmFibGVkLCByZXN1bWUsIElPUEwgPSAwCmN1cnJlbnQg
cHJvY2VzcwkJPSAxMTQyIChwa3QtZ2VuKQp0cmFwIG51bWJlcgkJPSAxOApwYW5pYzogaW50ZWdl
ciBkaXZpZGUgZmF1bHQKY3B1aWQgPSAwCktEQjogc3RhY2sgYmFja3RyYWNlOgojMCAweGZmZmZm
ZmZmODBiMDg4YzcgYXQga2RiX2JhY2t0cmFjZSsweDY3CiMxIDB4ZmZmZmZmZmY4MGFiZGMzMiBh
dCB2cGFuaWMrMHgxODIKIzIgMHhmZmZmZmZmZjgwYWJkYWEzIGF0IHBhbmljKzB4NDMKIzMgMHhm
ZmZmZmZmZjgwZjg0ZDMxIGF0IHRyYXBfZmF0YWwrMHgzNTEKIzQgMHhmZmZmZmZmZjgwZjg0OWM4
IGF0IHRyYXArMHg3NjgKIzUgMHhmZmZmZmZmZjgwZjY3N2QxIGF0IGNhbGx0cmFwKzB4OAojNiAw
eGZmZmZmZmZmODI2Mjk2YjggYXQgbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKzB4NDgKIzcgMHhm
ZmZmZmZmZjgyNjIzM2JmIGF0IGdlbmVyaWNfbmV0bWFwX3R4c3luYysweDI5ZgojOCAweGZmZmZm
ZmZmODI2MWQ0ZmYgYXQgbmV0bWFwX3BvbGwrMHg1MGYKIzkgMHhmZmZmZmZmZjgyNjJhNjcyIGF0
IGZyZWVic2RfbmV0bWFwX3BvbGwrMHgzMgojMTAgMHhmZmZmZmZmZjgwOTZhZDkwIGF0IGRldmZz
X3BvbGxfZisweDcwCiMxMSAweGZmZmZmZmZmODBiMjdjMjAgYXQga2Vybl9wb2xsKzB4NjUwCiMx
MiAweGZmZmZmZmZmODBiMjc1YzEgYXQgc3lzX3BvbGwrMHg2MQojMTMgMHhmZmZmZmZmZjgwZjg1
NjhlIGF0IGFtZDY0X3N5c2NhbGwrMHg0Y2UKIzE0IDB4ZmZmZmZmZmY4MGY2N2FiYiBhdCBYZmFz
dF9zeXNjYWxsKzB4ZmIKVXB0aW1lOiA1bTQ3cwo=

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_--

From owner-freebsd-net@freebsd.org  Fri Dec  2 18:41:37 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 39527C63B57
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 18:41:37 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: from mail-oi0-x22e.google.com (mail-oi0-x22e.google.com
 [IPv6:2607:f8b0:4003:c06::22e])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id EDBFC16FD
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 18:41:36 +0000 (UTC)
 (envelope-from v.maffione@gmail.com)
Received: by mail-oi0-x22e.google.com with SMTP id y198so276283676oia.1
 for <freebsd-net@freebsd.org>; Fri, 02 Dec 2016 10:41:36 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=bYZUQkW8Ejs7lGyZtfuVWMbIacOhPFEWyQzj4lqoUL0=;
 b=ysEQFjnc7gqRs4ZCfrDMiyaU0GDQwpGCD7f8YYdkrEqO67gyxCE5mtMPc8Y8hZkEkd
 Ae/hLI7MX2Kjc6v6vdL51SLkttFNY5KHU6lAmkqWw6wNMF08fshnwj6RhZ+jWMfrB2X5
 OEZRBx9PsMyxqn0m1NTMZlXkAPXRz5GAGUiu01wDzEXz51cmUHGKp8Oh7OMynu77FnoH
 JHfEPPXrCyHuqH0L/BFkF/Ip5ICTPs2RbSDPnpmu7d+na3PTrOba4lpLXKXdJcxnIN2I
 4+p7xX85Pf1h7APitnK69EU+Ox19CJ2wGPuT80InSs7bBMGLjYGn07TFNgrL/ge93dIQ
 YgZA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=bYZUQkW8Ejs7lGyZtfuVWMbIacOhPFEWyQzj4lqoUL0=;
 b=WXSiEk9bXyOEukx22gGMYvtw7Dhh30ufNHdwbUDfl29OE8PebmvysH0IVb9Wju9ocH
 OwUbdgY0g2tiOWjTBBclU0zDQnFrDdBeJBgo82fsAlcXlaNeQ0YlN35cg7yvSdZzYA8H
 RHvSgPZcv8XoHl/CKzK5pXAVtIFXVDDbNYjnljyjjHPdkI7VyUAz6bXhByP/SQlWL2Ve
 /oMPSAXQ7v3yBsjA2uP/Zky5LyCZhTLh7iZg99xhJuRF26wk9pP3YjiOp+KOtNlwqZ2J
 Lw+FYslkYE2Ljup9MTQwteDwDyl64wJPvG5P7l1aQrUBosHZZt9M78/sB3TsIS7SSJuS
 lI9w==
X-Gm-Message-State: AKaTC00HqXIVFwPnr46YCaMaJcHWpcnNew8g+i2KF6htv02FkaYmOV6Sz1BhY+F1PMtt1mNm2G56kgCrMD5jag==
X-Received: by 10.202.177.6 with SMTP id a6mr20967550oif.147.1480704096090;
 Fri, 02 Dec 2016 10:41:36 -0800 (PST)
MIME-Version: 1.0
Received: by 10.157.45.200 with HTTP; Fri, 2 Dec 2016 10:41:35 -0800 (PST)
In-Reply-To: <DB5PR07MB16857B8F7A2B4783640074979B8E0@DB5PR07MB1685.eurprd07.prod.outlook.com>
References: <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9gggyo_ncSZDribOr+sWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com>
 <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com>
 <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>
 <CA+_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>
 <DB5PR07MB16857B8F7A2B4783640074979B8E0@DB5PR07MB1685.eurprd07.prod.outlook.com>
From: Vincenzo Maffione <v.maffione@gmail.com>
Date: Fri, 2 Dec 2016 19:41:35 +0100
Message-ID: <CA+_eA9h=wTKANiS_oGcBz881pC2ppy7uiPQPYsYq_dtHvjmWYA@mail.gmail.com>
Subject: Re: Looking for some help with netmap/bhyve
To: Steven Crangle <Steven@stream-technologies.com>
Cc: FreeBSD Net <freebsd-net@freebsd.org>
Content-Type: text/plain; charset=UTF-8
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 18:41:37 -0000

Hi,
  Thanks for testing, the numbers you report make sense, 7-15 Mpps is good
for an old machine. On my machine I get 25 Mpps, so probably you could get
something similar with newer hardware.

The crash dumps you reported are not related to ptnetmap, but to the
emulated (aka generic) netmap mode driver, that you have used over
virtio-net VM interfaces.
When you use ptnetmap, instead, inside the VM you see "ptnetX" interfaces.
In any case, thanks for reporting.

Hopefully we should get rid of these patches soon, once all the code will
be pushed into HEAD. We are still progressing with this item, together with
the bhyve maintainers.

Cheers,
  Vincenzo

2016-12-02 15:22 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>:

> Hi Vincenzo,
>
>
> Figured I would reply to give you some more testing feedback! Ptnetmap is
> successfully working for us now on 11.0 RELEASE (stock src.txz from
> FreeBSD.org) with the help of your patch! There were a few files missing
> from the patch though, so I've attached a revised one which should work
> incase it's of use to you! (might be a bit messy)
>
> I've attached a txt file with some testing results too , but in summary:
>
>
> 1) netmap with no ptnet or vale: between 65-70Kpps.
>
>
> 2) netmap with vale but no ptnet: between 121-160Kpps.
>
>
> 3) ptnetmap with vale: seems to vary quite alot between 7-15Mpps.
>
>
> All the tests were performed using pkt-gen with 60 byte packets. It's
> worth noting that currently we're running the tests on a very old tired Sun
> Micro server(Sun Fire X2200 M2 with Quad Core Processor). Currently in
> the process of testing out our patch file on a clean 11.0 source on a much
> faster box, so can run more detailed testing there using iperf etc if it's
> useful to you!
>
>
> I have also attached a few kernel traces, I tried to turn symbols on, but
> i'm not sure it worked 100% Will try and fix it for the next install so
> that I can provide better crash dumps if we run into any bugs!  The crashes
> attached only ever occured in setup number 2 above.
>
>
> Thanks again for your help!
>
>
> Kind Regards
>
>
> Steven
>
>
>
>
>
>
>
>
>
>
>
>
> ------------------------------
>
>
>
> [image: Stream Logo]
>
>
>
>
>
> *Steven Crangle*
>
> Systems Developer | Stream Technologies | Glasgow, UK
>
> [image: http://www.stream-technologies.com/img/phone.png]
>
> +44 (0)844 800 8520 <+44%20844%20800%208520>
>
> |
>
> [image: http://www.stream-technologies.com/img/mouse.png]
>
> www.stream-technologies.com
>
>
>
>
>
> ------------------------------
> *From:* Vincenzo Maffione <v.maffione@gmail.com>
> *Sent:* 29 November 2016 18:42:04
>
> *To:* Steven Crangle
> *Cc:* FreeBSD Net
> *Subject:* Re: Looking for some help with netmap/bhyve
>
> Hi Steven,
>
> 2016-11-29 16:44 GMT+01:00 Steven Crangle <Steven@stream-technologies.com>
> :
>
>>
>> Hi Vincenzo,
>>
>>
>> No problem! We've decided that we will try testing with 11.0 too, as it
>> would help us to have our test system locked to a specific version like
>> 11.0 and can hopefully help you with testing too. We'll compile netmap from
>> source as advised, but I was wondering what steps we would take in order to
>> port the changes to bhyve/ptnetmap from HEAD into 11.0?
>>
>
> I think you can get the patch containing my modifications to HEAD for
> bhyve+vmm.ko+libvmmapi, that you can extract with the following command in
> my freebsd git repository
>
> $ git diff 9e10acc0303003d8733a546bca60f242b7b0aa64 ptnet-head
> lib/libvmmapi/ sys/amd64/ sys/modules/vmm/ usr.sbin/bhyve
>
> and apply that patch in your 11.0 FreeBSD tree.
>
>
>>
>> I've currently only tested with pkt-gen as our bhyve instances are pretty
>> minimal right now, below are a few samples of the speeds seen in each of
>> the different configurations:
>>
>
> which configurations?
>
>>
>> Using netmap on top of standard tap devices with no vale:
>>
>>
>> vm1:
>>     197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps
>> in 1047062 usec) 1.93 avg_batch 826 min_space
>>     203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps
>> in 1008156 usec) 1.88 avg_batch 866 min_space
>>     204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps
>> in 1006929 usec) 1.98 avg_batch 911 min_space
>> vm2:
>>     245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps
>> in 1058559 usec) 313.79 avg_batch 99999 min_space
>>     246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps
>> in 1032392 usec) 319.47 avg_batch 99999 min_space
>>     251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps
>> in 1054531 usec) 314.42 avg_batch 99999 min_space
>>
>
> Be aware that you typically want to use netmap both in the VM and in the
> host (to use VALE and ptnet). Here you are probably using netmap just in
> the VM. Performance are however extremely low.
> When using netmap in both guest and host, with ptnet, you should be able
> to get at least 10-30 Mpps from vm1 to vm2.
>
>>
>> After then trying to switch to the netmap in userspace/netmap in kernel
>> space with ptnetmap, I realised I made a silly mistake and built from head
>> instead of the branch ptnet-head... haha So I'm currently doing a quick
>> rebuild on the correct branch and will report back with the results from
>> pkt-gen using just vale, and also with the new ptnetmap changes!
>>
>
> Ok, also consider that you can use the patch I indicated above against
> HEAD.
>
> Cheers,
>   Vincenzo
>
>>
>>
>> Kind Regards
>>
>>
>>
>>
>>
>>
>>
>> ------------------------------
>>
>>
>>
>> [image: Stream Logo]
>>
>>
>>
>>
>>
>> *Steven Crangle*
>>
>> Systems Developer | Stream Technologies | Glasgow, UK
>>
>> [image: http://www.stream-technologies.com/img/phone.png]
>>
>> +44 (0)844 800 8520
>>
>> |
>>
>> [image: http://www.stream-technologies.com/img/mouse.png]
>>
>> www.stream-technologies.com
>>
>>
>>
>>
>>
>> ------------------------------
>> *From:* Vincenzo Maffione <v.maffione@gmail.com>
>> *Sent:* 29 November 2016 11:52:18
>>
>> *To:* Steven Crangle
>> *Cc:* FreeBSD Net
>> *Subject:* Re: Looking for some help with netmap/bhyve
>>
>> Hi Steven,
>>   Thanks for your testing this in HEAD, good news to know that it works
>> ok!
>>
>> I think there is not going to be much difference between HEAD and 11.0,
>> because in the end bhyve code didn't really change (for the parts I
>> touched), and you need to use the latest netmap version (github) anyway,
>> irrespective of whether you are testing on 10.3, 11.0, head, etc. In other
>> words, you would be testing approximately the same code. Anyway, if you
>> happen to test 11.0 by chance please let me know.
>>
>> What kind of tests did you perform? netmap applications (e.g. pkt-gen),
>> or netperf/iperf standard TCP/IP tools?
>> Could you please share the performance number you got for configurations
>> (A) and (B) (or just the one you tried)?
>>
>> I think it is useful to compare your results with the ones I collected
>> here (see the performance evaluation section):
>>
>> https://wiki.freebsd.org/DevSummit/201609?action=AttachFile&
>> do=view&target=20160923-freebsd-summit-ptnet.pdf
>>
>> Regarding the crashes, thanks for reporting, I would be nice if you could
>> describe in more detail how you trigger them (with some higher likelyhood);
>> also, compiling the kernel with debug symbols should help in understanding
>> which part of the code is involved in the crash.
>>
>> Cheers,
>>   Vincenzo
>>
>>
>> 2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com
>> >:
>>
>>>  Hi Vincenzo!
>>>
>>>
>>> Thank you so much for your help! With your instructions I've managed to
>>> get a set of bhyves up and running with netmap working properly within
>>> them! I chose to go with the recent version of head instead of 10.3.  I
>>> will also try and build a version on 11.0 if I get chance!
>>>
>>>
>>> I will make sure and ask any further questions on the github page for
>>> netmap, but while I'm emailing, I've attached a text file containing a few
>>> kernel page fault errors I've ran into. They don't happen repeatedly. They
>>> seem to just happen randomly if I try to shut the process down and possibly
>>> catch netmap in an incorrect state! Figured they might be useful to you. If
>>> I figure out what the error is myself I will try and help out!
>>>
>>>
>>> And thanks again for your help!
>>>
>>>
>>> Kind Regards
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------
>>>
>>>
>>>
>>> [image: Stream Logo]
>>>
>>>
>>>
>>>
>>>
>>> *Steven Crangle*
>>>
>>> Systems Developer | Stream Technologies | Glasgow, UK
>>>
>>> [image: http://www.stream-technologies.com/img/phone.png]
>>>
>>> +44 (0)844 800 8520
>>>
>>> |
>>>
>>> [image: http://www.stream-technologies.com/img/mouse.png]
>>>
>>> www.stream-technologies.com
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------
>>> *From:* Vincenzo Maffione <v.maffione@gmail.com>
>>> *Sent:* 23 November 2016 08:33:11
>>> *To:* Steven Crangle
>>> *Cc:* FreeBSD Net
>>> *Subject:* Re: Looking for some help with netmap/bhyve
>>>
>>>
>>>
>>> 2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.co
>>> m>:
>>>
>>>>
>>>> Hi,
>>>>
>>>>
>>>> I've recently been trying to boot up several bhyves so that I can test
>>>> netmap communication between instances. The problem is, no matter what
>>>> configuration I try, the guest vm running in bhyve completely hangs and
>>>> becomes unusable as soon as a packet hits the netmap interface. When
>>>> testing with pkt-gen, the TX side successfully starts sending packets, but
>>>> the RX side will reliable freeze with the only option being killing the
>>>> bhyve process.
>>>>
>>>>
>>>> The bhyve command used for the above test was:
>>>>
>>>>
>>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s
>>>> 2,virtio-blk,/dev/zvol/zroot/viper1vol    -s
>>>> 3,virtio-net,tap0,mac=00:01:23:45:67:83 -s 4,virtio-net,tap4 -l
>>>> com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s
>>>> 2,virtio-blk,/dev/zvol/zroot/viper2vol    -s
>>>> 3,virtio-net,tap1,mac=00:01:23:45:67:84 -s 4,virtio-net,tap5 -l
>>>> com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>>>
>>>> For this test the host OS was FreeBSD-11.0-p3 and the guest OS was
>>>> FreeBSD-11.0-p3.
>>>>
>>>> After failing to get this solution working, I pulled down the source
>>>> from the following url and installed it on the host box:
>>>>
>>>> https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/
>>>>
>>>> I then ran the following commands to try and bring up the machines
>>>> using the ptnetmap interface (the guest still running 11.0p3) :
>>>>
>>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s
>>>> 1:1,virtio-blk,/dev/zvol/zroot/viper1vol    -s
>>>> 2:0,virtio-net,tap0,mac=00:01:23:45:67:83 -s 2:1,ptnetmap-memdev -s
>>>> 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
>>>>     bhyve -c 1 -s 0,hostbridge -s 1,lpc -s
>>>> 1:1,virtio-blk,/dev/zvol/zroot/viper2vol    -s
>>>> 2:0,virtio-net,tap1,mac=00:01:23:45:67:84 -s 2:1,ptnetmap-memdev -s
>>>> 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2
>>>>
>>>> With the above commands the vm's fail to boot with the following
>>>> message:
>>>>
>>>> ptnet_init: failed to get ptnetmap
>>>>
>>>> Output in /var/log/messages seems to just show the ptnetmap driver
>>>> allocating one RX/TX ring for each vm, while bringing the device up, the
>>>> device then goes down and the above error is seen in the console.
>>>>
>>>> Is there something I'm doing wrong with regards to running netmap or
>>>> ptnetmap within a bhyve? Any pointers in the right direction will be much
>>>> appreciated!
>>>>
>>>> Kind Regards
>>>>
>>>> Steven
>>>>
>>>>
>>> Hi Steven,
>>>
>>>   The code you are looking at is the final code released by my gsoc 2016
>>> project at the end of August 2016. However, I've been working on that for a
>>> while after the gsoc, so that code is not updated anymore. My modification
>>> basically involves two subsystems: netmap and bhyve.
>>>
>>> The updates to netmap are already available in HEAD. The updates to
>>> bhyve are not yet upstream, as we are in the process to review that with
>>> the bhyve maintainers.
>>>
>>> Anyway, you need two sources to get the latest code:
>>> 1) https://github.com/luigirizzo/netmap for the latest netmap code,
>>> that you could also compile as an external kernel module.
>>> 2) https://github.com/vmaffione/freebsd to get the updates to bhyve
>>> (and vmm.ko). You can use this as the host system. There are two branches
>>> here: ptnet-10.3, and ptnet-head. My original code was developed under
>>> FreeBSD 10.3, so a first possibility is to try this as the host system
>>> (using the ptnet-10.3 branch). The other branch (ptnet-head) contains a
>>> porting of the work to a recent version of HEAD. I would be very glad if
>>> you could test the code also on FreeBSD 11.
>>>
>>> We support two combinations of bhyve networking with netmap:
>>>
>>>   (A) virtio-net + netmap: that is something like "-s
>>> 2:0,virtio-net,vale0:0" in the bhyve command line.
>>>   (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev
>>> -s 2:2,ptnet,vale0:0" in the bhyve command line.
>>>
>>> so you may want to try A first (netmap backend in user-space, slower)
>>> and then B (netmap backend in kernel-space, faster).
>>>
>>> Sorry about the confusion on the code repositories, I'll try also to
>>> update the wiki page (and/or the gsoc svn repo) to reflect these updates.
>>> It's perfectly ok for me to discuss these issues here in the ML, however
>>> for more detailed/low-level discussion and support about problems you are
>>> running into, feel free to open Github issues here
>>> https://github.com/luigirizzo/netmap.
>>>
>>> Cheers,
>>>   Vincenzo
>>>
>>>
>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ________________________________
>>>>
>>>>
>>>>
>>>> [Stream Logo]
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Steven Crangle
>>>>
>>>>
>>>> Systems Developer | Stream Technologies | Glasgow, UK
>>>>
>>>>
>>>> [http://www.stream-technologies.com/img/phone.png]
>>>>
>>>>
>>>> +44 (0)844 800 8520
>>>>
>>>>
>>>> |
>>>>
>>>>
>>>> [http://www.stream-technologies.com/img/mouse.png]
>>>>
>>>>
>>>> www.stream-technologies.com<http://www.stream-technologies.com/>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> freebsd-net@freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-net
>>>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>>>>
>>>
>>>
>>>
>>> --
>>> Vincenzo Maffione
>>>
>>
>>
>>
>> --
>> Vincenzo Maffione
>>
>
>
>
> --
> Vincenzo Maffione
>



-- 
Vincenzo Maffione

From owner-freebsd-net@freebsd.org  Fri Dec  2 19:23:12 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 48E30C6352B
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 19:23:12 +0000 (UTC)
 (envelope-from vicepresjoebiden@gmail.com)
Received: from mail-vk0-x231.google.com (mail-vk0-x231.google.com
 [IPv6:2607:f8b0:400c:c05::231])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 0494714A0
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 19:23:12 +0000 (UTC)
 (envelope-from vicepresjoebiden@gmail.com)
Received: by mail-vk0-x231.google.com with SMTP id 137so151266687vkl.0
 for <freebsd-net@freebsd.org>; Fri, 02 Dec 2016 11:23:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:from:date:message-id:subject:to;
 bh=QENxzR8pEvUAFkQsEopK4+/FQIvLa913g3yaIgNaIzI=;
 b=JGZ5SvIMmw6SKXATJXTW/dQBG6A/fnlOpU5U3yLCo7Evfc9ON0IGISDG4CMPutPx8f
 2HBDAD6wpyloCAEiSkxNH9MdjI5ArpzIx0txWmhsaEaVA0PPCz+i/o3Zte2RqSLek/Ie
 v134/hhbBIMQ4iBRTXoZ6qUlSdVulywl5h+YBFfp3Q99MmkJ6oSdyNfELH7jERkUcJof
 4XsZgcrAvhJD0UP+Kjgjdp/Vip/RqzSTlj+qS3im3/KwCPfRY1ZSt77vFD++q0piEDtR
 jqfcrXfa+shvugKxzkD4oddTpswYAN2m+OSeKG+OChC1GfViwqCZPv6ig68GxAXb2TSO
 S6uw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
 bh=QENxzR8pEvUAFkQsEopK4+/FQIvLa913g3yaIgNaIzI=;
 b=E7sAlJJNVbdxeXjGt8lu/G9GnJm6XQTD5niVxUtur6hji6v2hIShH6QQnSHx7wwKF3
 DlvJ6LkmmE0wyprWTVRgvbGsJ9wSYtAFzBxWskCIs5NL2HxdDQ9wKgu56QGvDp69ueKc
 ILWkGuPSSBKCS6zHURlAm4d9f03m4jH3pQMsocD0QzUJRY1zZk9us4KZzJIyPiR6VMmf
 ji0MUvOpIh7i+KZOpp3tc5k3xDSPnhrGvD6QlrNYd8ThUb9WgjgLoTZxJNXJUP3DilqV
 U+XOh13tQ8fX1Mkcp3mVdZ3j5iJQ2Itn9He665LBzlbgrx0JH+n4vCxcidZxrj5YjhkM
 r1yQ==
X-Gm-Message-State: AKaTC0062dSNc1dPPqXyiyr3bdIDqUMuyDF0Zn9drTZiuPxoEmLNywoEEsZu4i7rqJZFGlJ4H7H4wJNIFfODuw==
X-Received: by 10.31.162.72 with SMTP id l69mr17712754vke.123.1480706590993;
 Fri, 02 Dec 2016 11:23:10 -0800 (PST)
MIME-Version: 1.0
Received: by 10.176.0.103 with HTTP; Fri, 2 Dec 2016 11:23:10 -0800 (PST)
From: Jordan Ladora <vicepresjoebiden@gmail.com>
Date: Fri, 2 Dec 2016 12:23:10 -0700
Message-ID: <CAKC6PD2seS+PYNL-xCJ7L+RQTh8k83h64-ukbWTq90fnSd=k_A@mail.gmail.com>
Subject: File duplication on NFSv4 exported ZFS filesystems to centos client
To: freebsd-net@freebsd.org
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 19:23:12 -0000

Curious phenomenon of file pseudo-dup with exported ZFS filesystems on
FreeBSD 10.3-REL NFSv4 export to a centos7 client.


*FreeBSD server-*

zpool create zpool_nfsv4 ...

zfs create zpool_nfsv4/zfs2

zfs create zpool_nfsv4/zfs3


/etc/exports-

V4: /

/zpool_nfsv4

/zpool_nfsv4/zfs2

/zpool_nfsv4/zfs3


zfs unshare -a


*Centos client-*

mkdir /zpool_nfsv4

mkdir /zpool_nfsv4_zfs2

mkdir /zpool_nfsv4_zfs3

mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
10.0.100.100:/zpool_nfsv4
/zpool_nfsv4

mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
10.0.100.100:/zpool_nfsv4/zfs2
/zpool_nfsv4_zfs2

mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
10.0.100.100:/zpool_nfsv4/zfs3
/zpool_nfsv4_zfs3


The FreeBSD share and centos client have the same username (nfsuser),
groupname, and user:group IDs, which also owns the exported /zpool_nfsv4,
so UID/GIDs map correctly on the client and permissions work fine.

The unexpected behavior happens when the user touches a file on the
client's share of either /zpool_nfsv4/zfs2 or /zpool_nfsv4/zfs3-

sudo -u nfsuser touch /zpool_nfs4_zfs2/testfile  # centos client

...this new file then also appears immediately on the client's share mount
at-

/zpool_nfs4_zfs3/testfile

...but not at /zpool_nfs4 (the top-level zfs). It is not duplicated on the
server and there it only appears [in the correct location] at-

/zpool_nfs4/zfs2/testfile  # freebsd server

If I unmount the share and remount it, it looks the same (you still see the
duplicate file on the client) and =E2=80=98testfile=E2=80=99 can be manipul=
ated on the
client from either location.

This also doesn't happen if touching a file on the top-level dir
(/zpool_nfsv4) on the client (in other words, there is no duplication seen
on the client if nfsuser touches e.g. /zpool_nfsv4/testfile).

This seems similar to this (https://serverfault.com/quest
ions/535318/creating-two-nfs-shares-from-same-server-but-
when-mounted-both-point-to-same-d) thread with NFSv4 exports on a centos
server, but I cannot find anything similar to what I see here with a
FreeBSD NFSv4 server.

It seems to me that two of the zfs filesystems (zfs1 and zfs2) are mapping
to the same place on the client, but I'm not sure how to deal with this...

From owner-freebsd-net@freebsd.org  Fri Dec  2 20:44:53 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 96906C62A3D
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 20:44:53 +0000 (UTC) (envelope-from torek@torek.net)
Received: from elf.torek.net (mail.torek.net [96.90.199.121])
 (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 847D339F
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 20:44:52 +0000 (UTC)
 (envelope-from torek@torek.net)
Received: from elf.torek.net (localhost [127.0.0.1])
 by elf.torek.net (8.14.9/8.14.9) with ESMTP id uB2KgOkO055419
 for <freebsd-net@freebsd.org>; Fri, 2 Dec 2016 12:42:24 -0800 (PST)
 (envelope-from torek@torek.net)
Message-Id: <201612022042.uB2KgOkO055419@elf.torek.net>
From: Chris Torek <torek@torek.net>
To: freebsd-net@freebsd.org
Subject: mutex usage in if_bridge vs other drivers
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <55417.1480711344.1@elf.torek.net>
Date: Fri, 02 Dec 2016 12:42:24 -0800
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3
 (elf.torek.net [127.0.0.1]); Fri, 02 Dec 2016 12:42:24 -0800 (PST)
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 20:44:53 -0000

I'm not sure if this is really a freebsd-net topic or
more generic kernel, but since I observed this by looking
for possible causes of a bizarre network driver crash I'll
send it here (I'm not on the freebsd-net mailing list but
I'll check the archives for a bit too).

When doing if_bridge SIOCSDRVSPEC commands we go through
this code path:

static int
bridge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
{
	[snip]
		BRIDGE_LOCK(sc);
		error = (*bc->bc_func)(sc, &args);
		BRIDGE_UNLOCK(sc);

Note that the BRIDGE_LOCK is a plain (non-sleepable) mutex.
The bc_func may be one of many functions, but two interesting
ones are bridge_ioctl_add() and bridge_ioctl_del().  These
are somewhat complicated, but both eventually call:

	bridge_mutecaps(sc);

which iterates over all (newly augmented, or remaining)
bridge members calling bridge_set_ifcap(sc, bif, enabled)
to enable or disable capabilities like IFCAP_TSO4 and so
on.  This in turn sets up an SIOCSIFCAP ioctl and does:

	struct ifnet *ifp = bif->bif_ifp;

	if (ifp->if_capenable != set) {
		error = (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr);
		...
	}

In the case of dev/bxe/bxe.c, this now (as of FreeBSD 10)
has its own sleep (sx) lock, and it may lock that sx lock.
If it does, we panic because we're holding the bridge lock.

THE QUESTION:

 - Who is wrong, the bxe driver or the bridge code?  I.e.,
   does the bridge driver need to release its lock here,
   and if so, is that actually safe to do? (We might need
   to restart the loop over all the members if we drop the
   lock.)

 - Or if the bridge driver should retain its lock, can it
   use an sx lock here, to permit members to also use sx
   locks?

Chris

From owner-freebsd-net@freebsd.org  Fri Dec  2 23:36:28 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id B0A86C639A0
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Fri,  2 Dec 2016 23:36:28 +0000 (UTC)
 (envelope-from rmacklem@uoguelph.ca)
Received: from na01-by2-obe.outbound.protection.outlook.com
 (mail-by2on0099.outbound.protection.outlook.com [207.46.100.99])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (Client CN "mail.protection.outlook.com",
 Issuer "Microsoft IT SSL SHA2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 69D2FB10
 for <freebsd-net@freebsd.org>; Fri,  2 Dec 2016 23:36:27 +0000 (UTC)
 (envelope-from rmacklem@uoguelph.ca)
Received: from YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM (10.165.218.133) by
 YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM (10.165.218.133) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.747.13; Fri, 2 Dec 2016 22:04:41 +0000
Received: from YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM ([10.165.218.133]) by
 YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM ([10.165.218.133]) with mapi id
 15.01.0747.018; Fri, 2 Dec 2016 22:04:41 +0000
From: Rick Macklem <rmacklem@uoguelph.ca>
To: Jordan Ladora <vicepresjoebiden@gmail.com>, "freebsd-net@freebsd.org"
 <freebsd-net@freebsd.org>
Subject: Re: File duplication on NFSv4 exported ZFS filesystems to centos
 client
Thread-Topic: File duplication on NFSv4 exported ZFS filesystems to centos
 client
Thread-Index: AQHSTNGLvid/pn4fzkGYDop7p0LBoKD1MwKF
Date: Fri, 2 Dec 2016 22:04:41 +0000
Message-ID: <YTXPR01MB01898AEAA3BBC09ACDF3E338DD8E0@YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM>
References: <CAKC6PD2seS+PYNL-xCJ7L+RQTh8k83h64-ukbWTq90fnSd=k_A@mail.gmail.com>
In-Reply-To: <CAKC6PD2seS+PYNL-xCJ7L+RQTh8k83h64-ukbWTq90fnSd=k_A@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=rmacklem@uoguelph.ca; 
x-ms-office365-filtering-correlation-id: a3480c52-fefb-4790-7827-08d41aff3789
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:YTXPR01MB0189;
x-microsoft-exchange-diagnostics: 1; YTXPR01MB0189;
 7:TGwD8nSTzKwYoqs/nvmpM+vOgApSS7KjnVQpm9So7UMu38BWwpk6yzaEy4v8q7fdRBoBWHZ3xU7zwuX7SoE49HXDtm1Klrb0il297BCBnj62skeG2E0C6zcJ0dXT5ViYM+iKZzsYzB7E0XkiII0Eo56YnZJP5Mxeo4gAqY7uQdX3i9O5Tp68kXzxeAvARWBIahi16qvl+A9Y+5eFNxYKeyoGtdWnrW7OZ8tmfPpEwezFawQZntW1aUeWVjmWzrSfOwZFoAJTEf+xKzSXNWzYCXOugK4poVnmPyMfchslKXNmPJP1cWia3VFh8INxMzf8iMYcQULlxg6hwlYXmEMSwMXLMpRnWskHPdixtHgboXGR0efZrOJETjmzd7vHtYpl5OM1fCEH1MW/7ldfLJVBzWQ1NGIP4/8f2jWB1VP81mwX32gZo4opxtZTlWF5KMUFa5yMyTyZ7eQCCsnd5/7QFw==
x-microsoft-antispam-prvs: <YTXPR01MB0189CB65469EAB5E1FCC74C4DD8E0@YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM>
x-exchange-antispam-report-test: UriScan:(158342451672863)(235228084354710);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
 RULEID:(6040375)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(2016111802025)(6072148)(6043046);
 SRVR:YTXPR01MB0189; BCL:0; PCL:0; RULEID:; SRVR:YTXPR01MB0189; 
x-forefront-prvs: 0144B30E41
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(6009001)(7916002)(189002)(24454002)(199003)(122556002)(86362001)(97736004)(92566002)(2501003)(2900100001)(74482002)(74316002)(101416001)(9686002)(3280700002)(189998001)(107886002)(102836003)(305945005)(68736007)(81156014)(3660700001)(8936002)(81166006)(2906002)(38730400001)(106116001)(106356001)(105586002)(50986999)(8676002)(7846002)(54356999)(76176999)(39060400001)(39410400001)(2950100002)(77096006)(33656002)(229853002)(5660300001)(7696004)(39450400002)(5001770100001)(6506006);
 DIR:OUT; SFP:1101; SCL:1; SRVR:YTXPR01MB0189;
 H:YTXPR01MB0189.CANPRD01.PROD.OUTLOOK.COM; FPR:; SPF:None; PTR:InfoNoRecords;
 MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: uoguelph.ca does not designate
 permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: uoguelph.ca
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2016 22:04:41.6040 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: be62a12b-2cad-49a1-a5fa-85f4f3156a7d
X-MS-Exchange-Transport-CrossTenantHeadersStamped: YTXPR01MB0189
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2016 23:36:28 -0000

Jordan Ladora wrote:
>Curious phenomenon of file pseudo-dup with exported ZFS filesystems on
>FreeBSD 10.3-REL NFSv4 export to a centos7 client.
>
>
>*FreeBSD server-*
>
>zpool create zpool_nfsv4 ...
>
>zfs create zpool_nfsv4/zfs2
>
>zfs create zpool_nfsv4/zfs3
>
>
>/etc/exports-
>
>V4: /
>
>/zpool_nfsv4
>
>/zpool_nfsv4/zfs2
>
>/zpool_nfsv4/zfs3
>
>
>zfs unshare -a
>
>
>*Centos client-*
>
>mkdir /zpool_nfsv4
>
>mkdir /zpool_nfsv4_zfs2
>
>mkdir /zpool_nfsv4_zfs3
>
>mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
>10.0.100.100:/zpool_nfsv4
>/zpool_nfsv4
>
- I'll call this mount #2.
>mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
>10.0.100.100:/zpool_nfsv4/zfs2
>/zpool_nfsv4_zfs2
- I'll call this mount #3.
>mount -t nfs4 -o rw,intr,hard,proto=3Dtcp,nodev,noexec,nosuid
>10.0.100.100:/zpool_nfsv4/zfs3
>/zpool_nfsv4_zfs3
By default (unlike NFSv3) NFSv4 mounts the entire tree of file systems
under the mount point and not just the file system being mounted.
You have two choices:
1 - Don't do mount #2 or mount #3. The first mount should allow you to
     access /zpool_nfsv4/zfs2 and /zpool_nfsv4/zfs3 with the addition mount=
s.
OR
2 - Turn of the "whole tree" behaviour on the server via:
# sysctl vfs.nfsd.mirrormnt=3D0
on the FreeBSD server.
(I know, mirrormnt is a weird name for it, but that is what Linux used, so.=
..
 I guess it means "mirror the tree of mounted file systems on the server to=
 the clients".)
[stuff snipped]
>This seems similar to this (https://serverfault.com/quest
>ions/535318/creating-two-nfs-shares-from-same-server-but-
>when-mounted-both-point-to-same-d) thread with NFSv4 exports on a centos
>server, but I cannot find anything similar to what I see here with a
>FreeBSD NFSv4 server.
What you did definitely had the same file systems mounted multiple times,
so I suspect that is what caused this behaviour.

rick



From owner-freebsd-net@freebsd.org  Sat Dec  3 02:42:51 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id AD5F8C63194
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sat,  3 Dec 2016 02:42:51 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 9D21D286
 for <freebsd-net@FreeBSD.org>; Sat,  3 Dec 2016 02:42:51 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB32goGh036664
 for <freebsd-net@FreeBSD.org>; Sat, 3 Dec 2016 02:42:51 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 214746] Carp ipv6 duplicate address detection
Date: Sat, 03 Dec 2016 02:42:51 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.3-RELEASE
X-Bugzilla-Keywords: needs-qa
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: koobs@FreeBSD.org
X-Bugzilla-Status: Open
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: bug_status keywords
Message-ID: <bug-214746-2472-WkkBazcanu@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-214746-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-214746-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 03 Dec 2016 02:42:51 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214746

Kubilay Kocak <koobs@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|New                         |Open
           Keywords|                            |needs-qa

--- Comment #1 from Kubilay Kocak <koobs@FreeBSD.org> ---
@Athanasios Could you please attach a file containing the non-working and
working configurations (ie: /etc/rc.conf, if specified there).=20

Please also include the exact FreeBSD version (uname -a) output.

--=20
You are receiving this mail because:
You are the assignee for the bug.=

From owner-freebsd-net@freebsd.org  Sat Dec  3 05:20:18 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id DE16FC6417A
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sat,  3 Dec 2016 05:20:18 +0000 (UTC)
 (envelope-from rysto32@gmail.com)
Received: from mail-io0-x233.google.com (mail-io0-x233.google.com
 [IPv6:2607:f8b0:4001:c06::233])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id AC2FB1A76
 for <freebsd-net@freebsd.org>; Sat,  3 Dec 2016 05:20:18 +0000 (UTC)
 (envelope-from rysto32@gmail.com)
Received: by mail-io0-x233.google.com with SMTP id a124so517185222ioe.2
 for <freebsd-net@freebsd.org>; Fri, 02 Dec 2016 21:20:18 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=yl0Eo3+al2XVFSMoRA2rxGseoA9xZ4AOUNz7gKV9faE=;
 b=CiwcsOBlBxsu5CA9VLbVmKr1HjhTISGxM56Az/9JomE3ETdHbzLmbee15WlCUvazUI
 ZGgn7uCh06g2QqvpAfQiJQH/wgAznfoxGaJ1h2GuMqPc42B7+k4zMSbGp/5bZ18LZNwI
 7Ot+T0VXehS/QPZub3t/EXnNN1PTkmLYgdgxV/8LCvrniEctQ1K948qQIDh01vngA2qp
 1OoOQCEBGamUTsz4gPPDQKgsgNmBDkBpEy2wYqJwMNliVBFr85Wk1C3HLBScwpC52EjX
 KgWAmmXB+0q0FshtZKMhNyRxvHiQfbYrutDfimwQy4AbTLbCVLH+SpHvsEuwFu/DNb2m
 w/Qw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=yl0Eo3+al2XVFSMoRA2rxGseoA9xZ4AOUNz7gKV9faE=;
 b=Cd3KzN+IWS+XoaHL2U1n0tcovXerpIGVaWxCyifL4tpLPr6kUikWqoivBJHflj8LX6
 XjnVpTixspEZEDrASuD5IZ2ZVEP3SAO/S2taTUvjw3zgmyTLwYZwPN5nrbxFzjRlut7t
 8mbkBLW/GxnojbOVvj9m1/6wbwRzKcBuQRDtDeL4ynvSoDGFs66dG2jnP+10rKS1VUF0
 fuAYr8P6OhK4twSbA2lTw3581FAWguIF8CLXswQ5AXFuHo4q7s0yC7GGWIK0tjEWmbSL
 Pf7BgZZLc2H3jTLzBsYaUsrlEYD3Ry0NJW5E6wD5T33pedSYt+4RaDJukVvOv1zK4mZv
 ekYQ==
X-Gm-Message-State: AKaTC03BRkfK2Q69+uVQWksMs0RyWEaww8qzmcAYkt3Oz/rciJZD3Z0xAXmX3yXqeVcKw47/t3V18aaHIPc2tw==
X-Received: by 10.107.136.164 with SMTP id s36mr41987235ioi.214.1480742418228; 
 Fri, 02 Dec 2016 21:20:18 -0800 (PST)
MIME-Version: 1.0
Received: by 10.107.144.84 with HTTP; Fri, 2 Dec 2016 21:20:17 -0800 (PST)
In-Reply-To: <201612022042.uB2KgOkO055419@elf.torek.net>
References: <201612022042.uB2KgOkO055419@elf.torek.net>
From: Ryan Stone <rysto32@gmail.com>
Date: Sat, 3 Dec 2016 00:20:17 -0500
Message-ID: <CAFMmRNxf8FoDSOEDO6AA1An6nNK6i0X44-bMUH9v_kvSM06J+A@mail.gmail.com>
Subject: Re: mutex usage in if_bridge vs other drivers
To: Chris Torek <torek@torek.net>
Cc: freebsd-net <freebsd-net@freebsd.org>
Content-Type: text/plain; charset=UTF-8
X-Content-Filtered-By: Mailman/MimeDel 2.1.23
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 03 Dec 2016 05:20:19 -0000

On Fri, Dec 2, 2016 at 3:42 PM, Chris Torek <torek@torek.net> wrote:

> THE QUESTION:
>
>  - Who is wrong, the bxe driver or the bridge code?  I.e.,
>    does the bridge driver need to release its lock here,
>    and if so, is that actually safe to do? (We might need
>    to restart the loop over all the members if we drop the
>    lock.)
>
>  - Or if the bridge driver should retain its lock, can it
>    use an sx lock here, to permit members to also use sx
>    locks?
>

bxe is not the only driver that sleeps in its config path, so I would say
that if_bridge is de facto incorrect.  Dropping the lock is entirely the
wrong thing to do -- as you note, if we do, then the bridge members can
change out from under us.  The only path forward is to use an sx lock, but
unfortunately it's not quite as simple as just converting the lock to an sx
lock.  The problem is that BRIDGE_LOCK() is also called in the transmit and
receive paths, and those paths absolutely may not sleep for any reason.

I believe that the correct fix would be to introduce an sx lock to
if_bridge in additional to the current lock.  In code paths that call
ioctls() on bridge members, replace the use of BRIDGE_LOCK with the new sx
lock.  In code paths that modify the list of bridge members, hold both the
BRIDGE_LOCK and the new sx lock.  In the transmit and receive paths,
nothing should change.

From owner-freebsd-net@freebsd.org  Sat Dec  3 07:36:12 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4C113C64C0C
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sat,  3 Dec 2016 07:36:12 +0000 (UTC)
 (envelope-from torek@elf.torek.net)
Received: from elf.torek.net (mail.torek.net [96.90.199.121])
 (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 382BF1B47
 for <freebsd-net@freebsd.org>; Sat,  3 Dec 2016 07:36:11 +0000 (UTC)
 (envelope-from torek@elf.torek.net)
Received: from elf.torek.net (localhost [127.0.0.1])
 by elf.torek.net (8.14.9/8.14.9) with ESMTP id uB37aAr8057472;
 Fri, 2 Dec 2016 23:36:10 -0800 (PST)
 (envelope-from torek@elf.torek.net)
Received: (from torek@localhost)
 by elf.torek.net (8.14.9/8.14.9/Submit) id uB37aArG057471;
 Fri, 2 Dec 2016 23:36:10 -0800 (PST) (envelope-from torek)
Date: Fri, 2 Dec 2016 23:36:10 -0800 (PST)
From: Chris Torek <torek@elf.torek.net>
Message-Id: <201612030736.uB37aArG057471@elf.torek.net>
To: rysto32@gmail.com
Subject: Re: mutex usage in if_bridge vs other drivers
Cc: freebsd-net@freebsd.org
In-Reply-To: <CAFMmRNxf8FoDSOEDO6AA1An6nNK6i0X44-bMUH9v_kvSM06J+A@mail.gmail.com>
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3
 (elf.torek.net [127.0.0.1]); Fri, 02 Dec 2016 23:36:10 -0800 (PST)
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 03 Dec 2016 07:36:12 -0000

>... Dropping the lock is entirely the wrong thing to do -- as
>you note, if we do, then the bridge members can change out from
>under us.  The only path forward is to use an sx lock, but ...
 [snip]
>In code paths that modify the list of bridge members, hold both the
>BRIDGE_LOCK and the new sx lock.  In the transmit and receive paths,
>nothing should change.

That should work, but I hate the cost of obtaining two locks --
not so much the lock acquire/release cost, but the "mental cost"
of keeping the lock ordering straight.

The other option I thought of was gathering the list of members
that need an ioctl done on them in one pass, then doing all the
ioctls after dropping the lock.  But that runs the risk of doing
ioctls on interfaces that are no longer members of the bridge.

I guess the "mental cost" is not that high, since the lock order
requirement is guaranteed to be "sx lock first, then mtx lock"
(because the other way around causes sleeping while holding a
regular mutex!).

Chris

From owner-freebsd-net@freebsd.org  Sat Dec  3 09:53:00 2016
Return-Path: <owner-freebsd-net@freebsd.org>
Delivered-To: freebsd-net@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3EC4AC6257C
 for <freebsd-net@mailman.ysv.freebsd.org>;
 Sat,  3 Dec 2016 09:53:00 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from kenobi.freebsd.org (kenobi.freebsd.org
 [IPv6:2001:1900:2254:206a::16:76])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 2E832B95
 for <freebsd-net@FreeBSD.org>; Sat,  3 Dec 2016 09:53:00 +0000 (UTC)
 (envelope-from bugzilla-noreply@freebsd.org)
Received: from bugs.freebsd.org ([127.0.1.118])
 by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id uB39r0Pv028657
 for <freebsd-net@FreeBSD.org>; Sat, 3 Dec 2016 09:53:00 GMT
 (envelope-from bugzilla-noreply@freebsd.org)
From: bugzilla-noreply@freebsd.org
To: freebsd-net@FreeBSD.org
Subject: [Bug 214746] Carp ipv6 duplicate address detection
Date: Sat, 03 Dec 2016 09:53:00 +0000
X-Bugzilla-Reason: AssignedTo
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: Base System
X-Bugzilla-Component: kern
X-Bugzilla-Version: 10.3-RELEASE
X-Bugzilla-Keywords: needs-qa
X-Bugzilla-Severity: Affects Some People
X-Bugzilla-Who: aduitsis@douitsis.com
X-Bugzilla-Status: Open
X-Bugzilla-Resolution: 
X-Bugzilla-Priority: ---
X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org
X-Bugzilla-Flags: 
X-Bugzilla-Changed-Fields: 
Message-ID: <bug-214746-2472-lWhGcPKh4q@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-214746-2472@https.bugs.freebsd.org/bugzilla/>
References: <bug-214746-2472@https.bugs.freebsd.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/>
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-net>,
 <mailto:freebsd-net-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 03 Dec 2016 09:53:00 -0000

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214746

--- Comment #2 from Athanasios Douitsis <aduitsis@douitsis.com> ---
(In reply to Kubilay Kocak from comment #1)

Running FreeBSD 10.3-RELEASE-p11 #0: Mon Oct 24 18:49:24 UTC 2016
root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64 on b=
oth
nodes.

This works (dead:beef instead of my real prefix):

ifconfig_vmx0_ipv6=3D"inet6 accept_rtadv dead:beef::60/64"
ifconfig_vmx0_alias1=3D"inet6 dead:beef::95/64 no_dad vhid 34 pass bar=E2=
=80=9D

dead:beef::60 is node0 and dead:beef::61 is node1. Both have dead:beef::95/=
64
as the common carp IPv6 address. Vhid 34 is randomly chosen.=20

For IPv4, I'm using a different vhid and pass, just to be on the safe side.

Removing the no_dad from ifconfig_vmx0_alias1 and rebooting the BACKUP node
causes the problem to appear. Backup node will compain about DAD upon reboo=
t,
ifconfig will say dead:beef::95/64 duplicated, so it can't really be used.=
=20

Afterwards, trying to manualy issue=20

ifconfig inet6 dead:beef::95/64 vhid 34 pass bar

will fail the first time, second time it will go through.

--=20
You are receiving this mail because:
You are the assignee for the bug.=