<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.freebsd.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.freebsd.org/bugzilla/"
          
          maintainer="bugmeister@FreeBSD.org"
>

    <bug>
          <bug_id>263783</bug_id>
          
          <creation_ts>2022-05-05 07:00:25 +0000</creation_ts>
          <short_desc>USB MBIM: Support for LTE/4G USB modems (MBIM)</short_desc>
          <delta_ts>2026-05-25 15:22:03 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Base System</product>
          <component>kern</component>
          <version>Unspecified</version>
          <rep_platform>Any</rep_platform>
          <op_sys>Any</op_sys>
          <bug_status>Closed</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>feature, needs-qa, vendor</keywords>
          <priority>---</priority>
          <bug_severity>Affects Many People</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Pronchery">pierre</reporter>
          <assigned_to name="freebsd-usb (Nobody)">usb</assigned_to>
          <cc>ACCOUNT_DELETED</cc>
    
    <cc>alex-freebsd-bugs</cc>
    
    <cc>andrey.kiselev</cc>
    
    <cc>big12boylp</cc>
    
    <cc>bms</cc>
    
    <cc>bugs.fbsd</cc>
    
    <cc>emaste</cc>
    
    <cc>evfbsd</cc>
    
    <cc>hendrik</cc>
    
    <cc>hnov19</cc>
    
    <cc>imp</cc>
    
    <cc>khorben</cc>
    
    <cc>khorben</cc>
    
    <cc>mail</cc>
    
    <cc>marek</cc>
    
    <cc>maurice</cc>
    
    <cc>mike</cc>
    
    <cc>mjl</cc>
    
    <cc>mlatin+fbsd</cc>
    
    <cc>mohammad</cc>
    
    <cc>pi</cc>
    
    <cc>pierre</cc>
    
    <cc>tomek</cc>
    
    <cc>ziaee</cc>
    
    <cc>zlei</cc>
          

      

      

      <flag name="maintainer-feedback"
          id="65744"
          type_id="3"
          status="-"
          setter="pi"
    />

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1209937</commentid>
    <comment_count>0</comment_count>
      <attachid>233735</attachid>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2022-05-05 07:00:25 +0000</bug_when>
    <thetext>Created attachment 233735
umb(4), umbctl(8), OPNsense plug-in

Dear FreeBSD developers,

I have just been authorised to publish the source code of the implementation of a kernel driver, support binary, and OPNsense plug-in for USB MBIM interfaces, as offered by some LTE/4G USB modems.

The original code was taken from the OpenBSD project, where it is known as the umb(4) driver. I had already ported this code pretty much as-is for NetBSD, as umb(4) as well, and added the support binary umbctl(8) (instead of ifconfig) when I was contracted by ADISTA SAS (https://www.adista.fr) to create a version for FreeBSD, suitable for deployment in OPNsense. While I originally based this effort on the OpenBSD and NetBSD versions, this required heavy changes to the kernel driver; the name is still umb(4), completed with an extended version of umbctl(8) (with JSON output).

I am therefore glad to upload this version here as an attachment, with the additional copyright and license information as requested by ADISTA. I believe these terms are fully compatible with the original license terms (3-clause BSD) and with FreeBSD&apos;s own license terms, adding ADISTA&apos;s own copyright/credit where applicable.

You are welcome to adapt, test, and integrate this code into FreeBSD&apos;s latest development branch and releases. Let me know if you would need any additional help from my side.

HTH,
-- Pierre Pronchery &lt;pierre@defora.net&gt; for ADISTA (aka khorben@NetBSD.org)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210061</commentid>
    <comment_count>1</comment_count>
    <who name="Kubilay Kocak">koobs</who>
    <bug_when>2022-05-05 23:55:36 +0000</bug_when>
    <thetext>Thank you for the report Pierre. Can you confirm/detail what version of FreeBSD the code was built/tested again? Also, is this something you can usher (either drive, or support with questions, etc) into the kernel via a differential/review via Phabricator?

@Hans Are you able to assist here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210088</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Petter Selasky">hselasky</who>
    <bug_when>2022-05-06 09:26:28 +0000</bug_when>
    <thetext>Hi,

I can help do review.

We probably want to have this piece of code in base and not in ports.

Can you upload the base code to https://reviews.freebsd.org and add hselasky at least.

--HPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210497</commentid>
    <comment_count>3</comment_count>
    <who name="">mike</who>
    <bug_when>2022-05-09 15:09:09 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #0)

Thanks for publishing this!  I was going to give it a try with a MC7700 modem, but the driver doesnt seem to attach. I put the device into MBIM mode (I think)

AT!ENTERCND=&quot;A710&quot;
OK
AT!UDPID=68A2
OK
AT!RESET
OK

It comes back as 

ugen2.3: &lt;Sierra Wireless, Incorporated MC7700&gt; at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x0000  &lt;Probed by interface class&gt;
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x1199 
  idProduct = 0x68a2 
  bcdDevice = 0x0006 
  iManufacturer = 0x0003  &lt;Sierra Wireless, Incorporated&gt;
  iProduct = 0x0002  &lt;MC7700&gt;
  iSerialNumber = 0x0004  &lt;012810001234846&gt;
  bNumConfigurations = 0x0001 

(instead of 0x68a3 where u3g attached to the device)

But when I load if_umb, no new devices or interfaces get created nor is there anything in dmesg.  This is on RELENG13 if that makes a difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210501</commentid>
    <comment_count>4</comment_count>
    <who name="">mike</who>
    <bug_when>2022-05-09 15:37:29 +0000</bug_when>
    <thetext>Made it a little farther on RELENG_13. With a MC7455, I did the following

at!entercnd=&quot;A710&quot;
at+cpin?
at!custom=&quot;IPV6ENABLE&quot;,1
at+cgdcont=1,&quot;ipv4v6&quot;,&quot;myapn&quot;
at!usbcomp = 1,1,1009
at!reset


Then booting it starts to attach, but I get a panic

umb0 on uhub4
umb0: &lt;Sierra Wireless, Incorporated Sierra Wireless MC7455 Qualcomm Snapdragon X7 LTE-A, class 0/0, rev 2.10/0.06, addr 3&gt; on usbus2
umb0: version 1.0
Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address   = 0x28
fault code              = supervisor read data, page not present
instruction pointer     = 0x20:0xffffffff8075c134
stack pointer           = 0x28:0xfffffe0061bf7e50
frame pointer           = 0x28:0xfffffe0061bf7e80
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 15 (umb0)
trap number             = 12
panic: page fault
cpuid = 0
time = 1652110164
KDB: stack backtrace:
#0 0xffffffff806986f5 at kdb_backtrace+0x65
#1 0xffffffff8064ba2f at vpanic+0x17f
#2 0xffffffff8064b8a3 at panic+0x43
#3 0xffffffff80997f15 at trap_fatal+0x385
#4 0xffffffff80997f6f at trap_pfault+0x4f
#5 0xffffffff80971088 at calltrap+0x8
#6 0xffffffff8120b7b7 at umb_attach_task+0x37
#7 0xffffffff804d0880 at usb_process+0x100
#8 0xffffffff8060931e at fork_exit+0x7e
#9 0xffffffff809720fe at fork_trampoline+0xe



Same if I manually load it

 kldload ./if_umb.ko
umb0 on uhub4
umb0: &lt;Sierra Wireless, Incorporated Sierra Wireless MC7455 Qualcomm Snapdragon X7 LTE-A, class 0/0, rev 2.10/0.06, addr 3&gt; on usbus2
umb0: version 1.0
#

Fatal trap 12: page fault while in kernel mode
cpuid = 2; apic id = 02
fault virtual address   = 0x28
fault code              = supervisor read data, page not present
instruction pointer     = 0x20:0xffffffff8075c134
stack pointer           = 0x28:0xfffffe008a186e50
frame pointer           = 0x28:0xfffffe008a186e80
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 15 (umb0)
trap number             = 12
panic: page fault
cpuid = 2
time = 1652110585
KDB: stack backtrace:
#0 0xffffffff806986f5 at kdb_backtrace+0x65
#1 0xffffffff8064ba2f at vpanic+0x17f
#2 0xffffffff8064b8a3 at panic+0x43
#3 0xffffffff80997f15 at trap_fatal+0x385
#4 0xffffffff80997f6f at trap_pfault+0x4f
#5 0xffffffff80971088 at calltrap+0x8
#6 0xffffffff815357b7 at umb_attach_task+0x37
#7 0xffffffff804d0880 at usb_process+0x100
#8 0xffffffff8060931e at fork_exit+0x7e
#9 0xffffffff809720fe at fork_trampoline+0xe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210760</commentid>
    <comment_count>5</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2022-05-11 10:50:35 +0000</bug_when>
    <thetext>(In reply to Kubilay Kocak from comment #1)

Hi Kubilay,

The code was built and tested with FreeBSD 11.2 (targeting OPNsense 19.7).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210790</commentid>
    <comment_count>6</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2022-05-11 15:23:50 +0000</bug_when>
    <thetext>(In reply to mike from comment #4)

I suspect the kernel does not like to attach the same device twice.
Is there a way in FreeBSD to detach a device? (drvctl in NetBSD)
If yes, can you try again after detaching the existing driver?

In my development environment, the MBIM card was configured to go straight into MBIM mode, and not expose other interfaces.

I cannot look deeper into this issue at the moment, I no longer have the corresponding equipment ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210871</commentid>
    <comment_count>7</comment_count>
    <who name="">mike</who>
    <bug_when>2022-05-12 14:32:34 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #6)
Hi, I did actually try and remove u3g.ko and usie.ko which both try to attach so that only your kld attached, but still a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210873</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Petter Selasky">hselasky</who>
    <bug_when>2022-05-12 14:39:07 +0000</bug_when>
    <thetext>Maybe there is a missing drain/flush of that callback function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211377</commentid>
    <comment_count>9</comment_count>
    <who name="Marcel">big12boylp</who>
    <bug_when>2022-05-16 18:28:50 +0000</bug_when>
    <thetext>Hey everybody! 

These are amazing news for FreeBSD and my usecase!
I did want to use my card with pfSense or OPNsense, but did not get anywhere in 2018. I ended up using the ISP router in bridge mode or running OpenWRT on x86_64, both isn&apos;t the best and I&apos;ve had many issues along the way.

I would like to help as much as possible, as I have a build system for the current version OPNsense 22.1.6 ready (FreeBSD 13) and a Sierra Wireless EM7565 WWAN card.
I was able to build everything and install it, but I do not see the WWAN card connected correctly (no cuaU0 entry). It should be in MBIM mode, as I used it this way with OpenWRT last time.

Please see the logs (build is in the FreeBSD VM, the rest on my OPNsense router):
Build: https://pastebin.com/ruY16esu
usbconfig dump: https://pastebin.com/754P7CLV
ls /dev/: https://pastebin.com/MMZi2GGF
dmesg: https://pastebin.com/2YUFvBpS
kldstat: https://pastebin.com/5ViikMzq

Note: If this is not fitting here, I will wait for the release ;)

Have a nice day! 
- Marcel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211407</commentid>
    <comment_count>10</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2022-05-16 21:32:04 +0000</bug_when>
    <thetext>(In reply to Marcel from comment #9)

Hi Marcel,

If your card is solely in MBIM mode, it is perfectly normal and expected that it will not cause a cuaU0 to appear. It should expose a network interface instead (umb0). You can then use ifconfig(8) and umbctl(8), as provided, in order to configure and use the network connection.

HTH,
-- Pierre Pronchery</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211584</commentid>
    <comment_count>11</comment_count>
    <who name="Marcel">big12boylp</who>
    <bug_when>2022-05-17 18:28:59 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #10)
Thank you for the fast response and sorry for mixing up the modes with communication port or without it.

In the last post I forgot to add the ifconfig output and what I tried with umbctl.

ifconfig: https://pastebin.com/2GcqE2jH
umb:
Command:  umbctl umb0
Response: umbctl: umb0: Device not configured
Command:  umbctl umb0 apn drei.at username no password no
Response: umbctl: umb0: Device not configured

As you see, no response and no entry in the list.
Any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233352</commentid>
    <comment_count>12</comment_count>
    <who name="">hendrik</who>
    <bug_when>2022-10-29 12:36:40 +0000</bug_when>
    <thetext>Same issue here using a Sierra Wireless EM7565.
After some research I actually found a way to &quot;detach&quot; a device using the &quot;set_config 255&quot; flag for usbconfig:

&gt; The special value of 255 unconfigures the device, detaching the interface drivers and reducing the power consumption to minimum, but without going into power saving mode or detaching from the bus.

I&apos;m now able to load the kernel module without a crash (kldload if_umb) however no new network interface umb0 is created. &quot;show_ifdrv&quot; also shows no driver attached.
usbconfig also provides a &quot;detach_kernel_driver&quot; flag:

&gt; Detach kernel driver for the selected interface and USB device.

Using this the kernel still crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233387</commentid>
    <comment_count>13</comment_count>
    <who name="Hans Petter Selasky">hselasky</who>
    <bug_when>2022-10-29 15:31:41 +0000</bug_when>
    <thetext>Can you obtain the so-called backtrace of that panic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233402</commentid>
    <comment_count>14</comment_count>
    <who name="">hendrik</who>
    <bug_when>2022-10-29 17:26:44 +0000</bug_when>
    <thetext>(In reply to Hans Petter Selasky from comment #13)

umb0 on uhub2
umb0: &lt;Sierra Wireless, Incorporated MC7455, class 0/0, rev 2.10/0.06, addr 3&gt; on usbus3
umb0: version 1.0


Fatal trap 12: page fault while in kernel mode
cpuid = 4; apic id = 04
fault virtual address   = 0x28
fault code              = supervisor read data, page not present
instruction pointer     = 0x20:0xffffffff80d2cdc4
stack pointer           = 0x28:0xfffffe011db43e50
frame pointer           = 0x28:0xfffffe011db43e80
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 15 (umb0)
trap number             = 12
panic: page fault
cpuid = 4
time = 1667064094
KDB: stack backtrace:
#0 0xffffffff80c694a5 at kdb_backtrace+0x65
#1 0xffffffff80c1bb5f at vpanic+0x17f
#2 0xffffffff80c1b9d3 at panic+0x43
#3 0xffffffff810afdf5 at trap_fatal+0x385
#4 0xffffffff810afe4f at trap_pfault+0x4f
#5 0xffffffff81087578 at calltrap+0x8
#6 0xffffffff82b0c7b7 at umb_attach_task+0x37
#7 0xffffffff80a36bd0 at usb_process+0x100
#8 0xffffffff80bd8a9e at fork_exit+0x7e
#9 0xffffffff810885ee at fork_trampoline+0xe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233405</commentid>
    <comment_count>15</comment_count>
    <who name="">hendrik</who>
    <bug_when>2022-10-29 17:46:48 +0000</bug_when>
    <thetext>(In reply to hendrik from comment #14)
kgdb backtrace:

#0  __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:55
#1  doadump (textdump=&lt;optimized out&gt;) at /usr/src/sys/kern/kern_shutdown.c:399
#2  0xffffffff80c1b75c in kern_reboot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:487
#3  0xffffffff80c1bbce in vpanic (fmt=0xffffffff811b4fb9 &quot;%s&quot;, ap=&lt;optimized out&gt;) at /usr/src/sys/kern/kern_shutdown.c:920
#4  0xffffffff80c1b9d3 in panic (fmt=&lt;unavailable&gt;) at /usr/src/sys/kern/kern_shutdown.c:844
#5  0xffffffff810afdf5 in trap_fatal (frame=0xfffffe011db43d90, eva=40) at /usr/src/sys/amd64/amd64/trap.c:944
#6  0xffffffff810afe4f in trap_pfault (frame=0xfffffe011db43d90, usermode=false, signo=&lt;optimized out&gt;, ucode=&lt;optimized out&gt;) at /usr/src/sys/amd64/amd64/trap.c:763
#7  &lt;signal handler called&gt;
#8  0xffffffff80d2cdc4 in if_alloc_domain (type=250 &apos;\372&apos;, numa_domain=&lt;optimized out&gt;) at /usr/src/sys/sys/sx.h:166
#9  0xffffffff82b0c7b7 in umb_attach_task () from /boot/modules/if_umb.ko
#10 0xffffffff80a36bd0 in usb_process (arg=arg@entry=0xfffff8012907d078) at /usr/src/sys/dev/usb/usb_process.c:178
#11 0xffffffff80bd8a9e in fork_exit (callout=0xffffffff80a36ad0 &lt;usb_process&gt;, arg=0xfffff8012907d078, frame=0xfffffe011db43f40) at /usr/src/sys/kern/kern_fork.c:1093
#12 &lt;signal handler called&gt;
#13 mi_startup () at /usr/src/sys/kern/init_main.c:322
#14 0x0000000000000000 in ?? ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233408</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Petter Selasky">hselasky</who>
    <bug_when>2022-10-29 18:10:50 +0000</bug_when>
    <thetext>Right, this driver is not in base yet, and needs a review. Please upload it for review first. Maybe the panic will be fixed.

--HPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242291</commentid>
    <comment_count>17</comment_count>
    <who name="">andrey.kiselev</who>
    <bug_when>2023-01-07 15:48:58 +0000</bug_when>
    <thetext>(In reply to hendrik from comment #14)
I can confirm panic on OPNSense 22.7.10_2 (OpenSSL). My module is LT4112 and panik happens when I put it into MBIM config. Here are some details:

umb0 on uhub2
umb0:  on usbus0
umb0: version 1.0


Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address	= 0x28
fault code		= supervisor read data, page not present
instruction pointer	= 0x20:0xffffffff80dbed44
stack pointer	        = 0x28:0xfffffe006abeae50
frame pointer	        = 0x28:0xfffffe006abeae80
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= 15 (umb0)
trap number		= 12
panic: page fault
cpuid = 0
time = 1673105862
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe006abeac10
vpanic() at vpanic+0x17f/frame 0xfffffe006abeac60
panic() at panic+0x43/frame 0xfffffe006abeacc0
trap_fatal() at trap_fatal+0x385/frame 0xfffffe006abead20
trap_pfault() at trap_pfault+0x4f/frame 0xfffffe006abead80
calltrap() at calltrap+0x8/frame 0xfffffe006abead80
--- trap 0xc, rip = 0xffffffff80dbed44, rsp = 0xfffffe006abeae50, rbp = 0xfffffe006abeae80 ---
if_alloc_domain() at if_alloc_domain+0xa4/frame 0xfffffe006abeae80
umb_attach_task() at umb_attach_task+0x37/frame 0xfffffe006abeaeb0
usb_process() at usb_process+0x100/frame 0xfffffe006abeaef0
fork_exit() at fork_exit+0x7e/frame 0xfffffe006abeaf30
fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe006abeaf30
--- trap 0xcb1bc018, rip = 0xffffffff80c313af, rsp = 0, rbp = 0xfffff8000355d200 ---
mi_startup() at mi_startup+0xdf/frame 0xfffff8000355d200
??() at 0/frame 0xfffff8000353c000
null_method() at null_method/frame 0xffffffff81b03fb0
bus_generic_new_pass() at bus_generic_new_pass/frame 0xffffffff81b03fa8
bus_new_pass_desc() at bus_new_pass_desc
KDB: enter: panic
panic.txt0600001214356310706  7136 ustarrootwheelpage faultversion.txt0600007414356310706  7541 ustarrootwheelFreeBSD 13.1-RELEASE-p5 stable/22.7-n250270-9d1c26e8548 SMP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284677</commentid>
    <comment_count>18</comment_count>
    <who name="Alexander Burke">alex-freebsd-bugs</who>
    <bug_when>2023-11-19 10:59:02 +0000</bug_when>
    <thetext>Has there been any movement on this that isn&apos;t reflected here? I have a Sierra EM7355 which I&apos;d be happy to tinker with on 14.0-RELEASE, if that would help, or I could ship a card to one of the developers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284695</commentid>
    <comment_count>19</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2023-11-19 13:29:35 +0000</bug_when>
    <thetext>(In reply to alex-freebsd-bugs from comment #18)

Not on my side recently, sorry. I still have in mind to make it work again though, any help appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292004</commentid>
    <comment_count>20</comment_count>
    <who name="Kurt Jaeger">pi</who>
    <bug_when>2024-01-13 18:01:42 +0000</bug_when>
    <thetext>(In reply to alex-freebsd-bugs from comment #18)
unfortunatly, hps died a few month ago, so the usb code in freebsd is
in need of a new care taker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292007</commentid>
    <comment_count>21</comment_count>
    <who name="Warner Losh">imp</who>
    <bug_when>2024-01-13 18:05:24 +0000</bug_when>
    <thetext>I&apos;ve added myself as a cc. Please try it on 14.0. If it works I&apos;ll review and commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292581</commentid>
    <comment_count>22</comment_count>
    <who name="Maurice Walker">maurice</who>
    <bug_when>2024-01-16 17:08:57 +0000</bug_when>
    <thetext>I&apos;ve tested this on FreeBSD 13.2-RELEASE-p7 with an Alcatel IK41VE. This modem is in permanent MBIM mode, no mode switch required. If it&apos;s already plugged in before power on, the kernel panics during boot. If it&apos;s not plugged in, the system boots normally. When the modem is then hot-plugged, the system crashes and reboots within seconds.

I have several of these LTE modems and would gladly send one to whomever wants to work on this.

Cheers
Maurice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307120</commentid>
    <comment_count>23</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-04-30 19:17:15 +0000</bug_when>
    <thetext>I have just published a branch for freebsd-src.git at https://github.com/khorben/freebsd-src/tree/khorben/umb, with the patch adapted for direct integration in this repository. I have only built-tested this code so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307122</commentid>
    <comment_count>24</comment_count>
      <attachid>250309</attachid>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-04-30 19:24:03 +0000</bug_when>
    <thetext>Created attachment 250309
0001-Introduce-the-USB-umb-4-network-driver.patch

The current diff for https://github.com/khorben/freebsd-src/tree/khorben/umb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313768</commentid>
    <comment_count>25</comment_count>
    <who name="Warner Losh">imp</who>
    <bug_when>2024-06-19 22:17:32 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #24)

This looks good....

I&apos;d like to commit this... I don&apos;t see a umb(4) man page in the latest set of attachments. Did I miss something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313775</commentid>
    <comment_count>26</comment_count>
      <attachid>251587</attachid>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-06-20 00:32:59 +0000</bug_when>
    <thetext>Created attachment 251587
0001-Introduce-the-USB-umb-4-network-driver.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313776</commentid>
    <comment_count>27</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-06-20 00:34:49 +0000</bug_when>
    <thetext>(In reply to Warner Losh from comment #25)
I am updating the patch, adding the manual page I had adapted for NetBSD. I haven&apos;t build-tested it yet for any missing steps for integration, and I am not yet familiar with possible differences for manual pages in FreeBSD compared to NetBSD.

Unfortunately in my latest tests, the driver still panics when attaching, and if I remember right it happens in if_mediainit() when initialising a list. (I do not have access to the hardware of to my notes at the moment, sorry)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317069</commentid>
    <comment_count>28</comment_count>
    <who name="Matt Latin">mlatin+fbsd</who>
    <bug_when>2024-07-18 14:08:00 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #27)
Pierre, I can provide access to a VM with a modem attached if that would help development.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317091</commentid>
    <comment_count>29</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-07-18 17:31:16 +0000</bug_when>
    <thetext>(In reply to Matt Latin from comment #28)
Thanks; I have working hardware now, but the driver crashes upon initialisation and I simply do not understand why. Any ideas welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317349</commentid>
    <comment_count>30</comment_count>
    <who name="Matt Latin">mlatin+fbsd</who>
    <bug_when>2024-07-20 14:56:01 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #29)
I&apos;ll do some testing on my end to see if I can potentially figure it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328750</commentid>
    <comment_count>31</comment_count>
    <who name="Mark Linimon">linimon</who>
    <bug_when>2024-10-08 04:51:13 +0000</bug_when>
    <thetext>^Triage: clear unneeded flags.  Nothing has yet been committed to be merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330717</commentid>
    <comment_count>32</comment_count>
    <who name="Zhenlei Huang">zlei</who>
    <bug_when>2024-10-20 14:54:52 +0000</bug_when>
    <thetext>`if_alloc()` never fails. All supported branches ( main, stable/14, stable/13 ) now have the same behavior. So no need to do NULL check any more.

```
	sc-&gt;sc_if = ifp = if_alloc(IFT_MBIM);
-	if (ifp == NULL) {
-		device_printf(sc-&gt;sc_dev, &quot;Could not allocate a network interface\n&quot;);
-		goto fail;
-	}
```

FYI https://reviews.freebsd.org/D45740 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333935</commentid>
    <comment_count>33</comment_count>
    <who name="Alexander Ziaee">ziaee</who>
    <bug_when>2024-11-07 19:07:35 +0000</bug_when>
    <thetext>If we juggle the Nd a bit in umbctl.8, we can get &quot;cellular modem&quot; in the description keeping the complete listing within a standard console line, which would allow for discoverability via &quot;apropos cellular&quot; or &quot;apropos modem&quot;.

Rendered:
&quot;umbctl(8) - display or set MBIM cellular modem interface parameters (4G/LTE)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334451</commentid>
    <comment_count>34</comment_count>
      <attachid>255103</attachid>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2024-11-11 17:33:23 +0000</bug_when>
    <thetext>Created attachment 255103
0001-Introduce-the-USB-umb-4-network-driver.patch

- Remove useless check for NULL in umb_attach_task()
- Update the title of umbctl(8) as suggested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334597</commentid>
    <comment_count>35</comment_count>
    <who name="Zhenlei Huang">zlei</who>
    <bug_when>2024-11-12 15:19:38 +0000</bug_when>
    <thetext>For the backtrace, 
&gt; Fatal trap 12: page fault while in kernel mode
&gt; cpuid = 2; apic id = 02
&gt; fault virtual address   = 0x28
...
&gt; if_alloc_domain() at if_alloc_domain+0xa4/frame 0xfffffe006abeae80
&gt; umb_attach_task() at umb_attach_task+0x37/frame 0xfffffe006abeaeb0
&gt; usb_process() at usb_process+0x100/frame 0xfffffe006abeaef0
&gt; fork_exit() at fork_exit+0x7e/frame 0xfffffe006abeaf30
&gt; fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe006abeaf30

A quick look at `usb_process()` and `umb_attach_task()`, I suspect that the vnet is not correctly set. With the option INVARIANTS or VNET_DEBUG on, the recent change [1] ( has been MFCed to stable/14 and stable/13 branches ) can easily spot that.

I do not have hardware to test. Can someone re-test the driver against latest main or stable branches ?

1. https://cgit.freebsd.org/src/commit/?id=d1d839d0b593541174ca48c675c9eff4ddb4715e</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334604</commentid>
    <comment_count>36</comment_count>
    <who name="Alexander Ziaee">ziaee</who>
    <bug_when>2024-11-12 16:06:17 +0000</bug_when>
    <thetext>I am willing to buy hardware to test this, what are the most recommended modules? I have a full size mPCIe slot, but I am willing to get adapters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335953</commentid>
    <comment_count>37</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2024-11-20 23:41:07 +0000</bug_when>
    <thetext>(In reply to Alexander Ziaee from comment #36)
My test hardware is the Sierra Wireless MC7304, but anything supporting the MBIM protocol should work and is in scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335955</commentid>
    <comment_count>38</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2024-11-21 00:12:33 +0000</bug_when>
    <thetext>I have Panasonic Toughbook CF-MX4 (can be purchased low price now) with Sierra Wireless EM7305 and can help testing :-)

I have another broken one maybe I could resurrect it for remote SSH access for development if anyone is interested :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335963</commentid>
    <comment_count>39</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2024-11-21 03:40:48 +0000</bug_when>
    <thetext>(In reply to Zhenlei Huang from comment #35)
Thanks for the hint about VNET, I have now added this to the code:

&gt; CURVNET_SET_QUIET(vnet0);

just before calling if_alloc(), and I get a different panic:

&gt; # umb0: version 1.0
&gt; panic: _mtx_lock_sleep: recursed on non-recursive mutex umb0 @ /home/khorben/Projects/FreeBSD/src/sys/dev/usb/net/if_umb.c:1022
&gt; 
&gt; cpuid = 2
&gt; time = 1732160066
&gt; KDB: stack backtrace:
&gt; db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00688e3ba0
&gt; vpanic() at vpanic+0x136/frame 0xfffffe00688e3cd0
&gt; panic() at panic+0x43/frame 0xfffffe00688e3d30
&gt; __mtx_lock_sleep() at __mtx_lock_sleep+0x482/frame 0xfffffe00688e3dc0
&gt; __mtx_lock_flags() at __mtx_lock_flags+0xd8/frame 0xfffffe00688e3e10
&gt; umb_newstate() at umb_newstate+0x11b/frame 0xfffffe00688e3e50
&gt; umb_get_response_task() at umb_get_response_task+0x3c/frame 0xfffffe00688e3ec0
&gt; usb_process() at usb_process+0xf0/frame 0xfffffe00688e3ef0
&gt; fork_exit() at fork_exit+0x82/frame 0xfffffe00688e3f30
&gt; fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00688e3f30
&gt; --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
&gt; KDB: enter: panic
&gt; [ thread pid 15 tid 100182 ]
&gt; Stopped at      kdb_enter+0x33: movq    $0,0x1057302(%rip)

I&apos;m investigating further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336029</commentid>
    <comment_count>40</comment_count>
    <who name="Zhenlei Huang">zlei</who>
    <bug_when>2024-11-21 15:35:11 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #39)

&gt; panic: _mtx_lock_sleep: recursed on non-recursive mutex

I&apos;m not sure if the following is proper for drivers, but you may give it a try,

```
static int
umb_attach(device_t dev)
{
...
- mtx_init(&amp;sc-&gt;sc_mutex, device_get_nameunit(dev), NULL, MTX_DEF);
+ mtx_init(&amp;sc-&gt;sc_mutex, device_get_nameunit(dev), NULL, MTX_DEF | MTX_RECURSE);
...
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336055</commentid>
    <comment_count>41</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2024-11-21 20:15:30 +0000</bug_when>
    <thetext>I think it was a matter of avoiding a sleep when holding a mutex, more than about the ability to lock the mutex recursively.

With this in mind, I have updated the working copy of the patch on GitHub at https://github.com/freebsd/freebsd-src/compare/main...khorben:freebsd-src:khorben/umb with a version that no longer crashes when attaching. (For me at least)

&gt; umb0 on uhub4
&gt; umb0: &lt;Sierra Wireless, Incorporated product 0x68c0, class 0/0, rev 2.00/0.06, addr 3&gt; on usbus2
&gt; umb0: version 1.0
&gt; umb0: bpf attached

Unfortunately I am not able to confirm that it works yet:

&gt; # ifconfig umb0
&gt; umb0: flags=1008811&lt;UP,POINTOPOINT,SIMPLEX,MULTICAST,LOWER_UP&gt; metric 0 mtu 1500
&gt;         options=0
&gt;         media: &lt;unknown type&gt;
&gt;         status: 
&gt;         nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;
&gt; # umbctl umb0
&gt; umb0: state down, mode unknown, registration unknown
&gt;         provider &quot;&quot;, dataclass none, signal #-999
&gt;         phone number &quot;&quot;, roaming &quot;&quot; (denied)
&gt;         APN &quot;&quot;, TX 0, RX 0
&gt;         firmware &quot;&quot;, hardware &quot;&quot;

This is after entering the pin code with &quot;umbctl umb0 pin 1234&quot; as per usual, with no success so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338697</commentid>
    <comment_count>42</comment_count>
      <attachid>255765</attachid>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-10 23:55:32 +0000</bug_when>
    <thetext>Created attachment 255765
0001-Introduce-the-USB-umb-4-network-driver.patch

After reviewing the whole driver for the proper use of mutexes, this no longer crashes for me. I do not have a valid spare physical SIM at the moment to complete my tests; can someone confirm if this works?

What I get at the moment:

# ifconfig umb0
umb0: flags=1008811&lt;UP,POINTOPOINT,SIMPLEX,MULTICAST,LOWER_UP&gt; metric 0 mtu 1500
        options=0
        media: &lt;unknown type&gt;
        status: 
        nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;
umb0: state radio on, mode automatic, registration not registered
        provider &quot;&quot;, dataclass GPRS, signal #-999
        phone number &quot;&quot;, roaming &quot;&quot; (allowed)
        APN &quot;internet.t-mobile&quot;, TX 0, RX 0
        firmware &quot;SWI9X15C_05.05.58.00&quot;, hardware &quot;MC7304&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338765</commentid>
    <comment_count>43</comment_count>
    <who name="">mike</who>
    <bug_when>2024-12-11 17:42:36 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #42)
Do you know what the AT+ command is to put the modem in that mode ? I have a number of Sierra Wireless units here I can test with (7354,7700,7455)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338779</commentid>
    <comment_count>44</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-11 18:26:17 +0000</bug_when>
    <thetext>(In reply to mike from comment #43)
I would try the following:

ATV1
OK
AT!ENTERCND=&quot;A710&quot;
OK
AT!UDUSBCOMP=?

The &quot;!ENTERCND&quot; command is necessary only once, in order to enable the password-protected commands.

The latter command is the one allowing switching modes.
It has provided me with this output on my MC7304:

0  - reserved                                     NOT SUPPORTED
1  - DM   AT                                      SUPPORTED
2  - reserved                                     NOT SUPPORTED
3  - reserved                                     NOT SUPPORTED
4  - reserved                                     NOT SUPPORTED
5  - reserved                                     NOT SUPPORTED
6  - DM   NMEA  AT    QMI                         SUPPORTED
7  - DM   NMEA  AT    RMNET1 RMNET2 RMNET3        SUPPORTED
8  - DM   NMEA  AT    MBIM                        SUPPORTED
9  - MBIM                                         SUPPORTED
10 - NMEA MBIM                                    SUPPORTED
11 - DM   MBIM                                    SUPPORTED
12 - DM   NMEA  MBIM                              SUPPORTED
13 - Config1: comp6    Config2: comp8             NOT SUPPORTED
14 - Config1: comp6    Config2: comp9             SUPPORTED
15 - Config1: comp6    Config2: comp10            NOT SUPPORTED
16 - Config1: comp6    Config2: comp11            NOT SUPPORTED
17 - Config1: comp6    Config2: comp12            NOT SUPPORTED
18 - Config1: comp7    Config2: comp8             NOT SUPPORTED
19 - Config1: comp7    Config2: comp9             SUPPORTED
20 - Config1: comp7    Config2: comp10            NOT SUPPORTED
21 - Config1: comp7    Config2: comp11            NOT SUPPORTED
22 - Config1: comp7    Config2: comp12            NOT SUPPORTED

You can then choose a mode depending on your device and your wishes.

Here I am using mode 8 from this list:

AT!UDUSBCOMP?
!UDUSBCOMP: 8

OK

You can obtain lots of information from this vendor at https://source.sierrawireless.com/resources/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338788</commentid>
    <comment_count>45</comment_count>
    <who name="">mike</who>
    <bug_when>2024-12-11 19:01:42 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #44)
thanks looks like the mc7700 I have doesnt support that mode :(

ati
Manufacturer: Sierra Wireless, Incorporated
Model: MC7700
Revision: SWI9200X_03.05.10.02AP R4684 CARMD-EN-10527 2012/02/25 11:58:38
IMEI: 012626001657426
IMEI SV: 8
FSN: CDC0684044310
3GPP Release 8
+GCAP: +CGSM


OK
AT!ENTERCND=&quot;A710&quot;
OK
AT!UDUSBCOMP=?
0 - HIP  DM    NMEA  AT    MDM1  MDM2  MDM3  MS  SUPPORTED
1 - HIP  DM    NMEA  AT    MDM1  MS              NOT SUPPORTED
2 - HIP  DM    NMEA  AT    NIC1  MS              SUPPORTED
3 - HIP  DM    NMEA  AT    MDM1  NIC1  MS        SUPPORTED
4 - HIP  DM    NMEA  AT    NIC1  NIC2  NIC3  MS  SUPPORTED
5 - HIP  DM    NMEA  AT    ECM1  MS              SUPPORTED
6 - DM   NMEA  AT    QMI                         NOT SUPPORTED
7 - DM   NMEA  AT    RMNET1 RMNET2 RMNET3        NOT SUPPORTED
8 - Win8 Std Net                                 NOT SUPPORTED

On the MC7455, it looks like the command is AT!USBCOMP=?

AT!USBCOMP?
Config Index: 1
Config Type:  1 (Generic)
Interface bitmask: 0000050D (diag,nmea,modem,rmnet0,rmnet1) 

OK
AT!UDUSBCOMP=?
Obsolete command - not supported
AT!USBCOMP=?
!USBCOMP: 
AT!USBCOMP=&lt;Config Index&gt;,&lt;Config Type&gt;,&lt;Interface bitmask&gt;
  &lt;Config Index&gt;      - configuration index to which the composition applies, should be 1

  &lt;Config Type&gt;       - 1:Generic, 2:USBIF-MBIM, 3:RNDIS
                        config type 2/3 should only be used for specific Sierra PIDs: 68B1, 9068
                        customized VID/PID should use config type 1

  &lt;Interface bitmask&gt; - DIAG     - 0x00000001,
                        NMEA     - 0x00000004,
                        MODEM    - 0x00000008,
                        RMNET0   - 0x00000100,
                        RMNET1   - 0x00000400,
                        MBIM     - 0x00001000,
  e.g.
  10D  - diag, nmea, modem, rmnet interfaces enabled
  1009 - diag, modem, mbim interfaces enabled

  The default configuration is:
  at!usbcomp=1,1,10F

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338814</commentid>
    <comment_count>46</comment_count>
    <who name="">mike</who>
    <bug_when>2024-12-11 22:02:08 +0000</bug_when>
    <thetext>Some progress. I can kld it, but it panics. 
 - - - Fatal trap 12: page fault while in 
 - - - cpuid = 1; apic id = 02
 - - - fault virtual address    = 0x28
 - - - fault code               = supervisor read data, page not present
 - - - instruction pointer      = 0x20:0xffffffff80ceee03
 - - - stack pointer            = 0x28:0xfffffe00acc30cd0
 - - - frame pointer            = 0x28:0xfffffe00acc30d60
 - - - code segment             = base 0x0, limit 0xfffff, type 0x1b
 - - -                  = DPL 0, pres 1, long 1, def32 0, gran 1
 - - - processor eflags = interrupt enabled, resume, IOPL = 0
 - - - current process          = 15 (umb0)
 - - - rdi: fffff8010e85b480 rsi: 0000000000000000 rdx: fffffe00acc30d98
 - - - rcx: 0000000000000000  r8: fffff8010e42e000  r9: fffff8010e85b480
 - - - rax: fffff8010e85b508 rbx: fffff8010974f800 rbp: fffffe00acc30d60
 - - - r10: 0000000000000000 r11: 000000007ffb251d r12: fffff8010e85b510
 - - - r13: fffff8010e85b530 r14: fffff8010974f9c0 r15: fffff8010e42e000
 - - - trap number              = 12
 - - - panic: page fault
 - - - cpuid = 1
 - - - time = 1733954200
 - - - KDB: stack backtrace:
 - - - #0 0xffffffff80b8d16d at kdb_backtrace+0x5d
 - - - #1 0xffffffff80b3f151 at vpanic+0x161
 - - - #2 0xffffffff80b3efe3 at panic+0x43
 - - - #3 0xffffffff8102ca7b at trap_fatal+0x40b
 - - - #4 0xffffffff8102cac6 at trap_pfault+0x46
 - - - #5 0xffffffff810035b8 at calltrap+0x8
 - - - #6 0xffffffff8316b942 at umb_add_inet_config+0x142
 - - - #7 0xffffffff8316b209 at umb_decode_cid+0x8b9
 - - - #8 0xffffffff83169596 at umb_get_response_task+0x386
 - - - #9 0xffffffff8094d45e at usb_process+0xfe
 - - - #10 0xffffffff80af8311 at fork_exit+0x81


I did a load of the kld

umbctl umb0
umb0: state open, mode automatic, registration home network
        provider &quot;ROGERS&quot;, dataclass GPRS, signal #-999
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;&quot;, TX 0, RX 0
        firmware &quot;SWI9X30C_02.20.03.00&quot;, hardware &quot;MC7455&quot;


 cu -l /dev/cuaU0.1
Connected
at+csq
+csq: 21,99

OK
at!GSTATUS?
!GSTATUS: 
Current Time:  10083            Temperature: 46
Reset Counter: 4                Mode:        ONLINE         
System mode:   LTE              PS state:    Attached     
LTE band:      B4               LTE bw:      15 MHz  
LTE Rx chan:   2025             LTE Tx chan: 20025
LTE CA state:  NOT ASSIGNED
EMM state:     Registered       Normal Service 
RRC state:     RRC Idle       
IMS reg state: No Srv  

PCC RxM RSSI:  -70              RSRP (dBm):  -105
PCC RxD RSSI:  -95              RSRP (dBm):  -138
Tx Power:      0                TAC:         73D2 (29650)
RSRQ (dB):     -16.2            Cell ID:     009D0101 (10289409)
SINR (dB):     -2.8


OK

# ifconfig umb0
umb0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; metric 0 mtu 2048
        options=0
        media: &lt;unknown type&gt;
        status: 
        nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;
# umbctl umb0 apn m2minternet.apn
# ifconfig umb0 up

and then panic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338831</commentid>
    <comment_count>47</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-12 01:05:55 +0000</bug_when>
    <thetext>(In reply to mike from comment #46)
Thanks for testing!
It is progress indeed. For the moment I do not see what can cause the panic (maybe related to VNET again?) but I will let you know as soon as I figure anything out on my side.

In the meantime you can try to add this in the code:

 static int
 umb_add_inet_config
 {
 [...]
 mtx_unlock(&amp;sc-&gt;sc_mutex);
+CURVNET_SET_QUIET(vnet0);
 rv = in_control(NULL, SIOCAIFADDR, (caddr_t)&amp;ifra, ifp, curthread);
+CURVNET_RESTORE();
 mtx_lock(&amp;sc-&gt;sc_mutex);
 [...]
 }

If this solves the problem, I suspect there will be another panic when the link goes up and down; basically for the other two calls of in_control(). The same procedure will apply.

Let me know if you would like me to provide a tentative patch instead.

HTH,
-- khorben</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338895</commentid>
    <comment_count>48</comment_count>
    <who name="">mike</who>
    <bug_when>2024-12-12 14:30:10 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #47)

 
# umbctl umb0 apn m2minternet.apn
# umbctl umb0 
umb0: state open, mode automatic, registration home network
        provider &quot;ROGERS&quot;, dataclass GPRS, signal #-999
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;m2minternet.apn&quot;, TX 0, RX 0
        firmware &quot;SWI9X30C_02.20.03.00&quot;, hardware &quot;MC7455&quot;

# ifconfig umb0 up
umb0: state up, mode automatic, registration home network
        provider &quot;ROGERS&quot;, dataclass GPRS, signal #-999
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;m2minternet.apn&quot;, TX 50000000, RX 300000000
        firmware &quot;SWI9X30C_02.20.03.00&quot;, hardware &quot;MC7455&quot;

# ifconfig umb0 
umb0: flags=1008851&lt;UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST,LOWER_UP&gt; metric 0 mtu 1460
        options=0
        inet 10.155.111.104 --&gt; 10.155.111.105 netmask 0xfffffff0
        media: &lt;unknown type&gt;
        status: 
        nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;

# route add 8.8.8.8/32 10.155.111.105
add net 8.8.8.8: gateway 10.155.111.105

# ping 8.8.8.8


 Fatal trap 12: page fault while in kernel mode
 cpuid = 3; apic id = 06
 fault virtual address  = 0x28
 fault code             = supervisor read data, page not present
 instruction pointer    = 0x20:0xffffffff80c85434
 stack pointer          = 0x28:0xfffffe00834dfd40
 frame pointer          = 0x28:0xfffffe00834dfd80
 code segment           = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
 processor eflags       = interrupt enabled, resume, IOPL = 0
 current process                = 15 (usbus0)
 rdi: 0000000000000001 rsi: 0000000000000000 rdx: fffff80059ab0b00
 rcx: 0000000000000000  r8: 0000000000000800  r9: 0000000000000000
 rax: 0000000000000000 rbx: fffff80001a80000 rbp: fffffe00834dfd80
 r10: 0000000000000800 r11: 0000000000000000 r12: 0000000000000001
 r13: fffffe00834dfe00 r14: fffff80059ab0b00 r15: 0000000000000000
 trap number            = 12
 panic: page fault
 cpuid = 3
 time = 1734013310
 KDB: stack backtrace:
 #0 0xffffffff80b8d16d at kdb_backtrace+0x5d
 #1 0xffffffff80b3f151 at vpanic+0x161
 #2 0xffffffff80b3efe3 at panic+0x43
 #3 0xffffffff8102ca7b at trap_fatal+0x40b
 #4 0xffffffff8102cac6 at trap_pfault+0x46
 #5 0xffffffff810035b8 at calltrap+0x8
 #6 0xffffffff8316c0b4 at umb_input+0x44
 #7 0xffffffff83168edf at umb_rxeof+0x44f
 #8 0xffffffff80952626 at usbd_callback_wrapper+0x8a6
 #9 0xffffffff80953c76 at usb_command_wrapper+0x96
 #10 0xffffffff809528d9 at usb_callback_proc+0xb9
 #11 0xffffffff8094d45e at usb_process+0xfe
 #12 0xffffffff80af8311 at fork_exit+0x81</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338908</commentid>
    <comment_count>49</comment_count>
      <attachid>255811</attachid>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-12 17:48:31 +0000</bug_when>
    <thetext>Created attachment 255811
0001-Introduce-the-USB-umb-4-network-driver.patch

(In reply to mike from comment #48)
I suppose the same applies to handling incoming packets, which means adding CURVNET_SET_QUIET(vnet0);/CURVNET_RESTORE(); around ifp-&gt;if_input(ifp, m); as per the updated patch. (Right after/before unlocking/locking)

Note that in the meantime I have started looking at how to reflect the media in ifconfig(8) (e.g., GPRS/EDGE/LTE...) which explains the presence of new changes in sys/net/if_media.* and lib/libifconfig; this bit is in progress, you can ignore it for now. (It should not harm anything either way)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339313</commentid>
    <comment_count>50</comment_count>
    <who name="Helder Filho">hnov19</who>
    <bug_when>2024-12-15 17:57:02 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #49)

Hello! I compiled the UMB(4) and UMBCTL(8) modules for my pfSense RELENG_2_7_0, which is based on FreeBSD 14.0-CURRENT. I confirm that the module almost worked with my Sierra MC7355. My Sierra is recognized as the interface umb0, and I can set the APN and list it:

[2.7.0-RELEASE][admin@router.home]/root: ./umbctl umb0
umb0: state open, mode automatic, registration home network
        provider &quot;Oi&quot;, dataclass GPRS, signal #99
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;&quot;, TX 5742000, RX 42200000
        firmware &quot;SWI9X15C_05.05.58.00&quot;, hardware &quot;MC7355&quot;
[2.7.0-RELEASE][admin@router.home]/root: ./umbctl umb0 apn claro.com.br
[2.7.0-RELEASE][admin@router.home]/root: ./umbctl umb0
umb0: state open, mode automatic, registration home network
        provider &quot;Oi&quot;, dataclass GPRS, signal #99
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;claro.com.br&quot;, TX 5742000, RX 42200000
        firmware &quot;SWI9X15C_05.05.58.00&quot;, hardware &quot;MC7355&quot;
[2.7.0-RELEASE][admin@router.home]/root: ifconfig umb0 up
[2.7.0-RELEASE][admin@router.home]/root: ./umbctl umb0
umb0: state attached, mode automatic, registration home network
        provider &quot;Oi&quot;, dataclass GPRS, signal #99
        phone number &quot;XXXXXXXXXXXXX&quot;, roaming &quot;&quot; (denied)
        APN &quot;claro.com.br&quot;, TX 5742000, RX 42200000
        firmware &quot;SWI9X15C_05.05.58.00&quot;, hardware &quot;MC7355&quot;

I confirmed via AT commands that the APN I set using umbctl is reflected on the Sierra.

However, when I try to check the IP of the umb0 interface, it is empty:

[2.7.0-RELEASE][admin@router.home]/root: ifconfig umb0
umb0: flags=8811&lt;UP,POINTOPOINT,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
        media: &lt;unknown type&gt;
        status: 
        nd6 options=21&lt;PERFORMNUD,AUTO_LINKLOCAL&gt;

As a result, when I try to use the interface, it fails:

[2.7.0-RELEASE][admin@router.home]/root: curl --interface umb0 http://ipecho.net/plain
curl: (7) Failed to connect to ipecho.net port 80 after 1048 ms: Couldn&apos;t connect to server

I compiled the module on a virtual machine using the patch sent by Pierre Pronchery on 2024-12-12 17:48:31 UTC, and then copied the umbctl files to /sbin and umb.ko to /boot/modules on my pfSense router. Did I do something wrong? Should I have copied other files? I would appreciate any help.

I would like to note that when I connect to the Sierra using the PPP protocol on my pfSense, the connection works without issues. I would like to use MBIM to see if I can achieve better performance.

Additionally, I noticed that umbctl is recognizing my dataclass as GPRS; however, when I use the command AT!GSTATUS?, I confirm that I am actually connected to a WCDMA network. I&apos;m not sure if this could be causing the issue of not receiving an IP address on the umb0 interface.

Thank you all for your efforts on this port!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339375</commentid>
    <comment_count>51</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-16 02:29:11 +0000</bug_when>
    <thetext>(In reply to Helder Filho from comment #50)
Hi Helder, thank you for testing the driver, and for your detailed feedback!

There are still some known issues affecting the driver, even on the latest version of FreeBSD. With the latest version (which I usually push in the khorben/umb branch at https://github.com/khorben/freebsd-src/tree/khorben/umb) the driver is capable of obtaining an IP address, but crashes with the first packet sent or received.

I ported the driver back in 2019-2020 with OPNSense as the target, where it worked just fine for me; it was not affected by the current issues with VNET or mutexes (or at least it was not crashing, even though some bugs were certainly there). This might have been because of some differences between FreeBSD and pfSense/OPNSense. You might also have run into an incompatibility between pfSense and the VM; it is difficult to evaluate from here, even with your detailed output.

I am currently getting help for testing the driver in different situations (thanks!) and hope to be able to make further progress soon. I will update this bug report as soon as I make any significant update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339671</commentid>
    <comment_count>52</comment_count>
      <attachid>255918</attachid>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-17 16:18:33 +0000</bug_when>
    <thetext>Created attachment 255918
0001-Introduce-the-USB-umb-4-network-driver.patch

This patch is known to have worked in a test environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340143</commentid>
    <comment_count>53</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2024-12-21 02:11:43 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #52)
A slightly simplified version of this patch is now available for review at https://reviews.freebsd.org/D48167.
Let me know if I can add you as reviewer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345066</commentid>
    <comment_count>54</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-01-20 23:48:21 +0000</bug_when>
    <thetext>A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=e5f3620a3e12c0febab7e4125da526c59a5a195b

commit e5f3620a3e12c0febab7e4125da526c59a5a195b
Author:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
AuthorDate: 2025-01-20 23:44:03 +0000
Commit:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
CommitDate: 2025-01-20 23:44:03 +0000

    sys: add MBM device ioctl() values

    This is part of the upcoming USB umb(4) work.  It implements the control
    ioctl(4)s that MBM devices will need to implement.

    Differential Revision:  https://reviews.freebsd.org/D48167
    Approved by:    adrian, zlei
    Sponsored by:   FreeBSD Foundation
    PR:             kern/263783
    Submitted by:   Pierre Pronchery &lt;khorben@defora.org&gt;

 sys/sys/sockio.h | 4 ++++
 1 file changed, 4 insertions(+)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345067</commentid>
    <comment_count>55</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-01-20 23:48:29 +0000</bug_when>
    <thetext>A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=86bfbaf1002c88b5c1a6d3ed261becedb533490b

commit 86bfbaf1002c88b5c1a6d3ed261becedb533490b
Author:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
AuthorDate: 2025-01-20 23:39:17 +0000
Commit:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
CommitDate: 2025-01-20 23:39:17 +0000

    sys: add MBIM (mobile broadband interface module) interface type.

    This is part of the upcoming USB umb(4) work.

    Differential Revision:  https://reviews.freebsd.org/D48167
    Approved by:    adrian, zlei
    Sponsored by:   FreeBSD Foundation
    PR:             kern/263783
    Submitted by:   Pierre Pronchery &lt;khorben@defora.org&gt;

 sys/net/if_types.h | 1 +
 1 file changed, 1 insertion(+)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345068</commentid>
    <comment_count>56</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-01-20 23:48:32 +0000</bug_when>
    <thetext>A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=0f1bf1c22a0c97e84a4db19197a75952487aa20b

commit 0f1bf1c22a0c97e84a4db19197a75952487aa20b
Author:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
AuthorDate: 2025-01-20 23:46:15 +0000
Commit:     Adrian Chadd &lt;adrian@FreeBSD.org&gt;
CommitDate: 2025-01-20 23:46:15 +0000

    umb: Introduce the USB umb(4) network driver

    This includes the port of a driver originally from OpenBSD, later
    ported to NetBSD by the author:

    * The umb(4) kernel driver
    * The umbctl(8) companion tool

    This driver supports USB network devices implementing the
    Mobile Broadband Interface Model (MBIM), often found in modern
    (internal) USB models for 4G/LTE mobile broadband access.

    It is currently limited to IPv4.

    umbctl has to be used to display or set MBIM cellular modem
    interface parameters (4G/LTE).

    Differential Revision:  https://reviews.freebsd.org/D48167
    Approved by:    adrian, zlei
    Sponsored by:   FreeBSD Foundation
    PR:             kern/263783
    Submitted by:   Pierre Pronchery &lt;khorben@defora.org&gt;

 sbin/Makefile                      |    1 +
 sbin/umbctl/Makefile (new)         |    8 +
 sbin/umbctl/umbctl.8 (new)         |  161 ++
 sbin/umbctl/umbctl.c (new)         |  557 +++++++
 share/man/man4/Makefile            |    1 +
 share/man/man4/umb.4 (new)         |  119 ++
 sys/conf/files                     |    1 +
 sys/dev/usb/net/if_umb.c (new)     | 2930 ++++++++++++++++++++++++++++++++++++
 sys/dev/usb/net/if_umbreg.h (new)  |  443 ++++++
 sys/dev/usb/net/mbim.h (new)       |  727 +++++++++
 sys/modules/usb/Makefile           |    2 +-
 sys/modules/usb/umb/Makefile (new) |   33 +
 12 files changed, 4982 insertions(+), 1 deletion(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345218</commentid>
    <comment_count>57</comment_count>
    <who name="Pierre Pronchery">pierre</who>
    <bug_when>2025-01-21 19:19:58 +0000</bug_when>
    <thetext>Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345221</commentid>
    <comment_count>58</comment_count>
    <who name="">mike</who>
    <bug_when>2025-01-21 20:12:24 +0000</bug_when>
    <thetext>Fantastic to see it in the tree. I am guessing this will eventually be MFC&apos;d to 14?  Also, Pierre do you or any of the FreeBSD folks still need the test box in our server room ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345232</commentid>
    <comment_count>59</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2025-01-21 22:17:41 +0000</bug_when>
    <thetext>(In reply to mike from comment #58)
Hi Mike, thank you again for the access to your hardware!

So far I made no plan to MFC to -14, however I believe the changes should apply cleanly and work without much effort.
Should we investigate this?

I expect to have access to my own hardware again within two weeks; it would be great to be able to use your setup in the meantime in case anyone finds an issue, but I do not want to be in the way of your own plans!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345238</commentid>
    <comment_count>60</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-01-21 22:25:03 +0000</bug_when>
    <thetext>I have some Panasonic Toughbook laptops with Sierra modems ans 14.1/14.2 RELEASE.. it would be great to test the driver code and have that modem up and running if not a big problem.. thank you!! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345373</commentid>
    <comment_count>61</comment_count>
    <who name="">mike</who>
    <bug_when>2025-01-22 13:30:52 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #59)
Hi Pierre,
Happy to leave it on the rack for now. I might just power it down via IPMI so it does not use electricity and cooling needlessly. Feel free to power it up as needed to test against.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345635</commentid>
    <comment_count>62</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2025-01-23 20:13:16 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #60)
Can you test the branch at https://github.com/khorben/freebsd-src/commits/khorben/umb-14/?
It built cleanly for me, but I haven&apos;t tested it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345791</commentid>
    <comment_count>63</comment_count>
    <who name="ev">evfbsd</who>
    <bug_when>2025-01-24 17:16:00 +0000</bug_when>
    <thetext>Is it planned to transfer the settings from umbctl to ifconfig (and expand them) in the future? It would be very convenient.

Is it possible to expand the diagnostic parameters issued by ifconfig? Or are these limitations of such a connection via a driver?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345792</commentid>
    <comment_count>64</comment_count>
    <who name="Alexander Ziaee">ziaee</who>
    <bug_when>2025-01-24 17:21:29 +0000</bug_when>
    <thetext>(In reply to ev from comment #63)
That would be extremely elegant and consistent!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348134</commentid>
    <comment_count>65</comment_count>
    <who name="Matt Latin">mlatin+fbsd</who>
    <bug_when>2025-02-05 02:57:47 +0000</bug_when>
    <thetext>Sorry it&apos;s taken me so long to get to testing this. I&apos;m using the current khorben/umb-14 repo, but I&apos;m getting the below error on my MC7700:

umb0 on uhub0
umb0: &lt;Sierra Wireless, Incorporated MC7700, class 239/2, rev 2.00/0.06, addr 1&gt; on usbus1
umb0: version 1.0
umb0: error: no data interface found
device_attach: umb0 attach returned 6

I&apos;m currently using UDUSBCOMP 8, which should have an AT interface, but I don&apos;t seem to have any cuaUXXX devices, so I&apos;m guessing that&apos;s where the issue is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348181</commentid>
    <comment_count>66</comment_count>
    <who name="Matt Latin">mlatin+fbsd</who>
    <bug_when>2025-02-05 12:41:15 +0000</bug_when>
    <thetext>(In reply to Matt Latin from comment #65)

After some more investigation, somehow it&apos;s not finding the CDC interface as that stays at -1.

ud = usbd_find_descriptor(sc-&gt;sc_udev, id, uaa-&gt;info.bIfaceIndex,
		UDESC_CS_INTERFACE, 0xff, UDESCSUB_CDC_UNION, 0xff);
if (ud != NULL) {
	data_ifaceno = ud-&gt;bSlaveInterface[0];
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376768</commentid>
    <comment_count>67</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-08-04 11:00:57 +0000</bug_when>
    <thetext>I know this PR is closed but I don&apos;t know where to go... :-)

I have copied the relevant bits from -CURRENT to 14-STABLE. The good news
is that it works using a Sierra EM7455 in MBIM mode. But one must have

device netmap

in the kernel. Without it you don&apos;t get packets back when pinging 8.8.8.8.
With UMB_DEBUG enabled, we find:

Aug 4 12:27:14 kernel: init: reached state UP
Aug 4 12:27:14 kernel: umb_rxeof(0): state=0
Aug 4 12:27:14 kernel: umb0: link state changed to UP
Aug 4 12:27:15 kernel: umb_txeof(0) state=0
Aug 4 12:27:15 kernel: umb_txeof(0) state=1
Aug 4 12:27:15 kernel: umb_rxeof(0): state=1
Aug 4 12:27:15 kernel: received 112 bytes in 1 frames
Aug 4 12:27:16 kernel: umb_txeof(0) state=0
Aug 4 12:27:16 kernel: umb_txeof(0) state=1
Aug 4 12:27:16 kernel: umb_rxeof(0): state=1
Aug 4 12:27:16 kernel: received 112 bytes in 1 frames

I can&apos;t test what happens in -CURRENT w/o netmap...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376839</commentid>
    <comment_count>68</comment_count>
    <who name="Pierre Pronchery">khorben</who>
    <bug_when>2025-08-04 22:33:39 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #67)
Hi Andre,
Wow thank you for the tip, I have been trying to make umb(4) work on 14.x for quite a while, without being able to understand why I did not get any traffic, while everything looked like it should just work.
I should be able to test this again within a couple weeks, and request a MFC for the next major release.
I also need to review and import some patches from upstream for good measure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376929</commentid>
    <comment_count>69</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-08-05 13:34:38 +0000</bug_when>
    <thetext>(In reply to Pierre Pronchery from comment #68)
Just wondering: Did it work for you on -CURRENT but w/o &quot;device netmap&quot;?

I spent a few minutes poking around in the kernel sources to find out what other drivers do differently when (not) using netmap -- hoping to find what&apos;s missing but got lost...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378975</commentid>
    <comment_count>70</comment_count>
    <who name="Alexander Ziaee">ziaee</who>
    <bug_when>2025-08-21 12:40:02 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #69)

Device netmap became included by default in GENERIC kernels in FreeBSD 15.0 for amd64,arm64, and ppc64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378981</commentid>
    <comment_count>71</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-08-21 13:56:42 +0000</bug_when>
    <thetext>(In reply to Alexander Ziaee from comment #70)
As I don&apos;t run -current, I have to ask:

Does umb depend on netmap? If yes, will someone who compiles a custom kernel with umb but w/o netmap receive an error? How about loading it as a module? Does it complain if netmap is not available?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378988</commentid>
    <comment_count>72</comment_count>
      <attachid>263112</attachid>
    <who name="Zhenlei Huang">zlei</who>
    <bug_when>2025-08-21 14:55:55 +0000</bug_when>
    <thetext>Created attachment 263112
umb_no_netmap

(In reply to Andre Albsmeier from comment #71)
I&apos;d argue umb(4) should not depend on netmap. Can you please have a try with this patch ? You can disable netmap in kernel config, or you may test against stable/14, without netmap, surely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379113</commentid>
    <comment_count>73</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-08-22 19:47:22 +0000</bug_when>
    <thetext>(In reply to Zhenlei Huang from comment #72)

Commented out the lines mentioned in your patch and now it works on STABLE-14 without netmap. Thanks a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380901</commentid>
    <comment_count>74</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-09-03 17:20:37 +0000</bug_when>
    <thetext>A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=e921d2842ee8ca9e3dae8952e1cf2645cee785aa

commit e921d2842ee8ca9e3dae8952e1cf2645cee785aa
Author:     Zhenlei Huang &lt;zlei@FreeBSD.org&gt;
AuthorDate: 2025-09-03 17:19:37 +0000
Commit:     Zhenlei Huang &lt;zlei@FreeBSD.org&gt;
CommitDate: 2025-09-03 17:19:37 +0000

    umb: Fix setting the input routine

    This driver does not depend on netmap, and umb_input() works greatly
    without netmap.

    Remove the #ifdef DEV_NETMAP so that when &quot;device netmap&quot; is not
    configured this driver can still correctly pass the inbound packets to
    the net stack. Otherwise the input routine will be if_input_default()
    which will silently drop all inbound packets.

    PR:             263783
    Reported by:    Andre Albsmeier &lt;mail@fbsd2.e4m.org&gt;
    Tested by:      Andre Albsmeier &lt;mail@fbsd2.e4m.org&gt;
    Differential Revision:  https://reviews.freebsd.org/D52182

 sys/dev/usb/net/if_umb.c | 4 ----
 1 file changed, 4 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380915</commentid>
    <comment_count>75</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-09-03 19:00:07 +0000</bug_when>
    <thetext>A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=80ab8a4beeb812adfbf1cb823ab7476d4a17659a

commit 80ab8a4beeb812adfbf1cb823ab7476d4a17659a
Author:     Alexander Ziaee &lt;ziaee@FreeBSD.org&gt;
AuthorDate: 2025-09-03 18:50:58 +0000
Commit:     Alexander Ziaee &lt;ziaee@FreeBSD.org&gt;
CommitDate: 2025-09-03 18:59:00 +0000

    umb.4: Remove device netmap from synopsis

    This driver was recently improved to no longer require DEV_NETMAP.

    PR:             263783
    Reported by:    zlei
    Fixes:          e921d2842ee8 (umb: Fix setting the input routine)

 share/man/man4/umb.4 | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380979</commentid>
    <comment_count>76</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-04 06:20:20 +0000</bug_when>
    <thetext>Thanks.

I think a lot of people would be happy if umb was merged into STABLE-14. This shouldn&apos;t be a lot of work since all I did was copying the files over and, apart from that netdev issue which is now resolved, it worked out of the box...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381088</commentid>
    <comment_count>77</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-04 15:03:08 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #76)

+1 pretty please :-) I am on 14.2 and would love to use the driver on my Panasonic Toughbook(s) :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381090</commentid>
    <comment_count>78</comment_count>
    <who name="Ed Maste">emaste</who>
    <bug_when>2025-09-04 15:08:45 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #76)
The MFC is straightforward so I expect to take care of it in a bit. I can give you a staged stable/14 branch to try if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381104</commentid>
    <comment_count>79</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-04 16:51:16 +0000</bug_when>
    <thetext>That would be great! Thank you Ed :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381123</commentid>
    <comment_count>80</comment_count>
    <who name="Ed Maste">emaste</who>
    <bug_when>2025-09-04 18:11:21 +0000</bug_when>
    <thetext>MFC available in the &quot;stable-14-umb&quot; branch in my GitHub repo: https://github.com/emaste/freebsd/tree/stable-14-umb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381126</commentid>
    <comment_count>81</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-04 18:25:36 +0000</bug_when>
    <thetext>TANK U SIR! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381593</commentid>
    <comment_count>82</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-07 16:58:41 +0000</bug_when>
    <thetext>I have good feedback :-) Writing this from 14.2-p5 on Panasonic Toughbook CF-MX4 over buit-in USB MBIM modem, I am on a trip this weekend so I had a few moments in a train to build and test in real world environment :-) :-) BIG THANK YOU!! :-)

Thank you Ed for the testing branch, looks like it is targeted towards 14.3 so I had to add few defines to build on 14.2 but it works :-)

I also created simple /etc/rc.d/umbim script that brings up the connection on boot. This is just an example that works. Can be extended with verification if the provided interface works, maybe also implement several interfaces and configurations per interface if necessary :-)

# uname -a
FreeBSD cfmx4 14.2-RELEASE-p5 FreeBSD 14.2-RELEASE-p5 #4 releng/14.2-n269542-a14e765aa11a-dirty: Sat Sep  6 09:49:09 CEST 2025     root@cfmx4:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64

# umbctl umb0
umb0: state up, mode automatic, registration home network
        provider &quot;Orange&quot;, dataclass GPRS, signal #99
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;internet&quot;, TX 50000000, RX 100000000
        firmware &quot;SWI9X15C_05.05&quot;, hardware &quot;EM7305&quot;

diff --git a/sbin/umbctl/Makefile b/sbin/umbctl/Makefile
index 35afb1bcfd4b..e7d6eab1ba3f 100644
--- a/sbin/umbctl/Makefile
+++ b/sbin/umbctl/Makefile
@@ -1,4 +1,4 @@
-CFLAGS+= -I${SRCTOP}/sys/dev/usb/net
+CFLAGS+= -I/usr/src/sys -I${SRCTOP}/sys/dev/usb/net

 PROG=  umbctl
 MAN=   umbctl.8


diff --git a/sys/modules/usb/Makefile b/sys/modules/usb/Makefile
index 6dc4963594af..e9f0a6024a78 100644
--- a/sys/modules/usb/Makefile
+++ b/sys/modules/usb/Makefile
@@ -49,9 +49,7 @@ SUBDIR += ${_rum} ${_run} ${_runfw} ${_uath} upgt usie ural ${_zyd} ${_urtw}
 SUBDIR += atp cfumass uhid uhid_snes ukbd ums udbp uep wmt wsp ugold uled \
          usbhid
 SUBDIR += ucom u3g uark ubsa ubser uchcom ucycom ufoma uftdi ugensa uipaq ulpt \
-         umct umcs umodem umoscom uplcom uslcom uvisor uvscom
          umb umct umcs umodem umoscom uplcom uslcom uvisor uvscom
 SUBDIR += cp2112
 SUBDIR += udl
 SUBDIR += uether aue axe axge cdce cdceem cue ${_kue} mos rue smsc udav uhso \


diff --git a/sys/net/if_types.h b/sys/net/if_types.h
index 17227726a663..dee71af80a5d 100644
--- a/sys/net/if_types.h
+++ b/sys/net/if_types.h
@@ -256,6 +256,7 @@ typedef enum {
        IFT_PFLOG       = 0xf6,         /* PF packet filter logging */
        IFT_PFSYNC      = 0xf7,         /* PF packet filter synchronization */
        IFT_WIREGUARD   = 0xf8,         /* WireGuard tunnel */
+       IFT_MBIM        = 0xf9,         /* Mobile Broadband Interface Model */
 } ifType;

 /*


diff --git a/sys/sys/sockio.h b/sys/sys/sockio.h
index e0f2ab697168..a3988c393494 100644
--- a/sys/sys/sockio.h
+++ b/sys/sys/sockio.h
@@ -148,5 +148,8 @@

 #define        SIOCSIFCAPNV    _IOW(&apos;i&apos;, 155, struct ifreq)    /* set IF features */
 #define        SIOCGIFCAPNV    _IOWR(&apos;i&apos;, 156, struct ifreq)   /* get IF features */
+#define SIOCGUMBINFO    _IOWR(&apos;i&apos;, 157, struct ifreq)   /* get MBIM info */
+#define SIOCSUMBPARAM    _IOW(&apos;i&apos;, 158, struct ifreq)   /* set MBIM param */
+#define SIOCGUMBPARAM   _IOWR(&apos;i&apos;, 159, struct ifreq)   /* get MBIM param */

 #endif /* !_SYS_SOCKIO_H_ */


===&gt; /etc/rc.conf:

umbim_enable=&quot;YES&quot;
umbim_config=&quot;/etc/umbim.conf&quot;
umbim_interface=&quot;umb0&quot;

===&gt; /etc/rc.d/umbim:

#!/bin/sh

# PROVIDE: umbim

. /etc/rc.subr
. /etc/network.subr

name=&quot;umbim&quot;
desc=&quot;UMBIM Cellular Modem Interface&quot;
rcvar=&quot;umbim_enable&quot;
command=&quot;/sbin/umbctl&quot;
pidfile=&quot;/var/run/${name}.pid&quot;
start_cmd=&quot;umbim_start&quot;
stop_cmd=&quot;umbim_stop&quot;
status_cmd=&quot;umbim_status&quot;
load_rc_config $name

umbim_start()
{
        if [ -z &quot;${umbim_config}&quot; ]; then
                echo &quot;umbim_config not provided!&quot;
                return 1
        fi

        if [ -z &quot;${umbim_interface}&quot; ]; then
                echo &quot;umbim_interface not provided!&quot;
                return 1
        fi

        ${command} -f ${umbim_config} ${umbim_interface}
        ifconfig ${umbim_interface} up
        route add default -interface ${umbim_interface}
}

umbim_stop()
{
        route del default -interface umb0
        ifconfig ${umbim_interface} down delete
}

umbim_status()
{
        ${command} ${umbim_interface}
        ifconfig ${umbim_interface}
}

run_rc_command &quot;$1&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381598</commentid>
    <comment_count>83</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-07 17:11:48 +0000</bug_when>
    <thetext>&gt; looks like it is targeted towards 14.3 so I had to add few defines to build on 14.2 but it works :-)

The additions to sys/sys/sockio.h and sys/net/if_types.h are needed on 14.3 as well. I forgot to mention this explicitly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382857</commentid>
    <comment_count>84</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-09-14 19:27:09 +0000</bug_when>
    <thetext>A commit in branch stable/14 references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=06d08e6e758df2114111af415c67623ea3c1825b

commit 06d08e6e758df2114111af415c67623ea3c1825b
Author:     Pierre Pronchery &lt;khorben@FreeBSD.org&gt;
AuthorDate: 2025-01-20 23:44:03 +0000
Commit:     Ed Maste &lt;emaste@FreeBSD.org&gt;
CommitDate: 2025-09-14 19:25:39 +0000

    sys: add MBM device ioctl() values

    This is part of the upcoming USB umb(4) work.  It implements the control
    ioctl(4)s that MBM devices will need to implement.

    Differential Revision:  https://reviews.freebsd.org/D48167
    Approved by:    adrian, zlei
    Sponsored by:   FreeBSD Foundation
    PR:             kern/263783
    Submitted by:   Pierre Pronchery &lt;khorben@defora.org&gt;

    (cherry picked from commit e5f3620a3e12c0febab7e4125da526c59a5a195b)

 sys/sys/sockio.h | 4 ++++
 1 file changed, 4 insertions(+)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382892</commentid>
    <comment_count>85</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-15 08:10:38 +0000</bug_when>
    <thetext>(In reply to commit-hook from comment #84)
Thanks! Please do not forget to MFC

https://cgit.freebsd.org/src/commit/sys/net/if_types.h?id=86bfbaf1002c88b5c1a6d3ed261becedb533490b</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382949</commentid>
    <comment_count>86</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 13:48:38 +0000</bug_when>
    <thetext>Okay, so I got another weekend outside, had some more conditions to test:

1. Modem does not always connect to LTE, even though my mobile phone has the internet connectivity. Restarting interface, reseting usb device, etc, does not help. Once the connectivity is lost it is not regained again on its own.

2. Actually I did not get any connection over the UMBIM modem this weekend :-( I had to use wifi from the phone ap. In theory modem connects to the nerwork (Orange), the IP tunnel is set up (two IP addresses on the ifconfig where internal responds to ping but the other does not), but no outgoing ping (i.e. to 1.1.1.1 nor 8.8.8.8) was achieved.

3. My SIM has disabled PIN check. But before I made sure of that there was no way to see if the PIN is required, was the pin entered correct, do I need to enter PUK, etc. Something like the AT commands in U3G modem seems to be missing here in UMBIM. This is observation from last weekend I did not mention sorry. But this weekend such test utilities would come even more handy.

Thanks :-)
Tomek</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382950</commentid>
    <comment_count>87</comment_count>
    <who name="">commit-hook</who>
    <bug_when>2025-09-15 13:52:36 +0000</bug_when>
    <thetext>A commit in branch stable/14 references this bug:

URL: https://cgit.FreeBSD.org/src/commit/?id=70caaeb8b63f9e11e1f495ab3918119c537a8677

commit 70caaeb8b63f9e11e1f495ab3918119c537a8677
Author:     Pierre Pronchery &lt;khorben@FreeBSD.org&gt;
AuthorDate: 2025-01-20 23:39:17 +0000
Commit:     Ed Maste &lt;emaste@FreeBSD.org&gt;
CommitDate: 2025-09-15 13:51:43 +0000

    sys: add MBIM (mobile broadband interface module) interface type.

    This is part of the upcoming USB umb(4) work.

    PR:             263783
    Approved by:    adrian, zlei
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D48167

    (cherry picked from commit 86bfbaf1002c88b5c1a6d3ed261becedb533490b)

 sys/net/if_types.h | 1 +
 1 file changed, 1 insertion(+)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382962</commentid>
    <comment_count>88</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-15 14:31:06 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #86)

Just out of curiosity: What modem type is it? I used the Sierra EM7455. I had to change the NVRAM settings to enable MBIM but apart from that, it always worked (&quot;always&quot; means the 5 to 10 times I tried for a few minutes).

&gt; But before I made sure of that there was no way to see if the PIN is required,

So at+cpin? didn&apos;t work? I had no problems using this (and all other commands) on the Sierra EM7455.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382968</commentid>
    <comment_count>89</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 15:56:30 +0000</bug_when>
    <thetext>Thanks Andre, this is Sierra (now Semtech) EM7305 on Panasonic Toughbook CF-MX4.

Now I cannot connect even at home. Trains are good for testing because of frequent connectivity loss. The SIM card is operational I just put it into a smartphone and all works fine. Thus some additional diagnostics would be nice to have :-)

I do not have /dev/cuaUx even after module load so I do not have AT commands.

# umbctl umb0
umb0: state up, mode automatic, registration home network
        provider &quot;Orange&quot;, dataclass GPRS, signal #99
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;internet&quot;, TX 50000000, RX 100000000
        firmware &quot;SWI9X15C_05.05&quot;, hardware &quot;EM7305&quot;

Maybe this is modem firmware issue, I am just downloading latest Build4837-Approved-Only-7305-SPK.zip from [1]. Now I need to find a way to upgrade firmware :-P

[1] https://source.sierrawireless.com/resources/airprime/software/airprime-em73xx_mc73xx-fw-package-latest-release/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382971</commentid>
    <comment_count>90</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 16:15:45 +0000</bug_when>
    <thetext>Looks like [1] can be used to talk with the qmi modem and upgrade firmware according to hints provided in [2]. Will try to port this one but it does not build out of the box :-P

[1] https://gitlab.com/linux-mobile-broadband/libqmi
[2] https://github.com/danielewood/sierra-wireless-modems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382974</commentid>
    <comment_count>91</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-15 16:24:15 +0000</bug_when>
    <thetext>My EM7455 gave me a serial... I just attached an EM7305 to see what this does but MBIM is not enabled and I can&apos;t enable it since AT!ENTERCND=&quot;A710&quot; doesn&apos;t let me in :-(. Wonder if the PW is different on EM7305 or some moron changed it (I have removed it from a Fujitsu S904).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382975</commentid>
    <comment_count>92</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-15 16:25:32 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #90)
Shame on me, but I used your [2] on a Notebook with Ubuntu to update my EM7455...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382995</commentid>
    <comment_count>93</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 18:08:03 +0000</bug_when>
    <thetext>Okay so meson.build file needs tiny update to find stuff at /usr/local/include location (like #include &lt;linux/types.h&gt;). I can see there were reports for that in meson upstream but still not added?

diff --git a/meson.build b/meson.build
index 85266d18..0b7d6d38 100644
--- a/meson.build
+++ b/meson.build
@@ -74,6 +74,7 @@ cc_flags = cc.get_supported_arguments([
   &apos;-Wno-cast-function-type&apos;,
   # all message protocol structs are packed, never complain about it
   &apos;-Wno-packed&apos;,
+  &apos;-I/usr/local/include&apos;,
 ])

 # strict flags to use in debug builds


Then project can be generated for ninja build at build-bsd with:

meson setup build-bsd -Dmbim_qmux=false -Dqrtr=false -Dcollection=basic -Dintrospection=false -Dman=false -Dudev=false -Drmnet=false -Dmm_runtime_check=false -Dbash_completion=false

But it fails at:

../src/libqmi-glib/qmi-net-port-manager-rmnet.c:24:10: fatal error: &apos;linux/if_link.h&apos; file not found
   24 | #include &lt;linux/if_link.h&gt;



We do not seem to have this header provided anywhere?

% pkg which -g if_link.h
if_link.h was not found in the database

After that there are lots of linux includes related issues so I give up for now.

Will try vbox win7 and vendor tools to update firmware maybe this will work ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383007</commentid>
    <comment_count>94</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 19:28:40 +0000</bug_when>
    <thetext>Okay so vbox with win7 did not work - device shows up but does not start even though drivers are installed.

So i tried with lubuntu 24.04 usb-bootable system. It has libqmi by standard.

Upgraded firmware from SWI9X15C_05.05.26.00 r21289 carmd-fwbuild1 2014/04/02 18:24:16 (CarrierID: 01) to latest:

1. SWI9X15C_05.05.58.00 r27038 carmd-fwbuild1 2015/03/04 18:38:46 (CarrierID: 204) that is dedicated to Orange that I use. This one did not even connect to operator.

2. SWI9X15C_05.05.78.00 r34310 CARMD-EV-FRMWR3 2017/09/17 00:43:17 (CarrierID: 01) that is Generic image. Tried to connect to Orange right after update on lubuntu and it did work.

But on FreeBSD it looks like connection is made but no packets come in/out :-(

umb0: state up, mode automatic, registration home network
        provider &quot;Orange&quot;, dataclass GPRS, signal #99
        phone number &quot;&quot;, roaming &quot;&quot; (denied)
        APN &quot;internet&quot;, TX 50000000, RX 100000000
        firmware &quot;SWI9X15C_05.05.78.00&quot;, hardware &quot;EM7305&quot;
umb0: flags=1008851&lt;UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST,LOWER_UP&gt; metric 0 mtu 1430
        options=0
        inet 10.77.17.230 --&gt; 10.77.17.229 netmask 0xfffffffc
        media: &lt;unknown type&gt;
        status:
        nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;


Also looks like it would be good to have this libqmi-utils ported to play with firmware upgrades on FreeBSD :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383009</commentid>
    <comment_count>95</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-15 19:30:15 +0000</bug_when>
    <thetext>Ah even with those latest firmwares I do not see any serial modem /dev/cuaUx.

Maybe some additional AT configuration is required under Linux to work on FreeBSD?

But the strangest thing is that it was working last week :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383057</commentid>
    <comment_count>96</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-16 03:56:52 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #95)
What does

AT!UDUSBCOMP?

say (after AT!ENTERCND=&quot;A710&quot; )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383084</commentid>
    <comment_count>97</comment_count>
    <who name="Alexander Burke">alex-freebsd-bugs</who>
    <bug_when>2025-09-16 07:47:17 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #95)

The device composition affects whether or not you get a serial port for AT commands:

https://www.freedesktop.org/software/libqmi/man/latest/qmicli.1.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383085</commentid>
    <comment_count>98</comment_count>
    <who name="Alexander Burke">alex-freebsd-bugs</who>
    <bug_when>2025-09-16 07:48:42 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #95)

The device composition affects whether or not you get a serial port for AT commands. You can view and change it with qmicli:

https://www.freedesktop.org/software/libqmi/man/latest/qmicli.1.html

--dms-swi-get-usb-composition Get current and supported USB compositions (Sierra Wireless specific)

--dms-swi-set-usb-composition=[#] Set USB composition (Sierra Wireless specific)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383091</commentid>
    <comment_count>99</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-16 08:44:34 +0000</bug_when>
    <thetext>Well, yes, of course. If he hasn&apos;t got a serial device, he can&apos;t try AT!UDUSBCOMP?... Sorry for the confusion...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383641</commentid>
    <comment_count>100</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-19 19:21:14 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #89)

FWIW, I was able to hack my EM7305 to reset the ENTERCND password to the default (A710). Now I could change the USB composition to 8 (DM, NMEA, AT, MBIM) and it immediately got probed as umb0. However, after setting the APN it does not connect (no IP on umb0).

I will try the next days to find out whats going on.

Another interesting thing: Before it had USB composition 14 which is &quot;Config1: comp6    Config2: comp9&quot;. I don&apos;t know what this means but it could be that you can select between two configurations:

6, which is &quot;DM   NMEA  AT    QMI&quot;

and 

9, which is &quot;MBIM&quot;

So _maybe_ your device is configured similarly but gives you Config2 (MBIM only) for whatever reasons...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383643</commentid>
    <comment_count>101</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2025-09-19 19:48:08 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #100)

Hmm on my laptop there is a hidden menu in BIOS SETUP under the password &quot;toughkit&quot; where you can set &quot;Wireless WAN ID&quot; to 15 in order to get the modem running. Maybe this is the configuration number you are mentioning? What happens when you set configuration 15?

Looks like these are more complex devices and some sort of diagnostics utility would be helpful :-) Maybe the one from Linux but I do not have time right now to play sorry :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383649</commentid>
    <comment_count>102</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-19 20:09:27 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #101)
Well, can you change the &quot;15&quot; you are seeing? I have no idea what a &quot;Wireless WAN ID&quot; is, but if it has to do with the USB composition, it _might_ be:

15 - Config1: comp6    Config2: comp10            NOT SUPPORTED

with comp6:

6  - DM   NMEA  AT    QMI                         SUPPORTED

and comp10:

10 - NMEA MBIM                                    SUPPORTED

at least on my 7305. I don&apos;t dare to change my 7305 to 15 - I am happy to have an
MBIM mode right now (although it doesn&apos;t work yet).

FWIW, this is the complete list of my USB compositions:
at!udusbcomp=?
0  - reserved                                     NOT SUPPORTED
1  - DM   AT                                      SUPPORTED
2  - reserved                                     NOT SUPPORTED
3  - reserved                                     NOT SUPPORTED
4  - reserved                                     NOT SUPPORTED
5  - reserved                                     NOT SUPPORTED
6  - DM   NMEA  AT    QMI                         SUPPORTED
7  - DM   NMEA  AT    RMNET1 RMNET2 RMNET3        SUPPORTED
8  - DM   NMEA  AT    MBIM                        SUPPORTED
9  - MBIM                                         SUPPORTED
10 - NMEA MBIM                                    SUPPORTED
11 - DM   MBIM                                    SUPPORTED
12 - DM   NMEA  MBIM                              SUPPORTED
13 - Config1: comp6    Config2: comp8             NOT SUPPORTED
14 - Config1: comp6    Config2: comp9             SUPPORTED
15 - Config1: comp6    Config2: comp10            NOT SUPPORTED
16 - Config1: comp6    Config2: comp11            NOT SUPPORTED
17 - Config1: comp6    Config2: comp12            NOT SUPPORTED
18 - Config1: comp7    Config2: comp8             NOT SUPPORTED
19 - Config1: comp7    Config2: comp9             SUPPORTED
20 - Config1: comp7    Config2: comp10            NOT SUPPORTED
21 - Config1: comp7    Config2: comp11            NOT SUPPORTED
22 - Config1: comp7    Config2: comp12            NOT SUPPORTED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383929</commentid>
    <comment_count>103</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-22 07:49:14 +0000</bug_when>
    <thetext>Short story: The EM7305 works in MBIM mode with the MBIM stuff ported to 14-STABLE.

Long story: I&apos;ve taken another EM7305 which had an USB composition (at!udusbcomp?) of 14. This is:

14 - Config1: comp6    Config2: comp9             SUPPORTED

which are:

6  - DM   NMEA  AT    QMI                         SUPPORTED
9  - MBIM                                         SUPPORTED

As default, #6 (with 4 serial ports) was active. Using

usbconfig -d ugen0.4 set_config 1

I changed it to the other config (#9). Now the serial ports were gone but I had an umb0 interface. After configuring the APN with umbctl and &quot;ifconfig up umb0&quot; I had an IP. After changing the route I could ping the world.

After that, I changed the USB composition to 8 which is:

8  - DM   NMEA  AT    MBIM                        SUPPORTED

This gives me one serial and the umb0 at the same time w/o the need to change the configuration using usbconfig. The umb0 interface worked as before.

So what you might want to try is to play with &quot;usbconfig dump_all_desc&quot; and check if there is another configuration which could give you a serial port. If yes, you can change the USB composition to 8 so you have an umb0 AND a serial at the same time. This might help revealing what&apos;s going on.

FWIW, the other EM7305, which didn&apos;t receive an IP before, was updated to the latest FW (SWI9X15C_05.05.78.00) and now it works as well. No idea if the fw update or some side effect fixed it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384645</commentid>
    <comment_count>104</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-27 16:16:20 +0000</bug_when>
    <thetext>And another one: The EM8805 work as well (on 14-STABLE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384646</commentid>
    <comment_count>105</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-09-27 16:18:30 +0000</bug_when>
    <thetext>(In reply to Andre Albsmeier from comment #103)

&gt; After configuring the APN with umbctl and &quot;ifconfig up umb0&quot;

And this should have read: &quot;ifconfig umb0 up&quot; of course...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386707</commentid>
    <comment_count>106</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-10-11 07:48:26 +0000</bug_when>
    <thetext>Another success story: The Fibocom &quot;L830 LTE Module&quot; works as well (14.3-STABLE). However, after umbctl and &quot;ifconfig up&quot; the radio has to be toggled off and on using at+cfun=4 and at+cfun=1.
I spent hours checking why I didn&apos;t get an IP after &quot;ifconfig up&quot; and suspected another drive/modem issue just to find out that at+cfun is needed. Probably the cleanest way is to do

at+cfun=4
umbctl umb0 apn bla.bla
ifconfig umb0 up
at+cfun=1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386713</commentid>
    <comment_count>107</comment_count>
    <who name="Alexander Burke">alex-freebsd-bugs</who>
    <bug_when>2025-10-11 08:27:32 +0000</bug_when>
    <thetext>(In reply to Tomasz &quot;CeDeROM&quot; CEDRO from comment #101)
&gt;Hmm on my laptop there is a hidden menu in BIOS SETUP under the password &quot;toughkit&quot; where you can set &quot;Wireless WAN ID&quot; to 15 in order to get the modem running.

This is a Panasonic-proprietary setting which determines which devices the BIOS will accept, and possibly configures the multiplexing (WLAN and WWAN onto the same antennae). 13 also works, but I don&apos;t know the difference between the two.

For those who have locked Sierra modules (FCC or ENTERCND or both), there is an online keygen at https://sierra-keygen.uu.sg/ (a hosted version of what is linked below) which can be used as follows:

Figure out the modem ID required for the challenge/response (and more info here):
https://github.com/bkerler/edl/blob/master/sierrakeygen_README.md

AT!ENTERCND=&quot;A710&quot;
AT!PCFCCAUTH?

If FCC lock is 1:

AT!OPENLOCK?
AT!OPENLOCK=&quot;xxxxxxxxxxxxxxxx&quot;
AT!PCFCCAUTH=0
AT!PCFCCAUTH?
AT!RESET


On the other hand, if ENTERCND != &quot;A710&quot;:

AT!OPENLOCK?
AT!OPENLOCK=&quot;xxxxxxxxxxxxxxxx&quot;
AT!SETCND=&quot;A710&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386721</commentid>
    <comment_count>108</comment_count>
    <who name="Alexander Burke">alex-freebsd-bugs</who>
    <bug_when>2025-10-11 10:23:34 +0000</bug_when>
    <thetext>The Sierra modems are quite malleable; the following is sure to help anyone working with them:

https://github.com/danielewood/sierra-wireless-modems?tab=readme-ov-file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386727</commentid>
    <comment_count>109</comment_count>
    <who name="Maurice Walker">maurice</who>
    <bug_when>2025-10-11 10:58:01 +0000</bug_when>
    <thetext>Is there a viable path towards IPv6 support? This was added to the original OpenBSD code after the NetBSD port (which the FreeBSD port is based on).

I recently tested this with a TCL / Alcatel IK41VE1. It now works in all three BSDs, but only NetBSD has IPv6 support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386728</commentid>
    <comment_count>110</comment_count>
    <who name="Maurice Walker">maurice</who>
    <bug_when>2025-10-11 11:00:19 +0000</bug_when>
    <thetext>(In reply to Maurice Walker from comment #109)

Correction: Only OpenBSD has IPv6 support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389897</commentid>
    <comment_count>111</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2025-10-31 10:58:31 +0000</bug_when>
    <thetext>The Quectel EM060K-GL

ugen0.4: &lt;EM060K-GL Quectel Wireless Solutions Co., Ltd.&gt; at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x0000  &lt;Probed by interface class&gt;
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x2c7c 
  idProduct = 0x6008 
  bcdDevice = 0x0504 
  iManufacturer = 0x0001  &lt;Quectel&gt;
  iProduct = 0x0002  &lt;EM060K-GL&gt;
  iSerialNumber = 0x0003  &lt;1582f7ef&gt;
  bNumConfigurations = 0x0001 

is also working with the umb driver. In order to get a serial port, you need

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

Thanks to Alexander Burke for providing the modems to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425616</commentid>
    <comment_count>112</comment_count>
    <who name="Andre Albsmeier">mail</who>
    <bug_when>2026-05-25 14:46:08 +0000</bug_when>
    <thetext>(In reply to Ed Maste from comment #78)
Ed, may I just ask for an MFC of the remaining umb bits to 14-STABLE? I use it locally for months now and it works w/o any flaws.

Anything more I can do to help? Thanks...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425619</commentid>
    <comment_count>113</comment_count>
    <who name="Bruce M Simpson">bms</who>
    <bug_when>2026-05-25 15:15:26 +0000</bug_when>
    <thetext>I have hardware for 4G and 5G I am willing to donate, through the donations@ process, to someone willing to seriously commit to this work. I have already offered it once to developers@ but did not get any takers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425623</commentid>
    <comment_count>114</comment_count>
    <who name="Tomasz &quot;CeDeROM&quot; CEDRO">tomek</who>
    <bug_when>2026-05-25 15:22:03 +0000</bug_when>
    <thetext>+1 to have it out-of-the-box in 14 :-) recently upgraded to 14.4 on my laptop and the module is not there.. and i had problems building it as module :-P</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>233735</attachid>
            <date>2022-05-05 07:00:25 +0000</date>
            <delta_ts>2022-05-05 07:00:25 +0000</delta_ts>
            <desc>umb(4), umbctl(8), OPNsense plug-in</desc>
            <filename>umb-freebsd-1.0.0.tar.gz</filename>
            <type>application/x-gzip</type>
            <size>36945</size>
            <attacher name="Pierre Pronchery">pierre</attacher>
            
              <data encoding="base64">H4sIAD5vc2IAA+y9+3saObIwfH6Fv0LjuSwk2AbH8WTscfZggx3ecPFwyeVk87AYGrtPuC3d2M7s
5P3bv7pIaqlbDTgzu+e83zN+Ehu6S6VSSSqVSlWl1fR6d7z0vOtgtFvaK+4V9xuDT97Yn3j/8Yf9
FIvFo2JR4N8fj57T3+LBIf+Fn8PiwYEoHR48Ozw6OnwOgMXSUelZ8T9E8Y8jIf1nFYSDJZDy6Xa+
vPZmqXAANh6vwcNtEfrv/yM/V+Xz1+XLauZUrKKRkH1TbXdqrSY8pTGR7fTOKrV2B75/ms5HIrj2
Z/sAPwwnYjFZ3fC3bK3Z6ZbrdYDyZ8CuySRbRxSTmdgdZxuvAQN8m34a+Uuxu8i2G/BtOcV33TK+
gX7IZqHUMVfCiAVXk80OJ95gdpzNjOdLEayuEQm8/S4nScufiNFc5IYj8d138vUPP8DrRvl1NS+o
MIHMvGx25AchYPouV2/mxW4gdnfFHoBKVuR3v8vJ9ucRCIgDBL+O3RB7QPXeza/ib9lMxgmg59Ma
kHa1XGlU96ajNTDIk21wEZw/7gPf9obbwS29m73bTaDTa3+6GWq+CPur4HotYDRitmmPAf30qtXp
9itVOc72FvMgfEzJx5dbfLrZHXnBcLkdeLAc7nvhcH853JvMByNvuTfaPyjtwqvty88Xs8CDf/tQ
q78Ig/3WVZMfIATPht2bQejdDz5/DVZveecPvf3hfDbeHwxDfz4LgEr5iUcNvFqD2Zj82/SfCR7M
h5/8+drBYYLzn70XjwMf4qRtN/I4rVMm9X96w9v52vnMQmJ46w0/HQv8qCXBwwZJkM2gDHIBGAJJ
k7hMp5IpIKnH8iublWL1WKBs/TpJKFFoWYiz9phoJqFrkJhdDIafBjeerA0eowTPi9jIup7Pw30o
upp4gQuPqpE6sVLtdAHJ6d5ebIDSWzk/L+rly87pzm5vJ71W7PfEs9vB0tufDmb4/wXRYi5Um0ly
U9UtX/bLbUkRPWm8BiF01rvsX9Tq1c7pbE5PO6/K7SpiYkKo/gidWb1kLHCYXh+ng2azTPzxmtZk
s3tXr1rN99RPPFJoxAo9goUeSbrlvMIyHbGV9n9aI/nz59/5s0ro/1oZ+cPq2KD/PysdPtf6/8HR
Iej/z388evan/v/v+IH+zx3mBa4lFzAMzjqV7GniJ5stX89XoWDg7K7xQxIKMfiBGIhP3nLmTcRo
6d95S0La65yJxlmtIUYe6h3BXjZrfhUe8PV64ge3AtSOmcdqiLjzB2LoTSaryWApZl54P19+CmCx
G96KQSAur9qdgug1uvB7MBtl693qnujeep/FYLHwoMQAaQGtloov5v4s3A3nu/RBYQNJGHrL8WDo
FUS4HMyCxXwZ+rMbUbvKjpeDKVHa9v6x8pfeCGkb+zer5QDJA7mJAFA8EBP/kyeuak2kQ5SvmuJ2
cOeJcC6uPRF4obj3w1spw3Mv8nuiNRvC61tPdIAHw8FyBAUCAPZA/M4moB5BZViGYIbz5RI4gvgL
wkdksBAvvenAR0EOIMBzYF/oQdnQn1AZg7nYJYv5vbfcHX4G6T/aE7UZ1BkwAQyTBRjJeKgZ6IY1
YmcwAd0y2J3Pdqj7kDNU/xQ0TmgXqM+Bfz2hZsqyVDK7WM7vfNB6qQU4XjzkMTIVKyQu3SDt3h00
1x/T0+BzEHpTcQ9cWHqoSwCd2ewFjJzpfAlNmMEgmhLbC7BOeUj90htDHVAjlpejD9mv2QyEzlYD
2JrC4obdeLbyJyNFxnA+8qwRLIdx93YwgzEm0SrFFjjIjRoV6Pl4PpnM7xHXcD6dYq0BtHQyov5e
jcf+0IdGA5bsNVYqrueyL+XMYEVJ/F1u0HAZ/jsO13sY7PiXmgQ6+u4EB7Y97ML5fCL+zq38+3E2
K+DnO2jrJ9Akaryur28kN/MRjdDqgrsZ2e2aIbZthjYbZCvz4WoKNFCJbKwJZbN/Se7cDfzJAEck
SpxNdRdclc/EnnPrgZwNvRtZnGam2o+5+KtIrIU8+YyJsvRwog600oWkgm6Ok2fkLSbzz9heMZ8B
rKrBZo7WGrs471EWJJEOgXswj/8+D3DTufud3EzshQ+//p1FBnSaoeOiJMRN7t9xTOB+VRDy4YBA
ZzggZJ8AViivKJOUTz5LEr8VgEQMRiPhqDn7p0r5v/cnqf9ZhqY/pI4N+l+xdPgspv/9WPyx9Kf+
9+/4ed1oVU4zLMeznfZ5R33ZG9LXp6cZ1hT6/njvVlyvAv6wCq71BwAI9m5hH+rPhpPVyBM/w2ii
RWFv+unln7P/f/NPyvxXY+APqWPt/D84eP7suZ7/RwfPizT/D3/8c/7/O372n2S+kxu/78ST/Sx+
b3qh+bW18Gbw/VioQVG4E6W90gtxUCy92C8e7Jd+EsUXx89/On5+IKYLX1QfFoJKQ/GseCJaSx8U
DlDYhvPFZ/h8G4rcMI/Fj8SNB6qcmF6/EjlZj4CtYwDaVh6KYukrbzn1g4DVN9TsCoSngEqoP/5M
W0CycC3961XoyW3RfBzeD5asZg1mnxHRYrUEjcxjLW4e7VLGHmmRtx5sQD4L0PVA4wN1Xyn+gHAQ
klY5uJ7feYgpasdsHuJOC0mgehcRseoVb0lBeSLz3Hzh456Em9Z9VRWd1kX3bbldFbWOuGq33tQq
1YrYKXfg+44oNysEVO51X7XaolLrnNfLtUZHlOt1AaXa5Wa3Vu0grre17ivRrl6W21CkBaUAX4S7
eV7vVWrNSypYa1zVa1BLhEC0LhBHo9o+fwVPyme1eq37nqq/qHWb1U4HNo9N0WyJ6ptqsys6rxCP
QdlZVdRr5bN6VVy02oiq3HwvOlfV81q5XgC629XzbgFQqE9Q5LzV7FR/6QE6gBGVcqN8iYS0qaj8
Sg17Ve52WlBvG5rX6dW72IyLdqsh6q0OUg6b1CrUUe6WsTTwEEjuFKBcFQhsI93lJpF03gWNFAtA
1d12GeloVi/rtctq87yKZVtUoNtqA2CvIwsURLld62ClrV5XMqpFaAFNs8pIifvID6CFqKi2gRGN
MiG+sHtD9f55bDYcHIgy9DA0owPdn1t6u/dLP/RM24yaE23HOwGD98r3ljDor5bz2RDG82fx84Ke
/OfIA8jB3swLX2oUes7gaKUNdIDqPsyd1VKOadgRDQAL7sGDQnziIBaag/5QbtBxwtEMCNGakJxA
5sZzNvLZ1oOFpl54LOnajVEWiPlYkYTbWjEFiS2WXjjg/QzPysSULCAuwZNygtZwwGJWShPWpAjq
HE4G/hQ2QW4yoDqDHYoMaORoJW06fzglcssmRtZ2mNBBsX3oCtiXA9h0gHaWwSSyVkRGJLMRsmVN
z6di+Ho2mHpIEVsNFOW3tBuEBkRA1A9+SOYiRjhfBkyLtAvB8CETkjcbwSsPRwqQM53DMGUuQWHA
6t8B2Bhe2JKaUSmZHCy8IQ4sKOnjiFvikJoZ4jUSoZacM2To2XuakOetq/ft2uWrrnjVqldgV0pS
jSRA7awHc72jpC2LrQrJn+q7KxA2JI6S0rIQydOCABwgF7sg/hq1bhVlbwHrRWROObtOyKLwFGVx
VQYBdN6rl0GO9NpXrQ5hw/apBaBaSZPH8eZKSRs19oyQRcKaxW1CQEMLgYtAJYhvLcer76rQpHL7
PQpwEmFOGZ7bwB7oovNeu9pAylmednpnnW6t2+tWxWWrVSG+d6rtN7XzauckKecLhqA/wc9nPRDQ
wEDierNbbbd7V106c33VektLx3kZSleI2a0mtRm41Wq/R7zIDOoLc9GQzZPrRAcYeN41IVu8UBiN
dS0mb2udap57j9eQGlf+tvxeLifRqhFbJgrUt6J2AavCmxoSz8CkEwFHanL8wNNO7/yV5D7OC614
NebXeDh/tpwPRtcoaGrK6A2vRt5ETzMSLCiBxW0YLo739+/v7/fQj2O+vNmH7Z03mcPUC/ZBEAX4
HeRTEPTpGxqcS8XqcjkIB6V+8cdnxdKzvV/9Ba9w08XEH5DN2wvIvH6zAvH01RXtRhhpt7IYjbm9
3+qtZ/A52CcD/d7ty9hjtlomn4PAApTJ52zsdOC5Xo2TT0FS3SWfosuDF7qfoytE4vnnIHSQDv8n
85vtSfzHyltRS2PP0RyahIZdvaOVoEw/JB/j0nU3WCZfhIPgk6va6WB468+8/b4/C8PPCy+IvQed
ZP96EaMKH/rOZ/0prMsD5xuNPfEmQTA+h/9+4Hi+hAUo3giEJVyzBLx87qyD3y1iyGBc78OY3ydH
qZfuF/3haJj6cuSnl2NrTfp7WIqHXhCswd0HXcEeUjvK2rNjNGOHPcJ2jCeGO5n5eG/P6QUEyBqw
bLXO+5UqrGrtaq7Rx0neh5WnL3Xr/EkEcwEi3gFSYEr6Q3/Ul8dRO4VsJrNzrg8UzRM71JgRxQ6g
BhrHoBmLXuOMPTqy38JX6DRRuWrDOnKRe9jb28tn+AedPEZz8U88uspBW4DV16ubvICJmau3LhlD
QTzkT8QXcX+LkjdXzGfjOJs50JQNvG604uWpyM3yj8Be6TWuCPd1QUziNBtfM8569NsMvVpNF7nc
db4gcpN8/kS+s+qF2ZwREZpTUTrJ4mEk6GzD28Ey8wTfrUDaH4D+mVsB+It+KD5Q7/V60H31avNj
Xpe5m/sjiQ/rxq/iSQFPaamfvEngpXUOMc+kLZ3h6aBx7iUhcZUYG/yuvmmWG7lgiMBsIb3xwj6q
yquZH+bwze7LYIgTMq8W5A6d1gJ/ZjewJIKKz9uofY0VRyLsALvVPuqIl9V+F5Q9UBQyz4pOHOPJ
4CZIYGh2+hVQXfqVdusqU3xAE3tm/wm6hcGWRIyW8wXo67DbEMMVbA5noTxFTsHSLoP2wWgODDTL
gQ9KfgoeSWvFH9zM5gF2MCwDyzmTCrM0QNglbAmoy+8GE/ayxC8gPghN8OEjjCoaL+3qJTOlUu2c
t2uk2nVONuAZgUJC6oOJCbVHkDWdzqNQBf6USIrwdGqNx1MEm6gAj6QjNA3QWVFlfhw1QMrKQIKE
9B6HAmSlgQCF6WNKLz6FMXZcve522m/6j2fJYBhHhUaXN2Us/BXovOVyvoxwwT6g1X5c00DggBZh
tAwkyPurx1HhR03CeUQbkma57myPnnHm0M+hUJFoDwhvzpoZBbQY5a2ierRj2WRRYzI4CqvxnQuc
9arXUDKIlVx6oPIFIcn4qatiNeah7DReK41jKhq4ivJ7R6VDuai4uYRj29FGPCIH+azbmSyohrWj
RnSPvqNNkruoGsaOojQkiVzPVZJeQzEvTi5olDgSc6GzkXKcQsEwVtBf15O+SaVaeuXqBYrhtdfn
4UyfT2IAgxDG0K2E4C9xkJFngPCXOEiwgk3nbCRh5Lc40NILVlNFDH9xaAqKINh45NRclBpufxrc
iCeReoHPYcUcTTw1ZCVy+6GGN7Qb2fdeTtIWupSW2XDaD7xwtcgZQgFNW0PUYgzi2B/FJC1CMpzM
A69/vZp8Wviwk3GgyicJ9Ofo9CRB/TFsOLDGVX8yn90UxHAwGi3dJPuopbCe5X69WIUJvPI77oCd
1IA+s7EYKufoNGIJUdwUIK0GNO3D3MThmV28llS49QMEtgCimCx5PwiHtyPQvROVSEXQVVfoDW9v
+lKvi3ib4BJtYVmD26IRBM3CMI2x/piAYBRbFRpTZTSy2RCNqWBYiLiCDkTXICn7oeolJ98KaY9Z
X09OD+9eiiXH7PBmq2nEwVQc9HaryR6Vcc5H56Zjfj9zEic3IIkCqOuDYFrAGN5AlKMyDw8ydHFn
vfYGKIFCii0fhuIQ2cLDA+tch0126XqccxTI85m3CdkGNCTMHo/HELySSTewaHnLfvr42QqP9DeG
Ab5wCdYtsQSrawzLupb0rH4HquVg5M9/b6tADfgdhaVGxBFhv4Mp/s1sMPm9TZGmmz56/H49Fn/R
tzw+v2YALx/WCg1axbWYlCW8+diJaTxZBbfbLeTeDMbmOvVBrp6m6H1AT+j1tIUptIVb0GaJrPXE
RdTEZSa+IS23LxsaoPpHre1L/+Ov6G+Uv4xjWzGaonOFy0mqhEKr1bMDWAtjxCTRoNDckpUkGN2w
iVaCSpk2xQFG/jJo21LSA9pov7gd1SSu1qyQSY1jMpnT0gT7sS3roIExHg77g1W47cDcQoilECgF
zrYTwA8eV4Aak14kfSj9Y/kZxBhLsW2H1NQ9haIxwrr2BsEHaEqPxcOTBE27bsp4gvdREfgaWawW
B+cYSp+gaXj+MfVT8VAbXMIrJlABYBkBRLbuWTjXEjLazRi4mHcoiRAchWU/RF+HU4yywfONcq/e
VQZfgwSmTSq0K3/Uvx4E/lCNrchURVb1s3Kndq6ORk7ScaAXh/eAy22IR4hxNHjyXX3Xlbar6jpM
wNM+HsDEMPzSqNFRjVUS+0pND3Lj6EOvnYpinEnJDbOcsfDxA9mm+912udm5qLax1n9mMx+kpa3d
b7+TjzJ7aCJB9lb72ikAJeMeTE0OBqN35Uql3S8339MrDmzAMyN6V6m1oSy98ceobnsPeNRBD9S4
EKd6XNBzWKYD/1esGP/Mx8LcGgxHwz76BalD9zwVITM+Ur2HO//+NRTCWvaC2znsX2mozLGe0hcC
R0RT9IXiodNoVar9V60ONg4BiBdnvfprNy/wzR/ChqKLDaQLxfjwQjwRpeLB4ePaWtjDAQpYUK14
fNu7f2DbYUJu1fjwaxs/ni/RNqZZkN5+aV2QFWopsgVvvpzETX5TL7ydK1Mcf+FjAeDa/hMK/tNh
knhwk6lU3zSq3VetSi5pUCs47GkwuglTRQYkpiAzLZCFyACJcyMBxEa/gmEAdIKx8bFgGCKdYNL+
WDCNkU5ANkIWDIMktU3D9avNisVhCoFVllCOhyW+7pHH3anYgRd4Tr0n+S47VH7DFylCRK1bee7R
+PE4djzMgYLYwe6DTzvyI0eGEiV09m0vRyNvMvgMtR0WiyiN+fiue+sFng7VXXI0LIWIXpyfi/IK
Y8RCKch2VDAheyB9649ndLQO5LwB3rTa/U4NRHA5+61QZ4zxV5niQ6n000/KwmaiuGq3Kr3zrgTs
Vxs/Hj5/bqNyggDKn4o/apSJ1UXFtlD0KOqeqHriUz0PSIBM0RrYx8nbvyP3Rr0IGG+kk6N+5Y/e
KNhEUyXAlS6S3sjMF3NccQuUvkL6Iqy/pGyjlqSoLj4UkQj4My4IPLotZHAeTrwZTT35BB/90ui9
42Pk+BupU4udYTjZib88r1WSmGo2opJ8QfHVnGFGvjo4MKlCS9lOWe4XELOu7dAE69bfmA0o0buS
hMDfBwoKIDayTO0zkhwbPppjB3GOjabBTvw4HRUiPGltXVx0Ms8TzMyNfRVlOUF33vwW7DXoTPL4
OfX88+cGjzswHoVr6uqqCGOc21+snWlWy2d9IiLIxwGYaMwseTgzWN6IJ6vBAJhseEn4d4NlgMVB
EGXIuUitDH06rPIXIdoLxBN/BHWzx8pgsPtSL3DfxFa4PMynpReuljORqzbf1VqIGIvlSMFEvyau
2FEPo/bxaT4vTk9Fs1evuxDiUpbNoIvpmH2Xx6sZc9yfLiYeemgHonnegG0SpV2B+gcTVK9xWMOe
Gx0gqXzJLIByeQ8f7zPF/mj35bV21DzHPToS1aux38J55Vz88EOWt/cWaGd1raD5da/W6Z1xKVDh
37bar0mvb7fqxLh6nrSjLRjEfkEaBF8z07hLC/Q+w2ycjed71zUEqZGm9FSU8tgZsm2Kv+K335j8
suJQhxmEXVtC7if780s2WhOipjVaZ7U6aHbtVrlyVm5WWNe/KJ9XuZXGKrF9IVE6VGvGv65TNhLh
RgmLRjgfzidIQNEcp2e9Dq4hZ9U+eWxf1M5p0Mb5+CUxm3mupk9n87DInsj0WE3kr5r9ya2ee5uH
8xnNYnfwIblJhF3Vaob7yWjUQsWjOCw5Cpog05HC628hiUxiDV2WJoTCg4Y1niKzOTR7tyTxShOo
oL/YLcFQuYcxd070oxU/M2YYwk+96XDxOcfcKRgb4oJWEfl7nnpdKbgeJeSjxkiW63rI9hmRGp+/
zdWU6g0f+Kz4B1mMHIMLZodqpzesoEDzuyAa3XeolZpyszOfygwlt4PliOLzRnPQLNGdTEauULwJ
qpED4PtngROrhx1L5Su6R6DNc3EPuugE/k7msGEcYH6SEF2NbyI3dypVDoL50OcMDhEGSvUBYmEk
cDelU6dUoPti5WfAaowKYhEtmYDK/XTw36ifGw/8mepyxavBw+JTiOuo8vgqv+tULzv/1W/Umm/K
dRw1j1qgkJsrXQLpNwGNAVQAqVFI9CnJZJLXPfRD6p93IqGDi/8YlAZ6A0IKpVq/16QQOHyjllSo
/hu5SNICEhvxKxRWncngztNs/FD8yOI7M/03kY68tqmexqjGGda7hGUR3gDBwxEWeSNDT3G9SnQ0
9d+bahv68P+02rm7BJQ/s6BqzTgUTTgeDFHV943BwznGVM0nDXaWoiKggjU93DWCyAEBNqDdOM+5
b8Q5pWsJYYJgvNXDYjL3USrRAKXWxiv8WXr6ddv1RucSaatXm7AG08odB34ZAy6/A2DmWkb53u4M
mWQhHbxIV/yeJxOIoh1WCXau56sZ7G0/wJu9PXj/8W+zHakuxGotuCiUoC5ykEfIJKTDn61wW/oZ
U2ISC75EPDdnoM30jneDGlgHhCdh0+7CsDnZUWSdfg9DUeOgb8PB4rT48P2DbkqiJfGqGYzG2bTJ
+afOB4vBtT/xQ98LWLcx+00Nup9hgec5piwkIB/GOZojO7SSHAsKiAOhJzM/qQkF1FGrbuYo5wb+
RM5AFyYZcQ39s/f9CJslbDoKrIbYYz2vNXOcziiDV4s+Wqc/92Hq5uL76WiVir/J01zPc0NlHbzR
+Y0cKC/ql33YtPQx1Ljfrv7Sq7WrFXNWkQQlqYsNRAf/nE9WZeEDBw3BIoVogD0DL58+lRowLeOm
ECYN15ZIrMNultVKTMcVXlJpr5fe4BPyzaFUNmmZQXBToMppp5QF/QboUGqHfisbRxZKELkIkvq6
9NGx4pOIPTEIpZlkD02TBGsVSB+hsCxgKcP8N0axkDZCY5ssSiw3nIPqNoPtMWyvKBJM771gXN37
sO5jzi0slthxifnM47BUShFlbbceufSqLpULCSbh/CM2Bltu1GwOR+ojSqs4exRvqQdUI5feP0gf
BBYZjZ3NrZFOooo1OPcKDLszNboZu9yLV9vtfhNj3utAfOOqXuUATBq+awYHL2WoAep+dPShitpR
7bIGjSnutxzkuC2Vw02KMOn/Rhm1tKqrY9oKwtZ+iUsuDTjqljwDsWGv1m9UK3lkFe3YDOqzyXVn
Fza582+/Hx3TtFHfTLlsau5SOFtCg7REeXQJKzLp731Q5HXDLGfFZbx1QCRhmFqOrcOC3JphD1hE
fx8ci+XDfvhAMh6WkX1JbhQkUzAE0fIBTzWCX3VzQvnA3JwwEPTflIybuUTZBuwu3pz1LvDT23Kt
23qdj/Tu0F06XF86vnhAdz07MBYKazYlZxINuuRkcktnvaSoeRRbIKy6yLqHRz2qK4yVyYHeqheP
iFTPFYS9q1aAsQEQm+Cn6ya4uVrIlYJL/fYbcRJZmN8owKQwwCnBSQSooQJpD9LWCTUivGDh7GxD
s1w3VJQH0GPLawQkW1RsRiJkqdd83Wy9bZ7Y4OjePwhDb7oIA6hjHMpYEdgS9tLKLEHP2wKMlAgX
FJ3EjSh5JptnVLZI+1gO9/uYiTSXGBK2I/HQPIOjZzSaVCkSp8ZLGPJ7t6PlepgSw5D8IUI4KWqC
lMioRZIKB8Ux08dnfaYYPllnAUMPkWysGW5PXvgVt4khsHhCv0+t8zl+kYciJ6lGNIRBGiMI6dTt
jxfK7JLaeuhIFOn+YILyNtGHykpau+jSTjgygaonuDUeaAunFiGkVS7oN58p5VQBrf3g63S9z5rU
0dKunMFAk0vk33VP7wwdtfshLqxYaUEemJpmp/iCK3ckC1TYJK/RPHMSPVTH77WLCwzhAxn2TvxG
3xqYWOi83OnK71ctWN5a9NsoT8EWyt8DP5vvMGBC+4LAZ+Mdh0XIl/zFeEtRCvIlfbaw+hFSP+SY
ZVGMAFSgggRSX08M8zUDTvzZp76SUfVa87WKR2MRIkMIbFOfP4W5WIjHLBgP2As6b5QHAWEVr100
YNVoVomvDdzEtQgnjSCzw9BfirfpRaP9t+ph7Bgc9ZJbD+/YKB3lxVO5QU3CkJMHAZ3QtHn37h0Z
H3fRH2wEgnAqD164umm4QgleA72mePgiuZNHLLWLX/qdalcaInI/6G5EPwJ//A8AlpDGmz140R8t
7/r8lqaYhDRQYu719xZGNd1ZPjnENXKOzfdQCiu9XoyjB6CC1TGC963S6WSDGMIbcdw2i06fpxOA
SXmauhIkTxCk2P2DThAiSQiwl8CX2sUVU8ZqLUnl0XLgz5Kael4JT/capmSYsYXLKXZj97CE+IFk
QKX9pt/uNZu15mUe9RxqKAWKDOUuyPDnHW5csmxNbjWzdDnW0mztjDXSpefZ6mukj2CV5vtl8r29
D7B5Zm8CbO4S2nTmwg45XM4/O1pp0qNUqzUUS+UtRrOjlyy5ruw2LHKW3nR+50ETDcGTtKmpIc9l
YZbIMSunDU6k5BOiVX03l0kkS+qhUrsoOvWKdYGBOIwcoYFql4Xzx/BRieIW4VM0V7CCWYiO0DrF
xWyRduaEbgQrzAvX7J6RywDq1yQ22XYMmPeup22uqSu95lgs9dk+oU3uJxJaAiNLzht9nKyAu39V
bpcbVQDtAFyvg2ZXhL5/M5jgZpr0O+OxtCw4drcxwLo3uwlvI1vibJFX8849361t1GiuuGhvoWK7
3x8ACH7PFhum9JZbJG0AYvPzbKGaQc4GZktoZBrHn8qH0/AmRBwVQjK6b4bXtRkaspUFO160u65o
axUaZb9k47tzKLGGlPhW2wnfNeGTi4btK2gtHoVsFCHKrt0L6hT+/GSxCJfstV06wsPZBRnZsYh+
Nh+PYd4Zrt0LEnc0q2AaXNTeNaowk0BqfI68MSh1xRYH5tJTMLneuQxdHQaG3ZZUdc29SxI3exdu
h7qNsNsidoQy/wvX6ZgIVxIbqRgpiRoNutFn3IySMrJenm6OkYb6jRatJzGx7p+K/5uLLf1yQ4BP
WpScoqqNYzq+a6iUgdB8El/yA4oQiNZ7a2JJT6itwLsEnuxhVyw4KYEcDi6G05EOCSeD4bq+txZc
o89nKJoptsEfGPte43keUZujhOKS4Y8Jzg8VKLqhKlFdtDfNemET04UaWOaoMTxgqrUW6bhsSM5B
c2nY0Z0nnVrrvFO7QE/vY1zLJYyPxmEynIKGTruXJaAe9MeDqT/5LCUyli9fwNpX7R4b9i6ZPQof
H8XAjiw42omJ/ScMykeUUHKwmoQEp1peLV80W53e1VWr3U0cw+gvZnPorjTEkb4Cus02UTQ12wAt
k0z00rTapMIoqw0fDKxbMJNtuIRBXWtetI4NkyfmIcUAeq3NzcZz3FktcTwuoa+Wqz38RWdROk5d
7f2iMnl3lR2okvQTs07M3tcnt73ccLUMb6HQCDNV1t7gkQxuzkBwvHrfWWuzJYdDsxWgbKeRLX6Y
LiI9Zgqrf3Q8kIbSDAmEfpwu9uYL+uMH/cXqE32El+qvPHlG7sCDmXev3vFH3KSm1glQg8WMXQeK
aMuNHrx08RpfSgUmGs7KxSU2kJWiMR9MWeoDbvXlr6IkjkkEoMMTNDZeCRkPUgmQ5dBRKlGOW1CI
WmIp9RKM9+YaJIUOvF8GLVOpxCiAVIoiDFCX84uLQOMdU2k8SCF1MQiC+/lylEqqAkglNcKAw8r1
xUWq8Y5JNR4kYOlKp6U3kimKZIHYUyXL7OjVYbpc0ZNcsoVmXNGedEab1fhIDJzkEOFii2jAJEEk
RDTI7VEvXztavo4x5pGulpLYqlQpE2+raxFpdHvH7HFUQW88PnWXyRvR4AQbO8G2NpmueuBP/hr5
Gum60Xj2UhimtC3lgW18M9E5KS7rVdxsRKXTjT+F72TWNZ9VqnX1zDFogBfVSq1sLgzaLkq6FWlT
QFy0Z0QbJyoaJqnG2p5su3FYpvR1Xkuc+q6RpWewTJxAmPoavF5v+krTA2SGnOTJTPQu9fDGANn2
7MbZyGTSIOK0lflgarZePpphk2WSxikPtynJm92X0/7MewgXn0KaasZ3bb2B52dXF/1Gt3zFHTsl
pT3DiWEx5HuB1vQcKAC1Trtfu2IIwIY1zKgPk0q4MwWSozWFtARIoyDkvaydB2kZLogBWlW2fAdK
RXkOT3fu0eF7v48+Mv1+3tSJAXlMv7W12IQSC1JhjDdXgEo0X93c0vGSPFmI68WRBoGxMNAnsxA2
15RucnQ7nNClchyvz9YmVb7XRH91EtRkcJvmmM3WGR8hJVyc854RCcr5S9iMSedGY2rXMpxA+Rr9
gsZN7cqIAR3R7ZB0Px6d0MhTHJB5vu0gPA/FZ6CFtteeci5SM1+bl2ljN/XDfDTYDE1S7Y9B8PaH
8xVWwHC1i/NWD61u/RblM+woRTsyU7TOehcd1SS3EUDPNVfqLNyOb78TTG7BUD/8ZmszOhO4QVbF
dsJEc/pW+JHyZlNasH/nWW/SLKFdbL8PcvnkTMamojKwTHjkN8r91ttmtZJi3PjtNN4d0iTMo5vG
9HK1CIXiOw3jbXpCxd1rwwinQxky9xMZ1rLmQeUfPBTtAfaY+bTmIFufscrga2lus1nDZyvrBqmi
64tOJuwYmK4cctus/NuMrK2Hjr1D0L4t38SdW9qtcoNMZL/F1Nu81g3Ng3cpDzCTNW05Y7mtaf3i
muwUyZHTeORQpsfaJtPGFpaNTYYNtz01PYufUKN4rSkzPa+fMNUFM7ef8KdLHgnKfJU43I8sXsYZ
f+8Kl0UojMBTmbuM/CAa/TLopbWKOp4nA2dC7Y65C2xClqILJ4sUbYXY5Zfz6MSFQn3ErnWK97CY
kr8wLHGmqODzbOheAEiUP3Iq6Tr8oH+DeXCSx6q8+iv5QMu4XGoMAinNmss1FdsTlqg+Xmlg0O4t
pn0jOYX6eKJAAuUbI6c7tpiIiCq8HxieIK7q3D22Jtcj9pid7VEoaGY8iYntzfcip4rTSZpxqm0u
A2xDyykRFE+QnsfTZY3nZxsNhcigLu4uT6nRbQQvbQQJQtZKxHSBeDNHPev7gG9O+sv3wV/QSxL/
SuGIRBrutmkEib+KndViRxyLHXRl0EVpGyb7zaS/YL5ROPOG+6TyKFLv1p7G/hvl9eNVwrXZRf8n
VUL7IAV+84FJRkiGb1QZUxf007QFHUb0N7EVnaQD7pfkhgmDz27xNnZM0CkvyGasfBv9vfeXpRfd
Q3Y7n3pcVnkA0mXwe/RsX5r2KJHZsBClpQfCah3U1Yg89aJRaV31f8FrqDhQoWjsh04ir37XVOtd
KU8e8r0hFwG8WyLm3SOdpeTYztljnb1rO4gLppO1zMK8crnWuRZq1KaiFfsrtSVEZ6lM8mq17ym8
9ftAaU4x6aAeucg6PbWblFfADsnBSFLKxQvIoxOHN6ISHDxQFXNi2MiUSOMPB9HVanlDMX/Ce/D5
aim0nnhoJWUQHFMug7i/uDsczYICZ3BKOztSYGw1XX+oxX0368uQyBwPSmlQRKMkpqOXibh/IOMh
6Xf6nIn8QIrkJiLpGYTzAB21ABiNuXQsibeJoNc4fNwL6A8wSZWoNVUKK8mojJOeynb0UKO+qHan
tJott0ZH9qUuLJVXHNlpOkKKO9S2K7/Sfu2lWum9PDmVnqpFI1pSjwXuTHGw7O3tKcdje8Ma03wZ
WeuqykpvNEgMdcAZoCj7wQzG5WDA3ZLqohhp0kkaqcOEMAaF8gzXyqg5lG+0JT3zRUhJxuCRHjYs
yGYA2kJS/6HOpLKxEF8mC4Uq0kQZQNE2ZhJGXhCcGlT5RMaM+/tPLsr1evdVu9W7fKWtfpoeRxcF
7CxDiWowSDTeV7E0oamd1i5Xai0HfjrlxQo6tYaUnbEaEssQ3k943q6dwUJELrryzpXEeiSVKXNV
chAG9RIWB21RYEaMpHieU81tB/5yt1s+f1Ul3kZOWgHoDnLHFWeIvCgrWavOX5rKZJlpsurqyBsZ
vFe7kp5hcfR2qtPUOnj3GkMOYOTAzB3Yu/qbXmBE7hv3SmraIdXs3MZI5gREV6GYX1A0Ix5Ua0y/
DdsdVW03tCoh917KVReWMi9McdVV4yzttii8XvFXQ7k2LEp4mqmUHr3fU3WSx1Gqd3B0YuXUoFNS
6ONIpa0dZjhkn1aXG9f2gp1Gw8YRiE05FlHWXsfgNlP6DqOxIwk15dg6GWZOtnjt3vaTufjVBBjS
ZK3wY5pi0nw8jtMWSfOvJ4nlenL9dCzPdOhMJyg0JPjKYs4WSRpcjHx71iMSRXtslmmKY9vUiJ7Y
xkhtliOA/4EZ+aj56JiDW95K8S/czNK+lNwfNuxK1dHbhc6hpjNMygBQTM0zwzvfr/CWYTQt1up0
a7GZPxflCuHBgSEoI3ywwgR6I6EYwfeP+7Qjuqa7qPECTAC4/ix3pkFIh3bibCVv514tA6+A+YWG
gxngGXr+HV48Pgn9xcSz6g8AJZBAA5dwRLUi47BRq5k6EpQH1bJDZwgKI06m+NjdNZ/jkLZcS1Q0
qpqTqrvjSfCH2l8liq34gVy91OqUuH7EVUQ6uTi19833lyBKPrpQQLwIIFbrEN+f4oi8xWNv/HWq
2XdiA42XA0rW4o0Qvk8F8Bl8QLOSTC1Np8HWsfgz2Cff4GWFEu2xzFNDo1G2Ud79eFgQEbH8igUE
O8GpPSLSiWZBAHl2EM5vc7foMYrwuGelv6ah5K0ngluKg8SUiYPryWccU0NvIgZmzsaCuMZbz/3Z
UI4kLKvOo2nozgVlB1ajki5ypH6gMWyg4rLA+1zow9YSj69vPcQ7ms/+EopPs/k9ILnF+9fnkpY9
0cAcQ2jw5dJjefG7FFGRkUZPaTkpRkxVNOpzzN+8YZVU/lKWfUbOfgzHI1f8YzxWNxocdTjuJXGC
YYYjMixNBkArvkcMGRIbkhZyToLGwpNdNM5PMeEHOi8obIGaiTIjtNWH+IysbVIJoe9a+SBNH+9H
P0fpLu9cbHQuj833561GAxP5weaqiqubHKL2uJaDimuWELsv8cPeDH/nOQVibDOG2spgSRujiDeK
YzpGPmKypXoahzDROmkI6J93xXJ4h1YjHDTi+xWLaw5HiG74I47IfBM263x2H1zDuote85xudeRL
GeOcwySe1qt/Rqc3LAEObvsoqb0lTH1mIy418FX7rJJzahRR88TTDqmxDkDfDKP3vd2X8ICdTMxF
S3G3IF3TY+xRtpc0LkVvjTsAoZ6Cm3farVhbZZkdzVaX1JFqJb9ub4+6kNLZYruOTeM3YwTjOG+U
GiZFY2yjRtiRSj30DZz2jVJbIjuvtzpVF7bYxVLboovNTN7dmpdTrEVkTKD4jNRSS1tbUwdFTFF1
LK2PutcrWmXZ1zNthcWpE8MIOqDgRFPm8omGT1Yx9KNhlIE3tg5O5exK8INXhGj6rOGKmghTPrNk
JsUXC/ZH96bD6QIBcXcgE7Ynb8MwHF4lZD6NzIhAWu7Yqwyvroifqm1FtAmsb72OaEg0iTltCKEp
JynSkeMOfounqodSmgR9PhuS7ms0Lnc/gHGBietQEbKX5kc1LYdXozjJKbjXeE7MZuCEB6RwRZYc
HpRILo9LvezoO14l9wy9k82fBRyaBSHZVhAR89Kn1Yar7R4znxCVlkSs5kYTavOJnp5f3Gx12ERO
EYphiBO0ciPDAh+OrAK9Qkgx3umdn1c7neggKUpbIO9ZCThZMC+HThNnpfqmdg7b1vJV0qzJBk21
ohUj028Cy1Wtuf6Q7quO+VTNJqIv2dSlENcht51bmrm3PoeHFVgetGF/C5mliAV97DxNTSfuIb7V
mLvOdv1KG5ub7kv8wwbnv2bopfeGoZhIE0eUQ5RMPhZXv4KT/myCqW1MIwgKA9jG5vB2JpiAM2YX
R0Tpi4goRNj4GvzKbtfMZbbMgLTrk+OvYjWWMRiFX0nx/dV4SInM5KGg1Emp2FOoQvqo87Ek1VEs
KPwnWR2LQm/8GRRhIjEjCaYtk5Dxrblkgc7OPxjhRiHnGC+6TUAKtoc5ZAwPhJst+KRAWyzkUvQr
pcugHZ44lKFj1J4ni6dPochf/lb8izRcPH2KH2YL+huFOmBqglSygWrsbKaarBCSVpmzjS7xY34w
TIBR4OSwZcV/U28SIHDz2lsaffwEMfJTdqbHpUx1Dge3cSY6vZYxH4xy0M7bcI59ncspvPnAWLcJ
DzAKqJPciUhxFn6iRpHqfTlu8xgo8FQ1mRqr6slIok/pifXAHADERFleZdiLzgnddBWjWYbh2M5w
DTREHUwN+6I8mAa1Et14LOFEMw/lTl+ONeQnDrCcepKfklOdmhWMwojTIqQ05uO5XZHT++IFp+iD
Fi0++JjyEfM+G0rU9+KF8TKHb4tF8fJl9DYPCwAXcoXNb3cR7bYCGtSWvuk0Iw/PUWSBqA4eoUU4
1cRlkLcHrxVpN7tXYQla1Ae7L+XTfAzYyGlnQqvHDnB5+VQMGp/GgYfeZDLk/KcW+HC11K/y0j8d
jUTSiHaPDkdyyKKBSmaNX/b9EUekxRYA7gqSe4gdwTFcss9TwnqEHLQTHcsQPK4hJXhSvtU6anrd
0o8qfAiN2o2HKfVHEG4Kovf5vGX65MScBTG4G/iS1Zi1GvRm47PqM7aIZo1NwY3lDGiNh7gJCBsS
1eJhQmdnV7tap0fH13mpMcaYq5p+bkVlcu4LutZN4qNT2zIZpRivfKCcN7Z3ycIIdq2lkr5onzyS
T5aiTvq/uV2z0k8nv7ilckxMbbjn+jFCSgZEICYAH2rB5BQ7o2GK2LH2IHrIjOAlvFHXQAZx8RCs
Fov5MjTjYs2iOv53/bQjUNyAyxkXfU+ZbNK24Jpn0UZ+fX3je3xhVCgfpNTIb91V8rst6ryN13m7
ts7bNXXeRnVakgQ6S+h+RGOC7iGhuijKiW9UaHS/LRXiPZymdcTG9zY3sD9mkBv40PXts1yHKdPq
1rt5tETPFrOUqRH461bkwJ/246ts4OO6CdToIBd33yNcoEe3+pbS60HayA42jmvE7A+HRj34LaUe
eJVWE73iZQrYFWvwbN5faB0aX7/kxBTryVrM0DE8Ioy/S9KSi/ksZRnnLZXUi11ZFNLzTnDZ5PJl
dKzaMtcavM7UW+ev2ZxvIfJnlpvCVa1pXnewtdGCFiNehdDDbb21wp8m13lNeV5vabZrV61Z69bK
9dp/ceNSDALKYcVtotlCBpCLyh+jh0eY/nUKuD3fb+9lraiIyNgSU5GC99LtSas96MojNRTMqB+l
SLG6ZQPe4BF4yecnheiNWX/Zs8gPUAXCGxfIz0Lf98QnhOq4Up2So4Y/ogudZh6e49LBM55PL+YU
eu5Jh5/5mGMOxp98eM64CEMG9jT3voSV/kPkQTKYidUsmE/8oY9rlem6wQX9maBToqgSdmMO/qoP
vdeaGYsxu+I3KZ3yVSqlTK2vOApiLjaXtbq4DX3poDQUvno+Uj6i3zUPUfTx/Fs8auHVd4pbudRT
JuYivg5nM/EU7GrCLGgBng589JXTidqVNLRLfcP2Bv5xyfR4JQla1am5WbuUv/YZOq4IKqs8ryHH
W6whCtZ9MBrhNDA6COKzoCgfmi7cfX9VxQ8lSmX2iAXNcCZ0Yey93gJj7/UjMNaaB8epldErtDaU
A8y/yE5j2CxxPwjEYDj0FihAOKzkMSx3J3H78nULujwooxOz3PcjPZYEjiXzZM8MBSSLIFCJXejo
U32+lxx/eq1IjjxYL7BxOxwV440ozkd+jDx/1k6nvHmlqiGGoTJieoA5NcaY+Y8jt9BcES79mxtp
/GFOTMnH1pOOPf/rYw+3Eqgx/+DfJ1stZErMmhucKJawIG79m1svCGlTJgXs0SFem7zoBwsPvbHQ
z5s/f7WKtEhsiTZZKRe0QzDMlLEdE73XVkmzEXEg+a5vmxBk6wj46FADrxYc3oTvEC5qexwS39iw
cb1ZZr4hwnXsn44vtrK8GbUipKbOBWxXjOARkdvoHHwk7BA1MsGOvtM6oXZs10J2Worhd8QqygwP
amOiRm1ic2JUIslI0K5MnPiJ+ABycwdzOa6ODsUOsFPsWw+QYXGHLrt+ZfWM3kcZ6MzBhsLWMVHU
gfWXbCaNX1EQpKV32wM5NjlTx0w0ZGJQscFyak1mpwWWLfqRAZZu3MZLHBrlbu3c9nW9gCkr7Y9i
RXcSDlbhfEoSzgoTRqQF8d/oc0re2MAtxjBHP1UL9BbWgeEc8zPD6hv5oa4J75UX5tmRJLb9mkEi
PUAbll+1GuQd5nonjc5pr6/K7W6zSrllU9VsFSsSDXVnMJ4Z1GemiTVj/bJmvN+jNtqcsyDatLg4
ZU6ymAr6utuptslVRNrMjfiXTc12N9ehk8YrqVQ3VrKhsY60e2vNjJRs4w+xMZiooORj7Au8MuO9
T2mmxaStwXQuDvCECUqTHvfTTwSafomUDgmTMLul0jPxVBzAvEwgPJFzcN3Cgkfg5uxDrLAq0F+K
dTaWMhl9o+JzdExX6pYYkYD+Ozqbxq1bQhEYk7ayVcxNx41ZZhtBz4CNe+i51nF5Secu8zOJx8Xa
LUacPOwhTL9zxJmoxJPho03ZmMguZcANk4qbOeCGqIWxuR9jD75RKYvpSd8fpfgtqpMySrwHNOMx
vywkvl9ZoQSuegzPQ3mro+kyirAYCe/hCar2GpVP+PY+4IYyZKub1KNCqQ6kLqrZi1SWVFYumzRg
rjHasKLoaNI13oyDS+AnfPsdliSDZKdZWKs3UaU5rHHL+e7oJX/BsQAqdRjea1p9ByPuijbelepF
uVfvflXZ2tWbw9TEGOjryuVRTETtTkmI4aqXAwLSzpB5kmQ27FuG1rYlm9SZH3csvWax1yIzZZXV
BsrU2mUPuGmoVLeiIlrqi9LAS0rGsZwYBB4INAQvVktv8pkDl3ykYDAh1W7D+ow7eNjth30VNb7u
Vh3lleTTFQgoMjGhsv+gvcVicDf322WgMO5CGEz8QSDT8hgSVmVzhUrxMHGm1/I7Sh4m81FjGetc
CR9wIA3dJZ9zYaOUHXhbwZKvK2BoTg7CWV2hpMzKar6zr1FDovLma2LAKbCKNuPbVT+CzvnDKbi5
fwQF0nPsd1Qfd2j7waKnEI2Y/IZbGTPLO+SfK+1K2Zl2ZeDKu7L+5jKoInK6XHMGs+K7rvkeVVG7
ujtU2XF0LNPIWFaXd+Y6hWN0bQ6ldQZKXRftvpGj9GFH1rRzAwLgfvB5/ankjG4+gWbNg0EuNtzz
W0Gyx+A2kHIM51ncuxI2xhQ1fyFlz4q3qL9TWYujk1qbP3yM1qb9W8kNq393aD67G0yU+EFHaPV5
Tj6SSXLuDvuevA0Jv+BnW+Jh5/LcwKlqWA9pz2BLOocK6Sc8hUwN0h8+SoOEvRXGhuoMI5KJlgaJ
EXsjhxJpV2XOgOKJfRM9jmkLvzQ2K24bCz4iJR7SO5yFau7mNPQPIsfReFewaF/0X5Vh3QTxgLNI
/Cbiry7f4ot8nlZostN/TWHk2sxF54xGPzYek0G4GgLvpYOy1F9mnK/qt98of8TTaPWSwyUvXvJw
z8hbXcPl57ujE10aw1vNK/22Vl+nHGg/mAmMa9Ci5jjq32QaxLzKHd6awcKw8Ief6Oxg7C+DkNCQ
PUk6Xv+gmoCimn2TcQ6yG34h2VDWi+W3Pb1UmGxMvKQyZhavUz3P9ng1Te+Lm3vtKo6stNkP2kuc
8Rj/cWI07+Z+fcMABfOL1jKnvgWijSd/smUoEDRtiEFdLWMn3+hdyem1PjnbxqxsdBQbzan40K80
OzT21wx9wBTItS+F4QwRMV1lUJJxEbPd3SiBg6NLaG4ZnWJY8FSXMDPTO4VxRAZ3X+YMapTfYRM7
7TeM2cGlD/7Tp+jxLnU0buTTUwuxtkwnhVScoY1uzxAmsKq4GIa3fqghYN7rAXMeS8Csxz8/nxr+
gfJmXTsjE98FwktXEttLfMPt3lzALV5c8gVaqHJDmDIE6zL4lC71jxxSf72BbA27lVRXNnYzVwKI
vqPYijf1AzK5kzhztI1WSs7GFS/r8ClRuapULsbdktOhSx4aUrZMEvLHWRQ5xxsCSDA/Vlr6vy0T
K299QUA7dleeQQROAiM/zgOlvOeLeM3bU2Xw2ZoE7ETMAxFCtyTiR3ObuNbchoYEjuGhL2O87S44
0XEzdhqd71d5mRH4lA1jOqVOQdJZoItIsRbauDMteu+yLWcfxpGDLXPkByZTRXP+IAk1LvJWBwmu
+qMcXh1MkKSvOG7HEmfpVB7fr8T1Z7QV+GgCFFwZNVjRIQmI1BJ+YQa6GuaO5QOM3OUSTcxsNMIZ
hXeahOHE0zceBNK/w2SCJ42EIAUkK54XZSyrzrdoV8Kxb1+U0YVIwctL2B9O1aon6/rKZFWxZshl
CMURBkWZMVFqBFFMVBTwC7uXwYImLeP18xqB44oXq7M61S6n4LMJpXroIFSRGuUR4ouoY7zREWgu
RGqclSKAaHqvrqd+qKZVViXZMy/fXJupYfkQC90l9PDIji3Nru2mjb2krHscJ/tNdCPwebl5Xq3X
dU5QHHmYPXkuhhNvQFYxzFFDGqlrRNB7LVTWcq9oQKSwL7Ppmpmafc2MHsfYuKdP4/NJlIrFmBNB
FDWNaYummKRX9QDGJxB/+dLatAAYOWL1fbWRcUOTtDaNhh4bX51kNnbP1CPkJ8UonpwwTwAhrPa/
9Kq9qi4ErJOZ9KdaVZqi2CJJmo20xGx0tN69pdlIc5fOxK89SnPEXYuOacFc+GEggsGY7D5spBKz
+X10aL42ibGpMa27wcdU0vjerug2Iy0Q7QuY0m1arvuzKKHZeruuvkHLuXqbHYy3o/PVdaUjSjF2
Yr1azGke47tFqNOqy/R1r8udTrXdVYMPGqF7icbtTpkGA5kbQIuDPoC1akd8+62dfB1dCtFZGS/h
phu/8J4Y6KnbwZ3H3QhixB9R2g6ZkQ7z/3nLb6jXOH1UztmefEQacATIh0bEgI0W5jHfEGwu+KYI
vFS98pZTEI3uO3hIDRobDEq8xv1VpV066ndql9hJfP06Ad6/orrjt7BTTrQ4aAfziszwBi0rB60R
6cUPaLU0CzZHC3UffAx/VqbEo9vcYNuAOUpYdZKtgfbHWkNaNTap2X3FTcrFDEoR3VQ6ccU8jowE
UNN7CCM6i7HXoxuQyeg0eF+B1RG/SEBOdUXMrVebG0vVjdQqCcBSEr2bjlIcIy9WangjS5/GKDM2
aOp69+2HPMx+vJuSFIMpaQWkr6ktLpJGo9AeCXSn3gn38NPTGD2xEXKG0kT1kzLNb62ccIs0Yzdr
Xxu0lVi6Qb6ED2QYHjySDpvYUNqJB5+nUbb29qDwf8P2JblIxjYr/+K9yu/Ycmyd0XnDHWJX5fPX
1W5HDQXXLfDbKtghDbDVQmWa32o9jqxskdZQu/iFYLTmoa9Nm4220TpUflG5FONV07xtiPJmP+Ke
wiRLbKf4bMo1nGuTcxsdtGGvoJtl7AxSOonao655ZH1VuRs+or16CoQPidw2klrX1uPfs3eQ9nge
aFvp0uEmXfrxt8qRuP9GDj1OiCMVRgOA6LXXB762NTUp7Sa1MS4lKS05SvMttwS8gLGmJY/05NPM
k9HiJF3pLB25Xj47oJfPDtbppPGi+m2fFnfxhP6kQD07sKCoJn0seBv4NwWxgN9K772ldfpaG6My
AgigZ/CXTNKjG28Gw4+PDjWmEb/jcsklIRqQiUWZHoBqwIelT/I/ROmKT4xl9RDDCj1MUGquqIlV
1Fw73Yl7S0d09siTYD4PpjA5kER6la5mc5cjw/AQ41IpzqUjS9nEam9ZQUUYDWIpzTZtt/JgIEZQ
lM1UxK0n9vGnugQXttmTAV6Ik5P5/XRCPsKMuhobddWCiW2JVkhL5acksa5mGFoXoeZBkQBTarFe
ZYgn35wmOiKW4Bb1puvBSN40LvM000Euqe4i5z2ASvWrnXvV1KpudXors5ZI6kkuWBLPbD6MZdl8
mpXO4YBzNq9mtMkmHhHPDnBErGWUCbgVq54dPI5VQOJXsAprWc8ql2ENCVnNolQQ0U3xIlDTAhMu
fV988ZAWnUZD0TFUo1lyncx4qTjQ7J5R83HcEwOUhMBQYRQ0KZVeW1kr7ZppG50QB9ZGmhNzcb8i
hoUlGqh4QjSwLNXTRQLdu8SCBNU1pEiIb2Kb21qn1rnEcKQbOluyXsPgNl47uBnvRtne7ftx4e7H
rWVOtLYIzpfnhdEGx+oBXIdg4bDMvu6JvC3OZwcunMaIj7dJnv8a+FWvMWsTbU5pNPWjlA9PhYUu
Sq3DKzwn8LfP9TPyXdpYVcu/vsPNGrlWjXmJT1Pw9DRJAsOYw1i+gYFsmBgknLk6JOEiyReL2k30
4tZMQiGWxqSEQE/oSH8Ik4CEOJMqsvUs89exyQ3pYpQZFvQoa77NGnX80/WWU3/Gd4/96i3nghoY
hVqN1MEaOv0wwbFdZ8YQXyMWXggX7Vo6n/yFuPExF/FINozuPEBvSX+20vdyRMdilnjSZSxdR/wn
uSBFSY0TUmnESZJ036nqdOtHqOdzh49Yr02ac2hvkW7OGenknWjDwlOKGy/MjRaq9qJ09JQnpfG9
9zZb6tov6Mgd9WKiGehoPaNjBVoG8QaUpbjHuxDQoExnAXiXyTWG18HGMVCh7HhAUW2uO6DYuP2t
xUwgX5QPgPPMUuVvVWvZcdbuaEOlpfeRSpu0oKFAPs4+ZgJEG0fDRMYXwOKtcnyZiswL/0jHTkQo
XXJlSu0+3ovxD9MN8mX8NhfDE1Lt+GvNN+W6kfkwuh4jF85hNy/ciMTpSzFdyZsxyHsT+xfq37ue
tpmeLl960ev237ZreEVRvdzpQH3ApYvyefVEgktohDyvnPc71WYFhggmhu7V0f9f5dLXRlksdf9m
MFl5lgmaHitLvkGtPx4Mvdk8BmibczOVar38Pscb+8ngs2EOpe3kaK6ZTKYhZThYkf9zzAzxA4AW
BPcYX/rJPgyInfal4XwV5l0uv64LdtYMCtqAUpbazYMiY9po6RYL2lDDmg1DCnj/RJ5CpfQgxjpu
2YFoxLD6T12p9C/qQHxuj13zOhZ9FQuOT2c/s6z42m5WfgdkWn3Vanf77y7QRvca7QrJPjcv3VAz
sNlqN8p1HOZX9SrGwMg0vtKz8yQbD+mKEloDe/A6mjunpwFe/rHRrk8cTk8Bro0u1NgNTubbeIyH
vpHHwXEhk8oaHh+tlkFv9BlviM7GrjpP2l/s69BDuh9AuxSEfNWEvotHRDmJl3xuqK5aMt5IcaFu
UjHehHTZQPZbfwzKErlMkttdVlu3R971SinneC4r2L43h9UDM0urhRqDe051BBrfItLoqMQJJuNu
D8aY2l48MXz37dt+oKHzRZRVhTPcwxRirXWO3bQDe5QdKqi9i/j5P5af+XlAh7zmJQkGenVfgnWj
q0Q8G8URmHc/SB7Tnl8P6N2XmJ4hfi/QfCHTUTOPoci3eGfrWM/dlPV0qKSwYaTDEt9snHvbRztG
zieU/wsvwghuNPny2PI4/WpsJ1+opVGAZHJOswZGGcgG47EHI4ID3ox7uYICKTWRL5HhvYihKTHn
ReB/Wzovmn1pJeUMcJlP3krkutlDt4KPKNhm+izWH+sv+OQ7kjd41OiJgNDIebo4MAp5g6+Wczde
RUhnxsHN3nTwYE/uuI5zIi8P1SJS3SFBNw/BpAQZTxXEsa9pFd1BsH2zCPwR7XLTy5cbpROc1ESg
kvQ0ayj6cU6Sy2jQX6w+qaVhoe4+WPDlB8YFBzPvXr/lz2uys4nhQp0J0CaJ5y6X0XvBWEiPfPsz
7xrlt5dRPqlG+R26GqikNpoGVSJ6kF4IJJuEni9MMBCrfAGnhswxY9AwBqDfnFqwVVShzLCkqtbC
VQcPF1b/DhfUvcPFXmypktX81ZHOTBw7sqaR8HAbqMwO4JmqhOY3xnUJRJlBFgwpOo+hQqrbiQUA
SdnKOFuq+oZF3U0HAGCV0TZYuyQB0YDR4nkbmtSY08WVuEJi+KFBnXygCYxTaMpFOi/Hde7UMQjo
vkbuGCeeremXF9D8Tqo3ZSnbeKsOaAxUV0FIu8YW+cbc2iaMtyiT0VZC0H19gViqbGGUjlHlhHbm
xU2k9pZdVil3y7yjabaaVVNTjGbh0g4NWso7YQLM7cPLrDFcVYKeMl88GGUtwomr84qvo+0kST5G
O8GiH5H/TSr5CuKHU7EOAzcAu6GvEz3JFhi5sR85ZNbcqMSjZxkk2LhmFLl8bPmi6PQFaWPKXRFY
HkMYqsypTuXeCTrzr2JnPqPUgjDSKZuGGgmxGDH2JttTkWZaYs2UJLaz3SpRbD29uEhnZwTn4GUQ
I8TBLbzRme7fo9vL0iaarLu03dVcWHl0ZcM/pj7X0rfybyde5Y0sKPgCe8ZNM6nw4+GwP1iFa/w/
cNa/wEkPoAj5IV61QpH/GJMHdEEcBRfZ51EqlgkaX1CX3ZI2f3F+jjnFdP7gJGfZvci8ak8G2kni
CiJOVcQqCcI3zci2oCr+S6NG/QADpPMxkhh0NeJXd5mmJ1771t2zVZZIiikK8R76LZJDZuwJCTsL
OwlglN2fUeL05E80Rfm++y1maUJSK3TZKAOJkQNMyW/KLaKVqMR7ThKWvoiSlbovC33dLNY3cnx1
XEFyQdnmmpP4DSc8X9Yn+NHpt0F7d1894gi8iF+7uVX6BzPvjnHpyd7eniOyUAuW6HYT1RecwUan
u3F3gXkvyu/shUc3zr7U5WvbF6XSWSN217WRZ7W0qqzLACaeDGO7Njzr0wdo6pZvIGD4SWfPTdMj
0ag1JWGbi9KBgbRq9PUUky3EZ2/LtW7rNWYk6P9Xtd1ar8GYiRgMqRBz1GdA2WxTSZKMONm4j9KX
xKbtpYaGU8xQa/1WxqSF2k3FntJJ3w9DzOaFx5h6Q6Af6A2BeQL7eAJWIIvxvioHFeqVJgUfGITQ
1z+IjAUopiBKRq4bs+QrTQY9GBmEyAdOUpBhsAwulvMwrsqDAv/qqt3qsoKth8NiKRN9xMDRhtiu
djq4NhglZFawBHAyt9iJVh6GW6WQi3aMRvK4tOUomiuxdWiodnXyFBUdY7FDkvNsg2XrH8vPfX+x
Jk/WI/LRAB4rcdViaOetWrDwg797281kJ09qV9i0i9plr025xxwXwdK2m6qP1e1aradpZ7gkP1FL
VpYzPgBIPdo1dTwqh2WMm2j0mLAuo06lqvS7yYouu3yBt1pi3W5zJR1HTEdyGQjnoTxWNA/o1F1O
pGPzdWXGGR0rLFoaTEd48XPKGbSlxeN+TprfyWljPrs5NrX5mLU6fuOzpYtgO06t+sj+qgYkvLZv
jEQyab5PR7svsTl7M/xtDMmSOb0RSt0rvjJ3T9GbCN3QGtryTmt6Q+cstrGMnke3fceOrbg/zKxk
SLhxfKaTi0SUYuxUzG6v8Dw9lT7pX1INz9EBFowu5BoXTVN3aWXtoyT6nVcSQ118GTH35NdflB27
mt51eT0pPLB3wpF3aiYptVOZ4hD5w26wp35ec4e9fRe6Gkeqq1WqUnMcOkWKe2RGRth1iNRuUl+M
lYopyRHjPvkozWmvV6uIv3wf/CWePH0LBlnwSB7PfXu6GSw0sl3rnuXTd8f11YQm0LdX6wzX/MRO
aG3fY30cdyk1YZqgehhXXKkwrceeS+KlXCgD/Zkf+oMJ9MJI5PDOC2n2SPFls4dUgjjzcpVtboUx
r03Zf3JRrte7r9qt3uUrFPmGe+HXnbyG+6B94Kixz1vT0s2asj+6mCN5+bc5pXCeK7Fqdbx8bLtU
xxcwBeQWACCWZkOKyDYGfu4enRfx7kNMLhv5HDobIZ/nQBblU+qOxHd8180jPJrVsi8V+6ELL+qX
/Yvzc1KJdVfqxKwyUyGgYY1FcaUgDN6kHyrrzkOJvWmVNlNY+6NIQ0qpNCV0Sxdf7/RCmNOWHN7n
fmLBEM36oUwaGM2YmIEORzkVM2ixr1GN+y04RATi7PTOOuft2lm1Te5Z7+XUdOF3XGO5ZSWGJdqF
2Lobb0uUIA5cqOi8eVuqrOMGJ2Gx+7O3pc2y2jnJjJlBt+2s2mWzXE+n174BYEukcmPmwmfnd98S
X3xD5EKczEeaitwQ6yqxSHMeesdkBRpcz+88MYFOwqvm/Jm6dUOgtWWOyRNxTzvwZwGVzKBmOAjn
ICmA0oCvckE8Z+VO7VxxApcCTkCS6czFYII7ZVyH7tDZkBNB41K4mq2C1WASpSqxQv9kkk/lUeeS
QrFrtb6Z00GvS40BqXBLoUO0r52Q06KdHzS5IFnx+G6rpCFxU0UYbdUcu0t5fhJQ4l3tBEp+IeHk
jnVaO5tr9lvoSh/UaXU88Uujh34RmcyRuejF3lpxRKjikpikVI9I1YfDjzhGKAPhabzsCWdm2HW8
sIgB7b10lFvkM7mcakn+yUL8JoyvuQXlfxA//yxe5OOlYXOkS2ODjdL81SwNb/6m9Ig4yAGBlI7E
b/E3z+jNAeYB06rh8i5aJIrHFAweUkLyOKfPu3XFaAen+a2R+VRzOpNhpTVi0g/E9IOPvIOjjna8
P+T38W7hivBNrFuiF5ZIOaA2jaaBcDWq0uhQo350NorfPqZRzzY06rm7UVyRo1HRi3XRiGqWQwlr
t7KafZrN72f6Kit5K4Ax5QMrA/ZJlA+TGcHtcE2fOCO79TfEyGc6RMzaxSd5ywXcvE1lX+mjDiNx
YYMhHlGcRKvGPKEqfjTC00o0SOSBqr7XgqNxfPZOI2evh2LxAKbXP2VuIzp+xVVAZc+jWAUm/ptT
cUBBQzws6HteyKEowY2sqBnzZNiQSuaeFLsXK8PrD2XlOv2vaYyW++tM+pUJtbTLEsgJNhaWxjNI
xQEYXIlaqhR9TBgaz/fK+VIjIWdNFN0nWu2Xkog4fbyOz4g3ygnv3I4ZHQrUSfbtMDQlZZe7NJUb
Xl3kHt+tMbTKhprRSUlv5/d0Vy9f5fVX3a3R5l0y1GCHbN7z58/H1LyOOt4vr0CJmIXyjt54S3XY
WSw8THsHmM2KoQpWQ6TPGCzO1HNRsjtVIXRCaVCEX66aHTSbNKB2g+YQf+nFE8sa1dk9Z5znbtMu
1XkmSHpHyv7Lyv5T5KPONyPusK5HN7Hx5ZuL+b233J3PZFfYm9FT8X/TtqNRJV3OWCIHCCiUn/EK
AIkvyuU+80NQRWHIoA2aPYGgeXzMasxk6Xg01MFw212X5g6etC5nja9HMXHqWJiSEIYPdVZJXTPG
zbYxGkuVbOQaJRO0mOW/JeMTIhuOhn3ztmzr6mwbdAHUw055CMr/Ezwn2vaaKQpn68sDiS2zyOCQ
pTOLFUxSmfEVj7EVKpY+aTlsNZhy5Yx+5/+oFLZtncLWjBfVNed1sh/9CBdwDNRqtrq1i9o5X7sD
w+qy+ypuj+VRY/VL7vvRz0YALB0GqEamoo0bV5GmhT0yblSuMyu1KL3H9G79+SrMyWPAH0yCIhO1
+dRIcmQ+joW2fXOaJDnOgtXMe1jATjp2mzvwEzCcYo6CgweDG+m1OZmgRoBdrGm2JNKXmNZ+s9p9
22q/VnteuU9/TA5y08lE+ujAXlWaDMwFK5NYkjMcX2/Ry7F8crXK/FXssHuWH0gxais2shUqKrBf
flOu1ctndb4J07INKil0HOlBOuO5FtI6oGuGQPRIuhbYdy/jAFNooiuYYzcsJ4DMu5g3wpZM2OKa
xkdd1+9cVTHGlRzH13HAcLXi21TlpbaaD871ZvMw3jCCraFo1/Mlq1PNPSLTnCtvIgiPKG1iBDAd
POhX+UgcpCYadmzWts5yRindrSRnf0x6s/0nWfFEVPzBzWwe0M20IMhgCxdksQK55HIkIC26fG+Q
fQ0VrKIDXF7V7q8J6kDvopPJHPJhlMIwgHIf5MuPH/A+Ksrq3+m2QQx/PNHAqxlaG3EkYCICjpPn
tGLkkIlHW4QKXz99+lEebBDwy1NVO073qLxh2hjADBnIm7GiVUxekHVs9w7e9EEtlq/RLXIQzgM0
BQ/y5r1Yhrck0QYbyaQhU2I5cuI+ipAfaexHGn3WPqV0VhJdFheQxpQI9kz2pz5rVBY5fPCBLK54
nokL5EepOkVFEQbrx7tQLVDQ/J5/NO0A+PzsotHN7MAsfrdjv+hUrzI7u6CnBzN5a5dEbLhr84O8
dHXR+Lb5BOg3lPr3QGz+pNzWkfXFj+x0AcJafjhQH56pD4fqw/OPZtEj9fhH9eGF+vCTxhrhL1mF
S7qakq6npCsqsYlK5RzgXnGbflfTRS4W/28dSalLY5Sdl8KDKaVcZGOyQ+hOtPUIE/pbUVbw5HtR
OsrHrznwycjkVCr0gpTQNg5HxwIvdld3ASRBBK5FAPGE/eqHfLWBT38A3l2VCgdGM4+eihTuL3k3
8u4osqUfyoOMO3mlebbSrr2ptvuNVqVXr6LbGHTH7eqaFYbREvTqZcEqQysUruxcBOq6qjYrsmQA
v0r8DyD+48+f5A8wahc9DK+D0W5pr7hX3P80nY/2QWWFN0vvZu/299dRLBaPikWBf388ek5/iweH
/LdYfPb84PBQlA4Pnh0eHR09L5ZEsfTj88Mf/0MUf3/Vm39WqGgAKZ9gZ3XtzVLhAGw8XoOHGyP0
3/9HfvafZL5rLbzZWaeCOWaw1/duC3eitHcoDqAj9ouH+6UXovTs+ODH4+fPxY23vEXzRfVhIb6j
Oc0KVWvp3/h4hyvuDeHzbShywzyiOIIys9VATK9fiZysSsA8RmfQPBTF0leYf4qdePHugsArEJ6C
gLHoj+EvnkGOMObQv16FeDeHHwg0XdzjCSLa+Aezz4hosVou5qB40CkfPMa/oN+JseehhevWW3rX
n8UNKKwhmsxg23Dno80rvB2E0SkoYoragfr3kI9Bqd5FRKx6tVigmurP0NSKJX0v2JNN676qik7r
ovu23K6KWkdctVtvapVqReyUO/B9R5SbFQJC21mrLSq1znm9XGt0RLleF1CqXW52a9UO4npb674S
GNDYhiItKAX4ItzN83qvgvEiWLDWuKrXoJYIgWhdII5GtY17m275rFavdd9T9Re1brPa6ewBDtFs
ieqbarMrOq8Qj0HZWVXUa7gvFBetNqIqN98L2C2d18r1AtDdJnfmWlN9giLnuKH8pQfoAEZUyo3y
JRLSpqLyKzXsVbnbaUG9bWhep1fvYjMu2q2GqLc6SDnsFKpQR7lbxtLAQyC5U4ByVSCwjXSXm0QS
7eGwADp0t8tIR7N6Wa9dVmGHgWVbVKDbagNgryMLFES5Xetgpa1eVzKqRWijjSFzH/kBtBAV1fYF
ZqsgxBd2b6jeP4/NhoMDUYYehmZ0oPtzS2/3fumHPIQvQAzD3FBzou14hxdEXPkYPCqulvPZEMbz
Z/Hzgp78J2ia8+VgD9TslxqFnjM4WnEEo9kMxmkwXy3lmL6GaQtYoOwUVtPYxEEsNAe1cYfubsYZ
QLeOJCfQeD6ZzO/Rggsb5BHd7Mzn/FMPthhM126MMsrWKUnCc3ROZAW60MCfGb4J8SlZQFyCJyX5
LQAWs1KasCZFaHudDPypt9xzkwHVGexQZEAjRys8N/xXUCJkE0fz4Qp9rvl+UUIHxfa1s+UUM7r5
g0kQ8Zz6isoajZAta3o+JyCB1xgTghTR1SKa8tv5BPO0zuYREPUD3iJDVxgjwvkyYFqmg8+YPG6F
ieNCzA84glcejhQgZzoPKX8fcAkKA1ayf0qPEENSMyolk4OFN8SBBSV9HHFLHFIzQ7xGItSSc4YM
PXtPE/K8dfW+Xbt81RWvWvVKtd0hqUYSoHbWg7neUdKWxVaF5E/1HYWH0ERPSMtCJE8LAnCAXOyC
+GvUulWUvQWsF5E55ew6IYvCU5TFVRkE0HmvXgY50mtftTqEDdunFoBqJU0ex5srJW3U2DNCFglr
FrcJAQ0tBC4ClXhNtZLj1XdVaFK5/R4FOIkwpwzPbWAPdNF5r11tIOUsT9E7rlvr9rpVcdlqVYjv
0q2rc5KU8wVD0J/g57MeCGhgIHEd83W0e1dsH37VektLx3kZSleI2a0mtRm41Wq/R7zIDOoLc9GQ
zZPrRAcYeN41IVu8UBiNdS0mb2udap57j9eQGlf+tvxeLifRqhFbJgrUt6J2AavCmxoSz8CkEwFH
anL8wNNO7/yV5P5e1lC8GvNr3CmeLeeD0TUKmhqGI2GGNng18iYIcxuGi+P9/fv7+z3YE+3Nlzf7
sH/yJnOYa8E+SJ5gX2/J6BvaOHbP0QHMH8yGHu0MFqNxVm7i9JnS3QBkSDBcCrnXzcgLOMloQsEr
mScEAJvCE739M7NtZSWaAwLL8StXDU/uRjLDDV39GTPQBPDww7MDCjCXW2eAR19yLGtdNUAnu/hO
Hu+qm0TlVj8qhjtd+Kb2utpmg3UZocJYHra+334/2tFXhSqjFHHjS2QesuN7K1V0F6VB3BH/xK37
37KZf8aAes3XzdbbZiGzI91YdsSXghMSJIH0wqxWAJxPntnp0htRKUehTrUMogqncWYnACV2eAvL
U2oVr1qNKrzZuZ3DiiIPKtIwy+hlwBuLPk4rgCKxWW1DgcVgGc5wbVpfAGRXDZua2eEQS1h5Zr7Z
1CIf7YkvIt4HUbKOZCcYVdk5PQr4Evg682IURWCXV+0Og+GnVLBq5VJiw0+pYL1GV2LDT6lgrzqV
qzLD0cc1gL0IsLcWEND85i4NRdeUrHdlw+BDKlDpXbvbZbDzSqN8ABvmNbDVN5VW4RGwMEDe9MuP
KPFmO9hnj6aaKDnbDnuvcbYl7vNep9tqENYhKKjz6TYDvtRtlcyxnpvmAR5+F8S3U4C2gBuwzOIq
75ZQbnxWHrZ8YSOoToG2DayRdrGwCfhVq9PtU87f7eCJ5grGB29L9LbAkmoFvh76otfk88dHkI6q
3DlJcY4B4kIbRoKETYwF8yXe6DZ1jYxkYUNopqGXsVXEsnVwoOG9Z6B1UBflWh00y43YOnj5AUVs
4TV31YrVY67ayxgU0NiI1wye2goYFHpUxDcDI7XREr6JXrkJanNc2kWr19xYpNlScS8gyq9As922
DqoCFNQatGNTGRRUfbVodiNvAnM4u6qyAj1kMhfmwppSjfI7nS+kooL4OxsKxeL4NjXoTYsjhep1
KNUHlly25WheU0jlEyAWKAI31aQa/6hClFauVoECOMn6uItpXm5bCDYl0LnlBmhfbzfWxKFHV7Db
alOyrC3rAL0OKoAx3dlYASa13nZ+cw7zbaFh6F+9AkF81mq93jxrFcX9bqvVr7c287PTfd2PxNca
QFhtOJSHO7leB25uZHyj2oBtrNXWLfguS8EiUX23bQ24S9rUhItavStFghQjm1tQoTzl8AI2zn2y
E2zbCiWw5NTQ/OOFLq00OaLCrr3VblNKoV63ualCKtJ53zzfls9UoNy4YE5UN7bIFAlbM67T6Kgt
YB8+n5MDyWbxg8WUW1q31qi2ehvJwyL1cvMySd+GQlVgM9pGHl2QrOcOfmxQYFhBcusv/C5VfUkU
jWsvSdySe/2LdvkSrVkWG5PgCqyPZVoXfTadnVurX7IUe2X2G7UOMOT81YY6Kr2rOul9FejbmFqR
hEb2oo4bV0CSkHKcbQJjZ62YopYEw6VZ+chqlOv6lcNyE12zScu2g3m30cvTQ3UNoZJe1ojA3bI2
0AJtpq4FBfnY6W6JGQ0yfaWlbUtNu8puy7qgJU3SC0oF8LHF7NjgbYm01MFte9WI6d2yiEqltC3r
WsgE0CPcyuYa0oxchW/UArZFuXgE8Hal7EVzSxJjK62eImo8bt9pwH8oUjvfsmK1UNUqMLhe1VjG
bi5WbVTbaIl/j+5C2/Y38FNSyWrMliQ28Ez6vNxu12Acx8f/2t12rZFm7DWMOxoKHd+jnUmB44eM
RCFxy6wuaJdKlEiti/fGuiKMv1hXBjbJ8BnAMYIaHe4lqAtWqlEAzBFKa0CBFL3fkbRgjtC7Qbim
yfUW9COCY1LBGPr0DgEBSxne1vaHztBOZl8R2XxTwKRJTpgGOTckpnwHOPyzDiF8OGCwg3VgMGWR
H5wgfIeTVgj4kuhAq8RFrY2u4PFypSCMyrp4IacpF1JhCmtrU0VQlsCUs0tiDgwvqtJRXIkibYZg
BPIAfLmWWlD9QaOkcwUqNJwvF/MlBlCuK4WE1kAdwLGFuVCARH/0me5PS28l5vbHzuq9XtulvdcH
DLWxS40O6r2OdZCqZF0HUSHdQZqsLTrIKqk6SCLYqoMIQdRBa6g1OogKGR1klVozlV93O+03/c2H
aUauYPtQTdiHauuKcPZhOu+WOY8dB2UppUhKcSGHcE0UYtsXV8U5lbepSlnMdCG7qnQ2RirJFqxM
AG9mZaKIKepTxXxaKdkDXMzBF0drzPpG3vY16pKqK5y1WoyV0SXkqCw4MehgQgGZHh2ee7PVVOe3
ouRLHIpeARaim3iBYl98fYQ/wrwFGPjCYLiPYxCkWEi5cDsIxLWHgZALbyYvdowi3Akc40yHEx/v
C/KNsHkDlHY1DMyht34g5mbdII5oq8QwmMQMIJbeYPTZANLjnYDs7OEIryaBSSNr4FgGs26omDcZ
MMxyJILuXTHq28GdJ2pXwkp9g3BfYlkZyFVE7wriY5t6MOoC7OXYEDYYL3aQwcmXlEdgB+PyNWON
8WGyV+yosOYEgGav2DF5G0neGIPjAsWkR3MUparkZxwRMBKm7CJVRPBIBljoRYwJgxEZiBzsfc4/
XHY+wnMykgp/PgwnQV4GT2m3DV1Ge4Zk5uoGoUyGr2Ixkt1kMgt/9kGvD3zJz0cNz3fFoG9HVICv
WUkvo6+YiY2H8pWCzWRKxaKJcrCYfbBBInSc4TmGC63nZDyXCA+Kz018Kh/zBwdshNnI2hxDf1Xu
dGB1rqSgV3mWPzhgDd5F2Zgp4IQeSo8MI68QACauJcGpFA0DKWxk8B5lBqHhcAkvMWMBD4XESCBA
GAS25MuQ946nqfRmGELa13RZbDAO3DLFxKtekzcCmZL9qvc6KnVgjKS+XTM+gZnkTRdh0J944zDq
cint5zP9KPCnseIqe7/5YDofRd9n9xSWb/QHykRVJmJ/4uoZjJ65V161t/cqSS9nTVnTbVY5HFyC
QeIFb/2bWy8IOfImYxZS+t987Cg29CYTGa1jsVtqgOZ0gAFrjVcpzT+kwH+MYcTjmmY7QnZgIeOp
agPFMERGvlolmvPWHALt/kMKaAxZ7fzcwGK3zB8OJR4TKoZA+kPREYBCc/TMRCNHf/gQfnAX+BgT
EGixMVr2wkRGWVQ/xKFiNF28xZmrMTyzWjW+x7n7IQEXw/FqHY7bCMerGI5HS97fKVl/p+Q0m/ym
XO9pzTez+9NPP+nZHwS+zR40MVffUXRzsxsTX/juTbX9Hv1hY+ILX9FjkF3x563XmGAq/rRRrdR6
DYxBjr85KwOa586a6dWRg+Au+u7W6f2PqnHX3jJaQm7vZa5JUzyaz5jhR4fUX4uJP/vUpzj5E/MF
alvmK4sSPEGoNDuwx8sgG3RaEQ5Bhmm3uDsczYIPNuxHXri+9cfiG0Y2yvnjZX8arqJkc/JBBv/C
/9Ue/uqDxrL0h+oyUxVN3H8N46taTyyFkUIv1Xh5ZWeBv5316q9j37rqW1OfjBSkY6xeLzFvgfin
nV8FkxtMg5uMuB0tT5JJXTJPguFJHA+ne/lnNiOvn0bnXLyp17uLJWjJYHFgQjRsjVQtmRz+5kzC
47xRcOqN/AGj9Kd2OhiukLCurOpUzhquUd90GjHjoxElK3HjLigAJWLkPXxg914eavjyjlIS/PdJ
4pk/s56p/PTWw+ngYfEpdDyV9xQE9mB0ZjjKYGqoYikO12xxfDvgJIADc/0UKneSTSLffRzrdKCE
3uKY+MfKW3l25+NjLk4jhPcDnPji4ONaUEqusC1k6G0Fmcy+Ee8vlQ9E5YYPHyTTMc9PLPsQ7qRW
Ib0mEoa3N/0Q42VUagQ5nD+zGms8UtsiJYGiwWReXm5XpzfcNDLpKj6CQxwY2p3hIYv09yly23wa
XUdgAz9IULvv+XHwK76QaR/0ixnfA68nGfW5fitHgFVJqCrR+fZXY/1mmqg8NCqPvwjwVvrEc98U
yqozMAmYvDCRLBvGe6nDRBC2Zm8NIHwvpzl8IgkWBY5LqYsy9n86Rvb/zz8p8d94T8AfEfpNP+vj
vw+fw38d/314+KMolo6eHxb/jP/+d/xY8d/c639Gf/8Z/f1n9Pef0d9/Rn//Gf39Z/T3n9Hff0Z/
/xn9raO/v/XHMzKK0cHbq77e++kHkTUEz1qh3+kNWvB+tP0OqBsvyugUWe92ql1c9jOlRLA0+qWo
4DgyqDxXjW9TdLM8+uUD9ZwsZHmcZs0rDxSA5b2AlprUIO0oJCtjGGltKB1GnTENtjYM+upmTMut
/Vqa+zOmBdeGkAHSGdOYGycWI6IzaNJVrgiY0loeDYEYDz5JFkVRWg722GHPyoxFP2mAGO5sApbS
ADHg2QQ8SAPEkGcT8DANkIKVTcgX6ZA9C7KU2px61yTyIBWOIpkVZGkdgzgiWJsEN4NyGLOEP9wI
/0ahfrEO9JlBb2lth5oRzAx/sBa+1ziTeA/XwrGrJIG+UGNKjtVzD/dPybGKhye4VqaOVwSQw7DT
WDMKIzgMsrZHoTLv92qVIFmDyvcJEuAo63hlX3qkfKYA/+CgIKClP+HvIWbLfnj2DH9f0+fra3pL
vw/HBVnm+ojeYWLDhxJBP/OoPOEaDPC3RzCjMRaJO3QRRfpCY/J/qVpE/UjontPvA0LHTw7p99GY
nhzI36oMEXJEpB49p99eVNLGtZGoN1dNk56fCOtPXC99vvYitj0nSg4P6fmPip4XRM+A2Dikeg9L
xCr6/QLvg30Y/0gwxVR6MIU/eVIZxIwIwYDQF68jvo+JmB8HUdMPn+keG0dsGVKl3oHsU92TY/o9
euYi5rzbrjc6l31YAPhc+DDlvTxkzR3CUC0dFA/zMUQA0IHF4L8Q05tyHSAxZW2piJcdqVmG2v18
oq4dCETudg57FlDrx6sZ5bN2zDAV2A9cKvVitKlAflz64u+iwH1Y+GIv7UB9WPZ66SQq0pBMJDeN
xIpar6RscRMbh0ojm+E0WLwByZB9A/gwBuyI1Y+Af9RNv/RmsIEaKjcb3A87xJF9aWlSe5HvMSI1
k1Ba5Evpnp9UWBTymh0/n9BcVCUcN5/UWxwXkyY0FwNGhcmb59EmjB0dj3dVOTElo+IzmRcpCGPR
8JnMT2txmlHwmbjuoGIcU6LfMyV3L6SEvWdK7k5xx7tnSu6uiQW6w0hwd5E7wh1dZVzQztB2XBed
o8gV0p4puTvPGcqOfi3rgK0Q9kzJ3YWx0HVy4FmHNIpZB1B3z5nB6uSd5AKygtQBKq2fouB0AEqZ
I4mgdABNYbqMRndsuiSEMww9c+DmtB1+DjjdPHbFnaM70DqUvXodt0QpEsoRaJ555mZ0MsAc0Lq5
vSmyPPPMPUscMeVQh7uzEsHkAOnuq3gUOQC6u8wZPp555u6ytLBxcnlNKxALGEf/WHfHuEPFATxl
JUkNEoci7j5KCw+HAofa9hFd8TcdhOr+huja+WlwczsiB2T0lw9uxK03UM7k+pQbY9hOyKNc3RhI
twNaMOgkYoHIW0NtRP6Igeg2jAFrKz45un8Rfb6ldhS56BCF4+VAkajxzPChxIQX+Yhv0SyLD9E+
HPPGHK6WS4ZH13n4gg7+CnZj1QjkjZBPfUlFkn0Zy+XIpDpDFafXcHsw7qO/PF4auA515HAwHTyQ
P85alMPJPPA24FyPYDr6yqYa7iTsXWltDT9abRmq4TCcT/GmXDkUbDWzUWld9X9pv0/ob/yGpEHJ
xEo+9NFXebG2RRn5W35cw4P/r71n7U4jR/Yz/Ss0TCaBBLDBj2TscXKcmCTs2Nhr7MRznBwWQ2M6
hm6Wbuzkzua/36rSo6VWN+DHZl9wZmKQSiWpVCqVSqVSvzZAfyo80nHF81j/Ono8RGdwP+BOZvJv
WhSIZGAHS0/mYFkBHZJaM4dOBHKwdGYRJsEI4GApzhwojttgG/w4RGy83EzL5nEacpamLHYrWniG
HKrI2lCQG9JMmuPEppmIT8TPZB+FNMd5bQ5imJ1zUf5zOdJu8F2Y1Fii+BmgqCekI90M01GKbcuM
b5Gz93Mz4llYe7tE/IqcbY8WQSjoemrSCqHFp8jZTGnFo8jZnJkRf8Jm0tR4EzlrK2fHl8BKf02p
1NhnERWTMjcRQIJgUkgtRoqyU6ibFiICQVPIbMeEyNlbtLQgELmctTdLifqQy1mbsrlhHnLWBio1
rkPO3kClBnLI2bsnO3IDUjK5fUoN1ZCzN1DZsRkQeN2ULzDj8YmysDvxLtxJm+7XyftJphKaHo7B
NrOkRF+wzS0p8RZsm4sZYMGelsmoCinmlrRgCrbBxYyeQDM0lm9EEsMLNASaBf2+IQUxDcMfG4Be
t2sBYpoATDbitNn4ax1ZRpjiMgFgQE/4dNM1Ie4wqqvNQXusPUuKgZ5VnmiW3gFsE38VduzPVDCQ
Z/idBnlj1zx5i2UptytY54g6QDPRC3ELbNHK1V06hWBw07ZukoUqbSbesecnO2NEvbC7koh2YS9E
RpAL265oBLewOTwtqIXF5NlxLCxOT4tbYa1HMyJVJFekmVEpkutSehgKa2VKjTthL01GpImUZcmI
MZGyLmUHl7AXprRoEvaqNCOAhLU0zYwWYS1R6fEhcmgyTOza7cAuoC+363jelc68lEvG2FTWhWxh
g07nXcjnr4IS72rixdiU4X3SpBykW6dc5sQCi+4nW6AimUNbTRDnP2s1Tf+kd+TVw4TGVeh5AsAW
KFmEld4SatVIIW9iXUkRdPpCM+p4+M63unu7QGvRt041WQfATAzZD+lWs1DDwCUxNiGltJ2AOG/s
pTIHAcQnFHgbLe4Mv+9rlRH2q0wXkxikeQoKUeNNas0CZHf/CHhPwhnVc/sXPa8cN0lcfdeThHWF
lj2gWLXE/9ZK9ETtdTvklMSffW8CpE4k4vud2lfQpOTP8Hosv2IUF5XMo+e0MXoO5VFwpDkDLa6r
dTvjMLk+gfQiyZBJUQlQP3hd39tLG0oJcVw/OPyQPtV1kJPkXIfWiSmiGeHUjWjcTV7j08vhllBP
Dc8F0+BxHUA/xU1qXTUZWWk4wzMqiI+bTOThKEQK6li6fjQZJhPxRV/twptuWQwjVa8lpcxcSxek
vbdViKdawPyasQUtki3wQTr4IAOcpONcBU9zJIsjs8Tim1xubanOk9MUXPTS50fDu6egKsG26U2a
h5mAOYCJjWf1hsiENnEjcpIT2vKtzHt30hb/KliB2RAuvi3mMzfe5JWY7CHJzVlOdgSgESnFw45A
FI1qZtOE7I3T6D1yGQth4fnSRe/zW0zj23KHmY7e1qkFKMMqEscFsAppWRl8+HZ/910rQ6NX2Zy6
yRPrDGC+KVfGCxg7HpQmOTR4y/X2bMrjY7RlzKDkFiWOeiUnGK/bWlwtQH60bk4yOcNu0aJZkyar
BQlf0+ymJkKN2fpAVnwxW2HNDCpmb7yyIonRe+ZJHU6XuTyCSDten7Sr/VlX/pM3/meSHu/HdoYp
IpnHWYh/wwi0J8mNMN4bj66H24ly7WgwSZalpJlNEYGUjFaIldO4I8sFBrcRarHH7CMeARID6Iwp
bMVJvMIxIo5CsmowM14Yt0SESE4TD+Q6IZFtVHVkGDvDQkWJaYgohsZeBiqKo5EiIHlyGro3hwd0
OYP7JzTTiBcDyC1dgnzjCR8ci4SnJ+/RppSOWOUe7R5Zs09lwjbwyJpxKvegxfN1vbEzjQYg4KMU
RuFemkdif/5293T/JIVXdKjG0Yd16xDAAtm0bP82FgBKGlRtoN3mHsDposAb60ow7ULxzpD7NbIO
XJIbVZuN2TOLGdkztMzhS+0p7IVIF5mptqDOnK5ZQQ1t9sgMZWgzS3b8QotzZoQsTI7PzCCFxiDp
4auS247tlMGcP5YpS97MgcD4LG136JIzgqlQQ4++xudovL29mUf3AuHmQgipG4jwvLo5T+Hwxm0j
iOAt+KZxhMcy7fe7LfKvwc16MiRIEu4dRUFSgUGywPaaLQ1uPRPu4ORUg3thDCsQn5RhjL9gDjhQ
UctJFvL5SCRRQaJl30dMaeCbGngS0eVNKhqZbLWm54fh5NpqD09Ob1FqkU2jSBLdKJpa8JR2V/0V
r3KGkdcNbX5Ca5UH+/NJz2y736ZZZahRaCLsRm6UTBRh5PTUYBqlwGKqCcyNlpBs1KZS46YZ/UxG
QzI6Tu9lgiAJuC/T62+Rm7vYJy+pbfV7TwGdCIGTTG9NL7gsMtj9A60Lfzk8LlxjPCL4l718yV4U
2WP00O8XU6AbTQl9HYPlph+DSS930e0h4Aceg2BbJt8cdL4Kv3Nxah+3sDkdXbiTt94Qg2DGyVCC
p7WEbVcharnkXCXTOfioyePqvemMOxfe0Is8N0lk7jXQfHPAjlTQTcMlALLaGJ6pefJa91FFR3I1
In531PYjLQYn+feIxsWDwokxakYXb7kDXUtGINw2qpM2ypPX1c2kdDPz12pxvKM9Qt+7AfQNHyli
kKjZGzf8Pe/aCykyop561Pk2DDq9YzIQ99xk9u4QtgRI2zj92MWtmdurbpv1Hk6jtIohOa1mSJ5Z
NeSn1K2qwXt2l0Dv7BGt+92ghyFwLBeP93vH1U26XfTJyRX4w7IFbTC532J1swiqkp07Djy88wnZ
RQstTOp5aNdqM9FCdtHgLNkYbWeOXMD70GrQFYj1F+u99bV1VxuPFu7koulEG4v3hCnBkDct9+9T
1+9qcK/RfpwEI2boYdioNGmsd89uKFBFNHTzxWZvc23z3g2VhRNNVcyY3lhzuLBxTfQabuy13jfe
nqD7QioAzH+AKYQkDEMQhunlueDr983hU9zS7iG7apJBcrBoaTJ5P8sz08CatNeIRkF1jaNWDgXx
6sbaxur6r5lgrUbrHfaK941k92qfPkV8rdnGWsxCBWOMRMIbWoUYG+L57bcskv0jtYKZ3GFxJqjO
8YBz52PP90bTEcaggRWA9aSsKLGLacS6HR+DK4yCCfc7njFa9C/FVZszEsDi8fjKxlsjnMxYZIyN
CaUTC6rEMcbxer72fHUzfYgRSgyxHJl5w8wRpw8zn8qI7D7jLGu41TjLZWfTmOnG4Mfpao2qPRBL
qAHOYInUQGp6Kl8i2sv4av/bn4z4b8E4amOwiAcJATc7/huPlybiv63XNtfZavV5bX1jGf/tR3zs
8R8Pp5eevwIZKwedKxC5Q/eedcwb//Xk+NdWa9X15fj/iM/R/um7RpPuT+7kcjDojkiBfTSa1yGx
WqmtVjYr1ZrMOq5zD+edXFUm4Y3pevMEoBuwOl2KmCxBH+N8FtaLPFjV4VEzdP3QlYUOdhvNE/i/
fryTs6KYSaCPHz8CVoxhE4ogNjEMrGgVz+8Opz2X5Vem4UQwb7hycCW/VkZXeYGrtdeAmnI64P/8
2jdz/j87wiv6e3W6WLm/XxkHYXSHOubK/831xPyvPl9bxv/8IZ/JiJVBIbwIgmgFFv7p0A1XvH4b
Rr9yFThXw97XiZvI/5+fM/9NnwXm/z1n//z5X93cTM7/jVptOf9/xAfWwAjD1pZP2MQdup3QZeWA
TWC6s/Iluxm4LuSN2MbGBmPlU0ZrJ75xNcwQGQlRspQg/+afmfN/fHVZpqOd+9UxV/9/Xkvq/2ub
z5fz/0d8TiimNQx5GeNX93qhfGeKbqnun2DkytcYBNgdUYBcqcNvOU6ZXbkTH+QDn9VUgKv7kGW+
yxcFwRDzutGw8AKzB+5w7E4YP/ijkhiF9rITuTedb4DQ9yj4rEPNCyMPJNTE/fvUm+BdWjbuRN0B
hoLiMW0nLobpDUIsg9HCQ3aDkeTgL+Q7ZktgS9Jh3Ql8+xJcYIeCCcaEAFz05BWUcb+O6cG8iuPA
3mOLZW09/tUj9zCfmfM/nHRX3Ki7MulW8GDMnVR6K7VqGbJuVcdc/b+WnP9r1bXl/P8hH75wt3F4
d/J/1Fv5/xK+Xn4W+8yd/8HYJ4G/wmV1uCJXAILgMr0sBHdGHTjvZ83/58n9/xrkL+f/D/n8/NPK
BYx2OHDwPPq6M/HQKSx0MEhD42wnHyv8eQcDw5GhMG8Oe95pvaa44jv5R7zcSghI887P7le3O40E
RrLBvTnZ38lzFgMMeef4YCdPNoi8c3rwmnIfCWyCufLYMBn/MXR+nqJvjtOmP4Wi86eTc7uDgOVP
MWGLPZKtjF9RzrPqy8c1Jzdxo+nEZ1XnO6JEJw/H67Nz9uhnVvZdVmWft1Fj8J0cxw6Yv3oRe/TK
6XsAiZczoHXVvIM2cf5rJRqNVx79yTO/tyfBFOrMO4IwO48Kj3ivcDOVf8TB8kVR7StWdv/OVuNq
eUceSbKyl/BD1pV3co8UCaWG5LhDQlXu65AxwkfHB6xcNrBAV/Txv8X85/cfVlCfWuEXJ0LQB8Q3
2v5hVgqPzVv/11at+b9Zqy7n/4/4nJtTuUJew1707bMjriBsaVv+26wFTux+tvVL6KBf3xYv5ogw
altmAQZQ0o8QOGrr2AW+DAfGxiDeYsSze2lNuM/Hnv8ousVYPtAB4Fz736q9/99YW87/H/HB1XIn
x4fbOdhtyu+VF44jFvUcsYR21PYbMEtlPAkuK6Orl8vZ9x/9mT3/w6B75QX39QKZM/83as/V+v98
fX2D5v/zzeX8/xGflafskXhejB70W77nt3zPb/me3/I9v+V7fsv3/Jbv+S3f81u+5/eD3vOLX9Zr
Hb75vXFovK0XJwGY3IWF38IVL+h2g1Fl8DK+TNRqHL55d3rwmu4FtxuHH48LT7wnJVb9dbXE1NPy
E/fvRbyHcOlGdBWC0S1V7WYaomkBGrplmGOISOKppuAJJR4y+yQRvVOIjAbVZjVIIdJvLShCLO8t
PMxn9v5P2gLuV8fs/V+1Wk3x/36+9P/6IZ/Kp3zuUdONcP/nwA/839Jzqy/SVVVBM6mrBpPLl1R+
F901sHwI+ha/+FRRyB9AjUU099djCY3SZfFHtXJPVZawwEfokXdUZhFJzW7KrdXZh2iNUGglKkOv
vatKKzlhribIt6qFVpH97W+k8T15ktT3CNGddT5ZjLDcX+lDjY9Q6VrfzG049s3YievKHaG6jYKX
rt0RmttpeGnqHaG5i4pn6neE5s46Xqzg8ebcR8mTGp4g8721PEQzS82TbP8WdlJbbDweBy4trqVr
EDxrq2RdW1n9daVaY6sbW2sbW7VVUKuuOz6rfx2zWDo/avTiH8MOTGcQFFG5B/Nvi52fDKZsd3rJ
1qqsurq1/nxrbY3hy62feZG9HjvoTLoDVgPlq4Yv21b2IiYOqV84lUMQi60BwwN0p9IcCac9+EoW
u/EQNo4w41Hb08JLkMlOqpHy/enC+ruVfXx9GfG1/mgeHrUaLQPn4Zi9HbJrp7ILYoaOxikNfinc
jP+maIwEV6kAIY/G6Xjg3z6Cc5e/Mp5cGchnlBthOR5J1yoC7cenrI8bxMGIwhFOkmFCbgZ0dBnC
avJ6yMpR55KVb7weCMGz/hlv1Bk26uzsjJUxDg2QESNN+FBnI2JpzT/qwMacWqSnQkMpLaZTM0RS
fXq8g98UxcYdbwLrJz6ogu6WQ9DHyT/SI/PBNzbowFLrwjZd7N5BZge+sCzwR1GwSIW7YXawl7zH
FLstmPSQF45g6tAzlWhJuHBxtaF8wNUJDTxOZ3JJq0dYcd5AOr1nhepXhLSjxeJn6dUJKr8ycoh3
rRAFrdfepR9MSKXgRNPHbo8zaWiUBDpjFaFazGJ41XGF7dqp++SxgmbtCzQ/o/crZNeHxA4niOCM
zqHZutND68iEDCrCQRVmgk/xYsjXtMcX2c6Qqc4j0TijdIbaKTnQLvSIjNBy1WLSYMR18E7vC6z5
Yl2lNnh9zhXsBcNBcrGx3LTTBQJBZbQeqyU6mlLPmIiQRgf9TPn8VHjXgLthnR5ilqhXmomkAEgj
bQlr4Q3E/NDVe9YJJXF6fPa+RWUOeuZek4YR0QyAij2kAmlpwGxo0ofO46WESHCdwKjPUN91e5L1
1GCW0ACGeLBYLJL6VK3XHRg0dpCnOAKYJMgXLjG26C62+TR0E/R2cAZCiu9GGOqJVR3AELquwB97
JxDHqmhbvPuNPswSMSbxFIbOXwIz+SUixQ36PBM5SWMzaM4f7ZJCQBACZxn6K6kqOv43nf+MilB+
DYlQ8M2dYGBHNNxdg3C55G125IiVlH4o5zJ6SuNccip/HSIVHT5BSEjAfz7OrOHwG6OHnACJGw2/
ldjUBx7j3M25n+TutUOSJUQjJBIIquMUpP53O7g16LA+HUZBA/0IbY1CMAg6dKTfyAWKHFKBYYfi
0ukNp7HwUQJxB3kk76LOletX5HzW1zJBZGh+KOMhMWFyscX616xPmniHoeqMfZTPQkzXR4wH5yxT
UAen5fJx3j1qAj+CwDHzWUWiweEiM7CBS6YqPApMIFO/FSIlxw1EMlUhUmACkfodI/ISHYOEMq4K
IEwjYbiGhYKXFlla6elVovT0yip9+jsvLbLi0iIGsrOL6xNF0lACDgf9ZgDjLWBUmbIstOfCLJlX
BiU/KAH1s13QtVGhft1jZZCQ7gQk+M9Cn8A/qw7+s8V4wNrpmI48gROnUQCLjdctMT0KNxsEMBg+
jwrmiIjR0N08bMbLsCfPl5gKrYtXMWCyUjxcdhkEPYAf4PwSa03+WXVjY2O9tl6DUqLlLA96P7Af
zPOik0OuykPmyRnbECfvJXZ8Blqi+DgY9n9EZ7B5ig7y9mP7Q7WyCmUGnUlPy3gvMoAyPZpDe9rK
oJYu4ay1WplBL5oRAUigThRMKiQ1gR4xp46CCxBJMcPx36reN+JuhyvkkxzBpHJKVYkTjKRuk944
vBTbc69XwqgHrE3lf/uN1Q/fOsC+O9Xa2rqDP+7eEBRqtB6gdlyH/eB+69BcUVgp1jPEd229lwk3
eBemh6o7IIJ9Cux+/rAWcnrPQRxskzyD3K/s18oq4w3gm9EWl4WTgALL3OA9GnGKc/ENVhrftgBV
ljbY//DPQvbf7v3qmG3/3ahVdf8f3P3i/b+l/98P+dj+P0yagxdxB3qxmFWYFcQVPwqGSOixxBcQ
ksV/M+8GxKI5ODyATZiOye9pEgYcD2IRvn9b5B6aY3oQe/CCfgF79Q/1fXylvZVtDhan3PezBif8
tO5hDNYNwfykO80UrHUs0xYc24E5nruZgpNmYJqOt7YEZ1iBEdktDMHZRmDhaLeYHTjbBoxobmEG
nmkCthg0ywo856B/AS8y6Rw2HaNFN5Ty8ZT/XPqPLf3Hlv5jS/+xpf/Y0n/M9B9LeIahz1THR88w
y2MMdnRWMt70cCPuSKYyMM6F1zeBIc2j9ATuzmTcWcGcBI4u3vwzQWF98gMzyfMjhAsTDYt6ncml
leYFyaQJ2ulS0hL4pj6Ixp7ZwHylsgL/UdRTfMugMsinZ/JICRP3EiE0EHlHBu8pr+BNA4yohMc8
MCr0CkSXp0lXNwy3cN0ZksmaUfCFTpcsPu75Z7bj5LKeeVEHkC2Ky7wI4tAbJRGr97/vhFC+Bagh
PK6/uwfC8ZXVdXyO7PjDfbqtjKYaVhQi9HrfHSkZN/L04HWbJE5zd/8+raRnfhXaP53cn3gMTy/p
HoOEBam8V2J5PF2VJzH57yUdSr7GK6CmPgafN6FOfzdwnf6exLVaYs1TWEi+O99vwwRo1Y6bnfbY
I1Q39a/84MbPM15V+ouPAKes46mQ/GlCABt1/GlnKGHu0vALd2LS+nX9uF0/w9cdYWGCKtyv+Agk
qF2yFgkE68kfuEwBzDUq2WiAT8KI/LSsw98hI7hKJsOi3jg9wK6B4jkdJbNf7yK+i46FDlvDM6kx
KRD1sxNcbfcFmPs1mrgjd2jAmhRE0YUPlAUkhjXZhQdP7e6gM2lHQXsa9aubBU5mTIOFyYNdAL4f
U91sR/ATVLkSvSYBv+A7ELO4baCiR2cK+BU0+hLHwhE+FWfyJXTySJQSsaMMaH7uWSIAcVTPf8Ca
0S3J9sGP6/PPqejaaIFPx2k2SwRPwDeMtcrScfamo3EGTp1ssqup+K4Dr2cgbH8JAz8dq8bt3IUb
v3rpbRPX6NMQZVSOKO9fL+kc2YPX7+HpMJ5twT5hGMCGCKWUG0b0iLTmIE7lJul1hG40t6HxETi1
diwHdGGG4VpSAUmUBKBwJGYGpySdWouZo00UnDdYkh7qtqiP0DjhsE2ZpVSTUycdTWkVN0XYdo2J
LNJoUyYB8QCftmribueTUB06FV4UH1QuoBwGgJzPdtiqeIWKoLv4RgLaOQrb20V8wSLXBZCnnv/s
Gb1y7vVZoYuvRDz5tPqEA+RWntKTgU9RprEIN41+R/YHPZJibwZ8X+H/3EmAzSBLJi83Qe8bWGAg
v993Jzx1Bf+M3BEyF/UAhKYiMGSJiDL00Pp30TKez36Tb+o8hYRiUYMuV6kXmP7sGXRsEAVDF8lH
OH32bMcoiokCZ9nK+U6xbGAQSawmh2dRWYsjcd1pk62iMybqj6dRWBBxfrZYHqcR7ORx7iEkOW0V
OuOSQEPJfeJ0fEQIIUuqhs5YlIItSYH/EOg/+QZiQR/4sy27JU5jE/2692ogWA8kz7ZjShj4N05S
wg1Fm5kcixIUJEgyr18o9HswnglhUSwCL6wiA4j+1QCT4KnHUB0xlRhWlG5FXtGwO/6Gvyvwf1t0
TUo0BawyqRS0ADvLftqh+nBeyHpI2mkV4W8qk5NYyAdiByYWvtzXjoqPeb8QoGDKcdkMFNvG5Z4S
w/4UqX7k99w//mGIZ1lQtIYPDI5IepH02tSdpBLB5+IqkcQkC7pDGHwYC2OO1sQc/R7TCSTIKoMK
pZ/fS0W2WUTxFiYK3sDSaTK7gWtSiBhrr04zj894rFxhUIgFFjHna6D1/RJusV/CfElfCXkubcCL
2pRbTUw40oySsw7TkO/DDJ1pzkKbqlIVY+X9PoqZoUbdYnInZ3HGxP/3mNyz5+ncmX73eYxzUhv8
xDRWQ2nALziHzdlBS70+NzSicr5fTlU+Vf/p81JOIqhVqGdvG/t1hEBmozKgKJ1vVPHlqZxQ7PgD
vKSfir/AgRIcFM3gyvXD8zXYg7M/sTjfgcp9aAwYr6djAO0HoIoW4rmen+SL9EgYFptDz7hUCkVv
Bihm+pcu6CLUGjFl4HsRio5pxEQlnNUw63z1M+mePz8hpQ4PRzx/ig+F5TBXw8HKrIp9RTVVcGIB
1bgdbAx8IaCi4GXObqIKUvaw8E9Y2uc1EUCOD8jMvvKFMZffR4f5KAhoT5XnHCw6XfCQsNDzLtC4
SB2tH75ljx8zT9XJ4fX+Ec/njAbGvfsuejjm/esOJpyoT3aeFHVK8n4IXiAMY/aMVQn/07GOkLnD
0E0CIxYhGtg/dlL1Cy6XoCGyUvaK1dgWq5YECxI5edoqn6cwZEgQHLn+WEjLvpi5nA9IU/gJAO7D
cZkaLu3y09Xc+1gU/lv13Nki/64SP2v5WXtwWe7RU6t+txO6XRhcOXT5v7QOm1ByncQb4betQNYy
I2ZJektO/diNnVeT1zdtWfqfqk7jyQewSjnx05HYVTSfH5/kxL4x/2e+aGbXm3sq8ztsFhPZrfqR
yobuJnLxCPaPRA3n6UB6PZ8BJNnI40bzXeHK/VbCa1VFBfoJKPwpv8X4X2iCAjERNJonM0r/0ssu
ebp/OLPmX4bT7MKvDw/3Z5UNZdEC5r/Kw5C5+a18vwP8lKQTilHEVcxZePzpcMgxJcr8Xv8jo4gE
N+E/JghdQn2imCvY5BblS5/4Smfa2FTJUlwwX0xWhh1q1w+OTv7QSFR4Cn/4+rf6pPgqdfS3RKUm
WVKQfzSxy97QfClKmw9WWIxr1HGnkyOjeicXz6dt9YPK5+M4yKXY2JuTM0h+1QiSp2OpfEkeodTo
DKUQH4RRjld+ST+K87DhfQ9+VScdpToIk2hVQipqnE2EsxNF7mgcheWh24/yemGZ08acec2jiLdk
K0xvnjydlRXE8HN7Hnqj8ixaiuNZRU5vNKPfScT6TZJ0/PK0VuKXv2+NvoznfZl1YKZWBf7MHjhx
26VMq1SoRs2/oYS5rITP20azaCoPlBU7UIkFuy1XyrI6QXYzeFYBqLGTZUWx+bNi4vbRUe8ulamy
i1YWoEn7TlUNvMuBG0aUNrcaVXpB5HjaOgfzR0UufjkqnuciocRPurkP2DHeW28f7J7t15vzUeL9
qTK/PxWj9QXC94fNevN4UVzh9ILfQJyUvV4+ntA9jg29nd4cN17Xjxt7i6L0ul0NFf3iyBpv3szE
Qut+XtwBK0vhADj4Dcu2yJnbAIkhcr/G4lUkRl8j3pjjw90DWGVO6mcni3as52IceZ1OmCI6t1f/
sDiJ5H01hah/g9omx/T2I6r4i6KSN9wUqoGG6v2tUOl3NssUdF8tHZK7do+ai2KTV+EUEpnAMZ22
bsn04iZdzPAiQbD9bqv18fB41giQGJ+EoRfzBPzIhLzwIi7syxMltKEMzJRs3h3cAHDPC3TmHdy0
Ka0d+NkFw5SC4eyCXMXOT8dDz78qh2PXjWnDE9uUOKNsL7jxU0rL5OzyqCHnvfH1ernnh3kFoe1c
tumx+JPDvcMt1hiNhy46BZOH7l6zxSi00kSGNSDdkwUXeKvGyUmFFEcVBrMN8K3jD6A51kCBnMKu
LFqrtaNcDquH2s9NuM90RHl2drbF8E6gAMLDVOFJHPTZqPOVnrDHbTq6/uJGQB29uj0ojzdEWMGL
noSMGwLQWRi3tXiwau6/ZN/pq7kXlcH/060js3waFjR/oAGDTAhAx6fQHf/fxcwxz4zReLsHXLK3
d3w7Ozr0EM0mab0vPlbGFaA1pG47avcGuy+cVejj2fajoFMAPLjGgb4NgLLJ/+yTKRmn8EG8VZBB
CF5qE+cZygRaKD9LA/XYP7dVBANCrJLn6SukAdoR2OIlwcjmK9q5taAZQIMY6H0KEL5nYzqULKZB
kSE5hhJ8KhNolNIRp+pQJYbpEomfXXy+ikENE2AKpVRrMvGmrL7onBA3qjOrVZmqRYnJLIGG/8zG
lKlZlNjAxDSIMcWTUEYX+CUU0QXwixFWgCYqkij/KVJBBbj1RI8ogOVEQAGjhB5WQJaSEQX4b1b4
JSzGJTCygAQ8OWO/5NnRcWO6uY52nmPjd1xGhRqQBVWIAZ6AooYfiCib/gKmCCqy+C51Bnj6xlnF
mJ9kFZ2xx8kqcoGTK9aK+DyR3C3KWNo7e8XyFJAJFA62xfI8zAOnGfG0rcGk6yVUQnKwYDiSueQQ
qsxqlshdyK0N5SvgwXhXTbwVBMv/xMWHJMMtJ8ee4v+kXyjvMww6EIjbxsNvBMR6Af3JjadRt+CF
nbDreUkzmgczF0hipwJtnrx6Ql5GwmUKUNEZGEviKKCDWVFZ4/AwrFymftAR3bZqMXqQ4esAPnP7
fXwqlbqFd+n4nSpkNC9iFMwoivjrohjQiAqbIoHh+8tAkYrDvc3UwSqvN0N+cyKTByAdsUkfwpwq
qR3MxZIjT+BqdHXdIkO5emDHTdLHQNMhrFhYgjPj4N1UGMrVe2oMqHcK70cYhItO98rybwaQNswa
o6dZB+emD0rCDRQRyQ3aw2CT+7MHwuY9UCfH06uHQSTkWZuE2WIoE04LM5CCVPx2V5w/wskYJwQv
KpR2HTdi3haFC08l7xbN/tBpwIKk56gUBG4G4inBL7dgI/6ElWWMmr6cFiVWpTsDmKOZIwxm12E0
G4PBwgaMp2oYe0YNwFkqZ3ql54hRlbkG58C2S8GVMwCRGyQceptIRxXhvfJFuB2Tb8TqNvNgo4eD
Bt9gXeC0wewvPPtL7OKriFhkK8pDN04EWEKQE+e+eORLDOB9LmkD8OVzhftRybNf4fHhaRUgUDzE
5K4BawSWwJYW+dlQhvxs+N0ATQiRmxceIrl8zA157ooJbRKOH8lq5Q/TzUJiSm+hzH0lcNOCBksy
eWWYrS1X06tVuAS4h07g+OUCNImrbemVAsW+IBkWGxHdHTtJplN+bSmLMt9neGKlLSN3csPCnQjK
BsykjQt3G0r420s9byz2NprHH6XILbmB5TfuyVLgTF808l6moFhwPc7zoHWar9FMKqWukXcilcSk
0UsmpRItFlgmMHGy0X2F2SCjjvw35e9oklOHSdA0RrooYU/jKH6LUjdVZ7gTdSUmjboyKZW6sag3
gW3qKswGdXXkWdTVYRLUjZEuSt2jOLThwtT1HmCGAxKNpl6Ia528B0NJAbrC8QuxjWb78Khdxzun
KnvspcsEWkwVSEImYKUmub1smcDzcASSRPZuIRZkdODb0DehWt6NvtOrNPpW701fVEkekL4WB9+K
uKe/35a42er23aSvjzFAiNL88pvAsq1+cwhUrXgHpf2Cj8VCbbW0+B/e1NVZ20s6F8jYQOsXBvXT
CO18QYDsvm03mnUMPHH45vf23jvyjl+1Tht0huAlBVNkb4ixPtlkvKVoNTW+uohNFHezxHPqvB/s
vHz9WdCLncekPqcw458/s/NKpfIZrXv0SgR8piqMpha3XGBIg7uckTcSDouqAaoy+gctS1tYEwbW
AWAKLzSNphSD2P3aHU5D79qtkKEp8I3AvhJvSGdnFWl0tK6kVWMKGtYb6xzi3vc2SWYZFyGFsUpc
AURLlLoSqYxT7BVLGL1WabsnL0qS+CmXBQ7aX8hrk6wzvMF46fq9SRdvQ06HkbgAiZcNNb/sWPNG
xVtdY5SWuW5siOty6xvfeXK9nZpcLm9rVxdHGNcJakL64PfCvFt7gTz3SN5aiN3DU646xpmIQx4q
8rmt+UzzFHk5oBDA70s3CsZRIb6vBnOvv3U52rrOc3NhuYozNLzxou6gEMR3RzqA7kn/yRbtV7RG
AjZAw7cxycbBx2ybsdXhKC9tlHHpmQir6QhHCyHUmz23jdcCpSCrvWvruf0O8NiWvNVA0o3LoqJg
LpCRGCocprW2wbVB0VdfNty6sSEQ4C75J22XnFKhStLuoBHncRSfdd/++Mq+aKcg0sNVT17/ieqF
m7hVuRiMB6hVnqbrFZu7Xnn51myaunFLFyvLTDSgzKokUB9r0GQDICP0vzr26fKz/Cw/y8//8uf/
AZAjmhYAdgIA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250309</attachid>
            <date>2024-04-30 19:24:03 +0000</date>
            <delta_ts>2024-12-10 23:55:32 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>147608</size>
            <attacher name="Pierre Pronchery">khorben</attacher>
            
              <data encoding="base64">RnJvbSA3Y2Q2YjVlNjcxM2YyMjkzMWU5ZTAzZmI3ODk2YmJmNjU2NTkwODQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+
CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMjA6MjA6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJ
bnRyb2R1Y2UgdGhlIFVTQiB1bWIoNCkgbmV0d29yayBkcml2ZXIKClRoaXMgaW5jbHVkZXM6Cgoq
IFRoZSB1bWIoNCkga2VybmVsIGRyaXZlcgoqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wK
LS0tCiBzYmluL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSArCiBzYmluL3VtYmN0bC9N
YWtlZmlsZSAgICAgICAgIHwgICAgOCArCiBzYmluL3VtYmN0bC91bWJjdGwuOCAgICAgICAgIHwg
IDE3MiArKwogc2Jpbi91bWJjdGwvdW1iY3RsLmMgICAgICAgICB8ICA3NjcgKysrKysrKysrCiBz
eXMvY29uZi9maWxlcyAgICAgICAgICAgICAgIHwgICAgMSArCiBzeXMvZGV2L3VzYi9uZXQvaWZf
dW1iLmMgICAgIHwgMjkxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzeXMv
ZGV2L3VzYi9uZXQvaWZfdW1icmVnLmggIHwgIDQ0MSArKysrKwogc3lzL2Rldi91c2IvbmV0L21i
aW0uaCAgICAgICB8ICA3MjQgKysrKysrKysrCiBzeXMvbW9kdWxlcy91c2IvTWFrZWZpbGUgICAg
IHwgICAgMiArLQogc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmlsZSB8ICAgMzUgKwogc3lzL3N5
cy9zb2NraW8uaCAgICAgICAgICAgICB8ICAgIDQgKwogMTEgZmlsZXMgY2hhbmdlZCwgNTA2OCBp
bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2Jpbi91bWJj
dGwvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzYmluL3VtYmN0bC91bWJjdGwuOAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHNiaW4vdW1iY3RsL3VtYmN0bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3lzL2Rldi91c2IvbmV0L2lmX3VtYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2Iv
bmV0L2lmX3VtYnJlZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2IvbmV0L21iaW0u
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUKCmRpZmYg
LS1naXQgYS9zYmluL01ha2VmaWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCAyMDBkYzlkYTExYzgu
LjNhMDg4MWYzYTI5ZCAxMDA2NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2Vm
aWxlCkBAIC02NSw2ICs2NSw3IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lz
Y3RsIFwKIAl0dW5lZnMgXAorCXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9
ICJubyIgfHwgJHtNS19JTkVUNn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFr
ZWZpbGUgYi9zYmluL3VtYmN0bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjM1YWZiMWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3Rs
L01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91
c2IvbmV0CisKK1BST0c9CXVtYmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisK
Ky5pbmNsdWRlIDxic2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44
IGIvc2Jpbi91bWJjdGwvdW1iY3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi45NWJlMzQyZGM2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJj
dGwuOApAQCAtMCwwICsxLDE3MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQg
KGMpIDIwMTggYnkgUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5c
IiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisu
XCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UworLlwiIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisuXCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5c
IiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKy5cIiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
CisuXCIgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HCisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisuXCIKKy5cIiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1
OjM1OjIwIHNldmFuIEV4cCAkCisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0
ZTogW1RodSBBdWcgMzEgMTA6NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisu
RHQgVU1CQ1RMIDgKKy5PcworLlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNl
dCBwYXJhbWV0ZXJzIGZvciBhIE1CSU0gaW50ZXJmYWNlICg0Ry9MVEUpCisuU2ggU1lOT1BTSVMK
Ky5ObSB1bWJjdGwKKy5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9wIEFy
IHZhbHVlCisuQXIgLi4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBjb25m
aWctZmlsZQorLkFyIGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0gQXIg
Zm9ybWF0CisuQXIgaWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0cyB0
aGUgZm9sbG93aW5nIG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVYWFgg
LW9mZnNldCBpbmRlbnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNvbmZp
Zy1maWxlCitmb3IKKy5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWlycywg
b25lIHBlciBsaW5lLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFu
ZCBsaW5lLgorVGhpcyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBub3Qg
cGFzc2VkIGFzIGNvbW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcgd2l0
aCAjIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBGbCBt
IEFyIGZvcm1hdAorRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIgZm9y
bWF0CitzcGVjaWZpZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwKKy5Q
cAorVGhlCisuWHIgdW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRpdGlv
bmFsIGFyZ3VtZW50cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0aW5n
cyB0aGF0IGNhbiBiZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBtYXkg
YmUgY3JlZGVudGlhbHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVzLgor
VGhlCisuTm0KK3V0aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0
aW5ncywgb3IgYWRqdXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitGb3Ig
d2hhdGV2ZXIgaW50ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBhcmFt
ZXRlcgorLkFyIGlmbmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGludGVy
ZmFjZSBmb3Igd2hpY2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRpc3Bs
YXllZC4KK1VzZQorLlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUgd2hp
Y2ggaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0ZXIg
aXMgZ2l2ZW4sCisuTm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IKKy5B
ciBpZm5hbWUKK2FuZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMg
c3VwcGxpZWQsIHN1cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUgY29t
bWFuZCB3b3JrcyBpbgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBxdWll
dGx5LCB1bmxlc3MgdGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2ggd2ls
bCBjYXVzZSBhIGZpbmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBhYm92
ZSBvbmNlIGFsbCBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBhcmFt
ZXRlcnMgY3VycmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9IE5z
IEVtIGFjY2Vzcy1wb2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgorLkl0
IEFyIHVzZXJuYW1lIE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0bwor
LkVtIHVzZXJuYW1lIC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQKK1Nl
dCB0aGUgcGFzc3dvcmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBOcyBF
bSBwaW4tY29kZQorRW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsgTnMg
XCY9IE5zIEVtIHB1ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0IEFy
IHJvYW1pbmcKK0FsbG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFyIC1y
b2FtaW5nCitEZW55IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2ggRVhB
TVBMRVMKKy5CZCAtbGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1vZGUg
YXV0b21hdGljLCByZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1OZXQi
LCBkYXRhY2xhc3MgTFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQyIiwg
cm9hbWluZyAiIiAoZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAwMAor
CWZpcm13YXJlICJNQklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVkCisu
UHAKK0Rpc3BsYXkgdGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVtYmN0
bCB1bWIwIGFwbiBvcGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQgbW9i
aWxlCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVt
YjAgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAvZGV2
L3N0ZGluIHVtYjAgPDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJlIHRo
ZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VFIEFM
U08KKy5YciBuZXRzdGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5YciBp
ZndhdGNoZCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFyZWQg
aW4KKy5OeCA5LjAgLgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5Cisu
QW4gUGllcnJlIFByb25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwuYyBi
L3NiaW4vdW1iY3RsL3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uODgxNjdiYWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1iY3Rs
LmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8KKy8q
CisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hvcmJl
bkBkZWZvcmEub3JnPiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVCU0Qg
dXBkYXRlcykKKyAqCisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkg
PHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5
cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lv
Lmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5j
bHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5v
Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91bWJy
ZWcuaCIKKworCisvKiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRl
c2NyIF91bWJfYWN0c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9O
UzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtdID0K
KwlNQklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJf
dmFsZGVzY3IgX3VtYl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0KKwlN
QklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1i
X3ZhbGRlc2NyIF91bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9O
UzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0KKwlV
TUJfSU5URVJOQUxfU1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVt
Yl92YWxkZXNjciBfdW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQsICJQ
SU4gcmVxdWlyZWQifSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwKKwl7
IFVNQl9QVUtfUkVRVUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQoreworCXsg
TUJJTV9SRUdNT0RFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FVVE9N
QVRJQywgImF1dG9tYXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwiIH0s
CisJeyAwLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91
bWJfYmVyW10gPQoreworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJeyBV
TUJfQkVSX1ZFUllHT09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29vZCIg
fSwKKwl7IFVNQl9CRVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVtIiB9
LAorCXsgVU1CX0JFUl9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5IGJh
ZCIgfSwKKwl7IFVNQl9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7IDAs
IE5VTEwgfQorfTsKKworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3RvX3V0
ZjE2KGNvbnN0IGNoYXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOworc3Rh
dGljIGludCBfZXJyb3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0YXRp
YyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFyZ2Ms
IGNoYXIgKiBhcmd2W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAqIGlm
bmFtZSwgY2hhciBjb25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50
IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBp
bnQgdmVyYm9zZSk7CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0ICog
aWZuYW1lLCBzdHJ1Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9nYXRl
d2F5KGNoYXIgY29uc3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIg
Y29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBfdW1i
Y3RsX2lvY3RsKGNoYXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0LAorCQlzdHJ1Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChjaGFy
IGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBhcmdj
LCBjaGFyICogYXJndltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7CitzdGF0
aWMgaW50IF91c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZfdCAq
IGluLCBpbnQgaW5sZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3QgKiBp
biwgaW50IGlubGVuLCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5jdGlv
bnMgKi8KKy8qIGNoYXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBPcGVu
QlNEJ3MgaWZjb25maWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3QgY2hh
ciAqIGluLCB1aW50MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7CisJ
dWludDE2X3QgYzsKKworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09ICdc
MCcpIHsKKwkJCS8qCisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBidXQg
emVybyBvdXQgdGhlCisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0KG91
dCwgMCwgb3V0bGVuKTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXplb2Yo
Km91dCkpCisJCQlyZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiArPSBz
aXplb2YoKm91dCk7CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8qIGVy
cm9yICovCitzdGF0aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0LCAu
Li4pCit7CisJdmFfbGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJdmFf
c3RhcnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9l
bmQoYXApOworCWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB1
bWJjdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVy
Ym9zZSwgaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBpZnJl
cSBpZnI7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgdW1i
cDsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVt
c2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1l
LCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0KCZ1
bWJwLCAwLCBzaXplb2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1icDsK
KwkJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAhPSAw
CisJCQkJfHwgX3VtYmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAorCQkJ
CXx8IF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlmcikg
IT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYoYXJn
YyA9PSAwIHx8IHZlcmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVt
Ymk7CisJCWlmKF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZyKSAh
PSAwKQorCQl7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3RsX2lu
Zm8oaWZuYW1lLCAmdW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4gX2Vy
cm9yKDIsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9
CisKKworLyogdW1iY3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBjb25z
dCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICog
ZmlsZW5hbWUpOworCitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZuYW1l
LCBjaGFyIGNvbnN0ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlzdHJ1
Y3QgaWZyZXEgaWZyOworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVtYl9p
bmZvIHVtYmk7CisKKwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVybiAy
OworCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25hbWUs
IGlmbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90
KSZ1bWJwOworCW1lbXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3RsX2lv
Y3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxlX3Bh
cnNlKGlmbmFtZSwgJnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3RsKGlm
bmFtZSwgZmQsIFNJT0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7CisJ
CXJldHVybiAyOworCX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9IChj
YWRkcl90KSZ1bWJpOworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CSU5G
TywgJmlmcikgIT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJ
X3VtYmN0bF9pbmZvKGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJ
cmV0dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJl
dHVybiAwOworfQorCitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5hbWUs
IHN0cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1lKQor
eworCWludCByZXQgPSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVfdCBs
ZW47CisJaW50IGk7CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5VTEws
IE5VTEwgfTsKKwljaGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9
PSBOVUxMKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3Io
ZXJybm8pKTsKKwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkKKwl7
CisJCWlmKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYpIC0g
MV0gPSAnXDAnOworCQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYoYnVm
W2xlbiAtIDFdICE9ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMiLCBm
aWxlbmFtZSwKKwkJCQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0Yyhm
cCkpICE9IEVPRiAmJiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVmW2xl
biAtIDFdID0gJ1wwJzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5VTEwp
CisJCXsKKwkJCXRva2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UKKwkJ
CXRva2Vuc1sxXSA9IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAsIChw
ICE9IE5VTEwpID8gMiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZlb2Yo
ZnApOworCWlmKGZjbG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIsICIl
czogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQorCisK
Ky8qIHVtYmN0bF9kdW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICog
aWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7CisJ
c3RydWN0IGlmcmVxIGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVyYm9z
ZTsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVt
c2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1l
LCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7
CisJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9IDAp
CisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkK
KwkJcmV0dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOwor
CWlmKHN0cm5jYXNlY21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1bXBf
anNvbihpZm5hbWUsICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBVbnN1
cHBvcnRlZCBmb3JtYXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0bF9k
dW1wX2pzb24gKi8KK3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3QgKiBp
Zm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJcHJp
bnRmKCJ7IikKKyNkZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09OX1NF
UAlwcmludGYoIiwgIikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQorI2Rl
ZmluZSBKU09OX0FSUkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5HKGtl
eSwgdmFsKQlwcmludGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpTT05f
SU5UKGtleSwgdmFsKQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUgSlNP
Tl9VTE9ORyhrZXksIHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2RlZmlu
ZSBKU09OX0JPT0woa2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/InRy
dWUiOiJmYWxzZSIpCisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjogbnVs
bCIsIGtleSkKKyNkZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtleSkK
KworI2RlZmluZSBKU09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wiOiBc
IiIsIGtleSksXAorCQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikpCisK
KyNkZWZpbmUgSlNPTl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09OX1NU
UklORyhrZXksIHZhbCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05VTExf
V0VNUFRZKGtleSwgdmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wKKwkJ
CQkJSlNPTl9XU1RSSU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkKKwor
CUpTT05fU1RBUlQ7CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNPTl9T
RVA7CisJSlNPTl9OVUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0ZSwg
dW1iaS0+c3RhdGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0dXMi
LCB1bWJfdmFsMmRlc2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlKU09O
X1NFUDsKKwlKU09OX0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1wdHNf
bGVmdCk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1iX3Zh
bDJkZXNjcihfdW1iX2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7CisJ
SlNPTl9OVUxMX0VNUFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3RhdGUs
IHVtYmktPnNpbV9zdGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2ltLXJl
Z2lzdHJhdGlvbiIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3RhdGUp
KTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9kZSIs
IHVtYl92YWwyZGVzY3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9TRVA7
CisJSlNPTl9JTlQoIm5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9TRVA7
CisJSlNPTl9OVUxMX0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGt0
c3RhdGUsIHVtYmktPnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZ
KCJzdXBwb3J0ZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1
bWJpLT5zdXBwb3J0ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJw
cmVmZXJyZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJp
LT5wcmVmZXJyZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJvZmZl
cmVkLWRhdGFjbGFzc2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+aGln
aGVzdGNsYXNzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3MiLCB1
bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09OX1NF
UDsKKwlKU09OX05VTExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJfUFJP
VklERVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhvbmUt
bnVtYmVyIiwgdW1iaS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNP
Tl9OVUxMX1dFTVBUWSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklCRVJJ
RF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1iaS0+
aWNjaWQsIFVNQl9JQ0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9hbWlu
Zy1vbiIsIHVtYmktPmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VN
UFRZKCJyb2FtaW5nLXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRfTUFY
TEVOKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJpLT5k
ZXZpZCwgVU1CX0RFVklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgi
ZmlybXdhcmUiLCB1bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NFUDsK
KwlKU09OX05VTExfV0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5GT19N
QVhMRU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1uYW1l
IiwgdW1iaS0+YXBuLCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dF
TVBUWSgidXNlcm5hbWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7CisJ
SlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29yZCwg
VU1CX1BBU1NXT1JEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1bWJp
LT5yc3NpKTsKKwlKU09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJpLT5i
ZXIpOworCUpTT05fU0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19yYWRp
b19vbik7CisJSlNPTl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3X3Jh
ZGlvX29uKTsKKwlKU09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJpLT51
cGxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVkIiwg
dW1iaS0+ZG93bmxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRucyIp
OworCUpTT05fQVJSQVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2VydmVy
cyBpbiB0aGUgSlNPTiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1X2lu
dDMyX3QJCWlwdjRkbnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMgaXMg
ZWl0aGVyIG9mIG1heGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQncyBt
ZW1zZXQgdG8gMCkKKwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisKKy8q
IHVtYmN0bF9nYXRld2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNvbnN0
ICogaWZuYW1lKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqIHNpbjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0
dXJuIDI7CisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJf
bmFtZSwgaWZuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0bChp
Zm5hbWUsIGZkLCBTSU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZkKTsK
KwkJcmV0dXJuIDI7CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9k
c3RhZGRyOworCXByaW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJaWYo
Y2xvc2UoZmQpICE9IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwgc3Ry
ZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLworc3Rh
dGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5m
byAqIHVtYmkpCit7CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiArIDFd
OworCWNoYXIgcG5bVU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VNQl9S
T0FNSU5HVEVYVF9NQVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFdOwor
CWNoYXIgZndpbmZvW1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1CX0hX
SU5GT19NQVhMRU4gKyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBVTUJf
UFJPVklERVJOQU1FX01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsKKwlf
dXRmMTZfdG9fY2hhcih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9mKHBu
KSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhUX01B
WExFTiwKKwkJCXJvYW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1i
aS0+YXBuLCBVTUJfQVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3RvX2No
YXIodW1iaS0+ZndpbmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndpbmZv
KSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwgaHdp
bmZvLCBzaXplb2YoaHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMsIHJl
Z2lzdHJhdGlvbiAlc1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMsIHNp
Z25hbCAlc1xuIgorCQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIgKCVz
KVxuIgorCQkJIlx0QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAiXG4i
CisJCQkiXHRmaXJtd2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFtZSwg
dW1iX3ZhbDJkZXNjcihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRlc2Ny
KF91bWJfcmVnbW9kZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVn
c3RhdGUsIHVtYmktPnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91bWJf
ZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2Jlciwg
dW1iaS0+YmVyKSwgcG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJhbGxv
d2VkIiA6ICJkZW5pZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRvd25s
aW5rX3NwZWVkLAorCQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAqLwor
c3RhdGljIHZvaWQgX3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sKKwkv
KiBYWFggTm90ZSB0byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5h
bGx5OgorCSAqIGRvCisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8gKGNo
YXIpaHRvbGUxNigqaW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9sZTE2
KCooaW4rKykpICE9ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFuIGVm
Zm9ydCB0byByZXVzZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRmMTZf
dG9fY2hhciBpbnN0ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRmMTZf
dG9fY2hhcihpbiwgaW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOworCXBy
aW50ZigiJXMiLCBidWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQgX3Vt
YmN0bF9pb2N0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdCwKKwkJc3RydWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0LCBp
ZnIpICE9IDApCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9y
KGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2FsbGJh
Y2tzICovCitzdGF0aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJh
bWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNv
bnN0ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50
IF9zZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFy
IGNvbnN0ICopOworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1bWJf
cGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIgY29u
c3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQg
X3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwK
KwkJY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBjb25z
dCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0aWMg
aW50IF91bWJjdGxfc2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVy
ICogdW1icCwKKwkJaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJeworCQlj
aGFyIGNvbnN0ICogbmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJCQlz
dHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVyOwor
CX0gY2FsbGJhY2tzW10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAidXNl
cm5hbWUiLCBfc2V0X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNzd29y
ZCwgMSB9LAorCQl7ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1aywg
MSB9LAorCQl7ICJyb2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1yb2Ft
aW5nIiwgX3NldF9yb2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBqOwor
CisJZm9yKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6ZW9m
KGNhbGxiYWNrcykgLyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChhcmd2
W2ldLCBjYWxsYmFja3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nbal0u
cGFyYW1ldGVyICYmIGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIlczog
SW5jb21wbGV0ZSIKKwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNhbGxi
YWNrc1tqXS5jYWxsYmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBhcmFt
ZXRlcgorCQkJCQkJCT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJ
CWlmKGNhbGxiYWNrc1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCX0K
KwkJaWYoaiA9PSBzaXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJCXJl
dHVybiBfZXJyb3IoLTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFtZSwg
c3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQoreworCXVt
YnAtPmFwbmxlbiA9IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1icC0+
YXBuKSk7CisJaWYodW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+IHNp
emVvZih1bWJwLT5hcG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAi
QVBOIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2VybmFt
ZShjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNo
YXIgY29uc3QgKiB1c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3RvX3V0
ZjE2KHVzZXJuYW1lLCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFtZSkp
OworCWlmKHVtYnAtPnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2VybmFt
ZWxlbiA+IHNpemVvZih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIlczog
JXMiLCBpZm5hbWUsICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IF9zZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJh
bWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFzc3dv
cmRsZW4gPSBfY2hhcl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlzaXpl
b2YodW1icC0+cGFzc3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8IChz
aXplX3QpdW1icC0+cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQlyZXR1
cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1lLCBz
dHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJdW1i
cC0+aXNfcHVrID0gMDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAtPnBp
bmxlbiA9IF9jaGFyX3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGluKSk7
CisJaWYodW1icC0+cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBzaXpl
b2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwgIlBJ
TiBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9wdWso
Y2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFy
IGNvbnN0ICogcHVrKQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklNX1BJ
Tl9PUF9FTlRFUjsKKwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAtPnBp
biwgc2l6ZW9mKHVtYnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVfdCl1
bWJwLT5waW5sZW4gPiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVz
OiAlcyIsIGlmbmFtZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQgX3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1
bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9pZCkg
aWZuYW1lOworCSh2b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZuYW1l
LCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQpCit7
CisJKHZvaWQpIGlmbmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9IDA7
CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBfdW1i
Y3RsX3NvY2tldCh2b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9JTkVU
LCBTT0NLX0RHUkFNLCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAlcyIs
IHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitzdGF0
aWMgaW50IF91c2FnZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZuYW1l
IFtwYXJhbWV0ZXIgW3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZpZy1m
aWxlIGlmbmFtZVxuIgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVtYmN0
bCAtbSBmb3JtYXQgaWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFyZSBt
dXR1YWxseSBleGNsdXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5cbiIs
CisJCQlzdGRlcnIpOworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8KK3N0
YXRpYyB2b2lkIF91dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hhciAq
IG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxlbiA+
IDApIHsKKwkJYyA9IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09IDAg
fHwgLS1vdXRsZW4gPT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0ICov
CisJCQkqb3V0ID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWkoYykg
PyAoY2hhciljIDogJz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBtYWlu
ICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwljaGFy
IGNvbnN0ICogZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxMOwor
CWludCBnYXRld2F5ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdldG9w
dChhcmdjLCBhcmd2LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJY2Fz
ZSAnZic6CisJCQkJZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJCQln
YXRld2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0gTlVM
TDsKKwkJCQlmb3JtYXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnbSc6CisJCQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsKKwkJ
CQlnYXRld2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UrKzsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJaWYo
b3B0aW5kID09IGFyZ2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBOVUxM
KQorCXsKKwkJaWYob3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOworCQly
ZXR1cm4gX3VtYmN0bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOworCX0K
KwlpZihmb3JtYXQgIT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJCXJl
dHVybiBfdXNhZ2UoKTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZvcm1h
dCwgdmVyYm9zZSk7CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9IGFy
Z2MpCisJCQlyZXR1cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJndltv
cHRpbmRdKTsKKwl9CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBhcmdj
IC0gb3B0aW5kIC0gMSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBhL3N5
cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmlsZXMKaW5kZXggMzI2MjYwZmZiMWRjLi44YmRhN2Q0
M2FiNmQgMTAwNjQ0Ci0tLSBhL3N5cy9jb25mL2ZpbGVzCisrKyBiL3N5cy9jb25mL2ZpbGVzCkBA
IC0zMjczLDYgKzMyNzMsNyBAQCBkZXYvdXNiL25ldC9pZl9tdWdlLmMJCW9wdGlvbmFsIG11Z2UK
IGRldi91c2IvbmV0L2lmX3J1ZS5jCQlvcHRpb25hbCBydWUKIGRldi91c2IvbmV0L2lmX3Ntc2Mu
YwkJb3B0aW9uYWwgc21zYwogZGV2L3VzYi9uZXQvaWZfdWRhdi5jCQlvcHRpb25hbCB1ZGF2Citk
ZXYvdXNiL25ldC9pZl91bWIuYwkJb3B0aW9uYWwgdW1iCiBkZXYvdXNiL25ldC9pZl91cmUuYwkJ
b3B0aW9uYWwgdXJlCiBkZXYvdXNiL25ldC9pZl91c2llLmMJCW9wdGlvbmFsIHVzaWUKIGRldi91
c2IvbmV0L2lmX3VybmRpcy5jCQlvcHRpb25hbCB1cm5kaXMKZGlmZiAtLWdpdCBhL3N5cy9kZXYv
dXNiL25ldC9pZl91bWIuYyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWIuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzN2NkZGE0YjQ2OAotLS0gL2Rldi9udWxsCisr
KyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWIuYwpAQCAtMCwwICsxLDI5MTQgQEAKKy8qCSRGcmVl
QlNEJCAqLworLyoJJE5ldEJTRCQgKi8KKy8qCSRPcGVuQlNEOiBpZl91bWIuYyx2IDEuMTggMjAx
OC8wMi8xOSAwODo1OTo1MiBtcGkgRXhwICQgKi8KKworLyoKKyAqIE9yaWdpbmFsIGNvcHlyaWdo
dCAoYykgMjAxNiBnZW51YSBtYkggKE9wZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQZXJtaXNzaW9u
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBh
bnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJv
dmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX
QVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwg
SU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hB
VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU
SEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9S
VElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMjIgQURJU1RBIFNBUyAocmUtd3JpdGUgZm9yIEZyZWVCU0QpCisgKgorICogUmUtd3Jp
dGUgZm9yIEZyZWVCU0QgYnkgUGllcnJlIFByb25jaGVyeSA8cGllcnJlQGRlZm9yYS5uZXQ+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisg
KiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAq
IE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsIHNwZWNpZmljYXRpb246CisgKiBodHRw
Oi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3MvTUJJTTEwRXJyYXRh
MV8wNzMwMTMuemlwCisgKiBDb21wbGlhbmNlIHRlc3RpbmcgZ3VpZGUKKyAqIGh0dHA6Ly93d3cu
dXNiLm9yZy9kZXZlbG9wZXJzL2RvY3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4w
LnBkZgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxl
Lmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNp
bmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+CisjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0u
aD4KKyNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2lu
Y2x1ZGUgPHN5cy9xdWV1ZS5oPgorCisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxz
eXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL2NvbmR2YXIu
aD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL19pbnR0
eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2lu
Y2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1
ZGUgPG5ldC9pZl92YXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0aXNyLmg+CisjaW5jbHVkZSA8bmV0
L3JvdXRlLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9p
bl92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3Vz
Yi5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX2NkYy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNi
ZGkuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkZXYvdXNi
L3VzYl9wcm9jZXNzLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JkaV91dGlsLmg+CisjaW5jbHVk
ZSAidXNiX2lmLmgiCisKKyNpbmNsdWRlICJtYmltLmgiCisjaW5jbHVkZSAiaWZfdW1icmVnLmgi
CisKK01BTExPQ19ERUNMQVJFKE1fTUJJTV9DSURfQ09OTkVDVCk7CitNQUxMT0NfREVGSU5FKE1f
TUJJTV9DSURfQ09OTkVDVCwgIm1iaW1fY2lkX2Nvbm5lY3QiLAorCQkiQ29ubmVjdGlvbiBwYXJh
bWV0ZXJzIGZvciBNQklNIik7CisKKyNpZmRlZiBVTUJfREVCVUcKKyNkZWZpbmUgRFBSSU5URih4
Li4uKQkJCQkJCQlcCisJCWRvIHsgaWYgKHVtYl9kZWJ1ZykgbG9nKExPR19ERUJVRywgeCk7IH0g
d2hpbGUgKDApCisKKyNkZWZpbmUgRFBSSU5URk4obiwgeC4uLikJCQkJCQlcCisJCWRvIHsgaWYg
KHVtYl9kZWJ1ZyA+PSAobikpIGxvZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVm
aW5lIEREVU1QTihuLCBiLCBsKQkJCQkJCQlcCisJCWRvIHsJCQkJCQkJXAorCQkJaWYgKHVtYl9k
ZWJ1ZyA+PSAobikpCQkJCVwKKwkJCQl1bWJfZHVtcCgoYiksIChsKSk7CQkJXAorCQl9IHdoaWxl
ICgwKQorCitpbnQJIHVtYl9kZWJ1ZyA9IDE7CitzdGF0aWMgY2hhcgkqdW1iX3V1aWQyc3RyKHVp
bnQ4X3QgW01CSU1fVVVJRF9MRU5dKTsKK3N0YXRpYyB2b2lkCSB1bWJfZHVtcCh2b2lkICosIGlu
dCk7CisKKyNlbHNlCisjZGVmaW5lIERQUklOVEYoeC4uLikJCWRvIHsgfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgRFBSSU5URk4obiwgeC4uLikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBERFVNUE4o
biwgYiwgbCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIERFVk5BTShzYykJ
CWRldmljZV9nZXRfbmFtZXVuaXQoKHNjKS0+c2NfZGV2KQorCisvKgorICogU3RhdGUgY2hhbmdl
IHRpbWVvdXQKKyAqLworI2RlZmluZSBVTUJfU1RBVEVfQ0hBTkdFX1RJTUVPVVQJMzAKKworLyoK
KyAqIFN0YXRlIGNoYW5nZSBmbGFncworICovCisjZGVmaW5lIFVNQl9OU19ET05UX0RST1AJMHgw
MDAxCS8qIGRvIG5vdCBkcm9wIGJlbG93IGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgVU1CX05T
X0RPTlRfUkFJU0UJMHgwMDAyCS8qIGRvIG5vdCByYWlzZSBiZWxvdyBjdXJyZW50IHN0YXRlICov
CisKKy8qCisgKiBEaWFnbm9zdGljIG1hY3JvcworICovCitjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRl
c2NyIHVtYl9yZWdzdGF0ZXNbXSA9IE1CSU1fUkVHU1RBVEVfREVTQ1JJUFRJT05TOworY29uc3Qg
c3RydWN0IHVtYl92YWxkZXNjciB1bWJfZGF0YWNsYXNzZXNbXSA9IE1CSU1fREFUQUNMQVNTX0RF
U0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX3NpbXN0YXRlW10gPSBN
QklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1i
X21lc3NhZ2VzW10gPSBNQklNX01FU1NBR0VTX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1
bWJfdmFsZGVzY3IgdW1iX3N0YXR1c1tdID0gTUJJTV9TVEFUVVNfREVTQ1JJUFRJT05TOworY29u
c3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfY2lkc1tdID0gTUJJTV9DSURfREVTQ1JJUFRJT05T
OworY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcGt0c3RhdGVbXSA9IE1CSU1fUEtUU1JW
X1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2FjdHN0
YXRlW10gPSBNQklNX0FDVElWQVRJT05fU1RBVEVfREVTQ1JJUFRJT05TOworY29uc3Qgc3RydWN0
IHVtYl92YWxkZXNjciB1bWJfZXJyb3JbXSA9IE1CSU1fRVJST1JfREVTQ1JJUFRJT05TOworY29u
c3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcGludHlwZVtdID0gTUJJTV9QSU5UWVBFX0RFU0NS
SVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2lzdGF0ZVtdID0gVU1CX0lO
VEVSTkFMX1NUQVRFX0RFU0NSSVBUSU9OUzsKKworI2RlZmluZSB1bWJfcmVnc3RhdGUoYykJCXVt
Yl92YWwyZGVzY3IodW1iX3JlZ3N0YXRlcywgKGMpKQorI2RlZmluZSB1bWJfZGF0YWNsYXNzKGMp
CXVtYl92YWwyZGVzY3IodW1iX2RhdGFjbGFzc2VzLCAoYykpCisjZGVmaW5lIHVtYl9zaW1zdGF0
ZShzKQkJdW1iX3ZhbDJkZXNjcih1bWJfc2ltc3RhdGUsIChzKSkKKyNkZWZpbmUgdW1iX3JlcXVl
c3Qyc3RyKG0pCXVtYl92YWwyZGVzY3IodW1iX21lc3NhZ2VzLCAobSkpCisjZGVmaW5lIHVtYl9z
dGF0dXMyc3RyKHMpCXVtYl92YWwyZGVzY3IodW1iX3N0YXR1cywgKHMpKQorI2RlZmluZSB1bWJf
Y2lkMnN0cihjKQkJdW1iX3ZhbDJkZXNjcih1bWJfY2lkcywgKGMpKQorI2RlZmluZSB1bWJfcGFj
a2V0X3N0YXRlKHMpCXVtYl92YWwyZGVzY3IodW1iX3BrdHN0YXRlLCAocykpCisjZGVmaW5lIHVt
Yl9hY3RpdmF0aW9uKHMpCXVtYl92YWwyZGVzY3IodW1iX2FjdHN0YXRlLCAocykpCisjZGVmaW5l
IHVtYl9lcnJvcjJzdHIoZSkJdW1iX3ZhbDJkZXNjcih1bWJfZXJyb3IsIChlKSkKKyNkZWZpbmUg
dW1iX3Bpbl90eXBlKHQpCQl1bWJfdmFsMmRlc2NyKHVtYl9waW50eXBlLCAodCkpCisjZGVmaW5l
IHVtYl9pc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1iX2lzdGF0ZSwgKHMpKQorCitzdGF0aWMg
ZGV2aWNlX3Byb2JlX3QgdW1iX3Byb2JlOworc3RhdGljIGRldmljZV9hdHRhY2hfdCB1bWJfYXR0
YWNoOworc3RhdGljIGRldmljZV9kZXRhY2hfdCB1bWJfZGV0YWNoOworc3RhdGljIGRldmljZV9z
dXNwZW5kX3QgdW1iX3N1c3BlbmQ7CitzdGF0aWMgZGV2aWNlX3Jlc3VtZV90IHVtYl9yZXN1bWU7
CitzdGF0aWMgdm9pZAkgdW1iX2F0dGFjaF90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7Citz
dGF0aWMgdXNiX2hhbmRsZV9yZXF1ZXN0X3QgdW1iX2hhbmRsZV9yZXF1ZXN0Oworc3RhdGljIGlu
dAkgdW1iX2RlYWN0aXZhdGUoZGV2aWNlX3QpOworc3RhdGljIHZvaWQJIHVtYl9uY21fc2V0dXAo
c3RydWN0IHVtYl9zb2Z0YyAqLCBzdHJ1Y3QgdXNiX2NvbmZpZyAqKTsKK3N0YXRpYyB2b2lkCSB1
bWJfY2xvc2VfYnVsa3BpcGVzKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgaW50CSB1bWJf
aW9jdGwoc3RydWN0IGlmbmV0ICosIHVfbG9uZywgY2FkZHJfdCk7CitzdGF0aWMgdm9pZAkgdW1i
X2luaXQodm9pZCAqKTsKK3N0YXRpYyB2b2lkCSB1bWJfaW5wdXQoc3RydWN0IGlmbmV0ICosIHN0
cnVjdCBtYnVmICopOworc3RhdGljIGludAkgdW1iX291dHB1dChzdHJ1Y3QgaWZuZXQgKiwgc3Ry
dWN0IG1idWYgKiwKKwkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgcm91dGUg
Kik7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXJ0KHN0cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyB2b2lk
CSB1bWJfc3RhcnRfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICopOworI2lmIDAKK3N0YXRpYyB2
b2lkCSB1bWJfd2F0Y2hkb2coc3RydWN0IGlmbmV0ICopOworI2VuZGlmCitzdGF0aWMgdm9pZAkg
dW1iX3N0YXRlY2hnX3RpbWVvdXQodm9pZCAqKTsKKworc3RhdGljIGludAkgdW1iX21lZGlhY2hh
bmdlKHN0cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyB2b2lkCSB1bWJfbWVkaWFzdGF0dXMoc3RydWN0
IGlmbmV0ICosIHN0cnVjdCBpZm1lZGlhcmVxICopOworCitzdGF0aWMgdm9pZAkgdW1iX2FkZF90
YXNrKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB1c2JfcHJvY19jYWxsYmFja190LAorCQkgICAgc3Ry
dWN0IHVzYl9wcm9jX21zZyAqLCBzdHJ1Y3QgdXNiX3Byb2NfbXNnICosIGludCk7CitzdGF0aWMg
dm9pZAkgdW1iX25ld3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKiwgZW51bSB1bWJfc3RhdGUsIGlu
dCk7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXRlX3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqKTsK
K3N0YXRpYyB2b2lkCSB1bWJfdXAoc3RydWN0IHVtYl9zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkCSB1
bWJfZG93bihzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CisKK3N0YXRpYyB2b2lkCSB1bWJfZ2V0
X3Jlc3BvbnNlX3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqKTsKKworc3RhdGljIHZvaWQJIHVt
Yl9kZWNvZGVfcmVzcG9uc2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0
aWMgdm9pZAkgdW1iX2hhbmRsZV9pbmRpY2F0ZV9zdGF0dXNfbXNnKHN0cnVjdCB1bWJfc29mdGMg
Kiwgdm9pZCAqLAorCQkgICAgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfaGFuZGxlX29wZW5kb25l
X21zZyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJf
aGFuZGxlX2Nsb3NlZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7Citz
dGF0aWMgaW50CSB1bWJfZGVjb2RlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKiwg
dm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9kZXZpY2VzX2NhcHMoc3RydWN0
IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3N1YnNj
cmliZXJfc3RhdHVzKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGlu
dAkgdW1iX2RlY29kZV9yYWRpb19zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50
KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcGluKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAq
LCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9wYWNrZXRfc2VydmljZShzdHJ1Y3QgdW1i
X3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfc2lnbmFsX3N0
YXRlKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2Rl
Y29kZV9jb25uZWN0X2luZm8oc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0
aWMgaW50CSB1bWJfZGVjb2RlX2lwX2NvbmZpZ3VyYXRpb24oc3RydWN0IHVtYl9zb2Z0YyAqLCB2
b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX3J4KHN0cnVjdCB1bWJfc29mdGMgKik7Citz
dGF0aWMgdXNiX2NhbGxiYWNrX3QgdW1iX3J4ZW9mOworc3RhdGljIHZvaWQJIHVtYl9yeGZsdXNo
KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgaW50CSB1bWJfZW5jYXAoc3RydWN0IHVtYl9z
b2Z0YyAqLCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgdXNiX3hmZXIgKik7CitzdGF0aWMgdXNiX2Nh
bGxiYWNrX3QgdW1iX3R4ZW9mOworc3RhdGljIHZvaWQJIHVtYl90eGZsdXNoKHN0cnVjdCB1bWJf
c29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2RlY2FwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3Ry
dWN0IHVzYl94ZmVyICosIGludCk7CisKK3N0YXRpYyB1c2JfZXJyb3JfdAkgdW1iX3NlbmRfZW5j
YXBfY29tbWFuZChzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJ
IHVtYl9nZXRfZW5jYXBfcmVzcG9uc2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCAq
KTsKK3N0YXRpYyB2b2lkCSB1bWJfY3RybF9tc2coc3RydWN0IHVtYl9zb2Z0YyAqLCB1aW50MzJf
dCwgdm9pZCAqLCBpbnQpOworCitzdGF0aWMgdm9pZAkgdW1iX29wZW4oc3RydWN0IHVtYl9zb2Z0
YyAqKTsKK3N0YXRpYyB2b2lkCSB1bWJfY2xvc2Uoc3RydWN0IHVtYl9zb2Z0YyAqKTsKKworc3Rh
dGljIGludAkgdW1iX3NldHBpbihzdHJ1Y3QgdW1iX3NvZnRjICosIGludCwgaW50LCB2b2lkICos
IGludCwgdm9pZCAqLAorCQkgICAgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfc2V0ZGF0YWNsYXNz
KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3JhZGlvKHN0cnVjdCB1bWJf
c29mdGMgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfYWxsb2NhdGVfY2lkKHN0cnVjdCB1bWJf
c29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3NlbmRfZmNjX2F1dGgoc3RydWN0IHVtYl9zb2Z0
YyAqKTsKK3N0YXRpYyB2b2lkCSB1bWJfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAq
LCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9jb25uZWN0KHN0cnVjdCB1bWJfc29mdGMgKik7Citz
dGF0aWMgdm9pZAkgdW1iX2Rpc2Nvbm5lY3Qoc3RydWN0IHVtYl9zb2Z0YyAqKTsKK3N0YXRpYyB2
b2lkCSB1bWJfc2VuZF9jb25uZWN0KHN0cnVjdCB1bWJfc29mdGMgKiwgaW50KTsKKworc3RhdGlj
IHZvaWQJIHVtYl9xcnlfaXBjb25maWcoc3RydWN0IHVtYl9zb2Z0YyAqKTsKK3N0YXRpYyB2b2lk
CSB1bWJfY21kKHN0cnVjdCB1bWJfc29mdGMgKiwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgaW50
KTsKK3N0YXRpYyB2b2lkCSB1bWJfY21kMShzdHJ1Y3QgdW1iX3NvZnRjICosIGludCwgaW50LCBj
b25zdCB2b2lkICosIGludCwgdWludDhfdCAqKTsKK3N0YXRpYyB2b2lkCSB1bWJfY29tbWFuZF9k
b25lKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9k
ZWNvZGVfY2lkKHN0cnVjdCB1bWJfc29mdGMgKiwgdWludDMyX3QsIHZvaWQgKiwgaW50KTsKK3N0
YXRpYyB2b2lkCSB1bWJfZGVjb2RlX3FtaShzdHJ1Y3QgdW1iX3NvZnRjICosIHVpbnQ4X3QgKiwg
aW50KTsKKworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl9pbnRyOworCitzdGF0aWMgY2hhcgkq
dW1iX250b3Aoc3RydWN0IHNvY2thZGRyICopOworCitzdGF0aWMgY29uc3QgaW50IHVtYl94ZmVy
X3RvdXQgPSBVU0JfREVGQVVMVF9USU1FT1VUOworCitzdGF0aWMgdWludDhfdAkgdW1iX3V1aWRf
YmFzaWNfY29ubmVjdFtdID0gTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1Q7CitzdGF0aWMgdWludDhf
dAkgdW1iX3V1aWRfY29udGV4dF9pbnRlcm5ldFtdID0gTUJJTV9VVUlEX0NPTlRFWFRfSU5URVJO
RVQ7CitzdGF0aWMgdWludDhfdAkgdW1iX3V1aWRfcW1pX21iaW1bXSA9IE1CSU1fVVVJRF9RTUlf
TUJJTTsKK3N0YXRpYyB1aW50MzJfdAkgdW1iX3Nlc3Npb25faWQgPSAwOworCitzdGF0aWMgY29u
c3Qgc3RydWN0IHVzYl9jb25maWcgdW1iX2NvbmZpZ1tVTUJfTl9UUkFOU0ZFUl0gPSB7CisJW1VN
Ql9JTlRSX1JYXSA9IHsKKwkJLnR5cGUgPSBVRV9JTlRFUlJVUFQsCisJCS5lbmRwb2ludCA9IFVF
X0FERFJfQU5ZLAorCQkuZGlyZWN0aW9uID0gVUVfRElSX0lOLAorCQkuaWZfaW5kZXggPSAxLAor
CQkuY2FsbGJhY2sgPSB1bWJfaW50ciwKKwkJLmJ1ZnNpemUgPSBzaXplb2YgKHN0cnVjdCB1c2Jf
Y2RjX25vdGlmaWNhdGlvbiksCisJCS5mbGFncyA9IHsucGlwZV9ib2YgPSAxLC5zaG9ydF94ZmVy
X29rID0gMX0sCisJCS51c2JfbW9kZSA9IFVTQl9NT0RFX0hPU1QsCisJfSwKKwlbVU1CX0JVTEtf
UlhdID0geworCQkudHlwZSA9IFVFX0JVTEssCisJCS5lbmRwb2ludCA9IFVFX0FERFJfQU5ZLAor
CQkuZGlyZWN0aW9uID0gVUVfRElSX0lOLAorCQkuaWZfaW5kZXggPSAwLAorCQkuY2FsbGJhY2sg
PSB1bWJfcnhlb2YsCisJCS5idWZzaXplID0gOCAqIDEwMjQsCisJCS5mbGFncyA9IHsucGlwZV9i
b2YgPSAxLC5zaG9ydF94ZmVyX29rID0gMSwuZXh0X2J1ZmZlciA9IDF9LAorCQkudXNiX21vZGUg
PSBVU0JfTU9ERV9IT1NULAorCX0sCisJW1VNQl9CVUxLX1RYXSA9IHsKKwkJLnR5cGUgPSBVRV9C
VUxLLAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9P
VVQsCisJCS5pZl9pbmRleCA9IDAsCisJCS5jYWxsYmFjayA9IHVtYl90eGVvZiwKKwkJLmJ1ZnNp
emUgPSA4ICogMTAyNCwKKwkJLmZsYWdzID0gey5waXBlX2JvZiA9IDEsLmZvcmNlX3Nob3J0X3hm
ZXIgPSAxLC5leHRfYnVmZmVyID0gMX0sCisJCS50aW1lb3V0ID0gdW1iX3hmZXJfdG91dCwKKwkJ
LnVzYl9tb2RlID0gVVNCX01PREVfSE9TVCwKKwl9LAorfTsKKworc3RhdGljIGRldmljZV9tZXRo
b2RfdCB1bWJfbWV0aG9kc1tdID0geworCS8qIFVTQiBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0Qo
dXNiX2hhbmRsZV9yZXF1ZXN0LCB1bWJfaGFuZGxlX3JlcXVlc3QpLAorCisJLyogRGV2aWNlIGlu
dGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIHVtYl9wcm9iZSksCisJREVWTUVU
SE9EKGRldmljZV9hdHRhY2gsIHVtYl9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNo
LCB1bWJfZGV0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX3N1c3BlbmQsIHVtYl9zdXNwZW5kKSwK
KwlERVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwgdW1iX3Jlc3VtZSksCisKKwlERVZNRVRIT0RfRU5E
Cit9OworCitzdGF0aWMgZHJpdmVyX3QgdW1iX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ1bWIiLAor
CS5tZXRob2RzID0gdW1iX21ldGhvZHMsCisJLnNpemUgPSBzaXplb2YgKHN0cnVjdCB1bWJfc29m
dGMpLAorfTsKKworTUFMTE9DX0RFRklORShNX1VTQl9VTUIsICJVU0IgVU1CIiwgIlVTQiBNQklN
IGRyaXZlciIpOworCitjb25zdCBpbnQgdW1iX2RlbGF5ID0gNDAwMDsKKworLyoKKyAqIFRoZXNl
IGRldmljZXMgcmVxdWlyZSBhbiAiRkNDIEF1dGhlbnRpY2F0aW9uIiBjb21tYW5kLgorICovCisj
aWZuZGVmIFVTQl9WRU5ET1JfU0lFUlJBCisjIGRlZmluZSBVU0JfVkVORE9SX1NJRVJSQQkweDEx
OTkKKyNlbmRpZgorI2lmbmRlZiBVU0JfUFJPRFVDVF9TSUVSUkFfRU03NDU1CisjIGRlZmluZSBV
U0JfUFJPRFVDVF9TSUVSUkFfRU03NDU1CTB4OTA3OQorI2VuZGlmCitjb25zdCBzdHJ1Y3QgdXNi
X2RldmljZV9pZCB1bWJfZmNjYXV0aF9kZXZzW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ192ZW5k
b3IgPSAxLAorCQkubWF0Y2hfZmxhZ19wcm9kdWN0ID0gMSwKKwkJLmlkVmVuZG9yID0gVVNCX1ZF
TkRPUl9TSUVSUkEsCisJCS5pZFByb2R1Y3QgPSBVU0JfUFJPRFVDVF9TSUVSUkFfRU03NDU1CisJ
fQorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdW1iX3FtaV9hbGxvY19jaWRbXSA9IHsKKwkw
eDAxLAorCTB4MGYsIDB4MDAsCQkvKiBsZW4gKi8KKwkweDAwLAkJCS8qIFFNVVggZmxhZ3MgKi8K
KwkweDAwLAkJCS8qIHNlcnZpY2UgImN0bCIgKi8KKwkweDAwLAkJCS8qIENJRCAqLworCTB4MDAs
CQkJLyogUU1JIGZsYWdzICovCisJMHgwMSwJCQkvKiB0cmFuc2FjdGlvbiAqLworCTB4MjIsIDB4
MDAsCQkvKiBtc2cgIkFsbG9jYXRlIENJRCIgKi8KKwkweDA0LCAweDAwLAkJLyogVExWIGxlbiAq
LworCTB4MDEsIDB4MDEsIDB4MDAsIDB4MDIJLyogVExWICovCit9OworCitzdGF0aWMgY29uc3Qg
dWludDhfdCB1bWJfcW1pX2ZjY19hdXRoW10gPSB7CisJMHgwMSwKKwkweDBjLCAweDAwLAkJLyog
bGVuICovCisJMHgwMCwJCQkvKiBRTVVYIGZsYWdzICovCisJMHgwMiwJCQkvKiBzZXJ2aWNlICJk
bXMiICovCisjZGVmaW5lIFVNQl9RTUlfQ0lEX09GRlMJNQorCTB4MDAsCQkJLyogQ0lEIChmaWxs
ZWQgaW4gbGF0ZXIpICovCisJMHgwMCwJCQkvKiBRTUkgZmxhZ3MgKi8KKwkweDAxLCAweDAwLAkJ
LyogdHJhbnNhY3Rpb24gKi8KKwkweDVmLCAweDU1LAkJLyogbXNnICJTZW5kIEZDQyBBdXRoZW50
aWNhdGlvbiIgKi8KKwkweDAwLCAweDAwCQkvKiBUTFYgbGVuICovCit9OworCitzdGF0aWMgaW50
Cit1bWJfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB1c2JfYXR0YWNoX2FyZyAqdWFh
ID0gZGV2aWNlX2dldF9pdmFycyhkZXYpOworCXVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcl90ICpp
ZDsKKworCWlmICh1YWEtPnVzYl9tb2RlICE9IFVTQl9NT0RFX0hPU1QpCisJCXJldHVybiAoRU5Y
SU8pOworCWlmICgoaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcih1YWEtPmlmYWNl
KSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwkvKgorCSAqIElmIHRoaXMgZnVuY3Rp
b24gaW1wbGVtZW50cyBOQ00sIGNoZWNrIGlmIGFsdGVybmF0ZSBzZXR0aW5nCisJICogMSBpbXBs
ZW1lbnRzIE1CSU0uCisJICovCisJaWYgKGlkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVUlDTEFTU19D
REMgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PQorCSAgICBVSVNVQkNMQVNTX05F
VFdPUktfQ09OVFJPTF9NT0RFTCkgeworCQlpZCA9IHVzYmRfZ2V0X2ludGVyZmFjZV9kZXNjcmlw
dG9yKAorCQkJCXVzYmRfZ2V0X2lmYWNlKHVhYS0+ZGV2aWNlLAorCQkJCQl1YWEtPmluZm8uYklm
YWNlSW5kZXggKyAxKSk7CisJCWlmIChpZCA9PSBOVUxMIHx8IGlkLT5iQWx0ZXJuYXRlU2V0dGlu
ZyAhPSAxKQorCQkJcmV0dXJuIChFTlhJTyk7CisJfQorCisjaWZuZGVmIFVJU1VCQ0xBU1NfTU9C
SUxFX0JST0FEQkFORF9JTlRFUkZBQ0VfTU9ERUwKKyMgZGVmaW5lIFVJU1VCQ0xBU1NfTU9CSUxF
X0JST0FEQkFORF9JTlRFUkZBQ0VfTU9ERUwgMTQKKyNlbmRpZgorCWlmIChpZC0+YkludGVyZmFj
ZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0K
KwkgICAgVUlTVUJDTEFTU19NT0JJTEVfQlJPQURCQU5EX0lOVEVSRkFDRV9NT0RFTCAmJgorCSAg
ICBpZC0+YkludGVyZmFjZVByb3RvY29sID09IDApCisJCXJldHVybiAoQlVTX1BST0JFX1NQRUNJ
RklDKTsKKworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50Cit1bWJfYXR0YWNoKGRl
dmljZV90IGRldikKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMo
ZGV2KTsKKwlzdHJ1Y3QgdXNiX2F0dGFjaF9hcmcgKnVhYSA9IGRldmljZV9nZXRfaXZhcnMoZGV2
KTsKKwlzdHJ1Y3QgdXNiX2NvbmZpZyBjb25maWdbVU1CX05fVFJBTlNGRVJdOworCWludAkgdjsK
Kwljb25zdCBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjcmlwdG9yICp1ZDsKKwljb25zdCBzdHJ1
Y3QgbWJpbV9kZXNjcmlwdG9yICptZDsKKwlpbnQJIGk7CisJdXNiX2ludGVyZmFjZV9kZXNjcmlw
dG9yX3QgKmlkOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlpbnQJIGRhdGFfaWZh
Y2VubyA9IC0xOworCXVzYl9lcnJvcl90IGVycm9yOworCisJc2MtPnNjX2RldiA9IGRldjsKKwlz
Yy0+c2NfdWRldiA9IHVhYS0+ZGV2aWNlOworCisJbWVtY3B5KGNvbmZpZywgdW1iX2NvbmZpZywg
c2l6ZW9mIChjb25maWcpKTsKKworCWRldmljZV9zZXRfdXNiX2Rlc2MoZGV2KTsKKworCXNjLT5z
Y19jdHJsX2lmYWNlbm8gPSB1YWEtPmluZm8uYklmYWNlTnVtOworCisJbXR4X2luaXQoJnNjLT5z
Y19tdXRleCwgZGV2aWNlX2dldF9uYW1ldW5pdChkZXYpLCBOVUxMLCBNVFhfREVGKTsKKworCS8q
CisJICogU29tZSBNQklNIGhhcmR3YXJlIGRvZXMgbm90IHByb3ZpZGUgdGhlIG1hbmRhdG9yeSBD
REMgVW5pb24KKwkgKiBEZXNjcmlwdG9yLCBzbyB3ZSBhbHNvIGxvb2sgYXQgbWF0Y2hpbmcgSW50
ZXJmYWNlCisJICogQXNzb2NpYXRpb24gRGVzY3JpcHRvcnMgdG8gZmluZCBvdXQgdGhlIE1CSU0g
RGF0YSBJbnRlcmZhY2UKKwkgKiBudW1iZXIuCisJICovCisJc2MtPnNjX3Zlcl9tYWogPSBzYy0+
c2NfdmVyX21pbiA9IC0xOworCXNjLT5zY19tYXhwa3RsZW4gPSBNQklNX01BWFNFR1NaX01JTlZB
TDsKKwlpZCA9IHVzYmRfZ2V0X2ludGVyZmFjZV9kZXNjcmlwdG9yKHVhYS0+aWZhY2UpOworCisJ
dWQgPSB1c2JkX2ZpbmRfZGVzY3JpcHRvcihzYy0+c2NfdWRldiwgaWQsIHVhYS0+aW5mby5iSWZh
Y2VJbmRleCwKKwkJCVVERVNDX0NTX0lOVEVSRkFDRSwgMHhmZiwgVURFU0NTVUJfQ0RDX1VOSU9O
LCAweGZmKTsKKwlpZiAodWQgIT0gTlVMTCkgeworCQlkYXRhX2lmYWNlbm8gPSB1ZC0+YlNsYXZl
SW50ZXJmYWNlWzBdOworCX0KKworCW1kID0gdXNiZF9maW5kX2Rlc2NyaXB0b3Ioc2MtPnNjX3Vk
ZXYsIGlkLCB1YWEtPmluZm8uYklmYWNlSW5kZXgsCisJCQlVREVTQ19DU19JTlRFUkZBQ0UsIDB4
ZmYsIFVERVNDU1VCX01CSU0sIDB4ZmYpOworCWlmIChtZCAhPSBOVUxMKSB7CisJCXYgPSBVR0VU
VyhtZC0+YmNkTUJJTVZlcnNpb24pOworCQlzYy0+c2NfdmVyX21haiA9IE1CSU1fVkVSX01BSk9S
KHYpOworCQlzYy0+c2NfdmVyX21pbiA9IE1CSU1fVkVSX01JTk9SKHYpOworCQlzYy0+c2NfY3Ry
bF9sZW4gPSBVR0VUVyhtZC0+d01heENvbnRyb2xNZXNzYWdlKTsKKwkJLyogTmV2ZXIgdHJ1c3Qg
YSBVU0IgZGV2aWNlISBDb3VsZCB0cnkgdG8gZXhwbG9pdCB1cyAqLworCQlpZiAoc2MtPnNjX2N0
cmxfbGVuIDwgTUJJTV9DVFJMTVNHX01JTkxFTiB8fAorCQkJCXNjLT5zY19jdHJsX2xlbiA+IE1C
SU1fQ1RSTE1TR19NQVhMRU4pIHsKKwkJCURQUklOVEYoImNvbnRyb2wgbWVzc2FnZSBsZW4gJWQg
b3V0IG9mICIKKwkJCQkJImJvdW5kcyBbJWQgLi4gJWRdXG4iLAorCQkJCQlzYy0+c2NfY3RybF9s
ZW4sIE1CSU1fQ1RSTE1TR19NSU5MRU4sCisJCQkJCU1CSU1fQ1RSTE1TR19NQVhMRU4pOworCQkJ
LyogY29udGludWUgYW55d2F5ICovCisJCX0KKwkJc2MtPnNjX21heHBrdGxlbiA9IFVHRVRXKG1k
LT53TWF4U2VnbWVudFNpemUpOworCQlEUFJJTlRGTigyLCAiY3RybF9sZW49JWQsIG1heHBrdGxl
bj0lZCwgY2FwPTB4JXhcbiIsCisJCQkJc2MtPnNjX2N0cmxfbGVuLCBzYy0+c2NfbWF4cGt0bGVu
LAorCQkJCW1kLT5ibU5ldHdvcmtDYXBhYmlsaXRpZXMpOworCX0KKwlpZiAoc2MtPnNjX3Zlcl9t
YWogPCAwKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZXJyb3I6IG1pc3NpbmcgTUJJTSBkZXNj
cmlwdG9yXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWRldmljZV9wcmludGYoZGV2LCAidmVy
c2lvbiAlZC4lZFxuIiwgc2MtPnNjX3Zlcl9tYWosCisJICAgIHNjLT5zY192ZXJfbWluKTsKKwor
CWlmICh1c2JkX2xvb2t1cF9pZF9ieV91YWEodW1iX2ZjY2F1dGhfZGV2cywgc2l6ZW9mICh1bWJf
ZmNjYXV0aF9kZXZzKSwgdWFhKSkgeworCQlzYy0+c2NfZmxhZ3MgfD0gVU1CRkxHX0ZDQ19BVVRI
X1JFUVVJUkVEOworCQlzYy0+c2NfY2lkID0gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNj
LT5zY191ZGV2LT5pZmFjZXNfbWF4OyBpKyspIHsKKwkJaWZhY2UgPSB1c2JkX2dldF9pZmFjZShz
Yy0+c2NfdWRldiwgaSk7CisJCWlkID0gdXNiZF9nZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoaWZh
Y2UpOworCQlpZiAoaWQgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCWlmIChpZC0+YkludGVyZmFj
ZU51bWJlciA9PSBkYXRhX2lmYWNlbm8pIHsKKwkJCXNjLT5zY19kYXRhX2lmYWNlID0gaWZhY2U7
CisJCQlzYy0+c2NfaWZhY2VzX2luZGV4WzBdID0gaTsKKwkJCXNjLT5zY19pZmFjZXNfaW5kZXhb
MV0gPSB1YWEtPmluZm8uYklmYWNlSW5kZXg7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc2Mt
PnNjX2RhdGFfaWZhY2UgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yOiBu
byBkYXRhIGludGVyZmFjZSBmb3VuZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAq
IElmIHRoaXMgaXMgYSBjb21iaW5lZCBOQ00vTUJJTSBmdW5jdGlvbiwgc3dpdGNoIHRvCisJICog
YWx0ZXJuYXRlIHNldHRpbmcgb25lIHRvIGVuYWJsZSBNQklNLgorCSAqLworCWlkID0gdXNiZF9n
ZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IodWFhLT5pZmFjZSk7CisJaWYgKGlkICE9IE5VTEwgJiYg
aWQtPmJJbnRlcmZhY2VDbGFzcyA9PSBVSUNMQVNTX0NEQyAmJgorCSAgICBpZC0+YkludGVyZmFj
ZVN1YkNsYXNzID09IFVJU1VCQ0xBU1NfTkVUV09SS19DT05UUk9MX01PREVMKSB7CisJCWRldmlj
ZV9wcmludGYoc2MtPnNjX2RldiwgImNvbWJpbmVkIE5DTS9NQklNXG4iKTsKKwkJZXJyb3IgPSB1
c2JkX3JlcV9zZXRfYWx0X2ludGVyZmFjZV9ubyhzYy0+c2NfdWRldiwKKwkJCQlOVUxMLCB1YWEt
PmluZm8uYklmYWNlSW5kZXgsIDEpOworCQlpZiAoZXJyb3IgIT0gVVNCX0VSUl9OT1JNQUxfQ09N
UExFVElPTikgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvcjogQ291bGQgbm90IHN3aXRj
aCB0byBhbHRlcm5hdGUgc2V0dGluZyBmb3IgTUJJTVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0K
KwkJc2MtPnNjX2lmYWNlc19pbmRleFsxXSA9IHVhYS0+aW5mby5iSWZhY2VJbmRleCArIDE7CisJ
fQorCisJaWYgKHVzYl9wcm9jX2NyZWF0ZSgmc2MtPnNjX3Rhc2txdWV1ZSwgJnNjLT5zY19tdXRl
eCwKKwkJCQlkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5zY19kZXYpLAorCQkJCVVTQl9QUklfTUVE
KSAhPSAwKQorCQlnb3RvIGZhaWw7CisKKwlEUFJJTlRGTigyLCAiY3RybC1pZm5vIyVkOiBkYXRh
LWlmbm8jJWRcbiIsIHNjLT5zY19jdHJsX2lmYWNlbm8sCisJICAgIGRhdGFfaWZhY2Vubyk7CisK
Kwl1c2JfY2FsbG91dF9pbml0X210eCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyLCAmc2MtPnNjX211
dGV4LCAwKTsKKworCXVtYl9uY21fc2V0dXAoc2MsIGNvbmZpZyk7CisJRFBSSU5URk4oMiwgIiVz
OiByeC90eCBzaXplICVkLyVkXG4iLCBERVZOQU0oc2MpLAorCQkJc2MtPnNjX3J4X2J1ZnN6LCBz
Yy0+c2NfdHhfYnVmc3opOworCisJc2MtPnNjX3J4X2J1ZiA9IG1hbGxvYyhzYy0+c2NfcnhfYnVm
c3osIE1fREVWQlVGLCBNX1dBSVRPSyk7CisJc2MtPnNjX3R4X2J1ZiA9IG1hbGxvYyhzYy0+c2Nf
dHhfYnVmc3osIE1fREVWQlVGLCBNX1dBSVRPSyk7CisKKwlmb3IgKGkgPSAwOyBpICE9IDMyOyBp
KyspIHsKKwkJZXJyb3IgPSB1c2JkX3NldF9hbHRfaW50ZXJmYWNlX2luZGV4KHNjLT5zY191ZGV2
LAorCQkJCXNjLT5zY19pZmFjZXNfaW5kZXhbMF0sIGkpOworCQlpZiAoZXJyb3IpCisJCQlicmVh
azsKKworCQllcnJvciA9IHVzYmRfdHJhbnNmZXJfc2V0dXAoc2MtPnNjX3VkZXYsIHNjLT5zY19p
ZmFjZXNfaW5kZXgsCisJCQkJc2MtPnNjX3hmZXIsIGNvbmZpZywgVU1CX05fVFJBTlNGRVIsCisJ
CQkJc2MsICZzYy0+c2NfbXV0ZXgpOworCQlpZiAoZXJyb3IgPT0gVVNCX0VSUl9OT1JNQUxfQ09N
UExFVElPTikKKwkJCWJyZWFrOworCX0KKwlpZiAoZXJyb3IgfHwgKGkgPT0gMzIpKSB7CisJCWRl
dmljZV9wcmludGYoc2MtPnNjX2RldiwgImVycm9yOiBmYWlsZWQgdG8gc2V0dXAgeGZlcnNcbiIp
OworCQlnb3RvIGZhaWw7CisJfQorCisJc2MtPnNjX3Jlc3BfYnVmID0gbWFsbG9jKHNjLT5zY19j
dHJsX2xlbiwgTV9ERVZCVUYsIE1fV0FJVE9LKTsKKwlzYy0+c2NfY3RybF9tc2cgPSBtYWxsb2Mo
c2MtPnNjX2N0cmxfbGVuLCBNX0RFVkJVRiwgTV9XQUlUT0spOworCisJc2MtPnNjX2luZm8ucmVn
c3RhdGUgPSBNQklNX1JFR1NUQVRFX1VOS05PV047CisJc2MtPnNjX2luZm8ucGluX2F0dGVtcHRz
X2xlZnQgPSBVTUJfVkFMVUVfVU5LTk9XTjsKKwlzYy0+c2NfaW5mby5yc3NpID0gVU1CX1ZBTFVF
X1VOS05PV047CisJc2MtPnNjX2luZm8uYmVyID0gVU1CX1ZBTFVFX1VOS05PV047CisKKwkvKiBk
ZWZlciBhdHRhY2hpbmcgdGhlIGludGVyZmFjZSAqLworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgp
OworCXVtYl9hZGRfdGFzayhzYywgdW1iX2F0dGFjaF90YXNrLAorCQkJJnNjLT5zY19wcm9jX2F0
dGFjaF90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2NfcHJvY19hdHRhY2hfdGFza1sxXS5oZHIsIDAp
OworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisKKwlyZXR1cm4gKDApOworCitmYWlsOgor
CXVtYl9kZXRhY2goc2MtPnNjX2Rldik7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfYXR0YWNoX3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVj
dCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3QgdW1iX3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9z
b2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKworCW10eF91bmxvY2so
JnNjLT5zY19tdXRleCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBpbnRlcmZhY2UgKi8KKyNpZm5k
ZWYgSUZUX01CSU0KKyMgZGVmaW5lIElGVF9NQklNIDB4ZmEKKyNlbmRpZgorCXNjLT5zY19pZiA9
IGlmcCA9IGlmX2FsbG9jKElGVF9NQklNKTsKKwlpZiAoaWZwID09IE5VTEwpIHsKKwkJZGV2aWNl
X3ByaW50ZihzYy0+c2NfZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGEgbmV0d29yayBpbnRlcmZh
Y2VcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCWlmX2luaXRuYW1lKGlmcCwgInVtYiIsIGRldmlj
ZV9nZXRfdW5pdChzYy0+c2NfZGV2KSk7CisKKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZwLT5p
Zl9mbGFncyA9IElGRl9TSU1QTEVYIHwgSUZGX01VTFRJQ0FTVCB8IElGRl9QT0lOVE9QT0lOVDsK
KwlpZnAtPmlmX2lvY3RsID0gdW1iX2lvY3RsOworCWlmcC0+aWZfaW5wdXQgPSB1bWJfaW5wdXQ7
CisJaWZwLT5pZl9vdXRwdXQgPSB1bWJfb3V0cHV0OworCWlmcC0+aWZfc3RhcnQgPSB1bWJfc3Rh
cnQ7CisJaWZwLT5pZl9pbml0ID0gdW1iX2luaXQ7CisKKyNpZiAwCisJaWZwLT5pZl93YXRjaGRv
ZyA9IHVtYl93YXRjaGRvZzsKKyNlbmRpZgorCWlmcC0+aWZfbGlua19zdGF0ZSA9IExJTktfU1RB
VEVfRE9XTjsKKwlpZm1lZGlhX2luaXQoJnNjLT5zY19pbSwgMCwgdW1iX21lZGlhY2hhbmdlLCB1
bWJfbWVkaWFzdGF0dXMpOworCWlmbWVkaWFfYWRkKCZzYy0+c2NfaW0sIElGTV9OT05FIHwgSUZN
X0FVVE8sIDAsIE5VTEwpOworCisJaWZwLT5pZl9hZGRybGVuID0gMDsKKwlpZnAtPmlmX2hkcmxl
biA9IHNpemVvZiAoc3RydWN0IG5jbV9oZWFkZXIxNikgKworCSAgICBzaXplb2YgKHN0cnVjdCBu
Y21fcG9pbnRlcjE2KTsKKwkvKiBYWFggaGFyZC1jb2RlZCBhdG0gKi8KKwlpZnAtPmlmX210dSA9
IE1JTigyMDQ4LCBzYy0+c2NfbWF4cGt0bGVuKTsKKwlJRlFfU0VUX01BWExFTigmaWZwLT5pZl9z
bmQsIGlmcW1heGxlbik7CisJaWZwLT5pZl9zbmQuaWZxX2Rydl9tYXhsZW4gPSBpZnFtYXhsZW47
CisJSUZRX1NFVF9SRUFEWSgmaWZwLT5pZl9zbmQpOworCisJLyogYXR0YWNoIHRoZSBpbnRlcmZh
Y2UgKi8KKwlpZl9hdHRhY2goaWZwKTsKKwlicGZhdHRhY2goaWZwLCBETFRfUkFXLCAwKTsKKwor
CXNjLT5zY19hdHRhY2hlZCA9IDE7CisKKwl1bWJfaW5pdChzYyk7CitmYWlsOgorCW10eF9sb2Nr
KCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgaW50Cit1bWJfZGV0YWNoKGRldmljZV90IGRl
dikKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlz
dHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJdXNiX3Byb2NfZHJhaW4oJnNjLT5z
Y190YXNrcXVldWUpOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJaWYgKGlmcCAhPSBO
VUxMICYmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCXVtYl9kb3du
KHNjLCAxKTsKKwl1bWJfY2xvc2Uoc2MpOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisK
Kwl1c2JkX3RyYW5zZmVyX3Vuc2V0dXAoc2MtPnNjX3hmZXIsIFVNQl9OX1RSQU5TRkVSKTsKKwor
CWZyZWUoc2MtPnNjX3R4X2J1ZiwgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3J4X2J1ZiwgTV9E
RVZCVUYpOworCisJdXNiX2NhbGxvdXRfZHJhaW4oJnNjLT5zY19zdGF0ZWNoZ190aW1lcik7CisK
Kwl1c2JfcHJvY19mcmVlKCZzYy0+c2NfdGFza3F1ZXVlKTsKKworCW10eF9kZXN0cm95KCZzYy0+
c2NfbXV0ZXgpOworCisJZnJlZShzYy0+c2NfY3RybF9tc2csIE1fREVWQlVGKTsKKwlmcmVlKHNj
LT5zY19yZXNwX2J1ZiwgTV9ERVZCVUYpOworCisJaWYgKGlmcCAhPSBOVUxMICYmIGlmcC0+aWZf
c29mdGMpIHsKKwkJaWZtZWRpYV9yZW1vdmVhbGwoJnNjLT5zY19pbSk7CisJfQorCWlmIChzYy0+
c2NfYXR0YWNoZWQpIHsKKwkJYnBmZGV0YWNoKGlmcCk7CisJCWlmX2RldGFjaChpZnApOworCQlp
Zl9mcmVlKGlmcCk7CisJCXNjLT5zY19pZiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3Qg
dXNiX2NvbmZpZyAqIGNvbmZpZykKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisJc3Ry
dWN0IG5jbV9udGJfcGFyYW1ldGVycyBucDsKKwl1c2JfZXJyb3JfdCBlcnJvcjsKKworCS8qIFF1
ZXJ5IE5UQiB0cmFuZmVycyBzaXplcyAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRfUkVBRF9D
TEFTU19JTlRFUkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0gTkNNX0dFVF9OVEJfUEFSQU1FVEVSUzsK
KwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9p
ZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgc2l6ZW9mIChucCkpOworCW10eF9sb2NrKCZz
Yy0+c2NfbXV0ZXgpOworCWVycm9yID0gdXNiZF9kb19yZXF1ZXN0KHNjLT5zY191ZGV2LCAmc2Mt
PnNjX211dGV4LCAmcmVxLCAmbnApOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJaWYg
KGVycm9yID09IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04gJiYKKwkgICAgVUdFVFcobnAud0xl
bmd0aCkgPT0gc2l6ZW9mIChucCkpIHsKKwkJY29uZmlnW1VNQl9CVUxLX1JYXS5idWZzaXplID0g
VUdFVERXKG5wLmR3TnRiSW5NYXhTaXplKTsKKwkJY29uZmlnW1VNQl9CVUxLX1RYXS5idWZzaXpl
ID0gVUdFVERXKG5wLmR3TnRiT3V0TWF4U2l6ZSk7CisJfQorCXNjLT5zY19yeF9idWZzeiA9IGNv
bmZpZ1tVTUJfQlVMS19SWF0uYnVmc2l6ZTsKKwlzYy0+c2NfdHhfYnVmc3ogPSBjb25maWdbVU1C
X0JVTEtfVFhdLmJ1ZnNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9oYW5kbGVfcmVxdWVzdChk
ZXZpY2VfdCBkZXYsCisgICAgY29uc3Qgdm9pZCAqcHJlcSwgdm9pZCAqKnBwdHIsIHVpbnQxNl90
ICpwbGVuLAorICAgIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCAqcHN0YXRlKQoreworCS8qIEZJ
WE1FIHJlYWxseSBpbXBsZW1lbnQgKi8KKworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMg
aW50Cit1bWJfc3VzcGVuZChkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3ByaW50ZihkZXYsICJT
dXNwZW5kaW5nXG4iKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit1bWJfcmVzdW1l
KGRldmljZV90IGRldikKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlJlc3VtaW5nXG4iKTsKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVhY3RpdmF0ZShkZXZpY2VfdCBkZXYp
Cit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3Ry
dWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChpZnAgIT0gTlVMTCkgeworCQlp
Zl9kZWFkKGlmcCk7CisJfQorCXNjLT5zY19keWluZyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyB2b2lkCit1bWJfY2xvc2VfYnVsa3BpcGVzKHN0cnVjdCB1bWJfc29mdGMgKnNjKQorewor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZnAtPmlmX2Rydl9mbGFncyAm
PSB+KElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElWRSk7CisKKwl1bWJfcnhmbHVzaChz
Yyk7CisJdW1iX3R4Zmx1c2goc2MpOworCisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVy
W1VNQl9CVUxLX1JYXSk7CisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyW1VNQl9CVUxL
X1RYXSk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9pb2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9s
b25nIGNtZCwgY2FkZHJfdCBkYXRhKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5p
Zl9zb2Z0YzsKKwlzdHJ1Y3QgaW5faWZhZGRyICppYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopZGF0
YTsKKwlzdHJ1Y3QgaWZyZXEgKmlmciA9IChzdHJ1Y3QgaWZyZXEgKilkYXRhOworCWludCBlcnJv
ciA9IDA7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgbXA7CisKKwlpZiAoc2MtPnNjX2R5aW5nKQor
CQlyZXR1cm4gRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZBRERSOgorCQlz
d2l0Y2ggKGlhLT5pYV9pZmEuaWZhX2FkZHItPnNhX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6
CisJCQlicmVhazsKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJYnJlYWs7Cisj
ZW5kaWYgLyogSU5FVDYgKi8KKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUFGTk9TVVBQT1JUOwor
CQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJCW10eF9sb2Nr
KCZzYy0+c2NfbXV0ZXgpOworCQl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJ
CSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCQkmc2MtPnNjX3Byb2Nfc3RhdGVf
dGFza1sxXS5oZHIsIDEpOworCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQlicmVhazsK
KwljYXNlIFNJT0NHVU1CSU5GTzoKKwkJZXJyb3IgPSBjb3B5b3V0KCZzYy0+c2NfaW5mbywgaWZy
LT5pZnJfaWZydS5pZnJ1X2RhdGEsCisJCSAgICBzaXplb2YgKHNjLT5zY19pbmZvKSk7CisJCWJy
ZWFrOworCWNhc2UgU0lPQ1NVTUJQQVJBTToKKwkJZXJyb3IgPSBwcml2X2NoZWNrKGN1cnRocmVh
ZCwgUFJJVl9ORVRfU0VUSUZQSFlTKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJaWYg
KChlcnJvciA9IGNvcHlpbihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJm1wLCBzaXplb2YgKG1w
KSkpICE9IDApCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gdW1iX3NldHBpbihzYywgbXAu
b3AsIG1wLmlzX3B1aywgbXAucGluLCBtcC5waW5sZW4sCisJCSAgICBtcC5uZXdwaW4sIG1wLm5l
d3BpbmxlbikpICE9IDApCisJCQlicmVhazsKKworCQlpZiAobXAuYXBubGVuIDwgMCB8fCBtcC5h
cG5sZW4gPiBzaXplb2YgKHNjLT5zY19pbmZvLmFwbikpIHsKKwkJCWVycm9yID0gRUlOVkFMOwor
CQkJYnJlYWs7CisJCX0KKwkJc2MtPnNjX3JvYW1pbmcgPSBtcC5yb2FtaW5nID8gMSA6IDA7CisJ
CW1lbXNldChzYy0+c2NfaW5mby5hcG4sIDAsIHNpemVvZiAoc2MtPnNjX2luZm8uYXBuKSk7CisJ
CW1lbWNweShzYy0+c2NfaW5mby5hcG4sIG1wLmFwbiwgbXAuYXBubGVuKTsKKwkJc2MtPnNjX2lu
Zm8uYXBubGVuID0gbXAuYXBubGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8udXNlcm5hbWUsIDAs
IHNpemVvZiAoc2MtPnNjX2luZm8udXNlcm5hbWUpKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZvLnVz
ZXJuYW1lLCBtcC51c2VybmFtZSwgbXAudXNlcm5hbWVsZW4pOworCQlzYy0+c2NfaW5mby51c2Vy
bmFtZWxlbiA9IG1wLnVzZXJuYW1lbGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8ucGFzc3dvcmQs
IDAsIHNpemVvZiAoc2MtPnNjX2luZm8ucGFzc3dvcmQpKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZv
LnBhc3N3b3JkLCBtcC5wYXNzd29yZCwgbXAucGFzc3dvcmRsZW4pOworCQlzYy0+c2NfaW5mby5w
YXNzd29yZGxlbiA9IG1wLnBhc3N3b3JkbGVuOworCQlzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFz
c2VzID0gbXAucHJlZmVycmVkY2xhc3NlczsKKwkJdW1iX3NldGRhdGFjbGFzcyhzYyk7CisJCWJy
ZWFrOworCWNhc2UgU0lPQ0dVTUJQQVJBTToKKwkJbWVtc2V0KCZtcCwgMCwgc2l6ZW9mIChtcCkp
OworCQltZW1jcHkobXAuYXBuLCBzYy0+c2NfaW5mby5hcG4sIHNjLT5zY19pbmZvLmFwbmxlbik7
CisJCW1wLmFwbmxlbiA9IHNjLT5zY19pbmZvLmFwbmxlbjsKKwkJbXAucm9hbWluZyA9IHNjLT5z
Y19yb2FtaW5nOworCQltcC5wcmVmZXJyZWRjbGFzc2VzID0gc2MtPnNjX2luZm8ucHJlZmVycmVk
Y2xhc3NlczsKKwkJZXJyb3IgPSBjb3B5b3V0KCZtcCwgaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEs
IHNpemVvZiAobXApKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBEb2VzIHRo
aXMgaW5jbHVkZSB0aGUgTkNNIGhlYWRlcnMgYW5kIHRhaWw/ICovCisJCWlmIChpZnItPmlmcl9t
dHUgPiBpZnAtPmlmX210dSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQor
CQlpZnAtPmlmX210dSA9IGlmci0+aWZyX210dTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DQUlGQURE
UjoKKwljYXNlIFNJT0NTSUZEU1RBRERSOgorCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lP
Q0RFTE1VTFRJOgorCQlicmVhazsKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyb3IgPSBpZm1l
ZGlhX2lvY3RsKGlmcCwgaWZyLCAmc2MtPnNjX2ltLCBjbWQpOworCQlicmVhazsKKwlkZWZhdWx0
OgorCQllcnJvciA9IEVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZXJyb3IpOworfQor
CitzdGF0aWMgdm9pZAordW1iX2luaXQodm9pZCAqYXJnKQoreworCXN0cnVjdCB1bWJfc29mdGMg
KnNjID0gYXJnOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2FkZF90YXNrKHNj
LCB1bWJfc3RhcnRfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGFydF90YXNrWzBdLmhkciwKKwkJ
CSZzYy0+c2NfcHJvY19zdGFydF90YXNrWzFdLmhkciwgMCk7CisJbXR4X3VubG9jaygmc2MtPnNj
X211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9pbnB1dChzdHJ1Y3QgaWZuZXQgKmlmcCwg
c3RydWN0IG1idWYgKm0pCit7CisJc3RydWN0IG1idWYgKm1uOworCisJd2hpbGUgKG0pIHsKKwkJ
bW4gPSBtLT5tX25leHRwa3Q7CisJCW0tPm1fbmV4dHBrdCA9IE5VTEw7CisKKwkJQlBGX01UQVAo
aWZwLCBtKTsKKworCQluZXRpc3JfZGlzcGF0Y2goTkVUSVNSX0lQLCBtKTsKKwkJbSA9IG1uOwor
CX0KK30KKworc3RhdGljIGludAordW1iX291dHB1dChzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0
IG1idWYgKm0sIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHN0LAorICAgIHN0cnVjdCByb3V0ZSAq
cnRwKQoreworCWludCBlcnJvcjsKKworCURQUklOVEZOKDEwLCAiJXM6IGVudGVyXG4iLCBfX2Z1
bmNfXyk7CisKKwlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNl
IEFGX0lORVQ2OgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZgorCWNhc2UgQUZfSU5FVDoK
KwkJYnJlYWs7CisKKwkJLyogc2lsZW50bHkgZHJvcCBkaGNsaWVudCBwYWNrZXRzICovCisJY2Fz
ZSBBRl9VTlNQRUM6CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoMCk7CisKKwkJLyogZHJvcCBv
dGhlciBwYWNrZXQgdHlwZXMgKi8KKwlkZWZhdWx0OgorCQltX2ZyZWVtKG0pOworCQlyZXR1cm4g
KEVBRk5PU1VQUE9SVCk7CisJfQorCisJLyoKKwkgKiBRdWV1ZSBtZXNzYWdlIG9uIGludGVyZmFj
ZSwgYW5kIHN0YXJ0IG91dHB1dCBpZiBpbnRlcmZhY2UKKwkgKiBub3QgeWV0IGFjdGl2ZS4KKwkg
Ki8KKwllcnJvciA9IChpZnAtPmlmX3RyYW5zbWl0KShpZnAsIG0pOworCWlmIChlcnJvcikgewor
CQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9PRVJST1JTLCAxKTsKKwkJcmV0dXJuIChF
Tk9CVUZTKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXJ0
KHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5pZl9z
b2Z0YzsKKworCWlmIChzYy0+c2NfZHlpbmcgfHwgIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9E
UlZfUlVOTklORykpCisJCXJldHVybjsKKworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXVz
YmRfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKKwltdHhfdW5sb2Nr
KCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXJ0X3Rhc2soc3RydWN0
IHVzYl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3Qg
dW1iX3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJRFBSSU5URigiJXMoKVxuIiwgX19mdW5j
X18pOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZnAtPmlm
X2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwkvKiBzdGFydCBpbnRlcnJ1cHQgdHJh
bnNmZXIgKi8KKwl1c2JkX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVyW1VNQl9JTlRSX1JYXSk7
CisKKwl1bWJfb3BlbihzYyk7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZAordW1iX3dhdGNoZG9n
KHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5pZl9z
b2Z0YzsKKworCWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVybjsKKworCWlmX2luY19jb3VudGVy
KGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCWRldmljZV9wcmludGYoc2MtPnNjX2Rldiwg
IndhdGNoZG9nIHRpbWVvdXRcbiIpOworCXVzYmRfdHJhbnNmZXJfZHJhaW4oc2MtPnNjX3hmZXJb
VU1CX0JVTEtfVFhdKTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK3VtYl9z
dGF0ZWNoZ190aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGFy
ZzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJbXR4X2Fzc2VydCgmc2Mt
PnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUgIT0gTUJJ
TV9SRUdTVEFURV9ST0FNSU5HIHx8IHNjLT5zY19yb2FtaW5nKQorCQlpZiAoaWZwLT5pZl9mbGFn
cyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfREVCVUcsICIlczogc3RhdGUgY2hhbmdlIHRpbWVv
dXRcbiIsCisJCQkJCURFVk5BTShzYykpOworCisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3RhdGVf
dGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2NfcHJv
Y19zdGF0ZV90YXNrWzFdLmhkciwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9tZWRpYWNoYW5n
ZShzdHJ1Y3QgaWZuZXQgKiBpZnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfbWVkaWFzdGF0dXMoc3RydWN0IGlmbmV0ICogaWZwLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqIGlt
cikKK3sKKwlzd2l0Y2ggKGlmcC0+aWZfbGlua19zdGF0ZSkgeworCWNhc2UgTElOS19TVEFURV9V
UDoKKwkJaW1yLT5pZm1fc3RhdHVzID0gSUZNX0FWQUxJRCB8IElGTV9BQ1RJVkU7CisJCWJyZWFr
OworCWNhc2UgTElOS19TVEFURV9ET1dOOgorCQlpbXItPmlmbV9zdGF0dXMgPSBJRk1fQVZBTElE
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbXItPmlmbV9zdGF0dXMgPSAwOworCQlicmVhazsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfYWRkX3Rhc2soc3RydWN0IHVtYl9zb2Z0YyAqc2Ms
IHVzYl9wcm9jX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisJCXN0cnVjdCB1c2JfcHJvY19tc2cgKnQw
LCBzdHJ1Y3QgdXNiX3Byb2NfbXNnICp0MSwgaW50IHN5bmMpCit7CisJc3RydWN0IHVtYl90YXNr
ICogdGFzazsKKworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJaWYg
KHVzYl9wcm9jX2lzX2dvbmUoJnNjLT5zY190YXNrcXVldWUpKSB7CisJCXJldHVybjsKKwl9CisK
Kwl0YXNrID0gdXNiX3Byb2NfbXNpZ25hbCgmc2MtPnNjX3Rhc2txdWV1ZSwgdDAsIHQxKTsKKwor
CXRhc2stPmhkci5wbV9jYWxsYmFjayA9IGNhbGxiYWNrOworCXRhc2stPnNjID0gc2M7CisKKwlp
ZiAoc3luYykgeworCQl1c2JfcHJvY19td2FpdCgmc2MtPnNjX3Rhc2txdWV1ZSwgdDAsIHQxKTsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfbmV3c3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqc2Ms
IGVudW0gdW1iX3N0YXRlIG5ld3N0YXRlLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlmbmV0ICpp
ZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChuZXdzdGF0ZSA9PSBzYy0+c2Nfc3RhdGUpCisJCXJl
dHVybjsKKwlpZiAoKChmbGFncyAmIFVNQl9OU19ET05UX0RST1ApICYmIG5ld3N0YXRlIDwgc2Mt
PnNjX3N0YXRlKSB8fAorCSAgICAoKGZsYWdzICYgVU1CX05TX0RPTlRfUkFJU0UpICYmIG5ld3N0
YXRlID4gc2MtPnNjX3N0YXRlKSkKKwkJcmV0dXJuOworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZG
X0RFQlVHKQorCQlsb2coTE9HX0RFQlVHLCAiJXM6IHN0YXRlIGdvaW5nICVzIGZyb20gJyVzJyB0
byAnJXMnXG4iLAorCQkgICAgREVWTkFNKHNjKSwgbmV3c3RhdGUgPiBzYy0+c2Nfc3RhdGUgPyAi
dXAiIDogImRvd24iLAorCQkgICAgdW1iX2lzdGF0ZShzYy0+c2Nfc3RhdGUpLCB1bWJfaXN0YXRl
KG5ld3N0YXRlKSk7CisJc2MtPnNjX3N0YXRlID0gbmV3c3RhdGU7CisJbXR4X2xvY2soJnNjLT5z
Y19tdXRleCk7CisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3RhdGVfdGFzaywKKwkJCSZzYy0+c2Nf
cHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhk
ciwgMCk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9zdGF0ZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgdW1iX3Rh
c2sgKnRhc2sgPSAoc3RydWN0IHVtYl90YXNrICopbXNnOworCXN0cnVjdCB1bWJfc29mdGMgKnNj
ID0gdGFzay0+c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3Qg
aWZyZXEgaWZyOworCWludAkgc3RhdGU7CisKKwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7
CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUgPT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HICYm
ICFzYy0+c2Nfcm9hbWluZykgeworCQkvKgorCQkgKiBRdWVyeSB0aGUgcmVnaXN0cmF0aW9uIHN0
YXRlIHVudGlsIHdlJ3JlIHdpdGggdGhlIGhvbWUKKwkJICogbmV0d29yayBhZ2Fpbi4KKwkJICov
CisJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1FSWSwg
TlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9VUCkK
KwkJdW1iX3VwKHNjKTsKKwllbHNlCisJCXVtYl9kb3duKHNjLCAwKTsKKworCXN0YXRlID0gKHNj
LT5zY19zdGF0ZSA9PSBVTUJfU19VUCkgPyBMSU5LX1NUQVRFX1VQIDogTElOS19TVEFURV9ET1dO
OworCWlmIChpZnAtPmlmX2xpbmtfc3RhdGUgIT0gc3RhdGUpIHsKKwkJaWYgKGlmcC0+aWZfZmxh
Z3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9HX0RFQlVHLCAiJXM6IGxpbmsgc3RhdGUgY2hhbmdl
ZCBmcm9tICVzIHRvICVzXG4iLAorCQkJICAgIERFVk5BTShzYyksCisJCQkgICAgKGlmcC0+aWZf
bGlua19zdGF0ZSA9PSBMSU5LX1NUQVRFX1VQKQorCQkJICAgID8gInVwIiA6ICJkb3duIiwKKwkJ
CSAgICAoc3RhdGUgPT0gTElOS19TVEFURV9VUCkgPyAidXAiIDogImRvd24iKTsKKwkJaWZwLT5p
Zl9saW5rX3N0YXRlID0gc3RhdGU7CisJCWlmIChzdGF0ZSAhPSBMSU5LX1NUQVRFX1VQKSB7CisJ
CQkvKgorCQkJICogUHVyZ2UgYW55IGV4aXN0aW5nIGFkZHJlc3NlcworCQkJICovCisJCQltZW1z
ZXQoc2MtPnNjX2luZm8uaXB2NGRucywgMCwKKwkJCSAgICBzaXplb2YgKHNjLT5zY19pbmZvLmlw
djRkbnMpKTsKKwkJCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJCQlpZiAoaW5fY29udHJv
bChOVUxMLCBTSU9DR0lGQUREUiwgKGNhZGRyX3QpJmlmciwgaWZwLCBjdXJ0aHJlYWQpID09IDAg
JiYKKwkJCSAgICBzYXRvc2luKCZpZnIuaWZyX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIgIT0KKwkJ
CSAgICBJTkFERFJfQU5ZKSB7CisJCQkJaW5fY29udHJvbChOVUxMLCBTSU9DRElGQUREUiwgKGNh
ZGRyX3QpJmlmciwgaWZwLCBjdXJ0aHJlYWQpOworCQkJfQorCQkJbXR4X2xvY2soJnNjLT5zY19t
dXRleCk7CisJCX0KKwkJaWZfbGlua19zdGF0ZV9jaGFuZ2UoaWZwLCBzdGF0ZSk7CisJfQorfQor
CitzdGF0aWMgdm9pZAordW1iX3VwKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBp
Zm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlzd2l0Y2ggKHNjLT5zY19zdGF0ZSkgeworCWNh
c2UgVU1CX1NfRE9XTjoKKwkJRFBSSU5URigiaW5pdDogb3BlbmluZyAuLi5cbiIpOworCQl1bWJf
b3BlbihzYyk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfT1BFTjoKKwkJaWYgKHNjLT5zY19mbGFn
cyAmIFVNQkZMR19GQ0NfQVVUSF9SRVFVSVJFRCkgeworCQkJaWYgKHNjLT5zY19jaWQgPT0gLTEp
IHsKKwkJCQlEUFJJTlRGKCJpbml0OiBhbGxvY2F0aW5nIENJRCAuLi5cbiIpOworCQkJCXVtYl9h
bGxvY2F0ZV9jaWQoc2MpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJdW1iX25ld3N0YXRl
KHNjLCBVTUJfU19DSUQsIFVNQl9OU19ET05UX0RST1ApOworCQl9IGVsc2UgeworCQkJRFBSSU5U
RigiaW5pdDogdHVybmluZyByYWRpbyBvbiAuLi5cbiIpOworCQkJdW1iX3JhZGlvKHNjLCAxKTsK
KwkJCWJyZWFrOworCQl9CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1NfQ0lEOgorCQlE
UFJJTlRGKCJpbml0OiBzZW5kaW5nIEZDQyBhdXRoIC4uLlxuIik7CisJCXVtYl9zZW5kX2ZjY19h
dXRoKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19SQURJTzoKKwkJRFBSSU5URigiaW5pdDog
Y2hlY2tpbmcgU0lNIHN0YXRlIC4uLlxuIik7CisJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1NVQlND
UklCRVJfUkVBRFlfU1RBVFVTLCBNQklNX0NNRE9QX1FSWSwKKwkJICAgIE5VTEwsIDApOworCQli
cmVhazsKKwljYXNlIFVNQl9TX1NJTVJFQURZOgorCQlEUFJJTlRGKCJpbml0OiBhdHRhY2hpbmcg
Li4uXG4iKTsKKwkJdW1iX3BhY2tldF9zZXJ2aWNlKHNjLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBV
TUJfU19BVFRBQ0hFRDoKKwkJc2MtPnNjX3R4X3NlcSA9IDA7CisJCURQUklOVEYoImluaXQ6IGNv
bm5lY3RpbmcgLi4uXG4iKTsKKwkJdW1iX2Nvbm5lY3Qoc2MpOworCQlicmVhazsKKwljYXNlIFVN
Ql9TX0NPTk5FQ1RFRDoKKwkJRFBSSU5URigiaW5pdDogZ2V0dGluZyBJUCBjb25maWcgLi4uXG4i
KTsKKwkJdW1iX3FyeV9pcGNvbmZpZyhzYyk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfVVA6CisJ
CURQUklOVEYoImluaXQ6IHJlYWNoZWQgc3RhdGUgVVBcbiIpOworCQlpZiAoIShpZnAtPmlmX2Zs
YWdzICYgSUZGX0RSVl9SVU5OSU5HKSkgeworCQkJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RS
Vl9SVU5OSU5HOworCQkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElWRTsKKwkJ
CXVtYl9yeChzYyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChzYy0+c2Nfc3RhdGUgPCBVTUJf
U19VUCkKKwkJdXNiX2NhbGxvdXRfcmVzZXQoJnNjLT5zY19zdGF0ZWNoZ190aW1lciwKKwkJICAg
IFVNQl9TVEFURV9DSEFOR0VfVElNRU9VVCAqIGh6LCB1bWJfc3RhdGVjaGdfdGltZW91dCwgc2Mp
OworCWVsc2UgeworCQl1c2JfY2FsbG91dF9zdG9wKCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIpOwor
CX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZG93bihzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgaW50IGZvcmNlKQoreworCXVtYl9jbG9zZV9idWxrcGlwZXMoc2MpOworCisJc3dpdGNo
IChzYy0+c2Nfc3RhdGUpIHsKKwljYXNlIFVNQl9TX1VQOgorCWNhc2UgVU1CX1NfQ09OTkVDVEVE
OgorCQlEUFJJTlRGKCJzdG9wOiBkaXNjb25uZWN0aW5nIC4uLlxuIik7CisJCXVtYl9kaXNjb25u
ZWN0KHNjKTsKKwkJaWYgKCFmb3JjZSkKKwkJCWJyZWFrOworCQkvKkZBTExUSFJPVUdIKi8KKwlj
YXNlIFVNQl9TX0FUVEFDSEVEOgorCQlEUFJJTlRGKCJzdG9wOiBkZXRhY2hpbmcgLi4uXG4iKTsK
KwkJdW1iX3BhY2tldF9zZXJ2aWNlKHNjLCAwKTsKKwkJaWYgKCFmb3JjZSkKKwkJCWJyZWFrOwor
CQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIFVNQl9TX1NJTVJFQURZOgorCWNhc2UgVU1CX1NfUkFE
SU86CisJCURQUklOVEYoInN0b3A6IHR1cm5pbmcgcmFkaW8gb2ZmIC4uLlxuIik7CisJCXVtYl9y
YWRpbyhzYywgMCk7CisJCWlmICghZm9yY2UpCisJCQlicmVhazsKKwkJLypGQUxMVEhST1VHSCov
CisJY2FzZSBVTUJfU19DSUQ6CisJY2FzZSBVTUJfU19PUEVOOgorCWNhc2UgVU1CX1NfRE9XTjoK
KwkJLyogRG8gbm90IGNsb3NlIHRoZSBkZXZpY2UgKi8KKwkJRFBSSU5URigic3RvcDogcmVhY2hl
ZCBzdGF0ZSBET1dOXG4iKTsKKwkJYnJlYWs7CisJfQorCWlmIChmb3JjZSkKKwkJc2MtPnNjX3N0
YXRlID0gVU1CX1NfT1BFTjsKKworCWlmIChzYy0+c2Nfc3RhdGUgPiBVTUJfU19PUEVOKQorCQl1
c2JfY2FsbG91dF9yZXNldCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyLAorCQkgICAgVU1CX1NUQVRF
X0NIQU5HRV9USU1FT1VUICogaHosIHVtYl9zdGF0ZWNoZ190aW1lb3V0LCBzYyk7CisJZWxzZQor
CQl1c2JfY2FsbG91dF9zdG9wKCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIpOworfQorCitzdGF0aWMg
dm9pZAordW1iX2dldF9yZXNwb25zZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKK3sK
KwlzdHJ1Y3QgdW1iX3Rhc2sgKnRhc2sgPSAoc3RydWN0IHVtYl90YXNrICopbXNnOworCXN0cnVj
dCB1bWJfc29mdGMgKnNjID0gdGFzay0+c2M7CisJaW50CSBsZW47CisKKwlEUFJJTlRGKCIlcygp
XG4iLCBfX2Z1bmNfXyk7CisJLyoKKwkgKiBGdW5jdGlvbiBpcyByZXF1aXJlZCB0byBzZW5kIG9u
IFJFU1BPTlNFX0FWQUlMQUJMRSBub3RpZmljYXRpb24gZm9yCisJICogZWFjaCBlbmNhcHN1bGF0
ZWQgcmVzcG9uc2UgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGhvc3QuCisJICogQnV0
IG9mIGNvdXJzZSwgd2UgY2FuIHJlY2VpdmUgbXVsdGlwbGUgbm90aWZpY2F0aW9ucyBiZWZvcmUg
dGhlCisJICogcmVzcG9uc2UgdGFzayBpcyBydW4uCisJICovCisJd2hpbGUgKHNjLT5zY19ucmVz
cCA+IDApIHsKKwkJLS1zYy0+c2NfbnJlc3A7CisJCWxlbiA9IHNjLT5zY19jdHJsX2xlbjsKKwkJ
aWYgKHVtYl9nZXRfZW5jYXBfcmVzcG9uc2Uoc2MsIHNjLT5zY19yZXNwX2J1ZiwgJmxlbikpCisJ
CQl1bWJfZGVjb2RlX3Jlc3BvbnNlKHNjLCBzYy0+c2NfcmVzcF9idWYsIGxlbik7CisJfQorfQor
CitzdGF0aWMgdm9pZAordW1iX2RlY29kZV9yZXNwb25zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywg
dm9pZCAqcmVzcG9uc2UsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fbXNnaGRyICpoZHIgPSBy
ZXNwb25zZTsKKwlzdHJ1Y3QgbWJpbV9mcmFnbWVudGVkX21zZ19oZHIgKmZyYWdoZHI7CisJdWlu
dDMyX3QgdHlwZTsKKworCURQUklOVEZOKDMsICJnb3QgcmVzcG9uc2U6IGxlbiAlZFxuIiwgbGVu
KTsKKwlERFVNUE4oNCwgcmVzcG9uc2UsIGxlbik7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqaGRy
KSB8fCBsZTMydG9oKGhkci0+bGVuKSAhPSBsZW4pIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIHBy
b2JhYmx5IGNhbmNlbCBhIHRyYW5zYWN0aW9uLCBidXQgc2luY2UgdGhlCisJCSAqIG1lc3NhZ2Ug
aXMgdG9vIHNob3J0LCB3ZSBjYW5ub3QgZGVjb2RlIHRoZSB0cmFuc2FjdGlvbgorCQkgKiBpZCAo
dGlkKSBhbmQgaGVuY2UgZG9uJ3Qga25vdywgd2hvbSB0byBjYW5jZWwuIE11c3Qgd2FpdAorCQkg
KiBmb3IgdGhlIHRpbWVvdXQuCisJCSAqLworCQlEUFJJTlRGKCJyZWNlaXZlZCBzaG9ydCByZXNw
b25zZSAobGVuICVkKVxuIiwKKwkJICAgIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAq
IFhYWCBGSVhNRTogaWYgbWVzc2FnZSBpcyBmcmFnbWVudGVkLCBzdG9yZSBpdCB1bnRpbCBsYXN0
IGZyYWcKKwkgKglpcyByZWNlaXZlZCBhbmQgdGhlbiByZS1hc3NlbWJsZSBhbGwgZnJhZ21lbnRz
LgorCSAqLworCXR5cGUgPSBsZTMydG9oKGhkci0+dHlwZSk7CisJc3dpdGNoICh0eXBlKSB7CisJ
Y2FzZSBNQklNX0lORElDQVRFX1NUQVRVU19NU0c6CisJY2FzZSBNQklNX0NPTU1BTkRfRE9ORToK
KwkJZnJhZ2hkciA9IHJlc3BvbnNlOworCQlpZiAobGUzMnRvaChmcmFnaGRyLT5mcmFnLm5mcmFn
KSAhPSAxKSB7CisJCQlEUFJJTlRGKCJkaXNjYXJkaW5nIGZyYWdtZW50ZWQgbWVzc2FnZXNcbiIp
OworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwor
CURQUklOVEYoIjwtIHJjdiAlcyAodGlkICV1KVxuIiwgdW1iX3JlcXVlc3Qyc3RyKHR5cGUpLAor
CSAgICBsZTMydG9oKGhkci0+dGlkKSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQklNX0ZV
TkNUSU9OX0VSUk9SX01TRzoKKwljYXNlIE1CSU1fSE9TVF9FUlJPUl9NU0c6CisJeworCQlzdHJ1
Y3QgbWJpbV9mMmhfaG9zdGVyciAqZTsKKwkJaW50CSBlcnI7CisKKwkJaWYgKGxlbiA+PSBzaXpl
b2YgKCplKSkgeworCQkJZSA9IHJlc3BvbnNlOworCQkJZXJyID0gbGUzMnRvaChlLT5lcnIpOwor
CisJCQlEUFJJTlRGKCIlcyBtZXNzYWdlLCBlcnJvciAlcyAodGlkICV1KVxuIiwKKwkJCSAgICB1
bWJfcmVxdWVzdDJzdHIodHlwZSksCisJCQkgICAgdW1iX2Vycm9yMnN0cihlcnIpLCBsZTMydG9o
KGhkci0+dGlkKSk7CisJCQlpZiAoZXJyID09IE1CSU1fRVJST1JfTk9UX09QRU5FRCkKKwkJCQl1
bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0RPV04sIDApOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IE1CSU1fSU5ESUNBVEVfU1RBVFVTX01TRzoKKwkJdW1iX2hhbmRsZV9pbmRpY2F0ZV9zdGF0dXNf
bXNnKHNjLCByZXNwb25zZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX09QRU5fRE9ORToK
KwkJdW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsK
KwljYXNlIE1CSU1fQ0xPU0VfRE9ORToKKwkJdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHNjLCBy
ZXNwb25zZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NPTU1BTkRfRE9ORToKKwkJdW1i
X2NvbW1hbmRfZG9uZShzYywgcmVzcG9uc2UsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CURQUklOVEYoImRpc2NhcmQgbWVzc2FnZSAlc1xuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cih0
eXBlKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9oYW5kbGVfaW5kaWNh
dGVfc3RhdHVzX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikK
K3sKKwlzdHJ1Y3QgbWJpbV9mMmhfaW5kaWNhdGVfc3RhdHVzICptID0gZGF0YTsKKwl1aW50MzJf
dCBpbmZvbGVuOworCXVpbnQzMl90IGNpZDsKKworCWlmIChsZW4gPCBzaXplb2YgKCptKSkgewor
CQlEUFJJTlRGKCJkaXNjYXJkIHNob3J0ICVzIG1lc3NhZ2VcbiIsCisJCSAgICB1bWJfcmVxdWVz
dDJzdHIobGUzMnRvaChtLT5oZHIudHlwZSkpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWVtY21w
KG0tPmRldmlkLCB1bWJfdXVpZF9iYXNpY19jb25uZWN0LCBzaXplb2YgKG0tPmRldmlkKSkpIHsK
KwkJRFBSSU5URigiZGlzY2FyZCAlcyBtZXNzYWdlIGZvciBvdGhlciBVVUlEICclcydcbiIsCisJ
CSAgICB1bWJfcmVxdWVzdDJzdHIobGUzMnRvaChtLT5oZHIudHlwZSkpLAorCQkgICAgdW1iX3V1
aWQyc3RyKG0tPmRldmlkKSk7CisJCXJldHVybjsKKwl9CisJaW5mb2xlbiA9IGxlMzJ0b2gobS0+
aW5mb2xlbik7CisJaWYgKGxlbiA8IHNpemVvZiAoKm0pICsgaW5mb2xlbikgeworCQlEUFJJTlRG
KCJkaXNjYXJkIHRydW5jYXRlZCAlcyBtZXNzYWdlICh3YW50ICVkLCBnb3QgJWQpXG4iLAorCQkg
ICAgdW1iX3JlcXVlc3Qyc3RyKGxlMzJ0b2gobS0+aGRyLnR5cGUpKSwKKwkJICAgIChpbnQpc2l6
ZW9mICgqbSkgKyBpbmZvbGVuLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJY2lkID0gbGUzMnRv
aChtLT5jaWQpOworCURQUklOVEYoImluZGljYXRlICVzIHN0YXR1c1xuIiwgdW1iX2NpZDJzdHIo
Y2lkKSk7CisJdW1iX2RlY29kZV9jaWQoc2MsIGNpZCwgbS0+aW5mbywgaW5mb2xlbik7Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfaGFuZGxlX29wZW5kb25lX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICpz
Yywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3NlZG9u
ZSAqcmVzcCA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwl1aW50
MzJfdCBzdGF0dXM7CisKKwlzdGF0dXMgPSBsZTMydG9oKHJlc3AtPnN0YXR1cyk7CisJaWYgKHN0
YXR1cyA9PSBNQklNX1NUQVRVU19TVUNDRVNTKSB7CisJCWlmIChzYy0+c2NfbWF4c2Vzc2lvbnMg
PT0gMCkgeworCQkJdW1iX2NtZChzYywgTUJJTV9DSURfREVWSUNFX0NBUFMsIE1CSU1fQ01ET1Bf
UVJZLCBOVUxMLAorCQkJICAgIDApOworCQkJdW1iX2NtZChzYywgTUJJTV9DSURfUElOLCBNQklN
X0NNRE9QX1FSWSwgTlVMTCwgMCk7CisJCQl1bWJfY21kKHNjLCBNQklNX0NJRF9SRUdJU1RFUl9T
VEFURSwgTUJJTV9DTURPUF9RUlksCisJCQkgICAgTlVMTCwgMCk7CisJCX0KKwkJdW1iX25ld3N0
YXRlKHNjLCBVTUJfU19PUEVOLCBVTUJfTlNfRE9OVF9EUk9QKTsKKwl9IGVsc2UgaWYgKGlmcC0+
aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfRVJSLCAiJXM6IG9wZW4gZXJyb3I6ICVz
XG4iLCBERVZOQU0oc2MpLAorCQkgICAgdW1iX3N0YXR1czJzdHIoc3RhdHVzKSk7CisJcmV0dXJu
OworfQorCitzdGF0aWMgdm9pZAordW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0cnVjdCB1bWJf
c29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9vcGVu
Y2xvc2Vkb25lICpyZXNwID0gZGF0YTsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlzdGF0dXMgPSBs
ZTMydG9oKHJlc3AtPnN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBNQklNX1NUQVRVU19TVUNDRVNT
KQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0RPV04sIDApOworCWVsc2UKKwkJRFBSSU5URigi
Y2xvc2UgZXJyb3I6ICVzXG4iLAorCQkgICAgdW1iX3N0YXR1czJzdHIoc3RhdHVzKSk7CisJcmV0
dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3VtYl9nZXRpbmZvYnVmKGNoYXIgKmluLCBp
bnQgaW5sZW4sIHVpbnQzMl90IG9mZnMsIHVpbnQzMl90IHN6LAorICAgIHZvaWQgKm91dCwgc2l6
ZV90IG91dGxlbikKK3sKKwlvZmZzID0gbGUzMnRvaChvZmZzKTsKKwlzeiA9IGxlMzJ0b2goc3op
OworCWlmIChpbmxlbiA+PSBvZmZzICsgc3opIHsKKwkJbWVtc2V0KG91dCwgMCwgb3V0bGVuKTsK
KwkJbWVtY3B5KG91dCwgaW4gKyBvZmZzLCBNSU4oc3osIG91dGxlbikpOworCX0KK30KKworc3Rh
dGljIGlubGluZSBpbnQKK3VtYl9wYWRkaW5nKHZvaWQgKmRhdGEsIGludCBsZW4sIHNpemVfdCBz
eikKK3sKKwljaGFyICpwID0gZGF0YTsKKwlpbnQgbnAgPSAwOworCisJd2hpbGUgKGxlbiA8IHN6
ICYmIChsZW4gJSA0KSAhPSAwKSB7CisJCSpwKysgPSAnXDAnOworCQlsZW4rKzsKKwkJbnArKzsK
Kwl9CisJcmV0dXJuIG5wOworfQorCitzdGF0aWMgaW5saW5lIGludAordW1iX2FkZHN0cih2b2lk
ICpidWYsIHNpemVfdCBidWZzeiwgaW50ICpvZmZzLCB2b2lkICpzdHIsIGludCBzbGVuLAorICAg
IHVpbnQzMl90ICpvZmZzbWVtYmVyLCB1aW50MzJfdCAqc2l6ZW1lbWJlcikKK3sKKwlpZiAoKm9m
ZnMgKyBzbGVuID4gYnVmc3opCisJCXJldHVybiAwOworCisJKnNpemVtZW1iZXIgPSBodG9sZTMy
KCh1aW50MzJfdClzbGVuKTsKKwlpZiAoc2xlbiAmJiBzdHIpIHsKKwkJKm9mZnNtZW1iZXIgPSBo
dG9sZTMyKCh1aW50MzJfdCkqb2Zmcyk7CisJCW1lbWNweSgoY2hhciAqKWJ1ZiArICpvZmZzLCBz
dHIsIHNsZW4pOworCQkqb2ZmcyArPSBzbGVuOworCQkqb2ZmcyArPSB1bWJfcGFkZGluZyhidWYs
ICpvZmZzLCBidWZzeik7CisJfSBlbHNlCisJCSpvZmZzbWVtYmVyID0gaHRvbGUzMigwKTsKKwly
ZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9pbl9sZW4ybWFzayhzdHJ1Y3QgaW5fYWRk
ciAqbWFzaywgaW50IGxlbikKK3sKKwlpbnQgaTsKKwl1X2NoYXIgKnA7CisKKwlwID0gKHVfY2hh
ciAqKW1hc2s7CisJbWVtc2V0KG1hc2ssIDAsIHNpemVvZiAoKm1hc2spKTsKKwlmb3IgKGkgPSAw
OyBpIDwgbGVuIC8gODsgaSsrKQorCQlwW2ldID0gMHhmZjsKKwlpZiAobGVuICUgOCkKKwkJcFtp
XSA9ICgweGZmMDAgPj4gKGxlbiAlIDgpKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9k
ZWNvZGVfcmVnaXN0ZXJfc3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGlu
dCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZV9pbmZvICpycyA9
IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBz
aXplb2YgKCpycykpCisJCXJldHVybiAwOworCXNjLT5zY19pbmZvLm53ZXJyb3IgPSBsZTMydG9o
KHJzLT5ud2Vycm9yKTsKKwlzYy0+c2NfaW5mby5yZWdzdGF0ZSA9IGxlMzJ0b2gocnMtPnJlZ3N0
YXRlKTsKKwlzYy0+c2NfaW5mby5yZWdtb2RlID0gbGUzMnRvaChycy0+cmVnbW9kZSk7CisJc2Mt
PnNjX2luZm8uY2VsbGNsYXNzID0gbGUzMnRvaChycy0+Y3VyY2VsbGNsYXNzKTsKKworCS8qIFhY
WCBzaG91bGQgd2UgcmVtZW1iZXIgdGhlIHByb3ZpZGVyX2lkPyAqLworCXVtYl9nZXRpbmZvYnVm
KGRhdGEsIGxlbiwgcnMtPnByb3ZuYW1lX29mZnMsIHJzLT5wcm92bmFtZV9zaXplLAorCSAgICBz
Yy0+c2NfaW5mby5wcm92aWRlciwgc2l6ZW9mIChzYy0+c2NfaW5mby5wcm92aWRlcikpOworCXVt
Yl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgcnMtPnJvYW1pbmd0eHRfb2ZmcywgcnMtPnJvYW1pbmd0
eHRfc2l6ZSwKKwkgICAgc2MtPnNjX2luZm8ucm9hbWluZ3R4dCwgc2l6ZW9mIChzYy0+c2NfaW5m
by5yb2FtaW5ndHh0KSk7CisKKwlEUFJJTlRGTigyLCAiJXMsIGF2YWlsY2xhc3MgMHgleCwgY2xh
c3MgMHgleCwgcmVnbW9kZSAlZFxuIiwKKwkgICAgdW1iX3JlZ3N0YXRlKHNjLT5zY19pbmZvLnJl
Z3N0YXRlKSwKKwkgICAgbGUzMnRvaChycy0+YXZhaWxjbGFzc2VzKSwgc2MtPnNjX2luZm8uY2Vs
bGNsYXNzLAorCSAgICBzYy0+c2NfaW5mby5yZWdtb2RlKTsKKworCWlmIChzYy0+c2NfaW5mby5y
ZWdzdGF0ZSA9PSBNQklNX1JFR1NUQVRFX1JPQU1JTkcgJiYKKwkgICAgIXNjLT5zY19yb2FtaW5n
ICYmCisJICAgIHNjLT5zY19pbmZvLmFjdGl2YXRpb24gPT0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRF
X0FDVElWQVRFRCkgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhM
T0dfSU5GTywKKwkJCSAgICAiJXM6IGRpc2Nvbm5lY3RpbmcgZnJvbSByb2FtaW5nIG5ldHdvcmtc
biIsCisJCQkgICAgREVWTkFNKHNjKSk7CisJCXVtYl9kaXNjb25uZWN0KHNjKTsKKwl9CisJcmV0
dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9k
ZXZpY2VfY2FwcyAqZGMgPSBkYXRhOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmRjKSkKKwkJcmV0
dXJuIDA7CisJc2MtPnNjX21heHNlc3Npb25zID0gbGUzMnRvaChkYy0+bWF4X3Nlc3Npb25zKTsK
KwlzYy0+c2NfaW5mby5zdXBwb3J0ZWRjbGFzc2VzID0gbGUzMnRvaChkYy0+ZGF0YWNsYXNzKTsK
Kwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4sIGRjLT5kZXZpZF9vZmZzLCBkYy0+ZGV2aWRfc2l6
ZSwKKwkgICAgc2MtPnNjX2luZm8uZGV2aWQsIHNpemVvZiAoc2MtPnNjX2luZm8uZGV2aWQpKTsK
Kwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4sIGRjLT5md2luZm9fb2ZmcywgZGMtPmZ3aW5mb19z
aXplLAorCSAgICBzYy0+c2NfaW5mby5md2luZm8sIHNpemVvZiAoc2MtPnNjX2luZm8uZndpbmZv
KSk7CisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBkYy0+aHdpbmZvX29mZnMsIGRjLT5od2lu
Zm9fc2l6ZSwKKwkgICAgc2MtPnNjX2luZm8uaHdpbmZvLCBzaXplb2YgKHNjLT5zY19pbmZvLmh3
aW5mbykpOworCURQUklOVEZOKDIsICJtYXggc2Vzc2lvbnMgJWQsIHN1cHBvcnRlZCBjbGFzc2Vz
IDB4JXhcbiIsCisJICAgIHNjLT5zY19tYXhzZXNzaW9ucywgc2MtPnNjX2luZm8uc3VwcG9ydGVk
Y2xhc3Nlcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfc3Vic2Ny
aWJlcl9zdGF0dXMoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7
CisJc3RydWN0IG1iaW1fY2lkX3N1YnNjcmliZXJfcmVhZHlfaW5mbyAqc2kgPSBkYXRhOworCXN0
cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50CW5wbjsKKworCWlmIChsZW4gPCBz
aXplb2YgKCpzaSkpCisJCXJldHVybiAwOworCXNjLT5zY19pbmZvLnNpbV9zdGF0ZSA9IGxlMzJ0
b2goc2ktPnJlYWR5KTsKKworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgc2ktPnNpZF9vZmZz
LCBzaS0+c2lkX3NpemUsCisJICAgIHNjLT5zY19pbmZvLnNpZCwgc2l6ZW9mIChzYy0+c2NfaW5m
by5zaWQpKTsKKwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4sIHNpLT5pY2Nfb2Zmcywgc2ktPmlj
Y19zaXplLAorCSAgICBzYy0+c2NfaW5mby5pY2NpZCwgc2l6ZW9mIChzYy0+c2NfaW5mby5pY2Np
ZCkpOworCisJbnBuID0gbGUzMnRvaChzaS0+bm9fcG4pOworCWlmIChucG4gPiAwKQorCQl1bWJf
Z2V0aW5mb2J1ZihkYXRhLCBsZW4sIHNpLT5wblswXS5vZmZzLCBzaS0+cG5bMF0uc2l6ZSwKKwkJ
ICAgIHNjLT5zY19pbmZvLnBuLCBzaXplb2YgKHNjLT5zY19pbmZvLnBuKSk7CisJZWxzZQorCQlt
ZW1zZXQoc2MtPnNjX2luZm8ucG4sIDAsIHNpemVvZiAoc2MtPnNjX2luZm8ucG4pKTsKKworCWlm
IChzYy0+c2NfaW5mby5zaW1fc3RhdGUgPT0gTUJJTV9TSU1TVEFURV9MT0NLRUQpCisJCXNjLT5z
Y19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5fUkVRVUlSRUQ7CisJaWYgKGlmcC0+aWZfZmxhZ3Mg
JiBJRkZfREVCVUcpCisJCWxvZyhMT0dfSU5GTywgIiVzOiBTSU0gJXNcbiIsIERFVk5BTShzYyks
CisJCSAgICB1bWJfc2ltc3RhdGUoc2MtPnNjX2luZm8uc2ltX3N0YXRlKSk7CisJaWYgKHNjLT5z
Y19pbmZvLnNpbV9zdGF0ZSA9PSBNQklNX1NJTVNUQVRFX0lOSVRJQUxJWkVEKQorCQl1bWJfbmV3
c3RhdGUoc2MsIFVNQl9TX1NJTVJFQURZLCBVTUJfTlNfRE9OVF9EUk9QKTsKKwlyZXR1cm4gMTsK
K30KKworc3RhdGljIGludAordW1iX2RlY29kZV9yYWRpb19zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmFkaW9fc3Rh
dGVfaW5mbyAqcnMgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisK
KwlpZiAobGVuIDwgc2l6ZW9mICgqcnMpKQorCQlyZXR1cm4gMDsKKworCXNjLT5zY19pbmZvLmh3
X3JhZGlvX29uID0KKwkgICAgKGxlMzJ0b2gocnMtPmh3X3N0YXRlKSA9PSBNQklNX1JBRElPX1NU
QVRFX09OKSA/IDEgOiAwOworCXNjLT5zY19pbmZvLnN3X3JhZGlvX29uID0KKwkgICAgKGxlMzJ0
b2gocnMtPnN3X3N0YXRlKSA9PSBNQklNX1JBRElPX1NUQVRFX09OKSA/IDEgOiAwOworCWlmICgh
c2MtPnNjX2luZm8uaHdfcmFkaW9fb24pIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAi
cmFkaW8gaXMgZGlzYWJsZWQgYnkgaGFyZHdhcmUgc3dpdGNoXG4iKTsKKwkJLyoKKwkJICogWFhY
IGRvIHdlIG5lZWQgYSB0aW1lIHRvIHBvbGwgdGhlIHN0YXRlIG9mIHRoZSByZmtpbGwgc3dpdGNo
CisJCSAqCW9yIHdpbGwgdGhlIGRldmljZSBzZW5kIGFuIHVuc29saWNpdGVkIG5vdGlmaWNhdGlv
bgorCQkgKglpbiBjYXNlIHRoZSBzdGF0ZSBjaGFuZ2VzPworCQkgKi8KKwkJdW1iX25ld3N0YXRl
KHNjLCBVTUJfU19PUEVOLCAwKTsKKwl9IGVsc2UgaWYgKCFzYy0+c2NfaW5mby5zd19yYWRpb19v
bikgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywg
IiVzOiByYWRpbyBpcyBvZmZcbiIsIERFVk5BTShzYykpOworCQl1bWJfbmV3c3RhdGUoc2MsIFVN
Ql9TX09QRU4sIDApOworCX0gZWxzZQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX1JBRElPLCBV
TUJfTlNfRE9OVF9EUk9QKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29k
ZV9waW4oc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3Ry
dWN0IG1iaW1fY2lkX3Bpbl9pbmZvICpwaSA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBH
RVRfSUZQKHNjKTsKKwl1aW50MzJfdAlhdHRlbXB0c19sZWZ0OworCisJaWYgKGxlbiA8IHNpemVv
ZiAoKnBpKSkKKwkJcmV0dXJuIDA7CisKKwlhdHRlbXB0c19sZWZ0ID0gbGUzMnRvaChwaS0+cmVt
YWluaW5nX2F0dGVtcHRzKTsKKwlpZiAoYXR0ZW1wdHNfbGVmdCAhPSAweGZmZmZmZmZmKQorCQlz
Yy0+c2NfaW5mby5waW5fYXR0ZW1wdHNfbGVmdCA9IGF0dGVtcHRzX2xlZnQ7CisKKwlzd2l0Y2gg
KGxlMzJ0b2gocGktPnN0YXRlKSkgeworCWNhc2UgTUJJTV9QSU5fU1RBVEVfVU5MT0NLRUQ6CisJ
CXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5fVU5MT0NLRUQ7CisJCWJyZWFrOworCWNh
c2UgTUJJTV9QSU5fU1RBVEVfTE9DS0VEOgorCQlzd2l0Y2ggKGxlMzJ0b2gocGktPnR5cGUpKSB7
CisJCWNhc2UgTUJJTV9QSU5fVFlQRV9QSU4xOgorCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0g
VU1CX1BJTl9SRVFVSVJFRDsKKwkJCWJyZWFrOworCQljYXNlIE1CSU1fUElOX1RZUEVfUFVLMToK
KwkJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QVUtfUkVRVUlSRUQ7CisJCQlicmVhazsK
KwkJY2FzZSBNQklNX1BJTl9UWVBFX1BJTjI6CisJCWNhc2UgTUJJTV9QSU5fVFlQRV9QVUsyOgor
CQkJLyogQXNzdW1lIHRoYXQgUElOMSB3YXMgYWNjZXB0ZWQgKi8KKwkJCXNjLT5zY19pbmZvLnBp
bl9zdGF0ZSA9IFVNQl9QSU5fVU5MT0NLRUQ7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9
CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfSU5GTywgIiVzOiAl
cyBzdGF0ZSAlcyAoJWQgYXR0ZW1wdHMgbGVmdClcbiIsCisJCSAgICBERVZOQU0oc2MpLCB1bWJf
cGluX3R5cGUobGUzMnRvaChwaS0+dHlwZSkpLAorCQkgICAgKGxlMzJ0b2gocGktPnN0YXRlKSA9
PSBNQklNX1BJTl9TVEFURV9VTkxPQ0tFRCkgPworCQkJInVubG9ja2VkIiA6ICJsb2NrZWQiLAor
CQkgICAgbGUzMnRvaChwaS0+cmVtYWluaW5nX2F0dGVtcHRzKSk7CisKKwkvKgorCSAqIEluIGNh
c2UgdGhlIFBJTiB3YXMgc2V0IGFmdGVyIElGRl9VUCwgcmV0cmlnZ2VyIHRoZSBzdGF0ZSBtYWNo
aW5lCisJICovCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2FkZF90YXNrKHNjLCB1
bWJfc3RhdGVfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCSZz
Yy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMCk7CisJbXR4X3VubG9jaygmc2MtPnNjX211
dGV4KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9wYWNrZXRfc2Vy
dmljZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1
Y3QgbWJpbV9jaWRfcGFja2V0X3NlcnZpY2VfaW5mbyAqcHNpID0gZGF0YTsKKwlpbnQJIHN0YXRl
LCBoaWdoZXN0Y2xhc3M7CisJdWludDY0X3QgdXBfc3BlZWQsIGRvd25fc3BlZWQ7CisJc3RydWN0
IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpwc2kpKQor
CQlyZXR1cm4gMDsKKworCXNjLT5zY19pbmZvLm53ZXJyb3IgPSBsZTMydG9oKHBzaS0+bndlcnJv
cik7CisJc3RhdGUgPSBsZTMydG9oKHBzaS0+c3RhdGUpOworCWhpZ2hlc3RjbGFzcyA9IGxlMzJ0
b2gocHNpLT5oaWdoZXN0X2RhdGFjbGFzcyk7CisJdXBfc3BlZWQgPSBsZTY0dG9oKHBzaS0+dXBs
aW5rX3NwZWVkKTsKKwlkb3duX3NwZWVkID0gbGU2NHRvaChwc2ktPmRvd25saW5rX3NwZWVkKTsK
KwlpZiAoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUgICE9IHN0YXRlIHx8CisJICAgIHNjLT5zY19p
bmZvLnVwbGlua19zcGVlZCAhPSB1cF9zcGVlZCB8fAorCSAgICBzYy0+c2NfaW5mby5kb3dubGlu
a19zcGVlZCAhPSBkb3duX3NwZWVkKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVH
KSB7CisJCQlsb2coTE9HX0lORk8sICIlczogcGFja2V0IHNlcnZpY2UgIiwgREVWTkFNKHNjKSk7
CisJCQlpZiAoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUgICE9IHN0YXRlKQorCQkJCWxvZyhMT0df
SU5GTywgImNoYW5nZWQgZnJvbSAlcyB0byAiLAorCQkJCSAgICB1bWJfcGFja2V0X3N0YXRlKHNj
LT5zY19pbmZvLnBhY2tldHN0YXRlKSk7CisJCQlsb2coTE9HX0lORk8sICIlcywgY2xhc3MgJXMs
IHNwZWVkOiAlIiBQUkl1NjQgIiB1cCAvICUiIFBSSXU2NCAiIGRvd25cbiIsCisJCQkgICAgdW1i
X3BhY2tldF9zdGF0ZShzdGF0ZSksCisJCQkgICAgdW1iX2RhdGFjbGFzcyhoaWdoZXN0Y2xhc3Mp
LCB1cF9zcGVlZCwgZG93bl9zcGVlZCk7CisJCX0KKwl9CisJc2MtPnNjX2luZm8ucGFja2V0c3Rh
dGUgPSBzdGF0ZTsKKwlzYy0+c2NfaW5mby5oaWdoZXN0Y2xhc3MgPSBoaWdoZXN0Y2xhc3M7CisJ
c2MtPnNjX2luZm8udXBsaW5rX3NwZWVkID0gdXBfc3BlZWQ7CisJc2MtPnNjX2luZm8uZG93bmxp
bmtfc3BlZWQgPSBkb3duX3NwZWVkOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ21vZGUgPT0gTUJJ
TV9SRUdNT0RFX0FVVE9NQVRJQykgeworCQkvKgorCQkgKiBGb3IgZGV2aWNlcyB1c2luZyBhdXRv
bWF0aWMgcmVnaXN0cmF0aW9uIG1vZGUsIGp1c3QgcHJvY2VlZCwKKwkJICogb25jZSByZWdpc3Ry
YXRpb24gaGFzIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQ
KSB7CisJCQlzd2l0Y2ggKHNjLT5zY19pbmZvLnJlZ3N0YXRlKSB7CisJCQljYXNlIE1CSU1fUkVH
U1RBVEVfSE9NRToKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9ST0FNSU5HOgorCQkJY2FzZSBNQklN
X1JFR1NUQVRFX1BBUlRORVI6CisJCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19BVFRBQ0hFRCwK
KwkJCQkgICAgVU1CX05TX0RPTlRfRFJPUCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ
CWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfU0lNUkVB
RFksIFVNQl9OU19ET05UX1JBSVNFKTsKKwl9IGVsc2Ugc3dpdGNoIChzYy0+c2NfaW5mby5wYWNr
ZXRzdGF0ZSkgeworCWNhc2UgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSEVEOgorCQl1bWJf
bmV3c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVELCBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJYnJlYWs7
CisJY2FzZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQ6CisJCXVtYl9uZXdzdGF0ZShz
YywgVU1CX1NfU0lNUkVBRFksIFVNQl9OU19ET05UX1JBSVNFKTsKKwkJYnJlYWs7CisJfQorCXJl
dHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzdHJ1Y3Qg
dW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRf
c2lnbmFsX3N0YXRlICpzcyA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKwlpbnQJIHJzc2k7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqc3MpKQorCQlyZXR1cm4gMDsK
KworCWlmIChsZTMydG9oKHNzLT5yc3NpKSA9PSA5OSkKKwkJcnNzaSA9IFVNQl9WQUxVRV9VTktO
T1dOOworCWVsc2UgeworCQlyc3NpID0gLTExMyArIDIgKiBsZTMydG9oKHNzLT5yc3NpKTsKKwkJ
aWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKSAmJiBzYy0+c2NfaW5mby5yc3NpICE9IHJz
c2kgJiYKKwkJICAgIHNjLT5zY19zdGF0ZSA+PSBVTUJfU19DT05ORUNURUQpCisJCQlsb2coTE9H
X0lORk8sICIlczogcnNzaSAlZCBkQm1cbiIsIERFVk5BTShzYyksIHJzc2kpOworCX0KKwlzYy0+
c2NfaW5mby5yc3NpID0gcnNzaTsKKwlzYy0+c2NfaW5mby5iZXIgPSBsZTMydG9oKHNzLT5lcnJf
cmF0ZSk7CisJaWYgKHNjLT5zY19pbmZvLmJlciA9PSAtOTkpCisJCXNjLT5zY19pbmZvLmJlciA9
IFVNQl9WQUxVRV9VTktOT1dOOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVj
b2RlX2Nvbm5lY3RfaW5mbyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxl
bikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdF9pbmZvICpjaSA9IGRhdGE7CisJc3RydWN0
IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlpbnQJIGFjdDsKKworCWlmIChsZW4gPCBzaXpl
b2YgKCpjaSkpCisJCXJldHVybiAwOworCisJaWYgKGxlMzJ0b2goY2ktPnNlc3Npb25pZCkgIT0g
dW1iX3Nlc3Npb25faWQpIHsKKwkJRFBSSU5URigiZGlzY2FyZCBjb25uZWN0aW9uIGluZm8gZm9y
IHNlc3Npb24gJXVcbiIsCisJCSAgICBsZTMydG9oKGNpLT5zZXNzaW9uaWQpKTsKKwkJcmV0dXJu
IDE7CisJfQorCWlmIChtZW1jbXAoY2ktPmNvbnRleHQsIHVtYl91dWlkX2NvbnRleHRfaW50ZXJu
ZXQsCisJICAgIHNpemVvZiAoY2ktPmNvbnRleHQpKSkgeworCQlEUFJJTlRGKCJkaXNjYXJkIGNv
bm5lY3Rpb24gaW5mbyBmb3Igb3RoZXIgY29udGV4dFxuIik7CisJCXJldHVybiAxOworCX0KKwlh
Y3QgPSBsZTMydG9oKGNpLT5hY3RpdmF0aW9uKTsKKwlpZiAoc2MtPnNjX2luZm8uYWN0aXZhdGlv
biAhPSBhY3QpIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9H
X0lORk8sICIlczogY29ubmVjdGlvbiAlc1xuIiwgREVWTkFNKHNjKSwKKwkJCSAgICB1bWJfYWN0
aXZhdGlvbihhY3QpKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKSAmJgorCQkg
ICAgbGUzMnRvaChjaS0+aXB0eXBlKSAhPSBNQklNX0NPTlRFWFRfSVBUWVBFX0RFRkFVTFQgJiYK
KwkJICAgIGxlMzJ0b2goY2ktPmlwdHlwZSkgIT0gTUJJTV9DT05URVhUX0lQVFlQRV9JUFY0KQor
CQkJbG9nKExPR19ERUJVRywgIiVzOiBnb3QgaXB0eXBlICVkIGNvbm5lY3Rpb25cbiIsCisJCQkg
ICAgREVWTkFNKHNjKSwgbGUzMnRvaChjaS0+aXB0eXBlKSk7CisKKwkJc2MtPnNjX2luZm8uYWN0
aXZhdGlvbiA9IGFjdDsKKwkJc2MtPnNjX2luZm8ubndlcnJvciA9IGxlMzJ0b2goY2ktPm53ZXJy
b3IpOworCisJCWlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uID09IE1CSU1fQUNUSVZBVElPTl9T
VEFURV9BQ1RJVkFURUQpCisJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NPTk5FQ1RFRCwgVU1C
X05TX0RPTlRfRFJPUCk7CisJCWVsc2UgaWYgKHNjLT5zY19pbmZvLmFjdGl2YXRpb24gPT0KKwkJ
ICAgIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRFRCkKKwkJCXVtYl9uZXdzdGF0ZShz
YywgVU1CX1NfQVRUQUNIRUQsIDApOworCQkvKiBlbHNlOiBvdGhlciBzdGF0ZXMgYXJlIHB1cmVs
eSB0cmFuc2l0aW9uYWwgKi8KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9h
ZGRfaW5ldF9jb25maWcoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBpbl9hZGRyIGlwLCB1
X2ludCBwcmVmaXhsZW4sCisgICAgc3RydWN0IGluX2FkZHIgZ3cpCit7CisJc3RydWN0IGlmbmV0
ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3QgaW5fYWxpYXNyZXEgaWZyYTsKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbjsKKwlpbnQJIHJ2OworCisJbWVtc2V0KCZpZnJhLCAwLCBzaXplb2Yg
KGlmcmEpKTsKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmcmEuaWZyYV9hZGRyOwor
CXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLT5zaW5fbGVuID0gc2l6ZW9mICgqc2lu
KTsKKwlzaW4tPnNpbl9hZGRyID0gaXA7CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
JmlmcmEuaWZyYV9kc3RhZGRyOworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLT5z
aW5fbGVuID0gc2l6ZW9mICgqc2luKTsKKwlzaW4tPnNpbl9hZGRyID0gZ3c7CisKKwlzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopJmlmcmEuaWZyYV9tYXNrOworCXNpbi0+c2luX2ZhbWlseSA9
IEFGX0lORVQ7CisJc2luLT5zaW5fbGVuID0gc2l6ZW9mICgqc2luKTsKKwl1bWJfaW5fbGVuMm1h
c2soJnNpbi0+c2luX2FkZHIsIHByZWZpeGxlbik7CisKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0
ZXgpOworCXJ2ID0gaW5fY29udHJvbChOVUxMLCBTSU9DQUlGQUREUiwgKGNhZGRyX3QpJmlmcmEs
IGlmcCwgY3VydGhyZWFkKTsKKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAocnYgIT0g
MCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJ1bmFibGUgdG8gc2V0IElQdjQgYWRk
cmVzcywgZXJyb3IgJWRcbiIsCisJCSAgICBydik7CisJCXJldHVybiBydjsKKwl9CisKKwlpZiAo
aWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19JTkZPLCAiJXM6IElQdjQgYWRk
ciAlcywgbWFzayAlcywgIgorCQkgICAgImdhdGV3YXkgJXNcbiIsIERFVk5BTShzYyksCisJCSAg
ICB1bWJfbnRvcChzaW50b3NhKCZpZnJhLmlmcmFfYWRkcikpLAorCQkgICAgdW1iX250b3Aoc2lu
dG9zYSgmaWZyYS5pZnJhX21hc2spKSwKKwkJICAgIHVtYl9udG9wKHNpbnRvc2EoJmlmcmEuaWZy
YV9kc3RhZGRyKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVf
aXBfY29uZmlndXJhdGlvbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxl
bikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJhdGlvbl9pbmZvICppYyA9IGRhdGE7
CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwl1aW50MzJfdCBhdmFpbF92NDsK
Kwl1aW50MzJfdCB2YWw7CisJaW50CSBuLCBpOworCWludAkgb2ZmOworCXN0cnVjdCBtYmltX2Np
ZF9pcHY0X2VsZW1lbnQgaXB2NGVsZW07CisJc3RydWN0IGluX2FkZHIgYWRkciwgZ3c7CisJaW50
CSBzdGF0ZSA9IC0xOworCWludAkgcnY7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqaWMpKQorCQly
ZXR1cm4gMDsKKwlpZiAobGUzMnRvaChpYy0+c2Vzc2lvbmlkKSAhPSB1bWJfc2Vzc2lvbl9pZCkg
eworCQlEUFJJTlRGKCJpZ25vcmUgSVAgY29uZmlndXJhdGlvbiBmb3Igc2Vzc2lvbiBpZCAlZFxu
IiwKKwkJICAgIGxlMzJ0b2goaWMtPnNlc3Npb25pZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkv
KgorCSAqIElQdjQgY29uZmlndXJhdGlvbgorCSAqLworCWF2YWlsX3Y0ID0gbGUzMnRvaChpYy0+
aXB2NF9hdmFpbGFibGUpOworCWlmICgoYXZhaWxfdjQgJiAoTUJJTV9JUENPTkZfSEFTX0FERFJJ
TkZPIHwgTUJJTV9JUENPTkZfSEFTX0dXSU5GTykpID09CisJICAgIChNQklNX0lQQ09ORl9IQVNf
QUREUklORk8gfCBNQklNX0lQQ09ORl9IQVNfR1dJTkZPKSkgeworCQluID0gbGUzMnRvaChpYy0+
aXB2NF9uYWRkcik7CisJCW9mZiA9IGxlMzJ0b2goaWMtPmlwdjRfYWRkcm9mZnMpOworCisJCWlm
IChuID09IDAgfHwgb2ZmICsgc2l6ZW9mIChpcHY0ZWxlbSkgPiBsZW4pCisJCQlnb3RvIHRyeXY2
OworCQlpZiAobiAhPSAxICYmIGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9H
X0lORk8sICIlczogbW9yZSB0aGFuIG9uZSBJUHY0IGFkZHI6ICVkXG4iLAorCQkJICAgIERFVk5B
TShzYyksIG4pOworCisJCS8qIE9ubHkgcGljayB0aGUgZmlyc3Qgb25lICovCisJCW1lbWNweSgm
aXB2NGVsZW0sIChjaGFyICopZGF0YSArIG9mZiwgc2l6ZW9mIChpcHY0ZWxlbSkpOworCQlpcHY0
ZWxlbS5wcmVmaXhsZW4gPSBsZTMydG9oKGlwdjRlbGVtLnByZWZpeGxlbik7CisJCWFkZHIuc19h
ZGRyID0gaXB2NGVsZW0uYWRkcjsKKworCQlvZmYgPSBsZTMydG9oKGljLT5pcHY0X2d3b2Zmcyk7
CisJCWlmIChvZmYgKyBzaXplb2YgKGd3KSA+IGxlbikKKwkJCWdvdG8gZG9uZTsKKwkJbWVtY3B5
KCZndywgKGNoYXIgKilkYXRhICsgb2ZmLCBzaXplb2YgKGd3KSk7CisKKwkJcnYgPSB1bWJfYWRk
X2luZXRfY29uZmlnKHNjLCBhZGRyLCBpcHY0ZWxlbS5wcmVmaXhsZW4sIGd3KTsKKwkJaWYgKHJ2
ID09IDApCisJCQlzdGF0ZSA9IFVNQl9TX1VQOworCX0KKworCW1lbXNldChzYy0+c2NfaW5mby5p
cHY0ZG5zLCAwLCBzaXplb2YgKHNjLT5zY19pbmZvLmlwdjRkbnMpKTsKKwlpZiAoYXZhaWxfdjQg
JiBNQklNX0lQQ09ORl9IQVNfRE5TSU5GTykgeworCQluID0gbGUzMnRvaChpYy0+aXB2NF9uZG5z
c3J2KTsKKwkJb2ZmID0gbGUzMnRvaChpYy0+aXB2NF9kbnNzcnZvZmZzKTsKKwkJaSA9IDA7CisJ
CXdoaWxlIChuLS0gPiAwKSB7CisJCQlpZiAob2ZmICsgc2l6ZW9mIChhZGRyKSA+IGxlbikKKwkJ
CQlicmVhazsKKwkJCW1lbWNweSgmYWRkciwgKGNoYXIgKilkYXRhICsgb2ZmLCBzaXplb2YoYWRk
cikpOworCQkJaWYgKGkgPCBVTUJfTUFYX0ROU1NSVikKKwkJCQlzYy0+c2NfaW5mby5pcHY0ZG5z
W2krK10gPSBhZGRyOworCQkJb2ZmICs9IHNpemVvZihhZGRyKTsKKwkJfQorCX0KKworCWlmICgo
YXZhaWxfdjQgJiBNQklNX0lQQ09ORl9IQVNfTVRVSU5GTykpIHsKKwkJdmFsID0gbGUzMnRvaChp
Yy0+aXB2NF9tdHUpOworCQlpZiAoaWZwLT5pZl9tdHUgIT0gdmFsICYmIHZhbCA8PSBzYy0+c2Nf
bWF4cGt0bGVuKSB7CisJCQlpZnAtPmlmX210dSA9IHZhbDsKKwkJCWlmIChpZnAtPmlmX210dSA+
IHZhbCkKKwkJCQlpZnAtPmlmX210dSA9IHZhbDsKKwkJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZG
X0RFQlVHKQorCQkJCWxvZyhMT0dfSU5GTywgIiVzOiBNVFUgJWRcbiIsIERFVk5BTShzYyksIHZh
bCk7CisJCX0KKwl9CisKKwlhdmFpbF92NCA9IGxlMzJ0b2goaWMtPmlwdjZfYXZhaWxhYmxlKTsK
KwlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpICYmIGF2YWlsX3Y0ICYgTUJJTV9JUENP
TkZfSEFTX0FERFJJTkZPKSB7CisJCS8qIFhYWCBGSVhNRTogSVB2NiBjb25maWd1cmF0aW9uIG1p
c3NpbmcgKi8KKwkJbG9nKExPR19JTkZPLCAiJXM6IGlnbm9yaW5nIElQdjYgY29uZmlndXJhdGlv
blxuIiwgREVWTkFNKHNjKSk7CisJfQorCWlmIChzdGF0ZSAhPSAtMSkKKwkJdW1iX25ld3N0YXRl
KHNjLCBzdGF0ZSwgMCk7CisKK3RyeXY2OgorZG9uZToKKwlyZXR1cm4gMTsKK30KKworc3RhdGlj
IHZvaWQKK3VtYl9yeChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwltdHhfYXNzZXJ0KCZzYy0+
c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCXVzYmRfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJb
VU1CX0JVTEtfUlhdKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9yeGVvZihzdHJ1Y3QgdXNiX3hm
ZXIgKnhmZXIsIHVzYl9lcnJvcl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9
IHVzYmRfeGZlcl9zb2Z0Yyh4ZmVyKTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2Mp
OworCWludCBhY3RsZW47CisJaW50IGFmcmFtZXM7CisJaW50IGk7CisKKwlEUFJJTlRGKCIlcygl
dSk6IHN0YXRlPSV1XG4iLCBfX2Z1bmNfXywgc3RhdHVzLCBVU0JfR0VUX1NUQVRFKHhmZXIpKTsK
KworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJdXNiZF94ZmVyX3N0
YXR1cyh4ZmVyLCAmYWN0bGVuLCBOVUxMLCAmYWZyYW1lcywgTlVMTCk7CisKKwlzd2l0Y2ggKFVT
Ql9HRVRfU1RBVEUoeGZlcikpIHsKKwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoKKwkJRFBSSU5U
RigicmVjZWl2ZWQgJXUgYnl0ZXMgaW4gJXUgZnJhbWVzXG4iLCBhY3RsZW4sIGFmcmFtZXMpOwor
CisJCWlmIChhY3RsZW4gPT0gMCkgeworCQkJaWYgKHNjLT5zY19yeF9uZXJyID49IDQpCisJCQkJ
LyogdGhyb3R0bGUgdHJhbnNmZXJzICovCisJCQkJdXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVy
LCA1MDApOworCQkJZWxzZQorCQkJCXNjLT5zY19yeF9uZXJyKys7CisJCX0KKwkJZWxzZSB7CisJ
CQkvKiBkaXNhYmxlIHRocm90dGxpbmcgKi8KKwkJCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwoeGZl
ciwgMCk7CisJCQlzYy0+c2NfcnhfbmVyciA9IDA7CisJCX0KKworCQlmb3IoaSA9IDA7IGkgPCBh
ZnJhbWVzOyBpKyspIHsKKwkJCXVtYl9kZWNhcChzYywgeGZlciwgaSk7CisJCX0KKworCQkvKiBm
YWxsIHRocm91Z2ggKi8KKwljYXNlIFVTQl9TVF9TRVRVUDoKKwkJdXNiZF94ZmVyX3NldF9mcmFt
ZV9kYXRhKHhmZXIsIDAsIHNjLT5zY19yeF9idWYsCisJCQkJc2MtPnNjX3J4X2J1ZnN6KTsKKwkJ
dXNiZF94ZmVyX3NldF9mcmFtZXMoeGZlciwgMSk7CisJCXVzYmRfdHJhbnNmZXJfc3VibWl0KHhm
ZXIpOworCisJCXVtYl9yeGZsdXNoKHNjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5U
RigicnggZXJyb3I6ICVzXG4iLCB1c2JkX2VycnN0cihzdGF0dXMpKTsKKworCQkvKiBkaXNhYmxl
IHRocm90dGxpbmcgKi8KKwkJdXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsKKworCQlp
ZiAoc3RhdHVzICE9IFVTQl9FUlJfQ0FOQ0VMTEVEKSB7CisJCQkvKiB0cnkgdG8gY2xlYXIgc3Rh
bGwgZmlyc3QgKi8KKwkJCXVzYmRfeGZlcl9zZXRfc3RhbGwoeGZlcik7CisJCQl1c2JkX3hmZXJf
c2V0X2ZyYW1lcyh4ZmVyLCAwKTsKKwkJCXVzYmRfdHJhbnNmZXJfc3VibWl0KHhmZXIpOworCQkJ
aWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVSUk9SUywgMSk7CisJCX0KKwkJZWxzZSBp
ZiAoKytzYy0+c2NfcnhfbmVyciA+IDEwMCkgeworCQkJbG9nKExPR19FUlIsICIlczogdG9vIG1h
bnkgcnggZXJyb3JzLCBkaXNhYmxpbmdcbiIsCisJCQkgICAgREVWTkFNKHNjKSk7CisJCQl1bWJf
ZGVhY3RpdmF0ZShzYy0+c2NfZGV2KTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfcnhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCXN0cnVjdCBtYnVmICptOworCisJbXR4X2Fzc2VydCgmc2Mt
PnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlmb3IgKDs7KSB7CisJCV9JRl9ERVFVRVVFKCZzYy0+
c2NfcnhfcXVldWUsIG0pOworCQlpZiAobSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJ
ICogVGhlIFVTQiB4ZmVyIGhhcyBiZWVuIHJlc3VibWl0dGVkIHNvIGl0cyBzYWZlIHRvIHVubG9j
ayBub3cuCisJCSAqLworCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQlpZiAoaWZwLT5p
Zl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpCisJCQlpZnAtPmlmX2lucHV0KGlmcCwgbSk7
CisJCWVsc2UKKwkJCW1fZnJlZW0obSk7CisJCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCX0K
K30KKworc3RhdGljIGludAordW1iX2VuY2FwKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3Qg
bWJ1ZiAqbSwgc3RydWN0IHVzYl94ZmVyICp4ZmVyKQoreworCXN0cnVjdCBuY21faGVhZGVyMTYg
KmhkcjsKKwlzdHJ1Y3QgbmNtX3BvaW50ZXIxNiAqcHRyOworCWludAkgbGVuOworCisJS0FTU0VS
VChzYy0+c2NfdHhfbSA9PSBOVUxMLAorCQkJKCJBc3NlcnRpb24gZmFpbGVkIGluIHVtYl9lbmNh
cCgpIikpOworCisJLyogQWxsIHNpemUgY29uc3RyYWludHMgaGF2ZSBiZWVuIHZhbGlkYXRlZCBi
eSB0aGUgY2FsbGVyISAqLworCWhkciA9IChzdHJ1Y3QgbmNtX2hlYWRlcjE2ICopc2MtPnNjX3R4
X2J1ZjsKKwlwdHIgPSAoc3RydWN0IG5jbV9wb2ludGVyMTYgKikoaGRyICsgMSk7CisKKwlVU0VU
RFcoaGRyLT5kd1NpZ25hdHVyZSwgTkNNX0hEUjE2X1NJRyk7CisJVVNFVFcoaGRyLT53SGVhZGVy
TGVuZ3RoLCBzaXplb2YgKCpoZHIpKTsKKwlVU0VUVyhoZHItPndTZXF1ZW5jZSwgc2MtPnNjX3R4
X3NlcSk7CisJc2MtPnNjX3R4X3NlcSsrOworCVVTRVRXKGhkci0+d05kcEluZGV4LCBzaXplb2Yg
KCpoZHIpKTsKKworCWxlbiA9IG0tPm1fcGt0aGRyLmxlbjsKKwlVU0VURFcocHRyLT5kd1NpZ25h
dHVyZSwgTUJJTV9OQ01fTlRIMTZfU0lHKHVtYl9zZXNzaW9uX2lkKSk7CisJVVNFVFcocHRyLT53
TGVuZ3RoLCBzaXplb2YgKCpwdHIpKTsKKwlVU0VUVyhwdHItPndOZXh0TmRwSW5kZXgsIDApOwor
CVVTRVRXKHB0ci0+ZGdyYW1bMF0ud0RhdGFncmFtSW5kZXgsIE1CSU1fSERSMTZfTEVOKTsKKwlV
U0VUVyhwdHItPmRncmFtWzBdLndEYXRhZ3JhbUxlbiwgbGVuKTsKKwlVU0VUVyhwdHItPmRncmFt
WzFdLndEYXRhZ3JhbUluZGV4LCAwKTsKKwlVU0VUVyhwdHItPmRncmFtWzFdLndEYXRhZ3JhbUxl
biwgMCk7CisKKwlLQVNTRVJUKGxlbiArIE1CSU1fSERSMTZfTEVOIDw9IHNjLT5zY190eF9idWZz
eiwKKwkJCSgiQXNzZXJ0aW9uIGZhaWxlZCBpbiB1bWJfZW5jYXAoKSIpKTsKKwltX2NvcHlkYXRh
KG0sIDAsIGxlbiwgKGNoYXIgKikocHRyICsgMSkpOworCXNjLT5zY190eF9tID0gbTsKKwlsZW4g
Kz0gTUJJTV9IRFIxNl9MRU47CisJVVNFVFcoaGRyLT53QmxvY2tMZW5ndGgsIGxlbik7CisKKwl1
c2JkX3hmZXJfc2V0X2ZyYW1lX2RhdGEoeGZlciwgMCwgc2MtPnNjX3R4X2J1ZiwgbGVuKTsKKwl1
c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDApOworCXVzYmRfeGZlcl9zZXRfZnJhbWVzKHhm
ZXIsIDEpOworCisJRFBSSU5URk4oMywgIiVzOiBlbmNhcCAlZCBieXRlc1xuIiwgREVWTkFNKHNj
KSwgbGVuKTsKKwlERFVNUE4oNSwgc2MtPnNjX3R4X2J1ZiwgbGVuKTsKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIHZvaWQKK3VtYl90eGVvZihzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIHVzYl9lcnJv
cl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHVzYmRfeGZlcl9zb2Z0Yyh4
ZmVyKTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXN0cnVjdCBtYnVmICpt
OworCisJRFBSSU5URigiJXMoJXUpIHN0YXRlPSV1XG4iLCBfX2Z1bmNfXywgc3RhdHVzLCBVU0Jf
R0VUX1NUQVRFKHhmZXIpKTsKKworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQp
OworCisJc3dpdGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CisJY2FzZSBVU0JfU1RfVFJBTlNG
RVJSRUQ6CisJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisJCWlmX2lu
Y19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09QQUNLRVRTLCAxKTsKKworCQl1bWJfdHhmbHVzaChz
Yyk7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBVU0JfU1RfU0VUVVA6Cit0cl9zZXR1
cDoKKwkJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkKKwkJ
CWJyZWFrOworCisJCUlGUV9EUlZfREVRVUVVRSgmaWZwLT5pZl9zbmQsIG0pOworCQlpZiAobSA9
PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJaWYgKHVtYl9lbmNhcChzYywgbSwgeGZlcikpIHsKKwkJ
CWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQkJdW1iX3R4Zmx1
c2goc2MpOworCQkJYnJlYWs7CisJCX0KKworCQlCUEZfTVRBUChpZnAsIG0pOworCisJCWlmcC0+
aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfT0FDVElWRTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQo
eGZlcik7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl1bWJfdHhmbHVzaChzYyk7CisKKwkJ
LyogY291bnQgb3V0cHV0IGVycm9ycyAqLworCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRF
Ul9PRVJST1JTLCAxKTsKKwkJRFBSSU5URigidHggZXJyb3I6ICVzXG4iLAorCQkJCXVzYmRfZXJy
c3RyKHN0YXR1cykpOworCisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKKwkJ
CS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJzdCAqLworCQkJdXNiZF94ZmVyX3NldF9zdGFsbCh4
ZmVyKTsKKwkJCWdvdG8gdHJfc2V0dXA7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
dm9pZAordW1iX3R4Zmx1c2goc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJbXR4X2Fzc2VydCgm
c2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAoc2MtPnNjX3R4X20gIT0gTlVMTCkgewor
CQltX2ZyZWVtKHNjLT5zY190eF9tKTsKKwkJc2MtPnNjX3R4X20gPSBOVUxMOworCX0KK30KKwor
c3RhdGljIHZvaWQKK3VtYl9kZWNhcChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgc3RydWN0IHVzYl94
ZmVyICp4ZmVyLCBpbnQgZnJhbWUpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKwljaGFyICpidWY7CisJaW50IGxlbjsKKwljaGFyCSpkcDsKKwlzdHJ1Y3QgbmNtX2hlYWRl
cjE2ICpoZHIxNjsKKwlzdHJ1Y3QgbmNtX2hlYWRlcjMyICpoZHIzMjsKKwlzdHJ1Y3QgbmNtX3Bv
aW50ZXIxNiAqcHRyMTY7CisJc3RydWN0IG5jbV9wb2ludGVyMTZfZGdyYW0gKmRncmFtMTY7CisJ
c3RydWN0IG5jbV9wb2ludGVyMzJfZGdyYW0gKmRncmFtMzI7CisJdWludDMyX3QgaHNpZywgcHNp
ZzsKKwlpbnQJIGhsZW4sIGJsZW47CisJaW50CSBwdHJsZW4sIHB0cm9mZiwgZGdlbnRyeW9mZjsK
Kwl1aW50MzJfdCBkb2ZmLCBkbGVuOworCXN0cnVjdCBtYnVmICptOworCisJdXNiZF94ZmVyX2Zy
YW1lX2RhdGEoeGZlciwgZnJhbWUsICh2b2lkICoqKSZidWYsICZsZW4pOworCURQUklOVEZOKDQs
ICJyZWN2ICVkIGJ5dGVzXG4iLCBsZW4pOworCUREVU1QTig1LCBidWYsIGxlbik7CisJaWYgKGxl
biA8IHNpemVvZiAoKmhkcjE2KSkKKwkJZ290byB0b29zbWFsbDsKKworCWhkcjE2ID0gKHN0cnVj
dCBuY21faGVhZGVyMTYgKilidWY7CisJaHNpZyA9IFVHRVREVyhoZHIxNi0+ZHdTaWduYXR1cmUp
OworCWhsZW4gPSBVR0VUVyhoZHIxNi0+d0hlYWRlckxlbmd0aCk7CisJaWYgKGxlbiA8IGhsZW4p
CisJCWdvdG8gdG9vc21hbGw7CisJaWYgKGxlbiA+IHNjLT5zY19yeF9idWZzeikgeworCQlEUFJJ
TlRGKCJwYWNrZXQgdG9vIGxhcmdlICglZClcbiIsIGxlbik7CisJCWdvdG8gZmFpbDsKKwl9CisJ
c3dpdGNoIChoc2lnKSB7CisJY2FzZSBOQ01fSERSMTZfU0lHOgorCQlibGVuID0gVUdFVFcoaGRy
MTYtPndCbG9ja0xlbmd0aCk7CisJCXB0cm9mZiA9IFVHRVRXKGhkcjE2LT53TmRwSW5kZXgpOwor
CQlpZiAoaGxlbiAhPSBzaXplb2YgKCpoZHIxNikpIHsKKwkJCURQUklOVEYoIiVzOiBiYWQgaGVh
ZGVyIGxlbiAlZCBmb3IgTlRIMTYgKGV4cCAlenUpXG4iLAorCQkJICAgIERFVk5BTShzYyksIGhs
ZW4sIHNpemVvZiAoKmhkcjE2KSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJYnJlYWs7CisJY2Fz
ZSBOQ01fSERSMzJfU0lHOgorCQloZHIzMiA9IChzdHJ1Y3QgbmNtX2hlYWRlcjMyICopaGRyMTY7
CisJCWJsZW4gPSBVR0VURFcoaGRyMzItPmR3QmxvY2tMZW5ndGgpOworCQlwdHJvZmYgPSBVR0VU
RFcoaGRyMzItPmR3TmRwSW5kZXgpOworCQlpZiAoaGxlbiAhPSBzaXplb2YgKCpoZHIzMikpIHsK
KwkJCURQUklOVEYoIiVzOiBiYWQgaGVhZGVyIGxlbiAlZCBmb3IgTlRIMzIgKGV4cCAlenUpXG4i
LAorCQkJICAgIERFVk5BTShzYyksIGhsZW4sIHNpemVvZiAoKmhkcjMyKSk7CisJCQlnb3RvIGZh
aWw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URigiJXM6IHVuc3VwcG9ydGVk
IE5DTSBoZWFkZXIgc2lnbmF0dXJlICgweCUwOHgpXG4iLAorCQkgICAgREVWTkFNKHNjKSwgaHNp
Zyk7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKGxlbiA8IGJsZW4pIHsKKwkJRFBSSU5URigiJXM6
IGJhZCBOVEIgbGVuICglZCkgZm9yICVkIGJ5dGVzIG9mIGRhdGFcbiIsCisJCSAgICBERVZOQU0o
c2MpLCBibGVuLCBsZW4pOworCQlnb3RvIGZhaWw7CisJfQorCisJcHRyMTYgPSAoc3RydWN0IG5j
bV9wb2ludGVyMTYgKikoYnVmICsgcHRyb2ZmKTsKKwlwc2lnID0gVUdFVERXKHB0cjE2LT5kd1Np
Z25hdHVyZSk7CisJcHRybGVuID0gVUdFVFcocHRyMTYtPndMZW5ndGgpOworCWlmIChsZW4gPCBw
dHJsZW4gKyBwdHJvZmYpCisJCWdvdG8gdG9vc21hbGw7CisJaWYgKCFNQklNX05DTV9OVEgxNl9J
U0lTRyhwc2lnKSAmJiAhTUJJTV9OQ01fTlRIMzJfSVNJU0cocHNpZykpIHsKKwkJRFBSSU5URigi
JXM6IHVuc3VwcG9ydGVkIE5DTSBwb2ludGVyIHNpZ25hdHVyZSAoMHglMDh4KVxuIiwKKwkJICAg
IERFVk5BTShzYyksIHBzaWcpOworCQlnb3RvIGZhaWw7CisJfQorCisJc3dpdGNoIChoc2lnKSB7
CisJY2FzZSBOQ01fSERSMTZfU0lHOgorCQlkZ2VudHJ5b2ZmID0gb2Zmc2V0b2Yoc3RydWN0IG5j
bV9wb2ludGVyMTYsIGRncmFtKTsKKwkJYnJlYWs7CisJY2FzZSBOQ01fSERSMzJfU0lHOgorCQlk
Z2VudHJ5b2ZmID0gb2Zmc2V0b2Yoc3RydWN0IG5jbV9wb2ludGVyMzIsIGRncmFtKTsKKwkJYnJl
YWs7CisJZGVmYXVsdDoKKwkJZ290byBmYWlsOworCX0KKworCXdoaWxlIChkZ2VudHJ5b2ZmIDwg
cHRybGVuKSB7CisJCXN3aXRjaCAoaHNpZykgeworCQljYXNlIE5DTV9IRFIxNl9TSUc6CisJCQlp
ZiAocHRyb2ZmICsgZGdlbnRyeW9mZiA8IHNpemVvZiAoKmRncmFtMTYpKQorCQkJCWdvdG8gZG9u
ZTsKKwkJCWRncmFtMTYgPSAoc3RydWN0IG5jbV9wb2ludGVyMTZfZGdyYW0gKikKKwkJCSAgICAo
YnVmICsgcHRyb2ZmICsgZGdlbnRyeW9mZik7CisJCQlkZ2VudHJ5b2ZmICs9IHNpemVvZiAoKmRn
cmFtMTYpOworCQkJZGxlbiA9IFVHRVRXKGRncmFtMTYtPndEYXRhZ3JhbUxlbik7CisJCQlkb2Zm
ID0gVUdFVFcoZGdyYW0xNi0+d0RhdGFncmFtSW5kZXgpOworCQkJYnJlYWs7CisJCWNhc2UgTkNN
X0hEUjMyX1NJRzoKKwkJCWlmIChwdHJvZmYgKyBkZ2VudHJ5b2ZmIDwgc2l6ZW9mICgqZGdyYW0z
MikpCisJCQkJZ290byBkb25lOworCQkJZGdyYW0zMiA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9k
Z3JhbSAqKQorCQkJICAgIChidWYgKyBwdHJvZmYgKyBkZ2VudHJ5b2ZmKTsKKwkJCWRnZW50cnlv
ZmYgKz0gc2l6ZW9mICgqZGdyYW0zMik7CisJCQlkbGVuID0gVUdFVERXKGRncmFtMzItPmR3RGF0
YWdyYW1MZW4pOworCQkJZG9mZiA9IFVHRVREVyhkZ3JhbTMyLT5kd0RhdGFncmFtSW5kZXgpOwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9J
RVJST1JTLCAxKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIFRlcm1pbmF0aW5nIHplcm8g
ZW50cnkgKi8KKwkJaWYgKGRsZW4gPT0gMCB8fCBkb2ZmID09IDApCisJCQlicmVhazsKKwkJaWYg
KGxlbiA8IGRsZW4gKyBkb2ZmKSB7CisJCQkvKiBTa2lwIGdpYW50IGRhdGFncmFtIGJ1dCBjb250
aW51ZSBwcm9jZXNzaW5nICovCisJCQlEUFJJTlRGKCIlczogZGF0YWdyYW0gdG9vIGxhcmdlICgl
ZCBAIG9mZiAlZClcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgZGxlbiwgZG9mZik7CisJCQljb250
aW51ZTsKKwkJfQorCisJCWRwID0gYnVmICsgZG9mZjsKKwkJRFBSSU5URk4oMywgIiVzOiBkZWNh
cCAlZCBieXRlc1xuIiwgREVWTkFNKHNjKSwgZGxlbik7CisJCW0gPSBtX2RldmdldChkcCwgZGxl
biwgMCwgaWZwLCBOVUxMKTsKKwkJaWYgKG0gPT0gTlVMTCkgeworCQkJaWZfaW5jX2NvdW50ZXIo
aWZwLCBJRkNPVU5URVJfSVFEUk9QUywgMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGVu
cXVldWUgZm9yIGxhdGVyIHdoZW4gdGhlIGxvY2sgY2FuIGJlIHJlbGVhc2VkICovCisJCV9JRl9F
TlFVRVVFKCZzYy0+c2NfcnhfcXVldWUsIG0pOworCisJCWlmX2luY19jb3VudGVyKGlmcCwgSUZD
T1VOVEVSX0lQQUNLRVRTLCAxKTsKKworCX0KK2RvbmU6CisJc2MtPnNjX3J4X25lcnIgPSAwOwor
CXJldHVybjsKK3Rvb3NtYWxsOgorCURQUklOVEYoIiVzOiBwYWNrZXQgdG9vIHNtYWxsICglZClc
biIsIERFVk5BTShzYyksIGxlbik7CitmYWlsOgorCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VO
VEVSX0lFUlJPUlMsIDEpOworfQorCitzdGF0aWMgdXNiX2Vycm9yX3QKK3VtYl9zZW5kX2VuY2Fw
X2NvbW1hbmQoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJ
dXNiX2RldmljZV9yZXF1ZXN0X3QgcmVxOworCisJaWYgKGxlbiA+IHNjLT5zY19jdHJsX2xlbikK
KwkJcmV0dXJuIFVTQl9FUlJfSU5WQUw7CisKKwkvKiBYWFggRklYTUU6IGlmICh0b3RhbCBsZW4g
PiBzYy0+c2NfY3RybF9sZW4pID0+IG11c3QgZnJhZ21lbnQgKi8KKwlyZXEuYm1SZXF1ZXN0VHlw
ZSA9IFVUX1dSSVRFX0NMQVNTX0lOVEVSRkFDRTsKKwlyZXEuYlJlcXVlc3QgPSBVQ0RDX1NFTkRf
RU5DQVBTVUxBVEVEX0NPTU1BTkQ7CisJVVNFVFcocmVxLndWYWx1ZSwgMCk7CisJVVNFVFcocmVx
LndJbmRleCwgc2MtPnNjX2N0cmxfaWZhY2Vubyk7CisJVVNFVFcocmVxLndMZW5ndGgsIGxlbik7
CisJREVMQVkodW1iX2RlbGF5KTsKKwlyZXR1cm4gdXNiZF9kb19yZXF1ZXN0X2ZsYWdzKHNjLT5z
Y191ZGV2LCAmc2MtPnNjX211dGV4LCAmcmVxLCBkYXRhLCAwLAorCQkJTlVMTCwgdW1iX3hmZXJf
dG91dCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9nZXRfZW5jYXBfcmVzcG9uc2Uoc3RydWN0IHVt
Yl9zb2Z0YyAqc2MsIHZvaWQgKmJ1ZiwgaW50ICpsZW4pCit7CisJdXNiX2RldmljZV9yZXF1ZXN0
X3QgcmVxOworCXVzYl9lcnJvcl90IGVycjsKKwl1aW50MTZfdCBsID0gKmxlbjsKKworCXJlcS5i
bVJlcXVlc3RUeXBlID0gVVRfUkVBRF9DTEFTU19JTlRFUkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0g
VUNEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOworCVVTRVRXKHJlcS53VmFsdWUsIDApOwor
CVVTRVRXKHJlcS53SW5kZXgsIHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVTRVRXKHJlcS53TGVu
Z3RoLCBsKTsKKwkvKiBYWFggRklYTUU6IHJlLWFzc2VtYmxlIGZyYWdtZW50cyAqLworCisJREVM
QVkodW1iX2RlbGF5KTsKKwllcnIgPSB1c2JkX2RvX3JlcXVlc3RfZmxhZ3Moc2MtPnNjX3VkZXYs
ICZzYy0+c2NfbXV0ZXgsICZyZXEsIGJ1ZiwKKwkJCVVTQl9TSE9SVF9YRkVSX09LLCAmbCwgdW1i
X3hmZXJfdG91dCk7CisJaWYgKGVyciA9PSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKSB7CisJ
CSpsZW4gPSBsOworCQlyZXR1cm4gMTsKKwl9CisJRFBSSU5URigiY3RybCByZWN2OiAlc1xuIiwg
dXNiZF9lcnJzdHIoZXJyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY3Ry
bF9tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQzMl90IHJlcSwgdm9pZCAqZGF0YSwgaW50
IGxlbikKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IHRp
ZDsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIgKmhkciA9IGRhdGE7CisJdXNiX2Vycm9yX3QgZXJyOwor
CisJaWYgKHNjLT5zY19keWluZykKKwkJcmV0dXJuOworCWlmIChsZW4gPCBzaXplb2YgKCpoZHIp
KQorCQlyZXR1cm47CisJdGlkID0gKytzYy0+c2NfdGlkOworCisJaGRyLT50eXBlID0gaHRvbGUz
MihyZXEpOworCWhkci0+bGVuID0gaHRvbGUzMihsZW4pOworCWhkci0+dGlkID0gaHRvbGUzMih0
aWQpOworCisjaWZkZWYgVU1CX0RFQlVHCisJaWYgKHVtYl9kZWJ1ZykgeworCQljb25zdCBjaGFy
ICpvcCwgKnN0cjsKKwkJaWYgKHJlcSA9PSBNQklNX0NPTU1BTkRfTVNHKSB7CisJCQlzdHJ1Y3Qg
bWJpbV9oMmZfY21kICpjID0gZGF0YTsKKwkJCWlmIChsZTMydG9oKGMtPm9wKSA9PSBNQklNX0NN
RE9QX1NFVCkKKwkJCQlvcCA9ICJzZXQiOworCQkJZWxzZQorCQkJCW9wID0gInFyeSI7CisJCQlz
dHIgPSB1bWJfY2lkMnN0cihsZTMydG9oKGMtPmNpZCkpOworCQl9IGVsc2UgeworCQkJb3AgPSAi
c25kIjsKKwkJCXN0ciA9IHVtYl9yZXF1ZXN0MnN0cihyZXEpOworCQl9CisJCURQUklOVEYoIi0+
ICVzICVzICh0aWQgJXUpXG4iLCBvcCwgc3RyLCB0aWQpOworCX0KKyNlbmRpZgorCWVyciA9IHVt
Yl9zZW5kX2VuY2FwX2NvbW1hbmQoc2MsIGRhdGEsIGxlbik7CisJaWYgKGVyciAhPSBVU0JfRVJS
X05PUk1BTF9DT01QTEVUSU9OKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQor
CQkJbG9nKExPR19FUlIsICIlczogc2VuZCAlcyBtc2cgKHRpZCAldSkgZmFpbGVkOiAlc1xuIiwK
KwkJCSAgICBERVZOQU0oc2MpLCB1bWJfcmVxdWVzdDJzdHIocmVxKSwgdGlkLAorCQkJICAgIHVz
YmRfZXJyc3RyKGVycikpOworCisJCS8qIHdpbGwgYWZmZWN0IG90aGVyIHRyYW5zYWN0aW9ucywg
dG9vICovCisJCXVzYmRfdHJhbnNmZXJfc3RvcChzYy0+c2NfeGZlcltVTUJfSU5UUl9SWF0pOwor
CX0gZWxzZSB7CisJCURQUklOVEZOKDIsICJzZW50ICVzICh0aWQgJXUpXG4iLAorCQkgICAgdW1i
X3JlcXVlc3Qyc3RyKHJlcSksIHRpZCk7CisJCUREVU1QTigzLCBkYXRhLCBsZW4pOworCX0KKwly
ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfb3BlbihzdHJ1Y3QgdW1iX3NvZnRjICpzYykK
K3sKKwlzdHJ1Y3QgbWJpbV9oMmZfb3Blbm1zZyBtc2c7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6
ZW9mIChtc2cpKTsKKwltc2cubWF4bGVuID0gaHRvbGUzMihzYy0+c2NfY3RybF9sZW4pOworCXVt
Yl9jdHJsX21zZyhzYywgTUJJTV9PUEVOX01TRywgJm1zZywgc2l6ZW9mIChtc2cpKTsKKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY2xvc2Uoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7
CisJc3RydWN0IG1iaW1faDJmX2Nsb3NlbXNnIG1zZzsKKworCW1lbXNldCgmbXNnLCAwLCBzaXpl
b2YgKG1zZykpOworCXVtYl9jdHJsX21zZyhzYywgTUJJTV9DTE9TRV9NU0csICZtc2csIHNpemVv
ZiAobXNnKSk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9zZXRwaW4oc3RydWN0IHVtYl9zb2Z0YyAq
c2MsIGludCBvcCwgaW50IGlzX3B1aywgdm9pZCAqcGluLCBpbnQgcGlubGVuLAorICAgIHZvaWQg
Km5ld3BpbiwgaW50IG5ld3BpbmxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcGluIGNwOworCWlu
dAkgb2ZmOworCisJaWYgKHBpbmxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocGlubGVuIDwg
MCB8fCBwaW5sZW4gPiBNQklNX1BJTl9NQVhMRU4gfHwKKwkgICAgbmV3cGlubGVuIDwgMCB8fCBu
ZXdwaW5sZW4gPiBNQklNX1BJTl9NQVhMRU4gfHwKKwkgICAgb3AgPCAwIHx8IG9wID4gTUJJTV9Q
SU5fT1BfQ0hBTkdFIHx8CisJICAgIChpc19wdWsgJiYgb3AgIT0gTUJJTV9QSU5fT1BfRU5URVIp
KQorCQlyZXR1cm4gRUlOVkFMOworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mIChjcCkpOworCWNw
LnR5cGUgPSBodG9sZTMyKGlzX3B1ayA/IE1CSU1fUElOX1RZUEVfUFVLMSA6IE1CSU1fUElOX1RZ
UEVfUElOMSk7CisKKwlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbWJpbV9jaWRfcGluLCBkYXRhKTsK
KwlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9mZiwgcGluLCBwaW5sZW4sCisJ
ICAgICZjcC5waW5fb2ZmcywgJmNwLnBpbl9zaXplKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWNw
Lm9wICA9IGh0b2xlMzIob3ApOworCWlmIChuZXdwaW5sZW4pIHsKKwkJaWYgKCF1bWJfYWRkc3Ry
KCZjcCwgc2l6ZW9mIChjcCksICZvZmYsIG5ld3BpbiwgbmV3cGlubGVuLAorCQkgICAgJmNwLm5l
d3Bpbl9vZmZzLCAmY3AubmV3cGluX3NpemUpKQorCQkJcmV0dXJuIEVJTlZBTDsKKwl9IGVsc2Ug
eworCQlpZiAoKG9wID09IE1CSU1fUElOX09QX0NIQU5HRSkgfHwgaXNfcHVrKQorCQkJcmV0dXJu
IEVJTlZBTDsKKwkJaWYgKCF1bWJfYWRkc3RyKCZjcCwgc2l6ZW9mIChjcCksICZvZmYsIE5VTEws
IDAsCisJCSAgICAmY3AubmV3cGluX29mZnMsICZjcC5uZXdwaW5fc2l6ZSkpCisJCQlyZXR1cm4g
RUlOVkFMOworCX0KKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfY21kKHNjLCBNQklN
X0NJRF9QSU4sIE1CSU1fQ01ET1BfU0VULCAmY3AsIG9mZik7CisJbXR4X3VubG9jaygmc2MtPnNj
X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9zZXRkYXRhY2xhc3Mo
c3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9z
dGF0ZSByczsKKwl1aW50MzJfdAkgY2xhc3NlczsKKworCWlmIChzYy0+c2NfaW5mby5zdXBwb3J0
ZWRjbGFzc2VzID09IE1CSU1fREFUQUNMQVNTX05PTkUpCisJCXJldHVybjsKKworCW1lbXNldCgm
cnMsIDAsIHNpemVvZiAocnMpKTsKKwlycy5yZWdhY3Rpb24gPSBodG9sZTMyKE1CSU1fUkVHQUNU
SU9OX0FVVE9NQVRJQyk7CisJY2xhc3NlcyA9IHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXM7
CisJaWYgKHNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXMgIT0gTUJJTV9EQVRBQ0xBU1NfTk9O
RSkKKwkJY2xhc3NlcyAmPSBzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzOworCXJzLmRhdGFf
Y2xhc3MgPSBodG9sZTMyKGNsYXNzZXMpOworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXVt
Yl9jbWQoc2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1NFVCwgJnJzLCBz
aXplb2YgKHJzKSk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKK30KKworc3RhdGljIHZv
aWQKK3VtYl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IG9uKQoreworCXN0cnVjdCBt
YmltX2NpZF9yYWRpb19zdGF0ZSBzOworCisJRFBSSU5URigic2V0IHJhZGlvICVzXG4iLCBvbiA/
ICJvbiIgOiAib2ZmIik7CisJbWVtc2V0KCZzLCAwLCBzaXplb2YgKHMpKTsKKwlzLnN0YXRlID0g
aHRvbGUzMihvbiA/IE1CSU1fUkFESU9fU1RBVEVfT04gOiBNQklNX1JBRElPX1NUQVRFX09GRik7
CisJdW1iX2NtZChzYywgTUJJTV9DSURfUkFESU9fU1RBVEUsIE1CSU1fQ01ET1BfU0VULCAmcywg
c2l6ZW9mIChzKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfYWxsb2NhdGVfY2lkKHN0cnVjdCB1
bWJfc29mdGMgKnNjKQoreworCXVtYl9jbWQxKHNjLCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJ
TV9DTURPUF9TRVQsCisJICAgIHVtYl9xbWlfYWxsb2NfY2lkLCBzaXplb2YgKHVtYl9xbWlfYWxs
b2NfY2lkKSwgdW1iX3V1aWRfcW1pX21iaW0pOworfQorCitzdGF0aWMgdm9pZAordW1iX3NlbmRf
ZmNjX2F1dGgoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJdWludDhfdAkgZmNjYXV0aFtzaXpl
b2YgKHVtYl9xbWlfZmNjX2F1dGgpXTsKKworCWlmIChzYy0+c2NfY2lkID09IC0xKSB7CisJCURQ
UklOVEYoIm1pc3NpbmcgQ0lELCBjYW5ub3Qgc2VuZCBGQ0MgYXV0aFxuIik7CisJCXVtYl9hbGxv
Y2F0ZV9jaWQoc2MpOworCQlyZXR1cm47CisJfQorCW1lbWNweShmY2NhdXRoLCB1bWJfcW1pX2Zj
Y19hdXRoLCBzaXplb2YgKGZjY2F1dGgpKTsKKwlmY2NhdXRoW1VNQl9RTUlfQ0lEX09GRlNdID0g
c2MtPnNjX2NpZDsKKwl1bWJfY21kMShzYywgTUJJTV9DSURfREVWSUNFX0NBUFMsIE1CSU1fQ01E
T1BfU0VULAorCSAgICBmY2NhdXRoLCBzaXplb2YgKGZjY2F1dGgpLCB1bWJfdXVpZF9xbWlfbWJp
bSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0
YyAqc2MsIGludCBhdHRhY2gpCit7CisJc3RydWN0IG1iaW1fY2lkX3BhY2tldF9zZXJ2aWNlCXM7
CisKKwlEUFJJTlRGKCIlcyBwYWNrZXQgc2VydmljZVxuIiwKKwkgICAgYXR0YWNoID8gImF0dGFj
aCIgOiAiZGV0YWNoIik7CisJbWVtc2V0KCZzLCAwLCBzaXplb2YgKHMpKTsKKwlzLmFjdGlvbiA9
IGh0b2xlMzIoYXR0YWNoID8KKwkgICAgTUJJTV9QS1RTRVJWSUNFX0FDVElPTl9BVFRBQ0ggOiBN
QklNX1BLVFNFUlZJQ0VfQUNUSU9OX0RFVEFDSCk7CisJdW1iX2NtZChzYywgTUJJTV9DSURfUEFD
S0VUX1NFUlZJQ0UsIE1CSU1fQ01ET1BfU0VULCAmcywgc2l6ZW9mIChzKSk7Cit9CisKK3N0YXRp
YyB2b2lkCit1bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZu
ZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1C
SU1fUkVHU1RBVEVfUk9BTUlORyAmJiAhc2MtPnNjX3JvYW1pbmcpIHsKKwkJbG9nKExPR19JTkZP
LCAiJXM6IGNvbm5lY3Rpb24gZGlzYWJsZWQgaW4gcm9hbWluZyBuZXR3b3JrXG4iLAorCQkgICAg
REVWTkFNKHNjKSk7CisJCXJldHVybjsKKwl9CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVC
VUcpCisJCWxvZyhMT0dfREVCVUcsICIlczogY29ubmVjdGluZyAuLi5cbiIsIERFVk5BTShzYykp
OworCXVtYl9zZW5kX2Nvbm5lY3Qoc2MsIE1CSU1fQ09OTkVDVF9BQ1RJVkFURSk7Cit9CisKK3N0
YXRpYyB2b2lkCit1bWJfZGlzY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZf
REVCVUcpCisJCWxvZyhMT0dfREVCVUcsICIlczogZGlzY29ubmVjdGluZyAuLi5cbiIsIERFVk5B
TShzYykpOworCXVtYl9zZW5kX2Nvbm5lY3Qoc2MsIE1CSU1fQ09OTkVDVF9ERUFDVElWQVRFKTsK
K30KKworc3RhdGljIHZvaWQKK3VtYl9zZW5kX2Nvbm5lY3Qoc3RydWN0IHVtYl9zb2Z0YyAqc2Ms
IGludCBjb21tYW5kKQoreworCXN0cnVjdCBtYmltX2NpZF9jb25uZWN0ICpjOworCWludAkgb2Zm
OworCisJLyogVG9vIGxhcmdlIGZvciB0aGUgc3RhY2sgKi8KKwltdHhfdW5sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworCWMgPSBtYWxsb2Moc2l6ZW9mICgqYyksIE1fTUJJTV9DSURfQ09OTkVDVCwgTV9X
QUlUT0sgfCBNX1pFUk8pOworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCWMtPnNlc3Npb25p
ZCA9IGh0b2xlMzIodW1iX3Nlc3Npb25faWQpOworCWMtPmNvbW1hbmQgPSBodG9sZTMyKGNvbW1h
bmQpOworCW9mZiA9IG9mZnNldG9mKHN0cnVjdCBtYmltX2NpZF9jb25uZWN0LCBkYXRhKTsKKwlp
ZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZvLmFwbiwKKwkg
ICAgc2MtPnNjX2luZm8uYXBubGVuLCAmYy0+YWNjZXNzX29mZnMsICZjLT5hY2Nlc3Nfc2l6ZSkp
CisJCWdvdG8gZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9mICgqYyksICZvZmYsIHNj
LT5zY19pbmZvLnVzZXJuYW1lLAorCSAgICBzYy0+c2NfaW5mby51c2VybmFtZWxlbiwgJmMtPnVz
ZXJfb2ZmcywgJmMtPnVzZXJfc2l6ZSkpCisJCWdvdG8gZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIo
Yywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZvLnBhc3N3b3JkLAorCSAgICBzYy0+c2Nf
aW5mby5wYXNzd29yZGxlbiwgJmMtPnBhc3N3ZF9vZmZzLCAmYy0+cGFzc3dkX3NpemUpKQorCQln
b3RvIGRvbmU7CisJYy0+YXV0aHByb3QgPSBodG9sZTMyKE1CSU1fQVVUSFBST1RfTk9ORSk7CisJ
Yy0+Y29tcHJlc3Npb24gPSBodG9sZTMyKE1CSU1fQ09NUFJFU1NJT05fTk9ORSk7CisJYy0+aXB0
eXBlID0gaHRvbGUzMihNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjQpOworCW1lbWNweShjLT5jb250
ZXh0LCB1bWJfdXVpZF9jb250ZXh0X2ludGVybmV0LCBzaXplb2YgKGMtPmNvbnRleHQpKTsKKwl1
bWJfY21kKHNjLCBNQklNX0NJRF9DT05ORUNULCBNQklNX0NNRE9QX1NFVCwgYywgb2ZmKTsKK2Rv
bmU6CisJZnJlZShjLCBNX01CSU1fQ0lEX0NPTk5FQ1QpOworCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3VtYl9xcnlfaXBjb25maWcoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0
IG1iaW1fY2lkX2lwX2NvbmZpZ3VyYXRpb25faW5mbyBpcGM7CisKKwltZW1zZXQoJmlwYywgMCwg
c2l6ZW9mIChpcGMpKTsKKwlpcGMuc2Vzc2lvbmlkID0gaHRvbGUzMih1bWJfc2Vzc2lvbl9pZCk7
CisJdW1iX2NtZChzYywgTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTiwgTUJJTV9DTURPUF9RUlks
CisJICAgICZpcGMsIHNpemVvZiAoaXBjKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY21kKHN0
cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgY2lkLCBpbnQgb3AsIGNvbnN0IHZvaWQgKmRhdGEsIGlu
dCBsZW4pCit7CisJdW1iX2NtZDEoc2MsIGNpZCwgb3AsIGRhdGEsIGxlbiwgdW1iX3V1aWRfYmFz
aWNfY29ubmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY21kMShzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgaW50IGNpZCwgaW50IG9wLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLAorICAgIHVp
bnQ4X3QgKnV1aWQpCit7CisJc3RydWN0IG1iaW1faDJmX2NtZCAqY21kOworCWludAl0b3RsZW47
CisKKwkvKiBYWFggRklYTUUgc3VwcG9ydCBzZW5kaW5nIGZyYWdtZW50cyAqLworCWlmIChzaXpl
b2YgKCpjbWQpICsgbGVuID4gc2MtPnNjX2N0cmxfbGVuKSB7CisJCURQUklOVEYoInNldCAlcyBt
c2cgdG9vIGxvbmc6IGNhbm5vdCBzZW5kXG4iLAorCQkgICAgdW1iX2NpZDJzdHIoY2lkKSk7CisJ
CXJldHVybjsKKwl9CisJY21kID0gc2MtPnNjX2N0cmxfbXNnOworCW1lbXNldChjbWQsIDAsIHNp
emVvZiAoKmNtZCkpOworCWNtZC0+ZnJhZy5uZnJhZyA9IGh0b2xlMzIoMSk7CisJbWVtY3B5KGNt
ZC0+ZGV2aWQsIHV1aWQsIHNpemVvZiAoY21kLT5kZXZpZCkpOworCWNtZC0+Y2lkID0gaHRvbGUz
MihjaWQpOworCWNtZC0+b3AgPSBodG9sZTMyKG9wKTsKKwljbWQtPmluZm9sZW4gPSBodG9sZTMy
KGxlbik7CisJdG90bGVuID0gc2l6ZW9mICgqY21kKTsKKwlpZiAobGVuID4gMCkgeworCQltZW1j
cHkoY21kICsgMSwgZGF0YSwgbGVuKTsKKwkJdG90bGVuICs9IGxlbjsKKwl9CisJdW1iX2N0cmxf
bXNnKHNjLCBNQklNX0NPTU1BTkRfTVNHLCBjbWQsIHRvdGxlbik7Cit9CisKK3N0YXRpYyB2b2lk
Cit1bWJfY29tbWFuZF9kb25lKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQg
bGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9jbWRkb25lICpjbWQgPSBkYXRhOworCXN0cnVjdCBp
Zm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IGNp
ZDsKKwl1aW50MzJfdCBpbmZvbGVuOworCWludAkgcW1pbXNnID0gMDsKKworCWlmIChsZW4gPCBz
aXplb2YgKCpjbWQpKSB7CisJCURQUklOVEYoImRpc2NhcmQgc2hvcnQgJXMgbWVzc2FnZVxuIiwK
KwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKGNtZC0+aGRyLnR5cGUpKSk7CisJCXJldHVy
bjsKKwl9CisJY2lkID0gbGUzMnRvaChjbWQtPmNpZCk7CisJaWYgKG1lbWNtcChjbWQtPmRldmlk
LCB1bWJfdXVpZF9iYXNpY19jb25uZWN0LCBzaXplb2YgKGNtZC0+ZGV2aWQpKSkgeworCQlpZiAo
bWVtY21wKGNtZC0+ZGV2aWQsIHVtYl91dWlkX3FtaV9tYmltLAorCQkgICAgc2l6ZW9mIChjbWQt
PmRldmlkKSkpIHsKKwkJCURQUklOVEYoImRpc2NhcmQgJXMgbWVzc2FnZSBmb3Igb3RoZXIgVVVJ
RCAnJXMnXG4iLAorCQkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKGNtZC0+aGRyLnR5cGUp
KSwKKwkJCSAgICB1bWJfdXVpZDJzdHIoY21kLT5kZXZpZCkpOworCQkJcmV0dXJuOworCQl9IGVs
c2UKKwkJCXFtaW1zZyA9IDE7CisJfQorCisJc3RhdHVzID0gbGUzMnRvaChjbWQtPnN0YXR1cyk7
CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIE1CSU1fU1RBVFVTX1NVQ0NFU1M6CisJCWJyZWFr
OworCWNhc2UgTUJJTV9TVEFUVVNfTk9UX0lOSVRJQUxJWkVEOgorCQlpZiAoaWZwLT5pZl9mbGFn
cyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfRVJSLCAiJXM6IFNJTSBub3QgaW5pdGlhbGl6ZWQg
KFBJTiBtaXNzaW5nKVxuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJcmV0dXJuOworCWNhc2Ug
TUJJTV9TVEFUVVNfUElOX1JFUVVJUkVEOgorCQlzYy0+c2NfaW5mby5waW5fc3RhdGUgPSBVTUJf
UElOX1JFUVVJUkVEOworCQkvKkZBTExUSFJPVUdIKi8KKwlkZWZhdWx0OgorCQlpZiAoaWZwLT5p
Zl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfRVJSLCAiJXM6IHNldC9xcnkgJXMgZmFp
bGVkOiAlc1xuIiwgREVWTkFNKHNjKSwKKwkJCSAgICB1bWJfY2lkMnN0cihjaWQpLCB1bWJfc3Rh
dHVzMnN0cihzdGF0dXMpKTsKKwkJcmV0dXJuOworCX0KKworCWluZm9sZW4gPSBsZTMydG9oKGNt
ZC0+aW5mb2xlbik7CisJaWYgKGxlbiA8IHNpemVvZiAoKmNtZCkgKyBpbmZvbGVuKSB7CisJCURQ
UklOVEYoImRpc2NhcmQgdHJ1bmNhdGVkICVzIG1lc3NhZ2UgKHdhbnQgJWQsIGdvdCAlZClcbiIs
CisJCSAgICB1bWJfY2lkMnN0cihjaWQpLAorCQkgICAgKGludClzaXplb2YgKCpjbWQpICsgaW5m
b2xlbiwgbGVuKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocW1pbXNnKSB7CisJCWlmIChzYy0+c2Nf
ZmxhZ3MgJiBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQpCisJCQl1bWJfZGVjb2RlX3FtaShzYywg
Y21kLT5pbmZvLCBpbmZvbGVuKTsKKwl9IGVsc2UgeworCQlEUFJJTlRGTigyLCAic2V0L3FyeSAl
cyBkb25lXG4iLAorCQkgICAgdW1iX2NpZDJzdHIoY2lkKSk7CisJCXVtYl9kZWNvZGVfY2lkKHNj
LCBjaWQsIGNtZC0+aW5mbywgaW5mb2xlbik7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2Rl
Y29kZV9jaWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQzMl90IGNpZCwgdm9pZCAqZGF0YSwg
aW50IGxlbikKK3sKKwlpbnQJIG9rID0gMTsKKworCXN3aXRjaCAoY2lkKSB7CisJY2FzZSBNQklN
X0NJRF9ERVZJQ0VfQ0FQUzoKKwkJb2sgPSB1bWJfZGVjb2RlX2RldmljZXNfY2FwcyhzYywgZGF0
YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRV
UzoKKwkJb2sgPSB1bWJfZGVjb2RlX3N1YnNjcmliZXJfc3RhdHVzKHNjLCBkYXRhLCBsZW4pOwor
CQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX1JBRElPX1NUQVRFOgorCQlvayA9IHVtYl9kZWNvZGVf
cmFkaW9fc3RhdGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUElO
OgorCQlvayA9IHVtYl9kZWNvZGVfcGluKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNl
IE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFOgorCQlvayA9IHVtYl9kZWNvZGVfcmVnaXN0ZXJfc3Rh
dGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUEFDS0VUX1NFUlZJ
Q0U6CisJCW9rID0gdW1iX2RlY29kZV9wYWNrZXRfc2VydmljZShzYywgZGF0YSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NJRF9TSUdOQUxfU1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9z
aWduYWxfc3RhdGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfQ09O
TkVDVDoKKwkJb2sgPSB1bWJfZGVjb2RlX2Nvbm5lY3RfaW5mbyhzYywgZGF0YSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OOgorCQlvayA9IHVtYl9kZWNv
ZGVfaXBfY29uZmlndXJhdGlvbihzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJLyoKKwkJICogTm90ZTogdGhlIGFib3ZlIGxpc3QgaXMgaW5jb21wbGV0ZSBhbmQgb25seSBj
b250YWlucworCQkgKgltYW5kYXRvcnkgQ0lEcyBmcm9tIHRoZSBCQVNJQ19DT05ORUNUIHNldC4K
KwkJICoJU28gYWx0ZXJuYXRlIHZhbHVlcyBhcmUgbm90IHVudXN1YWwuCisJCSAqLworCQlEUFJJ
TlRGTig0LCAiaWdub3JlICVzXG4iLCB1bWJfY2lkMnN0cihjaWQpKTsKKwkJYnJlYWs7CisJfQor
CWlmICghb2spCisJCURQUklOVEYoImRpc2NhcmQgJXMgd2l0aCBiYWQgaW5mbyBsZW5ndGggJWRc
biIsCisJCSAgICB1bWJfY2lkMnN0cihjaWQpLCBsZW4pOworCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3VtYl9kZWNvZGVfcW1pKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB1aW50OF90ICpkYXRh
LCBpbnQgbGVuKQoreworCXVpbnQ4X3QJc3J2OworCXVpbnQxNl90IG1zZywgdGx2bGVuOworCXVp
bnQzMl90IHZhbDsKKworI2RlZmluZSBVTUJfUU1JX1FNVVhMRU4JCTYKKwlpZiAobGVuIDwgVU1C
X1FNSV9RTVVYTEVOKQorCQlnb3RvIHRvb3Nob3J0OworCisJc3J2ID0gZGF0YVs0XTsKKwlkYXRh
ICs9IFVNQl9RTUlfUU1VWExFTjsKKwlsZW4gLT0gVU1CX1FNSV9RTVVYTEVOOworCisjZGVmaW5l
IFVNQl9HRVQxNihwKQkoKHVpbnQxNl90KSpwIHwgKHVpbnQxNl90KSoocCArIDEpIDw8IDgpCisj
ZGVmaW5lIFVNQl9HRVQzMihwKQkoKHVpbnQzMl90KSpwIHwgKHVpbnQzMl90KSoocCArIDEpIDw8
IDggfCBcCisJCQkgICAgKHVpbnQzMl90KSoocCArIDIpIDw8IDE2IHwodWludDMyX3QpKihwICsg
MykgPDwgMjQpCisJc3dpdGNoIChzcnYpIHsKKwljYXNlIDA6CS8qIGN0bCAqLworI2RlZmluZSBV
TUJfUU1JX0NUTExFTgkJNgorCQlpZiAobGVuIDwgVU1CX1FNSV9DVExMRU4pCisJCQlnb3RvIHRv
b3Nob3J0OworCQltc2cgPSBVTUJfR0VUMTYoJmRhdGFbMl0pOworCQl0bHZsZW4gPSBVTUJfR0VU
MTYoJmRhdGFbNF0pOworCQlkYXRhICs9IFVNQl9RTUlfQ1RMTEVOOworCQlsZW4gLT0gVU1CX1FN
SV9DVExMRU47CisJCWJyZWFrOworCWNhc2UgMjoJLyogZG1zICAqLworI2RlZmluZSBVTUJfUU1J
X0RNU0xFTgkJNworCQlpZiAobGVuIDwgVU1CX1FNSV9ETVNMRU4pCisJCQlnb3RvIHRvb3Nob3J0
OworCQltc2cgPSBVTUJfR0VUMTYoJmRhdGFbM10pOworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRh
dGFbNV0pOworCQlkYXRhICs9IFVNQl9RTUlfRE1TTEVOOworCQlsZW4gLT0gVU1CX1FNSV9ETVNM
RU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoImRpc2NhcmQgUU1JIG1lc3NhZ2Ug
Zm9yIHVua25vd24gc2VydmljZSB0eXBlICVkXG4iLAorCQkgICAgc3J2KTsKKwkJcmV0dXJuOwor
CX0KKworCWlmIChsZW4gPCB0bHZsZW4pCisJCWdvdG8gdG9vc2hvcnQ7CisKKyNkZWZpbmUgVU1C
X1FNSV9UTFZMRU4JCTMKKwl3aGlsZSAobGVuID4gMCkgeworCQlpZiAobGVuIDwgVU1CX1FNSV9U
TFZMRU4pCisJCQlnb3RvIHRvb3Nob3J0OworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFbMV0p
OworCQlpZiAobGVuIDwgVU1CX1FNSV9UTFZMRU4gKyB0bHZsZW4pCisJCQlnb3RvIHRvb3Nob3J0
OworCQlzd2l0Y2ggKGRhdGFbMF0pIHsKKwkJY2FzZSAxOgkvKiBhbGxvY2F0aW9uIGluZm8gKi8K
KwkJCWlmIChtc2cgPT0gMHgwMDIyKSB7CS8qIEFsbG9jYXRlIENJRCAqLworCQkJCWlmICh0bHZs
ZW4gIT0gMiB8fCBkYXRhWzNdICE9IDIpIC8qIGRtcyAqLworCQkJCQlicmVhazsKKwkJCQlzYy0+
c2NfY2lkID0gZGF0YVs0XTsKKwkJCQlEUFJJTlRGKCJRTUkgQ0lEICVkIGFsbG9jYXRlZFxuIiwK
KwkJCQkgICAgc2MtPnNjX2NpZCk7CisJCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19DSUQsIFVN
Ql9OU19ET05UX0RST1ApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoJLyogcmVzcG9uc2Ug
Ki8KKwkJCWlmICh0bHZsZW4gIT0gc2l6ZW9mICh2YWwpKQorCQkJCWJyZWFrOworCQkJdmFsID0g
VU1CX0dFVDMyKCZkYXRhWzNdKTsKKwkJCXN3aXRjaCAobXNnKSB7CisJCQljYXNlIDB4MDAyMjoJ
LyogQWxsb2NhdGUgQ0lEICovCisJCQkJaWYgKHZhbCAhPSAwKSB7CisJCQkJCWxvZyhMT0dfRVJS
LCAiJXM6IGFsbG9jYXRpb24gb2YgUU1JIENJRCIKKwkJCQkJICAgICIgZmFpbGVkLCBlcnJvciAw
eCV4XG4iLCBERVZOQU0oc2MpLAorCQkJCQkgICAgdmFsKTsKKwkJCQkJLyogWFhYIGhvdyB0byBw
cm9jZWVkPyAqLworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAweDU1
NWY6CS8qIFNlbmQgRkNDIEF1dGhlbnRpY2F0aW9uICovCisJCQkJaWYgKHZhbCA9PSAwKQorCQkJ
CQlEUFJJTlRGKCIlczogc2VuZCBGQ0MgIgorCQkJCQkgICAgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nl
ZWRlZFxuIiwKKwkJCQkJICAgIERFVk5BTShzYykpOworCQkJCWVsc2UgaWYgKHZhbCA9PSAweDAw
MWEwMDAxKQorCQkJCQlEUFJJTlRGKCIlczogRkNDIEF1dGhlbnRpY2F0aW9uICIKKwkJCQkJICAg
ICJub3QgcmVxdWlyZWRcbiIsIERFVk5BTShzYykpOworCQkJCWVsc2UKKwkJCQkJbG9nKExPR19J
TkZPLCAiJXM6IHNlbmQgRkNDICIKKwkJCQkJICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQsICIK
KwkJCQkJICAgICJlcnJvciAweCV4XG4iLCBERVZOQU0oc2MpLCB2YWwpOworCisJCQkJLyogRkND
IEF1dGggaXMgbmVlZGVkIG9ubHkgb25jZSBhZnRlciBwb3dlci1vbiovCisJCQkJc2MtPnNjX2Zs
YWdzICY9IH5VTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQ7CisKKwkJCQkvKiBUcnkgdG8gcHJvY2Vl
ZCBhbnl3YXkgKi8KKwkJCQlEUFJJTlRGKCJpbml0OiB0dXJuaW5nIHJhZGlvIG9uIC4uLlxuIik7
CisJCQkJdW1iX3JhZGlvKHNjLCAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJl
YWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWRhdGEg
Kz0gVU1CX1FNSV9UTFZMRU4gKyB0bHZsZW47CisJCWxlbiAtPSBVTUJfUU1JX1RMVkxFTiArIHRs
dmxlbjsKKwl9CisJcmV0dXJuOworCit0b29zaG9ydDoKKwlEUFJJTlRGKCJkaXNjYXJkIHNob3J0
IFFNSSBtZXNzYWdlXG4iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaW50cihz
dHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIHVzYl9lcnJvcl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdW1i
X3NvZnRjICpzYyA9IHVzYmRfeGZlcl9zb2Z0Yyh4ZmVyKTsKKwlzdHJ1Y3QgdXNiX2NkY19ub3Rp
ZmljYXRpb24gbm90aWZpY2F0aW9uOworCXN0cnVjdCB1c2JfcGFnZV9jYWNoZSAqcGM7CisJc3Ry
dWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlpbnQJIHRvdGFsX2xlbjsKKworCW10eF9h
c3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJLyogRklYTUUgdXNlIGFjdGxlbiBv
ciB0b3RhbF9sZW4/ICovCisJdXNiZF94ZmVyX3N0YXR1cyh4ZmVyLCAmdG90YWxfbGVuLCBOVUxM
LCBOVUxMLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2Ug
VVNCX1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJSZWNlaXZlZCAlZCBieXRlc1xuIiwgdG90
YWxfbGVuKTsKKworCQlpZiAodG90YWxfbGVuIDwgVUNEQ19OT1RJRklDQVRJT05fTEVOR1RIKSB7
CisJCQlEUFJJTlRGKCJzaG9ydCBub3RpZmljYXRpb24gKCVkPCVkKVxuIiwKKwkJCQkJdG90YWxf
bGVuLCBVQ0RDX05PVElGSUNBVElPTl9MRU5HVEgpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGMg
PSB1c2JkX3hmZXJfZ2V0X2ZyYW1lKHhmZXIsIDApOworCQl1c2JkX2NvcHlfb3V0KHBjLCAwLCAm
bm90aWZpY2F0aW9uLCBzaXplb2YgKG5vdGlmaWNhdGlvbikpOworCisJCWlmIChub3RpZmljYXRp
b24uYm1SZXF1ZXN0VHlwZSAhPSBVQ0RDX05PVElGSUNBVElPTikgeworCQkJRFBSSU5URigidW5l
eHBlY3RlZCBub3RpZmljYXRpb24gKHR5cGU9MHglMDJ4KVxuIiwKKwkJCQkJbm90aWZpY2F0aW9u
LmJtUmVxdWVzdFR5cGUpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3dpdGNoIChub3RpZmljYXRp
b24uYk5vdGlmaWNhdGlvbikgeworCQljYXNlIFVDRENfTl9ORVRXT1JLX0NPTk5FQ1RJT046CisJ
CQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCQlsb2coTE9HX0RFQlVHLCAiJXM6
IG5ldHdvcmsgJXNjb25uZWN0ZWRcbiIsCisJCQkJCQlERVZOQU0oc2MpLAorCQkJCQkJVUdFVFco
bm90aWZpY2F0aW9uLndWYWx1ZSkKKwkJCQkJCT8gIiIgOiAiZGlzIik7CisJCQlicmVhazsKKwkJ
Y2FzZSBVQ0RDX05fUkVTUE9OU0VfQVZBSUxBQkxFOgorCQkJRFBSSU5URk4oMiwgInVtYl9pbnRy
OiByZXNwb25zZSBhdmFpbGFibGVcbiIpOworCQkJKytzYy0+c2NfbnJlc3A7CisJCQl1bWJfYWRk
X3Rhc2soc2MsIHVtYl9nZXRfcmVzcG9uc2VfdGFzaywKKwkJCQkJJnNjLT5zY19wcm9jX2dldF9y
ZXNwb25zZV90YXNrWzBdLmhkciwKKwkJCQkJJnNjLT5zY19wcm9jX2dldF9yZXNwb25zZV90YXNr
WzFdLmhkciwKKwkJCQkJMCk7CisJCQlicmVhazsKKwkJY2FzZSBVQ0RDX05fQ09OTkVDVElPTl9T
UEVFRF9DSEFOR0U6CisJCQlEUFJJTlRGTigyLCAidW1iX2ludHI6IGNvbm5lY3Rpb24gc3BlZWQg
Y2hhbmdlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoInVuZXhwZWN0
ZWQgbm90aWZpY2F0aW9uICgweCUwMngpXG4iLAorCQkJCQlub3RpZmljYXRpb24uYk5vdGlmaWNh
dGlvbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgVVNCX1NU
X1NFVFVQOgordHJfc2V0dXA6CisJCXVzYmRfeGZlcl9zZXRfZnJhbWVfbGVuKHhmZXIsIDAsIHVz
YmRfeGZlcl9tYXhfbGVuKHhmZXIpKTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsK
KwkJCS8qIHN0YXJ0IGNsZWFyIHN0YWxsICovCisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIp
OworCQkJZ290byB0cl9zZXR1cDsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBEaWFn
bm9zdGljIHJvdXRpbmVzCisgKi8KK3N0YXRpYyBjaGFyICoKK3VtYl9udG9wKHN0cnVjdCBzb2Nr
YWRkciAqc2EpCit7CisjZGVmaW5lIE5VTUJVRlMJCTQKKwlzdGF0aWMgY2hhciBhc3RyW05VTUJV
RlNdW0lORVRfQUREUlNUUkxFTl07CisJc3RhdGljIHVuc2lnbmVkIG5idWYgPSAwOworCWNoYXIJ
KnM7CisKKwlzID0gYXN0cltuYnVmKytdOworCWlmIChuYnVmID49IE5VTUJVRlMpCisJCW5idWYg
PSAwOworCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCWRlZmF1
bHQ6CisJCWluZXRfbnRvcChBRl9JTkVULCAmc2F0b3NpbihzYSktPnNpbl9hZGRyLCBzLCBzaXpl
b2YgKGFzdHJbMF0pKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaW5ldF9udG9wKEFG
X0lORVQ2LCAmc2F0b3NpbjYoc2EpLT5zaW42X2FkZHIsIHMsCisJCSAgICBzaXplb2YgKGFzdHJb
MF0pKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzOworfQorCisjaWZkZWYgVU1CX0RFQlVHCitz
dGF0aWMgY2hhciAqCit1bWJfdXVpZDJzdHIodWludDhfdCB1dWlkW01CSU1fVVVJRF9MRU5dKQor
eworCXN0YXRpYyBjaGFyIHV1aWRzdHJbMiAqIE1CSU1fVVVJRF9MRU4gKyA1XTsKKworI2RlZmlu
ZSBVVUlEX0JGTVQJIiUwMlgiCisjZGVmaW5lIFVVSURfU0VQCSItIgorCXNucHJpbnRmKHV1aWRz
dHIsIHNpemVvZiAodXVpZHN0ciksCisJICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1U
IFVVSURfQkZNVCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJ
ICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAKKwkgICAgVVVJRF9CRk1UIFVVSURfQkZN
VCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQg
VVVJRF9CRk1UIFVVSURfQkZNVCwKKwkgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVp
ZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwKKwkgICAgdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwg
dXVpZFs5XSwgdXVpZFsxMF0sIHV1aWRbMTFdLAorCSAgICB1dWlkWzEyXSwgdXVpZFsxM10sIHV1
aWRbMTRdLCB1dWlkWzE1XSk7CisJcmV0dXJuIHV1aWRzdHI7Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfZHVtcCh2b2lkICpidWYsIGludCBsZW4pCit7CisJaW50CSBpID0gMDsKKwl1aW50OF90CSpj
ID0gYnVmOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm47CisJd2hpbGUgKGkgPCBsZW4pIHsK
KwkJaWYgKChpICUgMTYpID09IDApIHsKKwkJCWlmIChpID4gMCkKKwkJCQlsb2coTE9HX0RFQlVH
LCAiXG4iKTsKKwkJCWxvZyhMT0dfREVCVUcsICIlNGQ6ICAiLCBpKTsKKwkJfQorCQlsb2coTE9H
X0RFQlVHLCAiICUwMngiLCAqYyk7CisJCWMrKzsKKwkJaSsrOworCX0KKwlsb2coTE9HX0RFQlVH
LCAiXG4iKTsKK30KKyNlbmRpZiAvKiBVTUJfREVCVUcgKi8KKworRFJJVkVSX01PRFVMRSh1bWIs
IHVodWIsIHVtYl9kcml2ZXIsIE5VTEwsIE5VTEwpOworTU9EVUxFX0RFUEVORCh1bWIsIHVzYiwg
MSwgMSwgMSk7CmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmggYi9zeXMv
ZGV2L3VzYi9uZXQvaWZfdW1icmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5hMTM0YTMwNzM0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQv
aWZfdW1icmVnLmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qCSRPcGVuQlNEOiBpZl91bWIuaCx2IDEu
NCAyMDE3LzA0LzE4IDEzOjI3OjU1IGdlcmhhcmQgRXhwICQgKi8KKworLyoKKyAqIE9yaWdpbmFs
IGNvcHlyaWdodCAoYykgMjAxNiBnZW51YSBtYkggKE9wZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQ
ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3
YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3Jh
bnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
aXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBX
QVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwg
SU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUws
IERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF
UworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9G
SVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig
T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMjIgQURJU1RBIFNBUyAocmUtd3JpdGUgZm9yIEZyZWVCU0QpCisgKgor
ICogUmUtd3JpdGUgZm9yIEZyZWVCU0QgYnkgUGllcnJlIFByb25jaGVyeSA8cGllcnJlQGRlZm9y
YS5uZXQ+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAt
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVy
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyAqIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsCisgKiBodHRwOi8vd3d3
LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEu
MC5wZGYKKyAqLworCitzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHsKKwlpbnQJCSB2YWw7CisJY2hhciBj
b25zdAkqZGVzY3I7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqCit1bWJfdmFsMmRlc2NyKGNv
bnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgKnZkcCwgaW50IHZhbCkKK3sKKwlzdGF0aWMgY2hhciBz
dmFsWzMyXTsKKworCXdoaWxlICh2ZHAtPmRlc2NyICE9IE5VTEwpIHsKKwkJaWYgKHZkcC0+dmFs
ID09IHZhbCkKKwkJCXJldHVybiB2ZHAtPmRlc2NyOworCQl2ZHArKzsKKwl9CisJc25wcmludGYo
c3ZhbCwgc2l6ZW9mIChzdmFsKSwgIiMlZCIsIHZhbCk7CisJcmV0dXJuIHN2YWw7Cit9CisKKyNk
ZWZpbmUgTUJJTV9SRUdTVEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBNQklNX1JFR1NUQVRF
X1VOS05PV04sCSJ1bmtub3duIiB9LAkJXAorCXsgTUJJTV9SRUdTVEFURV9ERVJFR0lTVEVSRUQs
CSJub3QgcmVnaXN0ZXJlZCIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9TRUFSQ0hJTkcsCSJzZWFy
Y2hpbmciIH0sCQlcCisJeyBNQklNX1JFR1NUQVRFX0hPTUUsCQkiaG9tZSBuZXR3b3JrIiB9LAlc
CisJeyBNQklNX1JFR1NUQVRFX1JPQU1JTkcsCSJyb2FtaW5nIG5ldHdvcmsiIH0sCVwKKwl7IE1C
SU1fUkVHU1RBVEVfUEFSVE5FUiwJInBhcnRuZXIgbmV0d29yayIgfSwJXAorCXsgTUJJTV9SRUdT
VEFURV9ERU5JRUQsCQkiYWNjZXNzIGRlbmllZCIgfSwJXAorCXsgMCwgTlVMTCB9IH0KKworI2Rl
ZmluZSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlMgewkJCQkJXAorCXsgTUJJTV9EQVRBQ0xB
U1NfTk9ORSwJCQkJIm5vbmUiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0dQUlMsCQkJCSJHUFJT
IiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19FREdFLAkJCQkiRURHRSIgfSwJXAorCXsgTUJJTV9E
QVRBQ0xBU1NfVU1UUywJCQkJIlVNVFMiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0hTRFBBLAkJ
CQkiSFNEUEEiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0hTVVBBLAkJCQkiSFNVUEEiIH0sCVwK
Kwl7IE1CSU1fREFUQUNMQVNTX0hTRFBBfE1CSU1fREFUQUNMQVNTX0hTVVBBLAkiSFNQQSIgfSwJ
XAorCXsgTUJJTV9EQVRBQ0xBU1NfTFRFLAkJCQkiTFRFIiB9LAlcCisJeyBNQklNX0RBVEFDTEFT
U18xWFJUVCwJCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRE8sCQkJ
IkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRE9fUkVWX0EsCQkJIkNETUEy
MDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRFYsCQkJIkNETUEyMDAwIiB9LAlcCisJ
eyBNQklNX0RBVEFDTEFTU18zWFJUVCwJCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFD
TEFTU18xWEVWRE9fUkVWX0IsCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19V
TUIsCQkJCSJDRE1BMjAwMCIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfQ1VTVE9NLAkJCSJjdXN0
b20iIH0sCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV8xVE8xX0RFU0NSSVBUSU9O
KG0pCXsgKG0pLCAjbSB9CisjZGVmaW5lIE1CSU1fTUVTU0FHRVNfREVTQ1JJUFRJT05TIHsJCQkJ
XAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX09QRU5fTVNHKSwJCQlcCisJTUJJTV8xVE8x
X0RFU0NSSVBUSU9OKE1CSU1fQ0xPU0VfTVNHKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9O
KE1CSU1fQ09NTUFORF9NU0cpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0hPU1Rf
RVJST1JfTVNHKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9PUEVOX0RPTkUpLAkJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DTE9TRV9ET05FKSwJCQlcCisJTUJJTV8x
VE8xX0RFU0NSSVBUSU9OKE1CSU1fQ09NTUFORF9ET05FKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9GVU5DVElPTl9FUlJPUl9NU0cpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElP
TihNQklNX0lORElDQVRFX1NUQVRVU19NU0cpLAlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5l
IE1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKG0pCXsgTUJJTV9TVEFUVVNfICMjIG0sICNtIH0KKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfREVTQ1JJUFRJT05TIHsJCQkJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihTVUNDRVNTKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEJVU1kpLAkJ
CQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEZBSUxVUkUpLAkJCQlcCisJTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04oU0lNX05PVF9JTlNFUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKEJBRF9TSU0pLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUElOX1JFUVVJ
UkVEKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBJTl9ESVNBQkxFRCksCQkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT1RfUkVHSVNURVJFRCksCQkJXAorCU1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKFBST1ZJREVSU19OT1RfRk9VTkQpLAkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihOT19ERVZJQ0VfU1VQUE9SVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKFBST1ZJREVSX05PVF9WSVNJQkxFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04o
REFUQV9DTEFTU19OT1RfQVZBSUxBQkxFKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihQ
QUNLRVRfU0VSVklDRV9ERVRBQ0hFRCksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTUFY
X0FDVElWQVRFRF9DT05URVhUUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTk9UX0lO
SVRJQUxJWkVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oVk9JQ0VfQ0FMTF9JTl9Q
Uk9HUkVTUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQ09OVEVYVF9OT1RfQUNUSVZB
VEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU0VSVklDRV9OT1RfQUNUSVZBVEVE
KSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9BQ0NFU1NfU1RSSU5HKSwJ
CQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9VU0VSX05BTUVfUFdEKSwJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUkFESU9fUE9XRVJfT0ZGKSwJCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9QQVJBTUVURVJTKSwJCQlcCisJTUJJTV9TVEFUVVNf
REVTQ1JJUFRJT04oUkVBRF9GQUlMVVJFKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9O
KFdSSVRFX0ZBSUxVUkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTk9fUEhPTkVC
T09LKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBBUkFNRVRFUl9UT09fTE9ORyks
CQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNUS19CVVNZKSwJCQkJXAorCU1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKE9QRVJBVElPTl9OT1RfQUxMT1dFRCksCQkJXAorCU1CSU1fU1RBVFVT
X0RFU0NSSVBUSU9OKE1FTU9SWV9GQUlMVVJFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04oSU5WQUxJRF9NRU1PUllfSU5ERVgpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihN
RU1PUllfRlVMTCksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihGSUxURVJfTk9UX1NV
UFBPUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKERTU19JTlNUQU5DRV9MSU1J
VCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKElOVkFMSURfREVWSUNFX1NFUlZJQ0Vf
T1BFUkFUSU9OKSwJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhfSU5DT1JSRUNUX0FV
VE4pLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihBVVRIX1NZTkNfRkFJTFVSRSksCQkJ
XAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhfQU1GX05PVF9TRVQpLAkJCVwKKwlNQklN
X1NUQVRVU19ERVNDUklQVElPTihDT05URVhUX05PVF9TVVBQT1JURUQpLAkJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihTTVNfVU5LTk9XTl9TTVNDX0FERFJFU1MpLAkJXAorCU1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKFNNU19ORVRXT1JLX1RJTUVPVVQpLAkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihTTVNfTEFOR19OT1RfU1VQUE9SVEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihTTVNfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCksCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oU01TX0ZPUk1BVF9OT1RfU1VQUE9SVEVEKSwJCVwKKwl7IDAsIE5VTEwgfSB9CisK
KyNkZWZpbmUgTUJJTV9FUlJPUl9ERVNDUklQVElPTihtKQl7IE1CSU1fRVJST1JfICMjIG0sICNt
IH0KKyNkZWZpbmUgTUJJTV9FUlJPUl9ERVNDUklQVElPTlMgewkJCQkJXAorCU1CSU1fRVJST1Jf
REVTQ1JJUFRJT04oVElNRU9VVF9GUkFHTUVOVCksCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJ
T04oRlJBR01FTlRfT1VUX09GX1NFUVVFTkNFKSwJCVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9O
KExFTkdUSF9NSVNNQVRDSCksCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oRFVQTElDQVRF
RF9USUQpLAkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihOT1RfT1BFTkVEKSwJCQkJXAor
CU1CSU1fRVJST1JfREVTQ1JJUFRJT04oVU5LTk9XTiksCQkJCVwKKwlNQklNX0VSUk9SX0RFU0NS
SVBUSU9OKENBTkNFTCksCQkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihNQVhfVFJBTlNG
RVIpLAkJCQlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fQ0lEX0RFU0NSSVBUSU9O
UyB7CQkJCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9ERVZJQ0VfQ0FQUyks
CQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NU
QVRVUyksCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUkFESU9fU1RBVEUpLAkJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUElOKSwJCQkJXAorCU1CSU1fMVRP
MV9ERVNDUklQVElPTihNQklNX0NJRF9QSU5fTElTVCksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQ
VElPTihNQklNX0NJRF9IT01FX1BST1ZJREVSKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9O
KE1CSU1fQ0lEX1BSRUZFUlJFRF9QUk9WSURFUlMpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElP
TihNQklNX0NJRF9WSVNJQkxFX1BST1ZJREVSUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9O
KE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1C
SU1fQ0lEX1BBQ0tFVF9TRVJWSUNFKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1f
Q0lEX1NJR05BTF9TVEFURSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9D
T05ORUNUKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BST1ZJU0lPTkVE
X0NPTlRFWFRTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfU0VSVklDRV9B
Q1RJVkFUSU9OKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfSVBfQ09ORklH
VVJBVElPTiksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9TRVJW
SUNFUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNF
X1NVQlNDUklCRV9MSVNUKSwJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9QQUNL
RVRfU1RBVElTVElDUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX05FVFdP
UktfSURMRV9ISU5UKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfRU1FUkdF
TkNZX01PREUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfSVBfUEFDS0VU
X0ZJTFRFUlMpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9NVUxUSUNBUlJJ
RVJfUFJPVklERVJTKSwJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9TSU1TVEFU
RV9ERVNDUklQVElPTlMgewkJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9OT1RJTklUSUFMSVpFRCwg
Im5vdCBpbml0aWFsaXplZCIgfSwJCVwKKwl7IE1CSU1fU0lNU1RBVEVfSU5JVElBTElaRUQsICJp
bml0aWFsaXplZCIgfSwJCQlcCisJeyBNQklNX1NJTVNUQVRFX05PVElOU0VSVEVELCAibm90IGlu
c2VydGVkIiB9LAkJCVwKKwl7IE1CSU1fU0lNU1RBVEVfQkFEU0lNLCAiYmFkIHR5cGUiIH0sCQkJ
CVwKKwl7IE1CSU1fU0lNU1RBVEVfRkFJTFVSRSwgImZhaWxlZCIgfSwJCQkJXAorCXsgTUJJTV9T
SU1TVEFURV9OT1RBQ1RJVkFURUQsICJub3QgYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9TSU1T
VEFURV9MT0NLRUQsICJsb2NrZWQiIH0sCQkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUg
TUJJTV9QSU5UWVBFX0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX05PTkUs
ICJub25lIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9DVVNUT00sICJjdXN0b20iIH0sCQkJ
CVwKKwl7IE1CSU1fUElOX1RZUEVfUElOMSwgIlBJTjEiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9U
WVBFX1BJTjIsICJQSU4yIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ERVZfU0lNX1BJTiwg
ImRldmljZSBQSU4iIH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ERVZfRklSU1RfU0lNX1BJTiwg
ImRldmljZSAxc3QgUElOIiB9LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1BJTiwgIm5l
dHdvcmsgUElOIiB9LAkJCVwKKwl7IE1CSU1fUElOX1RZUEVfTkVUV09SS19TVUJTRVRfUElOLCAi
bmV0d29yayBzdWJzZXQgUElOIiB9LAlcCisJeyBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklE
RVJfUElOLCAicHJvdmlkZXIgUElOIiB9LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVf
UElOLCAiY29ycG9yYXRlIFBJTiIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfU1VCU0lEWV9MT0NL
LCAic3Vic2lkeSBsb2NrIiB9LAkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUFVLMSwgIlBVSyIgfSwJ
CQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUFVLMiwgIlBVSzIiIH0sCQkJCQlcCisJeyBNQklNX1BJ
Tl9UWVBFX0RFVl9GSVJTVF9TSU1fUFVLLCAiZGV2aWNlIDFzdCBQVUsiIH0sCQlcCisJeyBNQklN
X1BJTl9UWVBFX05FVFdPUktfUFVLLCAibmV0d29yayBQVUsiIH0sCQkJXAorCXsgTUJJTV9QSU5f
VFlQRV9ORVRXT1JLX1NVQlNFVF9QVUssICJuZXR3b3JrIHN1YnNldCBQVUsiIH0sCVwKKwl7IE1C
SU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QVUssICJwcm92aWRlciBQVUsiIH0sCQlcCisJ
eyBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QVUssICJjb3Jwb3JhdGUgUFVLIiB9LAkJXAorCXsg
MCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlMgewkJ
CQlcCisJeyBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfVU5LTk9XTiwgInVua25vd24iIH0sCQkJXAor
CXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSElORywgImF0dGFjaGluZyIgfSwJCVwKKwl7
IE1CSU1fUEtUU0VSVklDRV9TVEFURV9BVFRBQ0hFRCwgImF0dGFjaGVkIiB9LAkJCVwKKwl7IE1C
SU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hJTkcsICJkZXRhY2hpbmciIH0sCQlcCisJeyBNQklN
X1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQsICJkZXRhY2hlZCIgfSwJCQlcCisJeyAwLCBOVUxM
IH0gfQorCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERVNDUklQVElPTlMgewkJCQlc
CisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVfVU5LTk9XTiwgInVua25vd24iIH0sCQkJXAorCXsg
TUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRCwgImFjdGl2YXRlZCIgfSwJCVwKKwl7IE1C
SU1fQUNUSVZBVElPTl9TVEFURV9BQ1RJVkFUSU5HLCAiYWN0aXZhdGluZyIgfSwJCVwKKwl7IE1C
SU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRFRCwgImRlYWN0aXZhdGVkIiB9LAkJXAorCXsg
TUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVElORywgImRlYWN0aXZhdGluZyIgfSwJCVwK
Kwl7IDAsIE5VTEwgfSB9CisKKy8qCisgKiBEcml2ZXIgaW50ZXJuYWwgc3RhdGUKKyAqLworZW51
bSB1bWJfc3RhdGUgeworCVVNQl9TX0RPV04gPSAwLAkJLyogaW50ZXJmYWNlIGRvd24gKi8KKwlV
TUJfU19PUEVOLAkJLyogTUJJTSBkZXZpY2UgaGFzIGJlZW4gb3BlbmVkICovCisJVU1CX1NfQ0lE
LAkJLyogUU1JIGNsaWVudCBpZCBhbGxvY2F0ZWQgKi8KKwlVTUJfU19SQURJTywJCS8qIHJhZGlv
IGlzIG9uICovCisJVU1CX1NfU0lNUkVBRFksCQkvKiBTSU0gaXMgcmVhZHkgKi8KKwlVTUJfU19B
VFRBQ0hFRCwJCS8qIHBhY2tldCBzZXJ2aWNlIGlzIGF0dGFjaGVkICovCisJVU1CX1NfQ09OTkVD
VEVELAkvKiBjb25uZWN0ZWQgdG8gcHJvdmlkZXIgKi8KKwlVTUJfU19VUCwJCS8qIGhhdmUgSVAg
Y29uZmlndXJhdGlvbiAqLworfTsKKworI2RlZmluZSBVTUJfSU5URVJOQUxfU1RBVEVfREVTQ1JJ
UFRJT05TIHsJXAorCXsgVU1CX1NfRE9XTiwgImRvd24iIH0sCQkJXAorCXsgVU1CX1NfT1BFTiwg
Im9wZW4iIH0sCQkJXAorCXsgVU1CX1NfQ0lELCAiQ0lEIGFsbG9jYXRlZCIgfSwJCVwKKwl7IFVN
Ql9TX1JBRElPLCAicmFkaW8gb24iIH0sCQlcCisJeyBVTUJfU19TSU1SRUFEWSwgIlNJTSBpcyBy
ZWFkeSIgfSwJXAorCXsgVU1CX1NfQVRUQUNIRUQsICJhdHRhY2hlZCIgfSwJCVwKKwl7IFVNQl9T
X0NPTk5FQ1RFRCwgImNvbm5lY3RlZCIgfSwJXAorCXsgVU1CX1NfVVAsICJ1cCIgfSwJCQlcCisJ
eyAwLCBOVUxMIH0gfQorCisvKgorICogVU1CIHBhcmFtZXRlcnMgKFNJT0NbR1NdVU1CUEFSQU0g
aW9jdGxzKQorICovCitzdHJ1Y3QgdW1iX3BhcmFtZXRlciB7CisJaW50CQkJb3A7CisJaW50CQkJ
aXNfcHVrOworCXVpbnQxNl90CQlwaW5bTUJJTV9QSU5fTUFYTEVOXTsKKwlpbnQJCQlwaW5sZW47
CisKKwl1aW50MTZfdAkJbmV3cGluW01CSU1fUElOX01BWExFTl07CisJaW50CQkJbmV3cGlubGVu
OworCisjZGVmaW5lIFVNQl9BUE5fTUFYTEVOCQkxMDAKKwl1aW50MTZfdAkJYXBuW1VNQl9BUE5f
TUFYTEVOXTsKKwlpbnQJCQlhcG5sZW47CisKKyNkZWZpbmUgVU1CX1VTRVJOQU1FX01BWExFTgky
MDUKKwl1aW50MTZfdAkJdXNlcm5hbWVbVU1CX1VTRVJOQU1FX01BWExFTl07CisJaW50CQkJdXNl
cm5hbWVsZW47CisKKyNkZWZpbmUgVU1CX1BBU1NXT1JEX01BWExFTgkyMDUKKwl1aW50MTZfdAkJ
cGFzc3dvcmRbVU1CX1BBU1NXT1JEX01BWExFTl07CisJaW50CQkJcGFzc3dvcmRsZW47CisKKwlp
bnQJCQlyb2FtaW5nOworCXVpbnQzMl90CQlwcmVmZXJyZWRjbGFzc2VzOworfTsKKworLyoKKyAq
IFVNQiBkZXZpY2Ugc3RhdHVzIGluZm8gKFNJT0NHVU1CSU5GTyBpb2N0bCkKKyAqLworc3RydWN0
IHVtYl9pbmZvIHsKKwllbnVtIHVtYl9zdGF0ZQkJc3RhdGU7CisJaW50CQkJZW5hYmxlX3JvYW1p
bmc7CisjZGVmaW5lIFVNQl9QSU5fUkVRVUlSRUQJMAorI2RlZmluZSBVTUJfUElOX1VOTE9DS0VE
CTEKKyNkZWZpbmUgVU1CX1BVS19SRVFVSVJFRAkyCisJaW50CQkJcGluX3N0YXRlOworCWludAkJ
CXBpbl9hdHRlbXB0c19sZWZ0OworCWludAkJCWFjdGl2YXRpb247CisJaW50CQkJc2ltX3N0YXRl
OworCWludAkJCXJlZ3N0YXRlOworCWludAkJCXJlZ21vZGU7CisJaW50CQkJbndlcnJvcjsKKwlp
bnQJCQlwYWNrZXRzdGF0ZTsKKwl1aW50MzJfdAkJc3VwcG9ydGVkY2xhc3NlczsgLyogd2hhdCB0
aGUgaHcgc3VwcG9ydHMgKi8KKwl1aW50MzJfdAkJcHJlZmVycmVkY2xhc3NlczsgLyogd2hhdCB0
aGUgdXNlciBwcmVmZXJzICovCisJdWludDMyX3QJCWhpZ2hlc3RjbGFzczsJLyogd2hhdCB0aGUg
bmV0d29yayBvZmZlcnMgKi8KKwl1aW50MzJfdAkJY2VsbGNsYXNzOworI2RlZmluZSBVTUJfUFJP
VklERVJOQU1FX01BWExFTgkJMjAKKwl1aW50MTZfdAkJcHJvdmlkZXJbVU1CX1BST1ZJREVSTkFN
RV9NQVhMRU5dOworI2RlZmluZSBVTUJfUEhPTkVOUl9NQVhMRU4JCTIyCisJdWludDE2X3QJCXBu
W1VNQl9QSE9ORU5SX01BWExFTl07CisjZGVmaW5lIFVNQl9TVUJTQ1JJQkVSSURfTUFYTEVOCQkx
NQorCXVpbnQxNl90CQlzaWRbVU1CX1NVQlNDUklCRVJJRF9NQVhMRU5dOworI2RlZmluZSBVTUJf
SUNDSURfTUFYTEVOCQkyMAorCXVpbnQxNl90CQlpY2NpZFtVTUJfSUNDSURfTUFYTEVOXTsKKyNk
ZWZpbmUgVU1CX1JPQU1JTkdURVhUX01BWExFTgkJNjMKKwl1aW50MTZfdAkJcm9hbWluZ3R4dFtV
TUJfUk9BTUlOR1RFWFRfTUFYTEVOXTsKKworI2RlZmluZSBVTUJfREVWSURfTUFYTEVOCQkxOAor
CXVpbnQxNl90CQlkZXZpZFtVTUJfREVWSURfTUFYTEVOXTsKKyNkZWZpbmUgVU1CX0ZXSU5GT19N
QVhMRU4JCTMwCisJdWludDE2X3QJCWZ3aW5mb1tVTUJfRldJTkZPX01BWExFTl07CisjZGVmaW5l
IFVNQl9IV0lORk9fTUFYTEVOCQkzMAorCXVpbnQxNl90CQlod2luZm9bVU1CX0hXSU5GT19NQVhM
RU5dOworCisJdWludDE2X3QJCWFwbltVTUJfQVBOX01BWExFTl07CisJaW50CQkJYXBubGVuOwor
CisJdWludDE2X3QJCXVzZXJuYW1lW1VNQl9VU0VSTkFNRV9NQVhMRU5dOworCWludAkJCXVzZXJu
YW1lbGVuOworCisJdWludDE2X3QJCXBhc3N3b3JkW1VNQl9QQVNTV09SRF9NQVhMRU5dOworCWlu
dAkJCXBhc3N3b3JkbGVuOworCisjZGVmaW5lIFVNQl9WQUxVRV9VTktOT1dOCS05OTkKKwlpbnQJ
CQlyc3NpOworI2RlZmluZSBVTUJfQkVSX0VYQ0VMTEVOVAkwCisjZGVmaW5lIFVNQl9CRVJfVkVS
WUdPT0QJMQorI2RlZmluZSBVTUJfQkVSX0dPT0QJCTIKKyNkZWZpbmUgVU1CX0JFUl9PSwkJMwor
I2RlZmluZSBVTUJfQkVSX01FRElVTQkJNAorI2RlZmluZSBVTUJfQkVSX0JBRAkJNQorI2RlZmlu
ZSBVTUJfQkVSX1ZFUllCQUQJCTYKKyNkZWZpbmUgVU1CX0JFUl9FWFRSRU1FTFlCQUQJNworCWlu
dAkJCWJlcjsKKworCWludAkJCWh3X3JhZGlvX29uOworCWludAkJCXN3X3JhZGlvX29uOworCisJ
dWludDY0X3QJCXVwbGlua19zcGVlZDsKKwl1aW50NjRfdAkJZG93bmxpbmtfc3BlZWQ7CisKKyNk
ZWZpbmUgVU1CX01BWF9ETlNTUlYJCQkyCisJc3RydWN0IGluX2FkZHIJCWlwdjRkbnNbVU1CX01B
WF9ETlNTUlZdOworfTsKKworI2lmICFkZWZpbmVkKGlmcl9tdHUpCisjZGVmaW5lIGlmcl9tdHUJ
aWZyX2lmcnUuaWZydV9tZXRyaWMKKyNlbmRpZgorCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIFVN
QiBkZXZpY2UKKyAqLworZW51bSB7CisJVU1CX0lOVFJfUlgsCisJVU1CX0JVTEtfUlgsCisJVU1C
X0JVTEtfVFgsCisJVU1CX05fVFJBTlNGRVIsCit9OworCitzdHJ1Y3QgdW1iX3Rhc2sgeworCXN0
cnVjdCB1c2JfcHJvY19tc2cJIGhkcjsKKwlzdHJ1Y3QgdW1iX3NvZnRjCSpzYzsKK307CisKK3N0
cnVjdCB1bWJfc29mdGMgeworCWRldmljZV90CQkgc2NfZGV2OworCXN0cnVjdCBpZm5ldAkJKnNj
X2lmOworI2RlZmluZSBHRVRfSUZQKHNjKQkoKHNjKS0+c2NfaWYpCisJc3RydWN0IGlmbWVkaWEJ
CSBzY19pbTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqc2NfdWRldjsKKwlzdHJ1Y3QgdXNiX3hmZXIJ
CSpzY194ZmVyW1VNQl9OX1RSQU5TRkVSXTsKKwl1aW50OF90CQkJIHNjX2lmYWNlc19pbmRleFsy
XTsKKworCWludAkJCSBzY192ZXJfbWFqOworCWludAkJCSBzY192ZXJfbWluOworCWludAkJCSBz
Y19jdHJsX2xlbjsKKwlpbnQJCQkgc2NfbWF4cGt0bGVuOworCWludAkJCSBzY19tYXhzZXNzaW9u
czsKKworI2RlZmluZSBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQJMHgwMDAxCisjZGVmaW5lIFVN
QkZMR19OT19JTkVUNgkJCTB4MDAwMgorCXVpbnQzMl90CQkgc2NfZmxhZ3M7CisJaW50CQkJIHNj
X2NpZDsKKworCXN0cnVjdCB1c2JfcHJvY2Vzcwkgc2NfdGFza3F1ZXVlOworCXN0cnVjdCB1bWJf
dGFzawkJIHNjX3Byb2NfYXR0YWNoX3Rhc2tbMl07CisJc3RydWN0IHVtYl90YXNrCQkgc2NfcHJv
Y19zdGFydF90YXNrWzJdOworCXN0cnVjdCB1bWJfdGFzawkJIHNjX3Byb2Nfc3RhdGVfdGFza1sy
XTsKKwlzdHJ1Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX2dldF9yZXNwb25zZV90YXNrWzJdOworCisJ
aW50CQkJIHNjX25yZXNwOworCXN0cnVjdCBtdHgJCSBzY19tdXRleDsKKwlzdHJ1Y3QgdXNiX2Nh
bGxvdXQJIHNjX3N0YXRlY2hnX3RpbWVyOworCWNoYXIJCQkgc2NfZHlpbmc7CisJY2hhcgkJCSBz
Y19hdHRhY2hlZDsKKworCXVpbnQ4X3QJCQkgc2NfY3RybF9pZmFjZW5vOworCXN0cnVjdCB1c2Jf
aW50ZXJmYWNlCSpzY19kYXRhX2lmYWNlOworCisJdm9pZAkJCSpzY19yZXNwX2J1ZjsKKwl2b2lk
CQkJKnNjX2N0cmxfbXNnOworCisJdm9pZAkJCSpzY19yeF9idWY7CisJdWludDMyX3QJCSBzY19y
eF9idWZzejsKKwl1bnNpZ25lZAkJIHNjX3J4X25lcnI7CisJc3RydWN0IGlmcXVldWUJCSBzY19y
eF9xdWV1ZTsKKworCXZvaWQJCQkqc2NfdHhfYnVmOworCXN0cnVjdCBtYnVmCQkqc2NfdHhfbTsK
Kwl1aW50MzJfdAkJIHNjX3R4X2J1ZnN6OworCXVpbnQzMl90CQkgc2NfdHhfc2VxOworCisJdWlu
dDMyX3QJCSBzY190aWQ7CisKKyNkZWZpbmUgc2Nfc3RhdGUJCXNjX2luZm8uc3RhdGUKKyNkZWZp
bmUgc2Nfcm9hbWluZwkJc2NfaW5mby5lbmFibGVfcm9hbWluZworCXN0cnVjdCB1bWJfaW5mbwkJ
IHNjX2luZm87Cit9OworI2VuZGlmIC8qIF9LRVJORUwgKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYv
dXNiL25ldC9tYmltLmggYi9zeXMvZGV2L3VzYi9uZXQvbWJpbS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWQ3ZWNmZjExNGI5Ci0tLSAvZGV2L251bGwKKysrIGIv
c3lzL2Rldi91c2IvbmV0L21iaW0uaApAQCAtMCwwICsxLDcyNCBAQAorLyoJJE9wZW5CU0Q6IG1i
aW0uaCx2IDEuNCAyMDE3LzA0LzE4IDEzOjI3OjU1IGdlcmhhcmQgRXhwICQgKi8KKworLyoKKyAq
IE9yaWdpbmFsIGNvcHlyaWdodCAoYykgMjAxNiBnZW51YSBtYkggKE9wZW5CU0QgdmVyc2lvbikK
KyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0
aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBo
ZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgor
ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xB
SU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV
RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5Z
IFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBB
TlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU
QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJ
R0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4K
KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQURJU1RBIFNBUyAocmUtd3JpdGUgZm9yIEZyZWVC
U0QpCisgKgorICogUmUtd3JpdGUgZm9yIEZyZWVCU0QgYnkgUGllcnJlIFByb25jaGVyeSA8cGll
cnJlQGRlZm9yYS5uZXQ+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmln
aHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKKyAqICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLyoKKyAqIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsCisgKiBo
dHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3MvTUJJTS1Db21w
bGlhbmNlLTEuMC5wZGYKKyAqLworI2lmbmRlZiBfTUJJTV9IXworI2RlZmluZSBfTUJJTV9IXwor
CisjZGVmaW5lIFVERVNDU1VCX01CSU0JCQkyNworI2RlZmluZSBNQklNX0lOVEVSRkFDRV9BTFRT
RVRUSU5HCTEKKworI2RlZmluZSBNQklNX1JFU0VUX0ZVTkNUSU9OCQkweDA1CisKKy8qCisgKiBS
ZWdpc3RyYXRpb24gc3RhdGUgKE1CSU1fUkVHSVNURVJfU1RBVEUpCisgKi8KKyNkZWZpbmUgTUJJ
TV9SRUdTVEFURV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX1JFR1NUQVRFX0RFUkVHSVNURVJF
RAkJMQorI2RlZmluZSBNQklNX1JFR1NUQVRFX1NFQVJDSElORwkJCTIKKyNkZWZpbmUgTUJJTV9S
RUdTVEFURV9IT01FCQkJMworI2RlZmluZSBNQklNX1JFR1NUQVRFX1JPQU1JTkcJCQk0CisjZGVm
aW5lIE1CSU1fUkVHU1RBVEVfUEFSVE5FUgkJCTUKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9ERU5J
RUQJCQk2CisKKy8qCisgKiBEYXRhIGNsYXNzZXMgbWFzayAoTUJJTV9EQVRBX0NMQVNTKQorICov
CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX05PTkUJCQkweDAwMDAwMDAwCisjZGVmaW5lIE1CSU1f
REFUQUNMQVNTX0dQUlMJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0VER0UJ
CQkweDAwMDAwMDAyCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX1VNVFMJCQkweDAwMDAwMDA0Cisj
ZGVmaW5lIE1CSU1fREFUQUNMQVNTX0hTRFBBCQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQklNX0RB
VEFDTEFTU19IU1VQQQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfTFRFCQkJ
MHgwMDAwMDAyMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWFJUVAkJCTB4MDAwMTAwMDAKKyNk
ZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRPCQkJMHgwMDAyMDAwMAorI2RlZmluZSBNQklNX0RB
VEFDTEFTU18xWEVWRE9fUkVWX0EJCTB4MDAwNDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1Nf
MVhFVkRWCQkJMHgwMDA4MDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18zWFJUVAkJCTB4MDAx
MDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRPX1JFVl9CCQkweDAwMjAwMDAwCisj
ZGVmaW5lIE1CSU1fREFUQUNMQVNTX1VNQgkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRB
Q0xBU1NfQ1VTVE9NCQkJMHg4MDAwMDAwMAorCisvKgorICogQ2VsbCBjbGFzc2VzIG1hc2sgKE1C
SU1fQ0VMTFVMQVJfQ0xBU1MpCisgKi8KKyNkZWZpbmUgTUJJTV9DRUxMQ0xBU1NfR1NNCQkJMHgw
MDAwMDAwMQorI2RlZmluZSBNQklNX0NFTExDTEFTU19DRE1BCQkJMHgwMDAwMDAwMgorCisvKgor
ICogVVVJRHMKKyAqLworI2RlZmluZSBNQklNX1VVSURfTEVOCQkxNgorCisjZGVmaW5lIE1CSU1f
VVVJRF9CQVNJQ19DT05ORUNUIHsJCQkJXAorCQkweGEyLCAweDg5LCAweGNjLCAweDMzLCAweGJj
LCAweGJiLCAweDhiLCAweDRmLAlcCisJCTB4YjYsIDB4YjAsIDB4MTMsIDB4M2UsIDB4YzIsIDB4
YWEsIDB4ZTYsIDB4ZGYJXAorCX0KKworI2RlZmluZSBNQklNX1VVSURfQ09OVEVYVF9JTlRFUk5F
VCB7CQkJCVwKKwkJMHg3ZSwgMHg1ZSwgMHgyYSwgMHg3ZSwgMHg0ZSwgMHg2ZiwgMHg3MiwgMHg3
MiwJXAorCQkweDczLCAweDZiLCAweDY1LCAweDZlLCAweDdlLCAweDVlLCAweDJhLCAweDdlCVwK
Kwl9CisKKyNkZWZpbmUgTUJJTV9VVUlEX0NPTlRFWFRfVlBOIHsJCQkJXAorCQkweDliLCAweDlm
LCAweDdiLCAweGJlLCAweDg5LCAweDUyLCAweDQ0LCAweGI3LAlcCisJCTB4ODMsIDB4YWMsIDB4
Y2EsIDB4NDEsIDB4MzEsIDB4OGQsIDB4ZjcsIDB4YTAJXAorCX0KKworI2RlZmluZSBNQklNX1VV
SURfUU1JX01CSU0gewkJCQlcCisJCTB4ZDEsIDB4YTMsIDB4MGIsIDB4YzIsIDB4ZjksIDB4N2Es
IDB4NmUsIDB4NDMsCVwKKwkJMHhiZiwgMHg2NSwgMHhjNywgMHhlMiwgMHg0ZiwgMHhiMCwgMHhm
MCwgMHhkMwlcCisJfQorCisjZGVmaW5lIE1CSU1fQ1RSTE1TR19NSU5MRU4JCTY0CisjZGVmaW5l
IE1CSU1fQ1RSTE1TR19NQVhMRU4JCSg0ICogMTIwNCkKKworI2RlZmluZSBNQklNX01BWFNFR1Na
X01JTlZBTAkJKDIgKiAxMDI0KQorCisvKgorICogQ29udHJvbCBtZXNzYWdlcyAoaG9zdCB0byBm
dW5jdGlvbikKKyAqLworI2RlZmluZSBNQklNX09QRU5fTVNHCQkJMVUKKyNkZWZpbmUgTUJJTV9D
TE9TRV9NU0cJCQkyVQorI2RlZmluZSBNQklNX0NPTU1BTkRfTVNHCQkzVQorI2RlZmluZSBNQklN
X0hPU1RfRVJST1JfTVNHCQk0VQorCisvKgorICogQ29udHJvbCBtZXNzYWdlcyAoZnVuY3Rpb24g
dG8gaG9zdCkKKyAqLworI2RlZmluZSBNQklNX09QRU5fRE9ORQkJCTB4ODAwMDAwMDFVCisjZGVm
aW5lIE1CSU1fQ0xPU0VfRE9ORQkJCTB4ODAwMDAwMDJVCisjZGVmaW5lIE1CSU1fQ09NTUFORF9E
T05FCQkweDgwMDAwMDAzVQorI2RlZmluZSBNQklNX0ZVTkNUSU9OX0VSUk9SX01TRwkJMHg4MDAw
MDAwNFUKKyNkZWZpbmUgTUJJTV9JTkRJQ0FURV9TVEFUVVNfTVNHCTB4ODAwMDAwMDdVCisKKy8q
CisgKiBHZW5lcmljIHN0YXR1cyBjb2RlcworICovCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NVQ0NF
U1MJCQkwCisjZGVmaW5lIE1CSU1fU1RBVFVTX0JVU1kJCQkxCisjZGVmaW5lIE1CSU1fU1RBVFVT
X0ZBSUxVUkUJCQkyCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NJTV9OT1RfSU5TRVJURUQJCTMKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfQkFEX1NJTQkJCTQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUElOX1JF
UVVJUkVECQk1CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BJTl9ESVNBQkxFRAkJNgorI2RlZmluZSBN
QklNX1NUQVRVU19OT1RfUkVHSVNURVJFRAkJNworI2RlZmluZSBNQklNX1NUQVRVU19QUk9WSURF
UlNfTk9UX0ZPVU5ECQk4CisjZGVmaW5lIE1CSU1fU1RBVFVTX05PX0RFVklDRV9TVVBQT1JUCQk5
CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BST1ZJREVSX05PVF9WSVNJQkxFCTEwCisjZGVmaW5lIE1C
SU1fU1RBVFVTX0RBVEFfQ0xBU1NfTk9UX0FWQUlMQUJMRQkxMQorI2RlZmluZSBNQklNX1NUQVRV
U19QQUNLRVRfU0VSVklDRV9ERVRBQ0hFRAkxMgorI2RlZmluZSBNQklNX1NUQVRVU19NQVhfQUNU
SVZBVEVEX0NPTlRFWFRTCTEzCisjZGVmaW5lIE1CSU1fU1RBVFVTX05PVF9JTklUSUFMSVpFRAkJ
MTQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfVk9JQ0VfQ0FMTF9JTl9QUk9HUkVTUwkxNQorI2RlZmlu
ZSBNQklNX1NUQVRVU19DT05URVhUX05PVF9BQ1RJVkFURUQJMTYKKyNkZWZpbmUgTUJJTV9TVEFU
VVNfU0VSVklDRV9OT1RfQUNUSVZBVEVECTE3CisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURf
QUNDRVNTX1NUUklORwkxOAorI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX1VTRVJfTkFNRV9Q
V0QJMTkKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUkFESU9fUE9XRVJfT0ZGCQkyMAorI2RlZmluZSBN
QklNX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUlMJCTIxCisjZGVmaW5lIE1CSU1fU1RBVFVTX1JF
QURfRkFJTFVSRQkJMjIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfV1JJVEVfRkFJTFVSRQkJMjMKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfTk9fUEhPTkVCT09LCQkyNQorI2RlZmluZSBNQklNX1NUQVRVU19Q
QVJBTUVURVJfVE9PX0xPTkcJCTI2CisjZGVmaW5lIE1CSU1fU1RBVFVTX1NUS19CVVNZCQkJMjcK
KyNkZWZpbmUgTUJJTV9TVEFUVVNfT1BFUkFUSU9OX05PVF9BTExPV0VECTI4CisjZGVmaW5lIE1C
SU1fU1RBVFVTX01FTU9SWV9GQUlMVVJFCQkyOQorI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElE
X01FTU9SWV9JTkRFWAkzMAorI2RlZmluZSBNQklNX1NUQVRVU19NRU1PUllfRlVMTAkJCTMxCisj
ZGVmaW5lIE1CSU1fU1RBVFVTX0ZJTFRFUl9OT1RfU1VQUE9SVEVECTMyCisjZGVmaW5lIE1CSU1f
U1RBVFVTX0RTU19JTlNUQU5DRV9MSU1JVAkJMzMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJ
RF9ERVZJQ0VfU0VSVklDRV9PUEVSQVRJT04JMzQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9J
TkNPUlJFQ1RfQVVUTgkJMzUKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9TWU5DX0ZBSUxVUkUJ
CTM2CisjZGVmaW5lIE1CSU1fU1RBVFVTX0FVVEhfQU1GX05PVF9TRVQJCTM3CisjZGVmaW5lIE1C
SU1fU1RBVFVTX0NPTlRFWFRfTk9UX1NVUFBPUlRFRAkzOAorI2RlZmluZSBNQklNX1NUQVRVU19T
TVNfVU5LTk9XTl9TTVNDX0FERFJFU1MJMTAwCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19ORVRX
T1JLX1RJTUVPVVQJCTEwMQorI2RlZmluZSBNQklNX1NUQVRVU19TTVNfTEFOR19OT1RfU1VQUE9S
VEVECTEwMgorI2RlZmluZSBNQklNX1NUQVRVU19TTVNfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRAkx
MDMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU01TX0ZPUk1BVF9OT1RfU1VQUE9SVEVECTEwNAorCisv
KgorICogTWVzc2FnZSBmb3JtYXRzCisgKi8KK3N0cnVjdCBtYmltX21zZ2hkciB7CisJLyogTXNn
IGhlYWRlciAqLworCXVpbnQzMl90CXR5cGU7CQkvKiBtZXNzYWdlIHR5cGUgKi8KKwl1aW50MzJf
dAlsZW47CQkvKiBtZXNzYWdlIGxlbmd0aCAqLworCXVpbnQzMl90CXRpZDsJCS8qIHRyYW5zYWN0
aW9uIGlkICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mcmFnaGRyIHsKKwl1aW50MzJf
dAluZnJhZzsJCS8qIHRvdGFsICMgb2YgZnJhZ21lbnRzICovCisJdWludDMyX3QJY3VycmZyYWc7
CS8qIGN1cnJlbnQgZnJhZ21lbnQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2ZyYWdt
ZW50ZWRfbXNnX2hkciB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9m
cmFnaGRyCWZyYWc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9oMmZfb3Blbm1zZyB7CisJ
c3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwl1aW50MzJfdAkJbWF4bGVuOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG1iaW1faDJmX2Nsb3NlbXNnIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOwor
fSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1faDJmX2NtZCB7CisJc3RydWN0IG1iaW1fbXNnaGRy
CWhkcjsKKwlzdHJ1Y3QgbWJpbV9mcmFnaGRyCWZyYWc7CisJdWludDhfdAkJCWRldmlkW01CSU1f
VVVJRF9MRU5dOworCXVpbnQzMl90CQljaWQ7CQkvKiBjb21tYW5kIGlkICovCisjZGVmaW5lIE1C
SU1fQ01ET1BfUVJZCQkwCisjZGVmaW5lIE1CSU1fQ01ET1BfU0VUCQkxCisJdWludDMyX3QJCW9w
OworCXVpbnQzMl90CQlpbmZvbGVuOworCXVpbnQ4X3QJCQlpbmZvW107Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbWJpbV9mMmhfaW5kaWNhdGVfc3RhdHVzIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJ
aGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsKKwl1aW50OF90CQkJZGV2aWRbTUJJTV9V
VUlEX0xFTl07CisJdWludDMyX3QJCWNpZDsJCS8qIGNvbW1hbmQgaWQgKi8KKwl1aW50MzJfdAkJ
aW5mb2xlbjsKKwl1aW50OF90CQkJaW5mb1tdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1f
ZjJoX2hvc3RlcnIgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisKKyNkZWZpbmUgTUJJTV9F
UlJPUl9USU1FT1VUX0ZSQUdNRU5UCQkxCisjZGVmaW5lIE1CSU1fRVJST1JfRlJBR01FTlRfT1VU
X09GX1NFUVVFTkNFCTIKKyNkZWZpbmUgTUJJTV9FUlJPUl9MRU5HVEhfTUlTTUFUQ0gJCTMKKyNk
ZWZpbmUgTUJJTV9FUlJPUl9EVVBMSUNBVEVEX1RJRAkJNAorI2RlZmluZSBNQklNX0VSUk9SX05P
VF9PUEVORUQJCQk1CisjZGVmaW5lIE1CSU1fRVJST1JfVU5LTk9XTgkJCTYKKyNkZWZpbmUgTUJJ
TV9FUlJPUl9DQU5DRUwJCQk3CisjZGVmaW5lIE1CSU1fRVJST1JfTUFYX1RSQU5TRkVSCQkJOAor
CXVpbnQzMl90CQllcnI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3Nl
ZG9uZSB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlpbnQzMl90CQkJc3RhdHVzOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fZjJoX2NtZGRvbmUgeworCXN0cnVjdCBtYmltX21zZ2hk
cgloZHI7CisJc3RydWN0IG1iaW1fZnJhZ2hkcglmcmFnOworCXVpbnQ4X3QJCQlkZXZpZFtNQklN
X1VVSURfTEVOXTsKKwl1aW50MzJfdAkJY2lkOwkJLyogY29tbWFuZCBpZCAqLworCWludDMyX3QJ
CQlzdGF0dXM7CisJdWludDMyX3QJCWluZm9sZW47CisJdWludDhfdAkJCWluZm9bXTsKK30gX19w
YWNrZWQ7CisKKy8qCisgKiBNZXNzYWdlcyBhbmQgY29tbWFuZHMgZm9yIE1CSU1fVVVJRF9CQVNJ
Q19DT05ORUNUCisgKi8KKyNkZWZpbmUgTUJJTV9DSURfREVWSUNFX0NBUFMJCQkJMQorI2RlZmlu
ZSBNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUwkJMgorI2RlZmluZSBNQklNX0NJRF9S
QURJT19TVEFURQkJCQkzCisjZGVmaW5lIE1CSU1fQ0lEX1BJTgkJCQkJNAorI2RlZmluZSBNQklN
X0NJRF9QSU5fTElTVAkJCQk1CisjZGVmaW5lIE1CSU1fQ0lEX0hPTUVfUFJPVklERVIJCQkJNgor
I2RlZmluZSBNQklNX0NJRF9QUkVGRVJSRURfUFJPVklERVJTCQkJNworI2RlZmluZSBNQklNX0NJ
RF9WSVNJQkxFX1BST1ZJREVSUwkJCTgKKyNkZWZpbmUgTUJJTV9DSURfUkVHSVNURVJfU1RBVEUJ
CQkJOQorI2RlZmluZSBNQklNX0NJRF9QQUNLRVRfU0VSVklDRQkJCQkxMAorI2RlZmluZSBNQklN
X0NJRF9TSUdOQUxfU1RBVEUJCQkJMTEKKyNkZWZpbmUgTUJJTV9DSURfQ09OTkVDVAkJCQkxMgor
I2RlZmluZSBNQklNX0NJRF9QUk9WSVNJT05FRF9DT05URVhUUwkJCTEzCisjZGVmaW5lIE1CSU1f
Q0lEX1NFUlZJQ0VfQUNUSVZBVElPTgkJCTE0CisjZGVmaW5lIE1CSU1fQ0lEX0lQX0NPTkZJR1VS
QVRJT04JCQkxNQorI2RlZmluZSBNQklNX0NJRF9ERVZJQ0VfU0VSVklDRVMJCQkxNgorI2RlZmlu
ZSBNQklNX0NJRF9ERVZJQ0VfU0VSVklDRV9TVUJTQ1JJQkVfTElTVAkJMTkKKyNkZWZpbmUgTUJJ
TV9DSURfUEFDS0VUX1NUQVRJU1RJQ1MJCQkyMAorI2RlZmluZSBNQklNX0NJRF9ORVRXT1JLX0lE
TEVfSElOVAkJCTIxCisjZGVmaW5lIE1CSU1fQ0lEX0VNRVJHRU5DWV9NT0RFCQkJCTIyCisjZGVm
aW5lIE1CSU1fQ0lEX0lQX1BBQ0tFVF9GSUxURVJTCQkJMjMKKyNkZWZpbmUgTUJJTV9DSURfTVVM
VElDQVJSSUVSX1BST1ZJREVSUwkJCTI0CisKK3N0cnVjdCBtYmltX2NpZF9zdWJzY3JpYmVyX3Jl
YWR5X2luZm8geworI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVElOSVRJQUxJWkVECQkwCisjZGVm
aW5lIE1CSU1fU0lNU1RBVEVfSU5JVElBTElaRUQJCTEKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9O
T1RJTlNFUlRFRAkJMgorI2RlZmluZSBNQklNX1NJTVNUQVRFX0JBRFNJTQkJCTMKKyNkZWZpbmUg
TUJJTV9TSU1TVEFURV9GQUlMVVJFCQkJNAorI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVEFDVElW
QVRFRAkJNQorI2RlZmluZSBNQklNX1NJTVNUQVRFX0xPQ0tFRAkJCTYKKwl1aW50MzJfdAlyZWFk
eTsKKworCXVpbnQzMl90CXNpZF9vZmZzOworCXVpbnQzMl90CXNpZF9zaXplOworCisJdWludDMy
X3QJaWNjX29mZnM7CisJdWludDMyX3QJaWNjX3NpemU7CisKKyNkZWZpbmUgTUJJTV9TSU1VTklR
RUlEX05PTkUJCQkwCisjZGVmaW5lIE1CSU1fU0lNVU5JUUVJRF9QUk9URUNUCQkJMQorCXVpbnQz
Ml90CWluZm87CisKKwl1aW50MzJfdAlub19wbjsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAlvZmZz
OworCQl1aW50MzJfdAlzaXplOworCX0KKwkJCXBuW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9jaWRfcmFkaW9fc3RhdGUgeworI2RlZmluZSBNQklNX1JBRElPX1NUQVRFX09GRgkJCTAK
KyNkZWZpbmUgTUJJTV9SQURJT19TVEFURV9PTgkJCTEKKwl1aW50MzJfdAlzdGF0ZTsKK30gX19w
YWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZV9pbmZvIHsKKwl1aW50MzJfdAlo
d19zdGF0ZTsKKwl1aW50MzJfdAlzd19zdGF0ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmlt
X2NpZF9waW4geworI2RlZmluZSBNQklNX1BJTl9UWVBFX05PTkUJCQkwCisjZGVmaW5lIE1CSU1f
UElOX1RZUEVfQ1VTVE9NCQkJMQorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BJTjEJCQkyCisjZGVm
aW5lIE1CSU1fUElOX1RZUEVfUElOMgkJCTMKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ERVZfU0lN
X1BJTgkJNAorI2RlZmluZSBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUElOCQk1CisjZGVm
aW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19QSU4JCTYKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9O
RVRXT1JLX1NVQlNFVF9QSU4JNworI2RlZmluZSBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklE
RVJfUElOCTgKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVfUElOCQk5CisjZGVmaW5l
IE1CSU1fUElOX1RZUEVfU1VCU0lEWV9MT0NLCQkxMAorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BV
SzEJCQkxMQorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BVSzIJCQkxMgorI2RlZmluZSBNQklNX1BJ
Tl9UWVBFX0RFVl9GSVJTVF9TSU1fUFVLCQkxMworI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdP
UktfUFVLCQkxNAorI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BVSwkxNQor
I2RlZmluZSBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUFVLCTE2CisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfQ09SUE9SQVRFX1BVSwkJMTcKKwl1aW50MzJfdAl0eXBlOworCisjZGVmaW5l
IE1CSU1fUElOX09QX0VOVEVSCQkJMAorI2RlZmluZSBNQklNX1BJTl9PUF9FTkFCTEUJCQkxCisj
ZGVmaW5lIE1CSU1fUElOX09QX0RJU0FCTEUJCQkyCisjZGVmaW5lIE1CSU1fUElOX09QX0NIQU5H
RQkJCTMKKwl1aW50MzJfdAlvcDsKKwl1aW50MzJfdAlwaW5fb2ZmczsKKwl1aW50MzJfdAlwaW5f
c2l6ZTsKKwl1aW50MzJfdAluZXdwaW5fb2ZmczsKKwl1aW50MzJfdAluZXdwaW5fc2l6ZTsKKyNk
ZWZpbmUgTUJJTV9QSU5fTUFYTEVOCTMyCisJdWludDhfdAkJZGF0YVsyICogTUJJTV9QSU5fTUFY
TEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW5faW5mbyB7CisJdWludDMy
X3QJdHlwZTsKKworI2RlZmluZSBNQklNX1BJTl9TVEFURV9VTkxPQ0tFRAkJCTAKKyNkZWZpbmUg
TUJJTV9QSU5fU1RBVEVfTE9DS0VECQkJMQorCXVpbnQzMl90CXN0YXRlOworCXVpbnQzMl90CXJl
bWFpbmluZ19hdHRlbXB0czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW5fbGlz
dF9pbmZvIHsKKwlzdHJ1Y3QgbWJpbV9waW5fZGVzYyB7CisKKyNkZWZpbmUgTUJJTV9QSU5NT0RF
X05PVFNVUFBPUlRFRAkJMAorI2RlZmluZSBNQklNX1BJTk1PREVfRU5BQkxFRAkJCTEKKyNkZWZp
bmUgTUJJTV9QSU5NT0RFX0RJU0FCTEVECQkJMgorCQl1aW50MzJfdAltb2RlOworCisjZGVmaW5l
IE1CSU1fUElORk9STUFUX1VOS05PV04JCQkwCisjZGVmaW5lIE1CSU1fUElORk9STUFUX05VTUVS
SUMJCQkxCisjZGVmaW5lIE1CSU1fUElORk9STUFUX0FMUEhBTlVNRVJJQwkJMgorCQl1aW50MzJf
dAlmb3JtYXQ7CisKKwkJdWludDMyX3QJbWlubGVuOworCQl1aW50MzJfdAltYXhsZW47CisJfQor
CQlwaW4xLAorCQlwaW4yLAorCQlkZXZfc2ltX3BpbiwKKwkJZmlyc3RfZGV2X3NpbV9waW4sCisJ
CW5ldF9waW4sCisJCW5ldF9zdWJfcGluLAorCQlzdnBfcGluLAorCQljb3JwX3BpbiwKKwkJc3Vi
c2lkeV9sb2NrLAorCQljdXN0b207Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfZGV2
aWNlX2NhcHMgeworI2RlZmluZSBNQklNX0RFVlRZUEVfVU5LTk9XTgkJCTAKKyNkZWZpbmUgTUJJ
TV9ERVZUWVBFX0VNQkVEREVECQkJMQorI2RlZmluZSBNQklNX0RFVlRZUEVfUkVNT1ZBQkxFCQkJ
MgorI2RlZmluZSBNQklNX0RFVlRZUEVfUkVNT1RFCQkJMworCXVpbnQzMl90CWRldnR5cGU7CisK
Kwl1aW50MzJfdAljZWxsY2xhc3M7CS8qIHZhbHVlczogTUJJTV9DRUxMVUxBUl9DTEFTUyAqLwor
CXVpbnQzMl90CXZvaWNlY2xhc3M7CisJdWludDMyX3QJc2ltY2xhc3M7CisJdWludDMyX3QJZGF0
YWNsYXNzOwkvKiB2YWx1ZXM6IE1CSU1fREFUQV9DTEFTUyAqLworCXVpbnQzMl90CXNtc2NhcHM7
CisJdWludDMyX3QJY250cmxjYXBzOworCXVpbnQzMl90CW1heF9zZXNzaW9uczsKKworCXVpbnQz
Ml90CWN1c3RkYXRhY2xhc3Nfb2ZmczsKKwl1aW50MzJfdAljdXN0ZGF0YWNsYXNzX3NpemU7CisK
Kwl1aW50MzJfdAlkZXZpZF9vZmZzOworCXVpbnQzMl90CWRldmlkX3NpemU7CisKKwl1aW50MzJf
dAlmd2luZm9fb2ZmczsKKwl1aW50MzJfdAlmd2luZm9fc2l6ZTsKKworCXVpbnQzMl90CWh3aW5m
b19vZmZzOworCXVpbnQzMl90CWh3aW5mb19zaXplOworCisJdWludDMyX3QJZGF0YVtdOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZSB7CisJdWludDMy
X3QJcHJvdmlkX29mZnM7CisJdWludDMyX3QJcHJvdmlkX3NpemU7CisKKyNkZWZpbmUgTUJJTV9S
RUdBQ1RJT05fQVVUT01BVElDCQkwCisjZGVmaW5lIE1CSU1fUkVHQUNUSU9OX01BTlVBTAkJCTEK
Kwl1aW50MzJfdAlyZWdhY3Rpb247CisJdWludDMyX3QJZGF0YV9jbGFzczsKKworCXVpbnQzMl90
CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yZWdpc3RyYXRpb25fc3Rh
dGVfaW5mbyB7CisJdWludDMyX3QJbndlcnJvcjsKKworCXVpbnQzMl90CXJlZ3N0YXRlOwkvKiB2
YWx1ZXM6IE1CSU1fUkVHSVNURVJfU1RBVEUgKi8KKworI2RlZmluZSBNQklNX1JFR01PREVfVU5L
Tk9XTgkJCTAKKyNkZWZpbmUgTUJJTV9SRUdNT0RFX0FVVE9NQVRJQwkJCTEKKyNkZWZpbmUgTUJJ
TV9SRUdNT0RFX01BTlVBTAkJCTIKKwl1aW50MzJfdAlyZWdtb2RlOworCisJdWludDMyX3QJYXZh
aWxjbGFzc2VzOwkvKiB2YWx1ZXM6IE1CSU1fREFUQV9DTEFTUyAqLworCXVpbnQzMl90CWN1cmNl
bGxjbGFzczsJLyogdmFsdWVzOiBNQklNX0NFTExVTEFSX0NMQVNTICovCisKKwl1aW50MzJfdAlw
cm92aWRfb2ZmczsKKwl1aW50MzJfdAlwcm92aWRfc2l6ZTsKKworCXVpbnQzMl90CXByb3ZuYW1l
X29mZnM7CisJdWludDMyX3QJcHJvdm5hbWVfc2l6ZTsKKworCXVpbnQzMl90CXJvYW1pbmd0eHRf
b2ZmczsKKwl1aW50MzJfdAlyb2FtaW5ndHh0X3NpemU7CisKKyNkZWZpbmUgTUJJTV9SRUdGTEFH
U19OT05FCQkJMAorI2RlZmluZSBNQklNX1JFR0ZMQUdTX01BTlVBTF9OT1RfQVZBSUxBQkxFCTEK
KyNkZWZpbmUgTUJJTV9SRUdGTEFHU19QQUNLRVRTRVJWSUNFX0FVVE9BVFRBQ0gJMgorCXVpbnQz
Ml90CXJlZ2ZsYWc7CisKKwl1aW50MzJfdAlkYXRhW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9jaWRfcGFja2V0X3NlcnZpY2UgeworI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfQUNUSU9O
X0FUVEFDSAkJMAorI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0RFVEFDSAkJMQorCXVp
bnQzMl90CWFjdGlvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2Vy
dmljZV9pbmZvIHsKKwl1aW50MzJfdAlud2Vycm9yOworCisjZGVmaW5lIE1CSU1fUEtUU0VSVklD
RV9TVEFURV9VTktOT1dOCQkwCisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9TVEFURV9BVFRBQ0hJ
TkcJCTEKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSEVECQkyCisjZGVmaW5l
IE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hJTkcJCTMKKyNkZWZpbmUgTUJJTV9QS1RTRVJW
SUNFX1NUQVRFX0RFVEFDSEVECQk0CisJdWludDMyX3QJc3RhdGU7CisKKwl1aW50MzJfdAloaWdo
ZXN0X2RhdGFjbGFzczsKKwl1aW50NjRfdAl1cGxpbmtfc3BlZWQ7CisJdWludDY0X3QJZG93bmxp
bmtfc3BlZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfc2lnbmFsX3N0YXRlIHsK
Kwl1aW50MzJfdAlyc3NpOworCXVpbnQzMl90CWVycl9yYXRlOworCXVpbnQzMl90CXNzX2ludHZs
OworCXVpbnQzMl90CXJzc2lfdGhyOworCXVpbnQzMl90CWVycl90aHI7Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdCB7CisJdWludDMyX3QJc2Vzc2lvbmlkOworCisjZGVm
aW5lIE1CSU1fQ09OTkVDVF9ERUFDVElWQVRFCQkwCisjZGVmaW5lIE1CSU1fQ09OTkVDVF9BQ1RJ
VkFURQkJMQorCXVpbnQzMl90CWNvbW1hbmQ7CisKKyNkZWZpbmUgTUJJTV9BQ0NFU1NfTUFYTEVO
CQkyMDAKKwl1aW50MzJfdAlhY2Nlc3Nfb2ZmczsKKwl1aW50MzJfdAlhY2Nlc3Nfc2l6ZTsKKwor
I2RlZmluZSBNQklNX1VTRVJfTUFYTEVOCQk1MTAKKwl1aW50MzJfdAl1c2VyX29mZnM7CisJdWlu
dDMyX3QJdXNlcl9zaXplOworCisjZGVmaW5lIE1CSU1fUEFTU1dEX01BWExFTgkJNTEwCisJdWlu
dDMyX3QJcGFzc3dkX29mZnM7CisJdWludDMyX3QJcGFzc3dkX3NpemU7CisKKyNkZWZpbmUgTUJJ
TV9DT01QUkVTU0lPTl9OT05FCQkwCisjZGVmaW5lIE1CSU1fQ09NUFJFU1NJT05fRU5BQkxFCQkx
CisJdWludDMyX3QJY29tcHJlc3Npb247CisKKyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9OT05FCQkw
CisjZGVmaW5lIE1CSU1fQVVUSFBST1RfUEFQCQkxCisjZGVmaW5lIE1CSU1fQVVUSFBST1RfQ0hB
UAkJMgorI2RlZmluZSBNQklNX0FVVEhQUk9UX01TQ0hBUAkJMworCXVpbnQzMl90CWF1dGhwcm90
OworCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfREVGQVVMVAkwCisjZGVmaW5lIE1CSU1f
Q09OVEVYVF9JUFRZUEVfSVBWNAkxCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNgky
CisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNFY2CTMKKyNkZWZpbmUgTUJJTV9DT05U
RVhUX0lQVFlQRV9JUFY0QU5EVjYJNAorCXVpbnQzMl90CWlwdHlwZTsKKworCXVpbnQ4X3QJCWNv
bnRleHRbTUJJTV9VVUlEX0xFTl07CisKKwl1aW50OF90CQlkYXRhW01CSU1fQUNDRVNTX01BWExF
TiArIE1CSU1fVVNFUl9NQVhMRU4gKworCQkJICAgICBNQklNX1BBU1NXRF9NQVhMRU5dOworCit9
IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdF9pbmZvIHsKKwl1aW50MzJfdAlz
ZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX1VOS05PV04JCTAKKyNk
ZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRAkJMQorI2RlZmluZSBNQklNX0FD
VElWQVRJT05fU1RBVEVfQUNUSVZBVElORwkyCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFU
RV9ERUFDVElWQVRFRAkzCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRJ
TkcJNAorCXVpbnQzMl90CWFjdGl2YXRpb247CisKKwl1aW50MzJfdAl2b2ljZTsKKwl1aW50MzJf
dAlpcHR5cGU7CisJdWludDhfdAkJY29udGV4dFtNQklNX1VVSURfTEVOXTsKKwl1aW50MzJfdAlu
d2Vycm9yOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX2lwdjRfZWxlbWVudCB7CisJ
dWludDMyX3QJcHJlZml4bGVuOworCXVpbnQzMl90CWFkZHI7Cit9IF9fcGFja2VkOworCitzdHJ1
Y3QgbWJpbV9jaWRfaXB2Nl9lbGVtZW50IHsKKwl1aW50MzJfdAlwcmVmaXhsZW47CisJdWludDhf
dAkJYWRkclsxNl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJh
dGlvbl9pbmZvIHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9JUENPTkZf
SEFTX0FERFJJTkZPCTB4MDAwMQorI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfR1dJTkZPCQkweDAw
MDIKKyNkZWZpbmUgTUJJTV9JUENPTkZfSEFTX0ROU0lORk8JCTB4MDAwNAorI2RlZmluZSBNQklN
X0lQQ09ORl9IQVNfTVRVSU5GTwkJMHgwMDA4CisJdWludDMyX3QJaXB2NF9hdmFpbGFibGU7CisJ
dWludDMyX3QJaXB2Nl9hdmFpbGFibGU7CisKKwl1aW50MzJfdAlpcHY0X25hZGRyOworCXVpbnQz
Ml90CWlwdjRfYWRkcm9mZnM7CisJdWludDMyX3QJaXB2Nl9uYWRkcjsKKwl1aW50MzJfdAlpcHY2
X2FkZHJvZmZzOworCisJdWludDMyX3QJaXB2NF9nd29mZnM7CisJdWludDMyX3QJaXB2Nl9nd29m
ZnM7CisKKwl1aW50MzJfdAlpcHY0X25kbnNzcnY7CisJdWludDMyX3QJaXB2NF9kbnNzcnZvZmZz
OworCXVpbnQzMl90CWlwdjZfbmRuc3NydjsKKwl1aW50MzJfdAlpcHY2X2Ruc3Nydm9mZnM7CisK
Kwl1aW50MzJfdAlpcHY0X210dTsKKwl1aW50MzJfdAlpcHY2X210dTsKKworCXVpbnQzMl90CWRh
dGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc3RhdGlzdGljc19p
bmZvIHsKKwl1aW50MzJfdAlpbl9kaXNjYXJkczsKKwl1aW50MzJfdAlpbl9lcnJvcnM7CisJdWlu
dDY0X3QJaW5fb2N0ZXRzOworCXVpbnQ2NF90CWluX3BhY2tldHM7CisJdWludDY0X3QJb3V0X29j
dGV0czsKKwl1aW50NjRfdAlvdXRfcGFja2V0czsKKwl1aW50MzJfdAlvdXRfZXJyb3JzOworCXVp
bnQzMl90CW91dF9kaXNjYXJkczsKK30gX19wYWNrZWQ7CisKKworI2lmZGVmIF9LRVJORUwKKwor
c3RydWN0IG1iaW1fZGVzY3JpcHRvciB7CisJdUJ5dGUJYkxlbmd0aDsKKwl1Qnl0ZQliRGVzY3Jp
cHRvclR5cGU7CisJdUJ5dGUJYkRlc2NyaXB0b3JTdWJ0eXBlOworI2RlZmluZSBNQklNX1ZFUl9N
QUpPUih2KQkoKCh2KSA+PiA4KSAmIDB4MGYpCisjZGVmaW5lIE1CSU1fVkVSX01JTk9SKHYpCSgo
dikgJiAweDBmKQorCXVXb3JkCWJjZE1CSU1WZXJzaW9uOworCXVXb3JkCXdNYXhDb250cm9sTWVz
c2FnZTsKKwl1Qnl0ZQliTnVtYmVyRmlsdGVyczsKKwl1Qnl0ZQliTWF4RmlsdGVyU2l6ZTsKKwl1
V29yZAl3TWF4U2VnbWVudFNpemU7CisJdUJ5dGUJYm1OZXR3b3JrQ2FwYWJpbGl0aWVzOworfSBf
X3BhY2tlZDsKKworLyoKKyAqIE5DTSBQYXJhbWV0ZXJzCisgKi8KKyNkZWZpbmUgTkNNX0dFVF9O
VEJfUEFSQU1FVEVSUwkweDgwCisKK3N0cnVjdCBuY21fbnRiX3BhcmFtZXRlcnMgeworCXVXb3Jk
CXdMZW5ndGg7CisJdVdvcmQJYm1OdGJGb3JtYXRzU3VwcG9ydGVkOworI2RlZmluZSBOQ01fRk9S
TUFUX05UQjE2CTB4MDAwMQorI2RlZmluZSBOQ01fRk9STUFUX05UQjMyCTB4MDAwMgorCXVEV29y
ZAlkd050YkluTWF4U2l6ZTsKKwl1V29yZAl3TmRwSW5EaXZpc29yOworCXVXb3JkCXdOZHBJblBh
eWxvYWRSZW1haW5kZXI7CisJdVdvcmQJd05kcEluQWxpZ25tZW50OworCXVXb3JkCXdSZXNlcnZl
ZDE7CisJdURXb3JkCWR3TnRiT3V0TWF4U2l6ZTsKKwl1V29yZAl3TmRwT3V0RGl2aXNvcjsKKwl1
V29yZAl3TmRwT3V0UGF5bG9hZFJlbWFpbmRlcjsKKwl1V29yZAl3TmRwT3V0QWxpZ25tZW50Owor
CXVXb3JkCXdOdGJPdXRNYXhEYXRhZ3JhbXM7Cit9IF9fcGFja2VkOworCisvKgorICogTkNNIEVu
Y29kaW5nCisgKi8KKyNkZWZpbmUgTUJJTV9IRFIxNl9MRU4JXAorCShzaXplb2Yoc3RydWN0IG5j
bV9oZWFkZXIxNikgKyBzaXplb2Yoc3RydWN0IG5jbV9wb2ludGVyMTYpKQorI2RlZmluZSBNQklN
X0hEUjMyX0xFTglcCisJKHNpemVvZihzdHJ1Y3QgbmNtX2hlYWRlcjMyKSArIHNpemVvZihzdHJ1
Y3QgbmNtX3BvaW50ZXIzMikpCisKK3N0cnVjdCBuY21faGVhZGVyMTYgeworI2RlZmluZSBOQ01f
SERSMTZfU0lHCQkweDQ4NGQ0MzRlCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdIZWFk
ZXJMZW5ndGg7CisJdVdvcmQJd1NlcXVlbmNlOworCXVXb3JkCXdCbG9ja0xlbmd0aDsKKwl1V29y
ZAl3TmRwSW5kZXg7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNtX2hlYWRlcjMyIHsKKyNkZWZp
bmUgTkNNX0hEUjMyX1NJRwkJMHg2ODZkNjM2ZQorCXVEV29yZAlkd1NpZ25hdHVyZTsKKwl1V29y
ZAl3SGVhZGVyTGVuZ3RoOworCXVXb3JkCXdTZXF1ZW5jZTsKKwl1RFdvcmQJZHdCbG9ja0xlbmd0
aDsKKwl1RFdvcmQJZHdOZHBJbmRleDsKK30gX19wYWNrZWQ7CisKKworI2RlZmluZSBNQklNX05D
TV9OVEhfU0lEU0hJRlQJMjQKKyNkZWZpbmUgTUJJTV9OQ01fTlRIX0dFVFNJRChzKQkoKChzKSA+
IE1CSU1fTkNNX05USF9TSURTSElGVCkgJiAweGZmKQorCitzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9k
Z3JhbSB7CisJdVdvcmQJd0RhdGFncmFtSW5kZXg7CisJdVdvcmQJd0RhdGFncmFtTGVuOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG5jbV9wb2ludGVyMTYgeworI2RlZmluZSBNQklNX05DTV9OVEgx
Nl9JUFMJIDB4MDA1MzUwNDkKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMTZfSVNJU0cocykgKCgocykg
JiAweDAwZmZmZmZmKSA9PSBNQklNX05DTV9OVEgxNl9JUFMpCisjZGVmaW5lIE1CSU1fTkNNX05U
SDE2X1NJRyhzKQlcCisJCSgoKChzKSAmIDB4ZmYpIDw8IE1CSU1fTkNNX05USF9TSURTSElGVCkg
fCBNQklNX05DTV9OVEgxNl9JUFMpCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdMZW5n
dGg7CisJdVdvcmQJd05leHROZHBJbmRleDsKKworCS8qIE1pbmltdW0gaXMgdHdvIGRhdGFncmFt
cywgYnV0IGNhbiBiZSBtb3JlICovCisJc3RydWN0IG5jbV9wb2ludGVyMTZfZGdyYW0gZGdyYW1b
Ml07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9kZ3JhbSB7CisJdURXb3Jk
CWR3RGF0YWdyYW1JbmRleDsKKwl1RFdvcmQJZHdEYXRhZ3JhbUxlbjsKK30gX19wYWNrZWQ7CisK
K3N0cnVjdCBuY21fcG9pbnRlcjMyIHsKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfSVBTCTB4MDA3
MzcwNjkKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfSVNJU0cocykJXAorCQkoKChzKSAmIDB4MDBm
ZmZmZmYpID09IE1CSU1fTkNNX05USDMyX0lQUykKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfU0lH
KHMpCQlcCisJCSgoKChzKSAmIDB4ZmYpIDw8IE1CSU1fTkNNX05USF9TSURTSElGVCkgfCBNQklN
X05DTV9OVEgzMl9JUFMpCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdMZW5ndGg7CisJ
dVdvcmQJd1Jlc2VydmVkNjsKKwl1RFdvcmQJZHdOZXh0TmRwSW5kZXg7CisJdURXb3JkCWR3UmVz
ZXJ2ZWQxMjsKKworCS8qIE1pbmltdW0gaXMgdHdvIGRhdGFncmFtcywgYnV0IGNhbiBiZSBtb3Jl
ICovCisJc3RydWN0IG5jbV9wb2ludGVyMzJfZGdyYW0gZGdyYW1bMl07Cit9IF9fcGFja2VkOwor
CisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogX01CSU1fSF8gKi8KZGlmZiAtLWdp
dCBhL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZSBiL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZQpp
bmRleCAyZDE2NmE5NWRjMDMuLmFjNDgzNDU4ZWEyYSAxMDA2NDQKLS0tIGEvc3lzL21vZHVsZXMv
dXNiL01ha2VmaWxlCisrKyBiL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZQpAQCAtNDksNyArNDks
NyBAQCBTVUJESVIgKz0gJHtfcnVtfSAke19ydW59ICR7X3J1bmZ3fSAke191YXRofSB1cGd0IHVz
aWUgdXJhbCAke196eWR9ICR7X3VydHd9CiBTVUJESVIgKz0gYXRwIGNmdW1hc3MgdWhpZCB1aGlk
X3NuZXMgdWtiZCB1bXMgdWRicCB1ZXAgd210IHdzcCB1Z29sZCB1bGVkIFwKIAkgIHVzYmhpZAog
U1VCRElSICs9IHVjb20gdTNnIHVhcmsgdWJzYSB1YnNlciB1Y2hjb20gdWN5Y29tIHVmb21hIHVm
dGRpIHVnZW5zYSB1aXBhcSB1bHB0IFwKLQkgIHVtY3QgdW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxj
b20gdXNsY29tIHV2aXNvciB1dnNjb20KKwkgIHVtYiB1bWN0IHVtY3MgdW1vZGVtIHVtb3Njb20g
dXBsY29tIHVzbGNvbSB1dmlzb3IgdXZzY29tCiBTVUJESVIgKz0gaTJjdGlueXVzYgogU1VCRElS
ICs9IGNwMjExMgogU1VCRElSICs9IHVkbApkaWZmIC0tZ2l0IGEvc3lzL21vZHVsZXMvdXNiL3Vt
Yi9NYWtlZmlsZSBiL3N5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMTc1OTJkOTRkZmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9zeXMvbW9kdWxlcy91c2IvdW1iL01ha2VmaWxlCkBAIC0wLDAgKzEsMzUgQEAKKyMKKyMKKyMg
Q29weXJpZ2h0IChjKSAyMDA4IEhhbnMgUGV0dGVyIFNlbGFza3kuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKK1M9ICAgICAke1NSQ1RP
UH0vc3lzCisKKy5QQVRIOiAkUy9kZXYvdXNiL25ldAorCitLTU9EPQl1bWIKK1NSQ1M9CW9wdF9i
dXMuaCBvcHRfdXNiLmggZGV2aWNlX2lmLmggYnVzX2lmLmggdXNiX2lmLmggdXNiZGV2cy5oIFwK
KwlpZl91bWIuYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+CmRpZmYgLS1naXQgYS9zeXMvc3lz
L3NvY2tpby5oIGIvc3lzL3N5cy9zb2NraW8uaAppbmRleCA4MjRiNzdlNTdhMTcuLmNmNjEyMDc5
YzJmMyAxMDA2NDQKLS0tIGEvc3lzL3N5cy9zb2NraW8uaAorKysgYi9zeXMvc3lzL3NvY2tpby5o
CkBAIC0xNDcsNCArMTQ3LDggQEAKICNkZWZpbmUJU0lPQ1NJRkNBUE5WCV9JT1coJ2knLCAxNTUs
IHN0cnVjdCBpZnJlcSkJLyogc2V0IElGIGZlYXR1cmVzICovCiAjZGVmaW5lCVNJT0NHSUZDQVBO
VglfSU9XUignaScsIDE1Niwgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgZmVhdHVyZXMgKi8KIAor
I2RlZmluZQlTSU9DR1VNQklORk8JX0lPV1IoJ2knLCAxNTcsIHN0cnVjdCBpZnJlcSkJLyogZ2V0
IE1CSU0gaW5mbyAqLworI2RlZmluZQlTSU9DU1VNQlBBUkFNCSBfSU9XKCdpJywgMTU4LCBzdHJ1
Y3QgaWZyZXEpCS8qIHNldCBNQklNIHBhcmFtICovCisjZGVmaW5lCVNJT0NHVU1CUEFSQU0JX0lP
V1IoJ2knLCAxNTksIHN0cnVjdCBpZnJlcSkJLyogZ2V0IE1CSU0gcGFyYW0gKi8KKwogI2VuZGlm
IC8qICFfU1lTX1NPQ0tJT19IXyAqLwotLSAKMi40My4wCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251587</attachid>
            <date>2024-06-20 00:32:59 +0000</date>
            <delta_ts>2024-12-10 23:55:32 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>151298</size>
            <attacher name="Pierre Pronchery">khorben</attacher>
            
              <data encoding="base64">RnJvbSAyZTU5ZmRhYTFjMjE5NTY5YzJkY2FlMjcwZGNiNTNiY2JjMzZmZDZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+
CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMjA6MjA6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJ
bnRyb2R1Y2UgdGhlIFVTQiB1bWIoNCkgbmV0d29yayBkcml2ZXIKClRoaXMgaW5jbHVkZXM6Cgoq
IFRoZSB1bWIoNCkga2VybmVsIGRyaXZlcgoqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wK
LS0tCiBzYmluL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSArCiBzYmluL3VtYmN0bC9N
YWtlZmlsZSAgICAgICAgIHwgICAgOCArCiBzYmluL3VtYmN0bC91bWJjdGwuOCAgICAgICAgIHwg
IDE3MiArKwogc2Jpbi91bWJjdGwvdW1iY3RsLmMgICAgICAgICB8ICA3NjcgKysrKysrKysrCiBz
aGFyZS9tYW4vbWFuNC9NYWtlZmlsZSAgICAgIHwgICAgMSArCiBzaGFyZS9tYW4vbWFuNC91bWIu
NCAgICAgICAgIHwgICA5MCArKwogc3lzL2NvbmYvZmlsZXMgICAgICAgICAgICAgICB8ICAgIDEg
Kwogc3lzL2Rldi91c2IvbmV0L2lmX3VtYi5jICAgICB8IDI5MTEgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogc3lzL2Rldi91c2IvbmV0L2lmX3VtYnJlZy5oICB8ICA0NDEgKysr
KysKIHN5cy9kZXYvdXNiL25ldC9tYmltLmggICAgICAgfCAgNzI0ICsrKysrKysrKwogc3lzL21v
ZHVsZXMvdXNiL01ha2VmaWxlICAgICB8ICAgIDIgKy0KIHN5cy9tb2R1bGVzL3VzYi91bWIvTWFr
ZWZpbGUgfCAgIDM1ICsKIHN5cy9uZXQvaWZfdHlwZXMuaCAgICAgICAgICAgfCAgICAxICsKIHN5
cy9zeXMvc29ja2lvLmggICAgICAgICAgICAgfCAgICA0ICsKIDE0IGZpbGVzIGNoYW5nZWQsIDUx
NTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNiaW4v
dW1iY3RsL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2Jpbi91bWJjdGwvdW1iY3RsLjgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzYmluL3VtYmN0bC91bWJjdGwuYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IHNoYXJlL21hbi9tYW40L3VtYi40CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2Iv
bmV0L2lmX3VtYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2IvbmV0L2lmX3VtYnJl
Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2IvbmV0L21iaW0uaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUKCmRpZmYgLS1naXQgYS9zYmlu
L01ha2VmaWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCAzMDNlMjllOWUxMjQuLjQ4MDZlYzc3YTgy
MiAxMDA2NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2VmaWxlCkBAIC02NCw2
ICs2NCw3IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lzY3RsIFwKIAl0dW5l
ZnMgXAorCXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9ICJubyIgfHwgJHtN
S19JTkVUNn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFrZWZpbGUgYi9zYmlu
L3VtYmN0bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjM1YWZiMWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3RsL01ha2VmaWxlCkBA
IC0wLDAgKzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91c2IvbmV0CisKK1BS
T0c9CXVtYmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisKKy5pbmNsdWRlIDxi
c2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44IGIvc2Jpbi91bWJj
dGwvdW1iY3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NWJl
MzQyZGM2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJjdGwuOApAQCAtMCww
ICsxLDE3MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTggYnkg
UGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0Ogor
LlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworLlwiIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisuXCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5cIiBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
Ky5cIiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisuXCIgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HCisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisu
XCIKKy5cIiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1OjM1OjIwIHNldmFu
IEV4cCAkCisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0ZTogW1RodSBBdWcg
MzEgMTA6NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisuRHQgVU1CQ1RMIDgK
Ky5PcworLlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNldCBwYXJhbWV0ZXJz
IGZvciBhIE1CSU0gaW50ZXJmYWNlICg0Ry9MVEUpCisuU2ggU1lOT1BTSVMKKy5ObSB1bWJjdGwK
Ky5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9wIEFyIHZhbHVlCisuQXIg
Li4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBjb25maWctZmlsZQorLkFy
IGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0gQXIgZm9ybWF0CisuQXIg
aWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0cyB0aGUgZm9sbG93aW5n
IG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVYWFggLW9mZnNldCBpbmRl
bnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNvbmZpZy1maWxlCitmb3IK
Ky5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWlycywgb25lIHBlciBsaW5l
LCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorVGhp
cyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBub3QgcGFzc2VkIGFzIGNv
bW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcgd2l0aCAjIHRvIHRoZSBl
bmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBGbCBtIEFyIGZvcm1hdAor
RGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIgZm9ybWF0CitzcGVjaWZp
ZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwKKy5QcAorVGhlCisuWHIg
dW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50
cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0aW5ncyB0aGF0IGNhbiBi
ZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBtYXkgYmUgY3JlZGVudGlh
bHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVzLgorVGhlCisuTm0KK3V0
aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5ncywgb3IgYWRq
dXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitGb3Igd2hhdGV2ZXIgaW50
ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBhcmFtZXRlcgorLkFyIGlm
bmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGludGVyZmFjZSBmb3Igd2hp
Y2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRpc3BsYXllZC4KK1VzZQor
LlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUgd2hpY2ggaW50ZXJmYWNl
cyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0ZXIgaXMgZ2l2ZW4sCisu
Tm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IKKy5BciBpZm5hbWUKK2Fu
ZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIHN1
cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUgY29tbWFuZCB3b3JrcyBp
bgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBxdWlldGx5LCB1bmxlc3Mg
dGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2ggd2lsbCBjYXVzZSBhIGZp
bmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBhYm92ZSBvbmNlIGFsbCBv
dGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBhcmFtZXRlcnMgY3VycmVu
dGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9IE5zIEVtIGFjY2Vzcy1w
b2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgorLkl0IEFyIHVzZXJuYW1l
IE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0bworLkVtIHVzZXJuYW1l
IC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQKK1NldCB0aGUgcGFzc3dv
cmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBOcyBFbSBwaW4tY29kZQor
RW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsgTnMgXCY9IE5zIEVtIHB1
ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0IEFyIHJvYW1pbmcKK0Fs
bG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFyIC1yb2FtaW5nCitEZW55
IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2ggRVhBTVBMRVMKKy5CZCAt
bGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1vZGUgYXV0b21hdGljLCBy
ZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1OZXQiLCBkYXRhY2xhc3Mg
TFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQyIiwgcm9hbWluZyAiIiAo
ZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAwMAorCWZpcm13YXJlICJN
QklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVkCisuUHAKK0Rpc3BsYXkg
dGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCB1bWIwIGFwbiBv
cGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQgbW9iaWxlCisuRWQKKy5Q
cAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSB0aGUg
Y29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAvZGV2L3N0ZGluIHVtYjAg
PDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9u
IHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VFIEFMU08KKy5YciBuZXRz
dGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5YciBpZndhdGNoZCA4Cisu
U2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFyZWQgaW4KKy5OeCA5LjAg
LgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5CisuQW4gUGllcnJlIFBy
b25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwuYyBiL3NiaW4vdW1iY3Rs
L3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODgxNjdi
YWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1iY3RsLmMKQEAgLTAsMCAr
MSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8KKy8qCisgKiBPcmlnaW5h
bCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3Jn
PiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElTJycgQU5EIEFOWSBFWFBS
RVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVCU0QgdXBkYXRlcykKKyAq
CisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkgPHBpZXJyZUBkZWZv
cmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICog
LSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRl
ciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisg
KiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgor
I2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisKKyNpbmNs
dWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9p
bmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91bWJyZWcuaCIKKworCisv
KiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJfYWN0
c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtdID0KKwlNQklNX1NJTVNU
QVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3Vt
Yl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNv
bnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0KKwlNQklNX1BLVFNSVl9T
VEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91
bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9OUzsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0KKwlVTUJfSU5URVJOQUxf
U1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciBf
dW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQsICJQSU4gcmVxdWlyZWQi
fSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwKKwl7IFVNQl9QVUtfUkVR
VUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0
IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQoreworCXsgTUJJTV9SRUdNT0RF
X1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FVVE9NQVRJQywgImF1dG9t
YXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwiIH0sCisJeyAwLCBOVUxM
IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJfYmVyW10gPQor
eworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJeyBVTUJfQkVSX1ZFUllH
T09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29vZCIgfSwKKwl7IFVNQl9C
RVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVtIiB9LAorCXsgVU1CX0JF
Ul9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5IGJhZCIgfSwKKwl7IFVN
Ql9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7IDAsIE5VTEwgfQorfTsK
KworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3RvX3V0ZjE2KGNvbnN0IGNo
YXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOworc3RhdGljIGludCBfZXJy
b3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0YXRpYyBpbnQgX3VtYmN0
bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFyZ2MsIGNoYXIgKiBhcmd2
W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAqIGlmbmFtZSwgY2hhciBj
b25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IF91bWJjdGxfZHVt
cChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSk7
CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1
Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9nYXRld2F5KGNoYXIgY29u
c3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5h
bWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBfdW1iY3RsX2lvY3RsKGNo
YXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LAorCQlzdHJ1
Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChjaGFyIGNvbnN0ICogaWZu
YW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBhcmdjLCBjaGFyICogYXJn
dltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7CitzdGF0aWMgaW50IF91c2Fn
ZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZfdCAqIGluLCBpbnQgaW5s
ZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3QgKiBpbiwgaW50IGlubGVu
LCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5jdGlvbnMgKi8KKy8qIGNo
YXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBPcGVuQlNEJ3MgaWZjb25m
aWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3QgY2hhciAqIGluLCB1aW50
MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7CisJdWludDE2X3QgYzsK
KworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09ICdcMCcpIHsKKwkJCS8q
CisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBidXQgemVybyBvdXQgdGhl
CisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0KG91dCwgMCwgb3V0bGVu
KTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXplb2YoKm91dCkpCisJCQly
ZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiArPSBzaXplb2YoKm91dCk7
CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8qIGVycm9yICovCitzdGF0
aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0LCAuLi4pCit7CisJdmFf
bGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJdmFfc3RhcnQoYXAsIGZv
cm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWZw
dXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB1bWJjdGwgKi8KK3N0
YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFy
Z2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBpZnJlcSBpZnI7CisJc3Ry
dWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgdW1icDsKKworCWlmKChm
ZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIsIDAs
IHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2YoaWZy
Lmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0KCZ1bWJwLCAwLCBzaXpl
b2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1icDsKKwkJaWYoX3VtYmN0
bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAhPSAwCisJCQkJfHwgX3Vt
YmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAorCQkJCXx8IF91bWJjdGxf
aW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlmcikgIT0gMCkKKwkJewor
CQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYoYXJnYyA9PSAwIHx8IHZl
cmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJCWlmKF91
bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZyKSAhPSAwKQorCQl7CisJ
CQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3RsX2luZm8oaWZuYW1lLCAm
dW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczog
JXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1i
Y3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBjb25zdCAqIGlmbmFtZSwg
c3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogZmlsZW5hbWUpOwor
CitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZuYW1lLCBjaGFyIGNvbnN0
ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZy
OworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7CisK
KwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVybiAyOworCW1lbXNldCgm
aWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwgc2l6
ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1bWJwOworCW1l
bXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwg
ZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxlX3BhcnNlKGlmbmFtZSwg
JnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJ
T0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAyOwor
CX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1bWJp
OworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CSU5GTywgJmlmcikgIT0g
MCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJX3VtYmN0bF9pbmZv
KGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJuIF9lcnJv
cigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAwOworfQor
CitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJf
cGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1lKQoreworCWludCByZXQg
PSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVfdCBsZW47CisJaW50IGk7
CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5VTEwsIE5VTEwgfTsKKwlj
aGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKQorCQly
ZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl3
aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkKKwl7CisJCWlmKGJ1Zlsw
XSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAnOwor
CQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYoYnVmW2xlbiAtIDFdICE9
ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwKKwkJ
CQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0YyhmcCkpICE9IEVPRiAm
JiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVmW2xlbiAtIDFdID0gJ1ww
JzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5VTEwpCisJCXsKKwkJCXRv
a2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UKKwkJCXRva2Vuc1sxXSA9
IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAsIChwICE9IE5VTEwpID8g
MiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZlb2YoZnApOworCWlmKGZj
bG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxl
bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIHVtYmN0bF9k
dW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25z
dCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IGlmcmVx
IGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVyYm9zZTsKKworCWlmKChm
ZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIsIDAs
IHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2YoaWZy
Lmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJaWYoX3VtYmN0
bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9IDApCisJeworCQljbG9z
ZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJuIF9l
cnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWlmKHN0cm5jYXNl
Y21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1bXBfanNvbihpZm5hbWUs
ICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBVbnN1cHBvcnRlZCBmb3Jt
YXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0bF9kdW1wX2pzb24gKi8K
K3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVj
dCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJcHJpbnRmKCJ7IikKKyNk
ZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09OX1NFUAlwcmludGYoIiwg
IikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQorI2RlZmluZSBKU09OX0FS
UkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5HKGtleSwgdmFsKQlwcmlu
dGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpTT05fSU5UKGtleSwgdmFs
KQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUgSlNPTl9VTE9ORyhrZXks
IHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2RlZmluZSBKU09OX0JPT0wo
a2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/InRydWUiOiJmYWxzZSIp
CisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjogbnVsbCIsIGtleSkKKyNk
ZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtleSkKKworI2RlZmluZSBK
U09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wiOiBcIiIsIGtleSksXAor
CQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikpCisKKyNkZWZpbmUgSlNP
Tl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09OX1NUUklORyhrZXksIHZh
bCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05VTExfV0VNUFRZKGtleSwg
dmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wKKwkJCQkJSlNPTl9XU1RS
SU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkKKworCUpTT05fU1RBUlQ7
CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNPTl9TRVA7CisJSlNPTl9O
VUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0ZSwgdW1iaS0+c3RhdGUp
KTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0dXMiLCB1bWJfdmFsMmRl
c2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlKU09OX1NFUDsKKwlKU09O
X0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1wdHNfbGVmdCk7CisJSlNP
Tl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1iX3ZhbDJkZXNjcihfdW1i
X2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VN
UFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3RhdGUsIHVtYmktPnNpbV9z
dGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2ltLXJlZ2lzdHJhdGlvbiIs
IHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3RhdGUpKTsKKwlKU09OX1NF
UDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9kZSIsIHVtYl92YWwyZGVz
Y3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQo
Im5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxM
X0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGt0c3RhdGUsIHVtYmkt
PnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJzdXBwb3J0ZWQt
ZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5zdXBwb3J0
ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJwcmVmZXJyZWQtZGF0
YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5wcmVmZXJyZWRj
bGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJvZmZlcmVkLWRhdGFjbGFz
c2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+aGlnaGVzdGNsYXNzKSk7
CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3MiLCB1bWJfdmFsMmRlc2Ny
KF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09OX1NFUDsKKwlKU09OX05V
TExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJOQU1FX01B
WExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhvbmUtbnVtYmVyIiwgdW1i
aS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBU
WSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklCRVJJRF9NQVhMRU4pOwor
CUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1iaS0+aWNjaWQsIFVNQl9J
Q0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9hbWluZy1vbiIsIHVtYmkt
PmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJyb2FtaW5n
LXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRfTUFYTEVOKTsKKwlKU09O
X1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJpLT5kZXZpZCwgVU1CX0RF
VklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgiZmlybXdhcmUiLCB1
bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExf
V0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5GT19NQVhMRU4pOworCUpT
T05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1uYW1lIiwgdW1iaS0+YXBu
LCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgidXNlcm5h
bWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7CisJ
SlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29yZCwgVU1CX1BBU1NXT1JE
X01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1bWJpLT5yc3NpKTsKKwlK
U09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJpLT5iZXIpOworCUpTT05f
U0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19yYWRpb19vbik7CisJSlNP
Tl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3X3JhZGlvX29uKTsKKwlK
U09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJpLT51cGxpbmtfc3BlZWQp
OworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVkIiwgdW1iaS0+ZG93bmxp
bmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRucyIpOworCUpTT05fQVJS
QVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2VydmVycyBpbiB0aGUgSlNP
TiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1X2ludDMyX3QJCWlwdjRk
bnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMgaXMgZWl0aGVyIG9mIG1h
eGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQncyBtZW1zZXQgdG8gMCkK
KwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisKKy8qIHVtYmN0bF9nYXRl
d2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNvbnN0ICogaWZuYW1lKQor
eworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqIHNp
bjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVt
c2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1l
LCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBT
SU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDI7
CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9kc3RhZGRyOworCXBy
aW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJaWYoY2xvc2UoZmQpICE9
IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwgc3RyZXJyb3IoZXJybm8p
KTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLworc3RhdGljIHZvaWQgX3Vt
YmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7
CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiArIDFdOworCWNoYXIgcG5b
VU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VNQl9ST0FNSU5HVEVYVF9N
QVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFdOworCWNoYXIgZndpbmZv
W1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1CX0hXSU5GT19NQVhMRU4g
KyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJOQU1F
X01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsKKwlfdXRmMTZfdG9fY2hh
cih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9mKHBuKSk7CisJX3V0ZjE2
X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhUX01BWExFTiwKKwkJCXJv
YW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+YXBuLCBVTUJf
QVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+Zndp
bmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndpbmZvKSk7CisJX3V0ZjE2
X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwgaHdpbmZvLCBzaXplb2Yo
aHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMsIHJlZ2lzdHJhdGlvbiAl
c1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMsIHNpZ25hbCAlc1xuIgor
CQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIgKCVzKVxuIgorCQkJIlx0
QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAiXG4iCisJCQkiXHRmaXJt
d2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFtZSwgdW1iX3ZhbDJkZXNj
cihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVnbW9k
ZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVnc3RhdGUsIHVtYmkt
PnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1
bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2JlciwgdW1iaS0+YmVyKSwg
cG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJhbGxvd2VkIiA6ICJkZW5p
ZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRvd25saW5rX3NwZWVkLAor
CQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAqLworc3RhdGljIHZvaWQg
X3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sKKwkvKiBYWFggTm90ZSB0
byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5OgorCSAqIGRv
CisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8gKGNoYXIpaHRvbGUxNigq
aW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9sZTE2KCooaW4rKykpICE9
ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFuIGVmZm9ydCB0byByZXVz
ZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRmMTZfdG9fY2hhciBpbnN0
ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRmMTZfdG9fY2hhcihpbiwg
aW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOworCXByaW50ZigiJXMiLCBi
dWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bF9pb2N0bChj
aGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwKKwkJc3Ry
dWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0LCBpZnIpICE9IDApCisJ
CXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJ
cmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2FsbGJhY2tzICovCitzdGF0
aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hh
ciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNvbnN0ICosIHN0cnVj
dCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcGFzc3dv
cmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOwor
c3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVyICos
IGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIgY29uc3QgKiwgc3RydWN0
IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5n
X2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwKKwkJY2hhciBjb25z
dCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBjb25zdCAqLCBzdHJ1Y3Qg
dW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0aWMgaW50IF91bWJjdGxf
c2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwKKwkJ
aW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJeworCQljaGFyIGNvbnN0ICog
bmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJCQlzdHJ1Y3QgdW1iX3Bh
cmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVyOworCX0gY2FsbGJhY2tz
W10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAidXNlcm5hbWUiLCBfc2V0
X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNzd29yZCwgMSB9LAorCQl7
ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1aywgMSB9LAorCQl7ICJy
b2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1yb2FtaW5nIiwgX3NldF9y
b2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBqOworCisJZm9yKGkgPSAw
OyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6ZW9mKGNhbGxiYWNrcykg
LyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChhcmd2W2ldLCBjYWxsYmFj
a3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nbal0ucGFyYW1ldGVyICYm
IGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIlczogSW5jb21wbGV0ZSIK
KwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNhbGxiYWNrc1tqXS5jYWxs
YmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBhcmFtZXRlcgorCQkJCQkJ
CT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlmKGNhbGxiYWNr
c1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYoaiA9PSBz
aXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJCXJldHVybiBfZXJyb3Io
LTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9w
YXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQoreworCXVtYnAtPmFwbmxlbiA9
IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1icC0+YXBuKSk7CisJaWYo
dW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+IHNpemVvZih1bWJwLT5h
cG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiQVBOIHRvbyBsb25n
Iik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNvbnN0
ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1
c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3RvX3V0ZjE2KHVzZXJuYW1l
LCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFtZSkpOworCWlmKHVtYnAt
PnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2VybmFtZWxlbiA+IHNpemVv
Zih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUs
ICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9zZXRf
cGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJw
LAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFzc3dvcmRsZW4gPSBfY2hh
cl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlzaXplb2YodW1icC0+cGFz
c3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8IChzaXplX3QpdW1icC0+
cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQlyZXR1cm4gX2Vycm9yKC0x
LCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3Bh
cmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJdW1icC0+aXNfcHVrID0g
MDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAtPnBpbmxlbiA9IF9jaGFy
X3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGluKSk7CisJaWYodW1icC0+
cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBzaXplb2YodW1icC0+cGlu
KSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwgIlBJTiBjb2RlIHRvbyBs
b25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9wdWsoY2hhciBjb25zdCAq
IGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogcHVr
KQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklNX1BJTl9PUF9FTlRFUjsK
Kwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAtPnBpbiwgc2l6ZW9mKHVt
YnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVfdCl1bWJwLT5waW5sZW4g
PiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFt
ZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3Nl
dF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVy
ICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9pZCkgaWZuYW1lOworCSh2
b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1i
X3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQpCit7CisJKHZvaWQpIGlm
bmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9IDA7CisJcmV0dXJuIDA7
Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBfdW1iY3RsX3NvY2tldCh2
b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFN
LCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAlcyIsIHN0cmVycm9yKGVy
cm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitzdGF0aWMgaW50IF91c2Fn
ZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZuYW1lIFtwYXJhbWV0ZXIg
W3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZpZy1maWxlIGlmbmFtZVxu
IgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVtYmN0bCAtbSBmb3JtYXQg
aWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFyZSBtdXR1YWxseSBleGNs
dXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5cbiIsCisJCQlzdGRlcnIp
OworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8KK3N0YXRpYyB2b2lkIF91
dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hhciAqIG91dCwgc2l6ZV90
IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxlbiA+IDApIHsKKwkJYyA9
IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09IDAgfHwgLS1vdXRsZW4g
PT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0ICovCisJCQkqb3V0ID0g
J1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWkoYykgPyAoY2hhciljIDog
Jz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBtYWluICovCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwljaGFyIGNvbnN0ICogZmls
ZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxMOworCWludCBnYXRld2F5
ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdldG9wdChhcmdjLCBhcmd2
LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJY2FzZSAnZic6CisJCQkJ
ZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJCQlnYXRld2F5ID0gMDsK
KwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0gTlVMTDsKKwkJCQlmb3Jt
YXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnbSc6CisJ
CQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsKKwkJCQlnYXRld2F5ID0g
MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UrKzsKKwkJCQlicmVhazsK
KwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJaWYob3B0aW5kID09IGFy
Z2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBOVUxMKQorCXsKKwkJaWYo
b3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOworCQlyZXR1cm4gX3VtYmN0
bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOworCX0KKwlpZihmb3JtYXQg
IT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJCXJldHVybiBfdXNhZ2Uo
KTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZvcm1hdCwgdmVyYm9zZSk7
CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9IGFyZ2MpCisJCQlyZXR1
cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJndltvcHRpbmRdKTsKKwl9
CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBhcmdjIC0gb3B0aW5kIC0g
MSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9tYW40
L01ha2VmaWxlIGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXggNGQzYTUyNzNkNzI2Li5l
YzY5OTg4MjY0ZTIgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L01ha2VmaWxlCisrKyBiL3No
YXJlL21hbi9tYW40L01ha2VmaWxlCkBAIC0xMDMxLDYgKzEwMzEsNyBAQCBNQU4rPQlcCiAJdWxl
ZC40IFwKIAl1bHB0LjQgXAogCXVtYXNzLjQgXAorCXVtYi40IFwKIAl1bWNzLjQgXAogCXVtY3Qu
NCBcCiAJdW1vZGVtLjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjQvdW1iLjQgYi9zaGFy
ZS9tYW4vbWFuNC91bWIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmEwNTVmOWU2ZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW40L3VtYi40CkBA
IC0wLDAgKzEsOTAgQEAKKy5cIiAkTmV0QlNEOiB1bWIuNCx2IDEuNCAyMDE5LzA4LzMwIDA5OjIy
OjE3IHdpeiBFeHAgJAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE2IGdlbnVhIG1iSAorLlwi
CisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhp
cyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhl
cmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorLlwiIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisuXCIK
Ky5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVND
TEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElO
Q0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKy5c
IiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVT
RSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisuXCIgQUNUSU9OIE9GIENPTlRSQUNU
LCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKy5c
IiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNP
RlRXQVJFLgorLlwiCisuRGQgQXVndXN0IDI0LCAyMDE5CisuRHQgVU1CIDQKKy5PcworLlNoIE5B
TUUKKy5ObSB1bWIKKy5OZCBVU0IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwgKE1C
SU0pCisuU2ggU1lOT1BTSVMKKy5DZCAidW1iKiAgYXQgdWh1Yj8gcG9ydD8iCisuU2ggREVTQ1JJ
UFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVVNCIE1CSU0gZGV2
aWNlcy4KKy5QcAorTUJJTSBkZXZpY2VzIGVzdGFibGlzaCBjb25uZWN0aW9ucyB2aWEgY2VsbHVs
YXIgbmV0d29ya3Mgc3VjaCBhcworR1BSUywgVU1UUywgYW5kIExURS4KK1RoZXkgYXBwZWFyIGFz
IGEgcmVndWxhciBwb2ludC10by1wb2ludCBuZXR3b3JrIGludGVyZmFjZSwKK3RyYW5zcG9ydGlu
ZyByYXcgSVAgZnJhbWVzLgorLlBwCitSZXF1aXJlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMg
bGlrZSBQSU4gYW5kIEFQTiBoYXZlIHRvIGJlIHNldAord2l0aAorLlhyIHVtYmN0bCA4IC4KK09u
Y2UgdGhlIFNJTSBjYXJkIGhhcyBiZWVuIHVubG9ja2VkIHdpdGggdGhlIGNvcnJlY3QgUElOLCBp
dAord2lsbCByZW1haW4gaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgTUJJTSBkZXZpY2UgaXMgcG93
ZXItY3ljbGVkLgorSW4gY2FzZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBhbiAiYWx3YXlz
LW9uIiBVU0IgcG9ydCwKK2l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25uZWN0IHRvIGEgcHJvdmlk
ZXIgd2l0aG91dCBlbnRlcmluZyB0aGUKK1BJTiBhZ2FpbiBldmVuIGlmIHRoZSBzeXN0ZW0gd2Fz
IHJlYm9vdGVkLgorLlNoIEhBUkRXQVJFCitUaGUgZm9sbG93aW5nIGRldmljZXMgc2hvdWxkIHdv
cms6CisuUHAKKy5CbCAtdGFnIC13aWR0aCBEcyAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAorLkl0
IEVyaWNzc29uIEg1MzIxZ3cgYW5kIE41MzIxZ3cKKy5JdCBGaWJvY29tIEw4MzEtRUFVCisuSXQg
TWVkaW9uIE1vYmlsZSBTNDIyMiAoTWVkaWFUZWsgT0VNKQorLkl0IFNpZXJyYSBXaXJlbGVzcyBF
TTczNDUKKy5JdCBTaWVycmEgV2lyZWxlc3MgRU03NDU1CisuSXQgU2llcnJhIFdpcmVsZXNzIEVN
ODgwNQorLkl0IFNpZXJyYSBXaXJlbGVzcyBNQzgzMDUKKy5FbAorLlNoIFNFRSBBTFNPCisuWHIg
aW50cm8gNCAsCisuWHIgbmV0aW50cm8gNCAsCisuWHIgdXNiIDQgLAorLlhyIGlmY29uZmlnLmlm
IDUgLAorLlhyIGlmY29uZmlnIDggLAorLlhyIHVtYmN0bCA4CisuUnMKKy4lVCAiVW5pdmVyc2Fs
IFNlcmlhbCBCdXMgQ29tbXVuaWNhdGlvbnMgQ2xhc3MgU3ViY2xhc3MgU3BlY2lmaWNhdGlvbiBm
b3IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwiCisuJVUgaHR0cDovL3d3dy51c2Iu
b3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnpp
cAorLlJlCisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RldmljZSBkcml2ZXIgZmlyc3QgYXBwZWFy
ZWQgaW4KKy5PeCA2LjAKK2FuZAorLk54IDkuMCAuCisuU2ggQVVUSE9SUworLkFuIC1ub3NwbGl0
CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gR2VyaGFyZCBSb3RoIEFxIE10
IGdlcmhhcmRAb3BlbmJzZC5vcmcKK2FuZCBwb3J0ZWQgZnJvbQorLk94CitieQorLkFuIFBpZXJy
ZSBQcm9uY2hlcnkgQXEgTXQga2hvcmJlbkBkZWZvcmEub3JnIC4KKy5TaCBDQVZFQVRTCitUaGUK
Ky5ObQorZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgSVB2Ni4KKy5QcAorRGV2aWNlcyB3aGljaCBm
YWlsIHRvIHByb3ZpZGUgYSBjb25mb3JtaW5nIE1CSU0gaW1wbGVtZW50YXRpb24gd2lsbAorcHJv
YmFibHkgYmUgYXR0YWNoZWQgYXMgc29tZSBvdGhlciBkcml2ZXIsIHN1Y2ggYXMKKy5YciB1M2cg
NCAuCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcyBiL3N5cy9jb25mL2ZpbGVzCmluZGV4IDU2
YzkyZjUxOTQ3Zi4uNTA5OGM3YjcxY2M4IDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcworKysg
Yi9zeXMvY29uZi9maWxlcwpAQCAtMzI5Nyw2ICszMjk3LDcgQEAgZGV2L3VzYi9uZXQvaWZfbXVn
ZS5jCQlvcHRpb25hbCBtdWdlCiBkZXYvdXNiL25ldC9pZl9ydWUuYwkJb3B0aW9uYWwgcnVlCiBk
ZXYvdXNiL25ldC9pZl9zbXNjLmMJCW9wdGlvbmFsIHNtc2MKIGRldi91c2IvbmV0L2lmX3VkYXYu
YwkJb3B0aW9uYWwgdWRhdgorZGV2L3VzYi9uZXQvaWZfdW1iLmMJCW9wdGlvbmFsIHVtYgogZGV2
L3VzYi9uZXQvaWZfdXJlLmMJCW9wdGlvbmFsIHVyZQogZGV2L3VzYi9uZXQvaWZfdXNpZS5jCQlv
cHRpb25hbCB1c2llCiBkZXYvdXNiL25ldC9pZl91cm5kaXMuYwkJb3B0aW9uYWwgdXJuZGlzCmRp
ZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMgYi9zeXMvZGV2L3VzYi9uZXQvaWZf
dW1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMzAzZWE5MTBi
NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMKQEAgLTAsMCAr
MSwyOTExIEBACisvKgkkRnJlZUJTRCQgKi8KKy8qCSROZXRCU0QkICovCisvKgkkT3BlbkJTRDog
aWZfdW1iLmMsdiAxLjE4IDIwMTgvMDIvMTkgMDg6NTk6NTIgbXBpIEV4cCAkICovCisKKy8qCisg
KiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTYgZ2VudWEgbWJIIChPcGVuQlNEIHZlcnNpb24p
CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg
dGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMg
aGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoK
KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NM
QUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNM
VURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFO
WSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig
QU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERB
VEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdM
SUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUu
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKHJlLXdyaXRlIGZvciBGcmVl
QlNEKQorICoKKyAqIFJlLXdyaXRlIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkgPHBp
ZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8qCisgKiBNb2JpbGUgQnJvYWRiYW5kIEludGVyZmFjZSBNb2RlbCBzcGVj
aWZpY2F0aW9uOgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFz
c19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnppcAorICogQ29tcGxpYW5jZSB0ZXN0aW5nIGd1
aWRlCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3Mv
TUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj
aW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNsdWRl
IDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMvcHJp
di5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1ZGUg
PHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKworI2luY2x1ZGUgPHN5cy9j
b25mLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2lu
Y2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorCisjaW5j
bHVkZSA8bWFjaGluZS9faW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9icGYuaD4KKyNpbmNs
dWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKyNpbmNsdWRlIDxuZXQv
aWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaW5jbHVkZSA8bmV0L25ldGlz
ci5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgor
I2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorCisj
aW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jZGMuaD4KKyNp
bmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfZGV2aWNlLmg+
CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNi
ZGlfdXRpbC5oPgorI2luY2x1ZGUgInVzYl9pZi5oIgorCisjaW5jbHVkZSAibWJpbS5oIgorI2lu
Y2x1ZGUgImlmX3VtYnJlZy5oIgorCitNQUxMT0NfREVDTEFSRShNX01CSU1fQ0lEX0NPTk5FQ1Qp
OworTUFMTE9DX0RFRklORShNX01CSU1fQ0lEX0NPTk5FQ1QsICJtYmltX2NpZF9jb25uZWN0IiwK
KwkJIkNvbm5lY3Rpb24gcGFyYW1ldGVycyBmb3IgTUJJTSIpOworCisjaWZkZWYgVU1CX0RFQlVH
CisjZGVmaW5lIERQUklOVEYoeC4uLikJCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcpIGxv
ZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4p
CQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcgPj0gKG4pKSBsb2coTE9HX0RFQlVHLCB4KTsg
fSB3aGlsZSAoMCkKKworI2RlZmluZSBERFVNUE4obiwgYiwgbCkJCQkJCQkJXAorCQlkbyB7CQkJ
CQkJCVwKKwkJCWlmICh1bWJfZGVidWcgPj0gKG4pKQkJCQlcCisJCQkJdW1iX2R1bXAoKGIpLCAo
bCkpOwkJCVwKKwkJfSB3aGlsZSAoMCkKKworaW50CSB1bWJfZGVidWcgPSAxOworc3RhdGljIGNo
YXIJKnVtYl91dWlkMnN0cih1aW50OF90IFtNQklNX1VVSURfTEVOXSk7CitzdGF0aWMgdm9pZAkg
dW1iX2R1bXAodm9pZCAqLCBpbnQpOworCisjZWxzZQorI2RlZmluZSBEUFJJTlRGKHguLi4pCQlk
byB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4pCWRvIHsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgRERVTVBOKG4sIGIsIGwpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwor
I2RlZmluZSBERVZOQU0oc2MpCQlkZXZpY2VfZ2V0X25hbWV1bml0KChzYyktPnNjX2RldikKKwor
LyoKKyAqIFN0YXRlIGNoYW5nZSB0aW1lb3V0CisgKi8KKyNkZWZpbmUgVU1CX1NUQVRFX0NIQU5H
RV9USU1FT1VUCTMwCisKKy8qCisgKiBTdGF0ZSBjaGFuZ2UgZmxhZ3MKKyAqLworI2RlZmluZSBV
TUJfTlNfRE9OVF9EUk9QCTB4MDAwMQkvKiBkbyBub3QgZHJvcCBiZWxvdyBjdXJyZW50IHN0YXRl
ICovCisjZGVmaW5lIFVNQl9OU19ET05UX1JBSVNFCTB4MDAwMgkvKiBkbyBub3QgcmFpc2UgYmVs
b3cgY3VycmVudCBzdGF0ZSAqLworCisvKgorICogRGlhZ25vc3RpYyBtYWNyb3MKKyAqLworY29u
c3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcmVnc3RhdGVzW10gPSBNQklNX1JFR1NUQVRFX0RF
U0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2RhdGFjbGFzc2VzW10g
PSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IHVtYl9zaW1zdGF0ZVtdID0gTUJJTV9TSU1TVEFURV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1
Y3QgdW1iX3ZhbGRlc2NyIHVtYl9tZXNzYWdlc1tdID0gTUJJTV9NRVNTQUdFU19ERVNDUklQVElP
TlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zdGF0dXNbXSA9IE1CSU1fU1RBVFVT
X0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2NpZHNbXSA9IE1C
SU1fQ0lEX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX3BrdHN0
YXRlW10gPSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1i
X3ZhbGRlc2NyIHVtYl9hY3RzdGF0ZVtdID0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBU
SU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Vycm9yW10gPSBNQklNX0VSUk9S
X0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX3BpbnR5cGVbXSA9
IE1CSU1fUElOVFlQRV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVt
Yl9pc3RhdGVbXSA9IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlM7CisKKyNkZWZpbmUg
dW1iX3JlZ3N0YXRlKGMpCQl1bWJfdmFsMmRlc2NyKHVtYl9yZWdzdGF0ZXMsIChjKSkKKyNkZWZp
bmUgdW1iX2RhdGFjbGFzcyhjKQl1bWJfdmFsMmRlc2NyKHVtYl9kYXRhY2xhc3NlcywgKGMpKQor
I2RlZmluZSB1bWJfc2ltc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1iX3NpbXN0YXRlLCAocykp
CisjZGVmaW5lIHVtYl9yZXF1ZXN0MnN0cihtKQl1bWJfdmFsMmRlc2NyKHVtYl9tZXNzYWdlcywg
KG0pKQorI2RlZmluZSB1bWJfc3RhdHVzMnN0cihzKQl1bWJfdmFsMmRlc2NyKHVtYl9zdGF0dXMs
IChzKSkKKyNkZWZpbmUgdW1iX2NpZDJzdHIoYykJCXVtYl92YWwyZGVzY3IodW1iX2NpZHMsIChj
KSkKKyNkZWZpbmUgdW1iX3BhY2tldF9zdGF0ZShzKQl1bWJfdmFsMmRlc2NyKHVtYl9wa3RzdGF0
ZSwgKHMpKQorI2RlZmluZSB1bWJfYWN0aXZhdGlvbihzKQl1bWJfdmFsMmRlc2NyKHVtYl9hY3Rz
dGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfZXJyb3Iyc3RyKGUpCXVtYl92YWwyZGVzY3IodW1iX2Vy
cm9yLCAoZSkpCisjZGVmaW5lIHVtYl9waW5fdHlwZSh0KQkJdW1iX3ZhbDJkZXNjcih1bWJfcGlu
dHlwZSwgKHQpKQorI2RlZmluZSB1bWJfaXN0YXRlKHMpCQl1bWJfdmFsMmRlc2NyKHVtYl9pc3Rh
dGUsIChzKSkKKworc3RhdGljIGRldmljZV9wcm9iZV90IHVtYl9wcm9iZTsKK3N0YXRpYyBkZXZp
Y2VfYXR0YWNoX3QgdW1iX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0YWNoX3QgdW1iX2RldGFj
aDsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IHVtYl9zdXNwZW5kOworc3RhdGljIGRldmljZV9y
ZXN1bWVfdCB1bWJfcmVzdW1lOworc3RhdGljIHZvaWQJIHVtYl9hdHRhY2hfdGFzayhzdHJ1Y3Qg
dXNiX3Byb2NfbXNnICopOworc3RhdGljIHVzYl9oYW5kbGVfcmVxdWVzdF90IHVtYl9oYW5kbGVf
cmVxdWVzdDsKK3N0YXRpYyBpbnQJIHVtYl9kZWFjdGl2YXRlKGRldmljZV90KTsKK3N0YXRpYyB2
b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IHVzYl9jb25maWcg
Kik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtwaXBlcyhzdHJ1Y3QgdW1iX3NvZnRjICop
Oworc3RhdGljIGludAkgdW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcsIGNhZGRyX3Qp
Oworc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7CitzdGF0aWMgdm9pZAkgdW1iX2lucHV0
KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK3N0YXRpYyBpbnQJIHVtYl9vdXRwdXQo
c3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosCisJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiwgc3RydWN0IHJvdXRlICopOworc3RhdGljIHZvaWQJIHVtYl9zdGFydChzdHJ1Y3QgaWZu
ZXQgKik7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXJ0X3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAq
KTsKKyNpZiAwCitzdGF0aWMgdm9pZAkgdW1iX3dhdGNoZG9nKHN0cnVjdCBpZm5ldCAqKTsKKyNl
bmRpZgorc3RhdGljIHZvaWQJIHVtYl9zdGF0ZWNoZ190aW1lb3V0KHZvaWQgKik7CisKK3N0YXRp
YyBpbnQJIHVtYl9tZWRpYWNoYW5nZShzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkgdW1i
X21lZGlhc3RhdHVzKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqKTsKKworc3Rh
dGljIHZvaWQJIHVtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNiX3Byb2NfY2Fs
bGJhY2tfdCwKKwkJICAgIHN0cnVjdCB1c2JfcHJvY19tc2cgKiwgc3RydWN0IHVzYl9wcm9jX21z
ZyAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9uZXdzdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICos
IGVudW0gdW1iX3N0YXRlLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9zdGF0ZV90YXNrKHN0cnVj
dCB1c2JfcHJvY19tc2cgKik7CitzdGF0aWMgdm9pZAkgdW1iX3VwKHN0cnVjdCB1bWJfc29mdGMg
Kik7CitzdGF0aWMgdm9pZAkgdW1iX2Rvd24oc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQpOworCitz
dGF0aWMgdm9pZAkgdW1iX2dldF9yZXNwb25zZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7
CisKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMgKiwg
dm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9oYW5kbGVfaW5kaWNhdGVfc3RhdHVzX21z
ZyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwKKwkJICAgIGludCk7CitzdGF0aWMgdm9pZAkg
dW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7
CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0cnVjdCB1bWJfc29mdGMg
Kiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShz
dHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVf
ZGV2aWNlc19jYXBzKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGlu
dAkgdW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQg
KiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcmFkaW9fc3RhdGUoc3RydWN0IHVtYl9z
b2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3BpbihzdHJ1Y3Qg
dW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcGFja2V0
X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1
bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsK
K3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVjdCB1bWJfc29mdGMgKiwg
dm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHN0
cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9yeChzdHJ1
Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl9yeGVvZjsKK3N0YXRp
YyB2b2lkCSB1bWJfcnhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIGludAkgdW1i
X2VuY2FwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHVzYl94ZmVy
ICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl90eGVvZjsKK3N0YXRpYyB2b2lkCSB1bWJf
dHhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kZWNhcChzdHJ1
Y3QgdW1iX3NvZnRjICosIHN0cnVjdCB1c2JfeGZlciAqLCBpbnQpOworCitzdGF0aWMgdXNiX2Vy
cm9yX3QJIHVtYl9zZW5kX2VuY2FwX2NvbW1hbmQoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICos
IGludCk7CitzdGF0aWMgaW50CSB1bWJfZ2V0X2VuY2FwX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29m
dGMgKiwgdm9pZCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkgdW1iX2N0cmxfbXNnKHN0cnVjdCB1
bWJfc29mdGMgKiwgdWludDMyX3QsIHZvaWQgKiwgaW50KTsKKworc3RhdGljIHZvaWQJIHVtYl9v
cGVuKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlKHN0cnVjdCB1
bWJfc29mdGMgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9zZXRwaW4oc3RydWN0IHVtYl9zb2Z0YyAq
LCBpbnQsIGludCwgdm9pZCAqLCBpbnQsIHZvaWQgKiwKKwkJICAgIGludCk7CitzdGF0aWMgdm9p
ZAkgdW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVt
Yl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2FsbG9j
YXRlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9zZW5kX2ZjY19h
dXRoKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3BhY2tldF9zZXJ2aWNl
KHN0cnVjdCB1bWJfc29mdGMgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfY29ubmVjdChzdHJ1
Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kaXNjb25uZWN0KHN0cnVjdCB1bWJf
c29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3NlbmRfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRj
ICosIGludCk7CisKK3N0YXRpYyB2b2lkCSB1bWJfcXJ5X2lwY29uZmlnKHN0cnVjdCB1bWJfc29m
dGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NtZChzdHJ1Y3QgdW1iX3NvZnRjICosIGludCwgaW50
LCBjb25zdCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2NtZDEoc3RydWN0IHVtYl9z
b2Z0YyAqLCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsIHVpbnQ4X3QgKik7CitzdGF0aWMg
dm9pZAkgdW1iX2NvbW1hbmRfZG9uZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsK
K3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICosIHVpbnQzMl90
LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2RlY29kZV9xbWkoc3RydWN0IHVtYl9z
b2Z0YyAqLCB1aW50OF90ICosIGludCk7CisKK3N0YXRpYyB1c2JfY2FsbGJhY2tfdCB1bWJfaW50
cjsKKworc3RhdGljIGNoYXIJKnVtYl9udG9wKHN0cnVjdCBzb2NrYWRkciAqKTsKKworc3RhdGlj
IGNvbnN0IGludCB1bWJfeGZlcl90b3V0ID0gVVNCX0RFRkFVTFRfVElNRU9VVDsKKworc3RhdGlj
IHVpbnQ4X3QJIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3RbXSA9IE1CSU1fVVVJRF9CQVNJQ19DT05O
RUNUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2NvbnRleHRfaW50ZXJuZXRbXSA9IE1CSU1f
VVVJRF9DT05URVhUX0lOVEVSTkVUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX3FtaV9tYmlt
W10gPSBNQklNX1VVSURfUU1JX01CSU07CitzdGF0aWMgdWludDMyX3QJIHVtYl9zZXNzaW9uX2lk
ID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnIHVtYl9jb25maWdbVU1CX05f
VFJBTlNGRVJdID0geworCVtVTUJfSU5UUl9SWF0gPSB7CisJCS50eXBlID0gVUVfSU5URVJSVVBU
LAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9JTiwK
KwkJLmlmX2luZGV4ID0gMSwKKwkJLmNhbGxiYWNrID0gdW1iX2ludHIsCisJCS5idWZzaXplID0g
c2l6ZW9mIChzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pLAorCQkuZmxhZ3MgPSB7LnBpcGVf
Ym9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDF9LAorCQkudXNiX21vZGUgPSBVU0JfTU9ERV9IT1NU
LAorCX0sCisJW1VNQl9CVUxLX1JYXSA9IHsKKwkJLnR5cGUgPSBVRV9CVUxLLAorCQkuZW5kcG9p
bnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9JTiwKKwkJLmlmX2luZGV4
ID0gMCwKKwkJLmNhbGxiYWNrID0gdW1iX3J4ZW9mLAorCQkuYnVmc2l6ZSA9IDggKiAxMDI0LAor
CQkuZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDEsLmV4dF9idWZmZXIg
PSAxfSwKKwkJLnVzYl9tb2RlID0gVVNCX01PREVfSE9TVCwKKwl9LAorCVtVTUJfQlVMS19UWF0g
PSB7CisJCS50eXBlID0gVUVfQlVMSywKKwkJLmVuZHBvaW50ID0gVUVfQUREUl9BTlksCisJCS5k
aXJlY3Rpb24gPSBVRV9ESVJfT1VULAorCQkuaWZfaW5kZXggPSAwLAorCQkuY2FsbGJhY2sgPSB1
bWJfdHhlb2YsCisJCS5idWZzaXplID0gOCAqIDEwMjQsCisJCS5mbGFncyA9IHsucGlwZV9ib2Yg
PSAxLC5mb3JjZV9zaG9ydF94ZmVyID0gMSwuZXh0X2J1ZmZlciA9IDF9LAorCQkudGltZW91dCA9
IHVtYl94ZmVyX3RvdXQsCisJCS51c2JfbW9kZSA9IFVTQl9NT0RFX0hPU1QsCisJfSwKK307CisK
K3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdW1iX21ldGhvZHNbXSA9IHsKKwkvKiBVU0IgaW50ZXJm
YWNlICovCisJREVWTUVUSE9EKHVzYl9oYW5kbGVfcmVxdWVzdCwgdW1iX2hhbmRsZV9yZXF1ZXN0
KSwKKworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCB1
bWJfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCB1bWJfYXR0YWNoKSwKKwlERVZN
RVRIT0QoZGV2aWNlX2RldGFjaCwgdW1iX2RldGFjaCksCisJREVWTUVUSE9EKGRldmljZV9zdXNw
ZW5kLCB1bWJfc3VzcGVuZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsIHVtYl9yZXN1bWUp
LAorCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IHVtYl9kcml2ZXIgPSB7
CisJLm5hbWUgPSAidW1iIiwKKwkubWV0aG9kcyA9IHVtYl9tZXRob2RzLAorCS5zaXplID0gc2l6
ZW9mIChzdHJ1Y3QgdW1iX3NvZnRjKSwKK307CisKK01BTExPQ19ERUZJTkUoTV9VU0JfVU1CLCAi
VVNCIFVNQiIsICJVU0IgTUJJTSBkcml2ZXIiKTsKKworY29uc3QgaW50IHVtYl9kZWxheSA9IDQw
MDA7CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYW4gIkZDQyBBdXRoZW50aWNhdGlv
biIgY29tbWFuZC4KKyAqLworI2lmbmRlZiBVU0JfVkVORE9SX1NJRVJSQQorIyBkZWZpbmUgVVNC
X1ZFTkRPUl9TSUVSUkEJMHgxMTk5CisjZW5kaWYKKyNpZm5kZWYgVVNCX1BST0RVQ1RfU0lFUlJB
X0VNNzQ1NQorIyBkZWZpbmUgVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQkweDkwNzkKKyNlbmRp
ZgorY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdW1iX2ZjY2F1dGhfZGV2c1tdID0geworCXsK
KwkJLm1hdGNoX2ZsYWdfdmVuZG9yID0gMSwKKwkJLm1hdGNoX2ZsYWdfcHJvZHVjdCA9IDEsCisJ
CS5pZFZlbmRvciA9IFVTQl9WRU5ET1JfU0lFUlJBLAorCQkuaWRQcm9kdWN0ID0gVVNCX1BST0RV
Q1RfU0lFUlJBX0VNNzQ1NQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHVtYl9xbWlf
YWxsb2NfY2lkW10gPSB7CisJMHgwMSwKKwkweDBmLCAweDAwLAkJLyogbGVuICovCisJMHgwMCwJ
CQkvKiBRTVVYIGZsYWdzICovCisJMHgwMCwJCQkvKiBzZXJ2aWNlICJjdGwiICovCisJMHgwMCwJ
CQkvKiBDSUQgKi8KKwkweDAwLAkJCS8qIFFNSSBmbGFncyAqLworCTB4MDEsCQkJLyogdHJhbnNh
Y3Rpb24gKi8KKwkweDIyLCAweDAwLAkJLyogbXNnICJBbGxvY2F0ZSBDSUQiICovCisJMHgwNCwg
MHgwMCwJCS8qIFRMViBsZW4gKi8KKwkweDAxLCAweDAxLCAweDAwLCAweDAyCS8qIFRMViAqLwor
fTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdW1iX3FtaV9mY2NfYXV0aFtdID0geworCTB4MDEs
CisJMHgwYywgMHgwMCwJCS8qIGxlbiAqLworCTB4MDAsCQkJLyogUU1VWCBmbGFncyAqLworCTB4
MDIsCQkJLyogc2VydmljZSAiZG1zIiAqLworI2RlZmluZSBVTUJfUU1JX0NJRF9PRkZTCTUKKwkw
eDAwLAkJCS8qIENJRCAoZmlsbGVkIGluIGxhdGVyKSAqLworCTB4MDAsCQkJLyogUU1JIGZsYWdz
ICovCisJMHgwMSwgMHgwMCwJCS8qIHRyYW5zYWN0aW9uICovCisJMHg1ZiwgMHg1NSwJCS8qIG1z
ZyAiU2VuZCBGQ0MgQXV0aGVudGljYXRpb24iICovCisJMHgwMCwgMHgwMAkJLyogVExWIGxlbiAq
LworfTsKKworc3RhdGljIGludAordW1iX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg
dXNiX2F0dGFjaF9hcmcgKnVhYSA9IGRldmljZV9nZXRfaXZhcnMoZGV2KTsKKwl1c2JfaW50ZXJm
YWNlX2Rlc2NyaXB0b3JfdCAqaWQ7CisKKwlpZiAodWFhLT51c2JfbW9kZSAhPSBVU0JfTU9ERV9I
T1NUKQorCQlyZXR1cm4gKEVOWElPKTsKKwlpZiAoKGlkID0gdXNiZF9nZXRfaW50ZXJmYWNlX2Rl
c2NyaXB0b3IodWFhLT5pZmFjZSkpID09IE5VTEwpCisJCXJldHVybiAoRU5YSU8pOworCisJLyoK
KwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgTkNNLCBjaGVjayBpZiBhbHRlcm5hdGUg
c2V0dGluZworCSAqIDEgaW1wbGVtZW50cyBNQklNLgorCSAqLworCWlmIChpZC0+YkludGVyZmFj
ZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0K
KwkgICAgVUlTVUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJaWQgPSB1c2JkX2dl
dF9pbnRlcmZhY2VfZGVzY3JpcHRvcigKKwkJCQl1c2JkX2dldF9pZmFjZSh1YWEtPmRldmljZSwK
KwkJCQkJdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMSkpOworCQlpZiAoaWQgPT0gTlVMTCB8fCBp
ZC0+YkFsdGVybmF0ZVNldHRpbmcgIT0gMSkKKwkJCXJldHVybiAoRU5YSU8pOworCX0KKworI2lm
bmRlZiBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01PREVMCisjIGRlZmlu
ZSBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01PREVMIDE0CisjZW5kaWYK
KwlpZiAoaWQtPmJJbnRlcmZhY2VDbGFzcyA9PSBVSUNMQVNTX0NEQyAmJgorCSAgICBpZC0+Yklu
dGVyZmFjZVN1YkNsYXNzID09CisJICAgIFVJU1VCQ0xBU1NfTU9CSUxFX0JST0FEQkFORF9JTlRF
UkZBQ0VfTU9ERUwgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAwKQorCQlyZXR1
cm4gKEJVU19QUk9CRV9TUEVDSUZJQyk7CisKKwlyZXR1cm4gKEVOWElPKTsKK30KKworc3RhdGlj
IGludAordW1iX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IHVzYl9hdHRhY2hfYXJnICp1YWEgPSBk
ZXZpY2VfZ2V0X2l2YXJzKGRldik7CisJc3RydWN0IHVzYl9jb25maWcgY29uZmlnW1VNQl9OX1RS
QU5TRkVSXTsKKwlpbnQJIHY7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzY3JpcHRv
ciAqdWQ7CisJY29uc3Qgc3RydWN0IG1iaW1fZGVzY3JpcHRvciAqbWQ7CisJaW50CSBpOworCXVz
Yl9pbnRlcmZhY2VfZGVzY3JpcHRvcl90ICppZDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZh
Y2U7CisJaW50CSBkYXRhX2lmYWNlbm8gPSAtMTsKKwl1c2JfZXJyb3JfdCBlcnJvcjsKKworCXNj
LT5zY19kZXYgPSBkZXY7CisJc2MtPnNjX3VkZXYgPSB1YWEtPmRldmljZTsKKworCW1lbWNweShj
b25maWcsIHVtYl9jb25maWcsIHNpemVvZiAoY29uZmlnKSk7CisKKwlkZXZpY2Vfc2V0X3VzYl9k
ZXNjKGRldik7CisKKwlzYy0+c2NfY3RybF9pZmFjZW5vID0gdWFhLT5pbmZvLmJJZmFjZU51bTsK
KworCW10eF9pbml0KCZzYy0+c2NfbXV0ZXgsIGRldmljZV9nZXRfbmFtZXVuaXQoZGV2KSwgTlVM
TCwgTVRYX0RFRik7CisKKwkvKgorCSAqIFNvbWUgTUJJTSBoYXJkd2FyZSBkb2VzIG5vdCBwcm92
aWRlIHRoZSBtYW5kYXRvcnkgQ0RDIFVuaW9uCisJICogRGVzY3JpcHRvciwgc28gd2UgYWxzbyBs
b29rIGF0IG1hdGNoaW5nIEludGVyZmFjZQorCSAqIEFzc29jaWF0aW9uIERlc2NyaXB0b3JzIHRv
IGZpbmQgb3V0IHRoZSBNQklNIERhdGEgSW50ZXJmYWNlCisJICogbnVtYmVyLgorCSAqLworCXNj
LT5zY192ZXJfbWFqID0gc2MtPnNjX3Zlcl9taW4gPSAtMTsKKwlzYy0+c2NfbWF4cGt0bGVuID0g
TUJJTV9NQVhTRUdTWl9NSU5WQUw7CisJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRv
cih1YWEtPmlmYWNlKTsKKworCXVkID0gdXNiZF9maW5kX2Rlc2NyaXB0b3Ioc2MtPnNjX3VkZXYs
IGlkLCB1YWEtPmluZm8uYklmYWNlSW5kZXgsCisJCQlVREVTQ19DU19JTlRFUkZBQ0UsIDB4ZmYs
IFVERVNDU1VCX0NEQ19VTklPTiwgMHhmZik7CisJaWYgKHVkICE9IE5VTEwpIHsKKwkJZGF0YV9p
ZmFjZW5vID0gdWQtPmJTbGF2ZUludGVyZmFjZVswXTsKKwl9CisKKwltZCA9IHVzYmRfZmluZF9k
ZXNjcmlwdG9yKHNjLT5zY191ZGV2LCBpZCwgdWFhLT5pbmZvLmJJZmFjZUluZGV4LAorCQkJVURF
U0NfQ1NfSU5URVJGQUNFLCAweGZmLCBVREVTQ1NVQl9NQklNLCAweGZmKTsKKwlpZiAobWQgIT0g
TlVMTCkgeworCQl2ID0gVUdFVFcobWQtPmJjZE1CSU1WZXJzaW9uKTsKKwkJc2MtPnNjX3Zlcl9t
YWogPSBNQklNX1ZFUl9NQUpPUih2KTsKKwkJc2MtPnNjX3Zlcl9taW4gPSBNQklNX1ZFUl9NSU5P
Uih2KTsKKwkJc2MtPnNjX2N0cmxfbGVuID0gVUdFVFcobWQtPndNYXhDb250cm9sTWVzc2FnZSk7
CisJCS8qIE5ldmVyIHRydXN0IGEgVVNCIGRldmljZSEgQ291bGQgdHJ5IHRvIGV4cGxvaXQgdXMg
Ki8KKwkJaWYgKHNjLT5zY19jdHJsX2xlbiA8IE1CSU1fQ1RSTE1TR19NSU5MRU4gfHwKKwkJCQlz
Yy0+c2NfY3RybF9sZW4gPiBNQklNX0NUUkxNU0dfTUFYTEVOKSB7CisJCQlEUFJJTlRGKCJjb250
cm9sIG1lc3NhZ2UgbGVuICVkIG91dCBvZiAiCisJCQkJCSJib3VuZHMgWyVkIC4uICVkXVxuIiwK
KwkJCQkJc2MtPnNjX2N0cmxfbGVuLCBNQklNX0NUUkxNU0dfTUlOTEVOLAorCQkJCQlNQklNX0NU
UkxNU0dfTUFYTEVOKTsKKwkJCS8qIGNvbnRpbnVlIGFueXdheSAqLworCQl9CisJCXNjLT5zY19t
YXhwa3RsZW4gPSBVR0VUVyhtZC0+d01heFNlZ21lbnRTaXplKTsKKwkJRFBSSU5URk4oMiwgImN0
cmxfbGVuPSVkLCBtYXhwa3RsZW49JWQsIGNhcD0weCV4XG4iLAorCQkJCXNjLT5zY19jdHJsX2xl
biwgc2MtPnNjX21heHBrdGxlbiwKKwkJCQltZC0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzKTsKKwl9
CisJaWYgKHNjLT5zY192ZXJfbWFqIDwgMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9y
OiBtaXNzaW5nIE1CSU0gZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkZXZp
Y2VfcHJpbnRmKGRldiwgInZlcnNpb24gJWQuJWRcbiIsIHNjLT5zY192ZXJfbWFqLAorCSAgICBz
Yy0+c2NfdmVyX21pbik7CisKKwlpZiAodXNiZF9sb29rdXBfaWRfYnlfdWFhKHVtYl9mY2NhdXRo
X2RldnMsIHNpemVvZiAodW1iX2ZjY2F1dGhfZGV2cyksIHVhYSkpIHsKKwkJc2MtPnNjX2ZsYWdz
IHw9IFVNQkZMR19GQ0NfQVVUSF9SRVFVSVJFRDsKKwkJc2MtPnNjX2NpZCA9IC0xOworCX0KKwor
CWZvciAoaSA9IDA7IGkgPCBzYy0+c2NfdWRldi0+aWZhY2VzX21heDsgaSsrKSB7CisJCWlmYWNl
ID0gdXNiZF9nZXRfaWZhY2Uoc2MtPnNjX3VkZXYsIGkpOworCQlpZCA9IHVzYmRfZ2V0X2ludGVy
ZmFjZV9kZXNjcmlwdG9yKGlmYWNlKTsKKwkJaWYgKGlkID09IE5VTEwpCisJCQlicmVhazsKKwor
CQlpZiAoaWQtPmJJbnRlcmZhY2VOdW1iZXIgPT0gZGF0YV9pZmFjZW5vKSB7CisJCQlzYy0+c2Nf
ZGF0YV9pZmFjZSA9IGlmYWNlOworCQkJc2MtPnNjX2lmYWNlc19pbmRleFswXSA9IGk7CisJCQlz
Yy0+c2NfaWZhY2VzX2luZGV4WzFdID0gdWFhLT5pbmZvLmJJZmFjZUluZGV4OworCQkJYnJlYWs7
CisJCX0KKwl9CisJaWYgKHNjLT5zY19kYXRhX2lmYWNlID09IE5VTEwpIHsKKwkJZGV2aWNlX3By
aW50ZihkZXYsICJlcnJvcjogbm8gZGF0YSBpbnRlcmZhY2UgZm91bmRcbiIpOworCQlnb3RvIGZh
aWw7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY29tYmluZWQgTkNNL01CSU0gZnVuY3Rp
b24sIHN3aXRjaCB0bworCSAqIGFsdGVybmF0ZSBzZXR0aW5nIG9uZSB0byBlbmFibGUgTUJJTS4K
KwkgKi8KKwlpZCA9IHVzYmRfZ2V0X2ludGVyZmFjZV9kZXNjcmlwdG9yKHVhYS0+aWZhY2UpOwor
CWlmIChpZCAhPSBOVUxMICYmIGlkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVUlDTEFTU19DREMgJiYK
KwkgICAgaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVSVNVQkNMQVNTX05FVFdPUktfQ09OVFJP
TF9NT0RFTCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJjb21iaW5lZCBOQ00vTUJJ
TVxuIik7CisJCWVycm9yID0gdXNiZF9yZXFfc2V0X2FsdF9pbnRlcmZhY2Vfbm8oc2MtPnNjX3Vk
ZXYsCisJCQkJTlVMTCwgdWFhLT5pbmZvLmJJZmFjZUluZGV4LCAxKTsKKwkJaWYgKGVycm9yICE9
IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiZXJy
b3I6IENvdWxkIG5vdCBzd2l0Y2ggdG8gYWx0ZXJuYXRlIHNldHRpbmcgZm9yIE1CSU1cbiIpOwor
CQkJZ290byBmYWlsOworCQl9CisJCXNjLT5zY19pZmFjZXNfaW5kZXhbMV0gPSB1YWEtPmluZm8u
YklmYWNlSW5kZXggKyAxOworCX0KKworCWlmICh1c2JfcHJvY19jcmVhdGUoJnNjLT5zY190YXNr
cXVldWUsICZzYy0+c2NfbXV0ZXgsCisJCQkJZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+c2NfZGV2
KSwKKwkJCQlVU0JfUFJJX01FRCkgIT0gMCkKKwkJZ290byBmYWlsOworCisJRFBSSU5URk4oMiwg
ImN0cmwtaWZubyMlZDogZGF0YS1pZm5vIyVkXG4iLCBzYy0+c2NfY3RybF9pZmFjZW5vLAorCSAg
ICBkYXRhX2lmYWNlbm8pOworCisJdXNiX2NhbGxvdXRfaW5pdF9tdHgoJnNjLT5zY19zdGF0ZWNo
Z190aW1lciwgJnNjLT5zY19tdXRleCwgMCk7CisKKwl1bWJfbmNtX3NldHVwKHNjLCBjb25maWcp
OworCURQUklOVEZOKDIsICIlczogcngvdHggc2l6ZSAlZC8lZFxuIiwgREVWTkFNKHNjKSwKKwkJ
CXNjLT5zY19yeF9idWZzeiwgc2MtPnNjX3R4X2J1ZnN6KTsKKworCXNjLT5zY19yeF9idWYgPSBt
YWxsb2Moc2MtPnNjX3J4X2J1ZnN6LCBNX0RFVkJVRiwgTV9XQUlUT0spOworCXNjLT5zY190eF9i
dWYgPSBtYWxsb2Moc2MtPnNjX3R4X2J1ZnN6LCBNX0RFVkJVRiwgTV9XQUlUT0spOworCisJZm9y
IChpID0gMDsgaSAhPSAzMjsgaSsrKSB7CisJCWVycm9yID0gdXNiZF9zZXRfYWx0X2ludGVyZmFj
ZV9pbmRleChzYy0+c2NfdWRldiwKKwkJCQlzYy0+c2NfaWZhY2VzX2luZGV4WzBdLCBpKTsKKwkJ
aWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJZXJyb3IgPSB1c2JkX3RyYW5zZmVyX3NldHVwKHNj
LT5zY191ZGV2LCBzYy0+c2NfaWZhY2VzX2luZGV4LAorCQkJCXNjLT5zY194ZmVyLCBjb25maWcs
IFVNQl9OX1RSQU5TRkVSLAorCQkJCXNjLCAmc2MtPnNjX211dGV4KTsKKwkJaWYgKGVycm9yID09
IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pCisJCQlicmVhazsKKwl9CisJaWYgKGVycm9yIHx8
IChpID09IDMyKSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJlcnJvcjogZmFpbGVk
IHRvIHNldHVwIHhmZXJzXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXNjLT5zY19yZXNwX2J1
ZiA9IG1hbGxvYyhzYy0+c2NfY3RybF9sZW4sIE1fREVWQlVGLCBNX1dBSVRPSyk7CisJc2MtPnNj
X2N0cmxfbXNnID0gbWFsbG9jKHNjLT5zY19jdHJsX2xlbiwgTV9ERVZCVUYsIE1fV0FJVE9LKTsK
KworCXNjLT5zY19pbmZvLnJlZ3N0YXRlID0gTUJJTV9SRUdTVEFURV9VTktOT1dOOworCXNjLT5z
Y19pbmZvLnBpbl9hdHRlbXB0c19sZWZ0ID0gVU1CX1ZBTFVFX1VOS05PV047CisJc2MtPnNjX2lu
Zm8ucnNzaSA9IFVNQl9WQUxVRV9VTktOT1dOOworCXNjLT5zY19pbmZvLmJlciA9IFVNQl9WQUxV
RV9VTktOT1dOOworCisJLyogZGVmZXIgYXR0YWNoaW5nIHRoZSBpbnRlcmZhY2UgKi8KKwltdHhf
bG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9hdHRhY2hfdGFzaywK
KwkJCSZzYy0+c2NfcHJvY19hdHRhY2hfdGFza1swXS5oZHIsCisJCQkmc2MtPnNjX3Byb2NfYXR0
YWNoX3Rhc2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCisJcmV0
dXJuICgwKTsKKworZmFpbDoKKwl1bWJfZGV0YWNoKHNjLT5zY19kZXYpOworCXJldHVybiAoRU5Y
SU8pOworfQorCitzdGF0aWMgdm9pZAordW1iX2F0dGFjaF90YXNrKHN0cnVjdCB1c2JfcHJvY19t
c2cgKm1zZykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKnRhc2sgPSAoc3RydWN0IHVtYl90YXNrICop
bXNnOworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdGFzay0+c2M7CisJc3RydWN0IGlmbmV0ICpp
ZnA7CisKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCisJLyogaW5pdGlhbGl6ZSB0aGUg
aW50ZXJmYWNlICovCisJc2MtPnNjX2lmID0gaWZwID0gaWZfYWxsb2MoSUZUX01CSU0pOworCWlm
IChpZnAgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJDb3VsZCBub3Qg
YWxsb2NhdGUgYSBuZXR3b3JrIGludGVyZmFjZVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJaWZf
aW5pdG5hbWUoaWZwLCAidW1iIiwgZGV2aWNlX2dldF91bml0KHNjLT5zY19kZXYpKTsKKworCWlm
cC0+aWZfc29mdGMgPSBzYzsKKwlpZnAtPmlmX2ZsYWdzID0gSUZGX1NJTVBMRVggfCBJRkZfTVVM
VElDQVNUIHwgSUZGX1BPSU5UT1BPSU5UOworCWlmcC0+aWZfaW9jdGwgPSB1bWJfaW9jdGw7CisJ
aWZwLT5pZl9pbnB1dCA9IHVtYl9pbnB1dDsKKwlpZnAtPmlmX291dHB1dCA9IHVtYl9vdXRwdXQ7
CisJaWZwLT5pZl9zdGFydCA9IHVtYl9zdGFydDsKKwlpZnAtPmlmX2luaXQgPSB1bWJfaW5pdDsK
KworI2lmIDAKKwlpZnAtPmlmX3dhdGNoZG9nID0gdW1iX3dhdGNoZG9nOworI2VuZGlmCisJaWZw
LT5pZl9saW5rX3N0YXRlID0gTElOS19TVEFURV9ET1dOOworCWlmbWVkaWFfaW5pdCgmc2MtPnNj
X2ltLCAwLCB1bWJfbWVkaWFjaGFuZ2UsIHVtYl9tZWRpYXN0YXR1cyk7CisJaWZtZWRpYV9hZGQo
JnNjLT5zY19pbSwgSUZNX05PTkUgfCBJRk1fQVVUTywgMCwgTlVMTCk7CisKKwlpZnAtPmlmX2Fk
ZHJsZW4gPSAwOworCWlmcC0+aWZfaGRybGVuID0gc2l6ZW9mIChzdHJ1Y3QgbmNtX2hlYWRlcjE2
KSArCisJICAgIHNpemVvZiAoc3RydWN0IG5jbV9wb2ludGVyMTYpOworCS8qIFhYWCBoYXJkLWNv
ZGVkIGF0bSAqLworCWlmcC0+aWZfbXR1ID0gTUlOKDIwNDgsIHNjLT5zY19tYXhwa3RsZW4pOwor
CUlGUV9TRVRfTUFYTEVOKCZpZnAtPmlmX3NuZCwgaWZxbWF4bGVuKTsKKwlpZnAtPmlmX3NuZC5p
ZnFfZHJ2X21heGxlbiA9IGlmcW1heGxlbjsKKwlJRlFfU0VUX1JFQURZKCZpZnAtPmlmX3NuZCk7
CisKKwkvKiBhdHRhY2ggdGhlIGludGVyZmFjZSAqLworCWlmX2F0dGFjaChpZnApOworCWJwZmF0
dGFjaChpZnAsIERMVF9SQVcsIDApOworCisJc2MtPnNjX2F0dGFjaGVkID0gMTsKKworCXVtYl9p
bml0KHNjKTsKK2ZhaWw6CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7Cit9CisKK3N0YXRpYyBp
bnQKK3VtYl9kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7
CisKKwl1c2JfcHJvY19kcmFpbigmc2MtPnNjX3Rhc2txdWV1ZSk7CisKKwltdHhfbG9jaygmc2Mt
PnNjX211dGV4KTsKKwlpZiAoaWZwICE9IE5VTEwgJiYgKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZG
X0RSVl9SVU5OSU5HKSkKKwkJdW1iX2Rvd24oc2MsIDEpOworCXVtYl9jbG9zZShzYyk7CisJbXR4
X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCXVzYmRfdHJhbnNmZXJfdW5zZXR1cChzYy0+c2Nf
eGZlciwgVU1CX05fVFJBTlNGRVIpOworCisJZnJlZShzYy0+c2NfdHhfYnVmLCBNX0RFVkJVRik7
CisJZnJlZShzYy0+c2NfcnhfYnVmLCBNX0RFVkJVRik7CisKKwl1c2JfY2FsbG91dF9kcmFpbigm
c2MtPnNjX3N0YXRlY2hnX3RpbWVyKTsKKworCXVzYl9wcm9jX2ZyZWUoJnNjLT5zY190YXNrcXVl
dWUpOworCisJbXR4X2Rlc3Ryb3koJnNjLT5zY19tdXRleCk7CisKKwlmcmVlKHNjLT5zY19jdHJs
X21zZywgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3Jlc3BfYnVmLCBNX0RFVkJVRik7CisKKwlp
ZiAoaWZwICE9IE5VTEwgJiYgaWZwLT5pZl9zb2Z0YykgeworCQlpZm1lZGlhX3JlbW92ZWFsbCgm
c2MtPnNjX2ltKTsKKwl9CisJaWYgKHNjLT5zY19hdHRhY2hlZCkgeworCQlicGZkZXRhY2goaWZw
KTsKKwkJaWZfZGV0YWNoKGlmcCk7CisJCWlmX2ZyZWUoaWZwKTsKKwkJc2MtPnNjX2lmID0gTlVM
TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9uY21fc2V0dXAoc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCB1c2JfY29uZmlnICogY29uZmlnKQoreworCXVzYl9k
ZXZpY2VfcmVxdWVzdF90IHJlcTsKKwlzdHJ1Y3QgbmNtX250Yl9wYXJhbWV0ZXJzIG5wOworCXVz
Yl9lcnJvcl90IGVycm9yOworCisJLyogUXVlcnkgTlRCIHRyYW5mZXJzIHNpemVzICovCisJcmVx
LmJtUmVxdWVzdFR5cGUgPSBVVF9SRUFEX0NMQVNTX0lOVEVSRkFDRTsKKwlyZXEuYlJlcXVlc3Qg
PSBOQ01fR0VUX05UQl9QQVJBTUVURVJTOworCVVTRVRXKHJlcS53VmFsdWUsIDApOworCVVTRVRX
KHJlcS53SW5kZXgsIHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVTRVRXKHJlcS53TGVuZ3RoLCBz
aXplb2YgKG5wKSk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJZXJyb3IgPSB1c2JkX2Rv
X3JlcXVlc3Qoc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgsICZyZXEsICZucCk7CisJbXR4X3Vu
bG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAoZXJyb3IgPT0gVVNCX0VSUl9OT1JNQUxfQ09NUExF
VElPTiAmJgorCSAgICBVR0VUVyhucC53TGVuZ3RoKSA9PSBzaXplb2YgKG5wKSkgeworCQljb25m
aWdbVU1CX0JVTEtfUlhdLmJ1ZnNpemUgPSBVR0VURFcobnAuZHdOdGJJbk1heFNpemUpOworCQlj
b25maWdbVU1CX0JVTEtfVFhdLmJ1ZnNpemUgPSBVR0VURFcobnAuZHdOdGJPdXRNYXhTaXplKTsK
Kwl9CisJc2MtPnNjX3J4X2J1ZnN6ID0gY29uZmlnW1VNQl9CVUxLX1JYXS5idWZzaXplOworCXNj
LT5zY190eF9idWZzeiA9IGNvbmZpZ1tVTUJfQlVMS19UWF0uYnVmc2l6ZTsKK30KKworc3RhdGlj
IGludAordW1iX2hhbmRsZV9yZXF1ZXN0KGRldmljZV90IGRldiwKKyAgICBjb25zdCB2b2lkICpw
cmVxLCB2b2lkICoqcHB0ciwgdWludDE2X3QgKnBsZW4sCisgICAgdWludDE2X3Qgb2Zmc2V0LCB1
aW50OF90ICpwc3RhdGUpCit7CisJLyogRklYTUUgcmVhbGx5IGltcGxlbWVudCAqLworCisJcmV0
dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9zdXNwZW5kKGRldmljZV90IGRldikK
K3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlN1c3BlbmRpbmdcbiIpOworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyBpbnQKK3VtYl9yZXN1bWUoZGV2aWNlX3QgZGV2KQoreworCWRldmljZV9wcmlu
dGYoZGV2LCAiUmVzdW1pbmdcbiIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3Vt
Yl9kZWFjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOwor
CisJaWYgKGlmcCAhPSBOVUxMKSB7CisJCWlmX2RlYWQoaWZwKTsKKwl9CisJc2MtPnNjX2R5aW5n
ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbG9zZV9idWxrcGlwZXMo
c3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZGX0RSVl9SVU5OSU5HIHwgSUZGX0RSVl9P
QUNUSVZFKTsKKworCXVtYl9yeGZsdXNoKHNjKTsKKwl1bWJfdHhmbHVzaChzYyk7CisKKwl1c2Jk
X3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfUlhdKTsKKwl1c2JkX3RyYW5zZmVy
X3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKK30KKworc3RhdGljIGludAordW1iX2lv
Y3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpCit7CisJc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBpbl9pZmFkZHIgKmlh
ID0gKHN0cnVjdCBpbl9pZmFkZHIgKilkYXRhOworCXN0cnVjdCBpZnJlcSAqaWZyID0gKHN0cnVj
dCBpZnJlcSAqKWRhdGE7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgdW1iX3BhcmFtZXRlciBt
cDsKKworCWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVybiBFSU87CisKKwlzd2l0Y2ggKGNtZCkg
eworCWNhc2UgU0lPQ1NJRkFERFI6CisJCXN3aXRjaCAoaWEtPmlhX2lmYS5pZmFfYWRkci0+c2Ff
ZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNh
c2UgQUZfSU5FVDY6CisJCQlicmVhazsKKyNlbmRpZiAvKiBJTkVUNiAqLworCQlkZWZhdWx0Ogor
CQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNl
IFNJT0NTSUZGTEFHUzoKKwkJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJCXVtYl9hZGRfdGFz
ayhzYywgdW1iX3N0YXRlX3Rhc2ssCisJCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRy
LAorCQkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMSk7CisJCW10eF91bmxvY2so
JnNjLT5zY19tdXRleCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dVTUJJTkZPOgorCQllcnJvciA9
IGNvcHlvdXQoJnNjLT5zY19pbmZvLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwKKwkJICAgIHNp
emVvZiAoc2MtPnNjX2luZm8pKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU1VNQlBBUkFNOgorCQll
cnJvciA9IHByaXZfY2hlY2soY3VydGhyZWFkLCBQUklWX05FVF9TRVRJRlBIWVMpOworCQlpZiAo
ZXJyb3IpCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gY29weWluKGlmci0+aWZyX2lmcnUu
aWZydV9kYXRhLCAmbXAsIHNpemVvZiAobXApKSkgIT0gMCkKKwkJCWJyZWFrOworCisJCWlmICgo
ZXJyb3IgPSB1bWJfc2V0cGluKHNjLCBtcC5vcCwgbXAuaXNfcHVrLCBtcC5waW4sIG1wLnBpbmxl
biwKKwkJICAgIG1wLm5ld3BpbiwgbXAubmV3cGlubGVuKSkgIT0gMCkKKwkJCWJyZWFrOworCisJ
CWlmIChtcC5hcG5sZW4gPCAwIHx8IG1wLmFwbmxlbiA+IHNpemVvZiAoc2MtPnNjX2luZm8uYXBu
KSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzYy0+c2Nfcm9hbWlu
ZyA9IG1wLnJvYW1pbmcgPyAxIDogMDsKKwkJbWVtc2V0KHNjLT5zY19pbmZvLmFwbiwgMCwgc2l6
ZW9mIChzYy0+c2NfaW5mby5hcG4pKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZvLmFwbiwgbXAuYXBu
LCBtcC5hcG5sZW4pOworCQlzYy0+c2NfaW5mby5hcG5sZW4gPSBtcC5hcG5sZW47CisJCW1lbXNl
dChzYy0+c2NfaW5mby51c2VybmFtZSwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby51c2VybmFtZSkp
OworCQltZW1jcHkoc2MtPnNjX2luZm8udXNlcm5hbWUsIG1wLnVzZXJuYW1lLCBtcC51c2VybmFt
ZWxlbik7CisJCXNjLT5zY19pbmZvLnVzZXJuYW1lbGVuID0gbXAudXNlcm5hbWVsZW47CisJCW1l
bXNldChzYy0+c2NfaW5mby5wYXNzd29yZCwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby5wYXNzd29y
ZCkpOworCQltZW1jcHkoc2MtPnNjX2luZm8ucGFzc3dvcmQsIG1wLnBhc3N3b3JkLCBtcC5wYXNz
d29yZGxlbik7CisJCXNjLT5zY19pbmZvLnBhc3N3b3JkbGVuID0gbXAucGFzc3dvcmRsZW47CisJ
CXNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXMgPSBtcC5wcmVmZXJyZWRjbGFzc2VzOworCQl1
bWJfc2V0ZGF0YWNsYXNzKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR1VNQlBBUkFNOgorCQlt
ZW1zZXQoJm1wLCAwLCBzaXplb2YgKG1wKSk7CisJCW1lbWNweShtcC5hcG4sIHNjLT5zY19pbmZv
LmFwbiwgc2MtPnNjX2luZm8uYXBubGVuKTsKKwkJbXAuYXBubGVuID0gc2MtPnNjX2luZm8uYXBu
bGVuOworCQltcC5yb2FtaW5nID0gc2MtPnNjX3JvYW1pbmc7CisJCW1wLnByZWZlcnJlZGNsYXNz
ZXMgPSBzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzOworCQllcnJvciA9IGNvcHlvdXQoJm1w
LCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChtcCkpOworCQlicmVhazsKKwljYXNl
IFNJT0NTSUZNVFU6CisJCS8qIERvZXMgdGhpcyBpbmNsdWRlIHRoZSBOQ00gaGVhZGVycyBhbmQg
dGFpbD8gKi8KKwkJaWYgKGlmci0+aWZyX210dSA+IGlmcC0+aWZfbXR1KSB7CisJCQllcnJvciA9
IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmcC0+aWZfbXR1ID0gaWZyLT5pZnJfbXR1Owor
CQlicmVhazsKKwljYXNlIFNJT0NBSUZBRERSOgorCWNhc2UgU0lPQ1NJRkRTVEFERFI6CisJY2Fz
ZSBTSU9DQURETVVMVEk6CisJY2FzZSBTSU9DREVMTVVMVEk6CisJCWJyZWFrOworCWNhc2UgU0lP
Q0dJRk1FRElBOgorCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZwLCBpZnIsICZzYy0+c2NfaW0s
IGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUlOVkFMOworCQlicmVhazsK
Kwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaW5pdCh2b2lkICph
cmcpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBhcmc7CisKKwltdHhfbG9jaygmc2MtPnNj
X211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGFydF90YXNrLAorCQkJJnNjLT5zY19w
cm9jX3N0YXJ0X3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXJ0X3Rhc2tbMV0uaGRy
LCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1i
X2lucHV0KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbWJ1
ZiAqbW47CisKKwl3aGlsZSAobSkgeworCQltbiA9IG0tPm1fbmV4dHBrdDsKKwkJbS0+bV9uZXh0
cGt0ID0gTlVMTDsKKworCQlCUEZfTVRBUChpZnAsIG0pOworCisJCW5ldGlzcl9kaXNwYXRjaChO
RVRJU1JfSVAsIG0pOworCQltID0gbW47CisJfQorfQorCitzdGF0aWMgaW50Cit1bWJfb3V0cHV0
KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSwgY29uc3Qgc3RydWN0IHNvY2thZGRy
ICpkc3QsCisgICAgc3RydWN0IHJvdXRlICpydHApCit7CisJaW50IGVycm9yOworCisJRFBSSU5U
Rk4oMTAsICIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZHN0LT5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCS8qIGZhbGwgdGhyb3VnaCAq
LworI2VuZGlmCisJY2FzZSBBRl9JTkVUOgorCQlicmVhazsKKworCQkvKiBzaWxlbnRseSBkcm9w
IGRoY2xpZW50IHBhY2tldHMgKi8KKwljYXNlIEFGX1VOU1BFQzoKKwkJbV9mcmVlbShtKTsKKwkJ
cmV0dXJuICgwKTsKKworCQkvKiBkcm9wIG90aGVyIHBhY2tldCB0eXBlcyAqLworCWRlZmF1bHQ6
CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKKwl9CisKKwkvKgorCSAq
IFF1ZXVlIG1lc3NhZ2Ugb24gaW50ZXJmYWNlLCBhbmQgc3RhcnQgb3V0cHV0IGlmIGludGVyZmFj
ZQorCSAqIG5vdCB5ZXQgYWN0aXZlLgorCSAqLworCWVycm9yID0gKGlmcC0+aWZfdHJhbnNtaXQp
KGlmcCwgbSk7CisJaWYgKGVycm9yKSB7CisJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVS
X09FUlJPUlMsIDEpOworCQlyZXR1cm4gKEVOT0JVRlMpOworCX0KKworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhcnQoc3RydWN0IGlmbmV0ICppZnApCit7CisJc3RydWN0
IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYgKHNjLT5zY19keWluZyB8fCAh
KGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkKKwkJcmV0dXJuOworCisJbXR4
X2xvY2soJnNjLT5zY19tdXRleCk7CisJdXNiZF90cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltV
TUJfQlVMS19UWF0pOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfc3RhcnRfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7CisJc3RydWN0
IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisK
KwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0
ZXgsIE1BX09XTkVEKTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklORzsK
KworCS8qIHN0YXJ0IGludGVycnVwdCB0cmFuc2ZlciAqLworCXVzYmRfdHJhbnNmZXJfc3RhcnQo
c2MtPnNjX3hmZXJbVU1CX0lOVFJfUlhdKTsKKworCXVtYl9vcGVuKHNjKTsKK30KKworI2lmIDAK
K3N0YXRpYyB2b2lkCit1bWJfd2F0Y2hkb2coc3RydWN0IGlmbmV0ICppZnApCit7CisJc3RydWN0
IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYgKHNjLT5zY19keWluZykKKwkJ
cmV0dXJuOworCisJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT0VSUk9SUywgMSk7CisJ
ZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAid2F0Y2hkb2cgdGltZW91dFxuIik7CisJdXNiZF90
cmFuc2Zlcl9kcmFpbihzYy0+c2NfeGZlcltVTUJfQlVMS19UWF0pOworCXJldHVybjsKK30KKyNl
bmRpZgorCitzdGF0aWMgdm9pZAordW1iX3N0YXRlY2hnX3RpbWVvdXQodm9pZCAqYXJnKQorewor
CXN0cnVjdCB1bWJfc29mdGMgKnNjID0gYXJnOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lG
UChzYyk7CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWlmIChz
Yy0+c2NfaW5mby5yZWdzdGF0ZSAhPSBNQklNX1JFR1NUQVRFX1JPQU1JTkcgfHwgc2MtPnNjX3Jv
YW1pbmcpCisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19ERUJV
RywgIiVzOiBzdGF0ZSBjaGFuZ2UgdGltZW91dFxuIiwKKwkJCQkJREVWTkFNKHNjKSk7CisKKwl1
bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rh
c2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMV0uaGRyLCAwKTsKK30KKwor
c3RhdGljIGludAordW1iX21lZGlhY2hhbmdlKHN0cnVjdCBpZm5ldCAqIGlmcCkKK3sKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9tZWRpYXN0YXR1cyhzdHJ1Y3QgaWZuZXQgKiBp
ZnAsIHN0cnVjdCBpZm1lZGlhcmVxICogaW1yKQoreworCXN3aXRjaCAoaWZwLT5pZl9saW5rX3N0
YXRlKSB7CisJY2FzZSBMSU5LX1NUQVRFX1VQOgorCQlpbXItPmlmbV9zdGF0dXMgPSBJRk1fQVZB
TElEIHwgSUZNX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBMSU5LX1NUQVRFX0RPV046CisJCWlt
ci0+aWZtX3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWltci0+
aWZtX3N0YXR1cyA9IDA7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9hZGRf
dGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNiX3Byb2NfY2FsbGJhY2tfdCBjYWxsYmFjaywK
KwkJc3RydWN0IHVzYl9wcm9jX21zZyAqdDAsIHN0cnVjdCB1c2JfcHJvY19tc2cgKnQxLCBpbnQg
c3luYykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKiB0YXNrOworCisJbXR4X2Fzc2VydCgmc2MtPnNj
X211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAodXNiX3Byb2NfaXNfZ29uZSgmc2MtPnNjX3Rhc2tx
dWV1ZSkpIHsKKwkJcmV0dXJuOworCX0KKworCXRhc2sgPSB1c2JfcHJvY19tc2lnbmFsKCZzYy0+
c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCisJdGFzay0+aGRyLnBtX2NhbGxiYWNrID0gY2FsbGJh
Y2s7CisJdGFzay0+c2MgPSBzYzsKKworCWlmIChzeW5jKSB7CisJCXVzYl9wcm9jX213YWl0KCZz
Yy0+c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9uZXdz
dGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgZW51bSB1bWJfc3RhdGUgbmV3c3RhdGUsIGludCBm
bGFncykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKG5ld3N0
YXRlID09IHNjLT5zY19zdGF0ZSkKKwkJcmV0dXJuOworCWlmICgoKGZsYWdzICYgVU1CX05TX0RP
TlRfRFJPUCkgJiYgbmV3c3RhdGUgPCBzYy0+c2Nfc3RhdGUpIHx8CisJICAgICgoZmxhZ3MgJiBV
TUJfTlNfRE9OVF9SQUlTRSkgJiYgbmV3c3RhdGUgPiBzYy0+c2Nfc3RhdGUpKQorCQlyZXR1cm47
CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfREVCVUcsICIlczog
c3RhdGUgZ29pbmcgJXMgZnJvbSAnJXMnIHRvICclcydcbiIsCisJCSAgICBERVZOQU0oc2MpLCBu
ZXdzdGF0ZSA+IHNjLT5zY19zdGF0ZSA/ICJ1cCIgOiAiZG93biIsCisJCSAgICB1bWJfaXN0YXRl
KHNjLT5zY19zdGF0ZSksIHVtYl9pc3RhdGUobmV3c3RhdGUpKTsKKwlzYy0+c2Nfc3RhdGUgPSBu
ZXdzdGF0ZTsKKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVt
Yl9zdGF0ZV90YXNrLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNj
LT5zY19wcm9jX3N0YXRlX3Rhc2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0
ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXRlX3Rhc2soc3RydWN0IHVzYl9wcm9jX21z
ZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3QgdW1iX3Rhc2sgKilt
c2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IEdFVF9JRlAoc2MpOworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50CSBzdGF0ZTsKKworCURQ
UklOVEYoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmIChzYy0+c2NfaW5mby5yZWdzdGF0ZSA9
PSBNQklNX1JFR1NUQVRFX1JPQU1JTkcgJiYgIXNjLT5zY19yb2FtaW5nKSB7CisJCS8qCisJCSAq
IFF1ZXJ5IHRoZSByZWdpc3RyYXRpb24gc3RhdGUgdW50aWwgd2UncmUgd2l0aCB0aGUgaG9tZQor
CQkgKiBuZXR3b3JrIGFnYWluLgorCQkgKi8KKwkJdW1iX2NtZChzYywgTUJJTV9DSURfUkVHSVNU
RVJfU1RBVEUsIE1CSU1fQ01ET1BfUVJZLCBOVUxMLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKQorCQl1bWJfdXAoc2MpOworCWVsc2UKKwkJdW1iX2Rv
d24oc2MsIDApOworCisJc3RhdGUgPSAoc2MtPnNjX3N0YXRlID09IFVNQl9TX1VQKSA/IExJTktf
U1RBVEVfVVAgOiBMSU5LX1NUQVRFX0RPV047CisJaWYgKGlmcC0+aWZfbGlua19zdGF0ZSAhPSBz
dGF0ZSkgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfREVC
VUcsICIlczogbGluayBzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXNcbiIsCisJCQkgICAgREVW
TkFNKHNjKSwKKwkJCSAgICAoaWZwLT5pZl9saW5rX3N0YXRlID09IExJTktfU1RBVEVfVVApCisJ
CQkgICAgPyAidXAiIDogImRvd24iLAorCQkJICAgIChzdGF0ZSA9PSBMSU5LX1NUQVRFX1VQKSA/
ICJ1cCIgOiAiZG93biIpOworCQlpZnAtPmlmX2xpbmtfc3RhdGUgPSBzdGF0ZTsKKwkJaWYgKHN0
YXRlICE9IExJTktfU1RBVEVfVVApIHsKKwkJCS8qCisJCQkgKiBQdXJnZSBhbnkgZXhpc3Rpbmcg
YWRkcmVzc2VzCisJCQkgKi8KKwkJCW1lbXNldChzYy0+c2NfaW5mby5pcHY0ZG5zLCAwLAorCQkJ
ICAgIHNpemVvZiAoc2MtPnNjX2luZm8uaXB2NGRucykpOworCQkJbXR4X3VubG9jaygmc2MtPnNj
X211dGV4KTsKKwkJCWlmIChpbl9jb250cm9sKE5VTEwsIFNJT0NHSUZBRERSLCAoY2FkZHJfdCkm
aWZyLCBpZnAsIGN1cnRocmVhZCkgPT0gMCAmJgorCQkJICAgIHNhdG9zaW4oJmlmci5pZnJfYWRk
ciktPnNpbl9hZGRyLnNfYWRkciAhPQorCQkJICAgIElOQUREUl9BTlkpIHsKKwkJCQlpbl9jb250
cm9sKE5VTEwsIFNJT0NESUZBRERSLCAoY2FkZHJfdCkmaWZyLCBpZnAsIGN1cnRocmVhZCk7CisJ
CQl9CisJCQltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwkJfQorCQlpZl9saW5rX3N0YXRlX2No
YW5nZShpZnAsIHN0YXRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdXAoc3RydWN0IHVt
Yl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCXN3
aXRjaCAoc2MtPnNjX3N0YXRlKSB7CisJY2FzZSBVTUJfU19ET1dOOgorCQlEUFJJTlRGKCJpbml0
OiBvcGVuaW5nIC4uLlxuIik7CisJCXVtYl9vcGVuKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJf
U19PUEVOOgorCQlpZiAoc2MtPnNjX2ZsYWdzICYgVU1CRkxHX0ZDQ19BVVRIX1JFUVVJUkVEKSB7
CisJCQlpZiAoc2MtPnNjX2NpZCA9PSAtMSkgeworCQkJCURQUklOVEYoImluaXQ6IGFsbG9jYXRp
bmcgQ0lEIC4uLlxuIik7CisJCQkJdW1iX2FsbG9jYXRlX2NpZChzYyk7CisJCQkJYnJlYWs7CisJ
CQl9IGVsc2UKKwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05TX0RPTlRfRFJP
UCk7CisJCX0gZWxzZSB7CisJCQlEUFJJTlRGKCJpbml0OiB0dXJuaW5nIHJhZGlvIG9uIC4uLlxu
Iik7CisJCQl1bWJfcmFkaW8oc2MsIDEpOworCQkJYnJlYWs7CisJCX0KKwkJLypGQUxMVEhST1VH
SCovCisJY2FzZSBVTUJfU19DSUQ6CisJCURQUklOVEYoImluaXQ6IHNlbmRpbmcgRkNDIGF1dGgg
Li4uXG4iKTsKKwkJdW1iX3NlbmRfZmNjX2F1dGgoc2MpOworCQlicmVhazsKKwljYXNlIFVNQl9T
X1JBRElPOgorCQlEUFJJTlRGKCJpbml0OiBjaGVja2luZyBTSU0gc3RhdGUgLi4uXG4iKTsKKwkJ
dW1iX2NtZChzYywgTUJJTV9DSURfU1VCU0NSSUJFUl9SRUFEWV9TVEFUVVMsIE1CSU1fQ01ET1Bf
UVJZLAorCQkgICAgTlVMTCwgMCk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfU0lNUkVBRFk6CisJ
CURQUklOVEYoImluaXQ6IGF0dGFjaGluZyAuLi5cbiIpOworCQl1bWJfcGFja2V0X3NlcnZpY2Uo
c2MsIDEpOworCQlicmVhazsKKwljYXNlIFVNQl9TX0FUVEFDSEVEOgorCQlzYy0+c2NfdHhfc2Vx
ID0gMDsKKwkJRFBSSU5URigiaW5pdDogY29ubmVjdGluZyAuLi5cbiIpOworCQl1bWJfY29ubmVj
dChzYyk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfQ09OTkVDVEVEOgorCQlEUFJJTlRGKCJpbml0
OiBnZXR0aW5nIElQIGNvbmZpZyAuLi5cbiIpOworCQl1bWJfcXJ5X2lwY29uZmlnKHNjKTsKKwkJ
YnJlYWs7CisJY2FzZSBVTUJfU19VUDoKKwkJRFBSSU5URigiaW5pdDogcmVhY2hlZCBzdGF0ZSBV
UFxuIik7CisJCWlmICghKGlmcC0+aWZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpKSB7CisJCQlp
ZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJCQlpZnAtPmlmX2Rydl9mbGFn
cyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCQkJdW1iX3J4KHNjKTsKKwkJfQorCQlicmVhazsKKwl9
CisJaWYgKHNjLT5zY19zdGF0ZSA8IFVNQl9TX1VQKQorCQl1c2JfY2FsbG91dF9yZXNldCgmc2Mt
PnNjX3N0YXRlY2hnX3RpbWVyLAorCQkgICAgVU1CX1NUQVRFX0NIQU5HRV9USU1FT1VUICogaHos
IHVtYl9zdGF0ZWNoZ190aW1lb3V0LCBzYyk7CisJZWxzZSB7CisJCXVzYl9jYWxsb3V0X3N0b3Ao
JnNjLT5zY19zdGF0ZWNoZ190aW1lcik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9kb3duKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgZm9yY2UpCit7CisJdW1iX2Nsb3Nl
X2J1bGtwaXBlcyhzYyk7CisKKwlzd2l0Y2ggKHNjLT5zY19zdGF0ZSkgeworCWNhc2UgVU1CX1Nf
VVA6CisJY2FzZSBVTUJfU19DT05ORUNURUQ6CisJCURQUklOVEYoInN0b3A6IGRpc2Nvbm5lY3Rp
bmcgLi4uXG4iKTsKKwkJdW1iX2Rpc2Nvbm5lY3Qoc2MpOworCQlpZiAoIWZvcmNlKQorCQkJYnJl
YWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1NfQVRUQUNIRUQ6CisJCURQUklOVEYo
InN0b3A6IGRldGFjaGluZyAuLi5cbiIpOworCQl1bWJfcGFja2V0X3NlcnZpY2Uoc2MsIDApOwor
CQlpZiAoIWZvcmNlKQorCQkJYnJlYWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1Nf
U0lNUkVBRFk6CisJY2FzZSBVTUJfU19SQURJTzoKKwkJRFBSSU5URigic3RvcDogdHVybmluZyBy
YWRpbyBvZmYgLi4uXG4iKTsKKwkJdW1iX3JhZGlvKHNjLCAwKTsKKwkJaWYgKCFmb3JjZSkKKwkJ
CWJyZWFrOworCQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIFVNQl9TX0NJRDoKKwljYXNlIFVNQl9T
X09QRU46CisJY2FzZSBVTUJfU19ET1dOOgorCQkvKiBEbyBub3QgY2xvc2UgdGhlIGRldmljZSAq
LworCQlEUFJJTlRGKCJzdG9wOiByZWFjaGVkIHN0YXRlIERPV05cbiIpOworCQlicmVhazsKKwl9
CisJaWYgKGZvcmNlKQorCQlzYy0+c2Nfc3RhdGUgPSBVTUJfU19PUEVOOworCisJaWYgKHNjLT5z
Y19zdGF0ZSA+IFVNQl9TX09QRU4pCisJCXVzYl9jYWxsb3V0X3Jlc2V0KCZzYy0+c2Nfc3RhdGVj
aGdfdGltZXIsCisJCSAgICBVTUJfU1RBVEVfQ0hBTkdFX1RJTUVPVVQgKiBoeiwgdW1iX3N0YXRl
Y2hnX3RpbWVvdXQsIHNjKTsKKwllbHNlCisJCXVzYl9jYWxsb3V0X3N0b3AoJnNjLT5zY19zdGF0
ZWNoZ190aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZ2V0X3Jlc3BvbnNlX3Rhc2soc3Ry
dWN0IHVzYl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1
Y3QgdW1iX3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlp
bnQJIGxlbjsKKworCURQUklOVEYoIiVzKClcbiIsIF9fZnVuY19fKTsKKwkvKgorCSAqIEZ1bmN0
aW9uIGlzIHJlcXVpcmVkIHRvIHNlbmQgb24gUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlv
biBmb3IKKwkgKiBlYWNoIGVuY2Fwc3VsYXRlZCByZXNwb25zZSB0aGF0IGlzIHRvIGJlIHByb2Nl
c3NlZCBieSB0aGUgaG9zdC4KKwkgKiBCdXQgb2YgY291cnNlLCB3ZSBjYW4gcmVjZWl2ZSBtdWx0
aXBsZSBub3RpZmljYXRpb25zIGJlZm9yZSB0aGUKKwkgKiByZXNwb25zZSB0YXNrIGlzIHJ1bi4K
KwkgKi8KKwl3aGlsZSAoc2MtPnNjX25yZXNwID4gMCkgeworCQktLXNjLT5zY19ucmVzcDsKKwkJ
bGVuID0gc2MtPnNjX2N0cmxfbGVuOworCQlpZiAodW1iX2dldF9lbmNhcF9yZXNwb25zZShzYywg
c2MtPnNjX3Jlc3BfYnVmLCAmbGVuKSkKKwkJCXVtYl9kZWNvZGVfcmVzcG9uc2Uoc2MsIHNjLT5z
Y19yZXNwX2J1ZiwgbGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVjb2RlX3Jlc3Bv
bnNlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpyZXNwb25zZSwgaW50IGxlbikKK3sKKwlz
dHJ1Y3QgbWJpbV9tc2doZHIgKmhkciA9IHJlc3BvbnNlOworCXN0cnVjdCBtYmltX2ZyYWdtZW50
ZWRfbXNnX2hkciAqZnJhZ2hkcjsKKwl1aW50MzJfdCB0eXBlOworCisJRFBSSU5URk4oMywgImdv
dCByZXNwb25zZTogbGVuICVkXG4iLCBsZW4pOworCUREVU1QTig0LCByZXNwb25zZSwgbGVuKTsK
KworCWlmIChsZW4gPCBzaXplb2YgKCpoZHIpIHx8IGxlMzJ0b2goaGRyLT5sZW4pICE9IGxlbikg
eworCQkvKgorCQkgKiBXZSBzaG91bGQgcHJvYmFibHkgY2FuY2VsIGEgdHJhbnNhY3Rpb24sIGJ1
dCBzaW5jZSB0aGUKKwkJICogbWVzc2FnZSBpcyB0b28gc2hvcnQsIHdlIGNhbm5vdCBkZWNvZGUg
dGhlIHRyYW5zYWN0aW9uCisJCSAqIGlkICh0aWQpIGFuZCBoZW5jZSBkb24ndCBrbm93LCB3aG9t
IHRvIGNhbmNlbC4gTXVzdCB3YWl0CisJCSAqIGZvciB0aGUgdGltZW91dC4KKwkJICovCisJCURQ
UklOVEYoInJlY2VpdmVkIHNob3J0IHJlc3BvbnNlIChsZW4gJWQpXG4iLAorCQkgICAgbGVuKTsK
KwkJcmV0dXJuOworCX0KKworCS8qCisJICogWFhYIEZJWE1FOiBpZiBtZXNzYWdlIGlzIGZyYWdt
ZW50ZWQsIHN0b3JlIGl0IHVudGlsIGxhc3QgZnJhZworCSAqCWlzIHJlY2VpdmVkIGFuZCB0aGVu
IHJlLWFzc2VtYmxlIGFsbCBmcmFnbWVudHMuCisJICovCisJdHlwZSA9IGxlMzJ0b2goaGRyLT50
eXBlKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1CSU1fSU5ESUNBVEVfU1RBVFVTX01TRzoK
KwljYXNlIE1CSU1fQ09NTUFORF9ET05FOgorCQlmcmFnaGRyID0gcmVzcG9uc2U7CisJCWlmIChs
ZTMydG9oKGZyYWdoZHItPmZyYWcubmZyYWcpICE9IDEpIHsKKwkJCURQUklOVEYoImRpc2NhcmRp
bmcgZnJhZ21lbnRlZCBtZXNzYWdlc1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJ
ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJRFBSSU5URigiPC0gcmN2ICVzICh0aWQgJXUpXG4i
LCB1bWJfcmVxdWVzdDJzdHIodHlwZSksCisJICAgIGxlMzJ0b2goaGRyLT50aWQpKTsKKwlzd2l0
Y2ggKHR5cGUpIHsKKwljYXNlIE1CSU1fRlVOQ1RJT05fRVJST1JfTVNHOgorCWNhc2UgTUJJTV9I
T1NUX0VSUk9SX01TRzoKKwl7CisJCXN0cnVjdCBtYmltX2YyaF9ob3N0ZXJyICplOworCQlpbnQJ
IGVycjsKKworCQlpZiAobGVuID49IHNpemVvZiAoKmUpKSB7CisJCQllID0gcmVzcG9uc2U7CisJ
CQllcnIgPSBsZTMydG9oKGUtPmVycik7CisKKwkJCURQUklOVEYoIiVzIG1lc3NhZ2UsIGVycm9y
ICVzICh0aWQgJXUpXG4iLAorCQkJICAgIHVtYl9yZXF1ZXN0MnN0cih0eXBlKSwKKwkJCSAgICB1
bWJfZXJyb3Iyc3RyKGVyciksIGxlMzJ0b2goaGRyLT50aWQpKTsKKwkJCWlmIChlcnIgPT0gTUJJ
TV9FUlJPUl9OT1RfT1BFTkVEKQorCQkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfRE9XTiwgMCk7
CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgTUJJTV9JTkRJQ0FURV9TVEFUVVNfTVNHOgorCQl1
bWJfaGFuZGxlX2luZGljYXRlX3N0YXR1c19tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVh
azsKKwljYXNlIE1CSU1fT1BFTl9ET05FOgorCQl1bWJfaGFuZGxlX29wZW5kb25lX21zZyhzYywg
cmVzcG9uc2UsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DTE9TRV9ET05FOgorCQl1bWJf
aGFuZGxlX2Nsb3NlZG9uZV9tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsKKwljYXNl
IE1CSU1fQ09NTUFORF9ET05FOgorCQl1bWJfY29tbWFuZF9kb25lKHNjLCByZXNwb25zZSwgbGVu
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URigiZGlzY2FyZCBtZXNzYWdlICVzXG4i
LAorCQkgICAgdW1iX3JlcXVlc3Qyc3RyKHR5cGUpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0
aWMgdm9pZAordW1iX2hhbmRsZV9pbmRpY2F0ZV9zdGF0dXNfbXNnKHN0cnVjdCB1bWJfc29mdGMg
KnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9pbmRpY2F0ZV9z
dGF0dXMgKm0gPSBkYXRhOworCXVpbnQzMl90IGluZm9sZW47CisJdWludDMyX3QgY2lkOworCisJ
aWYgKGxlbiA8IHNpemVvZiAoKm0pKSB7CisJCURQUklOVEYoImRpc2NhcmQgc2hvcnQgJXMgbWVz
c2FnZVxuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKG0tPmhkci50eXBlKSkpOwor
CQlyZXR1cm47CisJfQorCWlmIChtZW1jbXAobS0+ZGV2aWQsIHVtYl91dWlkX2Jhc2ljX2Nvbm5l
Y3QsIHNpemVvZiAobS0+ZGV2aWQpKSkgeworCQlEUFJJTlRGKCJkaXNjYXJkICVzIG1lc3NhZ2Ug
Zm9yIG90aGVyIFVVSUQgJyVzJ1xuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKG0t
Pmhkci50eXBlKSksCisJCSAgICB1bWJfdXVpZDJzdHIobS0+ZGV2aWQpKTsKKwkJcmV0dXJuOwor
CX0KKwlpbmZvbGVuID0gbGUzMnRvaChtLT5pbmZvbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9mICgq
bSkgKyBpbmZvbGVuKSB7CisJCURQUklOVEYoImRpc2NhcmQgdHJ1bmNhdGVkICVzIG1lc3NhZ2Ug
KHdhbnQgJWQsIGdvdCAlZClcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIobGUzMnRvaChtLT5o
ZHIudHlwZSkpLAorCQkgICAgKGludClzaXplb2YgKCptKSArIGluZm9sZW4sIGxlbik7CisJCXJl
dHVybjsKKwl9CisKKwljaWQgPSBsZTMydG9oKG0tPmNpZCk7CisJRFBSSU5URigiaW5kaWNhdGUg
JXMgc3RhdHVzXG4iLCB1bWJfY2lkMnN0cihjaWQpKTsKKwl1bWJfZGVjb2RlX2NpZChzYywgY2lk
LCBtLT5pbmZvLCBpbmZvbGVuKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9oYW5kbGVfb3BlbmRv
bmVfbXNnKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0
cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lICpyZXNwID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1cyA9IGxlMzJ0
b2gocmVzcC0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IE1CSU1fU1RBVFVTX1NVQ0NFU1MpIHsK
KwkJaWYgKHNjLT5zY19tYXhzZXNzaW9ucyA9PSAwKSB7CisJCQl1bWJfY21kKHNjLCBNQklNX0NJ
RF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9RUlksIE5VTEwsCisJCQkgICAgMCk7CisJCQl1bWJf
Y21kKHNjLCBNQklNX0NJRF9QSU4sIE1CSU1fQ01ET1BfUVJZLCBOVUxMLCAwKTsKKwkJCXVtYl9j
bWQoc2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1FSWSwKKwkJCSAgICBO
VUxMLCAwKTsKKwkJfQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIFVNQl9OU19ET05U
X0RST1ApOworCX0gZWxzZSBpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExP
R19FUlIsICIlczogb3BlbiBlcnJvcjogJXNcbiIsIERFVk5BTShzYyksCisJCSAgICB1bWJfc3Rh
dHVzMnN0cihzdGF0dXMpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaGFuZGxl
X2Nsb3NlZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4p
Cit7CisJc3RydWN0IG1iaW1fZjJoX29wZW5jbG9zZWRvbmUgKnJlc3AgPSBkYXRhOworCXVpbnQz
Ml90IHN0YXR1czsKKworCXN0YXR1cyA9IGxlMzJ0b2gocmVzcC0+c3RhdHVzKTsKKwlpZiAoc3Rh
dHVzID09IE1CSU1fU1RBVFVTX1NVQ0NFU1MpCisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfRE9X
TiwgMCk7CisJZWxzZQorCQlEUFJJTlRGKCJjbG9zZSBlcnJvcjogJXNcbiIsCisJCSAgICB1bWJf
c3RhdHVzMnN0cihzdGF0dXMpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor
dW1iX2dldGluZm9idWYoY2hhciAqaW4sIGludCBpbmxlbiwgdWludDMyX3Qgb2ZmcywgdWludDMy
X3Qgc3osCisgICAgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKQoreworCW9mZnMgPSBsZTMydG9o
KG9mZnMpOworCXN6ID0gbGUzMnRvaChzeik7CisJaWYgKGlubGVuID49IG9mZnMgKyBzeikgewor
CQltZW1zZXQob3V0LCAwLCBvdXRsZW4pOworCQltZW1jcHkob3V0LCBpbiArIG9mZnMsIE1JTihz
eiwgb3V0bGVuKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAordW1iX3BhZGRpbmcodm9p
ZCAqZGF0YSwgaW50IGxlbiwgc2l6ZV90IHN6KQoreworCWNoYXIgKnAgPSBkYXRhOworCWludCBu
cCA9IDA7CisKKwl3aGlsZSAobGVuIDwgc3ogJiYgKGxlbiAlIDQpICE9IDApIHsKKwkJKnArKyA9
ICdcMCc7CisJCWxlbisrOworCQlucCsrOworCX0KKwlyZXR1cm4gbnA7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50Cit1bWJfYWRkc3RyKHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnN6LCBpbnQgKm9mZnMs
IHZvaWQgKnN0ciwgaW50IHNsZW4sCisgICAgdWludDMyX3QgKm9mZnNtZW1iZXIsIHVpbnQzMl90
ICpzaXplbWVtYmVyKQoreworCWlmICgqb2ZmcyArIHNsZW4gPiBidWZzeikKKwkJcmV0dXJuIDA7
CisKKwkqc2l6ZW1lbWJlciA9IGh0b2xlMzIoKHVpbnQzMl90KXNsZW4pOworCWlmIChzbGVuICYm
IHN0cikgeworCQkqb2Zmc21lbWJlciA9IGh0b2xlMzIoKHVpbnQzMl90KSpvZmZzKTsKKwkJbWVt
Y3B5KChjaGFyICopYnVmICsgKm9mZnMsIHN0ciwgc2xlbik7CisJCSpvZmZzICs9IHNsZW47CisJ
CSpvZmZzICs9IHVtYl9wYWRkaW5nKGJ1ZiwgKm9mZnMsIGJ1ZnN6KTsKKwl9IGVsc2UKKwkJKm9m
ZnNtZW1iZXIgPSBodG9sZTMyKDApOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW1i
X2luX2xlbjJtYXNrKHN0cnVjdCBpbl9hZGRyICptYXNrLCBpbnQgbGVuKQoreworCWludCBpOwor
CXVfY2hhciAqcDsKKworCXAgPSAodV9jaGFyICopbWFzazsKKwltZW1zZXQobWFzaywgMCwgc2l6
ZW9mICgqbWFzaykpOworCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA4OyBpKyspCisJCXBbaV0gPSAw
eGZmOworCWlmIChsZW4gJSA4KQorCQlwW2ldID0gKDB4ZmYwMCA+PiAobGVuICUgOCkpICYgMHhm
ZjsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgdW1i
X3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmVn
aXN0cmF0aW9uX3N0YXRlX2luZm8gKnJzID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdF
VF9JRlAoc2MpOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnJzKSkKKwkJcmV0dXJuIDA7CisJc2Mt
PnNjX2luZm8ubndlcnJvciA9IGxlMzJ0b2gocnMtPm53ZXJyb3IpOworCXNjLT5zY19pbmZvLnJl
Z3N0YXRlID0gbGUzMnRvaChycy0+cmVnc3RhdGUpOworCXNjLT5zY19pbmZvLnJlZ21vZGUgPSBs
ZTMydG9oKHJzLT5yZWdtb2RlKTsKKwlzYy0+c2NfaW5mby5jZWxsY2xhc3MgPSBsZTMydG9oKHJz
LT5jdXJjZWxsY2xhc3MpOworCisJLyogWFhYIHNob3VsZCB3ZSByZW1lbWJlciB0aGUgcHJvdmlk
ZXJfaWQ/ICovCisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBycy0+cHJvdm5hbWVfb2Zmcywg
cnMtPnByb3ZuYW1lX3NpemUsCisJICAgIHNjLT5zY19pbmZvLnByb3ZpZGVyLCBzaXplb2YgKHNj
LT5zY19pbmZvLnByb3ZpZGVyKSk7CisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBycy0+cm9h
bWluZ3R4dF9vZmZzLCBycy0+cm9hbWluZ3R4dF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5yb2Ft
aW5ndHh0LCBzaXplb2YgKHNjLT5zY19pbmZvLnJvYW1pbmd0eHQpKTsKKworCURQUklOVEZOKDIs
ICIlcywgYXZhaWxjbGFzcyAweCV4LCBjbGFzcyAweCV4LCByZWdtb2RlICVkXG4iLAorCSAgICB1
bWJfcmVnc3RhdGUoc2MtPnNjX2luZm8ucmVnc3RhdGUpLAorCSAgICBsZTMydG9oKHJzLT5hdmFp
bGNsYXNzZXMpLCBzYy0+c2NfaW5mby5jZWxsY2xhc3MsCisJICAgIHNjLT5zY19pbmZvLnJlZ21v
ZGUpOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RBVEVfUk9BTUlO
RyAmJgorCSAgICAhc2MtPnNjX3JvYW1pbmcgJiYKKwkgICAgc2MtPnNjX2luZm8uYWN0aXZhdGlv
biA9PSBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVEVEKSB7CisJCWlmIChpZnAtPmlmX2Zs
YWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19JTkZPLAorCQkJICAgICIlczogZGlzY29ubmVj
dGluZyBmcm9tIHJvYW1pbmcgbmV0d29ya1xuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJdW1i
X2Rpc2Nvbm5lY3Qoc2MpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2Rl
Y29kZV9kZXZpY2VzX2NhcHMoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBs
ZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX2RldmljZV9jYXBzICpkYyA9IGRhdGE7CisKKwlpZiAo
bGVuIDwgc2l6ZW9mICgqZGMpKQorCQlyZXR1cm4gMDsKKwlzYy0+c2NfbWF4c2Vzc2lvbnMgPSBs
ZTMydG9oKGRjLT5tYXhfc2Vzc2lvbnMpOworCXNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMg
PSBsZTMydG9oKGRjLT5kYXRhY2xhc3MpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgZGMt
PmRldmlkX29mZnMsIGRjLT5kZXZpZF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5kZXZpZCwgc2l6
ZW9mIChzYy0+c2NfaW5mby5kZXZpZCkpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgZGMt
PmZ3aW5mb19vZmZzLCBkYy0+ZndpbmZvX3NpemUsCisJICAgIHNjLT5zY19pbmZvLmZ3aW5mbywg
c2l6ZW9mIChzYy0+c2NfaW5mby5md2luZm8pKTsKKwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4s
IGRjLT5od2luZm9fb2ZmcywgZGMtPmh3aW5mb19zaXplLAorCSAgICBzYy0+c2NfaW5mby5od2lu
Zm8sIHNpemVvZiAoc2MtPnNjX2luZm8uaHdpbmZvKSk7CisJRFBSSU5URk4oMiwgIm1heCBzZXNz
aW9ucyAlZCwgc3VwcG9ydGVkIGNsYXNzZXMgMHgleFxuIiwKKwkgICAgc2MtPnNjX21heHNlc3Np
b25zLCBzYy0+c2NfaW5mby5zdXBwb3J0ZWRjbGFzc2VzKTsKKwlyZXR1cm4gMTsKK30KKworc3Rh
dGljIGludAordW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1iX3NvZnRjICpz
Yywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfc3Vic2NyaWJlcl9y
ZWFkeV9pbmZvICpzaSA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsK
KwlpbnQJbnBuOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnNpKSkKKwkJcmV0dXJuIDA7CisJc2Mt
PnNjX2luZm8uc2ltX3N0YXRlID0gbGUzMnRvaChzaS0+cmVhZHkpOworCisJdW1iX2dldGluZm9i
dWYoZGF0YSwgbGVuLCBzaS0+c2lkX29mZnMsIHNpLT5zaWRfc2l6ZSwKKwkgICAgc2MtPnNjX2lu
Zm8uc2lkLCBzaXplb2YgKHNjLT5zY19pbmZvLnNpZCkpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEs
IGxlbiwgc2ktPmljY19vZmZzLCBzaS0+aWNjX3NpemUsCisJICAgIHNjLT5zY19pbmZvLmljY2lk
LCBzaXplb2YgKHNjLT5zY19pbmZvLmljY2lkKSk7CisKKwlucG4gPSBsZTMydG9oKHNpLT5ub19w
bik7CisJaWYgKG5wbiA+IDApCisJCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgc2ktPnBuWzBd
Lm9mZnMsIHNpLT5wblswXS5zaXplLAorCQkgICAgc2MtPnNjX2luZm8ucG4sIHNpemVvZiAoc2Mt
PnNjX2luZm8ucG4pKTsKKwllbHNlCisJCW1lbXNldChzYy0+c2NfaW5mby5wbiwgMCwgc2l6ZW9m
IChzYy0+c2NfaW5mby5wbikpOworCisJaWYgKHNjLT5zY19pbmZvLnNpbV9zdGF0ZSA9PSBNQklN
X1NJTVNUQVRFX0xPQ0tFRCkKKwkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9SRVFV
SVJFRDsKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19JTkZPLCAi
JXM6IFNJTSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9zaW1zdGF0ZShzYy0+c2NfaW5m
by5zaW1fc3RhdGUpKTsKKwlpZiAoc2MtPnNjX2luZm8uc2ltX3N0YXRlID09IE1CSU1fU0lNU1RB
VEVfSU5JVElBTElaRUQpCisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfU0lNUkVBRFksIFVNQl9O
U19ET05UX0RST1ApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3Jh
ZGlvX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorewor
CXN0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZV9pbmZvICpycyA9IGRhdGE7CisJc3RydWN0IGlm
bmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpycykpCisJCXJl
dHVybiAwOworCisJc2MtPnNjX2luZm8uaHdfcmFkaW9fb24gPQorCSAgICAobGUzMnRvaChycy0+
aHdfc3RhdGUpID09IE1CSU1fUkFESU9fU1RBVEVfT04pID8gMSA6IDA7CisJc2MtPnNjX2luZm8u
c3dfcmFkaW9fb24gPQorCSAgICAobGUzMnRvaChycy0+c3dfc3RhdGUpID09IE1CSU1fUkFESU9f
U1RBVEVfT04pID8gMSA6IDA7CisJaWYgKCFzYy0+c2NfaW5mby5od19yYWRpb19vbikgeworCQlk
ZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJyYWRpbyBpcyBkaXNhYmxlZCBieSBoYXJkd2FyZSBz
d2l0Y2hcbiIpOworCQkvKgorCQkgKiBYWFggZG8gd2UgbmVlZCBhIHRpbWUgdG8gcG9sbCB0aGUg
c3RhdGUgb2YgdGhlIHJma2lsbCBzd2l0Y2gKKwkJICoJb3Igd2lsbCB0aGUgZGV2aWNlIHNlbmQg
YW4gdW5zb2xpY2l0ZWQgbm90aWZpY2F0aW9uCisJCSAqCWluIGNhc2UgdGhlIHN0YXRlIGNoYW5n
ZXM/CisJCSAqLworCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIDApOworCX0gZWxzZSBp
ZiAoIXNjLT5zY19pbmZvLnN3X3JhZGlvX29uKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZG
X0RFQlVHKQorCQkJbG9nKExPR19JTkZPLCAiJXM6IHJhZGlvIGlzIG9mZlxuIiwgREVWTkFNKHNj
KSk7CisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfT1BFTiwgMCk7CisJfSBlbHNlCisJCXVtYl9u
ZXdzdGF0ZShzYywgVU1CX1NfUkFESU8sIFVNQl9OU19ET05UX0RST1ApOworCXJldHVybiAxOwor
fQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9p
ZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcGluX2luZm8gKnBpID0gZGF0
YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90CWF0dGVtcHRz
X2xlZnQ7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqcGkpKQorCQlyZXR1cm4gMDsKKworCWF0dGVt
cHRzX2xlZnQgPSBsZTMydG9oKHBpLT5yZW1haW5pbmdfYXR0ZW1wdHMpOworCWlmIChhdHRlbXB0
c19sZWZ0ICE9IDB4ZmZmZmZmZmYpCisJCXNjLT5zY19pbmZvLnBpbl9hdHRlbXB0c19sZWZ0ID0g
YXR0ZW1wdHNfbGVmdDsKKworCXN3aXRjaCAobGUzMnRvaChwaS0+c3RhdGUpKSB7CisJY2FzZSBN
QklNX1BJTl9TVEFURV9VTkxPQ0tFRDoKKwkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJ
Tl9VTkxPQ0tFRDsKKwkJYnJlYWs7CisJY2FzZSBNQklNX1BJTl9TVEFURV9MT0NLRUQ6CisJCXN3
aXRjaCAobGUzMnRvaChwaS0+dHlwZSkpIHsKKwkJY2FzZSBNQklNX1BJTl9UWVBFX1BJTjE6CisJ
CQlzYy0+c2NfaW5mby5waW5fc3RhdGUgPSBVTUJfUElOX1JFUVVJUkVEOworCQkJYnJlYWs7CisJ
CWNhc2UgTUJJTV9QSU5fVFlQRV9QVUsxOgorCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1C
X1BVS19SRVFVSVJFRDsKKwkJCWJyZWFrOworCQljYXNlIE1CSU1fUElOX1RZUEVfUElOMjoKKwkJ
Y2FzZSBNQklNX1BJTl9UWVBFX1BVSzI6CisJCQkvKiBBc3N1bWUgdGhhdCBQSU4xIHdhcyBhY2Nl
cHRlZCAqLworCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9VTkxPQ0tFRDsKKwkJ
CWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJV
RykKKwkJbG9nKExPR19JTkZPLCAiJXM6ICVzIHN0YXRlICVzICglZCBhdHRlbXB0cyBsZWZ0KVxu
IiwKKwkJICAgIERFVk5BTShzYyksIHVtYl9waW5fdHlwZShsZTMydG9oKHBpLT50eXBlKSksCisJ
CSAgICAobGUzMnRvaChwaS0+c3RhdGUpID09IE1CSU1fUElOX1NUQVRFX1VOTE9DS0VEKSA/CisJ
CQkidW5sb2NrZWQiIDogImxvY2tlZCIsCisJCSAgICBsZTMydG9oKHBpLT5yZW1haW5pbmdfYXR0
ZW1wdHMpKTsKKworCS8qCisJICogSW4gY2FzZSB0aGUgUElOIHdhcyBzZXQgYWZ0ZXIgSUZGX1VQ
LCByZXRyaWdnZXIgdGhlIHN0YXRlIG1hY2hpbmUKKwkgKi8KKwltdHhfbG9jaygmc2MtPnNjX211
dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNjLT5zY19wcm9j
X3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMV0uaGRyLCAw
KTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXJldHVybiAxOworfQorCitzdGF0aWMg
aW50Cit1bWJfZGVjb2RlX3BhY2tldF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lk
ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2VydmljZV9pbmZv
ICpwc2kgPSBkYXRhOworCWludAkgc3RhdGUsIGhpZ2hlc3RjbGFzczsKKwl1aW50NjRfdCB1cF9z
cGVlZCwgZG93bl9zcGVlZDsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJ
aWYgKGxlbiA8IHNpemVvZiAoKnBzaSkpCisJCXJldHVybiAwOworCisJc2MtPnNjX2luZm8ubndl
cnJvciA9IGxlMzJ0b2gocHNpLT5ud2Vycm9yKTsKKwlzdGF0ZSA9IGxlMzJ0b2gocHNpLT5zdGF0
ZSk7CisJaGlnaGVzdGNsYXNzID0gbGUzMnRvaChwc2ktPmhpZ2hlc3RfZGF0YWNsYXNzKTsKKwl1
cF9zcGVlZCA9IGxlNjR0b2gocHNpLT51cGxpbmtfc3BlZWQpOworCWRvd25fc3BlZWQgPSBsZTY0
dG9oKHBzaS0+ZG93bmxpbmtfc3BlZWQpOworCWlmIChzYy0+c2NfaW5mby5wYWNrZXRzdGF0ZSAg
IT0gc3RhdGUgfHwKKwkgICAgc2MtPnNjX2luZm8udXBsaW5rX3NwZWVkICE9IHVwX3NwZWVkIHx8
CisJICAgIHNjLT5zY19pbmZvLmRvd25saW5rX3NwZWVkICE9IGRvd25fc3BlZWQpIHsKKwkJaWYg
KGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpIHsKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBwYWNr
ZXQgc2VydmljZSAiLCBERVZOQU0oc2MpKTsKKwkJCWlmIChzYy0+c2NfaW5mby5wYWNrZXRzdGF0
ZSAgIT0gc3RhdGUpCisJCQkJbG9nKExPR19JTkZPLCAiY2hhbmdlZCBmcm9tICVzIHRvICIsCisJ
CQkJICAgIHVtYl9wYWNrZXRfc3RhdGUoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUpKTsKKwkJCWxv
ZyhMT0dfSU5GTywgIiVzLCBjbGFzcyAlcywgc3BlZWQ6ICUiIFBSSXU2NCAiIHVwIC8gJSIgUFJJ
dTY0ICIgZG93blxuIiwKKwkJCSAgICB1bWJfcGFja2V0X3N0YXRlKHN0YXRlKSwKKwkJCSAgICB1
bWJfZGF0YWNsYXNzKGhpZ2hlc3RjbGFzcyksIHVwX3NwZWVkLCBkb3duX3NwZWVkKTsKKwkJfQor
CX0KKwlzYy0+c2NfaW5mby5wYWNrZXRzdGF0ZSA9IHN0YXRlOworCXNjLT5zY19pbmZvLmhpZ2hl
c3RjbGFzcyA9IGhpZ2hlc3RjbGFzczsKKwlzYy0+c2NfaW5mby51cGxpbmtfc3BlZWQgPSB1cF9z
cGVlZDsKKwlzYy0+c2NfaW5mby5kb3dubGlua19zcGVlZCA9IGRvd25fc3BlZWQ7CisKKwlpZiAo
c2MtPnNjX2luZm8ucmVnbW9kZSA9PSBNQklNX1JFR01PREVfQVVUT01BVElDKSB7CisJCS8qCisJ
CSAqIEZvciBkZXZpY2VzIHVzaW5nIGF1dG9tYXRpYyByZWdpc3RyYXRpb24gbW9kZSwganVzdCBw
cm9jZWVkLAorCQkgKiBvbmNlIHJlZ2lzdHJhdGlvbiBoYXMgY29tcGxldGVkLgorCQkgKi8KKwkJ
aWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApIHsKKwkJCXN3aXRjaCAoc2MtPnNjX2luZm8ucmVn
c3RhdGUpIHsKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9IT01FOgorCQkJY2FzZSBNQklNX1JFR1NU
QVRFX1JPQU1JTkc6CisJCQljYXNlIE1CSU1fUkVHU1RBVEVfUEFSVE5FUjoKKwkJCQl1bWJfbmV3
c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVELAorCQkJCSAgICBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJ
CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJdW1i
X25ld3N0YXRlKHNjLCBVTUJfU19TSU1SRUFEWSwgVU1CX05TX0RPTlRfUkFJU0UpOworCX0gZWxz
ZSBzd2l0Y2ggKHNjLT5zY19pbmZvLnBhY2tldHN0YXRlKSB7CisJY2FzZSBNQklNX1BLVFNFUlZJ
Q0VfU1RBVEVfQVRUQUNIRUQ6CisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfQVRUQUNIRUQsIFVN
Ql9OU19ET05UX0RST1ApOworCQlicmVhazsKKwljYXNlIE1CSU1fUEtUU0VSVklDRV9TVEFURV9E
RVRBQ0hFRDoKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19TSU1SRUFEWSwgVU1CX05TX0RPTlRf
UkFJU0UpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9k
ZWNvZGVfc2lnbmFsX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQg
bGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9zaWduYWxfc3RhdGUgKnNzID0gZGF0YTsKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWludAkgcnNzaTsKKworCWlmIChsZW4gPCBz
aXplb2YgKCpzcykpCisJCXJldHVybiAwOworCisJaWYgKGxlMzJ0b2goc3MtPnJzc2kpID09IDk5
KQorCQlyc3NpID0gVU1CX1ZBTFVFX1VOS05PV047CisJZWxzZSB7CisJCXJzc2kgPSAtMTEzICsg
MiAqIGxlMzJ0b2goc3MtPnJzc2kpOworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcp
ICYmIHNjLT5zY19pbmZvLnJzc2kgIT0gcnNzaSAmJgorCQkgICAgc2MtPnNjX3N0YXRlID49IFVN
Ql9TX0NPTk5FQ1RFRCkKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiByc3NpICVkIGRCbVxuIiwgREVW
TkFNKHNjKSwgcnNzaSk7CisJfQorCXNjLT5zY19pbmZvLnJzc2kgPSByc3NpOworCXNjLT5zY19p
bmZvLmJlciA9IGxlMzJ0b2goc3MtPmVycl9yYXRlKTsKKwlpZiAoc2MtPnNjX2luZm8uYmVyID09
IC05OSkKKwkJc2MtPnNjX2luZm8uYmVyID0gVU1CX1ZBTFVFX1VOS05PV047CisJcmV0dXJuIDE7
Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVjdCB1bWJfc29m
dGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9jb25uZWN0
X2luZm8gKmNpID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWlu
dAkgYWN0OworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAo
bGUzMnRvaChjaS0+c2Vzc2lvbmlkKSAhPSB1bWJfc2Vzc2lvbl9pZCkgeworCQlEUFJJTlRGKCJk
aXNjYXJkIGNvbm5lY3Rpb24gaW5mbyBmb3Igc2Vzc2lvbiAldVxuIiwKKwkJICAgIGxlMzJ0b2go
Y2ktPnNlc3Npb25pZCkpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKG1lbWNtcChjaS0+Y29udGV4
dCwgdW1iX3V1aWRfY29udGV4dF9pbnRlcm5ldCwKKwkgICAgc2l6ZW9mIChjaS0+Y29udGV4dCkp
KSB7CisJCURQUklOVEYoImRpc2NhcmQgY29ubmVjdGlvbiBpbmZvIGZvciBvdGhlciBjb250ZXh0
XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWFjdCA9IGxlMzJ0b2goY2ktPmFjdGl2YXRpb24pOwor
CWlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uICE9IGFjdCkgeworCQlpZiAoaWZwLT5pZl9mbGFn
cyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBjb25uZWN0aW9uICVzXG4iLCBE
RVZOQU0oc2MpLAorCQkJICAgIHVtYl9hY3RpdmF0aW9uKGFjdCkpOworCQlpZiAoKGlmcC0+aWZf
ZmxhZ3MgJiBJRkZfREVCVUcpICYmCisJCSAgICBsZTMydG9oKGNpLT5pcHR5cGUpICE9IE1CSU1f
Q09OVEVYVF9JUFRZUEVfREVGQVVMVCAmJgorCQkgICAgbGUzMnRvaChjaS0+aXB0eXBlKSAhPSBN
QklNX0NPTlRFWFRfSVBUWVBFX0lQVjQpCisJCQlsb2coTE9HX0RFQlVHLCAiJXM6IGdvdCBpcHR5
cGUgJWQgY29ubmVjdGlvblxuIiwKKwkJCSAgICBERVZOQU0oc2MpLCBsZTMydG9oKGNpLT5pcHR5
cGUpKTsKKworCQlzYy0+c2NfaW5mby5hY3RpdmF0aW9uID0gYWN0OworCQlzYy0+c2NfaW5mby5u
d2Vycm9yID0gbGUzMnRvaChjaS0+bndlcnJvcik7CisKKwkJaWYgKHNjLT5zY19pbmZvLmFjdGl2
YXRpb24gPT0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRCkKKwkJCXVtYl9uZXdzdGF0
ZShzYywgVU1CX1NfQ09OTkVDVEVELCBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJZWxzZSBpZiAoc2Mt
PnNjX2luZm8uYWN0aXZhdGlvbiA9PQorCQkgICAgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNU
SVZBVEVEKQorCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19BVFRBQ0hFRCwgMCk7CisJCS8qIGVs
c2U6IG90aGVyIHN0YXRlcyBhcmUgcHVyZWx5IHRyYW5zaXRpb25hbCAqLworCX0KKwlyZXR1cm4g
MTsKK30KKworc3RhdGljIGludAordW1iX2FkZF9pbmV0X2NvbmZpZyhzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgc3RydWN0IGluX2FkZHIgaXAsIHVfaW50IHByZWZpeGxlbiwKKyAgICBzdHJ1Y3QgaW5f
YWRkciBndykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXN0cnVjdCBp
bl9hbGlhc3JlcSBpZnJhOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCWludAkgcnY7CisK
KwltZW1zZXQoJmlmcmEsIDAsIHNpemVvZiAoaWZyYSkpOworCXNpbiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKikmaWZyYS5pZnJhX2FkZHI7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlz
aW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4pOworCXNpbi0+c2luX2FkZHIgPSBpcDsKKworCXNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX2RzdGFkZHI7CisJc2luLT5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4pOworCXNpbi0+
c2luX2FkZHIgPSBndzsKKworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJh
X21hc2s7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9sZW4gPSBzaXpl
b2YgKCpzaW4pOworCXVtYl9pbl9sZW4ybWFzaygmc2luLT5zaW5fYWRkciwgcHJlZml4bGVuKTsK
KworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJcnYgPSBpbl9jb250cm9sKE5VTEwsIFNJ
T0NBSUZBRERSLCAoY2FkZHJfdCkmaWZyYSwgaWZwLCBjdXJ0aHJlYWQpOworCW10eF9sb2NrKCZz
Yy0+c2NfbXV0ZXgpOworCWlmIChydiAhPSAwKSB7CisJCWRldmljZV9wcmludGYoc2MtPnNjX2Rl
diwgInVuYWJsZSB0byBzZXQgSVB2NCBhZGRyZXNzLCBlcnJvciAlZFxuIiwKKwkJICAgIHJ2KTsK
KwkJcmV0dXJuIHJ2OworCX0KKworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQls
b2coTE9HX0lORk8sICIlczogSVB2NCBhZGRyICVzLCBtYXNrICVzLCAiCisJCSAgICAiZ2F0ZXdh
eSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9udG9wKHNpbnRvc2EoJmlmcmEuaWZyYV9h
ZGRyKSksCisJCSAgICB1bWJfbnRvcChzaW50b3NhKCZpZnJhLmlmcmFfbWFzaykpLAorCQkgICAg
dW1iX250b3Aoc2ludG9zYSgmaWZyYS5pZnJhX2RzdGFkZHIpKSk7CisKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIGludAordW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHN0cnVjdCB1bWJfc29m
dGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9pcF9jb25m
aWd1cmF0aW9uX2luZm8gKmljID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAo
c2MpOworCXVpbnQzMl90IGF2YWlsX3Y0OworCXVpbnQzMl90IHZhbDsKKwlpbnQJIG4sIGk7CisJ
aW50CSBvZmY7CisJc3RydWN0IG1iaW1fY2lkX2lwdjRfZWxlbWVudCBpcHY0ZWxlbTsKKwlzdHJ1
Y3QgaW5fYWRkciBhZGRyLCBndzsKKwlpbnQJIHN0YXRlID0gLTE7CisJaW50CSBydjsKKworCWlm
IChsZW4gPCBzaXplb2YgKCppYykpCisJCXJldHVybiAwOworCWlmIChsZTMydG9oKGljLT5zZXNz
aW9uaWQpICE9IHVtYl9zZXNzaW9uX2lkKSB7CisJCURQUklOVEYoImlnbm9yZSBJUCBjb25maWd1
cmF0aW9uIGZvciBzZXNzaW9uIGlkICVkXG4iLAorCQkgICAgbGUzMnRvaChpYy0+c2Vzc2lvbmlk
KSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSVB2NCBjb25maWd1cmF0aW9uCisJICov
CisJYXZhaWxfdjQgPSBsZTMydG9oKGljLT5pcHY0X2F2YWlsYWJsZSk7CisJaWYgKChhdmFpbF92
NCAmIChNQklNX0lQQ09ORl9IQVNfQUREUklORk8gfCBNQklNX0lQQ09ORl9IQVNfR1dJTkZPKSkg
PT0KKwkgICAgKE1CSU1fSVBDT05GX0hBU19BRERSSU5GTyB8IE1CSU1fSVBDT05GX0hBU19HV0lO
Rk8pKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25hZGRyKTsKKwkJb2ZmID0gbGUzMnRvaChp
Yy0+aXB2NF9hZGRyb2Zmcyk7CisKKwkJaWYgKG4gPT0gMCB8fCBvZmYgKyBzaXplb2YgKGlwdjRl
bGVtKSA+IGxlbikKKwkJCWdvdG8gdHJ5djY7CisJCWlmIChuICE9IDEgJiYgaWZwLT5pZl9mbGFn
cyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBtb3JlIHRoYW4gb25lIElQdjQg
YWRkcjogJWRcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgbik7CisKKwkJLyogT25seSBwaWNrIHRo
ZSBmaXJzdCBvbmUgKi8KKwkJbWVtY3B5KCZpcHY0ZWxlbSwgKGNoYXIgKilkYXRhICsgb2ZmLCBz
aXplb2YgKGlwdjRlbGVtKSk7CisJCWlwdjRlbGVtLnByZWZpeGxlbiA9IGxlMzJ0b2goaXB2NGVs
ZW0ucHJlZml4bGVuKTsKKwkJYWRkci5zX2FkZHIgPSBpcHY0ZWxlbS5hZGRyOworCisJCW9mZiA9
IGxlMzJ0b2goaWMtPmlwdjRfZ3dvZmZzKTsKKwkJaWYgKG9mZiArIHNpemVvZiAoZ3cpID4gbGVu
KQorCQkJZ290byBkb25lOworCQltZW1jcHkoJmd3LCAoY2hhciAqKWRhdGEgKyBvZmYsIHNpemVv
ZiAoZ3cpKTsKKworCQlydiA9IHVtYl9hZGRfaW5ldF9jb25maWcoc2MsIGFkZHIsIGlwdjRlbGVt
LnByZWZpeGxlbiwgZ3cpOworCQlpZiAocnYgPT0gMCkKKwkJCXN0YXRlID0gVU1CX1NfVVA7CisJ
fQorCisJbWVtc2V0KHNjLT5zY19pbmZvLmlwdjRkbnMsIDAsIHNpemVvZiAoc2MtPnNjX2luZm8u
aXB2NGRucykpOworCWlmIChhdmFpbF92NCAmIE1CSU1fSVBDT05GX0hBU19ETlNJTkZPKSB7CisJ
CW4gPSBsZTMydG9oKGljLT5pcHY0X25kbnNzcnYpOworCQlvZmYgPSBsZTMydG9oKGljLT5pcHY0
X2Ruc3Nydm9mZnMpOworCQlpID0gMDsKKwkJd2hpbGUgKG4tLSA+IDApIHsKKwkJCWlmIChvZmYg
KyBzaXplb2YgKGFkZHIpID4gbGVuKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KCZhZGRyLCAoY2hh
ciAqKWRhdGEgKyBvZmYsIHNpemVvZihhZGRyKSk7CisJCQlpZiAoaSA8IFVNQl9NQVhfRE5TU1JW
KQorCQkJCXNjLT5zY19pbmZvLmlwdjRkbnNbaSsrXSA9IGFkZHI7CisJCQlvZmYgKz0gc2l6ZW9m
KGFkZHIpOworCQl9CisJfQorCisJaWYgKChhdmFpbF92NCAmIE1CSU1fSVBDT05GX0hBU19NVFVJ
TkZPKSkgeworCQl2YWwgPSBsZTMydG9oKGljLT5pcHY0X210dSk7CisJCWlmIChpZnAtPmlmX210
dSAhPSB2YWwgJiYgdmFsIDw9IHNjLT5zY19tYXhwa3RsZW4pIHsKKwkJCWlmcC0+aWZfbXR1ID0g
dmFsOworCQkJaWYgKGlmcC0+aWZfbXR1ID4gdmFsKQorCQkJCWlmcC0+aWZfbXR1ID0gdmFsOwor
CQkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQkJbG9nKExPR19JTkZPLCAiJXM6
IE1UVSAlZFxuIiwgREVWTkFNKHNjKSwgdmFsKTsKKwkJfQorCX0KKworCWF2YWlsX3Y0ID0gbGUz
MnRvaChpYy0+aXB2Nl9hdmFpbGFibGUpOworCWlmICgoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJV
RykgJiYgYXZhaWxfdjQgJiBNQklNX0lQQ09ORl9IQVNfQUREUklORk8pIHsKKwkJLyogWFhYIEZJ
WE1FOiBJUHY2IGNvbmZpZ3VyYXRpb24gbWlzc2luZyAqLworCQlsb2coTE9HX0lORk8sICIlczog
aWdub3JpbmcgSVB2NiBjb25maWd1cmF0aW9uXG4iLCBERVZOQU0oc2MpKTsKKwl9CisJaWYgKHN0
YXRlICE9IC0xKQorCQl1bWJfbmV3c3RhdGUoc2MsIHN0YXRlLCAwKTsKKwordHJ5djY6Citkb25l
OgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW1iX3J4KHN0cnVjdCB1bWJfc29mdGMg
KnNjKQoreworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJdXNiZF90
cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltVTUJfQlVMS19SWF0pOworfQorCitzdGF0aWMgdm9p
ZAordW1iX3J4ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQor
eworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVj
dCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50IGFjdGxlbjsKKwlpbnQgYWZyYW1lczsK
KwlpbnQgaTsKKworCURQUklOVEYoIiVzKCV1KTogc3RhdGU9JXVcbiIsIF9fZnVuY19fLCBzdGF0
dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBN
QV9PV05FRCk7CisKKwl1c2JkX3hmZXJfc3RhdHVzKHhmZXIsICZhY3RsZW4sIE5VTEwsICZhZnJh
bWVzLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNC
X1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJyZWNlaXZlZCAldSBieXRlcyBpbiAldSBmcmFt
ZXNcbiIsIGFjdGxlbiwgYWZyYW1lcyk7CisKKwkJaWYgKGFjdGxlbiA9PSAwKSB7CisJCQlpZiAo
c2MtPnNjX3J4X25lcnIgPj0gNCkKKwkJCQkvKiB0aHJvdHRsZSB0cmFuc2ZlcnMgKi8KKwkJCQl1
c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDUwMCk7CisJCQllbHNlCisJCQkJc2MtPnNjX3J4
X25lcnIrKzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIGRpc2FibGUgdGhyb3R0bGluZyAqLworCQkJ
dXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsKKwkJCXNjLT5zY19yeF9uZXJyID0gMDsK
KwkJfQorCisJCWZvcihpID0gMDsgaSA8IGFmcmFtZXM7IGkrKykgeworCQkJdW1iX2RlY2FwKHNj
LCB4ZmVyLCBpKTsKKwkJfQorCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVVNCX1NUX1NF
VFVQOgorCQl1c2JkX3hmZXJfc2V0X2ZyYW1lX2RhdGEoeGZlciwgMCwgc2MtPnNjX3J4X2J1ZiwK
KwkJCQlzYy0+c2NfcnhfYnVmc3opOworCQl1c2JkX3hmZXJfc2V0X2ZyYW1lcyh4ZmVyLCAxKTsK
KwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisKKwkJdW1iX3J4Zmx1c2goc2MpOworCQli
cmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCJyeCBlcnJvcjogJXNcbiIsIHVzYmRfZXJyc3Ry
KHN0YXR1cykpOworCisJCS8qIGRpc2FibGUgdGhyb3R0bGluZyAqLworCQl1c2JkX3hmZXJfc2V0
X2ludGVydmFsKHhmZXIsIDApOworCisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9DQU5DRUxMRUQp
IHsKKwkJCS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJzdCAqLworCQkJdXNiZF94ZmVyX3NldF9z
dGFsbCh4ZmVyKTsKKwkJCXVzYmRfeGZlcl9zZXRfZnJhbWVzKHhmZXIsIDApOworCQkJdXNiZF90
cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9J
RVJST1JTLCAxKTsKKwkJfQorCQllbHNlIGlmICgrK3NjLT5zY19yeF9uZXJyID4gMTAwKSB7CisJ
CQlsb2coTE9HX0VSUiwgIiVzOiB0b28gbWFueSByeCBlcnJvcnMsIGRpc2FibGluZ1xuIiwKKwkJ
CSAgICBERVZOQU0oc2MpKTsKKwkJCXVtYl9kZWFjdGl2YXRlKHNjLT5zY19kZXYpOworCQl9CisJ
CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9yeGZsdXNoKHN0cnVjdCB1bWJfc29m
dGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJc3RydWN0IG1i
dWYgKm07CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWZvciAo
OzspIHsKKwkJX0lGX0RFUVVFVUUoJnNjLT5zY19yeF9xdWV1ZSwgbSk7CisJCWlmIChtID09IE5V
TEwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUgVVNCIHhmZXIgaGFzIGJlZW4gcmVzdWJt
aXR0ZWQgc28gaXRzIHNhZmUgdG8gdW5sb2NrIG5vdy4KKwkJICovCisJCW10eF91bmxvY2soJnNj
LT5zY19tdXRleCk7CisJCWlmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykK
KwkJCWlmcC0+aWZfaW5wdXQoaWZwLCBtKTsKKwkJZWxzZQorCQkJbV9mcmVlbShtKTsKKwkJbXR4
X2xvY2soJnNjLT5zY19tdXRleCk7CisJfQorfQorCitzdGF0aWMgaW50Cit1bWJfZW5jYXAoc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIp
Cit7CisJc3RydWN0IG5jbV9oZWFkZXIxNiAqaGRyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2ICpw
dHI7CisJaW50CSBsZW47CisKKwlLQVNTRVJUKHNjLT5zY190eF9tID09IE5VTEwsCisJCQkoIkFz
c2VydGlvbiBmYWlsZWQgaW4gdW1iX2VuY2FwKCkiKSk7CisKKwkvKiBBbGwgc2l6ZSBjb25zdHJh
aW50cyBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBjYWxsZXIhICovCisJaGRyID0gKHN0cnVj
dCBuY21faGVhZGVyMTYgKilzYy0+c2NfdHhfYnVmOworCXB0ciA9IChzdHJ1Y3QgbmNtX3BvaW50
ZXIxNiAqKShoZHIgKyAxKTsKKworCVVTRVREVyhoZHItPmR3U2lnbmF0dXJlLCBOQ01fSERSMTZf
U0lHKTsKKwlVU0VUVyhoZHItPndIZWFkZXJMZW5ndGgsIHNpemVvZiAoKmhkcikpOworCVVTRVRX
KGhkci0+d1NlcXVlbmNlLCBzYy0+c2NfdHhfc2VxKTsKKwlzYy0+c2NfdHhfc2VxKys7CisJVVNF
VFcoaGRyLT53TmRwSW5kZXgsIHNpemVvZiAoKmhkcikpOworCisJbGVuID0gbS0+bV9wa3RoZHIu
bGVuOworCVVTRVREVyhwdHItPmR3U2lnbmF0dXJlLCBNQklNX05DTV9OVEgxNl9TSUcodW1iX3Nl
c3Npb25faWQpKTsKKwlVU0VUVyhwdHItPndMZW5ndGgsIHNpemVvZiAoKnB0cikpOworCVVTRVRX
KHB0ci0+d05leHROZHBJbmRleCwgMCk7CisJVVNFVFcocHRyLT5kZ3JhbVswXS53RGF0YWdyYW1J
bmRleCwgTUJJTV9IRFIxNl9MRU4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMF0ud0RhdGFncmFtTGVu
LCBsZW4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtSW5kZXgsIDApOworCVVTRVRX
KHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtTGVuLCAwKTsKKworCUtBU1NFUlQobGVuICsgTUJJTV9I
RFIxNl9MRU4gPD0gc2MtPnNjX3R4X2J1ZnN6LAorCQkJKCJBc3NlcnRpb24gZmFpbGVkIGluIHVt
Yl9lbmNhcCgpIikpOworCW1fY29weWRhdGEobSwgMCwgbGVuLCAoY2hhciAqKShwdHIgKyAxKSk7
CisJc2MtPnNjX3R4X20gPSBtOworCWxlbiArPSBNQklNX0hEUjE2X0xFTjsKKwlVU0VUVyhoZHIt
PndCbG9ja0xlbmd0aCwgbGVuKTsKKworCXVzYmRfeGZlcl9zZXRfZnJhbWVfZGF0YSh4ZmVyLCAw
LCBzYy0+c2NfdHhfYnVmLCBsZW4pOworCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwoeGZlciwgMCk7
CisJdXNiZF94ZmVyX3NldF9mcmFtZXMoeGZlciwgMSk7CisKKwlEUFJJTlRGTigzLCAiJXM6IGVu
Y2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBsZW4pOworCUREVU1QTig1LCBzYy0+c2NfdHhf
YnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordW1iX3R4ZW9mKHN0cnVj
dCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29m
dGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VU
X0lGUChzYyk7CisJc3RydWN0IG1idWYgKm07CisKKwlEUFJJTlRGKCIlcygldSkgc3RhdGU9JXVc
biIsIF9fZnVuY19fLCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4X2Fzc2Vy
dCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlzd2l0Y2ggKFVTQl9HRVRfU1RBVEUoeGZl
cikpIHsKKwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoKKwkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0g
fklGRl9EUlZfT0FDVElWRTsKKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT1BBQ0tF
VFMsIDEpOworCisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlj
YXNlIFVTQl9TVF9TRVRVUDoKK3RyX3NldHVwOgorCQlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYg
SUZGX0RSVl9SVU5OSU5HKSA9PSAwKQorCQkJYnJlYWs7CisKKwkJSUZRX0RSVl9ERVFVRVVFKCZp
ZnAtPmlmX3NuZCwgbSk7CisJCWlmIChtID09IE5VTEwpCisJCQlicmVhazsKKworCQlpZiAodW1i
X2VuY2FwKHNjLCBtLCB4ZmVyKSkgeworCQkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJf
T0VSUk9SUywgMSk7CisJCQl1bWJfdHhmbHVzaChzYyk7CisJCQlicmVhazsKKwkJfQorCisJCUJQ
Rl9NVEFQKGlmcCwgbSk7CisKKwkJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZF
OworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6
CisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBjb3VudCBvdXRwdXQgZXJyb3JzICovCisJCWlm
X2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQlEUFJJTlRGKCJ0eCBl
cnJvcjogJXNcbiIsCisJCQkJdXNiZF9lcnJzdHIoc3RhdHVzKSk7CisKKwkJaWYgKHN0YXR1cyAh
PSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxsIGZpcnN0ICov
CisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJZ290byB0cl9zZXR1cDsKKwkJfQor
CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYykKK3sKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWlm
IChzYy0+c2NfdHhfbSAhPSBOVUxMKSB7CisJCW1fZnJlZW0oc2MtPnNjX3R4X20pOworCQlzYy0+
c2NfdHhfbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2RlY2FwKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIGludCBmcmFtZSkKK3sKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCWNo
YXIJKmRwOworCXN0cnVjdCBuY21faGVhZGVyMTYgKmhkcjE2OworCXN0cnVjdCBuY21faGVhZGVy
MzIgKmhkcjMyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2ICpwdHIxNjsKKwlzdHJ1Y3QgbmNtX3Bv
aW50ZXIxNl9kZ3JhbSAqZGdyYW0xNjsKKwlzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9kZ3JhbSAqZGdy
YW0zMjsKKwl1aW50MzJfdCBoc2lnLCBwc2lnOworCWludAkgaGxlbiwgYmxlbjsKKwlpbnQJIHB0
cmxlbiwgcHRyb2ZmLCBkZ2VudHJ5b2ZmOworCXVpbnQzMl90IGRvZmYsIGRsZW47CisJc3RydWN0
IG1idWYgKm07CisKKwl1c2JkX3hmZXJfZnJhbWVfZGF0YSh4ZmVyLCBmcmFtZSwgKHZvaWQgKiop
JmJ1ZiwgJmxlbik7CisJRFBSSU5URk4oNCwgInJlY3YgJWQgYnl0ZXNcbiIsIGxlbik7CisJRERV
TVBOKDUsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9mICgqaGRyMTYpKQorCQlnb3RvIHRv
b3NtYWxsOworCisJaGRyMTYgPSAoc3RydWN0IG5jbV9oZWFkZXIxNiAqKWJ1ZjsKKwloc2lnID0g
VUdFVERXKGhkcjE2LT5kd1NpZ25hdHVyZSk7CisJaGxlbiA9IFVHRVRXKGhkcjE2LT53SGVhZGVy
TGVuZ3RoKTsKKwlpZiAobGVuIDwgaGxlbikKKwkJZ290byB0b29zbWFsbDsKKwlpZiAobGVuID4g
c2MtPnNjX3J4X2J1ZnN6KSB7CisJCURQUklOVEYoInBhY2tldCB0b28gbGFyZ2UgKCVkKVxuIiwg
bGVuKTsKKwkJZ290byBmYWlsOworCX0KKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNlIE5DTV9IRFIx
Nl9TSUc6CisJCWJsZW4gPSBVR0VUVyhoZHIxNi0+d0Jsb2NrTGVuZ3RoKTsKKwkJcHRyb2ZmID0g
VUdFVFcoaGRyMTYtPndOZHBJbmRleCk7CisJCWlmIChobGVuICE9IHNpemVvZiAoKmhkcjE2KSkg
eworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVuICVkIGZvciBOVEgxNiAoZXhwICV6dSlc
biIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6ZW9mICgqaGRyMTYpKTsKKwkJCWdvdG8g
ZmFpbDsKKwkJfQorCQlicmVhazsKKwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWhkcjMyID0gKHN0
cnVjdCBuY21faGVhZGVyMzIgKiloZHIxNjsKKwkJYmxlbiA9IFVHRVREVyhoZHIzMi0+ZHdCbG9j
a0xlbmd0aCk7CisJCXB0cm9mZiA9IFVHRVREVyhoZHIzMi0+ZHdOZHBJbmRleCk7CisJCWlmICho
bGVuICE9IHNpemVvZiAoKmhkcjMyKSkgeworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVu
ICVkIGZvciBOVEgzMiAoZXhwICV6dSlcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6
ZW9mICgqaGRyMzIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0Ogor
CQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIGhlYWRlciBzaWduYXR1cmUgKDB4JTA4eClc
biIsCisJCSAgICBERVZOQU0oc2MpLCBoc2lnKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAobGVu
IDwgYmxlbikgeworCQlEUFJJTlRGKCIlczogYmFkIE5UQiBsZW4gKCVkKSBmb3IgJWQgYnl0ZXMg
b2YgZGF0YVxuIiwKKwkJICAgIERFVk5BTShzYyksIGJsZW4sIGxlbik7CisJCWdvdG8gZmFpbDsK
Kwl9CisKKwlwdHIxNiA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIxNiAqKShidWYgKyBwdHJvZmYpOwor
CXBzaWcgPSBVR0VURFcocHRyMTYtPmR3U2lnbmF0dXJlKTsKKwlwdHJsZW4gPSBVR0VUVyhwdHIx
Ni0+d0xlbmd0aCk7CisJaWYgKGxlbiA8IHB0cmxlbiArIHB0cm9mZikKKwkJZ290byB0b29zbWFs
bDsKKwlpZiAoIU1CSU1fTkNNX05USDE2X0lTSVNHKHBzaWcpICYmICFNQklNX05DTV9OVEgzMl9J
U0lTRyhwc2lnKSkgeworCQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIHBvaW50ZXIgc2ln
bmF0dXJlICgweCUwOHgpXG4iLAorCQkgICAgREVWTkFNKHNjKSwgcHNpZyk7CisJCWdvdG8gZmFp
bDsKKwl9CisKKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNlIE5DTV9IRFIxNl9TSUc6CisJCWRnZW50
cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNtX3BvaW50ZXIxNiwgZGdyYW0pOworCQlicmVhazsK
KwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWRnZW50cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNt
X3BvaW50ZXIzMiwgZGdyYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGZhaWw7CisJ
fQorCisJd2hpbGUgKGRnZW50cnlvZmYgPCBwdHJsZW4pIHsKKwkJc3dpdGNoIChoc2lnKSB7CisJ
CWNhc2UgTkNNX0hEUjE2X1NJRzoKKwkJCWlmIChwdHJvZmYgKyBkZ2VudHJ5b2ZmIDwgc2l6ZW9m
ICgqZGdyYW0xNikpCisJCQkJZ290byBkb25lOworCQkJZGdyYW0xNiA9IChzdHJ1Y3QgbmNtX3Bv
aW50ZXIxNl9kZ3JhbSAqKQorCQkJICAgIChidWYgKyBwdHJvZmYgKyBkZ2VudHJ5b2ZmKTsKKwkJ
CWRnZW50cnlvZmYgKz0gc2l6ZW9mICgqZGdyYW0xNik7CisJCQlkbGVuID0gVUdFVFcoZGdyYW0x
Ni0+d0RhdGFncmFtTGVuKTsKKwkJCWRvZmYgPSBVR0VUVyhkZ3JhbTE2LT53RGF0YWdyYW1JbmRl
eCk7CisJCQlicmVhazsKKwkJY2FzZSBOQ01fSERSMzJfU0lHOgorCQkJaWYgKHB0cm9mZiArIGRn
ZW50cnlvZmYgPCBzaXplb2YgKCpkZ3JhbTMyKSkKKwkJCQlnb3RvIGRvbmU7CisJCQlkZ3JhbTMy
ID0gKHN0cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtICopCisJCQkgICAgKGJ1ZiArIHB0cm9mZiAr
IGRnZW50cnlvZmYpOworCQkJZGdlbnRyeW9mZiArPSBzaXplb2YgKCpkZ3JhbTMyKTsKKwkJCWRs
ZW4gPSBVR0VURFcoZGdyYW0zMi0+ZHdEYXRhZ3JhbUxlbik7CisJCQlkb2ZmID0gVUdFVERXKGRn
cmFtMzItPmR3RGF0YWdyYW1JbmRleCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmX2lu
Y19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX0lFUlJPUlMsIDEpOworCQkJZ290byBkb25lOworCQl9
CisKKwkJLyogVGVybWluYXRpbmcgemVybyBlbnRyeSAqLworCQlpZiAoZGxlbiA9PSAwIHx8IGRv
ZmYgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgZGxlbiArIGRvZmYpIHsKKwkJCS8qIFNr
aXAgZ2lhbnQgZGF0YWdyYW0gYnV0IGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KKwkJCURQUklOVEYo
IiVzOiBkYXRhZ3JhbSB0b28gbGFyZ2UgKCVkIEAgb2ZmICVkKVxuIiwKKwkJCSAgICBERVZOQU0o
c2MpLCBkbGVuLCBkb2ZmKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHAgPSBidWYgKyBkb2Zm
OworCQlEUFJJTlRGTigzLCAiJXM6IGRlY2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBkbGVu
KTsKKwkJbSA9IG1fZGV2Z2V0KGRwLCBkbGVuLCAwLCBpZnAsIE5VTEwpOworCQlpZiAobSA9PSBO
VUxMKSB7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9JUURST1BTLCAxKTsKKwkJ
CWNvbnRpbnVlOworCQl9CisKKwkJLyogZW5xdWV1ZSBmb3IgbGF0ZXIgd2hlbiB0aGUgbG9jayBj
YW4gYmUgcmVsZWFzZWQgKi8KKwkJX0lGX0VOUVVFVUUoJnNjLT5zY19yeF9xdWV1ZSwgbSk7CisK
KwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSVBBQ0tFVFMsIDEpOworCisJfQorZG9u
ZToKKwlzYy0+c2NfcnhfbmVyciA9IDA7CisJcmV0dXJuOwordG9vc21hbGw6CisJRFBSSU5URigi
JXM6IHBhY2tldCB0b28gc21hbGwgKCVkKVxuIiwgREVWTkFNKHNjKSwgbGVuKTsKK2ZhaWw6CisJ
aWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVSUk9SUywgMSk7Cit9CisKK3N0YXRpYyB1
c2JfZXJyb3JfdAordW1iX3NlbmRfZW5jYXBfY29tbWFuZChzdHJ1Y3QgdW1iX3NvZnRjICpzYywg
dm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisKKwlp
ZiAobGVuID4gc2MtPnNjX2N0cmxfbGVuKQorCQlyZXR1cm4gVVNCX0VSUl9JTlZBTDsKKworCS8q
IFhYWCBGSVhNRTogaWYgKHRvdGFsIGxlbiA+IHNjLT5zY19jdHJsX2xlbikgPT4gbXVzdCBmcmFn
bWVudCAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRfV1JJVEVfQ0xBU1NfSU5URVJGQUNFOwor
CXJlcS5iUmVxdWVzdCA9IFVDRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDsKKwlVU0VUVyhy
ZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9pZmFjZW5vKTsK
KwlVU0VUVyhyZXEud0xlbmd0aCwgbGVuKTsKKwlERUxBWSh1bWJfZGVsYXkpOworCXJldHVybiB1
c2JkX2RvX3JlcXVlc3RfZmxhZ3Moc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgsICZyZXEsIGRh
dGEsIDAsCisJCQlOVUxMLCB1bWJfeGZlcl90b3V0KTsKK30KKworc3RhdGljIGludAordW1iX2dl
dF9lbmNhcF9yZXNwb25zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqYnVmLCBpbnQgKmxl
bikKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisJdXNiX2Vycm9yX3QgZXJyOworCXVp
bnQxNl90IGwgPSAqbGVuOworCisJcmVxLmJtUmVxdWVzdFR5cGUgPSBVVF9SRUFEX0NMQVNTX0lO
VEVSRkFDRTsKKwlyZXEuYlJlcXVlc3QgPSBVQ0RDX0dFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U7
CisJVVNFVFcocmVxLndWYWx1ZSwgMCk7CisJVVNFVFcocmVxLndJbmRleCwgc2MtPnNjX2N0cmxf
aWZhY2Vubyk7CisJVVNFVFcocmVxLndMZW5ndGgsIGwpOworCS8qIFhYWCBGSVhNRTogcmUtYXNz
ZW1ibGUgZnJhZ21lbnRzICovCisKKwlERUxBWSh1bWJfZGVsYXkpOworCWVyciA9IHVzYmRfZG9f
cmVxdWVzdF9mbGFncyhzYy0+c2NfdWRldiwgJnNjLT5zY19tdXRleCwgJnJlcSwgYnVmLAorCQkJ
VVNCX1NIT1JUX1hGRVJfT0ssICZsLCB1bWJfeGZlcl90b3V0KTsKKwlpZiAoZXJyID09IFVTQl9F
UlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJKmxlbiA9IGw7CisJCXJldHVybiAxOworCX0KKwlE
UFJJTlRGKCJjdHJsIHJlY3Y6ICVzXG4iLCB1c2JkX2VycnN0cihlcnIpKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIHZvaWQKK3VtYl9jdHJsX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdWlu
dDMyX3QgcmVxLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0g
R0VUX0lGUChzYyk7CisJdWludDMyX3QgdGlkOworCXN0cnVjdCBtYmltX21zZ2hkciAqaGRyID0g
ZGF0YTsKKwl1c2JfZXJyb3JfdCBlcnI7CisKKwlpZiAoc2MtPnNjX2R5aW5nKQorCQlyZXR1cm47
CisJaWYgKGxlbiA8IHNpemVvZiAoKmhkcikpCisJCXJldHVybjsKKwl0aWQgPSArK3NjLT5zY190
aWQ7CisKKwloZHItPnR5cGUgPSBodG9sZTMyKHJlcSk7CisJaGRyLT5sZW4gPSBodG9sZTMyKGxl
bik7CisJaGRyLT50aWQgPSBodG9sZTMyKHRpZCk7CisKKyNpZmRlZiBVTUJfREVCVUcKKwlpZiAo
dW1iX2RlYnVnKSB7CisJCWNvbnN0IGNoYXIgKm9wLCAqc3RyOworCQlpZiAocmVxID09IE1CSU1f
Q09NTUFORF9NU0cpIHsKKwkJCXN0cnVjdCBtYmltX2gyZl9jbWQgKmMgPSBkYXRhOworCQkJaWYg
KGxlMzJ0b2goYy0+b3ApID09IE1CSU1fQ01ET1BfU0VUKQorCQkJCW9wID0gInNldCI7CisJCQll
bHNlCisJCQkJb3AgPSAicXJ5IjsKKwkJCXN0ciA9IHVtYl9jaWQyc3RyKGxlMzJ0b2goYy0+Y2lk
KSk7CisJCX0gZWxzZSB7CisJCQlvcCA9ICJzbmQiOworCQkJc3RyID0gdW1iX3JlcXVlc3Qyc3Ry
KHJlcSk7CisJCX0KKwkJRFBSSU5URigiLT4gJXMgJXMgKHRpZCAldSlcbiIsIG9wLCBzdHIsIHRp
ZCk7CisJfQorI2VuZGlmCisJZXJyID0gdW1iX3NlbmRfZW5jYXBfY29tbWFuZChzYywgZGF0YSwg
bGVuKTsKKwlpZiAoZXJyICE9IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJaWYgKGlm
cC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9HX0VSUiwgIiVzOiBzZW5kICVzIG1z
ZyAodGlkICV1KSBmYWlsZWQ6ICVzXG4iLAorCQkJICAgIERFVk5BTShzYyksIHVtYl9yZXF1ZXN0
MnN0cihyZXEpLCB0aWQsCisJCQkgICAgdXNiZF9lcnJzdHIoZXJyKSk7CisKKwkJLyogd2lsbCBh
ZmZlY3Qgb3RoZXIgdHJhbnNhY3Rpb25zLCB0b28gKi8KKwkJdXNiZF90cmFuc2Zlcl9zdG9wKHNj
LT5zY194ZmVyW1VNQl9JTlRSX1JYXSk7CisJfSBlbHNlIHsKKwkJRFBSSU5URk4oMiwgInNlbnQg
JXMgKHRpZCAldSlcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIocmVxKSwgdGlkKTsKKwkJRERV
TVBOKDMsIGRhdGEsIGxlbik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9v
cGVuKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBtYmltX2gyZl9vcGVubXNnIG1z
ZzsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKG1zZykpOworCW1zZy5tYXhsZW4gPSBodG9s
ZTMyKHNjLT5zY19jdHJsX2xlbik7CisJdW1iX2N0cmxfbXNnKHNjLCBNQklNX09QRU5fTVNHLCAm
bXNnLCBzaXplb2YgKG1zZykpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbG9z
ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9oMmZfY2xvc2Vtc2cgbXNn
OworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAobXNnKSk7CisJdW1iX2N0cmxfbXNnKHNjLCBN
QklNX0NMT1NFX01TRywgJm1zZywgc2l6ZW9mIChtc2cpKTsKK30KKworc3RhdGljIGludAordW1i
X3NldHBpbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IG9wLCBpbnQgaXNfcHVrLCB2b2lkICpw
aW4sIGludCBwaW5sZW4sCisgICAgdm9pZCAqbmV3cGluLCBpbnQgbmV3cGlubGVuKQoreworCXN0
cnVjdCBtYmltX2NpZF9waW4gY3A7CisJaW50CSBvZmY7CisKKwlpZiAocGlubGVuID09IDApCisJ
CXJldHVybiAwOworCWlmIChwaW5sZW4gPCAwIHx8IHBpbmxlbiA+IE1CSU1fUElOX01BWExFTiB8
fAorCSAgICBuZXdwaW5sZW4gPCAwIHx8IG5ld3BpbmxlbiA+IE1CSU1fUElOX01BWExFTiB8fAor
CSAgICBvcCA8IDAgfHwgb3AgPiBNQklNX1BJTl9PUF9DSEFOR0UgfHwKKwkgICAgKGlzX3B1ayAm
JiBvcCAhPSBNQklNX1BJTl9PUF9FTlRFUikpCisJCXJldHVybiBFSU5WQUw7CisKKwltZW1zZXQo
JmNwLCAwLCBzaXplb2YgKGNwKSk7CisJY3AudHlwZSA9IGh0b2xlMzIoaXNfcHVrID8gTUJJTV9Q
SU5fVFlQRV9QVUsxIDogTUJJTV9QSU5fVFlQRV9QSU4xKTsKKworCW9mZiA9IG9mZnNldG9mKHN0
cnVjdCBtYmltX2NpZF9waW4sIGRhdGEpOworCWlmICghdW1iX2FkZHN0cigmY3AsIHNpemVvZiAo
Y3ApLCAmb2ZmLCBwaW4sIHBpbmxlbiwKKwkgICAgJmNwLnBpbl9vZmZzLCAmY3AucGluX3NpemUp
KQorCQlyZXR1cm4gRUlOVkFMOworCisJY3Aub3AgID0gaHRvbGUzMihvcCk7CisJaWYgKG5ld3Bp
bmxlbikgeworCQlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9mZiwgbmV3cGlu
LCBuZXdwaW5sZW4sCisJCSAgICAmY3AubmV3cGluX29mZnMsICZjcC5uZXdwaW5fc2l6ZSkpCisJ
CQlyZXR1cm4gRUlOVkFMOworCX0gZWxzZSB7CisJCWlmICgob3AgPT0gTUJJTV9QSU5fT1BfQ0hB
TkdFKSB8fCBpc19wdWspCisJCQlyZXR1cm4gRUlOVkFMOworCQlpZiAoIXVtYl9hZGRzdHIoJmNw
LCBzaXplb2YgKGNwKSwgJm9mZiwgTlVMTCwgMCwKKwkJICAgICZjcC5uZXdwaW5fb2ZmcywgJmNw
Lm5ld3Bpbl9zaXplKSkKKwkJCXJldHVybiBFSU5WQUw7CisJfQorCW10eF9sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1BJTiwgTUJJTV9DTURPUF9TRVQsICZjcCwg
b2ZmKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZAordW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1
Y3QgbWJpbV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlIHJzOworCXVpbnQzMl90CSBjbGFzc2VzOwor
CisJaWYgKHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMgPT0gTUJJTV9EQVRBQ0xBU1NfTk9O
RSkKKwkJcmV0dXJuOworCisJbWVtc2V0KCZycywgMCwgc2l6ZW9mIChycykpOworCXJzLnJlZ2Fj
dGlvbiA9IGh0b2xlMzIoTUJJTV9SRUdBQ1RJT05fQVVUT01BVElDKTsKKwljbGFzc2VzID0gc2Mt
PnNjX2luZm8uc3VwcG9ydGVkY2xhc3NlczsKKwlpZiAoc2MtPnNjX2luZm8ucHJlZmVycmVkY2xh
c3NlcyAhPSBNQklNX0RBVEFDTEFTU19OT05FKQorCQljbGFzc2VzICY9IHNjLT5zY19pbmZvLnBy
ZWZlcnJlZGNsYXNzZXM7CisJcnMuZGF0YV9jbGFzcyA9IGh0b2xlMzIoY2xhc3Nlcyk7CisJbXR4
X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2NtZChzYywgTUJJTV9DSURfUkVHSVNURVJfU1RB
VEUsIE1CSU1fQ01ET1BfU0VULCAmcnMsIHNpemVvZiAocnMpKTsKKwltdHhfdW5sb2NrKCZzYy0+
c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3JhZGlvKHN0cnVjdCB1bWJfc29mdGMg
KnNjLCBpbnQgb24pCit7CisJc3RydWN0IG1iaW1fY2lkX3JhZGlvX3N0YXRlIHM7CisKKwlEUFJJ
TlRGKCJzZXQgcmFkaW8gJXNcbiIsIG9uID8gIm9uIiA6ICJvZmYiKTsKKwltZW1zZXQoJnMsIDAs
IHNpemVvZiAocykpOworCXMuc3RhdGUgPSBodG9sZTMyKG9uID8gTUJJTV9SQURJT19TVEFURV9P
TiA6IE1CSU1fUkFESU9fU1RBVEVfT0ZGKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9SQURJT19T
VEFURSwgTUJJTV9DTURPUF9TRVQsICZzLCBzaXplb2YgKHMpKTsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9hbGxvY2F0ZV9jaWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJdW1iX2NtZDEoc2Ms
IE1CSU1fQ0lEX0RFVklDRV9DQVBTLCBNQklNX0NNRE9QX1NFVCwKKwkgICAgdW1iX3FtaV9hbGxv
Y19jaWQsIHNpemVvZiAodW1iX3FtaV9hbGxvY19jaWQpLCB1bWJfdXVpZF9xbWlfbWJpbSk7Cit9
CisKK3N0YXRpYyB2b2lkCit1bWJfc2VuZF9mY2NfYXV0aChzdHJ1Y3QgdW1iX3NvZnRjICpzYykK
K3sKKwl1aW50OF90CSBmY2NhdXRoW3NpemVvZiAodW1iX3FtaV9mY2NfYXV0aCldOworCisJaWYg
KHNjLT5zY19jaWQgPT0gLTEpIHsKKwkJRFBSSU5URigibWlzc2luZyBDSUQsIGNhbm5vdCBzZW5k
IEZDQyBhdXRoXG4iKTsKKwkJdW1iX2FsbG9jYXRlX2NpZChzYyk7CisJCXJldHVybjsKKwl9CisJ
bWVtY3B5KGZjY2F1dGgsIHVtYl9xbWlfZmNjX2F1dGgsIHNpemVvZiAoZmNjYXV0aCkpOworCWZj
Y2F1dGhbVU1CX1FNSV9DSURfT0ZGU10gPSBzYy0+c2NfY2lkOworCXVtYl9jbWQxKHNjLCBNQklN
X0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9TRVQsCisJICAgIGZjY2F1dGgsIHNpemVvZiAo
ZmNjYXV0aCksIHVtYl91dWlkX3FtaV9tYmltKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9wYWNr
ZXRfc2VydmljZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGF0dGFjaCkKK3sKKwlzdHJ1Y3Qg
bWJpbV9jaWRfcGFja2V0X3NlcnZpY2UJczsKKworCURQUklOVEYoIiVzIHBhY2tldCBzZXJ2aWNl
XG4iLAorCSAgICBhdHRhY2ggPyAiYXR0YWNoIiA6ICJkZXRhY2giKTsKKwltZW1zZXQoJnMsIDAs
IHNpemVvZiAocykpOworCXMuYWN0aW9uID0gaHRvbGUzMihhdHRhY2ggPworCSAgICBNQklNX1BL
VFNFUlZJQ0VfQUNUSU9OX0FUVEFDSCA6IE1CSU1fUEtUU0VSVklDRV9BQ1RJT05fREVUQUNIKTsK
Kwl1bWJfY21kKHNjLCBNQklNX0NJRF9QQUNLRVRfU0VSVklDRSwgTUJJTV9DTURPUF9TRVQsICZz
LCBzaXplb2YgKHMpKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jb25uZWN0KHN0cnVjdCB1bWJf
c29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZiAo
c2MtPnNjX2luZm8ucmVnc3RhdGUgPT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HICYmICFzYy0+c2Nf
cm9hbWluZykgeworCQlsb2coTE9HX0lORk8sICIlczogY29ubmVjdGlvbiBkaXNhYmxlZCBpbiBy
b2FtaW5nIG5ldHdvcmtcbiIsCisJCSAgICBERVZOQU0oc2MpKTsKKwkJcmV0dXJuOworCX0KKwlp
ZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19ERUJVRywgIiVzOiBjb25u
ZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJdW1iX3NlbmRfY29ubmVjdChzYywgTUJJTV9D
T05ORUNUX0FDVElWQVRFKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kaXNjb25uZWN0KHN0cnVj
dCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisK
KwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19ERUJVRywgIiVzOiBk
aXNjb25uZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJdW1iX3NlbmRfY29ubmVjdChzYywg
TUJJTV9DT05ORUNUX0RFQUNUSVZBVEUpOworfQorCitzdGF0aWMgdm9pZAordW1iX3NlbmRfY29u
bmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGNvbW1hbmQpCit7CisJc3RydWN0IG1iaW1f
Y2lkX2Nvbm5lY3QgKmM7CisJaW50CSBvZmY7CisKKwkvKiBUb28gbGFyZ2UgZm9yIHRoZSBzdGFj
ayAqLworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJYyA9IG1hbGxvYyhzaXplb2YgKCpj
KSwgTV9NQklNX0NJRF9DT05ORUNULCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJbXR4X2xvY2soJnNj
LT5zY19tdXRleCk7CisJYy0+c2Vzc2lvbmlkID0gaHRvbGUzMih1bWJfc2Vzc2lvbl9pZCk7CisJ
Yy0+Y29tbWFuZCA9IGh0b2xlMzIoY29tbWFuZCk7CisJb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IG1i
aW1fY2lkX2Nvbm5lY3QsIGRhdGEpOworCWlmICghdW1iX2FkZHN0cihjLCBzaXplb2YgKCpjKSwg
Jm9mZiwgc2MtPnNjX2luZm8uYXBuLAorCSAgICBzYy0+c2NfaW5mby5hcG5sZW4sICZjLT5hY2Nl
c3Nfb2ZmcywgJmMtPmFjY2Vzc19zaXplKSkKKwkJZ290byBkb25lOworCWlmICghdW1iX2FkZHN0
cihjLCBzaXplb2YgKCpjKSwgJm9mZiwgc2MtPnNjX2luZm8udXNlcm5hbWUsCisJICAgIHNjLT5z
Y19pbmZvLnVzZXJuYW1lbGVuLCAmYy0+dXNlcl9vZmZzLCAmYy0+dXNlcl9zaXplKSkKKwkJZ290
byBkb25lOworCWlmICghdW1iX2FkZHN0cihjLCBzaXplb2YgKCpjKSwgJm9mZiwgc2MtPnNjX2lu
Zm8ucGFzc3dvcmQsCisJICAgIHNjLT5zY19pbmZvLnBhc3N3b3JkbGVuLCAmYy0+cGFzc3dkX29m
ZnMsICZjLT5wYXNzd2Rfc2l6ZSkpCisJCWdvdG8gZG9uZTsKKwljLT5hdXRocHJvdCA9IGh0b2xl
MzIoTUJJTV9BVVRIUFJPVF9OT05FKTsKKwljLT5jb21wcmVzc2lvbiA9IGh0b2xlMzIoTUJJTV9D
T01QUkVTU0lPTl9OT05FKTsKKwljLT5pcHR5cGUgPSBodG9sZTMyKE1CSU1fQ09OVEVYVF9JUFRZ
UEVfSVBWNCk7CisJbWVtY3B5KGMtPmNvbnRleHQsIHVtYl91dWlkX2NvbnRleHRfaW50ZXJuZXQs
IHNpemVvZiAoYy0+Y29udGV4dCkpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX0NPTk5FQ1QsIE1C
SU1fQ01ET1BfU0VULCBjLCBvZmYpOworZG9uZToKKwlmcmVlKGMsIE1fTUJJTV9DSURfQ09OTkVD
VCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1iX3FyeV9pcGNvbmZpZyhzdHJ1Y3Qg
dW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJhdGlvbl9pbmZv
IGlwYzsKKworCW1lbXNldCgmaXBjLCAwLCBzaXplb2YgKGlwYykpOworCWlwYy5zZXNzaW9uaWQg
PSBodG9sZTMyKHVtYl9zZXNzaW9uX2lkKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9JUF9DT05G
SUdVUkFUSU9OLCBNQklNX0NNRE9QX1FSWSwKKwkgICAgJmlwYywgc2l6ZW9mIChpcGMpKTsKK30K
Kworc3RhdGljIHZvaWQKK3VtYl9jbWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBjaWQsIGlu
dCBvcCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1bWJfY21kMShzYywgY2lkLCBv
cCwgZGF0YSwgbGVuLCB1bWJfdXVpZF9iYXNpY19jb25uZWN0KTsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9jbWQxKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgY2lkLCBpbnQgb3AsIGNvbnN0IHZv
aWQgKmRhdGEsIGludCBsZW4sCisgICAgdWludDhfdCAqdXVpZCkKK3sKKwlzdHJ1Y3QgbWJpbV9o
MmZfY21kICpjbWQ7CisJaW50CXRvdGxlbjsKKworCS8qIFhYWCBGSVhNRSBzdXBwb3J0IHNlbmRp
bmcgZnJhZ21lbnRzICovCisJaWYgKHNpemVvZiAoKmNtZCkgKyBsZW4gPiBzYy0+c2NfY3RybF9s
ZW4pIHsKKwkJRFBSSU5URigic2V0ICVzIG1zZyB0b28gbG9uZzogY2Fubm90IHNlbmRcbiIsCisJ
CSAgICB1bWJfY2lkMnN0cihjaWQpKTsKKwkJcmV0dXJuOworCX0KKwljbWQgPSBzYy0+c2NfY3Ry
bF9tc2c7CisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mICgqY21kKSk7CisJY21kLT5mcmFnLm5mcmFn
ID0gaHRvbGUzMigxKTsKKwltZW1jcHkoY21kLT5kZXZpZCwgdXVpZCwgc2l6ZW9mIChjbWQtPmRl
dmlkKSk7CisJY21kLT5jaWQgPSBodG9sZTMyKGNpZCk7CisJY21kLT5vcCA9IGh0b2xlMzIob3Ap
OworCWNtZC0+aW5mb2xlbiA9IGh0b2xlMzIobGVuKTsKKwl0b3RsZW4gPSBzaXplb2YgKCpjbWQp
OworCWlmIChsZW4gPiAwKSB7CisJCW1lbWNweShjbWQgKyAxLCBkYXRhLCBsZW4pOworCQl0b3Rs
ZW4gKz0gbGVuOworCX0KKwl1bWJfY3RybF9tc2coc2MsIE1CSU1fQ09NTUFORF9NU0csIGNtZCwg
dG90bGVuKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jb21tYW5kX2RvbmUoc3RydWN0IHVtYl9z
b2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fZjJoX2NtZGRv
bmUgKmNtZCA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwl1aW50
MzJfdCBzdGF0dXM7CisJdWludDMyX3QgY2lkOworCXVpbnQzMl90IGluZm9sZW47CisJaW50CSBx
bWltc2cgPSAwOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNtZCkpIHsKKwkJRFBSSU5URigiZGlz
Y2FyZCBzaG9ydCAlcyBtZXNzYWdlXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3RyKGxlMzJ0b2go
Y21kLT5oZHIudHlwZSkpKTsKKwkJcmV0dXJuOworCX0KKwljaWQgPSBsZTMydG9oKGNtZC0+Y2lk
KTsKKwlpZiAobWVtY21wKGNtZC0+ZGV2aWQsIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3QsIHNpemVv
ZiAoY21kLT5kZXZpZCkpKSB7CisJCWlmIChtZW1jbXAoY21kLT5kZXZpZCwgdW1iX3V1aWRfcW1p
X21iaW0sCisJCSAgICBzaXplb2YgKGNtZC0+ZGV2aWQpKSkgeworCQkJRFBSSU5URigiZGlzY2Fy
ZCAlcyBtZXNzYWdlIGZvciBvdGhlciBVVUlEICclcydcbiIsCisJCQkgICAgdW1iX3JlcXVlc3Qy
c3RyKGxlMzJ0b2goY21kLT5oZHIudHlwZSkpLAorCQkJICAgIHVtYl91dWlkMnN0cihjbWQtPmRl
dmlkKSk7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJcW1pbXNnID0gMTsKKwl9CisKKwlzdGF0
dXMgPSBsZTMydG9oKGNtZC0+c3RhdHVzKTsKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgTUJJ
TV9TVEFUVVNfU1VDQ0VTUzoKKwkJYnJlYWs7CisJY2FzZSBNQklNX1NUQVRVU19OT1RfSU5JVElB
TElaRUQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19FUlIs
ICIlczogU0lNIG5vdCBpbml0aWFsaXplZCAoUElOIG1pc3NpbmcpXG4iLAorCQkJICAgIERFVk5B
TShzYykpOworCQlyZXR1cm47CisJY2FzZSBNQklNX1NUQVRVU19QSU5fUkVRVUlSRUQ6CisJCXNj
LT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5fUkVRVUlSRUQ7CisJCS8qRkFMTFRIUk9VR0gq
LworCWRlZmF1bHQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExP
R19FUlIsICIlczogc2V0L3FyeSAlcyBmYWlsZWQ6ICVzXG4iLCBERVZOQU0oc2MpLAorCQkJICAg
IHVtYl9jaWQyc3RyKGNpZCksIHVtYl9zdGF0dXMyc3RyKHN0YXR1cykpOworCQlyZXR1cm47CisJ
fQorCisJaW5mb2xlbiA9IGxlMzJ0b2goY21kLT5pbmZvbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9m
ICgqY21kKSArIGluZm9sZW4pIHsKKwkJRFBSSU5URigiZGlzY2FyZCB0cnVuY2F0ZWQgJXMgbWVz
c2FnZSAod2FudCAlZCwgZ290ICVkKVxuIiwKKwkJICAgIHVtYl9jaWQyc3RyKGNpZCksCisJCSAg
ICAoaW50KXNpemVvZiAoKmNtZCkgKyBpbmZvbGVuLCBsZW4pOworCQlyZXR1cm47CisJfQorCWlm
IChxbWltc2cpIHsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFVNQkZMR19GQ0NfQVVUSF9SRVFVSVJF
RCkKKwkJCXVtYl9kZWNvZGVfcW1pKHNjLCBjbWQtPmluZm8sIGluZm9sZW4pOworCX0gZWxzZSB7
CisJCURQUklOVEZOKDIsICJzZXQvcXJ5ICVzIGRvbmVcbiIsCisJCSAgICB1bWJfY2lkMnN0cihj
aWQpKTsKKwkJdW1iX2RlY29kZV9jaWQoc2MsIGNpZCwgY21kLT5pbmZvLCBpbmZvbGVuKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICpzYywg
dWludDMyX3QgY2lkLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCWludAkgb2sgPSAxOworCisJ
c3dpdGNoIChjaWQpIHsKKwljYXNlIE1CSU1fQ0lEX0RFVklDRV9DQVBTOgorCQlvayA9IHVtYl9k
ZWNvZGVfZGV2aWNlc19jYXBzKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1f
Q0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTOgorCQlvayA9IHVtYl9kZWNvZGVfc3Vic2NyaWJl
cl9zdGF0dXMoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUkFESU9f
U1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9yYWRpb19zdGF0ZShzYywgZGF0YSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NJRF9QSU46CisJCW9rID0gdW1iX2RlY29kZV9waW4oc2MsIGRh
dGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUkVHSVNURVJfU1RBVEU6CisJCW9r
ID0gdW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJ
Y2FzZSBNQklNX0NJRF9QQUNLRVRfU0VSVklDRToKKwkJb2sgPSB1bWJfZGVjb2RlX3BhY2tldF9z
ZXJ2aWNlKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX1NJR05BTF9T
VEFURToKKwkJb2sgPSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzYywgZGF0YSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NJRF9DT05ORUNUOgorCQlvayA9IHVtYl9kZWNvZGVfY29ubmVj
dF9pbmZvKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX0lQX0NPTkZJ
R1VSQVRJT046CisJCW9rID0gdW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHNjLCBkYXRhLCBs
ZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBOb3RlOiB0aGUgYWJvdmUgbGlz
dCBpcyBpbmNvbXBsZXRlIGFuZCBvbmx5IGNvbnRhaW5zCisJCSAqCW1hbmRhdG9yeSBDSURzIGZy
b20gdGhlIEJBU0lDX0NPTk5FQ1Qgc2V0LgorCQkgKglTbyBhbHRlcm5hdGUgdmFsdWVzIGFyZSBu
b3QgdW51c3VhbC4KKwkJICovCisJCURQUklOVEZOKDQsICJpZ25vcmUgJXNcbiIsIHVtYl9jaWQy
c3RyKGNpZCkpOworCQlicmVhazsKKwl9CisJaWYgKCFvaykKKwkJRFBSSU5URigiZGlzY2FyZCAl
cyB3aXRoIGJhZCBpbmZvIGxlbmd0aCAlZFxuIiwKKwkJICAgIHVtYl9jaWQyc3RyKGNpZCksIGxl
bik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1iX2RlY29kZV9xbWkoc3RydWN0IHVt
Yl9zb2Z0YyAqc2MsIHVpbnQ4X3QgKmRhdGEsIGludCBsZW4pCit7CisJdWludDhfdAlzcnY7CisJ
dWludDE2X3QgbXNnLCB0bHZsZW47CisJdWludDMyX3QgdmFsOworCisjZGVmaW5lIFVNQl9RTUlf
UU1VWExFTgkJNgorCWlmIChsZW4gPCBVTUJfUU1JX1FNVVhMRU4pCisJCWdvdG8gdG9vc2hvcnQ7
CisKKwlzcnYgPSBkYXRhWzRdOworCWRhdGEgKz0gVU1CX1FNSV9RTVVYTEVOOworCWxlbiAtPSBV
TUJfUU1JX1FNVVhMRU47CisKKyNkZWZpbmUgVU1CX0dFVDE2KHApCSgodWludDE2X3QpKnAgfCAo
dWludDE2X3QpKihwICsgMSkgPDwgOCkKKyNkZWZpbmUgVU1CX0dFVDMyKHApCSgodWludDMyX3Qp
KnAgfCAodWludDMyX3QpKihwICsgMSkgPDwgOCB8IFwKKwkJCSAgICAodWludDMyX3QpKihwICsg
MikgPDwgMTYgfCh1aW50MzJfdCkqKHAgKyAzKSA8PCAyNCkKKwlzd2l0Y2ggKHNydikgeworCWNh
c2UgMDoJLyogY3RsICovCisjZGVmaW5lIFVNQl9RTUlfQ1RMTEVOCQk2CisJCWlmIChsZW4gPCBV
TUJfUU1JX0NUTExFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCW1zZyA9IFVNQl9HRVQxNigmZGF0
YVsyXSk7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs0XSk7CisJCWRhdGEgKz0gVU1CX1FN
SV9DVExMRU47CisJCWxlbiAtPSBVTUJfUU1JX0NUTExFTjsKKwkJYnJlYWs7CisJY2FzZSAyOgkv
KiBkbXMgICovCisjZGVmaW5lIFVNQl9RTUlfRE1TTEVOCQk3CisJCWlmIChsZW4gPCBVTUJfUU1J
X0RNU0xFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCW1zZyA9IFVNQl9HRVQxNigmZGF0YVszXSk7
CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs1XSk7CisJCWRhdGEgKz0gVU1CX1FNSV9ETVNM
RU47CisJCWxlbiAtPSBVTUJfUU1JX0RNU0xFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBS
SU5URigiZGlzY2FyZCBRTUkgbWVzc2FnZSBmb3IgdW5rbm93biBzZXJ2aWNlIHR5cGUgJWRcbiIs
CisJCSAgICBzcnYpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8IHRsdmxlbikKKwkJZ290
byB0b29zaG9ydDsKKworI2RlZmluZSBVTUJfUU1JX1RMVkxFTgkJMworCXdoaWxlIChsZW4gPiAw
KSB7CisJCWlmIChsZW4gPCBVTUJfUU1JX1RMVkxFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCXRs
dmxlbiA9IFVNQl9HRVQxNigmZGF0YVsxXSk7CisJCWlmIChsZW4gPCBVTUJfUU1JX1RMVkxFTiAr
IHRsdmxlbikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCXN3aXRjaCAoZGF0YVswXSkgeworCQljYXNl
IDE6CS8qIGFsbG9jYXRpb24gaW5mbyAqLworCQkJaWYgKG1zZyA9PSAweDAwMjIpIHsJLyogQWxs
b2NhdGUgQ0lEICovCisJCQkJaWYgKHRsdmxlbiAhPSAyIHx8IGRhdGFbM10gIT0gMikgLyogZG1z
ICovCisJCQkJCWJyZWFrOworCQkJCXNjLT5zY19jaWQgPSBkYXRhWzRdOworCQkJCURQUklOVEYo
IlFNSSBDSUQgJWQgYWxsb2NhdGVkXG4iLAorCQkJCSAgICBzYy0+c2NfY2lkKTsKKwkJCQl1bWJf
bmV3c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05TX0RPTlRfRFJPUCk7CisJCQl9CisJCQlicmVh
azsKKwkJY2FzZSAyOgkvKiByZXNwb25zZSAqLworCQkJaWYgKHRsdmxlbiAhPSBzaXplb2YgKHZh
bCkpCisJCQkJYnJlYWs7CisJCQl2YWwgPSBVTUJfR0VUMzIoJmRhdGFbM10pOworCQkJc3dpdGNo
IChtc2cpIHsKKwkJCWNhc2UgMHgwMDIyOgkvKiBBbGxvY2F0ZSBDSUQgKi8KKwkJCQlpZiAodmFs
ICE9IDApIHsKKwkJCQkJbG9nKExPR19FUlIsICIlczogYWxsb2NhdGlvbiBvZiBRTUkgQ0lEIgor
CQkJCQkgICAgIiBmYWlsZWQsIGVycm9yIDB4JXhcbiIsIERFVk5BTShzYyksCisJCQkJCSAgICB2
YWwpOworCQkJCQkvKiBYWFggaG93IHRvIHByb2NlZWQ/ICovCisJCQkJCXJldHVybjsKKwkJCQl9
CisJCQkJYnJlYWs7CisJCQljYXNlIDB4NTU1ZjoJLyogU2VuZCBGQ0MgQXV0aGVudGljYXRpb24g
Ki8KKwkJCQlpZiAodmFsID09IDApCisJCQkJCURQUklOVEYoIiVzOiBzZW5kIEZDQyAiCisJCQkJ
CSAgICAiQXV0aGVudGljYXRpb24gc3VjY2VlZGVkXG4iLAorCQkJCQkgICAgREVWTkFNKHNjKSk7
CisJCQkJZWxzZSBpZiAodmFsID09IDB4MDAxYTAwMDEpCisJCQkJCURQUklOVEYoIiVzOiBGQ0Mg
QXV0aGVudGljYXRpb24gIgorCQkJCQkgICAgIm5vdCByZXF1aXJlZFxuIiwgREVWTkFNKHNjKSk7
CisJCQkJZWxzZQorCQkJCQlsb2coTE9HX0lORk8sICIlczogc2VuZCBGQ0MgIgorCQkJCQkgICAg
IkF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgIgorCQkJCQkgICAgImVycm9yIDB4JXhcbiIsIERFVk5B
TShzYyksIHZhbCk7CisKKwkJCQkvKiBGQ0MgQXV0aCBpcyBuZWVkZWQgb25seSBvbmNlIGFmdGVy
IHBvd2VyLW9uKi8KKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflVNQkZMR19GQ0NfQVVUSF9SRVFVSVJF
RDsKKworCQkJCS8qIFRyeSB0byBwcm9jZWVkIGFueXdheSAqLworCQkJCURQUklOVEYoImluaXQ6
IHR1cm5pbmcgcmFkaW8gb24gLi4uXG4iKTsKKwkJCQl1bWJfcmFkaW8oc2MsIDEpOworCQkJCWJy
ZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKwkJZGF0YSArPSBVTUJfUU1JX1RMVkxFTiArIHRsdmxlbjsKKwkJ
bGVuIC09IFVNQl9RTUlfVExWTEVOICsgdGx2bGVuOworCX0KKwlyZXR1cm47CisKK3Rvb3Nob3J0
OgorCURQUklOVEYoImRpc2NhcmQgc2hvcnQgUU1JIG1lc3NhZ2VcbiIpOworCXJldHVybjsKK30K
Kworc3RhdGljIHZvaWQKK3VtYl9pbnRyKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9y
X3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhm
ZXIpOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CisJc3RydWN0
IHVzYl9wYWdlX2NhY2hlICpwYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOwor
CWludAkgdG90YWxfbGVuOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7
CisKKwkvKiBGSVhNRSB1c2UgYWN0bGVuIG9yIHRvdGFsX2xlbj8gKi8KKwl1c2JkX3hmZXJfc3Rh
dHVzKHhmZXIsICZ0b3RhbF9sZW4sIE5VTEwsIE5VTEwsIE5VTEwpOworCisJc3dpdGNoIChVU0Jf
R0VUX1NUQVRFKHhmZXIpKSB7CisJY2FzZSBVU0JfU1RfVFJBTlNGRVJSRUQ6CisJCURQUklOVEYo
IlJlY2VpdmVkICVkIGJ5dGVzXG4iLCB0b3RhbF9sZW4pOworCisJCWlmICh0b3RhbF9sZW4gPCBV
Q0RDX05PVElGSUNBVElPTl9MRU5HVEgpIHsKKwkJCURQUklOVEYoInNob3J0IG5vdGlmaWNhdGlv
biAoJWQ8JWQpXG4iLAorCQkJCQl0b3RhbF9sZW4sIFVDRENfTk9USUZJQ0FUSU9OX0xFTkdUSCk7
CisJCQlyZXR1cm47CisJCX0KKworCQlwYyA9IHVzYmRfeGZlcl9nZXRfZnJhbWUoeGZlciwgMCk7
CisJCXVzYmRfY29weV9vdXQocGMsIDAsICZub3RpZmljYXRpb24sIHNpemVvZiAobm90aWZpY2F0
aW9uKSk7CisKKwkJaWYgKG5vdGlmaWNhdGlvbi5ibVJlcXVlc3RUeXBlICE9IFVDRENfTk9USUZJ
Q0FUSU9OKSB7CisJCQlEUFJJTlRGKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiAodHlwZT0weCUw
MngpXG4iLAorCQkJCQlub3RpZmljYXRpb24uYm1SZXF1ZXN0VHlwZSk7CisJCQlyZXR1cm47CisJ
CX0KKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5iTm90aWZpY2F0aW9uKSB7CisJCWNhc2UgVUNE
Q19OX05FVFdPUktfQ09OTkVDVElPTjoKKwkJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVH
KQorCQkJCWxvZyhMT0dfREVCVUcsICIlczogbmV0d29yayAlc2Nvbm5lY3RlZFxuIiwKKwkJCQkJ
CURFVk5BTShzYyksCisJCQkJCQlVR0VUVyhub3RpZmljYXRpb24ud1ZhbHVlKQorCQkJCQkJPyAi
IiA6ICJkaXMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVDRENfTl9SRVNQT05TRV9BVkFJTEFCTEU6
CisJCQlEUFJJTlRGTigyLCAidW1iX2ludHI6IHJlc3BvbnNlIGF2YWlsYWJsZVxuIik7CisJCQkr
K3NjLT5zY19ucmVzcDsKKwkJCXVtYl9hZGRfdGFzayhzYywgdW1iX2dldF9yZXNwb25zZV90YXNr
LAorCQkJCQkmc2MtPnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMF0uaGRyLAorCQkJCQkmc2Mt
PnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMV0uaGRyLAorCQkJCQkwKTsKKwkJCWJyZWFrOwor
CQljYXNlIFVDRENfTl9DT05ORUNUSU9OX1NQRUVEX0NIQU5HRToKKwkJCURQUklOVEZOKDIsICJ1
bWJfaW50cjogY29ubmVjdGlvbiBzcGVlZCBjaGFuZ2VkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZh
dWx0OgorCQkJRFBSSU5URigidW5leHBlY3RlZCBub3RpZmljYXRpb24gKDB4JTAyeClcbiIsCisJ
CQkJCW5vdGlmaWNhdGlvbi5iTm90aWZpY2F0aW9uKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZh
bGx0aHJvdWdoICovCisJY2FzZSBVU0JfU1RfU0VUVVA6Cit0cl9zZXR1cDoKKwkJdXNiZF94ZmVy
X3NldF9mcmFtZV9sZW4oeGZlciwgMCwgdXNiZF94ZmVyX21heF9sZW4oeGZlcikpOworCQl1c2Jk
X3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHN0YXR1
cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogc3RhcnQgY2xlYXIgc3RhbGwgKi8KKwkJ
CXVzYmRfeGZlcl9zZXRfc3RhbGwoeGZlcik7CisJCQlnb3RvIHRyX3NldHVwOworCQl9CisJCWJy
ZWFrOworCX0KK30KKworLyoKKyAqIERpYWdub3N0aWMgcm91dGluZXMKKyAqLworc3RhdGljIGNo
YXIgKgordW1iX250b3Aoc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKyNkZWZpbmUgTlVNQlVGUwkJ
NAorCXN0YXRpYyBjaGFyIGFzdHJbTlVNQlVGU11bSU5FVF9BRERSU1RSTEVOXTsKKwlzdGF0aWMg
dW5zaWduZWQgbmJ1ZiA9IDA7CisJY2hhcgkqczsKKworCXMgPSBhc3RyW25idWYrK107CisJaWYg
KG5idWYgPj0gTlVNQlVGUykKKwkJbmJ1ZiA9IDA7CisKKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkp
IHsKKwljYXNlIEFGX0lORVQ6CisJZGVmYXVsdDoKKwkJaW5ldF9udG9wKEFGX0lORVQsICZzYXRv
c2luKHNhKS0+c2luX2FkZHIsIHMsIHNpemVvZiAoYXN0clswXSkpOworCQlicmVhazsKKwljYXNl
IEFGX0lORVQ2OgorCQlpbmV0X250b3AoQUZfSU5FVDYsICZzYXRvc2luNihzYSktPnNpbjZfYWRk
ciwgcywKKwkJICAgIHNpemVvZiAoYXN0clswXSkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHM7
Cit9CisKKyNpZmRlZiBVTUJfREVCVUcKK3N0YXRpYyBjaGFyICoKK3VtYl91dWlkMnN0cih1aW50
OF90IHV1aWRbTUJJTV9VVUlEX0xFTl0pCit7CisJc3RhdGljIGNoYXIgdXVpZHN0clsyICogTUJJ
TV9VVUlEX0xFTiArIDVdOworCisjZGVmaW5lIFVVSURfQkZNVAkiJTAyWCIKKyNkZWZpbmUgVVVJ
RF9TRVAJIi0iCisJc25wcmludGYodXVpZHN0ciwgc2l6ZW9mICh1dWlkc3RyKSwKKwkgICAgVVVJ
RF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJICAgIFVVSURf
QkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAKKwkgICAgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX1NF
UAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJICAgIFVVSURfQkZNVCBVVUlE
X0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1ULAorCSAgICB1dWlk
WzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLAorCSAgICB1
dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCisJ
ICAgIHV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdKTsKKwlyZXR1cm4gdXVp
ZHN0cjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kdW1wKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sK
KwlpbnQJIGkgPSAwOworCXVpbnQ4X3QJKmMgPSBidWY7CisKKwlpZiAobGVuID09IDApCisJCXJl
dHVybjsKKwl3aGlsZSAoaSA8IGxlbikgeworCQlpZiAoKGkgJSAxNikgPT0gMCkgeworCQkJaWYg
KGkgPiAwKQorCQkJCWxvZyhMT0dfREVCVUcsICJcbiIpOworCQkJbG9nKExPR19ERUJVRywgIiU0
ZDogICIsIGkpOworCQl9CisJCWxvZyhMT0dfREVCVUcsICIgJTAyeCIsICpjKTsKKwkJYysrOwor
CQlpKys7CisJfQorCWxvZyhMT0dfREVCVUcsICJcbiIpOworfQorI2VuZGlmIC8qIFVNQl9ERUJV
RyAqLworCitEUklWRVJfTU9EVUxFKHVtYiwgdWh1YiwgdW1iX2RyaXZlciwgTlVMTCwgTlVMTCk7
CitNT0RVTEVfREVQRU5EKHVtYiwgdXNiLCAxLCAxLCAxKTsKZGlmZiAtLWdpdCBhL3N5cy9kZXYv
dXNiL25ldC9pZl91bWJyZWcuaCBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmExMzRhMzA3MzQ1NQotLS0gL2Rldi9u
dWxsCisrKyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcuaApAQCAtMCwwICsxLDQ0MSBAQAor
LyoJJE9wZW5CU0Q6IGlmX3VtYi5oLHYgMS40IDIwMTcvMDQvMTggMTM6Mjc6NTUgZ2VyaGFyZCBF
eHAgJCAqLworCisvKgorICogT3JpZ2luYWwgY29weXJpZ2h0IChjKSAyMDE2IGdlbnVhIG1iSCAo
T3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnks
IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9y
IHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4g
YWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQg
VEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRI
SVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBM
SUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBP
RiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg
T1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP
RiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBBRElTVEEgU0FTIChy
ZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisgKiBSZS13cml0ZSBmb3IgRnJlZUJTRCBieSBQaWVy
cmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3JhLm5ldD4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogTW9iaWxlIEJyb2FkYmFuZCBJbnRl
cmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2RvY3MvZGV2Y2xh
c3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4wLnBkZgorICovCisKK3N0cnVjdCB1bWJfdmFsZGVz
Y3IgeworCWludAkJIHZhbDsKKwljaGFyIGNvbnN0CSpkZXNjcjsKK307CisKK3N0YXRpYyBjb25z
dCBjaGFyICoKK3VtYl92YWwyZGVzY3IoY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciAqdmRwLCBp
bnQgdmFsKQoreworCXN0YXRpYyBjaGFyIHN2YWxbMzJdOworCisJd2hpbGUgKHZkcC0+ZGVzY3Ig
IT0gTlVMTCkgeworCQlpZiAodmRwLT52YWwgPT0gdmFsKQorCQkJcmV0dXJuIHZkcC0+ZGVzY3I7
CisJCXZkcCsrOworCX0KKwlzbnByaW50ZihzdmFsLCBzaXplb2YgKHN2YWwpLCAiIyVkIiwgdmFs
KTsKKwlyZXR1cm4gc3ZhbDsKK30KKworI2RlZmluZSBNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9O
UyB7CQkJCVwKKwl7IE1CSU1fUkVHU1RBVEVfVU5LTk9XTiwJInVua25vd24iIH0sCQlcCisJeyBN
QklNX1JFR1NUQVRFX0RFUkVHSVNURVJFRCwJIm5vdCByZWdpc3RlcmVkIiB9LAlcCisJeyBNQklN
X1JFR1NUQVRFX1NFQVJDSElORywJInNlYXJjaGluZyIgfSwJCVwKKwl7IE1CSU1fUkVHU1RBVEVf
SE9NRSwJCSJob21lIG5ldHdvcmsiIH0sCVwKKwl7IE1CSU1fUkVHU1RBVEVfUk9BTUlORywJInJv
YW1pbmcgbmV0d29yayIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9QQVJUTkVSLAkicGFydG5lciBu
ZXR3b3JrIiB9LAlcCisJeyBNQklNX1JFR1NUQVRFX0RFTklFRCwJCSJhY2Nlc3MgZGVuaWVkIiB9
LAlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9O
UyB7CQkJCQlcCisJeyBNQklNX0RBVEFDTEFTU19OT05FLAkJCQkibm9uZSIgfSwJXAorCXsgTUJJ
TV9EQVRBQ0xBU1NfR1BSUywJCQkJIkdQUlMiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0VER0Us
CQkJCSJFREdFIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19VTVRTLAkJCQkiVU1UUyIgfSwJXAor
CXsgTUJJTV9EQVRBQ0xBU1NfSFNEUEEsCQkJCSJIU0RQQSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xB
U1NfSFNVUEEsCQkJCSJIU1VQQSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfSFNEUEF8TUJJTV9E
QVRBQ0xBU1NfSFNVUEEsCSJIU1BBIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19MVEUsCQkJCSJM
VEUiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYUlRULAkJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7
IE1CSU1fREFUQUNMQVNTXzFYRVZETywJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNM
QVNTXzFYRVZET19SRVZfQSwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFY
RVZEViwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzNYUlRULAkJCQkiQ0RN
QTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZET19SRVZfQiwJCQkiQ0RNQTIwMDAi
IH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX1VNQiwJCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklN
X0RBVEFDTEFTU19DVVNUT00sCQkJImN1c3RvbSIgfSwJXAorCXsgMCwgTlVMTCB9IH0KKworI2Rl
ZmluZSBNQklNXzFUTzFfREVTQ1JJUFRJT04obSkJeyAobSksICNtIH0KKyNkZWZpbmUgTUJJTV9N
RVNTQUdFU19ERVNDUklQVElPTlMgewkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1f
T1BFTl9NU0cpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DTE9TRV9NU0cpLAkJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DT01NQU5EX01TRyksCQlcCisJTUJJTV8x
VE8xX0RFU0NSSVBUSU9OKE1CSU1fSE9TVF9FUlJPUl9NU0cpLAkJXAorCU1CSU1fMVRPMV9ERVND
UklQVElPTihNQklNX09QRU5fRE9ORSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklN
X0NMT1NFX0RPTkUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DT01NQU5EX0RP
TkUpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0ZVTkNUSU9OX0VSUk9SX01TRyks
CQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fSU5ESUNBVEVfU1RBVFVTX01TRyksCVwK
Kwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04obSkJeyBN
QklNX1NUQVRVU18gIyMgbSwgI20gfQorI2RlZmluZSBNQklNX1NUQVRVU19ERVNDUklQVElPTlMg
ewkJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNVQ0NFU1MpLAkJCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oQlVTWSksCQkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04o
RkFJTFVSRSksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTSU1fTk9UX0lOU0VSVEVE
KSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQkFEX1NJTSksCQkJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihQSU5fUkVRVUlSRUQpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oUElOX0RJU0FCTEVEKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE5PVF9S
RUdJU1RFUkVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUFJPVklERVJTX05PVF9G
T1VORCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE5PX0RFVklDRV9TVVBQT1JUKSwJ
CQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUFJPVklERVJfTk9UX1ZJU0lCTEUpLAkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihEQVRBX0NMQVNTX05PVF9BVkFJTEFCTEUpLAkJXAor
CU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBBQ0tFVF9TRVJWSUNFX0RFVEFDSEVEKSwJCVwKKwlN
QklNX1NUQVRVU19ERVNDUklQVElPTihNQVhfQUNUSVZBVEVEX0NPTlRFWFRTKSwJCVwKKwlNQklN
X1NUQVRVU19ERVNDUklQVElPTihOT1RfSU5JVElBTElaRUQpLAkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihWT0lDRV9DQUxMX0lOX1BST0dSRVNTKSwJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihDT05URVhUX05PVF9BQ1RJVkFURUQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQ
VElPTihTRVJWSUNFX05PVF9BQ1RJVkFURUQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElP
TihJTlZBTElEX0FDQ0VTU19TVFJJTkcpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJ
TlZBTElEX1VTRVJfTkFNRV9QV0QpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihSQURJ
T19QT1dFUl9PRkYpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJTlZBTElEX1BBUkFN
RVRFUlMpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihSRUFEX0ZBSUxVUkUpLAkJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oV1JJVEVfRkFJTFVSRSksCQkJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihOT19QSE9ORUJPT0spLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oUEFSQU1FVEVSX1RPT19MT05HKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04o
U1RLX0JVU1kpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oT1BFUkFUSU9OX05PVF9B
TExPV0VEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTUVNT1JZX0ZBSUxVUkUpLAkJ
CVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJTlZBTElEX01FTU9SWV9JTkRFWCksCQkJXAor
CU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE1FTU9SWV9GVUxMKSwJCQkJXAorCU1CSU1fU1RBVFVT
X0RFU0NSSVBUSU9OKEZJTFRFUl9OT1RfU1VQUE9SVEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oRFNTX0lOU1RBTkNFX0xJTUlUKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04oSU5WQUxJRF9ERVZJQ0VfU0VSVklDRV9PUEVSQVRJT04pLAlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oQVVUSF9JTkNPUlJFQ1RfQVVUTiksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKEFVVEhfU1lOQ19GQUlMVVJFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQVVU
SF9BTUZfTk9UX1NFVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKENPTlRFWFRfTk9U
X1NVUFBPUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19VTktOT1dOX1NN
U0NfQUREUkVTUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU01TX05FVFdPUktfVElN
RU9VVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19MQU5HX05PVF9TVVBQT1JU
RUQpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19FTkNPRElOR19OT1RfU1VQUE9S
VEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTTVNfRk9STUFUX05PVF9TVVBQT1JU
RUQpLAkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX0VSUk9SX0RFU0NSSVBUSU9O
KG0pCXsgTUJJTV9FUlJPUl8gIyMgbSwgI20gfQorI2RlZmluZSBNQklNX0VSUk9SX0RFU0NSSVBU
SU9OUyB7CQkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihUSU1FT1VUX0ZSQUdNRU5UKSwJ
CQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihGUkFHTUVOVF9PVVRfT0ZfU0VRVUVOQ0UpLAkJ
XAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oTEVOR1RIX01JU01BVENIKSwJCQlcCisJTUJJTV9F
UlJPUl9ERVNDUklQVElPTihEVVBMSUNBVEVEX1RJRCksCQkJCVwKKwlNQklNX0VSUk9SX0RFU0NS
SVBUSU9OKE5PVF9PUEVORUQpLAkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihVTktOT1dO
KSwJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oQ0FOQ0VMKSwJCQkJCVwKKwlNQklNX0VS
Uk9SX0RFU0NSSVBUSU9OKE1BWF9UUkFOU0ZFUiksCQkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNk
ZWZpbmUgTUJJTV9DSURfREVTQ1JJUFRJT05TIHsJCQkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fQ0lEX0RFVklDRV9DQVBTKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1C
SU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTKSwJXAorCU1CSU1fMVRPMV9ERVNDUklQVElP
TihNQklNX0NJRF9SQURJT19TVEFURSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklN
X0NJRF9QSU4pLAkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BJTl9MSVNU
KSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0hPTUVfUFJPVklERVIpLAkJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUFJFRkVSUkVEX1BST1ZJREVSUyks
CQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1ZJU0lCTEVfUFJPVklERVJTKSwJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUkVHSVNURVJfU1RBVEUpLAkJCVwK
KwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUEFDS0VUX1NFUlZJQ0UpLAkJCVwKKwlN
QklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfU0lHTkFMX1NUQVRFKSwJCQlcCisJTUJJTV8x
VE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0NPTk5FQ1QpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DSURfUFJPVklTSU9ORURfQ09OVEVYVFMpLAkJXAorCU1CSU1fMVRPMV9ERVND
UklQVElPTihNQklNX0NJRF9TRVJWSUNFX0FDVElWQVRJT04pLAkJXAorCU1CSU1fMVRPMV9ERVND
UklQVElPTihNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJ
T04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VfU1VCU0NSSUJFX0xJU1QpLAlcCisJTUJJTV8xVE8x
X0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BBQ0tFVF9TVEFUSVNUSUNTKSwJCVwKKwlNQklNXzFUTzFf
REVTQ1JJUFRJT04oTUJJTV9DSURfTkVUV09SS19JRExFX0hJTlQpLAkJXAorCU1CSU1fMVRPMV9E
RVNDUklQVElPTihNQklNX0NJRF9FTUVSR0VOQ1lfTU9ERSksCQkJXAorCU1CSU1fMVRPMV9ERVND
UklQVElPTihNQklNX0NJRF9JUF9QQUNLRVRfRklMVEVSUyksCQlcCisJTUJJTV8xVE8xX0RFU0NS
SVBUSU9OKE1CSU1fQ0lEX01VTFRJQ0FSUklFUl9QUk9WSURFUlMpLAkJXAorCXsgMCwgTlVMTCB9
IH0KKworI2RlZmluZSBNQklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJeyBNQklN
X1NJTVNUQVRFX05PVElOSVRJQUxJWkVELCAibm90IGluaXRpYWxpemVkIiB9LAkJXAorCXsgTUJJ
TV9TSU1TVEFURV9JTklUSUFMSVpFRCwgImluaXRpYWxpemVkIiB9LAkJCVwKKwl7IE1CSU1fU0lN
U1RBVEVfTk9USU5TRVJURUQsICJub3QgaW5zZXJ0ZWQiIH0sCQkJXAorCXsgTUJJTV9TSU1TVEFU
RV9CQURTSU0sICJiYWQgdHlwZSIgfSwJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9GQUlMVVJFLCAi
ZmFpbGVkIiB9LAkJCQlcCisJeyBNQklNX1NJTVNUQVRFX05PVEFDVElWQVRFRCwgIm5vdCBhY3Rp
dmF0ZWQiIH0sCQlcCisJeyBNQklNX1NJTVNUQVRFX0xPQ0tFRCwgImxvY2tlZCIgfSwJCQkJXAor
CXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1BJTlRZUEVfREVTQ1JJUFRJT05TIHsJCQkJ
CVwKKwl7IE1CSU1fUElOX1RZUEVfTk9ORSwgIm5vbmUiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9U
WVBFX0NVU1RPTSwgImN1c3RvbSIgfSwJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9QSU4xLCAiUElO
MSIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUElOMiwgIlBJTjIiIH0sCQkJCQlcCisJeyBN
QklNX1BJTl9UWVBFX0RFVl9TSU1fUElOLCAiZGV2aWNlIFBJTiIgfSwJCQlcCisJeyBNQklNX1BJ
Tl9UWVBFX0RFVl9GSVJTVF9TSU1fUElOLCAiZGV2aWNlIDFzdCBQSU4iIH0sCQlcCisJeyBNQklN
X1BJTl9UWVBFX05FVFdPUktfUElOLCAibmV0d29yayBQSU4iIH0sCQkJXAorCXsgTUJJTV9QSU5f
VFlQRV9ORVRXT1JLX1NVQlNFVF9QSU4sICJuZXR3b3JrIHN1YnNldCBQSU4iIH0sCVwKKwl7IE1C
SU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4sICJwcm92aWRlciBQSU4iIH0sCQlcCisJ
eyBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QSU4sICJjb3Jwb3JhdGUgUElOIiB9LAkJXAorCXsg
TUJJTV9QSU5fVFlQRV9TVUJTSURZX0xPQ0ssICJzdWJzaWR5IGxvY2siIH0sCQkJXAorCXsgTUJJ
TV9QSU5fVFlQRV9QVUsxLCAiUFVLIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9QVUsyLCAi
UFVLMiIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfREVWX0ZJUlNUX1NJTV9QVUssICJkZXZp
Y2UgMXN0IFBVSyIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfTkVUV09SS19QVUssICJuZXR3b3Jr
IFBVSyIgfSwJCQlcCisJeyBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BVSywgIm5ldHdv
cmsgc3Vic2V0IFBVSyIgfSwJXAorCXsgTUJJTV9QSU5fVFlQRV9TRVJWSUNFX1BST1ZJREVSX1BV
SywgInByb3ZpZGVyIFBVSyIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfQ09SUE9SQVRFX1BVSywg
ImNvcnBvcmF0ZSBQVUsiIH0sCQlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fUEtU
U1JWX1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fUEtUU0VSVklDRV9TVEFURV9V
TktOT1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfQVRUQUNI
SU5HLCAiYXR0YWNoaW5nIiB9LAkJXAorCXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSEVE
LCAiYXR0YWNoZWQiIH0sCQkJXAorCXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0RFVEFDSElORywg
ImRldGFjaGluZyIgfSwJCVwKKwl7IE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hFRCwgImRl
dGFjaGVkIiB9LAkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9O
X1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fQUNUSVZBVElPTl9TVEFURV9VTktO
T1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVEVE
LCAiYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRJTkcs
ICJhY3RpdmF0aW5nIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVEVE
LCAiZGVhY3RpdmF0ZWQiIH0sCQlcCisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVfREVBQ1RJVkFU
SU5HLCAiZGVhY3RpdmF0aW5nIiB9LAkJXAorCXsgMCwgTlVMTCB9IH0KKworLyoKKyAqIERyaXZl
ciBpbnRlcm5hbCBzdGF0ZQorICovCitlbnVtIHVtYl9zdGF0ZSB7CisJVU1CX1NfRE9XTiA9IDAs
CQkvKiBpbnRlcmZhY2UgZG93biAqLworCVVNQl9TX09QRU4sCQkvKiBNQklNIGRldmljZSBoYXMg
YmVlbiBvcGVuZWQgKi8KKwlVTUJfU19DSUQsCQkvKiBRTUkgY2xpZW50IGlkIGFsbG9jYXRlZCAq
LworCVVNQl9TX1JBRElPLAkJLyogcmFkaW8gaXMgb24gKi8KKwlVTUJfU19TSU1SRUFEWSwJCS8q
IFNJTSBpcyByZWFkeSAqLworCVVNQl9TX0FUVEFDSEVELAkJLyogcGFja2V0IHNlcnZpY2UgaXMg
YXR0YWNoZWQgKi8KKwlVTUJfU19DT05ORUNURUQsCS8qIGNvbm5lY3RlZCB0byBwcm92aWRlciAq
LworCVVNQl9TX1VQLAkJLyogaGF2ZSBJUCBjb25maWd1cmF0aW9uICovCit9OworCisjZGVmaW5l
IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlMgewlcCisJeyBVTUJfU19ET1dOLCAiZG93
biIgfSwJCQlcCisJeyBVTUJfU19PUEVOLCAib3BlbiIgfSwJCQlcCisJeyBVTUJfU19DSUQsICJD
SUQgYWxsb2NhdGVkIiB9LAkJXAorCXsgVU1CX1NfUkFESU8sICJyYWRpbyBvbiIgfSwJCVwKKwl7
IFVNQl9TX1NJTVJFQURZLCAiU0lNIGlzIHJlYWR5IiB9LAlcCisJeyBVTUJfU19BVFRBQ0hFRCwg
ImF0dGFjaGVkIiB9LAkJXAorCXsgVU1CX1NfQ09OTkVDVEVELCAiY29ubmVjdGVkIiB9LAlcCisJ
eyBVTUJfU19VUCwgInVwIiB9LAkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKy8qCisgKiBVTUIgcGFy
YW1ldGVycyAoU0lPQ1tHU11VTUJQQVJBTSBpb2N0bHMpCisgKi8KK3N0cnVjdCB1bWJfcGFyYW1l
dGVyIHsKKwlpbnQJCQlvcDsKKwlpbnQJCQlpc19wdWs7CisJdWludDE2X3QJCXBpbltNQklNX1BJ
Tl9NQVhMRU5dOworCWludAkJCXBpbmxlbjsKKworCXVpbnQxNl90CQluZXdwaW5bTUJJTV9QSU5f
TUFYTEVOXTsKKwlpbnQJCQluZXdwaW5sZW47CisKKyNkZWZpbmUgVU1CX0FQTl9NQVhMRU4JCTEw
MAorCXVpbnQxNl90CQlhcG5bVU1CX0FQTl9NQVhMRU5dOworCWludAkJCWFwbmxlbjsKKworI2Rl
ZmluZSBVTUJfVVNFUk5BTUVfTUFYTEVOCTIwNQorCXVpbnQxNl90CQl1c2VybmFtZVtVTUJfVVNF
Uk5BTUVfTUFYTEVOXTsKKwlpbnQJCQl1c2VybmFtZWxlbjsKKworI2RlZmluZSBVTUJfUEFTU1dP
UkRfTUFYTEVOCTIwNQorCXVpbnQxNl90CQlwYXNzd29yZFtVTUJfUEFTU1dPUkRfTUFYTEVOXTsK
KwlpbnQJCQlwYXNzd29yZGxlbjsKKworCWludAkJCXJvYW1pbmc7CisJdWludDMyX3QJCXByZWZl
cnJlZGNsYXNzZXM7Cit9OworCisvKgorICogVU1CIGRldmljZSBzdGF0dXMgaW5mbyAoU0lPQ0dV
TUJJTkZPIGlvY3RsKQorICovCitzdHJ1Y3QgdW1iX2luZm8geworCWVudW0gdW1iX3N0YXRlCQlz
dGF0ZTsKKwlpbnQJCQllbmFibGVfcm9hbWluZzsKKyNkZWZpbmUgVU1CX1BJTl9SRVFVSVJFRAkw
CisjZGVmaW5lIFVNQl9QSU5fVU5MT0NLRUQJMQorI2RlZmluZSBVTUJfUFVLX1JFUVVJUkVECTIK
KwlpbnQJCQlwaW5fc3RhdGU7CisJaW50CQkJcGluX2F0dGVtcHRzX2xlZnQ7CisJaW50CQkJYWN0
aXZhdGlvbjsKKwlpbnQJCQlzaW1fc3RhdGU7CisJaW50CQkJcmVnc3RhdGU7CisJaW50CQkJcmVn
bW9kZTsKKwlpbnQJCQlud2Vycm9yOworCWludAkJCXBhY2tldHN0YXRlOworCXVpbnQzMl90CQlz
dXBwb3J0ZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSBodyBzdXBwb3J0cyAqLworCXVpbnQzMl90CQlw
cmVmZXJyZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSB1c2VyIHByZWZlcnMgKi8KKwl1aW50MzJfdAkJ
aGlnaGVzdGNsYXNzOwkvKiB3aGF0IHRoZSBuZXR3b3JrIG9mZmVycyAqLworCXVpbnQzMl90CQlj
ZWxsY2xhc3M7CisjZGVmaW5lIFVNQl9QUk9WSURFUk5BTUVfTUFYTEVOCQkyMAorCXVpbnQxNl90
CQlwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTl07CisjZGVmaW5lIFVNQl9QSE9ORU5S
X01BWExFTgkJMjIKKwl1aW50MTZfdAkJcG5bVU1CX1BIT05FTlJfTUFYTEVOXTsKKyNkZWZpbmUg
VU1CX1NVQlNDUklCRVJJRF9NQVhMRU4JCTE1CisJdWludDE2X3QJCXNpZFtVTUJfU1VCU0NSSUJF
UklEX01BWExFTl07CisjZGVmaW5lIFVNQl9JQ0NJRF9NQVhMRU4JCTIwCisJdWludDE2X3QJCWlj
Y2lkW1VNQl9JQ0NJRF9NQVhMRU5dOworI2RlZmluZSBVTUJfUk9BTUlOR1RFWFRfTUFYTEVOCQk2
MworCXVpbnQxNl90CQlyb2FtaW5ndHh0W1VNQl9ST0FNSU5HVEVYVF9NQVhMRU5dOworCisjZGVm
aW5lIFVNQl9ERVZJRF9NQVhMRU4JCTE4CisJdWludDE2X3QJCWRldmlkW1VNQl9ERVZJRF9NQVhM
RU5dOworI2RlZmluZSBVTUJfRldJTkZPX01BWExFTgkJMzAKKwl1aW50MTZfdAkJZndpbmZvW1VN
Ql9GV0lORk9fTUFYTEVOXTsKKyNkZWZpbmUgVU1CX0hXSU5GT19NQVhMRU4JCTMwCisJdWludDE2
X3QJCWh3aW5mb1tVTUJfSFdJTkZPX01BWExFTl07CisKKwl1aW50MTZfdAkJYXBuW1VNQl9BUE5f
TUFYTEVOXTsKKwlpbnQJCQlhcG5sZW47CisKKwl1aW50MTZfdAkJdXNlcm5hbWVbVU1CX1VTRVJO
QU1FX01BWExFTl07CisJaW50CQkJdXNlcm5hbWVsZW47CisKKwl1aW50MTZfdAkJcGFzc3dvcmRb
VU1CX1BBU1NXT1JEX01BWExFTl07CisJaW50CQkJcGFzc3dvcmRsZW47CisKKyNkZWZpbmUgVU1C
X1ZBTFVFX1VOS05PV04JLTk5OQorCWludAkJCXJzc2k7CisjZGVmaW5lIFVNQl9CRVJfRVhDRUxM
RU5UCTAKKyNkZWZpbmUgVU1CX0JFUl9WRVJZR09PRAkxCisjZGVmaW5lIFVNQl9CRVJfR09PRAkJ
MgorI2RlZmluZSBVTUJfQkVSX09LCQkzCisjZGVmaW5lIFVNQl9CRVJfTUVESVVNCQk0CisjZGVm
aW5lIFVNQl9CRVJfQkFECQk1CisjZGVmaW5lIFVNQl9CRVJfVkVSWUJBRAkJNgorI2RlZmluZSBV
TUJfQkVSX0VYVFJFTUVMWUJBRAk3CisJaW50CQkJYmVyOworCisJaW50CQkJaHdfcmFkaW9fb247
CisJaW50CQkJc3dfcmFkaW9fb247CisKKwl1aW50NjRfdAkJdXBsaW5rX3NwZWVkOworCXVpbnQ2
NF90CQlkb3dubGlua19zcGVlZDsKKworI2RlZmluZSBVTUJfTUFYX0ROU1NSVgkJCTIKKwlzdHJ1
Y3QgaW5fYWRkcgkJaXB2NGRuc1tVTUJfTUFYX0ROU1NSVl07Cit9OworCisjaWYgIWRlZmluZWQo
aWZyX210dSkKKyNkZWZpbmUgaWZyX210dQlpZnJfaWZydS5pZnJ1X21ldHJpYworI2VuZGlmCisK
KyNpZmRlZiBfS0VSTkVMCisvKgorICogVU1CIGRldmljZQorICovCitlbnVtIHsKKwlVTUJfSU5U
Ul9SWCwKKwlVTUJfQlVMS19SWCwKKwlVTUJfQlVMS19UWCwKKwlVTUJfTl9UUkFOU0ZFUiwKK307
CisKK3N0cnVjdCB1bWJfdGFzayB7CisJc3RydWN0IHVzYl9wcm9jX21zZwkgaGRyOworCXN0cnVj
dCB1bWJfc29mdGMJKnNjOworfTsKKworc3RydWN0IHVtYl9zb2Z0YyB7CisJZGV2aWNlX3QJCSBz
Y19kZXY7CisJc3RydWN0IGlmbmV0CQkqc2NfaWY7CisjZGVmaW5lIEdFVF9JRlAoc2MpCSgoc2Mp
LT5zY19pZikKKwlzdHJ1Y3QgaWZtZWRpYQkJIHNjX2ltOworCXN0cnVjdCB1c2JfZGV2aWNlCSpz
Y191ZGV2OworCXN0cnVjdCB1c2JfeGZlcgkJKnNjX3hmZXJbVU1CX05fVFJBTlNGRVJdOworCXVp
bnQ4X3QJCQkgc2NfaWZhY2VzX2luZGV4WzJdOworCisJaW50CQkJIHNjX3Zlcl9tYWo7CisJaW50
CQkJIHNjX3Zlcl9taW47CisJaW50CQkJIHNjX2N0cmxfbGVuOworCWludAkJCSBzY19tYXhwa3Rs
ZW47CisJaW50CQkJIHNjX21heHNlc3Npb25zOworCisjZGVmaW5lIFVNQkZMR19GQ0NfQVVUSF9S
RVFVSVJFRAkweDAwMDEKKyNkZWZpbmUgVU1CRkxHX05PX0lORVQ2CQkJMHgwMDAyCisJdWludDMy
X3QJCSBzY19mbGFnczsKKwlpbnQJCQkgc2NfY2lkOworCisJc3RydWN0IHVzYl9wcm9jZXNzCSBz
Y190YXNrcXVldWU7CisJc3RydWN0IHVtYl90YXNrCQkgc2NfcHJvY19hdHRhY2hfdGFza1syXTsK
KwlzdHJ1Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX3N0YXJ0X3Rhc2tbMl07CisJc3RydWN0IHVtYl90
YXNrCQkgc2NfcHJvY19zdGF0ZV90YXNrWzJdOworCXN0cnVjdCB1bWJfdGFzawkJIHNjX3Byb2Nf
Z2V0X3Jlc3BvbnNlX3Rhc2tbMl07CisKKwlpbnQJCQkgc2NfbnJlc3A7CisJc3RydWN0IG10eAkJ
IHNjX211dGV4OworCXN0cnVjdCB1c2JfY2FsbG91dAkgc2Nfc3RhdGVjaGdfdGltZXI7CisJY2hh
cgkJCSBzY19keWluZzsKKwljaGFyCQkJIHNjX2F0dGFjaGVkOworCisJdWludDhfdAkJCSBzY19j
dHJsX2lmYWNlbm87CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKnNjX2RhdGFfaWZhY2U7CisKKwl2
b2lkCQkJKnNjX3Jlc3BfYnVmOworCXZvaWQJCQkqc2NfY3RybF9tc2c7CisKKwl2b2lkCQkJKnNj
X3J4X2J1ZjsKKwl1aW50MzJfdAkJIHNjX3J4X2J1ZnN6OworCXVuc2lnbmVkCQkgc2NfcnhfbmVy
cjsKKwlzdHJ1Y3QgaWZxdWV1ZQkJIHNjX3J4X3F1ZXVlOworCisJdm9pZAkJCSpzY190eF9idWY7
CisJc3RydWN0IG1idWYJCSpzY190eF9tOworCXVpbnQzMl90CQkgc2NfdHhfYnVmc3o7CisJdWlu
dDMyX3QJCSBzY190eF9zZXE7CisKKwl1aW50MzJfdAkJIHNjX3RpZDsKKworI2RlZmluZSBzY19z
dGF0ZQkJc2NfaW5mby5zdGF0ZQorI2RlZmluZSBzY19yb2FtaW5nCQlzY19pbmZvLmVuYWJsZV9y
b2FtaW5nCisJc3RydWN0IHVtYl9pbmZvCQkgc2NfaW5mbzsKK307CisjZW5kaWYgLyogX0tFUk5F
TCAqLwpkaWZmIC0tZ2l0IGEvc3lzL2Rldi91c2IvbmV0L21iaW0uaCBiL3N5cy9kZXYvdXNiL25l
dC9tYmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZDdlY2Zm
MTE0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvbWJpbS5oCkBAIC0wLDAg
KzEsNzI0IEBACisvKgkkT3BlbkJTRDogbWJpbS5oLHYgMS40IDIwMTcvMDQvMTggMTM6Mjc6NTUg
Z2VyaGFyZCBFeHAgJCAqLworCisvKgorICogT3JpZ2luYWwgY29weXJpZ2h0IChjKSAyMDE2IGdl
bnVhIG1iSCAoT3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5
LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9z
ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVH
QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK
KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VM
VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAq
IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s
IEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBBRElT
VEEgU0FTIChyZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisgKiBSZS13cml0ZSBmb3IgRnJlZUJT
RCBieSBQaWVycmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3JhLm5ldD4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
LSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
CisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisg
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogTW9iaWxlIEJyb2Fk
YmFuZCBJbnRlcmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2Rv
Y3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4wLnBkZgorICovCisjaWZuZGVmIF9N
QklNX0hfCisjZGVmaW5lIF9NQklNX0hfCisKKyNkZWZpbmUgVURFU0NTVUJfTUJJTQkJCTI3Cisj
ZGVmaW5lIE1CSU1fSU5URVJGQUNFX0FMVFNFVFRJTkcJMQorCisjZGVmaW5lIE1CSU1fUkVTRVRf
RlVOQ1RJT04JCTB4MDUKKworLyoKKyAqIFJlZ2lzdHJhdGlvbiBzdGF0ZSAoTUJJTV9SRUdJU1RF
Ul9TVEFURSkKKyAqLworI2RlZmluZSBNQklNX1JFR1NUQVRFX1VOS05PV04JCQkwCisjZGVmaW5l
IE1CSU1fUkVHU1RBVEVfREVSRUdJU1RFUkVECQkxCisjZGVmaW5lIE1CSU1fUkVHU1RBVEVfU0VB
UkNISU5HCQkJMgorI2RlZmluZSBNQklNX1JFR1NUQVRFX0hPTUUJCQkzCisjZGVmaW5lIE1CSU1f
UkVHU1RBVEVfUk9BTUlORwkJCTQKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9QQVJUTkVSCQkJNQor
I2RlZmluZSBNQklNX1JFR1NUQVRFX0RFTklFRAkJCTYKKworLyoKKyAqIERhdGEgY2xhc3NlcyBt
YXNrIChNQklNX0RBVEFfQ0xBU1MpCisgKi8KKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfTk9ORQkJ
CTB4MDAwMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfR1BSUwkJCTB4MDAwMDAwMDEKKyNk
ZWZpbmUgTUJJTV9EQVRBQ0xBU1NfRURHRQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUJJTV9EQVRB
Q0xBU1NfVU1UUwkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfSFNEUEEJCQkw
eDAwMDAwMDA4CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0hTVVBBCQkJMHgwMDAwMDAxMAorI2Rl
ZmluZSBNQklNX0RBVEFDTEFTU19MVEUJCQkweDAwMDAwMDIwCisjZGVmaW5lIE1CSU1fREFUQUNM
QVNTXzFYUlRUCQkJMHgwMDAxMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRE8JCQkw
eDAwMDIwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTXzFYRVZET19SRVZfQQkJMHgwMDA0MDAw
MAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRFYJCQkweDAwMDgwMDAwCisjZGVmaW5lIE1C
SU1fREFUQUNMQVNTXzNYUlRUCQkJMHgwMDEwMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18x
WEVWRE9fUkVWX0IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfVU1CCQkJMHgw
MDQwMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19DVVNUT00JCQkweDgwMDAwMDAwCisKKy8q
CisgKiBDZWxsIGNsYXNzZXMgbWFzayAoTUJJTV9DRUxMVUxBUl9DTEFTUykKKyAqLworI2RlZmlu
ZSBNQklNX0NFTExDTEFTU19HU00JCQkweDAwMDAwMDAxCisjZGVmaW5lIE1CSU1fQ0VMTENMQVNT
X0NETUEJCQkweDAwMDAwMDAyCisKKy8qCisgKiBVVUlEcworICovCisjZGVmaW5lIE1CSU1fVVVJ
RF9MRU4JCTE2CisKKyNkZWZpbmUgTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1QgewkJCQlcCisJCTB4
YTIsIDB4ODksIDB4Y2MsIDB4MzMsIDB4YmMsIDB4YmIsIDB4OGIsIDB4NGYsCVwKKwkJMHhiNiwg
MHhiMCwgMHgxMywgMHgzZSwgMHhjMiwgMHhhYSwgMHhlNiwgMHhkZglcCisJfQorCisjZGVmaW5l
IE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUIHsJCQkJXAorCQkweDdlLCAweDVlLCAweDJhLCAw
eDdlLCAweDRlLCAweDZmLCAweDcyLCAweDcyLAlcCisJCTB4NzMsIDB4NmIsIDB4NjUsIDB4NmUs
IDB4N2UsIDB4NWUsIDB4MmEsIDB4N2UJXAorCX0KKworI2RlZmluZSBNQklNX1VVSURfQ09OVEVY
VF9WUE4gewkJCQlcCisJCTB4OWIsIDB4OWYsIDB4N2IsIDB4YmUsIDB4ODksIDB4NTIsIDB4NDQs
IDB4YjcsCVwKKwkJMHg4MywgMHhhYywgMHhjYSwgMHg0MSwgMHgzMSwgMHg4ZCwgMHhmNywgMHhh
MAlcCisJfQorCisjZGVmaW5lIE1CSU1fVVVJRF9RTUlfTUJJTSB7CQkJCVwKKwkJMHhkMSwgMHhh
MywgMHgwYiwgMHhjMiwgMHhmOSwgMHg3YSwgMHg2ZSwgMHg0MywJXAorCQkweGJmLCAweDY1LCAw
eGM3LCAweGUyLCAweDRmLCAweGIwLCAweGYwLCAweGQzCVwKKwl9CisKKyNkZWZpbmUgTUJJTV9D
VFJMTVNHX01JTkxFTgkJNjQKKyNkZWZpbmUgTUJJTV9DVFJMTVNHX01BWExFTgkJKDQgKiAxMjA0
KQorCisjZGVmaW5lIE1CSU1fTUFYU0VHU1pfTUlOVkFMCQkoMiAqIDEwMjQpCisKKy8qCisgKiBD
b250cm9sIG1lc3NhZ2VzIChob3N0IHRvIGZ1bmN0aW9uKQorICovCisjZGVmaW5lIE1CSU1fT1BF
Tl9NU0cJCQkxVQorI2RlZmluZSBNQklNX0NMT1NFX01TRwkJCTJVCisjZGVmaW5lIE1CSU1fQ09N
TUFORF9NU0cJCTNVCisjZGVmaW5lIE1CSU1fSE9TVF9FUlJPUl9NU0cJCTRVCisKKy8qCisgKiBD
b250cm9sIG1lc3NhZ2VzIChmdW5jdGlvbiB0byBob3N0KQorICovCisjZGVmaW5lIE1CSU1fT1BF
Tl9ET05FCQkJMHg4MDAwMDAwMVUKKyNkZWZpbmUgTUJJTV9DTE9TRV9ET05FCQkJMHg4MDAwMDAw
MlUKKyNkZWZpbmUgTUJJTV9DT01NQU5EX0RPTkUJCTB4ODAwMDAwMDNVCisjZGVmaW5lIE1CSU1f
RlVOQ1RJT05fRVJST1JfTVNHCQkweDgwMDAwMDA0VQorI2RlZmluZSBNQklNX0lORElDQVRFX1NU
QVRVU19NU0cJMHg4MDAwMDAwN1UKKworLyoKKyAqIEdlbmVyaWMgc3RhdHVzIGNvZGVzCisgKi8K
KyNkZWZpbmUgTUJJTV9TVEFUVVNfU1VDQ0VTUwkJCTAKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQlVT
WQkJCTEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRkFJTFVSRQkJCTIKKyNkZWZpbmUgTUJJTV9TVEFU
VVNfU0lNX05PVF9JTlNFUlRFRAkJMworI2RlZmluZSBNQklNX1NUQVRVU19CQURfU0lNCQkJNAor
I2RlZmluZSBNQklNX1NUQVRVU19QSU5fUkVRVUlSRUQJCTUKKyNkZWZpbmUgTUJJTV9TVEFUVVNf
UElOX0RJU0FCTEVECQk2CisjZGVmaW5lIE1CSU1fU1RBVFVTX05PVF9SRUdJU1RFUkVECQk3Cisj
ZGVmaW5lIE1CSU1fU1RBVFVTX1BST1ZJREVSU19OT1RfRk9VTkQJCTgKKyNkZWZpbmUgTUJJTV9T
VEFUVVNfTk9fREVWSUNFX1NVUFBPUlQJCTkKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUFJPVklERVJf
Tk9UX1ZJU0lCTEUJMTAKKyNkZWZpbmUgTUJJTV9TVEFUVVNfREFUQV9DTEFTU19OT1RfQVZBSUxB
QkxFCTExCisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBQ0tFVF9TRVJWSUNFX0RFVEFDSEVECTEyCisj
ZGVmaW5lIE1CSU1fU1RBVFVTX01BWF9BQ1RJVkFURURfQ09OVEVYVFMJMTMKKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfTk9UX0lOSVRJQUxJWkVECQkxNAorI2RlZmluZSBNQklNX1NUQVRVU19WT0lDRV9D
QUxMX0lOX1BST0dSRVNTCTE1CisjZGVmaW5lIE1CSU1fU1RBVFVTX0NPTlRFWFRfTk9UX0FDVElW
QVRFRAkxNgorI2RlZmluZSBNQklNX1NUQVRVU19TRVJWSUNFX05PVF9BQ1RJVkFURUQJMTcKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJRF9BQ0NFU1NfU1RSSU5HCTE4CisjZGVmaW5lIE1CSU1f
U1RBVFVTX0lOVkFMSURfVVNFUl9OQU1FX1BXRAkxOQorI2RlZmluZSBNQklNX1NUQVRVU19SQURJ
T19QT1dFUl9PRkYJCTIwCisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSUwkJ
MjEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUkVBRF9GQUlMVVJFCQkyMgorI2RlZmluZSBNQklNX1NU
QVRVU19XUklURV9GQUlMVVJFCQkyMworI2RlZmluZSBNQklNX1NUQVRVU19OT19QSE9ORUJPT0sJ
CTI1CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBUkFNRVRFUl9UT09fTE9ORwkJMjYKKyNkZWZpbmUg
TUJJTV9TVEFUVVNfU1RLX0JVU1kJCQkyNworI2RlZmluZSBNQklNX1NUQVRVU19PUEVSQVRJT05f
Tk9UX0FMTE9XRUQJMjgKKyNkZWZpbmUgTUJJTV9TVEFUVVNfTUVNT1JZX0ZBSUxVUkUJCTI5Cisj
ZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfTUVNT1JZX0lOREVYCTMwCisjZGVmaW5lIE1CSU1f
U1RBVFVTX01FTU9SWV9GVUxMCQkJMzEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRklMVEVSX05PVF9T
VVBQT1JURUQJMzIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRFNTX0lOU1RBTkNFX0xJTUlUCQkzMwor
I2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX0RFVklDRV9TRVJWSUNFX09QRVJBVElPTgkzNAor
I2RlZmluZSBNQklNX1NUQVRVU19BVVRIX0lOQ09SUkVDVF9BVVROCQkzNQorI2RlZmluZSBNQklN
X1NUQVRVU19BVVRIX1NZTkNfRkFJTFVSRQkJMzYKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9B
TUZfTk9UX1NFVAkJMzcKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQ09OVEVYVF9OT1RfU1VQUE9SVEVE
CTM4CisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19VTktOT1dOX1NNU0NfQUREUkVTUwkxMDAKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfU01TX05FVFdPUktfVElNRU9VVAkJMTAxCisjZGVmaW5lIE1CSU1f
U1RBVFVTX1NNU19MQU5HX05PVF9TVVBQT1JURUQJMTAyCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NN
U19FTkNPRElOR19OT1RfU1VQUE9SVEVECTEwMworI2RlZmluZSBNQklNX1NUQVRVU19TTVNfRk9S
TUFUX05PVF9TVVBQT1JURUQJMTA0CisKKy8qCisgKiBNZXNzYWdlIGZvcm1hdHMKKyAqLworc3Ry
dWN0IG1iaW1fbXNnaGRyIHsKKwkvKiBNc2cgaGVhZGVyICovCisJdWludDMyX3QJdHlwZTsJCS8q
IG1lc3NhZ2UgdHlwZSAqLworCXVpbnQzMl90CWxlbjsJCS8qIG1lc3NhZ2UgbGVuZ3RoICovCisJ
dWludDMyX3QJdGlkOwkJLyogdHJhbnNhY3Rpb24gaWQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVj
dCBtYmltX2ZyYWdoZHIgeworCXVpbnQzMl90CW5mcmFnOwkJLyogdG90YWwgIyBvZiBmcmFnbWVu
dHMgKi8KKwl1aW50MzJfdAljdXJyZnJhZzsJLyogY3VycmVudCBmcmFnbWVudCAqLworfSBfX3Bh
Y2tlZDsKKworc3RydWN0IG1iaW1fZnJhZ21lbnRlZF9tc2dfaGRyIHsKKwlzdHJ1Y3QgbWJpbV9t
c2doZHIJaGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsKK30gX19wYWNrZWQ7CisKK3N0
cnVjdCBtYmltX2gyZl9vcGVubXNnIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXVpbnQz
Ml90CQltYXhsZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9oMmZfY2xvc2Vtc2cgewor
CXN0cnVjdCBtYmltX21zZ2hkcgloZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9oMmZf
Y21kIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJh
ZzsKKwl1aW50OF90CQkJZGV2aWRbTUJJTV9VVUlEX0xFTl07CisJdWludDMyX3QJCWNpZDsJCS8q
IGNvbW1hbmQgaWQgKi8KKyNkZWZpbmUgTUJJTV9DTURPUF9RUlkJCTAKKyNkZWZpbmUgTUJJTV9D
TURPUF9TRVQJCTEKKwl1aW50MzJfdAkJb3A7CisJdWludDMyX3QJCWluZm9sZW47CisJdWludDhf
dAkJCWluZm9bXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2YyaF9pbmRpY2F0ZV9zdGF0
dXMgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisJc3RydWN0IG1iaW1fZnJhZ2hkcglmcmFn
OworCXVpbnQ4X3QJCQlkZXZpZFtNQklNX1VVSURfTEVOXTsKKwl1aW50MzJfdAkJY2lkOwkJLyog
Y29tbWFuZCBpZCAqLworCXVpbnQzMl90CQlpbmZvbGVuOworCXVpbnQ4X3QJCQlpbmZvW107Cit9
IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfaG9zdGVyciB7CisJc3RydWN0IG1iaW1fbXNn
aGRyCWhkcjsKKworI2RlZmluZSBNQklNX0VSUk9SX1RJTUVPVVRfRlJBR01FTlQJCTEKKyNkZWZp
bmUgTUJJTV9FUlJPUl9GUkFHTUVOVF9PVVRfT0ZfU0VRVUVOQ0UJMgorI2RlZmluZSBNQklNX0VS
Uk9SX0xFTkdUSF9NSVNNQVRDSAkJMworI2RlZmluZSBNQklNX0VSUk9SX0RVUExJQ0FURURfVElE
CQk0CisjZGVmaW5lIE1CSU1fRVJST1JfTk9UX09QRU5FRAkJCTUKKyNkZWZpbmUgTUJJTV9FUlJP
Ul9VTktOT1dOCQkJNgorI2RlZmluZSBNQklNX0VSUk9SX0NBTkNFTAkJCTcKKyNkZWZpbmUgTUJJ
TV9FUlJPUl9NQVhfVFJBTlNGRVIJCQk4CisJdWludDMyX3QJCWVycjsKK30gX19wYWNrZWQ7CisK
K3N0cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRy
OworCWludDMyX3QJCQlzdGF0dXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfY21k
ZG9uZSB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9mcmFnaGRyCWZy
YWc7CisJdWludDhfdAkJCWRldmlkW01CSU1fVVVJRF9MRU5dOworCXVpbnQzMl90CQljaWQ7CQkv
KiBjb21tYW5kIGlkICovCisJaW50MzJfdAkJCXN0YXR1czsKKwl1aW50MzJfdAkJaW5mb2xlbjsK
Kwl1aW50OF90CQkJaW5mb1tdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIE1lc3NhZ2VzIGFuZCBj
b21tYW5kcyBmb3IgTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1QKKyAqLworI2RlZmluZSBNQklNX0NJ
RF9ERVZJQ0VfQ0FQUwkJCQkxCisjZGVmaW5lIE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RB
VFVTCQkyCisjZGVmaW5lIE1CSU1fQ0lEX1JBRElPX1NUQVRFCQkJCTMKKyNkZWZpbmUgTUJJTV9D
SURfUElOCQkJCQk0CisjZGVmaW5lIE1CSU1fQ0lEX1BJTl9MSVNUCQkJCTUKKyNkZWZpbmUgTUJJ
TV9DSURfSE9NRV9QUk9WSURFUgkJCQk2CisjZGVmaW5lIE1CSU1fQ0lEX1BSRUZFUlJFRF9QUk9W
SURFUlMJCQk3CisjZGVmaW5lIE1CSU1fQ0lEX1ZJU0lCTEVfUFJPVklERVJTCQkJOAorI2RlZmlu
ZSBNQklNX0NJRF9SRUdJU1RFUl9TVEFURQkJCQk5CisjZGVmaW5lIE1CSU1fQ0lEX1BBQ0tFVF9T
RVJWSUNFCQkJCTEwCisjZGVmaW5lIE1CSU1fQ0lEX1NJR05BTF9TVEFURQkJCQkxMQorI2RlZmlu
ZSBNQklNX0NJRF9DT05ORUNUCQkJCTEyCisjZGVmaW5lIE1CSU1fQ0lEX1BST1ZJU0lPTkVEX0NP
TlRFWFRTCQkJMTMKKyNkZWZpbmUgTUJJTV9DSURfU0VSVklDRV9BQ1RJVkFUSU9OCQkJMTQKKyNk
ZWZpbmUgTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTgkJCTE1CisjZGVmaW5lIE1CSU1fQ0lEX0RF
VklDRV9TRVJWSUNFUwkJCTE2CisjZGVmaW5lIE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFX1NVQlND
UklCRV9MSVNUCQkxOQorI2RlZmluZSBNQklNX0NJRF9QQUNLRVRfU1RBVElTVElDUwkJCTIwCisj
ZGVmaW5lIE1CSU1fQ0lEX05FVFdPUktfSURMRV9ISU5UCQkJMjEKKyNkZWZpbmUgTUJJTV9DSURf
RU1FUkdFTkNZX01PREUJCQkJMjIKKyNkZWZpbmUgTUJJTV9DSURfSVBfUEFDS0VUX0ZJTFRFUlMJ
CQkyMworI2RlZmluZSBNQklNX0NJRF9NVUxUSUNBUlJJRVJfUFJPVklERVJTCQkJMjQKKworc3Ry
dWN0IG1iaW1fY2lkX3N1YnNjcmliZXJfcmVhZHlfaW5mbyB7CisjZGVmaW5lIE1CSU1fU0lNU1RB
VEVfTk9USU5JVElBTElaRUQJCTAKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9JTklUSUFMSVpFRAkJ
MQorI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVElOU0VSVEVECQkyCisjZGVmaW5lIE1CSU1fU0lN
U1RBVEVfQkFEU0lNCQkJMworI2RlZmluZSBNQklNX1NJTVNUQVRFX0ZBSUxVUkUJCQk0CisjZGVm
aW5lIE1CSU1fU0lNU1RBVEVfTk9UQUNUSVZBVEVECQk1CisjZGVmaW5lIE1CSU1fU0lNU1RBVEVf
TE9DS0VECQkJNgorCXVpbnQzMl90CXJlYWR5OworCisJdWludDMyX3QJc2lkX29mZnM7CisJdWlu
dDMyX3QJc2lkX3NpemU7CisKKwl1aW50MzJfdAlpY2Nfb2ZmczsKKwl1aW50MzJfdAlpY2Nfc2l6
ZTsKKworI2RlZmluZSBNQklNX1NJTVVOSVFFSURfTk9ORQkJCTAKKyNkZWZpbmUgTUJJTV9TSU1V
TklRRUlEX1BST1RFQ1QJCQkxCisJdWludDMyX3QJaW5mbzsKKworCXVpbnQzMl90CW5vX3BuOwor
CXN0cnVjdCB7CisJCXVpbnQzMl90CW9mZnM7CisJCXVpbnQzMl90CXNpemU7CisJfQorCQkJcG5b
XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZSB7CisjZGVmaW5l
IE1CSU1fUkFESU9fU1RBVEVfT0ZGCQkJMAorI2RlZmluZSBNQklNX1JBRElPX1NUQVRFX09OCQkJ
MQorCXVpbnQzMl90CXN0YXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3JhZGlv
X3N0YXRlX2luZm8geworCXVpbnQzMl90CWh3X3N0YXRlOworCXVpbnQzMl90CXN3X3N0YXRlOwor
fSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BpbiB7CisjZGVmaW5lIE1CSU1fUElOX1RZ
UEVfTk9ORQkJCTAKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DVVNUT00JCQkxCisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfUElOMQkJCTIKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9QSU4yCQkJMworI2Rl
ZmluZSBNQklNX1BJTl9UWVBFX0RFVl9TSU1fUElOCQk0CisjZGVmaW5lIE1CSU1fUElOX1RZUEVf
REVWX0ZJUlNUX1NJTV9QSU4JCTUKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1BJTgkJ
NgorI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BJTgk3CisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4JOAorI2RlZmluZSBNQklNX1BJTl9UWVBF
X0NPUlBPUkFURV9QSU4JCTkKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9TVUJTSURZX0xPQ0sJCTEw
CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfUFVLMQkJCTExCisjZGVmaW5lIE1CSU1fUElOX1RZUEVf
UFVLMgkJCTEyCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfREVWX0ZJUlNUX1NJTV9QVUsJCTEzCisj
ZGVmaW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19QVUsJCTE0CisjZGVmaW5lIE1CSU1fUElOX1RZ
UEVfTkVUV09SS19TVUJTRVRfUFVLCTE1CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfU0VSVklDRV9Q
Uk9WSURFUl9QVUsJMTYKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVfUFVLCQkxNwor
CXVpbnQzMl90CXR5cGU7CisKKyNkZWZpbmUgTUJJTV9QSU5fT1BfRU5URVIJCQkwCisjZGVmaW5l
IE1CSU1fUElOX09QX0VOQUJMRQkJCTEKKyNkZWZpbmUgTUJJTV9QSU5fT1BfRElTQUJMRQkJCTIK
KyNkZWZpbmUgTUJJTV9QSU5fT1BfQ0hBTkdFCQkJMworCXVpbnQzMl90CW9wOworCXVpbnQzMl90
CXBpbl9vZmZzOworCXVpbnQzMl90CXBpbl9zaXplOworCXVpbnQzMl90CW5ld3Bpbl9vZmZzOwor
CXVpbnQzMl90CW5ld3Bpbl9zaXplOworI2RlZmluZSBNQklNX1BJTl9NQVhMRU4JMzIKKwl1aW50
OF90CQlkYXRhWzIgKiBNQklNX1BJTl9NQVhMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1i
aW1fY2lkX3Bpbl9pbmZvIHsKKwl1aW50MzJfdAl0eXBlOworCisjZGVmaW5lIE1CSU1fUElOX1NU
QVRFX1VOTE9DS0VECQkJMAorI2RlZmluZSBNQklNX1BJTl9TVEFURV9MT0NLRUQJCQkxCisJdWlu
dDMyX3QJc3RhdGU7CisJdWludDMyX3QJcmVtYWluaW5nX2F0dGVtcHRzOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG1iaW1fY2lkX3Bpbl9saXN0X2luZm8geworCXN0cnVjdCBtYmltX3Bpbl9kZXNj
IHsKKworI2RlZmluZSBNQklNX1BJTk1PREVfTk9UU1VQUE9SVEVECQkwCisjZGVmaW5lIE1CSU1f
UElOTU9ERV9FTkFCTEVECQkJMQorI2RlZmluZSBNQklNX1BJTk1PREVfRElTQUJMRUQJCQkyCisJ
CXVpbnQzMl90CW1vZGU7CisKKyNkZWZpbmUgTUJJTV9QSU5GT1JNQVRfVU5LTk9XTgkJCTAKKyNk
ZWZpbmUgTUJJTV9QSU5GT1JNQVRfTlVNRVJJQwkJCTEKKyNkZWZpbmUgTUJJTV9QSU5GT1JNQVRf
QUxQSEFOVU1FUklDCQkyCisJCXVpbnQzMl90CWZvcm1hdDsKKworCQl1aW50MzJfdAltaW5sZW47
CisJCXVpbnQzMl90CW1heGxlbjsKKwl9CisJCXBpbjEsCisJCXBpbjIsCisJCWRldl9zaW1fcGlu
LAorCQlmaXJzdF9kZXZfc2ltX3BpbiwKKwkJbmV0X3BpbiwKKwkJbmV0X3N1Yl9waW4sCisJCXN2
cF9waW4sCisJCWNvcnBfcGluLAorCQlzdWJzaWR5X2xvY2ssCisJCWN1c3RvbTsKK30gX19wYWNr
ZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9kZXZpY2VfY2FwcyB7CisjZGVmaW5lIE1CSU1fREVWVFlQ
RV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX0RFVlRZUEVfRU1CRURERUQJCQkxCisjZGVmaW5l
IE1CSU1fREVWVFlQRV9SRU1PVkFCTEUJCQkyCisjZGVmaW5lIE1CSU1fREVWVFlQRV9SRU1PVEUJ
CQkzCisJdWludDMyX3QJZGV2dHlwZTsKKworCXVpbnQzMl90CWNlbGxjbGFzczsJLyogdmFsdWVz
OiBNQklNX0NFTExVTEFSX0NMQVNTICovCisJdWludDMyX3QJdm9pY2VjbGFzczsKKwl1aW50MzJf
dAlzaW1jbGFzczsKKwl1aW50MzJfdAlkYXRhY2xhc3M7CS8qIHZhbHVlczogTUJJTV9EQVRBX0NM
QVNTICovCisJdWludDMyX3QJc21zY2FwczsKKwl1aW50MzJfdAljbnRybGNhcHM7CisJdWludDMy
X3QJbWF4X3Nlc3Npb25zOworCisJdWludDMyX3QJY3VzdGRhdGFjbGFzc19vZmZzOworCXVpbnQz
Ml90CWN1c3RkYXRhY2xhc3Nfc2l6ZTsKKworCXVpbnQzMl90CWRldmlkX29mZnM7CisJdWludDMy
X3QJZGV2aWRfc2l6ZTsKKworCXVpbnQzMl90CWZ3aW5mb19vZmZzOworCXVpbnQzMl90CWZ3aW5m
b19zaXplOworCisJdWludDMyX3QJaHdpbmZvX29mZnM7CisJdWludDMyX3QJaHdpbmZvX3NpemU7
CisKKwl1aW50MzJfdAlkYXRhW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfcmVn
aXN0cmF0aW9uX3N0YXRlIHsKKwl1aW50MzJfdAlwcm92aWRfb2ZmczsKKwl1aW50MzJfdAlwcm92
aWRfc2l6ZTsKKworI2RlZmluZSBNQklNX1JFR0FDVElPTl9BVVRPTUFUSUMJCTAKKyNkZWZpbmUg
TUJJTV9SRUdBQ1RJT05fTUFOVUFMCQkJMQorCXVpbnQzMl90CXJlZ2FjdGlvbjsKKwl1aW50MzJf
dAlkYXRhX2NsYXNzOworCisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsKKworc3RydWN0
IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZV9pbmZvIHsKKwl1aW50MzJfdAlud2Vycm9yOwor
CisJdWludDMyX3QJcmVnc3RhdGU7CS8qIHZhbHVlczogTUJJTV9SRUdJU1RFUl9TVEFURSAqLwor
CisjZGVmaW5lIE1CSU1fUkVHTU9ERV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX1JFR01PREVf
QVVUT01BVElDCQkJMQorI2RlZmluZSBNQklNX1JFR01PREVfTUFOVUFMCQkJMgorCXVpbnQzMl90
CXJlZ21vZGU7CisKKwl1aW50MzJfdAlhdmFpbGNsYXNzZXM7CS8qIHZhbHVlczogTUJJTV9EQVRB
X0NMQVNTICovCisJdWludDMyX3QJY3VyY2VsbGNsYXNzOwkvKiB2YWx1ZXM6IE1CSU1fQ0VMTFVM
QVJfQ0xBU1MgKi8KKworCXVpbnQzMl90CXByb3ZpZF9vZmZzOworCXVpbnQzMl90CXByb3ZpZF9z
aXplOworCisJdWludDMyX3QJcHJvdm5hbWVfb2ZmczsKKwl1aW50MzJfdAlwcm92bmFtZV9zaXpl
OworCisJdWludDMyX3QJcm9hbWluZ3R4dF9vZmZzOworCXVpbnQzMl90CXJvYW1pbmd0eHRfc2l6
ZTsKKworI2RlZmluZSBNQklNX1JFR0ZMQUdTX05PTkUJCQkwCisjZGVmaW5lIE1CSU1fUkVHRkxB
R1NfTUFOVUFMX05PVF9BVkFJTEFCTEUJMQorI2RlZmluZSBNQklNX1JFR0ZMQUdTX1BBQ0tFVFNF
UlZJQ0VfQVVUT0FUVEFDSAkyCisJdWludDMyX3QJcmVnZmxhZzsKKworCXVpbnQzMl90CWRhdGFb
XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2VydmljZSB7CisjZGVm
aW5lIE1CSU1fUEtUU0VSVklDRV9BQ1RJT05fQVRUQUNICQkwCisjZGVmaW5lIE1CSU1fUEtUU0VS
VklDRV9BQ1RJT05fREVUQUNICQkxCisJdWludDMyX3QJYWN0aW9uOworfSBfX3BhY2tlZDsKKwor
c3RydWN0IG1iaW1fY2lkX3BhY2tldF9zZXJ2aWNlX2luZm8geworCXVpbnQzMl90CW53ZXJyb3I7
CisKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX1VOS05PV04JCTAKKyNkZWZpbmUgTUJJ
TV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSElORwkJMQorI2RlZmluZSBNQklNX1BLVFNFUlZJQ0Vf
U1RBVEVfQVRUQUNIRUQJCTIKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0RFVEFDSElO
RwkJMworI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQJCTQKKwl1aW50MzJf
dAlzdGF0ZTsKKworCXVpbnQzMl90CWhpZ2hlc3RfZGF0YWNsYXNzOworCXVpbnQ2NF90CXVwbGlu
a19zcGVlZDsKKwl1aW50NjRfdAlkb3dubGlua19zcGVlZDsKK30gX19wYWNrZWQ7CisKK3N0cnVj
dCBtYmltX2NpZF9zaWduYWxfc3RhdGUgeworCXVpbnQzMl90CXJzc2k7CisJdWludDMyX3QJZXJy
X3JhdGU7CisJdWludDMyX3QJc3NfaW50dmw7CisJdWludDMyX3QJcnNzaV90aHI7CisJdWludDMy
X3QJZXJyX3RocjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9jb25uZWN0IHsKKwl1
aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9DT05ORUNUX0RFQUNUSVZBVEUJCTAK
KyNkZWZpbmUgTUJJTV9DT05ORUNUX0FDVElWQVRFCQkxCisJdWludDMyX3QJY29tbWFuZDsKKwor
I2RlZmluZSBNQklNX0FDQ0VTU19NQVhMRU4JCTIwMAorCXVpbnQzMl90CWFjY2Vzc19vZmZzOwor
CXVpbnQzMl90CWFjY2Vzc19zaXplOworCisjZGVmaW5lIE1CSU1fVVNFUl9NQVhMRU4JCTUxMAor
CXVpbnQzMl90CXVzZXJfb2ZmczsKKwl1aW50MzJfdAl1c2VyX3NpemU7CisKKyNkZWZpbmUgTUJJ
TV9QQVNTV0RfTUFYTEVOCQk1MTAKKwl1aW50MzJfdAlwYXNzd2Rfb2ZmczsKKwl1aW50MzJfdAlw
YXNzd2Rfc2l6ZTsKKworI2RlZmluZSBNQklNX0NPTVBSRVNTSU9OX05PTkUJCTAKKyNkZWZpbmUg
TUJJTV9DT01QUkVTU0lPTl9FTkFCTEUJCTEKKwl1aW50MzJfdAljb21wcmVzc2lvbjsKKworI2Rl
ZmluZSBNQklNX0FVVEhQUk9UX05PTkUJCTAKKyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9QQVAJCTEK
KyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9DSEFQCQkyCisjZGVmaW5lIE1CSU1fQVVUSFBST1RfTVND
SEFQCQkzCisJdWludDMyX3QJYXV0aHByb3Q7CisKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQ
RV9ERUZBVUxUCTAKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9JUFY0CTEKKyNkZWZpbmUg
TUJJTV9DT05URVhUX0lQVFlQRV9JUFY2CTIKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9J
UFY0VjYJMworI2RlZmluZSBNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjRBTkRWNgk0CisJdWludDMy
X3QJaXB0eXBlOworCisJdWludDhfdAkJY29udGV4dFtNQklNX1VVSURfTEVOXTsKKworCXVpbnQ4
X3QJCWRhdGFbTUJJTV9BQ0NFU1NfTUFYTEVOICsgTUJJTV9VU0VSX01BWExFTiArCisJCQkgICAg
IE1CSU1fUEFTU1dEX01BWExFTl07CisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9j
b25uZWN0X2luZm8geworCXVpbnQzMl90CXNlc3Npb25pZDsKKworI2RlZmluZSBNQklNX0FDVElW
QVRJT05fU1RBVEVfVU5LTk9XTgkJMAorI2RlZmluZSBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNU
SVZBVEVECQkxCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9BQ1RJVkFUSU5HCTIKKyNk
ZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVEVECTMKKyNkZWZpbmUgTUJJTV9B
Q1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVElORwk0CisJdWludDMyX3QJYWN0aXZhdGlvbjsKKwor
CXVpbnQzMl90CXZvaWNlOworCXVpbnQzMl90CWlwdHlwZTsKKwl1aW50OF90CQljb250ZXh0W01C
SU1fVVVJRF9MRU5dOworCXVpbnQzMl90CW53ZXJyb3I7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9jaWRfaXB2NF9lbGVtZW50IHsKKwl1aW50MzJfdAlwcmVmaXhsZW47CisJdWludDMyX3QJ
YWRkcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9pcHY2X2VsZW1lbnQgeworCXVp
bnQzMl90CXByZWZpeGxlbjsKKwl1aW50OF90CQlhZGRyWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0
cnVjdCBtYmltX2NpZF9pcF9jb25maWd1cmF0aW9uX2luZm8geworCXVpbnQzMl90CXNlc3Npb25p
ZDsKKworI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfQUREUklORk8JMHgwMDAxCisjZGVmaW5lIE1C
SU1fSVBDT05GX0hBU19HV0lORk8JCTB4MDAwMgorI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfRE5T
SU5GTwkJMHgwMDA0CisjZGVmaW5lIE1CSU1fSVBDT05GX0hBU19NVFVJTkZPCQkweDAwMDgKKwl1
aW50MzJfdAlpcHY0X2F2YWlsYWJsZTsKKwl1aW50MzJfdAlpcHY2X2F2YWlsYWJsZTsKKworCXVp
bnQzMl90CWlwdjRfbmFkZHI7CisJdWludDMyX3QJaXB2NF9hZGRyb2ZmczsKKwl1aW50MzJfdAlp
cHY2X25hZGRyOworCXVpbnQzMl90CWlwdjZfYWRkcm9mZnM7CisKKwl1aW50MzJfdAlpcHY0X2d3
b2ZmczsKKwl1aW50MzJfdAlpcHY2X2d3b2ZmczsKKworCXVpbnQzMl90CWlwdjRfbmRuc3NydjsK
Kwl1aW50MzJfdAlpcHY0X2Ruc3Nydm9mZnM7CisJdWludDMyX3QJaXB2Nl9uZG5zc3J2OworCXVp
bnQzMl90CWlwdjZfZG5zc3J2b2ZmczsKKworCXVpbnQzMl90CWlwdjRfbXR1OworCXVpbnQzMl90
CWlwdjZfbXR1OworCisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1i
aW1fY2lkX3BhY2tldF9zdGF0aXN0aWNzX2luZm8geworCXVpbnQzMl90CWluX2Rpc2NhcmRzOwor
CXVpbnQzMl90CWluX2Vycm9yczsKKwl1aW50NjRfdAlpbl9vY3RldHM7CisJdWludDY0X3QJaW5f
cGFja2V0czsKKwl1aW50NjRfdAlvdXRfb2N0ZXRzOworCXVpbnQ2NF90CW91dF9wYWNrZXRzOwor
CXVpbnQzMl90CW91dF9lcnJvcnM7CisJdWludDMyX3QJb3V0X2Rpc2NhcmRzOworfSBfX3BhY2tl
ZDsKKworCisjaWZkZWYgX0tFUk5FTAorCitzdHJ1Y3QgbWJpbV9kZXNjcmlwdG9yIHsKKwl1Qnl0
ZQliTGVuZ3RoOworCXVCeXRlCWJEZXNjcmlwdG9yVHlwZTsKKwl1Qnl0ZQliRGVzY3JpcHRvclN1
YnR5cGU7CisjZGVmaW5lIE1CSU1fVkVSX01BSk9SKHYpCSgoKHYpID4+IDgpICYgMHgwZikKKyNk
ZWZpbmUgTUJJTV9WRVJfTUlOT1IodikJKCh2KSAmIDB4MGYpCisJdVdvcmQJYmNkTUJJTVZlcnNp
b247CisJdVdvcmQJd01heENvbnRyb2xNZXNzYWdlOworCXVCeXRlCWJOdW1iZXJGaWx0ZXJzOwor
CXVCeXRlCWJNYXhGaWx0ZXJTaXplOworCXVXb3JkCXdNYXhTZWdtZW50U2l6ZTsKKwl1Qnl0ZQli
bU5ldHdvcmtDYXBhYmlsaXRpZXM7Cit9IF9fcGFja2VkOworCisvKgorICogTkNNIFBhcmFtZXRl
cnMKKyAqLworI2RlZmluZSBOQ01fR0VUX05UQl9QQVJBTUVURVJTCTB4ODAKKworc3RydWN0IG5j
bV9udGJfcGFyYW1ldGVycyB7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAlibU50YkZvcm1hdHNT
dXBwb3J0ZWQ7CisjZGVmaW5lIE5DTV9GT1JNQVRfTlRCMTYJMHgwMDAxCisjZGVmaW5lIE5DTV9G
T1JNQVRfTlRCMzIJMHgwMDAyCisJdURXb3JkCWR3TnRiSW5NYXhTaXplOworCXVXb3JkCXdOZHBJ
bkRpdmlzb3I7CisJdVdvcmQJd05kcEluUGF5bG9hZFJlbWFpbmRlcjsKKwl1V29yZAl3TmRwSW5B
bGlnbm1lbnQ7CisJdVdvcmQJd1Jlc2VydmVkMTsKKwl1RFdvcmQJZHdOdGJPdXRNYXhTaXplOwor
CXVXb3JkCXdOZHBPdXREaXZpc29yOworCXVXb3JkCXdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwor
CXVXb3JkCXdOZHBPdXRBbGlnbm1lbnQ7CisJdVdvcmQJd050Yk91dE1heERhdGFncmFtczsKK30g
X19wYWNrZWQ7CisKKy8qCisgKiBOQ00gRW5jb2RpbmcKKyAqLworI2RlZmluZSBNQklNX0hEUjE2
X0xFTglcCisJKHNpemVvZihzdHJ1Y3QgbmNtX2hlYWRlcjE2KSArIHNpemVvZihzdHJ1Y3QgbmNt
X3BvaW50ZXIxNikpCisjZGVmaW5lIE1CSU1fSERSMzJfTEVOCVwKKwkoc2l6ZW9mKHN0cnVjdCBu
Y21faGVhZGVyMzIpICsgc2l6ZW9mKHN0cnVjdCBuY21fcG9pbnRlcjMyKSkKKworc3RydWN0IG5j
bV9oZWFkZXIxNiB7CisjZGVmaW5lIE5DTV9IRFIxNl9TSUcJCTB4NDg0ZDQzNGUKKwl1RFdvcmQJ
ZHdTaWduYXR1cmU7CisJdVdvcmQJd0hlYWRlckxlbmd0aDsKKwl1V29yZAl3U2VxdWVuY2U7CisJ
dVdvcmQJd0Jsb2NrTGVuZ3RoOworCXVXb3JkCXdOZHBJbmRleDsKK30gX19wYWNrZWQ7CisKK3N0
cnVjdCBuY21faGVhZGVyMzIgeworI2RlZmluZSBOQ01fSERSMzJfU0lHCQkweDY4NmQ2MzZlCisJ
dURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdIZWFkZXJMZW5ndGg7CisJdVdvcmQJd1NlcXVl
bmNlOworCXVEV29yZAlkd0Jsb2NrTGVuZ3RoOworCXVEV29yZAlkd05kcEluZGV4OworfSBfX3Bh
Y2tlZDsKKworCisjZGVmaW5lIE1CSU1fTkNNX05USF9TSURTSElGVAkyNAorI2RlZmluZSBNQklN
X05DTV9OVEhfR0VUU0lEKHMpCSgoKHMpID4gTUJJTV9OQ01fTlRIX1NJRFNISUZUKSAmIDB4ZmYp
CisKK3N0cnVjdCBuY21fcG9pbnRlcjE2X2RncmFtIHsKKwl1V29yZAl3RGF0YWdyYW1JbmRleDsK
Kwl1V29yZAl3RGF0YWdyYW1MZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNtX3BvaW50ZXIx
NiB7CisjZGVmaW5lIE1CSU1fTkNNX05USDE2X0lQUwkgMHgwMDUzNTA0OQorI2RlZmluZSBNQklN
X05DTV9OVEgxNl9JU0lTRyhzKSAoKChzKSAmIDB4MDBmZmZmZmYpID09IE1CSU1fTkNNX05USDE2
X0lQUykKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMTZfU0lHKHMpCVwKKwkJKCgoKHMpICYgMHhmZikg
PDwgTUJJTV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNNX05USDE2X0lQUykKKwl1RFdvcmQJ
ZHdTaWduYXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAl3TmV4dE5kcEluZGV4OworCisJ
LyogTWluaW11bSBpcyB0d28gZGF0YWdyYW1zLCBidXQgY2FuIGJlIG1vcmUgKi8KKwlzdHJ1Y3Qg
bmNtX3BvaW50ZXIxNl9kZ3JhbSBkZ3JhbVsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY21f
cG9pbnRlcjMyX2RncmFtIHsKKwl1RFdvcmQJZHdEYXRhZ3JhbUluZGV4OworCXVEV29yZAlkd0Rh
dGFncmFtTGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jbV9wb2ludGVyMzIgeworI2RlZmlu
ZSBNQklNX05DTV9OVEgzMl9JUFMJMHgwMDczNzA2OQorI2RlZmluZSBNQklNX05DTV9OVEgzMl9J
U0lTRyhzKQlcCisJCSgoKHMpICYgMHgwMGZmZmZmZikgPT0gTUJJTV9OQ01fTlRIMzJfSVBTKQor
I2RlZmluZSBNQklNX05DTV9OVEgzMl9TSUcocykJCVwKKwkJKCgoKHMpICYgMHhmZikgPDwgTUJJ
TV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNNX05USDMyX0lQUykKKwl1RFdvcmQJZHdTaWdu
YXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAl3UmVzZXJ2ZWQ2OworCXVEV29yZAlkd05l
eHROZHBJbmRleDsKKwl1RFdvcmQJZHdSZXNlcnZlZDEyOworCisJLyogTWluaW11bSBpcyB0d28g
ZGF0YWdyYW1zLCBidXQgY2FuIGJlIG1vcmUgKi8KKwlzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9kZ3Jh
bSBkZ3JhbVsyXTsKK30gX19wYWNrZWQ7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNlbmRp
ZiAvKiBfTUJJTV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL21vZHVsZXMvdXNiL01ha2VmaWxlIGIv
c3lzL21vZHVsZXMvdXNiL01ha2VmaWxlCmluZGV4IDJkMTY2YTk1ZGMwMy4uYWM0ODM0NThlYTJh
IDEwMDY0NAotLS0gYS9zeXMvbW9kdWxlcy91c2IvTWFrZWZpbGUKKysrIGIvc3lzL21vZHVsZXMv
dXNiL01ha2VmaWxlCkBAIC00OSw3ICs0OSw3IEBAIFNVQkRJUiArPSAke19ydW19ICR7X3J1bn0g
JHtfcnVuZnd9ICR7X3VhdGh9IHVwZ3QgdXNpZSB1cmFsICR7X3p5ZH0gJHtfdXJ0d30KIFNVQkRJ
UiArPSBhdHAgY2Z1bWFzcyB1aGlkIHVoaWRfc25lcyB1a2JkIHVtcyB1ZGJwIHVlcCB3bXQgd3Nw
IHVnb2xkIHVsZWQgXAogCSAgdXNiaGlkCiBTVUJESVIgKz0gdWNvbSB1M2cgdWFyayB1YnNhIHVi
c2VyIHVjaGNvbSB1Y3ljb20gdWZvbWEgdWZ0ZGkgdWdlbnNhIHVpcGFxIHVscHQgXAotCSAgdW1j
dCB1bWNzIHVtb2RlbSB1bW9zY29tIHVwbGNvbSB1c2xjb20gdXZpc29yIHV2c2NvbQorCSAgdW1i
IHVtY3QgdW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxjb20gdXNsY29tIHV2aXNvciB1dnNjb20KIFNV
QkRJUiArPSBpMmN0aW55dXNiCiBTVUJESVIgKz0gY3AyMTEyCiBTVUJESVIgKz0gdWRsCmRpZmYg
LS1naXQgYS9zeXMvbW9kdWxlcy91c2IvdW1iL01ha2VmaWxlIGIvc3lzL21vZHVsZXMvdXNiL3Vt
Yi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMxNzU5
MmQ5NGRmYgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUK
QEAgLTAsMCArMSwzNSBAQAorIworIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSGFucyBQZXR0ZXIg
U2VsYXNreS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERB
TUFHRS4KKyMKKworUz0gICAgICR7U1JDVE9QfS9zeXMKKworLlBBVEg6ICRTL2Rldi91c2IvbmV0
CisKK0tNT0Q9CXVtYgorU1JDUz0Jb3B0X2J1cy5oIG9wdF91c2IuaCBkZXZpY2VfaWYuaCBidXNf
aWYuaCB1c2JfaWYuaCB1c2JkZXZzLmggXAorCWlmX3VtYi5jCisKKy5pbmNsdWRlIDxic2Qua21v
ZC5taz4KZGlmZiAtLWdpdCBhL3N5cy9uZXQvaWZfdHlwZXMuaCBiL3N5cy9uZXQvaWZfdHlwZXMu
aAppbmRleCBiMDY5MmFmNjkzMDguLjFkMTdlNWMwOTgxMyAxMDA2NDQKLS0tIGEvc3lzL25ldC9p
Zl90eXBlcy5oCisrKyBiL3N5cy9uZXQvaWZfdHlwZXMuaApAQCAtMjU0LDYgKzI1NCw3IEBAIHR5
cGVkZWYgZW51bSB7CiAJSUZUX1BGTE9HCT0gMHhmNiwJCS8qIFBGIHBhY2tldCBmaWx0ZXIgbG9n
Z2luZyAqLwogCUlGVF9QRlNZTkMJPSAweGY3LAkJLyogUEYgcGFja2V0IGZpbHRlciBzeW5jaHJv
bml6YXRpb24gKi8KIAlJRlRfV0lSRUdVQVJECT0gMHhmOCwJCS8qIFdpcmVHdWFyZCB0dW5uZWwg
Ki8KKwlJRlRfTUJJTQk9IDB4ZjksCQkvKiBNb2JpbGUgQnJvYWRiYW5kIEludGVyZmFjZSBNb2Rl
bCAqLwogfSBpZlR5cGU7CiAKIC8qCmRpZmYgLS1naXQgYS9zeXMvc3lzL3NvY2tpby5oIGIvc3lz
L3N5cy9zb2NraW8uaAppbmRleCA4MjRiNzdlNTdhMTcuLmNmNjEyMDc5YzJmMyAxMDA2NDQKLS0t
IGEvc3lzL3N5cy9zb2NraW8uaAorKysgYi9zeXMvc3lzL3NvY2tpby5oCkBAIC0xNDcsNCArMTQ3
LDggQEAKICNkZWZpbmUJU0lPQ1NJRkNBUE5WCV9JT1coJ2knLCAxNTUsIHN0cnVjdCBpZnJlcSkJ
Lyogc2V0IElGIGZlYXR1cmVzICovCiAjZGVmaW5lCVNJT0NHSUZDQVBOVglfSU9XUignaScsIDE1
Niwgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgZmVhdHVyZXMgKi8KIAorI2RlZmluZQlTSU9DR1VN
QklORk8JX0lPV1IoJ2knLCAxNTcsIHN0cnVjdCBpZnJlcSkJLyogZ2V0IE1CSU0gaW5mbyAqLwor
I2RlZmluZQlTSU9DU1VNQlBBUkFNCSBfSU9XKCdpJywgMTU4LCBzdHJ1Y3QgaWZyZXEpCS8qIHNl
dCBNQklNIHBhcmFtICovCisjZGVmaW5lCVNJT0NHVU1CUEFSQU0JX0lPV1IoJ2knLCAxNTksIHN0
cnVjdCBpZnJlcSkJLyogZ2V0IE1CSU0gcGFyYW0gKi8KKwogI2VuZGlmIC8qICFfU1lTX1NPQ0tJ
T19IXyAqLwotLSAKMi40NS4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255103</attachid>
            <date>2024-11-11 17:33:23 +0000</date>
            <delta_ts>2024-11-11 17:33:23 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>150154</size>
            <attacher name="Pierre Pronchery">pierre</attacher>
            
              <data encoding="base64">Y29tbWl0IDBlNTNiZmI3OGU3OWExOGJmZDlmNTM4MjMyMGM1ODk4MmZkMDhlNWQKQXV0aG9yOiBQ
aWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+CkRhdGU6ICAgTW9uIEFwciAyOSAy
MDoyMDo1NiAyMDI0ICswMjAwCgogICAgSW50cm9kdWNlIHRoZSBVU0IgdW1iKDQpIG5ldHdvcmsg
ZHJpdmVyCiAgICAKICAgIFRoaXMgaW5jbHVkZXM6CiAgICAKICAgICogVGhlIHVtYig0KSBrZXJu
ZWwgZHJpdmVyCiAgICAqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wKCmRpZmYgLS1naXQg
YS9zYmluL01ha2VmaWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCA3OTAxMTJiMDVmNmYuLjVlNWE4
OTQzYzY3YSAxMDA2NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2VmaWxlCkBA
IC02Myw2ICs2Myw3IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lzY3RsIFwK
IAl0dW5lZnMgXAorCXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9ICJubyIg
fHwgJHtNS19JTkVUNn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFrZWZpbGUg
Yi9zYmluL3VtYmN0bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjM1YWZiMWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3RsL01ha2Vm
aWxlCkBAIC0wLDAgKzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91c2IvbmV0
CisKK1BST0c9CXVtYmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisKKy5pbmNs
dWRlIDxic2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44IGIvc2Jp
bi91bWJjdGwvdW1iY3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4yOGQ4MjBkMjY0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJjdGwuOApA
QCAtMCwwICsxLDE3MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIw
MTggYnkgUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUg
bWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworLlwi
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisuXCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5cIiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKy5cIiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisuXCIg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HCisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisuXCIKKy5cIiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1OjM1OjIw
IHNldmFuIEV4cCAkCisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0ZTogW1Ro
dSBBdWcgMzEgMTA6NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisuRHQgVU1C
Q1RMIDgKKy5PcworLlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNldCBNQklN
IGNlbGx1bGFyIG1vZGVtIGludGVyZmFjZSBwYXJhbWV0ZXJzICg0Ry9MVEUpCisuU2ggU1lOT1BT
SVMKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9w
IEFyIHZhbHVlCisuQXIgLi4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBj
b25maWctZmlsZQorLkFyIGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0g
QXIgZm9ybWF0CisuQXIgaWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0
cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVY
WFggLW9mZnNldCBpbmRlbnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNv
bmZpZy1maWxlCitmb3IKKy5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWly
cywgb25lIHBlciBsaW5lLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29t
bWFuZCBsaW5lLgorVGhpcyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBu
b3QgcGFzc2VkIGFzIGNvbW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcg
d2l0aCAjIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBG
bCBtIEFyIGZvcm1hdAorRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIg
Zm9ybWF0CitzcGVjaWZpZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwK
Ky5QcAorVGhlCisuWHIgdW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRp
dGlvbmFsIGFyZ3VtZW50cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0
aW5ncyB0aGF0IGNhbiBiZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBt
YXkgYmUgY3JlZGVudGlhbHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVz
LgorVGhlCisuTm0KK3V0aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBz
ZXR0aW5ncywgb3IgYWRqdXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitG
b3Igd2hhdGV2ZXIgaW50ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBh
cmFtZXRlcgorLkFyIGlmbmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGlu
dGVyZmFjZSBmb3Igd2hpY2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRp
c3BsYXllZC4KK1VzZQorLlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUg
d2hpY2ggaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0
ZXIgaXMgZ2l2ZW4sCisuTm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IK
Ky5BciBpZm5hbWUKK2FuZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIg
aXMgc3VwcGxpZWQsIHN1cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUg
Y29tbWFuZCB3b3JrcyBpbgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBx
dWlldGx5LCB1bmxlc3MgdGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2gg
d2lsbCBjYXVzZSBhIGZpbmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBh
Ym92ZSBvbmNlIGFsbCBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBh
cmFtZXRlcnMgY3VycmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9
IE5zIEVtIGFjY2Vzcy1wb2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgor
Lkl0IEFyIHVzZXJuYW1lIE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0
bworLkVtIHVzZXJuYW1lIC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQK
K1NldCB0aGUgcGFzc3dvcmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBO
cyBFbSBwaW4tY29kZQorRW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsg
TnMgXCY9IE5zIEVtIHB1ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0
IEFyIHJvYW1pbmcKK0FsbG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFy
IC1yb2FtaW5nCitEZW55IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2gg
RVhBTVBMRVMKKy5CZCAtbGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1v
ZGUgYXV0b21hdGljLCByZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1O
ZXQiLCBkYXRhY2xhc3MgTFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQy
Iiwgcm9hbWluZyAiIiAoZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAw
MAorCWZpcm13YXJlICJNQklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVk
CisuUHAKK0Rpc3BsYXkgdGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVt
YmN0bCB1bWIwIGFwbiBvcGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQg
bW9iaWxlCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9y
IHVtYjAgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAv
ZGV2L3N0ZGluIHVtYjAgPDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJl
IHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VF
IEFMU08KKy5YciBuZXRzdGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5Y
ciBpZndhdGNoZCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFy
ZWQgaW4KKy5OeCA5LjAgLgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5
CisuQW4gUGllcnJlIFByb25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwu
YyBiL3NiaW4vdW1iY3RsL3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uODgxNjdiYWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1i
Y3RsLmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8K
Ky8qCisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hv
cmJlbkBkZWZvcmEub3JnPiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVC
U0QgdXBkYXRlcykKKyAqCisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hl
cnkgPHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwK
KyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
Y29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUg
PHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29j
a2lvLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cisj
aW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVy
cm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91
bWJyZWcuaCIKKworCisvKiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3Zh
bGRlc2NyIF91bWJfYWN0c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBU
SU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtd
ID0KKwlNQklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1
bWJfdmFsZGVzY3IgX3VtYl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9O
UzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0K
KwlNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
dW1iX3ZhbGRlc2NyIF91bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBU
SU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0K
KwlVTUJfSU5URVJOQUxfU1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0
IHVtYl92YWxkZXNjciBfdW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQs
ICJQSU4gcmVxdWlyZWQifSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwK
Kwl7IFVNQl9QVUtfUkVRVUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQorewor
CXsgTUJJTV9SRUdNT0RFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FV
VE9NQVRJQywgImF1dG9tYXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwi
IH0sCisJeyAwLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IF91bWJfYmVyW10gPQoreworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJ
eyBVTUJfQkVSX1ZFUllHT09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29v
ZCIgfSwKKwl7IFVNQl9CRVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVt
IiB9LAorCXsgVU1CX0JFUl9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5
IGJhZCIgfSwKKwl7IFVNQl9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7
IDAsIE5VTEwgfQorfTsKKworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3Rv
X3V0ZjE2KGNvbnN0IGNoYXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOwor
c3RhdGljIGludCBfZXJyb3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0
YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFy
Z2MsIGNoYXIgKiBhcmd2W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAq
IGlmbmFtZSwgY2hhciBjb25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMg
aW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0
LCBpbnQgdmVyYm9zZSk7CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0
ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9n
YXRld2F5KGNoYXIgY29uc3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNo
YXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBf
dW1iY3RsX2lvY3RsKGNoYXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0LAorCQlzdHJ1Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChj
aGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBh
cmdjLCBjaGFyICogYXJndltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7Citz
dGF0aWMgaW50IF91c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZf
dCAqIGluLCBpbnQgaW5sZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3Qg
KiBpbiwgaW50IGlubGVuLCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5j
dGlvbnMgKi8KKy8qIGNoYXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBP
cGVuQlNEJ3MgaWZjb25maWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3Qg
Y2hhciAqIGluLCB1aW50MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7
CisJdWludDE2X3QgYzsKKworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09
ICdcMCcpIHsKKwkJCS8qCisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBi
dXQgemVybyBvdXQgdGhlCisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0
KG91dCwgMCwgb3V0bGVuKTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXpl
b2YoKm91dCkpCisJCQlyZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiAr
PSBzaXplb2YoKm91dCk7CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8q
IGVycm9yICovCitzdGF0aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0
LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJ
dmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2
YV9lbmQoYXApOworCWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisv
KiB1bWJjdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQg
dmVyYm9zZSwgaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBp
ZnJlcSBpZnI7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIg
dW1icDsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJ
bWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZu
YW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0
KCZ1bWJwLCAwLCBzaXplb2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1i
cDsKKwkJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAh
PSAwCisJCQkJfHwgX3VtYmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAor
CQkJCXx8IF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlm
cikgIT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYo
YXJnYyA9PSAwIHx8IHZlcmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3Qp
JnVtYmk7CisJCWlmKF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZy
KSAhPSAwKQorCQl7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3Rs
X2luZm8oaWZuYW1lLCAmdW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4g
X2Vycm9yKDIsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7
Cit9CisKKworLyogdW1iY3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBj
b25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0
ICogZmlsZW5hbWUpOworCitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZu
YW1lLCBjaGFyIGNvbnN0ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlz
dHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVt
Yl9pbmZvIHVtYmk7CisKKwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVy
biAyOworCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25h
bWUsIGlmbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRk
cl90KSZ1bWJwOworCW1lbXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3Rs
X2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxl
X3BhcnNlKGlmbmFtZSwgJnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3Rs
KGlmbmFtZSwgZmQsIFNJT0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7
CisJCXJldHVybiAyOworCX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9
IChjYWRkcl90KSZ1bWJpOworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1C
SU5GTywgJmlmcikgIT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0K
KwkJX3VtYmN0bF9pbmZvKGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkK
KwkJcmV0dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5h
bWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1l
KQoreworCWludCByZXQgPSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVf
dCBsZW47CisJaW50IGk7CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5V
TEwsIE5VTEwgfTsKKwljaGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIp
KSA9PSBOVUxMKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJy
b3IoZXJybm8pKTsKKwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkK
Kwl7CisJCWlmKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYp
IC0gMV0gPSAnXDAnOworCQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYo
YnVmW2xlbiAtIDFdICE9ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMi
LCBmaWxlbmFtZSwKKwkJCQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0
YyhmcCkpICE9IEVPRiAmJiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVm
W2xlbiAtIDFdID0gJ1wwJzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5V
TEwpCisJCXsKKwkJCXRva2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UK
KwkJCXRva2Vuc1sxXSA9IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAs
IChwICE9IE5VTEwpID8gMiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZl
b2YoZnApOworCWlmKGZjbG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIs
ICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQor
CisKKy8qIHVtYmN0bF9kdW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0
ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7
CisJc3RydWN0IGlmcmVxIGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVy
Ym9zZTsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJ
bWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZu
YW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVt
Ymk7CisJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9
IDApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0g
MCkKKwkJcmV0dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykp
OworCWlmKHN0cm5jYXNlY21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1
bXBfanNvbihpZm5hbWUsICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBV
bnN1cHBvcnRlZCBmb3JtYXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0
bF9kdW1wX2pzb24gKi8KK3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3Qg
KiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJ
cHJpbnRmKCJ7IikKKyNkZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09O
X1NFUAlwcmludGYoIiwgIikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQor
I2RlZmluZSBKU09OX0FSUkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5H
KGtleSwgdmFsKQlwcmludGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpT
T05fSU5UKGtleSwgdmFsKQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUg
SlNPTl9VTE9ORyhrZXksIHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2Rl
ZmluZSBKU09OX0JPT0woa2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/
InRydWUiOiJmYWxzZSIpCisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjog
bnVsbCIsIGtleSkKKyNkZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtl
eSkKKworI2RlZmluZSBKU09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wi
OiBcIiIsIGtleSksXAorCQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikp
CisKKyNkZWZpbmUgSlNPTl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09O
X1NUUklORyhrZXksIHZhbCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05V
TExfV0VNUFRZKGtleSwgdmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wK
KwkJCQkJSlNPTl9XU1RSSU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkK
KworCUpTT05fU1RBUlQ7CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNP
Tl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0
ZSwgdW1iaS0+c3RhdGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0
dXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlK
U09OX1NFUDsKKwlKU09OX0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1w
dHNfbGVmdCk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1i
X3ZhbDJkZXNjcihfdW1iX2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7
CisJSlNPTl9OVUxMX0VNUFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3Rh
dGUsIHVtYmktPnNpbV9zdGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2lt
LXJlZ2lzdHJhdGlvbiIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3Rh
dGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9k
ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9T
RVA7CisJSlNPTl9JTlQoIm5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9T
RVA7CisJSlNPTl9OVUxMX0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJf
cGt0c3RhdGUsIHVtYmktPnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VN
UFRZKCJzdXBwb3J0ZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNz
LCB1bWJpLT5zdXBwb3J0ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZ
KCJwcmVmZXJyZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1
bWJpLT5wcmVmZXJyZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJv
ZmZlcmVkLWRhdGFjbGFzc2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+
aGlnaGVzdGNsYXNzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3Mi
LCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09O
X1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJf
UFJPVklERVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhv
bmUtbnVtYmVyIiwgdW1iaS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJ
SlNPTl9OVUxMX1dFTVBUWSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklC
RVJJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1i
aS0+aWNjaWQsIFVNQl9JQ0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9h
bWluZy1vbiIsIHVtYmktPmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExf
V0VNUFRZKCJyb2FtaW5nLXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRf
TUFYTEVOKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJp
LT5kZXZpZCwgVU1CX0RFVklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBU
WSgiZmlybXdhcmUiLCB1bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NF
UDsKKwlKU09OX05VTExfV0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5G
T19NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1u
YW1lIiwgdW1iaS0+YXBuLCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxM
X1dFTVBUWSgidXNlcm5hbWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7
CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29y
ZCwgVU1CX1BBU1NXT1JEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1
bWJpLT5yc3NpKTsKKwlKU09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJp
LT5iZXIpOworCUpTT05fU0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19y
YWRpb19vbik7CisJSlNPTl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3
X3JhZGlvX29uKTsKKwlKU09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJp
LT51cGxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVk
IiwgdW1iaS0+ZG93bmxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRu
cyIpOworCUpTT05fQVJSQVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2Vy
dmVycyBpbiB0aGUgSlNPTiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1
X2ludDMyX3QJCWlwdjRkbnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMg
aXMgZWl0aGVyIG9mIG1heGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQn
cyBtZW1zZXQgdG8gMCkKKwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisK
Ky8qIHVtYmN0bF9nYXRld2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNv
bnN0ICogaWZuYW1lKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBz
b2NrYWRkcl9pbiAqIHNpbjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJ
cmV0dXJuIDI7CisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5p
ZnJfbmFtZSwgaWZuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0
bChpZm5hbWUsIGZkLCBTSU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZk
KTsKKwkJcmV0dXJuIDI7CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlm
cl9kc3RhZGRyOworCXByaW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJ
aWYoY2xvc2UoZmQpICE9IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwg
c3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLwor
c3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJf
aW5mbyAqIHVtYmkpCit7CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiAr
IDFdOworCWNoYXIgcG5bVU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VN
Ql9ST0FNSU5HVEVYVF9NQVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFd
OworCWNoYXIgZndpbmZvW1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1C
X0hXSU5GT19NQVhMRU4gKyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBV
TUJfUFJPVklERVJOQU1FX01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsK
KwlfdXRmMTZfdG9fY2hhcih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9m
KHBuKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhU
X01BWExFTiwKKwkJCXJvYW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIo
dW1iaS0+YXBuLCBVTUJfQVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3Rv
X2NoYXIodW1iaS0+ZndpbmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndp
bmZvKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwg
aHdpbmZvLCBzaXplb2YoaHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMs
IHJlZ2lzdHJhdGlvbiAlc1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMs
IHNpZ25hbCAlc1xuIgorCQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIg
KCVzKVxuIgorCQkJIlx0QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAi
XG4iCisJCQkiXHRmaXJtd2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFt
ZSwgdW1iX3ZhbDJkZXNjcihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRl
c2NyKF91bWJfcmVnbW9kZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJf
cmVnc3RhdGUsIHVtYmktPnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91
bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2Jl
ciwgdW1iaS0+YmVyKSwgcG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJh
bGxvd2VkIiA6ICJkZW5pZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRv
d25saW5rX3NwZWVkLAorCQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAq
Lworc3RhdGljIHZvaWQgX3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sK
KwkvKiBYWFggTm90ZSB0byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmln
aW5hbGx5OgorCSAqIGRvCisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8g
KGNoYXIpaHRvbGUxNigqaW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9s
ZTE2KCooaW4rKykpICE9ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFu
IGVmZm9ydCB0byByZXVzZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRm
MTZfdG9fY2hhciBpbnN0ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRm
MTZfdG9fY2hhcihpbiwgaW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOwor
CXByaW50ZigiJXMiLCBidWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQg
X3VtYmN0bF9pb2N0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdCwKKwkJc3RydWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0
LCBpZnIpICE9IDApCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVy
cm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2Fs
bGJhY2tzICovCitzdGF0aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9w
YXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFy
IGNvbnN0ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMg
aW50IF9zZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBj
aGFyIGNvbnN0ICopOworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1
bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIg
Y29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBp
bnQgX3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIg
KiwKKwkJY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBj
b25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0
aWMgaW50IF91bWJjdGxfc2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1l
dGVyICogdW1icCwKKwkJaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJewor
CQljaGFyIGNvbnN0ICogbmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJ
CQlzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVy
OworCX0gY2FsbGJhY2tzW10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAi
dXNlcm5hbWUiLCBfc2V0X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNz
d29yZCwgMSB9LAorCQl7ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1
aywgMSB9LAorCQl7ICJyb2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1y
b2FtaW5nIiwgX3NldF9yb2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBq
OworCisJZm9yKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6
ZW9mKGNhbGxiYWNrcykgLyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChh
cmd2W2ldLCBjYWxsYmFja3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nb
al0ucGFyYW1ldGVyICYmIGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIl
czogSW5jb21wbGV0ZSIKKwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNh
bGxiYWNrc1tqXS5jYWxsYmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBh
cmFtZXRlcgorCQkJCQkJCT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOwor
CQkJCWlmKGNhbGxiYWNrc1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJaWYoaiA9PSBzaXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJ
CXJldHVybiBfZXJyb3IoLTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFt
ZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQorewor
CXVtYnAtPmFwbmxlbiA9IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1i
cC0+YXBuKSk7CisJaWYodW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+
IHNpemVvZih1bWJwLT5hcG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1l
LCAiQVBOIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2Vy
bmFtZShjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJ
CWNoYXIgY29uc3QgKiB1c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3Rv
X3V0ZjE2KHVzZXJuYW1lLCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFt
ZSkpOworCWlmKHVtYnAtPnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2Vy
bmFtZWxlbiA+IHNpemVvZih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIl
czogJXMiLCBpZm5hbWUsICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50IF9zZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9w
YXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFz
c3dvcmRsZW4gPSBfY2hhcl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlz
aXplb2YodW1icC0+cGFzc3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8
IChzaXplX3QpdW1icC0+cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQly
ZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1l
LCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJ
dW1icC0+aXNfcHVrID0gMDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAt
PnBpbmxlbiA9IF9jaGFyX3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGlu
KSk7CisJaWYodW1icC0+cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBz
aXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwg
IlBJTiBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9w
dWsoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQlj
aGFyIGNvbnN0ICogcHVrKQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklN
X1BJTl9PUF9FTlRFUjsKKwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAt
PnBpbiwgc2l6ZW9mKHVtYnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVf
dCl1bWJwLT5waW5sZW4gPiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwg
IiVzOiAlcyIsIGlmbmFtZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVj
dCB1bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9p
ZCkgaWZuYW1lOworCSh2b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZu
YW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQp
Cit7CisJKHZvaWQpIGlmbmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9
IDA7CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBf
dW1iY3RsX3NvY2tldCh2b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9J
TkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAl
cyIsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitz
dGF0aWMgaW50IF91c2FnZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZu
YW1lIFtwYXJhbWV0ZXIgW3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZp
Zy1maWxlIGlmbmFtZVxuIgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVt
YmN0bCAtbSBmb3JtYXQgaWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFy
ZSBtdXR1YWxseSBleGNsdXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5c
biIsCisJCQlzdGRlcnIpOworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8K
K3N0YXRpYyB2b2lkIF91dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hh
ciAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxl
biA+IDApIHsKKwkJYyA9IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09
IDAgfHwgLS1vdXRsZW4gPT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0
ICovCisJCQkqb3V0ID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWko
YykgPyAoY2hhciljIDogJz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBt
YWluICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwlj
aGFyIGNvbnN0ICogZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxM
OworCWludCBnYXRld2F5ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdl
dG9wdChhcmdjLCBhcmd2LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJ
Y2FzZSAnZic6CisJCQkJZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJ
CQlnYXRld2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0g
TlVMTDsKKwkJCQlmb3JtYXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOwor
CQkJY2FzZSAnbSc6CisJCQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsK
KwkJCQlnYXRld2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2Ur
KzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJ
aWYob3B0aW5kID09IGFyZ2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBO
VUxMKQorCXsKKwkJaWYob3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOwor
CQlyZXR1cm4gX3VtYmN0bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOwor
CX0KKwlpZihmb3JtYXQgIT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJ
CXJldHVybiBfdXNhZ2UoKTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZv
cm1hdCwgdmVyYm9zZSk7CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9
IGFyZ2MpCisJCQlyZXR1cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJn
dltvcHRpbmRdKTsKKwl9CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBh
cmdjIC0gb3B0aW5kIC0gMSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBh
L3NoYXJlL21hbi9tYW40L01ha2VmaWxlIGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXgg
YWQxY2Y1ZGQzNzg1Li4zNGIzNmIyYjA5M2IgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L01h
a2VmaWxlCisrKyBiL3NoYXJlL21hbi9tYW40L01ha2VmaWxlCkBAIC0xMDQ1LDYgKzEwNDUsNyBA
QCBNQU4rPQlcCiAJdWxlZC40IFwKIAl1bHB0LjQgXAogCXVtYXNzLjQgXAorCXVtYi40IFwKIAl1
bWNzLjQgXAogCXVtY3QuNCBcCiAJdW1vZGVtLjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21h
bjQvdW1iLjQgYi9zaGFyZS9tYW4vbWFuNC91bWIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmEwNTVmOWU2ZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21h
bi9tYW40L3VtYi40CkBAIC0wLDAgKzEsOTAgQEAKKy5cIiAkTmV0QlNEOiB1bWIuNCx2IDEuNCAy
MDE5LzA4LzMwIDA5OjIyOjE3IHdpeiBFeHAgJAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE2
IGdlbnVhIG1iSAorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k
IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRoIG9yIHdp
dGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorLlwi
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFs
bCBjb3BpZXMuCisuXCIKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQg
VEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FSRCBUTyBU
SElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IKKy5cIiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNVTFRJTkcg
RlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisuXCIgQUNU
SU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJ
U0lORyBPVVQgT0YKKy5cIiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN
QU5DRSBPRiBUSElTIFNPRlRXQVJFLgorLlwiCisuRGQgQXVndXN0IDI0LCAyMDE5CisuRHQgVU1C
IDQKKy5PcworLlNoIE5BTUUKKy5ObSB1bWIKKy5OZCBVU0IgTW9iaWxlIEJyb2FkYmFuZCBJbnRl
cmZhY2UgTW9kZWwgKE1CSU0pCisuU2ggU1lOT1BTSVMKKy5DZCAidW1iKiAgYXQgdWh1Yj8gcG9y
dD8iCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBm
b3IgVVNCIE1CSU0gZGV2aWNlcy4KKy5QcAorTUJJTSBkZXZpY2VzIGVzdGFibGlzaCBjb25uZWN0
aW9ucyB2aWEgY2VsbHVsYXIgbmV0d29ya3Mgc3VjaCBhcworR1BSUywgVU1UUywgYW5kIExURS4K
K1RoZXkgYXBwZWFyIGFzIGEgcmVndWxhciBwb2ludC10by1wb2ludCBuZXR3b3JrIGludGVyZmFj
ZSwKK3RyYW5zcG9ydGluZyByYXcgSVAgZnJhbWVzLgorLlBwCitSZXF1aXJlZCBjb25maWd1cmF0
aW9uIHBhcmFtZXRlcnMgbGlrZSBQSU4gYW5kIEFQTiBoYXZlIHRvIGJlIHNldAord2l0aAorLlhy
IHVtYmN0bCA4IC4KK09uY2UgdGhlIFNJTSBjYXJkIGhhcyBiZWVuIHVubG9ja2VkIHdpdGggdGhl
IGNvcnJlY3QgUElOLCBpdAord2lsbCByZW1haW4gaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgTUJJ
TSBkZXZpY2UgaXMgcG93ZXItY3ljbGVkLgorSW4gY2FzZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3Rl
ZCB0byBhbiAiYWx3YXlzLW9uIiBVU0IgcG9ydCwKK2l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25u
ZWN0IHRvIGEgcHJvdmlkZXIgd2l0aG91dCBlbnRlcmluZyB0aGUKK1BJTiBhZ2FpbiBldmVuIGlm
IHRoZSBzeXN0ZW0gd2FzIHJlYm9vdGVkLgorLlNoIEhBUkRXQVJFCitUaGUgZm9sbG93aW5nIGRl
dmljZXMgc2hvdWxkIHdvcms6CisuUHAKKy5CbCAtdGFnIC13aWR0aCBEcyAtb2Zmc2V0IGluZGVu
dCAtY29tcGFjdAorLkl0IEVyaWNzc29uIEg1MzIxZ3cgYW5kIE41MzIxZ3cKKy5JdCBGaWJvY29t
IEw4MzEtRUFVCisuSXQgTWVkaW9uIE1vYmlsZSBTNDIyMiAoTWVkaWFUZWsgT0VNKQorLkl0IFNp
ZXJyYSBXaXJlbGVzcyBFTTczNDUKKy5JdCBTaWVycmEgV2lyZWxlc3MgRU03NDU1CisuSXQgU2ll
cnJhIFdpcmVsZXNzIEVNODgwNQorLkl0IFNpZXJyYSBXaXJlbGVzcyBNQzgzMDUKKy5FbAorLlNo
IFNFRSBBTFNPCisuWHIgaW50cm8gNCAsCisuWHIgbmV0aW50cm8gNCAsCisuWHIgdXNiIDQgLAor
LlhyIGlmY29uZmlnLmlmIDUgLAorLlhyIGlmY29uZmlnIDggLAorLlhyIHVtYmN0bCA4CisuUnMK
Ky4lVCAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgQ29tbXVuaWNhdGlvbnMgQ2xhc3MgU3ViY2xhc3Mg
U3BlY2lmaWNhdGlvbiBmb3IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwiCisuJVUg
aHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVy
cmF0YTFfMDczMDEzLnppcAorLlJlCisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RldmljZSBkcml2
ZXIgZmlyc3QgYXBwZWFyZWQgaW4KKy5PeCA2LjAKK2FuZAorLk54IDkuMCAuCisuU2ggQVVUSE9S
UworLkFuIC1ub3NwbGl0CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gR2Vy
aGFyZCBSb3RoIEFxIE10IGdlcmhhcmRAb3BlbmJzZC5vcmcKK2FuZCBwb3J0ZWQgZnJvbQorLk94
CitieQorLkFuIFBpZXJyZSBQcm9uY2hlcnkgQXEgTXQga2hvcmJlbkBkZWZvcmEub3JnIC4KKy5T
aCBDQVZFQVRTCitUaGUKKy5ObQorZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgSVB2Ni4KKy5QcAor
RGV2aWNlcyB3aGljaCBmYWlsIHRvIHByb3ZpZGUgYSBjb25mb3JtaW5nIE1CSU0gaW1wbGVtZW50
YXRpb24gd2lsbAorcHJvYmFibHkgYmUgYXR0YWNoZWQgYXMgc29tZSBvdGhlciBkcml2ZXIsIHN1
Y2ggYXMKKy5YciB1M2cgNCAuCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcyBiL3N5cy9jb25m
L2ZpbGVzCmluZGV4IDc4MTgxMDRiOGQ1MC4uNDIxMjkyNTZiMGU3IDEwMDY0NAotLS0gYS9zeXMv
Y29uZi9maWxlcworKysgYi9zeXMvY29uZi9maWxlcwpAQCAtMzMwNyw2ICszMzA3LDcgQEAgZGV2
L3VzYi9uZXQvaWZfbXVnZS5jCQlvcHRpb25hbCBtdWdlCiBkZXYvdXNiL25ldC9pZl9ydWUuYwkJ
b3B0aW9uYWwgcnVlCiBkZXYvdXNiL25ldC9pZl9zbXNjLmMJCW9wdGlvbmFsIHNtc2MKIGRldi91
c2IvbmV0L2lmX3VkYXYuYwkJb3B0aW9uYWwgdWRhdgorZGV2L3VzYi9uZXQvaWZfdW1iLmMJCW9w
dGlvbmFsIHVtYgogZGV2L3VzYi9uZXQvaWZfdXJlLmMJCW9wdGlvbmFsIHVyZQogZGV2L3VzYi9u
ZXQvaWZfdXNpZS5jCQlvcHRpb25hbCB1c2llCiBkZXYvdXNiL25ldC9pZl91cm5kaXMuYwkJb3B0
aW9uYWwgdXJuZGlzCmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMgYi9zeXMv
ZGV2L3VzYi9uZXQvaWZfdW1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi41ZTljYjdmMmQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZf
dW1iLmMKQEAgLTAsMCArMSwyOTA2IEBACisvKgkkRnJlZUJTRCQgKi8KKy8qCSROZXRCU0QkICov
CisvKgkkT3BlbkJTRDogaWZfdW1iLmMsdiAxLjE4IDIwMTgvMDIvMTkgMDg6NTk6NTIgbXBpIEV4
cCAkICovCisKKy8qCisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTYgZ2VudWEgbWJIIChP
cGVuQlNEIHZlcnNpb24pCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg
YW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Ig
d2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
bGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBU
SEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJ
UyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJ
QUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g
TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9G
IFRISVMgU09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKHJl
LXdyaXRlIGZvciBGcmVlQlNEKQorICoKKyAqIFJlLXdyaXRlIGZvciBGcmVlQlNEIGJ5IFBpZXJy
ZSBQcm9uY2hlcnkgPHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBNb2JpbGUgQnJvYWRiYW5kIEludGVy
ZmFjZSBNb2RlbCBzcGVjaWZpY2F0aW9uOgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3Bl
cnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnppcAorICogQ29tcGxp
YW5jZSB0ZXN0aW5nIGd1aWRlCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2Nz
L2RldmNsYXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCisjaW5jbHVkZSA8
c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9lbmRp
YW4uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNp
bmNsdWRlIDxzeXMvcHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxz
eXMvc29ja2lvLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xv
Zy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKwor
I2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5
cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3Rhc2tx
dWV1ZS5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9faW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG5l
dC9icGYuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4K
KyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaW5j
bHVkZSA8bmV0L25ldGlzci5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9pcC5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNi
L3VzYl9jZGMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisjaW5jbHVkZSA8ZGV2L3Vz
Yi91c2JfZGV2aWNlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1
ZGUgPGRldi91c2IvdXNiZGlfdXRpbC5oPgorI2luY2x1ZGUgInVzYl9pZi5oIgorCisjaW5jbHVk
ZSAibWJpbS5oIgorI2luY2x1ZGUgImlmX3VtYnJlZy5oIgorCitNQUxMT0NfREVDTEFSRShNX01C
SU1fQ0lEX0NPTk5FQ1QpOworTUFMTE9DX0RFRklORShNX01CSU1fQ0lEX0NPTk5FQ1QsICJtYmlt
X2NpZF9jb25uZWN0IiwKKwkJIkNvbm5lY3Rpb24gcGFyYW1ldGVycyBmb3IgTUJJTSIpOworCisj
aWZkZWYgVU1CX0RFQlVHCisjZGVmaW5lIERQUklOVEYoeC4uLikJCQkJCQkJXAorCQlkbyB7IGlm
ICh1bWJfZGVidWcpIGxvZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERQ
UklOVEZOKG4sIHguLi4pCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcgPj0gKG4pKSBsb2co
TE9HX0RFQlVHLCB4KTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBERFVNUE4obiwgYiwgbCkJCQkJ
CQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWlmICh1bWJfZGVidWcgPj0gKG4pKQkJCQlcCisJCQkJ
dW1iX2R1bXAoKGIpLCAobCkpOwkJCVwKKwkJfSB3aGlsZSAoMCkKKworaW50CSB1bWJfZGVidWcg
PSAxOworc3RhdGljIGNoYXIJKnVtYl91dWlkMnN0cih1aW50OF90IFtNQklNX1VVSURfTEVOXSk7
CitzdGF0aWMgdm9pZAkgdW1iX2R1bXAodm9pZCAqLCBpbnQpOworCisjZWxzZQorI2RlZmluZSBE
UFJJTlRGKHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4p
CWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRERVTVBOKG4sIGIsIGwpCQlkbyB7IH0gd2hpbGUg
KDApCisjZW5kaWYKKworI2RlZmluZSBERVZOQU0oc2MpCQlkZXZpY2VfZ2V0X25hbWV1bml0KChz
YyktPnNjX2RldikKKworLyoKKyAqIFN0YXRlIGNoYW5nZSB0aW1lb3V0CisgKi8KKyNkZWZpbmUg
VU1CX1NUQVRFX0NIQU5HRV9USU1FT1VUCTMwCisKKy8qCisgKiBTdGF0ZSBjaGFuZ2UgZmxhZ3MK
KyAqLworI2RlZmluZSBVTUJfTlNfRE9OVF9EUk9QCTB4MDAwMQkvKiBkbyBub3QgZHJvcCBiZWxv
dyBjdXJyZW50IHN0YXRlICovCisjZGVmaW5lIFVNQl9OU19ET05UX1JBSVNFCTB4MDAwMgkvKiBk
byBub3QgcmFpc2UgYmVsb3cgY3VycmVudCBzdGF0ZSAqLworCisvKgorICogRGlhZ25vc3RpYyBt
YWNyb3MKKyAqLworY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcmVnc3RhdGVzW10gPSBN
QklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1i
X2RhdGFjbGFzc2VzW10gPSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1
Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zaW1zdGF0ZVtdID0gTUJJTV9TSU1TVEFURV9ERVNDUklQVElP
TlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9tZXNzYWdlc1tdID0gTUJJTV9NRVNT
QUdFU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zdGF0dXNb
XSA9IE1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX2NpZHNbXSA9IE1CSU1fQ0lEX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFs
ZGVzY3IgdW1iX3BrdHN0YXRlW10gPSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7Citj
b25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9hY3RzdGF0ZVtdID0gTUJJTV9BQ1RJVkFUSU9O
X1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Vycm9y
W10gPSBNQklNX0VSUk9SX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX3BpbnR5cGVbXSA9IE1CSU1fUElOVFlQRV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3Qg
dW1iX3ZhbGRlc2NyIHVtYl9pc3RhdGVbXSA9IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElP
TlM7CisKKyNkZWZpbmUgdW1iX3JlZ3N0YXRlKGMpCQl1bWJfdmFsMmRlc2NyKHVtYl9yZWdzdGF0
ZXMsIChjKSkKKyNkZWZpbmUgdW1iX2RhdGFjbGFzcyhjKQl1bWJfdmFsMmRlc2NyKHVtYl9kYXRh
Y2xhc3NlcywgKGMpKQorI2RlZmluZSB1bWJfc2ltc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1i
X3NpbXN0YXRlLCAocykpCisjZGVmaW5lIHVtYl9yZXF1ZXN0MnN0cihtKQl1bWJfdmFsMmRlc2Ny
KHVtYl9tZXNzYWdlcywgKG0pKQorI2RlZmluZSB1bWJfc3RhdHVzMnN0cihzKQl1bWJfdmFsMmRl
c2NyKHVtYl9zdGF0dXMsIChzKSkKKyNkZWZpbmUgdW1iX2NpZDJzdHIoYykJCXVtYl92YWwyZGVz
Y3IodW1iX2NpZHMsIChjKSkKKyNkZWZpbmUgdW1iX3BhY2tldF9zdGF0ZShzKQl1bWJfdmFsMmRl
c2NyKHVtYl9wa3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfYWN0aXZhdGlvbihzKQl1bWJfdmFs
MmRlc2NyKHVtYl9hY3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfZXJyb3Iyc3RyKGUpCXVtYl92
YWwyZGVzY3IodW1iX2Vycm9yLCAoZSkpCisjZGVmaW5lIHVtYl9waW5fdHlwZSh0KQkJdW1iX3Zh
bDJkZXNjcih1bWJfcGludHlwZSwgKHQpKQorI2RlZmluZSB1bWJfaXN0YXRlKHMpCQl1bWJfdmFs
MmRlc2NyKHVtYl9pc3RhdGUsIChzKSkKKworc3RhdGljIGRldmljZV9wcm9iZV90IHVtYl9wcm9i
ZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3QgdW1iX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0
YWNoX3QgdW1iX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IHVtYl9zdXNwZW5kOwor
c3RhdGljIGRldmljZV9yZXN1bWVfdCB1bWJfcmVzdW1lOworc3RhdGljIHZvaWQJIHVtYl9hdHRh
Y2hfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICopOworc3RhdGljIHVzYl9oYW5kbGVfcmVxdWVz
dF90IHVtYl9oYW5kbGVfcmVxdWVzdDsKK3N0YXRpYyBpbnQJIHVtYl9kZWFjdGl2YXRlKGRldmlj
ZV90KTsKK3N0YXRpYyB2b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3Ry
dWN0IHVzYl9jb25maWcgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtwaXBlcyhzdHJ1
Y3QgdW1iX3NvZnRjICopOworc3RhdGljIGludAkgdW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1
X2xvbmcsIGNhZGRyX3QpOworc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7CitzdGF0aWMg
dm9pZAkgdW1iX2lucHV0KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK3N0YXRpYyBp
bnQJIHVtYl9vdXRwdXQoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosCisJCSAgICBjb25z
dCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICopOworc3RhdGljIHZvaWQJIHVtYl9z
dGFydChzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXJ0X3Rhc2soc3RydWN0
IHVzYl9wcm9jX21zZyAqKTsKKyNpZiAwCitzdGF0aWMgdm9pZAkgdW1iX3dhdGNoZG9nKHN0cnVj
dCBpZm5ldCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJIHVtYl9zdGF0ZWNoZ190aW1lb3V0KHZv
aWQgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9tZWRpYWNoYW5nZShzdHJ1Y3QgaWZuZXQgKik7Citz
dGF0aWMgdm9pZAkgdW1iX21lZGlhc3RhdHVzKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRp
YXJlcSAqKTsKKworc3RhdGljIHZvaWQJIHVtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpz
YywgdXNiX3Byb2NfY2FsbGJhY2tfdCwKKwkJICAgIHN0cnVjdCB1c2JfcHJvY19tc2cgKiwgc3Ry
dWN0IHVzYl9wcm9jX21zZyAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9uZXdzdGF0ZShzdHJ1
Y3QgdW1iX3NvZnRjICosIGVudW0gdW1iX3N0YXRlLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9z
dGF0ZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7CitzdGF0aWMgdm9pZAkgdW1iX3VwKHN0
cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Rvd24oc3RydWN0IHVtYl9zb2Z0
YyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAkgdW1iX2dldF9yZXNwb25zZV90YXNrKHN0cnVjdCB1
c2JfcHJvY19tc2cgKik7CisKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX3Jlc3BvbnNlKHN0cnVj
dCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9oYW5kbGVfaW5k
aWNhdGVfc3RhdHVzX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwKKwkJICAgIGludCk7
CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAq
LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0
cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9y
ZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBp
bnQJIHVtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBp
bnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1i
X3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcmFkaW9fc3Rh
dGUoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVj
b2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVt
Yl9kZWNvZGVfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7
CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICos
IHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVj
dCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9pcF9j
b25maWd1cmF0aW9uKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZv
aWQJIHVtYl9yeChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVt
Yl9yeGVvZjsKK3N0YXRpYyB2b2lkCSB1bWJfcnhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOwor
c3RhdGljIGludAkgdW1iX2VuY2FwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IG1idWYgKiwg
c3RydWN0IHVzYl94ZmVyICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl90eGVvZjsKK3N0
YXRpYyB2b2lkCSB1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJ
IHVtYl9kZWNhcChzdHJ1Y3QgdW1iX3NvZnRjICosIHN0cnVjdCB1c2JfeGZlciAqLCBpbnQpOwor
CitzdGF0aWMgdXNiX2Vycm9yX3QJIHVtYl9zZW5kX2VuY2FwX2NvbW1hbmQoc3RydWN0IHVtYl9z
b2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZ2V0X2VuY2FwX3Jlc3BvbnNl
KHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkgdW1iX2N0
cmxfbXNnKHN0cnVjdCB1bWJfc29mdGMgKiwgdWludDMyX3QsIHZvaWQgKiwgaW50KTsKKworc3Rh
dGljIHZvaWQJIHVtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1i
X2Nsb3NlKHN0cnVjdCB1bWJfc29mdGMgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9zZXRwaW4oc3Ry
dWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgdm9pZCAqLCBpbnQsIHZvaWQgKiwKKwkJICAgIGlu
dCk7CitzdGF0aWMgdm9pZAkgdW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICopOwor
c3RhdGljIHZvaWQJIHVtYl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CitzdGF0aWMg
dm9pZAkgdW1iX2FsbG9jYXRlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJ
IHVtYl9zZW5kX2ZjY19hdXRoKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1i
X3BhY2tldF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1
bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kaXNjb25u
ZWN0KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3NlbmRfY29ubmVjdChz
dHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CisKK3N0YXRpYyB2b2lkCSB1bWJfcXJ5X2lwY29uZmln
KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NtZChzdHJ1Y3QgdW1iX3Nv
ZnRjICosIGludCwgaW50LCBjb25zdCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2Nt
ZDEoc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsIHVpbnQ4
X3QgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NvbW1hbmRfZG9uZShzdHJ1Y3QgdW1iX3NvZnRjICos
IHZvaWQgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3Nv
ZnRjICosIHVpbnQzMl90LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2RlY29kZV9x
bWkoc3RydWN0IHVtYl9zb2Z0YyAqLCB1aW50OF90ICosIGludCk7CisKK3N0YXRpYyB1c2JfY2Fs
bGJhY2tfdCB1bWJfaW50cjsKKworc3RhdGljIGNoYXIJKnVtYl9udG9wKHN0cnVjdCBzb2NrYWRk
ciAqKTsKKworc3RhdGljIGNvbnN0IGludCB1bWJfeGZlcl90b3V0ID0gVVNCX0RFRkFVTFRfVElN
RU9VVDsKKworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3RbXSA9IE1CSU1f
VVVJRF9CQVNJQ19DT05ORUNUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2NvbnRleHRfaW50
ZXJuZXRbXSA9IE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUOworc3RhdGljIHVpbnQ4X3QJIHVt
Yl91dWlkX3FtaV9tYmltW10gPSBNQklNX1VVSURfUU1JX01CSU07CitzdGF0aWMgdWludDMyX3QJ
IHVtYl9zZXNzaW9uX2lkID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnIHVt
Yl9jb25maWdbVU1CX05fVFJBTlNGRVJdID0geworCVtVTUJfSU5UUl9SWF0gPSB7CisJCS50eXBl
ID0gVUVfSU5URVJSVVBULAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlv
biA9IFVFX0RJUl9JTiwKKwkJLmlmX2luZGV4ID0gMSwKKwkJLmNhbGxiYWNrID0gdW1iX2ludHIs
CisJCS5idWZzaXplID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pLAorCQku
ZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDF9LAorCQkudXNiX21vZGUg
PSBVU0JfTU9ERV9IT1NULAorCX0sCisJW1VNQl9CVUxLX1JYXSA9IHsKKwkJLnR5cGUgPSBVRV9C
VUxLLAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9J
TiwKKwkJLmlmX2luZGV4ID0gMCwKKwkJLmNhbGxiYWNrID0gdW1iX3J4ZW9mLAorCQkuYnVmc2l6
ZSA9IDggKiAxMDI0LAorCQkuZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9
IDEsLmV4dF9idWZmZXIgPSAxfSwKKwkJLnVzYl9tb2RlID0gVVNCX01PREVfSE9TVCwKKwl9LAor
CVtVTUJfQlVMS19UWF0gPSB7CisJCS50eXBlID0gVUVfQlVMSywKKwkJLmVuZHBvaW50ID0gVUVf
QUREUl9BTlksCisJCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VULAorCQkuaWZfaW5kZXggPSAwLAor
CQkuY2FsbGJhY2sgPSB1bWJfdHhlb2YsCisJCS5idWZzaXplID0gOCAqIDEwMjQsCisJCS5mbGFn
cyA9IHsucGlwZV9ib2YgPSAxLC5mb3JjZV9zaG9ydF94ZmVyID0gMSwuZXh0X2J1ZmZlciA9IDF9
LAorCQkudGltZW91dCA9IHVtYl94ZmVyX3RvdXQsCisJCS51c2JfbW9kZSA9IFVTQl9NT0RFX0hP
U1QsCisJfSwKK307CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdW1iX21ldGhvZHNbXSA9IHsK
KwkvKiBVU0IgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHVzYl9oYW5kbGVfcmVxdWVzdCwgdW1i
X2hhbmRsZV9yZXF1ZXN0KSwKKworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0Qo
ZGV2aWNlX3Byb2JlLCB1bWJfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCB1bWJf
YXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgdW1iX2RldGFjaCksCisJREVWTUVU
SE9EKGRldmljZV9zdXNwZW5kLCB1bWJfc3VzcGVuZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1
bWUsIHVtYl9yZXN1bWUpLAorCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90
IHVtYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAidW1iIiwKKwkubWV0aG9kcyA9IHVtYl9tZXRob2Rz
LAorCS5zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdW1iX3NvZnRjKSwKK307CisKK01BTExPQ19ERUZJ
TkUoTV9VU0JfVU1CLCAiVVNCIFVNQiIsICJVU0IgTUJJTSBkcml2ZXIiKTsKKworY29uc3QgaW50
IHVtYl9kZWxheSA9IDQwMDA7CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYW4gIkZD
QyBBdXRoZW50aWNhdGlvbiIgY29tbWFuZC4KKyAqLworI2lmbmRlZiBVU0JfVkVORE9SX1NJRVJS
QQorIyBkZWZpbmUgVVNCX1ZFTkRPUl9TSUVSUkEJMHgxMTk5CisjZW5kaWYKKyNpZm5kZWYgVVNC
X1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorIyBkZWZpbmUgVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1
NQkweDkwNzkKKyNlbmRpZgorY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdW1iX2ZjY2F1dGhf
ZGV2c1tdID0geworCXsKKwkJLm1hdGNoX2ZsYWdfdmVuZG9yID0gMSwKKwkJLm1hdGNoX2ZsYWdf
cHJvZHVjdCA9IDEsCisJCS5pZFZlbmRvciA9IFVTQl9WRU5ET1JfU0lFUlJBLAorCQkuaWRQcm9k
dWN0ID0gVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1
aW50OF90IHVtYl9xbWlfYWxsb2NfY2lkW10gPSB7CisJMHgwMSwKKwkweDBmLCAweDAwLAkJLyog
bGVuICovCisJMHgwMCwJCQkvKiBRTVVYIGZsYWdzICovCisJMHgwMCwJCQkvKiBzZXJ2aWNlICJj
dGwiICovCisJMHgwMCwJCQkvKiBDSUQgKi8KKwkweDAwLAkJCS8qIFFNSSBmbGFncyAqLworCTB4
MDEsCQkJLyogdHJhbnNhY3Rpb24gKi8KKwkweDIyLCAweDAwLAkJLyogbXNnICJBbGxvY2F0ZSBD
SUQiICovCisJMHgwNCwgMHgwMCwJCS8qIFRMViBsZW4gKi8KKwkweDAxLCAweDAxLCAweDAwLCAw
eDAyCS8qIFRMViAqLworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdW1iX3FtaV9mY2NfYXV0
aFtdID0geworCTB4MDEsCisJMHgwYywgMHgwMCwJCS8qIGxlbiAqLworCTB4MDAsCQkJLyogUU1V
WCBmbGFncyAqLworCTB4MDIsCQkJLyogc2VydmljZSAiZG1zIiAqLworI2RlZmluZSBVTUJfUU1J
X0NJRF9PRkZTCTUKKwkweDAwLAkJCS8qIENJRCAoZmlsbGVkIGluIGxhdGVyKSAqLworCTB4MDAs
CQkJLyogUU1JIGZsYWdzICovCisJMHgwMSwgMHgwMCwJCS8qIHRyYW5zYWN0aW9uICovCisJMHg1
ZiwgMHg1NSwJCS8qIG1zZyAiU2VuZCBGQ0MgQXV0aGVudGljYXRpb24iICovCisJMHgwMCwgMHgw
MAkJLyogVExWIGxlbiAqLworfTsKKworc3RhdGljIGludAordW1iX3Byb2JlKGRldmljZV90IGRl
dikKK3sKKwlzdHJ1Y3QgdXNiX2F0dGFjaF9hcmcgKnVhYSA9IGRldmljZV9nZXRfaXZhcnMoZGV2
KTsKKwl1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfdCAqaWQ7CisKKwlpZiAodWFhLT51c2JfbW9k
ZSAhPSBVU0JfTU9ERV9IT1NUKQorCQlyZXR1cm4gKEVOWElPKTsKKwlpZiAoKGlkID0gdXNiZF9n
ZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IodWFhLT5pZmFjZSkpID09IE5VTEwpCisJCXJldHVybiAo
RU5YSU8pOworCisJLyoKKwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgTkNNLCBjaGVj
ayBpZiBhbHRlcm5hdGUgc2V0dGluZworCSAqIDEgaW1wbGVtZW50cyBNQklNLgorCSAqLworCWlm
IChpZC0+YkludGVyZmFjZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJm
YWNlU3ViQ2xhc3MgPT0KKwkgICAgVUlTVUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsK
KwkJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcigKKwkJCQl1c2JkX2dldF9pZmFj
ZSh1YWEtPmRldmljZSwKKwkJCQkJdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMSkpOworCQlpZiAo
aWQgPT0gTlVMTCB8fCBpZC0+YkFsdGVybmF0ZVNldHRpbmcgIT0gMSkKKwkJCXJldHVybiAoRU5Y
SU8pOworCX0KKworI2lmbmRlZiBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNF
X01PREVMCisjIGRlZmluZSBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01P
REVMIDE0CisjZW5kaWYKKwlpZiAoaWQtPmJJbnRlcmZhY2VDbGFzcyA9PSBVSUNMQVNTX0NEQyAm
JgorCSAgICBpZC0+YkludGVyZmFjZVN1YkNsYXNzID09CisJICAgIFVJU1VCQ0xBU1NfTU9CSUxF
X0JST0FEQkFORF9JTlRFUkZBQ0VfTU9ERUwgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VQcm90b2Nv
bCA9PSAwKQorCQlyZXR1cm4gKEJVU19QUk9CRV9TUEVDSUZJQyk7CisKKwlyZXR1cm4gKEVOWElP
KTsKK30KKworc3RhdGljIGludAordW1iX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0
IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IHVzYl9hdHRh
Y2hfYXJnICp1YWEgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisJc3RydWN0IHVzYl9jb25maWcg
Y29uZmlnW1VNQl9OX1RSQU5TRkVSXTsKKwlpbnQJIHY7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNf
dW5pb25fZGVzY3JpcHRvciAqdWQ7CisJY29uc3Qgc3RydWN0IG1iaW1fZGVzY3JpcHRvciAqbWQ7
CisJaW50CSBpOworCXVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcl90ICppZDsKKwlzdHJ1Y3QgdXNi
X2ludGVyZmFjZSAqaWZhY2U7CisJaW50CSBkYXRhX2lmYWNlbm8gPSAtMTsKKwl1c2JfZXJyb3Jf
dCBlcnJvcjsKKworCXNjLT5zY19kZXYgPSBkZXY7CisJc2MtPnNjX3VkZXYgPSB1YWEtPmRldmlj
ZTsKKworCW1lbWNweShjb25maWcsIHVtYl9jb25maWcsIHNpemVvZiAoY29uZmlnKSk7CisKKwlk
ZXZpY2Vfc2V0X3VzYl9kZXNjKGRldik7CisKKwlzYy0+c2NfY3RybF9pZmFjZW5vID0gdWFhLT5p
bmZvLmJJZmFjZU51bTsKKworCW10eF9pbml0KCZzYy0+c2NfbXV0ZXgsIGRldmljZV9nZXRfbmFt
ZXVuaXQoZGV2KSwgTlVMTCwgTVRYX0RFRik7CisKKwkvKgorCSAqIFNvbWUgTUJJTSBoYXJkd2Fy
ZSBkb2VzIG5vdCBwcm92aWRlIHRoZSBtYW5kYXRvcnkgQ0RDIFVuaW9uCisJICogRGVzY3JpcHRv
ciwgc28gd2UgYWxzbyBsb29rIGF0IG1hdGNoaW5nIEludGVyZmFjZQorCSAqIEFzc29jaWF0aW9u
IERlc2NyaXB0b3JzIHRvIGZpbmQgb3V0IHRoZSBNQklNIERhdGEgSW50ZXJmYWNlCisJICogbnVt
YmVyLgorCSAqLworCXNjLT5zY192ZXJfbWFqID0gc2MtPnNjX3Zlcl9taW4gPSAtMTsKKwlzYy0+
c2NfbWF4cGt0bGVuID0gTUJJTV9NQVhTRUdTWl9NSU5WQUw7CisJaWQgPSB1c2JkX2dldF9pbnRl
cmZhY2VfZGVzY3JpcHRvcih1YWEtPmlmYWNlKTsKKworCXVkID0gdXNiZF9maW5kX2Rlc2NyaXB0
b3Ioc2MtPnNjX3VkZXYsIGlkLCB1YWEtPmluZm8uYklmYWNlSW5kZXgsCisJCQlVREVTQ19DU19J
TlRFUkZBQ0UsIDB4ZmYsIFVERVNDU1VCX0NEQ19VTklPTiwgMHhmZik7CisJaWYgKHVkICE9IE5V
TEwpIHsKKwkJZGF0YV9pZmFjZW5vID0gdWQtPmJTbGF2ZUludGVyZmFjZVswXTsKKwl9CisKKwlt
ZCA9IHVzYmRfZmluZF9kZXNjcmlwdG9yKHNjLT5zY191ZGV2LCBpZCwgdWFhLT5pbmZvLmJJZmFj
ZUluZGV4LAorCQkJVURFU0NfQ1NfSU5URVJGQUNFLCAweGZmLCBVREVTQ1NVQl9NQklNLCAweGZm
KTsKKwlpZiAobWQgIT0gTlVMTCkgeworCQl2ID0gVUdFVFcobWQtPmJjZE1CSU1WZXJzaW9uKTsK
KwkJc2MtPnNjX3Zlcl9tYWogPSBNQklNX1ZFUl9NQUpPUih2KTsKKwkJc2MtPnNjX3Zlcl9taW4g
PSBNQklNX1ZFUl9NSU5PUih2KTsKKwkJc2MtPnNjX2N0cmxfbGVuID0gVUdFVFcobWQtPndNYXhD
b250cm9sTWVzc2FnZSk7CisJCS8qIE5ldmVyIHRydXN0IGEgVVNCIGRldmljZSEgQ291bGQgdHJ5
IHRvIGV4cGxvaXQgdXMgKi8KKwkJaWYgKHNjLT5zY19jdHJsX2xlbiA8IE1CSU1fQ1RSTE1TR19N
SU5MRU4gfHwKKwkJCQlzYy0+c2NfY3RybF9sZW4gPiBNQklNX0NUUkxNU0dfTUFYTEVOKSB7CisJ
CQlEUFJJTlRGKCJjb250cm9sIG1lc3NhZ2UgbGVuICVkIG91dCBvZiAiCisJCQkJCSJib3VuZHMg
WyVkIC4uICVkXVxuIiwKKwkJCQkJc2MtPnNjX2N0cmxfbGVuLCBNQklNX0NUUkxNU0dfTUlOTEVO
LAorCQkJCQlNQklNX0NUUkxNU0dfTUFYTEVOKTsKKwkJCS8qIGNvbnRpbnVlIGFueXdheSAqLwor
CQl9CisJCXNjLT5zY19tYXhwa3RsZW4gPSBVR0VUVyhtZC0+d01heFNlZ21lbnRTaXplKTsKKwkJ
RFBSSU5URk4oMiwgImN0cmxfbGVuPSVkLCBtYXhwa3RsZW49JWQsIGNhcD0weCV4XG4iLAorCQkJ
CXNjLT5zY19jdHJsX2xlbiwgc2MtPnNjX21heHBrdGxlbiwKKwkJCQltZC0+Ym1OZXR3b3JrQ2Fw
YWJpbGl0aWVzKTsKKwl9CisJaWYgKHNjLT5zY192ZXJfbWFqIDwgMCkgeworCQlkZXZpY2VfcHJp
bnRmKGRldiwgImVycm9yOiBtaXNzaW5nIE1CSU0gZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZmFp
bDsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgInZlcnNpb24gJWQuJWRcbiIsIHNjLT5zY192
ZXJfbWFqLAorCSAgICBzYy0+c2NfdmVyX21pbik7CisKKwlpZiAodXNiZF9sb29rdXBfaWRfYnlf
dWFhKHVtYl9mY2NhdXRoX2RldnMsIHNpemVvZiAodW1iX2ZjY2F1dGhfZGV2cyksIHVhYSkpIHsK
KwkJc2MtPnNjX2ZsYWdzIHw9IFVNQkZMR19GQ0NfQVVUSF9SRVFVSVJFRDsKKwkJc2MtPnNjX2Np
ZCA9IC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzYy0+c2NfdWRldi0+aWZhY2VzX21heDsg
aSsrKSB7CisJCWlmYWNlID0gdXNiZF9nZXRfaWZhY2Uoc2MtPnNjX3VkZXYsIGkpOworCQlpZCA9
IHVzYmRfZ2V0X2ludGVyZmFjZV9kZXNjcmlwdG9yKGlmYWNlKTsKKwkJaWYgKGlkID09IE5VTEwp
CisJCQlicmVhazsKKworCQlpZiAoaWQtPmJJbnRlcmZhY2VOdW1iZXIgPT0gZGF0YV9pZmFjZW5v
KSB7CisJCQlzYy0+c2NfZGF0YV9pZmFjZSA9IGlmYWNlOworCQkJc2MtPnNjX2lmYWNlc19pbmRl
eFswXSA9IGk7CisJCQlzYy0+c2NfaWZhY2VzX2luZGV4WzFdID0gdWFhLT5pbmZvLmJJZmFjZUlu
ZGV4OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHNjLT5zY19kYXRhX2lmYWNlID09IE5VTEwp
IHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvcjogbm8gZGF0YSBpbnRlcmZhY2UgZm91bmRc
biIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY29tYmluZWQg
TkNNL01CSU0gZnVuY3Rpb24sIHN3aXRjaCB0bworCSAqIGFsdGVybmF0ZSBzZXR0aW5nIG9uZSB0
byBlbmFibGUgTUJJTS4KKwkgKi8KKwlpZCA9IHVzYmRfZ2V0X2ludGVyZmFjZV9kZXNjcmlwdG9y
KHVhYS0+aWZhY2UpOworCWlmIChpZCAhPSBOVUxMICYmIGlkLT5iSW50ZXJmYWNlQ2xhc3MgPT0g
VUlDTEFTU19DREMgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVSVNVQkNMQVNT
X05FVFdPUktfQ09OVFJPTF9NT0RFTCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJj
b21iaW5lZCBOQ00vTUJJTVxuIik7CisJCWVycm9yID0gdXNiZF9yZXFfc2V0X2FsdF9pbnRlcmZh
Y2Vfbm8oc2MtPnNjX3VkZXYsCisJCQkJTlVMTCwgdWFhLT5pbmZvLmJJZmFjZUluZGV4LCAxKTsK
KwkJaWYgKGVycm9yICE9IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJCWRldmljZV9w
cmludGYoZGV2LCAiZXJyb3I6IENvdWxkIG5vdCBzd2l0Y2ggdG8gYWx0ZXJuYXRlIHNldHRpbmcg
Zm9yIE1CSU1cbiIpOworCQkJZ290byBmYWlsOworCQl9CisJCXNjLT5zY19pZmFjZXNfaW5kZXhb
MV0gPSB1YWEtPmluZm8uYklmYWNlSW5kZXggKyAxOworCX0KKworCWlmICh1c2JfcHJvY19jcmVh
dGUoJnNjLT5zY190YXNrcXVldWUsICZzYy0+c2NfbXV0ZXgsCisJCQkJZGV2aWNlX2dldF9uYW1l
dW5pdChzYy0+c2NfZGV2KSwKKwkJCQlVU0JfUFJJX01FRCkgIT0gMCkKKwkJZ290byBmYWlsOwor
CisJRFBSSU5URk4oMiwgImN0cmwtaWZubyMlZDogZGF0YS1pZm5vIyVkXG4iLCBzYy0+c2NfY3Ry
bF9pZmFjZW5vLAorCSAgICBkYXRhX2lmYWNlbm8pOworCisJdXNiX2NhbGxvdXRfaW5pdF9tdHgo
JnNjLT5zY19zdGF0ZWNoZ190aW1lciwgJnNjLT5zY19tdXRleCwgMCk7CisKKwl1bWJfbmNtX3Nl
dHVwKHNjLCBjb25maWcpOworCURQUklOVEZOKDIsICIlczogcngvdHggc2l6ZSAlZC8lZFxuIiwg
REVWTkFNKHNjKSwKKwkJCXNjLT5zY19yeF9idWZzeiwgc2MtPnNjX3R4X2J1ZnN6KTsKKworCXNj
LT5zY19yeF9idWYgPSBtYWxsb2Moc2MtPnNjX3J4X2J1ZnN6LCBNX0RFVkJVRiwgTV9XQUlUT0sp
OworCXNjLT5zY190eF9idWYgPSBtYWxsb2Moc2MtPnNjX3R4X2J1ZnN6LCBNX0RFVkJVRiwgTV9X
QUlUT0spOworCisJZm9yIChpID0gMDsgaSAhPSAzMjsgaSsrKSB7CisJCWVycm9yID0gdXNiZF9z
ZXRfYWx0X2ludGVyZmFjZV9pbmRleChzYy0+c2NfdWRldiwKKwkJCQlzYy0+c2NfaWZhY2VzX2lu
ZGV4WzBdLCBpKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJZXJyb3IgPSB1c2JkX3Ry
YW5zZmVyX3NldHVwKHNjLT5zY191ZGV2LCBzYy0+c2NfaWZhY2VzX2luZGV4LAorCQkJCXNjLT5z
Y194ZmVyLCBjb25maWcsIFVNQl9OX1RSQU5TRkVSLAorCQkJCXNjLCAmc2MtPnNjX211dGV4KTsK
KwkJaWYgKGVycm9yID09IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pCisJCQlicmVhazsKKwl9
CisJaWYgKGVycm9yIHx8IChpID09IDMyKSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYs
ICJlcnJvcjogZmFpbGVkIHRvIHNldHVwIHhmZXJzXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwor
CXNjLT5zY19yZXNwX2J1ZiA9IG1hbGxvYyhzYy0+c2NfY3RybF9sZW4sIE1fREVWQlVGLCBNX1dB
SVRPSyk7CisJc2MtPnNjX2N0cmxfbXNnID0gbWFsbG9jKHNjLT5zY19jdHJsX2xlbiwgTV9ERVZC
VUYsIE1fV0FJVE9LKTsKKworCXNjLT5zY19pbmZvLnJlZ3N0YXRlID0gTUJJTV9SRUdTVEFURV9V
TktOT1dOOworCXNjLT5zY19pbmZvLnBpbl9hdHRlbXB0c19sZWZ0ID0gVU1CX1ZBTFVFX1VOS05P
V047CisJc2MtPnNjX2luZm8ucnNzaSA9IFVNQl9WQUxVRV9VTktOT1dOOworCXNjLT5zY19pbmZv
LmJlciA9IFVNQl9WQUxVRV9VTktOT1dOOworCisJLyogZGVmZXIgYXR0YWNoaW5nIHRoZSBpbnRl
cmZhY2UgKi8KKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVt
Yl9hdHRhY2hfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19hdHRhY2hfdGFza1swXS5oZHIsCisJCQkm
c2MtPnNjX3Byb2NfYXR0YWNoX3Rhc2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworCisJcmV0dXJuICgwKTsKKworZmFpbDoKKwl1bWJfZGV0YWNoKHNjLT5zY19kZXYp
OworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgdm9pZAordW1iX2F0dGFjaF90YXNrKHN0
cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKnRhc2sgPSAoc3Ry
dWN0IHVtYl90YXNrICopbXNnOworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdGFzay0+c2M7CisJ
c3RydWN0IGlmbmV0ICppZnA7CisKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCisJLyog
aW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlICovCisJc2MtPnNjX2lmID0gaWZwID0gaWZfYWxsb2Mo
SUZUX01CSU0pOworCWlmX2luaXRuYW1lKGlmcCwgInVtYiIsIGRldmljZV9nZXRfdW5pdChzYy0+
c2NfZGV2KSk7CisKKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZwLT5pZl9mbGFncyA9IElGRl9T
SU1QTEVYIHwgSUZGX01VTFRJQ0FTVCB8IElGRl9QT0lOVE9QT0lOVDsKKwlpZnAtPmlmX2lvY3Rs
ID0gdW1iX2lvY3RsOworCWlmcC0+aWZfaW5wdXQgPSB1bWJfaW5wdXQ7CisJaWZwLT5pZl9vdXRw
dXQgPSB1bWJfb3V0cHV0OworCWlmcC0+aWZfc3RhcnQgPSB1bWJfc3RhcnQ7CisJaWZwLT5pZl9p
bml0ID0gdW1iX2luaXQ7CisKKyNpZiAwCisJaWZwLT5pZl93YXRjaGRvZyA9IHVtYl93YXRjaGRv
ZzsKKyNlbmRpZgorCWlmcC0+aWZfbGlua19zdGF0ZSA9IExJTktfU1RBVEVfRE9XTjsKKwlpZm1l
ZGlhX2luaXQoJnNjLT5zY19pbSwgMCwgdW1iX21lZGlhY2hhbmdlLCB1bWJfbWVkaWFzdGF0dXMp
OworCWlmbWVkaWFfYWRkKCZzYy0+c2NfaW0sIElGTV9OT05FIHwgSUZNX0FVVE8sIDAsIE5VTEwp
OworCisJaWZwLT5pZl9hZGRybGVuID0gMDsKKwlpZnAtPmlmX2hkcmxlbiA9IHNpemVvZiAoc3Ry
dWN0IG5jbV9oZWFkZXIxNikgKworCSAgICBzaXplb2YgKHN0cnVjdCBuY21fcG9pbnRlcjE2KTsK
KwkvKiBYWFggaGFyZC1jb2RlZCBhdG0gKi8KKwlpZnAtPmlmX210dSA9IE1JTigyMDQ4LCBzYy0+
c2NfbWF4cGt0bGVuKTsKKwlJRlFfU0VUX01BWExFTigmaWZwLT5pZl9zbmQsIGlmcW1heGxlbik7
CisJaWZwLT5pZl9zbmQuaWZxX2Rydl9tYXhsZW4gPSBpZnFtYXhsZW47CisJSUZRX1NFVF9SRUFE
WSgmaWZwLT5pZl9zbmQpOworCisJLyogYXR0YWNoIHRoZSBpbnRlcmZhY2UgKi8KKwlpZl9hdHRh
Y2goaWZwKTsKKwlicGZhdHRhY2goaWZwLCBETFRfUkFXLCAwKTsKKworCXNjLT5zY19hdHRhY2hl
ZCA9IDE7CisKKwl1bWJfaW5pdChzYyk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7Cit9CisK
K3N0YXRpYyBpbnQKK3VtYl9kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB1bWJfc29m
dGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VU
X0lGUChzYyk7CisKKwl1c2JfcHJvY19kcmFpbigmc2MtPnNjX3Rhc2txdWV1ZSk7CisKKwltdHhf
bG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAoaWZwICE9IE5VTEwgJiYgKGlmcC0+aWZfZHJ2X2Zs
YWdzICYgSUZGX0RSVl9SVU5OSU5HKSkKKwkJdW1iX2Rvd24oc2MsIDEpOworCXVtYl9jbG9zZShz
Yyk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCXVzYmRfdHJhbnNmZXJfdW5zZXR1
cChzYy0+c2NfeGZlciwgVU1CX05fVFJBTlNGRVIpOworCisJZnJlZShzYy0+c2NfdHhfYnVmLCBN
X0RFVkJVRik7CisJZnJlZShzYy0+c2NfcnhfYnVmLCBNX0RFVkJVRik7CisKKwl1c2JfY2FsbG91
dF9kcmFpbigmc2MtPnNjX3N0YXRlY2hnX3RpbWVyKTsKKworCXVzYl9wcm9jX2ZyZWUoJnNjLT5z
Y190YXNrcXVldWUpOworCisJbXR4X2Rlc3Ryb3koJnNjLT5zY19tdXRleCk7CisKKwlmcmVlKHNj
LT5zY19jdHJsX21zZywgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3Jlc3BfYnVmLCBNX0RFVkJV
Rik7CisKKwlpZiAoaWZwICE9IE5VTEwgJiYgaWZwLT5pZl9zb2Z0YykgeworCQlpZm1lZGlhX3Jl
bW92ZWFsbCgmc2MtPnNjX2ltKTsKKwl9CisJaWYgKHNjLT5zY19hdHRhY2hlZCkgeworCQlicGZk
ZXRhY2goaWZwKTsKKwkJaWZfZGV0YWNoKGlmcCk7CisJCWlmX2ZyZWUoaWZwKTsKKwkJc2MtPnNj
X2lmID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9uY21f
c2V0dXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCB1c2JfY29uZmlnICogY29uZmlnKQor
eworCXVzYl9kZXZpY2VfcmVxdWVzdF90IHJlcTsKKwlzdHJ1Y3QgbmNtX250Yl9wYXJhbWV0ZXJz
IG5wOworCXVzYl9lcnJvcl90IGVycm9yOworCisJLyogUXVlcnkgTlRCIHRyYW5mZXJzIHNpemVz
ICovCisJcmVxLmJtUmVxdWVzdFR5cGUgPSBVVF9SRUFEX0NMQVNTX0lOVEVSRkFDRTsKKwlyZXEu
YlJlcXVlc3QgPSBOQ01fR0VUX05UQl9QQVJBTUVURVJTOworCVVTRVRXKHJlcS53VmFsdWUsIDAp
OworCVVTRVRXKHJlcS53SW5kZXgsIHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVTRVRXKHJlcS53
TGVuZ3RoLCBzaXplb2YgKG5wKSk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJZXJyb3Ig
PSB1c2JkX2RvX3JlcXVlc3Qoc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgsICZyZXEsICZucCk7
CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAoZXJyb3IgPT0gVVNCX0VSUl9OT1JN
QUxfQ09NUExFVElPTiAmJgorCSAgICBVR0VUVyhucC53TGVuZ3RoKSA9PSBzaXplb2YgKG5wKSkg
eworCQljb25maWdbVU1CX0JVTEtfUlhdLmJ1ZnNpemUgPSBVR0VURFcobnAuZHdOdGJJbk1heFNp
emUpOworCQljb25maWdbVU1CX0JVTEtfVFhdLmJ1ZnNpemUgPSBVR0VURFcobnAuZHdOdGJPdXRN
YXhTaXplKTsKKwl9CisJc2MtPnNjX3J4X2J1ZnN6ID0gY29uZmlnW1VNQl9CVUxLX1JYXS5idWZz
aXplOworCXNjLT5zY190eF9idWZzeiA9IGNvbmZpZ1tVTUJfQlVMS19UWF0uYnVmc2l6ZTsKK30K
Kworc3RhdGljIGludAordW1iX2hhbmRsZV9yZXF1ZXN0KGRldmljZV90IGRldiwKKyAgICBjb25z
dCB2b2lkICpwcmVxLCB2b2lkICoqcHB0ciwgdWludDE2X3QgKnBsZW4sCisgICAgdWludDE2X3Qg
b2Zmc2V0LCB1aW50OF90ICpwc3RhdGUpCit7CisJLyogRklYTUUgcmVhbGx5IGltcGxlbWVudCAq
LworCisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9zdXNwZW5kKGRldmlj
ZV90IGRldikKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlN1c3BlbmRpbmdcbiIpOworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9yZXN1bWUoZGV2aWNlX3QgZGV2KQoreworCWRl
dmljZV9wcmludGYoZGV2LCAiUmVzdW1pbmdcbiIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBpbnQKK3VtYl9kZWFjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRj
ICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9J
RlAoc2MpOworCisJaWYgKGlmcCAhPSBOVUxMKSB7CisJCWlmX2RlYWQoaWZwKTsKKwl9CisJc2Mt
PnNjX2R5aW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbG9zZV9i
dWxrcGlwZXMoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBH
RVRfSUZQKHNjKTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZGX0RSVl9SVU5OSU5HIHwg
SUZGX0RSVl9PQUNUSVZFKTsKKworCXVtYl9yeGZsdXNoKHNjKTsKKwl1bWJfdHhmbHVzaChzYyk7
CisKKwl1c2JkX3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfUlhdKTsKKwl1c2Jk
X3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKK30KKworc3RhdGljIGlu
dAordW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEp
Cit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBpbl9p
ZmFkZHIgKmlhID0gKHN0cnVjdCBpbl9pZmFkZHIgKilkYXRhOworCXN0cnVjdCBpZnJlcSAqaWZy
ID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgdW1iX3Bh
cmFtZXRlciBtcDsKKworCWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVybiBFSU87CisKKwlzd2l0
Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1NJRkFERFI6CisJCXN3aXRjaCAoaWEtPmlhX2lmYS5pZmFf
YWRkci0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCWJyZWFrOworI2lmZGVmIElO
RVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlicmVhazsKKyNlbmRpZiAvKiBJTkVUNiAqLworCQlk
ZWZhdWx0OgorCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQlicmVhazsKKwkJfQorCQlicmVh
azsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJCXVt
Yl9hZGRfdGFzayhzYywgdW1iX3N0YXRlX3Rhc2ssCisJCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rh
c2tbMF0uaGRyLAorCQkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMSk7CisJCW10
eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dVTUJJTkZPOgor
CQllcnJvciA9IGNvcHlvdXQoJnNjLT5zY19pbmZvLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwK
KwkJICAgIHNpemVvZiAoc2MtPnNjX2luZm8pKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU1VNQlBB
UkFNOgorCQllcnJvciA9IHByaXZfY2hlY2soY3VydGhyZWFkLCBQUklWX05FVF9TRVRJRlBIWVMp
OworCQlpZiAoZXJyb3IpCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gY29weWluKGlmci0+
aWZyX2lmcnUuaWZydV9kYXRhLCAmbXAsIHNpemVvZiAobXApKSkgIT0gMCkKKwkJCWJyZWFrOwor
CisJCWlmICgoZXJyb3IgPSB1bWJfc2V0cGluKHNjLCBtcC5vcCwgbXAuaXNfcHVrLCBtcC5waW4s
IG1wLnBpbmxlbiwKKwkJICAgIG1wLm5ld3BpbiwgbXAubmV3cGlubGVuKSkgIT0gMCkKKwkJCWJy
ZWFrOworCisJCWlmIChtcC5hcG5sZW4gPCAwIHx8IG1wLmFwbmxlbiA+IHNpemVvZiAoc2MtPnNj
X2luZm8uYXBuKSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzYy0+
c2Nfcm9hbWluZyA9IG1wLnJvYW1pbmcgPyAxIDogMDsKKwkJbWVtc2V0KHNjLT5zY19pbmZvLmFw
biwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby5hcG4pKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZvLmFw
biwgbXAuYXBuLCBtcC5hcG5sZW4pOworCQlzYy0+c2NfaW5mby5hcG5sZW4gPSBtcC5hcG5sZW47
CisJCW1lbXNldChzYy0+c2NfaW5mby51c2VybmFtZSwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby51
c2VybmFtZSkpOworCQltZW1jcHkoc2MtPnNjX2luZm8udXNlcm5hbWUsIG1wLnVzZXJuYW1lLCBt
cC51c2VybmFtZWxlbik7CisJCXNjLT5zY19pbmZvLnVzZXJuYW1lbGVuID0gbXAudXNlcm5hbWVs
ZW47CisJCW1lbXNldChzYy0+c2NfaW5mby5wYXNzd29yZCwgMCwgc2l6ZW9mIChzYy0+c2NfaW5m
by5wYXNzd29yZCkpOworCQltZW1jcHkoc2MtPnNjX2luZm8ucGFzc3dvcmQsIG1wLnBhc3N3b3Jk
LCBtcC5wYXNzd29yZGxlbik7CisJCXNjLT5zY19pbmZvLnBhc3N3b3JkbGVuID0gbXAucGFzc3dv
cmRsZW47CisJCXNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXMgPSBtcC5wcmVmZXJyZWRjbGFz
c2VzOworCQl1bWJfc2V0ZGF0YWNsYXNzKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR1VNQlBB
UkFNOgorCQltZW1zZXQoJm1wLCAwLCBzaXplb2YgKG1wKSk7CisJCW1lbWNweShtcC5hcG4sIHNj
LT5zY19pbmZvLmFwbiwgc2MtPnNjX2luZm8uYXBubGVuKTsKKwkJbXAuYXBubGVuID0gc2MtPnNj
X2luZm8uYXBubGVuOworCQltcC5yb2FtaW5nID0gc2MtPnNjX3JvYW1pbmc7CisJCW1wLnByZWZl
cnJlZGNsYXNzZXMgPSBzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzOworCQllcnJvciA9IGNv
cHlvdXQoJm1wLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChtcCkpOworCQlicmVh
azsKKwljYXNlIFNJT0NTSUZNVFU6CisJCS8qIERvZXMgdGhpcyBpbmNsdWRlIHRoZSBOQ00gaGVh
ZGVycyBhbmQgdGFpbD8gKi8KKwkJaWYgKGlmci0+aWZyX210dSA+IGlmcC0+aWZfbXR1KSB7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmcC0+aWZfbXR1ID0gaWZyLT5p
ZnJfbXR1OworCQlicmVhazsKKwljYXNlIFNJT0NBSUZBRERSOgorCWNhc2UgU0lPQ1NJRkRTVEFE
RFI6CisJY2FzZSBTSU9DQURETVVMVEk6CisJY2FzZSBTSU9DREVMTVVMVEk6CisJCWJyZWFrOwor
CWNhc2UgU0lPQ0dJRk1FRElBOgorCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZwLCBpZnIsICZz
Yy0+c2NfaW0sIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUlOVkFMOwor
CQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaW5p
dCh2b2lkICphcmcpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBhcmc7CisKKwltdHhfbG9j
aygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGFydF90YXNrLAorCQkJ
JnNjLT5zY19wcm9jX3N0YXJ0X3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXJ0X3Rh
c2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMg
dm9pZAordW1iX2lucHV0KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlz
dHJ1Y3QgbWJ1ZiAqbW47CisKKwl3aGlsZSAobSkgeworCQltbiA9IG0tPm1fbmV4dHBrdDsKKwkJ
bS0+bV9uZXh0cGt0ID0gTlVMTDsKKworCQlCUEZfTVRBUChpZnAsIG0pOworCisJCW5ldGlzcl9k
aXNwYXRjaChORVRJU1JfSVAsIG0pOworCQltID0gbW47CisJfQorfQorCitzdGF0aWMgaW50Cit1
bWJfb3V0cHV0KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSwgY29uc3Qgc3RydWN0
IHNvY2thZGRyICpkc3QsCisgICAgc3RydWN0IHJvdXRlICpydHApCit7CisJaW50IGVycm9yOwor
CisJRFBSSU5URk4oMTAsICIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZHN0
LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCS8qIGZhbGwg
dGhyb3VnaCAqLworI2VuZGlmCisJY2FzZSBBRl9JTkVUOgorCQlicmVhazsKKworCQkvKiBzaWxl
bnRseSBkcm9wIGRoY2xpZW50IHBhY2tldHMgKi8KKwljYXNlIEFGX1VOU1BFQzoKKwkJbV9mcmVl
bShtKTsKKwkJcmV0dXJuICgwKTsKKworCQkvKiBkcm9wIG90aGVyIHBhY2tldCB0eXBlcyAqLwor
CWRlZmF1bHQ6CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKKwl9CisK
KwkvKgorCSAqIFF1ZXVlIG1lc3NhZ2Ugb24gaW50ZXJmYWNlLCBhbmQgc3RhcnQgb3V0cHV0IGlm
IGludGVyZmFjZQorCSAqIG5vdCB5ZXQgYWN0aXZlLgorCSAqLworCWVycm9yID0gKGlmcC0+aWZf
dHJhbnNtaXQpKGlmcCwgbSk7CisJaWYgKGVycm9yKSB7CisJCWlmX2luY19jb3VudGVyKGlmcCwg
SUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQlyZXR1cm4gKEVOT0JVRlMpOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhcnQoc3RydWN0IGlmbmV0ICppZnApCit7
CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYgKHNjLT5zY19k
eWluZyB8fCAhKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkKKwkJcmV0dXJu
OworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdXNiZF90cmFuc2Zlcl9zdGFydChzYy0+
c2NfeGZlcltVTUJfQlVMS19UWF0pOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfc3RhcnRfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7
CisJc3RydWN0IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1
Y3QgdW1iX3NvZnRjICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lG
UChzYyk7CisKKwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdHhfYXNzZXJ0KCZz
Yy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZf
UlVOTklORzsKKworCS8qIHN0YXJ0IGludGVycnVwdCB0cmFuc2ZlciAqLworCXVzYmRfdHJhbnNm
ZXJfc3RhcnQoc2MtPnNjX3hmZXJbVU1CX0lOVFJfUlhdKTsKKworCXVtYl9vcGVuKHNjKTsKK30K
KworI2lmIDAKK3N0YXRpYyB2b2lkCit1bWJfd2F0Y2hkb2coc3RydWN0IGlmbmV0ICppZnApCit7
CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYgKHNjLT5zY19k
eWluZykKKwkJcmV0dXJuOworCisJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT0VSUk9S
UywgMSk7CisJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAid2F0Y2hkb2cgdGltZW91dFxuIik7
CisJdXNiZF90cmFuc2Zlcl9kcmFpbihzYy0+c2NfeGZlcltVTUJfQlVMS19UWF0pOworCXJldHVy
bjsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordW1iX3N0YXRlY2hnX3RpbWVvdXQodm9pZCAq
YXJnKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gYXJnOworCXN0cnVjdCBpZm5ldCAqaWZw
ID0gR0VUX0lGUChzYyk7CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsK
KworCWlmIChzYy0+c2NfaW5mby5yZWdzdGF0ZSAhPSBNQklNX1JFR1NUQVRFX1JPQU1JTkcgfHwg
c2MtPnNjX3JvYW1pbmcpCisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9n
KExPR19ERUJVRywgIiVzOiBzdGF0ZSBjaGFuZ2UgdGltZW91dFxuIiwKKwkJCQkJREVWTkFNKHNj
KSk7CisKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNjLT5zY19wcm9j
X3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMV0uaGRyLCAw
KTsKK30KKworc3RhdGljIGludAordW1iX21lZGlhY2hhbmdlKHN0cnVjdCBpZm5ldCAqIGlmcCkK
K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9tZWRpYXN0YXR1cyhzdHJ1Y3Qg
aWZuZXQgKiBpZnAsIHN0cnVjdCBpZm1lZGlhcmVxICogaW1yKQoreworCXN3aXRjaCAoaWZwLT5p
Zl9saW5rX3N0YXRlKSB7CisJY2FzZSBMSU5LX1NUQVRFX1VQOgorCQlpbXItPmlmbV9zdGF0dXMg
PSBJRk1fQVZBTElEIHwgSUZNX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBMSU5LX1NUQVRFX0RP
V046CisJCWltci0+aWZtX3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCWltci0+aWZtX3N0YXR1cyA9IDA7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQK
K3VtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNiX3Byb2NfY2FsbGJhY2tfdCBj
YWxsYmFjaywKKwkJc3RydWN0IHVzYl9wcm9jX21zZyAqdDAsIHN0cnVjdCB1c2JfcHJvY19tc2cg
KnQxLCBpbnQgc3luYykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKiB0YXNrOworCisJbXR4X2Fzc2Vy
dCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAodXNiX3Byb2NfaXNfZ29uZSgmc2Mt
PnNjX3Rhc2txdWV1ZSkpIHsKKwkJcmV0dXJuOworCX0KKworCXRhc2sgPSB1c2JfcHJvY19tc2ln
bmFsKCZzYy0+c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCisJdGFzay0+aGRyLnBtX2NhbGxiYWNr
ID0gY2FsbGJhY2s7CisJdGFzay0+c2MgPSBzYzsKKworCWlmIChzeW5jKSB7CisJCXVzYl9wcm9j
X213YWl0KCZzYy0+c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCX0KK30KKworc3RhdGljIHZvaWQK
K3VtYl9uZXdzdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgZW51bSB1bWJfc3RhdGUgbmV3c3Rh
dGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJ
aWYgKG5ld3N0YXRlID09IHNjLT5zY19zdGF0ZSkKKwkJcmV0dXJuOworCWlmICgoKGZsYWdzICYg
VU1CX05TX0RPTlRfRFJPUCkgJiYgbmV3c3RhdGUgPCBzYy0+c2Nfc3RhdGUpIHx8CisJICAgICgo
ZmxhZ3MgJiBVTUJfTlNfRE9OVF9SQUlTRSkgJiYgbmV3c3RhdGUgPiBzYy0+c2Nfc3RhdGUpKQor
CQlyZXR1cm47CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfREVC
VUcsICIlczogc3RhdGUgZ29pbmcgJXMgZnJvbSAnJXMnIHRvICclcydcbiIsCisJCSAgICBERVZO
QU0oc2MpLCBuZXdzdGF0ZSA+IHNjLT5zY19zdGF0ZSA/ICJ1cCIgOiAiZG93biIsCisJCSAgICB1
bWJfaXN0YXRlKHNjLT5zY19zdGF0ZSksIHVtYl9pc3RhdGUobmV3c3RhdGUpKTsKKwlzYy0+c2Nf
c3RhdGUgPSBuZXdzdGF0ZTsKKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rh
c2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRy
LAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZz
Yy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXRlX3Rhc2soc3RydWN0IHVz
Yl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3QgdW1i
X3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3Qg
aWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50CSBzdGF0
ZTsKKworCURQUklOVEYoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmIChzYy0+c2NfaW5mby5y
ZWdzdGF0ZSA9PSBNQklNX1JFR1NUQVRFX1JPQU1JTkcgJiYgIXNjLT5zY19yb2FtaW5nKSB7CisJ
CS8qCisJCSAqIFF1ZXJ5IHRoZSByZWdpc3RyYXRpb24gc3RhdGUgdW50aWwgd2UncmUgd2l0aCB0
aGUgaG9tZQorCQkgKiBuZXR3b3JrIGFnYWluLgorCQkgKi8KKwkJdW1iX2NtZChzYywgTUJJTV9D
SURfUkVHSVNURVJfU1RBVEUsIE1CSU1fQ01ET1BfUVJZLCBOVUxMLCAwKTsKKwkJcmV0dXJuOwor
CX0KKworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKQorCQl1bWJfdXAoc2MpOworCWVsc2UK
KwkJdW1iX2Rvd24oc2MsIDApOworCisJc3RhdGUgPSAoc2MtPnNjX3N0YXRlID09IFVNQl9TX1VQ
KSA/IExJTktfU1RBVEVfVVAgOiBMSU5LX1NUQVRFX0RPV047CisJaWYgKGlmcC0+aWZfbGlua19z
dGF0ZSAhPSBzdGF0ZSkgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxv
ZyhMT0dfREVCVUcsICIlczogbGluayBzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXNcbiIsCisJ
CQkgICAgREVWTkFNKHNjKSwKKwkJCSAgICAoaWZwLT5pZl9saW5rX3N0YXRlID09IExJTktfU1RB
VEVfVVApCisJCQkgICAgPyAidXAiIDogImRvd24iLAorCQkJICAgIChzdGF0ZSA9PSBMSU5LX1NU
QVRFX1VQKSA/ICJ1cCIgOiAiZG93biIpOworCQlpZnAtPmlmX2xpbmtfc3RhdGUgPSBzdGF0ZTsK
KwkJaWYgKHN0YXRlICE9IExJTktfU1RBVEVfVVApIHsKKwkJCS8qCisJCQkgKiBQdXJnZSBhbnkg
ZXhpc3RpbmcgYWRkcmVzc2VzCisJCQkgKi8KKwkJCW1lbXNldChzYy0+c2NfaW5mby5pcHY0ZG5z
LCAwLAorCQkJICAgIHNpemVvZiAoc2MtPnNjX2luZm8uaXB2NGRucykpOworCQkJbXR4X3VubG9j
aygmc2MtPnNjX211dGV4KTsKKwkJCWlmIChpbl9jb250cm9sKE5VTEwsIFNJT0NHSUZBRERSLCAo
Y2FkZHJfdCkmaWZyLCBpZnAsIGN1cnRocmVhZCkgPT0gMCAmJgorCQkJICAgIHNhdG9zaW4oJmlm
ci5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRkciAhPQorCQkJICAgIElOQUREUl9BTlkpIHsKKwkJ
CQlpbl9jb250cm9sKE5VTEwsIFNJT0NESUZBRERSLCAoY2FkZHJfdCkmaWZyLCBpZnAsIGN1cnRo
cmVhZCk7CisJCQl9CisJCQltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwkJfQorCQlpZl9saW5r
X3N0YXRlX2NoYW5nZShpZnAsIHN0YXRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdXAo
c3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKworCXN3aXRjaCAoc2MtPnNjX3N0YXRlKSB7CisJY2FzZSBVTUJfU19ET1dOOgorCQlEUFJJ
TlRGKCJpbml0OiBvcGVuaW5nIC4uLlxuIik7CisJCXVtYl9vcGVuKHNjKTsKKwkJYnJlYWs7CisJ
Y2FzZSBVTUJfU19PUEVOOgorCQlpZiAoc2MtPnNjX2ZsYWdzICYgVU1CRkxHX0ZDQ19BVVRIX1JF
UVVJUkVEKSB7CisJCQlpZiAoc2MtPnNjX2NpZCA9PSAtMSkgeworCQkJCURQUklOVEYoImluaXQ6
IGFsbG9jYXRpbmcgQ0lEIC4uLlxuIik7CisJCQkJdW1iX2FsbG9jYXRlX2NpZChzYyk7CisJCQkJ
YnJlYWs7CisJCQl9IGVsc2UKKwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05T
X0RPTlRfRFJPUCk7CisJCX0gZWxzZSB7CisJCQlEUFJJTlRGKCJpbml0OiB0dXJuaW5nIHJhZGlv
IG9uIC4uLlxuIik7CisJCQl1bWJfcmFkaW8oc2MsIDEpOworCQkJYnJlYWs7CisJCX0KKwkJLypG
QUxMVEhST1VHSCovCisJY2FzZSBVTUJfU19DSUQ6CisJCURQUklOVEYoImluaXQ6IHNlbmRpbmcg
RkNDIGF1dGggLi4uXG4iKTsKKwkJdW1iX3NlbmRfZmNjX2F1dGgoc2MpOworCQlicmVhazsKKwlj
YXNlIFVNQl9TX1JBRElPOgorCQlEUFJJTlRGKCJpbml0OiBjaGVja2luZyBTSU0gc3RhdGUgLi4u
XG4iKTsKKwkJdW1iX2NtZChzYywgTUJJTV9DSURfU1VCU0NSSUJFUl9SRUFEWV9TVEFUVVMsIE1C
SU1fQ01ET1BfUVJZLAorCQkgICAgTlVMTCwgMCk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfU0lN
UkVBRFk6CisJCURQUklOVEYoImluaXQ6IGF0dGFjaGluZyAuLi5cbiIpOworCQl1bWJfcGFja2V0
X3NlcnZpY2Uoc2MsIDEpOworCQlicmVhazsKKwljYXNlIFVNQl9TX0FUVEFDSEVEOgorCQlzYy0+
c2NfdHhfc2VxID0gMDsKKwkJRFBSSU5URigiaW5pdDogY29ubmVjdGluZyAuLi5cbiIpOworCQl1
bWJfY29ubmVjdChzYyk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfQ09OTkVDVEVEOgorCQlEUFJJ
TlRGKCJpbml0OiBnZXR0aW5nIElQIGNvbmZpZyAuLi5cbiIpOworCQl1bWJfcXJ5X2lwY29uZmln
KHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19VUDoKKwkJRFBSSU5URigiaW5pdDogcmVhY2hl
ZCBzdGF0ZSBVUFxuIik7CisJCWlmICghKGlmcC0+aWZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcp
KSB7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJCQlpZnAtPmlm
X2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCQkJdW1iX3J4KHNjKTsKKwkJfQorCQli
cmVhazsKKwl9CisJaWYgKHNjLT5zY19zdGF0ZSA8IFVNQl9TX1VQKQorCQl1c2JfY2FsbG91dF9y
ZXNldCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyLAorCQkgICAgVU1CX1NUQVRFX0NIQU5HRV9USU1F
T1VUICogaHosIHVtYl9zdGF0ZWNoZ190aW1lb3V0LCBzYyk7CisJZWxzZSB7CisJCXVzYl9jYWxs
b3V0X3N0b3AoJnNjLT5zY19zdGF0ZWNoZ190aW1lcik7CisJfQorCXJldHVybjsKK30KKworc3Rh
dGljIHZvaWQKK3VtYl9kb3duKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgZm9yY2UpCit7CisJ
dW1iX2Nsb3NlX2J1bGtwaXBlcyhzYyk7CisKKwlzd2l0Y2ggKHNjLT5zY19zdGF0ZSkgeworCWNh
c2UgVU1CX1NfVVA6CisJY2FzZSBVTUJfU19DT05ORUNURUQ6CisJCURQUklOVEYoInN0b3A6IGRp
c2Nvbm5lY3RpbmcgLi4uXG4iKTsKKwkJdW1iX2Rpc2Nvbm5lY3Qoc2MpOworCQlpZiAoIWZvcmNl
KQorCQkJYnJlYWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1NfQVRUQUNIRUQ6CisJ
CURQUklOVEYoInN0b3A6IGRldGFjaGluZyAuLi5cbiIpOworCQl1bWJfcGFja2V0X3NlcnZpY2Uo
c2MsIDApOworCQlpZiAoIWZvcmNlKQorCQkJYnJlYWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNh
c2UgVU1CX1NfU0lNUkVBRFk6CisJY2FzZSBVTUJfU19SQURJTzoKKwkJRFBSSU5URigic3RvcDog
dHVybmluZyByYWRpbyBvZmYgLi4uXG4iKTsKKwkJdW1iX3JhZGlvKHNjLCAwKTsKKwkJaWYgKCFm
b3JjZSkKKwkJCWJyZWFrOworCQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIFVNQl9TX0NJRDoKKwlj
YXNlIFVNQl9TX09QRU46CisJY2FzZSBVTUJfU19ET1dOOgorCQkvKiBEbyBub3QgY2xvc2UgdGhl
IGRldmljZSAqLworCQlEUFJJTlRGKCJzdG9wOiByZWFjaGVkIHN0YXRlIERPV05cbiIpOworCQli
cmVhazsKKwl9CisJaWYgKGZvcmNlKQorCQlzYy0+c2Nfc3RhdGUgPSBVTUJfU19PUEVOOworCisJ
aWYgKHNjLT5zY19zdGF0ZSA+IFVNQl9TX09QRU4pCisJCXVzYl9jYWxsb3V0X3Jlc2V0KCZzYy0+
c2Nfc3RhdGVjaGdfdGltZXIsCisJCSAgICBVTUJfU1RBVEVfQ0hBTkdFX1RJTUVPVVQgKiBoeiwg
dW1iX3N0YXRlY2hnX3RpbWVvdXQsIHNjKTsKKwllbHNlCisJCXVzYl9jYWxsb3V0X3N0b3AoJnNj
LT5zY19zdGF0ZWNoZ190aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZ2V0X3Jlc3BvbnNl
X3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFz
ayA9IChzdHJ1Y3QgdW1iX3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNr
LT5zYzsKKwlpbnQJIGxlbjsKKworCURQUklOVEYoIiVzKClcbiIsIF9fZnVuY19fKTsKKwkvKgor
CSAqIEZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIHNlbmQgb24gUkVTUE9OU0VfQVZBSUxBQkxFIG5v
dGlmaWNhdGlvbiBmb3IKKwkgKiBlYWNoIGVuY2Fwc3VsYXRlZCByZXNwb25zZSB0aGF0IGlzIHRv
IGJlIHByb2Nlc3NlZCBieSB0aGUgaG9zdC4KKwkgKiBCdXQgb2YgY291cnNlLCB3ZSBjYW4gcmVj
ZWl2ZSBtdWx0aXBsZSBub3RpZmljYXRpb25zIGJlZm9yZSB0aGUKKwkgKiByZXNwb25zZSB0YXNr
IGlzIHJ1bi4KKwkgKi8KKwl3aGlsZSAoc2MtPnNjX25yZXNwID4gMCkgeworCQktLXNjLT5zY19u
cmVzcDsKKwkJbGVuID0gc2MtPnNjX2N0cmxfbGVuOworCQlpZiAodW1iX2dldF9lbmNhcF9yZXNw
b25zZShzYywgc2MtPnNjX3Jlc3BfYnVmLCAmbGVuKSkKKwkJCXVtYl9kZWNvZGVfcmVzcG9uc2Uo
c2MsIHNjLT5zY19yZXNwX2J1ZiwgbGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVj
b2RlX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpyZXNwb25zZSwgaW50IGxl
bikKK3sKKwlzdHJ1Y3QgbWJpbV9tc2doZHIgKmhkciA9IHJlc3BvbnNlOworCXN0cnVjdCBtYmlt
X2ZyYWdtZW50ZWRfbXNnX2hkciAqZnJhZ2hkcjsKKwl1aW50MzJfdCB0eXBlOworCisJRFBSSU5U
Rk4oMywgImdvdCByZXNwb25zZTogbGVuICVkXG4iLCBsZW4pOworCUREVU1QTig0LCByZXNwb25z
ZSwgbGVuKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpoZHIpIHx8IGxlMzJ0b2goaGRyLT5sZW4p
ICE9IGxlbikgeworCQkvKgorCQkgKiBXZSBzaG91bGQgcHJvYmFibHkgY2FuY2VsIGEgdHJhbnNh
Y3Rpb24sIGJ1dCBzaW5jZSB0aGUKKwkJICogbWVzc2FnZSBpcyB0b28gc2hvcnQsIHdlIGNhbm5v
dCBkZWNvZGUgdGhlIHRyYW5zYWN0aW9uCisJCSAqIGlkICh0aWQpIGFuZCBoZW5jZSBkb24ndCBr
bm93LCB3aG9tIHRvIGNhbmNlbC4gTXVzdCB3YWl0CisJCSAqIGZvciB0aGUgdGltZW91dC4KKwkJ
ICovCisJCURQUklOVEYoInJlY2VpdmVkIHNob3J0IHJlc3BvbnNlIChsZW4gJWQpXG4iLAorCQkg
ICAgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogWFhYIEZJWE1FOiBpZiBtZXNzYWdl
IGlzIGZyYWdtZW50ZWQsIHN0b3JlIGl0IHVudGlsIGxhc3QgZnJhZworCSAqCWlzIHJlY2VpdmVk
IGFuZCB0aGVuIHJlLWFzc2VtYmxlIGFsbCBmcmFnbWVudHMuCisJICovCisJdHlwZSA9IGxlMzJ0
b2goaGRyLT50eXBlKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1CSU1fSU5ESUNBVEVfU1RB
VFVTX01TRzoKKwljYXNlIE1CSU1fQ09NTUFORF9ET05FOgorCQlmcmFnaGRyID0gcmVzcG9uc2U7
CisJCWlmIChsZTMydG9oKGZyYWdoZHItPmZyYWcubmZyYWcpICE9IDEpIHsKKwkJCURQUklOVEYo
ImRpc2NhcmRpbmcgZnJhZ21lbnRlZCBtZXNzYWdlc1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJRFBSSU5URigiPC0gcmN2ICVzICh0
aWQgJXUpXG4iLCB1bWJfcmVxdWVzdDJzdHIodHlwZSksCisJICAgIGxlMzJ0b2goaGRyLT50aWQp
KTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1CSU1fRlVOQ1RJT05fRVJST1JfTVNHOgorCWNh
c2UgTUJJTV9IT1NUX0VSUk9SX01TRzoKKwl7CisJCXN0cnVjdCBtYmltX2YyaF9ob3N0ZXJyICpl
OworCQlpbnQJIGVycjsKKworCQlpZiAobGVuID49IHNpemVvZiAoKmUpKSB7CisJCQllID0gcmVz
cG9uc2U7CisJCQllcnIgPSBsZTMydG9oKGUtPmVycik7CisKKwkJCURQUklOVEYoIiVzIG1lc3Nh
Z2UsIGVycm9yICVzICh0aWQgJXUpXG4iLAorCQkJICAgIHVtYl9yZXF1ZXN0MnN0cih0eXBlKSwK
KwkJCSAgICB1bWJfZXJyb3Iyc3RyKGVyciksIGxlMzJ0b2goaGRyLT50aWQpKTsKKwkJCWlmIChl
cnIgPT0gTUJJTV9FUlJPUl9OT1RfT1BFTkVEKQorCQkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1Nf
RE9XTiwgMCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgTUJJTV9JTkRJQ0FURV9TVEFUVVNf
TVNHOgorCQl1bWJfaGFuZGxlX2luZGljYXRlX3N0YXR1c19tc2coc2MsIHJlc3BvbnNlLCBsZW4p
OworCQlicmVhazsKKwljYXNlIE1CSU1fT1BFTl9ET05FOgorCQl1bWJfaGFuZGxlX29wZW5kb25l
X21zZyhzYywgcmVzcG9uc2UsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DTE9TRV9ET05F
OgorCQl1bWJfaGFuZGxlX2Nsb3NlZG9uZV9tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVh
azsKKwljYXNlIE1CSU1fQ09NTUFORF9ET05FOgorCQl1bWJfY29tbWFuZF9kb25lKHNjLCByZXNw
b25zZSwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URigiZGlzY2FyZCBtZXNz
YWdlICVzXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3RyKHR5cGUpKTsKKwkJYnJlYWs7CisJfQor
fQorCitzdGF0aWMgdm9pZAordW1iX2hhbmRsZV9pbmRpY2F0ZV9zdGF0dXNfbXNnKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9p
bmRpY2F0ZV9zdGF0dXMgKm0gPSBkYXRhOworCXVpbnQzMl90IGluZm9sZW47CisJdWludDMyX3Qg
Y2lkOworCisJaWYgKGxlbiA8IHNpemVvZiAoKm0pKSB7CisJCURQUklOVEYoImRpc2NhcmQgc2hv
cnQgJXMgbWVzc2FnZVxuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKG0tPmhkci50
eXBlKSkpOworCQlyZXR1cm47CisJfQorCWlmIChtZW1jbXAobS0+ZGV2aWQsIHVtYl91dWlkX2Jh
c2ljX2Nvbm5lY3QsIHNpemVvZiAobS0+ZGV2aWQpKSkgeworCQlEUFJJTlRGKCJkaXNjYXJkICVz
IG1lc3NhZ2UgZm9yIG90aGVyIFVVSUQgJyVzJ1xuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihs
ZTMydG9oKG0tPmhkci50eXBlKSksCisJCSAgICB1bWJfdXVpZDJzdHIobS0+ZGV2aWQpKTsKKwkJ
cmV0dXJuOworCX0KKwlpbmZvbGVuID0gbGUzMnRvaChtLT5pbmZvbGVuKTsKKwlpZiAobGVuIDwg
c2l6ZW9mICgqbSkgKyBpbmZvbGVuKSB7CisJCURQUklOVEYoImRpc2NhcmQgdHJ1bmNhdGVkICVz
IG1lc3NhZ2UgKHdhbnQgJWQsIGdvdCAlZClcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIobGUz
MnRvaChtLT5oZHIudHlwZSkpLAorCQkgICAgKGludClzaXplb2YgKCptKSArIGluZm9sZW4sIGxl
bik7CisJCXJldHVybjsKKwl9CisKKwljaWQgPSBsZTMydG9oKG0tPmNpZCk7CisJRFBSSU5URigi
aW5kaWNhdGUgJXMgc3RhdHVzXG4iLCB1bWJfY2lkMnN0cihjaWQpKTsKKwl1bWJfZGVjb2RlX2Np
ZChzYywgY2lkLCBtLT5pbmZvLCBpbmZvbGVuKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9oYW5k
bGVfb3BlbmRvbmVfbXNnKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVu
KQoreworCXN0cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lICpyZXNwID0gZGF0YTsKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1
cyA9IGxlMzJ0b2gocmVzcC0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IE1CSU1fU1RBVFVTX1NV
Q0NFU1MpIHsKKwkJaWYgKHNjLT5zY19tYXhzZXNzaW9ucyA9PSAwKSB7CisJCQl1bWJfY21kKHNj
LCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9RUlksIE5VTEwsCisJCQkgICAgMCk7
CisJCQl1bWJfY21kKHNjLCBNQklNX0NJRF9QSU4sIE1CSU1fQ01ET1BfUVJZLCBOVUxMLCAwKTsK
KwkJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1FSWSwK
KwkJCSAgICBOVUxMLCAwKTsKKwkJfQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIFVN
Ql9OU19ET05UX0RST1ApOworCX0gZWxzZSBpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykK
KwkJbG9nKExPR19FUlIsICIlczogb3BlbiBlcnJvcjogJXNcbiIsIERFVk5BTShzYyksCisJCSAg
ICB1bWJfc3RhdHVzMnN0cihzdGF0dXMpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfaGFuZGxlX2Nsb3NlZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEs
IGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fZjJoX29wZW5jbG9zZWRvbmUgKnJlc3AgPSBkYXRh
OworCXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1cyA9IGxlMzJ0b2gocmVzcC0+c3RhdHVzKTsK
KwlpZiAoc3RhdHVzID09IE1CSU1fU1RBVFVTX1NVQ0NFU1MpCisJCXVtYl9uZXdzdGF0ZShzYywg
VU1CX1NfRE9XTiwgMCk7CisJZWxzZQorCQlEUFJJTlRGKCJjbG9zZSBlcnJvcjogJXNcbiIsCisJ
CSAgICB1bWJfc3RhdHVzMnN0cihzdGF0dXMpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZAordW1iX2dldGluZm9idWYoY2hhciAqaW4sIGludCBpbmxlbiwgdWludDMyX3Qgb2Zm
cywgdWludDMyX3Qgc3osCisgICAgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKQoreworCW9mZnMg
PSBsZTMydG9oKG9mZnMpOworCXN6ID0gbGUzMnRvaChzeik7CisJaWYgKGlubGVuID49IG9mZnMg
KyBzeikgeworCQltZW1zZXQob3V0LCAwLCBvdXRsZW4pOworCQltZW1jcHkob3V0LCBpbiArIG9m
ZnMsIE1JTihzeiwgb3V0bGVuKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAordW1iX3Bh
ZGRpbmcodm9pZCAqZGF0YSwgaW50IGxlbiwgc2l6ZV90IHN6KQoreworCWNoYXIgKnAgPSBkYXRh
OworCWludCBucCA9IDA7CisKKwl3aGlsZSAobGVuIDwgc3ogJiYgKGxlbiAlIDQpICE9IDApIHsK
KwkJKnArKyA9ICdcMCc7CisJCWxlbisrOworCQlucCsrOworCX0KKwlyZXR1cm4gbnA7Cit9CisK
K3N0YXRpYyBpbmxpbmUgaW50Cit1bWJfYWRkc3RyKHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnN6LCBp
bnQgKm9mZnMsIHZvaWQgKnN0ciwgaW50IHNsZW4sCisgICAgdWludDMyX3QgKm9mZnNtZW1iZXIs
IHVpbnQzMl90ICpzaXplbWVtYmVyKQoreworCWlmICgqb2ZmcyArIHNsZW4gPiBidWZzeikKKwkJ
cmV0dXJuIDA7CisKKwkqc2l6ZW1lbWJlciA9IGh0b2xlMzIoKHVpbnQzMl90KXNsZW4pOworCWlm
IChzbGVuICYmIHN0cikgeworCQkqb2Zmc21lbWJlciA9IGh0b2xlMzIoKHVpbnQzMl90KSpvZmZz
KTsKKwkJbWVtY3B5KChjaGFyICopYnVmICsgKm9mZnMsIHN0ciwgc2xlbik7CisJCSpvZmZzICs9
IHNsZW47CisJCSpvZmZzICs9IHVtYl9wYWRkaW5nKGJ1ZiwgKm9mZnMsIGJ1ZnN6KTsKKwl9IGVs
c2UKKwkJKm9mZnNtZW1iZXIgPSBodG9sZTMyKDApOworCXJldHVybiAxOworfQorCitzdGF0aWMg
dm9pZAordW1iX2luX2xlbjJtYXNrKHN0cnVjdCBpbl9hZGRyICptYXNrLCBpbnQgbGVuKQorewor
CWludCBpOworCXVfY2hhciAqcDsKKworCXAgPSAodV9jaGFyICopbWFzazsKKwltZW1zZXQobWFz
aywgMCwgc2l6ZW9mICgqbWFzaykpOworCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA4OyBpKyspCisJ
CXBbaV0gPSAweGZmOworCWlmIChsZW4gJSA4KQorCQlwW2ldID0gKDB4ZmYwMCA+PiAobGVuICUg
OCkpICYgMHhmZjsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShz
dHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJp
bV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlX2luZm8gKnJzID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnJzKSkKKwkJcmV0dXJu
IDA7CisJc2MtPnNjX2luZm8ubndlcnJvciA9IGxlMzJ0b2gocnMtPm53ZXJyb3IpOworCXNjLT5z
Y19pbmZvLnJlZ3N0YXRlID0gbGUzMnRvaChycy0+cmVnc3RhdGUpOworCXNjLT5zY19pbmZvLnJl
Z21vZGUgPSBsZTMydG9oKHJzLT5yZWdtb2RlKTsKKwlzYy0+c2NfaW5mby5jZWxsY2xhc3MgPSBs
ZTMydG9oKHJzLT5jdXJjZWxsY2xhc3MpOworCisJLyogWFhYIHNob3VsZCB3ZSByZW1lbWJlciB0
aGUgcHJvdmlkZXJfaWQ/ICovCisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBycy0+cHJvdm5h
bWVfb2ZmcywgcnMtPnByb3ZuYW1lX3NpemUsCisJICAgIHNjLT5zY19pbmZvLnByb3ZpZGVyLCBz
aXplb2YgKHNjLT5zY19pbmZvLnByb3ZpZGVyKSk7CisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVu
LCBycy0+cm9hbWluZ3R4dF9vZmZzLCBycy0+cm9hbWluZ3R4dF9zaXplLAorCSAgICBzYy0+c2Nf
aW5mby5yb2FtaW5ndHh0LCBzaXplb2YgKHNjLT5zY19pbmZvLnJvYW1pbmd0eHQpKTsKKworCURQ
UklOVEZOKDIsICIlcywgYXZhaWxjbGFzcyAweCV4LCBjbGFzcyAweCV4LCByZWdtb2RlICVkXG4i
LAorCSAgICB1bWJfcmVnc3RhdGUoc2MtPnNjX2luZm8ucmVnc3RhdGUpLAorCSAgICBsZTMydG9o
KHJzLT5hdmFpbGNsYXNzZXMpLCBzYy0+c2NfaW5mby5jZWxsY2xhc3MsCisJICAgIHNjLT5zY19p
bmZvLnJlZ21vZGUpOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RB
VEVfUk9BTUlORyAmJgorCSAgICAhc2MtPnNjX3JvYW1pbmcgJiYKKwkgICAgc2MtPnNjX2luZm8u
YWN0aXZhdGlvbiA9PSBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVEVEKSB7CisJCWlmIChp
ZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19JTkZPLAorCQkJICAgICIlczog
ZGlzY29ubmVjdGluZyBmcm9tIHJvYW1pbmcgbmV0d29ya1xuIiwKKwkJCSAgICBERVZOQU0oc2Mp
KTsKKwkJdW1iX2Rpc2Nvbm5lY3Qoc2MpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlu
dAordW1iX2RlY29kZV9kZXZpY2VzX2NhcHMoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRh
dGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX2RldmljZV9jYXBzICpkYyA9IGRhdGE7
CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqZGMpKQorCQlyZXR1cm4gMDsKKwlzYy0+c2NfbWF4c2Vz
c2lvbnMgPSBsZTMydG9oKGRjLT5tYXhfc2Vzc2lvbnMpOworCXNjLT5zY19pbmZvLnN1cHBvcnRl
ZGNsYXNzZXMgPSBsZTMydG9oKGRjLT5kYXRhY2xhc3MpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEs
IGxlbiwgZGMtPmRldmlkX29mZnMsIGRjLT5kZXZpZF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5k
ZXZpZCwgc2l6ZW9mIChzYy0+c2NfaW5mby5kZXZpZCkpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEs
IGxlbiwgZGMtPmZ3aW5mb19vZmZzLCBkYy0+ZndpbmZvX3NpemUsCisJICAgIHNjLT5zY19pbmZv
LmZ3aW5mbywgc2l6ZW9mIChzYy0+c2NfaW5mby5md2luZm8pKTsKKwl1bWJfZ2V0aW5mb2J1Zihk
YXRhLCBsZW4sIGRjLT5od2luZm9fb2ZmcywgZGMtPmh3aW5mb19zaXplLAorCSAgICBzYy0+c2Nf
aW5mby5od2luZm8sIHNpemVvZiAoc2MtPnNjX2luZm8uaHdpbmZvKSk7CisJRFBSSU5URk4oMiwg
Im1heCBzZXNzaW9ucyAlZCwgc3VwcG9ydGVkIGNsYXNzZXMgMHgleFxuIiwKKwkgICAgc2MtPnNj
X21heHNlc3Npb25zLCBzYy0+c2NfaW5mby5zdXBwb3J0ZWRjbGFzc2VzKTsKKwlyZXR1cm4gMTsK
K30KKworc3RhdGljIGludAordW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1i
X3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfc3Vi
c2NyaWJlcl9yZWFkeV9pbmZvICpzaSA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRf
SUZQKHNjKTsKKwlpbnQJbnBuOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnNpKSkKKwkJcmV0dXJu
IDA7CisJc2MtPnNjX2luZm8uc2ltX3N0YXRlID0gbGUzMnRvaChzaS0+cmVhZHkpOworCisJdW1i
X2dldGluZm9idWYoZGF0YSwgbGVuLCBzaS0+c2lkX29mZnMsIHNpLT5zaWRfc2l6ZSwKKwkgICAg
c2MtPnNjX2luZm8uc2lkLCBzaXplb2YgKHNjLT5zY19pbmZvLnNpZCkpOworCXVtYl9nZXRpbmZv
YnVmKGRhdGEsIGxlbiwgc2ktPmljY19vZmZzLCBzaS0+aWNjX3NpemUsCisJICAgIHNjLT5zY19p
bmZvLmljY2lkLCBzaXplb2YgKHNjLT5zY19pbmZvLmljY2lkKSk7CisKKwlucG4gPSBsZTMydG9o
KHNpLT5ub19wbik7CisJaWYgKG5wbiA+IDApCisJCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwg
c2ktPnBuWzBdLm9mZnMsIHNpLT5wblswXS5zaXplLAorCQkgICAgc2MtPnNjX2luZm8ucG4sIHNp
emVvZiAoc2MtPnNjX2luZm8ucG4pKTsKKwllbHNlCisJCW1lbXNldChzYy0+c2NfaW5mby5wbiwg
MCwgc2l6ZW9mIChzYy0+c2NfaW5mby5wbikpOworCisJaWYgKHNjLT5zY19pbmZvLnNpbV9zdGF0
ZSA9PSBNQklNX1NJTVNUQVRFX0xPQ0tFRCkKKwkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1C
X1BJTl9SRVFVSVJFRDsKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExP
R19JTkZPLCAiJXM6IFNJTSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9zaW1zdGF0ZShz
Yy0+c2NfaW5mby5zaW1fc3RhdGUpKTsKKwlpZiAoc2MtPnNjX2luZm8uc2ltX3N0YXRlID09IE1C
SU1fU0lNU1RBVEVfSU5JVElBTElaRUQpCisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfU0lNUkVB
RFksIFVNQl9OU19ET05UX0RST1ApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJf
ZGVjb2RlX3JhZGlvX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQg
bGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZV9pbmZvICpycyA9IGRhdGE7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpy
cykpCisJCXJldHVybiAwOworCisJc2MtPnNjX2luZm8uaHdfcmFkaW9fb24gPQorCSAgICAobGUz
MnRvaChycy0+aHdfc3RhdGUpID09IE1CSU1fUkFESU9fU1RBVEVfT04pID8gMSA6IDA7CisJc2Mt
PnNjX2luZm8uc3dfcmFkaW9fb24gPQorCSAgICAobGUzMnRvaChycy0+c3dfc3RhdGUpID09IE1C
SU1fUkFESU9fU1RBVEVfT04pID8gMSA6IDA7CisJaWYgKCFzYy0+c2NfaW5mby5od19yYWRpb19v
bikgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJyYWRpbyBpcyBkaXNhYmxlZCBieSBo
YXJkd2FyZSBzd2l0Y2hcbiIpOworCQkvKgorCQkgKiBYWFggZG8gd2UgbmVlZCBhIHRpbWUgdG8g
cG9sbCB0aGUgc3RhdGUgb2YgdGhlIHJma2lsbCBzd2l0Y2gKKwkJICoJb3Igd2lsbCB0aGUgZGV2
aWNlIHNlbmQgYW4gdW5zb2xpY2l0ZWQgbm90aWZpY2F0aW9uCisJCSAqCWluIGNhc2UgdGhlIHN0
YXRlIGNoYW5nZXM/CisJCSAqLworCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIDApOwor
CX0gZWxzZSBpZiAoIXNjLT5zY19pbmZvLnN3X3JhZGlvX29uKSB7CisJCWlmIChpZnAtPmlmX2Zs
YWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19JTkZPLCAiJXM6IHJhZGlvIGlzIG9mZlxuIiwg
REVWTkFNKHNjKSk7CisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfT1BFTiwgMCk7CisJfSBlbHNl
CisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfUkFESU8sIFVNQl9OU19ET05UX0RST1ApOworCXJl
dHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcGluX2luZm8g
KnBpID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90
CWF0dGVtcHRzX2xlZnQ7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqcGkpKQorCQlyZXR1cm4gMDsK
KworCWF0dGVtcHRzX2xlZnQgPSBsZTMydG9oKHBpLT5yZW1haW5pbmdfYXR0ZW1wdHMpOworCWlm
IChhdHRlbXB0c19sZWZ0ICE9IDB4ZmZmZmZmZmYpCisJCXNjLT5zY19pbmZvLnBpbl9hdHRlbXB0
c19sZWZ0ID0gYXR0ZW1wdHNfbGVmdDsKKworCXN3aXRjaCAobGUzMnRvaChwaS0+c3RhdGUpKSB7
CisJY2FzZSBNQklNX1BJTl9TVEFURV9VTkxPQ0tFRDoKKwkJc2MtPnNjX2luZm8ucGluX3N0YXRl
ID0gVU1CX1BJTl9VTkxPQ0tFRDsKKwkJYnJlYWs7CisJY2FzZSBNQklNX1BJTl9TVEFURV9MT0NL
RUQ6CisJCXN3aXRjaCAobGUzMnRvaChwaS0+dHlwZSkpIHsKKwkJY2FzZSBNQklNX1BJTl9UWVBF
X1BJTjE6CisJCQlzYy0+c2NfaW5mby5waW5fc3RhdGUgPSBVTUJfUElOX1JFUVVJUkVEOworCQkJ
YnJlYWs7CisJCWNhc2UgTUJJTV9QSU5fVFlQRV9QVUsxOgorCQkJc2MtPnNjX2luZm8ucGluX3N0
YXRlID0gVU1CX1BVS19SRVFVSVJFRDsKKwkJCWJyZWFrOworCQljYXNlIE1CSU1fUElOX1RZUEVf
UElOMjoKKwkJY2FzZSBNQklNX1BJTl9UWVBFX1BVSzI6CisJCQkvKiBBc3N1bWUgdGhhdCBQSU4x
IHdhcyBhY2NlcHRlZCAqLworCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9VTkxP
Q0tFRDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoaWZwLT5pZl9mbGFncyAm
IElGRl9ERUJVRykKKwkJbG9nKExPR19JTkZPLCAiJXM6ICVzIHN0YXRlICVzICglZCBhdHRlbXB0
cyBsZWZ0KVxuIiwKKwkJICAgIERFVk5BTShzYyksIHVtYl9waW5fdHlwZShsZTMydG9oKHBpLT50
eXBlKSksCisJCSAgICAobGUzMnRvaChwaS0+c3RhdGUpID09IE1CSU1fUElOX1NUQVRFX1VOTE9D
S0VEKSA/CisJCQkidW5sb2NrZWQiIDogImxvY2tlZCIsCisJCSAgICBsZTMydG9oKHBpLT5yZW1h
aW5pbmdfYXR0ZW1wdHMpKTsKKworCS8qCisJICogSW4gY2FzZSB0aGUgUElOIHdhcyBzZXQgYWZ0
ZXIgSUZGX1VQLCByZXRyaWdnZXIgdGhlIHN0YXRlIG1hY2hpbmUKKwkgKi8KKwltdHhfbG9jaygm
c2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNj
LT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tb
MV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXJldHVybiAxOworfQor
CitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3BhY2tldF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMg
KnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2Vy
dmljZV9pbmZvICpwc2kgPSBkYXRhOworCWludAkgc3RhdGUsIGhpZ2hlc3RjbGFzczsKKwl1aW50
NjRfdCB1cF9zcGVlZCwgZG93bl9zcGVlZDsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAo
c2MpOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnBzaSkpCisJCXJldHVybiAwOworCisJc2MtPnNj
X2luZm8ubndlcnJvciA9IGxlMzJ0b2gocHNpLT5ud2Vycm9yKTsKKwlzdGF0ZSA9IGxlMzJ0b2go
cHNpLT5zdGF0ZSk7CisJaGlnaGVzdGNsYXNzID0gbGUzMnRvaChwc2ktPmhpZ2hlc3RfZGF0YWNs
YXNzKTsKKwl1cF9zcGVlZCA9IGxlNjR0b2gocHNpLT51cGxpbmtfc3BlZWQpOworCWRvd25fc3Bl
ZWQgPSBsZTY0dG9oKHBzaS0+ZG93bmxpbmtfc3BlZWQpOworCWlmIChzYy0+c2NfaW5mby5wYWNr
ZXRzdGF0ZSAgIT0gc3RhdGUgfHwKKwkgICAgc2MtPnNjX2luZm8udXBsaW5rX3NwZWVkICE9IHVw
X3NwZWVkIHx8CisJICAgIHNjLT5zY19pbmZvLmRvd25saW5rX3NwZWVkICE9IGRvd25fc3BlZWQp
IHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpIHsKKwkJCWxvZyhMT0dfSU5GTywg
IiVzOiBwYWNrZXQgc2VydmljZSAiLCBERVZOQU0oc2MpKTsKKwkJCWlmIChzYy0+c2NfaW5mby5w
YWNrZXRzdGF0ZSAgIT0gc3RhdGUpCisJCQkJbG9nKExPR19JTkZPLCAiY2hhbmdlZCBmcm9tICVz
IHRvICIsCisJCQkJICAgIHVtYl9wYWNrZXRfc3RhdGUoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUp
KTsKKwkJCWxvZyhMT0dfSU5GTywgIiVzLCBjbGFzcyAlcywgc3BlZWQ6ICUiIFBSSXU2NCAiIHVw
IC8gJSIgUFJJdTY0ICIgZG93blxuIiwKKwkJCSAgICB1bWJfcGFja2V0X3N0YXRlKHN0YXRlKSwK
KwkJCSAgICB1bWJfZGF0YWNsYXNzKGhpZ2hlc3RjbGFzcyksIHVwX3NwZWVkLCBkb3duX3NwZWVk
KTsKKwkJfQorCX0KKwlzYy0+c2NfaW5mby5wYWNrZXRzdGF0ZSA9IHN0YXRlOworCXNjLT5zY19p
bmZvLmhpZ2hlc3RjbGFzcyA9IGhpZ2hlc3RjbGFzczsKKwlzYy0+c2NfaW5mby51cGxpbmtfc3Bl
ZWQgPSB1cF9zcGVlZDsKKwlzYy0+c2NfaW5mby5kb3dubGlua19zcGVlZCA9IGRvd25fc3BlZWQ7
CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnbW9kZSA9PSBNQklNX1JFR01PREVfQVVUT01BVElDKSB7
CisJCS8qCisJCSAqIEZvciBkZXZpY2VzIHVzaW5nIGF1dG9tYXRpYyByZWdpc3RyYXRpb24gbW9k
ZSwganVzdCBwcm9jZWVkLAorCQkgKiBvbmNlIHJlZ2lzdHJhdGlvbiBoYXMgY29tcGxldGVkLgor
CQkgKi8KKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApIHsKKwkJCXN3aXRjaCAoc2MtPnNj
X2luZm8ucmVnc3RhdGUpIHsKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9IT01FOgorCQkJY2FzZSBN
QklNX1JFR1NUQVRFX1JPQU1JTkc6CisJCQljYXNlIE1CSU1fUkVHU1RBVEVfUEFSVE5FUjoKKwkJ
CQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVELAorCQkJCSAgICBVTUJfTlNfRE9OVF9E
Uk9QKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxz
ZQorCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19TSU1SRUFEWSwgVU1CX05TX0RPTlRfUkFJU0Up
OworCX0gZWxzZSBzd2l0Y2ggKHNjLT5zY19pbmZvLnBhY2tldHN0YXRlKSB7CisJY2FzZSBNQklN
X1BLVFNFUlZJQ0VfU1RBVEVfQVRUQUNIRUQ6CisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfQVRU
QUNIRUQsIFVNQl9OU19ET05UX0RST1ApOworCQlicmVhazsKKwljYXNlIE1CSU1fUEtUU0VSVklD
RV9TVEFURV9ERVRBQ0hFRDoKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19TSU1SRUFEWSwgVU1C
X05TX0RPTlRfUkFJU0UpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBp
bnQKK3VtYl9kZWNvZGVfc2lnbmFsX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpk
YXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9zaWduYWxfc3RhdGUgKnNzID0gZGF0
YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWludAkgcnNzaTsKKworCWlm
IChsZW4gPCBzaXplb2YgKCpzcykpCisJCXJldHVybiAwOworCisJaWYgKGxlMzJ0b2goc3MtPnJz
c2kpID09IDk5KQorCQlyc3NpID0gVU1CX1ZBTFVFX1VOS05PV047CisJZWxzZSB7CisJCXJzc2kg
PSAtMTEzICsgMiAqIGxlMzJ0b2goc3MtPnJzc2kpOworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJ
RkZfREVCVUcpICYmIHNjLT5zY19pbmZvLnJzc2kgIT0gcnNzaSAmJgorCQkgICAgc2MtPnNjX3N0
YXRlID49IFVNQl9TX0NPTk5FQ1RFRCkKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiByc3NpICVkIGRC
bVxuIiwgREVWTkFNKHNjKSwgcnNzaSk7CisJfQorCXNjLT5zY19pbmZvLnJzc2kgPSByc3NpOwor
CXNjLT5zY19pbmZvLmJlciA9IGxlMzJ0b2goc3MtPmVycl9yYXRlKTsKKwlpZiAoc2MtPnNjX2lu
Zm8uYmVyID09IC05OSkKKwkJc2MtPnNjX2luZm8uYmVyID0gVU1CX1ZBTFVFX1VOS05PV047CisJ
cmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVj
dCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2Np
ZF9jb25uZWN0X2luZm8gKmNpID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAo
c2MpOworCWludAkgYWN0OworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNpKSkKKwkJcmV0dXJuIDA7
CisKKwlpZiAobGUzMnRvaChjaS0+c2Vzc2lvbmlkKSAhPSB1bWJfc2Vzc2lvbl9pZCkgeworCQlE
UFJJTlRGKCJkaXNjYXJkIGNvbm5lY3Rpb24gaW5mbyBmb3Igc2Vzc2lvbiAldVxuIiwKKwkJICAg
IGxlMzJ0b2goY2ktPnNlc3Npb25pZCkpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKG1lbWNtcChj
aS0+Y29udGV4dCwgdW1iX3V1aWRfY29udGV4dF9pbnRlcm5ldCwKKwkgICAgc2l6ZW9mIChjaS0+
Y29udGV4dCkpKSB7CisJCURQUklOVEYoImRpc2NhcmQgY29ubmVjdGlvbiBpbmZvIGZvciBvdGhl
ciBjb250ZXh0XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWFjdCA9IGxlMzJ0b2goY2ktPmFjdGl2
YXRpb24pOworCWlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uICE9IGFjdCkgeworCQlpZiAoaWZw
LT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBjb25uZWN0aW9u
ICVzXG4iLCBERVZOQU0oc2MpLAorCQkJICAgIHVtYl9hY3RpdmF0aW9uKGFjdCkpOworCQlpZiAo
KGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpICYmCisJCSAgICBsZTMydG9oKGNpLT5pcHR5cGUp
ICE9IE1CSU1fQ09OVEVYVF9JUFRZUEVfREVGQVVMVCAmJgorCQkgICAgbGUzMnRvaChjaS0+aXB0
eXBlKSAhPSBNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjQpCisJCQlsb2coTE9HX0RFQlVHLCAiJXM6
IGdvdCBpcHR5cGUgJWQgY29ubmVjdGlvblxuIiwKKwkJCSAgICBERVZOQU0oc2MpLCBsZTMydG9o
KGNpLT5pcHR5cGUpKTsKKworCQlzYy0+c2NfaW5mby5hY3RpdmF0aW9uID0gYWN0OworCQlzYy0+
c2NfaW5mby5ud2Vycm9yID0gbGUzMnRvaChjaS0+bndlcnJvcik7CisKKwkJaWYgKHNjLT5zY19p
bmZvLmFjdGl2YXRpb24gPT0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRCkKKwkJCXVt
Yl9uZXdzdGF0ZShzYywgVU1CX1NfQ09OTkVDVEVELCBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJZWxz
ZSBpZiAoc2MtPnNjX2luZm8uYWN0aXZhdGlvbiA9PQorCQkgICAgTUJJTV9BQ1RJVkFUSU9OX1NU
QVRFX0RFQUNUSVZBVEVEKQorCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19BVFRBQ0hFRCwgMCk7
CisJCS8qIGVsc2U6IG90aGVyIHN0YXRlcyBhcmUgcHVyZWx5IHRyYW5zaXRpb25hbCAqLworCX0K
KwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2FkZF9pbmV0X2NvbmZpZyhzdHJ1Y3Qg
dW1iX3NvZnRjICpzYywgc3RydWN0IGluX2FkZHIgaXAsIHVfaW50IHByZWZpeGxlbiwKKyAgICBz
dHJ1Y3QgaW5fYWRkciBndykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOwor
CXN0cnVjdCBpbl9hbGlhc3JlcSBpZnJhOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCWlu
dAkgcnY7CisKKwltZW1zZXQoJmlmcmEsIDAsIHNpemVvZiAoaWZyYSkpOworCXNpbiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX2FkZHI7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4pOworCXNpbi0+c2luX2FkZHIgPSBp
cDsKKworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX2RzdGFkZHI7CisJ
c2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4p
OworCXNpbi0+c2luX2FkZHIgPSBndzsKKworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikm
aWZyYS5pZnJhX21hc2s7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9s
ZW4gPSBzaXplb2YgKCpzaW4pOworCXVtYl9pbl9sZW4ybWFzaygmc2luLT5zaW5fYWRkciwgcHJl
Zml4bGVuKTsKKworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJcnYgPSBpbl9jb250cm9s
KE5VTEwsIFNJT0NBSUZBRERSLCAoY2FkZHJfdCkmaWZyYSwgaWZwLCBjdXJ0aHJlYWQpOworCW10
eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCWlmIChydiAhPSAwKSB7CisJCWRldmljZV9wcmludGYo
c2MtPnNjX2RldiwgInVuYWJsZSB0byBzZXQgSVB2NCBhZGRyZXNzLCBlcnJvciAlZFxuIiwKKwkJ
ICAgIHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RF
QlVHKQorCQlsb2coTE9HX0lORk8sICIlczogSVB2NCBhZGRyICVzLCBtYXNrICVzLCAiCisJCSAg
ICAiZ2F0ZXdheSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9udG9wKHNpbnRvc2EoJmlm
cmEuaWZyYV9hZGRyKSksCisJCSAgICB1bWJfbnRvcChzaW50b3NhKCZpZnJhLmlmcmFfbWFzaykp
LAorCQkgICAgdW1iX250b3Aoc2ludG9zYSgmaWZyYS5pZnJhX2RzdGFkZHIpKSk7CisKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHN0cnVj
dCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2Np
ZF9pcF9jb25maWd1cmF0aW9uX2luZm8gKmljID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9
IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IGF2YWlsX3Y0OworCXVpbnQzMl90IHZhbDsKKwlpbnQJ
IG4sIGk7CisJaW50CSBvZmY7CisJc3RydWN0IG1iaW1fY2lkX2lwdjRfZWxlbWVudCBpcHY0ZWxl
bTsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyLCBndzsKKwlpbnQJIHN0YXRlID0gLTE7CisJaW50CSBy
djsKKworCWlmIChsZW4gPCBzaXplb2YgKCppYykpCisJCXJldHVybiAwOworCWlmIChsZTMydG9o
KGljLT5zZXNzaW9uaWQpICE9IHVtYl9zZXNzaW9uX2lkKSB7CisJCURQUklOVEYoImlnbm9yZSBJ
UCBjb25maWd1cmF0aW9uIGZvciBzZXNzaW9uIGlkICVkXG4iLAorCQkgICAgbGUzMnRvaChpYy0+
c2Vzc2lvbmlkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSVB2NCBjb25maWd1cmF0
aW9uCisJICovCisJYXZhaWxfdjQgPSBsZTMydG9oKGljLT5pcHY0X2F2YWlsYWJsZSk7CisJaWYg
KChhdmFpbF92NCAmIChNQklNX0lQQ09ORl9IQVNfQUREUklORk8gfCBNQklNX0lQQ09ORl9IQVNf
R1dJTkZPKSkgPT0KKwkgICAgKE1CSU1fSVBDT05GX0hBU19BRERSSU5GTyB8IE1CSU1fSVBDT05G
X0hBU19HV0lORk8pKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25hZGRyKTsKKwkJb2ZmID0g
bGUzMnRvaChpYy0+aXB2NF9hZGRyb2Zmcyk7CisKKwkJaWYgKG4gPT0gMCB8fCBvZmYgKyBzaXpl
b2YgKGlwdjRlbGVtKSA+IGxlbikKKwkJCWdvdG8gdHJ5djY7CisJCWlmIChuICE9IDEgJiYgaWZw
LT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBtb3JlIHRoYW4g
b25lIElQdjQgYWRkcjogJWRcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgbik7CisKKwkJLyogT25s
eSBwaWNrIHRoZSBmaXJzdCBvbmUgKi8KKwkJbWVtY3B5KCZpcHY0ZWxlbSwgKGNoYXIgKilkYXRh
ICsgb2ZmLCBzaXplb2YgKGlwdjRlbGVtKSk7CisJCWlwdjRlbGVtLnByZWZpeGxlbiA9IGxlMzJ0
b2goaXB2NGVsZW0ucHJlZml4bGVuKTsKKwkJYWRkci5zX2FkZHIgPSBpcHY0ZWxlbS5hZGRyOwor
CisJCW9mZiA9IGxlMzJ0b2goaWMtPmlwdjRfZ3dvZmZzKTsKKwkJaWYgKG9mZiArIHNpemVvZiAo
Z3cpID4gbGVuKQorCQkJZ290byBkb25lOworCQltZW1jcHkoJmd3LCAoY2hhciAqKWRhdGEgKyBv
ZmYsIHNpemVvZiAoZ3cpKTsKKworCQlydiA9IHVtYl9hZGRfaW5ldF9jb25maWcoc2MsIGFkZHIs
IGlwdjRlbGVtLnByZWZpeGxlbiwgZ3cpOworCQlpZiAocnYgPT0gMCkKKwkJCXN0YXRlID0gVU1C
X1NfVVA7CisJfQorCisJbWVtc2V0KHNjLT5zY19pbmZvLmlwdjRkbnMsIDAsIHNpemVvZiAoc2Mt
PnNjX2luZm8uaXB2NGRucykpOworCWlmIChhdmFpbF92NCAmIE1CSU1fSVBDT05GX0hBU19ETlNJ
TkZPKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25kbnNzcnYpOworCQlvZmYgPSBsZTMydG9o
KGljLT5pcHY0X2Ruc3Nydm9mZnMpOworCQlpID0gMDsKKwkJd2hpbGUgKG4tLSA+IDApIHsKKwkJ
CWlmIChvZmYgKyBzaXplb2YgKGFkZHIpID4gbGVuKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KCZh
ZGRyLCAoY2hhciAqKWRhdGEgKyBvZmYsIHNpemVvZihhZGRyKSk7CisJCQlpZiAoaSA8IFVNQl9N
QVhfRE5TU1JWKQorCQkJCXNjLT5zY19pbmZvLmlwdjRkbnNbaSsrXSA9IGFkZHI7CisJCQlvZmYg
Kz0gc2l6ZW9mKGFkZHIpOworCQl9CisJfQorCisJaWYgKChhdmFpbF92NCAmIE1CSU1fSVBDT05G
X0hBU19NVFVJTkZPKSkgeworCQl2YWwgPSBsZTMydG9oKGljLT5pcHY0X210dSk7CisJCWlmIChp
ZnAtPmlmX210dSAhPSB2YWwgJiYgdmFsIDw9IHNjLT5zY19tYXhwa3RsZW4pIHsKKwkJCWlmcC0+
aWZfbXR1ID0gdmFsOworCQkJaWYgKGlmcC0+aWZfbXR1ID4gdmFsKQorCQkJCWlmcC0+aWZfbXR1
ID0gdmFsOworCQkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQkJbG9nKExPR19J
TkZPLCAiJXM6IE1UVSAlZFxuIiwgREVWTkFNKHNjKSwgdmFsKTsKKwkJfQorCX0KKworCWF2YWls
X3Y0ID0gbGUzMnRvaChpYy0+aXB2Nl9hdmFpbGFibGUpOworCWlmICgoaWZwLT5pZl9mbGFncyAm
IElGRl9ERUJVRykgJiYgYXZhaWxfdjQgJiBNQklNX0lQQ09ORl9IQVNfQUREUklORk8pIHsKKwkJ
LyogWFhYIEZJWE1FOiBJUHY2IGNvbmZpZ3VyYXRpb24gbWlzc2luZyAqLworCQlsb2coTE9HX0lO
Rk8sICIlczogaWdub3JpbmcgSVB2NiBjb25maWd1cmF0aW9uXG4iLCBERVZOQU0oc2MpKTsKKwl9
CisJaWYgKHN0YXRlICE9IC0xKQorCQl1bWJfbmV3c3RhdGUoc2MsIHN0YXRlLCAwKTsKKwordHJ5
djY6Citkb25lOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW1iX3J4KHN0cnVjdCB1
bWJfc29mdGMgKnNjKQoreworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOwor
CisJdXNiZF90cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltVTUJfQlVMS19SWF0pOworfQorCitz
dGF0aWMgdm9pZAordW1iX3J4ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qg
c3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIp
OworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50IGFjdGxlbjsKKwlpbnQg
YWZyYW1lczsKKwlpbnQgaTsKKworCURQUklOVEYoIiVzKCV1KTogc3RhdGU9JXVcbiIsIF9fZnVu
Y19fLCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4X2Fzc2VydCgmc2MtPnNj
X211dGV4LCBNQV9PV05FRCk7CisKKwl1c2JkX3hmZXJfc3RhdHVzKHhmZXIsICZhY3RsZW4sIE5V
TEwsICZhZnJhbWVzLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgewor
CWNhc2UgVVNCX1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJyZWNlaXZlZCAldSBieXRlcyBp
biAldSBmcmFtZXNcbiIsIGFjdGxlbiwgYWZyYW1lcyk7CisKKwkJaWYgKGFjdGxlbiA9PSAwKSB7
CisJCQlpZiAoc2MtPnNjX3J4X25lcnIgPj0gNCkKKwkJCQkvKiB0aHJvdHRsZSB0cmFuc2ZlcnMg
Ki8KKwkJCQl1c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDUwMCk7CisJCQllbHNlCisJCQkJ
c2MtPnNjX3J4X25lcnIrKzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIGRpc2FibGUgdGhyb3R0bGlu
ZyAqLworCQkJdXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsKKwkJCXNjLT5zY19yeF9u
ZXJyID0gMDsKKwkJfQorCisJCWZvcihpID0gMDsgaSA8IGFmcmFtZXM7IGkrKykgeworCQkJdW1i
X2RlY2FwKHNjLCB4ZmVyLCBpKTsKKwkJfQorCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ug
VVNCX1NUX1NFVFVQOgorCQl1c2JkX3hmZXJfc2V0X2ZyYW1lX2RhdGEoeGZlciwgMCwgc2MtPnNj
X3J4X2J1ZiwKKwkJCQlzYy0+c2NfcnhfYnVmc3opOworCQl1c2JkX3hmZXJfc2V0X2ZyYW1lcyh4
ZmVyLCAxKTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisKKwkJdW1iX3J4Zmx1c2go
c2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCJyeCBlcnJvcjogJXNcbiIsIHVz
YmRfZXJyc3RyKHN0YXR1cykpOworCisJCS8qIGRpc2FibGUgdGhyb3R0bGluZyAqLworCQl1c2Jk
X3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDApOworCisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9D
QU5DRUxMRUQpIHsKKwkJCS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJzdCAqLworCQkJdXNiZF94
ZmVyX3NldF9zdGFsbCh4ZmVyKTsKKwkJCXVzYmRfeGZlcl9zZXRfZnJhbWVzKHhmZXIsIDApOwor
CQkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElG
Q09VTlRFUl9JRVJST1JTLCAxKTsKKwkJfQorCQllbHNlIGlmICgrK3NjLT5zY19yeF9uZXJyID4g
MTAwKSB7CisJCQlsb2coTE9HX0VSUiwgIiVzOiB0b28gbWFueSByeCBlcnJvcnMsIGRpc2FibGlu
Z1xuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJCXVtYl9kZWFjdGl2YXRlKHNjLT5zY19kZXYp
OworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9yeGZsdXNoKHN0cnVj
dCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJ
c3RydWN0IG1idWYgKm07CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsK
KworCWZvciAoOzspIHsKKwkJX0lGX0RFUVVFVUUoJnNjLT5zY19yeF9xdWV1ZSwgbSk7CisJCWlm
IChtID09IE5VTEwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUgVVNCIHhmZXIgaGFzIGJl
ZW4gcmVzdWJtaXR0ZWQgc28gaXRzIHNhZmUgdG8gdW5sb2NrIG5vdy4KKwkJICovCisJCW10eF91
bmxvY2soJnNjLT5zY19tdXRleCk7CisJCWlmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZf
UlVOTklORykKKwkJCWlmcC0+aWZfaW5wdXQoaWZwLCBtKTsKKwkJZWxzZQorCQkJbV9mcmVlbSht
KTsKKwkJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJfQorfQorCitzdGF0aWMgaW50Cit1bWJf
ZW5jYXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgdXNiX3hm
ZXIgKnhmZXIpCit7CisJc3RydWN0IG5jbV9oZWFkZXIxNiAqaGRyOworCXN0cnVjdCBuY21fcG9p
bnRlcjE2ICpwdHI7CisJaW50CSBsZW47CisKKwlLQVNTRVJUKHNjLT5zY190eF9tID09IE5VTEws
CisJCQkoIkFzc2VydGlvbiBmYWlsZWQgaW4gdW1iX2VuY2FwKCkiKSk7CisKKwkvKiBBbGwgc2l6
ZSBjb25zdHJhaW50cyBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBjYWxsZXIhICovCisJaGRy
ID0gKHN0cnVjdCBuY21faGVhZGVyMTYgKilzYy0+c2NfdHhfYnVmOworCXB0ciA9IChzdHJ1Y3Qg
bmNtX3BvaW50ZXIxNiAqKShoZHIgKyAxKTsKKworCVVTRVREVyhoZHItPmR3U2lnbmF0dXJlLCBO
Q01fSERSMTZfU0lHKTsKKwlVU0VUVyhoZHItPndIZWFkZXJMZW5ndGgsIHNpemVvZiAoKmhkcikp
OworCVVTRVRXKGhkci0+d1NlcXVlbmNlLCBzYy0+c2NfdHhfc2VxKTsKKwlzYy0+c2NfdHhfc2Vx
Kys7CisJVVNFVFcoaGRyLT53TmRwSW5kZXgsIHNpemVvZiAoKmhkcikpOworCisJbGVuID0gbS0+
bV9wa3RoZHIubGVuOworCVVTRVREVyhwdHItPmR3U2lnbmF0dXJlLCBNQklNX05DTV9OVEgxNl9T
SUcodW1iX3Nlc3Npb25faWQpKTsKKwlVU0VUVyhwdHItPndMZW5ndGgsIHNpemVvZiAoKnB0cikp
OworCVVTRVRXKHB0ci0+d05leHROZHBJbmRleCwgMCk7CisJVVNFVFcocHRyLT5kZ3JhbVswXS53
RGF0YWdyYW1JbmRleCwgTUJJTV9IRFIxNl9MRU4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMF0ud0Rh
dGFncmFtTGVuLCBsZW4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtSW5kZXgsIDAp
OworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtTGVuLCAwKTsKKworCUtBU1NFUlQobGVu
ICsgTUJJTV9IRFIxNl9MRU4gPD0gc2MtPnNjX3R4X2J1ZnN6LAorCQkJKCJBc3NlcnRpb24gZmFp
bGVkIGluIHVtYl9lbmNhcCgpIikpOworCW1fY29weWRhdGEobSwgMCwgbGVuLCAoY2hhciAqKShw
dHIgKyAxKSk7CisJc2MtPnNjX3R4X20gPSBtOworCWxlbiArPSBNQklNX0hEUjE2X0xFTjsKKwlV
U0VUVyhoZHItPndCbG9ja0xlbmd0aCwgbGVuKTsKKworCXVzYmRfeGZlcl9zZXRfZnJhbWVfZGF0
YSh4ZmVyLCAwLCBzYy0+c2NfdHhfYnVmLCBsZW4pOworCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwo
eGZlciwgMCk7CisJdXNiZF94ZmVyX3NldF9mcmFtZXMoeGZlciwgMSk7CisKKwlEUFJJTlRGTigz
LCAiJXM6IGVuY2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBsZW4pOworCUREVU1QTig1LCBz
Yy0+c2NfdHhfYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordW1iX3R4
ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVj
dCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVjdCBpZm5ldCAq
aWZwID0gR0VUX0lGUChzYyk7CisJc3RydWN0IG1idWYgKm07CisKKwlEUFJJTlRGKCIlcygldSkg
c3RhdGU9JXVcbiIsIF9fZnVuY19fLCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJ
bXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlzd2l0Y2ggKFVTQl9HRVRf
U1RBVEUoeGZlcikpIHsKKwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoKKwkJaWZwLT5pZl9kcnZf
ZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElWRTsKKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5U
RVJfT1BBQ0tFVFMsIDEpOworCisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBmYWxsIHRocm91
Z2ggKi8KKwljYXNlIFVTQl9TVF9TRVRVUDoKK3RyX3NldHVwOgorCQlpZiAoKGlmcC0+aWZfZHJ2
X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKQorCQkJYnJlYWs7CisKKwkJSUZRX0RSVl9E
RVFVRVVFKCZpZnAtPmlmX3NuZCwgbSk7CisJCWlmIChtID09IE5VTEwpCisJCQlicmVhazsKKwor
CQlpZiAodW1iX2VuY2FwKHNjLCBtLCB4ZmVyKSkgeworCQkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJ
RkNPVU5URVJfT0VSUk9SUywgMSk7CisJCQl1bWJfdHhmbHVzaChzYyk7CisJCQlicmVhazsKKwkJ
fQorCisJCUJQRl9NVEFQKGlmcCwgbSk7CisKKwkJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RS
Vl9PQUNUSVZFOworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKworCQlicmVhazsKKwor
CWRlZmF1bHQ6CisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBjb3VudCBvdXRwdXQgZXJyb3Jz
ICovCisJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQlEUFJJ
TlRGKCJ0eCBlcnJvcjogJXNcbiIsCisJCQkJdXNiZF9lcnJzdHIoc3RhdHVzKSk7CisKKwkJaWYg
KHN0YXR1cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxs
IGZpcnN0ICovCisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJZ290byB0cl9zZXR1
cDsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdHhmbHVzaChzdHJ1
Y3QgdW1iX3NvZnRjICpzYykKK3sKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVE
KTsKKworCWlmIChzYy0+c2NfdHhfbSAhPSBOVUxMKSB7CisJCW1fZnJlZW0oc2MtPnNjX3R4X20p
OworCQlzYy0+c2NfdHhfbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2RlY2Fw
KHN0cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIGludCBmcmFtZSkK
K3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWNoYXIgKmJ1ZjsKKwlpbnQg
bGVuOworCWNoYXIJKmRwOworCXN0cnVjdCBuY21faGVhZGVyMTYgKmhkcjE2OworCXN0cnVjdCBu
Y21faGVhZGVyMzIgKmhkcjMyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2ICpwdHIxNjsKKwlzdHJ1
Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSAqZGdyYW0xNjsKKwlzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9k
Z3JhbSAqZGdyYW0zMjsKKwl1aW50MzJfdCBoc2lnLCBwc2lnOworCWludAkgaGxlbiwgYmxlbjsK
KwlpbnQJIHB0cmxlbiwgcHRyb2ZmLCBkZ2VudHJ5b2ZmOworCXVpbnQzMl90IGRvZmYsIGRsZW47
CisJc3RydWN0IG1idWYgKm07CisKKwl1c2JkX3hmZXJfZnJhbWVfZGF0YSh4ZmVyLCBmcmFtZSwg
KHZvaWQgKiopJmJ1ZiwgJmxlbik7CisJRFBSSU5URk4oNCwgInJlY3YgJWQgYnl0ZXNcbiIsIGxl
bik7CisJRERVTVBOKDUsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9mICgqaGRyMTYpKQor
CQlnb3RvIHRvb3NtYWxsOworCisJaGRyMTYgPSAoc3RydWN0IG5jbV9oZWFkZXIxNiAqKWJ1ZjsK
Kwloc2lnID0gVUdFVERXKGhkcjE2LT5kd1NpZ25hdHVyZSk7CisJaGxlbiA9IFVHRVRXKGhkcjE2
LT53SGVhZGVyTGVuZ3RoKTsKKwlpZiAobGVuIDwgaGxlbikKKwkJZ290byB0b29zbWFsbDsKKwlp
ZiAobGVuID4gc2MtPnNjX3J4X2J1ZnN6KSB7CisJCURQUklOVEYoInBhY2tldCB0b28gbGFyZ2Ug
KCVkKVxuIiwgbGVuKTsKKwkJZ290byBmYWlsOworCX0KKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNl
IE5DTV9IRFIxNl9TSUc6CisJCWJsZW4gPSBVR0VUVyhoZHIxNi0+d0Jsb2NrTGVuZ3RoKTsKKwkJ
cHRyb2ZmID0gVUdFVFcoaGRyMTYtPndOZHBJbmRleCk7CisJCWlmIChobGVuICE9IHNpemVvZiAo
KmhkcjE2KSkgeworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVuICVkIGZvciBOVEgxNiAo
ZXhwICV6dSlcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6ZW9mICgqaGRyMTYpKTsK
KwkJCWdvdG8gZmFpbDsKKwkJfQorCQlicmVhazsKKwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWhk
cjMyID0gKHN0cnVjdCBuY21faGVhZGVyMzIgKiloZHIxNjsKKwkJYmxlbiA9IFVHRVREVyhoZHIz
Mi0+ZHdCbG9ja0xlbmd0aCk7CisJCXB0cm9mZiA9IFVHRVREVyhoZHIzMi0+ZHdOZHBJbmRleCk7
CisJCWlmIChobGVuICE9IHNpemVvZiAoKmhkcjMyKSkgeworCQkJRFBSSU5URigiJXM6IGJhZCBo
ZWFkZXIgbGVuICVkIGZvciBOVEgzMiAoZXhwICV6dSlcbiIsCisJCQkgICAgREVWTkFNKHNjKSwg
aGxlbiwgc2l6ZW9mICgqaGRyMzIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIGhlYWRlciBzaWduYXR1cmUg
KDB4JTA4eClcbiIsCisJCSAgICBERVZOQU0oc2MpLCBoc2lnKTsKKwkJZ290byBmYWlsOworCX0K
KwlpZiAobGVuIDwgYmxlbikgeworCQlEUFJJTlRGKCIlczogYmFkIE5UQiBsZW4gKCVkKSBmb3Ig
JWQgYnl0ZXMgb2YgZGF0YVxuIiwKKwkJICAgIERFVk5BTShzYyksIGJsZW4sIGxlbik7CisJCWdv
dG8gZmFpbDsKKwl9CisKKwlwdHIxNiA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIxNiAqKShidWYgKyBw
dHJvZmYpOworCXBzaWcgPSBVR0VURFcocHRyMTYtPmR3U2lnbmF0dXJlKTsKKwlwdHJsZW4gPSBV
R0VUVyhwdHIxNi0+d0xlbmd0aCk7CisJaWYgKGxlbiA8IHB0cmxlbiArIHB0cm9mZikKKwkJZ290
byB0b29zbWFsbDsKKwlpZiAoIU1CSU1fTkNNX05USDE2X0lTSVNHKHBzaWcpICYmICFNQklNX05D
TV9OVEgzMl9JU0lTRyhwc2lnKSkgeworCQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIHBv
aW50ZXIgc2lnbmF0dXJlICgweCUwOHgpXG4iLAorCQkgICAgREVWTkFNKHNjKSwgcHNpZyk7CisJ
CWdvdG8gZmFpbDsKKwl9CisKKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNlIE5DTV9IRFIxNl9TSUc6
CisJCWRnZW50cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNtX3BvaW50ZXIxNiwgZGdyYW0pOwor
CQlicmVhazsKKwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWRnZW50cnlvZmYgPSBvZmZzZXRvZihz
dHJ1Y3QgbmNtX3BvaW50ZXIzMiwgZGdyYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3Rv
IGZhaWw7CisJfQorCisJd2hpbGUgKGRnZW50cnlvZmYgPCBwdHJsZW4pIHsKKwkJc3dpdGNoICho
c2lnKSB7CisJCWNhc2UgTkNNX0hEUjE2X1NJRzoKKwkJCWlmIChwdHJvZmYgKyBkZ2VudHJ5b2Zm
IDwgc2l6ZW9mICgqZGdyYW0xNikpCisJCQkJZ290byBkb25lOworCQkJZGdyYW0xNiA9IChzdHJ1
Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSAqKQorCQkJICAgIChidWYgKyBwdHJvZmYgKyBkZ2VudHJ5
b2ZmKTsKKwkJCWRnZW50cnlvZmYgKz0gc2l6ZW9mICgqZGdyYW0xNik7CisJCQlkbGVuID0gVUdF
VFcoZGdyYW0xNi0+d0RhdGFncmFtTGVuKTsKKwkJCWRvZmYgPSBVR0VUVyhkZ3JhbTE2LT53RGF0
YWdyYW1JbmRleCk7CisJCQlicmVhazsKKwkJY2FzZSBOQ01fSERSMzJfU0lHOgorCQkJaWYgKHB0
cm9mZiArIGRnZW50cnlvZmYgPCBzaXplb2YgKCpkZ3JhbTMyKSkKKwkJCQlnb3RvIGRvbmU7CisJ
CQlkZ3JhbTMyID0gKHN0cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtICopCisJCQkgICAgKGJ1ZiAr
IHB0cm9mZiArIGRnZW50cnlvZmYpOworCQkJZGdlbnRyeW9mZiArPSBzaXplb2YgKCpkZ3JhbTMy
KTsKKwkJCWRsZW4gPSBVR0VURFcoZGdyYW0zMi0+ZHdEYXRhZ3JhbUxlbik7CisJCQlkb2ZmID0g
VUdFVERXKGRncmFtMzItPmR3RGF0YWdyYW1JbmRleCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX0lFUlJPUlMsIDEpOworCQkJZ290byBk
b25lOworCQl9CisKKwkJLyogVGVybWluYXRpbmcgemVybyBlbnRyeSAqLworCQlpZiAoZGxlbiA9
PSAwIHx8IGRvZmYgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgZGxlbiArIGRvZmYpIHsK
KwkJCS8qIFNraXAgZ2lhbnQgZGF0YWdyYW0gYnV0IGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KKwkJ
CURQUklOVEYoIiVzOiBkYXRhZ3JhbSB0b28gbGFyZ2UgKCVkIEAgb2ZmICVkKVxuIiwKKwkJCSAg
ICBERVZOQU0oc2MpLCBkbGVuLCBkb2ZmKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHAgPSBi
dWYgKyBkb2ZmOworCQlEUFJJTlRGTigzLCAiJXM6IGRlY2FwICVkIGJ5dGVzXG4iLCBERVZOQU0o
c2MpLCBkbGVuKTsKKwkJbSA9IG1fZGV2Z2V0KGRwLCBkbGVuLCAwLCBpZnAsIE5VTEwpOworCQlp
ZiAobSA9PSBOVUxMKSB7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9JUURST1BT
LCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogZW5xdWV1ZSBmb3IgbGF0ZXIgd2hlbiB0
aGUgbG9jayBjYW4gYmUgcmVsZWFzZWQgKi8KKwkJX0lGX0VOUVVFVUUoJnNjLT5zY19yeF9xdWV1
ZSwgbSk7CisKKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSVBBQ0tFVFMsIDEpOwor
CisJfQorZG9uZToKKwlzYy0+c2NfcnhfbmVyciA9IDA7CisJcmV0dXJuOwordG9vc21hbGw6CisJ
RFBSSU5URigiJXM6IHBhY2tldCB0b28gc21hbGwgKCVkKVxuIiwgREVWTkFNKHNjKSwgbGVuKTsK
K2ZhaWw6CisJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVSUk9SUywgMSk7Cit9CisK
K3N0YXRpYyB1c2JfZXJyb3JfdAordW1iX3NlbmRfZW5jYXBfY29tbWFuZChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCBy
ZXE7CisKKwlpZiAobGVuID4gc2MtPnNjX2N0cmxfbGVuKQorCQlyZXR1cm4gVVNCX0VSUl9JTlZB
TDsKKworCS8qIFhYWCBGSVhNRTogaWYgKHRvdGFsIGxlbiA+IHNjLT5zY19jdHJsX2xlbikgPT4g
bXVzdCBmcmFnbWVudCAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRfV1JJVEVfQ0xBU1NfSU5U
RVJGQUNFOworCXJlcS5iUmVxdWVzdCA9IFVDRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDsK
KwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9p
ZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgbGVuKTsKKwlERUxBWSh1bWJfZGVsYXkpOwor
CXJldHVybiB1c2JkX2RvX3JlcXVlc3RfZmxhZ3Moc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgs
ICZyZXEsIGRhdGEsIDAsCisJCQlOVUxMLCB1bWJfeGZlcl90b3V0KTsKK30KKworc3RhdGljIGlu
dAordW1iX2dldF9lbmNhcF9yZXNwb25zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqYnVm
LCBpbnQgKmxlbikKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisJdXNiX2Vycm9yX3Qg
ZXJyOworCXVpbnQxNl90IGwgPSAqbGVuOworCisJcmVxLmJtUmVxdWVzdFR5cGUgPSBVVF9SRUFE
X0NMQVNTX0lOVEVSRkFDRTsKKwlyZXEuYlJlcXVlc3QgPSBVQ0RDX0dFVF9FTkNBUFNVTEFURURf
UkVTUE9OU0U7CisJVVNFVFcocmVxLndWYWx1ZSwgMCk7CisJVVNFVFcocmVxLndJbmRleCwgc2Mt
PnNjX2N0cmxfaWZhY2Vubyk7CisJVVNFVFcocmVxLndMZW5ndGgsIGwpOworCS8qIFhYWCBGSVhN
RTogcmUtYXNzZW1ibGUgZnJhZ21lbnRzICovCisKKwlERUxBWSh1bWJfZGVsYXkpOworCWVyciA9
IHVzYmRfZG9fcmVxdWVzdF9mbGFncyhzYy0+c2NfdWRldiwgJnNjLT5zY19tdXRleCwgJnJlcSwg
YnVmLAorCQkJVVNCX1NIT1JUX1hGRVJfT0ssICZsLCB1bWJfeGZlcl90b3V0KTsKKwlpZiAoZXJy
ID09IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJKmxlbiA9IGw7CisJCXJldHVybiAx
OworCX0KKwlEUFJJTlRGKCJjdHJsIHJlY3Y6ICVzXG4iLCB1c2JkX2VycnN0cihlcnIpKTsKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jdHJsX21zZyhzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgdWludDMyX3QgcmVxLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBpZm5l
dCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMyX3QgdGlkOworCXN0cnVjdCBtYmltX21zZ2hk
ciAqaGRyID0gZGF0YTsKKwl1c2JfZXJyb3JfdCBlcnI7CisKKwlpZiAoc2MtPnNjX2R5aW5nKQor
CQlyZXR1cm47CisJaWYgKGxlbiA8IHNpemVvZiAoKmhkcikpCisJCXJldHVybjsKKwl0aWQgPSAr
K3NjLT5zY190aWQ7CisKKwloZHItPnR5cGUgPSBodG9sZTMyKHJlcSk7CisJaGRyLT5sZW4gPSBo
dG9sZTMyKGxlbik7CisJaGRyLT50aWQgPSBodG9sZTMyKHRpZCk7CisKKyNpZmRlZiBVTUJfREVC
VUcKKwlpZiAodW1iX2RlYnVnKSB7CisJCWNvbnN0IGNoYXIgKm9wLCAqc3RyOworCQlpZiAocmVx
ID09IE1CSU1fQ09NTUFORF9NU0cpIHsKKwkJCXN0cnVjdCBtYmltX2gyZl9jbWQgKmMgPSBkYXRh
OworCQkJaWYgKGxlMzJ0b2goYy0+b3ApID09IE1CSU1fQ01ET1BfU0VUKQorCQkJCW9wID0gInNl
dCI7CisJCQllbHNlCisJCQkJb3AgPSAicXJ5IjsKKwkJCXN0ciA9IHVtYl9jaWQyc3RyKGxlMzJ0
b2goYy0+Y2lkKSk7CisJCX0gZWxzZSB7CisJCQlvcCA9ICJzbmQiOworCQkJc3RyID0gdW1iX3Jl
cXVlc3Qyc3RyKHJlcSk7CisJCX0KKwkJRFBSSU5URigiLT4gJXMgJXMgKHRpZCAldSlcbiIsIG9w
LCBzdHIsIHRpZCk7CisJfQorI2VuZGlmCisJZXJyID0gdW1iX3NlbmRfZW5jYXBfY29tbWFuZChz
YywgZGF0YSwgbGVuKTsKKwlpZiAoZXJyICE9IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsK
KwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9HX0VSUiwgIiVzOiBz
ZW5kICVzIG1zZyAodGlkICV1KSBmYWlsZWQ6ICVzXG4iLAorCQkJICAgIERFVk5BTShzYyksIHVt
Yl9yZXF1ZXN0MnN0cihyZXEpLCB0aWQsCisJCQkgICAgdXNiZF9lcnJzdHIoZXJyKSk7CisKKwkJ
Lyogd2lsbCBhZmZlY3Qgb3RoZXIgdHJhbnNhY3Rpb25zLCB0b28gKi8KKwkJdXNiZF90cmFuc2Zl
cl9zdG9wKHNjLT5zY194ZmVyW1VNQl9JTlRSX1JYXSk7CisJfSBlbHNlIHsKKwkJRFBSSU5URk4o
MiwgInNlbnQgJXMgKHRpZCAldSlcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIocmVxKSwgdGlk
KTsKKwkJRERVTVBOKDMsIGRhdGEsIGxlbik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK3VtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBtYmltX2gyZl9v
cGVubXNnIG1zZzsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKG1zZykpOworCW1zZy5tYXhs
ZW4gPSBodG9sZTMyKHNjLT5zY19jdHJsX2xlbik7CisJdW1iX2N0cmxfbXNnKHNjLCBNQklNX09Q
RU5fTVNHLCAmbXNnLCBzaXplb2YgKG1zZykpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9jbG9zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9oMmZfY2xv
c2Vtc2cgbXNnOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAobXNnKSk7CisJdW1iX2N0cmxf
bXNnKHNjLCBNQklNX0NMT1NFX01TRywgJm1zZywgc2l6ZW9mIChtc2cpKTsKK30KKworc3RhdGlj
IGludAordW1iX3NldHBpbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IG9wLCBpbnQgaXNfcHVr
LCB2b2lkICpwaW4sIGludCBwaW5sZW4sCisgICAgdm9pZCAqbmV3cGluLCBpbnQgbmV3cGlubGVu
KQoreworCXN0cnVjdCBtYmltX2NpZF9waW4gY3A7CisJaW50CSBvZmY7CisKKwlpZiAocGlubGVu
ID09IDApCisJCXJldHVybiAwOworCWlmIChwaW5sZW4gPCAwIHx8IHBpbmxlbiA+IE1CSU1fUElO
X01BWExFTiB8fAorCSAgICBuZXdwaW5sZW4gPCAwIHx8IG5ld3BpbmxlbiA+IE1CSU1fUElOX01B
WExFTiB8fAorCSAgICBvcCA8IDAgfHwgb3AgPiBNQklNX1BJTl9PUF9DSEFOR0UgfHwKKwkgICAg
KGlzX3B1ayAmJiBvcCAhPSBNQklNX1BJTl9PUF9FTlRFUikpCisJCXJldHVybiBFSU5WQUw7CisK
KwltZW1zZXQoJmNwLCAwLCBzaXplb2YgKGNwKSk7CisJY3AudHlwZSA9IGh0b2xlMzIoaXNfcHVr
ID8gTUJJTV9QSU5fVFlQRV9QVUsxIDogTUJJTV9QSU5fVFlQRV9QSU4xKTsKKworCW9mZiA9IG9m
ZnNldG9mKHN0cnVjdCBtYmltX2NpZF9waW4sIGRhdGEpOworCWlmICghdW1iX2FkZHN0cigmY3As
IHNpemVvZiAoY3ApLCAmb2ZmLCBwaW4sIHBpbmxlbiwKKwkgICAgJmNwLnBpbl9vZmZzLCAmY3Au
cGluX3NpemUpKQorCQlyZXR1cm4gRUlOVkFMOworCisJY3Aub3AgID0gaHRvbGUzMihvcCk7CisJ
aWYgKG5ld3BpbmxlbikgeworCQlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9m
ZiwgbmV3cGluLCBuZXdwaW5sZW4sCisJCSAgICAmY3AubmV3cGluX29mZnMsICZjcC5uZXdwaW5f
c2l6ZSkpCisJCQlyZXR1cm4gRUlOVkFMOworCX0gZWxzZSB7CisJCWlmICgob3AgPT0gTUJJTV9Q
SU5fT1BfQ0hBTkdFKSB8fCBpc19wdWspCisJCQlyZXR1cm4gRUlOVkFMOworCQlpZiAoIXVtYl9h
ZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9mZiwgTlVMTCwgMCwKKwkJICAgICZjcC5uZXdwaW5f
b2ZmcywgJmNwLm5ld3Bpbl9zaXplKSkKKwkJCXJldHVybiBFSU5WQUw7CisJfQorCW10eF9sb2Nr
KCZzYy0+c2NfbXV0ZXgpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1BJTiwgTUJJTV9DTURPUF9T
RVQsICZjcCwgb2ZmKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZAordW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICpzYykK
K3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlIHJzOworCXVpbnQzMl90CSBj
bGFzc2VzOworCisJaWYgKHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMgPT0gTUJJTV9EQVRB
Q0xBU1NfTk9ORSkKKwkJcmV0dXJuOworCisJbWVtc2V0KCZycywgMCwgc2l6ZW9mIChycykpOwor
CXJzLnJlZ2FjdGlvbiA9IGh0b2xlMzIoTUJJTV9SRUdBQ1RJT05fQVVUT01BVElDKTsKKwljbGFz
c2VzID0gc2MtPnNjX2luZm8uc3VwcG9ydGVkY2xhc3NlczsKKwlpZiAoc2MtPnNjX2luZm8ucHJl
ZmVycmVkY2xhc3NlcyAhPSBNQklNX0RBVEFDTEFTU19OT05FKQorCQljbGFzc2VzICY9IHNjLT5z
Y19pbmZvLnByZWZlcnJlZGNsYXNzZXM7CisJcnMuZGF0YV9jbGFzcyA9IGh0b2xlMzIoY2xhc3Nl
cyk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2NtZChzYywgTUJJTV9DSURfUkVH
SVNURVJfU1RBVEUsIE1CSU1fQ01ET1BfU0VULCAmcnMsIHNpemVvZiAocnMpKTsKKwltdHhfdW5s
b2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3JhZGlvKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCBpbnQgb24pCit7CisJc3RydWN0IG1iaW1fY2lkX3JhZGlvX3N0YXRlIHM7
CisKKwlEUFJJTlRGKCJzZXQgcmFkaW8gJXNcbiIsIG9uID8gIm9uIiA6ICJvZmYiKTsKKwltZW1z
ZXQoJnMsIDAsIHNpemVvZiAocykpOworCXMuc3RhdGUgPSBodG9sZTMyKG9uID8gTUJJTV9SQURJ
T19TVEFURV9PTiA6IE1CSU1fUkFESU9fU1RBVEVfT0ZGKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJ
RF9SQURJT19TVEFURSwgTUJJTV9DTURPUF9TRVQsICZzLCBzaXplb2YgKHMpKTsKK30KKworc3Rh
dGljIHZvaWQKK3VtYl9hbGxvY2F0ZV9jaWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJdW1i
X2NtZDEoc2MsIE1CSU1fQ0lEX0RFVklDRV9DQVBTLCBNQklNX0NNRE9QX1NFVCwKKwkgICAgdW1i
X3FtaV9hbGxvY19jaWQsIHNpemVvZiAodW1iX3FtaV9hbGxvY19jaWQpLCB1bWJfdXVpZF9xbWlf
bWJpbSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc2VuZF9mY2NfYXV0aChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYykKK3sKKwl1aW50OF90CSBmY2NhdXRoW3NpemVvZiAodW1iX3FtaV9mY2NfYXV0aCld
OworCisJaWYgKHNjLT5zY19jaWQgPT0gLTEpIHsKKwkJRFBSSU5URigibWlzc2luZyBDSUQsIGNh
bm5vdCBzZW5kIEZDQyBhdXRoXG4iKTsKKwkJdW1iX2FsbG9jYXRlX2NpZChzYyk7CisJCXJldHVy
bjsKKwl9CisJbWVtY3B5KGZjY2F1dGgsIHVtYl9xbWlfZmNjX2F1dGgsIHNpemVvZiAoZmNjYXV0
aCkpOworCWZjY2F1dGhbVU1CX1FNSV9DSURfT0ZGU10gPSBzYy0+c2NfY2lkOworCXVtYl9jbWQx
KHNjLCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9TRVQsCisJICAgIGZjY2F1dGgs
IHNpemVvZiAoZmNjYXV0aCksIHVtYl91dWlkX3FtaV9tYmltKTsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9wYWNrZXRfc2VydmljZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGF0dGFjaCkKK3sK
KwlzdHJ1Y3QgbWJpbV9jaWRfcGFja2V0X3NlcnZpY2UJczsKKworCURQUklOVEYoIiVzIHBhY2tl
dCBzZXJ2aWNlXG4iLAorCSAgICBhdHRhY2ggPyAiYXR0YWNoIiA6ICJkZXRhY2giKTsKKwltZW1z
ZXQoJnMsIDAsIHNpemVvZiAocykpOworCXMuYWN0aW9uID0gaHRvbGUzMihhdHRhY2ggPworCSAg
ICBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0FUVEFDSCA6IE1CSU1fUEtUU0VSVklDRV9BQ1RJT05f
REVUQUNIKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9QQUNLRVRfU0VSVklDRSwgTUJJTV9DTURP
UF9TRVQsICZzLCBzaXplb2YgKHMpKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jb25uZWN0KHN0
cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7
CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUgPT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HICYm
ICFzYy0+c2Nfcm9hbWluZykgeworCQlsb2coTE9HX0lORk8sICIlczogY29ubmVjdGlvbiBkaXNh
YmxlZCBpbiByb2FtaW5nIG5ldHdvcmtcbiIsCisJCSAgICBERVZOQU0oc2MpKTsKKwkJcmV0dXJu
OworCX0KKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19ERUJVRywg
IiVzOiBjb25uZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJdW1iX3NlbmRfY29ubmVjdChz
YywgTUJJTV9DT05ORUNUX0FDVElWQVRFKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kaXNjb25u
ZWN0KHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lG
UChzYyk7CisKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19ERUJV
RywgIiVzOiBkaXNjb25uZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJdW1iX3NlbmRfY29u
bmVjdChzYywgTUJJTV9DT05ORUNUX0RFQUNUSVZBVEUpOworfQorCitzdGF0aWMgdm9pZAordW1i
X3NlbmRfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGNvbW1hbmQpCit7CisJc3Ry
dWN0IG1iaW1fY2lkX2Nvbm5lY3QgKmM7CisJaW50CSBvZmY7CisKKwkvKiBUb28gbGFyZ2UgZm9y
IHRoZSBzdGFjayAqLworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJYyA9IG1hbGxvYyhz
aXplb2YgKCpjKSwgTV9NQklNX0NJRF9DT05ORUNULCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJbXR4
X2xvY2soJnNjLT5zY19tdXRleCk7CisJYy0+c2Vzc2lvbmlkID0gaHRvbGUzMih1bWJfc2Vzc2lv
bl9pZCk7CisJYy0+Y29tbWFuZCA9IGh0b2xlMzIoY29tbWFuZCk7CisJb2ZmID0gb2Zmc2V0b2Yo
c3RydWN0IG1iaW1fY2lkX2Nvbm5lY3QsIGRhdGEpOworCWlmICghdW1iX2FkZHN0cihjLCBzaXpl
b2YgKCpjKSwgJm9mZiwgc2MtPnNjX2luZm8uYXBuLAorCSAgICBzYy0+c2NfaW5mby5hcG5sZW4s
ICZjLT5hY2Nlc3Nfb2ZmcywgJmMtPmFjY2Vzc19zaXplKSkKKwkJZ290byBkb25lOworCWlmICgh
dW1iX2FkZHN0cihjLCBzaXplb2YgKCpjKSwgJm9mZiwgc2MtPnNjX2luZm8udXNlcm5hbWUsCisJ
ICAgIHNjLT5zY19pbmZvLnVzZXJuYW1lbGVuLCAmYy0+dXNlcl9vZmZzLCAmYy0+dXNlcl9zaXpl
KSkKKwkJZ290byBkb25lOworCWlmICghdW1iX2FkZHN0cihjLCBzaXplb2YgKCpjKSwgJm9mZiwg
c2MtPnNjX2luZm8ucGFzc3dvcmQsCisJICAgIHNjLT5zY19pbmZvLnBhc3N3b3JkbGVuLCAmYy0+
cGFzc3dkX29mZnMsICZjLT5wYXNzd2Rfc2l6ZSkpCisJCWdvdG8gZG9uZTsKKwljLT5hdXRocHJv
dCA9IGh0b2xlMzIoTUJJTV9BVVRIUFJPVF9OT05FKTsKKwljLT5jb21wcmVzc2lvbiA9IGh0b2xl
MzIoTUJJTV9DT01QUkVTU0lPTl9OT05FKTsKKwljLT5pcHR5cGUgPSBodG9sZTMyKE1CSU1fQ09O
VEVYVF9JUFRZUEVfSVBWNCk7CisJbWVtY3B5KGMtPmNvbnRleHQsIHVtYl91dWlkX2NvbnRleHRf
aW50ZXJuZXQsIHNpemVvZiAoYy0+Y29udGV4dCkpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX0NP
Tk5FQ1QsIE1CSU1fQ01ET1BfU0VULCBjLCBvZmYpOworZG9uZToKKwlmcmVlKGMsIE1fTUJJTV9D
SURfQ09OTkVDVCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1iX3FyeV9pcGNvbmZp
ZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJh
dGlvbl9pbmZvIGlwYzsKKworCW1lbXNldCgmaXBjLCAwLCBzaXplb2YgKGlwYykpOworCWlwYy5z
ZXNzaW9uaWQgPSBodG9sZTMyKHVtYl9zZXNzaW9uX2lkKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJ
RF9JUF9DT05GSUdVUkFUSU9OLCBNQklNX0NNRE9QX1FSWSwKKwkgICAgJmlwYywgc2l6ZW9mIChp
cGMpKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGlu
dCBjaWQsIGludCBvcCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1bWJfY21kMShz
YywgY2lkLCBvcCwgZGF0YSwgbGVuLCB1bWJfdXVpZF9iYXNpY19jb25uZWN0KTsKK30KKworc3Rh
dGljIHZvaWQKK3VtYl9jbWQxKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgY2lkLCBpbnQgb3As
IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sCisgICAgdWludDhfdCAqdXVpZCkKK3sKKwlzdHJ1
Y3QgbWJpbV9oMmZfY21kICpjbWQ7CisJaW50CXRvdGxlbjsKKworCS8qIFhYWCBGSVhNRSBzdXBw
b3J0IHNlbmRpbmcgZnJhZ21lbnRzICovCisJaWYgKHNpemVvZiAoKmNtZCkgKyBsZW4gPiBzYy0+
c2NfY3RybF9sZW4pIHsKKwkJRFBSSU5URigic2V0ICVzIG1zZyB0b28gbG9uZzogY2Fubm90IHNl
bmRcbiIsCisJCSAgICB1bWJfY2lkMnN0cihjaWQpKTsKKwkJcmV0dXJuOworCX0KKwljbWQgPSBz
Yy0+c2NfY3RybF9tc2c7CisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mICgqY21kKSk7CisJY21kLT5m
cmFnLm5mcmFnID0gaHRvbGUzMigxKTsKKwltZW1jcHkoY21kLT5kZXZpZCwgdXVpZCwgc2l6ZW9m
IChjbWQtPmRldmlkKSk7CisJY21kLT5jaWQgPSBodG9sZTMyKGNpZCk7CisJY21kLT5vcCA9IGh0
b2xlMzIob3ApOworCWNtZC0+aW5mb2xlbiA9IGh0b2xlMzIobGVuKTsKKwl0b3RsZW4gPSBzaXpl
b2YgKCpjbWQpOworCWlmIChsZW4gPiAwKSB7CisJCW1lbWNweShjbWQgKyAxLCBkYXRhLCBsZW4p
OworCQl0b3RsZW4gKz0gbGVuOworCX0KKwl1bWJfY3RybF9tc2coc2MsIE1CSU1fQ09NTUFORF9N
U0csIGNtZCwgdG90bGVuKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jb21tYW5kX2RvbmUoc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1f
ZjJoX2NtZGRvbmUgKmNtZCA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKwl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3QgY2lkOworCXVpbnQzMl90IGluZm9sZW47
CisJaW50CSBxbWltc2cgPSAwOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNtZCkpIHsKKwkJRFBS
SU5URigiZGlzY2FyZCBzaG9ydCAlcyBtZXNzYWdlXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3Ry
KGxlMzJ0b2goY21kLT5oZHIudHlwZSkpKTsKKwkJcmV0dXJuOworCX0KKwljaWQgPSBsZTMydG9o
KGNtZC0+Y2lkKTsKKwlpZiAobWVtY21wKGNtZC0+ZGV2aWQsIHVtYl91dWlkX2Jhc2ljX2Nvbm5l
Y3QsIHNpemVvZiAoY21kLT5kZXZpZCkpKSB7CisJCWlmIChtZW1jbXAoY21kLT5kZXZpZCwgdW1i
X3V1aWRfcW1pX21iaW0sCisJCSAgICBzaXplb2YgKGNtZC0+ZGV2aWQpKSkgeworCQkJRFBSSU5U
RigiZGlzY2FyZCAlcyBtZXNzYWdlIGZvciBvdGhlciBVVUlEICclcydcbiIsCisJCQkgICAgdW1i
X3JlcXVlc3Qyc3RyKGxlMzJ0b2goY21kLT5oZHIudHlwZSkpLAorCQkJICAgIHVtYl91dWlkMnN0
cihjbWQtPmRldmlkKSk7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJcW1pbXNnID0gMTsKKwl9
CisKKwlzdGF0dXMgPSBsZTMydG9oKGNtZC0+c3RhdHVzKTsKKwlzd2l0Y2ggKHN0YXR1cykgewor
CWNhc2UgTUJJTV9TVEFUVVNfU1VDQ0VTUzoKKwkJYnJlYWs7CisJY2FzZSBNQklNX1NUQVRVU19O
T1RfSU5JVElBTElaRUQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9n
KExPR19FUlIsICIlczogU0lNIG5vdCBpbml0aWFsaXplZCAoUElOIG1pc3NpbmcpXG4iLAorCQkJ
ICAgIERFVk5BTShzYykpOworCQlyZXR1cm47CisJY2FzZSBNQklNX1NUQVRVU19QSU5fUkVRVUlS
RUQ6CisJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5fUkVRVUlSRUQ7CisJCS8qRkFM
TFRIUk9VR0gqLworCWRlZmF1bHQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQor
CQkJbG9nKExPR19FUlIsICIlczogc2V0L3FyeSAlcyBmYWlsZWQ6ICVzXG4iLCBERVZOQU0oc2Mp
LAorCQkJICAgIHVtYl9jaWQyc3RyKGNpZCksIHVtYl9zdGF0dXMyc3RyKHN0YXR1cykpOworCQly
ZXR1cm47CisJfQorCisJaW5mb2xlbiA9IGxlMzJ0b2goY21kLT5pbmZvbGVuKTsKKwlpZiAobGVu
IDwgc2l6ZW9mICgqY21kKSArIGluZm9sZW4pIHsKKwkJRFBSSU5URigiZGlzY2FyZCB0cnVuY2F0
ZWQgJXMgbWVzc2FnZSAod2FudCAlZCwgZ290ICVkKVxuIiwKKwkJICAgIHVtYl9jaWQyc3RyKGNp
ZCksCisJCSAgICAoaW50KXNpemVvZiAoKmNtZCkgKyBpbmZvbGVuLCBsZW4pOworCQlyZXR1cm47
CisJfQorCWlmIChxbWltc2cpIHsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFVNQkZMR19GQ0NfQVVU
SF9SRVFVSVJFRCkKKwkJCXVtYl9kZWNvZGVfcW1pKHNjLCBjbWQtPmluZm8sIGluZm9sZW4pOwor
CX0gZWxzZSB7CisJCURQUklOVEZOKDIsICJzZXQvcXJ5ICVzIGRvbmVcbiIsCisJCSAgICB1bWJf
Y2lkMnN0cihjaWQpKTsKKwkJdW1iX2RlY29kZV9jaWQoc2MsIGNpZCwgY21kLT5pbmZvLCBpbmZv
bGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYywgdWludDMyX3QgY2lkLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCWludAkgb2sg
PSAxOworCisJc3dpdGNoIChjaWQpIHsKKwljYXNlIE1CSU1fQ0lEX0RFVklDRV9DQVBTOgorCQlv
ayA9IHVtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwlj
YXNlIE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTOgorCQlvayA9IHVtYl9kZWNvZGVf
c3Vic2NyaWJlcl9zdGF0dXMoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9D
SURfUkFESU9fU1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9yYWRpb19zdGF0ZShzYywgZGF0YSwg
bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9QSU46CisJCW9rID0gdW1iX2RlY29kZV9w
aW4oc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUkVHSVNURVJfU1RB
VEU6CisJCW9rID0gdW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzYywgZGF0YSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NJRF9QQUNLRVRfU0VSVklDRToKKwkJb2sgPSB1bWJfZGVjb2Rl
X3BhY2tldF9zZXJ2aWNlKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lE
X1NJR05BTF9TVEFURToKKwkJb2sgPSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzYywgZGF0YSwg
bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9DT05ORUNUOgorCQlvayA9IHVtYl9kZWNv
ZGVfY29ubmVjdF9pbmZvKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lE
X0lQX0NPTkZJR1VSQVRJT046CisJCW9rID0gdW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHNj
LCBkYXRhLCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBOb3RlOiB0aGUg
YWJvdmUgbGlzdCBpcyBpbmNvbXBsZXRlIGFuZCBvbmx5IGNvbnRhaW5zCisJCSAqCW1hbmRhdG9y
eSBDSURzIGZyb20gdGhlIEJBU0lDX0NPTk5FQ1Qgc2V0LgorCQkgKglTbyBhbHRlcm5hdGUgdmFs
dWVzIGFyZSBub3QgdW51c3VhbC4KKwkJICovCisJCURQUklOVEZOKDQsICJpZ25vcmUgJXNcbiIs
IHVtYl9jaWQyc3RyKGNpZCkpOworCQlicmVhazsKKwl9CisJaWYgKCFvaykKKwkJRFBSSU5URigi
ZGlzY2FyZCAlcyB3aXRoIGJhZCBpbmZvIGxlbmd0aCAlZFxuIiwKKwkJICAgIHVtYl9jaWQyc3Ry
KGNpZCksIGxlbik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1iX2RlY29kZV9xbWko
c3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQ4X3QgKmRhdGEsIGludCBsZW4pCit7CisJdWludDhf
dAlzcnY7CisJdWludDE2X3QgbXNnLCB0bHZsZW47CisJdWludDMyX3QgdmFsOworCisjZGVmaW5l
IFVNQl9RTUlfUU1VWExFTgkJNgorCWlmIChsZW4gPCBVTUJfUU1JX1FNVVhMRU4pCisJCWdvdG8g
dG9vc2hvcnQ7CisKKwlzcnYgPSBkYXRhWzRdOworCWRhdGEgKz0gVU1CX1FNSV9RTVVYTEVOOwor
CWxlbiAtPSBVTUJfUU1JX1FNVVhMRU47CisKKyNkZWZpbmUgVU1CX0dFVDE2KHApCSgodWludDE2
X3QpKnAgfCAodWludDE2X3QpKihwICsgMSkgPDwgOCkKKyNkZWZpbmUgVU1CX0dFVDMyKHApCSgo
dWludDMyX3QpKnAgfCAodWludDMyX3QpKihwICsgMSkgPDwgOCB8IFwKKwkJCSAgICAodWludDMy
X3QpKihwICsgMikgPDwgMTYgfCh1aW50MzJfdCkqKHAgKyAzKSA8PCAyNCkKKwlzd2l0Y2ggKHNy
dikgeworCWNhc2UgMDoJLyogY3RsICovCisjZGVmaW5lIFVNQl9RTUlfQ1RMTEVOCQk2CisJCWlm
IChsZW4gPCBVTUJfUU1JX0NUTExFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCW1zZyA9IFVNQl9H
RVQxNigmZGF0YVsyXSk7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs0XSk7CisJCWRhdGEg
Kz0gVU1CX1FNSV9DVExMRU47CisJCWxlbiAtPSBVTUJfUU1JX0NUTExFTjsKKwkJYnJlYWs7CisJ
Y2FzZSAyOgkvKiBkbXMgICovCisjZGVmaW5lIFVNQl9RTUlfRE1TTEVOCQk3CisJCWlmIChsZW4g
PCBVTUJfUU1JX0RNU0xFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCW1zZyA9IFVNQl9HRVQxNigm
ZGF0YVszXSk7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs1XSk7CisJCWRhdGEgKz0gVU1C
X1FNSV9ETVNMRU47CisJCWxlbiAtPSBVTUJfUU1JX0RNU0xFTjsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJRFBSSU5URigiZGlzY2FyZCBRTUkgbWVzc2FnZSBmb3IgdW5rbm93biBzZXJ2aWNlIHR5
cGUgJWRcbiIsCisJCSAgICBzcnYpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8IHRsdmxl
bikKKwkJZ290byB0b29zaG9ydDsKKworI2RlZmluZSBVTUJfUU1JX1RMVkxFTgkJMworCXdoaWxl
IChsZW4gPiAwKSB7CisJCWlmIChsZW4gPCBVTUJfUU1JX1RMVkxFTikKKwkJCWdvdG8gdG9vc2hv
cnQ7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVsxXSk7CisJCWlmIChsZW4gPCBVTUJfUU1J
X1RMVkxFTiArIHRsdmxlbikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCXN3aXRjaCAoZGF0YVswXSkg
eworCQljYXNlIDE6CS8qIGFsbG9jYXRpb24gaW5mbyAqLworCQkJaWYgKG1zZyA9PSAweDAwMjIp
IHsJLyogQWxsb2NhdGUgQ0lEICovCisJCQkJaWYgKHRsdmxlbiAhPSAyIHx8IGRhdGFbM10gIT0g
MikgLyogZG1zICovCisJCQkJCWJyZWFrOworCQkJCXNjLT5zY19jaWQgPSBkYXRhWzRdOworCQkJ
CURQUklOVEYoIlFNSSBDSUQgJWQgYWxsb2NhdGVkXG4iLAorCQkJCSAgICBzYy0+c2NfY2lkKTsK
KwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05TX0RPTlRfRFJPUCk7CisJCQl9
CisJCQlicmVhazsKKwkJY2FzZSAyOgkvKiByZXNwb25zZSAqLworCQkJaWYgKHRsdmxlbiAhPSBz
aXplb2YgKHZhbCkpCisJCQkJYnJlYWs7CisJCQl2YWwgPSBVTUJfR0VUMzIoJmRhdGFbM10pOwor
CQkJc3dpdGNoIChtc2cpIHsKKwkJCWNhc2UgMHgwMDIyOgkvKiBBbGxvY2F0ZSBDSUQgKi8KKwkJ
CQlpZiAodmFsICE9IDApIHsKKwkJCQkJbG9nKExPR19FUlIsICIlczogYWxsb2NhdGlvbiBvZiBR
TUkgQ0lEIgorCQkJCQkgICAgIiBmYWlsZWQsIGVycm9yIDB4JXhcbiIsIERFVk5BTShzYyksCisJ
CQkJCSAgICB2YWwpOworCQkJCQkvKiBYWFggaG93IHRvIHByb2NlZWQ/ICovCisJCQkJCXJldHVy
bjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDB4NTU1ZjoJLyogU2VuZCBGQ0MgQXV0aGVu
dGljYXRpb24gKi8KKwkJCQlpZiAodmFsID09IDApCisJCQkJCURQUklOVEYoIiVzOiBzZW5kIEZD
QyAiCisJCQkJCSAgICAiQXV0aGVudGljYXRpb24gc3VjY2VlZGVkXG4iLAorCQkJCQkgICAgREVW
TkFNKHNjKSk7CisJCQkJZWxzZSBpZiAodmFsID09IDB4MDAxYTAwMDEpCisJCQkJCURQUklOVEYo
IiVzOiBGQ0MgQXV0aGVudGljYXRpb24gIgorCQkJCQkgICAgIm5vdCByZXF1aXJlZFxuIiwgREVW
TkFNKHNjKSk7CisJCQkJZWxzZQorCQkJCQlsb2coTE9HX0lORk8sICIlczogc2VuZCBGQ0MgIgor
CQkJCQkgICAgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgIgorCQkJCQkgICAgImVycm9yIDB4JXhc
biIsIERFVk5BTShzYyksIHZhbCk7CisKKwkJCQkvKiBGQ0MgQXV0aCBpcyBuZWVkZWQgb25seSBv
bmNlIGFmdGVyIHBvd2VyLW9uKi8KKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflVNQkZMR19GQ0NfQVVU
SF9SRVFVSVJFRDsKKworCQkJCS8qIFRyeSB0byBwcm9jZWVkIGFueXdheSAqLworCQkJCURQUklO
VEYoImluaXQ6IHR1cm5pbmcgcmFkaW8gb24gLi4uXG4iKTsKKwkJCQl1bWJfcmFkaW8oc2MsIDEp
OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOwor
CQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJZGF0YSArPSBVTUJfUU1JX1RMVkxFTiArIHRs
dmxlbjsKKwkJbGVuIC09IFVNQl9RTUlfVExWTEVOICsgdGx2bGVuOworCX0KKwlyZXR1cm47CisK
K3Rvb3Nob3J0OgorCURQUklOVEYoImRpc2NhcmQgc2hvcnQgUU1JIG1lc3NhZ2VcbiIpOworCXJl
dHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9pbnRyKHN0cnVjdCB1c2JfeGZlciAqeGZlciwg
dXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVy
X3NvZnRjKHhmZXIpOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247
CisJc3RydWN0IHVzYl9wYWdlX2NhY2hlICpwYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9J
RlAoc2MpOworCWludAkgdG90YWxfbGVuOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBN
QV9PV05FRCk7CisKKwkvKiBGSVhNRSB1c2UgYWN0bGVuIG9yIHRvdGFsX2xlbj8gKi8KKwl1c2Jk
X3hmZXJfc3RhdHVzKHhmZXIsICZ0b3RhbF9sZW4sIE5VTEwsIE5VTEwsIE5VTEwpOworCisJc3dp
dGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CisJY2FzZSBVU0JfU1RfVFJBTlNGRVJSRUQ6CisJ
CURQUklOVEYoIlJlY2VpdmVkICVkIGJ5dGVzXG4iLCB0b3RhbF9sZW4pOworCisJCWlmICh0b3Rh
bF9sZW4gPCBVQ0RDX05PVElGSUNBVElPTl9MRU5HVEgpIHsKKwkJCURQUklOVEYoInNob3J0IG5v
dGlmaWNhdGlvbiAoJWQ8JWQpXG4iLAorCQkJCQl0b3RhbF9sZW4sIFVDRENfTk9USUZJQ0FUSU9O
X0xFTkdUSCk7CisJCQlyZXR1cm47CisJCX0KKworCQlwYyA9IHVzYmRfeGZlcl9nZXRfZnJhbWUo
eGZlciwgMCk7CisJCXVzYmRfY29weV9vdXQocGMsIDAsICZub3RpZmljYXRpb24sIHNpemVvZiAo
bm90aWZpY2F0aW9uKSk7CisKKwkJaWYgKG5vdGlmaWNhdGlvbi5ibVJlcXVlc3RUeXBlICE9IFVD
RENfTk9USUZJQ0FUSU9OKSB7CisJCQlEUFJJTlRGKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiAo
dHlwZT0weCUwMngpXG4iLAorCQkJCQlub3RpZmljYXRpb24uYm1SZXF1ZXN0VHlwZSk7CisJCQly
ZXR1cm47CisJCX0KKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5iTm90aWZpY2F0aW9uKSB7CisJ
CWNhc2UgVUNEQ19OX05FVFdPUktfQ09OTkVDVElPTjoKKwkJCWlmIChpZnAtPmlmX2ZsYWdzICYg
SUZGX0RFQlVHKQorCQkJCWxvZyhMT0dfREVCVUcsICIlczogbmV0d29yayAlc2Nvbm5lY3RlZFxu
IiwKKwkJCQkJCURFVk5BTShzYyksCisJCQkJCQlVR0VUVyhub3RpZmljYXRpb24ud1ZhbHVlKQor
CQkJCQkJPyAiIiA6ICJkaXMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVDRENfTl9SRVNQT05TRV9B
VkFJTEFCTEU6CisJCQlEUFJJTlRGTigyLCAidW1iX2ludHI6IHJlc3BvbnNlIGF2YWlsYWJsZVxu
Iik7CisJCQkrK3NjLT5zY19ucmVzcDsKKwkJCXVtYl9hZGRfdGFzayhzYywgdW1iX2dldF9yZXNw
b25zZV90YXNrLAorCQkJCQkmc2MtPnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMF0uaGRyLAor
CQkJCQkmc2MtPnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMV0uaGRyLAorCQkJCQkwKTsKKwkJ
CWJyZWFrOworCQljYXNlIFVDRENfTl9DT05ORUNUSU9OX1NQRUVEX0NIQU5HRToKKwkJCURQUklO
VEZOKDIsICJ1bWJfaW50cjogY29ubmVjdGlvbiBzcGVlZCBjaGFuZ2VkXG4iKTsKKwkJCWJyZWFr
OworCQlkZWZhdWx0OgorCQkJRFBSSU5URigidW5leHBlY3RlZCBub3RpZmljYXRpb24gKDB4JTAy
eClcbiIsCisJCQkJCW5vdGlmaWNhdGlvbi5iTm90aWZpY2F0aW9uKTsKKwkJCWJyZWFrOworCQl9
CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBVU0JfU1RfU0VUVVA6Cit0cl9zZXR1cDoKKwkJ
dXNiZF94ZmVyX3NldF9mcmFtZV9sZW4oeGZlciwgMCwgdXNiZF94ZmVyX21heF9sZW4oeGZlcikp
OworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ
aWYgKHN0YXR1cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogc3RhcnQgY2xlYXIgc3Rh
bGwgKi8KKwkJCXVzYmRfeGZlcl9zZXRfc3RhbGwoeGZlcik7CisJCQlnb3RvIHRyX3NldHVwOwor
CQl9CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIERpYWdub3N0aWMgcm91dGluZXMKKyAqLwor
c3RhdGljIGNoYXIgKgordW1iX250b3Aoc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKyNkZWZpbmUg
TlVNQlVGUwkJNAorCXN0YXRpYyBjaGFyIGFzdHJbTlVNQlVGU11bSU5FVF9BRERSU1RSTEVOXTsK
KwlzdGF0aWMgdW5zaWduZWQgbmJ1ZiA9IDA7CisJY2hhcgkqczsKKworCXMgPSBhc3RyW25idWYr
K107CisJaWYgKG5idWYgPj0gTlVNQlVGUykKKwkJbmJ1ZiA9IDA7CisKKwlzd2l0Y2ggKHNhLT5z
YV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJZGVmYXVsdDoKKwkJaW5ldF9udG9wKEFGX0lO
RVQsICZzYXRvc2luKHNhKS0+c2luX2FkZHIsIHMsIHNpemVvZiAoYXN0clswXSkpOworCQlicmVh
azsKKwljYXNlIEFGX0lORVQ2OgorCQlpbmV0X250b3AoQUZfSU5FVDYsICZzYXRvc2luNihzYSkt
PnNpbjZfYWRkciwgcywKKwkJICAgIHNpemVvZiAoYXN0clswXSkpOworCQlicmVhazsKKwl9CisJ
cmV0dXJuIHM7Cit9CisKKyNpZmRlZiBVTUJfREVCVUcKK3N0YXRpYyBjaGFyICoKK3VtYl91dWlk
MnN0cih1aW50OF90IHV1aWRbTUJJTV9VVUlEX0xFTl0pCit7CisJc3RhdGljIGNoYXIgdXVpZHN0
clsyICogTUJJTV9VVUlEX0xFTiArIDVdOworCisjZGVmaW5lIFVVSURfQkZNVAkiJTAyWCIKKyNk
ZWZpbmUgVVVJRF9TRVAJIi0iCisJc25wcmludGYodXVpZHN0ciwgc2l6ZW9mICh1dWlkc3RyKSwK
KwkgICAgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJ
ICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAKKwkgICAgVVVJRF9CRk1UIFVVSURfQkZN
VCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJICAgIFVVSURf
QkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1ULAor
CSAgICB1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVd
LAorCSAgICB1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVp
ZFsxMV0sCisJICAgIHV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdKTsKKwly
ZXR1cm4gdXVpZHN0cjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kdW1wKHZvaWQgKmJ1ZiwgaW50
IGxlbikKK3sKKwlpbnQJIGkgPSAwOworCXVpbnQ4X3QJKmMgPSBidWY7CisKKwlpZiAobGVuID09
IDApCisJCXJldHVybjsKKwl3aGlsZSAoaSA8IGxlbikgeworCQlpZiAoKGkgJSAxNikgPT0gMCkg
eworCQkJaWYgKGkgPiAwKQorCQkJCWxvZyhMT0dfREVCVUcsICJcbiIpOworCQkJbG9nKExPR19E
RUJVRywgIiU0ZDogICIsIGkpOworCQl9CisJCWxvZyhMT0dfREVCVUcsICIgJTAyeCIsICpjKTsK
KwkJYysrOworCQlpKys7CisJfQorCWxvZyhMT0dfREVCVUcsICJcbiIpOworfQorI2VuZGlmIC8q
IFVNQl9ERUJVRyAqLworCitEUklWRVJfTU9EVUxFKHVtYiwgdWh1YiwgdW1iX2RyaXZlciwgTlVM
TCwgTlVMTCk7CitNT0RVTEVfREVQRU5EKHVtYiwgdXNiLCAxLCAxLCAxKTsKZGlmZiAtLWdpdCBh
L3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcuaCBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmExMzRhMzA3MzQ1NQot
LS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcuaApAQCAtMCwwICsx
LDQ0MSBAQAorLyoJJE9wZW5CU0Q6IGlmX3VtYi5oLHYgMS40IDIwMTcvMDQvMTggMTM6Mjc6NTUg
Z2VyaGFyZCBFeHAgJCAqLworCisvKgorICogT3JpZ2luYWwgY29weXJpZ2h0IChjKSAyMDE2IGdl
bnVhIG1iSCAoT3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5
LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9z
ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVH
QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK
KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VM
VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAq
IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s
IEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBBRElT
VEEgU0FTIChyZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisgKiBSZS13cml0ZSBmb3IgRnJlZUJT
RCBieSBQaWVycmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3JhLm5ldD4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
LSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
CisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisg
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogTW9iaWxlIEJyb2Fk
YmFuZCBJbnRlcmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2Rv
Y3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4wLnBkZgorICovCisKK3N0cnVjdCB1
bWJfdmFsZGVzY3IgeworCWludAkJIHZhbDsKKwljaGFyIGNvbnN0CSpkZXNjcjsKK307CisKK3N0
YXRpYyBjb25zdCBjaGFyICoKK3VtYl92YWwyZGVzY3IoY29uc3Qgc3RydWN0IHVtYl92YWxkZXNj
ciAqdmRwLCBpbnQgdmFsKQoreworCXN0YXRpYyBjaGFyIHN2YWxbMzJdOworCisJd2hpbGUgKHZk
cC0+ZGVzY3IgIT0gTlVMTCkgeworCQlpZiAodmRwLT52YWwgPT0gdmFsKQorCQkJcmV0dXJuIHZk
cC0+ZGVzY3I7CisJCXZkcCsrOworCX0KKwlzbnByaW50ZihzdmFsLCBzaXplb2YgKHN2YWwpLCAi
IyVkIiwgdmFsKTsKKwlyZXR1cm4gc3ZhbDsKK30KKworI2RlZmluZSBNQklNX1JFR1NUQVRFX0RF
U0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fUkVHU1RBVEVfVU5LTk9XTiwJInVua25vd24iIH0s
CQlcCisJeyBNQklNX1JFR1NUQVRFX0RFUkVHSVNURVJFRCwJIm5vdCByZWdpc3RlcmVkIiB9LAlc
CisJeyBNQklNX1JFR1NUQVRFX1NFQVJDSElORywJInNlYXJjaGluZyIgfSwJCVwKKwl7IE1CSU1f
UkVHU1RBVEVfSE9NRSwJCSJob21lIG5ldHdvcmsiIH0sCVwKKwl7IE1CSU1fUkVHU1RBVEVfUk9B
TUlORywJInJvYW1pbmcgbmV0d29yayIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9QQVJUTkVSLAki
cGFydG5lciBuZXR3b3JrIiB9LAlcCisJeyBNQklNX1JFR1NUQVRFX0RFTklFRCwJCSJhY2Nlc3Mg
ZGVuaWVkIiB9LAlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0RF
U0NSSVBUSU9OUyB7CQkJCQlcCisJeyBNQklNX0RBVEFDTEFTU19OT05FLAkJCQkibm9uZSIgfSwJ
XAorCXsgTUJJTV9EQVRBQ0xBU1NfR1BSUywJCQkJIkdQUlMiIH0sCVwKKwl7IE1CSU1fREFUQUNM
QVNTX0VER0UsCQkJCSJFREdFIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19VTVRTLAkJCQkiVU1U
UyIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfSFNEUEEsCQkJCSJIU0RQQSIgfSwJXAorCXsgTUJJ
TV9EQVRBQ0xBU1NfSFNVUEEsCQkJCSJIU1VQQSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfSFNE
UEF8TUJJTV9EQVRBQ0xBU1NfSFNVUEEsCSJIU1BBIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19M
VEUsCQkJCSJMVEUiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYUlRULAkJCQkiQ0RNQTIwMDAi
IH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZETywJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1C
SU1fREFUQUNMQVNTXzFYRVZET19SRVZfQSwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFU
QUNMQVNTXzFYRVZEViwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzNYUlRU
LAkJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZET19SRVZfQiwJCQki
Q0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX1VNQiwJCQkJIkNETUEyMDAwIiB9LAlc
CisJeyBNQklNX0RBVEFDTEFTU19DVVNUT00sCQkJImN1c3RvbSIgfSwJXAorCXsgMCwgTlVMTCB9
IH0KKworI2RlZmluZSBNQklNXzFUTzFfREVTQ1JJUFRJT04obSkJeyAobSksICNtIH0KKyNkZWZp
bmUgTUJJTV9NRVNTQUdFU19ERVNDUklQVElPTlMgewkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fT1BFTl9NU0cpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DTE9T
RV9NU0cpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DT01NQU5EX01TRyksCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fSE9TVF9FUlJPUl9NU0cpLAkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX09QRU5fRE9ORSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQ
VElPTihNQklNX0NMT1NFX0RPTkUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9D
T01NQU5EX0RPTkUpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0ZVTkNUSU9OX0VS
Uk9SX01TRyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fSU5ESUNBVEVfU1RBVFVT
X01TRyksCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04obSkJeyBNQklNX1NUQVRVU18gIyMgbSwgI20gfQorI2RlZmluZSBNQklNX1NUQVRVU19ERVND
UklQVElPTlMgewkJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNVQ0NFU1MpLAkJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQlVTWSksCQkJCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oRkFJTFVSRSksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTSU1fTk9U
X0lOU0VSVEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQkFEX1NJTSksCQkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihQSU5fUkVRVUlSRUQpLAkJCQlcCisJTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04oUElOX0RJU0FCTEVEKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKE5PVF9SRUdJU1RFUkVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUFJPVklE
RVJTX05PVF9GT1VORCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE5PX0RFVklDRV9T
VVBQT1JUKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUFJPVklERVJfTk9UX1ZJU0lC
TEUpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihEQVRBX0NMQVNTX05PVF9BVkFJTEFC
TEUpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBBQ0tFVF9TRVJWSUNFX0RFVEFDSEVE
KSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihNQVhfQUNUSVZBVEVEX0NPTlRFWFRTKSwJ
CVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT1RfSU5JVElBTElaRUQpLAkJCVwKKwlNQklN
X1NUQVRVU19ERVNDUklQVElPTihWT0lDRV9DQUxMX0lOX1BST0dSRVNTKSwJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihDT05URVhUX05PVF9BQ1RJVkFURUQpLAkJCVwKKwlNQklNX1NUQVRV
U19ERVNDUklQVElPTihTRVJWSUNFX05PVF9BQ1RJVkFURUQpLAkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihJTlZBTElEX0FDQ0VTU19TVFJJTkcpLAkJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihJTlZBTElEX1VTRVJfTkFNRV9QV0QpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQ
VElPTihSQURJT19QT1dFUl9PRkYpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJTlZB
TElEX1BBUkFNRVRFUlMpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihSRUFEX0ZBSUxV
UkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oV1JJVEVfRkFJTFVSRSksCQkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT19QSE9ORUJPT0spLAkJCQlcCisJTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04oUEFSQU1FVEVSX1RPT19MT05HKSwJCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oU1RLX0JVU1kpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oT1BFUkFU
SU9OX05PVF9BTExPV0VEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTUVNT1JZX0ZB
SUxVUkUpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJTlZBTElEX01FTU9SWV9JTkRF
WCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE1FTU9SWV9GVUxMKSwJCQkJXAorCU1C
SU1fU1RBVFVTX0RFU0NSSVBUSU9OKEZJTFRFUl9OT1RfU1VQUE9SVEVEKSwJCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oRFNTX0lOU1RBTkNFX0xJTUlUKSwJCQlcCisJTUJJTV9TVEFUVVNf
REVTQ1JJUFRJT04oSU5WQUxJRF9ERVZJQ0VfU0VSVklDRV9PUEVSQVRJT04pLAlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oQVVUSF9JTkNPUlJFQ1RfQVVUTiksCQkJXAorCU1CSU1fU1RBVFVT
X0RFU0NSSVBUSU9OKEFVVEhfU1lOQ19GQUlMVVJFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oQVVUSF9BTUZfTk9UX1NFVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKENP
TlRFWFRfTk9UX1NVUFBPUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19V
TktOT1dOX1NNU0NfQUREUkVTUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU01TX05F
VFdPUktfVElNRU9VVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19MQU5HX05P
VF9TVVBQT1JURUQpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19FTkNPRElOR19O
T1RfU1VQUE9SVEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTTVNfRk9STUFUX05P
VF9TVVBQT1JURUQpLAkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX0VSUk9SX0RF
U0NSSVBUSU9OKG0pCXsgTUJJTV9FUlJPUl8gIyMgbSwgI20gfQorI2RlZmluZSBNQklNX0VSUk9S
X0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihUSU1FT1VUX0ZS
QUdNRU5UKSwJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihGUkFHTUVOVF9PVVRfT0ZfU0VR
VUVOQ0UpLAkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oTEVOR1RIX01JU01BVENIKSwJCQlc
CisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihEVVBMSUNBVEVEX1RJRCksCQkJCVwKKwlNQklNX0VS
Uk9SX0RFU0NSSVBUSU9OKE5PVF9PUEVORUQpLAkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElP
TihVTktOT1dOKSwJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oQ0FOQ0VMKSwJCQkJCVwK
KwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKE1BWF9UUkFOU0ZFUiksCQkJCVwKKwl7IDAsIE5VTEwg
fSB9CisKKyNkZWZpbmUgTUJJTV9DSURfREVTQ1JJUFRJT05TIHsJCQkJCQlcCisJTUJJTV8xVE8x
X0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9DQVBTKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NS
SVBUSU9OKE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTKSwJXAorCU1CSU1fMVRPMV9E
RVNDUklQVElPTihNQklNX0NJRF9SQURJT19TVEFURSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQ
VElPTihNQklNX0NJRF9QSU4pLAkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lE
X1BJTl9MSVNUKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0hPTUVfUFJP
VklERVIpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUFJFRkVSUkVEX1BS
T1ZJREVSUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1ZJU0lCTEVfUFJP
VklERVJTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUkVHSVNURVJfU1RB
VEUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUEFDS0VUX1NFUlZJQ0Up
LAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfU0lHTkFMX1NUQVRFKSwJCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0NPTk5FQ1QpLAkJCVwKKwlNQklNXzFU
TzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUFJPVklTSU9ORURfQ09OVEVYVFMpLAkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9TRVJWSUNFX0FDVElWQVRJT04pLAkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OKSwJCVwKKwlNQklNXzFU
TzFfREVTQ1JJUFRJT04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VTKSwJCVwKKwlNQklNXzFUTzFf
REVTQ1JJUFRJT04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VfU1VCU0NSSUJFX0xJU1QpLAlcCisJ
TUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BBQ0tFVF9TVEFUSVNUSUNTKSwJCVwKKwlN
QklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfTkVUV09SS19JRExFX0hJTlQpLAkJXAorCU1C
SU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9FTUVSR0VOQ1lfTU9ERSksCQkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9JUF9QQUNLRVRfRklMVEVSUyksCQlcCisJTUJJTV8x
VE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX01VTFRJQ0FSUklFUl9QUk9WSURFUlMpLAkJXAorCXsg
MCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCQlc
CisJeyBNQklNX1NJTVNUQVRFX05PVElOSVRJQUxJWkVELCAibm90IGluaXRpYWxpemVkIiB9LAkJ
XAorCXsgTUJJTV9TSU1TVEFURV9JTklUSUFMSVpFRCwgImluaXRpYWxpemVkIiB9LAkJCVwKKwl7
IE1CSU1fU0lNU1RBVEVfTk9USU5TRVJURUQsICJub3QgaW5zZXJ0ZWQiIH0sCQkJXAorCXsgTUJJ
TV9TSU1TVEFURV9CQURTSU0sICJiYWQgdHlwZSIgfSwJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9G
QUlMVVJFLCAiZmFpbGVkIiB9LAkJCQlcCisJeyBNQklNX1NJTVNUQVRFX05PVEFDVElWQVRFRCwg
Im5vdCBhY3RpdmF0ZWQiIH0sCQlcCisJeyBNQklNX1NJTVNUQVRFX0xPQ0tFRCwgImxvY2tlZCIg
fSwJCQkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1BJTlRZUEVfREVTQ1JJUFRJ
T05TIHsJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfTk9ORSwgIm5vbmUiIH0sCQkJCQlcCisJeyBN
QklNX1BJTl9UWVBFX0NVU1RPTSwgImN1c3RvbSIgfSwJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9Q
SU4xLCAiUElOMSIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUElOMiwgIlBJTjIiIH0sCQkJ
CQlcCisJeyBNQklNX1BJTl9UWVBFX0RFVl9TSU1fUElOLCAiZGV2aWNlIFBJTiIgfSwJCQlcCisJ
eyBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUElOLCAiZGV2aWNlIDFzdCBQSU4iIH0sCQlc
CisJeyBNQklNX1BJTl9UWVBFX05FVFdPUktfUElOLCAibmV0d29yayBQSU4iIH0sCQkJXAorCXsg
TUJJTV9QSU5fVFlQRV9ORVRXT1JLX1NVQlNFVF9QSU4sICJuZXR3b3JrIHN1YnNldCBQSU4iIH0s
CVwKKwl7IE1CSU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4sICJwcm92aWRlciBQSU4i
IH0sCQlcCisJeyBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QSU4sICJjb3Jwb3JhdGUgUElOIiB9
LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9TVUJTSURZX0xPQ0ssICJzdWJzaWR5IGxvY2siIH0sCQkJ
XAorCXsgTUJJTV9QSU5fVFlQRV9QVUsxLCAiUFVLIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQ
RV9QVUsyLCAiUFVLMiIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfREVWX0ZJUlNUX1NJTV9Q
VUssICJkZXZpY2UgMXN0IFBVSyIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfTkVUV09SS19QVUss
ICJuZXR3b3JrIFBVSyIgfSwJCQlcCisJeyBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BV
SywgIm5ldHdvcmsgc3Vic2V0IFBVSyIgfSwJXAorCXsgTUJJTV9QSU5fVFlQRV9TRVJWSUNFX1BS
T1ZJREVSX1BVSywgInByb3ZpZGVyIFBVSyIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfQ09SUE9S
QVRFX1BVSywgImNvcnBvcmF0ZSBQVUsiIH0sCQlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5l
IE1CSU1fUEtUU1JWX1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fUEtUU0VSVklD
RV9TVEFURV9VTktOT1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX1BLVFNFUlZJQ0VfU1RB
VEVfQVRUQUNISU5HLCAiYXR0YWNoaW5nIiB9LAkJXAorCXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRF
X0FUVEFDSEVELCAiYXR0YWNoZWQiIH0sCQkJXAorCXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0RF
VEFDSElORywgImRldGFjaGluZyIgfSwJCVwKKwl7IE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRB
Q0hFRCwgImRldGFjaGVkIiB9LAkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9B
Q1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fQUNUSVZBVElPTl9T
VEFURV9VTktOT1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVf
QUNUSVZBVEVELCAiYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FD
VElWQVRJTkcsICJhY3RpdmF0aW5nIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RF
QUNUSVZBVEVELCAiZGVhY3RpdmF0ZWQiIH0sCQlcCisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVf
REVBQ1RJVkFUSU5HLCAiZGVhY3RpdmF0aW5nIiB9LAkJXAorCXsgMCwgTlVMTCB9IH0KKworLyoK
KyAqIERyaXZlciBpbnRlcm5hbCBzdGF0ZQorICovCitlbnVtIHVtYl9zdGF0ZSB7CisJVU1CX1Nf
RE9XTiA9IDAsCQkvKiBpbnRlcmZhY2UgZG93biAqLworCVVNQl9TX09QRU4sCQkvKiBNQklNIGRl
dmljZSBoYXMgYmVlbiBvcGVuZWQgKi8KKwlVTUJfU19DSUQsCQkvKiBRTUkgY2xpZW50IGlkIGFs
bG9jYXRlZCAqLworCVVNQl9TX1JBRElPLAkJLyogcmFkaW8gaXMgb24gKi8KKwlVTUJfU19TSU1S
RUFEWSwJCS8qIFNJTSBpcyByZWFkeSAqLworCVVNQl9TX0FUVEFDSEVELAkJLyogcGFja2V0IHNl
cnZpY2UgaXMgYXR0YWNoZWQgKi8KKwlVTUJfU19DT05ORUNURUQsCS8qIGNvbm5lY3RlZCB0byBw
cm92aWRlciAqLworCVVNQl9TX1VQLAkJLyogaGF2ZSBJUCBjb25maWd1cmF0aW9uICovCit9Owor
CisjZGVmaW5lIFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlMgewlcCisJeyBVTUJfU19E
T1dOLCAiZG93biIgfSwJCQlcCisJeyBVTUJfU19PUEVOLCAib3BlbiIgfSwJCQlcCisJeyBVTUJf
U19DSUQsICJDSUQgYWxsb2NhdGVkIiB9LAkJXAorCXsgVU1CX1NfUkFESU8sICJyYWRpbyBvbiIg
fSwJCVwKKwl7IFVNQl9TX1NJTVJFQURZLCAiU0lNIGlzIHJlYWR5IiB9LAlcCisJeyBVTUJfU19B
VFRBQ0hFRCwgImF0dGFjaGVkIiB9LAkJXAorCXsgVU1CX1NfQ09OTkVDVEVELCAiY29ubmVjdGVk
IiB9LAlcCisJeyBVTUJfU19VUCwgInVwIiB9LAkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKy8qCisg
KiBVTUIgcGFyYW1ldGVycyAoU0lPQ1tHU11VTUJQQVJBTSBpb2N0bHMpCisgKi8KK3N0cnVjdCB1
bWJfcGFyYW1ldGVyIHsKKwlpbnQJCQlvcDsKKwlpbnQJCQlpc19wdWs7CisJdWludDE2X3QJCXBp
bltNQklNX1BJTl9NQVhMRU5dOworCWludAkJCXBpbmxlbjsKKworCXVpbnQxNl90CQluZXdwaW5b
TUJJTV9QSU5fTUFYTEVOXTsKKwlpbnQJCQluZXdwaW5sZW47CisKKyNkZWZpbmUgVU1CX0FQTl9N
QVhMRU4JCTEwMAorCXVpbnQxNl90CQlhcG5bVU1CX0FQTl9NQVhMRU5dOworCWludAkJCWFwbmxl
bjsKKworI2RlZmluZSBVTUJfVVNFUk5BTUVfTUFYTEVOCTIwNQorCXVpbnQxNl90CQl1c2VybmFt
ZVtVTUJfVVNFUk5BTUVfTUFYTEVOXTsKKwlpbnQJCQl1c2VybmFtZWxlbjsKKworI2RlZmluZSBV
TUJfUEFTU1dPUkRfTUFYTEVOCTIwNQorCXVpbnQxNl90CQlwYXNzd29yZFtVTUJfUEFTU1dPUkRf
TUFYTEVOXTsKKwlpbnQJCQlwYXNzd29yZGxlbjsKKworCWludAkJCXJvYW1pbmc7CisJdWludDMy
X3QJCXByZWZlcnJlZGNsYXNzZXM7Cit9OworCisvKgorICogVU1CIGRldmljZSBzdGF0dXMgaW5m
byAoU0lPQ0dVTUJJTkZPIGlvY3RsKQorICovCitzdHJ1Y3QgdW1iX2luZm8geworCWVudW0gdW1i
X3N0YXRlCQlzdGF0ZTsKKwlpbnQJCQllbmFibGVfcm9hbWluZzsKKyNkZWZpbmUgVU1CX1BJTl9S
RVFVSVJFRAkwCisjZGVmaW5lIFVNQl9QSU5fVU5MT0NLRUQJMQorI2RlZmluZSBVTUJfUFVLX1JF
UVVJUkVECTIKKwlpbnQJCQlwaW5fc3RhdGU7CisJaW50CQkJcGluX2F0dGVtcHRzX2xlZnQ7CisJ
aW50CQkJYWN0aXZhdGlvbjsKKwlpbnQJCQlzaW1fc3RhdGU7CisJaW50CQkJcmVnc3RhdGU7CisJ
aW50CQkJcmVnbW9kZTsKKwlpbnQJCQlud2Vycm9yOworCWludAkJCXBhY2tldHN0YXRlOworCXVp
bnQzMl90CQlzdXBwb3J0ZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSBodyBzdXBwb3J0cyAqLworCXVp
bnQzMl90CQlwcmVmZXJyZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSB1c2VyIHByZWZlcnMgKi8KKwl1
aW50MzJfdAkJaGlnaGVzdGNsYXNzOwkvKiB3aGF0IHRoZSBuZXR3b3JrIG9mZmVycyAqLworCXVp
bnQzMl90CQljZWxsY2xhc3M7CisjZGVmaW5lIFVNQl9QUk9WSURFUk5BTUVfTUFYTEVOCQkyMAor
CXVpbnQxNl90CQlwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTl07CisjZGVmaW5lIFVN
Ql9QSE9ORU5SX01BWExFTgkJMjIKKwl1aW50MTZfdAkJcG5bVU1CX1BIT05FTlJfTUFYTEVOXTsK
KyNkZWZpbmUgVU1CX1NVQlNDUklCRVJJRF9NQVhMRU4JCTE1CisJdWludDE2X3QJCXNpZFtVTUJf
U1VCU0NSSUJFUklEX01BWExFTl07CisjZGVmaW5lIFVNQl9JQ0NJRF9NQVhMRU4JCTIwCisJdWlu
dDE2X3QJCWljY2lkW1VNQl9JQ0NJRF9NQVhMRU5dOworI2RlZmluZSBVTUJfUk9BTUlOR1RFWFRf
TUFYTEVOCQk2MworCXVpbnQxNl90CQlyb2FtaW5ndHh0W1VNQl9ST0FNSU5HVEVYVF9NQVhMRU5d
OworCisjZGVmaW5lIFVNQl9ERVZJRF9NQVhMRU4JCTE4CisJdWludDE2X3QJCWRldmlkW1VNQl9E
RVZJRF9NQVhMRU5dOworI2RlZmluZSBVTUJfRldJTkZPX01BWExFTgkJMzAKKwl1aW50MTZfdAkJ
ZndpbmZvW1VNQl9GV0lORk9fTUFYTEVOXTsKKyNkZWZpbmUgVU1CX0hXSU5GT19NQVhMRU4JCTMw
CisJdWludDE2X3QJCWh3aW5mb1tVTUJfSFdJTkZPX01BWExFTl07CisKKwl1aW50MTZfdAkJYXBu
W1VNQl9BUE5fTUFYTEVOXTsKKwlpbnQJCQlhcG5sZW47CisKKwl1aW50MTZfdAkJdXNlcm5hbWVb
VU1CX1VTRVJOQU1FX01BWExFTl07CisJaW50CQkJdXNlcm5hbWVsZW47CisKKwl1aW50MTZfdAkJ
cGFzc3dvcmRbVU1CX1BBU1NXT1JEX01BWExFTl07CisJaW50CQkJcGFzc3dvcmRsZW47CisKKyNk
ZWZpbmUgVU1CX1ZBTFVFX1VOS05PV04JLTk5OQorCWludAkJCXJzc2k7CisjZGVmaW5lIFVNQl9C
RVJfRVhDRUxMRU5UCTAKKyNkZWZpbmUgVU1CX0JFUl9WRVJZR09PRAkxCisjZGVmaW5lIFVNQl9C
RVJfR09PRAkJMgorI2RlZmluZSBVTUJfQkVSX09LCQkzCisjZGVmaW5lIFVNQl9CRVJfTUVESVVN
CQk0CisjZGVmaW5lIFVNQl9CRVJfQkFECQk1CisjZGVmaW5lIFVNQl9CRVJfVkVSWUJBRAkJNgor
I2RlZmluZSBVTUJfQkVSX0VYVFJFTUVMWUJBRAk3CisJaW50CQkJYmVyOworCisJaW50CQkJaHdf
cmFkaW9fb247CisJaW50CQkJc3dfcmFkaW9fb247CisKKwl1aW50NjRfdAkJdXBsaW5rX3NwZWVk
OworCXVpbnQ2NF90CQlkb3dubGlua19zcGVlZDsKKworI2RlZmluZSBVTUJfTUFYX0ROU1NSVgkJ
CTIKKwlzdHJ1Y3QgaW5fYWRkcgkJaXB2NGRuc1tVTUJfTUFYX0ROU1NSVl07Cit9OworCisjaWYg
IWRlZmluZWQoaWZyX210dSkKKyNkZWZpbmUgaWZyX210dQlpZnJfaWZydS5pZnJ1X21ldHJpYwor
I2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisvKgorICogVU1CIGRldmljZQorICovCitlbnVtIHsK
KwlVTUJfSU5UUl9SWCwKKwlVTUJfQlVMS19SWCwKKwlVTUJfQlVMS19UWCwKKwlVTUJfTl9UUkFO
U0ZFUiwKK307CisKK3N0cnVjdCB1bWJfdGFzayB7CisJc3RydWN0IHVzYl9wcm9jX21zZwkgaGRy
OworCXN0cnVjdCB1bWJfc29mdGMJKnNjOworfTsKKworc3RydWN0IHVtYl9zb2Z0YyB7CisJZGV2
aWNlX3QJCSBzY19kZXY7CisJc3RydWN0IGlmbmV0CQkqc2NfaWY7CisjZGVmaW5lIEdFVF9JRlAo
c2MpCSgoc2MpLT5zY19pZikKKwlzdHJ1Y3QgaWZtZWRpYQkJIHNjX2ltOworCXN0cnVjdCB1c2Jf
ZGV2aWNlCSpzY191ZGV2OworCXN0cnVjdCB1c2JfeGZlcgkJKnNjX3hmZXJbVU1CX05fVFJBTlNG
RVJdOworCXVpbnQ4X3QJCQkgc2NfaWZhY2VzX2luZGV4WzJdOworCisJaW50CQkJIHNjX3Zlcl9t
YWo7CisJaW50CQkJIHNjX3Zlcl9taW47CisJaW50CQkJIHNjX2N0cmxfbGVuOworCWludAkJCSBz
Y19tYXhwa3RsZW47CisJaW50CQkJIHNjX21heHNlc3Npb25zOworCisjZGVmaW5lIFVNQkZMR19G
Q0NfQVVUSF9SRVFVSVJFRAkweDAwMDEKKyNkZWZpbmUgVU1CRkxHX05PX0lORVQ2CQkJMHgwMDAy
CisJdWludDMyX3QJCSBzY19mbGFnczsKKwlpbnQJCQkgc2NfY2lkOworCisJc3RydWN0IHVzYl9w
cm9jZXNzCSBzY190YXNrcXVldWU7CisJc3RydWN0IHVtYl90YXNrCQkgc2NfcHJvY19hdHRhY2hf
dGFza1syXTsKKwlzdHJ1Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX3N0YXJ0X3Rhc2tbMl07CisJc3Ry
dWN0IHVtYl90YXNrCQkgc2NfcHJvY19zdGF0ZV90YXNrWzJdOworCXN0cnVjdCB1bWJfdGFzawkJ
IHNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMl07CisKKwlpbnQJCQkgc2NfbnJlc3A7CisJc3Ry
dWN0IG10eAkJIHNjX211dGV4OworCXN0cnVjdCB1c2JfY2FsbG91dAkgc2Nfc3RhdGVjaGdfdGlt
ZXI7CisJY2hhcgkJCSBzY19keWluZzsKKwljaGFyCQkJIHNjX2F0dGFjaGVkOworCisJdWludDhf
dAkJCSBzY19jdHJsX2lmYWNlbm87CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKnNjX2RhdGFfaWZh
Y2U7CisKKwl2b2lkCQkJKnNjX3Jlc3BfYnVmOworCXZvaWQJCQkqc2NfY3RybF9tc2c7CisKKwl2
b2lkCQkJKnNjX3J4X2J1ZjsKKwl1aW50MzJfdAkJIHNjX3J4X2J1ZnN6OworCXVuc2lnbmVkCQkg
c2NfcnhfbmVycjsKKwlzdHJ1Y3QgaWZxdWV1ZQkJIHNjX3J4X3F1ZXVlOworCisJdm9pZAkJCSpz
Y190eF9idWY7CisJc3RydWN0IG1idWYJCSpzY190eF9tOworCXVpbnQzMl90CQkgc2NfdHhfYnVm
c3o7CisJdWludDMyX3QJCSBzY190eF9zZXE7CisKKwl1aW50MzJfdAkJIHNjX3RpZDsKKworI2Rl
ZmluZSBzY19zdGF0ZQkJc2NfaW5mby5zdGF0ZQorI2RlZmluZSBzY19yb2FtaW5nCQlzY19pbmZv
LmVuYWJsZV9yb2FtaW5nCisJc3RydWN0IHVtYl9pbmZvCQkgc2NfaW5mbzsKK307CisjZW5kaWYg
LyogX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvc3lzL2Rldi91c2IvbmV0L21iaW0uaCBiL3N5cy9k
ZXYvdXNiL25ldC9tYmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li41ZDdlY2ZmMTE0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvbWJpbS5o
CkBAIC0wLDAgKzEsNzI0IEBACisvKgkkT3BlbkJTRDogbWJpbS5oLHYgMS40IDIwMTcvMDQvMTgg
MTM6Mjc6NTUgZ2VyaGFyZCBFeHAgJCAqLworCisvKgorICogT3JpZ2luYWwgY29weXJpZ2h0IChj
KSAyMDE2IGdlbnVhIG1iSCAoT3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQor
ICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAq
IFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJ
UkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09F
VkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIg
SU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V
UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT
RSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoYykg
MjAyMiBBRElTVEEgU0FTIChyZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisgKiBSZS13cml0ZSBm
b3IgRnJlZUJTRCBieSBQaWVycmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3JhLm5ldD4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAg
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogTW9i
aWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZl
bG9wZXJzL2RvY3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4wLnBkZgorICovCisj
aWZuZGVmIF9NQklNX0hfCisjZGVmaW5lIF9NQklNX0hfCisKKyNkZWZpbmUgVURFU0NTVUJfTUJJ
TQkJCTI3CisjZGVmaW5lIE1CSU1fSU5URVJGQUNFX0FMVFNFVFRJTkcJMQorCisjZGVmaW5lIE1C
SU1fUkVTRVRfRlVOQ1RJT04JCTB4MDUKKworLyoKKyAqIFJlZ2lzdHJhdGlvbiBzdGF0ZSAoTUJJ
TV9SRUdJU1RFUl9TVEFURSkKKyAqLworI2RlZmluZSBNQklNX1JFR1NUQVRFX1VOS05PV04JCQkw
CisjZGVmaW5lIE1CSU1fUkVHU1RBVEVfREVSRUdJU1RFUkVECQkxCisjZGVmaW5lIE1CSU1fUkVH
U1RBVEVfU0VBUkNISU5HCQkJMgorI2RlZmluZSBNQklNX1JFR1NUQVRFX0hPTUUJCQkzCisjZGVm
aW5lIE1CSU1fUkVHU1RBVEVfUk9BTUlORwkJCTQKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9QQVJU
TkVSCQkJNQorI2RlZmluZSBNQklNX1JFR1NUQVRFX0RFTklFRAkJCTYKKworLyoKKyAqIERhdGEg
Y2xhc3NlcyBtYXNrIChNQklNX0RBVEFfQ0xBU1MpCisgKi8KKyNkZWZpbmUgTUJJTV9EQVRBQ0xB
U1NfTk9ORQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfR1BSUwkJCTB4MDAw
MDAwMDEKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfRURHRQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUg
TUJJTV9EQVRBQ0xBU1NfVU1UUwkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1Nf
SFNEUEEJCQkweDAwMDAwMDA4CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0hTVVBBCQkJMHgwMDAw
MDAxMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19MVEUJCQkweDAwMDAwMDIwCisjZGVmaW5lIE1C
SU1fREFUQUNMQVNTXzFYUlRUCQkJMHgwMDAxMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18x
WEVWRE8JCQkweDAwMDIwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTXzFYRVZET19SRVZfQQkJ
MHgwMDA0MDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRFYJCQkweDAwMDgwMDAwCisj
ZGVmaW5lIE1CSU1fREFUQUNMQVNTXzNYUlRUCQkJMHgwMDEwMDAwMAorI2RlZmluZSBNQklNX0RB
VEFDTEFTU18xWEVWRE9fUkVWX0IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1Nf
VU1CCQkJMHgwMDQwMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19DVVNUT00JCQkweDgwMDAw
MDAwCisKKy8qCisgKiBDZWxsIGNsYXNzZXMgbWFzayAoTUJJTV9DRUxMVUxBUl9DTEFTUykKKyAq
LworI2RlZmluZSBNQklNX0NFTExDTEFTU19HU00JCQkweDAwMDAwMDAxCisjZGVmaW5lIE1CSU1f
Q0VMTENMQVNTX0NETUEJCQkweDAwMDAwMDAyCisKKy8qCisgKiBVVUlEcworICovCisjZGVmaW5l
IE1CSU1fVVVJRF9MRU4JCTE2CisKKyNkZWZpbmUgTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1QgewkJ
CQlcCisJCTB4YTIsIDB4ODksIDB4Y2MsIDB4MzMsIDB4YmMsIDB4YmIsIDB4OGIsIDB4NGYsCVwK
KwkJMHhiNiwgMHhiMCwgMHgxMywgMHgzZSwgMHhjMiwgMHhhYSwgMHhlNiwgMHhkZglcCisJfQor
CisjZGVmaW5lIE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUIHsJCQkJXAorCQkweDdlLCAweDVl
LCAweDJhLCAweDdlLCAweDRlLCAweDZmLCAweDcyLCAweDcyLAlcCisJCTB4NzMsIDB4NmIsIDB4
NjUsIDB4NmUsIDB4N2UsIDB4NWUsIDB4MmEsIDB4N2UJXAorCX0KKworI2RlZmluZSBNQklNX1VV
SURfQ09OVEVYVF9WUE4gewkJCQlcCisJCTB4OWIsIDB4OWYsIDB4N2IsIDB4YmUsIDB4ODksIDB4
NTIsIDB4NDQsIDB4YjcsCVwKKwkJMHg4MywgMHhhYywgMHhjYSwgMHg0MSwgMHgzMSwgMHg4ZCwg
MHhmNywgMHhhMAlcCisJfQorCisjZGVmaW5lIE1CSU1fVVVJRF9RTUlfTUJJTSB7CQkJCVwKKwkJ
MHhkMSwgMHhhMywgMHgwYiwgMHhjMiwgMHhmOSwgMHg3YSwgMHg2ZSwgMHg0MywJXAorCQkweGJm
LCAweDY1LCAweGM3LCAweGUyLCAweDRmLCAweGIwLCAweGYwLCAweGQzCVwKKwl9CisKKyNkZWZp
bmUgTUJJTV9DVFJMTVNHX01JTkxFTgkJNjQKKyNkZWZpbmUgTUJJTV9DVFJMTVNHX01BWExFTgkJ
KDQgKiAxMjA0KQorCisjZGVmaW5lIE1CSU1fTUFYU0VHU1pfTUlOVkFMCQkoMiAqIDEwMjQpCisK
Ky8qCisgKiBDb250cm9sIG1lc3NhZ2VzIChob3N0IHRvIGZ1bmN0aW9uKQorICovCisjZGVmaW5l
IE1CSU1fT1BFTl9NU0cJCQkxVQorI2RlZmluZSBNQklNX0NMT1NFX01TRwkJCTJVCisjZGVmaW5l
IE1CSU1fQ09NTUFORF9NU0cJCTNVCisjZGVmaW5lIE1CSU1fSE9TVF9FUlJPUl9NU0cJCTRVCisK
Ky8qCisgKiBDb250cm9sIG1lc3NhZ2VzIChmdW5jdGlvbiB0byBob3N0KQorICovCisjZGVmaW5l
IE1CSU1fT1BFTl9ET05FCQkJMHg4MDAwMDAwMVUKKyNkZWZpbmUgTUJJTV9DTE9TRV9ET05FCQkJ
MHg4MDAwMDAwMlUKKyNkZWZpbmUgTUJJTV9DT01NQU5EX0RPTkUJCTB4ODAwMDAwMDNVCisjZGVm
aW5lIE1CSU1fRlVOQ1RJT05fRVJST1JfTVNHCQkweDgwMDAwMDA0VQorI2RlZmluZSBNQklNX0lO
RElDQVRFX1NUQVRVU19NU0cJMHg4MDAwMDAwN1UKKworLyoKKyAqIEdlbmVyaWMgc3RhdHVzIGNv
ZGVzCisgKi8KKyNkZWZpbmUgTUJJTV9TVEFUVVNfU1VDQ0VTUwkJCTAKKyNkZWZpbmUgTUJJTV9T
VEFUVVNfQlVTWQkJCTEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRkFJTFVSRQkJCTIKKyNkZWZpbmUg
TUJJTV9TVEFUVVNfU0lNX05PVF9JTlNFUlRFRAkJMworI2RlZmluZSBNQklNX1NUQVRVU19CQURf
U0lNCQkJNAorI2RlZmluZSBNQklNX1NUQVRVU19QSU5fUkVRVUlSRUQJCTUKKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfUElOX0RJU0FCTEVECQk2CisjZGVmaW5lIE1CSU1fU1RBVFVTX05PVF9SRUdJU1RF
UkVECQk3CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BST1ZJREVSU19OT1RfRk9VTkQJCTgKKyNkZWZp
bmUgTUJJTV9TVEFUVVNfTk9fREVWSUNFX1NVUFBPUlQJCTkKKyNkZWZpbmUgTUJJTV9TVEFUVVNf
UFJPVklERVJfTk9UX1ZJU0lCTEUJMTAKKyNkZWZpbmUgTUJJTV9TVEFUVVNfREFUQV9DTEFTU19O
T1RfQVZBSUxBQkxFCTExCisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBQ0tFVF9TRVJWSUNFX0RFVEFD
SEVECTEyCisjZGVmaW5lIE1CSU1fU1RBVFVTX01BWF9BQ1RJVkFURURfQ09OVEVYVFMJMTMKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfTk9UX0lOSVRJQUxJWkVECQkxNAorI2RlZmluZSBNQklNX1NUQVRV
U19WT0lDRV9DQUxMX0lOX1BST0dSRVNTCTE1CisjZGVmaW5lIE1CSU1fU1RBVFVTX0NPTlRFWFRf
Tk9UX0FDVElWQVRFRAkxNgorI2RlZmluZSBNQklNX1NUQVRVU19TRVJWSUNFX05PVF9BQ1RJVkFU
RUQJMTcKKyNkZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJRF9BQ0NFU1NfU1RSSU5HCTE4CisjZGVm
aW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfVVNFUl9OQU1FX1BXRAkxOQorI2RlZmluZSBNQklNX1NU
QVRVU19SQURJT19QT1dFUl9PRkYJCTIwCisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfUEFS
QU1FVEVSUwkJMjEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUkVBRF9GQUlMVVJFCQkyMgorI2RlZmlu
ZSBNQklNX1NUQVRVU19XUklURV9GQUlMVVJFCQkyMworI2RlZmluZSBNQklNX1NUQVRVU19OT19Q
SE9ORUJPT0sJCTI1CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBUkFNRVRFUl9UT09fTE9ORwkJMjYK
KyNkZWZpbmUgTUJJTV9TVEFUVVNfU1RLX0JVU1kJCQkyNworI2RlZmluZSBNQklNX1NUQVRVU19P
UEVSQVRJT05fTk9UX0FMTE9XRUQJMjgKKyNkZWZpbmUgTUJJTV9TVEFUVVNfTUVNT1JZX0ZBSUxV
UkUJCTI5CisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfTUVNT1JZX0lOREVYCTMwCisjZGVm
aW5lIE1CSU1fU1RBVFVTX01FTU9SWV9GVUxMCQkJMzEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRklM
VEVSX05PVF9TVVBQT1JURUQJMzIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRFNTX0lOU1RBTkNFX0xJ
TUlUCQkzMworI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX0RFVklDRV9TRVJWSUNFX09QRVJB
VElPTgkzNAorI2RlZmluZSBNQklNX1NUQVRVU19BVVRIX0lOQ09SUkVDVF9BVVROCQkzNQorI2Rl
ZmluZSBNQklNX1NUQVRVU19BVVRIX1NZTkNfRkFJTFVSRQkJMzYKKyNkZWZpbmUgTUJJTV9TVEFU
VVNfQVVUSF9BTUZfTk9UX1NFVAkJMzcKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQ09OVEVYVF9OT1Rf
U1VQUE9SVEVECTM4CisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19VTktOT1dOX1NNU0NfQUREUkVT
UwkxMDAKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU01TX05FVFdPUktfVElNRU9VVAkJMTAxCisjZGVm
aW5lIE1CSU1fU1RBVFVTX1NNU19MQU5HX05PVF9TVVBQT1JURUQJMTAyCisjZGVmaW5lIE1CSU1f
U1RBVFVTX1NNU19FTkNPRElOR19OT1RfU1VQUE9SVEVECTEwMworI2RlZmluZSBNQklNX1NUQVRV
U19TTVNfRk9STUFUX05PVF9TVVBQT1JURUQJMTA0CisKKy8qCisgKiBNZXNzYWdlIGZvcm1hdHMK
KyAqLworc3RydWN0IG1iaW1fbXNnaGRyIHsKKwkvKiBNc2cgaGVhZGVyICovCisJdWludDMyX3QJ
dHlwZTsJCS8qIG1lc3NhZ2UgdHlwZSAqLworCXVpbnQzMl90CWxlbjsJCS8qIG1lc3NhZ2UgbGVu
Z3RoICovCisJdWludDMyX3QJdGlkOwkJLyogdHJhbnNhY3Rpb24gaWQgKi8KK30gX19wYWNrZWQ7
CisKK3N0cnVjdCBtYmltX2ZyYWdoZHIgeworCXVpbnQzMl90CW5mcmFnOwkJLyogdG90YWwgIyBv
ZiBmcmFnbWVudHMgKi8KKwl1aW50MzJfdAljdXJyZnJhZzsJLyogY3VycmVudCBmcmFnbWVudCAq
LworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fZnJhZ21lbnRlZF9tc2dfaGRyIHsKKwlzdHJ1
Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsKK30gX19wYWNr
ZWQ7CisKK3N0cnVjdCBtYmltX2gyZl9vcGVubXNnIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRy
OworCXVpbnQzMl90CQltYXhsZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9oMmZfY2xv
c2Vtc2cgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9oMmZfY21kIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0cnVjdCBtYmltX2Zy
YWdoZHIJZnJhZzsKKwl1aW50OF90CQkJZGV2aWRbTUJJTV9VVUlEX0xFTl07CisJdWludDMyX3QJ
CWNpZDsJCS8qIGNvbW1hbmQgaWQgKi8KKyNkZWZpbmUgTUJJTV9DTURPUF9RUlkJCTAKKyNkZWZp
bmUgTUJJTV9DTURPUF9TRVQJCTEKKwl1aW50MzJfdAkJb3A7CisJdWludDMyX3QJCWluZm9sZW47
CisJdWludDhfdAkJCWluZm9bXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2YyaF9pbmRp
Y2F0ZV9zdGF0dXMgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisJc3RydWN0IG1iaW1fZnJh
Z2hkcglmcmFnOworCXVpbnQ4X3QJCQlkZXZpZFtNQklNX1VVSURfTEVOXTsKKwl1aW50MzJfdAkJ
Y2lkOwkJLyogY29tbWFuZCBpZCAqLworCXVpbnQzMl90CQlpbmZvbGVuOworCXVpbnQ4X3QJCQlp
bmZvW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfaG9zdGVyciB7CisJc3RydWN0
IG1iaW1fbXNnaGRyCWhkcjsKKworI2RlZmluZSBNQklNX0VSUk9SX1RJTUVPVVRfRlJBR01FTlQJ
CTEKKyNkZWZpbmUgTUJJTV9FUlJPUl9GUkFHTUVOVF9PVVRfT0ZfU0VRVUVOQ0UJMgorI2RlZmlu
ZSBNQklNX0VSUk9SX0xFTkdUSF9NSVNNQVRDSAkJMworI2RlZmluZSBNQklNX0VSUk9SX0RVUExJ
Q0FURURfVElECQk0CisjZGVmaW5lIE1CSU1fRVJST1JfTk9UX09QRU5FRAkJCTUKKyNkZWZpbmUg
TUJJTV9FUlJPUl9VTktOT1dOCQkJNgorI2RlZmluZSBNQklNX0VSUk9SX0NBTkNFTAkJCTcKKyNk
ZWZpbmUgTUJJTV9FUlJPUl9NQVhfVFJBTlNGRVIJCQk4CisJdWludDMyX3QJCWVycjsKK30gX19w
YWNrZWQ7CisKK3N0cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lIHsKKwlzdHJ1Y3QgbWJpbV9t
c2doZHIJaGRyOworCWludDMyX3QJCQlzdGF0dXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJp
bV9mMmhfY21kZG9uZSB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9m
cmFnaGRyCWZyYWc7CisJdWludDhfdAkJCWRldmlkW01CSU1fVVVJRF9MRU5dOworCXVpbnQzMl90
CQljaWQ7CQkvKiBjb21tYW5kIGlkICovCisJaW50MzJfdAkJCXN0YXR1czsKKwl1aW50MzJfdAkJ
aW5mb2xlbjsKKwl1aW50OF90CQkJaW5mb1tdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIE1lc3Nh
Z2VzIGFuZCBjb21tYW5kcyBmb3IgTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1QKKyAqLworI2RlZmlu
ZSBNQklNX0NJRF9ERVZJQ0VfQ0FQUwkJCQkxCisjZGVmaW5lIE1CSU1fQ0lEX1NVQlNDUklCRVJf
UkVBRFlfU1RBVFVTCQkyCisjZGVmaW5lIE1CSU1fQ0lEX1JBRElPX1NUQVRFCQkJCTMKKyNkZWZp
bmUgTUJJTV9DSURfUElOCQkJCQk0CisjZGVmaW5lIE1CSU1fQ0lEX1BJTl9MSVNUCQkJCTUKKyNk
ZWZpbmUgTUJJTV9DSURfSE9NRV9QUk9WSURFUgkJCQk2CisjZGVmaW5lIE1CSU1fQ0lEX1BSRUZF
UlJFRF9QUk9WSURFUlMJCQk3CisjZGVmaW5lIE1CSU1fQ0lEX1ZJU0lCTEVfUFJPVklERVJTCQkJ
OAorI2RlZmluZSBNQklNX0NJRF9SRUdJU1RFUl9TVEFURQkJCQk5CisjZGVmaW5lIE1CSU1fQ0lE
X1BBQ0tFVF9TRVJWSUNFCQkJCTEwCisjZGVmaW5lIE1CSU1fQ0lEX1NJR05BTF9TVEFURQkJCQkx
MQorI2RlZmluZSBNQklNX0NJRF9DT05ORUNUCQkJCTEyCisjZGVmaW5lIE1CSU1fQ0lEX1BST1ZJ
U0lPTkVEX0NPTlRFWFRTCQkJMTMKKyNkZWZpbmUgTUJJTV9DSURfU0VSVklDRV9BQ1RJVkFUSU9O
CQkJMTQKKyNkZWZpbmUgTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTgkJCTE1CisjZGVmaW5lIE1C
SU1fQ0lEX0RFVklDRV9TRVJWSUNFUwkJCTE2CisjZGVmaW5lIE1CSU1fQ0lEX0RFVklDRV9TRVJW
SUNFX1NVQlNDUklCRV9MSVNUCQkxOQorI2RlZmluZSBNQklNX0NJRF9QQUNLRVRfU1RBVElTVElD
UwkJCTIwCisjZGVmaW5lIE1CSU1fQ0lEX05FVFdPUktfSURMRV9ISU5UCQkJMjEKKyNkZWZpbmUg
TUJJTV9DSURfRU1FUkdFTkNZX01PREUJCQkJMjIKKyNkZWZpbmUgTUJJTV9DSURfSVBfUEFDS0VU
X0ZJTFRFUlMJCQkyMworI2RlZmluZSBNQklNX0NJRF9NVUxUSUNBUlJJRVJfUFJPVklERVJTCQkJ
MjQKKworc3RydWN0IG1iaW1fY2lkX3N1YnNjcmliZXJfcmVhZHlfaW5mbyB7CisjZGVmaW5lIE1C
SU1fU0lNU1RBVEVfTk9USU5JVElBTElaRUQJCTAKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9JTklU
SUFMSVpFRAkJMQorI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVElOU0VSVEVECQkyCisjZGVmaW5l
IE1CSU1fU0lNU1RBVEVfQkFEU0lNCQkJMworI2RlZmluZSBNQklNX1NJTVNUQVRFX0ZBSUxVUkUJ
CQk0CisjZGVmaW5lIE1CSU1fU0lNU1RBVEVfTk9UQUNUSVZBVEVECQk1CisjZGVmaW5lIE1CSU1f
U0lNU1RBVEVfTE9DS0VECQkJNgorCXVpbnQzMl90CXJlYWR5OworCisJdWludDMyX3QJc2lkX29m
ZnM7CisJdWludDMyX3QJc2lkX3NpemU7CisKKwl1aW50MzJfdAlpY2Nfb2ZmczsKKwl1aW50MzJf
dAlpY2Nfc2l6ZTsKKworI2RlZmluZSBNQklNX1NJTVVOSVFFSURfTk9ORQkJCTAKKyNkZWZpbmUg
TUJJTV9TSU1VTklRRUlEX1BST1RFQ1QJCQkxCisJdWludDMyX3QJaW5mbzsKKworCXVpbnQzMl90
CW5vX3BuOworCXN0cnVjdCB7CisJCXVpbnQzMl90CW9mZnM7CisJCXVpbnQzMl90CXNpemU7CisJ
fQorCQkJcG5bXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZSB7
CisjZGVmaW5lIE1CSU1fUkFESU9fU1RBVEVfT0ZGCQkJMAorI2RlZmluZSBNQklNX1JBRElPX1NU
QVRFX09OCQkJMQorCXVpbnQzMl90CXN0YXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1f
Y2lkX3JhZGlvX3N0YXRlX2luZm8geworCXVpbnQzMl90CWh3X3N0YXRlOworCXVpbnQzMl90CXN3
X3N0YXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BpbiB7CisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfTk9ORQkJCTAKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DVVNUT00JCQkxCisj
ZGVmaW5lIE1CSU1fUElOX1RZUEVfUElOMQkJCTIKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9QSU4y
CQkJMworI2RlZmluZSBNQklNX1BJTl9UWVBFX0RFVl9TSU1fUElOCQk0CisjZGVmaW5lIE1CSU1f
UElOX1RZUEVfREVWX0ZJUlNUX1NJTV9QSU4JCTUKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ORVRX
T1JLX1BJTgkJNgorI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BJTgk3Cisj
ZGVmaW5lIE1CSU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4JOAorI2RlZmluZSBNQklN
X1BJTl9UWVBFX0NPUlBPUkFURV9QSU4JCTkKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9TVUJTSURZ
X0xPQ0sJCTEwCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfUFVLMQkJCTExCisjZGVmaW5lIE1CSU1f
UElOX1RZUEVfUFVLMgkJCTEyCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfREVWX0ZJUlNUX1NJTV9Q
VUsJCTEzCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19QVUsJCTE0CisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfTkVUV09SS19TVUJTRVRfUFVLCTE1CisjZGVmaW5lIE1CSU1fUElOX1RZUEVf
U0VSVklDRV9QUk9WSURFUl9QVUsJMTYKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVf
UFVLCQkxNworCXVpbnQzMl90CXR5cGU7CisKKyNkZWZpbmUgTUJJTV9QSU5fT1BfRU5URVIJCQkw
CisjZGVmaW5lIE1CSU1fUElOX09QX0VOQUJMRQkJCTEKKyNkZWZpbmUgTUJJTV9QSU5fT1BfRElT
QUJMRQkJCTIKKyNkZWZpbmUgTUJJTV9QSU5fT1BfQ0hBTkdFCQkJMworCXVpbnQzMl90CW9wOwor
CXVpbnQzMl90CXBpbl9vZmZzOworCXVpbnQzMl90CXBpbl9zaXplOworCXVpbnQzMl90CW5ld3Bp
bl9vZmZzOworCXVpbnQzMl90CW5ld3Bpbl9zaXplOworI2RlZmluZSBNQklNX1BJTl9NQVhMRU4J
MzIKKwl1aW50OF90CQlkYXRhWzIgKiBNQklNX1BJTl9NQVhMRU5dOworfSBfX3BhY2tlZDsKKwor
c3RydWN0IG1iaW1fY2lkX3Bpbl9pbmZvIHsKKwl1aW50MzJfdAl0eXBlOworCisjZGVmaW5lIE1C
SU1fUElOX1NUQVRFX1VOTE9DS0VECQkJMAorI2RlZmluZSBNQklNX1BJTl9TVEFURV9MT0NLRUQJ
CQkxCisJdWludDMyX3QJc3RhdGU7CisJdWludDMyX3QJcmVtYWluaW5nX2F0dGVtcHRzOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3Bpbl9saXN0X2luZm8geworCXN0cnVjdCBtYmlt
X3Bpbl9kZXNjIHsKKworI2RlZmluZSBNQklNX1BJTk1PREVfTk9UU1VQUE9SVEVECQkwCisjZGVm
aW5lIE1CSU1fUElOTU9ERV9FTkFCTEVECQkJMQorI2RlZmluZSBNQklNX1BJTk1PREVfRElTQUJM
RUQJCQkyCisJCXVpbnQzMl90CW1vZGU7CisKKyNkZWZpbmUgTUJJTV9QSU5GT1JNQVRfVU5LTk9X
TgkJCTAKKyNkZWZpbmUgTUJJTV9QSU5GT1JNQVRfTlVNRVJJQwkJCTEKKyNkZWZpbmUgTUJJTV9Q
SU5GT1JNQVRfQUxQSEFOVU1FUklDCQkyCisJCXVpbnQzMl90CWZvcm1hdDsKKworCQl1aW50MzJf
dAltaW5sZW47CisJCXVpbnQzMl90CW1heGxlbjsKKwl9CisJCXBpbjEsCisJCXBpbjIsCisJCWRl
dl9zaW1fcGluLAorCQlmaXJzdF9kZXZfc2ltX3BpbiwKKwkJbmV0X3BpbiwKKwkJbmV0X3N1Yl9w
aW4sCisJCXN2cF9waW4sCisJCWNvcnBfcGluLAorCQlzdWJzaWR5X2xvY2ssCisJCWN1c3RvbTsK
K30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9kZXZpY2VfY2FwcyB7CisjZGVmaW5lIE1C
SU1fREVWVFlQRV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX0RFVlRZUEVfRU1CRURERUQJCQkx
CisjZGVmaW5lIE1CSU1fREVWVFlQRV9SRU1PVkFCTEUJCQkyCisjZGVmaW5lIE1CSU1fREVWVFlQ
RV9SRU1PVEUJCQkzCisJdWludDMyX3QJZGV2dHlwZTsKKworCXVpbnQzMl90CWNlbGxjbGFzczsJ
LyogdmFsdWVzOiBNQklNX0NFTExVTEFSX0NMQVNTICovCisJdWludDMyX3QJdm9pY2VjbGFzczsK
Kwl1aW50MzJfdAlzaW1jbGFzczsKKwl1aW50MzJfdAlkYXRhY2xhc3M7CS8qIHZhbHVlczogTUJJ
TV9EQVRBX0NMQVNTICovCisJdWludDMyX3QJc21zY2FwczsKKwl1aW50MzJfdAljbnRybGNhcHM7
CisJdWludDMyX3QJbWF4X3Nlc3Npb25zOworCisJdWludDMyX3QJY3VzdGRhdGFjbGFzc19vZmZz
OworCXVpbnQzMl90CWN1c3RkYXRhY2xhc3Nfc2l6ZTsKKworCXVpbnQzMl90CWRldmlkX29mZnM7
CisJdWludDMyX3QJZGV2aWRfc2l6ZTsKKworCXVpbnQzMl90CWZ3aW5mb19vZmZzOworCXVpbnQz
Ml90CWZ3aW5mb19zaXplOworCisJdWludDMyX3QJaHdpbmZvX29mZnM7CisJdWludDMyX3QJaHdp
bmZvX3NpemU7CisKKwl1aW50MzJfdAlkYXRhW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJp
bV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlIHsKKwl1aW50MzJfdAlwcm92aWRfb2ZmczsKKwl1aW50
MzJfdAlwcm92aWRfc2l6ZTsKKworI2RlZmluZSBNQklNX1JFR0FDVElPTl9BVVRPTUFUSUMJCTAK
KyNkZWZpbmUgTUJJTV9SRUdBQ1RJT05fTUFOVUFMCQkJMQorCXVpbnQzMl90CXJlZ2FjdGlvbjsK
Kwl1aW50MzJfdAlkYXRhX2NsYXNzOworCisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZV9pbmZvIHsKKwl1aW50MzJfdAlu
d2Vycm9yOworCisJdWludDMyX3QJcmVnc3RhdGU7CS8qIHZhbHVlczogTUJJTV9SRUdJU1RFUl9T
VEFURSAqLworCisjZGVmaW5lIE1CSU1fUkVHTU9ERV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklN
X1JFR01PREVfQVVUT01BVElDCQkJMQorI2RlZmluZSBNQklNX1JFR01PREVfTUFOVUFMCQkJMgor
CXVpbnQzMl90CXJlZ21vZGU7CisKKwl1aW50MzJfdAlhdmFpbGNsYXNzZXM7CS8qIHZhbHVlczog
TUJJTV9EQVRBX0NMQVNTICovCisJdWludDMyX3QJY3VyY2VsbGNsYXNzOwkvKiB2YWx1ZXM6IE1C
SU1fQ0VMTFVMQVJfQ0xBU1MgKi8KKworCXVpbnQzMl90CXByb3ZpZF9vZmZzOworCXVpbnQzMl90
CXByb3ZpZF9zaXplOworCisJdWludDMyX3QJcHJvdm5hbWVfb2ZmczsKKwl1aW50MzJfdAlwcm92
bmFtZV9zaXplOworCisJdWludDMyX3QJcm9hbWluZ3R4dF9vZmZzOworCXVpbnQzMl90CXJvYW1p
bmd0eHRfc2l6ZTsKKworI2RlZmluZSBNQklNX1JFR0ZMQUdTX05PTkUJCQkwCisjZGVmaW5lIE1C
SU1fUkVHRkxBR1NfTUFOVUFMX05PVF9BVkFJTEFCTEUJMQorI2RlZmluZSBNQklNX1JFR0ZMQUdT
X1BBQ0tFVFNFUlZJQ0VfQVVUT0FUVEFDSAkyCisJdWludDMyX3QJcmVnZmxhZzsKKworCXVpbnQz
Ml90CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2Vydmlj
ZSB7CisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9BQ1RJT05fQVRUQUNICQkwCisjZGVmaW5lIE1C
SU1fUEtUU0VSVklDRV9BQ1RJT05fREVUQUNICQkxCisJdWludDMyX3QJYWN0aW9uOworfSBfX3Bh
Y2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BhY2tldF9zZXJ2aWNlX2luZm8geworCXVpbnQzMl90
CW53ZXJyb3I7CisKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX1VOS05PV04JCTAKKyNk
ZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSElORwkJMQorI2RlZmluZSBNQklNX1BL
VFNFUlZJQ0VfU1RBVEVfQVRUQUNIRUQJCTIKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRF
X0RFVEFDSElORwkJMworI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQJCTQK
Kwl1aW50MzJfdAlzdGF0ZTsKKworCXVpbnQzMl90CWhpZ2hlc3RfZGF0YWNsYXNzOworCXVpbnQ2
NF90CXVwbGlua19zcGVlZDsKKwl1aW50NjRfdAlkb3dubGlua19zcGVlZDsKK30gX19wYWNrZWQ7
CisKK3N0cnVjdCBtYmltX2NpZF9zaWduYWxfc3RhdGUgeworCXVpbnQzMl90CXJzc2k7CisJdWlu
dDMyX3QJZXJyX3JhdGU7CisJdWludDMyX3QJc3NfaW50dmw7CisJdWludDMyX3QJcnNzaV90aHI7
CisJdWludDMyX3QJZXJyX3RocjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9jb25u
ZWN0IHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9DT05ORUNUX0RFQUNU
SVZBVEUJCTAKKyNkZWZpbmUgTUJJTV9DT05ORUNUX0FDVElWQVRFCQkxCisJdWludDMyX3QJY29t
bWFuZDsKKworI2RlZmluZSBNQklNX0FDQ0VTU19NQVhMRU4JCTIwMAorCXVpbnQzMl90CWFjY2Vz
c19vZmZzOworCXVpbnQzMl90CWFjY2Vzc19zaXplOworCisjZGVmaW5lIE1CSU1fVVNFUl9NQVhM
RU4JCTUxMAorCXVpbnQzMl90CXVzZXJfb2ZmczsKKwl1aW50MzJfdAl1c2VyX3NpemU7CisKKyNk
ZWZpbmUgTUJJTV9QQVNTV0RfTUFYTEVOCQk1MTAKKwl1aW50MzJfdAlwYXNzd2Rfb2ZmczsKKwl1
aW50MzJfdAlwYXNzd2Rfc2l6ZTsKKworI2RlZmluZSBNQklNX0NPTVBSRVNTSU9OX05PTkUJCTAK
KyNkZWZpbmUgTUJJTV9DT01QUkVTU0lPTl9FTkFCTEUJCTEKKwl1aW50MzJfdAljb21wcmVzc2lv
bjsKKworI2RlZmluZSBNQklNX0FVVEhQUk9UX05PTkUJCTAKKyNkZWZpbmUgTUJJTV9BVVRIUFJP
VF9QQVAJCTEKKyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9DSEFQCQkyCisjZGVmaW5lIE1CSU1fQVVU
SFBST1RfTVNDSEFQCQkzCisJdWludDMyX3QJYXV0aHByb3Q7CisKKyNkZWZpbmUgTUJJTV9DT05U
RVhUX0lQVFlQRV9ERUZBVUxUCTAKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9JUFY0CTEK
KyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9JUFY2CTIKKyNkZWZpbmUgTUJJTV9DT05URVhU
X0lQVFlQRV9JUFY0VjYJMworI2RlZmluZSBNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjRBTkRWNgk0
CisJdWludDMyX3QJaXB0eXBlOworCisJdWludDhfdAkJY29udGV4dFtNQklNX1VVSURfTEVOXTsK
KworCXVpbnQ4X3QJCWRhdGFbTUJJTV9BQ0NFU1NfTUFYTEVOICsgTUJJTV9VU0VSX01BWExFTiAr
CisJCQkgICAgIE1CSU1fUEFTU1dEX01BWExFTl07CisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBt
YmltX2NpZF9jb25uZWN0X2luZm8geworCXVpbnQzMl90CXNlc3Npb25pZDsKKworI2RlZmluZSBN
QklNX0FDVElWQVRJT05fU1RBVEVfVU5LTk9XTgkJMAorI2RlZmluZSBNQklNX0FDVElWQVRJT05f
U1RBVEVfQUNUSVZBVEVECQkxCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9BQ1RJVkFU
SU5HCTIKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVEVECTMKKyNkZWZp
bmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVElORwk0CisJdWludDMyX3QJYWN0aXZh
dGlvbjsKKworCXVpbnQzMl90CXZvaWNlOworCXVpbnQzMl90CWlwdHlwZTsKKwl1aW50OF90CQlj
b250ZXh0W01CSU1fVVVJRF9MRU5dOworCXVpbnQzMl90CW53ZXJyb3I7Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbWJpbV9jaWRfaXB2NF9lbGVtZW50IHsKKwl1aW50MzJfdAlwcmVmaXhsZW47CisJ
dWludDMyX3QJYWRkcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9pcHY2X2VsZW1l
bnQgeworCXVpbnQzMl90CXByZWZpeGxlbjsKKwl1aW50OF90CQlhZGRyWzE2XTsKK30gX19wYWNr
ZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9pcF9jb25maWd1cmF0aW9uX2luZm8geworCXVpbnQzMl90
CXNlc3Npb25pZDsKKworI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfQUREUklORk8JMHgwMDAxCisj
ZGVmaW5lIE1CSU1fSVBDT05GX0hBU19HV0lORk8JCTB4MDAwMgorI2RlZmluZSBNQklNX0lQQ09O
Rl9IQVNfRE5TSU5GTwkJMHgwMDA0CisjZGVmaW5lIE1CSU1fSVBDT05GX0hBU19NVFVJTkZPCQkw
eDAwMDgKKwl1aW50MzJfdAlpcHY0X2F2YWlsYWJsZTsKKwl1aW50MzJfdAlpcHY2X2F2YWlsYWJs
ZTsKKworCXVpbnQzMl90CWlwdjRfbmFkZHI7CisJdWludDMyX3QJaXB2NF9hZGRyb2ZmczsKKwl1
aW50MzJfdAlpcHY2X25hZGRyOworCXVpbnQzMl90CWlwdjZfYWRkcm9mZnM7CisKKwl1aW50MzJf
dAlpcHY0X2d3b2ZmczsKKwl1aW50MzJfdAlpcHY2X2d3b2ZmczsKKworCXVpbnQzMl90CWlwdjRf
bmRuc3NydjsKKwl1aW50MzJfdAlpcHY0X2Ruc3Nydm9mZnM7CisJdWludDMyX3QJaXB2Nl9uZG5z
c3J2OworCXVpbnQzMl90CWlwdjZfZG5zc3J2b2ZmczsKKworCXVpbnQzMl90CWlwdjRfbXR1Owor
CXVpbnQzMl90CWlwdjZfbXR1OworCisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsKKwor
c3RydWN0IG1iaW1fY2lkX3BhY2tldF9zdGF0aXN0aWNzX2luZm8geworCXVpbnQzMl90CWluX2Rp
c2NhcmRzOworCXVpbnQzMl90CWluX2Vycm9yczsKKwl1aW50NjRfdAlpbl9vY3RldHM7CisJdWlu
dDY0X3QJaW5fcGFja2V0czsKKwl1aW50NjRfdAlvdXRfb2N0ZXRzOworCXVpbnQ2NF90CW91dF9w
YWNrZXRzOworCXVpbnQzMl90CW91dF9lcnJvcnM7CisJdWludDMyX3QJb3V0X2Rpc2NhcmRzOwor
fSBfX3BhY2tlZDsKKworCisjaWZkZWYgX0tFUk5FTAorCitzdHJ1Y3QgbWJpbV9kZXNjcmlwdG9y
IHsKKwl1Qnl0ZQliTGVuZ3RoOworCXVCeXRlCWJEZXNjcmlwdG9yVHlwZTsKKwl1Qnl0ZQliRGVz
Y3JpcHRvclN1YnR5cGU7CisjZGVmaW5lIE1CSU1fVkVSX01BSk9SKHYpCSgoKHYpID4+IDgpICYg
MHgwZikKKyNkZWZpbmUgTUJJTV9WRVJfTUlOT1IodikJKCh2KSAmIDB4MGYpCisJdVdvcmQJYmNk
TUJJTVZlcnNpb247CisJdVdvcmQJd01heENvbnRyb2xNZXNzYWdlOworCXVCeXRlCWJOdW1iZXJG
aWx0ZXJzOworCXVCeXRlCWJNYXhGaWx0ZXJTaXplOworCXVXb3JkCXdNYXhTZWdtZW50U2l6ZTsK
Kwl1Qnl0ZQlibU5ldHdvcmtDYXBhYmlsaXRpZXM7Cit9IF9fcGFja2VkOworCisvKgorICogTkNN
IFBhcmFtZXRlcnMKKyAqLworI2RlZmluZSBOQ01fR0VUX05UQl9QQVJBTUVURVJTCTB4ODAKKwor
c3RydWN0IG5jbV9udGJfcGFyYW1ldGVycyB7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAlibU50
YkZvcm1hdHNTdXBwb3J0ZWQ7CisjZGVmaW5lIE5DTV9GT1JNQVRfTlRCMTYJMHgwMDAxCisjZGVm
aW5lIE5DTV9GT1JNQVRfTlRCMzIJMHgwMDAyCisJdURXb3JkCWR3TnRiSW5NYXhTaXplOworCXVX
b3JkCXdOZHBJbkRpdmlzb3I7CisJdVdvcmQJd05kcEluUGF5bG9hZFJlbWFpbmRlcjsKKwl1V29y
ZAl3TmRwSW5BbGlnbm1lbnQ7CisJdVdvcmQJd1Jlc2VydmVkMTsKKwl1RFdvcmQJZHdOdGJPdXRN
YXhTaXplOworCXVXb3JkCXdOZHBPdXREaXZpc29yOworCXVXb3JkCXdOZHBPdXRQYXlsb2FkUmVt
YWluZGVyOworCXVXb3JkCXdOZHBPdXRBbGlnbm1lbnQ7CisJdVdvcmQJd050Yk91dE1heERhdGFn
cmFtczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBOQ00gRW5jb2RpbmcKKyAqLworI2RlZmluZSBN
QklNX0hEUjE2X0xFTglcCisJKHNpemVvZihzdHJ1Y3QgbmNtX2hlYWRlcjE2KSArIHNpemVvZihz
dHJ1Y3QgbmNtX3BvaW50ZXIxNikpCisjZGVmaW5lIE1CSU1fSERSMzJfTEVOCVwKKwkoc2l6ZW9m
KHN0cnVjdCBuY21faGVhZGVyMzIpICsgc2l6ZW9mKHN0cnVjdCBuY21fcG9pbnRlcjMyKSkKKwor
c3RydWN0IG5jbV9oZWFkZXIxNiB7CisjZGVmaW5lIE5DTV9IRFIxNl9TSUcJCTB4NDg0ZDQzNGUK
Kwl1RFdvcmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0hlYWRlckxlbmd0aDsKKwl1V29yZAl3U2Vx
dWVuY2U7CisJdVdvcmQJd0Jsb2NrTGVuZ3RoOworCXVXb3JkCXdOZHBJbmRleDsKK30gX19wYWNr
ZWQ7CisKK3N0cnVjdCBuY21faGVhZGVyMzIgeworI2RlZmluZSBOQ01fSERSMzJfU0lHCQkweDY4
NmQ2MzZlCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdIZWFkZXJMZW5ndGg7CisJdVdv
cmQJd1NlcXVlbmNlOworCXVEV29yZAlkd0Jsb2NrTGVuZ3RoOworCXVEV29yZAlkd05kcEluZGV4
OworfSBfX3BhY2tlZDsKKworCisjZGVmaW5lIE1CSU1fTkNNX05USF9TSURTSElGVAkyNAorI2Rl
ZmluZSBNQklNX05DTV9OVEhfR0VUU0lEKHMpCSgoKHMpID4gTUJJTV9OQ01fTlRIX1NJRFNISUZU
KSAmIDB4ZmYpCisKK3N0cnVjdCBuY21fcG9pbnRlcjE2X2RncmFtIHsKKwl1V29yZAl3RGF0YWdy
YW1JbmRleDsKKwl1V29yZAl3RGF0YWdyYW1MZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNt
X3BvaW50ZXIxNiB7CisjZGVmaW5lIE1CSU1fTkNNX05USDE2X0lQUwkgMHgwMDUzNTA0OQorI2Rl
ZmluZSBNQklNX05DTV9OVEgxNl9JU0lTRyhzKSAoKChzKSAmIDB4MDBmZmZmZmYpID09IE1CSU1f
TkNNX05USDE2X0lQUykKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMTZfU0lHKHMpCVwKKwkJKCgoKHMp
ICYgMHhmZikgPDwgTUJJTV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNNX05USDE2X0lQUykK
Kwl1RFdvcmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAl3TmV4dE5kcElu
ZGV4OworCisJLyogTWluaW11bSBpcyB0d28gZGF0YWdyYW1zLCBidXQgY2FuIGJlIG1vcmUgKi8K
KwlzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSBkZ3JhbVsyXTsKK30gX19wYWNrZWQ7CisKK3N0
cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtIHsKKwl1RFdvcmQJZHdEYXRhZ3JhbUluZGV4OworCXVE
V29yZAlkd0RhdGFncmFtTGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jbV9wb2ludGVyMzIg
eworI2RlZmluZSBNQklNX05DTV9OVEgzMl9JUFMJMHgwMDczNzA2OQorI2RlZmluZSBNQklNX05D
TV9OVEgzMl9JU0lTRyhzKQlcCisJCSgoKHMpICYgMHgwMGZmZmZmZikgPT0gTUJJTV9OQ01fTlRI
MzJfSVBTKQorI2RlZmluZSBNQklNX05DTV9OVEgzMl9TSUcocykJCVwKKwkJKCgoKHMpICYgMHhm
ZikgPDwgTUJJTV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNNX05USDMyX0lQUykKKwl1RFdv
cmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAl3UmVzZXJ2ZWQ2OworCXVE
V29yZAlkd05leHROZHBJbmRleDsKKwl1RFdvcmQJZHdSZXNlcnZlZDEyOworCisJLyogTWluaW11
bSBpcyB0d28gZGF0YWdyYW1zLCBidXQgY2FuIGJlIG1vcmUgKi8KKwlzdHJ1Y3QgbmNtX3BvaW50
ZXIzMl9kZ3JhbSBkZ3JhbVsyXTsKK30gX19wYWNrZWQ7CisKKyNlbmRpZiAvKiBfS0VSTkVMICov
CisKKyNlbmRpZiAvKiBfTUJJTV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL21vZHVsZXMvdXNiL01h
a2VmaWxlIGIvc3lzL21vZHVsZXMvdXNiL01ha2VmaWxlCmluZGV4IDJkMTY2YTk1ZGMwMy4uYWM0
ODM0NThlYTJhIDEwMDY0NAotLS0gYS9zeXMvbW9kdWxlcy91c2IvTWFrZWZpbGUKKysrIGIvc3lz
L21vZHVsZXMvdXNiL01ha2VmaWxlCkBAIC00OSw3ICs0OSw3IEBAIFNVQkRJUiArPSAke19ydW19
ICR7X3J1bn0gJHtfcnVuZnd9ICR7X3VhdGh9IHVwZ3QgdXNpZSB1cmFsICR7X3p5ZH0gJHtfdXJ0
d30KIFNVQkRJUiArPSBhdHAgY2Z1bWFzcyB1aGlkIHVoaWRfc25lcyB1a2JkIHVtcyB1ZGJwIHVl
cCB3bXQgd3NwIHVnb2xkIHVsZWQgXAogCSAgdXNiaGlkCiBTVUJESVIgKz0gdWNvbSB1M2cgdWFy
ayB1YnNhIHVic2VyIHVjaGNvbSB1Y3ljb20gdWZvbWEgdWZ0ZGkgdWdlbnNhIHVpcGFxIHVscHQg
XAotCSAgdW1jdCB1bWNzIHVtb2RlbSB1bW9zY29tIHVwbGNvbSB1c2xjb20gdXZpc29yIHV2c2Nv
bQorCSAgdW1iIHVtY3QgdW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxjb20gdXNsY29tIHV2aXNvciB1
dnNjb20KIFNVQkRJUiArPSBpMmN0aW55dXNiCiBTVUJESVIgKz0gY3AyMTEyCiBTVUJESVIgKz0g
dWRsCmRpZmYgLS1naXQgYS9zeXMvbW9kdWxlcy91c2IvdW1iL01ha2VmaWxlIGIvc3lzL21vZHVs
ZXMvdXNiL3VtYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmMxNzU5MmQ5NGRmYgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9tb2R1bGVzL3VzYi91bWIv
TWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIworIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSGFu
cyBQZXR0ZXIgU2VsYXNreS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisj
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
IyBTVUNIIERBTUFHRS4KKyMKKworUz0gICAgICR7U1JDVE9QfS9zeXMKKworLlBBVEg6ICRTL2Rl
di91c2IvbmV0CisKK0tNT0Q9CXVtYgorU1JDUz0Jb3B0X2J1cy5oIG9wdF91c2IuaCBkZXZpY2Vf
aWYuaCBidXNfaWYuaCB1c2JfaWYuaCB1c2JkZXZzLmggXAorCWlmX3VtYi5jCisKKy5pbmNsdWRl
IDxic2Qua21vZC5taz4KZGlmZiAtLWdpdCBhL3N5cy9uZXQvaWZfdHlwZXMuaCBiL3N5cy9uZXQv
aWZfdHlwZXMuaAppbmRleCBiMDY5MmFmNjkzMDguLjRjYjI5ZmQ1MWViZCAxMDA2NDQKLS0tIGEv
c3lzL25ldC9pZl90eXBlcy5oCisrKyBiL3N5cy9uZXQvaWZfdHlwZXMuaApAQCAtMjU0LDYgKzI1
NCw3IEBAIHR5cGVkZWYgZW51bSB7CiAJSUZUX1BGTE9HCT0gMHhmNiwJCS8qIFBGIHBhY2tldCBm
aWx0ZXIgbG9nZ2luZyAqLwogCUlGVF9QRlNZTkMJPSAweGY3LAkJLyogUEYgcGFja2V0IGZpbHRl
ciBzeW5jaHJvbml6YXRpb24gKi8KIAlJRlRfV0lSRUdVQVJECT0gMHhmOCwJCS8qIFdpcmVHdWFy
ZCB0dW5uZWwgKi8KKwlJRlRfTUJJTQk9IDB4ZjkJCS8qIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJm
YWNlIE1vZGVsICovCiB9IGlmVHlwZTsKIAogLyoKZGlmZiAtLWdpdCBhL3N5cy9zeXMvc29ja2lv
LmggYi9zeXMvc3lzL3NvY2tpby5oCmluZGV4IDgyNGI3N2U1N2ExNy4uY2Y2MTIwNzljMmYzIDEw
MDY0NAotLS0gYS9zeXMvc3lzL3NvY2tpby5oCisrKyBiL3N5cy9zeXMvc29ja2lvLmgKQEAgLTE0
Nyw0ICsxNDcsOCBAQAogI2RlZmluZQlTSU9DU0lGQ0FQTlYJX0lPVygnaScsIDE1NSwgc3RydWN0
IGlmcmVxKQkvKiBzZXQgSUYgZmVhdHVyZXMgKi8KICNkZWZpbmUJU0lPQ0dJRkNBUE5WCV9JT1dS
KCdpJywgMTU2LCBzdHJ1Y3QgaWZyZXEpCS8qIGdldCBJRiBmZWF0dXJlcyAqLwogCisjZGVmaW5l
CVNJT0NHVU1CSU5GTwlfSU9XUignaScsIDE1Nywgc3RydWN0IGlmcmVxKQkvKiBnZXQgTUJJTSBp
bmZvICovCisjZGVmaW5lCVNJT0NTVU1CUEFSQU0JIF9JT1coJ2knLCAxNTgsIHN0cnVjdCBpZnJl
cSkJLyogc2V0IE1CSU0gcGFyYW0gKi8KKyNkZWZpbmUJU0lPQ0dVTUJQQVJBTQlfSU9XUignaScs
IDE1OSwgc3RydWN0IGlmcmVxKQkvKiBnZXQgTUJJTSBwYXJhbSAqLworCiAjZW5kaWYgLyogIV9T
WVNfU09DS0lPX0hfICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255765</attachid>
            <date>2024-12-10 23:55:32 +0000</date>
            <delta_ts>2024-12-12 17:48:31 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>151262</size>
            <attacher name="Pierre Pronchery">khorben</attacher>
            
              <data encoding="base64">RnJvbSAxNGM4YTE2NGRiNDcxMzYxZDk0ZjIxYzk1ZmM4NzJkZjE3MDgzZDlmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+
CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMjA6MjA6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJ
bnRyb2R1Y2UgdGhlIFVTQiB1bWIoNCkgbmV0d29yayBkcml2ZXIKClRoaXMgaW5jbHVkZXM6Cgoq
IFRoZSB1bWIoNCkga2VybmVsIGRyaXZlcgoqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wK
LS0tCiBzYmluL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSArCiBzYmluL3VtYmN0bC9N
YWtlZmlsZSAgICAgICAgIHwgICAgOCArCiBzYmluL3VtYmN0bC91bWJjdGwuOCAgICAgICAgIHwg
IDE3MiArKwogc2Jpbi91bWJjdGwvdW1iY3RsLmMgICAgICAgICB8ICA3NjcgKysrKysrKysrCiBz
aGFyZS9tYW4vbWFuNC9NYWtlZmlsZSAgICAgIHwgICAgMSArCiBzaGFyZS9tYW4vbWFuNC91bWIu
NCAgICAgICAgIHwgICA5MCArKwogc3lzL2NvbmYvZmlsZXMgICAgICAgICAgICAgICB8ICAgIDEg
Kwogc3lzL2Rldi91c2IvbmV0L2lmX3VtYi5jICAgICB8IDI5MTEgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogc3lzL2Rldi91c2IvbmV0L2lmX3VtYnJlZy5oICB8ICA0NDEgKysr
KysKIHN5cy9kZXYvdXNiL25ldC9tYmltLmggICAgICAgfCAgNzI0ICsrKysrKysrKwogc3lzL21v
ZHVsZXMvdXNiL01ha2VmaWxlICAgICB8ICAgIDIgKy0KIHN5cy9tb2R1bGVzL3VzYi91bWIvTWFr
ZWZpbGUgfCAgIDM1ICsKIHN5cy9uZXQvaWZfdHlwZXMuaCAgICAgICAgICAgfCAgICAxICsKIHN5
cy9zeXMvc29ja2lvLmggICAgICAgICAgICAgfCAgICA0ICsKIDE0IGZpbGVzIGNoYW5nZWQsIDUx
NTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNiaW4v
dW1iY3RsL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2Jpbi91bWJjdGwvdW1iY3RsLjgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzYmluL3VtYmN0bC91bWJjdGwuYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IHNoYXJlL21hbi9tYW40L3VtYi40CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2Iv
bmV0L2lmX3VtYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2IvbmV0L2lmX3VtYnJl
Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzL2Rldi91c2IvbmV0L21iaW0uaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUKCmRpZmYgLS1naXQgYS9zYmlu
L01ha2VmaWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCA3OTAxMTJiMDVmNmYuLjVlNWE4OTQzYzY3
YSAxMDA2NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2VmaWxlCkBAIC02Myw2
ICs2Myw3IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lzY3RsIFwKIAl0dW5l
ZnMgXAorCXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9ICJubyIgfHwgJHtN
S19JTkVUNn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFrZWZpbGUgYi9zYmlu
L3VtYmN0bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjM1YWZiMWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3RsL01ha2VmaWxlCkBA
IC0wLDAgKzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91c2IvbmV0CisKK1BS
T0c9CXVtYmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisKKy5pbmNsdWRlIDxi
c2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44IGIvc2Jpbi91bWJj
dGwvdW1iY3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yOGQ4
MjBkMjY0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJjdGwuOApAQCAtMCww
ICsxLDE3MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTggYnkg
UGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0Ogor
LlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworLlwiIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisuXCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5cIiBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
Ky5cIiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisuXCIgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HCisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisu
XCIKKy5cIiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1OjM1OjIwIHNldmFu
IEV4cCAkCisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0ZTogW1RodSBBdWcg
MzEgMTA6NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisuRHQgVU1CQ1RMIDgK
Ky5PcworLlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNldCBNQklNIGNlbGx1
bGFyIG1vZGVtIGludGVyZmFjZSBwYXJhbWV0ZXJzICg0Ry9MVEUpCisuU2ggU1lOT1BTSVMKKy5O
bSB1bWJjdGwKKy5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9wIEFyIHZh
bHVlCisuQXIgLi4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBjb25maWct
ZmlsZQorLkFyIGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0gQXIgZm9y
bWF0CisuQXIgaWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0cyB0aGUg
Zm9sbG93aW5nIG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVYWFggLW9m
ZnNldCBpbmRlbnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNvbmZpZy1m
aWxlCitmb3IKKy5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWlycywgb25l
IHBlciBsaW5lLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBs
aW5lLgorVGhpcyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBub3QgcGFz
c2VkIGFzIGNvbW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcgd2l0aCAj
IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBGbCBtIEFy
IGZvcm1hdAorRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIgZm9ybWF0
CitzcGVjaWZpZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwKKy5QcAor
VGhlCisuWHIgdW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFs
IGFyZ3VtZW50cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0aW5ncyB0
aGF0IGNhbiBiZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBtYXkgYmUg
Y3JlZGVudGlhbHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVzLgorVGhl
CisuTm0KK3V0aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5n
cywgb3IgYWRqdXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitGb3Igd2hh
dGV2ZXIgaW50ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBhcmFtZXRl
cgorLkFyIGlmbmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGludGVyZmFj
ZSBmb3Igd2hpY2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRpc3BsYXll
ZC4KK1VzZQorLlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUgd2hpY2gg
aW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0ZXIgaXMg
Z2l2ZW4sCisuTm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IKKy5BciBp
Zm5hbWUKK2FuZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMgc3Vw
cGxpZWQsIHN1cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUgY29tbWFu
ZCB3b3JrcyBpbgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBxdWlldGx5
LCB1bmxlc3MgdGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2ggd2lsbCBj
YXVzZSBhIGZpbmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBhYm92ZSBv
bmNlIGFsbCBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBhcmFtZXRl
cnMgY3VycmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9IE5zIEVt
IGFjY2Vzcy1wb2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgorLkl0IEFy
IHVzZXJuYW1lIE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0bworLkVt
IHVzZXJuYW1lIC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQKK1NldCB0
aGUgcGFzc3dvcmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBOcyBFbSBw
aW4tY29kZQorRW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsgTnMgXCY9
IE5zIEVtIHB1ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0IEFyIHJv
YW1pbmcKK0FsbG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFyIC1yb2Ft
aW5nCitEZW55IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2ggRVhBTVBM
RVMKKy5CZCAtbGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1vZGUgYXV0
b21hdGljLCByZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1OZXQiLCBk
YXRhY2xhc3MgTFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQyIiwgcm9h
bWluZyAiIiAoZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAwMAorCWZp
cm13YXJlICJNQklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVkCisuUHAK
K0Rpc3BsYXkgdGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCB1
bWIwIGFwbiBvcGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQgbW9iaWxl
CisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAg
ZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAvZGV2L3N0
ZGluIHVtYjAgPDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBj
b25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VFIEFMU08K
Ky5YciBuZXRzdGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5YciBpZndh
dGNoZCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFyZWQgaW4K
Ky5OeCA5LjAgLgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5CisuQW4g
UGllcnJlIFByb25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwuYyBiL3Ni
aW4vdW1iY3RsL3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uODgxNjdiYWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1iY3RsLmMK
QEAgLTAsMCArMSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8KKy8qCisg
KiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBk
ZWZvcmEub3JnPiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElTJycgQU5E
IEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVCU0QgdXBk
YXRlcykKKyAqCisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkgPHBp
ZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9p
b2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+
CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVk
ZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91bWJyZWcu
aCIKKworCisvKiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IF91bWJfYWN0c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUzsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtdID0KKwlN
QklNX1NJTVNUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFs
ZGVzY3IgX3VtYl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0KKwlNQklN
X1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3Zh
bGRlc2NyIF91bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9OUzsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0KKwlVTUJf
SU5URVJOQUxfU1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVtYl92
YWxkZXNjciBfdW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQsICJQSU4g
cmVxdWlyZWQifSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwKKwl7IFVN
Ql9QVUtfUkVRVUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQoreworCXsgTUJJ
TV9SRUdNT0RFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FVVE9NQVRJ
QywgImF1dG9tYXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwiIH0sCisJ
eyAwLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJf
YmVyW10gPQoreworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJeyBVTUJf
QkVSX1ZFUllHT09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29vZCIgfSwK
Kwl7IFVNQl9CRVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVtIiB9LAor
CXsgVU1CX0JFUl9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5IGJhZCIg
fSwKKwl7IFVNQl9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7IDAsIE5V
TEwgfQorfTsKKworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3RvX3V0ZjE2
KGNvbnN0IGNoYXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOworc3RhdGlj
IGludCBfZXJyb3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0YXRpYyBp
bnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFyZ2MsIGNo
YXIgKiBhcmd2W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAqIGlmbmFt
ZSwgY2hhciBjb25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IF91
bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQg
dmVyYm9zZSk7CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0ICogaWZu
YW1lLCBzdHJ1Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9nYXRld2F5
KGNoYXIgY29uc3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29u
c3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBfdW1iY3Rs
X2lvY3RsKGNoYXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
LAorCQlzdHJ1Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChjaGFyIGNv
bnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBhcmdjLCBj
aGFyICogYXJndltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7CitzdGF0aWMg
aW50IF91c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZfdCAqIGlu
LCBpbnQgaW5sZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3QgKiBpbiwg
aW50IGlubGVuLCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5jdGlvbnMg
Ki8KKy8qIGNoYXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBPcGVuQlNE
J3MgaWZjb25maWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3QgY2hhciAq
IGluLCB1aW50MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7CisJdWlu
dDE2X3QgYzsKKworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09ICdcMCcp
IHsKKwkJCS8qCisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBidXQgemVy
byBvdXQgdGhlCisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0KG91dCwg
MCwgb3V0bGVuKTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXplb2YoKm91
dCkpCisJCQlyZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiArPSBzaXpl
b2YoKm91dCk7CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8qIGVycm9y
ICovCitzdGF0aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJdmFfc3Rh
cnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQo
YXApOworCWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB1bWJj
dGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9z
ZSwgaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBpZnJlcSBp
ZnI7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgdW1icDsK
KworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0
KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBz
aXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0KCZ1bWJw
LCAwLCBzaXplb2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1icDsKKwkJ
aWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAhPSAwCisJ
CQkJfHwgX3VtYmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAorCQkJCXx8
IF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlmcikgIT0g
MCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYoYXJnYyA9
PSAwIHx8IHZlcmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7
CisJCWlmKF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZyKSAhPSAw
KQorCQl7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3RsX2luZm8o
aWZuYW1lLCAmdW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4gX2Vycm9y
KDIsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisK
KworLyogdW1iY3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBjb25zdCAq
IGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogZmls
ZW5hbWUpOworCitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZuYW1lLCBj
aGFyIGNvbnN0ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlzdHJ1Y3Qg
aWZyZXEgaWZyOworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVtYl9pbmZv
IHVtYmk7CisKKwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVybiAyOwor
CW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25hbWUsIGlm
bmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1
bWJwOworCW1lbXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3RsX2lvY3Rs
KGlmbmFtZSwgZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxlX3BhcnNl
KGlmbmFtZSwgJnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3RsKGlmbmFt
ZSwgZmQsIFNJT0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7CisJCXJl
dHVybiAyOworCX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9IChjYWRk
cl90KSZ1bWJpOworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CSU5GTywg
JmlmcikgIT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJX3Vt
YmN0bF9pbmZvKGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0
dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0
cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1lKQorewor
CWludCByZXQgPSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVfdCBsZW47
CisJaW50IGk7CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5VTEwsIE5V
TEwgfTsKKwljaGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBO
VUxMKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkKKwl7CisJ
CWlmKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYpIC0gMV0g
PSAnXDAnOworCQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYoYnVmW2xl
biAtIDFdICE9ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMiLCBmaWxl
bmFtZSwKKwkJCQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0YyhmcCkp
ICE9IEVPRiAmJiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVmW2xlbiAt
IDFdID0gJ1wwJzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5VTEwpCisJ
CXsKKwkJCXRva2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UKKwkJCXRv
a2Vuc1sxXSA9IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAsIChwICE9
IE5VTEwpID8gMiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZlb2YoZnAp
OworCWlmKGZjbG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczog
JXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8q
IHVtYmN0bF9kdW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZu
YW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7CisJc3Ry
dWN0IGlmcmVxIGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVyYm9zZTsK
KworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0
KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBz
aXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJ
aWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9IDApCisJ
eworCQljbG9zZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJ
cmV0dXJuIF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWlm
KHN0cm5jYXNlY21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1bXBfanNv
bihpZm5hbWUsICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBVbnN1cHBv
cnRlZCBmb3JtYXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0bF9kdW1w
X2pzb24gKi8KK3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3QgKiBpZm5h
bWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJcHJpbnRm
KCJ7IikKKyNkZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09OX1NFUAlw
cmludGYoIiwgIikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQorI2RlZmlu
ZSBKU09OX0FSUkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5HKGtleSwg
dmFsKQlwcmludGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpTT05fSU5U
KGtleSwgdmFsKQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUgSlNPTl9V
TE9ORyhrZXksIHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2RlZmluZSBK
U09OX0JPT0woa2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/InRydWUi
OiJmYWxzZSIpCisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjogbnVsbCIs
IGtleSkKKyNkZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtleSkKKwor
I2RlZmluZSBKU09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wiOiBcIiIs
IGtleSksXAorCQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikpCisKKyNk
ZWZpbmUgSlNPTl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09OX1NUUklO
RyhrZXksIHZhbCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05VTExfV0VN
UFRZKGtleSwgdmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wKKwkJCQkJ
SlNPTl9XU1RSSU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkKKworCUpT
T05fU1RBUlQ7CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNPTl9TRVA7
CisJSlNPTl9OVUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0ZSwgdW1i
aS0+c3RhdGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0dXMiLCB1
bWJfdmFsMmRlc2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlKU09OX1NF
UDsKKwlKU09OX0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1wdHNfbGVm
dCk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1iX3ZhbDJk
ZXNjcihfdW1iX2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7CisJSlNP
Tl9OVUxMX0VNUFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3RhdGUsIHVt
YmktPnNpbV9zdGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2ltLXJlZ2lz
dHJhdGlvbiIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3RhdGUpKTsK
KwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9kZSIsIHVt
Yl92YWwyZGVzY3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9TRVA7CisJ
SlNPTl9JTlQoIm5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9TRVA7CisJ
SlNPTl9OVUxMX0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGt0c3Rh
dGUsIHVtYmktPnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJz
dXBwb3J0ZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJp
LT5zdXBwb3J0ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJwcmVm
ZXJyZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5w
cmVmZXJyZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJvZmZlcmVk
LWRhdGFjbGFzc2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+aGlnaGVz
dGNsYXNzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3MiLCB1bWJf
dmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09OX1NFUDsK
KwlKU09OX05VTExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklE
RVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhvbmUtbnVt
YmVyIiwgdW1iaS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9O
VUxMX1dFTVBUWSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklCRVJJRF9N
QVhMRU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1iaS0+aWNj
aWQsIFVNQl9JQ0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9hbWluZy1v
biIsIHVtYmktPmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZ
KCJyb2FtaW5nLXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRfTUFYTEVO
KTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJpLT5kZXZp
ZCwgVU1CX0RFVklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgiZmly
bXdhcmUiLCB1bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NFUDsKKwlK
U09OX05VTExfV0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5GT19NQVhM
RU4pOworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1uYW1lIiwg
dW1iaS0+YXBuLCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBU
WSgidXNlcm5hbWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7CisJSlNP
Tl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29yZCwgVU1C
X1BBU1NXT1JEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1bWJpLT5y
c3NpKTsKKwlKU09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJpLT5iZXIp
OworCUpTT05fU0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19yYWRpb19v
bik7CisJSlNPTl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3X3JhZGlv
X29uKTsKKwlKU09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJpLT51cGxp
bmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVkIiwgdW1i
aS0+ZG93bmxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRucyIpOwor
CUpTT05fQVJSQVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2VydmVycyBp
biB0aGUgSlNPTiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1X2ludDMy
X3QJCWlwdjRkbnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMgaXMgZWl0
aGVyIG9mIG1heGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQncyBtZW1z
ZXQgdG8gMCkKKwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisKKy8qIHVt
YmN0bF9nYXRld2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNvbnN0ICog
aWZuYW1lKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBzb2NrYWRk
cl9pbiAqIHNpbjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJu
IDI7CisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFt
ZSwgaWZuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0bChpZm5h
bWUsIGZkLCBTSU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZkKTsKKwkJ
cmV0dXJuIDI7CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9kc3Rh
ZGRyOworCXByaW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJaWYoY2xv
c2UoZmQpICE9IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwgc3RyZXJy
b3IoZXJybm8pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLworc3RhdGlj
IHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAq
IHVtYmkpCit7CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiArIDFdOwor
CWNoYXIgcG5bVU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VNQl9ST0FN
SU5HVEVYVF9NQVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFdOworCWNo
YXIgZndpbmZvW1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1CX0hXSU5G
T19NQVhMRU4gKyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBVTUJfUFJP
VklERVJOQU1FX01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsKKwlfdXRm
MTZfdG9fY2hhcih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9mKHBuKSk7
CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhUX01BWExF
TiwKKwkJCXJvYW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+
YXBuLCBVTUJfQVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3RvX2NoYXIo
dW1iaS0+ZndpbmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndpbmZvKSk7
CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwgaHdpbmZv
LCBzaXplb2YoaHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMsIHJlZ2lz
dHJhdGlvbiAlc1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMsIHNpZ25h
bCAlc1xuIgorCQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIgKCVzKVxu
IgorCQkJIlx0QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAiXG4iCisJ
CQkiXHRmaXJtd2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFtZSwgdW1i
X3ZhbDJkZXNjcihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRlc2NyKF91
bWJfcmVnbW9kZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVnc3Rh
dGUsIHVtYmktPnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfZGF0
YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2JlciwgdW1i
aS0+YmVyKSwgcG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJhbGxvd2Vk
IiA6ICJkZW5pZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRvd25saW5r
X3NwZWVkLAorCQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAqLworc3Rh
dGljIHZvaWQgX3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sKKwkvKiBY
WFggTm90ZSB0byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5
OgorCSAqIGRvCisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8gKGNoYXIp
aHRvbGUxNigqaW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9sZTE2KCoo
aW4rKykpICE9ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFuIGVmZm9y
dCB0byByZXVzZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRmMTZfdG9f
Y2hhciBpbnN0ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRmMTZfdG9f
Y2hhcihpbiwgaW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOworCXByaW50
ZigiJXMiLCBidWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0
bF9pb2N0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dCwKKwkJc3RydWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0LCBpZnIp
ICE9IDApCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVy
cm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2FsbGJhY2tz
ICovCitzdGF0aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0
ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNvbnN0
ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9z
ZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNv
bnN0ICopOworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1bWJfcGFy
YW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIgY29uc3Qg
Kiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3Nl
dF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwKKwkJ
Y2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBjb25zdCAq
LCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0aWMgaW50
IF91bWJjdGxfc2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVyICog
dW1icCwKKwkJaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJeworCQljaGFy
IGNvbnN0ICogbmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJCQlzdHJ1
Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVyOworCX0g
Y2FsbGJhY2tzW10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAidXNlcm5h
bWUiLCBfc2V0X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNzd29yZCwg
MSB9LAorCQl7ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1aywgMSB9
LAorCQl7ICJyb2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1yb2FtaW5n
IiwgX3NldF9yb2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBqOworCisJ
Zm9yKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6ZW9mKGNh
bGxiYWNrcykgLyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChhcmd2W2ld
LCBjYWxsYmFja3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nbal0ucGFy
YW1ldGVyICYmIGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIlczogSW5j
b21wbGV0ZSIKKwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNhbGxiYWNr
c1tqXS5jYWxsYmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBhcmFtZXRl
cgorCQkJCQkJCT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlm
KGNhbGxiYWNrc1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
aWYoaiA9PSBzaXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJCXJldHVy
biBfZXJyb3IoLTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFtZSwgc3Ry
dWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQoreworCXVtYnAt
PmFwbmxlbiA9IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1icC0+YXBu
KSk7CisJaWYodW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+IHNpemVv
Zih1bWJwLT5hcG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiQVBO
IHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShj
aGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIg
Y29uc3QgKiB1c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3RvX3V0ZjE2
KHVzZXJuYW1lLCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFtZSkpOwor
CWlmKHVtYnAtPnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2VybmFtZWxl
biA+IHNpemVvZih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMi
LCBpZm5hbWUsICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMg
aW50IF9zZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0
ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFzc3dvcmRs
ZW4gPSBfY2hhcl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlzaXplb2Yo
dW1icC0+cGFzc3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8IChzaXpl
X3QpdW1icC0+cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQlyZXR1cm4g
X2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1
Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJdW1icC0+
aXNfcHVrID0gMDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAtPnBpbmxl
biA9IF9jaGFyX3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGluKSk7CisJ
aWYodW1icC0+cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBzaXplb2Yo
dW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwgIlBJTiBj
b2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9wdWsoY2hh
ciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNv
bnN0ICogcHVrKQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklNX1BJTl9P
UF9FTlRFUjsKKwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAtPnBpbiwg
c2l6ZW9mKHVtYnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVfdCl1bWJw
LT5waW5sZW4gPiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAl
cyIsIGlmbmFtZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgX3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJf
cGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9pZCkgaWZu
YW1lOworCSh2b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZuYW1lLCBz
dHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQpCit7CisJ
KHZvaWQpIGlmbmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9IDA7CisJ
cmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBfdW1iY3Rs
X3NvY2tldCh2b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9JTkVULCBT
T0NLX0RHUkFNLCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAlcyIsIHN0
cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitzdGF0aWMg
aW50IF91c2FnZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZuYW1lIFtw
YXJhbWV0ZXIgW3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZpZy1maWxl
IGlmbmFtZVxuIgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVtYmN0bCAt
bSBmb3JtYXQgaWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFyZSBtdXR1
YWxseSBleGNsdXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5cbiIsCisJ
CQlzdGRlcnIpOworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8KK3N0YXRp
YyB2b2lkIF91dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hhciAqIG91
dCwgc2l6ZV90IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxlbiA+IDAp
IHsKKwkJYyA9IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09IDAgfHwg
LS1vdXRsZW4gPT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0ICovCisJ
CQkqb3V0ID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWkoYykgPyAo
Y2hhciljIDogJz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBtYWluICov
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwljaGFyIGNv
bnN0ICogZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxMOworCWlu
dCBnYXRld2F5ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdldG9wdChh
cmdjLCBhcmd2LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJY2FzZSAn
Zic6CisJCQkJZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJCQlnYXRl
d2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0gTlVMTDsK
KwkJCQlmb3JtYXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOworCQkJY2Fz
ZSAnbSc6CisJCQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsKKwkJCQln
YXRld2F5ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UrKzsKKwkJ
CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJaWYob3B0
aW5kID09IGFyZ2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBOVUxMKQor
CXsKKwkJaWYob3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOworCQlyZXR1
cm4gX3VtYmN0bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOworCX0KKwlp
Zihmb3JtYXQgIT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJCXJldHVy
biBfdXNhZ2UoKTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZvcm1hdCwg
dmVyYm9zZSk7CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9IGFyZ2Mp
CisJCQlyZXR1cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJndltvcHRp
bmRdKTsKKwl9CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBhcmdjIC0g
b3B0aW5kIC0gMSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBhL3NoYXJl
L21hbi9tYW40L01ha2VmaWxlIGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXggYWQxY2Y1
ZGQzNzg1Li4zNGIzNmIyYjA5M2IgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L01ha2VmaWxl
CisrKyBiL3NoYXJlL21hbi9tYW40L01ha2VmaWxlCkBAIC0xMDQ1LDYgKzEwNDUsNyBAQCBNQU4r
PQlcCiAJdWxlZC40IFwKIAl1bHB0LjQgXAogCXVtYXNzLjQgXAorCXVtYi40IFwKIAl1bWNzLjQg
XAogCXVtY3QuNCBcCiAJdW1vZGVtLjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjQvdW1i
LjQgYi9zaGFyZS9tYW4vbWFuNC91bWIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLmEwNTVmOWU2ZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW40
L3VtYi40CkBAIC0wLDAgKzEsOTAgQEAKKy5cIiAkTmV0QlNEOiB1bWIuNCx2IDEuNCAyMDE5LzA4
LzMwIDA5OjIyOjE3IHdpeiBFeHAgJAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE2IGdlbnVh
IG1iSAorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry
aWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQg
ZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorLlwiIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3Bp
ZXMuCisuXCIKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFV
VEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FSRCBUTyBUSElTIFNP
RlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM
RSBGT1IKKy5cIiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM
T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisuXCIgQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQgT0YKKy5cIiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP
RiBUSElTIFNPRlRXQVJFLgorLlwiCisuRGQgQXVndXN0IDI0LCAyMDE5CisuRHQgVU1CIDQKKy5P
cworLlNoIE5BTUUKKy5ObSB1bWIKKy5OZCBVU0IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2Ug
TW9kZWwgKE1CSU0pCisuU2ggU1lOT1BTSVMKKy5DZCAidW1iKiAgYXQgdWh1Yj8gcG9ydD8iCisu
U2ggREVTQ1JJUFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVVNC
IE1CSU0gZGV2aWNlcy4KKy5QcAorTUJJTSBkZXZpY2VzIGVzdGFibGlzaCBjb25uZWN0aW9ucyB2
aWEgY2VsbHVsYXIgbmV0d29ya3Mgc3VjaCBhcworR1BSUywgVU1UUywgYW5kIExURS4KK1RoZXkg
YXBwZWFyIGFzIGEgcmVndWxhciBwb2ludC10by1wb2ludCBuZXR3b3JrIGludGVyZmFjZSwKK3Ry
YW5zcG9ydGluZyByYXcgSVAgZnJhbWVzLgorLlBwCitSZXF1aXJlZCBjb25maWd1cmF0aW9uIHBh
cmFtZXRlcnMgbGlrZSBQSU4gYW5kIEFQTiBoYXZlIHRvIGJlIHNldAord2l0aAorLlhyIHVtYmN0
bCA4IC4KK09uY2UgdGhlIFNJTSBjYXJkIGhhcyBiZWVuIHVubG9ja2VkIHdpdGggdGhlIGNvcnJl
Y3QgUElOLCBpdAord2lsbCByZW1haW4gaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgTUJJTSBkZXZp
Y2UgaXMgcG93ZXItY3ljbGVkLgorSW4gY2FzZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBh
biAiYWx3YXlzLW9uIiBVU0IgcG9ydCwKK2l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25uZWN0IHRv
IGEgcHJvdmlkZXIgd2l0aG91dCBlbnRlcmluZyB0aGUKK1BJTiBhZ2FpbiBldmVuIGlmIHRoZSBz
eXN0ZW0gd2FzIHJlYm9vdGVkLgorLlNoIEhBUkRXQVJFCitUaGUgZm9sbG93aW5nIGRldmljZXMg
c2hvdWxkIHdvcms6CisuUHAKKy5CbCAtdGFnIC13aWR0aCBEcyAtb2Zmc2V0IGluZGVudCAtY29t
cGFjdAorLkl0IEVyaWNzc29uIEg1MzIxZ3cgYW5kIE41MzIxZ3cKKy5JdCBGaWJvY29tIEw4MzEt
RUFVCisuSXQgTWVkaW9uIE1vYmlsZSBTNDIyMiAoTWVkaWFUZWsgT0VNKQorLkl0IFNpZXJyYSBX
aXJlbGVzcyBFTTczNDUKKy5JdCBTaWVycmEgV2lyZWxlc3MgRU03NDU1CisuSXQgU2llcnJhIFdp
cmVsZXNzIEVNODgwNQorLkl0IFNpZXJyYSBXaXJlbGVzcyBNQzgzMDUKKy5FbAorLlNoIFNFRSBB
TFNPCisuWHIgaW50cm8gNCAsCisuWHIgbmV0aW50cm8gNCAsCisuWHIgdXNiIDQgLAorLlhyIGlm
Y29uZmlnLmlmIDUgLAorLlhyIGlmY29uZmlnIDggLAorLlhyIHVtYmN0bCA4CisuUnMKKy4lVCAi
VW5pdmVyc2FsIFNlcmlhbCBCdXMgQ29tbXVuaWNhdGlvbnMgQ2xhc3MgU3ViY2xhc3MgU3BlY2lm
aWNhdGlvbiBmb3IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwiCisuJVUgaHR0cDov
L3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFf
MDczMDEzLnppcAorLlJlCisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RldmljZSBkcml2ZXIgZmly
c3QgYXBwZWFyZWQgaW4KKy5PeCA2LjAKK2FuZAorLk54IDkuMCAuCisuU2ggQVVUSE9SUworLkFu
IC1ub3NwbGl0CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gR2VyaGFyZCBS
b3RoIEFxIE10IGdlcmhhcmRAb3BlbmJzZC5vcmcKK2FuZCBwb3J0ZWQgZnJvbQorLk94CitieQor
LkFuIFBpZXJyZSBQcm9uY2hlcnkgQXEgTXQga2hvcmJlbkBkZWZvcmEub3JnIC4KKy5TaCBDQVZF
QVRTCitUaGUKKy5ObQorZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgSVB2Ni4KKy5QcAorRGV2aWNl
cyB3aGljaCBmYWlsIHRvIHByb3ZpZGUgYSBjb25mb3JtaW5nIE1CSU0gaW1wbGVtZW50YXRpb24g
d2lsbAorcHJvYmFibHkgYmUgYXR0YWNoZWQgYXMgc29tZSBvdGhlciBkcml2ZXIsIHN1Y2ggYXMK
Ky5YciB1M2cgNCAuCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcyBiL3N5cy9jb25mL2ZpbGVz
CmluZGV4IDc4MTgxMDRiOGQ1MC4uNDIxMjkyNTZiMGU3IDEwMDY0NAotLS0gYS9zeXMvY29uZi9m
aWxlcworKysgYi9zeXMvY29uZi9maWxlcwpAQCAtMzMwNyw2ICszMzA3LDcgQEAgZGV2L3VzYi9u
ZXQvaWZfbXVnZS5jCQlvcHRpb25hbCBtdWdlCiBkZXYvdXNiL25ldC9pZl9ydWUuYwkJb3B0aW9u
YWwgcnVlCiBkZXYvdXNiL25ldC9pZl9zbXNjLmMJCW9wdGlvbmFsIHNtc2MKIGRldi91c2IvbmV0
L2lmX3VkYXYuYwkJb3B0aW9uYWwgdWRhdgorZGV2L3VzYi9uZXQvaWZfdW1iLmMJCW9wdGlvbmFs
IHVtYgogZGV2L3VzYi9uZXQvaWZfdXJlLmMJCW9wdGlvbmFsIHVyZQogZGV2L3VzYi9uZXQvaWZf
dXNpZS5jCQlvcHRpb25hbCB1c2llCiBkZXYvdXNiL25ldC9pZl91cm5kaXMuYwkJb3B0aW9uYWwg
dXJuZGlzCmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMgYi9zeXMvZGV2L3Vz
Yi9uZXQvaWZfdW1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41
NGUxYTIyNzFkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMK
QEAgLTAsMCArMSwyOTExIEBACisvKgkkRnJlZUJTRCQgKi8KKy8qCSROZXRCU0QkICovCisvKgkk
T3BlbkJTRDogaWZfdW1iLmMsdiAxLjE4IDIwMTgvMDIvMTkgMDg6NTk6NTIgbXBpIEV4cCAkICov
CisKKy8qCisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTYgZ2VudWEgbWJIIChPcGVuQlNE
IHZlcnNpb24pCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRp
c3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91
dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29w
aWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVU
SE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZU
V0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP
RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRS
QUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YK
KyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg
U09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKHJlLXdyaXRl
IGZvciBGcmVlQlNEKQorICoKKyAqIFJlLXdyaXRlIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9u
Y2hlcnkgPHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBNb2JpbGUgQnJvYWRiYW5kIEludGVyZmFjZSBN
b2RlbCBzcGVjaWZpY2F0aW9uOgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9j
cy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnppcAorICogQ29tcGxpYW5jZSB0
ZXN0aW5nIGd1aWRlCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNs
YXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCisjaW5jbHVkZSA8c3lzL3Bh
cmFtLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4K
KyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRl
IDxzeXMvcHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29j
a2lvLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgor
I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKworI2luY2x1
ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tdXRl
eC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5o
PgorCisjaW5jbHVkZSA8bWFjaGluZS9faW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9icGYu
aD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKyNpbmNs
dWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaW5jbHVkZSA8
bmV0L25ldGlzci5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8bmV0aW5l
dC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9p
cC5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9j
ZGMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2Jf
ZGV2aWNlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRl
di91c2IvdXNiZGlfdXRpbC5oPgorI2luY2x1ZGUgInVzYl9pZi5oIgorCisjaW5jbHVkZSAibWJp
bS5oIgorI2luY2x1ZGUgImlmX3VtYnJlZy5oIgorCitNQUxMT0NfREVDTEFSRShNX01CSU1fQ0lE
X0NPTk5FQ1QpOworTUFMTE9DX0RFRklORShNX01CSU1fQ0lEX0NPTk5FQ1QsICJtYmltX2NpZF9j
b25uZWN0IiwKKwkJIkNvbm5lY3Rpb24gcGFyYW1ldGVycyBmb3IgTUJJTSIpOworCisjaWZkZWYg
VU1CX0RFQlVHCisjZGVmaW5lIERQUklOVEYoeC4uLikJCQkJCQkJXAorCQlkbyB7IGlmICh1bWJf
ZGVidWcpIGxvZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERQUklOVEZO
KG4sIHguLi4pCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcgPj0gKG4pKSBsb2coTE9HX0RF
QlVHLCB4KTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBERFVNUE4obiwgYiwgbCkJCQkJCQkJXAor
CQlkbyB7CQkJCQkJCVwKKwkJCWlmICh1bWJfZGVidWcgPj0gKG4pKQkJCQlcCisJCQkJdW1iX2R1
bXAoKGIpLCAobCkpOwkJCVwKKwkJfSB3aGlsZSAoMCkKKworY29uc3QgaW50CSB1bWJfZGVidWcg
PSAxOworc3RhdGljIGNoYXIJKnVtYl91dWlkMnN0cih1aW50OF90IFtNQklNX1VVSURfTEVOXSk7
CitzdGF0aWMgdm9pZAkgdW1iX2R1bXAodm9pZCAqLCBpbnQpOworCisjZWxzZQorI2RlZmluZSBE
UFJJTlRGKHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4p
CWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRERVTVBOKG4sIGIsIGwpCQlkbyB7IH0gd2hpbGUg
KDApCisjZW5kaWYKKworI2RlZmluZSBERVZOQU0oc2MpCQlkZXZpY2VfZ2V0X25hbWV1bml0KChz
YyktPnNjX2RldikKKworLyoKKyAqIFN0YXRlIGNoYW5nZSB0aW1lb3V0CisgKi8KKyNkZWZpbmUg
VU1CX1NUQVRFX0NIQU5HRV9USU1FT1VUCTMwCisKKy8qCisgKiBTdGF0ZSBjaGFuZ2UgZmxhZ3MK
KyAqLworI2RlZmluZSBVTUJfTlNfRE9OVF9EUk9QCTB4MDAwMQkvKiBkbyBub3QgZHJvcCBiZWxv
dyBjdXJyZW50IHN0YXRlICovCisjZGVmaW5lIFVNQl9OU19ET05UX1JBSVNFCTB4MDAwMgkvKiBk
byBub3QgcmFpc2UgYmVsb3cgY3VycmVudCBzdGF0ZSAqLworCisvKgorICogRGlhZ25vc3RpYyBt
YWNyb3MKKyAqLworY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcmVnc3RhdGVzW10gPSBN
QklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1i
X2RhdGFjbGFzc2VzW10gPSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1
Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zaW1zdGF0ZVtdID0gTUJJTV9TSU1TVEFURV9ERVNDUklQVElP
TlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9tZXNzYWdlc1tdID0gTUJJTV9NRVNT
QUdFU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zdGF0dXNb
XSA9IE1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX2NpZHNbXSA9IE1CSU1fQ0lEX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFs
ZGVzY3IgdW1iX3BrdHN0YXRlW10gPSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7Citj
b25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9hY3RzdGF0ZVtdID0gTUJJTV9BQ1RJVkFUSU9O
X1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Vycm9y
W10gPSBNQklNX0VSUk9SX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX3BpbnR5cGVbXSA9IE1CSU1fUElOVFlQRV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3Qg
dW1iX3ZhbGRlc2NyIHVtYl9pc3RhdGVbXSA9IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElP
TlM7CisKKyNkZWZpbmUgdW1iX3JlZ3N0YXRlKGMpCQl1bWJfdmFsMmRlc2NyKHVtYl9yZWdzdGF0
ZXMsIChjKSkKKyNkZWZpbmUgdW1iX2RhdGFjbGFzcyhjKQl1bWJfdmFsMmRlc2NyKHVtYl9kYXRh
Y2xhc3NlcywgKGMpKQorI2RlZmluZSB1bWJfc2ltc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1i
X3NpbXN0YXRlLCAocykpCisjZGVmaW5lIHVtYl9yZXF1ZXN0MnN0cihtKQl1bWJfdmFsMmRlc2Ny
KHVtYl9tZXNzYWdlcywgKG0pKQorI2RlZmluZSB1bWJfc3RhdHVzMnN0cihzKQl1bWJfdmFsMmRl
c2NyKHVtYl9zdGF0dXMsIChzKSkKKyNkZWZpbmUgdW1iX2NpZDJzdHIoYykJCXVtYl92YWwyZGVz
Y3IodW1iX2NpZHMsIChjKSkKKyNkZWZpbmUgdW1iX3BhY2tldF9zdGF0ZShzKQl1bWJfdmFsMmRl
c2NyKHVtYl9wa3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfYWN0aXZhdGlvbihzKQl1bWJfdmFs
MmRlc2NyKHVtYl9hY3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfZXJyb3Iyc3RyKGUpCXVtYl92
YWwyZGVzY3IodW1iX2Vycm9yLCAoZSkpCisjZGVmaW5lIHVtYl9waW5fdHlwZSh0KQkJdW1iX3Zh
bDJkZXNjcih1bWJfcGludHlwZSwgKHQpKQorI2RlZmluZSB1bWJfaXN0YXRlKHMpCQl1bWJfdmFs
MmRlc2NyKHVtYl9pc3RhdGUsIChzKSkKKworc3RhdGljIGRldmljZV9wcm9iZV90IHVtYl9wcm9i
ZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3QgdW1iX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0
YWNoX3QgdW1iX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IHVtYl9zdXNwZW5kOwor
c3RhdGljIGRldmljZV9yZXN1bWVfdCB1bWJfcmVzdW1lOworc3RhdGljIHZvaWQJIHVtYl9hdHRh
Y2hfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICopOworc3RhdGljIHVzYl9oYW5kbGVfcmVxdWVz
dF90IHVtYl9oYW5kbGVfcmVxdWVzdDsKK3N0YXRpYyBpbnQJIHVtYl9kZWFjdGl2YXRlKGRldmlj
ZV90KTsKK3N0YXRpYyB2b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3Ry
dWN0IHVzYl9jb25maWcgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtwaXBlcyhzdHJ1
Y3QgdW1iX3NvZnRjICopOworc3RhdGljIGludAkgdW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1
X2xvbmcsIGNhZGRyX3QpOworc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7CitzdGF0aWMg
dm9pZAkgdW1iX2lucHV0KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK3N0YXRpYyBp
bnQJIHVtYl9vdXRwdXQoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosCisJCSAgICBjb25z
dCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICopOworc3RhdGljIHZvaWQJIHVtYl9z
dGFydChzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXJ0X3Rhc2soc3RydWN0
IHVzYl9wcm9jX21zZyAqKTsKKyNpZiAwCitzdGF0aWMgdm9pZAkgdW1iX3dhdGNoZG9nKHN0cnVj
dCBpZm5ldCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJIHVtYl9zdGF0ZWNoZ190aW1lb3V0KHZv
aWQgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9tZWRpYWNoYW5nZShzdHJ1Y3QgaWZuZXQgKik7Citz
dGF0aWMgdm9pZAkgdW1iX21lZGlhc3RhdHVzKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRp
YXJlcSAqKTsKKworc3RhdGljIHZvaWQJIHVtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpz
YywgdXNiX3Byb2NfY2FsbGJhY2tfdCwKKwkJICAgIHN0cnVjdCB1c2JfcHJvY19tc2cgKiwgc3Ry
dWN0IHVzYl9wcm9jX21zZyAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9uZXdzdGF0ZShzdHJ1
Y3QgdW1iX3NvZnRjICosIGVudW0gdW1iX3N0YXRlLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9z
dGF0ZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7CitzdGF0aWMgdm9pZAkgdW1iX3VwKHN0
cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Rvd24oc3RydWN0IHVtYl9zb2Z0
YyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAkgdW1iX2dldF9yZXNwb25zZV90YXNrKHN0cnVjdCB1
c2JfcHJvY19tc2cgKik7CisKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX3Jlc3BvbnNlKHN0cnVj
dCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9oYW5kbGVfaW5k
aWNhdGVfc3RhdHVzX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwKKwkJICAgIGludCk7
CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAq
LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0
cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9y
ZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBp
bnQJIHVtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBp
bnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1i
X3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcmFkaW9fc3Rh
dGUoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVj
b2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVt
Yl9kZWNvZGVfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7
CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICos
IHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVj
dCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9pcF9j
b25maWd1cmF0aW9uKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZv
aWQJIHVtYl9yeChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVt
Yl9yeGVvZjsKK3N0YXRpYyB2b2lkCSB1bWJfcnhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOwor
c3RhdGljIGludAkgdW1iX2VuY2FwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IG1idWYgKiwg
c3RydWN0IHVzYl94ZmVyICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl90eGVvZjsKK3N0
YXRpYyB2b2lkCSB1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJ
IHVtYl9kZWNhcChzdHJ1Y3QgdW1iX3NvZnRjICosIHN0cnVjdCB1c2JfeGZlciAqLCBpbnQpOwor
CitzdGF0aWMgdXNiX2Vycm9yX3QJIHVtYl9zZW5kX2VuY2FwX2NvbW1hbmQoc3RydWN0IHVtYl9z
b2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZ2V0X2VuY2FwX3Jlc3BvbnNl
KHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkgdW1iX2N0
cmxfbXNnKHN0cnVjdCB1bWJfc29mdGMgKiwgdWludDMyX3QsIHZvaWQgKiwgaW50KTsKKworc3Rh
dGljIHZvaWQJIHVtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1i
X2Nsb3NlKHN0cnVjdCB1bWJfc29mdGMgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9zZXRwaW4oc3Ry
dWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgdm9pZCAqLCBpbnQsIHZvaWQgKiwKKwkJICAgIGlu
dCk7CitzdGF0aWMgdm9pZAkgdW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICopOwor
c3RhdGljIHZvaWQJIHVtYl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CitzdGF0aWMg
dm9pZAkgdW1iX2FsbG9jYXRlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJ
IHVtYl9zZW5kX2ZjY19hdXRoKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1i
X3BhY2tldF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1
bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kaXNjb25u
ZWN0KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3NlbmRfY29ubmVjdChz
dHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CisKK3N0YXRpYyB2b2lkCSB1bWJfcXJ5X2lwY29uZmln
KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NtZChzdHJ1Y3QgdW1iX3Nv
ZnRjICosIGludCwgaW50LCBjb25zdCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2Nt
ZDEoc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsIHVpbnQ4
X3QgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NvbW1hbmRfZG9uZShzdHJ1Y3QgdW1iX3NvZnRjICos
IHZvaWQgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3Nv
ZnRjICosIHVpbnQzMl90LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2RlY29kZV9x
bWkoc3RydWN0IHVtYl9zb2Z0YyAqLCB1aW50OF90ICosIGludCk7CisKK3N0YXRpYyB1c2JfY2Fs
bGJhY2tfdCB1bWJfaW50cjsKKworc3RhdGljIGNoYXIJKnVtYl9udG9wKHN0cnVjdCBzb2NrYWRk
ciAqKTsKKworc3RhdGljIGNvbnN0IGludCB1bWJfeGZlcl90b3V0ID0gVVNCX0RFRkFVTFRfVElN
RU9VVDsKKworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3RbXSA9IE1CSU1f
VVVJRF9CQVNJQ19DT05ORUNUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2NvbnRleHRfaW50
ZXJuZXRbXSA9IE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUOworc3RhdGljIHVpbnQ4X3QJIHVt
Yl91dWlkX3FtaV9tYmltW10gPSBNQklNX1VVSURfUU1JX01CSU07CitzdGF0aWMgdWludDMyX3QJ
IHVtYl9zZXNzaW9uX2lkID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnIHVt
Yl9jb25maWdbVU1CX05fVFJBTlNGRVJdID0geworCVtVTUJfSU5UUl9SWF0gPSB7CisJCS50eXBl
ID0gVUVfSU5URVJSVVBULAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlv
biA9IFVFX0RJUl9JTiwKKwkJLmlmX2luZGV4ID0gMSwKKwkJLmNhbGxiYWNrID0gdW1iX2ludHIs
CisJCS5idWZzaXplID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pLAorCQku
ZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDF9LAorCQkudXNiX21vZGUg
PSBVU0JfTU9ERV9IT1NULAorCX0sCisJW1VNQl9CVUxLX1JYXSA9IHsKKwkJLnR5cGUgPSBVRV9C
VUxLLAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9J
TiwKKwkJLmlmX2luZGV4ID0gMCwKKwkJLmNhbGxiYWNrID0gdW1iX3J4ZW9mLAorCQkuYnVmc2l6
ZSA9IDggKiAxMDI0LAorCQkuZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9
IDEsLmV4dF9idWZmZXIgPSAxfSwKKwkJLnVzYl9tb2RlID0gVVNCX01PREVfSE9TVCwKKwl9LAor
CVtVTUJfQlVMS19UWF0gPSB7CisJCS50eXBlID0gVUVfQlVMSywKKwkJLmVuZHBvaW50ID0gVUVf
QUREUl9BTlksCisJCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VULAorCQkuaWZfaW5kZXggPSAwLAor
CQkuY2FsbGJhY2sgPSB1bWJfdHhlb2YsCisJCS5idWZzaXplID0gOCAqIDEwMjQsCisJCS5mbGFn
cyA9IHsucGlwZV9ib2YgPSAxLC5mb3JjZV9zaG9ydF94ZmVyID0gMSwuZXh0X2J1ZmZlciA9IDF9
LAorCQkudGltZW91dCA9IHVtYl94ZmVyX3RvdXQsCisJCS51c2JfbW9kZSA9IFVTQl9NT0RFX0hP
U1QsCisJfSwKK307CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdW1iX21ldGhvZHNbXSA9IHsK
KwkvKiBVU0IgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHVzYl9oYW5kbGVfcmVxdWVzdCwgdW1i
X2hhbmRsZV9yZXF1ZXN0KSwKKworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0Qo
ZGV2aWNlX3Byb2JlLCB1bWJfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCB1bWJf
YXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgdW1iX2RldGFjaCksCisJREVWTUVU
SE9EKGRldmljZV9zdXNwZW5kLCB1bWJfc3VzcGVuZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1
bWUsIHVtYl9yZXN1bWUpLAorCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90
IHVtYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAidW1iIiwKKwkubWV0aG9kcyA9IHVtYl9tZXRob2Rz
LAorCS5zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdW1iX3NvZnRjKSwKK307CisKK01BTExPQ19ERUZJ
TkUoTV9VU0JfVU1CLCAiVVNCIFVNQiIsICJVU0IgTUJJTSBkcml2ZXIiKTsKKworY29uc3QgaW50
IHVtYl9kZWxheSA9IDQwMDA7CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYW4gIkZD
QyBBdXRoZW50aWNhdGlvbiIgY29tbWFuZC4KKyAqLworI2lmbmRlZiBVU0JfVkVORE9SX1NJRVJS
QQorIyBkZWZpbmUgVVNCX1ZFTkRPUl9TSUVSUkEJMHgxMTk5CisjZW5kaWYKKyNpZm5kZWYgVVNC
X1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorIyBkZWZpbmUgVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1
NQkweDkwNzkKKyNlbmRpZgorY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdW1iX2ZjY2F1dGhf
ZGV2c1tdID0geworCXsKKwkJLm1hdGNoX2ZsYWdfdmVuZG9yID0gMSwKKwkJLm1hdGNoX2ZsYWdf
cHJvZHVjdCA9IDEsCisJCS5pZFZlbmRvciA9IFVTQl9WRU5ET1JfU0lFUlJBLAorCQkuaWRQcm9k
dWN0ID0gVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1
aW50OF90IHVtYl9xbWlfYWxsb2NfY2lkW10gPSB7CisJMHgwMSwKKwkweDBmLCAweDAwLAkJLyog
bGVuICovCisJMHgwMCwJCQkvKiBRTVVYIGZsYWdzICovCisJMHgwMCwJCQkvKiBzZXJ2aWNlICJj
dGwiICovCisJMHgwMCwJCQkvKiBDSUQgKi8KKwkweDAwLAkJCS8qIFFNSSBmbGFncyAqLworCTB4
MDEsCQkJLyogdHJhbnNhY3Rpb24gKi8KKwkweDIyLCAweDAwLAkJLyogbXNnICJBbGxvY2F0ZSBD
SUQiICovCisJMHgwNCwgMHgwMCwJCS8qIFRMViBsZW4gKi8KKwkweDAxLCAweDAxLCAweDAwLCAw
eDAyCS8qIFRMViAqLworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdW1iX3FtaV9mY2NfYXV0
aFtdID0geworCTB4MDEsCisJMHgwYywgMHgwMCwJCS8qIGxlbiAqLworCTB4MDAsCQkJLyogUU1V
WCBmbGFncyAqLworCTB4MDIsCQkJLyogc2VydmljZSAiZG1zIiAqLworI2RlZmluZSBVTUJfUU1J
X0NJRF9PRkZTCTUKKwkweDAwLAkJCS8qIENJRCAoZmlsbGVkIGluIGxhdGVyKSAqLworCTB4MDAs
CQkJLyogUU1JIGZsYWdzICovCisJMHgwMSwgMHgwMCwJCS8qIHRyYW5zYWN0aW9uICovCisJMHg1
ZiwgMHg1NSwJCS8qIG1zZyAiU2VuZCBGQ0MgQXV0aGVudGljYXRpb24iICovCisJMHgwMCwgMHgw
MAkJLyogVExWIGxlbiAqLworfTsKKworc3RhdGljIGludAordW1iX3Byb2JlKGRldmljZV90IGRl
dikKK3sKKwlzdHJ1Y3QgdXNiX2F0dGFjaF9hcmcgKnVhYSA9IGRldmljZV9nZXRfaXZhcnMoZGV2
KTsKKwl1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfdCAqaWQ7CisKKwlpZiAodWFhLT51c2JfbW9k
ZSAhPSBVU0JfTU9ERV9IT1NUKQorCQlyZXR1cm4gKEVOWElPKTsKKwlpZiAoKGlkID0gdXNiZF9n
ZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IodWFhLT5pZmFjZSkpID09IE5VTEwpCisJCXJldHVybiAo
RU5YSU8pOworCisJLyoKKwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgTkNNLCBjaGVj
ayBpZiBhbHRlcm5hdGUgc2V0dGluZworCSAqIDEgaW1wbGVtZW50cyBNQklNLgorCSAqLworCWlm
IChpZC0+YkludGVyZmFjZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJm
YWNlU3ViQ2xhc3MgPT0KKwkgICAgVUlTVUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsK
KwkJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcigKKwkJCQl1c2JkX2dldF9pZmFj
ZSh1YWEtPmRldmljZSwKKwkJCQkJdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMSkpOworCQlpZiAo
aWQgPT0gTlVMTCB8fCBpZC0+YkFsdGVybmF0ZVNldHRpbmcgIT0gMSkKKwkJCXJldHVybiAoRU5Y
SU8pOworCX0KKworI2lmbmRlZiBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNF
X01PREVMCisjIGRlZmluZSBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01P
REVMIDE0CisjZW5kaWYKKwlpZiAoaWQtPmJJbnRlcmZhY2VDbGFzcyA9PSBVSUNMQVNTX0NEQyAm
JgorCSAgICBpZC0+YkludGVyZmFjZVN1YkNsYXNzID09CisJICAgIFVJU1VCQ0xBU1NfTU9CSUxF
X0JST0FEQkFORF9JTlRFUkZBQ0VfTU9ERUwgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VQcm90b2Nv
bCA9PSAwKQorCQlyZXR1cm4gKEJVU19QUk9CRV9TUEVDSUZJQyk7CisKKwlyZXR1cm4gKEVOWElP
KTsKK30KKworc3RhdGljIGludAordW1iX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0
IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IHVzYl9hdHRh
Y2hfYXJnICp1YWEgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisJc3RydWN0IHVzYl9jb25maWcg
Y29uZmlnW1VNQl9OX1RSQU5TRkVSXTsKKwlpbnQJIHY7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNf
dW5pb25fZGVzY3JpcHRvciAqdWQ7CisJY29uc3Qgc3RydWN0IG1iaW1fZGVzY3JpcHRvciAqbWQ7
CisJaW50CSBpOworCXVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcl90ICppZDsKKwlzdHJ1Y3QgdXNi
X2ludGVyZmFjZSAqaWZhY2U7CisJaW50CSBkYXRhX2lmYWNlbm8gPSAtMTsKKwl1c2JfZXJyb3Jf
dCBlcnJvcjsKKworCXNjLT5zY19kZXYgPSBkZXY7CisJc2MtPnNjX3VkZXYgPSB1YWEtPmRldmlj
ZTsKKworCW1lbWNweShjb25maWcsIHVtYl9jb25maWcsIHNpemVvZiAoY29uZmlnKSk7CisKKwlk
ZXZpY2Vfc2V0X3VzYl9kZXNjKGRldik7CisKKwlzYy0+c2NfY3RybF9pZmFjZW5vID0gdWFhLT5p
bmZvLmJJZmFjZU51bTsKKworCW10eF9pbml0KCZzYy0+c2NfbXV0ZXgsIGRldmljZV9nZXRfbmFt
ZXVuaXQoZGV2KSwgTlVMTCwgTVRYX0RFRik7CisKKwkvKgorCSAqIFNvbWUgTUJJTSBoYXJkd2Fy
ZSBkb2VzIG5vdCBwcm92aWRlIHRoZSBtYW5kYXRvcnkgQ0RDIFVuaW9uCisJICogRGVzY3JpcHRv
ciwgc28gd2UgYWxzbyBsb29rIGF0IG1hdGNoaW5nIEludGVyZmFjZQorCSAqIEFzc29jaWF0aW9u
IERlc2NyaXB0b3JzIHRvIGZpbmQgb3V0IHRoZSBNQklNIERhdGEgSW50ZXJmYWNlCisJICogbnVt
YmVyLgorCSAqLworCXNjLT5zY192ZXJfbWFqID0gc2MtPnNjX3Zlcl9taW4gPSAtMTsKKwlzYy0+
c2NfbWF4cGt0bGVuID0gTUJJTV9NQVhTRUdTWl9NSU5WQUw7CisJaWQgPSB1c2JkX2dldF9pbnRl
cmZhY2VfZGVzY3JpcHRvcih1YWEtPmlmYWNlKTsKKworCXVkID0gdXNiZF9maW5kX2Rlc2NyaXB0
b3Ioc2MtPnNjX3VkZXYsIGlkLCB1YWEtPmluZm8uYklmYWNlSW5kZXgsCisJCQlVREVTQ19DU19J
TlRFUkZBQ0UsIDB4ZmYsIFVERVNDU1VCX0NEQ19VTklPTiwgMHhmZik7CisJaWYgKHVkICE9IE5V
TEwpIHsKKwkJZGF0YV9pZmFjZW5vID0gdWQtPmJTbGF2ZUludGVyZmFjZVswXTsKKwl9CisKKwlt
ZCA9IHVzYmRfZmluZF9kZXNjcmlwdG9yKHNjLT5zY191ZGV2LCBpZCwgdWFhLT5pbmZvLmJJZmFj
ZUluZGV4LAorCQkJVURFU0NfQ1NfSU5URVJGQUNFLCAweGZmLCBVREVTQ1NVQl9NQklNLCAweGZm
KTsKKwlpZiAobWQgIT0gTlVMTCkgeworCQl2ID0gVUdFVFcobWQtPmJjZE1CSU1WZXJzaW9uKTsK
KwkJc2MtPnNjX3Zlcl9tYWogPSBNQklNX1ZFUl9NQUpPUih2KTsKKwkJc2MtPnNjX3Zlcl9taW4g
PSBNQklNX1ZFUl9NSU5PUih2KTsKKwkJc2MtPnNjX2N0cmxfbGVuID0gVUdFVFcobWQtPndNYXhD
b250cm9sTWVzc2FnZSk7CisJCS8qIE5ldmVyIHRydXN0IGEgVVNCIGRldmljZSEgQ291bGQgdHJ5
IHRvIGV4cGxvaXQgdXMgKi8KKwkJaWYgKHNjLT5zY19jdHJsX2xlbiA8IE1CSU1fQ1RSTE1TR19N
SU5MRU4gfHwKKwkJCQlzYy0+c2NfY3RybF9sZW4gPiBNQklNX0NUUkxNU0dfTUFYTEVOKSB7CisJ
CQlEUFJJTlRGKCJjb250cm9sIG1lc3NhZ2UgbGVuICVkIG91dCBvZiAiCisJCQkJCSJib3VuZHMg
WyVkIC4uICVkXVxuIiwKKwkJCQkJc2MtPnNjX2N0cmxfbGVuLCBNQklNX0NUUkxNU0dfTUlOTEVO
LAorCQkJCQlNQklNX0NUUkxNU0dfTUFYTEVOKTsKKwkJCS8qIGNvbnRpbnVlIGFueXdheSAqLwor
CQl9CisJCXNjLT5zY19tYXhwa3RsZW4gPSBVR0VUVyhtZC0+d01heFNlZ21lbnRTaXplKTsKKwkJ
RFBSSU5URk4oMiwgImN0cmxfbGVuPSVkLCBtYXhwa3RsZW49JWQsIGNhcD0weCV4XG4iLAorCQkJ
CXNjLT5zY19jdHJsX2xlbiwgc2MtPnNjX21heHBrdGxlbiwKKwkJCQltZC0+Ym1OZXR3b3JrQ2Fw
YWJpbGl0aWVzKTsKKwl9CisJaWYgKHNjLT5zY192ZXJfbWFqIDwgMCkgeworCQlkZXZpY2VfcHJp
bnRmKGRldiwgImVycm9yOiBtaXNzaW5nIE1CSU0gZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZmFp
bDsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgInZlcnNpb24gJWQuJWRcbiIsIHNjLT5zY192
ZXJfbWFqLAorCSAgICBzYy0+c2NfdmVyX21pbik7CisKKwlpZiAodXNiZF9sb29rdXBfaWRfYnlf
dWFhKHVtYl9mY2NhdXRoX2RldnMsIHNpemVvZiAodW1iX2ZjY2F1dGhfZGV2cyksCisJCQkJICB1
YWEpKSB7CisJCXNjLT5zY19mbGFncyB8PSBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQ7CisJCXNj
LT5zY19jaWQgPSAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPnNjX3VkZXYtPmlmYWNl
c19tYXg7IGkrKykgeworCQlpZmFjZSA9IHVzYmRfZ2V0X2lmYWNlKHNjLT5zY191ZGV2LCBpKTsK
KwkJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcihpZmFjZSk7CisJCWlmIChpZCA9
PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJaWYgKGlkLT5iSW50ZXJmYWNlTnVtYmVyID09IGRhdGFf
aWZhY2VubykgeworCQkJc2MtPnNjX2RhdGFfaWZhY2UgPSBpZmFjZTsKKwkJCXNjLT5zY19pZmFj
ZXNfaW5kZXhbMF0gPSBpOworCQkJc2MtPnNjX2lmYWNlc19pbmRleFsxXSA9IHVhYS0+aW5mby5i
SWZhY2VJbmRleDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzYy0+c2NfZGF0YV9pZmFjZSA9
PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZXJyb3I6IG5vIGRhdGEgaW50ZXJmYWNl
IGZvdW5kXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNv
bWJpbmVkIE5DTS9NQklNIGZ1bmN0aW9uLCBzd2l0Y2ggdG8KKwkgKiBhbHRlcm5hdGUgc2V0dGlu
ZyBvbmUgdG8gZW5hYmxlIE1CSU0uCisJICovCisJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVz
Y3JpcHRvcih1YWEtPmlmYWNlKTsKKwlpZiAoaWQgIT0gTlVMTCAmJiBpZC0+YkludGVyZmFjZUNs
YXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVUlT
VUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2Nf
ZGV2LCAiY29tYmluZWQgTkNNL01CSU1cbiIpOworCQllcnJvciA9IHVzYmRfcmVxX3NldF9hbHRf
aW50ZXJmYWNlX25vKHNjLT5zY191ZGV2LAorCQkJCU5VTEwsIHVhYS0+aW5mby5iSWZhY2VJbmRl
eCwgMSk7CisJCWlmIChlcnJvciAhPSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKSB7CisJCQlk
ZXZpY2VfcHJpbnRmKGRldiwgImVycm9yOiBDb3VsZCBub3Qgc3dpdGNoIHRvIgorCQkJCQkgICAi
IGFsdGVybmF0ZSBzZXR0aW5nIGZvciBNQklNXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlz
Yy0+c2NfaWZhY2VzX2luZGV4WzFdID0gdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMTsKKwl9CisK
KwlpZiAodXNiX3Byb2NfY3JlYXRlKCZzYy0+c2NfdGFza3F1ZXVlLCAmc2MtPnNjX211dGV4LAor
CQkJCWRldmljZV9nZXRfbmFtZXVuaXQoc2MtPnNjX2RldiksCisJCQkJVVNCX1BSSV9NRUQpICE9
IDApCisJCWdvdG8gZmFpbDsKKworCURQUklOVEZOKDIsICJjdHJsLWlmbm8jJWQ6IGRhdGEtaWZu
byMlZFxuIiwgc2MtPnNjX2N0cmxfaWZhY2VubywKKwkgICAgZGF0YV9pZmFjZW5vKTsKKworCXVz
Yl9jYWxsb3V0X2luaXRfbXR4KCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIsICZzYy0+c2NfbXV0ZXgs
IDApOworCisJdW1iX25jbV9zZXR1cChzYywgY29uZmlnKTsKKwlEUFJJTlRGTigyLCAiJXM6IHJ4
L3R4IHNpemUgJWQvJWRcbiIsIERFVk5BTShzYyksCisJCQlzYy0+c2NfcnhfYnVmc3osIHNjLT5z
Y190eF9idWZzeik7CisKKwlzYy0+c2NfcnhfYnVmID0gbWFsbG9jKHNjLT5zY19yeF9idWZzeiwg
TV9ERVZCVUYsIE1fV0FJVE9LKTsKKwlzYy0+c2NfdHhfYnVmID0gbWFsbG9jKHNjLT5zY190eF9i
dWZzeiwgTV9ERVZCVUYsIE1fV0FJVE9LKTsKKworCWZvciAoaSA9IDA7IGkgIT0gMzI7IGkrKykg
eworCQllcnJvciA9IHVzYmRfc2V0X2FsdF9pbnRlcmZhY2VfaW5kZXgoc2MtPnNjX3VkZXYsCisJ
CQkJc2MtPnNjX2lmYWNlc19pbmRleFswXSwgaSk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOwor
CisJCWVycm9yID0gdXNiZF90cmFuc2Zlcl9zZXR1cChzYy0+c2NfdWRldiwgc2MtPnNjX2lmYWNl
c19pbmRleCwKKwkJCQlzYy0+c2NfeGZlciwgY29uZmlnLCBVTUJfTl9UUkFOU0ZFUiwKKwkJCQlz
YywgJnNjLT5zY19tdXRleCk7CisJCWlmIChlcnJvciA9PSBVU0JfRVJSX05PUk1BTF9DT01QTEVU
SU9OKQorCQkJYnJlYWs7CisJfQorCWlmIChlcnJvciB8fCAoaSA9PSAzMikpIHsKKwkJZGV2aWNl
X3ByaW50ZihzYy0+c2NfZGV2LCAiZXJyb3I6IGZhaWxlZCB0byBzZXR1cCB4ZmVyc1xuIik7CisJ
CWdvdG8gZmFpbDsKKwl9CisKKwlzYy0+c2NfcmVzcF9idWYgPSBtYWxsb2Moc2MtPnNjX2N0cmxf
bGVuLCBNX0RFVkJVRiwgTV9XQUlUT0spOworCXNjLT5zY19jdHJsX21zZyA9IG1hbGxvYyhzYy0+
c2NfY3RybF9sZW4sIE1fREVWQlVGLCBNX1dBSVRPSyk7CisKKwlzYy0+c2NfaW5mby5yZWdzdGF0
ZSA9IE1CSU1fUkVHU1RBVEVfVU5LTk9XTjsKKwlzYy0+c2NfaW5mby5waW5fYXR0ZW1wdHNfbGVm
dCA9IFVNQl9WQUxVRV9VTktOT1dOOworCXNjLT5zY19pbmZvLnJzc2kgPSBVTUJfVkFMVUVfVU5L
Tk9XTjsKKwlzYy0+c2NfaW5mby5iZXIgPSBVTUJfVkFMVUVfVU5LTk9XTjsKKworCS8qIGRlZmVy
IGF0dGFjaGluZyB0aGUgaW50ZXJmYWNlICovCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJ
dW1iX2FkZF90YXNrKHNjLCB1bWJfYXR0YWNoX3Rhc2ssCisJCQkmc2MtPnNjX3Byb2NfYXR0YWNo
X3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX2F0dGFjaF90YXNrWzFdLmhkciwgMCk7CisJ
bXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCXJldHVybiAoMCk7CisKK2ZhaWw6CisJdW1i
X2RldGFjaChzYy0+c2NfZGV2KTsKKwlyZXR1cm4gKEVOWElPKTsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9hdHRhY2hfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7CisJc3RydWN0IHVt
Yl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1Y3QgdW1iX3NvZnRj
ICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZwOworCisJbXR4X3VubG9jaygmc2Mt
PnNjX211dGV4KTsKKworCS8qIGluaXRpYWxpemUgdGhlIGludGVyZmFjZSAqLworCUNVUlZORVRf
U0VUX1FVSUVUKHZuZXQwKTsKKwlzYy0+c2NfaWYgPSBpZnAgPSBpZl9hbGxvYyhJRlRfTUJJTSk7
CisJaWZfaW5pdG5hbWUoaWZwLCAidW1iIiwgZGV2aWNlX2dldF91bml0KHNjLT5zY19kZXYpKTsK
KworCWlmcC0+aWZfc29mdGMgPSBzYzsKKwlpZnAtPmlmX2ZsYWdzID0gSUZGX1NJTVBMRVggfCBJ
RkZfTVVMVElDQVNUIHwgSUZGX1BPSU5UT1BPSU5UOworCWlmcC0+aWZfaW9jdGwgPSB1bWJfaW9j
dGw7CisJaWZwLT5pZl9pbnB1dCA9IHVtYl9pbnB1dDsKKwlpZnAtPmlmX291dHB1dCA9IHVtYl9v
dXRwdXQ7CisJaWZwLT5pZl9zdGFydCA9IHVtYl9zdGFydDsKKwlpZnAtPmlmX2luaXQgPSB1bWJf
aW5pdDsKKworI2lmIDAKKwlpZnAtPmlmX3dhdGNoZG9nID0gdW1iX3dhdGNoZG9nOworI2VuZGlm
CisJaWZwLT5pZl9saW5rX3N0YXRlID0gTElOS19TVEFURV9ET1dOOworCWlmbWVkaWFfaW5pdCgm
c2MtPnNjX2ltLCAwLCB1bWJfbWVkaWFjaGFuZ2UsIHVtYl9tZWRpYXN0YXR1cyk7CisJaWZtZWRp
YV9hZGQoJnNjLT5zY19pbSwgSUZNX05PTkUgfCBJRk1fQVVUTywgMCwgTlVMTCk7CisKKwlpZnAt
PmlmX2FkZHJsZW4gPSAwOworCWlmcC0+aWZfaGRybGVuID0gc2l6ZW9mIChzdHJ1Y3QgbmNtX2hl
YWRlcjE2KSArCisJICAgIHNpemVvZiAoc3RydWN0IG5jbV9wb2ludGVyMTYpOworCS8qIFhYWCBo
YXJkLWNvZGVkIGF0bSAqLworCWlmcC0+aWZfbXR1ID0gTUlOKDIwNDgsIHNjLT5zY19tYXhwa3Rs
ZW4pOworCUlGUV9TRVRfTUFYTEVOKCZpZnAtPmlmX3NuZCwgaWZxbWF4bGVuKTsKKwlpZnAtPmlm
X3NuZC5pZnFfZHJ2X21heGxlbiA9IGlmcW1heGxlbjsKKwlJRlFfU0VUX1JFQURZKCZpZnAtPmlm
X3NuZCk7CisKKwkvKiBhdHRhY2ggdGhlIGludGVyZmFjZSAqLworCWlmX2F0dGFjaChpZnApOwor
CWJwZmF0dGFjaChpZnAsIERMVF9SQVcsIDApOworCisJc2MtPnNjX2F0dGFjaGVkID0gMTsKKwor
CUNVUlZORVRfUkVTVE9SRSgpOworCisJdW1iX2luaXQoc2MpOworCW10eF9sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworfQorCitzdGF0aWMgaW50Cit1bWJfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlz
dHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZu
ZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJdXNiX3Byb2NfZHJhaW4oJnNjLT5zY190YXNrcXVl
dWUpOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJaWYgKGlmcCAhPSBOVUxMICYmIChp
ZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCXVtYl9kb3duKHNjLCAxKTsK
Kwl1bWJfY2xvc2Uoc2MpOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisKKwl1c2JkX3Ry
YW5zZmVyX3Vuc2V0dXAoc2MtPnNjX3hmZXIsIFVNQl9OX1RSQU5TRkVSKTsKKworCWZyZWUoc2Mt
PnNjX3R4X2J1ZiwgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3J4X2J1ZiwgTV9ERVZCVUYpOwor
CisJdXNiX2NhbGxvdXRfZHJhaW4oJnNjLT5zY19zdGF0ZWNoZ190aW1lcik7CisKKwl1c2JfcHJv
Y19mcmVlKCZzYy0+c2NfdGFza3F1ZXVlKTsKKworCW10eF9kZXN0cm95KCZzYy0+c2NfbXV0ZXgp
OworCisJZnJlZShzYy0+c2NfY3RybF9tc2csIE1fREVWQlVGKTsKKwlmcmVlKHNjLT5zY19yZXNw
X2J1ZiwgTV9ERVZCVUYpOworCisJaWYgKGlmcCAhPSBOVUxMICYmIGlmcC0+aWZfc29mdGMpIHsK
KwkJaWZtZWRpYV9yZW1vdmVhbGwoJnNjLT5zY19pbSk7CisJfQorCWlmIChzYy0+c2NfYXR0YWNo
ZWQpIHsKKwkJYnBmZGV0YWNoKGlmcCk7CisJCWlmX2RldGFjaChpZnApOworCQlpZl9mcmVlKGlm
cCk7CisJCXNjLT5zY19pZiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX2NvbmZp
ZyAqIGNvbmZpZykKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisJc3RydWN0IG5jbV9u
dGJfcGFyYW1ldGVycyBucDsKKwl1c2JfZXJyb3JfdCBlcnJvcjsKKworCS8qIFF1ZXJ5IE5UQiB0
cmFuZmVycyBzaXplcyAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRfUkVBRF9DTEFTU19JTlRF
UkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0gTkNNX0dFVF9OVEJfUEFSQU1FVEVSUzsKKwlVU0VUVyhy
ZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9pZmFjZW5vKTsK
KwlVU0VUVyhyZXEud0xlbmd0aCwgc2l6ZW9mIChucCkpOworCW10eF9sb2NrKCZzYy0+c2NfbXV0
ZXgpOworCWVycm9yID0gdXNiZF9kb19yZXF1ZXN0KHNjLT5zY191ZGV2LCAmc2MtPnNjX211dGV4
LCAmcmVxLCAmbnApOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJaWYgKGVycm9yID09
IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04gJiYKKwkgICAgVUdFVFcobnAud0xlbmd0aCkgPT0g
c2l6ZW9mIChucCkpIHsKKwkJY29uZmlnW1VNQl9CVUxLX1JYXS5idWZzaXplID0gVUdFVERXKG5w
LmR3TnRiSW5NYXhTaXplKTsKKwkJY29uZmlnW1VNQl9CVUxLX1RYXS5idWZzaXplID0gVUdFVERX
KG5wLmR3TnRiT3V0TWF4U2l6ZSk7CisJfQorCXNjLT5zY19yeF9idWZzeiA9IGNvbmZpZ1tVTUJf
QlVMS19SWF0uYnVmc2l6ZTsKKwlzYy0+c2NfdHhfYnVmc3ogPSBjb25maWdbVU1CX0JVTEtfVFhd
LmJ1ZnNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9oYW5kbGVfcmVxdWVzdChkZXZpY2VfdCBk
ZXYsCisgICAgY29uc3Qgdm9pZCAqcHJlcSwgdm9pZCAqKnBwdHIsIHVpbnQxNl90ICpwbGVuLAor
ICAgIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCAqcHN0YXRlKQoreworCS8qIEZJWE1FIHJlYWxs
eSBpbXBsZW1lbnQgKi8KKworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50Cit1bWJf
c3VzcGVuZChkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3ByaW50ZihkZXYsICJTdXNwZW5kaW5n
XG4iKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit1bWJfcmVzdW1lKGRldmljZV90
IGRldikKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlJlc3VtaW5nXG4iKTsKKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgaW50Cit1bWJfZGVhY3RpdmF0ZShkZXZpY2VfdCBkZXYpCit7CisJc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGlmbmV0
ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChpZnAgIT0gTlVMTCkgeworCQlpZl9kZWFkKGlm
cCk7CisJfQorCXNjLT5zY19keWluZyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk
Cit1bWJfY2xvc2VfYnVsa3BpcGVzKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBp
Zm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+KElGRl9E
UlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElWRSk7CisKKwl1bWJfcnhmbHVzaChzYyk7CisJdW1i
X3R4Zmx1c2goc2MpOworCisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyW1VNQl9CVUxL
X1JYXSk7CisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyW1VNQl9CVUxLX1RYXSk7Cit9
CisKK3N0YXRpYyBpbnQKK3VtYl9pb2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9sb25nIGNtZCwg
Y2FkZHJfdCBkYXRhKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsK
KwlzdHJ1Y3QgaW5faWZhZGRyICppYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopZGF0YTsKKwlzdHJ1
Y3QgaWZyZXEgKmlmciA9IChzdHJ1Y3QgaWZyZXEgKilkYXRhOworCWludCBlcnJvciA9IDA7CisJ
c3RydWN0IHVtYl9wYXJhbWV0ZXIgbXA7CisKKwlpZiAoc2MtPnNjX2R5aW5nKQorCQlyZXR1cm4g
RUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZBRERSOgorCQlzd2l0Y2ggKGlh
LT5pYV9pZmEuaWZhX2FkZHItPnNhX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlicmVh
azsKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJYnJlYWs7CisjZW5kaWYgLyog
SU5FVDYgKi8KKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQkJYnJlYWs7
CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJCW10eF9sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworCQl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJCSZzYy0+c2Nf
cHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCQkmc2MtPnNjX3Byb2Nfc3RhdGVfdGFza1sxXS5o
ZHIsIDEpOworCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQlicmVhazsKKwljYXNlIFNJ
T0NHVU1CSU5GTzoKKwkJZXJyb3IgPSBjb3B5b3V0KCZzYy0+c2NfaW5mbywgaWZyLT5pZnJfaWZy
dS5pZnJ1X2RhdGEsCisJCSAgICBzaXplb2YgKHNjLT5zY19pbmZvKSk7CisJCWJyZWFrOworCWNh
c2UgU0lPQ1NVTUJQQVJBTToKKwkJZXJyb3IgPSBwcml2X2NoZWNrKGN1cnRocmVhZCwgUFJJVl9O
RVRfU0VUSUZQSFlTKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJaWYgKChlcnJvciA9
IGNvcHlpbihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJm1wLCBzaXplb2YgKG1wKSkpICE9IDAp
CisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gdW1iX3NldHBpbihzYywgbXAub3AsIG1wLmlz
X3B1aywgbXAucGluLCBtcC5waW5sZW4sCisJCSAgICBtcC5uZXdwaW4sIG1wLm5ld3Bpbmxlbikp
ICE9IDApCisJCQlicmVhazsKKworCQlpZiAobXAuYXBubGVuIDwgMCB8fCBtcC5hcG5sZW4gPiBz
aXplb2YgKHNjLT5zY19pbmZvLmFwbikpIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7
CisJCX0KKwkJc2MtPnNjX3JvYW1pbmcgPSBtcC5yb2FtaW5nID8gMSA6IDA7CisJCW1lbXNldChz
Yy0+c2NfaW5mby5hcG4sIDAsIHNpemVvZiAoc2MtPnNjX2luZm8uYXBuKSk7CisJCW1lbWNweShz
Yy0+c2NfaW5mby5hcG4sIG1wLmFwbiwgbXAuYXBubGVuKTsKKwkJc2MtPnNjX2luZm8uYXBubGVu
ID0gbXAuYXBubGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8udXNlcm5hbWUsIDAsIHNpemVvZiAo
c2MtPnNjX2luZm8udXNlcm5hbWUpKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZvLnVzZXJuYW1lLCBt
cC51c2VybmFtZSwgbXAudXNlcm5hbWVsZW4pOworCQlzYy0+c2NfaW5mby51c2VybmFtZWxlbiA9
IG1wLnVzZXJuYW1lbGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8ucGFzc3dvcmQsIDAsIHNpemVv
ZiAoc2MtPnNjX2luZm8ucGFzc3dvcmQpKTsKKwkJbWVtY3B5KHNjLT5zY19pbmZvLnBhc3N3b3Jk
LCBtcC5wYXNzd29yZCwgbXAucGFzc3dvcmRsZW4pOworCQlzYy0+c2NfaW5mby5wYXNzd29yZGxl
biA9IG1wLnBhc3N3b3JkbGVuOworCQlzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzID0gbXAu
cHJlZmVycmVkY2xhc3NlczsKKwkJdW1iX3NldGRhdGFjbGFzcyhzYyk7CisJCWJyZWFrOworCWNh
c2UgU0lPQ0dVTUJQQVJBTToKKwkJbWVtc2V0KCZtcCwgMCwgc2l6ZW9mIChtcCkpOworCQltZW1j
cHkobXAuYXBuLCBzYy0+c2NfaW5mby5hcG4sIHNjLT5zY19pbmZvLmFwbmxlbik7CisJCW1wLmFw
bmxlbiA9IHNjLT5zY19pbmZvLmFwbmxlbjsKKwkJbXAucm9hbWluZyA9IHNjLT5zY19yb2FtaW5n
OworCQltcC5wcmVmZXJyZWRjbGFzc2VzID0gc2MtPnNjX2luZm8ucHJlZmVycmVkY2xhc3NlczsK
KwkJZXJyb3IgPSBjb3B5b3V0KCZtcCwgaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsIHNpemVvZiAo
bXApKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBEb2VzIHRoaXMgaW5jbHVk
ZSB0aGUgTkNNIGhlYWRlcnMgYW5kIHRhaWw/ICovCisJCWlmIChpZnItPmlmcl9tdHUgPiBpZnAt
PmlmX210dSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZnAtPmlm
X210dSA9IGlmci0+aWZyX210dTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DQUlGQUREUjoKKwljYXNl
IFNJT0NTSUZEU1RBRERSOgorCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lPQ0RFTE1VTFRJ
OgorCQlicmVhazsKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyb3IgPSBpZm1lZGlhX2lvY3Rs
KGlmcCwgaWZyLCAmc2MtPnNjX2ltLCBjbWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJv
ciA9IEVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMg
dm9pZAordW1iX2luaXQodm9pZCAqYXJnKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gYXJn
OworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3Rh
cnRfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGFydF90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2Nf
cHJvY19zdGFydF90YXNrWzFdLmhkciwgMCk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsK
K30KKworc3RhdGljIHZvaWQKK3VtYl9pbnB1dChzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1i
dWYgKm0pCit7CisJc3RydWN0IG1idWYgKm1uOworCisJd2hpbGUgKG0pIHsKKwkJbW4gPSBtLT5t
X25leHRwa3Q7CisJCW0tPm1fbmV4dHBrdCA9IE5VTEw7CisKKwkJQlBGX01UQVAoaWZwLCBtKTsK
KworCQluZXRpc3JfZGlzcGF0Y2goTkVUSVNSX0lQLCBtKTsKKwkJbSA9IG1uOworCX0KK30KKwor
c3RhdGljIGludAordW1iX291dHB1dChzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0s
IGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHN0LAorICAgIHN0cnVjdCByb3V0ZSAqcnRwKQorewor
CWludCBlcnJvcjsKKworCURQUklOVEZOKDEwLCAiJXM6IGVudGVyXG4iLCBfX2Z1bmNfXyk7CisK
Kwlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2
OgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZgorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7
CisKKwkJLyogc2lsZW50bHkgZHJvcCBkaGNsaWVudCBwYWNrZXRzICovCisJY2FzZSBBRl9VTlNQ
RUM6CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoMCk7CisKKwkJLyogZHJvcCBvdGhlciBwYWNr
ZXQgdHlwZXMgKi8KKwlkZWZhdWx0OgorCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gKEVBRk5PU1VQ
UE9SVCk7CisJfQorCisJLyoKKwkgKiBRdWV1ZSBtZXNzYWdlIG9uIGludGVyZmFjZSwgYW5kIHN0
YXJ0IG91dHB1dCBpZiBpbnRlcmZhY2UKKwkgKiBub3QgeWV0IGFjdGl2ZS4KKwkgKi8KKwllcnJv
ciA9IChpZnAtPmlmX3RyYW5zbWl0KShpZnAsIG0pOworCWlmIChlcnJvcikgeworCQlpZl9pbmNf
Y291bnRlcihpZnAsIElGQ09VTlRFUl9PRVJST1JTLCAxKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsK
Kwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXJ0KHN0cnVjdCBp
Zm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKwor
CWlmIChzYy0+c2NfZHlpbmcgfHwgIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklO
RykpCisJCXJldHVybjsKKworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXVzYmRfdHJhbnNm
ZXJfc3RhcnQoc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKKwltdHhfdW5sb2NrKCZzYy0+c2Nf
bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3N0YXJ0X3Rhc2soc3RydWN0IHVzYl9wcm9j
X21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3QgdW1iX3Rhc2sg
Kiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCisJRFBSSU5URigiJXMoKVxuIiwgX19mdW5jX18pOworCisJ
bXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZnAtPmlmX2Rydl9mbGFn
cyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwkvKiBzdGFydCBpbnRlcnJ1cHQgdHJhbnNmZXIgKi8K
Kwl1c2JkX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVyW1VNQl9JTlRSX1JYXSk7CisKKwl1bWJf
b3BlbihzYyk7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZAordW1iX3dhdGNoZG9nKHN0cnVjdCBp
Zm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKwor
CWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVybjsKKworCWlmX2luY19jb3VudGVyKGlmcCwgSUZD
T1VOVEVSX09FUlJPUlMsIDEpOworCWRldmljZV9wcmludGYoc2MtPnNjX2RldiwgIndhdGNoZG9n
IHRpbWVvdXRcbiIpOworCXVzYmRfdHJhbnNmZXJfZHJhaW4oc2MtPnNjX3hmZXJbVU1CX0JVTEtf
VFhdKTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK3VtYl9zdGF0ZWNoZ190
aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGFyZzsKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4
LCBNQV9PV05FRCk7CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUgIT0gTUJJTV9SRUdTVEFU
RV9ST0FNSU5HIHx8IHNjLT5zY19yb2FtaW5nKQorCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9E
RUJVRykKKwkJCWxvZyhMT0dfREVCVUcsICIlczogc3RhdGUgY2hhbmdlIHRpbWVvdXRcbiIsCisJ
CQkJCURFVk5BTShzYykpOworCisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3RhdGVfdGFzaywKKwkJ
CSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90
YXNrWzFdLmhkciwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9tZWRpYWNoYW5nZShzdHJ1Y3Qg
aWZuZXQgKiBpZnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfbWVkaWFz
dGF0dXMoc3RydWN0IGlmbmV0ICogaWZwLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqIGltcikKK3sKKwlz
d2l0Y2ggKGlmcC0+aWZfbGlua19zdGF0ZSkgeworCWNhc2UgTElOS19TVEFURV9VUDoKKwkJaW1y
LT5pZm1fc3RhdHVzID0gSUZNX0FWQUxJRCB8IElGTV9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2Ug
TElOS19TVEFURV9ET1dOOgorCQlpbXItPmlmbV9zdGF0dXMgPSBJRk1fQVZBTElEOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQlpbXItPmlmbV9zdGF0dXMgPSAwOworCQlicmVhazsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfYWRkX3Rhc2soc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVzYl9wcm9j
X2NhbGxiYWNrX3QgY2FsbGJhY2ssCisJCXN0cnVjdCB1c2JfcHJvY19tc2cgKnQwLCBzdHJ1Y3Qg
dXNiX3Byb2NfbXNnICp0MSwgaW50IHN5bmMpCit7CisJc3RydWN0IHVtYl90YXNrICogdGFzazsK
KworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJaWYgKHVzYl9wcm9j
X2lzX2dvbmUoJnNjLT5zY190YXNrcXVldWUpKSB7CisJCXJldHVybjsKKwl9CisKKwl0YXNrID0g
dXNiX3Byb2NfbXNpZ25hbCgmc2MtPnNjX3Rhc2txdWV1ZSwgdDAsIHQxKTsKKworCXRhc2stPmhk
ci5wbV9jYWxsYmFjayA9IGNhbGxiYWNrOworCXRhc2stPnNjID0gc2M7CisKKwlpZiAoc3luYykg
eworCQl1c2JfcHJvY19td2FpdCgmc2MtPnNjX3Rhc2txdWV1ZSwgdDAsIHQxKTsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfbmV3c3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGVudW0gdW1i
X3N0YXRlIG5ld3N0YXRlLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRf
SUZQKHNjKTsKKworCWlmIChuZXdzdGF0ZSA9PSBzYy0+c2Nfc3RhdGUpCisJCXJldHVybjsKKwlp
ZiAoKChmbGFncyAmIFVNQl9OU19ET05UX0RST1ApICYmIG5ld3N0YXRlIDwgc2MtPnNjX3N0YXRl
KSB8fAorCSAgICAoKGZsYWdzICYgVU1CX05TX0RPTlRfUkFJU0UpICYmIG5ld3N0YXRlID4gc2Mt
PnNjX3N0YXRlKSkKKwkJcmV0dXJuOworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQor
CQlsb2coTE9HX0RFQlVHLCAiJXM6IHN0YXRlIGdvaW5nICVzIGZyb20gJyVzJyB0byAnJXMnXG4i
LAorCQkgICAgREVWTkFNKHNjKSwgbmV3c3RhdGUgPiBzYy0+c2Nfc3RhdGUgPyAidXAiIDogImRv
d24iLAorCQkgICAgdW1iX2lzdGF0ZShzYy0+c2Nfc3RhdGUpLCB1bWJfaXN0YXRlKG5ld3N0YXRl
KSk7CisJc2MtPnNjX3N0YXRlID0gbmV3c3RhdGU7CisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3Rh
dGVfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2Nf
cHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhdGVf
dGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7CisJc3RydWN0IHVtYl90YXNrICp0YXNr
ID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHRhc2st
PnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJc3RydWN0IGlmcmVxIGlm
cjsKKwlpbnQJIHN0YXRlOworCisJRFBSSU5URigiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYg
KHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RBVEVfUk9BTUlORyAmJiAhc2MtPnNj
X3JvYW1pbmcpIHsKKwkJLyoKKwkJICogUXVlcnkgdGhlIHJlZ2lzdHJhdGlvbiBzdGF0ZSB1bnRp
bCB3ZSdyZSB3aXRoIHRoZSBob21lCisJCSAqIG5ldHdvcmsgYWdhaW4uCisJCSAqLworCQl1bWJf
Y21kKHNjLCBNQklNX0NJRF9SRUdJU1RFUl9TVEFURSwgTUJJTV9DTURPUF9RUlksIE5VTEwsIDAp
OworCQlyZXR1cm47CisJfQorCisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApCisJCXVtYl91
cChzYyk7CisJZWxzZQorCQl1bWJfZG93bihzYywgMCk7CisKKwlzdGF0ZSA9IChzYy0+c2Nfc3Rh
dGUgPT0gVU1CX1NfVVApID8gTElOS19TVEFURV9VUCA6IExJTktfU1RBVEVfRE9XTjsKKwlpZiAo
aWZwLT5pZl9saW5rX3N0YXRlICE9IHN0YXRlKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZG
X0RFQlVHKQorCQkJbG9nKExPR19ERUJVRywgIiVzOiBsaW5rIHN0YXRlIGNoYW5nZWQgZnJvbSAl
cyB0byAlc1xuIiwKKwkJCSAgICBERVZOQU0oc2MpLAorCQkJICAgIChpZnAtPmlmX2xpbmtfc3Rh
dGUgPT0gTElOS19TVEFURV9VUCkKKwkJCSAgICA/ICJ1cCIgOiAiZG93biIsCisJCQkgICAgKHN0
YXRlID09IExJTktfU1RBVEVfVVApID8gInVwIiA6ICJkb3duIik7CisJCWlmcC0+aWZfbGlua19z
dGF0ZSA9IHN0YXRlOworCQlpZiAoc3RhdGUgIT0gTElOS19TVEFURV9VUCkgeworCQkJLyoKKwkJ
CSAqIFB1cmdlIGFueSBleGlzdGluZyBhZGRyZXNzZXMKKwkJCSAqLworCQkJbWVtc2V0KHNjLT5z
Y19pbmZvLmlwdjRkbnMsIDAsCisJCQkgICAgc2l6ZW9mIChzYy0+c2NfaW5mby5pcHY0ZG5zKSk7
CisJCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQkJaWYgKGluX2NvbnRyb2woTlVMTCwg
U0lPQ0dJRkFERFIsIChjYWRkcl90KSZpZnIsIGlmcCwgY3VydGhyZWFkKSA9PSAwICYmCisJCQkg
ICAgc2F0b3NpbigmaWZyLmlmcl9hZGRyKS0+c2luX2FkZHIuc19hZGRyICE9CisJCQkgICAgSU5B
RERSX0FOWSkgeworCQkJCWluX2NvbnRyb2woTlVMTCwgU0lPQ0RJRkFERFIsIChjYWRkcl90KSZp
ZnIsIGlmcCwgY3VydGhyZWFkKTsKKwkJCX0KKwkJCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOwor
CQl9CisJCWlmX2xpbmtfc3RhdGVfY2hhbmdlKGlmcCwgc3RhdGUpOworCX0KK30KKworc3RhdGlj
IHZvaWQKK3VtYl91cChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IEdFVF9JRlAoc2MpOworCisJc3dpdGNoIChzYy0+c2Nfc3RhdGUpIHsKKwljYXNlIFVNQl9T
X0RPV046CisJCURQUklOVEYoImluaXQ6IG9wZW5pbmcgLi4uXG4iKTsKKwkJdW1iX29wZW4oc2Mp
OworCQlicmVhazsKKwljYXNlIFVNQl9TX09QRU46CisJCWlmIChzYy0+c2NfZmxhZ3MgJiBVTUJG
TEdfRkNDX0FVVEhfUkVRVUlSRUQpIHsKKwkJCWlmIChzYy0+c2NfY2lkID09IC0xKSB7CisJCQkJ
RFBSSU5URigiaW5pdDogYWxsb2NhdGluZyBDSUQgLi4uXG4iKTsKKwkJCQl1bWJfYWxsb2NhdGVf
Y2lkKHNjKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCXVtYl9uZXdzdGF0ZShzYywgVU1C
X1NfQ0lELCBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJfSBlbHNlIHsKKwkJCURQUklOVEYoImluaXQ6
IHR1cm5pbmcgcmFkaW8gb24gLi4uXG4iKTsKKwkJCXVtYl9yYWRpbyhzYywgMSk7CisJCQlicmVh
azsKKwkJfQorCQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIFVNQl9TX0NJRDoKKwkJRFBSSU5URigi
aW5pdDogc2VuZGluZyBGQ0MgYXV0aCAuLi5cbiIpOworCQl1bWJfc2VuZF9mY2NfYXV0aChzYyk7
CisJCWJyZWFrOworCWNhc2UgVU1CX1NfUkFESU86CisJCURQUklOVEYoImluaXQ6IGNoZWNraW5n
IFNJTSBzdGF0ZSAuLi5cbiIpOworCQl1bWJfY21kKHNjLCBNQklNX0NJRF9TVUJTQ1JJQkVSX1JF
QURZX1NUQVRVUywgTUJJTV9DTURPUF9RUlksCisJCSAgICBOVUxMLCAwKTsKKwkJYnJlYWs7CisJ
Y2FzZSBVTUJfU19TSU1SRUFEWToKKwkJRFBSSU5URigiaW5pdDogYXR0YWNoaW5nIC4uLlxuIik7
CisJCXVtYl9wYWNrZXRfc2VydmljZShzYywgMSk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfQVRU
QUNIRUQ6CisJCXNjLT5zY190eF9zZXEgPSAwOworCQlEUFJJTlRGKCJpbml0OiBjb25uZWN0aW5n
IC4uLlxuIik7CisJCXVtYl9jb25uZWN0KHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19DT05O
RUNURUQ6CisJCURQUklOVEYoImluaXQ6IGdldHRpbmcgSVAgY29uZmlnIC4uLlxuIik7CisJCXVt
Yl9xcnlfaXBjb25maWcoc2MpOworCQlicmVhazsKKwljYXNlIFVNQl9TX1VQOgorCQlEUFJJTlRG
KCJpbml0OiByZWFjaGVkIHN0YXRlIFVQXG4iKTsKKwkJaWYgKCEoaWZwLT5pZl9mbGFncyAmIElG
Rl9EUlZfUlVOTklORykpIHsKKwkJCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklO
RzsKKwkJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisJCQl1bWJfcngo
c2MpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoc2MtPnNjX3N0YXRlIDwgVU1CX1NfVVApCisJ
CXVzYl9jYWxsb3V0X3Jlc2V0KCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIsCisJCSAgICBVTUJfU1RB
VEVfQ0hBTkdFX1RJTUVPVVQgKiBoeiwgdW1iX3N0YXRlY2hnX3RpbWVvdXQsIHNjKTsKKwllbHNl
IHsKKwkJdXNiX2NhbGxvdXRfc3RvcCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyKTsKKwl9CisJcmV0
dXJuOworfQorCitzdGF0aWMgdm9pZAordW1iX2Rvd24oc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGlu
dCBmb3JjZSkKK3sKKwl1bWJfY2xvc2VfYnVsa3BpcGVzKHNjKTsKKworCXN3aXRjaCAoc2MtPnNj
X3N0YXRlKSB7CisJY2FzZSBVTUJfU19VUDoKKwljYXNlIFVNQl9TX0NPTk5FQ1RFRDoKKwkJRFBS
SU5URigic3RvcDogZGlzY29ubmVjdGluZyAuLi5cbiIpOworCQl1bWJfZGlzY29ubmVjdChzYyk7
CisJCWlmICghZm9yY2UpCisJCQlicmVhazsKKwkJLypGQUxMVEhST1VHSCovCisJY2FzZSBVTUJf
U19BVFRBQ0hFRDoKKwkJRFBSSU5URigic3RvcDogZGV0YWNoaW5nIC4uLlxuIik7CisJCXVtYl9w
YWNrZXRfc2VydmljZShzYywgMCk7CisJCWlmICghZm9yY2UpCisJCQlicmVhazsKKwkJLypGQUxM
VEhST1VHSCovCisJY2FzZSBVTUJfU19TSU1SRUFEWToKKwljYXNlIFVNQl9TX1JBRElPOgorCQlE
UFJJTlRGKCJzdG9wOiB0dXJuaW5nIHJhZGlvIG9mZiAuLi5cbiIpOworCQl1bWJfcmFkaW8oc2Ms
IDApOworCQlpZiAoIWZvcmNlKQorCQkJYnJlYWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2Ug
VU1CX1NfQ0lEOgorCWNhc2UgVU1CX1NfT1BFTjoKKwljYXNlIFVNQl9TX0RPV046CisJCS8qIERv
IG5vdCBjbG9zZSB0aGUgZGV2aWNlICovCisJCURQUklOVEYoInN0b3A6IHJlYWNoZWQgc3RhdGUg
RE9XTlxuIik7CisJCWJyZWFrOworCX0KKwlpZiAoZm9yY2UpCisJCXNjLT5zY19zdGF0ZSA9IFVN
Ql9TX09QRU47CisKKwlpZiAoc2MtPnNjX3N0YXRlID4gVU1CX1NfT1BFTikKKwkJdXNiX2NhbGxv
dXRfcmVzZXQoJnNjLT5zY19zdGF0ZWNoZ190aW1lciwKKwkJICAgIFVNQl9TVEFURV9DSEFOR0Vf
VElNRU9VVCAqIGh6LCB1bWJfc3RhdGVjaGdfdGltZW91dCwgc2MpOworCWVsc2UKKwkJdXNiX2Nh
bGxvdXRfc3RvcCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9nZXRfcmVzcG9uc2VfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7CisJc3RydWN0
IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYyA9IHRhc2stPnNjOworCWludAkgbGVuOworCisJRFBSSU5URigiJXMoKVxuIiwgX19m
dW5jX18pOworCS8qCisJICogRnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gc2VuZCBvbiBSRVNQT05T
RV9BVkFJTEFCTEUgbm90aWZpY2F0aW9uIGZvcgorCSAqIGVhY2ggZW5jYXBzdWxhdGVkIHJlc3Bv
bnNlIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBob3N0LgorCSAqIEJ1dCBvZiBjb3Vy
c2UsIHdlIGNhbiByZWNlaXZlIG11bHRpcGxlIG5vdGlmaWNhdGlvbnMgYmVmb3JlIHRoZQorCSAq
IHJlc3BvbnNlIHRhc2sgaXMgcnVuLgorCSAqLworCXdoaWxlIChzYy0+c2NfbnJlc3AgPiAwKSB7
CisJCS0tc2MtPnNjX25yZXNwOworCQlsZW4gPSBzYy0+c2NfY3RybF9sZW47CisJCWlmICh1bWJf
Z2V0X2VuY2FwX3Jlc3BvbnNlKHNjLCBzYy0+c2NfcmVzcF9idWYsICZsZW4pKQorCQkJdW1iX2Rl
Y29kZV9yZXNwb25zZShzYywgc2MtPnNjX3Jlc3BfYnVmLCBsZW4pOworCX0KK30KKworc3RhdGlj
IHZvaWQKK3VtYl9kZWNvZGVfcmVzcG9uc2Uoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKnJl
c3BvbnNlLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX21zZ2hkciAqaGRyID0gcmVzcG9uc2U7
CisJc3RydWN0IG1iaW1fZnJhZ21lbnRlZF9tc2dfaGRyICpmcmFnaGRyOworCXVpbnQzMl90IHR5
cGU7CisKKwlEUFJJTlRGTigzLCAiZ290IHJlc3BvbnNlOiBsZW4gJWRcbiIsIGxlbik7CisJRERV
TVBOKDQsIHJlc3BvbnNlLCBsZW4pOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmhkcikgfHwgbGUz
MnRvaChoZHItPmxlbikgIT0gbGVuKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBwcm9iYWJseSBj
YW5jZWwgYSB0cmFuc2FjdGlvbiwgYnV0IHNpbmNlIHRoZQorCQkgKiBtZXNzYWdlIGlzIHRvbyBz
aG9ydCwgd2UgY2Fubm90IGRlY29kZSB0aGUgdHJhbnNhY3Rpb24KKwkJICogaWQgKHRpZCkgYW5k
IGhlbmNlIGRvbid0IGtub3csIHdob20gdG8gY2FuY2VsLiBNdXN0IHdhaXQKKwkJICogZm9yIHRo
ZSB0aW1lb3V0LgorCQkgKi8KKwkJRFBSSU5URigicmVjZWl2ZWQgc2hvcnQgcmVzcG9uc2UgKGxl
biAlZClcbiIsCisJCSAgICBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBYWFggRklY
TUU6IGlmIG1lc3NhZ2UgaXMgZnJhZ21lbnRlZCwgc3RvcmUgaXQgdW50aWwgbGFzdCBmcmFnCisJ
ICoJaXMgcmVjZWl2ZWQgYW5kIHRoZW4gcmUtYXNzZW1ibGUgYWxsIGZyYWdtZW50cy4KKwkgKi8K
Kwl0eXBlID0gbGUzMnRvaChoZHItPnR5cGUpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTUJJ
TV9JTkRJQ0FURV9TVEFUVVNfTVNHOgorCWNhc2UgTUJJTV9DT01NQU5EX0RPTkU6CisJCWZyYWdo
ZHIgPSByZXNwb25zZTsKKwkJaWYgKGxlMzJ0b2goZnJhZ2hkci0+ZnJhZy5uZnJhZykgIT0gMSkg
eworCQkJRFBSSU5URigiZGlzY2FyZGluZyBmcmFnbWVudGVkIG1lc3NhZ2VzXG4iKTsKKwkJCXJl
dHVybjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlEUFJJTlRG
KCI8LSByY3YgJXMgKHRpZCAldSlcbiIsIHVtYl9yZXF1ZXN0MnN0cih0eXBlKSwKKwkgICAgbGUz
MnRvaChoZHItPnRpZCkpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTUJJTV9GVU5DVElPTl9F
UlJPUl9NU0c6CisJY2FzZSBNQklNX0hPU1RfRVJST1JfTVNHOgorCXsKKwkJc3RydWN0IG1iaW1f
ZjJoX2hvc3RlcnIgKmU7CisJCWludAkgZXJyOworCisJCWlmIChsZW4gPj0gc2l6ZW9mICgqZSkp
IHsKKwkJCWUgPSByZXNwb25zZTsKKwkJCWVyciA9IGxlMzJ0b2goZS0+ZXJyKTsKKworCQkJRFBS
SU5URigiJXMgbWVzc2FnZSwgZXJyb3IgJXMgKHRpZCAldSlcbiIsCisJCQkgICAgdW1iX3JlcXVl
c3Qyc3RyKHR5cGUpLAorCQkJICAgIHVtYl9lcnJvcjJzdHIoZXJyKSwgbGUzMnRvaChoZHItPnRp
ZCkpOworCQkJaWYgKGVyciA9PSBNQklNX0VSUk9SX05PVF9PUEVORUQpCisJCQkJdW1iX25ld3N0
YXRlKHNjLCBVTUJfU19ET1dOLCAwKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBNQklNX0lO
RElDQVRFX1NUQVRVU19NU0c6CisJCXVtYl9oYW5kbGVfaW5kaWNhdGVfc3RhdHVzX21zZyhzYywg
cmVzcG9uc2UsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9PUEVOX0RPTkU6CisJCXVtYl9o
YW5kbGVfb3BlbmRvbmVfbXNnKHNjLCByZXNwb25zZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBN
QklNX0NMT1NFX0RPTkU6CisJCXVtYl9oYW5kbGVfY2xvc2Vkb25lX21zZyhzYywgcmVzcG9uc2Us
IGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DT01NQU5EX0RPTkU6CisJCXVtYl9jb21tYW5k
X2RvbmUoc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRG
KCJkaXNjYXJkIG1lc3NhZ2UgJXNcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIodHlwZSkpOwor
CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaGFuZGxlX2luZGljYXRlX3N0YXR1
c19tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3Ry
dWN0IG1iaW1fZjJoX2luZGljYXRlX3N0YXR1cyAqbSA9IGRhdGE7CisJdWludDMyX3QgaW5mb2xl
bjsKKwl1aW50MzJfdCBjaWQ7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqbSkpIHsKKwkJRFBSSU5U
RigiZGlzY2FyZCBzaG9ydCAlcyBtZXNzYWdlXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3RyKGxl
MzJ0b2gobS0+aGRyLnR5cGUpKSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1lbWNtcChtLT5kZXZp
ZCwgdW1iX3V1aWRfYmFzaWNfY29ubmVjdCwgc2l6ZW9mIChtLT5kZXZpZCkpKSB7CisJCURQUklO
VEYoImRpc2NhcmQgJXMgbWVzc2FnZSBmb3Igb3RoZXIgVVVJRCAnJXMnXG4iLAorCQkgICAgdW1i
X3JlcXVlc3Qyc3RyKGxlMzJ0b2gobS0+aGRyLnR5cGUpKSwKKwkJICAgIHVtYl91dWlkMnN0ciht
LT5kZXZpZCkpOworCQlyZXR1cm47CisJfQorCWluZm9sZW4gPSBsZTMydG9oKG0tPmluZm9sZW4p
OworCWlmIChsZW4gPCBzaXplb2YgKCptKSArIGluZm9sZW4pIHsKKwkJRFBSSU5URigiZGlzY2Fy
ZCB0cnVuY2F0ZWQgJXMgbWVzc2FnZSAod2FudCAlZCwgZ290ICVkKVxuIiwKKwkJICAgIHVtYl9y
ZXF1ZXN0MnN0cihsZTMydG9oKG0tPmhkci50eXBlKSksCisJCSAgICAoaW50KXNpemVvZiAoKm0p
ICsgaW5mb2xlbiwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWNpZCA9IGxlMzJ0b2gobS0+Y2lk
KTsKKwlEUFJJTlRGKCJpbmRpY2F0ZSAlcyBzdGF0dXNcbiIsIHVtYl9jaWQyc3RyKGNpZCkpOwor
CXVtYl9kZWNvZGVfY2lkKHNjLCBjaWQsIG0tPmluZm8sIGluZm9sZW4pOworfQorCitzdGF0aWMg
dm9pZAordW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQg
KmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fZjJoX29wZW5jbG9zZWRvbmUgKnJlc3Ag
PSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMyX3Qgc3Rh
dHVzOworCisJc3RhdHVzID0gbGUzMnRvaChyZXNwLT5zdGF0dXMpOworCWlmIChzdGF0dXMgPT0g
TUJJTV9TVEFUVVNfU1VDQ0VTUykgeworCQlpZiAoc2MtPnNjX21heHNlc3Npb25zID09IDApIHsK
KwkJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX0RFVklDRV9DQVBTLCBNQklNX0NNRE9QX1FSWSwgTlVM
TCwKKwkJCSAgICAwKTsKKwkJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1BJTiwgTUJJTV9DTURPUF9R
UlksIE5VTEwsIDApOworCQkJdW1iX2NtZChzYywgTUJJTV9DSURfUkVHSVNURVJfU1RBVEUsIE1C
SU1fQ01ET1BfUVJZLAorCQkJICAgIE5VTEwsIDApOworCQl9CisJCXVtYl9uZXdzdGF0ZShzYywg
VU1CX1NfT1BFTiwgVU1CX05TX0RPTlRfRFJPUCk7CisJfSBlbHNlIGlmIChpZnAtPmlmX2ZsYWdz
ICYgSUZGX0RFQlVHKQorCQlsb2coTE9HX0VSUiwgIiVzOiBvcGVuIGVycm9yOiAlc1xuIiwgREVW
TkFNKHNjKSwKKwkJICAgIHVtYl9zdGF0dXMyc3RyKHN0YXR1cykpOworCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK3VtYl9oYW5kbGVfY2xvc2Vkb25lX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICpz
Yywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3NlZG9u
ZSAqcmVzcCA9IGRhdGE7CisJdWludDMyX3Qgc3RhdHVzOworCisJc3RhdHVzID0gbGUzMnRvaChy
ZXNwLT5zdGF0dXMpOworCWlmIChzdGF0dXMgPT0gTUJJTV9TVEFUVVNfU1VDQ0VTUykKKwkJdW1i
X25ld3N0YXRlKHNjLCBVTUJfU19ET1dOLCAwKTsKKwllbHNlCisJCURQUklOVEYoImNsb3NlIGVy
cm9yOiAlc1xuIiwKKwkJICAgIHVtYl9zdGF0dXMyc3RyKHN0YXR1cykpOworCXJldHVybjsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkCit1bWJfZ2V0aW5mb2J1ZihjaGFyICppbiwgaW50IGlubGVu
LCB1aW50MzJfdCBvZmZzLCB1aW50MzJfdCBzeiwKKyAgICB2b2lkICpvdXQsIHNpemVfdCBvdXRs
ZW4pCit7CisJb2ZmcyA9IGxlMzJ0b2gob2Zmcyk7CisJc3ogPSBsZTMydG9oKHN6KTsKKwlpZiAo
aW5sZW4gPj0gb2ZmcyArIHN6KSB7CisJCW1lbXNldChvdXQsIDAsIG91dGxlbik7CisJCW1lbWNw
eShvdXQsIGluICsgb2ZmcywgTUlOKHN6LCBvdXRsZW4pKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxp
bmUgaW50Cit1bWJfcGFkZGluZyh2b2lkICpkYXRhLCBpbnQgbGVuLCBzaXplX3Qgc3opCit7CisJ
Y2hhciAqcCA9IGRhdGE7CisJaW50IG5wID0gMDsKKworCXdoaWxlIChsZW4gPCBzeiAmJiAobGVu
ICUgNCkgIT0gMCkgeworCQkqcCsrID0gJ1wwJzsKKwkJbGVuKys7CisJCW5wKys7CisJfQorCXJl
dHVybiBucDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3VtYl9hZGRzdHIodm9pZCAqYnVmLCBz
aXplX3QgYnVmc3osIGludCAqb2Zmcywgdm9pZCAqc3RyLCBpbnQgc2xlbiwKKyAgICB1aW50MzJf
dCAqb2Zmc21lbWJlciwgdWludDMyX3QgKnNpemVtZW1iZXIpCit7CisJaWYgKCpvZmZzICsgc2xl
biA+IGJ1ZnN6KQorCQlyZXR1cm4gMDsKKworCSpzaXplbWVtYmVyID0gaHRvbGUzMigodWludDMy
X3Qpc2xlbik7CisJaWYgKHNsZW4gJiYgc3RyKSB7CisJCSpvZmZzbWVtYmVyID0gaHRvbGUzMigo
dWludDMyX3QpKm9mZnMpOworCQltZW1jcHkoKGNoYXIgKilidWYgKyAqb2Zmcywgc3RyLCBzbGVu
KTsKKwkJKm9mZnMgKz0gc2xlbjsKKwkJKm9mZnMgKz0gdW1iX3BhZGRpbmcoYnVmLCAqb2Zmcywg
YnVmc3opOworCX0gZWxzZQorCQkqb2Zmc21lbWJlciA9IGh0b2xlMzIoMCk7CisJcmV0dXJuIDE7
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaW5fbGVuMm1hc2soc3RydWN0IGluX2FkZHIgKm1hc2ss
IGludCBsZW4pCit7CisJaW50IGk7CisJdV9jaGFyICpwOworCisJcCA9ICh1X2NoYXIgKiltYXNr
OworCW1lbXNldChtYXNrLCAwLCBzaXplb2YgKCptYXNrKSk7CisJZm9yIChpID0gMDsgaSA8IGxl
biAvIDg7IGkrKykKKwkJcFtpXSA9IDB4ZmY7CisJaWYgKGxlbiAlIDgpCisJCXBbaV0gPSAoMHhm
ZjAwID4+IChsZW4gJSA4KSkgJiAweGZmOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3Jl
Z2lzdGVyX3N0YXRlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQor
eworCXN0cnVjdCBtYmltX2NpZF9yZWdpc3RyYXRpb25fc3RhdGVfaW5mbyAqcnMgPSBkYXRhOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgq
cnMpKQorCQlyZXR1cm4gMDsKKwlzYy0+c2NfaW5mby5ud2Vycm9yID0gbGUzMnRvaChycy0+bndl
cnJvcik7CisJc2MtPnNjX2luZm8ucmVnc3RhdGUgPSBsZTMydG9oKHJzLT5yZWdzdGF0ZSk7CisJ
c2MtPnNjX2luZm8ucmVnbW9kZSA9IGxlMzJ0b2gocnMtPnJlZ21vZGUpOworCXNjLT5zY19pbmZv
LmNlbGxjbGFzcyA9IGxlMzJ0b2gocnMtPmN1cmNlbGxjbGFzcyk7CisKKwkvKiBYWFggc2hvdWxk
IHdlIHJlbWVtYmVyIHRoZSBwcm92aWRlcl9pZD8gKi8KKwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBs
ZW4sIHJzLT5wcm92bmFtZV9vZmZzLCBycy0+cHJvdm5hbWVfc2l6ZSwKKwkgICAgc2MtPnNjX2lu
Zm8ucHJvdmlkZXIsIHNpemVvZiAoc2MtPnNjX2luZm8ucHJvdmlkZXIpKTsKKwl1bWJfZ2V0aW5m
b2J1ZihkYXRhLCBsZW4sIHJzLT5yb2FtaW5ndHh0X29mZnMsIHJzLT5yb2FtaW5ndHh0X3NpemUs
CisJICAgIHNjLT5zY19pbmZvLnJvYW1pbmd0eHQsIHNpemVvZiAoc2MtPnNjX2luZm8ucm9hbWlu
Z3R4dCkpOworCisJRFBSSU5URk4oMiwgIiVzLCBhdmFpbGNsYXNzIDB4JXgsIGNsYXNzIDB4JXgs
IHJlZ21vZGUgJWRcbiIsCisJICAgIHVtYl9yZWdzdGF0ZShzYy0+c2NfaW5mby5yZWdzdGF0ZSks
CisJICAgIGxlMzJ0b2gocnMtPmF2YWlsY2xhc3NlcyksIHNjLT5zY19pbmZvLmNlbGxjbGFzcywK
KwkgICAgc2MtPnNjX2luZm8ucmVnbW9kZSk7CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUg
PT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HICYmCisJICAgICFzYy0+c2Nfcm9hbWluZyAmJgorCSAg
ICBzYy0+c2NfaW5mby5hY3RpdmF0aW9uID09IE1CSU1fQUNUSVZBVElPTl9TVEFURV9BQ1RJVkFU
RUQpIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9HX0lORk8s
CisJCQkgICAgIiVzOiBkaXNjb25uZWN0aW5nIGZyb20gcm9hbWluZyBuZXR3b3JrXG4iLAorCQkJ
ICAgIERFVk5BTShzYykpOworCQl1bWJfZGlzY29ubmVjdChzYyk7CisJfQorCXJldHVybiAxOwor
fQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX2RldmljZXNfY2FwcyhzdHJ1Y3QgdW1iX3NvZnRj
ICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfZGV2aWNlX2Nh
cHMgKmRjID0gZGF0YTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpkYykpCisJCXJldHVybiAwOwor
CXNjLT5zY19tYXhzZXNzaW9ucyA9IGxlMzJ0b2goZGMtPm1heF9zZXNzaW9ucyk7CisJc2MtPnNj
X2luZm8uc3VwcG9ydGVkY2xhc3NlcyA9IGxlMzJ0b2goZGMtPmRhdGFjbGFzcyk7CisJdW1iX2dl
dGluZm9idWYoZGF0YSwgbGVuLCBkYy0+ZGV2aWRfb2ZmcywgZGMtPmRldmlkX3NpemUsCisJICAg
IHNjLT5zY19pbmZvLmRldmlkLCBzaXplb2YgKHNjLT5zY19pbmZvLmRldmlkKSk7CisJdW1iX2dl
dGluZm9idWYoZGF0YSwgbGVuLCBkYy0+ZndpbmZvX29mZnMsIGRjLT5md2luZm9fc2l6ZSwKKwkg
ICAgc2MtPnNjX2luZm8uZndpbmZvLCBzaXplb2YgKHNjLT5zY19pbmZvLmZ3aW5mbykpOworCXVt
Yl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgZGMtPmh3aW5mb19vZmZzLCBkYy0+aHdpbmZvX3NpemUs
CisJICAgIHNjLT5zY19pbmZvLmh3aW5mbywgc2l6ZW9mIChzYy0+c2NfaW5mby5od2luZm8pKTsK
KwlEUFJJTlRGTigyLCAibWF4IHNlc3Npb25zICVkLCBzdXBwb3J0ZWQgY2xhc3NlcyAweCV4XG4i
LAorCSAgICBzYy0+c2NfbWF4c2Vzc2lvbnMsIHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMp
OworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3N1YnNjcmliZXJfc3Rh
dHVzKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVj
dCBtYmltX2NpZF9zdWJzY3JpYmVyX3JlYWR5X2luZm8gKnNpID0gZGF0YTsKKwlzdHJ1Y3QgaWZu
ZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWludAlucG47CisKKwlpZiAobGVuIDwgc2l6ZW9mICgq
c2kpKQorCQlyZXR1cm4gMDsKKwlzYy0+c2NfaW5mby5zaW1fc3RhdGUgPSBsZTMydG9oKHNpLT5y
ZWFkeSk7CisKKwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4sIHNpLT5zaWRfb2Zmcywgc2ktPnNp
ZF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5zaWQsIHNpemVvZiAoc2MtPnNjX2luZm8uc2lkKSk7
CisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBzaS0+aWNjX29mZnMsIHNpLT5pY2Nfc2l6ZSwK
KwkgICAgc2MtPnNjX2luZm8uaWNjaWQsIHNpemVvZiAoc2MtPnNjX2luZm8uaWNjaWQpKTsKKwor
CW5wbiA9IGxlMzJ0b2goc2ktPm5vX3BuKTsKKwlpZiAobnBuID4gMCkKKwkJdW1iX2dldGluZm9i
dWYoZGF0YSwgbGVuLCBzaS0+cG5bMF0ub2Zmcywgc2ktPnBuWzBdLnNpemUsCisJCSAgICBzYy0+
c2NfaW5mby5wbiwgc2l6ZW9mIChzYy0+c2NfaW5mby5wbikpOworCWVsc2UKKwkJbWVtc2V0KHNj
LT5zY19pbmZvLnBuLCAwLCBzaXplb2YgKHNjLT5zY19pbmZvLnBuKSk7CisKKwlpZiAoc2MtPnNj
X2luZm8uc2ltX3N0YXRlID09IE1CSU1fU0lNU1RBVEVfTE9DS0VEKQorCQlzYy0+c2NfaW5mby5w
aW5fc3RhdGUgPSBVTUJfUElOX1JFUVVJUkVEOworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RF
QlVHKQorCQlsb2coTE9HX0lORk8sICIlczogU0lNICVzXG4iLCBERVZOQU0oc2MpLAorCQkgICAg
dW1iX3NpbXN0YXRlKHNjLT5zY19pbmZvLnNpbV9zdGF0ZSkpOworCWlmIChzYy0+c2NfaW5mby5z
aW1fc3RhdGUgPT0gTUJJTV9TSU1TVEFURV9JTklUSUFMSVpFRCkKKwkJdW1iX25ld3N0YXRlKHNj
LCBVTUJfU19TSU1SRUFEWSwgVU1CX05TX0RPTlRfRFJPUCk7CisJcmV0dXJuIDE7Cit9CisKK3N0
YXRpYyBpbnQKK3VtYl9kZWNvZGVfcmFkaW9fc3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZv
aWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX3JhZGlvX3N0YXRlX2luZm8g
KnJzID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGxl
biA8IHNpemVvZiAoKnJzKSkKKwkJcmV0dXJuIDA7CisKKwlzYy0+c2NfaW5mby5od19yYWRpb19v
biA9CisJICAgIChsZTMydG9oKHJzLT5od19zdGF0ZSkgPT0gTUJJTV9SQURJT19TVEFURV9PTikg
PyAxIDogMDsKKwlzYy0+c2NfaW5mby5zd19yYWRpb19vbiA9CisJICAgIChsZTMydG9oKHJzLT5z
d19zdGF0ZSkgPT0gTUJJTV9SQURJT19TVEFURV9PTikgPyAxIDogMDsKKwlpZiAoIXNjLT5zY19p
bmZvLmh3X3JhZGlvX29uKSB7CisJCWRldmljZV9wcmludGYoc2MtPnNjX2RldiwgInJhZGlvIGlz
IGRpc2FibGVkIGJ5IGhhcmR3YXJlIHN3aXRjaFxuIik7CisJCS8qCisJCSAqIFhYWCBkbyB3ZSBu
ZWVkIGEgdGltZSB0byBwb2xsIHRoZSBzdGF0ZSBvZiB0aGUgcmZraWxsIHN3aXRjaAorCQkgKglv
ciB3aWxsIHRoZSBkZXZpY2Ugc2VuZCBhbiB1bnNvbGljaXRlZCBub3RpZmljYXRpb24KKwkJICoJ
aW4gY2FzZSB0aGUgc3RhdGUgY2hhbmdlcz8KKwkJICovCisJCXVtYl9uZXdzdGF0ZShzYywgVU1C
X1NfT1BFTiwgMCk7CisJfSBlbHNlIGlmICghc2MtPnNjX2luZm8uc3dfcmFkaW9fb24pIHsKKwkJ
aWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9HX0lORk8sICIlczogcmFk
aW8gaXMgb2ZmXG4iLCBERVZOQU0oc2MpKTsKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19PUEVO
LCAwKTsKKwl9IGVsc2UKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19SQURJTywgVU1CX05TX0RP
TlRfRFJPUCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfcGluKHN0
cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmlt
X2NpZF9waW5faW5mbyAqcGkgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChz
Yyk7CisJdWludDMyX3QJYXR0ZW1wdHNfbGVmdDsKKworCWlmIChsZW4gPCBzaXplb2YgKCpwaSkp
CisJCXJldHVybiAwOworCisJYXR0ZW1wdHNfbGVmdCA9IGxlMzJ0b2gocGktPnJlbWFpbmluZ19h
dHRlbXB0cyk7CisJaWYgKGF0dGVtcHRzX2xlZnQgIT0gMHhmZmZmZmZmZikKKwkJc2MtPnNjX2lu
Zm8ucGluX2F0dGVtcHRzX2xlZnQgPSBhdHRlbXB0c19sZWZ0OworCisJc3dpdGNoIChsZTMydG9o
KHBpLT5zdGF0ZSkpIHsKKwljYXNlIE1CSU1fUElOX1NUQVRFX1VOTE9DS0VEOgorCQlzYy0+c2Nf
aW5mby5waW5fc3RhdGUgPSBVTUJfUElOX1VOTE9DS0VEOworCQlicmVhazsKKwljYXNlIE1CSU1f
UElOX1NUQVRFX0xPQ0tFRDoKKwkJc3dpdGNoIChsZTMydG9oKHBpLT50eXBlKSkgeworCQljYXNl
IE1CSU1fUElOX1RZUEVfUElOMToKKwkJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5f
UkVRVUlSRUQ7CisJCQlicmVhazsKKwkJY2FzZSBNQklNX1BJTl9UWVBFX1BVSzE6CisJCQlzYy0+
c2NfaW5mby5waW5fc3RhdGUgPSBVTUJfUFVLX1JFUVVJUkVEOworCQkJYnJlYWs7CisJCWNhc2Ug
TUJJTV9QSU5fVFlQRV9QSU4yOgorCQljYXNlIE1CSU1fUElOX1RZUEVfUFVLMjoKKwkJCS8qIEFz
c3VtZSB0aGF0IFBJTjEgd2FzIGFjY2VwdGVkICovCisJCQlzYy0+c2NfaW5mby5waW5fc3RhdGUg
PSBVTUJfUElOX1VOTE9DS0VEOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChp
ZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQlsb2coTE9HX0lORk8sICIlczogJXMgc3RhdGUg
JXMgKCVkIGF0dGVtcHRzIGxlZnQpXG4iLAorCQkgICAgREVWTkFNKHNjKSwgdW1iX3Bpbl90eXBl
KGxlMzJ0b2gocGktPnR5cGUpKSwKKwkJICAgIChsZTMydG9oKHBpLT5zdGF0ZSkgPT0gTUJJTV9Q
SU5fU1RBVEVfVU5MT0NLRUQpID8KKwkJCSJ1bmxvY2tlZCIgOiAibG9ja2VkIiwKKwkJICAgIGxl
MzJ0b2gocGktPnJlbWFpbmluZ19hdHRlbXB0cykpOworCisJLyoKKwkgKiBJbiBjYXNlIHRoZSBQ
SU4gd2FzIHNldCBhZnRlciBJRkZfVVAsIHJldHJpZ2dlciB0aGUgc3RhdGUgbWFjaGluZQorCSAq
LworCXVtYl9hZGRfdGFzayhzYywgdW1iX3N0YXRlX3Rhc2ssCisJCQkmc2MtPnNjX3Byb2Nfc3Rh
dGVfdGFza1swXS5oZHIsCisJCQkmc2MtPnNjX3Byb2Nfc3RhdGVfdGFza1sxXS5oZHIsIDApOwor
CXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3BhY2tldF9zZXJ2aWNlKHN0
cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmlt
X2NpZF9wYWNrZXRfc2VydmljZV9pbmZvICpwc2kgPSBkYXRhOworCWludAkgc3RhdGUsIGhpZ2hl
c3RjbGFzczsKKwl1aW50NjRfdCB1cF9zcGVlZCwgZG93bl9zcGVlZDsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGxlbiA8IHNpemVvZiAoKnBzaSkpCisJCXJldHVy
biAwOworCisJc2MtPnNjX2luZm8ubndlcnJvciA9IGxlMzJ0b2gocHNpLT5ud2Vycm9yKTsKKwlz
dGF0ZSA9IGxlMzJ0b2gocHNpLT5zdGF0ZSk7CisJaGlnaGVzdGNsYXNzID0gbGUzMnRvaChwc2kt
PmhpZ2hlc3RfZGF0YWNsYXNzKTsKKwl1cF9zcGVlZCA9IGxlNjR0b2gocHNpLT51cGxpbmtfc3Bl
ZWQpOworCWRvd25fc3BlZWQgPSBsZTY0dG9oKHBzaS0+ZG93bmxpbmtfc3BlZWQpOworCWlmIChz
Yy0+c2NfaW5mby5wYWNrZXRzdGF0ZSAgIT0gc3RhdGUgfHwKKwkgICAgc2MtPnNjX2luZm8udXBs
aW5rX3NwZWVkICE9IHVwX3NwZWVkIHx8CisJICAgIHNjLT5zY19pbmZvLmRvd25saW5rX3NwZWVk
ICE9IGRvd25fc3BlZWQpIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpIHsKKwkJ
CWxvZyhMT0dfSU5GTywgIiVzOiBwYWNrZXQgc2VydmljZSAiLCBERVZOQU0oc2MpKTsKKwkJCWlm
IChzYy0+c2NfaW5mby5wYWNrZXRzdGF0ZSAgIT0gc3RhdGUpCisJCQkJbG9nKExPR19JTkZPLCAi
Y2hhbmdlZCBmcm9tICVzIHRvICIsCisJCQkJICAgIHVtYl9wYWNrZXRfc3RhdGUoc2MtPnNjX2lu
Zm8ucGFja2V0c3RhdGUpKTsKKwkJCWxvZyhMT0dfSU5GTywgIiVzLCBjbGFzcyAlcywgc3BlZWQ6
ICUiIFBSSXU2NCAiIHVwIC8gJSIgUFJJdTY0ICIgZG93blxuIiwKKwkJCSAgICB1bWJfcGFja2V0
X3N0YXRlKHN0YXRlKSwKKwkJCSAgICB1bWJfZGF0YWNsYXNzKGhpZ2hlc3RjbGFzcyksIHVwX3Nw
ZWVkLCBkb3duX3NwZWVkKTsKKwkJfQorCX0KKwlzYy0+c2NfaW5mby5wYWNrZXRzdGF0ZSA9IHN0
YXRlOworCXNjLT5zY19pbmZvLmhpZ2hlc3RjbGFzcyA9IGhpZ2hlc3RjbGFzczsKKwlzYy0+c2Nf
aW5mby51cGxpbmtfc3BlZWQgPSB1cF9zcGVlZDsKKwlzYy0+c2NfaW5mby5kb3dubGlua19zcGVl
ZCA9IGRvd25fc3BlZWQ7CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnbW9kZSA9PSBNQklNX1JFR01P
REVfQVVUT01BVElDKSB7CisJCS8qCisJCSAqIEZvciBkZXZpY2VzIHVzaW5nIGF1dG9tYXRpYyBy
ZWdpc3RyYXRpb24gbW9kZSwganVzdCBwcm9jZWVkLAorCQkgKiBvbmNlIHJlZ2lzdHJhdGlvbiBo
YXMgY29tcGxldGVkLgorCQkgKi8KKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApIHsKKwkJ
CXN3aXRjaCAoc2MtPnNjX2luZm8ucmVnc3RhdGUpIHsKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9I
T01FOgorCQkJY2FzZSBNQklNX1JFR1NUQVRFX1JPQU1JTkc6CisJCQljYXNlIE1CSU1fUkVHU1RB
VEVfUEFSVE5FUjoKKwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVELAorCQkJCSAg
ICBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7
CisJCQl9CisJCX0gZWxzZQorCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19TSU1SRUFEWSwgVU1C
X05TX0RPTlRfUkFJU0UpOworCX0gZWxzZSBzd2l0Y2ggKHNjLT5zY19pbmZvLnBhY2tldHN0YXRl
KSB7CisJY2FzZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfQVRUQUNIRUQ6CisJCXVtYl9uZXdzdGF0
ZShzYywgVU1CX1NfQVRUQUNIRUQsIFVNQl9OU19ET05UX0RST1ApOworCQlicmVhazsKKwljYXNl
IE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hFRDoKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJf
U19TSU1SRUFEWSwgVU1CX05TX0RPTlRfUkFJU0UpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDE7
Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfc2lnbmFsX3N0YXRlKHN0cnVjdCB1bWJfc29m
dGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9zaWduYWxf
c3RhdGUgKnNzID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWlu
dAkgcnNzaTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpzcykpCisJCXJldHVybiAwOworCisJaWYg
KGxlMzJ0b2goc3MtPnJzc2kpID09IDk5KQorCQlyc3NpID0gVU1CX1ZBTFVFX1VOS05PV047CisJ
ZWxzZSB7CisJCXJzc2kgPSAtMTEzICsgMiAqIGxlMzJ0b2goc3MtPnJzc2kpOworCQlpZiAoKGlm
cC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpICYmIHNjLT5zY19pbmZvLnJzc2kgIT0gcnNzaSAmJgor
CQkgICAgc2MtPnNjX3N0YXRlID49IFVNQl9TX0NPTk5FQ1RFRCkKKwkJCWxvZyhMT0dfSU5GTywg
IiVzOiByc3NpICVkIGRCbVxuIiwgREVWTkFNKHNjKSwgcnNzaSk7CisJfQorCXNjLT5zY19pbmZv
LnJzc2kgPSByc3NpOworCXNjLT5zY19pbmZvLmJlciA9IGxlMzJ0b2goc3MtPmVycl9yYXRlKTsK
KwlpZiAoc2MtPnNjX2luZm8uYmVyID09IC05OSkKKwkJc2MtPnNjX2luZm8uYmVyID0gVU1CX1ZB
TFVFX1VOS05PV047CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfY29u
bmVjdF9pbmZvKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorewor
CXN0cnVjdCBtYmltX2NpZF9jb25uZWN0X2luZm8gKmNpID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCWludAkgYWN0OworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNp
KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGUzMnRvaChjaS0+c2Vzc2lvbmlkKSAhPSB1bWJfc2Vz
c2lvbl9pZCkgeworCQlEUFJJTlRGKCJkaXNjYXJkIGNvbm5lY3Rpb24gaW5mbyBmb3Igc2Vzc2lv
biAldVxuIiwKKwkJICAgIGxlMzJ0b2goY2ktPnNlc3Npb25pZCkpOworCQlyZXR1cm4gMTsKKwl9
CisJaWYgKG1lbWNtcChjaS0+Y29udGV4dCwgdW1iX3V1aWRfY29udGV4dF9pbnRlcm5ldCwKKwkg
ICAgc2l6ZW9mIChjaS0+Y29udGV4dCkpKSB7CisJCURQUklOVEYoImRpc2NhcmQgY29ubmVjdGlv
biBpbmZvIGZvciBvdGhlciBjb250ZXh0XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWFjdCA9IGxl
MzJ0b2goY2ktPmFjdGl2YXRpb24pOworCWlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uICE9IGFj
dCkgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywg
IiVzOiBjb25uZWN0aW9uICVzXG4iLCBERVZOQU0oc2MpLAorCQkJICAgIHVtYl9hY3RpdmF0aW9u
KGFjdCkpOworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpICYmCisJCSAgICBsZTMy
dG9oKGNpLT5pcHR5cGUpICE9IE1CSU1fQ09OVEVYVF9JUFRZUEVfREVGQVVMVCAmJgorCQkgICAg
bGUzMnRvaChjaS0+aXB0eXBlKSAhPSBNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjQpCisJCQlsb2co
TE9HX0RFQlVHLCAiJXM6IGdvdCBpcHR5cGUgJWQgY29ubmVjdGlvblxuIiwKKwkJCSAgICBERVZO
QU0oc2MpLCBsZTMydG9oKGNpLT5pcHR5cGUpKTsKKworCQlzYy0+c2NfaW5mby5hY3RpdmF0aW9u
ID0gYWN0OworCQlzYy0+c2NfaW5mby5ud2Vycm9yID0gbGUzMnRvaChjaS0+bndlcnJvcik7CisK
KwkJaWYgKHNjLT5zY19pbmZvLmFjdGl2YXRpb24gPT0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FD
VElWQVRFRCkKKwkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfQ09OTkVDVEVELCBVTUJfTlNfRE9O
VF9EUk9QKTsKKwkJZWxzZSBpZiAoc2MtPnNjX2luZm8uYWN0aXZhdGlvbiA9PQorCQkgICAgTUJJ
TV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVEVEKQorCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJf
U19BVFRBQ0hFRCwgMCk7CisJCS8qIGVsc2U6IG90aGVyIHN0YXRlcyBhcmUgcHVyZWx5IHRyYW5z
aXRpb25hbCAqLworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2FkZF9pbmV0
X2NvbmZpZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgc3RydWN0IGluX2FkZHIgaXAsIHVfaW50IHBy
ZWZpeGxlbiwKKyAgICBzdHJ1Y3QgaW5fYWRkciBndykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9
IEdFVF9JRlAoc2MpOworCXN0cnVjdCBpbl9hbGlhc3JlcSBpZnJhOworCXN0cnVjdCBzb2NrYWRk
cl9pbiAqc2luOworCWludAkgcnY7CisKKwltZW1zZXQoJmlmcmEsIDAsIHNpemVvZiAoaWZyYSkp
OworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX2FkZHI7CisJc2luLT5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4pOworCXNp
bi0+c2luX2FkZHIgPSBpcDsKKworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5p
ZnJhX2RzdGFkZHI7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4tPnNpbl9sZW4g
PSBzaXplb2YgKCpzaW4pOworCXNpbi0+c2luX2FkZHIgPSBndzsKKworCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX21hc2s7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YgKCpzaW4pOworCXVtYl9pbl9sZW4ybWFzaygmc2lu
LT5zaW5fYWRkciwgcHJlZml4bGVuKTsKKworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJ
cnYgPSBpbl9jb250cm9sKE5VTEwsIFNJT0NBSUZBRERSLCAoY2FkZHJfdCkmaWZyYSwgaWZwLCBj
dXJ0aHJlYWQpOworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCWlmIChydiAhPSAwKSB7CisJ
CWRldmljZV9wcmludGYoc2MtPnNjX2RldiwgInVuYWJsZSB0byBzZXQgSVB2NCBhZGRyZXNzLCBl
cnJvciAlZFxuIiwKKwkJICAgIHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKworCWlmIChpZnAtPmlm
X2ZsYWdzICYgSUZGX0RFQlVHKQorCQlsb2coTE9HX0lORk8sICIlczogSVB2NCBhZGRyICVzLCBt
YXNrICVzLCAiCisJCSAgICAiZ2F0ZXdheSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9u
dG9wKHNpbnRvc2EoJmlmcmEuaWZyYV9hZGRyKSksCisJCSAgICB1bWJfbnRvcChzaW50b3NhKCZp
ZnJhLmlmcmFfbWFzaykpLAorCQkgICAgdW1iX250b3Aoc2ludG9zYSgmaWZyYS5pZnJhX2RzdGFk
ZHIpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9pcF9jb25m
aWd1cmF0aW9uKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorewor
CXN0cnVjdCBtYmltX2NpZF9pcF9jb25maWd1cmF0aW9uX2luZm8gKmljID0gZGF0YTsKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IGF2YWlsX3Y0OworCXVpbnQz
Ml90IHZhbDsKKwlpbnQJIG4sIGk7CisJaW50CSBvZmY7CisJc3RydWN0IG1iaW1fY2lkX2lwdjRf
ZWxlbWVudCBpcHY0ZWxlbTsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyLCBndzsKKwlpbnQJIHN0YXRl
ID0gLTE7CisJaW50CSBydjsKKworCWlmIChsZW4gPCBzaXplb2YgKCppYykpCisJCXJldHVybiAw
OworCWlmIChsZTMydG9oKGljLT5zZXNzaW9uaWQpICE9IHVtYl9zZXNzaW9uX2lkKSB7CisJCURQ
UklOVEYoImlnbm9yZSBJUCBjb25maWd1cmF0aW9uIGZvciBzZXNzaW9uIGlkICVkXG4iLAorCQkg
ICAgbGUzMnRvaChpYy0+c2Vzc2lvbmlkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICog
SVB2NCBjb25maWd1cmF0aW9uCisJICovCisJYXZhaWxfdjQgPSBsZTMydG9oKGljLT5pcHY0X2F2
YWlsYWJsZSk7CisJaWYgKChhdmFpbF92NCAmIChNQklNX0lQQ09ORl9IQVNfQUREUklORk8gfCBN
QklNX0lQQ09ORl9IQVNfR1dJTkZPKSkgPT0KKwkgICAgKE1CSU1fSVBDT05GX0hBU19BRERSSU5G
TyB8IE1CSU1fSVBDT05GX0hBU19HV0lORk8pKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25h
ZGRyKTsKKwkJb2ZmID0gbGUzMnRvaChpYy0+aXB2NF9hZGRyb2Zmcyk7CisKKwkJaWYgKG4gPT0g
MCB8fCBvZmYgKyBzaXplb2YgKGlwdjRlbGVtKSA+IGxlbikKKwkJCWdvdG8gdHJ5djY7CisJCWlm
IChuICE9IDEgJiYgaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywg
IiVzOiBtb3JlIHRoYW4gb25lIElQdjQgYWRkcjogJWRcbiIsCisJCQkgICAgREVWTkFNKHNjKSwg
bik7CisKKwkJLyogT25seSBwaWNrIHRoZSBmaXJzdCBvbmUgKi8KKwkJbWVtY3B5KCZpcHY0ZWxl
bSwgKGNoYXIgKilkYXRhICsgb2ZmLCBzaXplb2YgKGlwdjRlbGVtKSk7CisJCWlwdjRlbGVtLnBy
ZWZpeGxlbiA9IGxlMzJ0b2goaXB2NGVsZW0ucHJlZml4bGVuKTsKKwkJYWRkci5zX2FkZHIgPSBp
cHY0ZWxlbS5hZGRyOworCisJCW9mZiA9IGxlMzJ0b2goaWMtPmlwdjRfZ3dvZmZzKTsKKwkJaWYg
KG9mZiArIHNpemVvZiAoZ3cpID4gbGVuKQorCQkJZ290byBkb25lOworCQltZW1jcHkoJmd3LCAo
Y2hhciAqKWRhdGEgKyBvZmYsIHNpemVvZiAoZ3cpKTsKKworCQlydiA9IHVtYl9hZGRfaW5ldF9j
b25maWcoc2MsIGFkZHIsIGlwdjRlbGVtLnByZWZpeGxlbiwgZ3cpOworCQlpZiAocnYgPT0gMCkK
KwkJCXN0YXRlID0gVU1CX1NfVVA7CisJfQorCisJbWVtc2V0KHNjLT5zY19pbmZvLmlwdjRkbnMs
IDAsIHNpemVvZiAoc2MtPnNjX2luZm8uaXB2NGRucykpOworCWlmIChhdmFpbF92NCAmIE1CSU1f
SVBDT05GX0hBU19ETlNJTkZPKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25kbnNzcnYpOwor
CQlvZmYgPSBsZTMydG9oKGljLT5pcHY0X2Ruc3Nydm9mZnMpOworCQlpID0gMDsKKwkJd2hpbGUg
KG4tLSA+IDApIHsKKwkJCWlmIChvZmYgKyBzaXplb2YgKGFkZHIpID4gbGVuKQorCQkJCWJyZWFr
OworCQkJbWVtY3B5KCZhZGRyLCAoY2hhciAqKWRhdGEgKyBvZmYsIHNpemVvZihhZGRyKSk7CisJ
CQlpZiAoaSA8IFVNQl9NQVhfRE5TU1JWKQorCQkJCXNjLT5zY19pbmZvLmlwdjRkbnNbaSsrXSA9
IGFkZHI7CisJCQlvZmYgKz0gc2l6ZW9mKGFkZHIpOworCQl9CisJfQorCisJaWYgKChhdmFpbF92
NCAmIE1CSU1fSVBDT05GX0hBU19NVFVJTkZPKSkgeworCQl2YWwgPSBsZTMydG9oKGljLT5pcHY0
X210dSk7CisJCWlmIChpZnAtPmlmX210dSAhPSB2YWwgJiYgdmFsIDw9IHNjLT5zY19tYXhwa3Rs
ZW4pIHsKKwkJCWlmcC0+aWZfbXR1ID0gdmFsOworCQkJaWYgKGlmcC0+aWZfbXR1ID4gdmFsKQor
CQkJCWlmcC0+aWZfbXR1ID0gdmFsOworCQkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcp
CisJCQkJbG9nKExPR19JTkZPLCAiJXM6IE1UVSAlZFxuIiwgREVWTkFNKHNjKSwgdmFsKTsKKwkJ
fQorCX0KKworCWF2YWlsX3Y0ID0gbGUzMnRvaChpYy0+aXB2Nl9hdmFpbGFibGUpOworCWlmICgo
aWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykgJiYgYXZhaWxfdjQgJiBNQklNX0lQQ09ORl9IQVNf
QUREUklORk8pIHsKKwkJLyogWFhYIEZJWE1FOiBJUHY2IGNvbmZpZ3VyYXRpb24gbWlzc2luZyAq
LworCQlsb2coTE9HX0lORk8sICIlczogaWdub3JpbmcgSVB2NiBjb25maWd1cmF0aW9uXG4iLCBE
RVZOQU0oc2MpKTsKKwl9CisJaWYgKHN0YXRlICE9IC0xKQorCQl1bWJfbmV3c3RhdGUoc2MsIHN0
YXRlLCAwKTsKKwordHJ5djY6Citkb25lOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAor
dW1iX3J4KHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRl
eCwgTUFfT1dORUQpOworCisJdXNiZF90cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltVTUJfQlVM
S19SWF0pOworfQorCitzdGF0aWMgdm9pZAordW1iX3J4ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZl
ciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94
ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50
IGFjdGxlbjsKKwlpbnQgYWZyYW1lczsKKwlpbnQgaTsKKworCURQUklOVEYoIiVzKCV1KTogc3Rh
dGU9JXVcbiIsIF9fZnVuY19fLCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4
X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwl1c2JkX3hmZXJfc3RhdHVzKHhm
ZXIsICZhY3RsZW4sIE5VTEwsICZhZnJhbWVzLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9T
VEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJyZWNl
aXZlZCAldSBieXRlcyBpbiAldSBmcmFtZXNcbiIsIGFjdGxlbiwgYWZyYW1lcyk7CisKKwkJaWYg
KGFjdGxlbiA9PSAwKSB7CisJCQlpZiAoc2MtPnNjX3J4X25lcnIgPj0gNCkKKwkJCQkvKiB0aHJv
dHRsZSB0cmFuc2ZlcnMgKi8KKwkJCQl1c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDUwMCk7
CisJCQllbHNlCisJCQkJc2MtPnNjX3J4X25lcnIrKzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIGRp
c2FibGUgdGhyb3R0bGluZyAqLworCQkJdXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsK
KwkJCXNjLT5zY19yeF9uZXJyID0gMDsKKwkJfQorCisJCWZvcihpID0gMDsgaSA8IGFmcmFtZXM7
IGkrKykgeworCQkJdW1iX2RlY2FwKHNjLCB4ZmVyLCBpKTsKKwkJfQorCisJCS8qIGZhbGwgdGhy
b3VnaCAqLworCWNhc2UgVVNCX1NUX1NFVFVQOgorCQl1c2JkX3hmZXJfc2V0X2ZyYW1lX2RhdGEo
eGZlciwgMCwgc2MtPnNjX3J4X2J1ZiwKKwkJCQlzYy0+c2NfcnhfYnVmc3opOworCQl1c2JkX3hm
ZXJfc2V0X2ZyYW1lcyh4ZmVyLCAxKTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisK
KwkJdW1iX3J4Zmx1c2goc2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCJyeCBl
cnJvcjogJXNcbiIsIHVzYmRfZXJyc3RyKHN0YXR1cykpOworCisJCS8qIGRpc2FibGUgdGhyb3R0
bGluZyAqLworCQl1c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDApOworCisJCWlmIChzdGF0
dXMgIT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKKwkJCS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJz
dCAqLworCQkJdXNiZF94ZmVyX3NldF9zdGFsbCh4ZmVyKTsKKwkJCXVzYmRfeGZlcl9zZXRfZnJh
bWVzKHhmZXIsIDApOworCQkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCQlpZl9pbmNf
Y291bnRlcihpZnAsIElGQ09VTlRFUl9JRVJST1JTLCAxKTsKKwkJfQorCQllbHNlIGlmICgrK3Nj
LT5zY19yeF9uZXJyID4gMTAwKSB7CisJCQlsb2coTE9HX0VSUiwgIiVzOiB0b28gbWFueSByeCBl
cnJvcnMsIGRpc2FibGluZ1xuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJCXVtYl9kZWFjdGl2
YXRlKHNjLT5zY19kZXYpOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9yeGZsdXNoKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0g
R0VUX0lGUChzYyk7CisJc3RydWN0IG1idWYgKm07CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0
ZXgsIE1BX09XTkVEKTsKKworCWZvciAoOzspIHsKKwkJX0lGX0RFUVVFVUUoJnNjLT5zY19yeF9x
dWV1ZSwgbSk7CisJCWlmIChtID09IE5VTEwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUg
VVNCIHhmZXIgaGFzIGJlZW4gcmVzdWJtaXR0ZWQgc28gaXRzIHNhZmUgdG8gdW5sb2NrIG5vdy4K
KwkJICovCisJCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJCWlmIChpZnAtPmlmX2Rydl9m
bGFncyAmIElGRl9EUlZfUlVOTklORykKKwkJCWlmcC0+aWZfaW5wdXQoaWZwLCBtKTsKKwkJZWxz
ZQorCQkJbV9mcmVlbShtKTsKKwkJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJfQorfQorCitz
dGF0aWMgaW50Cit1bWJfZW5jYXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBtYnVmICpt
LCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIpCit7CisJc3RydWN0IG5jbV9oZWFkZXIxNiAqaGRyOwor
CXN0cnVjdCBuY21fcG9pbnRlcjE2ICpwdHI7CisJaW50CSBsZW47CisKKwlLQVNTRVJUKHNjLT5z
Y190eF9tID09IE5VTEwsCisJCQkoIkFzc2VydGlvbiBmYWlsZWQgaW4gdW1iX2VuY2FwKCkiKSk7
CisKKwkvKiBBbGwgc2l6ZSBjb25zdHJhaW50cyBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBj
YWxsZXIhICovCisJaGRyID0gKHN0cnVjdCBuY21faGVhZGVyMTYgKilzYy0+c2NfdHhfYnVmOwor
CXB0ciA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIxNiAqKShoZHIgKyAxKTsKKworCVVTRVREVyhoZHIt
PmR3U2lnbmF0dXJlLCBOQ01fSERSMTZfU0lHKTsKKwlVU0VUVyhoZHItPndIZWFkZXJMZW5ndGgs
IHNpemVvZiAoKmhkcikpOworCVVTRVRXKGhkci0+d1NlcXVlbmNlLCBzYy0+c2NfdHhfc2VxKTsK
KwlzYy0+c2NfdHhfc2VxKys7CisJVVNFVFcoaGRyLT53TmRwSW5kZXgsIHNpemVvZiAoKmhkcikp
OworCisJbGVuID0gbS0+bV9wa3RoZHIubGVuOworCVVTRVREVyhwdHItPmR3U2lnbmF0dXJlLCBN
QklNX05DTV9OVEgxNl9TSUcodW1iX3Nlc3Npb25faWQpKTsKKwlVU0VUVyhwdHItPndMZW5ndGgs
IHNpemVvZiAoKnB0cikpOworCVVTRVRXKHB0ci0+d05leHROZHBJbmRleCwgMCk7CisJVVNFVFco
cHRyLT5kZ3JhbVswXS53RGF0YWdyYW1JbmRleCwgTUJJTV9IRFIxNl9MRU4pOworCVVTRVRXKHB0
ci0+ZGdyYW1bMF0ud0RhdGFncmFtTGVuLCBsZW4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0Rh
dGFncmFtSW5kZXgsIDApOworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtTGVuLCAwKTsK
KworCUtBU1NFUlQobGVuICsgTUJJTV9IRFIxNl9MRU4gPD0gc2MtPnNjX3R4X2J1ZnN6LAorCQkJ
KCJBc3NlcnRpb24gZmFpbGVkIGluIHVtYl9lbmNhcCgpIikpOworCW1fY29weWRhdGEobSwgMCwg
bGVuLCAoY2hhciAqKShwdHIgKyAxKSk7CisJc2MtPnNjX3R4X20gPSBtOworCWxlbiArPSBNQklN
X0hEUjE2X0xFTjsKKwlVU0VUVyhoZHItPndCbG9ja0xlbmd0aCwgbGVuKTsKKworCXVzYmRfeGZl
cl9zZXRfZnJhbWVfZGF0YSh4ZmVyLCAwLCBzYy0+c2NfdHhfYnVmLCBsZW4pOworCXVzYmRfeGZl
cl9zZXRfaW50ZXJ2YWwoeGZlciwgMCk7CisJdXNiZF94ZmVyX3NldF9mcmFtZXMoeGZlciwgMSk7
CisKKwlEUFJJTlRGTigzLCAiJXM6IGVuY2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBsZW4p
OworCUREVU1QTig1LCBzYy0+c2NfdHhfYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZAordW1iX3R4ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3Rh
dHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJc3RydWN0IG1idWYgKm07CisKKwlE
UFJJTlRGKCIlcygldSkgc3RhdGU9JXVcbiIsIF9fZnVuY19fLCBzdGF0dXMsIFVTQl9HRVRfU1RB
VEUoeGZlcikpOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlz
d2l0Y2ggKFVTQl9HRVRfU1RBVEUoeGZlcikpIHsKKwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoK
KwkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElWRTsKKwkJaWZfaW5jX2NvdW50
ZXIoaWZwLCBJRkNPVU5URVJfT1BBQ0tFVFMsIDEpOworCisJCXVtYl90eGZsdXNoKHNjKTsKKwor
CQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFVTQl9TVF9TRVRVUDoKK3RyX3NldHVwOgorCQlp
ZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKQorCQkJYnJlYWs7
CisKKwkJSUZRX0RSVl9ERVFVRVVFKCZpZnAtPmlmX3NuZCwgbSk7CisJCWlmIChtID09IE5VTEwp
CisJCQlicmVhazsKKworCQlpZiAodW1iX2VuY2FwKHNjLCBtLCB4ZmVyKSkgeworCQkJaWZfaW5j
X2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT0VSUk9SUywgMSk7CisJCQl1bWJfdHhmbHVzaChzYyk7
CisJCQlicmVhazsKKwkJfQorCisJCUJQRl9NVEFQKGlmcCwgbSk7CisKKwkJaWZwLT5pZl9kcnZf
ZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZFOworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsK
KworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBjb3Vu
dCBvdXRwdXQgZXJyb3JzICovCisJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJP
UlMsIDEpOworCQlEUFJJTlRGKCJ0eCBlcnJvcjogJXNcbiIsCisJCQkJdXNiZF9lcnJzdHIoc3Rh
dHVzKSk7CisKKwkJaWYgKHN0YXR1cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogdHJ5
IHRvIGNsZWFyIHN0YWxsIGZpcnN0ICovCisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOwor
CQkJZ290byB0cl9zZXR1cDsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwltdHhfYXNzZXJ0KCZzYy0+c2Nf
bXV0ZXgsIE1BX09XTkVEKTsKKworCWlmIChzYy0+c2NfdHhfbSAhPSBOVUxMKSB7CisJCW1fZnJl
ZW0oc2MtPnNjX3R4X20pOworCQlzYy0+c2NfdHhfbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMg
dm9pZAordW1iX2RlY2FwKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX3hmZXIgKnhm
ZXIsIGludCBmcmFtZSkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWNo
YXIgKmJ1ZjsKKwlpbnQgbGVuOworCWNoYXIJKmRwOworCXN0cnVjdCBuY21faGVhZGVyMTYgKmhk
cjE2OworCXN0cnVjdCBuY21faGVhZGVyMzIgKmhkcjMyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2
ICpwdHIxNjsKKwlzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSAqZGdyYW0xNjsKKwlzdHJ1Y3Qg
bmNtX3BvaW50ZXIzMl9kZ3JhbSAqZGdyYW0zMjsKKwl1aW50MzJfdCBoc2lnLCBwc2lnOworCWlu
dAkgaGxlbiwgYmxlbjsKKwlpbnQJIHB0cmxlbiwgcHRyb2ZmLCBkZ2VudHJ5b2ZmOworCXVpbnQz
Ml90IGRvZmYsIGRsZW47CisJc3RydWN0IG1idWYgKm07CisKKwl1c2JkX3hmZXJfZnJhbWVfZGF0
YSh4ZmVyLCBmcmFtZSwgKHZvaWQgKiopJmJ1ZiwgJmxlbik7CisJRFBSSU5URk4oNCwgInJlY3Yg
JWQgYnl0ZXNcbiIsIGxlbik7CisJRERVTVBOKDUsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgc2l6
ZW9mICgqaGRyMTYpKQorCQlnb3RvIHRvb3NtYWxsOworCisJaGRyMTYgPSAoc3RydWN0IG5jbV9o
ZWFkZXIxNiAqKWJ1ZjsKKwloc2lnID0gVUdFVERXKGhkcjE2LT5kd1NpZ25hdHVyZSk7CisJaGxl
biA9IFVHRVRXKGhkcjE2LT53SGVhZGVyTGVuZ3RoKTsKKwlpZiAobGVuIDwgaGxlbikKKwkJZ290
byB0b29zbWFsbDsKKwlpZiAobGVuID4gc2MtPnNjX3J4X2J1ZnN6KSB7CisJCURQUklOVEYoInBh
Y2tldCB0b28gbGFyZ2UgKCVkKVxuIiwgbGVuKTsKKwkJZ290byBmYWlsOworCX0KKwlzd2l0Y2gg
KGhzaWcpIHsKKwljYXNlIE5DTV9IRFIxNl9TSUc6CisJCWJsZW4gPSBVR0VUVyhoZHIxNi0+d0Js
b2NrTGVuZ3RoKTsKKwkJcHRyb2ZmID0gVUdFVFcoaGRyMTYtPndOZHBJbmRleCk7CisJCWlmICho
bGVuICE9IHNpemVvZiAoKmhkcjE2KSkgeworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVu
ICVkIGZvciBOVEgxNiAoZXhwICV6dSlcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6
ZW9mICgqaGRyMTYpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlicmVhazsKKwljYXNlIE5DTV9I
RFIzMl9TSUc6CisJCWhkcjMyID0gKHN0cnVjdCBuY21faGVhZGVyMzIgKiloZHIxNjsKKwkJYmxl
biA9IFVHRVREVyhoZHIzMi0+ZHdCbG9ja0xlbmd0aCk7CisJCXB0cm9mZiA9IFVHRVREVyhoZHIz
Mi0+ZHdOZHBJbmRleCk7CisJCWlmIChobGVuICE9IHNpemVvZiAoKmhkcjMyKSkgeworCQkJRFBS
SU5URigiJXM6IGJhZCBoZWFkZXIgbGVuICVkIGZvciBOVEgzMiAoZXhwICV6dSlcbiIsCisJCQkg
ICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6ZW9mICgqaGRyMzIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJ
fQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIGhl
YWRlciBzaWduYXR1cmUgKDB4JTA4eClcbiIsCisJCSAgICBERVZOQU0oc2MpLCBoc2lnKTsKKwkJ
Z290byBmYWlsOworCX0KKwlpZiAobGVuIDwgYmxlbikgeworCQlEUFJJTlRGKCIlczogYmFkIE5U
QiBsZW4gKCVkKSBmb3IgJWQgYnl0ZXMgb2YgZGF0YVxuIiwKKwkJICAgIERFVk5BTShzYyksIGJs
ZW4sIGxlbik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwdHIxNiA9IChzdHJ1Y3QgbmNtX3BvaW50
ZXIxNiAqKShidWYgKyBwdHJvZmYpOworCXBzaWcgPSBVR0VURFcocHRyMTYtPmR3U2lnbmF0dXJl
KTsKKwlwdHJsZW4gPSBVR0VUVyhwdHIxNi0+d0xlbmd0aCk7CisJaWYgKGxlbiA8IHB0cmxlbiAr
IHB0cm9mZikKKwkJZ290byB0b29zbWFsbDsKKwlpZiAoIU1CSU1fTkNNX05USDE2X0lTSVNHKHBz
aWcpICYmICFNQklNX05DTV9OVEgzMl9JU0lTRyhwc2lnKSkgeworCQlEUFJJTlRGKCIlczogdW5z
dXBwb3J0ZWQgTkNNIHBvaW50ZXIgc2lnbmF0dXJlICgweCUwOHgpXG4iLAorCQkgICAgREVWTkFN
KHNjKSwgcHNpZyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNl
IE5DTV9IRFIxNl9TSUc6CisJCWRnZW50cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNtX3BvaW50
ZXIxNiwgZGdyYW0pOworCQlicmVhazsKKwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWRnZW50cnlv
ZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNtX3BvaW50ZXIzMiwgZGdyYW0pOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlnb3RvIGZhaWw7CisJfQorCisJd2hpbGUgKGRnZW50cnlvZmYgPCBwdHJsZW4p
IHsKKwkJc3dpdGNoIChoc2lnKSB7CisJCWNhc2UgTkNNX0hEUjE2X1NJRzoKKwkJCWlmIChwdHJv
ZmYgKyBkZ2VudHJ5b2ZmIDwgc2l6ZW9mICgqZGdyYW0xNikpCisJCQkJZ290byBkb25lOworCQkJ
ZGdyYW0xNiA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSAqKQorCQkJICAgIChidWYgKyBw
dHJvZmYgKyBkZ2VudHJ5b2ZmKTsKKwkJCWRnZW50cnlvZmYgKz0gc2l6ZW9mICgqZGdyYW0xNik7
CisJCQlkbGVuID0gVUdFVFcoZGdyYW0xNi0+d0RhdGFncmFtTGVuKTsKKwkJCWRvZmYgPSBVR0VU
VyhkZ3JhbTE2LT53RGF0YWdyYW1JbmRleCk7CisJCQlicmVhazsKKwkJY2FzZSBOQ01fSERSMzJf
U0lHOgorCQkJaWYgKHB0cm9mZiArIGRnZW50cnlvZmYgPCBzaXplb2YgKCpkZ3JhbTMyKSkKKwkJ
CQlnb3RvIGRvbmU7CisJCQlkZ3JhbTMyID0gKHN0cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtICop
CisJCQkgICAgKGJ1ZiArIHB0cm9mZiArIGRnZW50cnlvZmYpOworCQkJZGdlbnRyeW9mZiArPSBz
aXplb2YgKCpkZ3JhbTMyKTsKKwkJCWRsZW4gPSBVR0VURFcoZGdyYW0zMi0+ZHdEYXRhZ3JhbUxl
bik7CisJCQlkb2ZmID0gVUdFVERXKGRncmFtMzItPmR3RGF0YWdyYW1JbmRleCk7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX0lFUlJPUlMs
IDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogVGVybWluYXRpbmcgemVybyBlbnRyeSAq
LworCQlpZiAoZGxlbiA9PSAwIHx8IGRvZmYgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobGVuIDwg
ZGxlbiArIGRvZmYpIHsKKwkJCS8qIFNraXAgZ2lhbnQgZGF0YWdyYW0gYnV0IGNvbnRpbnVlIHBy
b2Nlc3NpbmcgKi8KKwkJCURQUklOVEYoIiVzOiBkYXRhZ3JhbSB0b28gbGFyZ2UgKCVkIEAgb2Zm
ICVkKVxuIiwKKwkJCSAgICBERVZOQU0oc2MpLCBkbGVuLCBkb2ZmKTsKKwkJCWNvbnRpbnVlOwor
CQl9CisKKwkJZHAgPSBidWYgKyBkb2ZmOworCQlEUFJJTlRGTigzLCAiJXM6IGRlY2FwICVkIGJ5
dGVzXG4iLCBERVZOQU0oc2MpLCBkbGVuKTsKKwkJbSA9IG1fZGV2Z2V0KGRwLCBkbGVuLCAwLCBp
ZnAsIE5VTEwpOworCQlpZiAobSA9PSBOVUxMKSB7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElG
Q09VTlRFUl9JUURST1BTLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogZW5xdWV1ZSBm
b3IgbGF0ZXIgd2hlbiB0aGUgbG9jayBjYW4gYmUgcmVsZWFzZWQgKi8KKwkJX0lGX0VOUVVFVUUo
JnNjLT5zY19yeF9xdWV1ZSwgbSk7CisKKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJf
SVBBQ0tFVFMsIDEpOworCisJfQorZG9uZToKKwlzYy0+c2NfcnhfbmVyciA9IDA7CisJcmV0dXJu
OwordG9vc21hbGw6CisJRFBSSU5URigiJXM6IHBhY2tldCB0b28gc21hbGwgKCVkKVxuIiwgREVW
TkFNKHNjKSwgbGVuKTsKK2ZhaWw6CisJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVS
Uk9SUywgMSk7Cit9CisKK3N0YXRpYyB1c2JfZXJyb3JfdAordW1iX3NlbmRfZW5jYXBfY29tbWFu
ZChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1c2JfZGV2
aWNlX3JlcXVlc3RfdCByZXE7CisKKwlpZiAobGVuID4gc2MtPnNjX2N0cmxfbGVuKQorCQlyZXR1
cm4gVVNCX0VSUl9JTlZBTDsKKworCS8qIFhYWCBGSVhNRTogaWYgKHRvdGFsIGxlbiA+IHNjLT5z
Y19jdHJsX2xlbikgPT4gbXVzdCBmcmFnbWVudCAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRf
V1JJVEVfQ0xBU1NfSU5URVJGQUNFOworCXJlcS5iUmVxdWVzdCA9IFVDRENfU0VORF9FTkNBUFNV
TEFURURfQ09NTUFORDsKKwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4
LCBzYy0+c2NfY3RybF9pZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgbGVuKTsKKwltdHhf
dW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCURFTEFZKHVtYl9kZWxheSk7CisJbXR4X2xvY2soJnNj
LT5zY19tdXRleCk7CisJcmV0dXJuIHVzYmRfZG9fcmVxdWVzdF9mbGFncyhzYy0+c2NfdWRldiwg
JnNjLT5zY19tdXRleCwgJnJlcSwgZGF0YSwgMCwKKwkJCU5VTEwsIHVtYl94ZmVyX3RvdXQpOwor
fQorCitzdGF0aWMgaW50Cit1bWJfZ2V0X2VuY2FwX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMg
KnNjLCB2b2lkICpidWYsIGludCAqbGVuKQoreworCXVzYl9kZXZpY2VfcmVxdWVzdF90IHJlcTsK
Kwl1c2JfZXJyb3JfdCBlcnI7CisJdWludDE2X3QgbCA9ICpsZW47CisKKwlyZXEuYm1SZXF1ZXN0
VHlwZSA9IFVUX1JFQURfQ0xBU1NfSU5URVJGQUNFOworCXJlcS5iUmVxdWVzdCA9IFVDRENfR0VU
X0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsKKwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhy
ZXEud0luZGV4LCBzYy0+c2NfY3RybF9pZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgbCk7
CisJLyogWFhYIEZJWE1FOiByZS1hc3NlbWJsZSBmcmFnbWVudHMgKi8KKworCW10eF91bmxvY2so
JnNjLT5zY19tdXRleCk7CisJREVMQVkodW1iX2RlbGF5KTsKKwltdHhfbG9jaygmc2MtPnNjX211
dGV4KTsKKwllcnIgPSB1c2JkX2RvX3JlcXVlc3RfZmxhZ3Moc2MtPnNjX3VkZXYsICZzYy0+c2Nf
bXV0ZXgsICZyZXEsIGJ1ZiwKKwkJCVVTQl9TSE9SVF9YRkVSX09LLCAmbCwgdW1iX3hmZXJfdG91
dCk7CisJaWYgKGVyciA9PSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKSB7CisJCSpsZW4gPSBs
OworCQlyZXR1cm4gMTsKKwl9CisJRFBSSU5URigiY3RybCByZWN2OiAlc1xuIiwgdXNiZF9lcnJz
dHIoZXJyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY3RybF9tc2coc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQzMl90IHJlcSwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sK
KwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90IHRpZDsKKwlzdHJ1
Y3QgbWJpbV9tc2doZHIgKmhkciA9IGRhdGE7CisJdXNiX2Vycm9yX3QgZXJyOworCisJaWYgKHNj
LT5zY19keWluZykKKwkJcmV0dXJuOworCWlmIChsZW4gPCBzaXplb2YgKCpoZHIpKQorCQlyZXR1
cm47CisJdGlkID0gKytzYy0+c2NfdGlkOworCisJaGRyLT50eXBlID0gaHRvbGUzMihyZXEpOwor
CWhkci0+bGVuID0gaHRvbGUzMihsZW4pOworCWhkci0+dGlkID0gaHRvbGUzMih0aWQpOworCisj
aWZkZWYgVU1CX0RFQlVHCisJaWYgKHVtYl9kZWJ1ZykgeworCQljb25zdCBjaGFyICpvcCwgKnN0
cjsKKwkJaWYgKHJlcSA9PSBNQklNX0NPTU1BTkRfTVNHKSB7CisJCQlzdHJ1Y3QgbWJpbV9oMmZf
Y21kICpjID0gZGF0YTsKKwkJCWlmIChsZTMydG9oKGMtPm9wKSA9PSBNQklNX0NNRE9QX1NFVCkK
KwkJCQlvcCA9ICJzZXQiOworCQkJZWxzZQorCQkJCW9wID0gInFyeSI7CisJCQlzdHIgPSB1bWJf
Y2lkMnN0cihsZTMydG9oKGMtPmNpZCkpOworCQl9IGVsc2UgeworCQkJb3AgPSAic25kIjsKKwkJ
CXN0ciA9IHVtYl9yZXF1ZXN0MnN0cihyZXEpOworCQl9CisJCURQUklOVEYoIi0+ICVzICVzICh0
aWQgJXUpXG4iLCBvcCwgc3RyLCB0aWQpOworCX0KKyNlbmRpZgorCWVyciA9IHVtYl9zZW5kX2Vu
Y2FwX2NvbW1hbmQoc2MsIGRhdGEsIGxlbik7CisJaWYgKGVyciAhPSBVU0JfRVJSX05PUk1BTF9D
T01QTEVUSU9OKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExP
R19FUlIsICIlczogc2VuZCAlcyBtc2cgKHRpZCAldSkgZmFpbGVkOiAlc1xuIiwKKwkJCSAgICBE
RVZOQU0oc2MpLCB1bWJfcmVxdWVzdDJzdHIocmVxKSwgdGlkLAorCQkJICAgIHVzYmRfZXJyc3Ry
KGVycikpOworCisJCS8qIHdpbGwgYWZmZWN0IG90aGVyIHRyYW5zYWN0aW9ucywgdG9vICovCisJ
CXVzYmRfdHJhbnNmZXJfc3RvcChzYy0+c2NfeGZlcltVTUJfSU5UUl9SWF0pOworCX0gZWxzZSB7
CisJCURQUklOVEZOKDIsICJzZW50ICVzICh0aWQgJXUpXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qy
c3RyKHJlcSksIHRpZCk7CisJCUREVU1QTigzLCBkYXRhLCBsZW4pOworCX0KKwlyZXR1cm47Cit9
CisKK3N0YXRpYyB2b2lkCit1bWJfb3BlbihzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1
Y3QgbWJpbV9oMmZfb3Blbm1zZyBtc2c7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mIChtc2cp
KTsKKwltc2cubWF4bGVuID0gaHRvbGUzMihzYy0+c2NfY3RybF9sZW4pOworCXVtYl9jdHJsX21z
ZyhzYywgTUJJTV9PUEVOX01TRywgJm1zZywgc2l6ZW9mIChtc2cpKTsKKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfY2xvc2Uoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0
IG1iaW1faDJmX2Nsb3NlbXNnIG1zZzsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKG1zZykp
OworCXVtYl9jdHJsX21zZyhzYywgTUJJTV9DTE9TRV9NU0csICZtc2csIHNpemVvZiAobXNnKSk7
Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9zZXRwaW4oc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBv
cCwgaW50IGlzX3B1aywgdm9pZCAqcGluLCBpbnQgcGlubGVuLAorICAgIHZvaWQgKm5ld3Bpbiwg
aW50IG5ld3BpbmxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcGluIGNwOworCWludAkgb2ZmOwor
CisJaWYgKHBpbmxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocGlubGVuIDwgMCB8fCBwaW5s
ZW4gPiBNQklNX1BJTl9NQVhMRU4gfHwKKwkgICAgbmV3cGlubGVuIDwgMCB8fCBuZXdwaW5sZW4g
PiBNQklNX1BJTl9NQVhMRU4gfHwKKwkgICAgb3AgPCAwIHx8IG9wID4gTUJJTV9QSU5fT1BfQ0hB
TkdFIHx8CisJICAgIChpc19wdWsgJiYgb3AgIT0gTUJJTV9QSU5fT1BfRU5URVIpKQorCQlyZXR1
cm4gRUlOVkFMOworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mIChjcCkpOworCWNwLnR5cGUgPSBo
dG9sZTMyKGlzX3B1ayA/IE1CSU1fUElOX1RZUEVfUFVLMSA6IE1CSU1fUElOX1RZUEVfUElOMSk7
CisKKwlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbWJpbV9jaWRfcGluLCBkYXRhKTsKKwlpZiAoIXVt
Yl9hZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9mZiwgcGluLCBwaW5sZW4sCisJICAgICZjcC5w
aW5fb2ZmcywgJmNwLnBpbl9zaXplKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWNwLm9wICA9IGh0
b2xlMzIob3ApOworCWlmIChuZXdwaW5sZW4pIHsKKwkJaWYgKCF1bWJfYWRkc3RyKCZjcCwgc2l6
ZW9mIChjcCksICZvZmYsIG5ld3BpbiwgbmV3cGlubGVuLAorCQkgICAgJmNwLm5ld3Bpbl9vZmZz
LCAmY3AubmV3cGluX3NpemUpKQorCQkJcmV0dXJuIEVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAo
KG9wID09IE1CSU1fUElOX09QX0NIQU5HRSkgfHwgaXNfcHVrKQorCQkJcmV0dXJuIEVJTlZBTDsK
KwkJaWYgKCF1bWJfYWRkc3RyKCZjcCwgc2l6ZW9mIChjcCksICZvZmYsIE5VTEwsIDAsCisJCSAg
ICAmY3AubmV3cGluX29mZnMsICZjcC5uZXdwaW5fc2l6ZSkpCisJCQlyZXR1cm4gRUlOVkFMOwor
CX0KKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9QSU4s
IE1CSU1fQ01ET1BfU0VULCAmY3AsIG9mZik7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9zZXRkYXRhY2xhc3Moc3RydWN0IHVt
Yl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZSByczsK
Kwl1aW50MzJfdAkgY2xhc3NlczsKKworCWlmIChzYy0+c2NfaW5mby5zdXBwb3J0ZWRjbGFzc2Vz
ID09IE1CSU1fREFUQUNMQVNTX05PTkUpCisJCXJldHVybjsKKworCW1lbXNldCgmcnMsIDAsIHNp
emVvZiAocnMpKTsKKwlycy5yZWdhY3Rpb24gPSBodG9sZTMyKE1CSU1fUkVHQUNUSU9OX0FVVE9N
QVRJQyk7CisJY2xhc3NlcyA9IHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXM7CisJaWYgKHNj
LT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXMgIT0gTUJJTV9EQVRBQ0xBU1NfTk9ORSkKKwkJY2xh
c3NlcyAmPSBzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzOworCXJzLmRhdGFfY2xhc3MgPSBo
dG9sZTMyKGNsYXNzZXMpOworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXVtYl9jbWQoc2Ms
IE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1NFVCwgJnJzLCBzaXplb2YgKHJz
KSk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9y
YWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IG9uKQoreworCXN0cnVjdCBtYmltX2NpZF9y
YWRpb19zdGF0ZSBzOworCisJRFBSSU5URigic2V0IHJhZGlvICVzXG4iLCBvbiA/ICJvbiIgOiAi
b2ZmIik7CisJbWVtc2V0KCZzLCAwLCBzaXplb2YgKHMpKTsKKwlzLnN0YXRlID0gaHRvbGUzMihv
biA/IE1CSU1fUkFESU9fU1RBVEVfT04gOiBNQklNX1JBRElPX1NUQVRFX09GRik7CisJdW1iX2Nt
ZChzYywgTUJJTV9DSURfUkFESU9fU1RBVEUsIE1CSU1fQ01ET1BfU0VULCAmcywgc2l6ZW9mIChz
KSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfYWxsb2NhdGVfY2lkKHN0cnVjdCB1bWJfc29mdGMg
KnNjKQoreworCXVtYl9jbWQxKHNjLCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9T
RVQsCisJICAgIHVtYl9xbWlfYWxsb2NfY2lkLCBzaXplb2YgKHVtYl9xbWlfYWxsb2NfY2lkKSwg
dW1iX3V1aWRfcW1pX21iaW0pOworfQorCitzdGF0aWMgdm9pZAordW1iX3NlbmRfZmNjX2F1dGgo
c3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJdWludDhfdAkgZmNjYXV0aFtzaXplb2YgKHVtYl9x
bWlfZmNjX2F1dGgpXTsKKworCWlmIChzYy0+c2NfY2lkID09IC0xKSB7CisJCURQUklOVEYoIm1p
c3NpbmcgQ0lELCBjYW5ub3Qgc2VuZCBGQ0MgYXV0aFxuIik7CisJCXVtYl9hbGxvY2F0ZV9jaWQo
c2MpOworCQlyZXR1cm47CisJfQorCW1lbWNweShmY2NhdXRoLCB1bWJfcW1pX2ZjY19hdXRoLCBz
aXplb2YgKGZjY2F1dGgpKTsKKwlmY2NhdXRoW1VNQl9RTUlfQ0lEX09GRlNdID0gc2MtPnNjX2Np
ZDsKKwl1bWJfY21kMShzYywgTUJJTV9DSURfREVWSUNFX0NBUFMsIE1CSU1fQ01ET1BfU0VULAor
CSAgICBmY2NhdXRoLCBzaXplb2YgKGZjY2F1dGgpLCB1bWJfdXVpZF9xbWlfbWJpbSk7Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGlu
dCBhdHRhY2gpCit7CisJc3RydWN0IG1iaW1fY2lkX3BhY2tldF9zZXJ2aWNlCXM7CisKKwlEUFJJ
TlRGKCIlcyBwYWNrZXQgc2VydmljZVxuIiwKKwkgICAgYXR0YWNoID8gImF0dGFjaCIgOiAiZGV0
YWNoIik7CisJbWVtc2V0KCZzLCAwLCBzaXplb2YgKHMpKTsKKwlzLmFjdGlvbiA9IGh0b2xlMzIo
YXR0YWNoID8KKwkgICAgTUJJTV9QS1RTRVJWSUNFX0FDVElPTl9BVFRBQ0ggOiBNQklNX1BLVFNF
UlZJQ0VfQUNUSU9OX0RFVEFDSCk7CisJdW1iX2NtZChzYywgTUJJTV9DSURfUEFDS0VUX1NFUlZJ
Q0UsIE1CSU1fQ01ET1BfU0VULCAmcywgc2l6ZW9mIChzKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9
IEdFVF9JRlAoc2MpOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RB
VEVfUk9BTUlORyAmJiAhc2MtPnNjX3JvYW1pbmcpIHsKKwkJbG9nKExPR19JTkZPLCAiJXM6IGNv
bm5lY3Rpb24gZGlzYWJsZWQgaW4gcm9hbWluZyBuZXR3b3JrXG4iLAorCQkgICAgREVWTkFNKHNj
KSk7CisJCXJldHVybjsKKwl9CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxv
ZyhMT0dfREVCVUcsICIlczogY29ubmVjdGluZyAuLi5cbiIsIERFVk5BTShzYykpOworCXVtYl9z
ZW5kX2Nvbm5lY3Qoc2MsIE1CSU1fQ09OTkVDVF9BQ1RJVkFURSk7Cit9CisKK3N0YXRpYyB2b2lk
Cit1bWJfZGlzY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJ
CWxvZyhMT0dfREVCVUcsICIlczogZGlzY29ubmVjdGluZyAuLi5cbiIsIERFVk5BTShzYykpOwor
CXVtYl9zZW5kX2Nvbm5lY3Qoc2MsIE1CSU1fQ09OTkVDVF9ERUFDVElWQVRFKTsKK30KKworc3Rh
dGljIHZvaWQKK3VtYl9zZW5kX2Nvbm5lY3Qoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBjb21t
YW5kKQoreworCXN0cnVjdCBtYmltX2NpZF9jb25uZWN0ICpjOworCWludAkgb2ZmOworCisJLyog
VG9vIGxhcmdlIGZvciB0aGUgc3RhY2sgKi8KKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOwor
CWMgPSBtYWxsb2Moc2l6ZW9mICgqYyksIE1fTUJJTV9DSURfQ09OTkVDVCwgTV9XQUlUT0sgfCBN
X1pFUk8pOworCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCWMtPnNlc3Npb25pZCA9IGh0b2xl
MzIodW1iX3Nlc3Npb25faWQpOworCWMtPmNvbW1hbmQgPSBodG9sZTMyKGNvbW1hbmQpOworCW9m
ZiA9IG9mZnNldG9mKHN0cnVjdCBtYmltX2NpZF9jb25uZWN0LCBkYXRhKTsKKwlpZiAoIXVtYl9h
ZGRzdHIoYywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZvLmFwbiwKKwkgICAgc2MtPnNj
X2luZm8uYXBubGVuLCAmYy0+YWNjZXNzX29mZnMsICZjLT5hY2Nlc3Nfc2l6ZSkpCisJCWdvdG8g
ZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZv
LnVzZXJuYW1lLAorCSAgICBzYy0+c2NfaW5mby51c2VybmFtZWxlbiwgJmMtPnVzZXJfb2Zmcywg
JmMtPnVzZXJfc2l6ZSkpCisJCWdvdG8gZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9m
ICgqYyksICZvZmYsIHNjLT5zY19pbmZvLnBhc3N3b3JkLAorCSAgICBzYy0+c2NfaW5mby5wYXNz
d29yZGxlbiwgJmMtPnBhc3N3ZF9vZmZzLCAmYy0+cGFzc3dkX3NpemUpKQorCQlnb3RvIGRvbmU7
CisJYy0+YXV0aHByb3QgPSBodG9sZTMyKE1CSU1fQVVUSFBST1RfTk9ORSk7CisJYy0+Y29tcHJl
c3Npb24gPSBodG9sZTMyKE1CSU1fQ09NUFJFU1NJT05fTk9ORSk7CisJYy0+aXB0eXBlID0gaHRv
bGUzMihNQklNX0NPTlRFWFRfSVBUWVBFX0lQVjQpOworCW1lbWNweShjLT5jb250ZXh0LCB1bWJf
dXVpZF9jb250ZXh0X2ludGVybmV0LCBzaXplb2YgKGMtPmNvbnRleHQpKTsKKwl1bWJfY21kKHNj
LCBNQklNX0NJRF9DT05ORUNULCBNQklNX0NNRE9QX1NFVCwgYywgb2ZmKTsKK2RvbmU6CisJZnJl
ZShjLCBNX01CSU1fQ0lEX0NPTk5FQ1QpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9xcnlfaXBjb25maWcoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1iaW1fY2lk
X2lwX2NvbmZpZ3VyYXRpb25faW5mbyBpcGM7CisKKwltZW1zZXQoJmlwYywgMCwgc2l6ZW9mIChp
cGMpKTsKKwlpcGMuc2Vzc2lvbmlkID0gaHRvbGUzMih1bWJfc2Vzc2lvbl9pZCk7CisJdW1iX2Nt
ZChzYywgTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTiwgTUJJTV9DTURPUF9RUlksCisJICAgICZp
cGMsIHNpemVvZiAoaXBjKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY21kKHN0cnVjdCB1bWJf
c29mdGMgKnNjLCBpbnQgY2lkLCBpbnQgb3AsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit7
CisJdW1iX2NtZDEoc2MsIGNpZCwgb3AsIGRhdGEsIGxlbiwgdW1iX3V1aWRfYmFzaWNfY29ubmVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY21kMShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50
IGNpZCwgaW50IG9wLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLAorICAgIHVpbnQ4X3QgKnV1
aWQpCit7CisJc3RydWN0IG1iaW1faDJmX2NtZCAqY21kOworCWludAl0b3RsZW47CisKKwkvKiBY
WFggRklYTUUgc3VwcG9ydCBzZW5kaW5nIGZyYWdtZW50cyAqLworCWlmIChzaXplb2YgKCpjbWQp
ICsgbGVuID4gc2MtPnNjX2N0cmxfbGVuKSB7CisJCURQUklOVEYoInNldCAlcyBtc2cgdG9vIGxv
bmc6IGNhbm5vdCBzZW5kXG4iLAorCQkgICAgdW1iX2NpZDJzdHIoY2lkKSk7CisJCXJldHVybjsK
Kwl9CisJY21kID0gc2MtPnNjX2N0cmxfbXNnOworCW1lbXNldChjbWQsIDAsIHNpemVvZiAoKmNt
ZCkpOworCWNtZC0+ZnJhZy5uZnJhZyA9IGh0b2xlMzIoMSk7CisJbWVtY3B5KGNtZC0+ZGV2aWQs
IHV1aWQsIHNpemVvZiAoY21kLT5kZXZpZCkpOworCWNtZC0+Y2lkID0gaHRvbGUzMihjaWQpOwor
CWNtZC0+b3AgPSBodG9sZTMyKG9wKTsKKwljbWQtPmluZm9sZW4gPSBodG9sZTMyKGxlbik7CisJ
dG90bGVuID0gc2l6ZW9mICgqY21kKTsKKwlpZiAobGVuID4gMCkgeworCQltZW1jcHkoY21kICsg
MSwgZGF0YSwgbGVuKTsKKwkJdG90bGVuICs9IGxlbjsKKwl9CisJdW1iX2N0cmxfbXNnKHNjLCBN
QklNX0NPTU1BTkRfTVNHLCBjbWQsIHRvdGxlbik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY29t
bWFuZF9kb25lKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorewor
CXN0cnVjdCBtYmltX2YyaF9jbWRkb25lICpjbWQgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZw
ID0gR0VUX0lGUChzYyk7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IGNpZDsKKwl1aW50
MzJfdCBpbmZvbGVuOworCWludAkgcW1pbXNnID0gMDsKKworCWlmIChsZW4gPCBzaXplb2YgKCpj
bWQpKSB7CisJCURQUklOVEYoImRpc2NhcmQgc2hvcnQgJXMgbWVzc2FnZVxuIiwKKwkJICAgIHVt
Yl9yZXF1ZXN0MnN0cihsZTMydG9oKGNtZC0+aGRyLnR5cGUpKSk7CisJCXJldHVybjsKKwl9CisJ
Y2lkID0gbGUzMnRvaChjbWQtPmNpZCk7CisJaWYgKG1lbWNtcChjbWQtPmRldmlkLCB1bWJfdXVp
ZF9iYXNpY19jb25uZWN0LCBzaXplb2YgKGNtZC0+ZGV2aWQpKSkgeworCQlpZiAobWVtY21wKGNt
ZC0+ZGV2aWQsIHVtYl91dWlkX3FtaV9tYmltLAorCQkgICAgc2l6ZW9mIChjbWQtPmRldmlkKSkp
IHsKKwkJCURQUklOVEYoImRpc2NhcmQgJXMgbWVzc2FnZSBmb3Igb3RoZXIgVVVJRCAnJXMnXG4i
LAorCQkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKGNtZC0+aGRyLnR5cGUpKSwKKwkJCSAg
ICB1bWJfdXVpZDJzdHIoY21kLT5kZXZpZCkpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXFt
aW1zZyA9IDE7CisJfQorCisJc3RhdHVzID0gbGUzMnRvaChjbWQtPnN0YXR1cyk7CisJc3dpdGNo
IChzdGF0dXMpIHsKKwljYXNlIE1CSU1fU1RBVFVTX1NVQ0NFU1M6CisJCWJyZWFrOworCWNhc2Ug
TUJJTV9TVEFUVVNfTk9UX0lOSVRJQUxJWkVEOgorCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9E
RUJVRykKKwkJCWxvZyhMT0dfRVJSLCAiJXM6IFNJTSBub3QgaW5pdGlhbGl6ZWQgKFBJTiBtaXNz
aW5nKVxuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJcmV0dXJuOworCWNhc2UgTUJJTV9TVEFU
VVNfUElOX1JFUVVJUkVEOgorCQlzYy0+c2NfaW5mby5waW5fc3RhdGUgPSBVTUJfUElOX1JFUVVJ
UkVEOworCQkvKkZBTExUSFJPVUdIKi8KKwlkZWZhdWx0OgorCQlpZiAoaWZwLT5pZl9mbGFncyAm
IElGRl9ERUJVRykKKwkJCWxvZyhMT0dfRVJSLCAiJXM6IHNldC9xcnkgJXMgZmFpbGVkOiAlc1xu
IiwgREVWTkFNKHNjKSwKKwkJCSAgICB1bWJfY2lkMnN0cihjaWQpLCB1bWJfc3RhdHVzMnN0cihz
dGF0dXMpKTsKKwkJcmV0dXJuOworCX0KKworCWluZm9sZW4gPSBsZTMydG9oKGNtZC0+aW5mb2xl
bik7CisJaWYgKGxlbiA8IHNpemVvZiAoKmNtZCkgKyBpbmZvbGVuKSB7CisJCURQUklOVEYoImRp
c2NhcmQgdHJ1bmNhdGVkICVzIG1lc3NhZ2UgKHdhbnQgJWQsIGdvdCAlZClcbiIsCisJCSAgICB1
bWJfY2lkMnN0cihjaWQpLAorCQkgICAgKGludClzaXplb2YgKCpjbWQpICsgaW5mb2xlbiwgbGVu
KTsKKwkJcmV0dXJuOworCX0KKwlpZiAocW1pbXNnKSB7CisJCWlmIChzYy0+c2NfZmxhZ3MgJiBV
TUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQpCisJCQl1bWJfZGVjb2RlX3FtaShzYywgY21kLT5pbmZv
LCBpbmZvbGVuKTsKKwl9IGVsc2UgeworCQlEUFJJTlRGTigyLCAic2V0L3FyeSAlcyBkb25lXG4i
LAorCQkgICAgdW1iX2NpZDJzdHIoY2lkKSk7CisJCXVtYl9kZWNvZGVfY2lkKHNjLCBjaWQsIGNt
ZC0+aW5mbywgaW5mb2xlbik7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2RlY29kZV9jaWQo
c3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQzMl90IGNpZCwgdm9pZCAqZGF0YSwgaW50IGxlbikK
K3sKKwlpbnQJIG9rID0gMTsKKworCXN3aXRjaCAoY2lkKSB7CisJY2FzZSBNQklNX0NJRF9ERVZJ
Q0VfQ0FQUzoKKwkJb2sgPSB1bWJfZGVjb2RlX2RldmljZXNfY2FwcyhzYywgZGF0YSwgbGVuKTsK
KwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUzoKKwkJb2sg
PSB1bWJfZGVjb2RlX3N1YnNjcmliZXJfc3RhdHVzKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsK
KwljYXNlIE1CSU1fQ0lEX1JBRElPX1NUQVRFOgorCQlvayA9IHVtYl9kZWNvZGVfcmFkaW9fc3Rh
dGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUElOOgorCQlvayA9
IHVtYl9kZWNvZGVfcGluKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lE
X1JFR0lTVEVSX1NUQVRFOgorCQlvayA9IHVtYl9kZWNvZGVfcmVnaXN0ZXJfc3RhdGUoc2MsIGRh
dGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfUEFDS0VUX1NFUlZJQ0U6CisJCW9r
ID0gdW1iX2RlY29kZV9wYWNrZXRfc2VydmljZShzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJ
Y2FzZSBNQklNX0NJRF9TSUdOQUxfU1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9zaWduYWxfc3Rh
dGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURfQ09OTkVDVDoKKwkJ
b2sgPSB1bWJfZGVjb2RlX2Nvbm5lY3RfaW5mbyhzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJ
Y2FzZSBNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OOgorCQlvayA9IHVtYl9kZWNvZGVfaXBfY29u
ZmlndXJhdGlvbihzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJ
ICogTm90ZTogdGhlIGFib3ZlIGxpc3QgaXMgaW5jb21wbGV0ZSBhbmQgb25seSBjb250YWlucwor
CQkgKgltYW5kYXRvcnkgQ0lEcyBmcm9tIHRoZSBCQVNJQ19DT05ORUNUIHNldC4KKwkJICoJU28g
YWx0ZXJuYXRlIHZhbHVlcyBhcmUgbm90IHVudXN1YWwuCisJCSAqLworCQlEUFJJTlRGTig0LCAi
aWdub3JlICVzXG4iLCB1bWJfY2lkMnN0cihjaWQpKTsKKwkJYnJlYWs7CisJfQorCWlmICghb2sp
CisJCURQUklOVEYoImRpc2NhcmQgJXMgd2l0aCBiYWQgaW5mbyBsZW5ndGggJWRcbiIsCisJCSAg
ICB1bWJfY2lkMnN0cihjaWQpLCBsZW4pOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9kZWNvZGVfcW1pKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB1aW50OF90ICpkYXRhLCBpbnQgbGVu
KQoreworCXVpbnQ4X3QJc3J2OworCXVpbnQxNl90IG1zZywgdGx2bGVuOworCXVpbnQzMl90IHZh
bDsKKworI2RlZmluZSBVTUJfUU1JX1FNVVhMRU4JCTYKKwlpZiAobGVuIDwgVU1CX1FNSV9RTVVY
TEVOKQorCQlnb3RvIHRvb3Nob3J0OworCisJc3J2ID0gZGF0YVs0XTsKKwlkYXRhICs9IFVNQl9R
TUlfUU1VWExFTjsKKwlsZW4gLT0gVU1CX1FNSV9RTVVYTEVOOworCisjZGVmaW5lIFVNQl9HRVQx
NihwKQkoKHVpbnQxNl90KSpwIHwgKHVpbnQxNl90KSoocCArIDEpIDw8IDgpCisjZGVmaW5lIFVN
Ql9HRVQzMihwKQkoKHVpbnQzMl90KSpwIHwgKHVpbnQzMl90KSoocCArIDEpIDw8IDggfCBcCisJ
CQkgICAgKHVpbnQzMl90KSoocCArIDIpIDw8IDE2IHwodWludDMyX3QpKihwICsgMykgPDwgMjQp
CisJc3dpdGNoIChzcnYpIHsKKwljYXNlIDA6CS8qIGN0bCAqLworI2RlZmluZSBVTUJfUU1JX0NU
TExFTgkJNgorCQlpZiAobGVuIDwgVU1CX1FNSV9DVExMRU4pCisJCQlnb3RvIHRvb3Nob3J0Owor
CQltc2cgPSBVTUJfR0VUMTYoJmRhdGFbMl0pOworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFb
NF0pOworCQlkYXRhICs9IFVNQl9RTUlfQ1RMTEVOOworCQlsZW4gLT0gVU1CX1FNSV9DVExMRU47
CisJCWJyZWFrOworCWNhc2UgMjoJLyogZG1zICAqLworI2RlZmluZSBVTUJfUU1JX0RNU0xFTgkJ
NworCQlpZiAobGVuIDwgVU1CX1FNSV9ETVNMRU4pCisJCQlnb3RvIHRvb3Nob3J0OworCQltc2cg
PSBVTUJfR0VUMTYoJmRhdGFbM10pOworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFbNV0pOwor
CQlkYXRhICs9IFVNQl9RTUlfRE1TTEVOOworCQlsZW4gLT0gVU1CX1FNSV9ETVNMRU47CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoImRpc2NhcmQgUU1JIG1lc3NhZ2UgZm9yIHVua25v
d24gc2VydmljZSB0eXBlICVkXG4iLAorCQkgICAgc3J2KTsKKwkJcmV0dXJuOworCX0KKworCWlm
IChsZW4gPCB0bHZsZW4pCisJCWdvdG8gdG9vc2hvcnQ7CisKKyNkZWZpbmUgVU1CX1FNSV9UTFZM
RU4JCTMKKwl3aGlsZSAobGVuID4gMCkgeworCQlpZiAobGVuIDwgVU1CX1FNSV9UTFZMRU4pCisJ
CQlnb3RvIHRvb3Nob3J0OworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFbMV0pOworCQlpZiAo
bGVuIDwgVU1CX1FNSV9UTFZMRU4gKyB0bHZsZW4pCisJCQlnb3RvIHRvb3Nob3J0OworCQlzd2l0
Y2ggKGRhdGFbMF0pIHsKKwkJY2FzZSAxOgkvKiBhbGxvY2F0aW9uIGluZm8gKi8KKwkJCWlmICht
c2cgPT0gMHgwMDIyKSB7CS8qIEFsbG9jYXRlIENJRCAqLworCQkJCWlmICh0bHZsZW4gIT0gMiB8
fCBkYXRhWzNdICE9IDIpIC8qIGRtcyAqLworCQkJCQlicmVhazsKKwkJCQlzYy0+c2NfY2lkID0g
ZGF0YVs0XTsKKwkJCQlEUFJJTlRGKCJRTUkgQ0lEICVkIGFsbG9jYXRlZFxuIiwKKwkJCQkgICAg
c2MtPnNjX2NpZCk7CisJCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19DSUQsIFVNQl9OU19ET05U
X0RST1ApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoJLyogcmVzcG9uc2UgKi8KKwkJCWlm
ICh0bHZsZW4gIT0gc2l6ZW9mICh2YWwpKQorCQkJCWJyZWFrOworCQkJdmFsID0gVU1CX0dFVDMy
KCZkYXRhWzNdKTsKKwkJCXN3aXRjaCAobXNnKSB7CisJCQljYXNlIDB4MDAyMjoJLyogQWxsb2Nh
dGUgQ0lEICovCisJCQkJaWYgKHZhbCAhPSAwKSB7CisJCQkJCWxvZyhMT0dfRVJSLCAiJXM6IGFs
bG9jYXRpb24gb2YgUU1JIENJRCIKKwkJCQkJICAgICIgZmFpbGVkLCBlcnJvciAweCV4XG4iLCBE
RVZOQU0oc2MpLAorCQkJCQkgICAgdmFsKTsKKwkJCQkJLyogWFhYIGhvdyB0byBwcm9jZWVkPyAq
LworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAweDU1NWY6CS8qIFNl
bmQgRkNDIEF1dGhlbnRpY2F0aW9uICovCisJCQkJaWYgKHZhbCA9PSAwKQorCQkJCQlEUFJJTlRG
KCIlczogc2VuZCBGQ0MgIgorCQkJCQkgICAgIkF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZFxuIiwK
KwkJCQkJICAgIERFVk5BTShzYykpOworCQkJCWVsc2UgaWYgKHZhbCA9PSAweDAwMWEwMDAxKQor
CQkJCQlEUFJJTlRGKCIlczogRkNDIEF1dGhlbnRpY2F0aW9uICIKKwkJCQkJICAgICJub3QgcmVx
dWlyZWRcbiIsIERFVk5BTShzYykpOworCQkJCWVsc2UKKwkJCQkJbG9nKExPR19JTkZPLCAiJXM6
IHNlbmQgRkNDICIKKwkJCQkJICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQsICIKKwkJCQkJICAg
ICJlcnJvciAweCV4XG4iLCBERVZOQU0oc2MpLCB2YWwpOworCisJCQkJLyogRkNDIEF1dGggaXMg
bmVlZGVkIG9ubHkgb25jZSBhZnRlciBwb3dlci1vbiovCisJCQkJc2MtPnNjX2ZsYWdzICY9IH5V
TUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQ7CisKKwkJCQkvKiBUcnkgdG8gcHJvY2VlZCBhbnl3YXkg
Ki8KKwkJCQlEUFJJTlRGKCJpbml0OiB0dXJuaW5nIHJhZGlvIG9uIC4uLlxuIik7CisJCQkJdW1i
X3JhZGlvKHNjLCAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9
CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWRhdGEgKz0gVU1CX1FN
SV9UTFZMRU4gKyB0bHZsZW47CisJCWxlbiAtPSBVTUJfUU1JX1RMVkxFTiArIHRsdmxlbjsKKwl9
CisJcmV0dXJuOworCit0b29zaG9ydDoKKwlEUFJJTlRGKCJkaXNjYXJkIHNob3J0IFFNSSBtZXNz
YWdlXG4iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaW50cihzdHJ1Y3QgdXNi
X3hmZXIgKnhmZXIsIHVzYl9lcnJvcl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpz
YyA9IHVzYmRfeGZlcl9zb2Z0Yyh4ZmVyKTsKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24g
bm90aWZpY2F0aW9uOworCXN0cnVjdCB1c2JfcGFnZV9jYWNoZSAqcGM7CisJc3RydWN0IGlmbmV0
ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlpbnQJIHRvdGFsX2xlbjsKKworCW10eF9hc3NlcnQoJnNj
LT5zY19tdXRleCwgTUFfT1dORUQpOworCisJLyogRklYTUUgdXNlIGFjdGxlbiBvciB0b3RhbF9s
ZW4/ICovCisJdXNiZF94ZmVyX3N0YXR1cyh4ZmVyLCAmdG90YWxfbGVuLCBOVUxMLCBOVUxMLCBO
VUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1RS
QU5TRkVSUkVEOgorCQlEUFJJTlRGKCJSZWNlaXZlZCAlZCBieXRlc1xuIiwgdG90YWxfbGVuKTsK
KworCQlpZiAodG90YWxfbGVuIDwgVUNEQ19OT1RJRklDQVRJT05fTEVOR1RIKSB7CisJCQlEUFJJ
TlRGKCJzaG9ydCBub3RpZmljYXRpb24gKCVkPCVkKVxuIiwKKwkJCQkJdG90YWxfbGVuLCBVQ0RD
X05PVElGSUNBVElPTl9MRU5HVEgpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGMgPSB1c2JkX3hm
ZXJfZ2V0X2ZyYW1lKHhmZXIsIDApOworCQl1c2JkX2NvcHlfb3V0KHBjLCAwLCAmbm90aWZpY2F0
aW9uLCBzaXplb2YgKG5vdGlmaWNhdGlvbikpOworCisJCWlmIChub3RpZmljYXRpb24uYm1SZXF1
ZXN0VHlwZSAhPSBVQ0RDX05PVElGSUNBVElPTikgeworCQkJRFBSSU5URigidW5leHBlY3RlZCBu
b3RpZmljYXRpb24gKHR5cGU9MHglMDJ4KVxuIiwKKwkJCQkJbm90aWZpY2F0aW9uLmJtUmVxdWVz
dFR5cGUpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uYk5vdGlm
aWNhdGlvbikgeworCQljYXNlIFVDRENfTl9ORVRXT1JLX0NPTk5FQ1RJT046CisJCQlpZiAoaWZw
LT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCQlsb2coTE9HX0RFQlVHLCAiJXM6IG5ldHdvcmsg
JXNjb25uZWN0ZWRcbiIsCisJCQkJCQlERVZOQU0oc2MpLAorCQkJCQkJVUdFVFcobm90aWZpY2F0
aW9uLndWYWx1ZSkKKwkJCQkJCT8gIiIgOiAiZGlzIik7CisJCQlicmVhazsKKwkJY2FzZSBVQ0RD
X05fUkVTUE9OU0VfQVZBSUxBQkxFOgorCQkJRFBSSU5URk4oMiwgInVtYl9pbnRyOiByZXNwb25z
ZSBhdmFpbGFibGVcbiIpOworCQkJKytzYy0+c2NfbnJlc3A7CisJCQl1bWJfYWRkX3Rhc2soc2Ms
IHVtYl9nZXRfcmVzcG9uc2VfdGFzaywKKwkJCQkJJnNjLT5zY19wcm9jX2dldF9yZXNwb25zZV90
YXNrWzBdLmhkciwKKwkJCQkJJnNjLT5zY19wcm9jX2dldF9yZXNwb25zZV90YXNrWzFdLmhkciwK
KwkJCQkJMCk7CisJCQlicmVhazsKKwkJY2FzZSBVQ0RDX05fQ09OTkVDVElPTl9TUEVFRF9DSEFO
R0U6CisJCQlEUFJJTlRGTigyLCAidW1iX2ludHI6IGNvbm5lY3Rpb24gc3BlZWQgY2hhbmdlZFxu
Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoInVuZXhwZWN0ZWQgbm90aWZp
Y2F0aW9uICgweCUwMngpXG4iLAorCQkJCQlub3RpZmljYXRpb24uYk5vdGlmaWNhdGlvbik7CisJ
CQlicmVhazsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgVVNCX1NUX1NFVFVQOgor
dHJfc2V0dXA6CisJCXVzYmRfeGZlcl9zZXRfZnJhbWVfbGVuKHhmZXIsIDAsIHVzYmRfeGZlcl9t
YXhfbGVuKHhmZXIpKTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKKwkJCS8qIHN0
YXJ0IGNsZWFyIHN0YWxsICovCisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJZ290
byB0cl9zZXR1cDsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBEaWFnbm9zdGljIHJv
dXRpbmVzCisgKi8KK3N0YXRpYyBjaGFyICoKK3VtYl9udG9wKHN0cnVjdCBzb2NrYWRkciAqc2Ep
Cit7CisjZGVmaW5lIE5VTUJVRlMJCTQKKwlzdGF0aWMgY2hhciBhc3RyW05VTUJVRlNdW0lORVRf
QUREUlNUUkxFTl07CisJc3RhdGljIHVuc2lnbmVkIG5idWYgPSAwOworCWNoYXIJKnM7CisKKwlz
ID0gYXN0cltuYnVmKytdOworCWlmIChuYnVmID49IE5VTUJVRlMpCisJCW5idWYgPSAwOworCisJ
c3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCWRlZmF1bHQ6CisJCWlu
ZXRfbnRvcChBRl9JTkVULCAmc2F0b3NpbihzYSktPnNpbl9hZGRyLCBzLCBzaXplb2YgKGFzdHJb
MF0pKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAm
c2F0b3NpbjYoc2EpLT5zaW42X2FkZHIsIHMsCisJCSAgICBzaXplb2YgKGFzdHJbMF0pKTsKKwkJ
YnJlYWs7CisJfQorCXJldHVybiBzOworfQorCisjaWZkZWYgVU1CX0RFQlVHCitzdGF0aWMgY2hh
ciAqCit1bWJfdXVpZDJzdHIodWludDhfdCB1dWlkW01CSU1fVVVJRF9MRU5dKQoreworCXN0YXRp
YyBjaGFyIHV1aWRzdHJbMiAqIE1CSU1fVVVJRF9MRU4gKyA1XTsKKworI2RlZmluZSBVVUlEX0JG
TVQJIiUwMlgiCisjZGVmaW5lIFVVSURfU0VQCSItIgorCXNucHJpbnRmKHV1aWRzdHIsIHNpemVv
ZiAodXVpZHN0ciksCisJICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZN
VCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQCisJICAgIFVVSURf
QkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAKKwkgICAgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX1NF
UAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1U
IFVVSURfQkZNVCwKKwkgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVp
ZFs0XSwgdXVpZFs1XSwKKwkgICAgdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwg
dXVpZFsxMF0sIHV1aWRbMTFdLAorCSAgICB1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1
dWlkWzE1XSk7CisJcmV0dXJuIHV1aWRzdHI7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZHVtcCh2
b2lkICpidWYsIGludCBsZW4pCit7CisJaW50CSBpID0gMDsKKwl1aW50OF90CSpjID0gYnVmOwor
CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm47CisJd2hpbGUgKGkgPCBsZW4pIHsKKwkJaWYgKChp
ICUgMTYpID09IDApIHsKKwkJCWlmIChpID4gMCkKKwkJCQlsb2coTE9HX0RFQlVHLCAiXG4iKTsK
KwkJCWxvZyhMT0dfREVCVUcsICIlNGQ6ICAiLCBpKTsKKwkJfQorCQlsb2coTE9HX0RFQlVHLCAi
ICUwMngiLCAqYyk7CisJCWMrKzsKKwkJaSsrOworCX0KKwlsb2coTE9HX0RFQlVHLCAiXG4iKTsK
K30KKyNlbmRpZiAvKiBVTUJfREVCVUcgKi8KKworRFJJVkVSX01PRFVMRSh1bWIsIHVodWIsIHVt
Yl9kcml2ZXIsIE5VTEwsIE5VTEwpOworTU9EVUxFX0RFUEVORCh1bWIsIHVzYiwgMSwgMSwgMSk7
CmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmggYi9zeXMvZGV2L3VzYi9u
ZXQvaWZfdW1icmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5h
MTM0YTMwNzM0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVn
LmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qCSRPcGVuQlNEOiBpZl91bWIuaCx2IDEuNCAyMDE3LzA0
LzE4IDEzOjI3OjU1IGdlcmhhcmQgRXhwICQgKi8KKworLyoKKyAqIE9yaWdpbmFsIGNvcHlyaWdo
dCAoYykgMjAxNiBnZW51YSBtYkggKE9wZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQZXJtaXNzaW9u
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBh
bnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJv
dmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX
QVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwg
SU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hB
VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU
SEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9S
VElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMjIgQURJU1RBIFNBUyAocmUtd3JpdGUgZm9yIEZyZWVCU0QpCisgKgorICogUmUtd3Jp
dGUgZm9yIEZyZWVCU0QgYnkgUGllcnJlIFByb25jaGVyeSA8cGllcnJlQGRlZm9yYS5uZXQ+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisg
KiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAq
IE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsCisgKiBodHRwOi8vd3d3LnVzYi5vcmcv
ZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAq
LworCitzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHsKKwlpbnQJCSB2YWw7CisJY2hhciBjb25zdAkqZGVz
Y3I7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqCit1bWJfdmFsMmRlc2NyKGNvbnN0IHN0cnVj
dCB1bWJfdmFsZGVzY3IgKnZkcCwgaW50IHZhbCkKK3sKKwlzdGF0aWMgY2hhciBzdmFsWzMyXTsK
KworCXdoaWxlICh2ZHAtPmRlc2NyICE9IE5VTEwpIHsKKwkJaWYgKHZkcC0+dmFsID09IHZhbCkK
KwkJCXJldHVybiB2ZHAtPmRlc2NyOworCQl2ZHArKzsKKwl9CisJc25wcmludGYoc3ZhbCwgc2l6
ZW9mIChzdmFsKSwgIiMlZCIsIHZhbCk7CisJcmV0dXJuIHN2YWw7Cit9CisKKyNkZWZpbmUgTUJJ
TV9SRUdTVEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBNQklNX1JFR1NUQVRFX1VOS05PV04s
CSJ1bmtub3duIiB9LAkJXAorCXsgTUJJTV9SRUdTVEFURV9ERVJFR0lTVEVSRUQsCSJub3QgcmVn
aXN0ZXJlZCIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9TRUFSQ0hJTkcsCSJzZWFyY2hpbmciIH0s
CQlcCisJeyBNQklNX1JFR1NUQVRFX0hPTUUsCQkiaG9tZSBuZXR3b3JrIiB9LAlcCisJeyBNQklN
X1JFR1NUQVRFX1JPQU1JTkcsCSJyb2FtaW5nIG5ldHdvcmsiIH0sCVwKKwl7IE1CSU1fUkVHU1RB
VEVfUEFSVE5FUiwJInBhcnRuZXIgbmV0d29yayIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9ERU5J
RUQsCQkiYWNjZXNzIGRlbmllZCIgfSwJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklN
X0RBVEFDTEFTU19ERVNDUklQVElPTlMgewkJCQkJXAorCXsgTUJJTV9EQVRBQ0xBU1NfTk9ORSwJ
CQkJIm5vbmUiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0dQUlMsCQkJCSJHUFJTIiB9LAlcCisJ
eyBNQklNX0RBVEFDTEFTU19FREdFLAkJCQkiRURHRSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1Nf
VU1UUywJCQkJIlVNVFMiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0hTRFBBLAkJCQkiSFNEUEEi
IH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0hTVVBBLAkJCQkiSFNVUEEiIH0sCVwKKwl7IE1CSU1f
REFUQUNMQVNTX0hTRFBBfE1CSU1fREFUQUNMQVNTX0hTVVBBLAkiSFNQQSIgfSwJXAorCXsgTUJJ
TV9EQVRBQ0xBU1NfTFRFLAkJCQkiTFRFIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWFJUVCwJ
CQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRE8sCQkJIkNETUEyMDAw
IiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRE9fUkVWX0EsCQkJIkNETUEyMDAwIiB9LAlc
CisJeyBNQklNX0RBVEFDTEFTU18xWEVWRFYsCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RB
VEFDTEFTU18zWFJUVCwJCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVW
RE9fUkVWX0IsCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19VTUIsCQkJCSJD
RE1BMjAwMCIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfQ1VTVE9NLAkJCSJjdXN0b20iIH0sCVwK
Kwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV8xVE8xX0RFU0NSSVBUSU9OKG0pCXsgKG0p
LCAjbSB9CisjZGVmaW5lIE1CSU1fTUVTU0FHRVNfREVTQ1JJUFRJT05TIHsJCQkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX09QRU5fTVNHKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fQ0xPU0VfTVNHKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ09N
TUFORF9NU0cpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0hPU1RfRVJST1JfTVNH
KSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9PUEVOX0RPTkUpLAkJCVwKKwlNQklN
XzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DTE9TRV9ET05FKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NS
SVBUSU9OKE1CSU1fQ09NTUFORF9ET05FKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJ
TV9GVU5DVElPTl9FUlJPUl9NU0cpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0lO
RElDQVRFX1NUQVRVU19NU0cpLAlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKG0pCXsgTUJJTV9TVEFUVVNfICMjIG0sICNtIH0KKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfREVTQ1JJUFRJT05TIHsJCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihT
VUNDRVNTKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEJVU1kpLAkJCQkJXAorCU1C
SU1fU1RBVFVTX0RFU0NSSVBUSU9OKEZBSUxVUkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oU0lNX05PVF9JTlNFUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEJB
RF9TSU0pLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUElOX1JFUVVJUkVEKSwJCQkJ
XAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBJTl9ESVNBQkxFRCksCQkJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihOT1RfUkVHSVNURVJFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKFBST1ZJREVSU19OT1RfRk9VTkQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElP
TihOT19ERVZJQ0VfU1VQUE9SVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBST1ZJ
REVSX05PVF9WSVNJQkxFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oREFUQV9DTEFT
U19OT1RfQVZBSUxBQkxFKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihQQUNLRVRfU0VS
VklDRV9ERVRBQ0hFRCksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTUFYX0FDVElWQVRF
RF9DT05URVhUUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTk9UX0lOSVRJQUxJWkVE
KSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oVk9JQ0VfQ0FMTF9JTl9QUk9HUkVTUyks
CQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQ09OVEVYVF9OT1RfQUNUSVZBVEVEKSwJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU0VSVklDRV9OT1RfQUNUSVZBVEVEKSwJCQlcCisJ
TUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9BQ0NFU1NfU1RSSU5HKSwJCQlcCisJTUJJ
TV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9VU0VSX05BTUVfUFdEKSwJCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oUkFESU9fUE9XRVJfT0ZGKSwJCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oSU5WQUxJRF9QQVJBTUVURVJTKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04oUkVBRF9GQUlMVVJFKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFdSSVRFX0ZB
SUxVUkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oTk9fUEhPTkVCT09LKSwJCQkJ
XAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBBUkFNRVRFUl9UT09fTE9ORyksCQkJXAorCU1C
SU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNUS19CVVNZKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKE9QRVJBVElPTl9OT1RfQUxMT1dFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKE1FTU9SWV9GQUlMVVJFKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJ
RF9NRU1PUllfSU5ERVgpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihNRU1PUllfRlVM
TCksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihGSUxURVJfTk9UX1NVUFBPUlRFRCks
CQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKERTU19JTlNUQU5DRV9MSU1JVCksCQkJXAor
CU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKElOVkFMSURfREVWSUNFX1NFUlZJQ0VfT1BFUkFUSU9O
KSwJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhfSU5DT1JSRUNUX0FVVE4pLAkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihBVVRIX1NZTkNfRkFJTFVSRSksCQkJXAorCU1CSU1f
U1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhfQU1GX05PVF9TRVQpLAkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihDT05URVhUX05PVF9TVVBQT1JURUQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihTTVNfVU5LTk9XTl9TTVNDX0FERFJFU1MpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKFNNU19ORVRXT1JLX1RJTUVPVVQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElP
TihTTVNfTEFOR19OT1RfU1VQUE9SVEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihT
TVNfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04o
U01TX0ZPUk1BVF9OT1RfU1VQUE9SVEVEKSwJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUg
TUJJTV9FUlJPUl9ERVNDUklQVElPTihtKQl7IE1CSU1fRVJST1JfICMjIG0sICNtIH0KKyNkZWZp
bmUgTUJJTV9FUlJPUl9ERVNDUklQVElPTlMgewkJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJ
T04oVElNRU9VVF9GUkFHTUVOVCksCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oRlJBR01F
TlRfT1VUX09GX1NFUVVFTkNFKSwJCVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKExFTkdUSF9N
SVNNQVRDSCksCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oRFVQTElDQVRFRF9USUQpLAkJ
CQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihOT1RfT1BFTkVEKSwJCQkJXAorCU1CSU1fRVJS
T1JfREVTQ1JJUFRJT04oVU5LTk9XTiksCQkJCVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKENB
TkNFTCksCQkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihNQVhfVFJBTlNGRVIpLAkJCQlc
CisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fQ0lEX0RFU0NSSVBUSU9OUyB7CQkJCQkJ
XAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9ERVZJQ0VfQ0FQUyksCQkJXAorCU1C
SU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUyksCVwK
KwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUkFESU9fU1RBVEUpLAkJCVwKKwlNQklN
XzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUElOKSwJCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQ
VElPTihNQklNX0NJRF9QSU5fTElTVCksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklN
X0NJRF9IT01FX1BST1ZJREVSKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lE
X1BSRUZFUlJFRF9QUk9WSURFUlMpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJ
RF9WSVNJQkxFX1BST1ZJREVSUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lE
X1JFR0lTVEVSX1NUQVRFKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BB
Q0tFVF9TRVJWSUNFKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1NJR05B
TF9TVEFURSksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9DT05ORUNUKSwJ
CQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BST1ZJU0lPTkVEX0NPTlRFWFRT
KSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfU0VSVklDRV9BQ1RJVkFUSU9O
KSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTiks
CQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFUyksCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFX1NVQlNDUklC
RV9MSVNUKSwJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9QQUNLRVRfU1RBVElT
VElDUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX05FVFdPUktfSURMRV9I
SU5UKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfRU1FUkdFTkNZX01PREUp
LAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfSVBfUEFDS0VUX0ZJTFRFUlMp
LAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9NVUxUSUNBUlJJRVJfUFJPVklE
RVJTKSwJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9ERVNDUklQ
VElPTlMgewkJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9OT1RJTklUSUFMSVpFRCwgIm5vdCBpbml0
aWFsaXplZCIgfSwJCVwKKwl7IE1CSU1fU0lNU1RBVEVfSU5JVElBTElaRUQsICJpbml0aWFsaXpl
ZCIgfSwJCQlcCisJeyBNQklNX1NJTVNUQVRFX05PVElOU0VSVEVELCAibm90IGluc2VydGVkIiB9
LAkJCVwKKwl7IE1CSU1fU0lNU1RBVEVfQkFEU0lNLCAiYmFkIHR5cGUiIH0sCQkJCVwKKwl7IE1C
SU1fU0lNU1RBVEVfRkFJTFVSRSwgImZhaWxlZCIgfSwJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9O
T1RBQ1RJVkFURUQsICJub3QgYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9TSU1TVEFURV9MT0NL
RUQsICJsb2NrZWQiIH0sCQkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9QSU5U
WVBFX0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX05PTkUsICJub25lIiB9
LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9DVVNUT00sICJjdXN0b20iIH0sCQkJCVwKKwl7IE1C
SU1fUElOX1RZUEVfUElOMSwgIlBJTjEiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX1BJTjIs
ICJQSU4yIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ERVZfU0lNX1BJTiwgImRldmljZSBQ
SU4iIH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ERVZfRklSU1RfU0lNX1BJTiwgImRldmljZSAx
c3QgUElOIiB9LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1BJTiwgIm5ldHdvcmsgUElO
IiB9LAkJCVwKKwl7IE1CSU1fUElOX1RZUEVfTkVUV09SS19TVUJTRVRfUElOLCAibmV0d29yayBz
dWJzZXQgUElOIiB9LAlcCisJeyBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUElOLCAi
cHJvdmlkZXIgUElOIiB9LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVfUElOLCAiY29y
cG9yYXRlIFBJTiIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVfU1VCU0lEWV9MT0NLLCAic3Vic2lk
eSBsb2NrIiB9LAkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUFVLMSwgIlBVSyIgfSwJCQkJCVwKKwl7
IE1CSU1fUElOX1RZUEVfUFVLMiwgIlBVSzIiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX0RF
Vl9GSVJTVF9TSU1fUFVLLCAiZGV2aWNlIDFzdCBQVUsiIH0sCQlcCisJeyBNQklNX1BJTl9UWVBF
X05FVFdPUktfUFVLLCAibmV0d29yayBQVUsiIH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ORVRX
T1JLX1NVQlNFVF9QVUssICJuZXR3b3JrIHN1YnNldCBQVUsiIH0sCVwKKwl7IE1CSU1fUElOX1RZ
UEVfU0VSVklDRV9QUk9WSURFUl9QVUssICJwcm92aWRlciBQVUsiIH0sCQlcCisJeyBNQklNX1BJ
Tl9UWVBFX0NPUlBPUkFURV9QVUssICJjb3Jwb3JhdGUgUFVLIiB9LAkJXAorCXsgMCwgTlVMTCB9
IH0KKworI2RlZmluZSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBN
QklNX1BLVFNFUlZJQ0VfU1RBVEVfVU5LTk9XTiwgInVua25vd24iIH0sCQkJXAorCXsgTUJJTV9Q
S1RTRVJWSUNFX1NUQVRFX0FUVEFDSElORywgImF0dGFjaGluZyIgfSwJCVwKKwl7IE1CSU1fUEtU
U0VSVklDRV9TVEFURV9BVFRBQ0hFRCwgImF0dGFjaGVkIiB9LAkJCVwKKwl7IE1CSU1fUEtUU0VS
VklDRV9TVEFURV9ERVRBQ0hJTkcsICJkZXRhY2hpbmciIH0sCQlcCisJeyBNQklNX1BLVFNFUlZJ
Q0VfU1RBVEVfREVUQUNIRUQsICJkZXRhY2hlZCIgfSwJCQlcCisJeyAwLCBOVUxMIH0gfQorCisj
ZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBNQklN
X0FDVElWQVRJT05fU1RBVEVfVU5LTk9XTiwgInVua25vd24iIH0sCQkJXAorCXsgTUJJTV9BQ1RJ
VkFUSU9OX1NUQVRFX0FDVElWQVRFRCwgImFjdGl2YXRlZCIgfSwJCVwKKwl7IE1CSU1fQUNUSVZB
VElPTl9TVEFURV9BQ1RJVkFUSU5HLCAiYWN0aXZhdGluZyIgfSwJCVwKKwl7IE1CSU1fQUNUSVZB
VElPTl9TVEFURV9ERUFDVElWQVRFRCwgImRlYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9BQ1RJ
VkFUSU9OX1NUQVRFX0RFQUNUSVZBVElORywgImRlYWN0aXZhdGluZyIgfSwJCVwKKwl7IDAsIE5V
TEwgfSB9CisKKy8qCisgKiBEcml2ZXIgaW50ZXJuYWwgc3RhdGUKKyAqLworZW51bSB1bWJfc3Rh
dGUgeworCVVNQl9TX0RPV04gPSAwLAkJLyogaW50ZXJmYWNlIGRvd24gKi8KKwlVTUJfU19PUEVO
LAkJLyogTUJJTSBkZXZpY2UgaGFzIGJlZW4gb3BlbmVkICovCisJVU1CX1NfQ0lELAkJLyogUU1J
IGNsaWVudCBpZCBhbGxvY2F0ZWQgKi8KKwlVTUJfU19SQURJTywJCS8qIHJhZGlvIGlzIG9uICov
CisJVU1CX1NfU0lNUkVBRFksCQkvKiBTSU0gaXMgcmVhZHkgKi8KKwlVTUJfU19BVFRBQ0hFRCwJ
CS8qIHBhY2tldCBzZXJ2aWNlIGlzIGF0dGFjaGVkICovCisJVU1CX1NfQ09OTkVDVEVELAkvKiBj
b25uZWN0ZWQgdG8gcHJvdmlkZXIgKi8KKwlVTUJfU19VUCwJCS8qIGhhdmUgSVAgY29uZmlndXJh
dGlvbiAqLworfTsKKworI2RlZmluZSBVTUJfSU5URVJOQUxfU1RBVEVfREVTQ1JJUFRJT05TIHsJ
XAorCXsgVU1CX1NfRE9XTiwgImRvd24iIH0sCQkJXAorCXsgVU1CX1NfT1BFTiwgIm9wZW4iIH0s
CQkJXAorCXsgVU1CX1NfQ0lELCAiQ0lEIGFsbG9jYXRlZCIgfSwJCVwKKwl7IFVNQl9TX1JBRElP
LCAicmFkaW8gb24iIH0sCQlcCisJeyBVTUJfU19TSU1SRUFEWSwgIlNJTSBpcyByZWFkeSIgfSwJ
XAorCXsgVU1CX1NfQVRUQUNIRUQsICJhdHRhY2hlZCIgfSwJCVwKKwl7IFVNQl9TX0NPTk5FQ1RF
RCwgImNvbm5lY3RlZCIgfSwJXAorCXsgVU1CX1NfVVAsICJ1cCIgfSwJCQlcCisJeyAwLCBOVUxM
IH0gfQorCisvKgorICogVU1CIHBhcmFtZXRlcnMgKFNJT0NbR1NdVU1CUEFSQU0gaW9jdGxzKQor
ICovCitzdHJ1Y3QgdW1iX3BhcmFtZXRlciB7CisJaW50CQkJb3A7CisJaW50CQkJaXNfcHVrOwor
CXVpbnQxNl90CQlwaW5bTUJJTV9QSU5fTUFYTEVOXTsKKwlpbnQJCQlwaW5sZW47CisKKwl1aW50
MTZfdAkJbmV3cGluW01CSU1fUElOX01BWExFTl07CisJaW50CQkJbmV3cGlubGVuOworCisjZGVm
aW5lIFVNQl9BUE5fTUFYTEVOCQkxMDAKKwl1aW50MTZfdAkJYXBuW1VNQl9BUE5fTUFYTEVOXTsK
KwlpbnQJCQlhcG5sZW47CisKKyNkZWZpbmUgVU1CX1VTRVJOQU1FX01BWExFTgkyMDUKKwl1aW50
MTZfdAkJdXNlcm5hbWVbVU1CX1VTRVJOQU1FX01BWExFTl07CisJaW50CQkJdXNlcm5hbWVsZW47
CisKKyNkZWZpbmUgVU1CX1BBU1NXT1JEX01BWExFTgkyMDUKKwl1aW50MTZfdAkJcGFzc3dvcmRb
VU1CX1BBU1NXT1JEX01BWExFTl07CisJaW50CQkJcGFzc3dvcmRsZW47CisKKwlpbnQJCQlyb2Ft
aW5nOworCXVpbnQzMl90CQlwcmVmZXJyZWRjbGFzc2VzOworfTsKKworLyoKKyAqIFVNQiBkZXZp
Y2Ugc3RhdHVzIGluZm8gKFNJT0NHVU1CSU5GTyBpb2N0bCkKKyAqLworc3RydWN0IHVtYl9pbmZv
IHsKKwllbnVtIHVtYl9zdGF0ZQkJc3RhdGU7CisJaW50CQkJZW5hYmxlX3JvYW1pbmc7CisjZGVm
aW5lIFVNQl9QSU5fUkVRVUlSRUQJMAorI2RlZmluZSBVTUJfUElOX1VOTE9DS0VECTEKKyNkZWZp
bmUgVU1CX1BVS19SRVFVSVJFRAkyCisJaW50CQkJcGluX3N0YXRlOworCWludAkJCXBpbl9hdHRl
bXB0c19sZWZ0OworCWludAkJCWFjdGl2YXRpb247CisJaW50CQkJc2ltX3N0YXRlOworCWludAkJ
CXJlZ3N0YXRlOworCWludAkJCXJlZ21vZGU7CisJaW50CQkJbndlcnJvcjsKKwlpbnQJCQlwYWNr
ZXRzdGF0ZTsKKwl1aW50MzJfdAkJc3VwcG9ydGVkY2xhc3NlczsgLyogd2hhdCB0aGUgaHcgc3Vw
cG9ydHMgKi8KKwl1aW50MzJfdAkJcHJlZmVycmVkY2xhc3NlczsgLyogd2hhdCB0aGUgdXNlciBw
cmVmZXJzICovCisJdWludDMyX3QJCWhpZ2hlc3RjbGFzczsJLyogd2hhdCB0aGUgbmV0d29yayBv
ZmZlcnMgKi8KKwl1aW50MzJfdAkJY2VsbGNsYXNzOworI2RlZmluZSBVTUJfUFJPVklERVJOQU1F
X01BWExFTgkJMjAKKwl1aW50MTZfdAkJcHJvdmlkZXJbVU1CX1BST1ZJREVSTkFNRV9NQVhMRU5d
OworI2RlZmluZSBVTUJfUEhPTkVOUl9NQVhMRU4JCTIyCisJdWludDE2X3QJCXBuW1VNQl9QSE9O
RU5SX01BWExFTl07CisjZGVmaW5lIFVNQl9TVUJTQ1JJQkVSSURfTUFYTEVOCQkxNQorCXVpbnQx
Nl90CQlzaWRbVU1CX1NVQlNDUklCRVJJRF9NQVhMRU5dOworI2RlZmluZSBVTUJfSUNDSURfTUFY
TEVOCQkyMAorCXVpbnQxNl90CQlpY2NpZFtVTUJfSUNDSURfTUFYTEVOXTsKKyNkZWZpbmUgVU1C
X1JPQU1JTkdURVhUX01BWExFTgkJNjMKKwl1aW50MTZfdAkJcm9hbWluZ3R4dFtVTUJfUk9BTUlO
R1RFWFRfTUFYTEVOXTsKKworI2RlZmluZSBVTUJfREVWSURfTUFYTEVOCQkxOAorCXVpbnQxNl90
CQlkZXZpZFtVTUJfREVWSURfTUFYTEVOXTsKKyNkZWZpbmUgVU1CX0ZXSU5GT19NQVhMRU4JCTMw
CisJdWludDE2X3QJCWZ3aW5mb1tVTUJfRldJTkZPX01BWExFTl07CisjZGVmaW5lIFVNQl9IV0lO
Rk9fTUFYTEVOCQkzMAorCXVpbnQxNl90CQlod2luZm9bVU1CX0hXSU5GT19NQVhMRU5dOworCisJ
dWludDE2X3QJCWFwbltVTUJfQVBOX01BWExFTl07CisJaW50CQkJYXBubGVuOworCisJdWludDE2
X3QJCXVzZXJuYW1lW1VNQl9VU0VSTkFNRV9NQVhMRU5dOworCWludAkJCXVzZXJuYW1lbGVuOwor
CisJdWludDE2X3QJCXBhc3N3b3JkW1VNQl9QQVNTV09SRF9NQVhMRU5dOworCWludAkJCXBhc3N3
b3JkbGVuOworCisjZGVmaW5lIFVNQl9WQUxVRV9VTktOT1dOCS05OTkKKwlpbnQJCQlyc3NpOwor
I2RlZmluZSBVTUJfQkVSX0VYQ0VMTEVOVAkwCisjZGVmaW5lIFVNQl9CRVJfVkVSWUdPT0QJMQor
I2RlZmluZSBVTUJfQkVSX0dPT0QJCTIKKyNkZWZpbmUgVU1CX0JFUl9PSwkJMworI2RlZmluZSBV
TUJfQkVSX01FRElVTQkJNAorI2RlZmluZSBVTUJfQkVSX0JBRAkJNQorI2RlZmluZSBVTUJfQkVS
X1ZFUllCQUQJCTYKKyNkZWZpbmUgVU1CX0JFUl9FWFRSRU1FTFlCQUQJNworCWludAkJCWJlcjsK
KworCWludAkJCWh3X3JhZGlvX29uOworCWludAkJCXN3X3JhZGlvX29uOworCisJdWludDY0X3QJ
CXVwbGlua19zcGVlZDsKKwl1aW50NjRfdAkJZG93bmxpbmtfc3BlZWQ7CisKKyNkZWZpbmUgVU1C
X01BWF9ETlNTUlYJCQkyCisJc3RydWN0IGluX2FkZHIJCWlwdjRkbnNbVU1CX01BWF9ETlNTUlZd
OworfTsKKworI2lmICFkZWZpbmVkKGlmcl9tdHUpCisjZGVmaW5lIGlmcl9tdHUJaWZyX2lmcnUu
aWZydV9tZXRyaWMKKyNlbmRpZgorCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIFVNQiBkZXZpY2UK
KyAqLworZW51bSB7CisJVU1CX0lOVFJfUlgsCisJVU1CX0JVTEtfUlgsCisJVU1CX0JVTEtfVFgs
CisJVU1CX05fVFJBTlNGRVIsCit9OworCitzdHJ1Y3QgdW1iX3Rhc2sgeworCXN0cnVjdCB1c2Jf
cHJvY19tc2cJIGhkcjsKKwlzdHJ1Y3QgdW1iX3NvZnRjCSpzYzsKK307CisKK3N0cnVjdCB1bWJf
c29mdGMgeworCWRldmljZV90CQkgc2NfZGV2OworCXN0cnVjdCBpZm5ldAkJKnNjX2lmOworI2Rl
ZmluZSBHRVRfSUZQKHNjKQkoKHNjKS0+c2NfaWYpCisJc3RydWN0IGlmbWVkaWEJCSBzY19pbTsK
KwlzdHJ1Y3QgdXNiX2RldmljZQkqc2NfdWRldjsKKwlzdHJ1Y3QgdXNiX3hmZXIJCSpzY194ZmVy
W1VNQl9OX1RSQU5TRkVSXTsKKwl1aW50OF90CQkJIHNjX2lmYWNlc19pbmRleFsyXTsKKworCWlu
dAkJCSBzY192ZXJfbWFqOworCWludAkJCSBzY192ZXJfbWluOworCWludAkJCSBzY19jdHJsX2xl
bjsKKwlpbnQJCQkgc2NfbWF4cGt0bGVuOworCWludAkJCSBzY19tYXhzZXNzaW9uczsKKworI2Rl
ZmluZSBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQJMHgwMDAxCisjZGVmaW5lIFVNQkZMR19OT19J
TkVUNgkJCTB4MDAwMgorCXVpbnQzMl90CQkgc2NfZmxhZ3M7CisJaW50CQkJIHNjX2NpZDsKKwor
CXN0cnVjdCB1c2JfcHJvY2Vzcwkgc2NfdGFza3F1ZXVlOworCXN0cnVjdCB1bWJfdGFzawkJIHNj
X3Byb2NfYXR0YWNoX3Rhc2tbMl07CisJc3RydWN0IHVtYl90YXNrCQkgc2NfcHJvY19zdGFydF90
YXNrWzJdOworCXN0cnVjdCB1bWJfdGFzawkJIHNjX3Byb2Nfc3RhdGVfdGFza1syXTsKKwlzdHJ1
Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX2dldF9yZXNwb25zZV90YXNrWzJdOworCisJaW50CQkJIHNj
X25yZXNwOworCXN0cnVjdCBtdHgJCSBzY19tdXRleDsKKwlzdHJ1Y3QgdXNiX2NhbGxvdXQJIHNj
X3N0YXRlY2hnX3RpbWVyOworCWNoYXIJCQkgc2NfZHlpbmc7CisJY2hhcgkJCSBzY19hdHRhY2hl
ZDsKKworCXVpbnQ4X3QJCQkgc2NfY3RybF9pZmFjZW5vOworCXN0cnVjdCB1c2JfaW50ZXJmYWNl
CSpzY19kYXRhX2lmYWNlOworCisJdm9pZAkJCSpzY19yZXNwX2J1ZjsKKwl2b2lkCQkJKnNjX2N0
cmxfbXNnOworCisJdm9pZAkJCSpzY19yeF9idWY7CisJdWludDMyX3QJCSBzY19yeF9idWZzejsK
Kwl1bnNpZ25lZAkJIHNjX3J4X25lcnI7CisJc3RydWN0IGlmcXVldWUJCSBzY19yeF9xdWV1ZTsK
KworCXZvaWQJCQkqc2NfdHhfYnVmOworCXN0cnVjdCBtYnVmCQkqc2NfdHhfbTsKKwl1aW50MzJf
dAkJIHNjX3R4X2J1ZnN6OworCXVpbnQzMl90CQkgc2NfdHhfc2VxOworCisJdWludDMyX3QJCSBz
Y190aWQ7CisKKyNkZWZpbmUgc2Nfc3RhdGUJCXNjX2luZm8uc3RhdGUKKyNkZWZpbmUgc2Nfcm9h
bWluZwkJc2NfaW5mby5lbmFibGVfcm9hbWluZworCXN0cnVjdCB1bWJfaW5mbwkJIHNjX2luZm87
Cit9OworI2VuZGlmIC8qIF9LRVJORUwgKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvdXNiL25ldC9t
YmltLmggYi9zeXMvZGV2L3VzYi9uZXQvbWJpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uNWQ3ZWNmZjExNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Rldi91
c2IvbmV0L21iaW0uaApAQCAtMCwwICsxLDcyNCBAQAorLyoJJE9wZW5CU0Q6IG1iaW0uaCx2IDEu
NCAyMDE3LzA0LzE4IDEzOjI3OjU1IGdlcmhhcmQgRXhwICQgKi8KKworLyoKKyAqIE9yaWdpbmFs
IGNvcHlyaWdodCAoYykgMjAxNiBnZW51YSBtYkggKE9wZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQ
ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3
YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3Jh
bnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
aXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBX
QVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwg
SU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUws
IERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF
UworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9G
SVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig
T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMjIgQURJU1RBIFNBUyAocmUtd3JpdGUgZm9yIEZyZWVCU0QpCisgKgor
ICogUmUtd3JpdGUgZm9yIEZyZWVCU0QgYnkgUGllcnJlIFByb25jaGVyeSA8cGllcnJlQGRlZm9y
YS5uZXQ+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAt
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVy
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyAqIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsCisgKiBodHRwOi8vd3d3
LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEu
MC5wZGYKKyAqLworI2lmbmRlZiBfTUJJTV9IXworI2RlZmluZSBfTUJJTV9IXworCisjZGVmaW5l
IFVERVNDU1VCX01CSU0JCQkyNworI2RlZmluZSBNQklNX0lOVEVSRkFDRV9BTFRTRVRUSU5HCTEK
KworI2RlZmluZSBNQklNX1JFU0VUX0ZVTkNUSU9OCQkweDA1CisKKy8qCisgKiBSZWdpc3RyYXRp
b24gc3RhdGUgKE1CSU1fUkVHSVNURVJfU1RBVEUpCisgKi8KKyNkZWZpbmUgTUJJTV9SRUdTVEFU
RV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX1JFR1NUQVRFX0RFUkVHSVNURVJFRAkJMQorI2Rl
ZmluZSBNQklNX1JFR1NUQVRFX1NFQVJDSElORwkJCTIKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9I
T01FCQkJMworI2RlZmluZSBNQklNX1JFR1NUQVRFX1JPQU1JTkcJCQk0CisjZGVmaW5lIE1CSU1f
UkVHU1RBVEVfUEFSVE5FUgkJCTUKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9ERU5JRUQJCQk2CisK
Ky8qCisgKiBEYXRhIGNsYXNzZXMgbWFzayAoTUJJTV9EQVRBX0NMQVNTKQorICovCisjZGVmaW5l
IE1CSU1fREFUQUNMQVNTX05PTkUJCQkweDAwMDAwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNT
X0dQUlMJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0VER0UJCQkweDAwMDAw
MDAyCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX1VNVFMJCQkweDAwMDAwMDA0CisjZGVmaW5lIE1C
SU1fREFUQUNMQVNTX0hTRFBBCQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19I
U1VQQQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfTFRFCQkJMHgwMDAwMDAy
MAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWFJUVAkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTUJJ
TV9EQVRBQ0xBU1NfMVhFVkRPCQkJMHgwMDAyMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18x
WEVWRE9fUkVWX0EJCTB4MDAwNDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRWCQkJ
MHgwMDA4MDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18zWFJUVAkJCTB4MDAxMDAwMDAKKyNk
ZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRPX1JFVl9CCQkweDAwMjAwMDAwCisjZGVmaW5lIE1C
SU1fREFUQUNMQVNTX1VNQgkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfQ1VT
VE9NCQkJMHg4MDAwMDAwMAorCisvKgorICogQ2VsbCBjbGFzc2VzIG1hc2sgKE1CSU1fQ0VMTFVM
QVJfQ0xBU1MpCisgKi8KKyNkZWZpbmUgTUJJTV9DRUxMQ0xBU1NfR1NNCQkJMHgwMDAwMDAwMQor
I2RlZmluZSBNQklNX0NFTExDTEFTU19DRE1BCQkJMHgwMDAwMDAwMgorCisvKgorICogVVVJRHMK
KyAqLworI2RlZmluZSBNQklNX1VVSURfTEVOCQkxNgorCisjZGVmaW5lIE1CSU1fVVVJRF9CQVNJ
Q19DT05ORUNUIHsJCQkJXAorCQkweGEyLCAweDg5LCAweGNjLCAweDMzLCAweGJjLCAweGJiLCAw
eDhiLCAweDRmLAlcCisJCTB4YjYsIDB4YjAsIDB4MTMsIDB4M2UsIDB4YzIsIDB4YWEsIDB4ZTYs
IDB4ZGYJXAorCX0KKworI2RlZmluZSBNQklNX1VVSURfQ09OVEVYVF9JTlRFUk5FVCB7CQkJCVwK
KwkJMHg3ZSwgMHg1ZSwgMHgyYSwgMHg3ZSwgMHg0ZSwgMHg2ZiwgMHg3MiwgMHg3MiwJXAorCQkw
eDczLCAweDZiLCAweDY1LCAweDZlLCAweDdlLCAweDVlLCAweDJhLCAweDdlCVwKKwl9CisKKyNk
ZWZpbmUgTUJJTV9VVUlEX0NPTlRFWFRfVlBOIHsJCQkJXAorCQkweDliLCAweDlmLCAweDdiLCAw
eGJlLCAweDg5LCAweDUyLCAweDQ0LCAweGI3LAlcCisJCTB4ODMsIDB4YWMsIDB4Y2EsIDB4NDEs
IDB4MzEsIDB4OGQsIDB4ZjcsIDB4YTAJXAorCX0KKworI2RlZmluZSBNQklNX1VVSURfUU1JX01C
SU0gewkJCQlcCisJCTB4ZDEsIDB4YTMsIDB4MGIsIDB4YzIsIDB4ZjksIDB4N2EsIDB4NmUsIDB4
NDMsCVwKKwkJMHhiZiwgMHg2NSwgMHhjNywgMHhlMiwgMHg0ZiwgMHhiMCwgMHhmMCwgMHhkMwlc
CisJfQorCisjZGVmaW5lIE1CSU1fQ1RSTE1TR19NSU5MRU4JCTY0CisjZGVmaW5lIE1CSU1fQ1RS
TE1TR19NQVhMRU4JCSg0ICogMTIwNCkKKworI2RlZmluZSBNQklNX01BWFNFR1NaX01JTlZBTAkJ
KDIgKiAxMDI0KQorCisvKgorICogQ29udHJvbCBtZXNzYWdlcyAoaG9zdCB0byBmdW5jdGlvbikK
KyAqLworI2RlZmluZSBNQklNX09QRU5fTVNHCQkJMVUKKyNkZWZpbmUgTUJJTV9DTE9TRV9NU0cJ
CQkyVQorI2RlZmluZSBNQklNX0NPTU1BTkRfTVNHCQkzVQorI2RlZmluZSBNQklNX0hPU1RfRVJS
T1JfTVNHCQk0VQorCisvKgorICogQ29udHJvbCBtZXNzYWdlcyAoZnVuY3Rpb24gdG8gaG9zdCkK
KyAqLworI2RlZmluZSBNQklNX09QRU5fRE9ORQkJCTB4ODAwMDAwMDFVCisjZGVmaW5lIE1CSU1f
Q0xPU0VfRE9ORQkJCTB4ODAwMDAwMDJVCisjZGVmaW5lIE1CSU1fQ09NTUFORF9ET05FCQkweDgw
MDAwMDAzVQorI2RlZmluZSBNQklNX0ZVTkNUSU9OX0VSUk9SX01TRwkJMHg4MDAwMDAwNFUKKyNk
ZWZpbmUgTUJJTV9JTkRJQ0FURV9TVEFUVVNfTVNHCTB4ODAwMDAwMDdVCisKKy8qCisgKiBHZW5l
cmljIHN0YXR1cyBjb2RlcworICovCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NVQ0NFU1MJCQkwCisj
ZGVmaW5lIE1CSU1fU1RBVFVTX0JVU1kJCQkxCisjZGVmaW5lIE1CSU1fU1RBVFVTX0ZBSUxVUkUJ
CQkyCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NJTV9OT1RfSU5TRVJURUQJCTMKKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfQkFEX1NJTQkJCTQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUElOX1JFUVVJUkVECQk1
CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BJTl9ESVNBQkxFRAkJNgorI2RlZmluZSBNQklNX1NUQVRV
U19OT1RfUkVHSVNURVJFRAkJNworI2RlZmluZSBNQklNX1NUQVRVU19QUk9WSURFUlNfTk9UX0ZP
VU5ECQk4CisjZGVmaW5lIE1CSU1fU1RBVFVTX05PX0RFVklDRV9TVVBQT1JUCQk5CisjZGVmaW5l
IE1CSU1fU1RBVFVTX1BST1ZJREVSX05PVF9WSVNJQkxFCTEwCisjZGVmaW5lIE1CSU1fU1RBVFVT
X0RBVEFfQ0xBU1NfTk9UX0FWQUlMQUJMRQkxMQorI2RlZmluZSBNQklNX1NUQVRVU19QQUNLRVRf
U0VSVklDRV9ERVRBQ0hFRAkxMgorI2RlZmluZSBNQklNX1NUQVRVU19NQVhfQUNUSVZBVEVEX0NP
TlRFWFRTCTEzCisjZGVmaW5lIE1CSU1fU1RBVFVTX05PVF9JTklUSUFMSVpFRAkJMTQKKyNkZWZp
bmUgTUJJTV9TVEFUVVNfVk9JQ0VfQ0FMTF9JTl9QUk9HUkVTUwkxNQorI2RlZmluZSBNQklNX1NU
QVRVU19DT05URVhUX05PVF9BQ1RJVkFURUQJMTYKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU0VSVklD
RV9OT1RfQUNUSVZBVEVECTE3CisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfQUNDRVNTX1NU
UklORwkxOAorI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX1VTRVJfTkFNRV9QV0QJMTkKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfUkFESU9fUE9XRVJfT0ZGCQkyMAorI2RlZmluZSBNQklNX1NUQVRV
U19JTlZBTElEX1BBUkFNRVRFUlMJCTIxCisjZGVmaW5lIE1CSU1fU1RBVFVTX1JFQURfRkFJTFVS
RQkJMjIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfV1JJVEVfRkFJTFVSRQkJMjMKKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfTk9fUEhPTkVCT09LCQkyNQorI2RlZmluZSBNQklNX1NUQVRVU19QQVJBTUVURVJf
VE9PX0xPTkcJCTI2CisjZGVmaW5lIE1CSU1fU1RBVFVTX1NUS19CVVNZCQkJMjcKKyNkZWZpbmUg
TUJJTV9TVEFUVVNfT1BFUkFUSU9OX05PVF9BTExPV0VECTI4CisjZGVmaW5lIE1CSU1fU1RBVFVT
X01FTU9SWV9GQUlMVVJFCQkyOQorI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX01FTU9SWV9J
TkRFWAkzMAorI2RlZmluZSBNQklNX1NUQVRVU19NRU1PUllfRlVMTAkJCTMxCisjZGVmaW5lIE1C
SU1fU1RBVFVTX0ZJTFRFUl9OT1RfU1VQUE9SVEVECTMyCisjZGVmaW5lIE1CSU1fU1RBVFVTX0RT
U19JTlNUQU5DRV9MSU1JVAkJMzMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJRF9ERVZJQ0Vf
U0VSVklDRV9PUEVSQVRJT04JMzQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9JTkNPUlJFQ1Rf
QVVUTgkJMzUKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9TWU5DX0ZBSUxVUkUJCTM2CisjZGVm
aW5lIE1CSU1fU1RBVFVTX0FVVEhfQU1GX05PVF9TRVQJCTM3CisjZGVmaW5lIE1CSU1fU1RBVFVT
X0NPTlRFWFRfTk9UX1NVUFBPUlRFRAkzOAorI2RlZmluZSBNQklNX1NUQVRVU19TTVNfVU5LTk9X
Tl9TTVNDX0FERFJFU1MJMTAwCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19ORVRXT1JLX1RJTUVP
VVQJCTEwMQorI2RlZmluZSBNQklNX1NUQVRVU19TTVNfTEFOR19OT1RfU1VQUE9SVEVECTEwMgor
I2RlZmluZSBNQklNX1NUQVRVU19TTVNfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRAkxMDMKKyNkZWZp
bmUgTUJJTV9TVEFUVVNfU01TX0ZPUk1BVF9OT1RfU1VQUE9SVEVECTEwNAorCisvKgorICogTWVz
c2FnZSBmb3JtYXRzCisgKi8KK3N0cnVjdCBtYmltX21zZ2hkciB7CisJLyogTXNnIGhlYWRlciAq
LworCXVpbnQzMl90CXR5cGU7CQkvKiBtZXNzYWdlIHR5cGUgKi8KKwl1aW50MzJfdAlsZW47CQkv
KiBtZXNzYWdlIGxlbmd0aCAqLworCXVpbnQzMl90CXRpZDsJCS8qIHRyYW5zYWN0aW9uIGlkICov
Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mcmFnaGRyIHsKKwl1aW50MzJfdAluZnJhZzsJ
CS8qIHRvdGFsICMgb2YgZnJhZ21lbnRzICovCisJdWludDMyX3QJY3VycmZyYWc7CS8qIGN1cnJl
bnQgZnJhZ21lbnQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2ZyYWdtZW50ZWRfbXNn
X2hkciB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9mcmFnaGRyCWZy
YWc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9oMmZfb3Blbm1zZyB7CisJc3RydWN0IG1i
aW1fbXNnaGRyCWhkcjsKKwl1aW50MzJfdAkJbWF4bGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0
IG1iaW1faDJmX2Nsb3NlbXNnIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworfSBfX3BhY2tl
ZDsKKworc3RydWN0IG1iaW1faDJmX2NtZCB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlz
dHJ1Y3QgbWJpbV9mcmFnaGRyCWZyYWc7CisJdWludDhfdAkJCWRldmlkW01CSU1fVVVJRF9MRU5d
OworCXVpbnQzMl90CQljaWQ7CQkvKiBjb21tYW5kIGlkICovCisjZGVmaW5lIE1CSU1fQ01ET1Bf
UVJZCQkwCisjZGVmaW5lIE1CSU1fQ01ET1BfU0VUCQkxCisJdWludDMyX3QJCW9wOworCXVpbnQz
Ml90CQlpbmZvbGVuOworCXVpbnQ4X3QJCQlpbmZvW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9mMmhfaW5kaWNhdGVfc3RhdHVzIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0
cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsKKwl1aW50OF90CQkJZGV2aWRbTUJJTV9VVUlEX0xFTl07
CisJdWludDMyX3QJCWNpZDsJCS8qIGNvbW1hbmQgaWQgKi8KKwl1aW50MzJfdAkJaW5mb2xlbjsK
Kwl1aW50OF90CQkJaW5mb1tdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fZjJoX2hvc3Rl
cnIgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisKKyNkZWZpbmUgTUJJTV9FUlJPUl9USU1F
T1VUX0ZSQUdNRU5UCQkxCisjZGVmaW5lIE1CSU1fRVJST1JfRlJBR01FTlRfT1VUX09GX1NFUVVF
TkNFCTIKKyNkZWZpbmUgTUJJTV9FUlJPUl9MRU5HVEhfTUlTTUFUQ0gJCTMKKyNkZWZpbmUgTUJJ
TV9FUlJPUl9EVVBMSUNBVEVEX1RJRAkJNAorI2RlZmluZSBNQklNX0VSUk9SX05PVF9PUEVORUQJ
CQk1CisjZGVmaW5lIE1CSU1fRVJST1JfVU5LTk9XTgkJCTYKKyNkZWZpbmUgTUJJTV9FUlJPUl9D
QU5DRUwJCQk3CisjZGVmaW5lIE1CSU1fRVJST1JfTUFYX1RSQU5TRkVSCQkJOAorCXVpbnQzMl90
CQllcnI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3NlZG9uZSB7CisJ
c3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlpbnQzMl90CQkJc3RhdHVzOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG1iaW1fZjJoX2NtZGRvbmUgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisJ
c3RydWN0IG1iaW1fZnJhZ2hkcglmcmFnOworCXVpbnQ4X3QJCQlkZXZpZFtNQklNX1VVSURfTEVO
XTsKKwl1aW50MzJfdAkJY2lkOwkJLyogY29tbWFuZCBpZCAqLworCWludDMyX3QJCQlzdGF0dXM7
CisJdWludDMyX3QJCWluZm9sZW47CisJdWludDhfdAkJCWluZm9bXTsKK30gX19wYWNrZWQ7CisK
Ky8qCisgKiBNZXNzYWdlcyBhbmQgY29tbWFuZHMgZm9yIE1CSU1fVVVJRF9CQVNJQ19DT05ORUNU
CisgKi8KKyNkZWZpbmUgTUJJTV9DSURfREVWSUNFX0NBUFMJCQkJMQorI2RlZmluZSBNQklNX0NJ
RF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUwkJMgorI2RlZmluZSBNQklNX0NJRF9SQURJT19TVEFU
RQkJCQkzCisjZGVmaW5lIE1CSU1fQ0lEX1BJTgkJCQkJNAorI2RlZmluZSBNQklNX0NJRF9QSU5f
TElTVAkJCQk1CisjZGVmaW5lIE1CSU1fQ0lEX0hPTUVfUFJPVklERVIJCQkJNgorI2RlZmluZSBN
QklNX0NJRF9QUkVGRVJSRURfUFJPVklERVJTCQkJNworI2RlZmluZSBNQklNX0NJRF9WSVNJQkxF
X1BST1ZJREVSUwkJCTgKKyNkZWZpbmUgTUJJTV9DSURfUkVHSVNURVJfU1RBVEUJCQkJOQorI2Rl
ZmluZSBNQklNX0NJRF9QQUNLRVRfU0VSVklDRQkJCQkxMAorI2RlZmluZSBNQklNX0NJRF9TSUdO
QUxfU1RBVEUJCQkJMTEKKyNkZWZpbmUgTUJJTV9DSURfQ09OTkVDVAkJCQkxMgorI2RlZmluZSBN
QklNX0NJRF9QUk9WSVNJT05FRF9DT05URVhUUwkJCTEzCisjZGVmaW5lIE1CSU1fQ0lEX1NFUlZJ
Q0VfQUNUSVZBVElPTgkJCTE0CisjZGVmaW5lIE1CSU1fQ0lEX0lQX0NPTkZJR1VSQVRJT04JCQkx
NQorI2RlZmluZSBNQklNX0NJRF9ERVZJQ0VfU0VSVklDRVMJCQkxNgorI2RlZmluZSBNQklNX0NJ
RF9ERVZJQ0VfU0VSVklDRV9TVUJTQ1JJQkVfTElTVAkJMTkKKyNkZWZpbmUgTUJJTV9DSURfUEFD
S0VUX1NUQVRJU1RJQ1MJCQkyMAorI2RlZmluZSBNQklNX0NJRF9ORVRXT1JLX0lETEVfSElOVAkJ
CTIxCisjZGVmaW5lIE1CSU1fQ0lEX0VNRVJHRU5DWV9NT0RFCQkJCTIyCisjZGVmaW5lIE1CSU1f
Q0lEX0lQX1BBQ0tFVF9GSUxURVJTCQkJMjMKKyNkZWZpbmUgTUJJTV9DSURfTVVMVElDQVJSSUVS
X1BST1ZJREVSUwkJCTI0CisKK3N0cnVjdCBtYmltX2NpZF9zdWJzY3JpYmVyX3JlYWR5X2luZm8g
eworI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVElOSVRJQUxJWkVECQkwCisjZGVmaW5lIE1CSU1f
U0lNU1RBVEVfSU5JVElBTElaRUQJCTEKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9OT1RJTlNFUlRF
RAkJMgorI2RlZmluZSBNQklNX1NJTVNUQVRFX0JBRFNJTQkJCTMKKyNkZWZpbmUgTUJJTV9TSU1T
VEFURV9GQUlMVVJFCQkJNAorI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVEFDVElWQVRFRAkJNQor
I2RlZmluZSBNQklNX1NJTVNUQVRFX0xPQ0tFRAkJCTYKKwl1aW50MzJfdAlyZWFkeTsKKworCXVp
bnQzMl90CXNpZF9vZmZzOworCXVpbnQzMl90CXNpZF9zaXplOworCisJdWludDMyX3QJaWNjX29m
ZnM7CisJdWludDMyX3QJaWNjX3NpemU7CisKKyNkZWZpbmUgTUJJTV9TSU1VTklRRUlEX05PTkUJ
CQkwCisjZGVmaW5lIE1CSU1fU0lNVU5JUUVJRF9QUk9URUNUCQkJMQorCXVpbnQzMl90CWluZm87
CisKKwl1aW50MzJfdAlub19wbjsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAlvZmZzOworCQl1aW50
MzJfdAlzaXplOworCX0KKwkJCXBuW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRf
cmFkaW9fc3RhdGUgeworI2RlZmluZSBNQklNX1JBRElPX1NUQVRFX09GRgkJCTAKKyNkZWZpbmUg
TUJJTV9SQURJT19TVEFURV9PTgkJCTEKKwl1aW50MzJfdAlzdGF0ZTsKK30gX19wYWNrZWQ7CisK
K3N0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZV9pbmZvIHsKKwl1aW50MzJfdAlod19zdGF0ZTsK
Kwl1aW50MzJfdAlzd19zdGF0ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW4g
eworI2RlZmluZSBNQklNX1BJTl9UWVBFX05PTkUJCQkwCisjZGVmaW5lIE1CSU1fUElOX1RZUEVf
Q1VTVE9NCQkJMQorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BJTjEJCQkyCisjZGVmaW5lIE1CSU1f
UElOX1RZUEVfUElOMgkJCTMKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ERVZfU0lNX1BJTgkJNAor
I2RlZmluZSBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUElOCQk1CisjZGVmaW5lIE1CSU1f
UElOX1RZUEVfTkVUV09SS19QSU4JCTYKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1NV
QlNFVF9QSU4JNworI2RlZmluZSBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUElOCTgK
KyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVfUElOCQk5CisjZGVmaW5lIE1CSU1fUElO
X1RZUEVfU1VCU0lEWV9MT0NLCQkxMAorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BVSzEJCQkxMQor
I2RlZmluZSBNQklNX1BJTl9UWVBFX1BVSzIJCQkxMgorI2RlZmluZSBNQklNX1BJTl9UWVBFX0RF
Vl9GSVJTVF9TSU1fUFVLCQkxMworI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfUFVLCQkx
NAorI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VCU0VUX1BVSwkxNQorI2RlZmluZSBN
QklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUFVLCTE2CisjZGVmaW5lIE1CSU1fUElOX1RZ
UEVfQ09SUE9SQVRFX1BVSwkJMTcKKwl1aW50MzJfdAl0eXBlOworCisjZGVmaW5lIE1CSU1fUElO
X09QX0VOVEVSCQkJMAorI2RlZmluZSBNQklNX1BJTl9PUF9FTkFCTEUJCQkxCisjZGVmaW5lIE1C
SU1fUElOX09QX0RJU0FCTEUJCQkyCisjZGVmaW5lIE1CSU1fUElOX09QX0NIQU5HRQkJCTMKKwl1
aW50MzJfdAlvcDsKKwl1aW50MzJfdAlwaW5fb2ZmczsKKwl1aW50MzJfdAlwaW5fc2l6ZTsKKwl1
aW50MzJfdAluZXdwaW5fb2ZmczsKKwl1aW50MzJfdAluZXdwaW5fc2l6ZTsKKyNkZWZpbmUgTUJJ
TV9QSU5fTUFYTEVOCTMyCisJdWludDhfdAkJZGF0YVsyICogTUJJTV9QSU5fTUFYTEVOXTsKK30g
X19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW5faW5mbyB7CisJdWludDMyX3QJdHlwZTsK
KworI2RlZmluZSBNQklNX1BJTl9TVEFURV9VTkxPQ0tFRAkJCTAKKyNkZWZpbmUgTUJJTV9QSU5f
U1RBVEVfTE9DS0VECQkJMQorCXVpbnQzMl90CXN0YXRlOworCXVpbnQzMl90CXJlbWFpbmluZ19h
dHRlbXB0czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW5fbGlzdF9pbmZvIHsK
KwlzdHJ1Y3QgbWJpbV9waW5fZGVzYyB7CisKKyNkZWZpbmUgTUJJTV9QSU5NT0RFX05PVFNVUFBP
UlRFRAkJMAorI2RlZmluZSBNQklNX1BJTk1PREVfRU5BQkxFRAkJCTEKKyNkZWZpbmUgTUJJTV9Q
SU5NT0RFX0RJU0FCTEVECQkJMgorCQl1aW50MzJfdAltb2RlOworCisjZGVmaW5lIE1CSU1fUElO
Rk9STUFUX1VOS05PV04JCQkwCisjZGVmaW5lIE1CSU1fUElORk9STUFUX05VTUVSSUMJCQkxCisj
ZGVmaW5lIE1CSU1fUElORk9STUFUX0FMUEhBTlVNRVJJQwkJMgorCQl1aW50MzJfdAlmb3JtYXQ7
CisKKwkJdWludDMyX3QJbWlubGVuOworCQl1aW50MzJfdAltYXhsZW47CisJfQorCQlwaW4xLAor
CQlwaW4yLAorCQlkZXZfc2ltX3BpbiwKKwkJZmlyc3RfZGV2X3NpbV9waW4sCisJCW5ldF9waW4s
CisJCW5ldF9zdWJfcGluLAorCQlzdnBfcGluLAorCQljb3JwX3BpbiwKKwkJc3Vic2lkeV9sb2Nr
LAorCQljdXN0b207Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfZGV2aWNlX2NhcHMg
eworI2RlZmluZSBNQklNX0RFVlRZUEVfVU5LTk9XTgkJCTAKKyNkZWZpbmUgTUJJTV9ERVZUWVBF
X0VNQkVEREVECQkJMQorI2RlZmluZSBNQklNX0RFVlRZUEVfUkVNT1ZBQkxFCQkJMgorI2RlZmlu
ZSBNQklNX0RFVlRZUEVfUkVNT1RFCQkJMworCXVpbnQzMl90CWRldnR5cGU7CisKKwl1aW50MzJf
dAljZWxsY2xhc3M7CS8qIHZhbHVlczogTUJJTV9DRUxMVUxBUl9DTEFTUyAqLworCXVpbnQzMl90
CXZvaWNlY2xhc3M7CisJdWludDMyX3QJc2ltY2xhc3M7CisJdWludDMyX3QJZGF0YWNsYXNzOwkv
KiB2YWx1ZXM6IE1CSU1fREFUQV9DTEFTUyAqLworCXVpbnQzMl90CXNtc2NhcHM7CisJdWludDMy
X3QJY250cmxjYXBzOworCXVpbnQzMl90CW1heF9zZXNzaW9uczsKKworCXVpbnQzMl90CWN1c3Rk
YXRhY2xhc3Nfb2ZmczsKKwl1aW50MzJfdAljdXN0ZGF0YWNsYXNzX3NpemU7CisKKwl1aW50MzJf
dAlkZXZpZF9vZmZzOworCXVpbnQzMl90CWRldmlkX3NpemU7CisKKwl1aW50MzJfdAlmd2luZm9f
b2ZmczsKKwl1aW50MzJfdAlmd2luZm9fc2l6ZTsKKworCXVpbnQzMl90CWh3aW5mb19vZmZzOwor
CXVpbnQzMl90CWh3aW5mb19zaXplOworCisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZSB7CisJdWludDMyX3QJcHJvdmlk
X29mZnM7CisJdWludDMyX3QJcHJvdmlkX3NpemU7CisKKyNkZWZpbmUgTUJJTV9SRUdBQ1RJT05f
QVVUT01BVElDCQkwCisjZGVmaW5lIE1CSU1fUkVHQUNUSU9OX01BTlVBTAkJCTEKKwl1aW50MzJf
dAlyZWdhY3Rpb247CisJdWludDMyX3QJZGF0YV9jbGFzczsKKworCXVpbnQzMl90CWRhdGFbXTsK
K30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yZWdpc3RyYXRpb25fc3RhdGVfaW5mbyB7
CisJdWludDMyX3QJbndlcnJvcjsKKworCXVpbnQzMl90CXJlZ3N0YXRlOwkvKiB2YWx1ZXM6IE1C
SU1fUkVHSVNURVJfU1RBVEUgKi8KKworI2RlZmluZSBNQklNX1JFR01PREVfVU5LTk9XTgkJCTAK
KyNkZWZpbmUgTUJJTV9SRUdNT0RFX0FVVE9NQVRJQwkJCTEKKyNkZWZpbmUgTUJJTV9SRUdNT0RF
X01BTlVBTAkJCTIKKwl1aW50MzJfdAlyZWdtb2RlOworCisJdWludDMyX3QJYXZhaWxjbGFzc2Vz
OwkvKiB2YWx1ZXM6IE1CSU1fREFUQV9DTEFTUyAqLworCXVpbnQzMl90CWN1cmNlbGxjbGFzczsJ
LyogdmFsdWVzOiBNQklNX0NFTExVTEFSX0NMQVNTICovCisKKwl1aW50MzJfdAlwcm92aWRfb2Zm
czsKKwl1aW50MzJfdAlwcm92aWRfc2l6ZTsKKworCXVpbnQzMl90CXByb3ZuYW1lX29mZnM7CisJ
dWludDMyX3QJcHJvdm5hbWVfc2l6ZTsKKworCXVpbnQzMl90CXJvYW1pbmd0eHRfb2ZmczsKKwl1
aW50MzJfdAlyb2FtaW5ndHh0X3NpemU7CisKKyNkZWZpbmUgTUJJTV9SRUdGTEFHU19OT05FCQkJ
MAorI2RlZmluZSBNQklNX1JFR0ZMQUdTX01BTlVBTF9OT1RfQVZBSUxBQkxFCTEKKyNkZWZpbmUg
TUJJTV9SRUdGTEFHU19QQUNLRVRTRVJWSUNFX0FVVE9BVFRBQ0gJMgorCXVpbnQzMl90CXJlZ2Zs
YWc7CisKKwl1aW50MzJfdAlkYXRhW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRf
cGFja2V0X3NlcnZpY2UgeworI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0FUVEFDSAkJ
MAorI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0RFVEFDSAkJMQorCXVpbnQzMl90CWFj
dGlvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc2VydmljZV9pbmZv
IHsKKwl1aW50MzJfdAlud2Vycm9yOworCisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9TVEFURV9V
TktOT1dOCQkwCisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9TVEFURV9BVFRBQ0hJTkcJCTEKKyNk
ZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSEVECQkyCisjZGVmaW5lIE1CSU1fUEtU
U0VSVklDRV9TVEFURV9ERVRBQ0hJTkcJCTMKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRF
X0RFVEFDSEVECQk0CisJdWludDMyX3QJc3RhdGU7CisKKwl1aW50MzJfdAloaWdoZXN0X2RhdGFj
bGFzczsKKwl1aW50NjRfdAl1cGxpbmtfc3BlZWQ7CisJdWludDY0X3QJZG93bmxpbmtfc3BlZWQ7
Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfc2lnbmFsX3N0YXRlIHsKKwl1aW50MzJf
dAlyc3NpOworCXVpbnQzMl90CWVycl9yYXRlOworCXVpbnQzMl90CXNzX2ludHZsOworCXVpbnQz
Ml90CXJzc2lfdGhyOworCXVpbnQzMl90CWVycl90aHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9jaWRfY29ubmVjdCB7CisJdWludDMyX3QJc2Vzc2lvbmlkOworCisjZGVmaW5lIE1CSU1f
Q09OTkVDVF9ERUFDVElWQVRFCQkwCisjZGVmaW5lIE1CSU1fQ09OTkVDVF9BQ1RJVkFURQkJMQor
CXVpbnQzMl90CWNvbW1hbmQ7CisKKyNkZWZpbmUgTUJJTV9BQ0NFU1NfTUFYTEVOCQkyMDAKKwl1
aW50MzJfdAlhY2Nlc3Nfb2ZmczsKKwl1aW50MzJfdAlhY2Nlc3Nfc2l6ZTsKKworI2RlZmluZSBN
QklNX1VTRVJfTUFYTEVOCQk1MTAKKwl1aW50MzJfdAl1c2VyX29mZnM7CisJdWludDMyX3QJdXNl
cl9zaXplOworCisjZGVmaW5lIE1CSU1fUEFTU1dEX01BWExFTgkJNTEwCisJdWludDMyX3QJcGFz
c3dkX29mZnM7CisJdWludDMyX3QJcGFzc3dkX3NpemU7CisKKyNkZWZpbmUgTUJJTV9DT01QUkVT
U0lPTl9OT05FCQkwCisjZGVmaW5lIE1CSU1fQ09NUFJFU1NJT05fRU5BQkxFCQkxCisJdWludDMy
X3QJY29tcHJlc3Npb247CisKKyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9OT05FCQkwCisjZGVmaW5l
IE1CSU1fQVVUSFBST1RfUEFQCQkxCisjZGVmaW5lIE1CSU1fQVVUSFBST1RfQ0hBUAkJMgorI2Rl
ZmluZSBNQklNX0FVVEhQUk9UX01TQ0hBUAkJMworCXVpbnQzMl90CWF1dGhwcm90OworCisjZGVm
aW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfREVGQVVMVAkwCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9J
UFRZUEVfSVBWNAkxCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNgkyCisjZGVmaW5l
IE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNFY2CTMKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQ
RV9JUFY0QU5EVjYJNAorCXVpbnQzMl90CWlwdHlwZTsKKworCXVpbnQ4X3QJCWNvbnRleHRbTUJJ
TV9VVUlEX0xFTl07CisKKwl1aW50OF90CQlkYXRhW01CSU1fQUNDRVNTX01BWExFTiArIE1CSU1f
VVNFUl9NQVhMRU4gKworCQkJICAgICBNQklNX1BBU1NXRF9NQVhMRU5dOworCit9IF9fcGFja2Vk
OworCitzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdF9pbmZvIHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7
CisKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX1VOS05PV04JCTAKKyNkZWZpbmUgTUJJ
TV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRAkJMQorI2RlZmluZSBNQklNX0FDVElWQVRJT05f
U1RBVEVfQUNUSVZBVElORwkyCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElW
QVRFRAkzCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRJTkcJNAorCXVp
bnQzMl90CWFjdGl2YXRpb247CisKKwl1aW50MzJfdAl2b2ljZTsKKwl1aW50MzJfdAlpcHR5cGU7
CisJdWludDhfdAkJY29udGV4dFtNQklNX1VVSURfTEVOXTsKKwl1aW50MzJfdAlud2Vycm9yOwor
fSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX2lwdjRfZWxlbWVudCB7CisJdWludDMyX3QJ
cHJlZml4bGVuOworCXVpbnQzMl90CWFkZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9j
aWRfaXB2Nl9lbGVtZW50IHsKKwl1aW50MzJfdAlwcmVmaXhsZW47CisJdWludDhfdAkJYWRkclsx
Nl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJhdGlvbl9pbmZv
IHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9JUENPTkZfSEFTX0FERFJJ
TkZPCTB4MDAwMQorI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfR1dJTkZPCQkweDAwMDIKKyNkZWZp
bmUgTUJJTV9JUENPTkZfSEFTX0ROU0lORk8JCTB4MDAwNAorI2RlZmluZSBNQklNX0lQQ09ORl9I
QVNfTVRVSU5GTwkJMHgwMDA4CisJdWludDMyX3QJaXB2NF9hdmFpbGFibGU7CisJdWludDMyX3QJ
aXB2Nl9hdmFpbGFibGU7CisKKwl1aW50MzJfdAlpcHY0X25hZGRyOworCXVpbnQzMl90CWlwdjRf
YWRkcm9mZnM7CisJdWludDMyX3QJaXB2Nl9uYWRkcjsKKwl1aW50MzJfdAlpcHY2X2FkZHJvZmZz
OworCisJdWludDMyX3QJaXB2NF9nd29mZnM7CisJdWludDMyX3QJaXB2Nl9nd29mZnM7CisKKwl1
aW50MzJfdAlpcHY0X25kbnNzcnY7CisJdWludDMyX3QJaXB2NF9kbnNzcnZvZmZzOworCXVpbnQz
Ml90CWlwdjZfbmRuc3NydjsKKwl1aW50MzJfdAlpcHY2X2Ruc3Nydm9mZnM7CisKKwl1aW50MzJf
dAlpcHY0X210dTsKKwl1aW50MzJfdAlpcHY2X210dTsKKworCXVpbnQzMl90CWRhdGFbXTsKK30g
X19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9wYWNrZXRfc3RhdGlzdGljc19pbmZvIHsKKwl1
aW50MzJfdAlpbl9kaXNjYXJkczsKKwl1aW50MzJfdAlpbl9lcnJvcnM7CisJdWludDY0X3QJaW5f
b2N0ZXRzOworCXVpbnQ2NF90CWluX3BhY2tldHM7CisJdWludDY0X3QJb3V0X29jdGV0czsKKwl1
aW50NjRfdAlvdXRfcGFja2V0czsKKwl1aW50MzJfdAlvdXRfZXJyb3JzOworCXVpbnQzMl90CW91
dF9kaXNjYXJkczsKK30gX19wYWNrZWQ7CisKKworI2lmZGVmIF9LRVJORUwKKworc3RydWN0IG1i
aW1fZGVzY3JpcHRvciB7CisJdUJ5dGUJYkxlbmd0aDsKKwl1Qnl0ZQliRGVzY3JpcHRvclR5cGU7
CisJdUJ5dGUJYkRlc2NyaXB0b3JTdWJ0eXBlOworI2RlZmluZSBNQklNX1ZFUl9NQUpPUih2KQko
KCh2KSA+PiA4KSAmIDB4MGYpCisjZGVmaW5lIE1CSU1fVkVSX01JTk9SKHYpCSgodikgJiAweDBm
KQorCXVXb3JkCWJjZE1CSU1WZXJzaW9uOworCXVXb3JkCXdNYXhDb250cm9sTWVzc2FnZTsKKwl1
Qnl0ZQliTnVtYmVyRmlsdGVyczsKKwl1Qnl0ZQliTWF4RmlsdGVyU2l6ZTsKKwl1V29yZAl3TWF4
U2VnbWVudFNpemU7CisJdUJ5dGUJYm1OZXR3b3JrQ2FwYWJpbGl0aWVzOworfSBfX3BhY2tlZDsK
KworLyoKKyAqIE5DTSBQYXJhbWV0ZXJzCisgKi8KKyNkZWZpbmUgTkNNX0dFVF9OVEJfUEFSQU1F
VEVSUwkweDgwCisKK3N0cnVjdCBuY21fbnRiX3BhcmFtZXRlcnMgeworCXVXb3JkCXdMZW5ndGg7
CisJdVdvcmQJYm1OdGJGb3JtYXRzU3VwcG9ydGVkOworI2RlZmluZSBOQ01fRk9STUFUX05UQjE2
CTB4MDAwMQorI2RlZmluZSBOQ01fRk9STUFUX05UQjMyCTB4MDAwMgorCXVEV29yZAlkd050Yklu
TWF4U2l6ZTsKKwl1V29yZAl3TmRwSW5EaXZpc29yOworCXVXb3JkCXdOZHBJblBheWxvYWRSZW1h
aW5kZXI7CisJdVdvcmQJd05kcEluQWxpZ25tZW50OworCXVXb3JkCXdSZXNlcnZlZDE7CisJdURX
b3JkCWR3TnRiT3V0TWF4U2l6ZTsKKwl1V29yZAl3TmRwT3V0RGl2aXNvcjsKKwl1V29yZAl3TmRw
T3V0UGF5bG9hZFJlbWFpbmRlcjsKKwl1V29yZAl3TmRwT3V0QWxpZ25tZW50OworCXVXb3JkCXdO
dGJPdXRNYXhEYXRhZ3JhbXM7Cit9IF9fcGFja2VkOworCisvKgorICogTkNNIEVuY29kaW5nCisg
Ki8KKyNkZWZpbmUgTUJJTV9IRFIxNl9MRU4JXAorCShzaXplb2Yoc3RydWN0IG5jbV9oZWFkZXIx
NikgKyBzaXplb2Yoc3RydWN0IG5jbV9wb2ludGVyMTYpKQorI2RlZmluZSBNQklNX0hEUjMyX0xF
TglcCisJKHNpemVvZihzdHJ1Y3QgbmNtX2hlYWRlcjMyKSArIHNpemVvZihzdHJ1Y3QgbmNtX3Bv
aW50ZXIzMikpCisKK3N0cnVjdCBuY21faGVhZGVyMTYgeworI2RlZmluZSBOQ01fSERSMTZfU0lH
CQkweDQ4NGQ0MzRlCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdIZWFkZXJMZW5ndGg7
CisJdVdvcmQJd1NlcXVlbmNlOworCXVXb3JkCXdCbG9ja0xlbmd0aDsKKwl1V29yZAl3TmRwSW5k
ZXg7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNtX2hlYWRlcjMyIHsKKyNkZWZpbmUgTkNNX0hE
UjMyX1NJRwkJMHg2ODZkNjM2ZQorCXVEV29yZAlkd1NpZ25hdHVyZTsKKwl1V29yZAl3SGVhZGVy
TGVuZ3RoOworCXVXb3JkCXdTZXF1ZW5jZTsKKwl1RFdvcmQJZHdCbG9ja0xlbmd0aDsKKwl1RFdv
cmQJZHdOZHBJbmRleDsKK30gX19wYWNrZWQ7CisKKworI2RlZmluZSBNQklNX05DTV9OVEhfU0lE
U0hJRlQJMjQKKyNkZWZpbmUgTUJJTV9OQ01fTlRIX0dFVFNJRChzKQkoKChzKSA+IE1CSU1fTkNN
X05USF9TSURTSElGVCkgJiAweGZmKQorCitzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSB7CisJ
dVdvcmQJd0RhdGFncmFtSW5kZXg7CisJdVdvcmQJd0RhdGFncmFtTGVuOworfSBfX3BhY2tlZDsK
Kworc3RydWN0IG5jbV9wb2ludGVyMTYgeworI2RlZmluZSBNQklNX05DTV9OVEgxNl9JUFMJIDB4
MDA1MzUwNDkKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMTZfSVNJU0cocykgKCgocykgJiAweDAwZmZm
ZmZmKSA9PSBNQklNX05DTV9OVEgxNl9JUFMpCisjZGVmaW5lIE1CSU1fTkNNX05USDE2X1NJRyhz
KQlcCisJCSgoKChzKSAmIDB4ZmYpIDw8IE1CSU1fTkNNX05USF9TSURTSElGVCkgfCBNQklNX05D
TV9OVEgxNl9JUFMpCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdMZW5ndGg7CisJdVdv
cmQJd05leHROZHBJbmRleDsKKworCS8qIE1pbmltdW0gaXMgdHdvIGRhdGFncmFtcywgYnV0IGNh
biBiZSBtb3JlICovCisJc3RydWN0IG5jbV9wb2ludGVyMTZfZGdyYW0gZGdyYW1bMl07Cit9IF9f
cGFja2VkOworCitzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9kZ3JhbSB7CisJdURXb3JkCWR3RGF0YWdy
YW1JbmRleDsKKwl1RFdvcmQJZHdEYXRhZ3JhbUxlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBu
Y21fcG9pbnRlcjMyIHsKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfSVBTCTB4MDA3MzcwNjkKKyNk
ZWZpbmUgTUJJTV9OQ01fTlRIMzJfSVNJU0cocykJXAorCQkoKChzKSAmIDB4MDBmZmZmZmYpID09
IE1CSU1fTkNNX05USDMyX0lQUykKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfU0lHKHMpCQlcCisJ
CSgoKChzKSAmIDB4ZmYpIDw8IE1CSU1fTkNNX05USF9TSURTSElGVCkgfCBNQklNX05DTV9OVEgz
Ml9JUFMpCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdMZW5ndGg7CisJdVdvcmQJd1Jl
c2VydmVkNjsKKwl1RFdvcmQJZHdOZXh0TmRwSW5kZXg7CisJdURXb3JkCWR3UmVzZXJ2ZWQxMjsK
KworCS8qIE1pbmltdW0gaXMgdHdvIGRhdGFncmFtcywgYnV0IGNhbiBiZSBtb3JlICovCisJc3Ry
dWN0IG5jbV9wb2ludGVyMzJfZGdyYW0gZGdyYW1bMl07Cit9IF9fcGFja2VkOworCisjZW5kaWYg
LyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogX01CSU1fSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9t
b2R1bGVzL3VzYi9NYWtlZmlsZSBiL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZQppbmRleCAyZDE2
NmE5NWRjMDMuLmFjNDgzNDU4ZWEyYSAxMDA2NDQKLS0tIGEvc3lzL21vZHVsZXMvdXNiL01ha2Vm
aWxlCisrKyBiL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQCBTVUJE
SVIgKz0gJHtfcnVtfSAke19ydW59ICR7X3J1bmZ3fSAke191YXRofSB1cGd0IHVzaWUgdXJhbCAk
e196eWR9ICR7X3VydHd9CiBTVUJESVIgKz0gYXRwIGNmdW1hc3MgdWhpZCB1aGlkX3NuZXMgdWti
ZCB1bXMgdWRicCB1ZXAgd210IHdzcCB1Z29sZCB1bGVkIFwKIAkgIHVzYmhpZAogU1VCRElSICs9
IHVjb20gdTNnIHVhcmsgdWJzYSB1YnNlciB1Y2hjb20gdWN5Y29tIHVmb21hIHVmdGRpIHVnZW5z
YSB1aXBhcSB1bHB0IFwKLQkgIHVtY3QgdW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxjb20gdXNsY29t
IHV2aXNvciB1dnNjb20KKwkgIHVtYiB1bWN0IHVtY3MgdW1vZGVtIHVtb3Njb20gdXBsY29tIHVz
bGNvbSB1dmlzb3IgdXZzY29tCiBTVUJESVIgKz0gaTJjdGlueXVzYgogU1VCRElSICs9IGNwMjEx
MgogU1VCRElSICs9IHVkbApkaWZmIC0tZ2l0IGEvc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmls
ZSBiL3N5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5jMTc1OTJkOTRkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvbW9k
dWxlcy91c2IvdW1iL01ha2VmaWxlCkBAIC0wLDAgKzEsMzUgQEAKKyMKKyMKKyMgQ29weXJpZ2h0
IChjKSAyMDA4IEhhbnMgUGV0dGVyIFNlbGFza3kuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKK1M9ICAgICAke1NSQ1RPUH0vc3lzCisK
Ky5QQVRIOiAkUy9kZXYvdXNiL25ldAorCitLTU9EPQl1bWIKK1NSQ1M9CW9wdF9idXMuaCBvcHRf
dXNiLmggZGV2aWNlX2lmLmggYnVzX2lmLmggdXNiX2lmLmggdXNiZGV2cy5oIFwKKwlpZl91bWIu
YworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+CmRpZmYgLS1naXQgYS9zeXMvbmV0L2lmX3R5cGVz
LmggYi9zeXMvbmV0L2lmX3R5cGVzLmgKaW5kZXggYjA2OTJhZjY5MzA4Li40Y2IyOWZkNTFlYmQg
MTAwNjQ0Ci0tLSBhL3N5cy9uZXQvaWZfdHlwZXMuaAorKysgYi9zeXMvbmV0L2lmX3R5cGVzLmgK
QEAgLTI1NCw2ICsyNTQsNyBAQCB0eXBlZGVmIGVudW0gewogCUlGVF9QRkxPRwk9IDB4ZjYsCQkv
KiBQRiBwYWNrZXQgZmlsdGVyIGxvZ2dpbmcgKi8KIAlJRlRfUEZTWU5DCT0gMHhmNywJCS8qIFBG
IHBhY2tldCBmaWx0ZXIgc3luY2hyb25pemF0aW9uICovCiAJSUZUX1dJUkVHVUFSRAk9IDB4Zjgs
CQkvKiBXaXJlR3VhcmQgdHVubmVsICovCisJSUZUX01CSU0JPSAweGY5CQkvKiBNb2JpbGUgQnJv
YWRiYW5kIEludGVyZmFjZSBNb2RlbCAqLwogfSBpZlR5cGU7CiAKIC8qCmRpZmYgLS1naXQgYS9z
eXMvc3lzL3NvY2tpby5oIGIvc3lzL3N5cy9zb2NraW8uaAppbmRleCA4MjRiNzdlNTdhMTcuLmNm
NjEyMDc5YzJmMyAxMDA2NDQKLS0tIGEvc3lzL3N5cy9zb2NraW8uaAorKysgYi9zeXMvc3lzL3Nv
Y2tpby5oCkBAIC0xNDcsNCArMTQ3LDggQEAKICNkZWZpbmUJU0lPQ1NJRkNBUE5WCV9JT1coJ2kn
LCAxNTUsIHN0cnVjdCBpZnJlcSkJLyogc2V0IElGIGZlYXR1cmVzICovCiAjZGVmaW5lCVNJT0NH
SUZDQVBOVglfSU9XUignaScsIDE1Niwgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgZmVhdHVyZXMg
Ki8KIAorI2RlZmluZQlTSU9DR1VNQklORk8JX0lPV1IoJ2knLCAxNTcsIHN0cnVjdCBpZnJlcSkJ
LyogZ2V0IE1CSU0gaW5mbyAqLworI2RlZmluZQlTSU9DU1VNQlBBUkFNCSBfSU9XKCdpJywgMTU4
LCBzdHJ1Y3QgaWZyZXEpCS8qIHNldCBNQklNIHBhcmFtICovCisjZGVmaW5lCVNJT0NHVU1CUEFS
QU0JX0lPV1IoJ2knLCAxNTksIHN0cnVjdCBpZnJlcSkJLyogZ2V0IE1CSU0gcGFyYW0gKi8KKwog
I2VuZGlmIC8qICFfU1lTX1NPQ0tJT19IXyAqLwotLSAKMi40Ni4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255811</attachid>
            <date>2024-12-12 17:48:31 +0000</date>
            <delta_ts>2024-12-17 16:18:33 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>155577</size>
            <attacher name="Pierre Pronchery">khorben</attacher>
            
              <data encoding="base64">RnJvbSBlMTU4ZjFjMDM0ZDY1NzBjNWUzMmJiZWEzNzZhNGI1NmRlYTM1NmI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+
CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMjA6MjA6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJ
bnRyb2R1Y2UgdGhlIFVTQiB1bWIoNCkgbmV0d29yayBkcml2ZXIKClRoaXMgaW5jbHVkZXM6Cgoq
IFRoZSB1bWIoNCkga2VybmVsIGRyaXZlcgoqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wK
KiBDb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gaWZjb25maWcoOCkgKG1lZGlhIHR5cGUuLi4pCi0t
LQogbGliL2xpYmlmY29uZmlnL2xpYmlmY29uZmlnX21lZGlhLmMgfCAgICA1ICsKIHNiaW4vTWFr
ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzYmluL3VtYmN0bC9NYWtlZmls
ZSAgICAgICAgICAgICAgICB8ICAgIDggKwogc2Jpbi91bWJjdGwvdW1iY3RsLjggICAgICAgICAg
ICAgICAgfCAgMTcyICsrCiBzYmluL3VtYmN0bC91bWJjdGwuYyAgICAgICAgICAgICAgICB8ICA3
NjcgKysrKysrKwogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUgICAgICAgICAgICAgfCAgICAxICsK
IHNoYXJlL21hbi9tYW40L3VtYi40ICAgICAgICAgICAgICAgIHwgICA5MCArCiBzeXMvY29uZi9m
aWxlcyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3lzL2Rldi91c2IvbmV0L2lmX3Vt
Yi5jICAgICAgICAgICAgfCAyOTIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzL2Rl
di91c2IvbmV0L2lmX3VtYnJlZy5oICAgICAgICAgfCAgNDQxICsrKysKIHN5cy9kZXYvdXNiL25l
dC9tYmltLmggICAgICAgICAgICAgIHwgIDcyNCArKysrKysrCiBzeXMvbW9kdWxlcy91c2IvTWFr
ZWZpbGUgICAgICAgICAgICB8ICAgIDIgKy0KIHN5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUg
ICAgICAgIHwgICAzNSArCiBzeXMvbmV0L2lmX21lZGlhLmMgICAgICAgICAgICAgICAgICB8ICAg
MTEgKwogc3lzL25ldC9pZl9tZWRpYS5oICAgICAgICAgICAgICAgICAgfCAgIDQwICsKIHN5cy9u
ZXQvaWZfdHlwZXMuaCAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzeXMvc3lzL3NvY2tpby5o
ICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogMTcgZmlsZXMgY2hhbmdlZCwgNTIyMiBpbnNl
cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2Jpbi91bWJjdGwv
TWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzYmluL3VtYmN0bC91bWJjdGwuOAogY3JlYXRl
IG1vZGUgMTAwNjQ0IHNiaW4vdW1iY3RsL3VtYmN0bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hh
cmUvbWFuL21hbjQvdW1iLjQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvaWZf
dW1iLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvbWJpbS5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmlsZQoKZGlmZiAtLWdpdCBhL2xpYi9saWJpZmNv
bmZpZy9saWJpZmNvbmZpZ19tZWRpYS5jIGIvbGliL2xpYmlmY29uZmlnL2xpYmlmY29uZmlnX21l
ZGlhLmMKaW5kZXggMWY3NGJkZTAzNDYxLi43Mzk4NDdiYmQyNTQgMTAwNjQ0Ci0tLSBhL2xpYi9s
aWJpZmNvbmZpZy9saWJpZmNvbmZpZ19tZWRpYS5jCisrKyBiL2xpYi9saWJpZmNvbmZpZy9saWJp
ZmNvbmZpZ19tZWRpYS5jCkBAIC03OCw2ICs3OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlm
bWVkaWFfZGVzY3JpcHRpb24KICAgICBpZm1fc3VidHlwZV9ldGhlcm5ldF9vcHRpb25fZGVzY3Jp
cHRpb25zW10gPQogICAgIElGTV9TVUJUWVBFX0VUSEVSTkVUX09QVElPTl9ERVNDUklQVElPTlM7
CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWZtZWRpYV9kZXNjcmlwdGlvbgorICAgIGlmbV9zdWJ0
eXBlX21iaW1fZGVzY3JpcHRpb25zW10gPQorICAgIElGTV9TVUJUWVBFX01CSU1fREVTQ1JJUFRJ
T05TOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRpb24KICAgICBpZm1f
c3VidHlwZV9pZWVlODAyMTFfZGVzY3JpcHRpb25zW10gPQogICAgIElGTV9TVUJUWVBFX0lFRUU4
MDIxMV9ERVNDUklQVElPTlM7CkBAIC00OTIsNiArNDk2LDcgQEAgaWZjb25maWdfbWVkaWFfZ2V0
X3N0YXR1cyhjb25zdCBzdHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcikKIAlzd2l0Y2ggKElGTV9UWVBF
KGlmbXItPmlmbV9hY3RpdmUpKSB7CiAJY2FzZSBJRk1fRVRIRVI6CiAJY2FzZSBJRk1fQVRNOgor
CWNhc2UgSUZNX01CSU06CiAJCWlmIChpZm1yLT5pZm1fc3RhdHVzICYgSUZNX0FDVElWRSkgewog
CQkJcmV0dXJuICgiYWN0aXZlIik7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zYmluL01ha2Vm
aWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCA3OTAxMTJiMDVmNmYuLjVlNWE4OTQzYzY3YSAxMDA2
NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2VmaWxlCkBAIC02Myw2ICs2Myw3
IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lzY3RsIFwKIAl0dW5lZnMgXAor
CXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9ICJubyIgfHwgJHtNS19JTkVU
Nn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFrZWZpbGUgYi9zYmluL3VtYmN0
bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM1YWZi
MWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3RsL01ha2VmaWxlCkBAIC0wLDAg
KzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91c2IvbmV0CisKK1BST0c9CXVt
YmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisKKy5pbmNsdWRlIDxic2QucHJv
Zy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44IGIvc2Jpbi91bWJjdGwvdW1i
Y3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yOGQ4MjBkMjY0
NTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJjdGwuOApAQCAtMCwwICsxLDE3
MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgUGllcnJl
IFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
LlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworLlwiIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisu
XCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5cIiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy5cIiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisuXCIgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
CisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisuXCIKKy5c
IiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1OjM1OjIwIHNldmFuIEV4cCAk
CisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0ZTogW1RodSBBdWcgMzEgMTA6
NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisuRHQgVU1CQ1RMIDgKKy5Pcwor
LlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNldCBNQklNIGNlbGx1bGFyIG1v
ZGVtIGludGVyZmFjZSBwYXJhbWV0ZXJzICg0Ry9MVEUpCisuU2ggU1lOT1BTSVMKKy5ObSB1bWJj
dGwKKy5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9wIEFyIHZhbHVlCisu
QXIgLi4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBjb25maWctZmlsZQor
LkFyIGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0gQXIgZm9ybWF0Cisu
QXIgaWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0cyB0aGUgZm9sbG93
aW5nIG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVYWFggLW9mZnNldCBp
bmRlbnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNvbmZpZy1maWxlCitm
b3IKKy5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWlycywgb25lIHBlciBs
aW5lLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgor
VGhpcyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBub3QgcGFzc2VkIGFz
IGNvbW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcgd2l0aCAjIHRvIHRo
ZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBGbCBtIEFyIGZvcm1h
dAorRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIgZm9ybWF0CitzcGVj
aWZpZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwKKy5QcAorVGhlCisu
WHIgdW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3Vt
ZW50cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0aW5ncyB0aGF0IGNh
biBiZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBtYXkgYmUgY3JlZGVu
dGlhbHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVzLgorVGhlCisuTm0K
K3V0aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5ncywgb3Ig
YWRqdXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitGb3Igd2hhdGV2ZXIg
aW50ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBhcmFtZXRlcgorLkFy
IGlmbmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGludGVyZmFjZSBmb3Ig
d2hpY2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRpc3BsYXllZC4KK1Vz
ZQorLlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUgd2hpY2ggaW50ZXJm
YWNlcyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0ZXIgaXMgZ2l2ZW4s
CisuTm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IKKy5BciBpZm5hbWUK
K2FuZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQs
IHN1cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUgY29tbWFuZCB3b3Jr
cyBpbgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBxdWlldGx5LCB1bmxl
c3MgdGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2ggd2lsbCBjYXVzZSBh
IGZpbmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBhYm92ZSBvbmNlIGFs
bCBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBhcmFtZXRlcnMgY3Vy
cmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9IE5zIEVtIGFjY2Vz
cy1wb2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgorLkl0IEFyIHVzZXJu
YW1lIE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0bworLkVtIHVzZXJu
YW1lIC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQKK1NldCB0aGUgcGFz
c3dvcmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBOcyBFbSBwaW4tY29k
ZQorRW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsgTnMgXCY9IE5zIEVt
IHB1ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0IEFyIHJvYW1pbmcK
K0FsbG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFyIC1yb2FtaW5nCitE
ZW55IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2ggRVhBTVBMRVMKKy5C
ZCAtbGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1vZGUgYXV0b21hdGlj
LCByZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1OZXQiLCBkYXRhY2xh
c3MgTFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQyIiwgcm9hbWluZyAi
IiAoZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAwMAorCWZpcm13YXJl
ICJNQklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVkCisuUHAKK0Rpc3Bs
YXkgdGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCB1bWIwIGFw
biBvcGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQgbW9iaWxlCisuRWQK
Ky5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSB0
aGUgY29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAvZGV2L3N0ZGluIHVt
YjAgPDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0
aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VFIEFMU08KKy5YciBu
ZXRzdGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5YciBpZndhdGNoZCA4
CisuU2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFyZWQgaW4KKy5OeCA5
LjAgLgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5CisuQW4gUGllcnJl
IFByb25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwuYyBiL3NiaW4vdW1i
Y3RsL3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODgx
NjdiYWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1iY3RsLmMKQEAgLTAs
MCArMSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8KKy8qCisgKiBPcmln
aW5hbCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEu
b3JnPiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVCU0QgdXBkYXRlcykK
KyAqCisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkgPHBpZXJyZUBk
ZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgor
ICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5o
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisKKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJw
YS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91bWJyZWcuaCIKKwor
CisvKiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJf
YWN0c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtdID0KKwlNQklNX1NJ
TVNUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
X3VtYl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0KKwlNQklNX1BLVFNS
Vl9TVEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IF91bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9OUzsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0KKwlVTUJfSU5URVJO
QUxfU1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVtYl92YWxkZXNj
ciBfdW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQsICJQSU4gcmVxdWly
ZWQifSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwKKwl7IFVNQl9QVUtf
UkVRVUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsKKworc3RhdGljIGNv
bnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQoreworCXsgTUJJTV9SRUdN
T0RFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FVVE9NQVRJQywgImF1
dG9tYXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwiIH0sCisJeyAwLCBO
VUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJfYmVyW10g
PQoreworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJeyBVTUJfQkVSX1ZF
UllHT09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29vZCIgfSwKKwl7IFVN
Ql9CRVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVtIiB9LAorCXsgVU1C
X0JFUl9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5IGJhZCIgfSwKKwl7
IFVNQl9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7IDAsIE5VTEwgfQor
fTsKKworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3RvX3V0ZjE2KGNvbnN0
IGNoYXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOworc3RhdGljIGludCBf
ZXJyb3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0YXRpYyBpbnQgX3Vt
YmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFyZ2MsIGNoYXIgKiBh
cmd2W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAqIGlmbmFtZSwgY2hh
ciBjb25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IF91bWJjdGxf
ZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9z
ZSk7CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0ICogaWZuYW1lLCBz
dHJ1Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9nYXRld2F5KGNoYXIg
Y29uc3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBp
Zm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBfdW1iY3RsX2lvY3Rs
KGNoYXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LAorCQlz
dHJ1Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChjaGFyIGNvbnN0ICog
aWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBhcmdjLCBjaGFyICog
YXJndltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7CitzdGF0aWMgaW50IF91
c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZfdCAqIGluLCBpbnQg
aW5sZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3QgKiBpbiwgaW50IGlu
bGVuLCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5jdGlvbnMgKi8KKy8q
IGNoYXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBPcGVuQlNEJ3MgaWZj
b25maWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3QgY2hhciAqIGluLCB1
aW50MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7CisJdWludDE2X3Qg
YzsKKworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09ICdcMCcpIHsKKwkJ
CS8qCisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBidXQgemVybyBvdXQg
dGhlCisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0KG91dCwgMCwgb3V0
bGVuKTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXplb2YoKm91dCkpCisJ
CQlyZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiArPSBzaXplb2YoKm91
dCk7CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8qIGVycm9yICovCitz
dGF0aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0LCAuLi4pCit7CisJ
dmFfbGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJdmFfc3RhcnQoYXAs
IGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOwor
CWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB1bWJjdGwgKi8K
K3N0YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50
IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBpZnJlcSBpZnI7CisJ
c3RydWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgdW1icDsKKworCWlm
KChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIs
IDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2Yo
aWZyLmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0KCZ1bWJwLCAwLCBz
aXplb2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1icDsKKwkJaWYoX3Vt
YmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAhPSAwCisJCQkJfHwg
X3VtYmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAorCQkJCXx8IF91bWJj
dGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlmcikgIT0gMCkKKwkJ
eworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYoYXJnYyA9PSAwIHx8
IHZlcmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJCWlm
KF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZyKSAhPSAwKQorCQl7
CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3RsX2luZm8oaWZuYW1l
LCAmdW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4gX2Vycm9yKDIsICIl
czogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyog
dW1iY3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBjb25zdCAqIGlmbmFt
ZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogZmlsZW5hbWUp
OworCitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZuYW1lLCBjaGFyIGNv
bnN0ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEg
aWZyOworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7
CisKKwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVybiAyOworCW1lbXNl
dCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwg
c2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1bWJwOwor
CW1lbXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3RsX2lvY3RsKGlmbmFt
ZSwgZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxlX3BhcnNlKGlmbmFt
ZSwgJnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQs
IFNJT0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAy
OworCX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1
bWJpOworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CSU5GTywgJmlmcikg
IT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJX3VtYmN0bF9p
bmZvKGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJuIF9l
cnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1
bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1lKQoreworCWludCBy
ZXQgPSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVfdCBsZW47CisJaW50
IGk7CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5VTEwsIE5VTEwgfTsK
KwljaGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKQor
CQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsK
Kwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkKKwl7CisJCWlmKGJ1
ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAn
OworCQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYoYnVmW2xlbiAtIDFd
ICE9ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwK
KwkJCQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0YyhmcCkpICE9IEVP
RiAmJiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVmW2xlbiAtIDFdID0g
J1wwJzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5VTEwpCisJCXsKKwkJ
CXRva2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UKKwkJCXRva2Vuc1sx
XSA9IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAsIChwICE9IE5VTEwp
ID8gMiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZlb2YoZnApOworCWlm
KGZjbG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBm
aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIHVtYmN0
bF9kdW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBj
b25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IGlm
cmVxIGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVyYm9zZTsKKworCWlm
KChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIs
IDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2Yo
aWZyLmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJaWYoX3Vt
YmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9IDApCisJeworCQlj
bG9zZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJu
IF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWlmKHN0cm5j
YXNlY21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1bXBfanNvbihpZm5h
bWUsICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBVbnN1cHBvcnRlZCBm
b3JtYXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0bF9kdW1wX2pzb24g
Ki8KK3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0
cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJcHJpbnRmKCJ7IikK
KyNkZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09OX1NFUAlwcmludGYo
IiwgIikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQorI2RlZmluZSBKU09O
X0FSUkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5HKGtleSwgdmFsKQlw
cmludGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpTT05fSU5UKGtleSwg
dmFsKQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUgSlNPTl9VTE9ORyhr
ZXksIHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2RlZmluZSBKU09OX0JP
T0woa2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/InRydWUiOiJmYWxz
ZSIpCisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjogbnVsbCIsIGtleSkK
KyNkZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtleSkKKworI2RlZmlu
ZSBKU09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wiOiBcIiIsIGtleSks
XAorCQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikpCisKKyNkZWZpbmUg
SlNPTl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09OX1NUUklORyhrZXks
IHZhbCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05VTExfV0VNUFRZKGtl
eSwgdmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wKKwkJCQkJSlNPTl9X
U1RSSU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkKKworCUpTT05fU1RB
UlQ7CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNPTl9TRVA7CisJSlNP
Tl9OVUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0ZSwgdW1iaS0+c3Rh
dGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0dXMiLCB1bWJfdmFs
MmRlc2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlKU09OX1NFUDsKKwlK
U09OX0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1wdHNfbGVmdCk7CisJ
SlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1iX3ZhbDJkZXNjcihf
dW1iX2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxM
X0VNUFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3RhdGUsIHVtYmktPnNp
bV9zdGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2ltLXJlZ2lzdHJhdGlv
biIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3RhdGUpKTsKKwlKU09O
X1NFUDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9kZSIsIHVtYl92YWwy
ZGVzY3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9J
TlQoIm5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9TRVA7CisJSlNPTl9O
VUxMX0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGt0c3RhdGUsIHVt
YmktPnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJzdXBwb3J0
ZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5zdXBw
b3J0ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJwcmVmZXJyZWQt
ZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5wcmVmZXJy
ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJvZmZlcmVkLWRhdGFj
bGFzc2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+aGlnaGVzdGNsYXNz
KSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3MiLCB1bWJfdmFsMmRl
c2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09OX1NFUDsKKwlKU09O
X05VTExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJOQU1F
X01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhvbmUtbnVtYmVyIiwg
dW1iaS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dF
TVBUWSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklCRVJJRF9NQVhMRU4p
OworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1iaS0+aWNjaWQsIFVN
Ql9JQ0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9hbWluZy1vbiIsIHVt
YmktPmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJyb2Ft
aW5nLXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRfTUFYTEVOKTsKKwlK
U09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJpLT5kZXZpZCwgVU1C
X0RFVklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgiZmlybXdhcmUi
LCB1bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NFUDsKKwlKU09OX05V
TExfV0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5GT19NQVhMRU4pOwor
CUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1uYW1lIiwgdW1iaS0+
YXBuLCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgidXNl
cm5hbWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7
CisJSlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29yZCwgVU1CX1BBU1NX
T1JEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1bWJpLT5yc3NpKTsK
KwlKU09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJpLT5iZXIpOworCUpT
T05fU0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19yYWRpb19vbik7CisJ
SlNPTl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3X3JhZGlvX29uKTsK
KwlKU09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJpLT51cGxpbmtfc3Bl
ZWQpOworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVkIiwgdW1iaS0+ZG93
bmxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRucyIpOworCUpTT05f
QVJSQVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2VydmVycyBpbiB0aGUg
SlNPTiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1X2ludDMyX3QJCWlw
djRkbnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMgaXMgZWl0aGVyIG9m
IG1heGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQncyBtZW1zZXQgdG8g
MCkKKwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisKKy8qIHVtYmN0bF9n
YXRld2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNvbnN0ICogaWZuYW1l
KQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAq
IHNpbjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJ
bWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZu
YW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZk
LCBTSU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJu
IDI7CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9kc3RhZGRyOwor
CXByaW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJaWYoY2xvc2UoZmQp
ICE9IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLworc3RhdGljIHZvaWQg
X3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkp
Cit7CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiArIDFdOworCWNoYXIg
cG5bVU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VNQl9ST0FNSU5HVEVY
VF9NQVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFdOworCWNoYXIgZndp
bmZvW1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1CX0hXSU5GT19NQVhM
RU4gKyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJO
QU1FX01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsKKwlfdXRmMTZfdG9f
Y2hhcih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9mKHBuKSk7CisJX3V0
ZjE2X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhUX01BWExFTiwKKwkJ
CXJvYW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+YXBuLCBV
TUJfQVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+
ZndpbmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndpbmZvKSk7CisJX3V0
ZjE2X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwgaHdpbmZvLCBzaXpl
b2YoaHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMsIHJlZ2lzdHJhdGlv
biAlc1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMsIHNpZ25hbCAlc1xu
IgorCQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIgKCVzKVxuIgorCQkJ
Ilx0QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAiXG4iCisJCQkiXHRm
aXJtd2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFtZSwgdW1iX3ZhbDJk
ZXNjcihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVn
bW9kZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVnc3RhdGUsIHVt
YmktPnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNz
LCB1bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2JlciwgdW1iaS0+YmVy
KSwgcG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJhbGxvd2VkIiA6ICJk
ZW5pZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRvd25saW5rX3NwZWVk
LAorCQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAqLworc3RhdGljIHZv
aWQgX3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sKKwkvKiBYWFggTm90
ZSB0byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5OgorCSAq
IGRvCisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8gKGNoYXIpaHRvbGUx
NigqaW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9sZTE2KCooaW4rKykp
ICE9ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFuIGVmZm9ydCB0byBy
ZXVzZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRmMTZfdG9fY2hhciBp
bnN0ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRmMTZfdG9fY2hhcihp
biwgaW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOworCXByaW50ZigiJXMi
LCBidWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bF9pb2N0
bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwKKwkJ
c3RydWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0LCBpZnIpICE9IDAp
CisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7
CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2FsbGJhY2tzICovCitz
dGF0aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwg
Y2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNvbnN0ICosIHN0
cnVjdCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcGFz
c3dvcmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICop
Oworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVy
ICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIgY29uc3QgKiwgc3Ry
dWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2Ft
aW5nX2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwKKwkJY2hhciBj
b25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBjb25zdCAqLCBzdHJ1
Y3QgdW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0aWMgaW50IF91bWJj
dGxfc2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwK
KwkJaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJeworCQljaGFyIGNvbnN0
ICogbmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJCQlzdHJ1Y3QgdW1i
X3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVyOworCX0gY2FsbGJh
Y2tzW10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAidXNlcm5hbWUiLCBf
c2V0X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNzd29yZCwgMSB9LAor
CQl7ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1aywgMSB9LAorCQl7
ICJyb2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1yb2FtaW5nIiwgX3Nl
dF9yb2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBqOworCisJZm9yKGkg
PSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6ZW9mKGNhbGxiYWNr
cykgLyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChhcmd2W2ldLCBjYWxs
YmFja3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nbal0ucGFyYW1ldGVy
ICYmIGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIlczogSW5jb21wbGV0
ZSIKKwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNhbGxiYWNrc1tqXS5j
YWxsYmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBhcmFtZXRlcgorCQkJ
CQkJCT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlmKGNhbGxi
YWNrc1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYoaiA9
PSBzaXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJCXJldHVybiBfZXJy
b3IoLTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVt
Yl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQoreworCXVtYnAtPmFwbmxl
biA9IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1icC0+YXBuKSk7CisJ
aWYodW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+IHNpemVvZih1bWJw
LT5hcG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiQVBOIHRvbyBs
b25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNv
bnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3Qg
KiB1c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3RvX3V0ZjE2KHVzZXJu
YW1lLCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFtZSkpOworCWlmKHVt
YnAtPnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2VybmFtZWxlbiA+IHNp
emVvZih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5h
bWUsICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9z
ZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1
bWJwLAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFzc3dvcmRsZW4gPSBf
Y2hhcl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlzaXplb2YodW1icC0+
cGFzc3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8IChzaXplX3QpdW1i
cC0+cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQlyZXR1cm4gX2Vycm9y
KC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1i
X3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJdW1icC0+aXNfcHVr
ID0gMDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAtPnBpbmxlbiA9IF9j
aGFyX3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGluKSk7CisJaWYodW1i
cC0+cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBzaXplb2YodW1icC0+
cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwgIlBJTiBjb2RlIHRv
byBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9wdWsoY2hhciBjb25z
dCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICog
cHVrKQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklNX1BJTl9PUF9FTlRF
UjsKKwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAtPnBpbiwgc2l6ZW9m
KHVtYnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVfdCl1bWJwLT5waW5s
ZW4gPiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlm
bmFtZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
X3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1l
dGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9pZCkgaWZuYW1lOwor
CSh2b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3Qg
dW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQpCit7CisJKHZvaWQp
IGlmbmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9IDA7CisJcmV0dXJu
IDA7Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBfdW1iY3RsX3NvY2tl
dCh2b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RH
UkFNLCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAlcyIsIHN0cmVycm9y
KGVycm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitzdGF0aWMgaW50IF91
c2FnZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZuYW1lIFtwYXJhbWV0
ZXIgW3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZpZy1maWxlIGlmbmFt
ZVxuIgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVtYmN0bCAtbSBmb3Jt
YXQgaWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFyZSBtdXR1YWxseSBl
eGNsdXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5cbiIsCisJCQlzdGRl
cnIpOworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8KK3N0YXRpYyB2b2lk
IF91dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hhciAqIG91dCwgc2l6
ZV90IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxlbiA+IDApIHsKKwkJ
YyA9IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09IDAgfHwgLS1vdXRs
ZW4gPT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0ICovCisJCQkqb3V0
ID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWkoYykgPyAoY2hhcilj
IDogJz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBtYWluICovCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwljaGFyIGNvbnN0ICog
ZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxMOworCWludCBnYXRl
d2F5ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdldG9wdChhcmdjLCBh
cmd2LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJY2FzZSAnZic6CisJ
CQkJZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJCQlnYXRld2F5ID0g
MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0gTlVMTDsKKwkJCQlm
b3JtYXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnbSc6
CisJCQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsKKwkJCQlnYXRld2F5
ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UrKzsKKwkJCQlicmVh
azsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJaWYob3B0aW5kID09
IGFyZ2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBOVUxMKQorCXsKKwkJ
aWYob3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOworCQlyZXR1cm4gX3Vt
YmN0bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOworCX0KKwlpZihmb3Jt
YXQgIT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJCXJldHVybiBfdXNh
Z2UoKTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZvcm1hdCwgdmVyYm9z
ZSk7CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9IGFyZ2MpCisJCQly
ZXR1cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJndltvcHRpbmRdKTsK
Kwl9CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBhcmdjIC0gb3B0aW5k
IC0gMSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9t
YW40L01ha2VmaWxlIGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXggYWQxY2Y1ZGQzNzg1
Li4zNGIzNmIyYjA5M2IgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L01ha2VmaWxlCisrKyBi
L3NoYXJlL21hbi9tYW40L01ha2VmaWxlCkBAIC0xMDQ1LDYgKzEwNDUsNyBAQCBNQU4rPQlcCiAJ
dWxlZC40IFwKIAl1bHB0LjQgXAogCXVtYXNzLjQgXAorCXVtYi40IFwKIAl1bWNzLjQgXAogCXVt
Y3QuNCBcCiAJdW1vZGVtLjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjQvdW1iLjQgYi9z
aGFyZS9tYW4vbWFuNC91bWIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmEwNTVmOWU2ZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW40L3VtYi40
CkBAIC0wLDAgKzEsOTAgQEAKKy5cIiAkTmV0QlNEOiB1bWIuNCx2IDEuNCAyMDE5LzA4LzMwIDA5
OjIyOjE3IHdpeiBFeHAgJAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE2IGdlbnVhIG1iSAor
LlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg
dGhpcyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlz
IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorLlwiIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisu
XCIKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBE
SVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJF
IElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IK
Ky5cIiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9G
IFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisuXCIgQUNUSU9OIE9GIENPTlRS
QUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YK
Ky5cIiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElT
IFNPRlRXQVJFLgorLlwiCisuRGQgQXVndXN0IDI0LCAyMDE5CisuRHQgVU1CIDQKKy5PcworLlNo
IE5BTUUKKy5ObSB1bWIKKy5OZCBVU0IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwg
KE1CSU0pCisuU2ggU1lOT1BTSVMKKy5DZCAidW1iKiAgYXQgdWh1Yj8gcG9ydD8iCisuU2ggREVT
Q1JJUFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVVNCIE1CSU0g
ZGV2aWNlcy4KKy5QcAorTUJJTSBkZXZpY2VzIGVzdGFibGlzaCBjb25uZWN0aW9ucyB2aWEgY2Vs
bHVsYXIgbmV0d29ya3Mgc3VjaCBhcworR1BSUywgVU1UUywgYW5kIExURS4KK1RoZXkgYXBwZWFy
IGFzIGEgcmVndWxhciBwb2ludC10by1wb2ludCBuZXR3b3JrIGludGVyZmFjZSwKK3RyYW5zcG9y
dGluZyByYXcgSVAgZnJhbWVzLgorLlBwCitSZXF1aXJlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRl
cnMgbGlrZSBQSU4gYW5kIEFQTiBoYXZlIHRvIGJlIHNldAord2l0aAorLlhyIHVtYmN0bCA4IC4K
K09uY2UgdGhlIFNJTSBjYXJkIGhhcyBiZWVuIHVubG9ja2VkIHdpdGggdGhlIGNvcnJlY3QgUElO
LCBpdAord2lsbCByZW1haW4gaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgTUJJTSBkZXZpY2UgaXMg
cG93ZXItY3ljbGVkLgorSW4gY2FzZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBhbiAiYWx3
YXlzLW9uIiBVU0IgcG9ydCwKK2l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25uZWN0IHRvIGEgcHJv
dmlkZXIgd2l0aG91dCBlbnRlcmluZyB0aGUKK1BJTiBhZ2FpbiBldmVuIGlmIHRoZSBzeXN0ZW0g
d2FzIHJlYm9vdGVkLgorLlNoIEhBUkRXQVJFCitUaGUgZm9sbG93aW5nIGRldmljZXMgc2hvdWxk
IHdvcms6CisuUHAKKy5CbCAtdGFnIC13aWR0aCBEcyAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAor
Lkl0IEVyaWNzc29uIEg1MzIxZ3cgYW5kIE41MzIxZ3cKKy5JdCBGaWJvY29tIEw4MzEtRUFVCisu
SXQgTWVkaW9uIE1vYmlsZSBTNDIyMiAoTWVkaWFUZWsgT0VNKQorLkl0IFNpZXJyYSBXaXJlbGVz
cyBFTTczNDUKKy5JdCBTaWVycmEgV2lyZWxlc3MgRU03NDU1CisuSXQgU2llcnJhIFdpcmVsZXNz
IEVNODgwNQorLkl0IFNpZXJyYSBXaXJlbGVzcyBNQzgzMDUKKy5FbAorLlNoIFNFRSBBTFNPCisu
WHIgaW50cm8gNCAsCisuWHIgbmV0aW50cm8gNCAsCisuWHIgdXNiIDQgLAorLlhyIGlmY29uZmln
LmlmIDUgLAorLlhyIGlmY29uZmlnIDggLAorLlhyIHVtYmN0bCA4CisuUnMKKy4lVCAiVW5pdmVy
c2FsIFNlcmlhbCBCdXMgQ29tbXVuaWNhdGlvbnMgQ2xhc3MgU3ViY2xhc3MgU3BlY2lmaWNhdGlv
biBmb3IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwiCisuJVUgaHR0cDovL3d3dy51
c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEz
LnppcAorLlJlCisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RldmljZSBkcml2ZXIgZmlyc3QgYXBw
ZWFyZWQgaW4KKy5PeCA2LjAKK2FuZAorLk54IDkuMCAuCisuU2ggQVVUSE9SUworLkFuIC1ub3Nw
bGl0CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gR2VyaGFyZCBSb3RoIEFx
IE10IGdlcmhhcmRAb3BlbmJzZC5vcmcKK2FuZCBwb3J0ZWQgZnJvbQorLk94CitieQorLkFuIFBp
ZXJyZSBQcm9uY2hlcnkgQXEgTXQga2hvcmJlbkBkZWZvcmEub3JnIC4KKy5TaCBDQVZFQVRTCitU
aGUKKy5ObQorZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgSVB2Ni4KKy5QcAorRGV2aWNlcyB3aGlj
aCBmYWlsIHRvIHByb3ZpZGUgYSBjb25mb3JtaW5nIE1CSU0gaW1wbGVtZW50YXRpb24gd2lsbAor
cHJvYmFibHkgYmUgYXR0YWNoZWQgYXMgc29tZSBvdGhlciBkcml2ZXIsIHN1Y2ggYXMKKy5YciB1
M2cgNCAuCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcyBiL3N5cy9jb25mL2ZpbGVzCmluZGV4
IDc4MTgxMDRiOGQ1MC4uNDIxMjkyNTZiMGU3IDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcwor
KysgYi9zeXMvY29uZi9maWxlcwpAQCAtMzMwNyw2ICszMzA3LDcgQEAgZGV2L3VzYi9uZXQvaWZf
bXVnZS5jCQlvcHRpb25hbCBtdWdlCiBkZXYvdXNiL25ldC9pZl9ydWUuYwkJb3B0aW9uYWwgcnVl
CiBkZXYvdXNiL25ldC9pZl9zbXNjLmMJCW9wdGlvbmFsIHNtc2MKIGRldi91c2IvbmV0L2lmX3Vk
YXYuYwkJb3B0aW9uYWwgdWRhdgorZGV2L3VzYi9uZXQvaWZfdW1iLmMJCW9wdGlvbmFsIHVtYgog
ZGV2L3VzYi9uZXQvaWZfdXJlLmMJCW9wdGlvbmFsIHVyZQogZGV2L3VzYi9uZXQvaWZfdXNpZS5j
CQlvcHRpb25hbCB1c2llCiBkZXYvdXNiL25ldC9pZl91cm5kaXMuYwkJb3B0aW9uYWwgdXJuZGlz
CmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMgYi9zeXMvZGV2L3VzYi9uZXQv
aWZfdW1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNzUxMWEw
NjExZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMKQEAgLTAs
MCArMSwyOTIwIEBACisvKgkkRnJlZUJTRCQgKi8KKy8qCSROZXRCU0QkICovCisvKgkkT3BlbkJT
RDogaWZfdW1iLmMsdiAxLjE4IDIwMTgvMDIvMTkgMDg6NTk6NTIgbXBpIEV4cCAkICovCisKKy8q
CisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTYgZ2VudWEgbWJIIChPcGVuQlNEIHZlcnNp
b24pCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg
aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgor
ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJ
TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAq
IEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us
IERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBO
RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB
UkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKHJlLXdyaXRlIGZvciBG
cmVlQlNEKQorICoKKyAqIFJlLXdyaXRlIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkg
PHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qCisgKiBNb2JpbGUgQnJvYWRiYW5kIEludGVyZmFjZSBNb2RlbCBz
cGVjaWZpY2F0aW9uOgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZj
bGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnppcAorICogQ29tcGxpYW5jZSB0ZXN0aW5n
IGd1aWRlCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2Rv
Y3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMv
cHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+
CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKworI2luY2x1ZGUgPHN5
cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgor
I2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorCisj
aW5jbHVkZSA8bWFjaGluZS9faW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9icGYuaD4KKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKyNpbmNsdWRlIDxu
ZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaW5jbHVkZSA8bmV0L25l
dGlzci5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5o
PgorI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgor
CisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jZGMuaD4K
KyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfZGV2aWNl
Lmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2Iv
dXNiZGlfdXRpbC5oPgorI2luY2x1ZGUgInVzYl9pZi5oIgorCisjaW5jbHVkZSAibWJpbS5oIgor
I2luY2x1ZGUgImlmX3VtYnJlZy5oIgorCitNQUxMT0NfREVDTEFSRShNX01CSU1fQ0lEX0NPTk5F
Q1QpOworTUFMTE9DX0RFRklORShNX01CSU1fQ0lEX0NPTk5FQ1QsICJtYmltX2NpZF9jb25uZWN0
IiwKKwkJIkNvbm5lY3Rpb24gcGFyYW1ldGVycyBmb3IgTUJJTSIpOworCisjaWZkZWYgVU1CX0RF
QlVHCisjZGVmaW5lIERQUklOVEYoeC4uLikJCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcp
IGxvZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERQUklOVEZOKG4sIHgu
Li4pCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcgPj0gKG4pKSBsb2coTE9HX0RFQlVHLCB4
KTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBERFVNUE4obiwgYiwgbCkJCQkJCQkJXAorCQlkbyB7
CQkJCQkJCVwKKwkJCWlmICh1bWJfZGVidWcgPj0gKG4pKQkJCQlcCisJCQkJdW1iX2R1bXAoKGIp
LCAobCkpOwkJCVwKKwkJfSB3aGlsZSAoMCkKKworY29uc3QgaW50CSB1bWJfZGVidWcgPSAxOwor
c3RhdGljIGNoYXIJKnVtYl91dWlkMnN0cih1aW50OF90IFtNQklNX1VVSURfTEVOXSk7CitzdGF0
aWMgdm9pZAkgdW1iX2R1bXAodm9pZCAqLCBpbnQpOworCisjZWxzZQorI2RlZmluZSBEUFJJTlRG
KHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4pCWRvIHsg
fSB3aGlsZSAoMCkKKyNkZWZpbmUgRERVTVBOKG4sIGIsIGwpCQlkbyB7IH0gd2hpbGUgKDApCisj
ZW5kaWYKKworI2RlZmluZSBERVZOQU0oc2MpCQlkZXZpY2VfZ2V0X25hbWV1bml0KChzYyktPnNj
X2RldikKKworLyoKKyAqIFN0YXRlIGNoYW5nZSB0aW1lb3V0CisgKi8KKyNkZWZpbmUgVU1CX1NU
QVRFX0NIQU5HRV9USU1FT1VUCTMwCisKKy8qCisgKiBTdGF0ZSBjaGFuZ2UgZmxhZ3MKKyAqLwor
I2RlZmluZSBVTUJfTlNfRE9OVF9EUk9QCTB4MDAwMQkvKiBkbyBub3QgZHJvcCBiZWxvdyBjdXJy
ZW50IHN0YXRlICovCisjZGVmaW5lIFVNQl9OU19ET05UX1JBSVNFCTB4MDAwMgkvKiBkbyBub3Qg
cmFpc2UgYmVsb3cgY3VycmVudCBzdGF0ZSAqLworCisvKgorICogRGlhZ25vc3RpYyBtYWNyb3MK
KyAqLworY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcmVnc3RhdGVzW10gPSBNQklNX1JF
R1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2RhdGFj
bGFzc2VzW10gPSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1i
X3ZhbGRlc2NyIHVtYl9zaW1zdGF0ZVtdID0gTUJJTV9TSU1TVEFURV9ERVNDUklQVElPTlM7Citj
b25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9tZXNzYWdlc1tdID0gTUJJTV9NRVNTQUdFU19E
RVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zdGF0dXNbXSA9IE1C
SU1fU1RBVFVTX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Np
ZHNbXSA9IE1CSU1fQ0lEX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX3BrdHN0YXRlW10gPSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7Citjb25zdCBz
dHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9hY3RzdGF0ZVtdID0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRF
X0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Vycm9yW10gPSBN
QklNX0VSUk9SX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX3Bp
bnR5cGVbXSA9IE1CSU1fUElOVFlQRV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3Zh
bGRlc2NyIHVtYl9pc3RhdGVbXSA9IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlM7CisK
KyNkZWZpbmUgdW1iX3JlZ3N0YXRlKGMpCQl1bWJfdmFsMmRlc2NyKHVtYl9yZWdzdGF0ZXMsIChj
KSkKKyNkZWZpbmUgdW1iX2RhdGFjbGFzcyhjKQl1bWJfdmFsMmRlc2NyKHVtYl9kYXRhY2xhc3Nl
cywgKGMpKQorI2RlZmluZSB1bWJfc2ltc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1iX3NpbXN0
YXRlLCAocykpCisjZGVmaW5lIHVtYl9yZXF1ZXN0MnN0cihtKQl1bWJfdmFsMmRlc2NyKHVtYl9t
ZXNzYWdlcywgKG0pKQorI2RlZmluZSB1bWJfc3RhdHVzMnN0cihzKQl1bWJfdmFsMmRlc2NyKHVt
Yl9zdGF0dXMsIChzKSkKKyNkZWZpbmUgdW1iX2NpZDJzdHIoYykJCXVtYl92YWwyZGVzY3IodW1i
X2NpZHMsIChjKSkKKyNkZWZpbmUgdW1iX3BhY2tldF9zdGF0ZShzKQl1bWJfdmFsMmRlc2NyKHVt
Yl9wa3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfYWN0aXZhdGlvbihzKQl1bWJfdmFsMmRlc2Ny
KHVtYl9hY3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfZXJyb3Iyc3RyKGUpCXVtYl92YWwyZGVz
Y3IodW1iX2Vycm9yLCAoZSkpCisjZGVmaW5lIHVtYl9waW5fdHlwZSh0KQkJdW1iX3ZhbDJkZXNj
cih1bWJfcGludHlwZSwgKHQpKQorI2RlZmluZSB1bWJfaXN0YXRlKHMpCQl1bWJfdmFsMmRlc2Ny
KHVtYl9pc3RhdGUsIChzKSkKKworc3RhdGljIGRldmljZV9wcm9iZV90IHVtYl9wcm9iZTsKK3N0
YXRpYyBkZXZpY2VfYXR0YWNoX3QgdW1iX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0YWNoX3Qg
dW1iX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IHVtYl9zdXNwZW5kOworc3RhdGlj
IGRldmljZV9yZXN1bWVfdCB1bWJfcmVzdW1lOworc3RhdGljIHZvaWQJIHVtYl9hdHRhY2hfdGFz
ayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICopOworc3RhdGljIHVzYl9oYW5kbGVfcmVxdWVzdF90IHVt
Yl9oYW5kbGVfcmVxdWVzdDsKK3N0YXRpYyBpbnQJIHVtYl9kZWFjdGl2YXRlKGRldmljZV90KTsK
K3N0YXRpYyB2b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IHVz
Yl9jb25maWcgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtwaXBlcyhzdHJ1Y3QgdW1i
X3NvZnRjICopOworc3RhdGljIGludAkgdW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcs
IGNhZGRyX3QpOworc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7CitzdGF0aWMgdm9pZAkg
dW1iX2lucHV0KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK3N0YXRpYyBpbnQJIHVt
Yl9vdXRwdXQoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosCisJCSAgICBjb25zdCBzdHJ1
Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICopOworc3RhdGljIHZvaWQJIHVtYl9zdGFydChz
dHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkgdW1iX3N0YXJ0X3Rhc2soc3RydWN0IHVzYl9w
cm9jX21zZyAqKTsKKyNpZiAwCitzdGF0aWMgdm9pZAkgdW1iX3dhdGNoZG9nKHN0cnVjdCBpZm5l
dCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJIHVtYl9zdGF0ZWNoZ190aW1lb3V0KHZvaWQgKik7
CisKK3N0YXRpYyBpbnQJIHVtYl9tZWRpYWNoYW5nZShzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMg
dm9pZAkgdW1iX21lZGlhc3RhdHVzKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAq
KTsKKworc3RhdGljIHZvaWQJIHVtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNi
X3Byb2NfY2FsbGJhY2tfdCwKKwkJICAgIHN0cnVjdCB1c2JfcHJvY19tc2cgKiwgc3RydWN0IHVz
Yl9wcm9jX21zZyAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9uZXdzdGF0ZShzdHJ1Y3QgdW1i
X3NvZnRjICosIGVudW0gdW1iX3N0YXRlLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9zdGF0ZV90
YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7CitzdGF0aWMgdm9pZAkgdW1iX3VwKHN0cnVjdCB1
bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Rvd24oc3RydWN0IHVtYl9zb2Z0YyAqLCBp
bnQpOworCitzdGF0aWMgdm9pZAkgdW1iX2dldF9yZXNwb25zZV90YXNrKHN0cnVjdCB1c2JfcHJv
Y19tc2cgKik7CisKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX3Jlc3BvbnNlKHN0cnVjdCB1bWJf
c29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9oYW5kbGVfaW5kaWNhdGVf
c3RhdHVzX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwKKwkJICAgIGludCk7CitzdGF0
aWMgdm9pZAkgdW1iX2hhbmRsZV9vcGVuZG9uZV9tc2coc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lk
ICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0cnVjdCB1
bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9yZWdpc3Rl
cl9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVt
Yl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOwor
c3RhdGljIGludAkgdW1iX2RlY29kZV9zdWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1iX3NvZnRj
ICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcmFkaW9fc3RhdGUoc3Ry
dWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3Bp
bihzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNv
ZGVfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0
aWMgaW50CSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQg
KiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHN0cnVjdCB1bWJf
c29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9pcF9jb25maWd1
cmF0aW9uKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVt
Yl9yeChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl9yeGVv
ZjsKK3N0YXRpYyB2b2lkCSB1bWJfcnhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGlj
IGludAkgdW1iX2VuY2FwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0
IHVzYl94ZmVyICopOworc3RhdGljIHVzYl9jYWxsYmFja190IHVtYl90eGVvZjsKK3N0YXRpYyB2
b2lkCSB1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9k
ZWNhcChzdHJ1Y3QgdW1iX3NvZnRjICosIHN0cnVjdCB1c2JfeGZlciAqLCBpbnQpOworCitzdGF0
aWMgdXNiX2Vycm9yX3QJIHVtYl9zZW5kX2VuY2FwX2NvbW1hbmQoc3RydWN0IHVtYl9zb2Z0YyAq
LCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZ2V0X2VuY2FwX3Jlc3BvbnNlKHN0cnVj
dCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkgdW1iX2N0cmxfbXNn
KHN0cnVjdCB1bWJfc29mdGMgKiwgdWludDMyX3QsIHZvaWQgKiwgaW50KTsKKworc3RhdGljIHZv
aWQJIHVtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3Nl
KHN0cnVjdCB1bWJfc29mdGMgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9zZXRwaW4oc3RydWN0IHVt
Yl9zb2Z0YyAqLCBpbnQsIGludCwgdm9pZCAqLCBpbnQsIHZvaWQgKiwKKwkJICAgIGludCk7Citz
dGF0aWMgdm9pZAkgdW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGlj
IHZvaWQJIHVtYl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CitzdGF0aWMgdm9pZAkg
dW1iX2FsbG9jYXRlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9z
ZW5kX2ZjY19hdXRoKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3BhY2tl
dF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfY29u
bmVjdChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kaXNjb25uZWN0KHN0
cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX3NlbmRfY29ubmVjdChzdHJ1Y3Qg
dW1iX3NvZnRjICosIGludCk7CisKK3N0YXRpYyB2b2lkCSB1bWJfcXJ5X2lwY29uZmlnKHN0cnVj
dCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NtZChzdHJ1Y3QgdW1iX3NvZnRjICos
IGludCwgaW50LCBjb25zdCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2NtZDEoc3Ry
dWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsIHVpbnQ4X3QgKik7
CitzdGF0aWMgdm9pZAkgdW1iX2NvbW1hbmRfZG9uZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQg
KiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfZGVjb2RlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICos
IHVpbnQzMl90LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2RlY29kZV9xbWkoc3Ry
dWN0IHVtYl9zb2Z0YyAqLCB1aW50OF90ICosIGludCk7CisKK3N0YXRpYyB1c2JfY2FsbGJhY2tf
dCB1bWJfaW50cjsKKworc3RhdGljIGNoYXIJKnVtYl9udG9wKHN0cnVjdCBzb2NrYWRkciAqKTsK
Kworc3RhdGljIGNvbnN0IGludCB1bWJfeGZlcl90b3V0ID0gVVNCX0RFRkFVTFRfVElNRU9VVDsK
Kworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3RbXSA9IE1CSU1fVVVJRF9C
QVNJQ19DT05ORUNUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2NvbnRleHRfaW50ZXJuZXRb
XSA9IE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUOworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlk
X3FtaV9tYmltW10gPSBNQklNX1VVSURfUU1JX01CSU07CitzdGF0aWMgdWludDMyX3QJIHVtYl9z
ZXNzaW9uX2lkID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnIHVtYl9jb25m
aWdbVU1CX05fVFJBTlNGRVJdID0geworCVtVTUJfSU5UUl9SWF0gPSB7CisJCS50eXBlID0gVUVf
SU5URVJSVVBULAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVF
X0RJUl9JTiwKKwkJLmlmX2luZGV4ID0gMSwKKwkJLmNhbGxiYWNrID0gdW1iX2ludHIsCisJCS5i
dWZzaXplID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pLAorCQkuZmxhZ3Mg
PSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDF9LAorCQkudXNiX21vZGUgPSBVU0Jf
TU9ERV9IT1NULAorCX0sCisJW1VNQl9CVUxLX1JYXSA9IHsKKwkJLnR5cGUgPSBVRV9CVUxLLAor
CQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9JTiwKKwkJ
LmlmX2luZGV4ID0gMCwKKwkJLmNhbGxiYWNrID0gdW1iX3J4ZW9mLAorCQkuYnVmc2l6ZSA9IDgg
KiAxMDI0LAorCQkuZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9vayA9IDEsLmV4
dF9idWZmZXIgPSAxfSwKKwkJLnVzYl9tb2RlID0gVVNCX01PREVfSE9TVCwKKwl9LAorCVtVTUJf
QlVMS19UWF0gPSB7CisJCS50eXBlID0gVUVfQlVMSywKKwkJLmVuZHBvaW50ID0gVUVfQUREUl9B
TlksCisJCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VULAorCQkuaWZfaW5kZXggPSAwLAorCQkuY2Fs
bGJhY2sgPSB1bWJfdHhlb2YsCisJCS5idWZzaXplID0gOCAqIDEwMjQsCisJCS5mbGFncyA9IHsu
cGlwZV9ib2YgPSAxLC5mb3JjZV9zaG9ydF94ZmVyID0gMSwuZXh0X2J1ZmZlciA9IDF9LAorCQku
dGltZW91dCA9IHVtYl94ZmVyX3RvdXQsCisJCS51c2JfbW9kZSA9IFVTQl9NT0RFX0hPU1QsCisJ
fSwKK307CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdW1iX21ldGhvZHNbXSA9IHsKKwkvKiBV
U0IgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHVzYl9oYW5kbGVfcmVxdWVzdCwgdW1iX2hhbmRs
ZV9yZXF1ZXN0KSwKKworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNl
X3Byb2JlLCB1bWJfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCB1bWJfYXR0YWNo
KSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgdW1iX2RldGFjaCksCisJREVWTUVUSE9EKGRl
dmljZV9zdXNwZW5kLCB1bWJfc3VzcGVuZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsIHVt
Yl9yZXN1bWUpLAorCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IHVtYl9k
cml2ZXIgPSB7CisJLm5hbWUgPSAidW1iIiwKKwkubWV0aG9kcyA9IHVtYl9tZXRob2RzLAorCS5z
aXplID0gc2l6ZW9mIChzdHJ1Y3QgdW1iX3NvZnRjKSwKK307CisKK01BTExPQ19ERUZJTkUoTV9V
U0JfVU1CLCAiVVNCIFVNQiIsICJVU0IgTUJJTSBkcml2ZXIiKTsKKworY29uc3QgaW50IHVtYl9k
ZWxheSA9IDQwMDA7CisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYW4gIkZDQyBBdXRo
ZW50aWNhdGlvbiIgY29tbWFuZC4KKyAqLworI2lmbmRlZiBVU0JfVkVORE9SX1NJRVJSQQorIyBk
ZWZpbmUgVVNCX1ZFTkRPUl9TSUVSUkEJMHgxMTk5CisjZW5kaWYKKyNpZm5kZWYgVVNCX1BST0RV
Q1RfU0lFUlJBX0VNNzQ1NQorIyBkZWZpbmUgVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQkweDkw
NzkKKyNlbmRpZgorY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdW1iX2ZjY2F1dGhfZGV2c1td
ID0geworCXsKKwkJLm1hdGNoX2ZsYWdfdmVuZG9yID0gMSwKKwkJLm1hdGNoX2ZsYWdfcHJvZHVj
dCA9IDEsCisJCS5pZFZlbmRvciA9IFVTQl9WRU5ET1JfU0lFUlJBLAorCQkuaWRQcm9kdWN0ID0g
VVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90
IHVtYl9xbWlfYWxsb2NfY2lkW10gPSB7CisJMHgwMSwKKwkweDBmLCAweDAwLAkJLyogbGVuICov
CisJMHgwMCwJCQkvKiBRTVVYIGZsYWdzICovCisJMHgwMCwJCQkvKiBzZXJ2aWNlICJjdGwiICov
CisJMHgwMCwJCQkvKiBDSUQgKi8KKwkweDAwLAkJCS8qIFFNSSBmbGFncyAqLworCTB4MDEsCQkJ
LyogdHJhbnNhY3Rpb24gKi8KKwkweDIyLCAweDAwLAkJLyogbXNnICJBbGxvY2F0ZSBDSUQiICov
CisJMHgwNCwgMHgwMCwJCS8qIFRMViBsZW4gKi8KKwkweDAxLCAweDAxLCAweDAwLCAweDAyCS8q
IFRMViAqLworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdW1iX3FtaV9mY2NfYXV0aFtdID0g
eworCTB4MDEsCisJMHgwYywgMHgwMCwJCS8qIGxlbiAqLworCTB4MDAsCQkJLyogUU1VWCBmbGFn
cyAqLworCTB4MDIsCQkJLyogc2VydmljZSAiZG1zIiAqLworI2RlZmluZSBVTUJfUU1JX0NJRF9P
RkZTCTUKKwkweDAwLAkJCS8qIENJRCAoZmlsbGVkIGluIGxhdGVyKSAqLworCTB4MDAsCQkJLyog
UU1JIGZsYWdzICovCisJMHgwMSwgMHgwMCwJCS8qIHRyYW5zYWN0aW9uICovCisJMHg1ZiwgMHg1
NSwJCS8qIG1zZyAiU2VuZCBGQ0MgQXV0aGVudGljYXRpb24iICovCisJMHgwMCwgMHgwMAkJLyog
VExWIGxlbiAqLworfTsKKworc3RhdGljIGludAordW1iX3Byb2JlKGRldmljZV90IGRldikKK3sK
KwlzdHJ1Y3QgdXNiX2F0dGFjaF9hcmcgKnVhYSA9IGRldmljZV9nZXRfaXZhcnMoZGV2KTsKKwl1
c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfdCAqaWQ7CisKKwlpZiAodWFhLT51c2JfbW9kZSAhPSBV
U0JfTU9ERV9IT1NUKQorCQlyZXR1cm4gKEVOWElPKTsKKwlpZiAoKGlkID0gdXNiZF9nZXRfaW50
ZXJmYWNlX2Rlc2NyaXB0b3IodWFhLT5pZmFjZSkpID09IE5VTEwpCisJCXJldHVybiAoRU5YSU8p
OworCisJLyoKKwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgTkNNLCBjaGVjayBpZiBh
bHRlcm5hdGUgc2V0dGluZworCSAqIDEgaW1wbGVtZW50cyBNQklNLgorCSAqLworCWlmIChpZC0+
YkludGVyZmFjZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3Vi
Q2xhc3MgPT0KKwkgICAgVUlTVUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJaWQg
PSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcigKKwkJCQl1c2JkX2dldF9pZmFjZSh1YWEt
PmRldmljZSwKKwkJCQkJdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMSkpOworCQlpZiAoaWQgPT0g
TlVMTCB8fCBpZC0+YkFsdGVybmF0ZVNldHRpbmcgIT0gMSkKKwkJCXJldHVybiAoRU5YSU8pOwor
CX0KKworI2lmbmRlZiBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01PREVM
CisjIGRlZmluZSBVSVNVQkNMQVNTX01PQklMRV9CUk9BREJBTkRfSU5URVJGQUNFX01PREVMIDE0
CisjZW5kaWYKKwlpZiAoaWQtPmJJbnRlcmZhY2VDbGFzcyA9PSBVSUNMQVNTX0NEQyAmJgorCSAg
ICBpZC0+YkludGVyZmFjZVN1YkNsYXNzID09CisJICAgIFVJU1VCQ0xBU1NfTU9CSUxFX0JST0FE
QkFORF9JTlRFUkZBQ0VfTU9ERUwgJiYKKwkgICAgaWQtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAw
KQorCQlyZXR1cm4gKEJVU19QUk9CRV9TUEVDSUZJQyk7CisKKwlyZXR1cm4gKEVOWElPKTsKK30K
Kworc3RhdGljIGludAordW1iX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHVtYl9z
b2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IHVzYl9hdHRhY2hfYXJn
ICp1YWEgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisJc3RydWN0IHVzYl9jb25maWcgY29uZmln
W1VNQl9OX1RSQU5TRkVSXTsKKwlpbnQJIHY7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNfdW5pb25f
ZGVzY3JpcHRvciAqdWQ7CisJY29uc3Qgc3RydWN0IG1iaW1fZGVzY3JpcHRvciAqbWQ7CisJaW50
CSBpOworCXVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcl90ICppZDsKKwlzdHJ1Y3QgdXNiX2ludGVy
ZmFjZSAqaWZhY2U7CisJaW50CSBkYXRhX2lmYWNlbm8gPSAtMTsKKwl1c2JfZXJyb3JfdCBlcnJv
cjsKKworCXNjLT5zY19kZXYgPSBkZXY7CisJc2MtPnNjX3VkZXYgPSB1YWEtPmRldmljZTsKKwor
CW1lbWNweShjb25maWcsIHVtYl9jb25maWcsIHNpemVvZiAoY29uZmlnKSk7CisKKwlkZXZpY2Vf
c2V0X3VzYl9kZXNjKGRldik7CisKKwlzYy0+c2NfY3RybF9pZmFjZW5vID0gdWFhLT5pbmZvLmJJ
ZmFjZU51bTsKKworCW10eF9pbml0KCZzYy0+c2NfbXV0ZXgsIGRldmljZV9nZXRfbmFtZXVuaXQo
ZGV2KSwgTlVMTCwgTVRYX0RFRik7CisKKwkvKgorCSAqIFNvbWUgTUJJTSBoYXJkd2FyZSBkb2Vz
IG5vdCBwcm92aWRlIHRoZSBtYW5kYXRvcnkgQ0RDIFVuaW9uCisJICogRGVzY3JpcHRvciwgc28g
d2UgYWxzbyBsb29rIGF0IG1hdGNoaW5nIEludGVyZmFjZQorCSAqIEFzc29jaWF0aW9uIERlc2Ny
aXB0b3JzIHRvIGZpbmQgb3V0IHRoZSBNQklNIERhdGEgSW50ZXJmYWNlCisJICogbnVtYmVyLgor
CSAqLworCXNjLT5zY192ZXJfbWFqID0gc2MtPnNjX3Zlcl9taW4gPSAtMTsKKwlzYy0+c2NfbWF4
cGt0bGVuID0gTUJJTV9NQVhTRUdTWl9NSU5WQUw7CisJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2Vf
ZGVzY3JpcHRvcih1YWEtPmlmYWNlKTsKKworCXVkID0gdXNiZF9maW5kX2Rlc2NyaXB0b3Ioc2Mt
PnNjX3VkZXYsIGlkLCB1YWEtPmluZm8uYklmYWNlSW5kZXgsCisJCQlVREVTQ19DU19JTlRFUkZB
Q0UsIDB4ZmYsIFVERVNDU1VCX0NEQ19VTklPTiwgMHhmZik7CisJaWYgKHVkICE9IE5VTEwpIHsK
KwkJZGF0YV9pZmFjZW5vID0gdWQtPmJTbGF2ZUludGVyZmFjZVswXTsKKwl9CisKKwltZCA9IHVz
YmRfZmluZF9kZXNjcmlwdG9yKHNjLT5zY191ZGV2LCBpZCwgdWFhLT5pbmZvLmJJZmFjZUluZGV4
LAorCQkJVURFU0NfQ1NfSU5URVJGQUNFLCAweGZmLCBVREVTQ1NVQl9NQklNLCAweGZmKTsKKwlp
ZiAobWQgIT0gTlVMTCkgeworCQl2ID0gVUdFVFcobWQtPmJjZE1CSU1WZXJzaW9uKTsKKwkJc2Mt
PnNjX3Zlcl9tYWogPSBNQklNX1ZFUl9NQUpPUih2KTsKKwkJc2MtPnNjX3Zlcl9taW4gPSBNQklN
X1ZFUl9NSU5PUih2KTsKKwkJc2MtPnNjX2N0cmxfbGVuID0gVUdFVFcobWQtPndNYXhDb250cm9s
TWVzc2FnZSk7CisJCS8qIE5ldmVyIHRydXN0IGEgVVNCIGRldmljZSEgQ291bGQgdHJ5IHRvIGV4
cGxvaXQgdXMgKi8KKwkJaWYgKHNjLT5zY19jdHJsX2xlbiA8IE1CSU1fQ1RSTE1TR19NSU5MRU4g
fHwKKwkJCQlzYy0+c2NfY3RybF9sZW4gPiBNQklNX0NUUkxNU0dfTUFYTEVOKSB7CisJCQlEUFJJ
TlRGKCJjb250cm9sIG1lc3NhZ2UgbGVuICVkIG91dCBvZiAiCisJCQkJCSJib3VuZHMgWyVkIC4u
ICVkXVxuIiwKKwkJCQkJc2MtPnNjX2N0cmxfbGVuLCBNQklNX0NUUkxNU0dfTUlOTEVOLAorCQkJ
CQlNQklNX0NUUkxNU0dfTUFYTEVOKTsKKwkJCS8qIGNvbnRpbnVlIGFueXdheSAqLworCQl9CisJ
CXNjLT5zY19tYXhwa3RsZW4gPSBVR0VUVyhtZC0+d01heFNlZ21lbnRTaXplKTsKKwkJRFBSSU5U
Rk4oMiwgImN0cmxfbGVuPSVkLCBtYXhwa3RsZW49JWQsIGNhcD0weCV4XG4iLAorCQkJCXNjLT5z
Y19jdHJsX2xlbiwgc2MtPnNjX21heHBrdGxlbiwKKwkJCQltZC0+Ym1OZXR3b3JrQ2FwYWJpbGl0
aWVzKTsKKwl9CisJaWYgKHNjLT5zY192ZXJfbWFqIDwgMCkgeworCQlkZXZpY2VfcHJpbnRmKGRl
diwgImVycm9yOiBtaXNzaW5nIE1CSU0gZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZmFpbDsKKwl9
CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgInZlcnNpb24gJWQuJWRcbiIsIHNjLT5zY192ZXJfbWFq
LAorCSAgICBzYy0+c2NfdmVyX21pbik7CisKKwlpZiAodXNiZF9sb29rdXBfaWRfYnlfdWFhKHVt
Yl9mY2NhdXRoX2RldnMsIHNpemVvZiAodW1iX2ZjY2F1dGhfZGV2cyksCisJCQkJICB1YWEpKSB7
CisJCXNjLT5zY19mbGFncyB8PSBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQ7CisJCXNjLT5zY19j
aWQgPSAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPnNjX3VkZXYtPmlmYWNlc19tYXg7
IGkrKykgeworCQlpZmFjZSA9IHVzYmRfZ2V0X2lmYWNlKHNjLT5zY191ZGV2LCBpKTsKKwkJaWQg
PSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcihpZmFjZSk7CisJCWlmIChpZCA9PSBOVUxM
KQorCQkJYnJlYWs7CisKKwkJaWYgKGlkLT5iSW50ZXJmYWNlTnVtYmVyID09IGRhdGFfaWZhY2Vu
bykgeworCQkJc2MtPnNjX2RhdGFfaWZhY2UgPSBpZmFjZTsKKwkJCXNjLT5zY19pZmFjZXNfaW5k
ZXhbMF0gPSBpOworCQkJc2MtPnNjX2lmYWNlc19pbmRleFsxXSA9IHVhYS0+aW5mby5iSWZhY2VJ
bmRleDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzYy0+c2NfZGF0YV9pZmFjZSA9PSBOVUxM
KSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZXJyb3I6IG5vIGRhdGEgaW50ZXJmYWNlIGZvdW5k
XG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNvbWJpbmVk
IE5DTS9NQklNIGZ1bmN0aW9uLCBzd2l0Y2ggdG8KKwkgKiBhbHRlcm5hdGUgc2V0dGluZyBvbmUg
dG8gZW5hYmxlIE1CSU0uCisJICovCisJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRv
cih1YWEtPmlmYWNlKTsKKwlpZiAoaWQgIT0gTlVMTCAmJiBpZC0+YkludGVyZmFjZUNsYXNzID09
IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVUlTVUJDTEFT
U19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAi
Y29tYmluZWQgTkNNL01CSU1cbiIpOworCQllcnJvciA9IHVzYmRfcmVxX3NldF9hbHRfaW50ZXJm
YWNlX25vKHNjLT5zY191ZGV2LAorCQkJCU5VTEwsIHVhYS0+aW5mby5iSWZhY2VJbmRleCwgMSk7
CisJCWlmIChlcnJvciAhPSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKSB7CisJCQlkZXZpY2Vf
cHJpbnRmKGRldiwgImVycm9yOiBDb3VsZCBub3Qgc3dpdGNoIHRvIgorCQkJCQkgICAiIGFsdGVy
bmF0ZSBzZXR0aW5nIGZvciBNQklNXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlzYy0+c2Nf
aWZhY2VzX2luZGV4WzFdID0gdWFhLT5pbmZvLmJJZmFjZUluZGV4ICsgMTsKKwl9CisKKwlpZiAo
dXNiX3Byb2NfY3JlYXRlKCZzYy0+c2NfdGFza3F1ZXVlLCAmc2MtPnNjX211dGV4LAorCQkJCWRl
dmljZV9nZXRfbmFtZXVuaXQoc2MtPnNjX2RldiksCisJCQkJVVNCX1BSSV9NRUQpICE9IDApCisJ
CWdvdG8gZmFpbDsKKworCURQUklOVEZOKDIsICJjdHJsLWlmbm8jJWQ6IGRhdGEtaWZubyMlZFxu
Iiwgc2MtPnNjX2N0cmxfaWZhY2VubywKKwkgICAgZGF0YV9pZmFjZW5vKTsKKworCXVzYl9jYWxs
b3V0X2luaXRfbXR4KCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIsICZzYy0+c2NfbXV0ZXgsIDApOwor
CisJdW1iX25jbV9zZXR1cChzYywgY29uZmlnKTsKKwlEUFJJTlRGTigyLCAiJXM6IHJ4L3R4IHNp
emUgJWQvJWRcbiIsIERFVk5BTShzYyksCisJCQlzYy0+c2NfcnhfYnVmc3osIHNjLT5zY190eF9i
dWZzeik7CisKKwlzYy0+c2NfcnhfYnVmID0gbWFsbG9jKHNjLT5zY19yeF9idWZzeiwgTV9ERVZC
VUYsIE1fV0FJVE9LKTsKKwlzYy0+c2NfdHhfYnVmID0gbWFsbG9jKHNjLT5zY190eF9idWZzeiwg
TV9ERVZCVUYsIE1fV0FJVE9LKTsKKworCWZvciAoaSA9IDA7IGkgIT0gMzI7IGkrKykgeworCQll
cnJvciA9IHVzYmRfc2V0X2FsdF9pbnRlcmZhY2VfaW5kZXgoc2MtPnNjX3VkZXYsCisJCQkJc2Mt
PnNjX2lmYWNlc19pbmRleFswXSwgaSk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCWVy
cm9yID0gdXNiZF90cmFuc2Zlcl9zZXR1cChzYy0+c2NfdWRldiwgc2MtPnNjX2lmYWNlc19pbmRl
eCwKKwkJCQlzYy0+c2NfeGZlciwgY29uZmlnLCBVTUJfTl9UUkFOU0ZFUiwKKwkJCQlzYywgJnNj
LT5zY19tdXRleCk7CisJCWlmIChlcnJvciA9PSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKQor
CQkJYnJlYWs7CisJfQorCWlmIChlcnJvciB8fCAoaSA9PSAzMikpIHsKKwkJZGV2aWNlX3ByaW50
ZihzYy0+c2NfZGV2LCAiZXJyb3I6IGZhaWxlZCB0byBzZXR1cCB4ZmVyc1xuIik7CisJCWdvdG8g
ZmFpbDsKKwl9CisKKwlzYy0+c2NfcmVzcF9idWYgPSBtYWxsb2Moc2MtPnNjX2N0cmxfbGVuLCBN
X0RFVkJVRiwgTV9XQUlUT0spOworCXNjLT5zY19jdHJsX21zZyA9IG1hbGxvYyhzYy0+c2NfY3Ry
bF9sZW4sIE1fREVWQlVGLCBNX1dBSVRPSyk7CisKKwlzYy0+c2NfaW5mby5yZWdzdGF0ZSA9IE1C
SU1fUkVHU1RBVEVfVU5LTk9XTjsKKwlzYy0+c2NfaW5mby5waW5fYXR0ZW1wdHNfbGVmdCA9IFVN
Ql9WQUxVRV9VTktOT1dOOworCXNjLT5zY19pbmZvLnJzc2kgPSBVTUJfVkFMVUVfVU5LTk9XTjsK
KwlzYy0+c2NfaW5mby5iZXIgPSBVTUJfVkFMVUVfVU5LTk9XTjsKKworCS8qIGRlZmVyIGF0dGFj
aGluZyB0aGUgaW50ZXJmYWNlICovCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2Fk
ZF90YXNrKHNjLCB1bWJfYXR0YWNoX3Rhc2ssCisJCQkmc2MtPnNjX3Byb2NfYXR0YWNoX3Rhc2tb
MF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX2F0dGFjaF90YXNrWzFdLmhkciwgMCk7CisJbXR4X3Vu
bG9jaygmc2MtPnNjX211dGV4KTsKKworCXJldHVybiAoMCk7CisKK2ZhaWw6CisJdW1iX2RldGFj
aChzYy0+c2NfZGV2KTsKKwlyZXR1cm4gKEVOWElPKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9h
dHRhY2hfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICptc2cpCit7CisJc3RydWN0IHVtYl90YXNr
ICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9
IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZwOworCisJbXR4X3VubG9jaygmc2MtPnNjX211
dGV4KTsKKworCUNVUlZORVRfU0VUX1FVSUVUKHZuZXQwKTsKKworCS8qIGluaXRpYWxpemUgdGhl
IGludGVyZmFjZSAqLworCXNjLT5zY19pZiA9IGlmcCA9IGlmX2FsbG9jKElGVF9NQklNKTsKKwlp
Zl9pbml0bmFtZShpZnAsICJ1bWIiLCBkZXZpY2VfZ2V0X3VuaXQoc2MtPnNjX2RldikpOworCisJ
aWZwLT5pZl9zb2Z0YyA9IHNjOworCWlmcC0+aWZfZmxhZ3MgPSBJRkZfU0lNUExFWCB8IElGRl9N
VUxUSUNBU1QgfCBJRkZfUE9JTlRPUE9JTlQ7CisJaWZwLT5pZl9pb2N0bCA9IHVtYl9pb2N0bDsK
KwlpZnAtPmlmX2lucHV0ID0gdW1iX2lucHV0OworCWlmcC0+aWZfb3V0cHV0ID0gdW1iX291dHB1
dDsKKwlpZnAtPmlmX3N0YXJ0ID0gdW1iX3N0YXJ0OworCWlmcC0+aWZfaW5pdCA9IHVtYl9pbml0
OworCisjaWYgMAorCWlmcC0+aWZfd2F0Y2hkb2cgPSB1bWJfd2F0Y2hkb2c7CisjZW5kaWYKKwlp
ZnAtPmlmX2xpbmtfc3RhdGUgPSBMSU5LX1NUQVRFX0RPV047CisJaWZtZWRpYV9pbml0KCZzYy0+
c2NfaW0sIDAsIHVtYl9tZWRpYWNoYW5nZSwgdW1iX21lZGlhc3RhdHVzKTsKKwlpZm1lZGlhX2Fk
ZCgmc2MtPnNjX2ltLCBJRk1fTk9ORSB8IElGTV9BVVRPLCAwLCBOVUxMKTsKKworCWlmcC0+aWZf
YWRkcmxlbiA9IDA7CisJaWZwLT5pZl9oZHJsZW4gPSBzaXplb2YgKHN0cnVjdCBuY21faGVhZGVy
MTYpICsKKwkgICAgc2l6ZW9mIChzdHJ1Y3QgbmNtX3BvaW50ZXIxNik7CisJLyogWFhYIGhhcmQt
Y29kZWQgYXRtICovCisJaWZwLT5pZl9tdHUgPSBNSU4oMjA0OCwgc2MtPnNjX21heHBrdGxlbik7
CisJSUZRX1NFVF9NQVhMRU4oJmlmcC0+aWZfc25kLCBpZnFtYXhsZW4pOworCWlmcC0+aWZfc25k
LmlmcV9kcnZfbWF4bGVuID0gaWZxbWF4bGVuOworCUlGUV9TRVRfUkVBRFkoJmlmcC0+aWZfc25k
KTsKKworCS8qIGF0dGFjaCB0aGUgaW50ZXJmYWNlICovCisJaWZfYXR0YWNoKGlmcCk7CisJYnBm
YXR0YWNoKGlmcCwgRExUX1JBVywgMCk7CisKKwlzYy0+c2NfYXR0YWNoZWQgPSAxOworCisJQ1VS
Vk5FVF9SRVNUT1JFKCk7CisKKwl1bWJfaW5pdChzYyk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRl
eCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVj
dCB1bWJfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAq
aWZwID0gR0VUX0lGUChzYyk7CisKKwl1c2JfcHJvY19kcmFpbigmc2MtPnNjX3Rhc2txdWV1ZSk7
CisKKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAoaWZwICE9IE5VTEwgJiYgKGlmcC0+
aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkKKwkJdW1iX2Rvd24oc2MsIDEpOworCXVt
Yl9jbG9zZShzYyk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCXVzYmRfdHJhbnNm
ZXJfdW5zZXR1cChzYy0+c2NfeGZlciwgVU1CX05fVFJBTlNGRVIpOworCisJZnJlZShzYy0+c2Nf
dHhfYnVmLCBNX0RFVkJVRik7CisJZnJlZShzYy0+c2NfcnhfYnVmLCBNX0RFVkJVRik7CisKKwl1
c2JfY2FsbG91dF9kcmFpbigmc2MtPnNjX3N0YXRlY2hnX3RpbWVyKTsKKworCXVzYl9wcm9jX2Zy
ZWUoJnNjLT5zY190YXNrcXVldWUpOworCisJbXR4X2Rlc3Ryb3koJnNjLT5zY19tdXRleCk7CisK
KwlmcmVlKHNjLT5zY19jdHJsX21zZywgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3Jlc3BfYnVm
LCBNX0RFVkJVRik7CisKKwlpZiAoaWZwICE9IE5VTEwgJiYgaWZwLT5pZl9zb2Z0YykgeworCQlp
Zm1lZGlhX3JlbW92ZWFsbCgmc2MtPnNjX2ltKTsKKwl9CisJaWYgKHNjLT5zY19hdHRhY2hlZCkg
eworCQlicGZkZXRhY2goaWZwKTsKKwkJaWZfZGV0YWNoKGlmcCk7CisJCWlmX2ZyZWUoaWZwKTsK
KwkJc2MtPnNjX2lmID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9uY21fc2V0dXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCB1c2JfY29uZmlnICog
Y29uZmlnKQoreworCXVzYl9kZXZpY2VfcmVxdWVzdF90IHJlcTsKKwlzdHJ1Y3QgbmNtX250Yl9w
YXJhbWV0ZXJzIG5wOworCXVzYl9lcnJvcl90IGVycm9yOworCisJLyogUXVlcnkgTlRCIHRyYW5m
ZXJzIHNpemVzICovCisJcmVxLmJtUmVxdWVzdFR5cGUgPSBVVF9SRUFEX0NMQVNTX0lOVEVSRkFD
RTsKKwlyZXEuYlJlcXVlc3QgPSBOQ01fR0VUX05UQl9QQVJBTUVURVJTOworCVVTRVRXKHJlcS53
VmFsdWUsIDApOworCVVTRVRXKHJlcS53SW5kZXgsIHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVT
RVRXKHJlcS53TGVuZ3RoLCBzaXplb2YgKG5wKSk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7
CisJZXJyb3IgPSB1c2JkX2RvX3JlcXVlc3Qoc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgsICZy
ZXEsICZucCk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKwlpZiAoZXJyb3IgPT0gVVNC
X0VSUl9OT1JNQUxfQ09NUExFVElPTiAmJgorCSAgICBVR0VUVyhucC53TGVuZ3RoKSA9PSBzaXpl
b2YgKG5wKSkgeworCQljb25maWdbVU1CX0JVTEtfUlhdLmJ1ZnNpemUgPSBVR0VURFcobnAuZHdO
dGJJbk1heFNpemUpOworCQljb25maWdbVU1CX0JVTEtfVFhdLmJ1ZnNpemUgPSBVR0VURFcobnAu
ZHdOdGJPdXRNYXhTaXplKTsKKwl9CisJc2MtPnNjX3J4X2J1ZnN6ID0gY29uZmlnW1VNQl9CVUxL
X1JYXS5idWZzaXplOworCXNjLT5zY190eF9idWZzeiA9IGNvbmZpZ1tVTUJfQlVMS19UWF0uYnVm
c2l6ZTsKK30KKworc3RhdGljIGludAordW1iX2hhbmRsZV9yZXF1ZXN0KGRldmljZV90IGRldiwK
KyAgICBjb25zdCB2b2lkICpwcmVxLCB2b2lkICoqcHB0ciwgdWludDE2X3QgKnBsZW4sCisgICAg
dWludDE2X3Qgb2Zmc2V0LCB1aW50OF90ICpwc3RhdGUpCit7CisJLyogRklYTUUgcmVhbGx5IGlt
cGxlbWVudCAqLworCisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9zdXNw
ZW5kKGRldmljZV90IGRldikKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlN1c3BlbmRpbmdcbiIp
OworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9yZXN1bWUoZGV2aWNlX3QgZGV2
KQoreworCWRldmljZV9wcmludGYoZGV2LCAiUmVzdW1pbmdcbiIpOworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyBpbnQKK3VtYl9kZWFjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg
dW1iX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGlmcCAhPSBOVUxMKSB7CisJCWlmX2RlYWQoaWZwKTsK
Kwl9CisJc2MtPnNjX2R5aW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9jbG9zZV9idWxrcGlwZXMoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0
ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZGX0RSVl9S
VU5OSU5HIHwgSUZGX0RSVl9PQUNUSVZFKTsKKworCXVtYl9yeGZsdXNoKHNjKTsKKwl1bWJfdHhm
bHVzaChzYyk7CisKKwl1c2JkX3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfUlhd
KTsKKwl1c2JkX3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKK30KKwor
c3RhdGljIGludAordW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRk
cl90IGRhdGEpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0
cnVjdCBpbl9pZmFkZHIgKmlhID0gKHN0cnVjdCBpbl9pZmFkZHIgKilkYXRhOworCXN0cnVjdCBp
ZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1
Y3QgdW1iX3BhcmFtZXRlciBtcDsKKworCWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVybiBFSU87
CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1NJRkFERFI6CisJCXN3aXRjaCAoaWEtPmlh
X2lmYS5pZmFfYWRkci0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCWJyZWFrOwor
I2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlicmVhazsKKyNlbmRpZiAvKiBJTkVU
NiAqLworCQlkZWZhdWx0OgorCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQlicmVhazsKKwkJ
fQorCQlicmVhazsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJbXR4X2xvY2soJnNjLT5zY19tdXRl
eCk7CisJCXVtYl9hZGRfdGFzayhzYywgdW1iX3N0YXRlX3Rhc2ssCisJCQkJJnNjLT5zY19wcm9j
X3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwg
MSk7CisJCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dV
TUJJTkZPOgorCQllcnJvciA9IGNvcHlvdXQoJnNjLT5zY19pbmZvLCBpZnItPmlmcl9pZnJ1Lmlm
cnVfZGF0YSwKKwkJICAgIHNpemVvZiAoc2MtPnNjX2luZm8pKTsKKwkJYnJlYWs7CisJY2FzZSBT
SU9DU1VNQlBBUkFNOgorCQllcnJvciA9IHByaXZfY2hlY2soY3VydGhyZWFkLCBQUklWX05FVF9T
RVRJRlBIWVMpOworCQlpZiAoZXJyb3IpCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gY29w
eWluKGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCAmbXAsIHNpemVvZiAobXApKSkgIT0gMCkKKwkJ
CWJyZWFrOworCisJCWlmICgoZXJyb3IgPSB1bWJfc2V0cGluKHNjLCBtcC5vcCwgbXAuaXNfcHVr
LCBtcC5waW4sIG1wLnBpbmxlbiwKKwkJICAgIG1wLm5ld3BpbiwgbXAubmV3cGlubGVuKSkgIT0g
MCkKKwkJCWJyZWFrOworCisJCWlmIChtcC5hcG5sZW4gPCAwIHx8IG1wLmFwbmxlbiA+IHNpemVv
ZiAoc2MtPnNjX2luZm8uYXBuKSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJ
fQorCQlzYy0+c2Nfcm9hbWluZyA9IG1wLnJvYW1pbmcgPyAxIDogMDsKKwkJbWVtc2V0KHNjLT5z
Y19pbmZvLmFwbiwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby5hcG4pKTsKKwkJbWVtY3B5KHNjLT5z
Y19pbmZvLmFwbiwgbXAuYXBuLCBtcC5hcG5sZW4pOworCQlzYy0+c2NfaW5mby5hcG5sZW4gPSBt
cC5hcG5sZW47CisJCW1lbXNldChzYy0+c2NfaW5mby51c2VybmFtZSwgMCwgc2l6ZW9mIChzYy0+
c2NfaW5mby51c2VybmFtZSkpOworCQltZW1jcHkoc2MtPnNjX2luZm8udXNlcm5hbWUsIG1wLnVz
ZXJuYW1lLCBtcC51c2VybmFtZWxlbik7CisJCXNjLT5zY19pbmZvLnVzZXJuYW1lbGVuID0gbXAu
dXNlcm5hbWVsZW47CisJCW1lbXNldChzYy0+c2NfaW5mby5wYXNzd29yZCwgMCwgc2l6ZW9mIChz
Yy0+c2NfaW5mby5wYXNzd29yZCkpOworCQltZW1jcHkoc2MtPnNjX2luZm8ucGFzc3dvcmQsIG1w
LnBhc3N3b3JkLCBtcC5wYXNzd29yZGxlbik7CisJCXNjLT5zY19pbmZvLnBhc3N3b3JkbGVuID0g
bXAucGFzc3dvcmRsZW47CisJCXNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXMgPSBtcC5wcmVm
ZXJyZWRjbGFzc2VzOworCQl1bWJfc2V0ZGF0YWNsYXNzKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBT
SU9DR1VNQlBBUkFNOgorCQltZW1zZXQoJm1wLCAwLCBzaXplb2YgKG1wKSk7CisJCW1lbWNweSht
cC5hcG4sIHNjLT5zY19pbmZvLmFwbiwgc2MtPnNjX2luZm8uYXBubGVuKTsKKwkJbXAuYXBubGVu
ID0gc2MtPnNjX2luZm8uYXBubGVuOworCQltcC5yb2FtaW5nID0gc2MtPnNjX3JvYW1pbmc7CisJ
CW1wLnByZWZlcnJlZGNsYXNzZXMgPSBzYy0+c2NfaW5mby5wcmVmZXJyZWRjbGFzc2VzOworCQll
cnJvciA9IGNvcHlvdXQoJm1wLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChtcCkp
OworCQlicmVhazsKKwljYXNlIFNJT0NTSUZNVFU6CisJCS8qIERvZXMgdGhpcyBpbmNsdWRlIHRo
ZSBOQ00gaGVhZGVycyBhbmQgdGFpbD8gKi8KKwkJaWYgKGlmci0+aWZyX210dSA+IGlmcC0+aWZf
bXR1KSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmcC0+aWZfbXR1
ID0gaWZyLT5pZnJfbXR1OworCQlicmVhazsKKwljYXNlIFNJT0NBSUZBRERSOgorCWNhc2UgU0lP
Q1NJRkRTVEFERFI6CisJY2FzZSBTSU9DQURETVVMVEk6CisJY2FzZSBTSU9DREVMTVVMVEk6CisJ
CWJyZWFrOworCWNhc2UgU0lPQ0dJRk1FRElBOgorCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZw
LCBpZnIsICZzYy0+c2NfaW0sIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0g
RUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lk
Cit1bWJfaW5pdCh2b2lkICphcmcpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBhcmc7CisK
KwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGFydF90
YXNrLAorCQkJJnNjLT5zY19wcm9jX3N0YXJ0X3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9j
X3N0YXJ0X3Rhc2tbMV0uaGRyLCAwKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQor
CitzdGF0aWMgdm9pZAordW1iX2lucHV0KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAq
bSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbW47CisKKwl3aGlsZSAobSkgeworCQltbiA9IG0tPm1fbmV4
dHBrdDsKKwkJbS0+bV9uZXh0cGt0ID0gTlVMTDsKKworCQlCUEZfTVRBUChpZnAsIG0pOworCisJ
CW5ldGlzcl9kaXNwYXRjaChORVRJU1JfSVAsIG0pOworCQltID0gbW47CisJfQorfQorCitzdGF0
aWMgaW50Cit1bWJfb3V0cHV0KHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSwgY29u
c3Qgc3RydWN0IHNvY2thZGRyICpkc3QsCisgICAgc3RydWN0IHJvdXRlICpydHApCit7CisJaW50
IGVycm9yOworCisJRFBSSU5URk4oMTAsICIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXN3
aXRjaCAoZHN0LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJ
CS8qIGZhbGwgdGhyb3VnaCAqLworI2VuZGlmCisJY2FzZSBBRl9JTkVUOgorCQlicmVhazsKKwor
CQkvKiBzaWxlbnRseSBkcm9wIGRoY2xpZW50IHBhY2tldHMgKi8KKwljYXNlIEFGX1VOU1BFQzoK
KwkJbV9mcmVlbShtKTsKKwkJcmV0dXJuICgwKTsKKworCQkvKiBkcm9wIG90aGVyIHBhY2tldCB0
eXBlcyAqLworCWRlZmF1bHQ6CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoRUFGTk9TVVBQT1JU
KTsKKwl9CisKKwkvKgorCSAqIFF1ZXVlIG1lc3NhZ2Ugb24gaW50ZXJmYWNlLCBhbmQgc3RhcnQg
b3V0cHV0IGlmIGludGVyZmFjZQorCSAqIG5vdCB5ZXQgYWN0aXZlLgorCSAqLworCWVycm9yID0g
KGlmcC0+aWZfdHJhbnNtaXQpKGlmcCwgbSk7CisJaWYgKGVycm9yKSB7CisJCWlmX2luY19jb3Vu
dGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQlyZXR1cm4gKEVOT0JVRlMpOworCX0K
KworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhcnQoc3RydWN0IGlmbmV0
ICppZnApCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYg
KHNjLT5zY19keWluZyB8fCAhKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkK
KwkJcmV0dXJuOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdXNiZF90cmFuc2Zlcl9z
dGFydChzYy0+c2NfeGZlcltVTUJfQlVMS19UWF0pOworCW10eF91bmxvY2soJnNjLT5zY19tdXRl
eCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhcnRfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNn
ICptc2cpCit7CisJc3RydWN0IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1z
ZzsKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZw
ID0gR0VUX0lGUChzYyk7CisKKwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdHhf
YXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9
IElGRl9EUlZfUlVOTklORzsKKworCS8qIHN0YXJ0IGludGVycnVwdCB0cmFuc2ZlciAqLworCXVz
YmRfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVU1CX0lOVFJfUlhdKTsKKworCXVtYl9vcGVu
KHNjKTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkCit1bWJfd2F0Y2hkb2coc3RydWN0IGlmbmV0
ICppZnApCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCisJaWYg
KHNjLT5zY19keWluZykKKwkJcmV0dXJuOworCisJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5U
RVJfT0VSUk9SUywgMSk7CisJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAid2F0Y2hkb2cgdGlt
ZW91dFxuIik7CisJdXNiZF90cmFuc2Zlcl9kcmFpbihzYy0+c2NfeGZlcltVTUJfQlVMS19UWF0p
OworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordW1iX3N0YXRlY2hnX3RpbWVv
dXQodm9pZCAqYXJnKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gYXJnOworCXN0cnVjdCBp
Zm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1B
X09XTkVEKTsKKworCWlmIChzYy0+c2NfaW5mby5yZWdzdGF0ZSAhPSBNQklNX1JFR1NUQVRFX1JP
QU1JTkcgfHwgc2MtPnNjX3JvYW1pbmcpCisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVH
KQorCQkJbG9nKExPR19ERUJVRywgIiVzOiBzdGF0ZSBjaGFuZ2UgdGltZW91dFxuIiwKKwkJCQkJ
REVWTkFNKHNjKSk7CisKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNj
LT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tb
MV0uaGRyLCAwKTsKK30KKworc3RhdGljIGludAordW1iX21lZGlhY2hhbmdlKHN0cnVjdCBpZm5l
dCAqIGlmcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9tZWRpYXN0YXR1
cyhzdHJ1Y3QgaWZuZXQgKiBpZnAsIHN0cnVjdCBpZm1lZGlhcmVxICogaW1yKQoreworCXN3aXRj
aCAoaWZwLT5pZl9saW5rX3N0YXRlKSB7CisJY2FzZSBMSU5LX1NUQVRFX1VQOgorCQlpbXItPmlm
bV9zdGF0dXMgPSBJRk1fQVZBTElEIHwgSUZNX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBMSU5L
X1NUQVRFX0RPV046CisJCWltci0+aWZtX3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCWltci0+aWZtX3N0YXR1cyA9IDA7CisJCWJyZWFrOworCX0KK30KKworc3Rh
dGljIHZvaWQKK3VtYl9hZGRfdGFzayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNiX3Byb2NfY2Fs
bGJhY2tfdCBjYWxsYmFjaywKKwkJc3RydWN0IHVzYl9wcm9jX21zZyAqdDAsIHN0cnVjdCB1c2Jf
cHJvY19tc2cgKnQxLCBpbnQgc3luYykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKiB0YXNrOworCisJ
bXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAodXNiX3Byb2NfaXNf
Z29uZSgmc2MtPnNjX3Rhc2txdWV1ZSkpIHsKKwkJcmV0dXJuOworCX0KKworCXRhc2sgPSB1c2Jf
cHJvY19tc2lnbmFsKCZzYy0+c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCisJdGFzay0+aGRyLnBt
X2NhbGxiYWNrID0gY2FsbGJhY2s7CisJdGFzay0+c2MgPSBzYzsKKworCWlmIChzeW5jKSB7CisJ
CXVzYl9wcm9jX213YWl0KCZzYy0+c2NfdGFza3F1ZXVlLCB0MCwgdDEpOworCX0KK30KKworc3Rh
dGljIHZvaWQKK3VtYl9uZXdzdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgZW51bSB1bWJfc3Rh
dGUgbmV3c3RhdGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAo
c2MpOworCisJaWYgKG5ld3N0YXRlID09IHNjLT5zY19zdGF0ZSkKKwkJcmV0dXJuOworCWlmICgo
KGZsYWdzICYgVU1CX05TX0RPTlRfRFJPUCkgJiYgbmV3c3RhdGUgPCBzYy0+c2Nfc3RhdGUpIHx8
CisJICAgICgoZmxhZ3MgJiBVTUJfTlNfRE9OVF9SQUlTRSkgJiYgbmV3c3RhdGUgPiBzYy0+c2Nf
c3RhdGUpKQorCQlyZXR1cm47CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxv
ZyhMT0dfREVCVUcsICIlczogc3RhdGUgZ29pbmcgJXMgZnJvbSAnJXMnIHRvICclcydcbiIsCisJ
CSAgICBERVZOQU0oc2MpLCBuZXdzdGF0ZSA+IHNjLT5zY19zdGF0ZSA/ICJ1cCIgOiAiZG93biIs
CisJCSAgICB1bWJfaXN0YXRlKHNjLT5zY19zdGF0ZSksIHVtYl9pc3RhdGUobmV3c3RhdGUpKTsK
KwlzYy0+c2Nfc3RhdGUgPSBuZXdzdGF0ZTsKKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90
YXNrLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9j
X3N0YXRlX3Rhc2tbMV0uaGRyLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9zdGF0ZV90YXNr
KHN0cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sgKnRhc2sgPSAo
c3RydWN0IHVtYl90YXNrICopbXNnOworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdGFzay0+c2M7
CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3QgaWZyZXEgaWZyOwor
CWludAkgc3RhdGU7CisKKwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc2Mt
PnNjX2luZm8ucmVnc3RhdGUgPT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HICYmICFzYy0+c2Nfcm9h
bWluZykgeworCQkvKgorCQkgKiBRdWVyeSB0aGUgcmVnaXN0cmF0aW9uIHN0YXRlIHVudGlsIHdl
J3JlIHdpdGggdGhlIGhvbWUKKwkJICogbmV0d29yayBhZ2Fpbi4KKwkJICovCisJCXVtYl9jbWQo
c2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFLCBNQklNX0NNRE9QX1FSWSwgTlVMTCwgMCk7CisJ
CXJldHVybjsKKwl9CisKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9VUCkKKwkJdW1iX3VwKHNj
KTsKKwllbHNlCisJCXVtYl9kb3duKHNjLCAwKTsKKworCXN0YXRlID0gKHNjLT5zY19zdGF0ZSA9
PSBVTUJfU19VUCkgPyBMSU5LX1NUQVRFX1VQIDogTElOS19TVEFURV9ET1dOOworCWlmIChpZnAt
PmlmX2xpbmtfc3RhdGUgIT0gc3RhdGUpIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVC
VUcpCisJCQlsb2coTE9HX0RFQlVHLCAiJXM6IGxpbmsgc3RhdGUgY2hhbmdlZCBmcm9tICVzIHRv
ICVzXG4iLAorCQkJICAgIERFVk5BTShzYyksCisJCQkgICAgKGlmcC0+aWZfbGlua19zdGF0ZSA9
PSBMSU5LX1NUQVRFX1VQKQorCQkJICAgID8gInVwIiA6ICJkb3duIiwKKwkJCSAgICAoc3RhdGUg
PT0gTElOS19TVEFURV9VUCkgPyAidXAiIDogImRvd24iKTsKKwkJaWZwLT5pZl9saW5rX3N0YXRl
ID0gc3RhdGU7CisJCWlmIChzdGF0ZSAhPSBMSU5LX1NUQVRFX1VQKSB7CisJCQkvKgorCQkJICog
UHVyZ2UgYW55IGV4aXN0aW5nIGFkZHJlc3NlcworCQkJICovCisJCQltZW1zZXQoc2MtPnNjX2lu
Zm8uaXB2NGRucywgMCwKKwkJCSAgICBzaXplb2YgKHNjLT5zY19pbmZvLmlwdjRkbnMpKTsKKwkJ
CW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJCQlDVVJWTkVUX1NFVF9RVUlFVCh2bmV0MCk7
CisJCQlpZiAoaW5fY29udHJvbChOVUxMLCBTSU9DR0lGQUREUiwgKGNhZGRyX3QpJmlmciwgaWZw
LAorCQkJCSAgICAgICBjdXJ0aHJlYWQpID09IDAgJiYKKwkJCSAgICBzYXRvc2luKCZpZnIuaWZy
X2FkZHIpLT5zaW5fYWRkci5zX2FkZHIgIT0KKwkJCSAgICBJTkFERFJfQU5ZKSB7CisJCQkJaW5f
Y29udHJvbChOVUxMLCBTSU9DRElGQUREUiwgKGNhZGRyX3QpJmlmciwKKwkJCQkJICAgaWZwLCBj
dXJ0aHJlYWQpOworCQkJfQorCQkJQ1VSVk5FVF9SRVNUT1JFKCk7CisJCQltdHhfbG9jaygmc2Mt
PnNjX211dGV4KTsKKwkJfQorCQlpZl9saW5rX3N0YXRlX2NoYW5nZShpZnAsIHN0YXRlKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3Ry
dWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCXN3aXRjaCAoc2MtPnNjX3N0YXRlKSB7
CisJY2FzZSBVTUJfU19ET1dOOgorCQlEUFJJTlRGKCJpbml0OiBvcGVuaW5nIC4uLlxuIik7CisJ
CXVtYl9vcGVuKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19PUEVOOgorCQlpZiAoc2MtPnNj
X2ZsYWdzICYgVU1CRkxHX0ZDQ19BVVRIX1JFUVVJUkVEKSB7CisJCQlpZiAoc2MtPnNjX2NpZCA9
PSAtMSkgeworCQkJCURQUklOVEYoImluaXQ6IGFsbG9jYXRpbmcgQ0lEIC4uLlxuIik7CisJCQkJ
dW1iX2FsbG9jYXRlX2NpZChzYyk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQl1bWJfbmV3
c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05TX0RPTlRfRFJPUCk7CisJCX0gZWxzZSB7CisJCQlE
UFJJTlRGKCJpbml0OiB0dXJuaW5nIHJhZGlvIG9uIC4uLlxuIik7CisJCQl1bWJfcmFkaW8oc2Ms
IDEpOworCQkJYnJlYWs7CisJCX0KKwkJLypGQUxMVEhST1VHSCovCisJY2FzZSBVTUJfU19DSUQ6
CisJCURQUklOVEYoImluaXQ6IHNlbmRpbmcgRkNDIGF1dGggLi4uXG4iKTsKKwkJdW1iX3NlbmRf
ZmNjX2F1dGgoc2MpOworCQlicmVhazsKKwljYXNlIFVNQl9TX1JBRElPOgorCQlEUFJJTlRGKCJp
bml0OiBjaGVja2luZyBTSU0gc3RhdGUgLi4uXG4iKTsKKwkJdW1iX2NtZChzYywgTUJJTV9DSURf
U1VCU0NSSUJFUl9SRUFEWV9TVEFUVVMsIE1CSU1fQ01ET1BfUVJZLAorCQkgICAgTlVMTCwgMCk7
CisJCWJyZWFrOworCWNhc2UgVU1CX1NfU0lNUkVBRFk6CisJCURQUklOVEYoImluaXQ6IGF0dGFj
aGluZyAuLi5cbiIpOworCQl1bWJfcGFja2V0X3NlcnZpY2Uoc2MsIDEpOworCQlicmVhazsKKwlj
YXNlIFVNQl9TX0FUVEFDSEVEOgorCQlzYy0+c2NfdHhfc2VxID0gMDsKKwkJRFBSSU5URigiaW5p
dDogY29ubmVjdGluZyAuLi5cbiIpOworCQl1bWJfY29ubmVjdChzYyk7CisJCWJyZWFrOworCWNh
c2UgVU1CX1NfQ09OTkVDVEVEOgorCQlEUFJJTlRGKCJpbml0OiBnZXR0aW5nIElQIGNvbmZpZyAu
Li5cbiIpOworCQl1bWJfcXJ5X2lwY29uZmlnKHNjKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19V
UDoKKwkJRFBSSU5URigiaW5pdDogcmVhY2hlZCBzdGF0ZSBVUFxuIik7CisJCWlmICghKGlmcC0+
aWZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpKSB7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJ
RkZfRFJWX1JVTk5JTkc7CisJCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZF
OworCQkJdW1iX3J4KHNjKTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKHNjLT5zY19zdGF0ZSA8
IFVNQl9TX1VQKQorCQl1c2JfY2FsbG91dF9yZXNldCgmc2MtPnNjX3N0YXRlY2hnX3RpbWVyLAor
CQkgICAgVU1CX1NUQVRFX0NIQU5HRV9USU1FT1VUICogaHosIHVtYl9zdGF0ZWNoZ190aW1lb3V0
LCBzYyk7CisJZWxzZSB7CisJCXVzYl9jYWxsb3V0X3N0b3AoJnNjLT5zY19zdGF0ZWNoZ190aW1l
cik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kb3duKHN0cnVjdCB1bWJf
c29mdGMgKnNjLCBpbnQgZm9yY2UpCit7CisJdW1iX2Nsb3NlX2J1bGtwaXBlcyhzYyk7CisKKwlz
d2l0Y2ggKHNjLT5zY19zdGF0ZSkgeworCWNhc2UgVU1CX1NfVVA6CisJY2FzZSBVTUJfU19DT05O
RUNURUQ6CisJCURQUklOVEYoInN0b3A6IGRpc2Nvbm5lY3RpbmcgLi4uXG4iKTsKKwkJdW1iX2Rp
c2Nvbm5lY3Qoc2MpOworCQlpZiAoIWZvcmNlKQorCQkJYnJlYWs7CisJCS8qRkFMTFRIUk9VR0gq
LworCWNhc2UgVU1CX1NfQVRUQUNIRUQ6CisJCURQUklOVEYoInN0b3A6IGRldGFjaGluZyAuLi5c
biIpOworCQl1bWJfcGFja2V0X3NlcnZpY2Uoc2MsIDApOworCQlpZiAoIWZvcmNlKQorCQkJYnJl
YWs7CisJCS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1NfU0lNUkVBRFk6CisJY2FzZSBVTUJf
U19SQURJTzoKKwkJRFBSSU5URigic3RvcDogdHVybmluZyByYWRpbyBvZmYgLi4uXG4iKTsKKwkJ
dW1iX3JhZGlvKHNjLCAwKTsKKwkJaWYgKCFmb3JjZSkKKwkJCWJyZWFrOworCQkvKkZBTExUSFJP
VUdIKi8KKwljYXNlIFVNQl9TX0NJRDoKKwljYXNlIFVNQl9TX09QRU46CisJY2FzZSBVTUJfU19E
T1dOOgorCQkvKiBEbyBub3QgY2xvc2UgdGhlIGRldmljZSAqLworCQlEUFJJTlRGKCJzdG9wOiBy
ZWFjaGVkIHN0YXRlIERPV05cbiIpOworCQlicmVhazsKKwl9CisJaWYgKGZvcmNlKQorCQlzYy0+
c2Nfc3RhdGUgPSBVTUJfU19PUEVOOworCisJaWYgKHNjLT5zY19zdGF0ZSA+IFVNQl9TX09QRU4p
CisJCXVzYl9jYWxsb3V0X3Jlc2V0KCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIsCisJCSAgICBVTUJf
U1RBVEVfQ0hBTkdFX1RJTUVPVVQgKiBoeiwgdW1iX3N0YXRlY2hnX3RpbWVvdXQsIHNjKTsKKwll
bHNlCisJCXVzYl9jYWxsb3V0X3N0b3AoJnNjLT5zY19zdGF0ZWNoZ190aW1lcik7Cit9CisKK3N0
YXRpYyB2b2lkCit1bWJfZ2V0X3Jlc3BvbnNlX3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqbXNn
KQoreworCXN0cnVjdCB1bWJfdGFzayAqdGFzayA9IChzdHJ1Y3QgdW1iX3Rhc2sgKiltc2c7CisJ
c3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB0YXNrLT5zYzsKKwlpbnQJIGxlbjsKKworCURQUklOVEYo
IiVzKClcbiIsIF9fZnVuY19fKTsKKwkvKgorCSAqIEZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIHNl
bmQgb24gUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlvbiBmb3IKKwkgKiBlYWNoIGVuY2Fw
c3VsYXRlZCByZXNwb25zZSB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaG9zdC4KKwkg
KiBCdXQgb2YgY291cnNlLCB3ZSBjYW4gcmVjZWl2ZSBtdWx0aXBsZSBub3RpZmljYXRpb25zIGJl
Zm9yZSB0aGUKKwkgKiByZXNwb25zZSB0YXNrIGlzIHJ1bi4KKwkgKi8KKwl3aGlsZSAoc2MtPnNj
X25yZXNwID4gMCkgeworCQktLXNjLT5zY19ucmVzcDsKKwkJbGVuID0gc2MtPnNjX2N0cmxfbGVu
OworCQlpZiAodW1iX2dldF9lbmNhcF9yZXNwb25zZShzYywgc2MtPnNjX3Jlc3BfYnVmLCAmbGVu
KSkKKwkJCXVtYl9kZWNvZGVfcmVzcG9uc2Uoc2MsIHNjLT5zY19yZXNwX2J1ZiwgbGVuKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVjb2RlX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMg
KnNjLCB2b2lkICpyZXNwb25zZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9tc2doZHIgKmhk
ciA9IHJlc3BvbnNlOworCXN0cnVjdCBtYmltX2ZyYWdtZW50ZWRfbXNnX2hkciAqZnJhZ2hkcjsK
Kwl1aW50MzJfdCB0eXBlOworCisJRFBSSU5URk4oMywgImdvdCByZXNwb25zZTogbGVuICVkXG4i
LCBsZW4pOworCUREVU1QTig0LCByZXNwb25zZSwgbGVuKTsKKworCWlmIChsZW4gPCBzaXplb2Yg
KCpoZHIpIHx8IGxlMzJ0b2goaGRyLT5sZW4pICE9IGxlbikgeworCQkvKgorCQkgKiBXZSBzaG91
bGQgcHJvYmFibHkgY2FuY2VsIGEgdHJhbnNhY3Rpb24sIGJ1dCBzaW5jZSB0aGUKKwkJICogbWVz
c2FnZSBpcyB0b28gc2hvcnQsIHdlIGNhbm5vdCBkZWNvZGUgdGhlIHRyYW5zYWN0aW9uCisJCSAq
IGlkICh0aWQpIGFuZCBoZW5jZSBkb24ndCBrbm93LCB3aG9tIHRvIGNhbmNlbC4gTXVzdCB3YWl0
CisJCSAqIGZvciB0aGUgdGltZW91dC4KKwkJICovCisJCURQUklOVEYoInJlY2VpdmVkIHNob3J0
IHJlc3BvbnNlIChsZW4gJWQpXG4iLAorCQkgICAgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8q
CisJICogWFhYIEZJWE1FOiBpZiBtZXNzYWdlIGlzIGZyYWdtZW50ZWQsIHN0b3JlIGl0IHVudGls
IGxhc3QgZnJhZworCSAqCWlzIHJlY2VpdmVkIGFuZCB0aGVuIHJlLWFzc2VtYmxlIGFsbCBmcmFn
bWVudHMuCisJICovCisJdHlwZSA9IGxlMzJ0b2goaGRyLT50eXBlKTsKKwlzd2l0Y2ggKHR5cGUp
IHsKKwljYXNlIE1CSU1fSU5ESUNBVEVfU1RBVFVTX01TRzoKKwljYXNlIE1CSU1fQ09NTUFORF9E
T05FOgorCQlmcmFnaGRyID0gcmVzcG9uc2U7CisJCWlmIChsZTMydG9oKGZyYWdoZHItPmZyYWcu
bmZyYWcpICE9IDEpIHsKKwkJCURQUklOVEYoImRpc2NhcmRpbmcgZnJhZ21lbnRlZCBtZXNzYWdl
c1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ
fQorCisJRFBSSU5URigiPC0gcmN2ICVzICh0aWQgJXUpXG4iLCB1bWJfcmVxdWVzdDJzdHIodHlw
ZSksCisJICAgIGxlMzJ0b2goaGRyLT50aWQpKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1C
SU1fRlVOQ1RJT05fRVJST1JfTVNHOgorCWNhc2UgTUJJTV9IT1NUX0VSUk9SX01TRzoKKwl7CisJ
CXN0cnVjdCBtYmltX2YyaF9ob3N0ZXJyICplOworCQlpbnQJIGVycjsKKworCQlpZiAobGVuID49
IHNpemVvZiAoKmUpKSB7CisJCQllID0gcmVzcG9uc2U7CisJCQllcnIgPSBsZTMydG9oKGUtPmVy
cik7CisKKwkJCURQUklOVEYoIiVzIG1lc3NhZ2UsIGVycm9yICVzICh0aWQgJXUpXG4iLAorCQkJ
ICAgIHVtYl9yZXF1ZXN0MnN0cih0eXBlKSwKKwkJCSAgICB1bWJfZXJyb3Iyc3RyKGVyciksIGxl
MzJ0b2goaGRyLT50aWQpKTsKKwkJCWlmIChlcnIgPT0gTUJJTV9FUlJPUl9OT1RfT1BFTkVEKQor
CQkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfRE9XTiwgMCk7CisJCX0KKwkJYnJlYWs7CisJfQor
CWNhc2UgTUJJTV9JTkRJQ0FURV9TVEFUVVNfTVNHOgorCQl1bWJfaGFuZGxlX2luZGljYXRlX3N0
YXR1c19tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fT1BFTl9E
T05FOgorCQl1bWJfaGFuZGxlX29wZW5kb25lX21zZyhzYywgcmVzcG9uc2UsIGxlbik7CisJCWJy
ZWFrOworCWNhc2UgTUJJTV9DTE9TRV9ET05FOgorCQl1bWJfaGFuZGxlX2Nsb3NlZG9uZV9tc2co
c2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ09NTUFORF9ET05FOgor
CQl1bWJfY29tbWFuZF9kb25lKHNjLCByZXNwb25zZSwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJRFBSSU5URigiZGlzY2FyZCBtZXNzYWdlICVzXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qy
c3RyKHR5cGUpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2hhbmRsZV9p
bmRpY2F0ZV9zdGF0dXNfbXNnKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQg
bGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9pbmRpY2F0ZV9zdGF0dXMgKm0gPSBkYXRhOworCXVp
bnQzMl90IGluZm9sZW47CisJdWludDMyX3QgY2lkOworCisJaWYgKGxlbiA8IHNpemVvZiAoKm0p
KSB7CisJCURQUklOVEYoImRpc2NhcmQgc2hvcnQgJXMgbWVzc2FnZVxuIiwKKwkJICAgIHVtYl9y
ZXF1ZXN0MnN0cihsZTMydG9oKG0tPmhkci50eXBlKSkpOworCQlyZXR1cm47CisJfQorCWlmICht
ZW1jbXAobS0+ZGV2aWQsIHVtYl91dWlkX2Jhc2ljX2Nvbm5lY3QsIHNpemVvZiAobS0+ZGV2aWQp
KSkgeworCQlEUFJJTlRGKCJkaXNjYXJkICVzIG1lc3NhZ2UgZm9yIG90aGVyIFVVSUQgJyVzJ1xu
IiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKG0tPmhkci50eXBlKSksCisJCSAgICB1
bWJfdXVpZDJzdHIobS0+ZGV2aWQpKTsKKwkJcmV0dXJuOworCX0KKwlpbmZvbGVuID0gbGUzMnRv
aChtLT5pbmZvbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9mICgqbSkgKyBpbmZvbGVuKSB7CisJCURQ
UklOVEYoImRpc2NhcmQgdHJ1bmNhdGVkICVzIG1lc3NhZ2UgKHdhbnQgJWQsIGdvdCAlZClcbiIs
CisJCSAgICB1bWJfcmVxdWVzdDJzdHIobGUzMnRvaChtLT5oZHIudHlwZSkpLAorCQkgICAgKGlu
dClzaXplb2YgKCptKSArIGluZm9sZW4sIGxlbik7CisJCXJldHVybjsKKwl9CisKKwljaWQgPSBs
ZTMydG9oKG0tPmNpZCk7CisJRFBSSU5URigiaW5kaWNhdGUgJXMgc3RhdHVzXG4iLCB1bWJfY2lk
MnN0cihjaWQpKTsKKwl1bWJfZGVjb2RlX2NpZChzYywgY2lkLCBtLT5pbmZvLCBpbmZvbGVuKTsK
K30KKworc3RhdGljIHZvaWQKK3VtYl9oYW5kbGVfb3BlbmRvbmVfbXNnKHN0cnVjdCB1bWJfc29m
dGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9vcGVuY2xv
c2Vkb25lICpyZXNwID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOwor
CXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1cyA9IGxlMzJ0b2gocmVzcC0+c3RhdHVzKTsKKwlp
ZiAoc3RhdHVzID09IE1CSU1fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaWYgKHNjLT5zY19tYXhzZXNz
aW9ucyA9PSAwKSB7CisJCQl1bWJfY21kKHNjLCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9D
TURPUF9RUlksIE5VTEwsCisJCQkgICAgMCk7CisJCQl1bWJfY21kKHNjLCBNQklNX0NJRF9QSU4s
IE1CSU1fQ01ET1BfUVJZLCBOVUxMLCAwKTsKKwkJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1JFR0lT
VEVSX1NUQVRFLCBNQklNX0NNRE9QX1FSWSwKKwkJCSAgICBOVUxMLCAwKTsKKwkJfQorCQl1bWJf
bmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIFVNQl9OU19ET05UX0RST1ApOworCX0gZWxzZSBpZiAo
aWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19FUlIsICIlczogb3BlbiBlcnJv
cjogJXNcbiIsIERFVk5BTShzYyksCisJCSAgICB1bWJfc3RhdHVzMnN0cihzdGF0dXMpKTsKKwly
ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfaGFuZGxlX2Nsb3NlZG9uZV9tc2coc3RydWN0
IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fZjJo
X29wZW5jbG9zZWRvbmUgKnJlc3AgPSBkYXRhOworCXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1
cyA9IGxlMzJ0b2gocmVzcC0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IE1CSU1fU1RBVFVTX1NV
Q0NFU1MpCisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfRE9XTiwgMCk7CisJZWxzZQorCQlEUFJJ
TlRGKCJjbG9zZSBlcnJvcjogJXNcbiIsCisJCSAgICB1bWJfc3RhdHVzMnN0cihzdGF0dXMpKTsK
KwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordW1iX2dldGluZm9idWYoY2hhciAq
aW4sIGludCBpbmxlbiwgdWludDMyX3Qgb2ZmcywgdWludDMyX3Qgc3osCisgICAgdm9pZCAqb3V0
LCBzaXplX3Qgb3V0bGVuKQoreworCW9mZnMgPSBsZTMydG9oKG9mZnMpOworCXN6ID0gbGUzMnRv
aChzeik7CisJaWYgKGlubGVuID49IG9mZnMgKyBzeikgeworCQltZW1zZXQob3V0LCAwLCBvdXRs
ZW4pOworCQltZW1jcHkob3V0LCBpbiArIG9mZnMsIE1JTihzeiwgb3V0bGVuKSk7CisJfQorfQor
CitzdGF0aWMgaW5saW5lIGludAordW1iX3BhZGRpbmcodm9pZCAqZGF0YSwgaW50IGxlbiwgc2l6
ZV90IHN6KQoreworCWNoYXIgKnAgPSBkYXRhOworCWludCBucCA9IDA7CisKKwl3aGlsZSAobGVu
IDwgc3ogJiYgKGxlbiAlIDQpICE9IDApIHsKKwkJKnArKyA9ICdcMCc7CisJCWxlbisrOworCQlu
cCsrOworCX0KKwlyZXR1cm4gbnA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bWJfYWRkc3Ry
KHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnN6LCBpbnQgKm9mZnMsIHZvaWQgKnN0ciwgaW50IHNsZW4s
CisgICAgdWludDMyX3QgKm9mZnNtZW1iZXIsIHVpbnQzMl90ICpzaXplbWVtYmVyKQoreworCWlm
ICgqb2ZmcyArIHNsZW4gPiBidWZzeikKKwkJcmV0dXJuIDA7CisKKwkqc2l6ZW1lbWJlciA9IGh0
b2xlMzIoKHVpbnQzMl90KXNsZW4pOworCWlmIChzbGVuICYmIHN0cikgeworCQkqb2Zmc21lbWJl
ciA9IGh0b2xlMzIoKHVpbnQzMl90KSpvZmZzKTsKKwkJbWVtY3B5KChjaGFyICopYnVmICsgKm9m
ZnMsIHN0ciwgc2xlbik7CisJCSpvZmZzICs9IHNsZW47CisJCSpvZmZzICs9IHVtYl9wYWRkaW5n
KGJ1ZiwgKm9mZnMsIGJ1ZnN6KTsKKwl9IGVsc2UKKwkJKm9mZnNtZW1iZXIgPSBodG9sZTMyKDAp
OworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW1iX2luX2xlbjJtYXNrKHN0cnVjdCBp
bl9hZGRyICptYXNrLCBpbnQgbGVuKQoreworCWludCBpOworCXVfY2hhciAqcDsKKworCXAgPSAo
dV9jaGFyICopbWFzazsKKwltZW1zZXQobWFzaywgMCwgc2l6ZW9mICgqbWFzaykpOworCWZvciAo
aSA9IDA7IGkgPCBsZW4gLyA4OyBpKyspCisJCXBbaV0gPSAweGZmOworCWlmIChsZW4gJSA4KQor
CQlwW2ldID0gKDB4ZmYwMCA+PiAobGVuICUgOCkpICYgMHhmZjsKK30KKworc3RhdGljIGludAor
dW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0
YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlX2luZm8g
KnJzID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKGxl
biA8IHNpemVvZiAoKnJzKSkKKwkJcmV0dXJuIDA7CisJc2MtPnNjX2luZm8ubndlcnJvciA9IGxl
MzJ0b2gocnMtPm53ZXJyb3IpOworCXNjLT5zY19pbmZvLnJlZ3N0YXRlID0gbGUzMnRvaChycy0+
cmVnc3RhdGUpOworCXNjLT5zY19pbmZvLnJlZ21vZGUgPSBsZTMydG9oKHJzLT5yZWdtb2RlKTsK
KwlzYy0+c2NfaW5mby5jZWxsY2xhc3MgPSBsZTMydG9oKHJzLT5jdXJjZWxsY2xhc3MpOworCisJ
LyogWFhYIHNob3VsZCB3ZSByZW1lbWJlciB0aGUgcHJvdmlkZXJfaWQ/ICovCisJdW1iX2dldGlu
Zm9idWYoZGF0YSwgbGVuLCBycy0+cHJvdm5hbWVfb2ZmcywgcnMtPnByb3ZuYW1lX3NpemUsCisJ
ICAgIHNjLT5zY19pbmZvLnByb3ZpZGVyLCBzaXplb2YgKHNjLT5zY19pbmZvLnByb3ZpZGVyKSk7
CisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBycy0+cm9hbWluZ3R4dF9vZmZzLCBycy0+cm9h
bWluZ3R4dF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5yb2FtaW5ndHh0LCBzaXplb2YgKHNjLT5z
Y19pbmZvLnJvYW1pbmd0eHQpKTsKKworCURQUklOVEZOKDIsICIlcywgYXZhaWxjbGFzcyAweCV4
LCBjbGFzcyAweCV4LCByZWdtb2RlICVkXG4iLAorCSAgICB1bWJfcmVnc3RhdGUoc2MtPnNjX2lu
Zm8ucmVnc3RhdGUpLAorCSAgICBsZTMydG9oKHJzLT5hdmFpbGNsYXNzZXMpLCBzYy0+c2NfaW5m
by5jZWxsY2xhc3MsCisJICAgIHNjLT5zY19pbmZvLnJlZ21vZGUpOworCisJaWYgKHNjLT5zY19p
bmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RBVEVfUk9BTUlORyAmJgorCSAgICAhc2MtPnNjX3Jv
YW1pbmcgJiYKKwkgICAgc2MtPnNjX2luZm8uYWN0aXZhdGlvbiA9PSBNQklNX0FDVElWQVRJT05f
U1RBVEVfQUNUSVZBVEVEKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJ
bG9nKExPR19JTkZPLAorCQkJICAgICIlczogZGlzY29ubmVjdGluZyBmcm9tIHJvYW1pbmcgbmV0
d29ya1xuIiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJdW1iX2Rpc2Nvbm5lY3Qoc2MpOworCX0K
KwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9kZXZpY2VzX2NhcHMoc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1f
Y2lkX2RldmljZV9jYXBzICpkYyA9IGRhdGE7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqZGMpKQor
CQlyZXR1cm4gMDsKKwlzYy0+c2NfbWF4c2Vzc2lvbnMgPSBsZTMydG9oKGRjLT5tYXhfc2Vzc2lv
bnMpOworCXNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMgPSBsZTMydG9oKGRjLT5kYXRhY2xh
c3MpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgZGMtPmRldmlkX29mZnMsIGRjLT5kZXZp
ZF9zaXplLAorCSAgICBzYy0+c2NfaW5mby5kZXZpZCwgc2l6ZW9mIChzYy0+c2NfaW5mby5kZXZp
ZCkpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgZGMtPmZ3aW5mb19vZmZzLCBkYy0+Zndp
bmZvX3NpemUsCisJICAgIHNjLT5zY19pbmZvLmZ3aW5mbywgc2l6ZW9mIChzYy0+c2NfaW5mby5m
d2luZm8pKTsKKwl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBsZW4sIGRjLT5od2luZm9fb2ZmcywgZGMt
Pmh3aW5mb19zaXplLAorCSAgICBzYy0+c2NfaW5mby5od2luZm8sIHNpemVvZiAoc2MtPnNjX2lu
Zm8uaHdpbmZvKSk7CisJRFBSSU5URk4oMiwgIm1heCBzZXNzaW9ucyAlZCwgc3VwcG9ydGVkIGNs
YXNzZXMgMHgleFxuIiwKKwkgICAgc2MtPnNjX21heHNlc3Npb25zLCBzYy0+c2NfaW5mby5zdXBw
b3J0ZWRjbGFzc2VzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9z
dWJzY3JpYmVyX3N0YXR1cyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxl
bikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfc3Vic2NyaWJlcl9yZWFkeV9pbmZvICpzaSA9IGRhdGE7
CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlpbnQJbnBuOworCisJaWYgKGxl
biA8IHNpemVvZiAoKnNpKSkKKwkJcmV0dXJuIDA7CisJc2MtPnNjX2luZm8uc2ltX3N0YXRlID0g
bGUzMnRvaChzaS0+cmVhZHkpOworCisJdW1iX2dldGluZm9idWYoZGF0YSwgbGVuLCBzaS0+c2lk
X29mZnMsIHNpLT5zaWRfc2l6ZSwKKwkgICAgc2MtPnNjX2luZm8uc2lkLCBzaXplb2YgKHNjLT5z
Y19pbmZvLnNpZCkpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgc2ktPmljY19vZmZzLCBz
aS0+aWNjX3NpemUsCisJICAgIHNjLT5zY19pbmZvLmljY2lkLCBzaXplb2YgKHNjLT5zY19pbmZv
LmljY2lkKSk7CisKKwlucG4gPSBsZTMydG9oKHNpLT5ub19wbik7CisJaWYgKG5wbiA+IDApCisJ
CXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgc2ktPnBuWzBdLm9mZnMsIHNpLT5wblswXS5zaXpl
LAorCQkgICAgc2MtPnNjX2luZm8ucG4sIHNpemVvZiAoc2MtPnNjX2luZm8ucG4pKTsKKwllbHNl
CisJCW1lbXNldChzYy0+c2NfaW5mby5wbiwgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby5wbikpOwor
CisJaWYgKHNjLT5zY19pbmZvLnNpbV9zdGF0ZSA9PSBNQklNX1NJTVNUQVRFX0xPQ0tFRCkKKwkJ
c2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9SRVFVSVJFRDsKKwlpZiAoaWZwLT5pZl9m
bGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19JTkZPLCAiJXM6IFNJTSAlc1xuIiwgREVWTkFN
KHNjKSwKKwkJICAgIHVtYl9zaW1zdGF0ZShzYy0+c2NfaW5mby5zaW1fc3RhdGUpKTsKKwlpZiAo
c2MtPnNjX2luZm8uc2ltX3N0YXRlID09IE1CSU1fU0lNU1RBVEVfSU5JVElBTElaRUQpCisJCXVt
Yl9uZXdzdGF0ZShzYywgVU1CX1NfU0lNUkVBRFksIFVNQl9OU19ET05UX0RST1ApOworCXJldHVy
biAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3JhZGlvX3N0YXRlKHN0cnVjdCB1bWJf
c29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9yYWRp
b19zdGF0ZV9pbmZvICpycyA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNj
KTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpycykpCisJCXJldHVybiAwOworCisJc2MtPnNjX2lu
Zm8uaHdfcmFkaW9fb24gPQorCSAgICAobGUzMnRvaChycy0+aHdfc3RhdGUpID09IE1CSU1fUkFE
SU9fU1RBVEVfT04pID8gMSA6IDA7CisJc2MtPnNjX2luZm8uc3dfcmFkaW9fb24gPQorCSAgICAo
bGUzMnRvaChycy0+c3dfc3RhdGUpID09IE1CSU1fUkFESU9fU1RBVEVfT04pID8gMSA6IDA7CisJ
aWYgKCFzYy0+c2NfaW5mby5od19yYWRpb19vbikgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19k
ZXYsICJyYWRpbyBpcyBkaXNhYmxlZCBieSBoYXJkd2FyZSBzd2l0Y2hcbiIpOworCQkvKgorCQkg
KiBYWFggZG8gd2UgbmVlZCBhIHRpbWUgdG8gcG9sbCB0aGUgc3RhdGUgb2YgdGhlIHJma2lsbCBz
d2l0Y2gKKwkJICoJb3Igd2lsbCB0aGUgZGV2aWNlIHNlbmQgYW4gdW5zb2xpY2l0ZWQgbm90aWZp
Y2F0aW9uCisJCSAqCWluIGNhc2UgdGhlIHN0YXRlIGNoYW5nZXM/CisJCSAqLworCQl1bWJfbmV3
c3RhdGUoc2MsIFVNQl9TX09QRU4sIDApOworCX0gZWxzZSBpZiAoIXNjLT5zY19pbmZvLnN3X3Jh
ZGlvX29uKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19J
TkZPLCAiJXM6IHJhZGlvIGlzIG9mZlxuIiwgREVWTkFNKHNjKSk7CisJCXVtYl9uZXdzdGF0ZShz
YywgVU1CX1NfT1BFTiwgMCk7CisJfSBlbHNlCisJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfUkFE
SU8sIFVNQl9OU19ET05UX0RST1ApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJf
ZGVjb2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sK
KwlzdHJ1Y3QgbWJpbV9jaWRfcGluX2luZm8gKnBpID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IEdFVF9JRlAoc2MpOworCXVpbnQzMl90CWF0dGVtcHRzX2xlZnQ7CisKKwlpZiAobGVuIDwg
c2l6ZW9mICgqcGkpKQorCQlyZXR1cm4gMDsKKworCWF0dGVtcHRzX2xlZnQgPSBsZTMydG9oKHBp
LT5yZW1haW5pbmdfYXR0ZW1wdHMpOworCWlmIChhdHRlbXB0c19sZWZ0ICE9IDB4ZmZmZmZmZmYp
CisJCXNjLT5zY19pbmZvLnBpbl9hdHRlbXB0c19sZWZ0ID0gYXR0ZW1wdHNfbGVmdDsKKworCXN3
aXRjaCAobGUzMnRvaChwaS0+c3RhdGUpKSB7CisJY2FzZSBNQklNX1BJTl9TVEFURV9VTkxPQ0tF
RDoKKwkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9VTkxPQ0tFRDsKKwkJYnJlYWs7
CisJY2FzZSBNQklNX1BJTl9TVEFURV9MT0NLRUQ6CisJCXN3aXRjaCAobGUzMnRvaChwaS0+dHlw
ZSkpIHsKKwkJY2FzZSBNQklNX1BJTl9UWVBFX1BJTjE6CisJCQlzYy0+c2NfaW5mby5waW5fc3Rh
dGUgPSBVTUJfUElOX1JFUVVJUkVEOworCQkJYnJlYWs7CisJCWNhc2UgTUJJTV9QSU5fVFlQRV9Q
VUsxOgorCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BVS19SRVFVSVJFRDsKKwkJCWJy
ZWFrOworCQljYXNlIE1CSU1fUElOX1RZUEVfUElOMjoKKwkJY2FzZSBNQklNX1BJTl9UWVBFX1BV
SzI6CisJCQkvKiBBc3N1bWUgdGhhdCBQSU4xIHdhcyBhY2NlcHRlZCAqLworCQkJc2MtPnNjX2lu
Zm8ucGluX3N0YXRlID0gVU1CX1BJTl9VTkxPQ0tFRDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFr
OworCX0KKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9nKExPR19JTkZPLCAi
JXM6ICVzIHN0YXRlICVzICglZCBhdHRlbXB0cyBsZWZ0KVxuIiwKKwkJICAgIERFVk5BTShzYyks
IHVtYl9waW5fdHlwZShsZTMydG9oKHBpLT50eXBlKSksCisJCSAgICAobGUzMnRvaChwaS0+c3Rh
dGUpID09IE1CSU1fUElOX1NUQVRFX1VOTE9DS0VEKSA/CisJCQkidW5sb2NrZWQiIDogImxvY2tl
ZCIsCisJCSAgICBsZTMydG9oKHBpLT5yZW1haW5pbmdfYXR0ZW1wdHMpKTsKKworCS8qCisJICog
SW4gY2FzZSB0aGUgUElOIHdhcyBzZXQgYWZ0ZXIgSUZGX1VQLCByZXRyaWdnZXIgdGhlIHN0YXRl
IG1hY2hpbmUKKwkgKi8KKwl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNrLAorCQkJJnNj
LT5zY19wcm9jX3N0YXRlX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX3N0YXRlX3Rhc2tb
MV0uaGRyLCAwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9wYWNr
ZXRfc2VydmljZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sK
KwlzdHJ1Y3QgbWJpbV9jaWRfcGFja2V0X3NlcnZpY2VfaW5mbyAqcHNpID0gZGF0YTsKKwlpbnQJ
IHN0YXRlLCBoaWdoZXN0Y2xhc3M7CisJdWludDY0X3QgdXBfc3BlZWQsIGRvd25fc3BlZWQ7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpw
c2kpKQorCQlyZXR1cm4gMDsKKworCXNjLT5zY19pbmZvLm53ZXJyb3IgPSBsZTMydG9oKHBzaS0+
bndlcnJvcik7CisJc3RhdGUgPSBsZTMydG9oKHBzaS0+c3RhdGUpOworCWhpZ2hlc3RjbGFzcyA9
IGxlMzJ0b2gocHNpLT5oaWdoZXN0X2RhdGFjbGFzcyk7CisJdXBfc3BlZWQgPSBsZTY0dG9oKHBz
aS0+dXBsaW5rX3NwZWVkKTsKKwlkb3duX3NwZWVkID0gbGU2NHRvaChwc2ktPmRvd25saW5rX3Nw
ZWVkKTsKKwlpZiAoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUgICE9IHN0YXRlIHx8CisJICAgIHNj
LT5zY19pbmZvLnVwbGlua19zcGVlZCAhPSB1cF9zcGVlZCB8fAorCSAgICBzYy0+c2NfaW5mby5k
b3dubGlua19zcGVlZCAhPSBkb3duX3NwZWVkKSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZG
X0RFQlVHKSB7CisJCQlsb2coTE9HX0lORk8sICIlczogcGFja2V0IHNlcnZpY2UgIiwgREVWTkFN
KHNjKSk7CisJCQlpZiAoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUgICE9IHN0YXRlKQorCQkJCWxv
ZyhMT0dfSU5GTywgImNoYW5nZWQgZnJvbSAlcyB0byAiLAorCQkJCSAgICB1bWJfcGFja2V0X3N0
YXRlKHNjLT5zY19pbmZvLnBhY2tldHN0YXRlKSk7CisJCQlsb2coTE9HX0lORk8sICIlcywgY2xh
c3MgJXMsIHNwZWVkOiAlIiBQUkl1NjQgIiB1cCAvICUiIFBSSXU2NCAiIGRvd25cbiIsCisJCQkg
ICAgdW1iX3BhY2tldF9zdGF0ZShzdGF0ZSksCisJCQkgICAgdW1iX2RhdGFjbGFzcyhoaWdoZXN0
Y2xhc3MpLCB1cF9zcGVlZCwgZG93bl9zcGVlZCk7CisJCX0KKwl9CisJc2MtPnNjX2luZm8ucGFj
a2V0c3RhdGUgPSBzdGF0ZTsKKwlzYy0+c2NfaW5mby5oaWdoZXN0Y2xhc3MgPSBoaWdoZXN0Y2xh
c3M7CisJc2MtPnNjX2luZm8udXBsaW5rX3NwZWVkID0gdXBfc3BlZWQ7CisJc2MtPnNjX2luZm8u
ZG93bmxpbmtfc3BlZWQgPSBkb3duX3NwZWVkOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ21vZGUg
PT0gTUJJTV9SRUdNT0RFX0FVVE9NQVRJQykgeworCQkvKgorCQkgKiBGb3IgZGV2aWNlcyB1c2lu
ZyBhdXRvbWF0aWMgcmVnaXN0cmF0aW9uIG1vZGUsIGp1c3QgcHJvY2VlZCwKKwkJICogb25jZSBy
ZWdpc3RyYXRpb24gaGFzIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChpZnAtPmlmX2ZsYWdzICYg
SUZGX1VQKSB7CisJCQlzd2l0Y2ggKHNjLT5zY19pbmZvLnJlZ3N0YXRlKSB7CisJCQljYXNlIE1C
SU1fUkVHU1RBVEVfSE9NRToKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9ST0FNSU5HOgorCQkJY2Fz
ZSBNQklNX1JFR1NUQVRFX1BBUlRORVI6CisJCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19BVFRB
Q0hFRCwKKwkJCQkgICAgVU1CX05TX0RPTlRfRFJPUCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0
OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1Nf
U0lNUkVBRFksIFVNQl9OU19ET05UX1JBSVNFKTsKKwl9IGVsc2Ugc3dpdGNoIChzYy0+c2NfaW5m
by5wYWNrZXRzdGF0ZSkgeworCWNhc2UgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSEVEOgor
CQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVELCBVTUJfTlNfRE9OVF9EUk9QKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQ6CisJCXVtYl9uZXdz
dGF0ZShzYywgVU1CX1NfU0lNUkVBRFksIFVNQl9OU19ET05UX1JBSVNFKTsKKwkJYnJlYWs7CisJ
fQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX3NpZ25hbF9zdGF0ZShz
dHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJp
bV9jaWRfc2lnbmFsX3N0YXRlICpzcyA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRf
SUZQKHNjKTsKKwlpbnQJIHJzc2k7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqc3MpKQorCQlyZXR1
cm4gMDsKKworCWlmIChsZTMydG9oKHNzLT5yc3NpKSA9PSA5OSkKKwkJcnNzaSA9IFVNQl9WQUxV
RV9VTktOT1dOOworCWVsc2UgeworCQlyc3NpID0gLTExMyArIDIgKiBsZTMydG9oKHNzLT5yc3Np
KTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKSAmJiBzYy0+c2NfaW5mby5yc3Np
ICE9IHJzc2kgJiYKKwkJICAgIHNjLT5zY19zdGF0ZSA+PSBVTUJfU19DT05ORUNURUQpCisJCQls
b2coTE9HX0lORk8sICIlczogcnNzaSAlZCBkQm1cbiIsIERFVk5BTShzYyksIHJzc2kpOworCX0K
KwlzYy0+c2NfaW5mby5yc3NpID0gcnNzaTsKKwlzYy0+c2NfaW5mby5iZXIgPSBsZTMydG9oKHNz
LT5lcnJfcmF0ZSk7CisJaWYgKHNjLT5zY19pbmZvLmJlciA9PSAtOTkpCisJCXNjLT5zY19pbmZv
LmJlciA9IFVNQl9WQUxVRV9VTktOT1dOOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1
bWJfZGVjb2RlX2Nvbm5lY3RfaW5mbyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwg
aW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdF9pbmZvICpjaSA9IGRhdGE7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlpbnQJIGFjdDsKKworCWlmIChsZW4g
PCBzaXplb2YgKCpjaSkpCisJCXJldHVybiAwOworCisJaWYgKGxlMzJ0b2goY2ktPnNlc3Npb25p
ZCkgIT0gdW1iX3Nlc3Npb25faWQpIHsKKwkJRFBSSU5URigiZGlzY2FyZCBjb25uZWN0aW9uIGlu
Zm8gZm9yIHNlc3Npb24gJXVcbiIsCisJCSAgICBsZTMydG9oKGNpLT5zZXNzaW9uaWQpKTsKKwkJ
cmV0dXJuIDE7CisJfQorCWlmIChtZW1jbXAoY2ktPmNvbnRleHQsIHVtYl91dWlkX2NvbnRleHRf
aW50ZXJuZXQsCisJICAgIHNpemVvZiAoY2ktPmNvbnRleHQpKSkgeworCQlEUFJJTlRGKCJkaXNj
YXJkIGNvbm5lY3Rpb24gaW5mbyBmb3Igb3RoZXIgY29udGV4dFxuIik7CisJCXJldHVybiAxOwor
CX0KKwlhY3QgPSBsZTMydG9oKGNpLT5hY3RpdmF0aW9uKTsKKwlpZiAoc2MtPnNjX2luZm8uYWN0
aXZhdGlvbiAhPSBhY3QpIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQls
b2coTE9HX0lORk8sICIlczogY29ubmVjdGlvbiAlc1xuIiwgREVWTkFNKHNjKSwKKwkJCSAgICB1
bWJfYWN0aXZhdGlvbihhY3QpKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKSAm
JgorCQkgICAgbGUzMnRvaChjaS0+aXB0eXBlKSAhPSBNQklNX0NPTlRFWFRfSVBUWVBFX0RFRkFV
TFQgJiYKKwkJICAgIGxlMzJ0b2goY2ktPmlwdHlwZSkgIT0gTUJJTV9DT05URVhUX0lQVFlQRV9J
UFY0KQorCQkJbG9nKExPR19ERUJVRywgIiVzOiBnb3QgaXB0eXBlICVkIGNvbm5lY3Rpb25cbiIs
CisJCQkgICAgREVWTkFNKHNjKSwgbGUzMnRvaChjaS0+aXB0eXBlKSk7CisKKwkJc2MtPnNjX2lu
Zm8uYWN0aXZhdGlvbiA9IGFjdDsKKwkJc2MtPnNjX2luZm8ubndlcnJvciA9IGxlMzJ0b2goY2kt
Pm53ZXJyb3IpOworCisJCWlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uID09IE1CSU1fQUNUSVZB
VElPTl9TVEFURV9BQ1RJVkFURUQpCisJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NPTk5FQ1RF
RCwgVU1CX05TX0RPTlRfRFJPUCk7CisJCWVsc2UgaWYgKHNjLT5zY19pbmZvLmFjdGl2YXRpb24g
PT0KKwkJICAgIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRFRCkKKwkJCXVtYl9uZXdz
dGF0ZShzYywgVU1CX1NfQVRUQUNIRUQsIDApOworCQkvKiBlbHNlOiBvdGhlciBzdGF0ZXMgYXJl
IHB1cmVseSB0cmFuc2l0aW9uYWwgKi8KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQK
K3VtYl9hZGRfaW5ldF9jb25maWcoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBpbl9hZGRy
IGlwLCB1X2ludCBwcmVmaXhsZW4sCisgICAgc3RydWN0IGluX2FkZHIgZ3cpCit7CisJc3RydWN0
IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3QgaW5fYWxpYXNyZXEgaWZyYTsKKwlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlpbnQJIHJ2OworCisJbWVtc2V0KCZpZnJhLCAwLCBz
aXplb2YgKGlmcmEpKTsKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmcmEuaWZyYV9h
ZGRyOworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLT5zaW5fbGVuID0gc2l6ZW9m
ICgqc2luKTsKKwlzaW4tPnNpbl9hZGRyID0gaXA7CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopJmlmcmEuaWZyYV9kc3RhZGRyOworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJ
c2luLT5zaW5fbGVuID0gc2l6ZW9mICgqc2luKTsKKwlzaW4tPnNpbl9hZGRyID0gZ3c7CisKKwlz
aW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmcmEuaWZyYV9tYXNrOworCXNpbi0+c2luX2Zh
bWlseSA9IEFGX0lORVQ7CisJc2luLT5zaW5fbGVuID0gc2l6ZW9mICgqc2luKTsKKwl1bWJfaW5f
bGVuMm1hc2soJnNpbi0+c2luX2FkZHIsIHByZWZpeGxlbik7CisKKwltdHhfdW5sb2NrKCZzYy0+
c2NfbXV0ZXgpOworCUNVUlZORVRfU0VUX1FVSUVUKHZuZXQwKTsKKwlydiA9IGluX2NvbnRyb2wo
TlVMTCwgU0lPQ0FJRkFERFIsIChjYWRkcl90KSZpZnJhLCBpZnAsIGN1cnRocmVhZCk7CisJQ1VS
Vk5FVF9SRVNUT1JFKCk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJaWYgKHJ2ICE9IDAp
IHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAidW5hYmxlIHRvIHNldCBJUHY0IGFkZHJl
c3MsIGVycm9yICVkXG4iLAorCQkgICAgcnYpOworCQlyZXR1cm4gcnY7CisJfQorCisJaWYgKGlm
cC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfSU5GTywgIiVzOiBJUHY0IGFkZHIg
JXMsIG1hc2sgJXMsICIKKwkJICAgICJnYXRld2F5ICVzXG4iLCBERVZOQU0oc2MpLAorCQkgICAg
dW1iX250b3Aoc2ludG9zYSgmaWZyYS5pZnJhX2FkZHIpKSwKKwkJICAgIHVtYl9udG9wKHNpbnRv
c2EoJmlmcmEuaWZyYV9tYXNrKSksCisJCSAgICB1bWJfbnRvcChzaW50b3NhKCZpZnJhLmlmcmFf
ZHN0YWRkcikpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVjb2RlX2lw
X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4p
Cit7CisJc3RydWN0IG1iaW1fY2lkX2lwX2NvbmZpZ3VyYXRpb25faW5mbyAqaWMgPSBkYXRhOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMyX3QgYXZhaWxfdjQ7CisJ
dWludDMyX3QgdmFsOworCWludAkgbiwgaTsKKwlpbnQJIG9mZjsKKwlzdHJ1Y3QgbWJpbV9jaWRf
aXB2NF9lbGVtZW50IGlwdjRlbGVtOworCXN0cnVjdCBpbl9hZGRyIGFkZHIsIGd3OworCWludAkg
c3RhdGUgPSAtMTsKKwlpbnQJIHJ2OworCisJaWYgKGxlbiA8IHNpemVvZiAoKmljKSkKKwkJcmV0
dXJuIDA7CisJaWYgKGxlMzJ0b2goaWMtPnNlc3Npb25pZCkgIT0gdW1iX3Nlc3Npb25faWQpIHsK
KwkJRFBSSU5URigiaWdub3JlIElQIGNvbmZpZ3VyYXRpb24gZm9yIHNlc3Npb24gaWQgJWRcbiIs
CisJCSAgICBsZTMydG9oKGljLT5zZXNzaW9uaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoK
KwkgKiBJUHY0IGNvbmZpZ3VyYXRpb24KKwkgKi8KKwlhdmFpbF92NCA9IGxlMzJ0b2goaWMtPmlw
djRfYXZhaWxhYmxlKTsKKwlpZiAoKGF2YWlsX3Y0ICYgKE1CSU1fSVBDT05GX0hBU19BRERSSU5G
TyB8IE1CSU1fSVBDT05GX0hBU19HV0lORk8pKSA9PQorCSAgICAoTUJJTV9JUENPTkZfSEFTX0FE
RFJJTkZPIHwgTUJJTV9JUENPTkZfSEFTX0dXSU5GTykpIHsKKwkJbiA9IGxlMzJ0b2goaWMtPmlw
djRfbmFkZHIpOworCQlvZmYgPSBsZTMydG9oKGljLT5pcHY0X2FkZHJvZmZzKTsKKworCQlpZiAo
biA9PSAwIHx8IG9mZiArIHNpemVvZiAoaXB2NGVsZW0pID4gbGVuKQorCQkJZ290byB0cnl2NjsK
KwkJaWYgKG4gIT0gMSAmJiBpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19J
TkZPLCAiJXM6IG1vcmUgdGhhbiBvbmUgSVB2NCBhZGRyOiAlZFxuIiwKKwkJCSAgICBERVZOQU0o
c2MpLCBuKTsKKworCQkvKiBPbmx5IHBpY2sgdGhlIGZpcnN0IG9uZSAqLworCQltZW1jcHkoJmlw
djRlbGVtLCAoY2hhciAqKWRhdGEgKyBvZmYsIHNpemVvZiAoaXB2NGVsZW0pKTsKKwkJaXB2NGVs
ZW0ucHJlZml4bGVuID0gbGUzMnRvaChpcHY0ZWxlbS5wcmVmaXhsZW4pOworCQlhZGRyLnNfYWRk
ciA9IGlwdjRlbGVtLmFkZHI7CisKKwkJb2ZmID0gbGUzMnRvaChpYy0+aXB2NF9nd29mZnMpOwor
CQlpZiAob2ZmICsgc2l6ZW9mIChndykgPiBsZW4pCisJCQlnb3RvIGRvbmU7CisJCW1lbWNweSgm
Z3csIChjaGFyICopZGF0YSArIG9mZiwgc2l6ZW9mIChndykpOworCisJCXJ2ID0gdW1iX2FkZF9p
bmV0X2NvbmZpZyhzYywgYWRkciwgaXB2NGVsZW0ucHJlZml4bGVuLCBndyk7CisJCWlmIChydiA9
PSAwKQorCQkJc3RhdGUgPSBVTUJfU19VUDsKKwl9CisKKwltZW1zZXQoc2MtPnNjX2luZm8uaXB2
NGRucywgMCwgc2l6ZW9mIChzYy0+c2NfaW5mby5pcHY0ZG5zKSk7CisJaWYgKGF2YWlsX3Y0ICYg
TUJJTV9JUENPTkZfSEFTX0ROU0lORk8pIHsKKwkJbiA9IGxlMzJ0b2goaWMtPmlwdjRfbmRuc3Ny
dik7CisJCW9mZiA9IGxlMzJ0b2goaWMtPmlwdjRfZG5zc3J2b2Zmcyk7CisJCWkgPSAwOworCQl3
aGlsZSAobi0tID4gMCkgeworCQkJaWYgKG9mZiArIHNpemVvZiAoYWRkcikgPiBsZW4pCisJCQkJ
YnJlYWs7CisJCQltZW1jcHkoJmFkZHIsIChjaGFyICopZGF0YSArIG9mZiwgc2l6ZW9mKGFkZHIp
KTsKKwkJCWlmIChpIDwgVU1CX01BWF9ETlNTUlYpCisJCQkJc2MtPnNjX2luZm8uaXB2NGRuc1tp
KytdID0gYWRkcjsKKwkJCW9mZiArPSBzaXplb2YoYWRkcik7CisJCX0KKwl9CisKKwlpZiAoKGF2
YWlsX3Y0ICYgTUJJTV9JUENPTkZfSEFTX01UVUlORk8pKSB7CisJCXZhbCA9IGxlMzJ0b2goaWMt
PmlwdjRfbXR1KTsKKwkJaWYgKGlmcC0+aWZfbXR1ICE9IHZhbCAmJiB2YWwgPD0gc2MtPnNjX21h
eHBrdGxlbikgeworCQkJaWZwLT5pZl9tdHUgPSB2YWw7CisJCQlpZiAoaWZwLT5pZl9tdHUgPiB2
YWwpCisJCQkJaWZwLT5pZl9tdHUgPSB2YWw7CisJCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9E
RUJVRykKKwkJCQlsb2coTE9HX0lORk8sICIlczogTVRVICVkXG4iLCBERVZOQU0oc2MpLCB2YWwp
OworCQl9CisJfQorCisJYXZhaWxfdjQgPSBsZTMydG9oKGljLT5pcHY2X2F2YWlsYWJsZSk7CisJ
aWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKSAmJiBhdmFpbF92NCAmIE1CSU1fSVBDT05G
X0hBU19BRERSSU5GTykgeworCQkvKiBYWFggRklYTUU6IElQdjYgY29uZmlndXJhdGlvbiBtaXNz
aW5nICovCisJCWxvZyhMT0dfSU5GTywgIiVzOiBpZ25vcmluZyBJUHY2IGNvbmZpZ3VyYXRpb25c
biIsIERFVk5BTShzYykpOworCX0KKwlpZiAoc3RhdGUgIT0gLTEpCisJCXVtYl9uZXdzdGF0ZShz
Yywgc3RhdGUsIDApOworCit0cnl2NjoKK2RvbmU6CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfcngoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJbXR4X2Fzc2VydCgmc2MtPnNj
X211dGV4LCBNQV9PV05FRCk7CisKKwl1c2JkX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVyW1VN
Ql9CVUxLX1JYXSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfcnhlb2Yoc3RydWN0IHVzYl94ZmVy
ICp4ZmVyLCB1c2JfZXJyb3JfdCBzdGF0dXMpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB1
c2JkX3hmZXJfc29mdGMoeGZlcik7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsK
KwlpbnQgYWN0bGVuOworCWludCBhZnJhbWVzOworCWludCBpOworCisJRFBSSU5URigiJXMoJXUp
OiBzdGF0ZT0ldVxuIiwgX19mdW5jX18sIHN0YXR1cywgVVNCX0dFVF9TVEFURSh4ZmVyKSk7CisK
KwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCXVzYmRfeGZlcl9zdGF0
dXMoeGZlciwgJmFjdGxlbiwgTlVMTCwgJmFmcmFtZXMsIE5VTEwpOworCisJc3dpdGNoIChVU0Jf
R0VUX1NUQVRFKHhmZXIpKSB7CisJY2FzZSBVU0JfU1RfVFJBTlNGRVJSRUQ6CisJCURQUklOVEYo
InJlY2VpdmVkICV1IGJ5dGVzIGluICV1IGZyYW1lc1xuIiwgYWN0bGVuLCBhZnJhbWVzKTsKKwor
CQlpZiAoYWN0bGVuID09IDApIHsKKwkJCWlmIChzYy0+c2NfcnhfbmVyciA+PSA0KQorCQkJCS8q
IHRocm90dGxlIHRyYW5zZmVycyAqLworCQkJCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwoeGZlciwg
NTAwKTsKKwkJCWVsc2UKKwkJCQlzYy0+c2NfcnhfbmVycisrOworCQl9CisJCWVsc2UgeworCQkJ
LyogZGlzYWJsZSB0aHJvdHRsaW5nICovCisJCQl1c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIs
IDApOworCQkJc2MtPnNjX3J4X25lcnIgPSAwOworCQl9CisKKwkJZm9yKGkgPSAwOyBpIDwgYWZy
YW1lczsgaSsrKSB7CisJCQl1bWJfZGVjYXAoc2MsIHhmZXIsIGkpOworCQl9CisKKwkJLyogZmFs
bCB0aHJvdWdoICovCisJY2FzZSBVU0JfU1RfU0VUVVA6CisJCXVzYmRfeGZlcl9zZXRfZnJhbWVf
ZGF0YSh4ZmVyLCAwLCBzYy0+c2NfcnhfYnVmLAorCQkJCXNjLT5zY19yeF9idWZzeik7CisJCXVz
YmRfeGZlcl9zZXRfZnJhbWVzKHhmZXIsIDEpOworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVy
KTsKKworCQl1bWJfcnhmbHVzaChzYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYo
InJ4IGVycm9yOiAlc1xuIiwgdXNiZF9lcnJzdHIoc3RhdHVzKSk7CisKKwkJLyogZGlzYWJsZSB0
aHJvdHRsaW5nICovCisJCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwoeGZlciwgMCk7CisKKwkJaWYg
KHN0YXR1cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxs
IGZpcnN0ICovCisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJdXNiZF94ZmVyX3Nl
dF9mcmFtZXMoeGZlciwgMCk7CisJCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKwkJCWlm
X2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX0lFUlJPUlMsIDEpOworCQl9CisJCWVsc2UgaWYg
KCsrc2MtPnNjX3J4X25lcnIgPiAxMDApIHsKKwkJCWxvZyhMT0dfRVJSLCAiJXM6IHRvbyBtYW55
IHJ4IGVycm9ycywgZGlzYWJsaW5nXG4iLAorCQkJICAgIERFVk5BTShzYykpOworCQkJdW1iX2Rl
YWN0aXZhdGUoc2MtPnNjX2Rldik7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9p
ZAordW1iX3J4Zmx1c2goc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0ICpp
ZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKworCW10eF9hc3NlcnQoJnNjLT5z
Y19tdXRleCwgTUFfT1dORUQpOworCisJZm9yICg7OykgeworCQlfSUZfREVRVUVVRSgmc2MtPnNj
X3J4X3F1ZXVlLCBtKTsKKwkJaWYgKG0gPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAq
IFRoZSBVU0IgeGZlciBoYXMgYmVlbiByZXN1Ym1pdHRlZCBzbyBpdHMgc2FmZSB0byB1bmxvY2sg
bm93LgorCQkgKi8KKwkJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKwkJQ1VSVk5FVF9TRVRf
UVVJRVQodm5ldDApOworCQlpZiAoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcp
CisJCQlpZnAtPmlmX2lucHV0KGlmcCwgbSk7CisJCWVsc2UKKwkJCW1fZnJlZW0obSk7CisJCUNV
UlZORVRfUkVTVE9SRSgpOworCQltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwl9Cit9CisKK3N0
YXRpYyBpbnQKK3VtYl9lbmNhcChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0s
IHN0cnVjdCB1c2JfeGZlciAqeGZlcikKK3sKKwlzdHJ1Y3QgbmNtX2hlYWRlcjE2ICpoZHI7CisJ
c3RydWN0IG5jbV9wb2ludGVyMTYgKnB0cjsKKwlpbnQJIGxlbjsKKworCUtBU1NFUlQoc2MtPnNj
X3R4X20gPT0gTlVMTCwKKwkJCSgiQXNzZXJ0aW9uIGZhaWxlZCBpbiB1bWJfZW5jYXAoKSIpKTsK
KworCS8qIEFsbCBzaXplIGNvbnN0cmFpbnRzIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdGhlIGNh
bGxlciEgKi8KKwloZHIgPSAoc3RydWN0IG5jbV9oZWFkZXIxNiAqKXNjLT5zY190eF9idWY7CisJ
cHRyID0gKHN0cnVjdCBuY21fcG9pbnRlcjE2ICopKGhkciArIDEpOworCisJVVNFVERXKGhkci0+
ZHdTaWduYXR1cmUsIE5DTV9IRFIxNl9TSUcpOworCVVTRVRXKGhkci0+d0hlYWRlckxlbmd0aCwg
c2l6ZW9mICgqaGRyKSk7CisJVVNFVFcoaGRyLT53U2VxdWVuY2UsIHNjLT5zY190eF9zZXEpOwor
CXNjLT5zY190eF9zZXErKzsKKwlVU0VUVyhoZHItPndOZHBJbmRleCwgc2l6ZW9mICgqaGRyKSk7
CisKKwlsZW4gPSBtLT5tX3BrdGhkci5sZW47CisJVVNFVERXKHB0ci0+ZHdTaWduYXR1cmUsIE1C
SU1fTkNNX05USDE2X1NJRyh1bWJfc2Vzc2lvbl9pZCkpOworCVVTRVRXKHB0ci0+d0xlbmd0aCwg
c2l6ZW9mICgqcHRyKSk7CisJVVNFVFcocHRyLT53TmV4dE5kcEluZGV4LCAwKTsKKwlVU0VUVyhw
dHItPmRncmFtWzBdLndEYXRhZ3JhbUluZGV4LCBNQklNX0hEUjE2X0xFTik7CisJVVNFVFcocHRy
LT5kZ3JhbVswXS53RGF0YWdyYW1MZW4sIGxlbik7CisJVVNFVFcocHRyLT5kZ3JhbVsxXS53RGF0
YWdyYW1JbmRleCwgMCk7CisJVVNFVFcocHRyLT5kZ3JhbVsxXS53RGF0YWdyYW1MZW4sIDApOwor
CisJS0FTU0VSVChsZW4gKyBNQklNX0hEUjE2X0xFTiA8PSBzYy0+c2NfdHhfYnVmc3osCisJCQko
IkFzc2VydGlvbiBmYWlsZWQgaW4gdW1iX2VuY2FwKCkiKSk7CisJbV9jb3B5ZGF0YShtLCAwLCBs
ZW4sIChjaGFyICopKHB0ciArIDEpKTsKKwlzYy0+c2NfdHhfbSA9IG07CisJbGVuICs9IE1CSU1f
SERSMTZfTEVOOworCVVTRVRXKGhkci0+d0Jsb2NrTGVuZ3RoLCBsZW4pOworCisJdXNiZF94ZmVy
X3NldF9mcmFtZV9kYXRhKHhmZXIsIDAsIHNjLT5zY190eF9idWYsIGxlbik7CisJdXNiZF94ZmVy
X3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsKKwl1c2JkX3hmZXJfc2V0X2ZyYW1lcyh4ZmVyLCAxKTsK
KworCURQUklOVEZOKDMsICIlczogZW5jYXAgJWQgYnl0ZXNcbiIsIERFVk5BTShzYyksIGxlbik7
CisJRERVTVBOKDUsIHNjLT5zY190eF9idWYsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyB2b2lkCit1bWJfdHhlb2Yoc3RydWN0IHVzYl94ZmVyICp4ZmVyLCB1c2JfZXJyb3JfdCBzdGF0
dXMpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSB1c2JkX3hmZXJfc29mdGMoeGZlcik7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKworCURQ
UklOVEYoIiVzKCV1KSBzdGF0ZT0ldVxuIiwgX19mdW5jX18sIHN0YXR1cywgVVNCX0dFVF9TVEFU
RSh4ZmVyKSk7CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCXN3
aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1RSQU5TRkVSUkVEOgor
CQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCQlpZl9pbmNfY291bnRl
cihpZnAsIElGQ09VTlRFUl9PUEFDS0VUUywgMSk7CisKKwkJdW1iX3R4Zmx1c2goc2MpOworCisJ
CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVVNCX1NUX1NFVFVQOgordHJfc2V0dXA6CisJCWlm
ICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApCisJCQlicmVhazsK
KworCQlJRlFfRFJWX0RFUVVFVUUoJmlmcC0+aWZfc25kLCBtKTsKKwkJaWYgKG0gPT0gTlVMTCkK
KwkJCWJyZWFrOworCisJCWlmICh1bWJfZW5jYXAoc2MsIG0sIHhmZXIpKSB7CisJCQlpZl9pbmNf
Y291bnRlcihpZnAsIElGQ09VTlRFUl9PRVJST1JTLCAxKTsKKwkJCXVtYl90eGZsdXNoKHNjKTsK
KwkJCWJyZWFrOworCQl9CisKKwkJQlBGX01UQVAoaWZwLCBtKTsKKworCQlpZnAtPmlmX2Rydl9m
bGFncyB8PSBJRkZfRFJWX09BQ1RJVkU7CisJCXVzYmRfdHJhbnNmZXJfc3VibWl0KHhmZXIpOwor
CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdW1iX3R4Zmx1c2goc2MpOworCisJCS8qIGNvdW50
IG91dHB1dCBlcnJvcnMgKi8KKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT0VSUk9S
UywgMSk7CisJCURQUklOVEYoInR4IGVycm9yOiAlc1xuIiwKKwkJCQl1c2JkX2VycnN0cihzdGF0
dXMpKTsKKworCQlpZiAoc3RhdHVzICE9IFVTQl9FUlJfQ0FOQ0VMTEVEKSB7CisJCQkvKiB0cnkg
dG8gY2xlYXIgc3RhbGwgZmlyc3QgKi8KKwkJCXVzYmRfeGZlcl9zZXRfc3RhbGwoeGZlcik7CisJ
CQlnb3RvIHRyX3NldHVwOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3Vt
Yl90eGZsdXNoKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCW10eF9hc3NlcnQoJnNjLT5zY19t
dXRleCwgTUFfT1dORUQpOworCisJaWYgKHNjLT5zY190eF9tICE9IE5VTEwpIHsKKwkJbV9mcmVl
bShzYy0+c2NfdHhfbSk7CisJCXNjLT5zY190eF9tID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCit1bWJfZGVjYXAoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCB1c2JfeGZlciAqeGZl
ciwgaW50IGZyYW1lKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJY2hh
ciAqYnVmOworCWludCBsZW47CisJY2hhcgkqZHA7CisJc3RydWN0IG5jbV9oZWFkZXIxNiAqaGRy
MTY7CisJc3RydWN0IG5jbV9oZWFkZXIzMiAqaGRyMzI7CisJc3RydWN0IG5jbV9wb2ludGVyMTYg
KnB0cjE2OworCXN0cnVjdCBuY21fcG9pbnRlcjE2X2RncmFtICpkZ3JhbTE2OworCXN0cnVjdCBu
Y21fcG9pbnRlcjMyX2RncmFtICpkZ3JhbTMyOworCXVpbnQzMl90IGhzaWcsIHBzaWc7CisJaW50
CSBobGVuLCBibGVuOworCWludAkgcHRybGVuLCBwdHJvZmYsIGRnZW50cnlvZmY7CisJdWludDMy
X3QgZG9mZiwgZGxlbjsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKworCXVzYmRfeGZlcl9mcmFtZV9kYXRh
KHhmZXIsIGZyYW1lLCAodm9pZCAqKikmYnVmLCAmbGVuKTsKKwlEUFJJTlRGTig0LCAicmVjdiAl
ZCBieXRlc1xuIiwgbGVuKTsKKwlERFVNUE4oNSwgYnVmLCBsZW4pOworCWlmIChsZW4gPCBzaXpl
b2YgKCpoZHIxNikpCisJCWdvdG8gdG9vc21hbGw7CisKKwloZHIxNiA9IChzdHJ1Y3QgbmNtX2hl
YWRlcjE2ICopYnVmOworCWhzaWcgPSBVR0VURFcoaGRyMTYtPmR3U2lnbmF0dXJlKTsKKwlobGVu
ID0gVUdFVFcoaGRyMTYtPndIZWFkZXJMZW5ndGgpOworCWlmIChsZW4gPCBobGVuKQorCQlnb3Rv
IHRvb3NtYWxsOworCWlmIChsZW4gPiBzYy0+c2NfcnhfYnVmc3opIHsKKwkJRFBSSU5URigicGFj
a2V0IHRvbyBsYXJnZSAoJWQpXG4iLCBsZW4pOworCQlnb3RvIGZhaWw7CisJfQorCXN3aXRjaCAo
aHNpZykgeworCWNhc2UgTkNNX0hEUjE2X1NJRzoKKwkJYmxlbiA9IFVHRVRXKGhkcjE2LT53Qmxv
Y2tMZW5ndGgpOworCQlwdHJvZmYgPSBVR0VUVyhoZHIxNi0+d05kcEluZGV4KTsKKwkJaWYgKGhs
ZW4gIT0gc2l6ZW9mICgqaGRyMTYpKSB7CisJCQlEUFJJTlRGKCIlczogYmFkIGhlYWRlciBsZW4g
JWQgZm9yIE5USDE2IChleHAgJXp1KVxuIiwKKwkJCSAgICBERVZOQU0oc2MpLCBobGVuLCBzaXpl
b2YgKCpoZHIxNikpOworCQkJZ290byBmYWlsOworCQl9CisJCWJyZWFrOworCWNhc2UgTkNNX0hE
UjMyX1NJRzoKKwkJaGRyMzIgPSAoc3RydWN0IG5jbV9oZWFkZXIzMiAqKWhkcjE2OworCQlibGVu
ID0gVUdFVERXKGhkcjMyLT5kd0Jsb2NrTGVuZ3RoKTsKKwkJcHRyb2ZmID0gVUdFVERXKGhkcjMy
LT5kd05kcEluZGV4KTsKKwkJaWYgKGhsZW4gIT0gc2l6ZW9mICgqaGRyMzIpKSB7CisJCQlEUFJJ
TlRGKCIlczogYmFkIGhlYWRlciBsZW4gJWQgZm9yIE5USDMyIChleHAgJXp1KVxuIiwKKwkJCSAg
ICBERVZOQU0oc2MpLCBobGVuLCBzaXplb2YgKCpoZHIzMikpOworCQkJZ290byBmYWlsOworCQl9
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoIiVzOiB1bnN1cHBvcnRlZCBOQ00gaGVh
ZGVyIHNpZ25hdHVyZSAoMHglMDh4KVxuIiwKKwkJICAgIERFVk5BTShzYyksIGhzaWcpOworCQln
b3RvIGZhaWw7CisJfQorCWlmIChsZW4gPCBibGVuKSB7CisJCURQUklOVEYoIiVzOiBiYWQgTlRC
IGxlbiAoJWQpIGZvciAlZCBieXRlcyBvZiBkYXRhXG4iLAorCQkgICAgREVWTkFNKHNjKSwgYmxl
biwgbGVuKTsKKwkJZ290byBmYWlsOworCX0KKworCXB0cjE2ID0gKHN0cnVjdCBuY21fcG9pbnRl
cjE2ICopKGJ1ZiArIHB0cm9mZik7CisJcHNpZyA9IFVHRVREVyhwdHIxNi0+ZHdTaWduYXR1cmUp
OworCXB0cmxlbiA9IFVHRVRXKHB0cjE2LT53TGVuZ3RoKTsKKwlpZiAobGVuIDwgcHRybGVuICsg
cHRyb2ZmKQorCQlnb3RvIHRvb3NtYWxsOworCWlmICghTUJJTV9OQ01fTlRIMTZfSVNJU0cocHNp
ZykgJiYgIU1CSU1fTkNNX05USDMyX0lTSVNHKHBzaWcpKSB7CisJCURQUklOVEYoIiVzOiB1bnN1
cHBvcnRlZCBOQ00gcG9pbnRlciBzaWduYXR1cmUgKDB4JTA4eClcbiIsCisJCSAgICBERVZOQU0o
c2MpLCBwc2lnKTsKKwkJZ290byBmYWlsOworCX0KKworCXN3aXRjaCAoaHNpZykgeworCWNhc2Ug
TkNNX0hEUjE2X1NJRzoKKwkJZGdlbnRyeW9mZiA9IG9mZnNldG9mKHN0cnVjdCBuY21fcG9pbnRl
cjE2LCBkZ3JhbSk7CisJCWJyZWFrOworCWNhc2UgTkNNX0hEUjMyX1NJRzoKKwkJZGdlbnRyeW9m
ZiA9IG9mZnNldG9mKHN0cnVjdCBuY21fcG9pbnRlcjMyLCBkZ3JhbSk7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCWdvdG8gZmFpbDsKKwl9CisKKwl3aGlsZSAoZGdlbnRyeW9mZiA8IHB0cmxlbikg
eworCQlzd2l0Y2ggKGhzaWcpIHsKKwkJY2FzZSBOQ01fSERSMTZfU0lHOgorCQkJaWYgKHB0cm9m
ZiArIGRnZW50cnlvZmYgPCBzaXplb2YgKCpkZ3JhbTE2KSkKKwkJCQlnb3RvIGRvbmU7CisJCQlk
Z3JhbTE2ID0gKHN0cnVjdCBuY21fcG9pbnRlcjE2X2RncmFtICopCisJCQkgICAgKGJ1ZiArIHB0
cm9mZiArIGRnZW50cnlvZmYpOworCQkJZGdlbnRyeW9mZiArPSBzaXplb2YgKCpkZ3JhbTE2KTsK
KwkJCWRsZW4gPSBVR0VUVyhkZ3JhbTE2LT53RGF0YWdyYW1MZW4pOworCQkJZG9mZiA9IFVHRVRX
KGRncmFtMTYtPndEYXRhZ3JhbUluZGV4KTsKKwkJCWJyZWFrOworCQljYXNlIE5DTV9IRFIzMl9T
SUc6CisJCQlpZiAocHRyb2ZmICsgZGdlbnRyeW9mZiA8IHNpemVvZiAoKmRncmFtMzIpKQorCQkJ
CWdvdG8gZG9uZTsKKwkJCWRncmFtMzIgPSAoc3RydWN0IG5jbV9wb2ludGVyMzJfZGdyYW0gKikK
KwkJCSAgICAoYnVmICsgcHRyb2ZmICsgZGdlbnRyeW9mZik7CisJCQlkZ2VudHJ5b2ZmICs9IHNp
emVvZiAoKmRncmFtMzIpOworCQkJZGxlbiA9IFVHRVREVyhkZ3JhbTMyLT5kd0RhdGFncmFtTGVu
KTsKKwkJCWRvZmYgPSBVR0VURFcoZGdyYW0zMi0+ZHdEYXRhZ3JhbUluZGV4KTsKKwkJCWJyZWFr
OworCQlkZWZhdWx0OgorCQkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVSUk9SUywg
MSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBUZXJtaW5hdGluZyB6ZXJvIGVudHJ5ICov
CisJCWlmIChkbGVuID09IDAgfHwgZG9mZiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBk
bGVuICsgZG9mZikgeworCQkJLyogU2tpcCBnaWFudCBkYXRhZ3JhbSBidXQgY29udGludWUgcHJv
Y2Vzc2luZyAqLworCQkJRFBSSU5URigiJXM6IGRhdGFncmFtIHRvbyBsYXJnZSAoJWQgQCBvZmYg
JWQpXG4iLAorCQkJICAgIERFVk5BTShzYyksIGRsZW4sIGRvZmYpOworCQkJY29udGludWU7CisJ
CX0KKworCQlkcCA9IGJ1ZiArIGRvZmY7CisJCURQUklOVEZOKDMsICIlczogZGVjYXAgJWQgYnl0
ZXNcbiIsIERFVk5BTShzYyksIGRsZW4pOworCQltID0gbV9kZXZnZXQoZHAsIGRsZW4sIDAsIGlm
cCwgTlVMTCk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCWlmX2luY19jb3VudGVyKGlmcCwgSUZD
T1VOVEVSX0lRRFJPUFMsIDEpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBlbnF1ZXVlIGZv
ciBsYXRlciB3aGVuIHRoZSBsb2NrIGNhbiBiZSByZWxlYXNlZCAqLworCQlfSUZfRU5RVUVVRSgm
c2MtPnNjX3J4X3F1ZXVlLCBtKTsKKworCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9J
UEFDS0VUUywgMSk7CisKKwl9Citkb25lOgorCXNjLT5zY19yeF9uZXJyID0gMDsKKwlyZXR1cm47
Cit0b29zbWFsbDoKKwlEUFJJTlRGKCIlczogcGFja2V0IHRvbyBzbWFsbCAoJWQpXG4iLCBERVZO
QU0oc2MpLCBsZW4pOworZmFpbDoKKwlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9JRVJS
T1JTLCAxKTsKK30KKworc3RhdGljIHVzYl9lcnJvcl90Cit1bWJfc2VuZF9lbmNhcF9jb21tYW5k
KHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXVzYl9kZXZp
Y2VfcmVxdWVzdF90IHJlcTsKKworCWlmIChsZW4gPiBzYy0+c2NfY3RybF9sZW4pCisJCXJldHVy
biBVU0JfRVJSX0lOVkFMOworCisJLyogWFhYIEZJWE1FOiBpZiAodG90YWwgbGVuID4gc2MtPnNj
X2N0cmxfbGVuKSA9PiBtdXN0IGZyYWdtZW50ICovCisJcmVxLmJtUmVxdWVzdFR5cGUgPSBVVF9X
UklURV9DTEFTU19JTlRFUkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0gVUNEQ19TRU5EX0VOQ0FQU1VM
QVRFRF9DT01NQU5EOworCVVTRVRXKHJlcS53VmFsdWUsIDApOworCVVTRVRXKHJlcS53SW5kZXgs
IHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVTRVRXKHJlcS53TGVuZ3RoLCBsZW4pOworCW10eF91
bmxvY2soJnNjLT5zY19tdXRleCk7CisJREVMQVkodW1iX2RlbGF5KTsKKwltdHhfbG9jaygmc2Mt
PnNjX211dGV4KTsKKwlyZXR1cm4gdXNiZF9kb19yZXF1ZXN0X2ZsYWdzKHNjLT5zY191ZGV2LCAm
c2MtPnNjX211dGV4LCAmcmVxLCBkYXRhLCAwLAorCQkJTlVMTCwgdW1iX3hmZXJfdG91dCk7Cit9
CisKK3N0YXRpYyBpbnQKK3VtYl9nZXRfZW5jYXBfcmVzcG9uc2Uoc3RydWN0IHVtYl9zb2Z0YyAq
c2MsIHZvaWQgKmJ1ZiwgaW50ICpsZW4pCit7CisJdXNiX2RldmljZV9yZXF1ZXN0X3QgcmVxOwor
CXVzYl9lcnJvcl90IGVycjsKKwl1aW50MTZfdCBsID0gKmxlbjsKKworCXJlcS5ibVJlcXVlc3RU
eXBlID0gVVRfUkVBRF9DTEFTU19JTlRFUkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0gVUNEQ19HRVRf
RU5DQVBTVUxBVEVEX1JFU1BPTlNFOworCVVTRVRXKHJlcS53VmFsdWUsIDApOworCVVTRVRXKHJl
cS53SW5kZXgsIHNjLT5zY19jdHJsX2lmYWNlbm8pOworCVVTRVRXKHJlcS53TGVuZ3RoLCBsKTsK
KwkvKiBYWFggRklYTUU6IHJlLWFzc2VtYmxlIGZyYWdtZW50cyAqLworCisJbXR4X3VubG9jaygm
c2MtPnNjX211dGV4KTsKKwlERUxBWSh1bWJfZGVsYXkpOworCW10eF9sb2NrKCZzYy0+c2NfbXV0
ZXgpOworCWVyciA9IHVzYmRfZG9fcmVxdWVzdF9mbGFncyhzYy0+c2NfdWRldiwgJnNjLT5zY19t
dXRleCwgJnJlcSwgYnVmLAorCQkJVVNCX1NIT1JUX1hGRVJfT0ssICZsLCB1bWJfeGZlcl90b3V0
KTsKKwlpZiAoZXJyID09IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04pIHsKKwkJKmxlbiA9IGw7
CisJCXJldHVybiAxOworCX0KKwlEUFJJTlRGKCJjdHJsIHJlY3Y6ICVzXG4iLCB1c2JkX2VycnN0
cihlcnIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jdHJsX21zZyhzdHJ1
Y3QgdW1iX3NvZnRjICpzYywgdWludDMyX3QgcmVxLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorewor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMyX3QgdGlkOworCXN0cnVj
dCBtYmltX21zZ2hkciAqaGRyID0gZGF0YTsKKwl1c2JfZXJyb3JfdCBlcnI7CisKKwlpZiAoc2Mt
PnNjX2R5aW5nKQorCQlyZXR1cm47CisJaWYgKGxlbiA8IHNpemVvZiAoKmhkcikpCisJCXJldHVy
bjsKKwl0aWQgPSArK3NjLT5zY190aWQ7CisKKwloZHItPnR5cGUgPSBodG9sZTMyKHJlcSk7CisJ
aGRyLT5sZW4gPSBodG9sZTMyKGxlbik7CisJaGRyLT50aWQgPSBodG9sZTMyKHRpZCk7CisKKyNp
ZmRlZiBVTUJfREVCVUcKKwlpZiAodW1iX2RlYnVnKSB7CisJCWNvbnN0IGNoYXIgKm9wLCAqc3Ry
OworCQlpZiAocmVxID09IE1CSU1fQ09NTUFORF9NU0cpIHsKKwkJCXN0cnVjdCBtYmltX2gyZl9j
bWQgKmMgPSBkYXRhOworCQkJaWYgKGxlMzJ0b2goYy0+b3ApID09IE1CSU1fQ01ET1BfU0VUKQor
CQkJCW9wID0gInNldCI7CisJCQllbHNlCisJCQkJb3AgPSAicXJ5IjsKKwkJCXN0ciA9IHVtYl9j
aWQyc3RyKGxlMzJ0b2goYy0+Y2lkKSk7CisJCX0gZWxzZSB7CisJCQlvcCA9ICJzbmQiOworCQkJ
c3RyID0gdW1iX3JlcXVlc3Qyc3RyKHJlcSk7CisJCX0KKwkJRFBSSU5URigiLT4gJXMgJXMgKHRp
ZCAldSlcbiIsIG9wLCBzdHIsIHRpZCk7CisJfQorI2VuZGlmCisJZXJyID0gdW1iX3NlbmRfZW5j
YXBfY29tbWFuZChzYywgZGF0YSwgbGVuKTsKKwlpZiAoZXJyICE9IFVTQl9FUlJfTk9STUFMX0NP
TVBMRVRJT04pIHsKKwkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQlsb2coTE9H
X0VSUiwgIiVzOiBzZW5kICVzIG1zZyAodGlkICV1KSBmYWlsZWQ6ICVzXG4iLAorCQkJICAgIERF
Vk5BTShzYyksIHVtYl9yZXF1ZXN0MnN0cihyZXEpLCB0aWQsCisJCQkgICAgdXNiZF9lcnJzdHIo
ZXJyKSk7CisKKwkJLyogd2lsbCBhZmZlY3Qgb3RoZXIgdHJhbnNhY3Rpb25zLCB0b28gKi8KKwkJ
dXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyW1VNQl9JTlRSX1JYXSk7CisJfSBlbHNlIHsK
KwkJRFBSSU5URk4oMiwgInNlbnQgJXMgKHRpZCAldSlcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJz
dHIocmVxKSwgdGlkKTsKKwkJRERVTVBOKDMsIGRhdGEsIGxlbik7CisJfQorCXJldHVybjsKK30K
Kworc3RhdGljIHZvaWQKK3VtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVj
dCBtYmltX2gyZl9vcGVubXNnIG1zZzsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKG1zZykp
OworCW1zZy5tYXhsZW4gPSBodG9sZTMyKHNjLT5zY19jdHJsX2xlbik7CisJdW1iX2N0cmxfbXNn
KHNjLCBNQklNX09QRU5fTVNHLCAmbXNnLCBzaXplb2YgKG1zZykpOworCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK3VtYl9jbG9zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3Qg
bWJpbV9oMmZfY2xvc2Vtc2cgbXNnOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAobXNnKSk7
CisJdW1iX2N0cmxfbXNnKHNjLCBNQklNX0NMT1NFX01TRywgJm1zZywgc2l6ZW9mIChtc2cpKTsK
K30KKworc3RhdGljIGludAordW1iX3NldHBpbihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IG9w
LCBpbnQgaXNfcHVrLCB2b2lkICpwaW4sIGludCBwaW5sZW4sCisgICAgdm9pZCAqbmV3cGluLCBp
bnQgbmV3cGlubGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9waW4gY3A7CisJaW50CSBvZmY7CisK
KwlpZiAocGlubGVuID09IDApCisJCXJldHVybiAwOworCWlmIChwaW5sZW4gPCAwIHx8IHBpbmxl
biA+IE1CSU1fUElOX01BWExFTiB8fAorCSAgICBuZXdwaW5sZW4gPCAwIHx8IG5ld3BpbmxlbiA+
IE1CSU1fUElOX01BWExFTiB8fAorCSAgICBvcCA8IDAgfHwgb3AgPiBNQklNX1BJTl9PUF9DSEFO
R0UgfHwKKwkgICAgKGlzX3B1ayAmJiBvcCAhPSBNQklNX1BJTl9PUF9FTlRFUikpCisJCXJldHVy
biBFSU5WQUw7CisKKwltZW1zZXQoJmNwLCAwLCBzaXplb2YgKGNwKSk7CisJY3AudHlwZSA9IGh0
b2xlMzIoaXNfcHVrID8gTUJJTV9QSU5fVFlQRV9QVUsxIDogTUJJTV9QSU5fVFlQRV9QSU4xKTsK
KworCW9mZiA9IG9mZnNldG9mKHN0cnVjdCBtYmltX2NpZF9waW4sIGRhdGEpOworCWlmICghdW1i
X2FkZHN0cigmY3AsIHNpemVvZiAoY3ApLCAmb2ZmLCBwaW4sIHBpbmxlbiwKKwkgICAgJmNwLnBp
bl9vZmZzLCAmY3AucGluX3NpemUpKQorCQlyZXR1cm4gRUlOVkFMOworCisJY3Aub3AgID0gaHRv
bGUzMihvcCk7CisJaWYgKG5ld3BpbmxlbikgeworCQlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXpl
b2YgKGNwKSwgJm9mZiwgbmV3cGluLCBuZXdwaW5sZW4sCisJCSAgICAmY3AubmV3cGluX29mZnMs
ICZjcC5uZXdwaW5fc2l6ZSkpCisJCQlyZXR1cm4gRUlOVkFMOworCX0gZWxzZSB7CisJCWlmICgo
b3AgPT0gTUJJTV9QSU5fT1BfQ0hBTkdFKSB8fCBpc19wdWspCisJCQlyZXR1cm4gRUlOVkFMOwor
CQlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXplb2YgKGNwKSwgJm9mZiwgTlVMTCwgMCwKKwkJICAg
ICZjcC5uZXdwaW5fb2ZmcywgJmNwLm5ld3Bpbl9zaXplKSkKKwkJCXJldHVybiBFSU5WQUw7CisJ
fQorCW10eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1BJTiwg
TUJJTV9DTURPUF9TRVQsICZjcCwgb2ZmKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordW1iX3NldGRhdGFjbGFzcyhzdHJ1Y3QgdW1i
X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlIHJzOwor
CXVpbnQzMl90CSBjbGFzc2VzOworCisJaWYgKHNjLT5zY19pbmZvLnN1cHBvcnRlZGNsYXNzZXMg
PT0gTUJJTV9EQVRBQ0xBU1NfTk9ORSkKKwkJcmV0dXJuOworCisJbWVtc2V0KCZycywgMCwgc2l6
ZW9mIChycykpOworCXJzLnJlZ2FjdGlvbiA9IGh0b2xlMzIoTUJJTV9SRUdBQ1RJT05fQVVUT01B
VElDKTsKKwljbGFzc2VzID0gc2MtPnNjX2luZm8uc3VwcG9ydGVkY2xhc3NlczsKKwlpZiAoc2Mt
PnNjX2luZm8ucHJlZmVycmVkY2xhc3NlcyAhPSBNQklNX0RBVEFDTEFTU19OT05FKQorCQljbGFz
c2VzICY9IHNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNzZXM7CisJcnMuZGF0YV9jbGFzcyA9IGh0
b2xlMzIoY2xhc3Nlcyk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2NtZChzYywg
TUJJTV9DSURfUkVHSVNURVJfU1RBVEUsIE1CSU1fQ01ET1BfU0VULCAmcnMsIHNpemVvZiAocnMp
KTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAordW1iX3Jh
ZGlvKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgb24pCit7CisJc3RydWN0IG1iaW1fY2lkX3Jh
ZGlvX3N0YXRlIHM7CisKKwlEUFJJTlRGKCJzZXQgcmFkaW8gJXNcbiIsIG9uID8gIm9uIiA6ICJv
ZmYiKTsKKwltZW1zZXQoJnMsIDAsIHNpemVvZiAocykpOworCXMuc3RhdGUgPSBodG9sZTMyKG9u
ID8gTUJJTV9SQURJT19TVEFURV9PTiA6IE1CSU1fUkFESU9fU1RBVEVfT0ZGKTsKKwl1bWJfY21k
KHNjLCBNQklNX0NJRF9SQURJT19TVEFURSwgTUJJTV9DTURPUF9TRVQsICZzLCBzaXplb2YgKHMp
KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9hbGxvY2F0ZV9jaWQoc3RydWN0IHVtYl9zb2Z0YyAq
c2MpCit7CisJdW1iX2NtZDEoc2MsIE1CSU1fQ0lEX0RFVklDRV9DQVBTLCBNQklNX0NNRE9QX1NF
VCwKKwkgICAgdW1iX3FtaV9hbGxvY19jaWQsIHNpemVvZiAodW1iX3FtaV9hbGxvY19jaWQpLCB1
bWJfdXVpZF9xbWlfbWJpbSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc2VuZF9mY2NfYXV0aChz
dHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwl1aW50OF90CSBmY2NhdXRoW3NpemVvZiAodW1iX3Ft
aV9mY2NfYXV0aCldOworCisJaWYgKHNjLT5zY19jaWQgPT0gLTEpIHsKKwkJRFBSSU5URigibWlz
c2luZyBDSUQsIGNhbm5vdCBzZW5kIEZDQyBhdXRoXG4iKTsKKwkJdW1iX2FsbG9jYXRlX2NpZChz
Yyk7CisJCXJldHVybjsKKwl9CisJbWVtY3B5KGZjY2F1dGgsIHVtYl9xbWlfZmNjX2F1dGgsIHNp
emVvZiAoZmNjYXV0aCkpOworCWZjY2F1dGhbVU1CX1FNSV9DSURfT0ZGU10gPSBzYy0+c2NfY2lk
OworCXVtYl9jbWQxKHNjLCBNQklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9TRVQsCisJ
ICAgIGZjY2F1dGgsIHNpemVvZiAoZmNjYXV0aCksIHVtYl91dWlkX3FtaV9tYmltKTsKK30KKwor
c3RhdGljIHZvaWQKK3VtYl9wYWNrZXRfc2VydmljZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50
IGF0dGFjaCkKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcGFja2V0X3NlcnZpY2UJczsKKworCURQUklO
VEYoIiVzIHBhY2tldCBzZXJ2aWNlXG4iLAorCSAgICBhdHRhY2ggPyAiYXR0YWNoIiA6ICJkZXRh
Y2giKTsKKwltZW1zZXQoJnMsIDAsIHNpemVvZiAocykpOworCXMuYWN0aW9uID0gaHRvbGUzMihh
dHRhY2ggPworCSAgICBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0FUVEFDSCA6IE1CSU1fUEtUU0VS
VklDRV9BQ1RJT05fREVUQUNIKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9QQUNLRVRfU0VSVklD
RSwgTUJJTV9DTURPUF9TRVQsICZzLCBzaXplb2YgKHMpKTsKK30KKworc3RhdGljIHZvaWQKK3Vt
Yl9jb25uZWN0KHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0g
R0VUX0lGUChzYyk7CisKKwlpZiAoc2MtPnNjX2luZm8ucmVnc3RhdGUgPT0gTUJJTV9SRUdTVEFU
RV9ST0FNSU5HICYmICFzYy0+c2Nfcm9hbWluZykgeworCQlsb2coTE9HX0lORk8sICIlczogY29u
bmVjdGlvbiBkaXNhYmxlZCBpbiByb2FtaW5nIG5ldHdvcmtcbiIsCisJCSAgICBERVZOQU0oc2Mp
KTsKKwkJcmV0dXJuOworCX0KKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJbG9n
KExPR19ERUJVRywgIiVzOiBjb25uZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJdW1iX3Nl
bmRfY29ubmVjdChzYywgTUJJTV9DT05ORUNUX0FDVElWQVRFKTsKK30KKworc3RhdGljIHZvaWQK
K3VtYl9kaXNjb25uZWN0KHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAq
aWZwID0gR0VUX0lGUChzYyk7CisKKwlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJ
bG9nKExPR19ERUJVRywgIiVzOiBkaXNjb25uZWN0aW5nIC4uLlxuIiwgREVWTkFNKHNjKSk7CisJ
dW1iX3NlbmRfY29ubmVjdChzYywgTUJJTV9DT05ORUNUX0RFQUNUSVZBVEUpOworfQorCitzdGF0
aWMgdm9pZAordW1iX3NlbmRfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGNvbW1h
bmQpCit7CisJc3RydWN0IG1iaW1fY2lkX2Nvbm5lY3QgKmM7CisJaW50CSBvZmY7CisKKwkvKiBU
b28gbGFyZ2UgZm9yIHRoZSBzdGFjayAqLworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJ
YyA9IG1hbGxvYyhzaXplb2YgKCpjKSwgTV9NQklNX0NJRF9DT05ORUNULCBNX1dBSVRPSyB8IE1f
WkVSTyk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJYy0+c2Vzc2lvbmlkID0gaHRvbGUz
Mih1bWJfc2Vzc2lvbl9pZCk7CisJYy0+Y29tbWFuZCA9IGh0b2xlMzIoY29tbWFuZCk7CisJb2Zm
ID0gb2Zmc2V0b2Yoc3RydWN0IG1iaW1fY2lkX2Nvbm5lY3QsIGRhdGEpOworCWlmICghdW1iX2Fk
ZHN0cihjLCBzaXplb2YgKCpjKSwgJm9mZiwgc2MtPnNjX2luZm8uYXBuLAorCSAgICBzYy0+c2Nf
aW5mby5hcG5sZW4sICZjLT5hY2Nlc3Nfb2ZmcywgJmMtPmFjY2Vzc19zaXplKSkKKwkJZ290byBk
b25lOworCWlmICghdW1iX2FkZHN0cihjLCBzaXplb2YgKCpjKSwgJm9mZiwgc2MtPnNjX2luZm8u
dXNlcm5hbWUsCisJICAgIHNjLT5zY19pbmZvLnVzZXJuYW1lbGVuLCAmYy0+dXNlcl9vZmZzLCAm
Yy0+dXNlcl9zaXplKSkKKwkJZ290byBkb25lOworCWlmICghdW1iX2FkZHN0cihjLCBzaXplb2Yg
KCpjKSwgJm9mZiwgc2MtPnNjX2luZm8ucGFzc3dvcmQsCisJICAgIHNjLT5zY19pbmZvLnBhc3N3
b3JkbGVuLCAmYy0+cGFzc3dkX29mZnMsICZjLT5wYXNzd2Rfc2l6ZSkpCisJCWdvdG8gZG9uZTsK
KwljLT5hdXRocHJvdCA9IGh0b2xlMzIoTUJJTV9BVVRIUFJPVF9OT05FKTsKKwljLT5jb21wcmVz
c2lvbiA9IGh0b2xlMzIoTUJJTV9DT01QUkVTU0lPTl9OT05FKTsKKwljLT5pcHR5cGUgPSBodG9s
ZTMyKE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNCk7CisJbWVtY3B5KGMtPmNvbnRleHQsIHVtYl91
dWlkX2NvbnRleHRfaW50ZXJuZXQsIHNpemVvZiAoYy0+Y29udGV4dCkpOworCXVtYl9jbWQoc2Ms
IE1CSU1fQ0lEX0NPTk5FQ1QsIE1CSU1fQ01ET1BfU0VULCBjLCBvZmYpOworZG9uZToKKwlmcmVl
KGMsIE1fTUJJTV9DSURfQ09OTkVDVCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1i
X3FyeV9pcGNvbmZpZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRf
aXBfY29uZmlndXJhdGlvbl9pbmZvIGlwYzsKKworCW1lbXNldCgmaXBjLCAwLCBzaXplb2YgKGlw
YykpOworCWlwYy5zZXNzaW9uaWQgPSBodG9sZTMyKHVtYl9zZXNzaW9uX2lkKTsKKwl1bWJfY21k
KHNjLCBNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OLCBNQklNX0NNRE9QX1FSWSwKKwkgICAgJmlw
Yywgc2l6ZW9mIChpcGMpKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbWQoc3RydWN0IHVtYl9z
b2Z0YyAqc2MsIGludCBjaWQsIGludCBvcCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sK
Kwl1bWJfY21kMShzYywgY2lkLCBvcCwgZGF0YSwgbGVuLCB1bWJfdXVpZF9iYXNpY19jb25uZWN0
KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jbWQxKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQg
Y2lkLCBpbnQgb3AsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sCisgICAgdWludDhfdCAqdXVp
ZCkKK3sKKwlzdHJ1Y3QgbWJpbV9oMmZfY21kICpjbWQ7CisJaW50CXRvdGxlbjsKKworCS8qIFhY
WCBGSVhNRSBzdXBwb3J0IHNlbmRpbmcgZnJhZ21lbnRzICovCisJaWYgKHNpemVvZiAoKmNtZCkg
KyBsZW4gPiBzYy0+c2NfY3RybF9sZW4pIHsKKwkJRFBSSU5URigic2V0ICVzIG1zZyB0b28gbG9u
ZzogY2Fubm90IHNlbmRcbiIsCisJCSAgICB1bWJfY2lkMnN0cihjaWQpKTsKKwkJcmV0dXJuOwor
CX0KKwljbWQgPSBzYy0+c2NfY3RybF9tc2c7CisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mICgqY21k
KSk7CisJY21kLT5mcmFnLm5mcmFnID0gaHRvbGUzMigxKTsKKwltZW1jcHkoY21kLT5kZXZpZCwg
dXVpZCwgc2l6ZW9mIChjbWQtPmRldmlkKSk7CisJY21kLT5jaWQgPSBodG9sZTMyKGNpZCk7CisJ
Y21kLT5vcCA9IGh0b2xlMzIob3ApOworCWNtZC0+aW5mb2xlbiA9IGh0b2xlMzIobGVuKTsKKwl0
b3RsZW4gPSBzaXplb2YgKCpjbWQpOworCWlmIChsZW4gPiAwKSB7CisJCW1lbWNweShjbWQgKyAx
LCBkYXRhLCBsZW4pOworCQl0b3RsZW4gKz0gbGVuOworCX0KKwl1bWJfY3RybF9tc2coc2MsIE1C
SU1fQ09NTUFORF9NU0csIGNtZCwgdG90bGVuKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9jb21t
YW5kX2RvbmUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJ
c3RydWN0IG1iaW1fZjJoX2NtZGRvbmUgKmNtZCA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAg
PSBHRVRfSUZQKHNjKTsKKwl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3QgY2lkOworCXVpbnQz
Ml90IGluZm9sZW47CisJaW50CSBxbWltc2cgPSAwOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmNt
ZCkpIHsKKwkJRFBSSU5URigiZGlzY2FyZCBzaG9ydCAlcyBtZXNzYWdlXG4iLAorCQkgICAgdW1i
X3JlcXVlc3Qyc3RyKGxlMzJ0b2goY21kLT5oZHIudHlwZSkpKTsKKwkJcmV0dXJuOworCX0KKwlj
aWQgPSBsZTMydG9oKGNtZC0+Y2lkKTsKKwlpZiAobWVtY21wKGNtZC0+ZGV2aWQsIHVtYl91dWlk
X2Jhc2ljX2Nvbm5lY3QsIHNpemVvZiAoY21kLT5kZXZpZCkpKSB7CisJCWlmIChtZW1jbXAoY21k
LT5kZXZpZCwgdW1iX3V1aWRfcW1pX21iaW0sCisJCSAgICBzaXplb2YgKGNtZC0+ZGV2aWQpKSkg
eworCQkJRFBSSU5URigiZGlzY2FyZCAlcyBtZXNzYWdlIGZvciBvdGhlciBVVUlEICclcydcbiIs
CisJCQkgICAgdW1iX3JlcXVlc3Qyc3RyKGxlMzJ0b2goY21kLT5oZHIudHlwZSkpLAorCQkJICAg
IHVtYl91dWlkMnN0cihjbWQtPmRldmlkKSk7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJcW1p
bXNnID0gMTsKKwl9CisKKwlzdGF0dXMgPSBsZTMydG9oKGNtZC0+c3RhdHVzKTsKKwlzd2l0Y2gg
KHN0YXR1cykgeworCWNhc2UgTUJJTV9TVEFUVVNfU1VDQ0VTUzoKKwkJYnJlYWs7CisJY2FzZSBN
QklNX1NUQVRVU19OT1RfSU5JVElBTElaRUQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RF
QlVHKQorCQkJbG9nKExPR19FUlIsICIlczogU0lNIG5vdCBpbml0aWFsaXplZCAoUElOIG1pc3Np
bmcpXG4iLAorCQkJICAgIERFVk5BTShzYykpOworCQlyZXR1cm47CisJY2FzZSBNQklNX1NUQVRV
U19QSU5fUkVRVUlSRUQ6CisJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5fUkVRVUlS
RUQ7CisJCS8qRkFMTFRIUk9VR0gqLworCWRlZmF1bHQ6CisJCWlmIChpZnAtPmlmX2ZsYWdzICYg
SUZGX0RFQlVHKQorCQkJbG9nKExPR19FUlIsICIlczogc2V0L3FyeSAlcyBmYWlsZWQ6ICVzXG4i
LCBERVZOQU0oc2MpLAorCQkJICAgIHVtYl9jaWQyc3RyKGNpZCksIHVtYl9zdGF0dXMyc3RyKHN0
YXR1cykpOworCQlyZXR1cm47CisJfQorCisJaW5mb2xlbiA9IGxlMzJ0b2goY21kLT5pbmZvbGVu
KTsKKwlpZiAobGVuIDwgc2l6ZW9mICgqY21kKSArIGluZm9sZW4pIHsKKwkJRFBSSU5URigiZGlz
Y2FyZCB0cnVuY2F0ZWQgJXMgbWVzc2FnZSAod2FudCAlZCwgZ290ICVkKVxuIiwKKwkJICAgIHVt
Yl9jaWQyc3RyKGNpZCksCisJCSAgICAoaW50KXNpemVvZiAoKmNtZCkgKyBpbmZvbGVuLCBsZW4p
OworCQlyZXR1cm47CisJfQorCWlmIChxbWltc2cpIHsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFVN
QkZMR19GQ0NfQVVUSF9SRVFVSVJFRCkKKwkJCXVtYl9kZWNvZGVfcW1pKHNjLCBjbWQtPmluZm8s
IGluZm9sZW4pOworCX0gZWxzZSB7CisJCURQUklOVEZOKDIsICJzZXQvcXJ5ICVzIGRvbmVcbiIs
CisJCSAgICB1bWJfY2lkMnN0cihjaWQpKTsKKwkJdW1iX2RlY29kZV9jaWQoc2MsIGNpZCwgY21k
LT5pbmZvLCBpbmZvbGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGVjb2RlX2NpZChz
dHJ1Y3QgdW1iX3NvZnRjICpzYywgdWludDMyX3QgY2lkLCB2b2lkICpkYXRhLCBpbnQgbGVuKQor
eworCWludAkgb2sgPSAxOworCisJc3dpdGNoIChjaWQpIHsKKwljYXNlIE1CSU1fQ0lEX0RFVklD
RV9DQVBTOgorCQlvayA9IHVtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHNjLCBkYXRhLCBsZW4pOwor
CQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTOgorCQlvayA9
IHVtYl9kZWNvZGVfc3Vic2NyaWJlcl9zdGF0dXMoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOwor
CWNhc2UgTUJJTV9DSURfUkFESU9fU1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9yYWRpb19zdGF0
ZShzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9QSU46CisJCW9rID0g
dW1iX2RlY29kZV9waW4oc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNhc2UgTUJJTV9DSURf
UkVHSVNURVJfU1RBVEU6CisJCW9rID0gdW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzYywgZGF0
YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9QQUNLRVRfU0VSVklDRToKKwkJb2sg
PSB1bWJfZGVjb2RlX3BhY2tldF9zZXJ2aWNlKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwlj
YXNlIE1CSU1fQ0lEX1NJR05BTF9TVEFURToKKwkJb2sgPSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0
ZShzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9DT05ORUNUOgorCQlv
ayA9IHVtYl9kZWNvZGVfY29ubmVjdF9pbmZvKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwlj
YXNlIE1CSU1fQ0lEX0lQX0NPTkZJR1VSQVRJT046CisJCW9rID0gdW1iX2RlY29kZV9pcF9jb25m
aWd1cmF0aW9uKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkg
KiBOb3RlOiB0aGUgYWJvdmUgbGlzdCBpcyBpbmNvbXBsZXRlIGFuZCBvbmx5IGNvbnRhaW5zCisJ
CSAqCW1hbmRhdG9yeSBDSURzIGZyb20gdGhlIEJBU0lDX0NPTk5FQ1Qgc2V0LgorCQkgKglTbyBh
bHRlcm5hdGUgdmFsdWVzIGFyZSBub3QgdW51c3VhbC4KKwkJICovCisJCURQUklOVEZOKDQsICJp
Z25vcmUgJXNcbiIsIHVtYl9jaWQyc3RyKGNpZCkpOworCQlicmVhazsKKwl9CisJaWYgKCFvaykK
KwkJRFBSSU5URigiZGlzY2FyZCAlcyB3aXRoIGJhZCBpbmZvIGxlbmd0aCAlZFxuIiwKKwkJICAg
IHVtYl9jaWQyc3RyKGNpZCksIGxlbik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAordW1i
X2RlY29kZV9xbWkoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQ4X3QgKmRhdGEsIGludCBsZW4p
Cit7CisJdWludDhfdAlzcnY7CisJdWludDE2X3QgbXNnLCB0bHZsZW47CisJdWludDMyX3QgdmFs
OworCisjZGVmaW5lIFVNQl9RTUlfUU1VWExFTgkJNgorCWlmIChsZW4gPCBVTUJfUU1JX1FNVVhM
RU4pCisJCWdvdG8gdG9vc2hvcnQ7CisKKwlzcnYgPSBkYXRhWzRdOworCWRhdGEgKz0gVU1CX1FN
SV9RTVVYTEVOOworCWxlbiAtPSBVTUJfUU1JX1FNVVhMRU47CisKKyNkZWZpbmUgVU1CX0dFVDE2
KHApCSgodWludDE2X3QpKnAgfCAodWludDE2X3QpKihwICsgMSkgPDwgOCkKKyNkZWZpbmUgVU1C
X0dFVDMyKHApCSgodWludDMyX3QpKnAgfCAodWludDMyX3QpKihwICsgMSkgPDwgOCB8IFwKKwkJ
CSAgICAodWludDMyX3QpKihwICsgMikgPDwgMTYgfCh1aW50MzJfdCkqKHAgKyAzKSA8PCAyNCkK
Kwlzd2l0Y2ggKHNydikgeworCWNhc2UgMDoJLyogY3RsICovCisjZGVmaW5lIFVNQl9RTUlfQ1RM
TEVOCQk2CisJCWlmIChsZW4gPCBVTUJfUU1JX0NUTExFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJ
CW1zZyA9IFVNQl9HRVQxNigmZGF0YVsyXSk7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs0
XSk7CisJCWRhdGEgKz0gVU1CX1FNSV9DVExMRU47CisJCWxlbiAtPSBVTUJfUU1JX0NUTExFTjsK
KwkJYnJlYWs7CisJY2FzZSAyOgkvKiBkbXMgICovCisjZGVmaW5lIFVNQl9RTUlfRE1TTEVOCQk3
CisJCWlmIChsZW4gPCBVTUJfUU1JX0RNU0xFTikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCW1zZyA9
IFVNQl9HRVQxNigmZGF0YVszXSk7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVs1XSk7CisJ
CWRhdGEgKz0gVU1CX1FNSV9ETVNMRU47CisJCWxlbiAtPSBVTUJfUU1JX0RNU0xFTjsKKwkJYnJl
YWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URigiZGlzY2FyZCBRTUkgbWVzc2FnZSBmb3IgdW5rbm93
biBzZXJ2aWNlIHR5cGUgJWRcbiIsCisJCSAgICBzcnYpOworCQlyZXR1cm47CisJfQorCisJaWYg
KGxlbiA8IHRsdmxlbikKKwkJZ290byB0b29zaG9ydDsKKworI2RlZmluZSBVTUJfUU1JX1RMVkxF
TgkJMworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPCBVTUJfUU1JX1RMVkxFTikKKwkJ
CWdvdG8gdG9vc2hvcnQ7CisJCXRsdmxlbiA9IFVNQl9HRVQxNigmZGF0YVsxXSk7CisJCWlmIChs
ZW4gPCBVTUJfUU1JX1RMVkxFTiArIHRsdmxlbikKKwkJCWdvdG8gdG9vc2hvcnQ7CisJCXN3aXRj
aCAoZGF0YVswXSkgeworCQljYXNlIDE6CS8qIGFsbG9jYXRpb24gaW5mbyAqLworCQkJaWYgKG1z
ZyA9PSAweDAwMjIpIHsJLyogQWxsb2NhdGUgQ0lEICovCisJCQkJaWYgKHRsdmxlbiAhPSAyIHx8
IGRhdGFbM10gIT0gMikgLyogZG1zICovCisJCQkJCWJyZWFrOworCQkJCXNjLT5zY19jaWQgPSBk
YXRhWzRdOworCQkJCURQUklOVEYoIlFNSSBDSUQgJWQgYWxsb2NhdGVkXG4iLAorCQkJCSAgICBz
Yy0+c2NfY2lkKTsKKwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0NJRCwgVU1CX05TX0RPTlRf
RFJPUCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgkvKiByZXNwb25zZSAqLworCQkJaWYg
KHRsdmxlbiAhPSBzaXplb2YgKHZhbCkpCisJCQkJYnJlYWs7CisJCQl2YWwgPSBVTUJfR0VUMzIo
JmRhdGFbM10pOworCQkJc3dpdGNoIChtc2cpIHsKKwkJCWNhc2UgMHgwMDIyOgkvKiBBbGxvY2F0
ZSBDSUQgKi8KKwkJCQlpZiAodmFsICE9IDApIHsKKwkJCQkJbG9nKExPR19FUlIsICIlczogYWxs
b2NhdGlvbiBvZiBRTUkgQ0lEIgorCQkJCQkgICAgIiBmYWlsZWQsIGVycm9yIDB4JXhcbiIsIERF
Vk5BTShzYyksCisJCQkJCSAgICB2YWwpOworCQkJCQkvKiBYWFggaG93IHRvIHByb2NlZWQ/ICov
CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDB4NTU1ZjoJLyogU2Vu
ZCBGQ0MgQXV0aGVudGljYXRpb24gKi8KKwkJCQlpZiAodmFsID09IDApCisJCQkJCURQUklOVEYo
IiVzOiBzZW5kIEZDQyAiCisJCQkJCSAgICAiQXV0aGVudGljYXRpb24gc3VjY2VlZGVkXG4iLAor
CQkJCQkgICAgREVWTkFNKHNjKSk7CisJCQkJZWxzZSBpZiAodmFsID09IDB4MDAxYTAwMDEpCisJ
CQkJCURQUklOVEYoIiVzOiBGQ0MgQXV0aGVudGljYXRpb24gIgorCQkJCQkgICAgIm5vdCByZXF1
aXJlZFxuIiwgREVWTkFNKHNjKSk7CisJCQkJZWxzZQorCQkJCQlsb2coTE9HX0lORk8sICIlczog
c2VuZCBGQ0MgIgorCQkJCQkgICAgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgIgorCQkJCQkgICAg
ImVycm9yIDB4JXhcbiIsIERFVk5BTShzYyksIHZhbCk7CisKKwkJCQkvKiBGQ0MgQXV0aCBpcyBu
ZWVkZWQgb25seSBvbmNlIGFmdGVyIHBvd2VyLW9uKi8KKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflVN
QkZMR19GQ0NfQVVUSF9SRVFVSVJFRDsKKworCQkJCS8qIFRyeSB0byBwcm9jZWVkIGFueXdheSAq
LworCQkJCURQUklOVEYoImluaXQ6IHR1cm5pbmcgcmFkaW8gb24gLi4uXG4iKTsKKwkJCQl1bWJf
cmFkaW8oc2MsIDEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0K
KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJZGF0YSArPSBVTUJfUU1J
X1RMVkxFTiArIHRsdmxlbjsKKwkJbGVuIC09IFVNQl9RTUlfVExWTEVOICsgdGx2bGVuOworCX0K
KwlyZXR1cm47CisKK3Rvb3Nob3J0OgorCURQUklOVEYoImRpc2NhcmQgc2hvcnQgUU1JIG1lc3Nh
Z2VcbiIpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9pbnRyKHN0cnVjdCB1c2Jf
eGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNj
ID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiBu
b3RpZmljYXRpb247CisJc3RydWN0IHVzYl9wYWdlX2NhY2hlICpwYzsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IEdFVF9JRlAoc2MpOworCWludAkgdG90YWxfbGVuOworCisJbXR4X2Fzc2VydCgmc2Mt
PnNjX211dGV4LCBNQV9PV05FRCk7CisKKwkvKiBGSVhNRSB1c2UgYWN0bGVuIG9yIHRvdGFsX2xl
bj8gKi8KKwl1c2JkX3hmZXJfc3RhdHVzKHhmZXIsICZ0b3RhbF9sZW4sIE5VTEwsIE5VTEwsIE5V
TEwpOworCisJc3dpdGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CisJY2FzZSBVU0JfU1RfVFJB
TlNGRVJSRUQ6CisJCURQUklOVEYoIlJlY2VpdmVkICVkIGJ5dGVzXG4iLCB0b3RhbF9sZW4pOwor
CisJCWlmICh0b3RhbF9sZW4gPCBVQ0RDX05PVElGSUNBVElPTl9MRU5HVEgpIHsKKwkJCURQUklO
VEYoInNob3J0IG5vdGlmaWNhdGlvbiAoJWQ8JWQpXG4iLAorCQkJCQl0b3RhbF9sZW4sIFVDRENf
Tk9USUZJQ0FUSU9OX0xFTkdUSCk7CisJCQlyZXR1cm47CisJCX0KKworCQlwYyA9IHVzYmRfeGZl
cl9nZXRfZnJhbWUoeGZlciwgMCk7CisJCXVzYmRfY29weV9vdXQocGMsIDAsICZub3RpZmljYXRp
b24sIHNpemVvZiAobm90aWZpY2F0aW9uKSk7CisKKwkJaWYgKG5vdGlmaWNhdGlvbi5ibVJlcXVl
c3RUeXBlICE9IFVDRENfTk9USUZJQ0FUSU9OKSB7CisJCQlEUFJJTlRGKCJ1bmV4cGVjdGVkIG5v
dGlmaWNhdGlvbiAodHlwZT0weCUwMngpXG4iLAorCQkJCQlub3RpZmljYXRpb24uYm1SZXF1ZXN0
VHlwZSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5iTm90aWZp
Y2F0aW9uKSB7CisJCWNhc2UgVUNEQ19OX05FVFdPUktfQ09OTkVDVElPTjoKKwkJCWlmIChpZnAt
PmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJCWxvZyhMT0dfREVCVUcsICIlczogbmV0d29yayAl
c2Nvbm5lY3RlZFxuIiwKKwkJCQkJCURFVk5BTShzYyksCisJCQkJCQlVR0VUVyhub3RpZmljYXRp
b24ud1ZhbHVlKQorCQkJCQkJPyAiIiA6ICJkaXMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVDRENf
Tl9SRVNQT05TRV9BVkFJTEFCTEU6CisJCQlEUFJJTlRGTigyLCAidW1iX2ludHI6IHJlc3BvbnNl
IGF2YWlsYWJsZVxuIik7CisJCQkrK3NjLT5zY19ucmVzcDsKKwkJCXVtYl9hZGRfdGFzayhzYywg
dW1iX2dldF9yZXNwb25zZV90YXNrLAorCQkJCQkmc2MtPnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rh
c2tbMF0uaGRyLAorCQkJCQkmc2MtPnNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMV0uaGRyLAor
CQkJCQkwKTsKKwkJCWJyZWFrOworCQljYXNlIFVDRENfTl9DT05ORUNUSU9OX1NQRUVEX0NIQU5H
RToKKwkJCURQUklOVEZOKDIsICJ1bWJfaW50cjogY29ubmVjdGlvbiBzcGVlZCBjaGFuZ2VkXG4i
KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFBSSU5URigidW5leHBlY3RlZCBub3RpZmlj
YXRpb24gKDB4JTAyeClcbiIsCisJCQkJCW5vdGlmaWNhdGlvbi5iTm90aWZpY2F0aW9uKTsKKwkJ
CWJyZWFrOworCQl9CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBVU0JfU1RfU0VUVVA6Cit0
cl9zZXR1cDoKKwkJdXNiZF94ZmVyX3NldF9mcmFtZV9sZW4oeGZlciwgMCwgdXNiZF94ZmVyX21h
eF9sZW4oeGZlcikpOworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKwkJYnJlYWs7CisJ
ZGVmYXVsdDoKKwkJaWYgKHN0YXR1cyAhPSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogc3Rh
cnQgY2xlYXIgc3RhbGwgKi8KKwkJCXVzYmRfeGZlcl9zZXRfc3RhbGwoeGZlcik7CisJCQlnb3Rv
IHRyX3NldHVwOworCQl9CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIERpYWdub3N0aWMgcm91
dGluZXMKKyAqLworc3RhdGljIGNoYXIgKgordW1iX250b3Aoc3RydWN0IHNvY2thZGRyICpzYSkK
K3sKKyNkZWZpbmUgTlVNQlVGUwkJNAorCXN0YXRpYyBjaGFyIGFzdHJbTlVNQlVGU11bSU5FVF9B
RERSU1RSTEVOXTsKKwlzdGF0aWMgdW5zaWduZWQgbmJ1ZiA9IDA7CisJY2hhcgkqczsKKworCXMg
PSBhc3RyW25idWYrK107CisJaWYgKG5idWYgPj0gTlVNQlVGUykKKwkJbmJ1ZiA9IDA7CisKKwlz
d2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJZGVmYXVsdDoKKwkJaW5l
dF9udG9wKEFGX0lORVQsICZzYXRvc2luKHNhKS0+c2luX2FkZHIsIHMsIHNpemVvZiAoYXN0clsw
XSkpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlpbmV0X250b3AoQUZfSU5FVDYsICZz
YXRvc2luNihzYSktPnNpbjZfYWRkciwgcywKKwkJICAgIHNpemVvZiAoYXN0clswXSkpOworCQli
cmVhazsKKwl9CisJcmV0dXJuIHM7Cit9CisKKyNpZmRlZiBVTUJfREVCVUcKK3N0YXRpYyBjaGFy
ICoKK3VtYl91dWlkMnN0cih1aW50OF90IHV1aWRbTUJJTV9VVUlEX0xFTl0pCit7CisJc3RhdGlj
IGNoYXIgdXVpZHN0clsyICogTUJJTV9VVUlEX0xFTiArIDVdOworCisjZGVmaW5lIFVVSURfQkZN
VAkiJTAyWCIKKyNkZWZpbmUgVVVJRF9TRVAJIi0iCisJc25wcmludGYodXVpZHN0ciwgc2l6ZW9m
ICh1dWlkc3RyKSwKKwkgICAgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1U
IFVVSURfU0VQCisJICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAKKwkgICAgVVVJRF9C
Rk1UIFVVSURfQkZNVCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfU0VQ
CisJICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX0JGTVQg
VVVJRF9CRk1ULAorCSAgICB1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlk
WzRdLCB1dWlkWzVdLAorCSAgICB1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1
dWlkWzEwXSwgdXVpZFsxMV0sCisJICAgIHV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1
aWRbMTVdKTsKKwlyZXR1cm4gdXVpZHN0cjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kdW1wKHZv
aWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQJIGkgPSAwOworCXVpbnQ4X3QJKmMgPSBidWY7CisK
KwlpZiAobGVuID09IDApCisJCXJldHVybjsKKwl3aGlsZSAoaSA8IGxlbikgeworCQlpZiAoKGkg
JSAxNikgPT0gMCkgeworCQkJaWYgKGkgPiAwKQorCQkJCWxvZyhMT0dfREVCVUcsICJcbiIpOwor
CQkJbG9nKExPR19ERUJVRywgIiU0ZDogICIsIGkpOworCQl9CisJCWxvZyhMT0dfREVCVUcsICIg
JTAyeCIsICpjKTsKKwkJYysrOworCQlpKys7CisJfQorCWxvZyhMT0dfREVCVUcsICJcbiIpOwor
fQorI2VuZGlmIC8qIFVNQl9ERUJVRyAqLworCitEUklWRVJfTU9EVUxFKHVtYiwgdWh1YiwgdW1i
X2RyaXZlciwgTlVMTCwgTlVMTCk7CitNT0RVTEVfREVQRU5EKHVtYiwgdXNiLCAxLCAxLCAxKTsK
ZGlmZiAtLWdpdCBhL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcuaCBiL3N5cy9kZXYvdXNiL25l
dC9pZl91bWJyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEx
MzRhMzA3MzQ1NQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWJyZWcu
aApAQCAtMCwwICsxLDQ0MSBAQAorLyoJJE9wZW5CU0Q6IGlmX3VtYi5oLHYgMS40IDIwMTcvMDQv
MTggMTM6Mjc6NTUgZ2VyaGFyZCBFeHAgJCAqLworCisvKgorICogT3JpZ2luYWwgY29weXJpZ2h0
IChjKSAyMDE2IGdlbnVhIG1iSCAoT3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBlcm1pc3Npb24g
dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFu
eQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92
aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMK
KyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJ
TkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFU
U09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRI
RVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU
SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF
IFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAyMiBBRElTVEEgU0FTIChyZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisgKiBSZS13cml0
ZSBmb3IgRnJlZUJTRCBieSBQaWVycmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3JhLm5ldD4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAq
ICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICog
TW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9k
ZXZlbG9wZXJzL2RvY3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4wLnBkZgorICov
CisKK3N0cnVjdCB1bWJfdmFsZGVzY3IgeworCWludAkJIHZhbDsKKwljaGFyIGNvbnN0CSpkZXNj
cjsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3VtYl92YWwyZGVzY3IoY29uc3Qgc3RydWN0
IHVtYl92YWxkZXNjciAqdmRwLCBpbnQgdmFsKQoreworCXN0YXRpYyBjaGFyIHN2YWxbMzJdOwor
CisJd2hpbGUgKHZkcC0+ZGVzY3IgIT0gTlVMTCkgeworCQlpZiAodmRwLT52YWwgPT0gdmFsKQor
CQkJcmV0dXJuIHZkcC0+ZGVzY3I7CisJCXZkcCsrOworCX0KKwlzbnByaW50ZihzdmFsLCBzaXpl
b2YgKHN2YWwpLCAiIyVkIiwgdmFsKTsKKwlyZXR1cm4gc3ZhbDsKK30KKworI2RlZmluZSBNQklN
X1JFR1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1fUkVHU1RBVEVfVU5LTk9XTiwJ
InVua25vd24iIH0sCQlcCisJeyBNQklNX1JFR1NUQVRFX0RFUkVHSVNURVJFRCwJIm5vdCByZWdp
c3RlcmVkIiB9LAlcCisJeyBNQklNX1JFR1NUQVRFX1NFQVJDSElORywJInNlYXJjaGluZyIgfSwJ
CVwKKwl7IE1CSU1fUkVHU1RBVEVfSE9NRSwJCSJob21lIG5ldHdvcmsiIH0sCVwKKwl7IE1CSU1f
UkVHU1RBVEVfUk9BTUlORywJInJvYW1pbmcgbmV0d29yayIgfSwJXAorCXsgTUJJTV9SRUdTVEFU
RV9QQVJUTkVSLAkicGFydG5lciBuZXR3b3JrIiB9LAlcCisJeyBNQklNX1JFR1NUQVRFX0RFTklF
RCwJCSJhY2Nlc3MgZGVuaWVkIiB9LAlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1f
REFUQUNMQVNTX0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJeyBNQklNX0RBVEFDTEFTU19OT05FLAkJ
CQkibm9uZSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfR1BSUywJCQkJIkdQUlMiIH0sCVwKKwl7
IE1CSU1fREFUQUNMQVNTX0VER0UsCQkJCSJFREdFIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19V
TVRTLAkJCQkiVU1UUyIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfSFNEUEEsCQkJCSJIU0RQQSIg
fSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfSFNVUEEsCQkJCSJIU1VQQSIgfSwJXAorCXsgTUJJTV9E
QVRBQ0xBU1NfSFNEUEF8TUJJTV9EQVRBQ0xBU1NfSFNVUEEsCSJIU1BBIiB9LAlcCisJeyBNQklN
X0RBVEFDTEFTU19MVEUsCQkJCSJMVEUiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYUlRULAkJ
CQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZETywJCQkiQ0RNQTIwMDAi
IH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZET19SRVZfQSwJCQkiQ0RNQTIwMDAiIH0sCVwK
Kwl7IE1CSU1fREFUQUNMQVNTXzFYRVZEViwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFU
QUNMQVNTXzNYUlRULAkJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTXzFYRVZE
T19SRVZfQiwJCQkiQ0RNQTIwMDAiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX1VNQiwJCQkJIkNE
TUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19DVVNUT00sCQkJImN1c3RvbSIgfSwJXAor
CXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNXzFUTzFfREVTQ1JJUFRJT04obSkJeyAobSks
ICNtIH0KKyNkZWZpbmUgTUJJTV9NRVNTQUdFU19ERVNDUklQVElPTlMgewkJCQlcCisJTUJJTV8x
VE8xX0RFU0NSSVBUSU9OKE1CSU1fT1BFTl9NU0cpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJ
T04oTUJJTV9DTE9TRV9NU0cpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DT01N
QU5EX01TRyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fSE9TVF9FUlJPUl9NU0cp
LAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX09QRU5fRE9ORSksCQkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX0NMT1NFX0RPTkUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DT01NQU5EX0RPTkUpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklN
X0ZVTkNUSU9OX0VSUk9SX01TRyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fSU5E
SUNBVEVfU1RBVFVTX01TRyksCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04obSkJeyBNQklNX1NUQVRVU18gIyMgbSwgI20gfQorI2RlZmluZSBNQklN
X1NUQVRVU19ERVNDUklQVElPTlMgewkJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNV
Q0NFU1MpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQlVTWSksCQkJCQlcCisJTUJJ
TV9TVEFUVVNfREVTQ1JJUFRJT04oRkFJTFVSRSksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQ
VElPTihTSU1fTk9UX0lOU0VSVEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQkFE
X1NJTSksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihQSU5fUkVRVUlSRUQpLAkJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUElOX0RJU0FCTEVEKSwJCQkJXAorCU1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKE5PVF9SRUdJU1RFUkVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oUFJPVklERVJTX05PVF9GT1VORCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9O
KE5PX0RFVklDRV9TVVBQT1JUKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUFJPVklE
RVJfTk9UX1ZJU0lCTEUpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihEQVRBX0NMQVNT
X05PVF9BVkFJTEFCTEUpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBBQ0tFVF9TRVJW
SUNFX0RFVEFDSEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihNQVhfQUNUSVZBVEVE
X0NPTlRFWFRTKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT1RfSU5JVElBTElaRUQp
LAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihWT0lDRV9DQUxMX0lOX1BST0dSRVNTKSwJ
CVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihDT05URVhUX05PVF9BQ1RJVkFURUQpLAkJCVwK
KwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTRVJWSUNFX05PVF9BQ1RJVkFURUQpLAkJCVwKKwlN
QklNX1NUQVRVU19ERVNDUklQVElPTihJTlZBTElEX0FDQ0VTU19TVFJJTkcpLAkJCVwKKwlNQklN
X1NUQVRVU19ERVNDUklQVElPTihJTlZBTElEX1VTRVJfTkFNRV9QV0QpLAkJCVwKKwlNQklNX1NU
QVRVU19ERVNDUklQVElPTihSQURJT19QT1dFUl9PRkYpLAkJCVwKKwlNQklNX1NUQVRVU19ERVND
UklQVElPTihJTlZBTElEX1BBUkFNRVRFUlMpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElP
TihSRUFEX0ZBSUxVUkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oV1JJVEVfRkFJ
TFVSRSksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT19QSE9ORUJPT0spLAkJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUEFSQU1FVEVSX1RPT19MT05HKSwJCQlcCisJTUJJ
TV9TVEFUVVNfREVTQ1JJUFRJT04oU1RLX0JVU1kpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oT1BFUkFUSU9OX05PVF9BTExPV0VEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04oTUVNT1JZX0ZBSUxVUkUpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihJTlZBTElE
X01FTU9SWV9JTkRFWCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE1FTU9SWV9GVUxM
KSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEZJTFRFUl9OT1RfU1VQUE9SVEVEKSwJ
CQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oRFNTX0lOU1RBTkNFX0xJTUlUKSwJCQlcCisJ
TUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9ERVZJQ0VfU0VSVklDRV9PUEVSQVRJT04p
LAlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oQVVUSF9JTkNPUlJFQ1RfQVVUTiksCQkJXAor
CU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhfU1lOQ19GQUlMVVJFKSwJCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oQVVUSF9BTUZfTk9UX1NFVCksCQkJXAorCU1CSU1fU1RBVFVTX0RF
U0NSSVBUSU9OKENPTlRFWFRfTk9UX1NVUFBPUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKFNNU19VTktOT1dOX1NNU0NfQUREUkVTUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oU01TX05FVFdPUktfVElNRU9VVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9O
KFNNU19MQU5HX05PVF9TVVBQT1JURUQpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNN
U19FTkNPRElOR19OT1RfU1VQUE9SVEVEKSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihT
TVNfRk9STUFUX05PVF9TVVBQT1JURUQpLAkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBN
QklNX0VSUk9SX0RFU0NSSVBUSU9OKG0pCXsgTUJJTV9FUlJPUl8gIyMgbSwgI20gfQorI2RlZmlu
ZSBNQklNX0VSUk9SX0RFU0NSSVBUSU9OUyB7CQkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElP
TihUSU1FT1VUX0ZSQUdNRU5UKSwJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihGUkFHTUVO
VF9PVVRfT0ZfU0VRVUVOQ0UpLAkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oTEVOR1RIX01J
U01BVENIKSwJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQVElPTihEVVBMSUNBVEVEX1RJRCksCQkJ
CVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKE5PVF9PUEVORUQpLAkJCQlcCisJTUJJTV9FUlJP
Ul9ERVNDUklQVElPTihVTktOT1dOKSwJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oQ0FO
Q0VMKSwJCQkJCVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKE1BWF9UUkFOU0ZFUiksCQkJCVwK
Kwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9DSURfREVTQ1JJUFRJT05TIHsJCQkJCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0RFVklDRV9DQVBTKSwJCQlcCisJTUJJ
TV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTKSwJXAor
CU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9SQURJT19TVEFURSksCQkJXAorCU1CSU1f
MVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9QSU4pLAkJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fQ0lEX1BJTl9MSVNUKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1f
Q0lEX0hPTUVfUFJPVklERVIpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURf
UFJFRkVSUkVEX1BST1ZJREVSUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lE
X1ZJU0lCTEVfUFJPVklERVJTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURf
UkVHSVNURVJfU1RBVEUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUEFD
S0VUX1NFUlZJQ0UpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfU0lHTkFM
X1NUQVRFKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX0NPTk5FQ1QpLAkJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfUFJPVklTSU9ORURfQ09OVEVYVFMp
LAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9TRVJWSUNFX0FDVElWQVRJT04p
LAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9JUF9DT05GSUdVUkFUSU9OKSwJ
CVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VTKSwJCVwK
KwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfREVWSUNFX1NFUlZJQ0VfU1VCU0NSSUJF
X0xJU1QpLAlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BBQ0tFVF9TVEFUSVNU
SUNTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9DSURfTkVUV09SS19JRExFX0hJ
TlQpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9FTUVSR0VOQ1lfTU9ERSks
CQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9JUF9QQUNLRVRfRklMVEVSUyks
CQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX01VTFRJQ0FSUklFUl9QUk9WSURF
UlMpLAkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1NJTVNUQVRFX0RFU0NSSVBU
SU9OUyB7CQkJCQlcCisJeyBNQklNX1NJTVNUQVRFX05PVElOSVRJQUxJWkVELCAibm90IGluaXRp
YWxpemVkIiB9LAkJXAorCXsgTUJJTV9TSU1TVEFURV9JTklUSUFMSVpFRCwgImluaXRpYWxpemVk
IiB9LAkJCVwKKwl7IE1CSU1fU0lNU1RBVEVfTk9USU5TRVJURUQsICJub3QgaW5zZXJ0ZWQiIH0s
CQkJXAorCXsgTUJJTV9TSU1TVEFURV9CQURTSU0sICJiYWQgdHlwZSIgfSwJCQkJXAorCXsgTUJJ
TV9TSU1TVEFURV9GQUlMVVJFLCAiZmFpbGVkIiB9LAkJCQlcCisJeyBNQklNX1NJTVNUQVRFX05P
VEFDVElWQVRFRCwgIm5vdCBhY3RpdmF0ZWQiIH0sCQlcCisJeyBNQklNX1NJTVNUQVRFX0xPQ0tF
RCwgImxvY2tlZCIgfSwJCQkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1BJTlRZ
UEVfREVTQ1JJUFRJT05TIHsJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfTk9ORSwgIm5vbmUiIH0s
CQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX0NVU1RPTSwgImN1c3RvbSIgfSwJCQkJXAorCXsgTUJJ
TV9QSU5fVFlQRV9QSU4xLCAiUElOMSIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUElOMiwg
IlBJTjIiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX0RFVl9TSU1fUElOLCAiZGV2aWNlIFBJ
TiIgfSwJCQlcCisJeyBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUElOLCAiZGV2aWNlIDFz
dCBQSU4iIH0sCQlcCisJeyBNQklNX1BJTl9UWVBFX05FVFdPUktfUElOLCAibmV0d29yayBQSU4i
IH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1NVQlNFVF9QSU4sICJuZXR3b3JrIHN1
YnNldCBQSU4iIH0sCVwKKwl7IE1CSU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4sICJw
cm92aWRlciBQSU4iIH0sCQlcCisJeyBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QSU4sICJjb3Jw
b3JhdGUgUElOIiB9LAkJXAorCXsgTUJJTV9QSU5fVFlQRV9TVUJTSURZX0xPQ0ssICJzdWJzaWR5
IGxvY2siIH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9QVUsxLCAiUFVLIiB9LAkJCQkJXAorCXsg
TUJJTV9QSU5fVFlQRV9QVUsyLCAiUFVLMiIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfREVW
X0ZJUlNUX1NJTV9QVUssICJkZXZpY2UgMXN0IFBVSyIgfSwJCVwKKwl7IE1CSU1fUElOX1RZUEVf
TkVUV09SS19QVUssICJuZXR3b3JrIFBVSyIgfSwJCQlcCisJeyBNQklNX1BJTl9UWVBFX05FVFdP
UktfU1VCU0VUX1BVSywgIm5ldHdvcmsgc3Vic2V0IFBVSyIgfSwJXAorCXsgTUJJTV9QSU5fVFlQ
RV9TRVJWSUNFX1BST1ZJREVSX1BVSywgInByb3ZpZGVyIFBVSyIgfSwJCVwKKwl7IE1CSU1fUElO
X1RZUEVfQ09SUE9SQVRFX1BVSywgImNvcnBvcmF0ZSBQVUsiIH0sCQlcCisJeyAwLCBOVUxMIH0g
fQorCisjZGVmaW5lIE1CSU1fUEtUU1JWX1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1C
SU1fUEtUU0VSVklDRV9TVEFURV9VTktOT1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX1BL
VFNFUlZJQ0VfU1RBVEVfQVRUQUNISU5HLCAiYXR0YWNoaW5nIiB9LAkJXAorCXsgTUJJTV9QS1RT
RVJWSUNFX1NUQVRFX0FUVEFDSEVELCAiYXR0YWNoZWQiIH0sCQkJXAorCXsgTUJJTV9QS1RTRVJW
SUNFX1NUQVRFX0RFVEFDSElORywgImRldGFjaGluZyIgfSwJCVwKKwl7IE1CSU1fUEtUU0VSVklD
RV9TVEFURV9ERVRBQ0hFRCwgImRldGFjaGVkIiB9LAkJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNk
ZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUyB7CQkJCVwKKwl7IE1CSU1f
QUNUSVZBVElPTl9TVEFURV9VTktOT1dOLCAidW5rbm93biIgfSwJCQlcCisJeyBNQklNX0FDVElW
QVRJT05fU1RBVEVfQUNUSVZBVEVELCAiYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFU
SU9OX1NUQVRFX0FDVElWQVRJTkcsICJhY3RpdmF0aW5nIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFU
SU9OX1NUQVRFX0RFQUNUSVZBVEVELCAiZGVhY3RpdmF0ZWQiIH0sCQlcCisJeyBNQklNX0FDVElW
QVRJT05fU1RBVEVfREVBQ1RJVkFUSU5HLCAiZGVhY3RpdmF0aW5nIiB9LAkJXAorCXsgMCwgTlVM
TCB9IH0KKworLyoKKyAqIERyaXZlciBpbnRlcm5hbCBzdGF0ZQorICovCitlbnVtIHVtYl9zdGF0
ZSB7CisJVU1CX1NfRE9XTiA9IDAsCQkvKiBpbnRlcmZhY2UgZG93biAqLworCVVNQl9TX09QRU4s
CQkvKiBNQklNIGRldmljZSBoYXMgYmVlbiBvcGVuZWQgKi8KKwlVTUJfU19DSUQsCQkvKiBRTUkg
Y2xpZW50IGlkIGFsbG9jYXRlZCAqLworCVVNQl9TX1JBRElPLAkJLyogcmFkaW8gaXMgb24gKi8K
KwlVTUJfU19TSU1SRUFEWSwJCS8qIFNJTSBpcyByZWFkeSAqLworCVVNQl9TX0FUVEFDSEVELAkJ
LyogcGFja2V0IHNlcnZpY2UgaXMgYXR0YWNoZWQgKi8KKwlVTUJfU19DT05ORUNURUQsCS8qIGNv
bm5lY3RlZCB0byBwcm92aWRlciAqLworCVVNQl9TX1VQLAkJLyogaGF2ZSBJUCBjb25maWd1cmF0
aW9uICovCit9OworCisjZGVmaW5lIFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlMgewlc
CisJeyBVTUJfU19ET1dOLCAiZG93biIgfSwJCQlcCisJeyBVTUJfU19PUEVOLCAib3BlbiIgfSwJ
CQlcCisJeyBVTUJfU19DSUQsICJDSUQgYWxsb2NhdGVkIiB9LAkJXAorCXsgVU1CX1NfUkFESU8s
ICJyYWRpbyBvbiIgfSwJCVwKKwl7IFVNQl9TX1NJTVJFQURZLCAiU0lNIGlzIHJlYWR5IiB9LAlc
CisJeyBVTUJfU19BVFRBQ0hFRCwgImF0dGFjaGVkIiB9LAkJXAorCXsgVU1CX1NfQ09OTkVDVEVE
LCAiY29ubmVjdGVkIiB9LAlcCisJeyBVTUJfU19VUCwgInVwIiB9LAkJCVwKKwl7IDAsIE5VTEwg
fSB9CisKKy8qCisgKiBVTUIgcGFyYW1ldGVycyAoU0lPQ1tHU11VTUJQQVJBTSBpb2N0bHMpCisg
Ki8KK3N0cnVjdCB1bWJfcGFyYW1ldGVyIHsKKwlpbnQJCQlvcDsKKwlpbnQJCQlpc19wdWs7CisJ
dWludDE2X3QJCXBpbltNQklNX1BJTl9NQVhMRU5dOworCWludAkJCXBpbmxlbjsKKworCXVpbnQx
Nl90CQluZXdwaW5bTUJJTV9QSU5fTUFYTEVOXTsKKwlpbnQJCQluZXdwaW5sZW47CisKKyNkZWZp
bmUgVU1CX0FQTl9NQVhMRU4JCTEwMAorCXVpbnQxNl90CQlhcG5bVU1CX0FQTl9NQVhMRU5dOwor
CWludAkJCWFwbmxlbjsKKworI2RlZmluZSBVTUJfVVNFUk5BTUVfTUFYTEVOCTIwNQorCXVpbnQx
Nl90CQl1c2VybmFtZVtVTUJfVVNFUk5BTUVfTUFYTEVOXTsKKwlpbnQJCQl1c2VybmFtZWxlbjsK
KworI2RlZmluZSBVTUJfUEFTU1dPUkRfTUFYTEVOCTIwNQorCXVpbnQxNl90CQlwYXNzd29yZFtV
TUJfUEFTU1dPUkRfTUFYTEVOXTsKKwlpbnQJCQlwYXNzd29yZGxlbjsKKworCWludAkJCXJvYW1p
bmc7CisJdWludDMyX3QJCXByZWZlcnJlZGNsYXNzZXM7Cit9OworCisvKgorICogVU1CIGRldmlj
ZSBzdGF0dXMgaW5mbyAoU0lPQ0dVTUJJTkZPIGlvY3RsKQorICovCitzdHJ1Y3QgdW1iX2luZm8g
eworCWVudW0gdW1iX3N0YXRlCQlzdGF0ZTsKKwlpbnQJCQllbmFibGVfcm9hbWluZzsKKyNkZWZp
bmUgVU1CX1BJTl9SRVFVSVJFRAkwCisjZGVmaW5lIFVNQl9QSU5fVU5MT0NLRUQJMQorI2RlZmlu
ZSBVTUJfUFVLX1JFUVVJUkVECTIKKwlpbnQJCQlwaW5fc3RhdGU7CisJaW50CQkJcGluX2F0dGVt
cHRzX2xlZnQ7CisJaW50CQkJYWN0aXZhdGlvbjsKKwlpbnQJCQlzaW1fc3RhdGU7CisJaW50CQkJ
cmVnc3RhdGU7CisJaW50CQkJcmVnbW9kZTsKKwlpbnQJCQlud2Vycm9yOworCWludAkJCXBhY2tl
dHN0YXRlOworCXVpbnQzMl90CQlzdXBwb3J0ZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSBodyBzdXBw
b3J0cyAqLworCXVpbnQzMl90CQlwcmVmZXJyZWRjbGFzc2VzOyAvKiB3aGF0IHRoZSB1c2VyIHBy
ZWZlcnMgKi8KKwl1aW50MzJfdAkJaGlnaGVzdGNsYXNzOwkvKiB3aGF0IHRoZSBuZXR3b3JrIG9m
ZmVycyAqLworCXVpbnQzMl90CQljZWxsY2xhc3M7CisjZGVmaW5lIFVNQl9QUk9WSURFUk5BTUVf
TUFYTEVOCQkyMAorCXVpbnQxNl90CQlwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTl07
CisjZGVmaW5lIFVNQl9QSE9ORU5SX01BWExFTgkJMjIKKwl1aW50MTZfdAkJcG5bVU1CX1BIT05F
TlJfTUFYTEVOXTsKKyNkZWZpbmUgVU1CX1NVQlNDUklCRVJJRF9NQVhMRU4JCTE1CisJdWludDE2
X3QJCXNpZFtVTUJfU1VCU0NSSUJFUklEX01BWExFTl07CisjZGVmaW5lIFVNQl9JQ0NJRF9NQVhM
RU4JCTIwCisJdWludDE2X3QJCWljY2lkW1VNQl9JQ0NJRF9NQVhMRU5dOworI2RlZmluZSBVTUJf
Uk9BTUlOR1RFWFRfTUFYTEVOCQk2MworCXVpbnQxNl90CQlyb2FtaW5ndHh0W1VNQl9ST0FNSU5H
VEVYVF9NQVhMRU5dOworCisjZGVmaW5lIFVNQl9ERVZJRF9NQVhMRU4JCTE4CisJdWludDE2X3QJ
CWRldmlkW1VNQl9ERVZJRF9NQVhMRU5dOworI2RlZmluZSBVTUJfRldJTkZPX01BWExFTgkJMzAK
Kwl1aW50MTZfdAkJZndpbmZvW1VNQl9GV0lORk9fTUFYTEVOXTsKKyNkZWZpbmUgVU1CX0hXSU5G
T19NQVhMRU4JCTMwCisJdWludDE2X3QJCWh3aW5mb1tVTUJfSFdJTkZPX01BWExFTl07CisKKwl1
aW50MTZfdAkJYXBuW1VNQl9BUE5fTUFYTEVOXTsKKwlpbnQJCQlhcG5sZW47CisKKwl1aW50MTZf
dAkJdXNlcm5hbWVbVU1CX1VTRVJOQU1FX01BWExFTl07CisJaW50CQkJdXNlcm5hbWVsZW47CisK
Kwl1aW50MTZfdAkJcGFzc3dvcmRbVU1CX1BBU1NXT1JEX01BWExFTl07CisJaW50CQkJcGFzc3dv
cmRsZW47CisKKyNkZWZpbmUgVU1CX1ZBTFVFX1VOS05PV04JLTk5OQorCWludAkJCXJzc2k7Cisj
ZGVmaW5lIFVNQl9CRVJfRVhDRUxMRU5UCTAKKyNkZWZpbmUgVU1CX0JFUl9WRVJZR09PRAkxCisj
ZGVmaW5lIFVNQl9CRVJfR09PRAkJMgorI2RlZmluZSBVTUJfQkVSX09LCQkzCisjZGVmaW5lIFVN
Ql9CRVJfTUVESVVNCQk0CisjZGVmaW5lIFVNQl9CRVJfQkFECQk1CisjZGVmaW5lIFVNQl9CRVJf
VkVSWUJBRAkJNgorI2RlZmluZSBVTUJfQkVSX0VYVFJFTUVMWUJBRAk3CisJaW50CQkJYmVyOwor
CisJaW50CQkJaHdfcmFkaW9fb247CisJaW50CQkJc3dfcmFkaW9fb247CisKKwl1aW50NjRfdAkJ
dXBsaW5rX3NwZWVkOworCXVpbnQ2NF90CQlkb3dubGlua19zcGVlZDsKKworI2RlZmluZSBVTUJf
TUFYX0ROU1NSVgkJCTIKKwlzdHJ1Y3QgaW5fYWRkcgkJaXB2NGRuc1tVTUJfTUFYX0ROU1NSVl07
Cit9OworCisjaWYgIWRlZmluZWQoaWZyX210dSkKKyNkZWZpbmUgaWZyX210dQlpZnJfaWZydS5p
ZnJ1X21ldHJpYworI2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisvKgorICogVU1CIGRldmljZQor
ICovCitlbnVtIHsKKwlVTUJfSU5UUl9SWCwKKwlVTUJfQlVMS19SWCwKKwlVTUJfQlVMS19UWCwK
KwlVTUJfTl9UUkFOU0ZFUiwKK307CisKK3N0cnVjdCB1bWJfdGFzayB7CisJc3RydWN0IHVzYl9w
cm9jX21zZwkgaGRyOworCXN0cnVjdCB1bWJfc29mdGMJKnNjOworfTsKKworc3RydWN0IHVtYl9z
b2Z0YyB7CisJZGV2aWNlX3QJCSBzY19kZXY7CisJc3RydWN0IGlmbmV0CQkqc2NfaWY7CisjZGVm
aW5lIEdFVF9JRlAoc2MpCSgoc2MpLT5zY19pZikKKwlzdHJ1Y3QgaWZtZWRpYQkJIHNjX2ltOwor
CXN0cnVjdCB1c2JfZGV2aWNlCSpzY191ZGV2OworCXN0cnVjdCB1c2JfeGZlcgkJKnNjX3hmZXJb
VU1CX05fVFJBTlNGRVJdOworCXVpbnQ4X3QJCQkgc2NfaWZhY2VzX2luZGV4WzJdOworCisJaW50
CQkJIHNjX3Zlcl9tYWo7CisJaW50CQkJIHNjX3Zlcl9taW47CisJaW50CQkJIHNjX2N0cmxfbGVu
OworCWludAkJCSBzY19tYXhwa3RsZW47CisJaW50CQkJIHNjX21heHNlc3Npb25zOworCisjZGVm
aW5lIFVNQkZMR19GQ0NfQVVUSF9SRVFVSVJFRAkweDAwMDEKKyNkZWZpbmUgVU1CRkxHX05PX0lO
RVQ2CQkJMHgwMDAyCisJdWludDMyX3QJCSBzY19mbGFnczsKKwlpbnQJCQkgc2NfY2lkOworCisJ
c3RydWN0IHVzYl9wcm9jZXNzCSBzY190YXNrcXVldWU7CisJc3RydWN0IHVtYl90YXNrCQkgc2Nf
cHJvY19hdHRhY2hfdGFza1syXTsKKwlzdHJ1Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX3N0YXJ0X3Rh
c2tbMl07CisJc3RydWN0IHVtYl90YXNrCQkgc2NfcHJvY19zdGF0ZV90YXNrWzJdOworCXN0cnVj
dCB1bWJfdGFzawkJIHNjX3Byb2NfZ2V0X3Jlc3BvbnNlX3Rhc2tbMl07CisKKwlpbnQJCQkgc2Nf
bnJlc3A7CisJc3RydWN0IG10eAkJIHNjX211dGV4OworCXN0cnVjdCB1c2JfY2FsbG91dAkgc2Nf
c3RhdGVjaGdfdGltZXI7CisJY2hhcgkJCSBzY19keWluZzsKKwljaGFyCQkJIHNjX2F0dGFjaGVk
OworCisJdWludDhfdAkJCSBzY19jdHJsX2lmYWNlbm87CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJ
KnNjX2RhdGFfaWZhY2U7CisKKwl2b2lkCQkJKnNjX3Jlc3BfYnVmOworCXZvaWQJCQkqc2NfY3Ry
bF9tc2c7CisKKwl2b2lkCQkJKnNjX3J4X2J1ZjsKKwl1aW50MzJfdAkJIHNjX3J4X2J1ZnN6Owor
CXVuc2lnbmVkCQkgc2NfcnhfbmVycjsKKwlzdHJ1Y3QgaWZxdWV1ZQkJIHNjX3J4X3F1ZXVlOwor
CisJdm9pZAkJCSpzY190eF9idWY7CisJc3RydWN0IG1idWYJCSpzY190eF9tOworCXVpbnQzMl90
CQkgc2NfdHhfYnVmc3o7CisJdWludDMyX3QJCSBzY190eF9zZXE7CisKKwl1aW50MzJfdAkJIHNj
X3RpZDsKKworI2RlZmluZSBzY19zdGF0ZQkJc2NfaW5mby5zdGF0ZQorI2RlZmluZSBzY19yb2Ft
aW5nCQlzY19pbmZvLmVuYWJsZV9yb2FtaW5nCisJc3RydWN0IHVtYl9pbmZvCQkgc2NfaW5mbzsK
K307CisjZW5kaWYgLyogX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvc3lzL2Rldi91c2IvbmV0L21i
aW0uaCBiL3N5cy9kZXYvdXNiL25ldC9tYmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi41ZDdlY2ZmMTE0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3Vz
Yi9uZXQvbWJpbS5oCkBAIC0wLDAgKzEsNzI0IEBACisvKgkkT3BlbkJTRDogbWJpbS5oLHYgMS40
IDIwMTcvMDQvMTggMTM6Mjc6NTUgZ2VyaGFyZCBFeHAgJCAqLworCisvKgorICogT3JpZ2luYWwg
Y29weXJpZ2h0IChjKSAyMDE2IGdlbnVhIG1iSCAoT3BlbkJTRCB2ZXJzaW9uKQorICoKKyAqIFBl
cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh
cmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFu
dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdB
UlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwg
RElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VT
CisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJ
VFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBP
VEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENv
cHlyaWdodCAoYykgMjAyMiBBRElTVEEgU0FTIChyZS13cml0ZSBmb3IgRnJlZUJTRCkKKyAqCisg
KiBSZS13cml0ZSBmb3IgRnJlZUJTRCBieSBQaWVycmUgUHJvbmNoZXJ5IDxwaWVycmVAZGVmb3Jh
Lm5ldD4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICog
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvKgorICogTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwKKyAqIGh0dHA6Ly93d3cu
dXNiLm9yZy9kZXZlbG9wZXJzL2RvY3MvZGV2Y2xhc3NfZG9jcy9NQklNLUNvbXBsaWFuY2UtMS4w
LnBkZgorICovCisjaWZuZGVmIF9NQklNX0hfCisjZGVmaW5lIF9NQklNX0hfCisKKyNkZWZpbmUg
VURFU0NTVUJfTUJJTQkJCTI3CisjZGVmaW5lIE1CSU1fSU5URVJGQUNFX0FMVFNFVFRJTkcJMQor
CisjZGVmaW5lIE1CSU1fUkVTRVRfRlVOQ1RJT04JCTB4MDUKKworLyoKKyAqIFJlZ2lzdHJhdGlv
biBzdGF0ZSAoTUJJTV9SRUdJU1RFUl9TVEFURSkKKyAqLworI2RlZmluZSBNQklNX1JFR1NUQVRF
X1VOS05PV04JCQkwCisjZGVmaW5lIE1CSU1fUkVHU1RBVEVfREVSRUdJU1RFUkVECQkxCisjZGVm
aW5lIE1CSU1fUkVHU1RBVEVfU0VBUkNISU5HCQkJMgorI2RlZmluZSBNQklNX1JFR1NUQVRFX0hP
TUUJCQkzCisjZGVmaW5lIE1CSU1fUkVHU1RBVEVfUk9BTUlORwkJCTQKKyNkZWZpbmUgTUJJTV9S
RUdTVEFURV9QQVJUTkVSCQkJNQorI2RlZmluZSBNQklNX1JFR1NUQVRFX0RFTklFRAkJCTYKKwor
LyoKKyAqIERhdGEgY2xhc3NlcyBtYXNrIChNQklNX0RBVEFfQ0xBU1MpCisgKi8KKyNkZWZpbmUg
TUJJTV9EQVRBQ0xBU1NfTk9ORQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1Nf
R1BSUwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfRURHRQkJCTB4MDAwMDAw
MDIKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfVU1UUwkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUJJ
TV9EQVRBQ0xBU1NfSFNEUEEJCQkweDAwMDAwMDA4CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0hT
VVBBCQkJMHgwMDAwMDAxMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19MVEUJCQkweDAwMDAwMDIw
CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTXzFYUlRUCQkJMHgwMDAxMDAwMAorI2RlZmluZSBNQklN
X0RBVEFDTEFTU18xWEVWRE8JCQkweDAwMDIwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTXzFY
RVZET19SRVZfQQkJMHgwMDA0MDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRFYJCQkw
eDAwMDgwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTXzNYUlRUCQkJMHgwMDEwMDAwMAorI2Rl
ZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRE9fUkVWX0IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgTUJJ
TV9EQVRBQ0xBU1NfVU1CCQkJMHgwMDQwMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19DVVNU
T00JCQkweDgwMDAwMDAwCisKKy8qCisgKiBDZWxsIGNsYXNzZXMgbWFzayAoTUJJTV9DRUxMVUxB
Ul9DTEFTUykKKyAqLworI2RlZmluZSBNQklNX0NFTExDTEFTU19HU00JCQkweDAwMDAwMDAxCisj
ZGVmaW5lIE1CSU1fQ0VMTENMQVNTX0NETUEJCQkweDAwMDAwMDAyCisKKy8qCisgKiBVVUlEcwor
ICovCisjZGVmaW5lIE1CSU1fVVVJRF9MRU4JCTE2CisKKyNkZWZpbmUgTUJJTV9VVUlEX0JBU0lD
X0NPTk5FQ1QgewkJCQlcCisJCTB4YTIsIDB4ODksIDB4Y2MsIDB4MzMsIDB4YmMsIDB4YmIsIDB4
OGIsIDB4NGYsCVwKKwkJMHhiNiwgMHhiMCwgMHgxMywgMHgzZSwgMHhjMiwgMHhhYSwgMHhlNiwg
MHhkZglcCisJfQorCisjZGVmaW5lIE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVUIHsJCQkJXAor
CQkweDdlLCAweDVlLCAweDJhLCAweDdlLCAweDRlLCAweDZmLCAweDcyLCAweDcyLAlcCisJCTB4
NzMsIDB4NmIsIDB4NjUsIDB4NmUsIDB4N2UsIDB4NWUsIDB4MmEsIDB4N2UJXAorCX0KKworI2Rl
ZmluZSBNQklNX1VVSURfQ09OVEVYVF9WUE4gewkJCQlcCisJCTB4OWIsIDB4OWYsIDB4N2IsIDB4
YmUsIDB4ODksIDB4NTIsIDB4NDQsIDB4YjcsCVwKKwkJMHg4MywgMHhhYywgMHhjYSwgMHg0MSwg
MHgzMSwgMHg4ZCwgMHhmNywgMHhhMAlcCisJfQorCisjZGVmaW5lIE1CSU1fVVVJRF9RTUlfTUJJ
TSB7CQkJCVwKKwkJMHhkMSwgMHhhMywgMHgwYiwgMHhjMiwgMHhmOSwgMHg3YSwgMHg2ZSwgMHg0
MywJXAorCQkweGJmLCAweDY1LCAweGM3LCAweGUyLCAweDRmLCAweGIwLCAweGYwLCAweGQzCVwK
Kwl9CisKKyNkZWZpbmUgTUJJTV9DVFJMTVNHX01JTkxFTgkJNjQKKyNkZWZpbmUgTUJJTV9DVFJM
TVNHX01BWExFTgkJKDQgKiAxMjA0KQorCisjZGVmaW5lIE1CSU1fTUFYU0VHU1pfTUlOVkFMCQko
MiAqIDEwMjQpCisKKy8qCisgKiBDb250cm9sIG1lc3NhZ2VzIChob3N0IHRvIGZ1bmN0aW9uKQor
ICovCisjZGVmaW5lIE1CSU1fT1BFTl9NU0cJCQkxVQorI2RlZmluZSBNQklNX0NMT1NFX01TRwkJ
CTJVCisjZGVmaW5lIE1CSU1fQ09NTUFORF9NU0cJCTNVCisjZGVmaW5lIE1CSU1fSE9TVF9FUlJP
Ul9NU0cJCTRVCisKKy8qCisgKiBDb250cm9sIG1lc3NhZ2VzIChmdW5jdGlvbiB0byBob3N0KQor
ICovCisjZGVmaW5lIE1CSU1fT1BFTl9ET05FCQkJMHg4MDAwMDAwMVUKKyNkZWZpbmUgTUJJTV9D
TE9TRV9ET05FCQkJMHg4MDAwMDAwMlUKKyNkZWZpbmUgTUJJTV9DT01NQU5EX0RPTkUJCTB4ODAw
MDAwMDNVCisjZGVmaW5lIE1CSU1fRlVOQ1RJT05fRVJST1JfTVNHCQkweDgwMDAwMDA0VQorI2Rl
ZmluZSBNQklNX0lORElDQVRFX1NUQVRVU19NU0cJMHg4MDAwMDAwN1UKKworLyoKKyAqIEdlbmVy
aWMgc3RhdHVzIGNvZGVzCisgKi8KKyNkZWZpbmUgTUJJTV9TVEFUVVNfU1VDQ0VTUwkJCTAKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfQlVTWQkJCTEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRkFJTFVSRQkJ
CTIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU0lNX05PVF9JTlNFUlRFRAkJMworI2RlZmluZSBNQklN
X1NUQVRVU19CQURfU0lNCQkJNAorI2RlZmluZSBNQklNX1NUQVRVU19QSU5fUkVRVUlSRUQJCTUK
KyNkZWZpbmUgTUJJTV9TVEFUVVNfUElOX0RJU0FCTEVECQk2CisjZGVmaW5lIE1CSU1fU1RBVFVT
X05PVF9SRUdJU1RFUkVECQk3CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BST1ZJREVSU19OT1RfRk9V
TkQJCTgKKyNkZWZpbmUgTUJJTV9TVEFUVVNfTk9fREVWSUNFX1NVUFBPUlQJCTkKKyNkZWZpbmUg
TUJJTV9TVEFUVVNfUFJPVklERVJfTk9UX1ZJU0lCTEUJMTAKKyNkZWZpbmUgTUJJTV9TVEFUVVNf
REFUQV9DTEFTU19OT1RfQVZBSUxBQkxFCTExCisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBQ0tFVF9T
RVJWSUNFX0RFVEFDSEVECTEyCisjZGVmaW5lIE1CSU1fU1RBVFVTX01BWF9BQ1RJVkFURURfQ09O
VEVYVFMJMTMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfTk9UX0lOSVRJQUxJWkVECQkxNAorI2RlZmlu
ZSBNQklNX1NUQVRVU19WT0lDRV9DQUxMX0lOX1BST0dSRVNTCTE1CisjZGVmaW5lIE1CSU1fU1RB
VFVTX0NPTlRFWFRfTk9UX0FDVElWQVRFRAkxNgorI2RlZmluZSBNQklNX1NUQVRVU19TRVJWSUNF
X05PVF9BQ1RJVkFURUQJMTcKKyNkZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJRF9BQ0NFU1NfU1RS
SU5HCTE4CisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfVVNFUl9OQU1FX1BXRAkxOQorI2Rl
ZmluZSBNQklNX1NUQVRVU19SQURJT19QT1dFUl9PRkYJCTIwCisjZGVmaW5lIE1CSU1fU1RBVFVT
X0lOVkFMSURfUEFSQU1FVEVSUwkJMjEKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUkVBRF9GQUlMVVJF
CQkyMgorI2RlZmluZSBNQklNX1NUQVRVU19XUklURV9GQUlMVVJFCQkyMworI2RlZmluZSBNQklN
X1NUQVRVU19OT19QSE9ORUJPT0sJCTI1CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BBUkFNRVRFUl9U
T09fTE9ORwkJMjYKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU1RLX0JVU1kJCQkyNworI2RlZmluZSBN
QklNX1NUQVRVU19PUEVSQVRJT05fTk9UX0FMTE9XRUQJMjgKKyNkZWZpbmUgTUJJTV9TVEFUVVNf
TUVNT1JZX0ZBSUxVUkUJCTI5CisjZGVmaW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfTUVNT1JZX0lO
REVYCTMwCisjZGVmaW5lIE1CSU1fU1RBVFVTX01FTU9SWV9GVUxMCQkJMzEKKyNkZWZpbmUgTUJJ
TV9TVEFUVVNfRklMVEVSX05PVF9TVVBQT1JURUQJMzIKKyNkZWZpbmUgTUJJTV9TVEFUVVNfRFNT
X0lOU1RBTkNFX0xJTUlUCQkzMworI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX0RFVklDRV9T
RVJWSUNFX09QRVJBVElPTgkzNAorI2RlZmluZSBNQklNX1NUQVRVU19BVVRIX0lOQ09SUkVDVF9B
VVROCQkzNQorI2RlZmluZSBNQklNX1NUQVRVU19BVVRIX1NZTkNfRkFJTFVSRQkJMzYKKyNkZWZp
bmUgTUJJTV9TVEFUVVNfQVVUSF9BTUZfTk9UX1NFVAkJMzcKKyNkZWZpbmUgTUJJTV9TVEFUVVNf
Q09OVEVYVF9OT1RfU1VQUE9SVEVECTM4CisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19VTktOT1dO
X1NNU0NfQUREUkVTUwkxMDAKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU01TX05FVFdPUktfVElNRU9V
VAkJMTAxCisjZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19MQU5HX05PVF9TVVBQT1JURUQJMTAyCisj
ZGVmaW5lIE1CSU1fU1RBVFVTX1NNU19FTkNPRElOR19OT1RfU1VQUE9SVEVECTEwMworI2RlZmlu
ZSBNQklNX1NUQVRVU19TTVNfRk9STUFUX05PVF9TVVBQT1JURUQJMTA0CisKKy8qCisgKiBNZXNz
YWdlIGZvcm1hdHMKKyAqLworc3RydWN0IG1iaW1fbXNnaGRyIHsKKwkvKiBNc2cgaGVhZGVyICov
CisJdWludDMyX3QJdHlwZTsJCS8qIG1lc3NhZ2UgdHlwZSAqLworCXVpbnQzMl90CWxlbjsJCS8q
IG1lc3NhZ2UgbGVuZ3RoICovCisJdWludDMyX3QJdGlkOwkJLyogdHJhbnNhY3Rpb24gaWQgKi8K
K30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2ZyYWdoZHIgeworCXVpbnQzMl90CW5mcmFnOwkJ
LyogdG90YWwgIyBvZiBmcmFnbWVudHMgKi8KKwl1aW50MzJfdAljdXJyZnJhZzsJLyogY3VycmVu
dCBmcmFnbWVudCAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fZnJhZ21lbnRlZF9tc2df
aGRyIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJh
ZzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2gyZl9vcGVubXNnIHsKKwlzdHJ1Y3QgbWJp
bV9tc2doZHIJaGRyOworCXVpbnQzMl90CQltYXhsZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9oMmZfY2xvc2Vtc2cgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7Cit9IF9fcGFja2Vk
OworCitzdHJ1Y3QgbWJpbV9oMmZfY21kIHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0
cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsKKwl1aW50OF90CQkJZGV2aWRbTUJJTV9VVUlEX0xFTl07
CisJdWludDMyX3QJCWNpZDsJCS8qIGNvbW1hbmQgaWQgKi8KKyNkZWZpbmUgTUJJTV9DTURPUF9R
UlkJCTAKKyNkZWZpbmUgTUJJTV9DTURPUF9TRVQJCTEKKwl1aW50MzJfdAkJb3A7CisJdWludDMy
X3QJCWluZm9sZW47CisJdWludDhfdAkJCWluZm9bXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBt
YmltX2YyaF9pbmRpY2F0ZV9zdGF0dXMgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisJc3Ry
dWN0IG1iaW1fZnJhZ2hkcglmcmFnOworCXVpbnQ4X3QJCQlkZXZpZFtNQklNX1VVSURfTEVOXTsK
Kwl1aW50MzJfdAkJY2lkOwkJLyogY29tbWFuZCBpZCAqLworCXVpbnQzMl90CQlpbmZvbGVuOwor
CXVpbnQ4X3QJCQlpbmZvW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfaG9zdGVy
ciB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKworI2RlZmluZSBNQklNX0VSUk9SX1RJTUVP
VVRfRlJBR01FTlQJCTEKKyNkZWZpbmUgTUJJTV9FUlJPUl9GUkFHTUVOVF9PVVRfT0ZfU0VRVUVO
Q0UJMgorI2RlZmluZSBNQklNX0VSUk9SX0xFTkdUSF9NSVNNQVRDSAkJMworI2RlZmluZSBNQklN
X0VSUk9SX0RVUExJQ0FURURfVElECQk0CisjZGVmaW5lIE1CSU1fRVJST1JfTk9UX09QRU5FRAkJ
CTUKKyNkZWZpbmUgTUJJTV9FUlJPUl9VTktOT1dOCQkJNgorI2RlZmluZSBNQklNX0VSUk9SX0NB
TkNFTAkJCTcKKyNkZWZpbmUgTUJJTV9FUlJPUl9NQVhfVFJBTlNGRVIJCQk4CisJdWludDMyX3QJ
CWVycjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lIHsKKwlz
dHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCWludDMyX3QJCQlzdGF0dXM7Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbWJpbV9mMmhfY21kZG9uZSB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlz
dHJ1Y3QgbWJpbV9mcmFnaGRyCWZyYWc7CisJdWludDhfdAkJCWRldmlkW01CSU1fVVVJRF9MRU5d
OworCXVpbnQzMl90CQljaWQ7CQkvKiBjb21tYW5kIGlkICovCisJaW50MzJfdAkJCXN0YXR1czsK
Kwl1aW50MzJfdAkJaW5mb2xlbjsKKwl1aW50OF90CQkJaW5mb1tdOworfSBfX3BhY2tlZDsKKwor
LyoKKyAqIE1lc3NhZ2VzIGFuZCBjb21tYW5kcyBmb3IgTUJJTV9VVUlEX0JBU0lDX0NPTk5FQ1QK
KyAqLworI2RlZmluZSBNQklNX0NJRF9ERVZJQ0VfQ0FQUwkJCQkxCisjZGVmaW5lIE1CSU1fQ0lE
X1NVQlNDUklCRVJfUkVBRFlfU1RBVFVTCQkyCisjZGVmaW5lIE1CSU1fQ0lEX1JBRElPX1NUQVRF
CQkJCTMKKyNkZWZpbmUgTUJJTV9DSURfUElOCQkJCQk0CisjZGVmaW5lIE1CSU1fQ0lEX1BJTl9M
SVNUCQkJCTUKKyNkZWZpbmUgTUJJTV9DSURfSE9NRV9QUk9WSURFUgkJCQk2CisjZGVmaW5lIE1C
SU1fQ0lEX1BSRUZFUlJFRF9QUk9WSURFUlMJCQk3CisjZGVmaW5lIE1CSU1fQ0lEX1ZJU0lCTEVf
UFJPVklERVJTCQkJOAorI2RlZmluZSBNQklNX0NJRF9SRUdJU1RFUl9TVEFURQkJCQk5CisjZGVm
aW5lIE1CSU1fQ0lEX1BBQ0tFVF9TRVJWSUNFCQkJCTEwCisjZGVmaW5lIE1CSU1fQ0lEX1NJR05B
TF9TVEFURQkJCQkxMQorI2RlZmluZSBNQklNX0NJRF9DT05ORUNUCQkJCTEyCisjZGVmaW5lIE1C
SU1fQ0lEX1BST1ZJU0lPTkVEX0NPTlRFWFRTCQkJMTMKKyNkZWZpbmUgTUJJTV9DSURfU0VSVklD
RV9BQ1RJVkFUSU9OCQkJMTQKKyNkZWZpbmUgTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTgkJCTE1
CisjZGVmaW5lIE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFUwkJCTE2CisjZGVmaW5lIE1CSU1fQ0lE
X0RFVklDRV9TRVJWSUNFX1NVQlNDUklCRV9MSVNUCQkxOQorI2RlZmluZSBNQklNX0NJRF9QQUNL
RVRfU1RBVElTVElDUwkJCTIwCisjZGVmaW5lIE1CSU1fQ0lEX05FVFdPUktfSURMRV9ISU5UCQkJ
MjEKKyNkZWZpbmUgTUJJTV9DSURfRU1FUkdFTkNZX01PREUJCQkJMjIKKyNkZWZpbmUgTUJJTV9D
SURfSVBfUEFDS0VUX0ZJTFRFUlMJCQkyMworI2RlZmluZSBNQklNX0NJRF9NVUxUSUNBUlJJRVJf
UFJPVklERVJTCQkJMjQKKworc3RydWN0IG1iaW1fY2lkX3N1YnNjcmliZXJfcmVhZHlfaW5mbyB7
CisjZGVmaW5lIE1CSU1fU0lNU1RBVEVfTk9USU5JVElBTElaRUQJCTAKKyNkZWZpbmUgTUJJTV9T
SU1TVEFURV9JTklUSUFMSVpFRAkJMQorI2RlZmluZSBNQklNX1NJTVNUQVRFX05PVElOU0VSVEVE
CQkyCisjZGVmaW5lIE1CSU1fU0lNU1RBVEVfQkFEU0lNCQkJMworI2RlZmluZSBNQklNX1NJTVNU
QVRFX0ZBSUxVUkUJCQk0CisjZGVmaW5lIE1CSU1fU0lNU1RBVEVfTk9UQUNUSVZBVEVECQk1Cisj
ZGVmaW5lIE1CSU1fU0lNU1RBVEVfTE9DS0VECQkJNgorCXVpbnQzMl90CXJlYWR5OworCisJdWlu
dDMyX3QJc2lkX29mZnM7CisJdWludDMyX3QJc2lkX3NpemU7CisKKwl1aW50MzJfdAlpY2Nfb2Zm
czsKKwl1aW50MzJfdAlpY2Nfc2l6ZTsKKworI2RlZmluZSBNQklNX1NJTVVOSVFFSURfTk9ORQkJ
CTAKKyNkZWZpbmUgTUJJTV9TSU1VTklRRUlEX1BST1RFQ1QJCQkxCisJdWludDMyX3QJaW5mbzsK
KworCXVpbnQzMl90CW5vX3BuOworCXN0cnVjdCB7CisJCXVpbnQzMl90CW9mZnM7CisJCXVpbnQz
Ml90CXNpemU7CisJfQorCQkJcG5bXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9y
YWRpb19zdGF0ZSB7CisjZGVmaW5lIE1CSU1fUkFESU9fU1RBVEVfT0ZGCQkJMAorI2RlZmluZSBN
QklNX1JBRElPX1NUQVRFX09OCQkJMQorCXVpbnQzMl90CXN0YXRlOworfSBfX3BhY2tlZDsKKwor
c3RydWN0IG1iaW1fY2lkX3JhZGlvX3N0YXRlX2luZm8geworCXVpbnQzMl90CWh3X3N0YXRlOwor
CXVpbnQzMl90CXN3X3N0YXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BpbiB7
CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfTk9ORQkJCTAKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9D
VVNUT00JCQkxCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfUElOMQkJCTIKKyNkZWZpbmUgTUJJTV9Q
SU5fVFlQRV9QSU4yCQkJMworI2RlZmluZSBNQklNX1BJTl9UWVBFX0RFVl9TSU1fUElOCQk0Cisj
ZGVmaW5lIE1CSU1fUElOX1RZUEVfREVWX0ZJUlNUX1NJTV9QSU4JCTUKKyNkZWZpbmUgTUJJTV9Q
SU5fVFlQRV9ORVRXT1JLX1BJTgkJNgorI2RlZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfU1VC
U0VUX1BJTgk3CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QSU4JOAor
I2RlZmluZSBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QSU4JCTkKKyNkZWZpbmUgTUJJTV9QSU5f
VFlQRV9TVUJTSURZX0xPQ0sJCTEwCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfUFVLMQkJCTExCisj
ZGVmaW5lIE1CSU1fUElOX1RZUEVfUFVLMgkJCTEyCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfREVW
X0ZJUlNUX1NJTV9QVUsJCTEzCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19QVUsJCTE0
CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19TVUJTRVRfUFVLCTE1CisjZGVmaW5lIE1C
SU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QVUsJMTYKKyNkZWZpbmUgTUJJTV9QSU5fVFlQ
RV9DT1JQT1JBVEVfUFVLCQkxNworCXVpbnQzMl90CXR5cGU7CisKKyNkZWZpbmUgTUJJTV9QSU5f
T1BfRU5URVIJCQkwCisjZGVmaW5lIE1CSU1fUElOX09QX0VOQUJMRQkJCTEKKyNkZWZpbmUgTUJJ
TV9QSU5fT1BfRElTQUJMRQkJCTIKKyNkZWZpbmUgTUJJTV9QSU5fT1BfQ0hBTkdFCQkJMworCXVp
bnQzMl90CW9wOworCXVpbnQzMl90CXBpbl9vZmZzOworCXVpbnQzMl90CXBpbl9zaXplOworCXVp
bnQzMl90CW5ld3Bpbl9vZmZzOworCXVpbnQzMl90CW5ld3Bpbl9zaXplOworI2RlZmluZSBNQklN
X1BJTl9NQVhMRU4JMzIKKwl1aW50OF90CQlkYXRhWzIgKiBNQklNX1BJTl9NQVhMRU5dOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3Bpbl9pbmZvIHsKKwl1aW50MzJfdAl0eXBlOwor
CisjZGVmaW5lIE1CSU1fUElOX1NUQVRFX1VOTE9DS0VECQkJMAorI2RlZmluZSBNQklNX1BJTl9T
VEFURV9MT0NLRUQJCQkxCisJdWludDMyX3QJc3RhdGU7CisJdWludDMyX3QJcmVtYWluaW5nX2F0
dGVtcHRzOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3Bpbl9saXN0X2luZm8gewor
CXN0cnVjdCBtYmltX3Bpbl9kZXNjIHsKKworI2RlZmluZSBNQklNX1BJTk1PREVfTk9UU1VQUE9S
VEVECQkwCisjZGVmaW5lIE1CSU1fUElOTU9ERV9FTkFCTEVECQkJMQorI2RlZmluZSBNQklNX1BJ
Tk1PREVfRElTQUJMRUQJCQkyCisJCXVpbnQzMl90CW1vZGU7CisKKyNkZWZpbmUgTUJJTV9QSU5G
T1JNQVRfVU5LTk9XTgkJCTAKKyNkZWZpbmUgTUJJTV9QSU5GT1JNQVRfTlVNRVJJQwkJCTEKKyNk
ZWZpbmUgTUJJTV9QSU5GT1JNQVRfQUxQSEFOVU1FUklDCQkyCisJCXVpbnQzMl90CWZvcm1hdDsK
KworCQl1aW50MzJfdAltaW5sZW47CisJCXVpbnQzMl90CW1heGxlbjsKKwl9CisJCXBpbjEsCisJ
CXBpbjIsCisJCWRldl9zaW1fcGluLAorCQlmaXJzdF9kZXZfc2ltX3BpbiwKKwkJbmV0X3BpbiwK
KwkJbmV0X3N1Yl9waW4sCisJCXN2cF9waW4sCisJCWNvcnBfcGluLAorCQlzdWJzaWR5X2xvY2ss
CisJCWN1c3RvbTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9kZXZpY2VfY2FwcyB7
CisjZGVmaW5lIE1CSU1fREVWVFlQRV9VTktOT1dOCQkJMAorI2RlZmluZSBNQklNX0RFVlRZUEVf
RU1CRURERUQJCQkxCisjZGVmaW5lIE1CSU1fREVWVFlQRV9SRU1PVkFCTEUJCQkyCisjZGVmaW5l
IE1CSU1fREVWVFlQRV9SRU1PVEUJCQkzCisJdWludDMyX3QJZGV2dHlwZTsKKworCXVpbnQzMl90
CWNlbGxjbGFzczsJLyogdmFsdWVzOiBNQklNX0NFTExVTEFSX0NMQVNTICovCisJdWludDMyX3QJ
dm9pY2VjbGFzczsKKwl1aW50MzJfdAlzaW1jbGFzczsKKwl1aW50MzJfdAlkYXRhY2xhc3M7CS8q
IHZhbHVlczogTUJJTV9EQVRBX0NMQVNTICovCisJdWludDMyX3QJc21zY2FwczsKKwl1aW50MzJf
dAljbnRybGNhcHM7CisJdWludDMyX3QJbWF4X3Nlc3Npb25zOworCisJdWludDMyX3QJY3VzdGRh
dGFjbGFzc19vZmZzOworCXVpbnQzMl90CWN1c3RkYXRhY2xhc3Nfc2l6ZTsKKworCXVpbnQzMl90
CWRldmlkX29mZnM7CisJdWludDMyX3QJZGV2aWRfc2l6ZTsKKworCXVpbnQzMl90CWZ3aW5mb19v
ZmZzOworCXVpbnQzMl90CWZ3aW5mb19zaXplOworCisJdWludDMyX3QJaHdpbmZvX29mZnM7CisJ
dWludDMyX3QJaHdpbmZvX3NpemU7CisKKwl1aW50MzJfdAlkYXRhW107Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbWJpbV9jaWRfcmVnaXN0cmF0aW9uX3N0YXRlIHsKKwl1aW50MzJfdAlwcm92aWRf
b2ZmczsKKwl1aW50MzJfdAlwcm92aWRfc2l6ZTsKKworI2RlZmluZSBNQklNX1JFR0FDVElPTl9B
VVRPTUFUSUMJCTAKKyNkZWZpbmUgTUJJTV9SRUdBQ1RJT05fTUFOVUFMCQkJMQorCXVpbnQzMl90
CXJlZ2FjdGlvbjsKKwl1aW50MzJfdAlkYXRhX2NsYXNzOworCisJdWludDMyX3QJZGF0YVtdOwor
fSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZV9pbmZvIHsK
Kwl1aW50MzJfdAlud2Vycm9yOworCisJdWludDMyX3QJcmVnc3RhdGU7CS8qIHZhbHVlczogTUJJ
TV9SRUdJU1RFUl9TVEFURSAqLworCisjZGVmaW5lIE1CSU1fUkVHTU9ERV9VTktOT1dOCQkJMAor
I2RlZmluZSBNQklNX1JFR01PREVfQVVUT01BVElDCQkJMQorI2RlZmluZSBNQklNX1JFR01PREVf
TUFOVUFMCQkJMgorCXVpbnQzMl90CXJlZ21vZGU7CisKKwl1aW50MzJfdAlhdmFpbGNsYXNzZXM7
CS8qIHZhbHVlczogTUJJTV9EQVRBX0NMQVNTICovCisJdWludDMyX3QJY3VyY2VsbGNsYXNzOwkv
KiB2YWx1ZXM6IE1CSU1fQ0VMTFVMQVJfQ0xBU1MgKi8KKworCXVpbnQzMl90CXByb3ZpZF9vZmZz
OworCXVpbnQzMl90CXByb3ZpZF9zaXplOworCisJdWludDMyX3QJcHJvdm5hbWVfb2ZmczsKKwl1
aW50MzJfdAlwcm92bmFtZV9zaXplOworCisJdWludDMyX3QJcm9hbWluZ3R4dF9vZmZzOworCXVp
bnQzMl90CXJvYW1pbmd0eHRfc2l6ZTsKKworI2RlZmluZSBNQklNX1JFR0ZMQUdTX05PTkUJCQkw
CisjZGVmaW5lIE1CSU1fUkVHRkxBR1NfTUFOVUFMX05PVF9BVkFJTEFCTEUJMQorI2RlZmluZSBN
QklNX1JFR0ZMQUdTX1BBQ0tFVFNFUlZJQ0VfQVVUT0FUVEFDSAkyCisJdWludDMyX3QJcmVnZmxh
ZzsKKworCXVpbnQzMl90CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9w
YWNrZXRfc2VydmljZSB7CisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9BQ1RJT05fQVRUQUNICQkw
CisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9BQ1RJT05fREVUQUNICQkxCisJdWludDMyX3QJYWN0
aW9uOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BhY2tldF9zZXJ2aWNlX2luZm8g
eworCXVpbnQzMl90CW53ZXJyb3I7CisKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX1VO
S05PV04JCTAKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSElORwkJMQorI2Rl
ZmluZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfQVRUQUNIRUQJCTIKKyNkZWZpbmUgTUJJTV9QS1RT
RVJWSUNFX1NUQVRFX0RFVEFDSElORwkJMworI2RlZmluZSBNQklNX1BLVFNFUlZJQ0VfU1RBVEVf
REVUQUNIRUQJCTQKKwl1aW50MzJfdAlzdGF0ZTsKKworCXVpbnQzMl90CWhpZ2hlc3RfZGF0YWNs
YXNzOworCXVpbnQ2NF90CXVwbGlua19zcGVlZDsKKwl1aW50NjRfdAlkb3dubGlua19zcGVlZDsK
K30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9zaWduYWxfc3RhdGUgeworCXVpbnQzMl90
CXJzc2k7CisJdWludDMyX3QJZXJyX3JhdGU7CisJdWludDMyX3QJc3NfaW50dmw7CisJdWludDMy
X3QJcnNzaV90aHI7CisJdWludDMyX3QJZXJyX3RocjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBt
YmltX2NpZF9jb25uZWN0IHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9D
T05ORUNUX0RFQUNUSVZBVEUJCTAKKyNkZWZpbmUgTUJJTV9DT05ORUNUX0FDVElWQVRFCQkxCisJ
dWludDMyX3QJY29tbWFuZDsKKworI2RlZmluZSBNQklNX0FDQ0VTU19NQVhMRU4JCTIwMAorCXVp
bnQzMl90CWFjY2Vzc19vZmZzOworCXVpbnQzMl90CWFjY2Vzc19zaXplOworCisjZGVmaW5lIE1C
SU1fVVNFUl9NQVhMRU4JCTUxMAorCXVpbnQzMl90CXVzZXJfb2ZmczsKKwl1aW50MzJfdAl1c2Vy
X3NpemU7CisKKyNkZWZpbmUgTUJJTV9QQVNTV0RfTUFYTEVOCQk1MTAKKwl1aW50MzJfdAlwYXNz
d2Rfb2ZmczsKKwl1aW50MzJfdAlwYXNzd2Rfc2l6ZTsKKworI2RlZmluZSBNQklNX0NPTVBSRVNT
SU9OX05PTkUJCTAKKyNkZWZpbmUgTUJJTV9DT01QUkVTU0lPTl9FTkFCTEUJCTEKKwl1aW50MzJf
dAljb21wcmVzc2lvbjsKKworI2RlZmluZSBNQklNX0FVVEhQUk9UX05PTkUJCTAKKyNkZWZpbmUg
TUJJTV9BVVRIUFJPVF9QQVAJCTEKKyNkZWZpbmUgTUJJTV9BVVRIUFJPVF9DSEFQCQkyCisjZGVm
aW5lIE1CSU1fQVVUSFBST1RfTVNDSEFQCQkzCisJdWludDMyX3QJYXV0aHByb3Q7CisKKyNkZWZp
bmUgTUJJTV9DT05URVhUX0lQVFlQRV9ERUZBVUxUCTAKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQ
VFlQRV9JUFY0CTEKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9JUFY2CTIKKyNkZWZpbmUg
TUJJTV9DT05URVhUX0lQVFlQRV9JUFY0VjYJMworI2RlZmluZSBNQklNX0NPTlRFWFRfSVBUWVBF
X0lQVjRBTkRWNgk0CisJdWludDMyX3QJaXB0eXBlOworCisJdWludDhfdAkJY29udGV4dFtNQklN
X1VVSURfTEVOXTsKKworCXVpbnQ4X3QJCWRhdGFbTUJJTV9BQ0NFU1NfTUFYTEVOICsgTUJJTV9V
U0VSX01BWExFTiArCisJCQkgICAgIE1CSU1fUEFTU1dEX01BWExFTl07CisKK30gX19wYWNrZWQ7
CisKK3N0cnVjdCBtYmltX2NpZF9jb25uZWN0X2luZm8geworCXVpbnQzMl90CXNlc3Npb25pZDsK
KworI2RlZmluZSBNQklNX0FDVElWQVRJT05fU1RBVEVfVU5LTk9XTgkJMAorI2RlZmluZSBNQklN
X0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVEVECQkxCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9T
VEFURV9BQ1RJVkFUSU5HCTIKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZB
VEVECTMKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVElORwk0CisJdWlu
dDMyX3QJYWN0aXZhdGlvbjsKKworCXVpbnQzMl90CXZvaWNlOworCXVpbnQzMl90CWlwdHlwZTsK
Kwl1aW50OF90CQljb250ZXh0W01CSU1fVVVJRF9MRU5dOworCXVpbnQzMl90CW53ZXJyb3I7Cit9
IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfaXB2NF9lbGVtZW50IHsKKwl1aW50MzJfdAlw
cmVmaXhsZW47CisJdWludDMyX3QJYWRkcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2Np
ZF9pcHY2X2VsZW1lbnQgeworCXVpbnQzMl90CXByZWZpeGxlbjsKKwl1aW50OF90CQlhZGRyWzE2
XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9pcF9jb25maWd1cmF0aW9uX2luZm8g
eworCXVpbnQzMl90CXNlc3Npb25pZDsKKworI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfQUREUklO
Rk8JMHgwMDAxCisjZGVmaW5lIE1CSU1fSVBDT05GX0hBU19HV0lORk8JCTB4MDAwMgorI2RlZmlu
ZSBNQklNX0lQQ09ORl9IQVNfRE5TSU5GTwkJMHgwMDA0CisjZGVmaW5lIE1CSU1fSVBDT05GX0hB
U19NVFVJTkZPCQkweDAwMDgKKwl1aW50MzJfdAlpcHY0X2F2YWlsYWJsZTsKKwl1aW50MzJfdAlp
cHY2X2F2YWlsYWJsZTsKKworCXVpbnQzMl90CWlwdjRfbmFkZHI7CisJdWludDMyX3QJaXB2NF9h
ZGRyb2ZmczsKKwl1aW50MzJfdAlpcHY2X25hZGRyOworCXVpbnQzMl90CWlwdjZfYWRkcm9mZnM7
CisKKwl1aW50MzJfdAlpcHY0X2d3b2ZmczsKKwl1aW50MzJfdAlpcHY2X2d3b2ZmczsKKworCXVp
bnQzMl90CWlwdjRfbmRuc3NydjsKKwl1aW50MzJfdAlpcHY0X2Ruc3Nydm9mZnM7CisJdWludDMy
X3QJaXB2Nl9uZG5zc3J2OworCXVpbnQzMl90CWlwdjZfZG5zc3J2b2ZmczsKKworCXVpbnQzMl90
CWlwdjRfbXR1OworCXVpbnQzMl90CWlwdjZfbXR1OworCisJdWludDMyX3QJZGF0YVtdOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3BhY2tldF9zdGF0aXN0aWNzX2luZm8geworCXVp
bnQzMl90CWluX2Rpc2NhcmRzOworCXVpbnQzMl90CWluX2Vycm9yczsKKwl1aW50NjRfdAlpbl9v
Y3RldHM7CisJdWludDY0X3QJaW5fcGFja2V0czsKKwl1aW50NjRfdAlvdXRfb2N0ZXRzOworCXVp
bnQ2NF90CW91dF9wYWNrZXRzOworCXVpbnQzMl90CW91dF9lcnJvcnM7CisJdWludDMyX3QJb3V0
X2Rpc2NhcmRzOworfSBfX3BhY2tlZDsKKworCisjaWZkZWYgX0tFUk5FTAorCitzdHJ1Y3QgbWJp
bV9kZXNjcmlwdG9yIHsKKwl1Qnl0ZQliTGVuZ3RoOworCXVCeXRlCWJEZXNjcmlwdG9yVHlwZTsK
Kwl1Qnl0ZQliRGVzY3JpcHRvclN1YnR5cGU7CisjZGVmaW5lIE1CSU1fVkVSX01BSk9SKHYpCSgo
KHYpID4+IDgpICYgMHgwZikKKyNkZWZpbmUgTUJJTV9WRVJfTUlOT1IodikJKCh2KSAmIDB4MGYp
CisJdVdvcmQJYmNkTUJJTVZlcnNpb247CisJdVdvcmQJd01heENvbnRyb2xNZXNzYWdlOworCXVC
eXRlCWJOdW1iZXJGaWx0ZXJzOworCXVCeXRlCWJNYXhGaWx0ZXJTaXplOworCXVXb3JkCXdNYXhT
ZWdtZW50U2l6ZTsKKwl1Qnl0ZQlibU5ldHdvcmtDYXBhYmlsaXRpZXM7Cit9IF9fcGFja2VkOwor
CisvKgorICogTkNNIFBhcmFtZXRlcnMKKyAqLworI2RlZmluZSBOQ01fR0VUX05UQl9QQVJBTUVU
RVJTCTB4ODAKKworc3RydWN0IG5jbV9udGJfcGFyYW1ldGVycyB7CisJdVdvcmQJd0xlbmd0aDsK
Kwl1V29yZAlibU50YkZvcm1hdHNTdXBwb3J0ZWQ7CisjZGVmaW5lIE5DTV9GT1JNQVRfTlRCMTYJ
MHgwMDAxCisjZGVmaW5lIE5DTV9GT1JNQVRfTlRCMzIJMHgwMDAyCisJdURXb3JkCWR3TnRiSW5N
YXhTaXplOworCXVXb3JkCXdOZHBJbkRpdmlzb3I7CisJdVdvcmQJd05kcEluUGF5bG9hZFJlbWFp
bmRlcjsKKwl1V29yZAl3TmRwSW5BbGlnbm1lbnQ7CisJdVdvcmQJd1Jlc2VydmVkMTsKKwl1RFdv
cmQJZHdOdGJPdXRNYXhTaXplOworCXVXb3JkCXdOZHBPdXREaXZpc29yOworCXVXb3JkCXdOZHBP
dXRQYXlsb2FkUmVtYWluZGVyOworCXVXb3JkCXdOZHBPdXRBbGlnbm1lbnQ7CisJdVdvcmQJd050
Yk91dE1heERhdGFncmFtczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBOQ00gRW5jb2RpbmcKKyAq
LworI2RlZmluZSBNQklNX0hEUjE2X0xFTglcCisJKHNpemVvZihzdHJ1Y3QgbmNtX2hlYWRlcjE2
KSArIHNpemVvZihzdHJ1Y3QgbmNtX3BvaW50ZXIxNikpCisjZGVmaW5lIE1CSU1fSERSMzJfTEVO
CVwKKwkoc2l6ZW9mKHN0cnVjdCBuY21faGVhZGVyMzIpICsgc2l6ZW9mKHN0cnVjdCBuY21fcG9p
bnRlcjMyKSkKKworc3RydWN0IG5jbV9oZWFkZXIxNiB7CisjZGVmaW5lIE5DTV9IRFIxNl9TSUcJ
CTB4NDg0ZDQzNGUKKwl1RFdvcmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0hlYWRlckxlbmd0aDsK
Kwl1V29yZAl3U2VxdWVuY2U7CisJdVdvcmQJd0Jsb2NrTGVuZ3RoOworCXVXb3JkCXdOZHBJbmRl
eDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY21faGVhZGVyMzIgeworI2RlZmluZSBOQ01fSERS
MzJfU0lHCQkweDY4NmQ2MzZlCisJdURXb3JkCWR3U2lnbmF0dXJlOworCXVXb3JkCXdIZWFkZXJM
ZW5ndGg7CisJdVdvcmQJd1NlcXVlbmNlOworCXVEV29yZAlkd0Jsb2NrTGVuZ3RoOworCXVEV29y
ZAlkd05kcEluZGV4OworfSBfX3BhY2tlZDsKKworCisjZGVmaW5lIE1CSU1fTkNNX05USF9TSURT
SElGVAkyNAorI2RlZmluZSBNQklNX05DTV9OVEhfR0VUU0lEKHMpCSgoKHMpID4gTUJJTV9OQ01f
TlRIX1NJRFNISUZUKSAmIDB4ZmYpCisKK3N0cnVjdCBuY21fcG9pbnRlcjE2X2RncmFtIHsKKwl1
V29yZAl3RGF0YWdyYW1JbmRleDsKKwl1V29yZAl3RGF0YWdyYW1MZW47Cit9IF9fcGFja2VkOwor
CitzdHJ1Y3QgbmNtX3BvaW50ZXIxNiB7CisjZGVmaW5lIE1CSU1fTkNNX05USDE2X0lQUwkgMHgw
MDUzNTA0OQorI2RlZmluZSBNQklNX05DTV9OVEgxNl9JU0lTRyhzKSAoKChzKSAmIDB4MDBmZmZm
ZmYpID09IE1CSU1fTkNNX05USDE2X0lQUykKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMTZfU0lHKHMp
CVwKKwkJKCgoKHMpICYgMHhmZikgPDwgTUJJTV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNN
X05USDE2X0lQUykKKwl1RFdvcmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29y
ZAl3TmV4dE5kcEluZGV4OworCisJLyogTWluaW11bSBpcyB0d28gZGF0YWdyYW1zLCBidXQgY2Fu
IGJlIG1vcmUgKi8KKwlzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSBkZ3JhbVsyXTsKK30gX19w
YWNrZWQ7CisKK3N0cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtIHsKKwl1RFdvcmQJZHdEYXRhZ3Jh
bUluZGV4OworCXVEV29yZAlkd0RhdGFncmFtTGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5j
bV9wb2ludGVyMzIgeworI2RlZmluZSBNQklNX05DTV9OVEgzMl9JUFMJMHgwMDczNzA2OQorI2Rl
ZmluZSBNQklNX05DTV9OVEgzMl9JU0lTRyhzKQlcCisJCSgoKHMpICYgMHgwMGZmZmZmZikgPT0g
TUJJTV9OQ01fTlRIMzJfSVBTKQorI2RlZmluZSBNQklNX05DTV9OVEgzMl9TSUcocykJCVwKKwkJ
KCgoKHMpICYgMHhmZikgPDwgTUJJTV9OQ01fTlRIX1NJRFNISUZUKSB8IE1CSU1fTkNNX05USDMy
X0lQUykKKwl1RFdvcmQJZHdTaWduYXR1cmU7CisJdVdvcmQJd0xlbmd0aDsKKwl1V29yZAl3UmVz
ZXJ2ZWQ2OworCXVEV29yZAlkd05leHROZHBJbmRleDsKKwl1RFdvcmQJZHdSZXNlcnZlZDEyOwor
CisJLyogTWluaW11bSBpcyB0d28gZGF0YWdyYW1zLCBidXQgY2FuIGJlIG1vcmUgKi8KKwlzdHJ1
Y3QgbmNtX3BvaW50ZXIzMl9kZ3JhbSBkZ3JhbVsyXTsKK30gX19wYWNrZWQ7CisKKyNlbmRpZiAv
KiBfS0VSTkVMICovCisKKyNlbmRpZiAvKiBfTUJJTV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL21v
ZHVsZXMvdXNiL01ha2VmaWxlIGIvc3lzL21vZHVsZXMvdXNiL01ha2VmaWxlCmluZGV4IDJkMTY2
YTk1ZGMwMy4uYWM0ODM0NThlYTJhIDEwMDY0NAotLS0gYS9zeXMvbW9kdWxlcy91c2IvTWFrZWZp
bGUKKysrIGIvc3lzL21vZHVsZXMvdXNiL01ha2VmaWxlCkBAIC00OSw3ICs0OSw3IEBAIFNVQkRJ
UiArPSAke19ydW19ICR7X3J1bn0gJHtfcnVuZnd9ICR7X3VhdGh9IHVwZ3QgdXNpZSB1cmFsICR7
X3p5ZH0gJHtfdXJ0d30KIFNVQkRJUiArPSBhdHAgY2Z1bWFzcyB1aGlkIHVoaWRfc25lcyB1a2Jk
IHVtcyB1ZGJwIHVlcCB3bXQgd3NwIHVnb2xkIHVsZWQgXAogCSAgdXNiaGlkCiBTVUJESVIgKz0g
dWNvbSB1M2cgdWFyayB1YnNhIHVic2VyIHVjaGNvbSB1Y3ljb20gdWZvbWEgdWZ0ZGkgdWdlbnNh
IHVpcGFxIHVscHQgXAotCSAgdW1jdCB1bWNzIHVtb2RlbSB1bW9zY29tIHVwbGNvbSB1c2xjb20g
dXZpc29yIHV2c2NvbQorCSAgdW1iIHVtY3QgdW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxjb20gdXNs
Y29tIHV2aXNvciB1dnNjb20KIFNVQkRJUiArPSBpMmN0aW55dXNiCiBTVUJESVIgKz0gY3AyMTEy
CiBTVUJESVIgKz0gdWRsCmRpZmYgLS1naXQgYS9zeXMvbW9kdWxlcy91c2IvdW1iL01ha2VmaWxl
IGIvc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmMxNzU5MmQ5NGRmYgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9tb2R1
bGVzL3VzYi91bWIvTWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIworIworIyBDb3B5cmlnaHQg
KGMpIDIwMDggSGFucyBQZXR0ZXIgU2VsYXNreS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworUz0gICAgICR7U1JDVE9QfS9zeXMKKwor
LlBBVEg6ICRTL2Rldi91c2IvbmV0CisKK0tNT0Q9CXVtYgorU1JDUz0Jb3B0X2J1cy5oIG9wdF91
c2IuaCBkZXZpY2VfaWYuaCBidXNfaWYuaCB1c2JfaWYuaCB1c2JkZXZzLmggXAorCWlmX3VtYi5j
CisKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KZGlmZiAtLWdpdCBhL3N5cy9uZXQvaWZfbWVkaWEu
YyBiL3N5cy9uZXQvaWZfbWVkaWEuYwppbmRleCAwY2M4OGEwOTI5ZTkuLjg5ODhkOGEyYmNmMSAx
MDA2NDQKLS0tIGEvc3lzL25ldC9pZl9tZWRpYS5jCisrKyBiL3N5cy9uZXQvaWZfbWVkaWEuYwpA
QCAtMzk4LDYgKzM5OCwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRp
b24gaWZtX3N1YnR5cGVfYXRtX2Rlc2NyaXB0aW9uc1tdID0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
aWZtZWRpYV9kZXNjcmlwdGlvbiBpZm1fc3VidHlwZV9hdG1fb3B0aW9uX2Rlc2NyaXB0aW9uc1td
ID0KICAgICBJRk1fU1VCVFlQRV9BVE1fT1BUSU9OX0RFU0NSSVBUSU9OUzsKIAorc3RhdGljIGNv
bnN0IHN0cnVjdCBpZm1lZGlhX2Rlc2NyaXB0aW9uIGlmbV9zdWJ0eXBlX21iaW1fZGVzY3JpcHRp
b25zW10gPQorICAgIElGTV9TVUJUWVBFX01CSU1fREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29u
c3Qgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRpb24gaWZtX3N1YnR5cGVfbWJpbV9vcHRpb25fZGVz
Y3JpcHRpb25zW10gPQorICAgIElGTV9TVUJUWVBFX01CSU1fT1BUSU9OX0RFU0NSSVBUSU9OUzsK
Kwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZm1lZGlhX2Rlc2NyaXB0aW9uIGlmbV9zdWJ0eXBlX3No
YXJlZF9kZXNjcmlwdGlvbnNbXSA9CiAgICAgSUZNX1NVQlRZUEVfU0hBUkVEX0RFU0NSSVBUSU9O
UzsKIApAQCAtNDI3LDYgKzQzMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlmbWVkaWFfdHlw
ZV90b19zdWJ0eXBlIGlmbWVkaWFfdHlwZXNfdG9fc3VidHlwZXNbXSA9IHsKIAkgICZpZm1fc3Vi
dHlwZV9hdG1fb3B0aW9uX2Rlc2NyaXB0aW9uc1swXSwKIAkgIE5VTEwsCiAJfSwKKwl7CisJICAm
aWZtX3N1YnR5cGVfbWJpbV9kZXNjcmlwdGlvbnNbMF0sCisJICAmaWZtX3N1YnR5cGVfbWJpbV9v
cHRpb25fZGVzY3JpcHRpb25zWzBdLAorCSAgTlVMTCwKKwl9LAogfTsKIAogLyoKZGlmZiAtLWdp
dCBhL3N5cy9uZXQvaWZfbWVkaWEuaCBiL3N5cy9uZXQvaWZfbWVkaWEuaAppbmRleCBjMDNhNGM4
N2IzNTUuLjI4MTJjYTJmNGFkYSAxMDA2NDQKLS0tIGEvc3lzL25ldC9pZl9tZWRpYS5oCisrKyBi
L3N5cy9uZXQvaWZfbWVkaWEuaApAQCAtMzM4LDYgKzMzOCwxOCBAQCB1aW50NjRfdAlpZm1lZGlh
X2JhdWRyYXRlKGludCk7CiAjZGVmaW5lCUlGTV9BVE1fTk9TQ1JBTUIJMHgwMDAwMDIwMAkvKiBu
byBzY3JhbWJsaW5nICovCiAjZGVmaW5lCUlGTV9BVE1fVU5BU1NJR05FRAkweDAwMDAwNDAwCS8q
IHVuYXNzaWduZWQgY2VsbHMgKi8KIAorLyoKKyAqIE1CSU0KKyAqLworI2RlZmluZQlJRk1fTUJJ
TQkweDAwMDAwMTAwCisjZGVmaW5lCUlGTV9NQklNX1VOS05PV04JMworI2RlZmluZQlJRk1fTUJJ
TV9HUFJTCQk0CisjZGVmaW5lCUlGTV9NQklNX0VER0UJCTUKKyNkZWZpbmUJSUZNX01CSU1fVU1U
UwkJNgorI2RlZmluZQlJRk1fTUJJTV9IU0RQQQkJNworI2RlZmluZQlJRk1fTUJJTV9IU1VQQQkJ
OAorI2RlZmluZQlJRk1fTUJJTV9MVEUJCTkKKwogLyoKICAqIFNoYXJlZCBtZWRpYSBzdWItdHlw
ZXMKICAqLwpAQCAtNDI1LDYgKzQzNyw3IEBAIHN0cnVjdCBpZm1lZGlhX2Rlc2NyaXB0aW9uIHsK
IAl7IElGTV9FVEhFUiwJCSJFdGhlcm5ldCIgfSwJCQkJXAogCXsgSUZNX0lFRUU4MDIxMSwJIklF
RUUgODAyLjExIFdpcmVsZXNzIEV0aGVybmV0IiB9LAlcCiAJeyBJRk1fQVRNLAkJIkFUTSIgfSwJ
CQkJXAorCXsgSUZNX01CSU0sCQkiTUJJTSIgfSwJCQkJXAogCXsgMCwgTlVMTCB9LAkJCQkJCQlc
CiB9CiAKQEAgLTcyOCw2ICs3NDEsMzEgQEAgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRpb24gewog
CXsgMCwgTlVMTCB9LAkJCQkJCQlcCiB9CiAKKyNkZWZpbmUJSUZNX1NVQlRZUEVfTUJJTV9ERVND
UklQVElPTlMgewkJCQkJXAorCXsgSUZNX01CSU1fVU5LTk9XTiwJIlVua25vd24iIH0sCQkJCVwK
Kwl7IElGTV9NQklNX0dQUlMsCSJHUFJTIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9FREdFLAkiRURH
RSIgfSwJCQkJXAorCXsgSUZNX01CSU1fVU1UUywJIlVNVFMiIH0sCQkJCVwKKwl7IElGTV9NQklN
X0hTRFBBLAkiSFNEUEEiIH0sCQkJCVwKKwl7IElGTV9NQklNX0hTVVBBLAkiSFNVUEEiIH0sCQkJ
CVwKKwl7IElGTV9NQklNX0xURSwJCSJMVEUiIH0sCQkJCVwKK30KKworI2RlZmluZQlJRk1fU1VC
VFlQRV9NQklNX0FMSUFTRVMgewkJCQkJXAorCXsgSUZNX01CSU1fVU5LTk9XTiwJIlVOS05PV04i
IH0sCQkJCVwKKwl7IElGTV9NQklNX0dQUlMsCSIyRyIgfSwJCQkJCVwKKwl7IElGTV9NQklNX0VE
R0UsCSIyLjVHIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9VTVRTLAkiM0ciIH0sCQkJCQlcCisJeyBJ
Rk1fTUJJTV9IU0RQQSwJIjNHIiB9LAkJCQkJXAorCXsgSUZNX01CSU1fSFNVUEEsCSIzRyIgfSwJ
CQkJCVwKKwl7IElGTV9NQklNX0xURSwJCSI0RyIgfSwJCQkJCVwKKwl7IDAsIE5VTEwgfSwJCQkJ
CQkJXAorfQorCisjZGVmaW5lCUlGTV9TVUJUWVBFX01CSU1fT1BUSU9OX0RFU0NSSVBUSU9OUyB7
CQkJCVwKKwl7IDAsIE5VTEwgfSwJCQkJCQkJXAorfQorCiAjZGVmaW5lCUlGTV9TVUJUWVBFX1NI
QVJFRF9ERVNDUklQVElPTlMgewkJCQlcCiAJeyBJRk1fQVVUTywJImF1dG9zZWxlY3QiIH0sCQkJ
CQlcCiAJeyBJRk1fTUFOVUFMLAkibWFudWFsIiB9LAkJCQkJXApAQCAtOTMyLDYgKzk3MCw4IEBA
IHN0cnVjdCBpZm1lZGlhX3N0YXR1c19kZXNjcmlwdGlvbiB7CiAJICAgIHsgIm5vIG5ldHdvcmsi
LCAiYWN0aXZlIiB9IH0sCQkJCVwKIAl7IElGTV9BVE0sCQlJRk1fQVZBTElELAlJRk1fQUNUSVZF
LAkJXAogCSAgICB7ICJubyBuZXR3b3JrIiwgImFjdGl2ZSIgfSB9LAkJCQlcCisJeyBJRk1fTUJJ
TSwJCUlGTV9BVkFMSUQsCUlGTV9BQ1RJVkUsCQlcCisJICAgIHsgIm5vIG5ldHdvcmsiLCAiYWN0
aXZlIiB9IH0sCQkJCVwKIAl7IDAsCQkJMCwJCTAsCQkJXAogCSAgICB7IE5VTEwsIE5VTEwgfSB9
CQkJCQkJXAogfQpkaWZmIC0tZ2l0IGEvc3lzL25ldC9pZl90eXBlcy5oIGIvc3lzL25ldC9pZl90
eXBlcy5oCmluZGV4IGIwNjkyYWY2OTMwOC4uNGNiMjlmZDUxZWJkIDEwMDY0NAotLS0gYS9zeXMv
bmV0L2lmX3R5cGVzLmgKKysrIGIvc3lzL25ldC9pZl90eXBlcy5oCkBAIC0yNTQsNiArMjU0LDcg
QEAgdHlwZWRlZiBlbnVtIHsKIAlJRlRfUEZMT0cJPSAweGY2LAkJLyogUEYgcGFja2V0IGZpbHRl
ciBsb2dnaW5nICovCiAJSUZUX1BGU1lOQwk9IDB4ZjcsCQkvKiBQRiBwYWNrZXQgZmlsdGVyIHN5
bmNocm9uaXphdGlvbiAqLwogCUlGVF9XSVJFR1VBUkQJPSAweGY4LAkJLyogV2lyZUd1YXJkIHR1
bm5lbCAqLworCUlGVF9NQklNCT0gMHhmOQkJLyogTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2Ug
TW9kZWwgKi8KIH0gaWZUeXBlOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3lzL3N5cy9zb2NraW8uaCBi
L3N5cy9zeXMvc29ja2lvLmgKaW5kZXggODI0Yjc3ZTU3YTE3Li5jZjYxMjA3OWMyZjMgMTAwNjQ0
Ci0tLSBhL3N5cy9zeXMvc29ja2lvLmgKKysrIGIvc3lzL3N5cy9zb2NraW8uaApAQCAtMTQ3LDQg
KzE0Nyw4IEBACiAjZGVmaW5lCVNJT0NTSUZDQVBOVglfSU9XKCdpJywgMTU1LCBzdHJ1Y3QgaWZy
ZXEpCS8qIHNldCBJRiBmZWF0dXJlcyAqLwogI2RlZmluZQlTSU9DR0lGQ0FQTlYJX0lPV1IoJ2kn
LCAxNTYsIHN0cnVjdCBpZnJlcSkJLyogZ2V0IElGIGZlYXR1cmVzICovCiAKKyNkZWZpbmUJU0lP
Q0dVTUJJTkZPCV9JT1dSKCdpJywgMTU3LCBzdHJ1Y3QgaWZyZXEpCS8qIGdldCBNQklNIGluZm8g
Ki8KKyNkZWZpbmUJU0lPQ1NVTUJQQVJBTQkgX0lPVygnaScsIDE1OCwgc3RydWN0IGlmcmVxKQkv
KiBzZXQgTUJJTSBwYXJhbSAqLworI2RlZmluZQlTSU9DR1VNQlBBUkFNCV9JT1dSKCdpJywgMTU5
LCBzdHJ1Y3QgaWZyZXEpCS8qIGdldCBNQklNIHBhcmFtICovCisKICNlbmRpZiAvKiAhX1NZU19T
T0NLSU9fSF8gKi8KLS0gCjIuNDYuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255918</attachid>
            <date>2024-12-17 16:18:33 +0000</date>
            <delta_ts>2024-12-17 16:18:33 +0000</delta_ts>
            <desc>0001-Introduce-the-USB-umb-4-network-driver.patch</desc>
            <filename>0001-Introduce-the-USB-umb-4-network-driver.patch</filename>
            <type>text/plain</type>
            <size>155782</size>
            <attacher name="Pierre Pronchery">khorben</attacher>
            
              <data encoding="base64">RnJvbSBhMDkzNTUxNjBhMzg4ZTJhNDgwMTMxMTZmODk0NTg1MjQ3YTMwYTA4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUHJvbmNoZXJ5IDxraG9yYmVuQGRlZm9yYS5vcmc+
CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMjA6MjA6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJ
bnRyb2R1Y2UgdGhlIFVTQiB1bWIoNCkgbmV0d29yayBkcml2ZXIKClRoaXMgaW5jbHVkZXM6Cgoq
IFRoZSB1bWIoNCkga2VybmVsIGRyaXZlcgoqIFRoZSB1bWJjdGwoOCkgY29tcGFuaW9uIHRvb2wK
KiBDb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gaWZjb25maWcoOCkgKG1lZGlhIHR5cGUuLi4pCi0t
LQogbGliL2xpYmlmY29uZmlnL2xpYmlmY29uZmlnX21lZGlhLmMgfCAgICA1ICsKIHNiaW4vTWFr
ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzYmluL3VtYmN0bC9NYWtlZmls
ZSAgICAgICAgICAgICAgICB8ICAgIDggKwogc2Jpbi91bWJjdGwvdW1iY3RsLjggICAgICAgICAg
ICAgICAgfCAgMTcyICsrCiBzYmluL3VtYmN0bC91bWJjdGwuYyAgICAgICAgICAgICAgICB8ICA3
NjcgKysrKysrKwogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUgICAgICAgICAgICAgfCAgICAxICsK
IHNoYXJlL21hbi9tYW40L3VtYi40ICAgICAgICAgICAgICAgIHwgICA5MCArCiBzeXMvY29uZi9m
aWxlcyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3lzL2Rldi91c2IvbmV0L2lmX3Vt
Yi5jICAgICAgICAgICAgfCAyOTMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzL2Rl
di91c2IvbmV0L2lmX3VtYnJlZy5oICAgICAgICAgfCAgNDQxICsrKysKIHN5cy9kZXYvdXNiL25l
dC9tYmltLmggICAgICAgICAgICAgIHwgIDcyNCArKysrKysrCiBzeXMvbW9kdWxlcy91c2IvTWFr
ZWZpbGUgICAgICAgICAgICB8ICAgIDIgKy0KIHN5cy9tb2R1bGVzL3VzYi91bWIvTWFrZWZpbGUg
ICAgICAgIHwgICAzNSArCiBzeXMvbmV0L2lmX21lZGlhLmMgICAgICAgICAgICAgICAgICB8ICAg
MTEgKwogc3lzL25ldC9pZl9tZWRpYS5oICAgICAgICAgICAgICAgICAgfCAgIDQwICsKIHN5cy9u
ZXQvaWZfdHlwZXMuaCAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzeXMvc3lzL3NvY2tpby5o
ICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogMTcgZmlsZXMgY2hhbmdlZCwgNTIzMyBpbnNl
cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2Jpbi91bWJjdGwv
TWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzYmluL3VtYmN0bC91bWJjdGwuOAogY3JlYXRl
IG1vZGUgMTAwNjQ0IHNiaW4vdW1iY3RsL3VtYmN0bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hh
cmUvbWFuL21hbjQvdW1iLjQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvaWZf
dW1iLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L3VzYi9uZXQvbWJpbS5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmlsZQoKZGlmZiAtLWdpdCBhL2xpYi9saWJpZmNv
bmZpZy9saWJpZmNvbmZpZ19tZWRpYS5jIGIvbGliL2xpYmlmY29uZmlnL2xpYmlmY29uZmlnX21l
ZGlhLmMKaW5kZXggMWY3NGJkZTAzNDYxLi43Mzk4NDdiYmQyNTQgMTAwNjQ0Ci0tLSBhL2xpYi9s
aWJpZmNvbmZpZy9saWJpZmNvbmZpZ19tZWRpYS5jCisrKyBiL2xpYi9saWJpZmNvbmZpZy9saWJp
ZmNvbmZpZ19tZWRpYS5jCkBAIC03OCw2ICs3OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlm
bWVkaWFfZGVzY3JpcHRpb24KICAgICBpZm1fc3VidHlwZV9ldGhlcm5ldF9vcHRpb25fZGVzY3Jp
cHRpb25zW10gPQogICAgIElGTV9TVUJUWVBFX0VUSEVSTkVUX09QVElPTl9ERVNDUklQVElPTlM7
CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWZtZWRpYV9kZXNjcmlwdGlvbgorICAgIGlmbV9zdWJ0
eXBlX21iaW1fZGVzY3JpcHRpb25zW10gPQorICAgIElGTV9TVUJUWVBFX01CSU1fREVTQ1JJUFRJ
T05TOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRpb24KICAgICBpZm1f
c3VidHlwZV9pZWVlODAyMTFfZGVzY3JpcHRpb25zW10gPQogICAgIElGTV9TVUJUWVBFX0lFRUU4
MDIxMV9ERVNDUklQVElPTlM7CkBAIC00OTIsNiArNDk2LDcgQEAgaWZjb25maWdfbWVkaWFfZ2V0
X3N0YXR1cyhjb25zdCBzdHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcikKIAlzd2l0Y2ggKElGTV9UWVBF
KGlmbXItPmlmbV9hY3RpdmUpKSB7CiAJY2FzZSBJRk1fRVRIRVI6CiAJY2FzZSBJRk1fQVRNOgor
CWNhc2UgSUZNX01CSU06CiAJCWlmIChpZm1yLT5pZm1fc3RhdHVzICYgSUZNX0FDVElWRSkgewog
CQkJcmV0dXJuICgiYWN0aXZlIik7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zYmluL01ha2Vm
aWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCA3OTAxMTJiMDVmNmYuLjVlNWE4OTQzYzY3YSAxMDA2
NDQKLS0tIGEvc2Jpbi9NYWtlZmlsZQorKysgYi9zYmluL01ha2VmaWxlCkBAIC02Myw2ICs2Myw3
IEBAIFNVQkRJUj1hZGprZXJudHogXAogCXN3YXBvbiBcCiAJc3lzY3RsIFwKIAl0dW5lZnMgXAor
CXVtYmN0bCBcCiAJdW1vdW50CiAKIC5pZiAke01LX0lORVR9ICE9ICJubyIgfHwgJHtNS19JTkVU
Nn0gIT0gIm5vIgpkaWZmIC0tZ2l0IGEvc2Jpbi91bWJjdGwvTWFrZWZpbGUgYi9zYmluL3VtYmN0
bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM1YWZi
MWJjZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NiaW4vdW1iY3RsL01ha2VmaWxlCkBAIC0wLDAg
KzEsOCBAQAorQ0ZMQUdTKz0gLUkke1NSQ1RPUH0vc3lzL2Rldi91c2IvbmV0CisKK1BST0c9CXVt
YmN0bAorTUFOPQl1bWJjdGwuOAorCitCSU5ESVI9CS9zYmluCisKKy5pbmNsdWRlIDxic2QucHJv
Zy5taz4KZGlmZiAtLWdpdCBhL3NiaW4vdW1iY3RsL3VtYmN0bC44IGIvc2Jpbi91bWJjdGwvdW1i
Y3RsLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yOGQ4MjBkMjY0
NTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYmluL3VtYmN0bC91bWJjdGwuOApAQCAtMCwwICsxLDE3
MiBAQAorLlwiCSROZXRCU0QkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgUGllcnJl
IFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEub3JnPgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
LlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworLlwiIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisu
XCIgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorLlwiIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKy5cIiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy5cIiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKy5cIiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisuXCIgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
CisuXCIgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCisuXCIgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisuXCIKKy5c
IiBGcm9tOiBwcHBvZWN0bC44LHYgMS4zMCAyMDE2LzA5LzEyIDA1OjM1OjIwIHNldmFuIEV4cCAk
CisuXCIKKy5cIiAkSWQkCisuXCIKKy5cIiBsYXN0IGVkaXQtZGF0ZTogW1RodSBBdWcgMzEgMTA6
NDc6MzMgMjAwMF0KKy5cIgorLkRkIE1hcmNoIDIyLCAyMDIwCisuRHQgVU1CQ1RMIDgKKy5Pcwor
LlNoIE5BTUUKKy5ObSB1bWJjdGwKKy5OZCBkaXNwbGF5IG9yIHNldCBNQklNIGNlbGx1bGFyIG1v
ZGVtIGludGVyZmFjZSBwYXJhbWV0ZXJzICg0Ry9MVEUpCisuU2ggU1lOT1BTSVMKKy5ObSB1bWJj
dGwKKy5PcCBGbCB2CisuQXIgaWZuYW1lCisuT3AgQXIgcGFyYW1ldGVyIE9wIEFyIHZhbHVlCisu
QXIgLi4uCisuUHAKKy5ObSB1bWJjdGwKKy5PcCBGbCB2CisuRmwgZiBBciBjb25maWctZmlsZQor
LkFyIGlmbmFtZQorLlBwCisuTm0gdW1iY3RsCisuT3AgRmwgdgorLkZsIG0gQXIgZm9ybWF0Cisu
QXIgaWZuYW1lCisuUHAKKy5TaCBERVNDUklQVElPTgorLk5tCitzdXBwb3J0cyB0aGUgZm9sbG93
aW5nIG9wdGlvbnM6CisuQmwgLXRhZyAtd2lkdGggWGZYY29uZmlnWGZpbGVYWFggLW9mZnNldCBp
bmRlbnQKKy5JdCBGbCBmIEFyIGNvbmZpZy1maWxlCitQYXJzZQorLkFyIGNvbmZpZy1maWxlCitm
b3IKKy5BciBwYXJhbWV0ZXIgTnMgT3AgXCY9IE5zIEFyIHZhbHVlCitwYWlycywgb25lIHBlciBs
aW5lLCBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgor
VGhpcyBhbGxvd3MgdGhlIHBhc3N3b3JkIG9yIFBJTiBjb2RlcyB0byBiZSBub3QgcGFzc2VkIGFz
IGNvbW1hbmQgbGluZQorYXJndW1lbnRzLgorQ29tbWVudHMgc3RhcnRpbmcgd2l0aCAjIHRvIHRo
ZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmUgaWdub3JlZC4KKy5JdCBGbCBtIEFyIGZvcm1h
dAorRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhlCisuQXIgZm9ybWF0CitzcGVj
aWZpZWQuCisuSXQgRmwgdgorRW5hYmxlcyB2ZXJib3NlIG1vZGUuCisuRWwKKy5QcAorVGhlCisu
WHIgdW1iIDQKK2RyaXZlciBtYXkgcmVxdWlyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3Vt
ZW50cyBvciBvcHRpb25hbAorcGFyYW1ldGVycyBiZXNpZGVzIHRoZSBzZXR0aW5ncyB0aGF0IGNh
biBiZSBhZGp1c3RlZCB3aXRoCisuWHIgaWZjb25maWcgOCAuCitUaGVzZSBtYXkgYmUgY3JlZGVu
dGlhbHMgb3Igb3RoZXIgdHVuYWJsZSBjb25uZWN0aXZpdHkgdmFyaWFibGVzLgorVGhlCisuTm0K
K3V0aWxpdHkgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5ncywgb3Ig
YWRqdXN0IHRoZXNlCitwYXJhbWV0ZXJzIGFzIHJlcXVpcmVkLgorLlBwCitGb3Igd2hhdGV2ZXIg
aW50ZW50CisuTm0KK2lzIGJlaW5nIGNhbGxlZCwgYXQgbGVhc3QgdGhlIHBhcmFtZXRlcgorLkFy
IGlmbmFtZQorbmVlZHMgdG8gYmUgc3BlY2lmaWVkLCBuYW1pbmcgdGhlIGludGVyZmFjZSBmb3Ig
d2hpY2ggdGhlIHNldHRpbmdzCithcmUgdG8gYmUgcGVyZm9ybWVkIG9yIGRpc3BsYXllZC4KK1Vz
ZQorLlhyIGlmY29uZmlnIDgKK29yCisuWHIgbmV0c3RhdCAxCit0byBzZWUgd2hpY2ggaW50ZXJm
YWNlcyBhcmUgYXZhaWxhYmxlLgorLlBwCitJZiBubyBvdGhlciBwYXJhbWV0ZXIgaXMgZ2l2ZW4s
CisuTm0KK3dpbGwganVzdCBsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IKKy5BciBpZm5hbWUK
K2FuZCBleGl0LgorLlBwCitJZiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQs
IHN1cGVydXNlciBwcml2aWxlZ2VzIGFyZQorcmVxdWlyZWQsIGFuZCB0aGUgY29tbWFuZCB3b3Jr
cyBpbgorLlFsIHNldAorbW9kZS4KK1RoaXMgaXMgbm9ybWFsbHkgZG9uZSBxdWlldGx5LCB1bmxl
c3MgdGhlIG9wdGlvbgorLkZsIHYKK2lzIGFsc28gZW5hYmxlZCwgd2hpY2ggd2lsbCBjYXVzZSBh
IGZpbmFsIHByaW50b3V0IG9mIHRoZSBzdGF0dXMgYXMKK2Rlc2NyaWJlZCBhYm92ZSBvbmNlIGFs
bCBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiB0YWtlbi4KKy5QcAorVGhlIHBhcmFtZXRlcnMgY3Vy
cmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlOgorLkJsIC10YWcgLXdpZHRoIHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHggLW9mZnNldCBpbmRlbnQKKy5JdCBBciBhcG4gTnMgXCY9IE5zIEVtIGFjY2Vz
cy1wb2ludAorU2V0IHRoZSBBUE4gdG8KKy5FbSBhY2Nlc3MtcG9pbnQgLgorLkl0IEFyIHVzZXJu
YW1lIE5zIFwmPSBOcyBFbSB1c2VybmFtZQorU2V0IHRoZSB1c2VybmFtZSB0bworLkVtIHVzZXJu
YW1lIC4KKy5JdCBBciBwYXNzd29yZCBOcyBcJj0gTnMgRW0gcGFzc3dvcmQKK1NldCB0aGUgcGFz
c3dvcmQgdG8KKy5FbSBwYXNzd29yZCAuCisuSXQgQXIgcGluIE5zIFwmPSBOcyBFbSBwaW4tY29k
ZQorRW50ZXIgdGhlIFBJTgorLkVtIHBpbi1jb2RlIC4KKy5JdCBBciBwdWsgTnMgXCY9IE5zIEVt
IHB1ay1jb2RlCitFbnRlciB0aGUgUFVLCisuRW0gcHVrLWNvZGUgLgorLkl0IEFyIHJvYW1pbmcK
K0FsbG93IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkl0IEFyIC1yb2FtaW5nCitE
ZW55IGRhdGEgY29ubmVjdGlvbnMgd2hlbiByb2FtaW5nLgorLkVsCisuU2ggRVhBTVBMRVMKKy5C
ZCAtbGl0ZXJhbAorIyB1bWJjdGwgdW1iMAordW1iMDogc3RhdGUgdXAsIG1vZGUgYXV0b21hdGlj
LCByZWdpc3RyYXRpb24gaG9tZSBuZXR3b3JrCisJcHJvdmlkZXIgIkJTRC1OZXQiLCBkYXRhY2xh
c3MgTFRFLCBzaWduYWwgZ29vZAorCXBob25lIG51bWJlciAiKzE1NTU0MjQyIiwgcm9hbWluZyAi
IiAoZGVuaWVkKQorCUFQTiAiIiwgVFggNTAwMDAwMDAsIFJYIDEwMDAwMDAwMAorCWZpcm13YXJl
ICJNQklNX0ZXX1YxLjAiLCBoYXJkd2FyZSAiTUJJTV9IV19WMS4wIgorLkVkCisuUHAKK0Rpc3Bs
YXkgdGhlIHNldHRpbmdzIGZvciB1bWIwLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCB1bWIwIGFw
biBvcGVyYXRvci5pbnRlcm5ldCB1c2VybmFtZSBtb2JpbGUgcGFzc3dvcmQgbW9iaWxlCisuRWQK
Ky5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSB0
aGUgY29tbWFuZCBsaW5lLgorLkJkIC1saXRlcmFsCisjIHVtYmN0bCAtZiAvZGV2L3N0ZGluIHVt
YjAgPDwgRU9GCitwaW49MTIzNAorRU9GCisuRWQKKy5QcAorQ29uZmlndXJlIHRoZSBjb25uZWN0
aW9uIHBhcmFtZXRlcnMgZm9yIHVtYjAgZnJvbSBhIGZpbGUuCisuU2ggU0VFIEFMU08KKy5YciBu
ZXRzdGF0IDEgLAorLlhyIHVtYiA0ICwKKy5YciBpZmNvbmZpZyA4ICwKKy5YciBpZndhdGNoZCA4
CisuU2ggSElTVE9SWQorVGhlCisuTm0KK3V0aWxpdHkgZmlyc3QgYXBwZWFyZWQgaW4KKy5OeCA5
LjAgLgorLlNoIEFVVEhPUlMKK1RoZSBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5CisuQW4gUGllcnJl
IFByb25jaGVyeSAuCmRpZmYgLS1naXQgYS9zYmluL3VtYmN0bC91bWJjdGwuYyBiL3NiaW4vdW1i
Y3RsL3VtYmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODgx
NjdiYWY0MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2Jpbi91bWJjdGwvdW1iY3RsLmMKQEAgLTAs
MCArMSw3NjcgQEAKKy8qICRGcmVlQlNEJCAqLworLyogJE5ldEJTRCQgKi8KKy8qCisgKiBPcmln
aW5hbCBjb3B5cmlnaHQgKGMpIDIwMTggUGllcnJlIFByb25jaGVyeSA8a2hvcmJlbkBkZWZvcmEu
b3JnPiAoZm9yIHRoZQorICogTmV0QlNEIFByb2plY3QpCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKEZyZWVCU0QgdXBkYXRlcykK
KyAqCisgKiBVcGRhdGVzIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkgPHBpZXJyZUBk
ZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgor
ICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5o
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisKKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJw
YS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKworI2luY2x1ZGUgIm1iaW0uaCIKKyNpbmNsdWRlICJpZl91bWJyZWcuaCIKKwor
CisvKiBjb25zdGFudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJf
YWN0c3RhdGVbXSA9CisJTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zaW1zdGF0ZVtdID0KKwlNQklNX1NJ
TVNUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
X3VtYl9yZWdzdGF0ZVtdID0KKwlNQklNX1JFR1NUQVRFX0RFU0NSSVBUSU9OUzsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9wa3RzdGF0ZVtdID0KKwlNQklNX1BLVFNS
Vl9TVEFURV9ERVNDUklQVElPTlM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IF91bWJfZGF0YWNsYXNzW10gPQorCU1CSU1fREFUQUNMQVNTX0RFU0NSSVBUSU9OUzsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9zdGF0ZVtdID0KKwlVTUJfSU5URVJO
QUxfU1RBVEVfREVTQ1JJUFRJT05TOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVtYl92YWxkZXNj
ciBfdW1iX3Bpbl9zdGF0ZVtdID0KK3sKKwl7IFVNQl9QSU5fUkVRVUlSRUQsICJQSU4gcmVxdWly
ZWQifSwKKwl7IFVNQl9QSU5fVU5MT0NLRUQsICJQSU4gdW5sb2NrZWQifSwKKwl7IFVNQl9QVUtf
UkVRVUlSRUQsICJQVUsgcmVxdWlyZWQifSwKKwl7IDAsIE5VTEwgfQorfTsKKworc3RhdGljIGNv
bnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgX3VtYl9yZWdtb2RlW10gPQoreworCXsgTUJJTV9SRUdN
T0RFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgTUJJTV9SRUdNT0RFX0FVVE9NQVRJQywgImF1
dG9tYXRpYyIgfSwKKwl7IE1CSU1fUkVHTU9ERV9NQU5VQUwsICJtYW51YWwiIH0sCisJeyAwLCBO
VUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIF91bWJfYmVyW10g
PQoreworCXsgVU1CX0JFUl9FWENFTExFTlQsICJleGNlbGxlbnQiIH0sCisJeyBVTUJfQkVSX1ZF
UllHT09ELCAidmVyeSBnb29kIiB9LAorCXsgVU1CX0JFUl9HT09ELCAiZ29vZCIgfSwKKwl7IFVN
Ql9CRVJfT0ssICJvayIgfSwKKwl7IFVNQl9CRVJfTUVESVVNLCAibWVkaXVtIiB9LAorCXsgVU1C
X0JFUl9CQUQsICJiYWQiIH0sCisJeyBVTUJfQkVSX1ZFUllCQUQsICJ2ZXJ5IGJhZCIgfSwKKwl7
IFVNQl9CRVJfRVhUUkVNRUxZQkFELCAiZXh0cmVtZWx5IGJhZCIgfSwKKwl7IDAsIE5VTEwgfQor
fTsKKworCisvKiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IF9jaGFyX3RvX3V0ZjE2KGNvbnN0
IGNoYXIgKiBpbiwgdWludDE2X3QgKiBvdXQsIHNpemVfdCBvdXRsZW4pOworc3RhdGljIGludCBf
ZXJyb3IoaW50IHJldCwgY2hhciBjb25zdCAqIGZvcm1hdCwgLi4uKTsKK3N0YXRpYyBpbnQgX3Vt
YmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50IGFyZ2MsIGNoYXIgKiBh
cmd2W10pOworc3RhdGljIGludCBfdW1iY3RsX2ZpbGUoY2hhciBjb25zdCAqIGlmbmFtZSwgY2hh
ciBjb25zdCAqIGZpbGVuYW1lLAorCQlpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IF91bWJjdGxf
ZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBjb25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9z
ZSk7CitzdGF0aWMgdm9pZCBfdW1iY3RsX2R1bXBfanNvbihjaGFyIGNvbnN0ICogaWZuYW1lLCBz
dHJ1Y3QgdW1iX2luZm8gKiB1bWJpKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9nYXRld2F5KGNoYXIg
Y29uc3QgKiBpZm5hbWUpOworc3RhdGljIHZvaWQgX3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBp
Zm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkpOworc3RhdGljIGludCBfdW1iY3RsX2lvY3Rs
KGNoYXIgY29uc3QgKiBpZm5hbWUsIGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LAorCQlz
dHJ1Y3QgaWZyZXEgKiBpZnIpOworc3RhdGljIGludCBfdW1iY3RsX3NldChjaGFyIGNvbnN0ICog
aWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWludCBhcmdjLCBjaGFyICog
YXJndltdKTsKK3N0YXRpYyBpbnQgX3VtYmN0bF9zb2NrZXQodm9pZCk7CitzdGF0aWMgaW50IF91
c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9wcmludF91dGYxNih1aW50MTZfdCAqIGluLCBpbnQg
aW5sZW4pOworc3RhdGljIHZvaWQgX3V0ZjE2X3RvX2NoYXIodWludDE2X3QgKiBpbiwgaW50IGlu
bGVuLCBjaGFyICogb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworCisvKiBmdW5jdGlvbnMgKi8KKy8q
IGNoYXJfdG9fdXRmMTYgKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSBPcGVuQlNEJ3MgaWZj
b25maWcoOCkgKi8KK3N0YXRpYyBpbnQgX2NoYXJfdG9fdXRmMTYoY29uc3QgY2hhciAqIGluLCB1
aW50MTZfdCAqIG91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQJbiA9IDA7CisJdWludDE2X3Qg
YzsKKworCWZvciAoOzspIHsKKwkJYyA9ICppbisrOworCisJCWlmIChjID09ICdcMCcpIHsKKwkJ
CS8qCisJCQkgKiBOVUwgdGVybWluYXRpb24gaXMgbm90IHJlcXVpcmVkLCBidXQgemVybyBvdXQg
dGhlCisJCQkgKiByZXNpZHVhbCBidWZmZXIKKwkJCSAqLworCQkJbWVtc2V0KG91dCwgMCwgb3V0
bGVuKTsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChvdXRsZW4gPCBzaXplb2YoKm91dCkpCisJ
CQlyZXR1cm4gLTE7CisKKwkJKm91dCsrID0gaHRvbGUxNihjKTsKKwkJbiArPSBzaXplb2YoKm91
dCk7CisJCW91dGxlbiAtPSBzaXplb2YoKm91dCk7CisJfQorfQorCisKKy8qIGVycm9yICovCitz
dGF0aWMgaW50IF9lcnJvcihpbnQgcmV0LCBjaGFyIGNvbnN0ICogZm9ybWF0LCAuLi4pCit7CisJ
dmFfbGlzdCBhcDsKKworCWZwdXRzKCJ1bWJjdGw6ICIsIHN0ZGVycik7CisJdmFfc3RhcnQoYXAs
IGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOwor
CWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB1bWJjdGwgKi8K
K3N0YXRpYyBpbnQgX3VtYmN0bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgdmVyYm9zZSwgaW50
IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJaW50IGZkOworCXN0cnVjdCBpZnJlcSBpZnI7CisJ
c3RydWN0IHVtYl9pbmZvIHVtYmk7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgdW1icDsKKworCWlm
KChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIs
IDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2Yo
aWZyLmlmcl9uYW1lKSk7CisJaWYoYXJnYyAhPSAwKQorCXsKKwkJbWVtc2V0KCZ1bWJwLCAwLCBz
aXplb2YodW1icCkpOworCQlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmdW1icDsKKwkJaWYoX3Vt
YmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQlBBUkFNLCAmaWZyKSAhPSAwCisJCQkJfHwg
X3VtYmN0bF9zZXQoaWZuYW1lLCAmdW1icCwgYXJnYywgYXJndikgIT0gMAorCQkJCXx8IF91bWJj
dGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ1NVTUJQQVJBTSwKKwkJCQkJJmlmcikgIT0gMCkKKwkJ
eworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDI7CisJCX0KKwl9CisJaWYoYXJnYyA9PSAwIHx8
IHZlcmJvc2UgPiAwKQorCXsKKwkJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJCWlm
KF91bWJjdGxfaW9jdGwoaWZuYW1lLCBmZCwgU0lPQ0dVTUJJTkZPLCAmaWZyKSAhPSAwKQorCQl7
CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlfdW1iY3RsX2luZm8oaWZuYW1l
LCAmdW1iaSk7CisJfQorCWlmKGNsb3NlKGZkKSAhPSAwKQorCQlyZXR1cm4gX2Vycm9yKDIsICIl
czogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyog
dW1iY3RsX2ZpbGUgKi8KK3N0YXRpYyBpbnQgX2ZpbGVfcGFyc2UoY2hhciBjb25zdCAqIGlmbmFt
ZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogZmlsZW5hbWUp
OworCitzdGF0aWMgaW50IF91bWJjdGxfZmlsZShjaGFyIGNvbnN0ICogaWZuYW1lLCBjaGFyIGNv
bnN0ICogZmlsZW5hbWUsIGludCB2ZXJib3NlKQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEg
aWZyOworCXN0cnVjdCB1bWJfcGFyYW1ldGVyIHVtYnA7CisJc3RydWN0IHVtYl9pbmZvIHVtYmk7
CisKKwlpZigoZmQgPSBfdW1iY3RsX3NvY2tldCgpKSA8IDApCisJCXJldHVybiAyOworCW1lbXNl
dCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybGNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwg
c2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1bWJwOwor
CW1lbXNldCgmdW1icCwgMCwgc2l6ZW9mKHVtYnApKTsKKwlpZihfdW1iY3RsX2lvY3RsKGlmbmFt
ZSwgZmQsIFNJT0NHVU1CUEFSQU0sICZpZnIpICE9IDAKKwkJCXx8IF9maWxlX3BhcnNlKGlmbmFt
ZSwgJnVtYnAsIGZpbGVuYW1lKSAhPSAwCisJCQl8fCBfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQs
IFNJT0NTVU1CUEFSQU0sICZpZnIpICE9IDApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAy
OworCX0KKwlpZih2ZXJib3NlID4gMCkKKwl7CisJCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZ1
bWJpOworCQlpZihfdW1iY3RsX2lvY3RsKGlmbmFtZSwgZmQsIFNJT0NHVU1CSU5GTywgJmlmcikg
IT0gMCkKKwkJeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJX3VtYmN0bF9p
bmZvKGlmbmFtZSwgJnVtYmkpOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJuIF9l
cnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IF9maWxlX3BhcnNlKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1
bWJfcGFyYW1ldGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIGZpbGVuYW1lKQoreworCWludCBy
ZXQgPSAwOworCUZJTEUgKiBmcDsKKwljaGFyIGJ1Zls1MTJdOworCXNpemVfdCBsZW47CisJaW50
IGk7CisJaW50IGVvZjsKKwljaGFyICogdG9rZW5zWzNdID0geyBidWYsIE5VTEwsIE5VTEwgfTsK
KwljaGFyICogcDsKKworCWlmKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKQor
CQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsK
Kwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkKKwl7CisJCWlmKGJ1
ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAn
OworCQlpZigobGVuID0gc3RybGVuKGJ1ZikpID4gMCkKKwkJeworCQkJaWYoYnVmW2xlbiAtIDFd
ICE9ICdcbicpCisJCQl7CisJCQkJcmV0ID0gX2Vycm9yKDIsICIlczogJXMiLCBmaWxlbmFtZSwK
KwkJCQkJCSJMaW5lIHRvbyBsb25nIik7CisJCQkJd2hpbGUoKGkgPSBmZ2V0YyhmcCkpICE9IEVP
RiAmJiBpICE9ICdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnVmW2xlbiAtIDFdID0g
J1wwJzsKKwkJfQorCQlpZigocCA9IHN0cmNocihidWYsICc9JykpICE9IE5VTEwpCisJCXsKKwkJ
CXRva2Vuc1sxXSA9IHAgKyAxOworCQkJKnAgPSAnXDAnOworCQl9IGVsc2UKKwkJCXRva2Vuc1sx
XSA9IE5VTEw7CisJCXJldCB8PSBfdW1iY3RsX3NldChpZm5hbWUsIHVtYnAsIChwICE9IE5VTEwp
ID8gMiA6IDEsIHRva2VucykKKwkJCT8gMiA6IDA7CisJfQorCWVvZiA9IGZlb2YoZnApOworCWlm
KGZjbG9zZShmcCkgIT0gMCB8fCAhZW9mKQorCQlyZXR1cm4gX2Vycm9yKDIsICIlczogJXMiLCBm
aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIHVtYmN0
bF9kdW1wICovCitzdGF0aWMgaW50IF91bWJjdGxfZHVtcChjaGFyIGNvbnN0ICogaWZuYW1lLCBj
b25zdCBjaGFyICogZm9ybWF0LCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IGlm
cmVxIGlmcjsKKwlzdHJ1Y3QgdW1iX2luZm8gdW1iaTsKKwkodm9pZCkgdmVyYm9zZTsKKworCWlm
KChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJbWVtc2V0KCZpZnIs
IDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBzaXplb2Yo
aWZyLmlmcl9uYW1lKSk7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJnVtYmk7CisJaWYoX3Vt
YmN0bF9pb2N0bChpZm5hbWUsIGZkLCBTSU9DR1VNQklORk8sICZpZnIpICE9IDApCisJeworCQlj
bG9zZShmZCk7CisJCXJldHVybiAzOworCX0KKwlpZihjbG9zZShmZCkgIT0gMCkKKwkJcmV0dXJu
IF9lcnJvcigyLCAiJXM6ICVzIiwgaWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWlmKHN0cm5j
YXNlY21wKGZvcm1hdCwgIkpTT04iLCA0KSA9PSAwKQorCQlfdW1iY3RsX2R1bXBfanNvbihpZm5h
bWUsICZ1bWJpKTsKKwllbHNlCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiBVbnN1cHBvcnRlZCBm
b3JtYXQiLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCisKKy8qIHVtYmN0bF9kdW1wX2pzb24g
Ki8KK3N0YXRpYyB2b2lkIF91bWJjdGxfZHVtcF9qc29uKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0
cnVjdCB1bWJfaW5mbyAqIHVtYmkpCit7CisjZGVmaW5lIEpTT05fU1RBUlQJcHJpbnRmKCJ7IikK
KyNkZWZpbmUgSlNPTl9FTkQJcHJpbnRmKCJ9XG4iKQorI2RlZmluZSBKU09OX1NFUAlwcmludGYo
IiwgIikKKyNkZWZpbmUgSlNPTl9BUlJBWV9TVEFSVAlwcmludGYoIlsiKQorI2RlZmluZSBKU09O
X0FSUkFZX0VORAlwcmludGYoIl0iKQorCisjZGVmaW5lIEpTT05fU1RSSU5HKGtleSwgdmFsKQlw
cmludGYoIlwiJXNcIjogXCIlc1wiIiwga2V5LCB2YWwpCisjZGVmaW5lIEpTT05fSU5UKGtleSwg
dmFsKQlwcmludGYoIlwiJXNcIjogJWQiLCBrZXksIHZhbCkKKyNkZWZpbmUgSlNPTl9VTE9ORyhr
ZXksIHZhbCkJcHJpbnRmKCJcIiVzXCI6ICVsdSIsIGtleSwgdmFsKQorI2RlZmluZSBKU09OX0JP
T0woa2V5LCB2YWwpCXByaW50ZigiXCIlc1wiOiAlcyIsIGtleSwgKHZhbCk/InRydWUiOiJmYWxz
ZSIpCisjZGVmaW5lIEpTT05fTlVMTChrZXkpCQlwcmludGYoIlwiJXNcIjogbnVsbCIsIGtleSkK
KyNkZWZpbmUgSlNPTl9LRVkoa2V5KQkJcHJpbnRmKCJcIiVzXCI6ICIsIGtleSkKKworI2RlZmlu
ZSBKU09OX1dTVFJJTkcoa2V5LCB2YWwsIGxlbikJKHByaW50ZigiXCIlc1wiOiBcIiIsIGtleSks
XAorCQkJCQkgX3ByaW50X3V0ZjE2KHZhbCwgbGVuKSxwcmludGYoIlwiIikpCisKKyNkZWZpbmUg
SlNPTl9OVUxMX0VNUFRZKGtleSwgdmFsKQkoKnZhbCAhPSAnXDAnKT9KU09OX1NUUklORyhrZXks
IHZhbCk6XAorCQkJCQlKU09OX05VTEwoa2V5KQorI2RlZmluZSBKU09OX05VTExfV0VNUFRZKGtl
eSwgdmFsLCBsZW4pCSgoY2hhcilodG9sZTE2KCp2YWwpICE9ICdcMCcpP1wKKwkJCQkJSlNPTl9X
U1RSSU5HKGtleSwgdmFsLCBsZW4pOlwKKwkJCQkJSlNPTl9OVUxMKGtleSkKKworCUpTT05fU1RB
UlQ7CisJSlNPTl9TVFJJTkcoImludGVyZmFjZSIsIGlmbmFtZSk7CisJSlNPTl9TRVA7CisJSlNP
Tl9OVUxMX0VNUFRZKCJzdGF0ZSIsIHVtYl92YWwyZGVzY3IoX3VtYl9zdGF0ZSwgdW1iaS0+c3Rh
dGUpKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfRU1QVFkoInBpbi1zdGF0dXMiLCB1bWJfdmFs
MmRlc2NyKF91bWJfcGluX3N0YXRlLCB1bWJpLT5waW5fc3RhdGUpKTsKKwlKU09OX1NFUDsKKwlK
U09OX0lOVCgicGluLWF0dGVtcHRzLWxlZnQiLCB1bWJpLT5waW5fYXR0ZW1wdHNfbGVmdCk7CisJ
SlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJhY3RpdmF0aW9uIiwgdW1iX3ZhbDJkZXNjcihf
dW1iX2FjdHN0YXRlLCB1bWJpLT5hY3RpdmF0aW9uKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxM
X0VNUFRZKCJzaW0tc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfc2ltc3RhdGUsIHVtYmktPnNp
bV9zdGF0ZSkpOworCUpTT05fU0VQOworCUpTT05fTlVMTF9FTVBUWSgic2ltLXJlZ2lzdHJhdGlv
biIsIHVtYl92YWwyZGVzY3IoX3VtYl9yZWdzdGF0ZSwgdW1iaS0+cmVnc3RhdGUpKTsKKwlKU09O
X1NFUDsKKwlKU09OX05VTExfRU1QVFkoInNpbS1yZWdpc3RyYXRpb24tbW9kZSIsIHVtYl92YWwy
ZGVzY3IoX3VtYl9yZWdtb2RlLCB1bWJpLT5yZWdtb2RlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9J
TlQoIm5ldHdvcmstZXJyb3JzIiwgdW1iaS0+bndlcnJvcik7CisJSlNPTl9TRVA7CisJSlNPTl9O
VUxMX0VNUFRZKCJwYWNrZXQtc3RhdGUiLCB1bWJfdmFsMmRlc2NyKF91bWJfcGt0c3RhdGUsIHVt
YmktPnBhY2tldHN0YXRlKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJzdXBwb3J0
ZWQtZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5zdXBw
b3J0ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJwcmVmZXJyZWQt
ZGF0YWNsYXNzZXMiLCB1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5wcmVmZXJy
ZWRjbGFzc2VzKSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJvZmZlcmVkLWRhdGFj
bGFzc2VzIiwgdW1iX3ZhbDJkZXNjcihfdW1iX2RhdGFjbGFzcywgdW1iaS0+aGlnaGVzdGNsYXNz
KSk7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX0VNUFRZKCJkYXRhY2xhc3MiLCB1bWJfdmFsMmRl
c2NyKF91bWJfZGF0YWNsYXNzLCB1bWJpLT5jZWxsY2xhc3MpKTsKKwlKU09OX1NFUDsKKwlKU09O
X05VTExfV0VNUFRZKCJwcm92aWRlciIsIHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJOQU1F
X01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgicGhvbmUtbnVtYmVyIiwg
dW1iaS0+cG4sIFVNQl9QSE9ORU5SX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dF
TVBUWSgic3Vic2NyaWJlci1pZCIsIHVtYmktPnNpZCwgVU1CX1NVQlNDUklCRVJJRF9NQVhMRU4p
OworCUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImljY2lkIiwgdW1iaS0+aWNjaWQsIFVN
Ql9JQ0NJRF9NQVhMRU4pOworCUpTT05fU0VQOworCUpTT05fQk9PTCgicm9hbWluZy1vbiIsIHVt
YmktPmVuYWJsZV9yb2FtaW5nKTsKKwlKU09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJyb2Ft
aW5nLXRleHQiLCB1bWJpLT5yb2FtaW5ndHh0LCBVTUJfUk9BTUlOR1RFWFRfTUFYTEVOKTsKKwlK
U09OX1NFUDsKKwlKU09OX05VTExfV0VNUFRZKCJkZXZpY2UtaWQiLCB1bWJpLT5kZXZpZCwgVU1C
X0RFVklEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgiZmlybXdhcmUi
LCB1bWJpLT5md2luZm8sIFVNQl9GV0lORk9fTUFYTEVOKTsKKwlKU09OX1NFUDsKKwlKU09OX05V
TExfV0VNUFRZKCJoYXJkd2FyZSIsIHVtYmktPmh3aW5mbywgVU1CX0hXSU5GT19NQVhMRU4pOwor
CUpTT05fU0VQOworCUpTT05fTlVMTF9XRU1QVFkoImFjY2Vzcy1wb2ludC1uYW1lIiwgdW1iaS0+
YXBuLCBVTUJfQVBOX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9OVUxMX1dFTVBUWSgidXNl
cm5hbWUiLCB1bWJpLT51c2VybmFtZSwgVU1CX1VTRVJOQU1FX01BWExFTik7CisJSlNPTl9TRVA7
CisJSlNPTl9OVUxMX1dFTVBUWSgicGFzc3dvcmQiLCB1bWJpLT5wYXNzd29yZCwgVU1CX1BBU1NX
T1JEX01BWExFTik7CisJSlNPTl9TRVA7CisJSlNPTl9JTlQoInJzc2kiLCB1bWJpLT5yc3NpKTsK
KwlKU09OX1NFUDsKKwlKU09OX0lOVCgiYml0LWVycm9yLXJhdGUiLCB1bWJpLT5iZXIpOworCUpT
T05fU0VQOworCUpTT05fQk9PTCgiaHctcmFkaW8tb24iLCB1bWJpLT5od19yYWRpb19vbik7CisJ
SlNPTl9TRVA7CisJSlNPTl9CT09MKCJzdy1yYWRpby1vbiIsIHVtYmktPnN3X3JhZGlvX29uKTsK
KwlKU09OX1NFUDsKKwlKU09OX1VMT05HKCJ1cGxpbmstc3BlZWQiLCB1bWJpLT51cGxpbmtfc3Bl
ZWQpOworCUpTT05fU0VQOworCUpTT05fVUxPTkcoImRvd25saW5rLXNwZWVkIiwgdW1iaS0+ZG93
bmxpbmtfc3BlZWQpOworCUpTT05fU0VQOworCUpTT05fS0VZKCJpcHY0LWRucyIpOworCUpTT05f
QVJSQVlfU1RBUlQ7CisJLyogVE9ETzogSW1wbGVtZW50IHRoZSBETlMgc2VydmVycyBpbiB0aGUg
SlNPTiBvYmplY3QKKwkjZGVmaW5lIFVNQl9NQVhfRE5TU1JWCQkJMgorCQl1X2ludDMyX3QJCWlw
djRkbnNbVU1CX01BWF9ETlNTUlZdOworCisJCVhYWDogVGhlIGlwdjRkbnMgaXMgZWl0aGVyIG9m
IG1heGltdW0gc2l6ZSBvciBudWxsIHRlcm1pbmF0ZWQKKwkJICAgICAoaXQncyBtZW1zZXQgdG8g
MCkKKwkqLworCUpTT05fQVJSQVlfRU5EOworCUpTT05fRU5EOworfQorCisKKy8qIHVtYmN0bF9n
YXRld2F5ICovCitzdGF0aWMgaW50IF91bWJjdGxfZ2F0ZXdheShjaGFyIGNvbnN0ICogaWZuYW1l
KQoreworCWludCBmZDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAq
IHNpbjsKKworCWlmKChmZCA9IF91bWJjdGxfc29ja2V0KCkpIDwgMCkKKwkJcmV0dXJuIDI7CisJ
bWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaWZu
YW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJaWYoX3VtYmN0bF9pb2N0bChpZm5hbWUsIGZk
LCBTSU9DR0lGRFNUQUREUiwgJmlmcikgIT0gMCkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJu
IDI7CisJfQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9kc3RhZGRyOwor
CXByaW50ZigiJXNcbiIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJaWYoY2xvc2UoZmQp
ICE9IDApCisJCXJldHVybiBfZXJyb3IoMiwgIiVzOiAlcyIsIGlmbmFtZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiB1bWJjdGxfaW5mbyAqLworc3RhdGljIHZvaWQg
X3VtYmN0bF9pbmZvKGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfaW5mbyAqIHVtYmkp
Cit7CisJY2hhciBwcm92aWRlcltVTUJfUFJPVklERVJOQU1FX01BWExFTiArIDFdOworCWNoYXIg
cG5bVU1CX1BIT05FTlJfTUFYTEVOICsgMV07CisJY2hhciByb2FtaW5nW1VNQl9ST0FNSU5HVEVY
VF9NQVhMRU4gKyAxXTsKKwljaGFyIGFwbltVTUJfQVBOX01BWExFTiArIDFdOworCWNoYXIgZndp
bmZvW1VNQl9GV0lORk9fTUFYTEVOICsgMV07CisJY2hhciBod2luZm9bVU1CX0hXSU5GT19NQVhM
RU4gKyAxXTsKKworCV91dGYxNl90b19jaGFyKHVtYmktPnByb3ZpZGVyLCBVTUJfUFJPVklERVJO
QU1FX01BWExFTiwKKwkJCXByb3ZpZGVyLCBzaXplb2YocHJvdmlkZXIpKTsKKwlfdXRmMTZfdG9f
Y2hhcih1bWJpLT5wbiwgVU1CX1BIT05FTlJfTUFYTEVOLCBwbiwgc2l6ZW9mKHBuKSk7CisJX3V0
ZjE2X3RvX2NoYXIodW1iaS0+cm9hbWluZ3R4dCwgVU1CX1JPQU1JTkdURVhUX01BWExFTiwKKwkJ
CXJvYW1pbmcsIHNpemVvZihyb2FtaW5nKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+YXBuLCBV
TUJfQVBOX01BWExFTiwgYXBuLCBzaXplb2YoYXBuKSk7CisJX3V0ZjE2X3RvX2NoYXIodW1iaS0+
ZndpbmZvLCBVTUJfRldJTkZPX01BWExFTiwgZndpbmZvLCBzaXplb2YoZndpbmZvKSk7CisJX3V0
ZjE2X3RvX2NoYXIodW1iaS0+aHdpbmZvLCBVTUJfSFdJTkZPX01BWExFTiwgaHdpbmZvLCBzaXpl
b2YoaHdpbmZvKSk7CisJcHJpbnRmKCIlczogc3RhdGUgJXMsIG1vZGUgJXMsIHJlZ2lzdHJhdGlv
biAlc1xuIgorCQkJIlx0cHJvdmlkZXIgXCIlc1wiLCBkYXRhY2xhc3MgJXMsIHNpZ25hbCAlc1xu
IgorCQkJIlx0cGhvbmUgbnVtYmVyIFwiJXNcIiwgcm9hbWluZyBcIiVzXCIgKCVzKVxuIgorCQkJ
Ilx0QVBOIFwiJXNcIiwgVFggJSIgUFJJdTY0ICIsIFJYICUiIFBSSXU2NCAiXG4iCisJCQkiXHRm
aXJtd2FyZSBcIiVzXCIsIGhhcmR3YXJlIFwiJXNcIlxuIiwKKwkJCWlmbmFtZSwgdW1iX3ZhbDJk
ZXNjcihfdW1iX3N0YXRlLCB1bWJpLT5zdGF0ZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVn
bW9kZSwgdW1iaS0+cmVnbW9kZSksCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfcmVnc3RhdGUsIHVt
YmktPnJlZ3N0YXRlKSwgcHJvdmlkZXIsCisJCQl1bWJfdmFsMmRlc2NyKF91bWJfZGF0YWNsYXNz
LCB1bWJpLT5jZWxsY2xhc3MpLAorCQkJdW1iX3ZhbDJkZXNjcihfdW1iX2JlciwgdW1iaS0+YmVy
KSwgcG4sIHJvYW1pbmcsCisJCQl1bWJpLT5lbmFibGVfcm9hbWluZyA/ICJhbGxvd2VkIiA6ICJk
ZW5pZWQiLAorCQkJYXBuLCB1bWJpLT51cGxpbmtfc3BlZWQsIHVtYmktPmRvd25saW5rX3NwZWVk
LAorCQkJZndpbmZvLCBod2luZm8pOworfQorCisvKiBwcmludF91dGYxNiAqLworc3RhdGljIHZv
aWQgX3ByaW50X3V0ZjE2KHVpbnQxNl90ICogaW4sIGludCBpbmxlbikKK3sKKwkvKiBYWFggTm90
ZSB0byByZWFkZXJzOgorCSAqCisJICogVGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5OgorCSAq
IGRvCisJICogCXB1dGMoaXNhc2NpaSgoY2hhcilodG9sZTE2KCppbikpID8gKGNoYXIpaHRvbGUx
NigqaW4pIDogJz8nLCBzdGRvdXQpOworCSAqIHdoaWxlICgoY2hhcilodG9sZTE2KCooaW4rKykp
ICE9ICdcMCcgJiYgLS1pbmxlbiA+IDApOworCSAqCisJICogYnV0IGluIGFuIGVmZm9ydCB0byBy
ZXVzZSB0aGUgY29kZSwgaXQgaXMgYmV0dGVyIHRvIGNhbGwKKwkgKiBfdXRmMTZfdG9fY2hhciBp
bnN0ZWFkLgorCSAqLworCWNoYXIgYnVmW2lubGVuICsgMV07CisKKwlfdXRmMTZfdG9fY2hhcihp
biwgaW5sZW4sIGJ1ZiwgaW5sZW4pOworCWJ1Zltpbmxlbl0gPSAnXDAnOworCXByaW50ZigiJXMi
LCBidWYpOworfQorCisvKiB1bWJjdGxfaW9jdGwgKi8KK3N0YXRpYyBpbnQgX3VtYmN0bF9pb2N0
bChjaGFyIGNvbnN0ICogaWZuYW1lLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwKKwkJ
c3RydWN0IGlmcmVxICogaWZyKQoreworCWlmKGlvY3RsKGZkLCByZXF1ZXN0LCBpZnIpICE9IDAp
CisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7
CisJcmV0dXJuIDA7Cit9CisKKworLyogdW1iY3RsX3NldCAqLworLyogY2FsbGJhY2tzICovCitz
dGF0aWMgaW50IF9zZXRfYXBuKGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwg
Y2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNvbnN0ICosIHN0
cnVjdCB1bWJfcGFyYW1ldGVyICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcGFz
c3dvcmQoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICop
Oworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICosIHN0cnVjdCB1bWJfcGFyYW1ldGVy
ICosIGNoYXIgY29uc3QgKik7CitzdGF0aWMgaW50IF9zZXRfcHVrKGNoYXIgY29uc3QgKiwgc3Ry
dWN0IHVtYl9wYXJhbWV0ZXIgKiwgY2hhciBjb25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2Ft
aW5nX2FsbG93KGNoYXIgY29uc3QgKiwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiwKKwkJY2hhciBj
b25zdCAqKTsKK3N0YXRpYyBpbnQgX3NldF9yb2FtaW5nX2RlbnkoY2hhciBjb25zdCAqLCBzdHJ1
Y3QgdW1iX3BhcmFtZXRlciAqLAorCQljaGFyIGNvbnN0ICopOworCitzdGF0aWMgaW50IF91bWJj
dGxfc2V0KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1ldGVyICogdW1icCwK
KwkJaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJc3RydWN0CisJeworCQljaGFyIGNvbnN0
ICogbmFtZTsKKwkJaW50ICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKiwKKwkJCQlzdHJ1Y3QgdW1i
X3BhcmFtZXRlciAqLCBjaGFyIGNvbnN0ICopOworCQlpbnQgcGFyYW1ldGVyOworCX0gY2FsbGJh
Y2tzW10gPQorCXsKKwkJeyAiYXBuIiwgX3NldF9hcG4sIDEgfSwKKwkJeyAidXNlcm5hbWUiLCBf
c2V0X3VzZXJuYW1lLCAxIH0sCisJCXsgInBhc3N3b3JkIiwgX3NldF9wYXNzd29yZCwgMSB9LAor
CQl7ICJwaW4iLCBfc2V0X3BpbiwgMSB9LAorCQl7ICJwdWsiLCBfc2V0X3B1aywgMSB9LAorCQl7
ICJyb2FtaW5nIiwgX3NldF9yb2FtaW5nX2FsbG93LCAwIH0sCisJCXsgIi1yb2FtaW5nIiwgX3Nl
dF9yb2FtaW5nX2RlbnksIDAgfSwKKwl9OworCWludCBpOworCXNpemVfdCBqOworCisJZm9yKGkg
PSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkJZm9yKGogPSAwOyBqIDwgc2l6ZW9mKGNhbGxiYWNr
cykgLyBzaXplb2YoKmNhbGxiYWNrcyk7IGorKykKKwkJCWlmKHN0cmNtcChhcmd2W2ldLCBjYWxs
YmFja3Nbal0ubmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlpZihjYWxsYmFja3Nbal0ucGFyYW1ldGVy
ICYmIGkgKyAxID09IGFyZ2MpCisJCQkJCXJldHVybiBfZXJyb3IoLTEsICIlczogSW5jb21wbGV0
ZSIKKwkJCQkJCQkiIHBhcmFtZXRlciIsIGFyZ3ZbaV0pOworCQkJCWlmKGNhbGxiYWNrc1tqXS5j
YWxsYmFjayhpZm5hbWUsIHVtYnAsCisJCQkJCQkJY2FsbGJhY2tzW2pdLnBhcmFtZXRlcgorCQkJ
CQkJCT8gYXJndltpICsgMV0gOiBOVUxMKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlmKGNhbGxi
YWNrc1tqXS5wYXJhbWV0ZXIpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYoaiA9
PSBzaXplb2YoY2FsbGJhY2tzKSAvIHNpemVvZigqY2FsbGJhY2tzKSkKKwkJCXJldHVybiBfZXJy
b3IoLTEsICIlczogVW5rbm93biBwYXJhbWV0ZXIiLCBhcmd2W2ldKTsKKwl9CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgX3NldF9hcG4oY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVt
Yl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICogYXBuKQoreworCXVtYnAtPmFwbmxl
biA9IF9jaGFyX3RvX3V0ZjE2KGFwbiwgdW1icC0+YXBuLCBzaXplb2YodW1icC0+YXBuKSk7CisJ
aWYodW1icC0+YXBubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPmFwbmxlbiA+IHNpemVvZih1bWJw
LT5hcG4pKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiQVBOIHRvbyBs
b25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF91c2VybmFtZShjaGFyIGNv
bnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3Qg
KiB1c2VybmFtZSkKK3sKKwl1bWJwLT51c2VybmFtZWxlbiA9IF9jaGFyX3RvX3V0ZjE2KHVzZXJu
YW1lLCB1bWJwLT51c2VybmFtZSwKKwkJCXNpemVvZih1bWJwLT51c2VybmFtZSkpOworCWlmKHVt
YnAtPnVzZXJuYW1lbGVuIDwgMAorCQkJfHwgKHNpemVfdCl1bWJwLT51c2VybmFtZWxlbiA+IHNp
emVvZih1bWJwLT51c2VybmFtZSkpCisJCXJldHVybiBfZXJyb3IoLTEsICIlczogJXMiLCBpZm5h
bWUsICJVc2VybmFtZSB0b28gbG9uZyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9z
ZXRfcGFzc3dvcmQoY2hhciBjb25zdCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1
bWJwLAorCQljaGFyIGNvbnN0ICogcGFzc3dvcmQpCit7CisJdW1icC0+cGFzc3dvcmRsZW4gPSBf
Y2hhcl90b191dGYxNihwYXNzd29yZCwgdW1icC0+cGFzc3dvcmQsCisJCQlzaXplb2YodW1icC0+
cGFzc3dvcmQpKTsKKwlpZih1bWJwLT5wYXNzd29yZGxlbiA8IDAKKwkJCXx8IChzaXplX3QpdW1i
cC0+cGFzc3dvcmRsZW4gPiBzaXplb2YodW1icC0+cGFzc3dvcmQpKQorCQlyZXR1cm4gX2Vycm9y
KC0xLCAiJXM6ICVzIiwgaWZuYW1lLCAiUGFzc3dvcmQgdG9vIGxvbmciKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBfc2V0X3BpbihjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3QgdW1i
X3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiBwaW4pCit7CisJdW1icC0+aXNfcHVr
ID0gMDsKKwl1bWJwLT5vcCA9IE1CSU1fUElOX09QX0VOVEVSOworCXVtYnAtPnBpbmxlbiA9IF9j
aGFyX3RvX3V0ZjE2KHBpbiwgdW1icC0+cGluLCBzaXplb2YodW1icC0+cGluKSk7CisJaWYodW1i
cC0+cGlubGVuIDwgMCB8fCAoc2l6ZV90KXVtYnAtPnBpbmxlbgorCQkJPiBzaXplb2YodW1icC0+
cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlmbmFtZSwgIlBJTiBjb2RlIHRv
byBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3NldF9wdWsoY2hhciBjb25z
dCAqIGlmbmFtZSwgc3RydWN0IHVtYl9wYXJhbWV0ZXIgKiB1bWJwLAorCQljaGFyIGNvbnN0ICog
cHVrKQoreworCXVtYnAtPmlzX3B1ayA9IDE7CisJdW1icC0+b3AgPSBNQklNX1BJTl9PUF9FTlRF
UjsKKwl1bWJwLT5waW5sZW4gPSBfY2hhcl90b191dGYxNihwdWssIHVtYnAtPnBpbiwgc2l6ZW9m
KHVtYnAtPnBpbikpOworCWlmKHVtYnAtPnBpbmxlbiA8IDAgfHwgKHNpemVfdCl1bWJwLT5waW5s
ZW4gPiBzaXplb2YodW1icC0+cGluKSkKKwkJcmV0dXJuIF9lcnJvcigtMSwgIiVzOiAlcyIsIGlm
bmFtZSwgIlBVSyBjb2RlIHRvbyBsb25nIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
X3NldF9yb2FtaW5nX2FsbG93KGNoYXIgY29uc3QgKiBpZm5hbWUsIHN0cnVjdCB1bWJfcGFyYW1l
dGVyICogdW1icCwKKwkJY2hhciBjb25zdCAqIHVudXNlZCkKK3sKKwkodm9pZCkgaWZuYW1lOwor
CSh2b2lkKSB1bnVzZWQ7CisKKwl1bWJwLT5yb2FtaW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBfc2V0X3JvYW1pbmdfZGVueShjaGFyIGNvbnN0ICogaWZuYW1lLCBzdHJ1Y3Qg
dW1iX3BhcmFtZXRlciAqIHVtYnAsCisJCWNoYXIgY29uc3QgKiB1bnVzZWQpCit7CisJKHZvaWQp
IGlmbmFtZTsKKwkodm9pZCkgdW51c2VkOworCisJdW1icC0+cm9hbWluZyA9IDA7CisJcmV0dXJu
IDA7Cit9CisKKworLyogdW1iY3RsX3NvY2tldCAqLworc3RhdGljIGludCBfdW1iY3RsX3NvY2tl
dCh2b2lkKQoreworCWludCBmZDsKKworCWlmKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RH
UkFNLCAwKSkgPCAwKQorCQlyZXR1cm4gX2Vycm9yKC0xLCAic29ja2V0OiAlcyIsIHN0cmVycm9y
KGVycm5vKSk7CisJcmV0dXJuIGZkOworfQorCisKKy8qIHVzYWdlICovCitzdGF0aWMgaW50IF91
c2FnZSh2b2lkKQoreworCWZwdXRzKCJVc2FnZTogdW1iY3RsIFstdl0gaWZuYW1lIFtwYXJhbWV0
ZXIgW3ZhbHVlXV0gWy4uLl1cbiIKKyIgICAgICAgdW1iY3RsIC1mIGNvbmZpZy1maWxlIGlmbmFt
ZVxuIgorIiAgICAgICB1bWJjdGwgLWcgaWZuYW1lXG4iCisiICAgICAgIHVtYmN0bCAtbSBmb3Jt
YXQgaWZuYW1lIFsuLi5dXG4iCisiXG4iCisiTm90ZTogLWYgYW5kIC1tIGFyZSBtdXR1YWxseSBl
eGNsdXNpdmUuIFRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgaXMgSlNPTi5cbiIsCisJCQlzdGRl
cnIpOworCXJldHVybiAxOworfQorCisKKy8qIHV0ZjE2X3RvX2NoYXIgKi8KK3N0YXRpYyB2b2lk
IF91dGYxNl90b19jaGFyKHVpbnQxNl90ICogaW4sIGludCBpbmxlbiwgY2hhciAqIG91dCwgc2l6
ZV90IG91dGxlbikKK3sKKwl1aW50MTZfdCBjOworCisJd2hpbGUgKG91dGxlbiA+IDApIHsKKwkJ
YyA9IGlubGVuID4gMCA/IGh0b2xlMTYoKmluKSA6IDA7CisJCWlmIChjID09IDAgfHwgLS1vdXRs
ZW4gPT0gMCkgeworCQkJLyogYWx3YXlzIE5VTCB0ZXJtaW5hdGUgcmVzdWx0ICovCisJCQkqb3V0
ID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisJCSpvdXQrKyA9IGlzYXNjaWkoYykgPyAoY2hhcilj
IDogJz8nOworCQlpbisrOworCQlpbmxlbi0tOworCX0KK30KKworCisvKiBtYWluICovCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKK3sKKwlpbnQgbzsKKwljaGFyIGNvbnN0ICog
ZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgY29uc3QgKiBmb3JtYXQgPSBOVUxMOworCWludCBnYXRl
d2F5ID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisKKwl3aGlsZSgobyA9IGdldG9wdChhcmdjLCBh
cmd2LCAiZjpnbTp2IikpICE9IC0xKQorCQlzd2l0Y2gobykKKwkJeworCQkJY2FzZSAnZic6CisJ
CQkJZmlsZW5hbWUgPSBvcHRhcmc7CisJCQkJZm9ybWF0ID0gTlVMTDsKKwkJCQlnYXRld2F5ID0g
MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCWZpbGVuYW1lID0gTlVMTDsKKwkJCQlm
b3JtYXQgPSBOVUxMOworCQkJCWdhdGV3YXkgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnbSc6
CisJCQkJZmlsZW5hbWUgPSBOVUxMOworCQkJCWZvcm1hdCA9IG9wdGFyZzsKKwkJCQlnYXRld2F5
ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UrKzsKKwkJCQlicmVh
azsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIF91c2FnZSgpOworCQl9CisJaWYob3B0aW5kID09
IGFyZ2MpCisJCXJldHVybiBfdXNhZ2UoKTsKKwlpZihmaWxlbmFtZSAhPSBOVUxMKQorCXsKKwkJ
aWYob3B0aW5kICsgMSAhPSBhcmdjKQorCQkJcmV0dXJuIF91c2FnZSgpOworCQlyZXR1cm4gX3Vt
YmN0bF9maWxlKGFyZ3Zbb3B0aW5kXSwgZmlsZW5hbWUsIHZlcmJvc2UpOworCX0KKwlpZihmb3Jt
YXQgIT0gTlVMTCkKKwl7CisJCWlmKG9wdGluZCArIDEgIT0gYXJnYykKKwkJCXJldHVybiBfdXNh
Z2UoKTsKKwkJcmV0dXJuIF91bWJjdGxfZHVtcChhcmd2W29wdGluZF0sIGZvcm1hdCwgdmVyYm9z
ZSk7CisJfQorCWlmKGdhdGV3YXkpCisJeworCQlpZihvcHRpbmQgKyAxICE9IGFyZ2MpCisJCQly
ZXR1cm4gX3VzYWdlKCk7CisJCXJldHVybiBfdW1iY3RsX2dhdGV3YXkoYXJndltvcHRpbmRdKTsK
Kwl9CisJcmV0dXJuIF91bWJjdGwoYXJndltvcHRpbmRdLCB2ZXJib3NlLCBhcmdjIC0gb3B0aW5k
IC0gMSwKKwkJCSZhcmd2W29wdGluZCArIDFdKTsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9t
YW40L01ha2VmaWxlIGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXggYWQxY2Y1ZGQzNzg1
Li4zNGIzNmIyYjA5M2IgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L01ha2VmaWxlCisrKyBi
L3NoYXJlL21hbi9tYW40L01ha2VmaWxlCkBAIC0xMDQ1LDYgKzEwNDUsNyBAQCBNQU4rPQlcCiAJ
dWxlZC40IFwKIAl1bHB0LjQgXAogCXVtYXNzLjQgXAorCXVtYi40IFwKIAl1bWNzLjQgXAogCXVt
Y3QuNCBcCiAJdW1vZGVtLjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjQvdW1iLjQgYi9z
aGFyZS9tYW4vbWFuNC91bWIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmEwNTVmOWU2ZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW40L3VtYi40
CkBAIC0wLDAgKzEsOTAgQEAKKy5cIiAkTmV0QlNEOiB1bWIuNCx2IDEuNCAyMDE5LzA4LzMwIDA5
OjIyOjE3IHdpeiBFeHAgJAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE2IGdlbnVhIG1iSAor
LlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg
dGhpcyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlz
IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorLlwiIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisu
XCIKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBE
SVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJF
IElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IK
Ky5cIiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9G
IFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisuXCIgQUNUSU9OIE9GIENPTlRS
QUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YK
Ky5cIiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElT
IFNPRlRXQVJFLgorLlwiCisuRGQgQXVndXN0IDI0LCAyMDE5CisuRHQgVU1CIDQKKy5PcworLlNo
IE5BTUUKKy5ObSB1bWIKKy5OZCBVU0IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwg
KE1CSU0pCisuU2ggU1lOT1BTSVMKKy5DZCAidW1iKiAgYXQgdWh1Yj8gcG9ydD8iCisuU2ggREVT
Q1JJUFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVVNCIE1CSU0g
ZGV2aWNlcy4KKy5QcAorTUJJTSBkZXZpY2VzIGVzdGFibGlzaCBjb25uZWN0aW9ucyB2aWEgY2Vs
bHVsYXIgbmV0d29ya3Mgc3VjaCBhcworR1BSUywgVU1UUywgYW5kIExURS4KK1RoZXkgYXBwZWFy
IGFzIGEgcmVndWxhciBwb2ludC10by1wb2ludCBuZXR3b3JrIGludGVyZmFjZSwKK3RyYW5zcG9y
dGluZyByYXcgSVAgZnJhbWVzLgorLlBwCitSZXF1aXJlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRl
cnMgbGlrZSBQSU4gYW5kIEFQTiBoYXZlIHRvIGJlIHNldAord2l0aAorLlhyIHVtYmN0bCA4IC4K
K09uY2UgdGhlIFNJTSBjYXJkIGhhcyBiZWVuIHVubG9ja2VkIHdpdGggdGhlIGNvcnJlY3QgUElO
LCBpdAord2lsbCByZW1haW4gaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgTUJJTSBkZXZpY2UgaXMg
cG93ZXItY3ljbGVkLgorSW4gY2FzZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBhbiAiYWx3
YXlzLW9uIiBVU0IgcG9ydCwKK2l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25uZWN0IHRvIGEgcHJv
dmlkZXIgd2l0aG91dCBlbnRlcmluZyB0aGUKK1BJTiBhZ2FpbiBldmVuIGlmIHRoZSBzeXN0ZW0g
d2FzIHJlYm9vdGVkLgorLlNoIEhBUkRXQVJFCitUaGUgZm9sbG93aW5nIGRldmljZXMgc2hvdWxk
IHdvcms6CisuUHAKKy5CbCAtdGFnIC13aWR0aCBEcyAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAor
Lkl0IEVyaWNzc29uIEg1MzIxZ3cgYW5kIE41MzIxZ3cKKy5JdCBGaWJvY29tIEw4MzEtRUFVCisu
SXQgTWVkaW9uIE1vYmlsZSBTNDIyMiAoTWVkaWFUZWsgT0VNKQorLkl0IFNpZXJyYSBXaXJlbGVz
cyBFTTczNDUKKy5JdCBTaWVycmEgV2lyZWxlc3MgRU03NDU1CisuSXQgU2llcnJhIFdpcmVsZXNz
IEVNODgwNQorLkl0IFNpZXJyYSBXaXJlbGVzcyBNQzgzMDUKKy5FbAorLlNoIFNFRSBBTFNPCisu
WHIgaW50cm8gNCAsCisuWHIgbmV0aW50cm8gNCAsCisuWHIgdXNiIDQgLAorLlhyIGlmY29uZmln
LmlmIDUgLAorLlhyIGlmY29uZmlnIDggLAorLlhyIHVtYmN0bCA4CisuUnMKKy4lVCAiVW5pdmVy
c2FsIFNlcmlhbCBCdXMgQ29tbXVuaWNhdGlvbnMgQ2xhc3MgU3ViY2xhc3MgU3BlY2lmaWNhdGlv
biBmb3IgTW9iaWxlIEJyb2FkYmFuZCBJbnRlcmZhY2UgTW9kZWwiCisuJVUgaHR0cDovL3d3dy51
c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZjbGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEz
LnppcAorLlJlCisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RldmljZSBkcml2ZXIgZmlyc3QgYXBw
ZWFyZWQgaW4KKy5PeCA2LjAKK2FuZAorLk54IDkuMCAuCisuU2ggQVVUSE9SUworLkFuIC1ub3Nw
bGl0CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gR2VyaGFyZCBSb3RoIEFx
IE10IGdlcmhhcmRAb3BlbmJzZC5vcmcKK2FuZCBwb3J0ZWQgZnJvbQorLk94CitieQorLkFuIFBp
ZXJyZSBQcm9uY2hlcnkgQXEgTXQga2hvcmJlbkBkZWZvcmEub3JnIC4KKy5TaCBDQVZFQVRTCitU
aGUKKy5ObQorZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgSVB2Ni4KKy5QcAorRGV2aWNlcyB3aGlj
aCBmYWlsIHRvIHByb3ZpZGUgYSBjb25mb3JtaW5nIE1CSU0gaW1wbGVtZW50YXRpb24gd2lsbAor
cHJvYmFibHkgYmUgYXR0YWNoZWQgYXMgc29tZSBvdGhlciBkcml2ZXIsIHN1Y2ggYXMKKy5YciB1
M2cgNCAuCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcyBiL3N5cy9jb25mL2ZpbGVzCmluZGV4
IDc4MTgxMDRiOGQ1MC4uNDIxMjkyNTZiMGU3IDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcwor
KysgYi9zeXMvY29uZi9maWxlcwpAQCAtMzMwNyw2ICszMzA3LDcgQEAgZGV2L3VzYi9uZXQvaWZf
bXVnZS5jCQlvcHRpb25hbCBtdWdlCiBkZXYvdXNiL25ldC9pZl9ydWUuYwkJb3B0aW9uYWwgcnVl
CiBkZXYvdXNiL25ldC9pZl9zbXNjLmMJCW9wdGlvbmFsIHNtc2MKIGRldi91c2IvbmV0L2lmX3Vk
YXYuYwkJb3B0aW9uYWwgdWRhdgorZGV2L3VzYi9uZXQvaWZfdW1iLmMJCW9wdGlvbmFsIHVtYgog
ZGV2L3VzYi9uZXQvaWZfdXJlLmMJCW9wdGlvbmFsIHVyZQogZGV2L3VzYi9uZXQvaWZfdXNpZS5j
CQlvcHRpb25hbCB1c2llCiBkZXYvdXNiL25ldC9pZl91cm5kaXMuYwkJb3B0aW9uYWwgdXJuZGlz
CmRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMgYi9zeXMvZGV2L3VzYi9uZXQv
aWZfdW1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NTc5Mjhj
MzJlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1iLmMKQEAgLTAs
MCArMSwyOTMxIEBACisvKgkkRnJlZUJTRCQgKi8KKy8qCSROZXRCU0QkICovCisvKgkkT3BlbkJT
RDogaWZfdW1iLmMsdiAxLjE4IDIwMTgvMDIvMTkgMDg6NTk6NTIgbXBpIEV4cCAkICovCisKKy8q
CisgKiBPcmlnaW5hbCBjb3B5cmlnaHQgKGMpIDIwMTYgZ2VudWEgbWJIIChPcGVuQlNEIHZlcnNp
b24pCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg
aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgor
ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJ
TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAq
IEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us
IERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBO
RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB
UkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFESVNUQSBTQVMgKHJlLXdyaXRlIGZvciBG
cmVlQlNEKQorICoKKyAqIFJlLXdyaXRlIGZvciBGcmVlQlNEIGJ5IFBpZXJyZSBQcm9uY2hlcnkg
PHBpZXJyZUBkZWZvcmEubmV0PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qCisgKiBNb2JpbGUgQnJvYWRiYW5kIEludGVyZmFjZSBNb2RlbCBz
cGVjaWZpY2F0aW9uOgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9jcy9kZXZj
bGFzc19kb2NzL01CSU0xMEVycmF0YTFfMDczMDEzLnppcAorICogQ29tcGxpYW5jZSB0ZXN0aW5n
IGd1aWRlCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNzX2Rv
Y3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMv
cHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+
CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKworI2luY2x1ZGUgPHN5
cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgor
I2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorCisj
aW5jbHVkZSA8bWFjaGluZS9faW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9icGYuaD4KKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKyNpbmNsdWRlIDxu
ZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaW5jbHVkZSA8bmV0L25l
dGlzci5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5o
PgorI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgor
CisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jZGMuaD4K
KyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfZGV2aWNl
Lmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2Iv
dXNiZGlfdXRpbC5oPgorI2luY2x1ZGUgInVzYl9pZi5oIgorCisjaW5jbHVkZSAibWJpbS5oIgor
I2luY2x1ZGUgImlmX3VtYnJlZy5oIgorCitNQUxMT0NfREVDTEFSRShNX01CSU1fQ0lEX0NPTk5F
Q1QpOworTUFMTE9DX0RFRklORShNX01CSU1fQ0lEX0NPTk5FQ1QsICJtYmltX2NpZF9jb25uZWN0
IiwKKwkJIkNvbm5lY3Rpb24gcGFyYW1ldGVycyBmb3IgTUJJTSIpOworCisjaWZkZWYgVU1CX0RF
QlVHCisjZGVmaW5lIERQUklOVEYoeC4uLikJCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcp
IGxvZyhMT0dfREVCVUcsIHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERQUklOVEZOKG4sIHgu
Li4pCQkJCQkJXAorCQlkbyB7IGlmICh1bWJfZGVidWcgPj0gKG4pKSBsb2coTE9HX0RFQlVHLCB4
KTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBERFVNUE4obiwgYiwgbCkJCQkJCQkJXAorCQlkbyB7
CQkJCQkJCVwKKwkJCWlmICh1bWJfZGVidWcgPj0gKG4pKQkJCQlcCisJCQkJdW1iX2R1bXAoKGIp
LCAobCkpOwkJCVwKKwkJfSB3aGlsZSAoMCkKKworY29uc3QgaW50CSB1bWJfZGVidWcgPSAxOwor
c3RhdGljIGNoYXIJKnVtYl91dWlkMnN0cih1aW50OF90IFtNQklNX1VVSURfTEVOXSk7CitzdGF0
aWMgdm9pZAkgdW1iX2R1bXAodm9pZCAqLCBpbnQpOworCisjZWxzZQorI2RlZmluZSBEUFJJTlRG
KHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERQUklOVEZOKG4sIHguLi4pCWRvIHsg
fSB3aGlsZSAoMCkKKyNkZWZpbmUgRERVTVBOKG4sIGIsIGwpCQlkbyB7IH0gd2hpbGUgKDApCisj
ZW5kaWYKKworI2RlZmluZSBERVZOQU0oc2MpCQlkZXZpY2VfZ2V0X25hbWV1bml0KChzYyktPnNj
X2RldikKKworLyoKKyAqIFN0YXRlIGNoYW5nZSB0aW1lb3V0CisgKi8KKyNkZWZpbmUgVU1CX1NU
QVRFX0NIQU5HRV9USU1FT1VUCTMwCisKKy8qCisgKiBTdGF0ZSBjaGFuZ2UgZmxhZ3MKKyAqLwor
I2RlZmluZSBVTUJfTlNfRE9OVF9EUk9QCTB4MDAwMQkvKiBkbyBub3QgZHJvcCBiZWxvdyBjdXJy
ZW50IHN0YXRlICovCisjZGVmaW5lIFVNQl9OU19ET05UX1JBSVNFCTB4MDAwMgkvKiBkbyBub3Qg
cmFpc2UgYmVsb3cgY3VycmVudCBzdGF0ZSAqLworCisvKgorICogRGlhZ25vc3RpYyBtYWNyb3MK
KyAqLworY29uc3Qgc3RydWN0IHVtYl92YWxkZXNjciB1bWJfcmVnc3RhdGVzW10gPSBNQklNX1JF
R1NUQVRFX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2RhdGFj
bGFzc2VzW10gPSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1i
X3ZhbGRlc2NyIHVtYl9zaW1zdGF0ZVtdID0gTUJJTV9TSU1TVEFURV9ERVNDUklQVElPTlM7Citj
b25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9tZXNzYWdlc1tdID0gTUJJTV9NRVNTQUdFU19E
RVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9zdGF0dXNbXSA9IE1C
SU1fU1RBVFVTX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Np
ZHNbXSA9IE1CSU1fQ0lEX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3Ig
dW1iX3BrdHN0YXRlW10gPSBNQklNX1BLVFNSVl9TVEFURV9ERVNDUklQVElPTlM7Citjb25zdCBz
dHJ1Y3QgdW1iX3ZhbGRlc2NyIHVtYl9hY3RzdGF0ZVtdID0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRF
X0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX2Vycm9yW10gPSBN
QklNX0VSUk9SX0RFU0NSSVBUSU9OUzsKK2NvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgdW1iX3Bp
bnR5cGVbXSA9IE1CSU1fUElOVFlQRV9ERVNDUklQVElPTlM7Citjb25zdCBzdHJ1Y3QgdW1iX3Zh
bGRlc2NyIHVtYl9pc3RhdGVbXSA9IFVNQl9JTlRFUk5BTF9TVEFURV9ERVNDUklQVElPTlM7CisK
KyNkZWZpbmUgdW1iX3JlZ3N0YXRlKGMpCQl1bWJfdmFsMmRlc2NyKHVtYl9yZWdzdGF0ZXMsIChj
KSkKKyNkZWZpbmUgdW1iX2RhdGFjbGFzcyhjKQl1bWJfdmFsMmRlc2NyKHVtYl9kYXRhY2xhc3Nl
cywgKGMpKQorI2RlZmluZSB1bWJfc2ltc3RhdGUocykJCXVtYl92YWwyZGVzY3IodW1iX3NpbXN0
YXRlLCAocykpCisjZGVmaW5lIHVtYl9yZXF1ZXN0MnN0cihtKQl1bWJfdmFsMmRlc2NyKHVtYl9t
ZXNzYWdlcywgKG0pKQorI2RlZmluZSB1bWJfc3RhdHVzMnN0cihzKQl1bWJfdmFsMmRlc2NyKHVt
Yl9zdGF0dXMsIChzKSkKKyNkZWZpbmUgdW1iX2NpZDJzdHIoYykJCXVtYl92YWwyZGVzY3IodW1i
X2NpZHMsIChjKSkKKyNkZWZpbmUgdW1iX3BhY2tldF9zdGF0ZShzKQl1bWJfdmFsMmRlc2NyKHVt
Yl9wa3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfYWN0aXZhdGlvbihzKQl1bWJfdmFsMmRlc2Ny
KHVtYl9hY3RzdGF0ZSwgKHMpKQorI2RlZmluZSB1bWJfZXJyb3Iyc3RyKGUpCXVtYl92YWwyZGVz
Y3IodW1iX2Vycm9yLCAoZSkpCisjZGVmaW5lIHVtYl9waW5fdHlwZSh0KQkJdW1iX3ZhbDJkZXNj
cih1bWJfcGludHlwZSwgKHQpKQorI2RlZmluZSB1bWJfaXN0YXRlKHMpCQl1bWJfdmFsMmRlc2Ny
KHVtYl9pc3RhdGUsIChzKSkKKworc3RhdGljIGRldmljZV9wcm9iZV90IHVtYl9wcm9iZTsKK3N0
YXRpYyBkZXZpY2VfYXR0YWNoX3QgdW1iX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0YWNoX3Qg
dW1iX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IHVtYl9zdXNwZW5kOworc3RhdGlj
IGRldmljZV9yZXN1bWVfdCB1bWJfcmVzdW1lOworc3RhdGljIHZvaWQJIHVtYl9hdHRhY2hfdGFz
ayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICopOworc3RhdGljIHVzYl9oYW5kbGVfcmVxdWVzdF90IHVt
Yl9oYW5kbGVfcmVxdWVzdDsKK3N0YXRpYyBpbnQJIHVtYl9kZWFjdGl2YXRlKGRldmljZV90KTsK
K3N0YXRpYyB2b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKiwgc3RydWN0IHVz
Yl9jb25maWcgKik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtwaXBlcyhzdHJ1Y3QgdW1i
X3NvZnRjICopOworc3RhdGljIGludAkgdW1iX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcs
IGNhZGRyX3QpOworc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7CisjaWZkZWYgREVWX05F
VE1BUAorc3RhdGljIHZvaWQJIHVtYl9pbnB1dChzdHJ1Y3QgaWZuZXQgKiwgc3RydWN0IG1idWYg
Kik7CisjZW5kaWYKK3N0YXRpYyBpbnQJIHVtYl9vdXRwdXQoc3RydWN0IGlmbmV0ICosIHN0cnVj
dCBtYnVmICosCisJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICop
Oworc3RhdGljIHZvaWQJIHVtYl9zdGFydChzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkg
dW1iX3N0YXJ0X3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqKTsKKyNpZiAwCitzdGF0aWMgdm9p
ZAkgdW1iX3dhdGNoZG9nKHN0cnVjdCBpZm5ldCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJIHVt
Yl9zdGF0ZWNoZ190aW1lb3V0KHZvaWQgKik7CisKK3N0YXRpYyBpbnQJIHVtYl9tZWRpYWNoYW5n
ZShzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgdm9pZAkgdW1iX21lZGlhc3RhdHVzKHN0cnVjdCBp
Zm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqKTsKKworc3RhdGljIHZvaWQJIHVtYl9hZGRfdGFz
ayhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdXNiX3Byb2NfY2FsbGJhY2tfdCwKKwkJICAgIHN0cnVj
dCB1c2JfcHJvY19tc2cgKiwgc3RydWN0IHVzYl9wcm9jX21zZyAqLCBpbnQpOworc3RhdGljIHZv
aWQJIHVtYl9uZXdzdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIGVudW0gdW1iX3N0YXRlLCBpbnQp
Oworc3RhdGljIHZvaWQJIHVtYl9zdGF0ZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7Citz
dGF0aWMgdm9pZAkgdW1iX3VwKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkgdW1i
X2Rvd24oc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAkgdW1iX2dldF9y
ZXNwb25zZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKik7CisKK3N0YXRpYyB2b2lkCSB1bWJf
ZGVjb2RlX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGlj
IHZvaWQJIHVtYl9oYW5kbGVfaW5kaWNhdGVfc3RhdHVzX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICos
IHZvaWQgKiwKKwkJICAgIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2hhbmRsZV9vcGVuZG9uZV9t
c2coc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2hh
bmRsZV9jbG9zZWRvbmVfbXNnKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3Rh
dGljIGludAkgdW1iX2RlY29kZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZv
aWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1
bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludAkgdW1iX2RlY29kZV9zdWJzY3Jp
YmVyX3N0YXR1cyhzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJ
IHVtYl9kZWNvZGVfcmFkaW9fc3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7
CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3BpbihzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwg
aW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNvZGVfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9z
b2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1bWJfZGVjb2RlX3NpZ25hbF9zdGF0
ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyBpbnQJIHVtYl9kZWNv
ZGVfY29ubmVjdF9pbmZvKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQpOworc3RhdGlj
IGludAkgdW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9p
ZCAqLCBpbnQpOworc3RhdGljIHZvaWQJIHVtYl9yeChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3Rh
dGljIHVzYl9jYWxsYmFja190IHVtYl9yeGVvZjsKK3N0YXRpYyB2b2lkCSB1bWJfcnhmbHVzaChz
dHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIGludAkgdW1iX2VuY2FwKHN0cnVjdCB1bWJfc29m
dGMgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHVzYl94ZmVyICopOworc3RhdGljIHVzYl9jYWxs
YmFja190IHVtYl90eGVvZjsKK3N0YXRpYyB2b2lkCSB1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3Nv
ZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9kZWNhcChzdHJ1Y3QgdW1iX3NvZnRjICosIHN0cnVj
dCB1c2JfeGZlciAqLCBpbnQpOworCitzdGF0aWMgdXNiX2Vycm9yX3QJIHVtYl9zZW5kX2VuY2Fw
X2NvbW1hbmQoc3RydWN0IHVtYl9zb2Z0YyAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50CSB1
bWJfZ2V0X2VuY2FwX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMgKiwgdm9pZCAqLCBpbnQgKik7
CitzdGF0aWMgdm9pZAkgdW1iX2N0cmxfbXNnKHN0cnVjdCB1bWJfc29mdGMgKiwgdWludDMyX3Qs
IHZvaWQgKiwgaW50KTsKKworc3RhdGljIHZvaWQJIHVtYl9vcGVuKHN0cnVjdCB1bWJfc29mdGMg
Kik7CitzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlKHN0cnVjdCB1bWJfc29mdGMgKik7CisKK3N0YXRp
YyBpbnQJIHVtYl9zZXRwaW4oc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgdm9pZCAqLCBp
bnQsIHZvaWQgKiwKKwkJICAgIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX3NldGRhdGFjbGFzcyhz
dHJ1Y3QgdW1iX3NvZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9yYWRpbyhzdHJ1Y3QgdW1iX3Nv
ZnRjICosIGludCk7CitzdGF0aWMgdm9pZAkgdW1iX2FsbG9jYXRlX2NpZChzdHJ1Y3QgdW1iX3Nv
ZnRjICopOworc3RhdGljIHZvaWQJIHVtYl9zZW5kX2ZjY19hdXRoKHN0cnVjdCB1bWJfc29mdGMg
Kik7CitzdGF0aWMgdm9pZAkgdW1iX3BhY2tldF9zZXJ2aWNlKHN0cnVjdCB1bWJfc29mdGMgKiwg
aW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICopOworc3Rh
dGljIHZvaWQJIHVtYl9kaXNjb25uZWN0KHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9p
ZAkgdW1iX3NlbmRfY29ubmVjdChzdHJ1Y3QgdW1iX3NvZnRjICosIGludCk7CisKK3N0YXRpYyB2
b2lkCSB1bWJfcXJ5X2lwY29uZmlnKHN0cnVjdCB1bWJfc29mdGMgKik7CitzdGF0aWMgdm9pZAkg
dW1iX2NtZChzdHJ1Y3QgdW1iX3NvZnRjICosIGludCwgaW50LCBjb25zdCB2b2lkICosIGludCk7
CitzdGF0aWMgdm9pZAkgdW1iX2NtZDEoc3RydWN0IHVtYl9zb2Z0YyAqLCBpbnQsIGludCwgY29u
c3Qgdm9pZCAqLCBpbnQsIHVpbnQ4X3QgKik7CitzdGF0aWMgdm9pZAkgdW1iX2NvbW1hbmRfZG9u
ZShzdHJ1Y3QgdW1iX3NvZnRjICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyB2b2lkCSB1bWJfZGVj
b2RlX2NpZChzdHJ1Y3QgdW1iX3NvZnRjICosIHVpbnQzMl90LCB2b2lkICosIGludCk7CitzdGF0
aWMgdm9pZAkgdW1iX2RlY29kZV9xbWkoc3RydWN0IHVtYl9zb2Z0YyAqLCB1aW50OF90ICosIGlu
dCk7CisKK3N0YXRpYyB1c2JfY2FsbGJhY2tfdCB1bWJfaW50cjsKKworc3RhdGljIGNoYXIJKnVt
Yl9udG9wKHN0cnVjdCBzb2NrYWRkciAqKTsKKworc3RhdGljIGNvbnN0IGludCB1bWJfeGZlcl90
b3V0ID0gVVNCX0RFRkFVTFRfVElNRU9VVDsKKworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX2Jh
c2ljX2Nvbm5lY3RbXSA9IE1CSU1fVVVJRF9CQVNJQ19DT05ORUNUOworc3RhdGljIHVpbnQ4X3QJ
IHVtYl91dWlkX2NvbnRleHRfaW50ZXJuZXRbXSA9IE1CSU1fVVVJRF9DT05URVhUX0lOVEVSTkVU
Oworc3RhdGljIHVpbnQ4X3QJIHVtYl91dWlkX3FtaV9tYmltW10gPSBNQklNX1VVSURfUU1JX01C
SU07CitzdGF0aWMgdWludDMyX3QJIHVtYl9zZXNzaW9uX2lkID0gMDsKKworc3RhdGljIGNvbnN0
IHN0cnVjdCB1c2JfY29uZmlnIHVtYl9jb25maWdbVU1CX05fVFJBTlNGRVJdID0geworCVtVTUJf
SU5UUl9SWF0gPSB7CisJCS50eXBlID0gVUVfSU5URVJSVVBULAorCQkuZW5kcG9pbnQgPSBVRV9B
RERSX0FOWSwKKwkJLmRpcmVjdGlvbiA9IFVFX0RJUl9JTiwKKwkJLmlmX2luZGV4ID0gMSwKKwkJ
LmNhbGxiYWNrID0gdW1iX2ludHIsCisJCS5idWZzaXplID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2Nk
Y19ub3RpZmljYXRpb24pLAorCQkuZmxhZ3MgPSB7LnBpcGVfYm9mID0gMSwuc2hvcnRfeGZlcl9v
ayA9IDF9LAorCQkudXNiX21vZGUgPSBVU0JfTU9ERV9IT1NULAorCX0sCisJW1VNQl9CVUxLX1JY
XSA9IHsKKwkJLnR5cGUgPSBVRV9CVUxLLAorCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKKwkJ
LmRpcmVjdGlvbiA9IFVFX0RJUl9JTiwKKwkJLmlmX2luZGV4ID0gMCwKKwkJLmNhbGxiYWNrID0g
dW1iX3J4ZW9mLAorCQkuYnVmc2l6ZSA9IDggKiAxMDI0LAorCQkuZmxhZ3MgPSB7LnBpcGVfYm9m
ID0gMSwuc2hvcnRfeGZlcl9vayA9IDEsLmV4dF9idWZmZXIgPSAxfSwKKwkJLnVzYl9tb2RlID0g
VVNCX01PREVfSE9TVCwKKwl9LAorCVtVTUJfQlVMS19UWF0gPSB7CisJCS50eXBlID0gVUVfQlVM
SywKKwkJLmVuZHBvaW50ID0gVUVfQUREUl9BTlksCisJCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VU
LAorCQkuaWZfaW5kZXggPSAwLAorCQkuY2FsbGJhY2sgPSB1bWJfdHhlb2YsCisJCS5idWZzaXpl
ID0gOCAqIDEwMjQsCisJCS5mbGFncyA9IHsucGlwZV9ib2YgPSAxLC5mb3JjZV9zaG9ydF94ZmVy
ID0gMSwuZXh0X2J1ZmZlciA9IDF9LAorCQkudGltZW91dCA9IHVtYl94ZmVyX3RvdXQsCisJCS51
c2JfbW9kZSA9IFVTQl9NT0RFX0hPU1QsCisJfSwKK307CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9k
X3QgdW1iX21ldGhvZHNbXSA9IHsKKwkvKiBVU0IgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHVz
Yl9oYW5kbGVfcmVxdWVzdCwgdW1iX2hhbmRsZV9yZXF1ZXN0KSwKKworCS8qIERldmljZSBpbnRl
cmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCB1bWJfcHJvYmUpLAorCURFVk1FVEhP
RChkZXZpY2VfYXR0YWNoLCB1bWJfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwg
dW1iX2RldGFjaCksCisJREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCB1bWJfc3VzcGVuZCksCisJ
REVWTUVUSE9EKGRldmljZV9yZXN1bWUsIHVtYl9yZXN1bWUpLAorCisJREVWTUVUSE9EX0VORAor
fTsKKworc3RhdGljIGRyaXZlcl90IHVtYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAidW1iIiwKKwku
bWV0aG9kcyA9IHVtYl9tZXRob2RzLAorCS5zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdW1iX3NvZnRj
KSwKK307CisKK01BTExPQ19ERUZJTkUoTV9VU0JfVU1CLCAiVVNCIFVNQiIsICJVU0IgTUJJTSBk
cml2ZXIiKTsKKworY29uc3QgaW50IHVtYl9kZWxheSA9IDQwMDA7CisKKy8qCisgKiBUaGVzZSBk
ZXZpY2VzIHJlcXVpcmUgYW4gIkZDQyBBdXRoZW50aWNhdGlvbiIgY29tbWFuZC4KKyAqLworI2lm
bmRlZiBVU0JfVkVORE9SX1NJRVJSQQorIyBkZWZpbmUgVVNCX1ZFTkRPUl9TSUVSUkEJMHgxMTk5
CisjZW5kaWYKKyNpZm5kZWYgVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorIyBkZWZpbmUgVVNC
X1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQkweDkwNzkKKyNlbmRpZgorY29uc3Qgc3RydWN0IHVzYl9k
ZXZpY2VfaWQgdW1iX2ZjY2F1dGhfZGV2c1tdID0geworCXsKKwkJLm1hdGNoX2ZsYWdfdmVuZG9y
ID0gMSwKKwkJLm1hdGNoX2ZsYWdfcHJvZHVjdCA9IDEsCisJCS5pZFZlbmRvciA9IFVTQl9WRU5E
T1JfU0lFUlJBLAorCQkuaWRQcm9kdWN0ID0gVVNCX1BST0RVQ1RfU0lFUlJBX0VNNzQ1NQorCX0K
K307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHVtYl9xbWlfYWxsb2NfY2lkW10gPSB7CisJMHgw
MSwKKwkweDBmLCAweDAwLAkJLyogbGVuICovCisJMHgwMCwJCQkvKiBRTVVYIGZsYWdzICovCisJ
MHgwMCwJCQkvKiBzZXJ2aWNlICJjdGwiICovCisJMHgwMCwJCQkvKiBDSUQgKi8KKwkweDAwLAkJ
CS8qIFFNSSBmbGFncyAqLworCTB4MDEsCQkJLyogdHJhbnNhY3Rpb24gKi8KKwkweDIyLCAweDAw
LAkJLyogbXNnICJBbGxvY2F0ZSBDSUQiICovCisJMHgwNCwgMHgwMCwJCS8qIFRMViBsZW4gKi8K
KwkweDAxLCAweDAxLCAweDAwLCAweDAyCS8qIFRMViAqLworfTsKKworc3RhdGljIGNvbnN0IHVp
bnQ4X3QgdW1iX3FtaV9mY2NfYXV0aFtdID0geworCTB4MDEsCisJMHgwYywgMHgwMCwJCS8qIGxl
biAqLworCTB4MDAsCQkJLyogUU1VWCBmbGFncyAqLworCTB4MDIsCQkJLyogc2VydmljZSAiZG1z
IiAqLworI2RlZmluZSBVTUJfUU1JX0NJRF9PRkZTCTUKKwkweDAwLAkJCS8qIENJRCAoZmlsbGVk
IGluIGxhdGVyKSAqLworCTB4MDAsCQkJLyogUU1JIGZsYWdzICovCisJMHgwMSwgMHgwMCwJCS8q
IHRyYW5zYWN0aW9uICovCisJMHg1ZiwgMHg1NSwJCS8qIG1zZyAiU2VuZCBGQ0MgQXV0aGVudGlj
YXRpb24iICovCisJMHgwMCwgMHgwMAkJLyogVExWIGxlbiAqLworfTsKKworc3RhdGljIGludAor
dW1iX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgdXNiX2F0dGFjaF9hcmcgKnVhYSA9
IGRldmljZV9nZXRfaXZhcnMoZGV2KTsKKwl1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfdCAqaWQ7
CisKKwlpZiAodWFhLT51c2JfbW9kZSAhPSBVU0JfTU9ERV9IT1NUKQorCQlyZXR1cm4gKEVOWElP
KTsKKwlpZiAoKGlkID0gdXNiZF9nZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IodWFhLT5pZmFjZSkp
ID09IE5VTEwpCisJCXJldHVybiAoRU5YSU8pOworCisJLyoKKwkgKiBJZiB0aGlzIGZ1bmN0aW9u
IGltcGxlbWVudHMgTkNNLCBjaGVjayBpZiBhbHRlcm5hdGUgc2V0dGluZworCSAqIDEgaW1wbGVt
ZW50cyBNQklNLgorCSAqLworCWlmIChpZC0+YkludGVyZmFjZUNsYXNzID09IFVJQ0xBU1NfQ0RD
ICYmCisJICAgIGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0KKwkgICAgVUlTVUJDTEFTU19ORVRX
T1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRv
cigKKwkJCQl1c2JkX2dldF9pZmFjZSh1YWEtPmRldmljZSwKKwkJCQkJdWFhLT5pbmZvLmJJZmFj
ZUluZGV4ICsgMSkpOworCQlpZiAoaWQgPT0gTlVMTCB8fCBpZC0+YkFsdGVybmF0ZVNldHRpbmcg
IT0gMSkKKwkJCXJldHVybiAoRU5YSU8pOworCX0KKworI2lmbmRlZiBVSVNVQkNMQVNTX01PQklM
RV9CUk9BREJBTkRfSU5URVJGQUNFX01PREVMCisjIGRlZmluZSBVSVNVQkNMQVNTX01PQklMRV9C
Uk9BREJBTkRfSU5URVJGQUNFX01PREVMIDE0CisjZW5kaWYKKwlpZiAoaWQtPmJJbnRlcmZhY2VD
bGFzcyA9PSBVSUNMQVNTX0NEQyAmJgorCSAgICBpZC0+YkludGVyZmFjZVN1YkNsYXNzID09CisJ
ICAgIFVJU1VCQ0xBU1NfTU9CSUxFX0JST0FEQkFORF9JTlRFUkZBQ0VfTU9ERUwgJiYKKwkgICAg
aWQtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAwKQorCQlyZXR1cm4gKEJVU19QUk9CRV9TUEVDSUZJ
Qyk7CisKKwlyZXR1cm4gKEVOWElPKTsKK30KKworc3RhdGljIGludAordW1iX2F0dGFjaChkZXZp
Y2VfdCBkZXYpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJc3RydWN0IHVzYl9hdHRhY2hfYXJnICp1YWEgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7
CisJc3RydWN0IHVzYl9jb25maWcgY29uZmlnW1VNQl9OX1RSQU5TRkVSXTsKKwlpbnQJIHY7CisJ
Y29uc3Qgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzY3JpcHRvciAqdWQ7CisJY29uc3Qgc3RydWN0
IG1iaW1fZGVzY3JpcHRvciAqbWQ7CisJaW50CSBpOworCXVzYl9pbnRlcmZhY2VfZGVzY3JpcHRv
cl90ICppZDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJaW50CSBkYXRhX2lmYWNl
bm8gPSAtMTsKKwl1c2JfZXJyb3JfdCBlcnJvcjsKKworCXNjLT5zY19kZXYgPSBkZXY7CisJc2Mt
PnNjX3VkZXYgPSB1YWEtPmRldmljZTsKKworCW1lbWNweShjb25maWcsIHVtYl9jb25maWcsIHNp
emVvZiAoY29uZmlnKSk7CisKKwlkZXZpY2Vfc2V0X3VzYl9kZXNjKGRldik7CisKKwlzYy0+c2Nf
Y3RybF9pZmFjZW5vID0gdWFhLT5pbmZvLmJJZmFjZU51bTsKKworCW10eF9pbml0KCZzYy0+c2Nf
bXV0ZXgsIGRldmljZV9nZXRfbmFtZXVuaXQoZGV2KSwgTlVMTCwgTVRYX0RFRik7CisKKwkvKgor
CSAqIFNvbWUgTUJJTSBoYXJkd2FyZSBkb2VzIG5vdCBwcm92aWRlIHRoZSBtYW5kYXRvcnkgQ0RD
IFVuaW9uCisJICogRGVzY3JpcHRvciwgc28gd2UgYWxzbyBsb29rIGF0IG1hdGNoaW5nIEludGVy
ZmFjZQorCSAqIEFzc29jaWF0aW9uIERlc2NyaXB0b3JzIHRvIGZpbmQgb3V0IHRoZSBNQklNIERh
dGEgSW50ZXJmYWNlCisJICogbnVtYmVyLgorCSAqLworCXNjLT5zY192ZXJfbWFqID0gc2MtPnNj
X3Zlcl9taW4gPSAtMTsKKwlzYy0+c2NfbWF4cGt0bGVuID0gTUJJTV9NQVhTRUdTWl9NSU5WQUw7
CisJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcih1YWEtPmlmYWNlKTsKKworCXVk
ID0gdXNiZF9maW5kX2Rlc2NyaXB0b3Ioc2MtPnNjX3VkZXYsIGlkLCB1YWEtPmluZm8uYklmYWNl
SW5kZXgsCisJCQlVREVTQ19DU19JTlRFUkZBQ0UsIDB4ZmYsIFVERVNDU1VCX0NEQ19VTklPTiwg
MHhmZik7CisJaWYgKHVkICE9IE5VTEwpIHsKKwkJZGF0YV9pZmFjZW5vID0gdWQtPmJTbGF2ZUlu
dGVyZmFjZVswXTsKKwl9CisKKwltZCA9IHVzYmRfZmluZF9kZXNjcmlwdG9yKHNjLT5zY191ZGV2
LCBpZCwgdWFhLT5pbmZvLmJJZmFjZUluZGV4LAorCQkJVURFU0NfQ1NfSU5URVJGQUNFLCAweGZm
LCBVREVTQ1NVQl9NQklNLCAweGZmKTsKKwlpZiAobWQgIT0gTlVMTCkgeworCQl2ID0gVUdFVFco
bWQtPmJjZE1CSU1WZXJzaW9uKTsKKwkJc2MtPnNjX3Zlcl9tYWogPSBNQklNX1ZFUl9NQUpPUih2
KTsKKwkJc2MtPnNjX3Zlcl9taW4gPSBNQklNX1ZFUl9NSU5PUih2KTsKKwkJc2MtPnNjX2N0cmxf
bGVuID0gVUdFVFcobWQtPndNYXhDb250cm9sTWVzc2FnZSk7CisJCS8qIE5ldmVyIHRydXN0IGEg
VVNCIGRldmljZSEgQ291bGQgdHJ5IHRvIGV4cGxvaXQgdXMgKi8KKwkJaWYgKHNjLT5zY19jdHJs
X2xlbiA8IE1CSU1fQ1RSTE1TR19NSU5MRU4gfHwKKwkJCQlzYy0+c2NfY3RybF9sZW4gPiBNQklN
X0NUUkxNU0dfTUFYTEVOKSB7CisJCQlEUFJJTlRGKCJjb250cm9sIG1lc3NhZ2UgbGVuICVkIG91
dCBvZiAiCisJCQkJCSJib3VuZHMgWyVkIC4uICVkXVxuIiwKKwkJCQkJc2MtPnNjX2N0cmxfbGVu
LCBNQklNX0NUUkxNU0dfTUlOTEVOLAorCQkJCQlNQklNX0NUUkxNU0dfTUFYTEVOKTsKKwkJCS8q
IGNvbnRpbnVlIGFueXdheSAqLworCQl9CisJCXNjLT5zY19tYXhwa3RsZW4gPSBVR0VUVyhtZC0+
d01heFNlZ21lbnRTaXplKTsKKwkJRFBSSU5URk4oMiwgImN0cmxfbGVuPSVkLCBtYXhwa3RsZW49
JWQsIGNhcD0weCV4XG4iLAorCQkJCXNjLT5zY19jdHJsX2xlbiwgc2MtPnNjX21heHBrdGxlbiwK
KwkJCQltZC0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzKTsKKwl9CisJaWYgKHNjLT5zY192ZXJfbWFq
IDwgMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yOiBtaXNzaW5nIE1CSU0gZGVzY3Jp
cHRvclxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgInZlcnNp
b24gJWQuJWRcbiIsIHNjLT5zY192ZXJfbWFqLAorCSAgICBzYy0+c2NfdmVyX21pbik7CisKKwlp
ZiAodXNiZF9sb29rdXBfaWRfYnlfdWFhKHVtYl9mY2NhdXRoX2RldnMsIHNpemVvZiAodW1iX2Zj
Y2F1dGhfZGV2cyksCisJCQkJICB1YWEpKSB7CisJCXNjLT5zY19mbGFncyB8PSBVTUJGTEdfRkND
X0FVVEhfUkVRVUlSRUQ7CisJCXNjLT5zY19jaWQgPSAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp
IDwgc2MtPnNjX3VkZXYtPmlmYWNlc19tYXg7IGkrKykgeworCQlpZmFjZSA9IHVzYmRfZ2V0X2lm
YWNlKHNjLT5zY191ZGV2LCBpKTsKKwkJaWQgPSB1c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRv
cihpZmFjZSk7CisJCWlmIChpZCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJaWYgKGlkLT5iSW50
ZXJmYWNlTnVtYmVyID09IGRhdGFfaWZhY2VubykgeworCQkJc2MtPnNjX2RhdGFfaWZhY2UgPSBp
ZmFjZTsKKwkJCXNjLT5zY19pZmFjZXNfaW5kZXhbMF0gPSBpOworCQkJc2MtPnNjX2lmYWNlc19p
bmRleFsxXSA9IHVhYS0+aW5mby5iSWZhY2VJbmRleDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlm
IChzYy0+c2NfZGF0YV9pZmFjZSA9PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZXJy
b3I6IG5vIGRhdGEgaW50ZXJmYWNlIGZvdW5kXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCS8q
CisJICogSWYgdGhpcyBpcyBhIGNvbWJpbmVkIE5DTS9NQklNIGZ1bmN0aW9uLCBzd2l0Y2ggdG8K
KwkgKiBhbHRlcm5hdGUgc2V0dGluZyBvbmUgdG8gZW5hYmxlIE1CSU0uCisJICovCisJaWQgPSB1
c2JkX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcih1YWEtPmlmYWNlKTsKKwlpZiAoaWQgIT0gTlVM
TCAmJiBpZC0+YkludGVyZmFjZUNsYXNzID09IFVJQ0xBU1NfQ0RDICYmCisJICAgIGlkLT5iSW50
ZXJmYWNlU3ViQ2xhc3MgPT0gVUlTVUJDTEFTU19ORVRXT1JLX0NPTlRST0xfTU9ERUwpIHsKKwkJ
ZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAiY29tYmluZWQgTkNNL01CSU1cbiIpOworCQllcnJv
ciA9IHVzYmRfcmVxX3NldF9hbHRfaW50ZXJmYWNlX25vKHNjLT5zY191ZGV2LAorCQkJCU5VTEws
IHVhYS0+aW5mby5iSWZhY2VJbmRleCwgMSk7CisJCWlmIChlcnJvciAhPSBVU0JfRVJSX05PUk1B
TF9DT01QTEVUSU9OKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yOiBDb3VsZCBub3Qg
c3dpdGNoIHRvIgorCQkJCQkgICAiIGFsdGVybmF0ZSBzZXR0aW5nIGZvciBNQklNXG4iKTsKKwkJ
CWdvdG8gZmFpbDsKKwkJfQorCQlzYy0+c2NfaWZhY2VzX2luZGV4WzFdID0gdWFhLT5pbmZvLmJJ
ZmFjZUluZGV4ICsgMTsKKwl9CisKKwlpZiAodXNiX3Byb2NfY3JlYXRlKCZzYy0+c2NfdGFza3F1
ZXVlLCAmc2MtPnNjX211dGV4LAorCQkJCWRldmljZV9nZXRfbmFtZXVuaXQoc2MtPnNjX2Rldiks
CisJCQkJVVNCX1BSSV9NRUQpICE9IDApCisJCWdvdG8gZmFpbDsKKworCURQUklOVEZOKDIsICJj
dHJsLWlmbm8jJWQ6IGRhdGEtaWZubyMlZFxuIiwgc2MtPnNjX2N0cmxfaWZhY2VubywKKwkgICAg
ZGF0YV9pZmFjZW5vKTsKKworCXVzYl9jYWxsb3V0X2luaXRfbXR4KCZzYy0+c2Nfc3RhdGVjaGdf
dGltZXIsICZzYy0+c2NfbXV0ZXgsIDApOworCisJdW1iX25jbV9zZXR1cChzYywgY29uZmlnKTsK
KwlEUFJJTlRGTigyLCAiJXM6IHJ4L3R4IHNpemUgJWQvJWRcbiIsIERFVk5BTShzYyksCisJCQlz
Yy0+c2NfcnhfYnVmc3osIHNjLT5zY190eF9idWZzeik7CisKKwlzYy0+c2NfcnhfYnVmID0gbWFs
bG9jKHNjLT5zY19yeF9idWZzeiwgTV9ERVZCVUYsIE1fV0FJVE9LKTsKKwlzYy0+c2NfdHhfYnVm
ID0gbWFsbG9jKHNjLT5zY190eF9idWZzeiwgTV9ERVZCVUYsIE1fV0FJVE9LKTsKKworCWZvciAo
aSA9IDA7IGkgIT0gMzI7IGkrKykgeworCQllcnJvciA9IHVzYmRfc2V0X2FsdF9pbnRlcmZhY2Vf
aW5kZXgoc2MtPnNjX3VkZXYsCisJCQkJc2MtPnNjX2lmYWNlc19pbmRleFswXSwgaSk7CisJCWlm
IChlcnJvcikKKwkJCWJyZWFrOworCisJCWVycm9yID0gdXNiZF90cmFuc2Zlcl9zZXR1cChzYy0+
c2NfdWRldiwgc2MtPnNjX2lmYWNlc19pbmRleCwKKwkJCQlzYy0+c2NfeGZlciwgY29uZmlnLCBV
TUJfTl9UUkFOU0ZFUiwKKwkJCQlzYywgJnNjLT5zY19tdXRleCk7CisJCWlmIChlcnJvciA9PSBV
U0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKQorCQkJYnJlYWs7CisJfQorCWlmIChlcnJvciB8fCAo
aSA9PSAzMikpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAiZXJyb3I6IGZhaWxlZCB0
byBzZXR1cCB4ZmVyc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzYy0+c2NfcmVzcF9idWYg
PSBtYWxsb2Moc2MtPnNjX2N0cmxfbGVuLCBNX0RFVkJVRiwgTV9XQUlUT0spOworCXNjLT5zY19j
dHJsX21zZyA9IG1hbGxvYyhzYy0+c2NfY3RybF9sZW4sIE1fREVWQlVGLCBNX1dBSVRPSyk7CisK
KwlzYy0+c2NfaW5mby5yZWdzdGF0ZSA9IE1CSU1fUkVHU1RBVEVfVU5LTk9XTjsKKwlzYy0+c2Nf
aW5mby5waW5fYXR0ZW1wdHNfbGVmdCA9IFVNQl9WQUxVRV9VTktOT1dOOworCXNjLT5zY19pbmZv
LnJzc2kgPSBVTUJfVkFMVUVfVU5LTk9XTjsKKwlzYy0+c2NfaW5mby5iZXIgPSBVTUJfVkFMVUVf
VU5LTk9XTjsKKworCS8qIGRlZmVyIGF0dGFjaGluZyB0aGUgaW50ZXJmYWNlICovCisJbXR4X2xv
Y2soJnNjLT5zY19tdXRleCk7CisJdW1iX2FkZF90YXNrKHNjLCB1bWJfYXR0YWNoX3Rhc2ssCisJ
CQkmc2MtPnNjX3Byb2NfYXR0YWNoX3Rhc2tbMF0uaGRyLAorCQkJJnNjLT5zY19wcm9jX2F0dGFj
aF90YXNrWzFdLmhkciwgMCk7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCXJldHVy
biAoMCk7CisKK2ZhaWw6CisJdW1iX2RldGFjaChzYy0+c2NfZGV2KTsKKwlyZXR1cm4gKEVOWElP
KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9hdHRhY2hfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNn
ICptc2cpCit7CisJc3RydWN0IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1z
ZzsKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZw
OworCisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKworCUNVUlZORVRfU0VUX1FVSUVUKHZu
ZXQwKTsKKworCS8qIGluaXRpYWxpemUgdGhlIGludGVyZmFjZSAqLworCXNjLT5zY19pZiA9IGlm
cCA9IGlmX2FsbG9jKElGVF9NQklNKTsKKwlpZl9pbml0bmFtZShpZnAsICJ1bWIiLCBkZXZpY2Vf
Z2V0X3VuaXQoc2MtPnNjX2RldikpOworCisJaWZfc2V0c29mdGMoaWZwLCBzYyk7CisJaWZfc2V0
ZmxhZ3MoaWZwLCBJRkZfU0lNUExFWCB8IElGRl9NVUxUSUNBU1QgfCBJRkZfUE9JTlRPUE9JTlQp
OworCWlmX3NldGlvY3RsZm4oaWZwLCB1bWJfaW9jdGwpOworI2lmZGVmIERFVl9ORVRNQVAKKwlp
Zl9zZXRpbnB1dGZuKGlmcCwgdW1iX2lucHV0KTsKKyNlbmRpZgorCWlmX3NldG91dHB1dGZuKGlm
cCwgdW1iX291dHB1dCk7CisJaWZwLT5pZl9zdGFydCA9IHVtYl9zdGFydDsKKwlpZl9zZXRpbml0
Zm4oaWZwLCB1bWJfaW5pdCk7CisKKyNpZiAwCisJaWZwLT5pZl93YXRjaGRvZyA9IHVtYl93YXRj
aGRvZzsKKyNlbmRpZgorCWlmcC0+aWZfbGlua19zdGF0ZSA9IExJTktfU1RBVEVfRE9XTjsKKwlp
Zm1lZGlhX2luaXQoJnNjLT5zY19pbSwgMCwgdW1iX21lZGlhY2hhbmdlLCB1bWJfbWVkaWFzdGF0
dXMpOworCWlmbWVkaWFfYWRkKCZzYy0+c2NfaW0sIElGTV9OT05FIHwgSUZNX0FVVE8sIDAsIE5V
TEwpOworCisJaWZwLT5pZl9hZGRybGVuID0gMDsKKwlpZnAtPmlmX2hkcmxlbiA9IHNpemVvZiAo
c3RydWN0IG5jbV9oZWFkZXIxNikgKworCSAgICBzaXplb2YgKHN0cnVjdCBuY21fcG9pbnRlcjE2
KTsKKwkvKiBYWFggaGFyZC1jb2RlZCBhdG0gKi8KKwlpZl9zZXRtdHUoaWZwLCBNSU4oMjA0OCwg
c2MtPnNjX21heHBrdGxlbikpOworCUlGUV9TRVRfTUFYTEVOKCZpZnAtPmlmX3NuZCwgaWZxbWF4
bGVuKTsKKwlpZnAtPmlmX3NuZC5pZnFfZHJ2X21heGxlbiA9IGlmcW1heGxlbjsKKwlJRlFfU0VU
X1JFQURZKCZpZnAtPmlmX3NuZCk7CisKKwkvKiBhdHRhY2ggdGhlIGludGVyZmFjZSAqLworCWlm
X2F0dGFjaChpZnApOworCWJwZmF0dGFjaChpZnAsIERMVF9SQVcsIDApOworCisJc2MtPnNjX2F0
dGFjaGVkID0gMTsKKworCUNVUlZORVRfUkVTVE9SRSgpOworCisJdW1iX2luaXQoc2MpOworCW10
eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgaW50Cit1bWJfZGV0YWNoKGRldmlj
ZV90IGRldikKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJdXNiX3Byb2NfZHJhaW4o
JnNjLT5zY190YXNrcXVldWUpOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJaWYgKGlm
cCAhPSBOVUxMICYmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCXVt
Yl9kb3duKHNjLCAxKTsKKwl1bWJfY2xvc2Uoc2MpOworCW10eF91bmxvY2soJnNjLT5zY19tdXRl
eCk7CisKKwl1c2JkX3RyYW5zZmVyX3Vuc2V0dXAoc2MtPnNjX3hmZXIsIFVNQl9OX1RSQU5TRkVS
KTsKKworCWZyZWUoc2MtPnNjX3R4X2J1ZiwgTV9ERVZCVUYpOworCWZyZWUoc2MtPnNjX3J4X2J1
ZiwgTV9ERVZCVUYpOworCisJdXNiX2NhbGxvdXRfZHJhaW4oJnNjLT5zY19zdGF0ZWNoZ190aW1l
cik7CisKKwl1c2JfcHJvY19mcmVlKCZzYy0+c2NfdGFza3F1ZXVlKTsKKworCW10eF9kZXN0cm95
KCZzYy0+c2NfbXV0ZXgpOworCisJZnJlZShzYy0+c2NfY3RybF9tc2csIE1fREVWQlVGKTsKKwlm
cmVlKHNjLT5zY19yZXNwX2J1ZiwgTV9ERVZCVUYpOworCisJaWYgKGlmcCAhPSBOVUxMICYmIGlm
cC0+aWZfc29mdGMpIHsKKwkJaWZtZWRpYV9yZW1vdmVhbGwoJnNjLT5zY19pbSk7CisJfQorCWlm
IChzYy0+c2NfYXR0YWNoZWQpIHsKKwkJYnBmZGV0YWNoKGlmcCk7CisJCWlmX2RldGFjaChpZnAp
OworCQlpZl9mcmVlKGlmcCk7CisJCXNjLT5zY19pZiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBz
dHJ1Y3QgdXNiX2NvbmZpZyAqIGNvbmZpZykKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7
CisJc3RydWN0IG5jbV9udGJfcGFyYW1ldGVycyBucDsKKwl1c2JfZXJyb3JfdCBlcnJvcjsKKwor
CS8qIFF1ZXJ5IE5UQiB0cmFuZmVycyBzaXplcyAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRf
UkVBRF9DTEFTU19JTlRFUkZBQ0U7CisJcmVxLmJSZXF1ZXN0ID0gTkNNX0dFVF9OVEJfUEFSQU1F
VEVSUzsKKwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2Nf
Y3RybF9pZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgc2l6ZW9mIChucCkpOworCW10eF9s
b2NrKCZzYy0+c2NfbXV0ZXgpOworCWVycm9yID0gdXNiZF9kb19yZXF1ZXN0KHNjLT5zY191ZGV2
LCAmc2MtPnNjX211dGV4LCAmcmVxLCAmbnApOworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7
CisJaWYgKGVycm9yID09IFVTQl9FUlJfTk9STUFMX0NPTVBMRVRJT04gJiYKKwkgICAgVUdFVFco
bnAud0xlbmd0aCkgPT0gc2l6ZW9mIChucCkpIHsKKwkJY29uZmlnW1VNQl9CVUxLX1JYXS5idWZz
aXplID0gVUdFVERXKG5wLmR3TnRiSW5NYXhTaXplKTsKKwkJY29uZmlnW1VNQl9CVUxLX1RYXS5i
dWZzaXplID0gVUdFVERXKG5wLmR3TnRiT3V0TWF4U2l6ZSk7CisJfQorCXNjLT5zY19yeF9idWZz
eiA9IGNvbmZpZ1tVTUJfQlVMS19SWF0uYnVmc2l6ZTsKKwlzYy0+c2NfdHhfYnVmc3ogPSBjb25m
aWdbVU1CX0JVTEtfVFhdLmJ1ZnNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9oYW5kbGVfcmVx
dWVzdChkZXZpY2VfdCBkZXYsCisgICAgY29uc3Qgdm9pZCAqcHJlcSwgdm9pZCAqKnBwdHIsIHVp
bnQxNl90ICpwbGVuLAorICAgIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCAqcHN0YXRlKQorewor
CS8qIEZJWE1FIHJlYWxseSBpbXBsZW1lbnQgKi8KKworCXJldHVybiAoRU5YSU8pOworfQorCitz
dGF0aWMgaW50Cit1bWJfc3VzcGVuZChkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3ByaW50Zihk
ZXYsICJTdXNwZW5kaW5nXG4iKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit1bWJf
cmVzdW1lKGRldmljZV90IGRldikKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlJlc3VtaW5nXG4i
KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit1bWJfZGVhY3RpdmF0ZShkZXZpY2Vf
dCBkZXYpCit7CisJc3RydWN0IHVtYl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChpZnAgIT0gTlVMTCkg
eworCQlpZl9kZWFkKGlmcCk7CisJfQorCXNjLT5zY19keWluZyA9IDE7CisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyB2b2lkCit1bWJfY2xvc2VfYnVsa3BpcGVzKHN0cnVjdCB1bWJfc29mdGMgKnNj
KQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZnAtPmlmX2Rydl9m
bGFncyAmPSB+KElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElWRSk7CisKKwl1bWJfcnhm
bHVzaChzYyk7CisJdW1iX3R4Zmx1c2goc2MpOworCisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5z
Y194ZmVyW1VNQl9CVUxLX1JYXSk7CisJdXNiZF90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyW1VN
Ql9CVUxLX1RYXSk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9pb2N0bChzdHJ1Y3QgaWZuZXQgKmlm
cCwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0g
aWZwLT5pZl9zb2Z0YzsKKwlzdHJ1Y3QgaW5faWZhZGRyICppYSA9IChzdHJ1Y3QgaW5faWZhZGRy
ICopZGF0YTsKKwlzdHJ1Y3QgaWZyZXEgKmlmciA9IChzdHJ1Y3QgaWZyZXEgKilkYXRhOworCWlu
dCBlcnJvciA9IDA7CisJc3RydWN0IHVtYl9wYXJhbWV0ZXIgbXA7CisKKwlpZiAoc2MtPnNjX2R5
aW5nKQorCQlyZXR1cm4gRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZBRERS
OgorCQlzd2l0Y2ggKGlhLT5pYV9pZmEuaWZhX2FkZHItPnNhX2ZhbWlseSkgeworCQljYXNlIEFG
X0lORVQ6CisJCQlicmVhazsKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJYnJl
YWs7CisjZW5kaWYgLyogSU5FVDYgKi8KKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUFGTk9TVVBQ
T1JUOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJCW10
eF9sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQl1bWJfYWRkX3Rhc2soc2MsIHVtYl9zdGF0ZV90YXNr
LAorCQkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBdLmhkciwKKwkJCQkmc2MtPnNjX3Byb2Nf
c3RhdGVfdGFza1sxXS5oZHIsIDEpOworCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCQli
cmVhazsKKwljYXNlIFNJT0NHVU1CSU5GTzoKKwkJZXJyb3IgPSBjb3B5b3V0KCZzYy0+c2NfaW5m
bywgaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsCisJCSAgICBzaXplb2YgKHNjLT5zY19pbmZvKSk7
CisJCWJyZWFrOworCWNhc2UgU0lPQ1NVTUJQQVJBTToKKwkJZXJyb3IgPSBwcml2X2NoZWNrKGN1
cnRocmVhZCwgUFJJVl9ORVRfU0VUSUZQSFlTKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisK
KwkJaWYgKChlcnJvciA9IGNvcHlpbihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJm1wLCBzaXpl
b2YgKG1wKSkpICE9IDApCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gdW1iX3NldHBpbihz
YywgbXAub3AsIG1wLmlzX3B1aywgbXAucGluLCBtcC5waW5sZW4sCisJCSAgICBtcC5uZXdwaW4s
IG1wLm5ld3BpbmxlbikpICE9IDApCisJCQlicmVhazsKKworCQlpZiAobXAuYXBubGVuIDwgMCB8
fCBtcC5hcG5sZW4gPiBzaXplb2YgKHNjLT5zY19pbmZvLmFwbikpIHsKKwkJCWVycm9yID0gRUlO
VkFMOworCQkJYnJlYWs7CisJCX0KKwkJc2MtPnNjX3JvYW1pbmcgPSBtcC5yb2FtaW5nID8gMSA6
IDA7CisJCW1lbXNldChzYy0+c2NfaW5mby5hcG4sIDAsIHNpemVvZiAoc2MtPnNjX2luZm8uYXBu
KSk7CisJCW1lbWNweShzYy0+c2NfaW5mby5hcG4sIG1wLmFwbiwgbXAuYXBubGVuKTsKKwkJc2Mt
PnNjX2luZm8uYXBubGVuID0gbXAuYXBubGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8udXNlcm5h
bWUsIDAsIHNpemVvZiAoc2MtPnNjX2luZm8udXNlcm5hbWUpKTsKKwkJbWVtY3B5KHNjLT5zY19p
bmZvLnVzZXJuYW1lLCBtcC51c2VybmFtZSwgbXAudXNlcm5hbWVsZW4pOworCQlzYy0+c2NfaW5m
by51c2VybmFtZWxlbiA9IG1wLnVzZXJuYW1lbGVuOworCQltZW1zZXQoc2MtPnNjX2luZm8ucGFz
c3dvcmQsIDAsIHNpemVvZiAoc2MtPnNjX2luZm8ucGFzc3dvcmQpKTsKKwkJbWVtY3B5KHNjLT5z
Y19pbmZvLnBhc3N3b3JkLCBtcC5wYXNzd29yZCwgbXAucGFzc3dvcmRsZW4pOworCQlzYy0+c2Nf
aW5mby5wYXNzd29yZGxlbiA9IG1wLnBhc3N3b3JkbGVuOworCQlzYy0+c2NfaW5mby5wcmVmZXJy
ZWRjbGFzc2VzID0gbXAucHJlZmVycmVkY2xhc3NlczsKKwkJdW1iX3NldGRhdGFjbGFzcyhzYyk7
CisJCWJyZWFrOworCWNhc2UgU0lPQ0dVTUJQQVJBTToKKwkJbWVtc2V0KCZtcCwgMCwgc2l6ZW9m
IChtcCkpOworCQltZW1jcHkobXAuYXBuLCBzYy0+c2NfaW5mby5hcG4sIHNjLT5zY19pbmZvLmFw
bmxlbik7CisJCW1wLmFwbmxlbiA9IHNjLT5zY19pbmZvLmFwbmxlbjsKKwkJbXAucm9hbWluZyA9
IHNjLT5zY19yb2FtaW5nOworCQltcC5wcmVmZXJyZWRjbGFzc2VzID0gc2MtPnNjX2luZm8ucHJl
ZmVycmVkY2xhc3NlczsKKwkJZXJyb3IgPSBjb3B5b3V0KCZtcCwgaWZyLT5pZnJfaWZydS5pZnJ1
X2RhdGEsIHNpemVvZiAobXApKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBE
b2VzIHRoaXMgaW5jbHVkZSB0aGUgTkNNIGhlYWRlcnMgYW5kIHRhaWw/ICovCisJCWlmIChpZnIt
Pmlmcl9tdHUgPiBpZnAtPmlmX210dSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsK
KwkJfQorCQlpZnAtPmlmX210dSA9IGlmci0+aWZyX210dTsKKwkJYnJlYWs7CisJY2FzZSBTSU9D
QUlGQUREUjoKKwljYXNlIFNJT0NTSUZEU1RBRERSOgorCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNh
c2UgU0lPQ0RFTE1VTFRJOgorCQlicmVhazsKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyb3Ig
PSBpZm1lZGlhX2lvY3RsKGlmcCwgaWZyLCAmc2MtPnNjX2ltLCBjbWQpOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQllcnJvciA9IEVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZXJyb3Ip
OworfQorCitzdGF0aWMgdm9pZAordW1iX2luaXQodm9pZCAqYXJnKQoreworCXN0cnVjdCB1bWJf
c29mdGMgKnNjID0gYXJnOworCisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJdW1iX2FkZF90
YXNrKHNjLCB1bWJfc3RhcnRfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGFydF90YXNrWzBdLmhk
ciwKKwkJCSZzYy0+c2NfcHJvY19zdGFydF90YXNrWzFdLmhkciwgMCk7CisJbXR4X3VubG9jaygm
c2MtPnNjX211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9pbnB1dChzdHJ1Y3QgaWZuZXQg
KmlmcCwgc3RydWN0IG1idWYgKm0pCit7CisJc3RydWN0IG1idWYgKm1uOworCXN0cnVjdCBlcG9j
aF90cmFja2VyIGV0OworCisJd2hpbGUgKG0pIHsKKwkJbW4gPSBtLT5tX25leHRwa3Q7CisJCW0t
Pm1fbmV4dHBrdCA9IE5VTEw7CisKKwkJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKwkJQlBGX01UQVAo
aWZwLCBtKTsKKworCQlDVVJWTkVUX1NFVF9RVUlFVCh2bmV0MCk7CisKKwkJbmV0aXNyX2Rpc3Bh
dGNoKE5FVElTUl9JUCwgbSk7CisJCW0gPSBtbjsKKworCQlDVVJWTkVUX1JFU1RPUkUoKTsKKwkJ
TkVUX0VQT0NIX0VYSVQoZXQpOworCX0KK30KKworc3RhdGljIGludAordW1iX291dHB1dChzdHJ1
Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0sIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHN0
LAorICAgIHN0cnVjdCByb3V0ZSAqcnRwKQoreworCWludCBlcnJvcjsKKworCURQUklOVEZOKDEw
LCAiJXM6IGVudGVyXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKyNl
bmRpZgorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7CisKKwkJLyogc2lsZW50bHkgZHJvcCBkaGNs
aWVudCBwYWNrZXRzICovCisJY2FzZSBBRl9VTlNQRUM6CisJCW1fZnJlZW0obSk7CisJCXJldHVy
biAoMCk7CisKKwkJLyogZHJvcCBvdGhlciBwYWNrZXQgdHlwZXMgKi8KKwlkZWZhdWx0OgorCQlt
X2ZyZWVtKG0pOworCQlyZXR1cm4gKEVBRk5PU1VQUE9SVCk7CisJfQorCisJLyoKKwkgKiBRdWV1
ZSBtZXNzYWdlIG9uIGludGVyZmFjZSwgYW5kIHN0YXJ0IG91dHB1dCBpZiBpbnRlcmZhY2UKKwkg
KiBub3QgeWV0IGFjdGl2ZS4KKwkgKi8KKwllcnJvciA9IChpZnAtPmlmX3RyYW5zbWl0KShpZnAs
IG0pOworCWlmIChlcnJvcikgeworCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9PRVJS
T1JTLCAxKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgdm9pZAordW1iX3N0YXJ0KHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJf
c29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKworCWlmIChzYy0+c2NfZHlpbmcgfHwgIShpZnAt
PmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCXJldHVybjsKKworCW10eF9sb2Nr
KCZzYy0+c2NfbXV0ZXgpOworCXVzYmRfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVU1CX0JV
TEtfVFhdKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAor
dW1iX3N0YXJ0X3Rhc2soc3RydWN0IHVzYl9wcm9jX21zZyAqbXNnKQoreworCXN0cnVjdCB1bWJf
dGFzayAqdGFzayA9IChzdHJ1Y3QgdW1iX3Rhc2sgKiltc2c7CisJc3RydWN0IHVtYl9zb2Z0YyAq
c2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJRFBS
SU5URigiJXMoKVxuIiwgX19mdW5jX18pOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBN
QV9PV05FRCk7CisKKwlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwkv
KiBzdGFydCBpbnRlcnJ1cHQgdHJhbnNmZXIgKi8KKwl1c2JkX3RyYW5zZmVyX3N0YXJ0KHNjLT5z
Y194ZmVyW1VNQl9JTlRSX1JYXSk7CisKKwl1bWJfb3BlbihzYyk7Cit9CisKKyNpZiAwCitzdGF0
aWMgdm9pZAordW1iX3dhdGNoZG9nKHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCB1bWJf
c29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKworCWlmIChzYy0+c2NfZHlpbmcpCisJCXJldHVy
bjsKKworCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCWRldmlj
ZV9wcmludGYoc2MtPnNjX2RldiwgIndhdGNoZG9nIHRpbWVvdXRcbiIpOworCXVzYmRfdHJhbnNm
ZXJfZHJhaW4oc2MtPnNjX3hmZXJbVU1CX0JVTEtfVFhdKTsKKwlyZXR1cm47Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQKK3VtYl9zdGF0ZWNoZ190aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1
Y3QgdW1iX3NvZnRjICpzYyA9IGFyZzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2Mp
OworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlpZiAoc2MtPnNj
X2luZm8ucmVnc3RhdGUgIT0gTUJJTV9SRUdTVEFURV9ST0FNSU5HIHx8IHNjLT5zY19yb2FtaW5n
KQorCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfREVCVUcsICIl
czogc3RhdGUgY2hhbmdlIHRpbWVvdXRcbiIsCisJCQkJCURFVk5BTShzYykpOworCisJdW1iX2Fk
ZF90YXNrKHNjLCB1bWJfc3RhdGVfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBd
LmhkciwKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMCk7Cit9CisKK3N0YXRp
YyBpbnQKK3VtYl9tZWRpYWNoYW5nZShzdHJ1Y3QgaWZuZXQgKiBpZnApCit7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfbWVkaWFzdGF0dXMoc3RydWN0IGlmbmV0ICogaWZwLCBz
dHJ1Y3QgaWZtZWRpYXJlcSAqIGltcikKK3sKKwlzd2l0Y2ggKGlmcC0+aWZfbGlua19zdGF0ZSkg
eworCWNhc2UgTElOS19TVEFURV9VUDoKKwkJaW1yLT5pZm1fc3RhdHVzID0gSUZNX0FWQUxJRCB8
IElGTV9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgTElOS19TVEFURV9ET1dOOgorCQlpbXItPmlm
bV9zdGF0dXMgPSBJRk1fQVZBTElEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbXItPmlmbV9z
dGF0dXMgPSAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfYWRkX3Rhc2so
c3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVzYl9wcm9jX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisJCXN0
cnVjdCB1c2JfcHJvY19tc2cgKnQwLCBzdHJ1Y3QgdXNiX3Byb2NfbXNnICp0MSwgaW50IHN5bmMp
Cit7CisJc3RydWN0IHVtYl90YXNrICogdGFzazsKKworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRl
eCwgTUFfT1dORUQpOworCisJaWYgKHVzYl9wcm9jX2lzX2dvbmUoJnNjLT5zY190YXNrcXVldWUp
KSB7CisJCXJldHVybjsKKwl9CisKKwl0YXNrID0gdXNiX3Byb2NfbXNpZ25hbCgmc2MtPnNjX3Rh
c2txdWV1ZSwgdDAsIHQxKTsKKworCXRhc2stPmhkci5wbV9jYWxsYmFjayA9IGNhbGxiYWNrOwor
CXRhc2stPnNjID0gc2M7CisKKwlpZiAoc3luYykgeworCQl1c2JfcHJvY19td2FpdCgmc2MtPnNj
X3Rhc2txdWV1ZSwgdDAsIHQxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfbmV3c3RhdGUo
c3RydWN0IHVtYl9zb2Z0YyAqc2MsIGVudW0gdW1iX3N0YXRlIG5ld3N0YXRlLCBpbnQgZmxhZ3Mp
Cit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChuZXdzdGF0ZSA9
PSBzYy0+c2Nfc3RhdGUpCisJCXJldHVybjsKKwlpZiAoKChmbGFncyAmIFVNQl9OU19ET05UX0RS
T1ApICYmIG5ld3N0YXRlIDwgc2MtPnNjX3N0YXRlKSB8fAorCSAgICAoKGZsYWdzICYgVU1CX05T
X0RPTlRfUkFJU0UpICYmIG5ld3N0YXRlID4gc2MtPnNjX3N0YXRlKSkKKwkJcmV0dXJuOworCWlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQlsb2coTE9HX0RFQlVHLCAiJXM6IHN0YXRl
IGdvaW5nICVzIGZyb20gJyVzJyB0byAnJXMnXG4iLAorCQkgICAgREVWTkFNKHNjKSwgbmV3c3Rh
dGUgPiBzYy0+c2Nfc3RhdGUgPyAidXAiIDogImRvd24iLAorCQkgICAgdW1iX2lzdGF0ZShzYy0+
c2Nfc3RhdGUpLCB1bWJfaXN0YXRlKG5ld3N0YXRlKSk7CisJc2MtPnNjX3N0YXRlID0gbmV3c3Rh
dGU7CisJdW1iX2FkZF90YXNrKHNjLCB1bWJfc3RhdGVfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19z
dGF0ZV90YXNrWzBdLmhkciwKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfc3RhdGVfdGFzayhzdHJ1Y3QgdXNiX3Byb2NfbXNnICpt
c2cpCit7CisJc3RydWN0IHVtYl90YXNrICp0YXNrID0gKHN0cnVjdCB1bWJfdGFzayAqKW1zZzsK
KwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0g
R0VUX0lGUChzYyk7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQJIHN0YXRlOworCisJRFBSSU5U
RigiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKHNjLT5zY19pbmZvLnJlZ3N0YXRlID09IE1C
SU1fUkVHU1RBVEVfUk9BTUlORyAmJiAhc2MtPnNjX3JvYW1pbmcpIHsKKwkJLyoKKwkJICogUXVl
cnkgdGhlIHJlZ2lzdHJhdGlvbiBzdGF0ZSB1bnRpbCB3ZSdyZSB3aXRoIHRoZSBob21lCisJCSAq
IG5ldHdvcmsgYWdhaW4uCisJCSAqLworCQl1bWJfY21kKHNjLCBNQklNX0NJRF9SRUdJU1RFUl9T
VEFURSwgTUJJTV9DTURPUF9RUlksIE5VTEwsIDApOworCQlyZXR1cm47CisJfQorCisJaWYgKGlm
cC0+aWZfZmxhZ3MgJiBJRkZfVVApCisJCXVtYl91cChzYyk7CisJZWxzZQorCQl1bWJfZG93bihz
YywgMCk7CisKKwlzdGF0ZSA9IChzYy0+c2Nfc3RhdGUgPT0gVU1CX1NfVVApID8gTElOS19TVEFU
RV9VUCA6IExJTktfU1RBVEVfRE9XTjsKKwlpZiAoaWZwLT5pZl9saW5rX3N0YXRlICE9IHN0YXRl
KSB7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19ERUJVRywg
IiVzOiBsaW5rIHN0YXRlIGNoYW5nZWQgZnJvbSAlcyB0byAlc1xuIiwKKwkJCSAgICBERVZOQU0o
c2MpLAorCQkJICAgIChpZnAtPmlmX2xpbmtfc3RhdGUgPT0gTElOS19TVEFURV9VUCkKKwkJCSAg
ICA/ICJ1cCIgOiAiZG93biIsCisJCQkgICAgKHN0YXRlID09IExJTktfU1RBVEVfVVApID8gInVw
IiA6ICJkb3duIik7CisJCWlmcC0+aWZfbGlua19zdGF0ZSA9IHN0YXRlOworCQlpZiAoc3RhdGUg
IT0gTElOS19TVEFURV9VUCkgeworCQkJLyoKKwkJCSAqIFB1cmdlIGFueSBleGlzdGluZyBhZGRy
ZXNzZXMKKwkJCSAqLworCQkJbWVtc2V0KHNjLT5zY19pbmZvLmlwdjRkbnMsIDAsCisJCQkgICAg
c2l6ZW9mIChzYy0+c2NfaW5mby5pcHY0ZG5zKSk7CisJCQltdHhfdW5sb2NrKCZzYy0+c2NfbXV0
ZXgpOworCQkJQ1VSVk5FVF9TRVRfUVVJRVQodm5ldDApOworCQkJaWYgKGluX2NvbnRyb2woTlVM
TCwgU0lPQ0dJRkFERFIsIChjYWRkcl90KSZpZnIsIGlmcCwKKwkJCQkgICAgICAgY3VydGhyZWFk
KSA9PSAwICYmCisJCQkgICAgc2F0b3NpbigmaWZyLmlmcl9hZGRyKS0+c2luX2FkZHIuc19hZGRy
ICE9CisJCQkgICAgSU5BRERSX0FOWSkgeworCQkJCWluX2NvbnRyb2woTlVMTCwgU0lPQ0RJRkFE
RFIsIChjYWRkcl90KSZpZnIsCisJCQkJCSAgIGlmcCwgY3VydGhyZWFkKTsKKwkJCX0KKwkJCUNV
UlZORVRfUkVTVE9SRSgpOworCQkJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJCX0KKwkJaWZf
bGlua19zdGF0ZV9jaGFuZ2UoaWZwLCBzdGF0ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1i
X3VwKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lG
UChzYyk7CisKKwlzd2l0Y2ggKHNjLT5zY19zdGF0ZSkgeworCWNhc2UgVU1CX1NfRE9XTjoKKwkJ
RFBSSU5URigiaW5pdDogb3BlbmluZyAuLi5cbiIpOworCQl1bWJfb3BlbihzYyk7CisJCWJyZWFr
OworCWNhc2UgVU1CX1NfT1BFTjoKKwkJaWYgKHNjLT5zY19mbGFncyAmIFVNQkZMR19GQ0NfQVVU
SF9SRVFVSVJFRCkgeworCQkJaWYgKHNjLT5zY19jaWQgPT0gLTEpIHsKKwkJCQlEUFJJTlRGKCJp
bml0OiBhbGxvY2F0aW5nIENJRCAuLi5cbiIpOworCQkJCXVtYl9hbGxvY2F0ZV9jaWQoc2MpOwor
CQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19DSUQsIFVN
Ql9OU19ET05UX0RST1ApOworCQl9IGVsc2UgeworCQkJRFBSSU5URigiaW5pdDogdHVybmluZyBy
YWRpbyBvbiAuLi5cbiIpOworCQkJdW1iX3JhZGlvKHNjLCAxKTsKKwkJCWJyZWFrOworCQl9CisJ
CS8qRkFMTFRIUk9VR0gqLworCWNhc2UgVU1CX1NfQ0lEOgorCQlEUFJJTlRGKCJpbml0OiBzZW5k
aW5nIEZDQyBhdXRoIC4uLlxuIik7CisJCXVtYl9zZW5kX2ZjY19hdXRoKHNjKTsKKwkJYnJlYWs7
CisJY2FzZSBVTUJfU19SQURJTzoKKwkJRFBSSU5URigiaW5pdDogY2hlY2tpbmcgU0lNIHN0YXRl
IC4uLlxuIik7CisJCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1NVQlNDUklCRVJfUkVBRFlfU1RBVFVT
LCBNQklNX0NNRE9QX1FSWSwKKwkJICAgIE5VTEwsIDApOworCQlicmVhazsKKwljYXNlIFVNQl9T
X1NJTVJFQURZOgorCQlEUFJJTlRGKCJpbml0OiBhdHRhY2hpbmcgLi4uXG4iKTsKKwkJdW1iX3Bh
Y2tldF9zZXJ2aWNlKHNjLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBVTUJfU19BVFRBQ0hFRDoKKwkJ
c2MtPnNjX3R4X3NlcSA9IDA7CisJCURQUklOVEYoImluaXQ6IGNvbm5lY3RpbmcgLi4uXG4iKTsK
KwkJdW1iX2Nvbm5lY3Qoc2MpOworCQlicmVhazsKKwljYXNlIFVNQl9TX0NPTk5FQ1RFRDoKKwkJ
RFBSSU5URigiaW5pdDogZ2V0dGluZyBJUCBjb25maWcgLi4uXG4iKTsKKwkJdW1iX3FyeV9pcGNv
bmZpZyhzYyk7CisJCWJyZWFrOworCWNhc2UgVU1CX1NfVVA6CisJCURQUklOVEYoImluaXQ6IHJl
YWNoZWQgc3RhdGUgVVBcbiIpOworCQlpZiAoIShpZnAtPmlmX2ZsYWdzICYgSUZGX0RSVl9SVU5O
SU5HKSkgeworCQkJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9SVU5OSU5HOworCQkJaWZw
LT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElWRTsKKwkJCXVtYl9yeChzYyk7CisJCX0K
KwkJYnJlYWs7CisJfQorCWlmIChzYy0+c2Nfc3RhdGUgPCBVTUJfU19VUCkKKwkJdXNiX2NhbGxv
dXRfcmVzZXQoJnNjLT5zY19zdGF0ZWNoZ190aW1lciwKKwkJICAgIFVNQl9TVEFURV9DSEFOR0Vf
VElNRU9VVCAqIGh6LCB1bWJfc3RhdGVjaGdfdGltZW91dCwgc2MpOworCWVsc2UgeworCQl1c2Jf
Y2FsbG91dF9zdG9wKCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIpOworCX0KKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfZG93bihzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGZvcmNlKQor
eworCXVtYl9jbG9zZV9idWxrcGlwZXMoc2MpOworCisJc3dpdGNoIChzYy0+c2Nfc3RhdGUpIHsK
KwljYXNlIFVNQl9TX1VQOgorCWNhc2UgVU1CX1NfQ09OTkVDVEVEOgorCQlEUFJJTlRGKCJzdG9w
OiBkaXNjb25uZWN0aW5nIC4uLlxuIik7CisJCXVtYl9kaXNjb25uZWN0KHNjKTsKKwkJaWYgKCFm
b3JjZSkKKwkJCWJyZWFrOworCQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIFVNQl9TX0FUVEFDSEVE
OgorCQlEUFJJTlRGKCJzdG9wOiBkZXRhY2hpbmcgLi4uXG4iKTsKKwkJdW1iX3BhY2tldF9zZXJ2
aWNlKHNjLCAwKTsKKwkJaWYgKCFmb3JjZSkKKwkJCWJyZWFrOworCQkvKkZBTExUSFJPVUdIKi8K
KwljYXNlIFVNQl9TX1NJTVJFQURZOgorCWNhc2UgVU1CX1NfUkFESU86CisJCURQUklOVEYoInN0
b3A6IHR1cm5pbmcgcmFkaW8gb2ZmIC4uLlxuIik7CisJCXVtYl9yYWRpbyhzYywgMCk7CisJCWlm
ICghZm9yY2UpCisJCQlicmVhazsKKwkJLypGQUxMVEhST1VHSCovCisJY2FzZSBVTUJfU19DSUQ6
CisJY2FzZSBVTUJfU19PUEVOOgorCWNhc2UgVU1CX1NfRE9XTjoKKwkJLyogRG8gbm90IGNsb3Nl
IHRoZSBkZXZpY2UgKi8KKwkJRFBSSU5URigic3RvcDogcmVhY2hlZCBzdGF0ZSBET1dOXG4iKTsK
KwkJYnJlYWs7CisJfQorCWlmIChmb3JjZSkKKwkJc2MtPnNjX3N0YXRlID0gVU1CX1NfT1BFTjsK
KworCWlmIChzYy0+c2Nfc3RhdGUgPiBVTUJfU19PUEVOKQorCQl1c2JfY2FsbG91dF9yZXNldCgm
c2MtPnNjX3N0YXRlY2hnX3RpbWVyLAorCQkgICAgVU1CX1NUQVRFX0NIQU5HRV9USU1FT1VUICog
aHosIHVtYl9zdGF0ZWNoZ190aW1lb3V0LCBzYyk7CisJZWxzZQorCQl1c2JfY2FsbG91dF9zdG9w
KCZzYy0+c2Nfc3RhdGVjaGdfdGltZXIpOworfQorCitzdGF0aWMgdm9pZAordW1iX2dldF9yZXNw
b25zZV90YXNrKHN0cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgdW1iX3Rhc2sg
KnRhc2sgPSAoc3RydWN0IHVtYl90YXNrICopbXNnOworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0g
dGFzay0+c2M7CisJaW50CSBsZW47CisKKwlEUFJJTlRGKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJ
LyoKKwkgKiBGdW5jdGlvbiBpcyByZXF1aXJlZCB0byBzZW5kIG9uIFJFU1BPTlNFX0FWQUlMQUJM
RSBub3RpZmljYXRpb24gZm9yCisJICogZWFjaCBlbmNhcHN1bGF0ZWQgcmVzcG9uc2UgdGhhdCBp
cyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGhvc3QuCisJICogQnV0IG9mIGNvdXJzZSwgd2UgY2Fu
IHJlY2VpdmUgbXVsdGlwbGUgbm90aWZpY2F0aW9ucyBiZWZvcmUgdGhlCisJICogcmVzcG9uc2Ug
dGFzayBpcyBydW4uCisJICovCisJd2hpbGUgKHNjLT5zY19ucmVzcCA+IDApIHsKKwkJLS1zYy0+
c2NfbnJlc3A7CisJCWxlbiA9IHNjLT5zY19jdHJsX2xlbjsKKwkJaWYgKHVtYl9nZXRfZW5jYXBf
cmVzcG9uc2Uoc2MsIHNjLT5zY19yZXNwX2J1ZiwgJmxlbikpCisJCQl1bWJfZGVjb2RlX3Jlc3Bv
bnNlKHNjLCBzYy0+c2NfcmVzcF9idWYsIGxlbik7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1i
X2RlY29kZV9yZXNwb25zZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqcmVzcG9uc2UsIGlu
dCBsZW4pCit7CisJc3RydWN0IG1iaW1fbXNnaGRyICpoZHIgPSByZXNwb25zZTsKKwlzdHJ1Y3Qg
bWJpbV9mcmFnbWVudGVkX21zZ19oZHIgKmZyYWdoZHI7CisJdWludDMyX3QgdHlwZTsKKworCURQ
UklOVEZOKDMsICJnb3QgcmVzcG9uc2U6IGxlbiAlZFxuIiwgbGVuKTsKKwlERFVNUE4oNCwgcmVz
cG9uc2UsIGxlbik7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqaGRyKSB8fCBsZTMydG9oKGhkci0+
bGVuKSAhPSBsZW4pIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIHByb2JhYmx5IGNhbmNlbCBhIHRy
YW5zYWN0aW9uLCBidXQgc2luY2UgdGhlCisJCSAqIG1lc3NhZ2UgaXMgdG9vIHNob3J0LCB3ZSBj
YW5ub3QgZGVjb2RlIHRoZSB0cmFuc2FjdGlvbgorCQkgKiBpZCAodGlkKSBhbmQgaGVuY2UgZG9u
J3Qga25vdywgd2hvbSB0byBjYW5jZWwuIE11c3Qgd2FpdAorCQkgKiBmb3IgdGhlIHRpbWVvdXQu
CisJCSAqLworCQlEUFJJTlRGKCJyZWNlaXZlZCBzaG9ydCByZXNwb25zZSAobGVuICVkKVxuIiwK
KwkJICAgIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFhYWCBGSVhNRTogaWYgbWVz
c2FnZSBpcyBmcmFnbWVudGVkLCBzdG9yZSBpdCB1bnRpbCBsYXN0IGZyYWcKKwkgKglpcyByZWNl
aXZlZCBhbmQgdGhlbiByZS1hc3NlbWJsZSBhbGwgZnJhZ21lbnRzLgorCSAqLworCXR5cGUgPSBs
ZTMydG9oKGhkci0+dHlwZSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQklNX0lORElDQVRF
X1NUQVRVU19NU0c6CisJY2FzZSBNQklNX0NPTU1BTkRfRE9ORToKKwkJZnJhZ2hkciA9IHJlc3Bv
bnNlOworCQlpZiAobGUzMnRvaChmcmFnaGRyLT5mcmFnLm5mcmFnKSAhPSAxKSB7CisJCQlEUFJJ
TlRGKCJkaXNjYXJkaW5nIGZyYWdtZW50ZWQgbWVzc2FnZXNcbiIpOworCQkJcmV0dXJuOworCQl9
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCURQUklOVEYoIjwtIHJjdiAl
cyAodGlkICV1KVxuIiwgdW1iX3JlcXVlc3Qyc3RyKHR5cGUpLAorCSAgICBsZTMydG9oKGhkci0+
dGlkKSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQklNX0ZVTkNUSU9OX0VSUk9SX01TRzoK
KwljYXNlIE1CSU1fSE9TVF9FUlJPUl9NU0c6CisJeworCQlzdHJ1Y3QgbWJpbV9mMmhfaG9zdGVy
ciAqZTsKKwkJaW50CSBlcnI7CisKKwkJaWYgKGxlbiA+PSBzaXplb2YgKCplKSkgeworCQkJZSA9
IHJlc3BvbnNlOworCQkJZXJyID0gbGUzMnRvaChlLT5lcnIpOworCisJCQlEUFJJTlRGKCIlcyBt
ZXNzYWdlLCBlcnJvciAlcyAodGlkICV1KVxuIiwKKwkJCSAgICB1bWJfcmVxdWVzdDJzdHIodHlw
ZSksCisJCQkgICAgdW1iX2Vycm9yMnN0cihlcnIpLCBsZTMydG9oKGhkci0+dGlkKSk7CisJCQlp
ZiAoZXJyID09IE1CSU1fRVJST1JfTk9UX09QRU5FRCkKKwkJCQl1bWJfbmV3c3RhdGUoc2MsIFVN
Ql9TX0RPV04sIDApOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIE1CSU1fSU5ESUNBVEVfU1RB
VFVTX01TRzoKKwkJdW1iX2hhbmRsZV9pbmRpY2F0ZV9zdGF0dXNfbXNnKHNjLCByZXNwb25zZSwg
bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX09QRU5fRE9ORToKKwkJdW1iX2hhbmRsZV9vcGVu
ZG9uZV9tc2coc2MsIHJlc3BvbnNlLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0xPU0Vf
RE9ORToKKwkJdW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHNjLCByZXNwb25zZSwgbGVuKTsKKwkJ
YnJlYWs7CisJY2FzZSBNQklNX0NPTU1BTkRfRE9ORToKKwkJdW1iX2NvbW1hbmRfZG9uZShzYywg
cmVzcG9uc2UsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoImRpc2NhcmQg
bWVzc2FnZSAlc1xuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cih0eXBlKSk7CisJCWJyZWFrOwor
CX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9oYW5kbGVfaW5kaWNhdGVfc3RhdHVzX21zZyhzdHJ1
Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9m
MmhfaW5kaWNhdGVfc3RhdHVzICptID0gZGF0YTsKKwl1aW50MzJfdCBpbmZvbGVuOworCXVpbnQz
Ml90IGNpZDsKKworCWlmIChsZW4gPCBzaXplb2YgKCptKSkgeworCQlEUFJJTlRGKCJkaXNjYXJk
IHNob3J0ICVzIG1lc3NhZ2VcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJzdHIobGUzMnRvaChtLT5o
ZHIudHlwZSkpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWVtY21wKG0tPmRldmlkLCB1bWJfdXVp
ZF9iYXNpY19jb25uZWN0LCBzaXplb2YgKG0tPmRldmlkKSkpIHsKKwkJRFBSSU5URigiZGlzY2Fy
ZCAlcyBtZXNzYWdlIGZvciBvdGhlciBVVUlEICclcydcbiIsCisJCSAgICB1bWJfcmVxdWVzdDJz
dHIobGUzMnRvaChtLT5oZHIudHlwZSkpLAorCQkgICAgdW1iX3V1aWQyc3RyKG0tPmRldmlkKSk7
CisJCXJldHVybjsKKwl9CisJaW5mb2xlbiA9IGxlMzJ0b2gobS0+aW5mb2xlbik7CisJaWYgKGxl
biA8IHNpemVvZiAoKm0pICsgaW5mb2xlbikgeworCQlEUFJJTlRGKCJkaXNjYXJkIHRydW5jYXRl
ZCAlcyBtZXNzYWdlICh3YW50ICVkLCBnb3QgJWQpXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3Ry
KGxlMzJ0b2gobS0+aGRyLnR5cGUpKSwKKwkJICAgIChpbnQpc2l6ZW9mICgqbSkgKyBpbmZvbGVu
LCBsZW4pOworCQlyZXR1cm47CisJfQorCisJY2lkID0gbGUzMnRvaChtLT5jaWQpOworCURQUklO
VEYoImluZGljYXRlICVzIHN0YXR1c1xuIiwgdW1iX2NpZDJzdHIoY2lkKSk7CisJdW1iX2RlY29k
ZV9jaWQoc2MsIGNpZCwgbS0+aW5mbywgaW5mb2xlbik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJf
aGFuZGxlX29wZW5kb25lX21zZyhzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwgaW50
IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3NlZG9uZSAqcmVzcCA9IGRhdGE7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlz
dGF0dXMgPSBsZTMydG9oKHJlc3AtPnN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBNQklNX1NUQVRV
U19TVUNDRVNTKSB7CisJCWlmIChzYy0+c2NfbWF4c2Vzc2lvbnMgPT0gMCkgeworCQkJdW1iX2Nt
ZChzYywgTUJJTV9DSURfREVWSUNFX0NBUFMsIE1CSU1fQ01ET1BfUVJZLCBOVUxMLAorCQkJICAg
IDApOworCQkJdW1iX2NtZChzYywgTUJJTV9DSURfUElOLCBNQklNX0NNRE9QX1FSWSwgTlVMTCwg
MCk7CisJCQl1bWJfY21kKHNjLCBNQklNX0NJRF9SRUdJU1RFUl9TVEFURSwgTUJJTV9DTURPUF9R
UlksCisJCQkgICAgTlVMTCwgMCk7CisJCX0KKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19PUEVO
LCBVTUJfTlNfRE9OVF9EUk9QKTsKKwl9IGVsc2UgaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVC
VUcpCisJCWxvZyhMT0dfRVJSLCAiJXM6IG9wZW4gZXJyb3I6ICVzXG4iLCBERVZOQU0oc2MpLAor
CQkgICAgdW1iX3N0YXR1czJzdHIoc3RhdHVzKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9p
ZAordW1iX2hhbmRsZV9jbG9zZWRvbmVfbXNnKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpk
YXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9vcGVuY2xvc2Vkb25lICpyZXNwID0g
ZGF0YTsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlzdGF0dXMgPSBsZTMydG9oKHJlc3AtPnN0YXR1
cyk7CisJaWYgKHN0YXR1cyA9PSBNQklNX1NUQVRVU19TVUNDRVNTKQorCQl1bWJfbmV3c3RhdGUo
c2MsIFVNQl9TX0RPV04sIDApOworCWVsc2UKKwkJRFBSSU5URigiY2xvc2UgZXJyb3I6ICVzXG4i
LAorCQkgICAgdW1iX3N0YXR1czJzdHIoc3RhdHVzKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQKK3VtYl9nZXRpbmZvYnVmKGNoYXIgKmluLCBpbnQgaW5sZW4sIHVpbnQzMl90
IG9mZnMsIHVpbnQzMl90IHN6LAorICAgIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbikKK3sKKwlv
ZmZzID0gbGUzMnRvaChvZmZzKTsKKwlzeiA9IGxlMzJ0b2goc3opOworCWlmIChpbmxlbiA+PSBv
ZmZzICsgc3opIHsKKwkJbWVtc2V0KG91dCwgMCwgb3V0bGVuKTsKKwkJbWVtY3B5KG91dCwgaW4g
KyBvZmZzLCBNSU4oc3osIG91dGxlbikpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQKK3Vt
Yl9wYWRkaW5nKHZvaWQgKmRhdGEsIGludCBsZW4sIHNpemVfdCBzeikKK3sKKwljaGFyICpwID0g
ZGF0YTsKKwlpbnQgbnAgPSAwOworCisJd2hpbGUgKGxlbiA8IHN6ICYmIChsZW4gJSA0KSAhPSAw
KSB7CisJCSpwKysgPSAnXDAnOworCQlsZW4rKzsKKwkJbnArKzsKKwl9CisJcmV0dXJuIG5wOwor
fQorCitzdGF0aWMgaW5saW5lIGludAordW1iX2FkZHN0cih2b2lkICpidWYsIHNpemVfdCBidWZz
eiwgaW50ICpvZmZzLCB2b2lkICpzdHIsIGludCBzbGVuLAorICAgIHVpbnQzMl90ICpvZmZzbWVt
YmVyLCB1aW50MzJfdCAqc2l6ZW1lbWJlcikKK3sKKwlpZiAoKm9mZnMgKyBzbGVuID4gYnVmc3op
CisJCXJldHVybiAwOworCisJKnNpemVtZW1iZXIgPSBodG9sZTMyKCh1aW50MzJfdClzbGVuKTsK
KwlpZiAoc2xlbiAmJiBzdHIpIHsKKwkJKm9mZnNtZW1iZXIgPSBodG9sZTMyKCh1aW50MzJfdCkq
b2Zmcyk7CisJCW1lbWNweSgoY2hhciAqKWJ1ZiArICpvZmZzLCBzdHIsIHNsZW4pOworCQkqb2Zm
cyArPSBzbGVuOworCQkqb2ZmcyArPSB1bWJfcGFkZGluZyhidWYsICpvZmZzLCBidWZzeik7CisJ
fSBlbHNlCisJCSpvZmZzbWVtYmVyID0gaHRvbGUzMigwKTsKKwlyZXR1cm4gMTsKK30KKworc3Rh
dGljIHZvaWQKK3VtYl9pbl9sZW4ybWFzayhzdHJ1Y3QgaW5fYWRkciAqbWFzaywgaW50IGxlbikK
K3sKKwlpbnQgaTsKKwl1X2NoYXIgKnA7CisKKwlwID0gKHVfY2hhciAqKW1hc2s7CisJbWVtc2V0
KG1hc2ssIDAsIHNpemVvZiAoKm1hc2spKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gODsgaSsr
KQorCQlwW2ldID0gMHhmZjsKKwlpZiAobGVuICUgOCkKKwkJcFtpXSA9ICgweGZmMDAgPj4gKGxl
biAlIDgpKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfcmVnaXN0ZXJfc3Rh
dGUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0
IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZV9pbmZvICpycyA9IGRhdGE7CisJc3RydWN0IGlm
bmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKworCWlmIChsZW4gPCBzaXplb2YgKCpycykpCisJCXJl
dHVybiAwOworCXNjLT5zY19pbmZvLm53ZXJyb3IgPSBsZTMydG9oKHJzLT5ud2Vycm9yKTsKKwlz
Yy0+c2NfaW5mby5yZWdzdGF0ZSA9IGxlMzJ0b2gocnMtPnJlZ3N0YXRlKTsKKwlzYy0+c2NfaW5m
by5yZWdtb2RlID0gbGUzMnRvaChycy0+cmVnbW9kZSk7CisJc2MtPnNjX2luZm8uY2VsbGNsYXNz
ID0gbGUzMnRvaChycy0+Y3VyY2VsbGNsYXNzKTsKKworCS8qIFhYWCBzaG91bGQgd2UgcmVtZW1i
ZXIgdGhlIHByb3ZpZGVyX2lkPyAqLworCXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgcnMtPnBy
b3ZuYW1lX29mZnMsIHJzLT5wcm92bmFtZV9zaXplLAorCSAgICBzYy0+c2NfaW5mby5wcm92aWRl
ciwgc2l6ZW9mIChzYy0+c2NfaW5mby5wcm92aWRlcikpOworCXVtYl9nZXRpbmZvYnVmKGRhdGEs
IGxlbiwgcnMtPnJvYW1pbmd0eHRfb2ZmcywgcnMtPnJvYW1pbmd0eHRfc2l6ZSwKKwkgICAgc2Mt
PnNjX2luZm8ucm9hbWluZ3R4dCwgc2l6ZW9mIChzYy0+c2NfaW5mby5yb2FtaW5ndHh0KSk7CisK
KwlEUFJJTlRGTigyLCAiJXMsIGF2YWlsY2xhc3MgMHgleCwgY2xhc3MgMHgleCwgcmVnbW9kZSAl
ZFxuIiwKKwkgICAgdW1iX3JlZ3N0YXRlKHNjLT5zY19pbmZvLnJlZ3N0YXRlKSwKKwkgICAgbGUz
MnRvaChycy0+YXZhaWxjbGFzc2VzKSwgc2MtPnNjX2luZm8uY2VsbGNsYXNzLAorCSAgICBzYy0+
c2NfaW5mby5yZWdtb2RlKTsKKworCWlmIChzYy0+c2NfaW5mby5yZWdzdGF0ZSA9PSBNQklNX1JF
R1NUQVRFX1JPQU1JTkcgJiYKKwkgICAgIXNjLT5zY19yb2FtaW5nICYmCisJICAgIHNjLT5zY19p
bmZvLmFjdGl2YXRpb24gPT0gTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRCkgeworCQlp
ZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywKKwkJCSAgICAi
JXM6IGRpc2Nvbm5lY3RpbmcgZnJvbSByb2FtaW5nIG5ldHdvcmtcbiIsCisJCQkgICAgREVWTkFN
KHNjKSk7CisJCXVtYl9kaXNjb25uZWN0KHNjKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRp
YyBpbnQKK3VtYl9kZWNvZGVfZGV2aWNlc19jYXBzKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lk
ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9kZXZpY2VfY2FwcyAqZGMgPSBk
YXRhOworCisJaWYgKGxlbiA8IHNpemVvZiAoKmRjKSkKKwkJcmV0dXJuIDA7CisJc2MtPnNjX21h
eHNlc3Npb25zID0gbGUzMnRvaChkYy0+bWF4X3Nlc3Npb25zKTsKKwlzYy0+c2NfaW5mby5zdXBw
b3J0ZWRjbGFzc2VzID0gbGUzMnRvaChkYy0+ZGF0YWNsYXNzKTsKKwl1bWJfZ2V0aW5mb2J1Zihk
YXRhLCBsZW4sIGRjLT5kZXZpZF9vZmZzLCBkYy0+ZGV2aWRfc2l6ZSwKKwkgICAgc2MtPnNjX2lu
Zm8uZGV2aWQsIHNpemVvZiAoc2MtPnNjX2luZm8uZGV2aWQpKTsKKwl1bWJfZ2V0aW5mb2J1Zihk
YXRhLCBsZW4sIGRjLT5md2luZm9fb2ZmcywgZGMtPmZ3aW5mb19zaXplLAorCSAgICBzYy0+c2Nf
aW5mby5md2luZm8sIHNpemVvZiAoc2MtPnNjX2luZm8uZndpbmZvKSk7CisJdW1iX2dldGluZm9i
dWYoZGF0YSwgbGVuLCBkYy0+aHdpbmZvX29mZnMsIGRjLT5od2luZm9fc2l6ZSwKKwkgICAgc2Mt
PnNjX2luZm8uaHdpbmZvLCBzaXplb2YgKHNjLT5zY19pbmZvLmh3aW5mbykpOworCURQUklOVEZO
KDIsICJtYXggc2Vzc2lvbnMgJWQsIHN1cHBvcnRlZCBjbGFzc2VzIDB4JXhcbiIsCisJICAgIHNj
LT5zY19tYXhzZXNzaW9ucywgc2MtPnNjX2luZm8uc3VwcG9ydGVkY2xhc3Nlcyk7CisJcmV0dXJu
IDE7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfc3Vic2NyaWJlcl9zdGF0dXMoc3RydWN0
IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lk
X3N1YnNjcmliZXJfcmVhZHlfaW5mbyAqc2kgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0g
R0VUX0lGUChzYyk7CisJaW50CW5wbjsKKworCWlmIChsZW4gPCBzaXplb2YgKCpzaSkpCisJCXJl
dHVybiAwOworCXNjLT5zY19pbmZvLnNpbV9zdGF0ZSA9IGxlMzJ0b2goc2ktPnJlYWR5KTsKKwor
CXVtYl9nZXRpbmZvYnVmKGRhdGEsIGxlbiwgc2ktPnNpZF9vZmZzLCBzaS0+c2lkX3NpemUsCisJ
ICAgIHNjLT5zY19pbmZvLnNpZCwgc2l6ZW9mIChzYy0+c2NfaW5mby5zaWQpKTsKKwl1bWJfZ2V0
aW5mb2J1ZihkYXRhLCBsZW4sIHNpLT5pY2Nfb2Zmcywgc2ktPmljY19zaXplLAorCSAgICBzYy0+
c2NfaW5mby5pY2NpZCwgc2l6ZW9mIChzYy0+c2NfaW5mby5pY2NpZCkpOworCisJbnBuID0gbGUz
MnRvaChzaS0+bm9fcG4pOworCWlmIChucG4gPiAwKQorCQl1bWJfZ2V0aW5mb2J1ZihkYXRhLCBs
ZW4sIHNpLT5wblswXS5vZmZzLCBzaS0+cG5bMF0uc2l6ZSwKKwkJICAgIHNjLT5zY19pbmZvLnBu
LCBzaXplb2YgKHNjLT5zY19pbmZvLnBuKSk7CisJZWxzZQorCQltZW1zZXQoc2MtPnNjX2luZm8u
cG4sIDAsIHNpemVvZiAoc2MtPnNjX2luZm8ucG4pKTsKKworCWlmIChzYy0+c2NfaW5mby5zaW1f
c3RhdGUgPT0gTUJJTV9TSU1TVEFURV9MT0NLRUQpCisJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9
IFVNQl9QSU5fUkVRVUlSRUQ7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxv
ZyhMT0dfSU5GTywgIiVzOiBTSU0gJXNcbiIsIERFVk5BTShzYyksCisJCSAgICB1bWJfc2ltc3Rh
dGUoc2MtPnNjX2luZm8uc2ltX3N0YXRlKSk7CisJaWYgKHNjLT5zY19pbmZvLnNpbV9zdGF0ZSA9
PSBNQklNX1NJTVNUQVRFX0lOSVRJQUxJWkVEKQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX1NJ
TVJFQURZLCBVTUJfTlNfRE9OVF9EUk9QKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAor
dW1iX2RlY29kZV9yYWRpb19zdGF0ZShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgdm9pZCAqZGF0YSwg
aW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJpbV9jaWRfcmFkaW9fc3RhdGVfaW5mbyAqcnMgPSBkYXRh
OworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisKKwlpZiAobGVuIDwgc2l6ZW9m
ICgqcnMpKQorCQlyZXR1cm4gMDsKKworCXNjLT5zY19pbmZvLmh3X3JhZGlvX29uID0KKwkgICAg
KGxlMzJ0b2gocnMtPmh3X3N0YXRlKSA9PSBNQklNX1JBRElPX1NUQVRFX09OKSA/IDEgOiAwOwor
CXNjLT5zY19pbmZvLnN3X3JhZGlvX29uID0KKwkgICAgKGxlMzJ0b2gocnMtPnN3X3N0YXRlKSA9
PSBNQklNX1JBRElPX1NUQVRFX09OKSA/IDEgOiAwOworCWlmICghc2MtPnNjX2luZm8uaHdfcmFk
aW9fb24pIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAicmFkaW8gaXMgZGlzYWJsZWQg
YnkgaGFyZHdhcmUgc3dpdGNoXG4iKTsKKwkJLyoKKwkJICogWFhYIGRvIHdlIG5lZWQgYSB0aW1l
IHRvIHBvbGwgdGhlIHN0YXRlIG9mIHRoZSByZmtpbGwgc3dpdGNoCisJCSAqCW9yIHdpbGwgdGhl
IGRldmljZSBzZW5kIGFuIHVuc29saWNpdGVkIG5vdGlmaWNhdGlvbgorCQkgKglpbiBjYXNlIHRo
ZSBzdGF0ZSBjaGFuZ2VzPworCQkgKi8KKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19PUEVOLCAw
KTsKKwl9IGVsc2UgaWYgKCFzYy0+c2NfaW5mby5zd19yYWRpb19vbikgeworCQlpZiAoaWZwLT5p
Zl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiByYWRpbyBpcyBvZmZc
biIsIERFVk5BTShzYykpOworCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX09QRU4sIDApOworCX0g
ZWxzZQorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX1JBRElPLCBVTUJfTlNfRE9OVF9EUk9QKTsK
KwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9waW4oc3RydWN0IHVtYl9z
b2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX3Bpbl9p
bmZvICpwaSA9IGRhdGE7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwl1aW50
MzJfdAlhdHRlbXB0c19sZWZ0OworCisJaWYgKGxlbiA8IHNpemVvZiAoKnBpKSkKKwkJcmV0dXJu
IDA7CisKKwlhdHRlbXB0c19sZWZ0ID0gbGUzMnRvaChwaS0+cmVtYWluaW5nX2F0dGVtcHRzKTsK
KwlpZiAoYXR0ZW1wdHNfbGVmdCAhPSAweGZmZmZmZmZmKQorCQlzYy0+c2NfaW5mby5waW5fYXR0
ZW1wdHNfbGVmdCA9IGF0dGVtcHRzX2xlZnQ7CisKKwlzd2l0Y2ggKGxlMzJ0b2gocGktPnN0YXRl
KSkgeworCWNhc2UgTUJJTV9QSU5fU1RBVEVfVU5MT0NLRUQ6CisJCXNjLT5zY19pbmZvLnBpbl9z
dGF0ZSA9IFVNQl9QSU5fVU5MT0NLRUQ7CisJCWJyZWFrOworCWNhc2UgTUJJTV9QSU5fU1RBVEVf
TE9DS0VEOgorCQlzd2l0Y2ggKGxlMzJ0b2gocGktPnR5cGUpKSB7CisJCWNhc2UgTUJJTV9QSU5f
VFlQRV9QSU4xOgorCQkJc2MtPnNjX2luZm8ucGluX3N0YXRlID0gVU1CX1BJTl9SRVFVSVJFRDsK
KwkJCWJyZWFrOworCQljYXNlIE1CSU1fUElOX1RZUEVfUFVLMToKKwkJCXNjLT5zY19pbmZvLnBp
bl9zdGF0ZSA9IFVNQl9QVUtfUkVRVUlSRUQ7CisJCQlicmVhazsKKwkJY2FzZSBNQklNX1BJTl9U
WVBFX1BJTjI6CisJCWNhc2UgTUJJTV9QSU5fVFlQRV9QVUsyOgorCQkJLyogQXNzdW1lIHRoYXQg
UElOMSB3YXMgYWNjZXB0ZWQgKi8KKwkJCXNjLT5zY19pbmZvLnBpbl9zdGF0ZSA9IFVNQl9QSU5f
VU5MT0NLRUQ7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGlmcC0+aWZfZmxh
Z3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfSU5GTywgIiVzOiAlcyBzdGF0ZSAlcyAoJWQgYXR0
ZW1wdHMgbGVmdClcbiIsCisJCSAgICBERVZOQU0oc2MpLCB1bWJfcGluX3R5cGUobGUzMnRvaChw
aS0+dHlwZSkpLAorCQkgICAgKGxlMzJ0b2gocGktPnN0YXRlKSA9PSBNQklNX1BJTl9TVEFURV9V
TkxPQ0tFRCkgPworCQkJInVubG9ja2VkIiA6ICJsb2NrZWQiLAorCQkgICAgbGUzMnRvaChwaS0+
cmVtYWluaW5nX2F0dGVtcHRzKSk7CisKKwkvKgorCSAqIEluIGNhc2UgdGhlIFBJTiB3YXMgc2V0
IGFmdGVyIElGRl9VUCwgcmV0cmlnZ2VyIHRoZSBzdGF0ZSBtYWNoaW5lCisJICovCisJdW1iX2Fk
ZF90YXNrKHNjLCB1bWJfc3RhdGVfdGFzaywKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzBd
LmhkciwKKwkJCSZzYy0+c2NfcHJvY19zdGF0ZV90YXNrWzFdLmhkciwgMCk7CisJcmV0dXJuIDE7
Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9kZWNvZGVfcGFja2V0X3NlcnZpY2Uoc3RydWN0IHVtYl9z
b2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX3BhY2tl
dF9zZXJ2aWNlX2luZm8gKnBzaSA9IGRhdGE7CisJaW50CSBzdGF0ZSwgaGlnaGVzdGNsYXNzOwor
CXVpbnQ2NF90IHVwX3NwZWVkLCBkb3duX3NwZWVkOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VU
X0lGUChzYyk7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqcHNpKSkKKwkJcmV0dXJuIDA7CisKKwlz
Yy0+c2NfaW5mby5ud2Vycm9yID0gbGUzMnRvaChwc2ktPm53ZXJyb3IpOworCXN0YXRlID0gbGUz
MnRvaChwc2ktPnN0YXRlKTsKKwloaWdoZXN0Y2xhc3MgPSBsZTMydG9oKHBzaS0+aGlnaGVzdF9k
YXRhY2xhc3MpOworCXVwX3NwZWVkID0gbGU2NHRvaChwc2ktPnVwbGlua19zcGVlZCk7CisJZG93
bl9zcGVlZCA9IGxlNjR0b2gocHNpLT5kb3dubGlua19zcGVlZCk7CisJaWYgKHNjLT5zY19pbmZv
LnBhY2tldHN0YXRlICAhPSBzdGF0ZSB8fAorCSAgICBzYy0+c2NfaW5mby51cGxpbmtfc3BlZWQg
IT0gdXBfc3BlZWQgfHwKKwkgICAgc2MtPnNjX2luZm8uZG93bmxpbmtfc3BlZWQgIT0gZG93bl9z
cGVlZCkgeworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykgeworCQkJbG9nKExPR19J
TkZPLCAiJXM6IHBhY2tldCBzZXJ2aWNlICIsIERFVk5BTShzYykpOworCQkJaWYgKHNjLT5zY19p
bmZvLnBhY2tldHN0YXRlICAhPSBzdGF0ZSkKKwkJCQlsb2coTE9HX0lORk8sICJjaGFuZ2VkIGZy
b20gJXMgdG8gIiwKKwkJCQkgICAgdW1iX3BhY2tldF9zdGF0ZShzYy0+c2NfaW5mby5wYWNrZXRz
dGF0ZSkpOworCQkJbG9nKExPR19JTkZPLCAiJXMsIGNsYXNzICVzLCBzcGVlZDogJSIgUFJJdTY0
ICIgdXAgLyAlIiBQUkl1NjQgIiBkb3duXG4iLAorCQkJICAgIHVtYl9wYWNrZXRfc3RhdGUoc3Rh
dGUpLAorCQkJICAgIHVtYl9kYXRhY2xhc3MoaGlnaGVzdGNsYXNzKSwgdXBfc3BlZWQsIGRvd25f
c3BlZWQpOworCQl9CisJfQorCXNjLT5zY19pbmZvLnBhY2tldHN0YXRlID0gc3RhdGU7CisJc2Mt
PnNjX2luZm8uaGlnaGVzdGNsYXNzID0gaGlnaGVzdGNsYXNzOworCXNjLT5zY19pbmZvLnVwbGlu
a19zcGVlZCA9IHVwX3NwZWVkOworCXNjLT5zY19pbmZvLmRvd25saW5rX3NwZWVkID0gZG93bl9z
cGVlZDsKKworCWlmIChzYy0+c2NfaW5mby5yZWdtb2RlID09IE1CSU1fUkVHTU9ERV9BVVRPTUFU
SUMpIHsKKwkJLyoKKwkJICogRm9yIGRldmljZXMgdXNpbmcgYXV0b21hdGljIHJlZ2lzdHJhdGlv
biBtb2RlLCBqdXN0IHByb2NlZWQsCisJCSAqIG9uY2UgcmVnaXN0cmF0aW9uIGhhcyBjb21wbGV0
ZWQuCisJCSAqLworCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9VUCkgeworCQkJc3dpdGNoIChz
Yy0+c2NfaW5mby5yZWdzdGF0ZSkgeworCQkJY2FzZSBNQklNX1JFR1NUQVRFX0hPTUU6CisJCQlj
YXNlIE1CSU1fUkVHU1RBVEVfUk9BTUlORzoKKwkJCWNhc2UgTUJJTV9SRUdTVEFURV9QQVJUTkVS
OgorCQkJCXVtYl9uZXdzdGF0ZShzYywgVU1CX1NfQVRUQUNIRUQsCisJCQkJICAgIFVNQl9OU19E
T05UX0RST1ApOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJ
fSBlbHNlCisJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX1NJTVJFQURZLCBVTUJfTlNfRE9OVF9S
QUlTRSk7CisJfSBlbHNlIHN3aXRjaCAoc2MtPnNjX2luZm8ucGFja2V0c3RhdGUpIHsKKwljYXNl
IE1CSU1fUEtUU0VSVklDRV9TVEFURV9BVFRBQ0hFRDoKKwkJdW1iX25ld3N0YXRlKHNjLCBVTUJf
U19BVFRBQ0hFRCwgVU1CX05TX0RPTlRfRFJPUCk7CisJCWJyZWFrOworCWNhc2UgTUJJTV9QS1RT
RVJWSUNFX1NUQVRFX0RFVEFDSEVEOgorCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX1NJTVJFQURZ
LCBVTUJfTlNfRE9OVF9SQUlTRSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworc3Rh
dGljIGludAordW1iX2RlY29kZV9zaWduYWxfc3RhdGUoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZv
aWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1iaW1fY2lkX3NpZ25hbF9zdGF0ZSAqc3Mg
PSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50CSByc3NpOwor
CisJaWYgKGxlbiA8IHNpemVvZiAoKnNzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGUzMnRvaChz
cy0+cnNzaSkgPT0gOTkpCisJCXJzc2kgPSBVTUJfVkFMVUVfVU5LTk9XTjsKKwllbHNlIHsKKwkJ
cnNzaSA9IC0xMTMgKyAyICogbGUzMnRvaChzcy0+cnNzaSk7CisJCWlmICgoaWZwLT5pZl9mbGFn
cyAmIElGRl9ERUJVRykgJiYgc2MtPnNjX2luZm8ucnNzaSAhPSByc3NpICYmCisJCSAgICBzYy0+
c2Nfc3RhdGUgPj0gVU1CX1NfQ09OTkVDVEVEKQorCQkJbG9nKExPR19JTkZPLCAiJXM6IHJzc2kg
JWQgZEJtXG4iLCBERVZOQU0oc2MpLCByc3NpKTsKKwl9CisJc2MtPnNjX2luZm8ucnNzaSA9IHJz
c2k7CisJc2MtPnNjX2luZm8uYmVyID0gbGUzMnRvaChzcy0+ZXJyX3JhdGUpOworCWlmIChzYy0+
c2NfaW5mby5iZXIgPT0gLTk5KQorCQlzYy0+c2NfaW5mby5iZXIgPSBVTUJfVkFMVUVfVU5LTk9X
TjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9jb25uZWN0X2luZm8o
c3RydWN0IHVtYl9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1i
aW1fY2lkX2Nvbm5lY3RfaW5mbyAqY2kgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VU
X0lGUChzYyk7CisJaW50CSBhY3Q7CisKKwlpZiAobGVuIDwgc2l6ZW9mICgqY2kpKQorCQlyZXR1
cm4gMDsKKworCWlmIChsZTMydG9oKGNpLT5zZXNzaW9uaWQpICE9IHVtYl9zZXNzaW9uX2lkKSB7
CisJCURQUklOVEYoImRpc2NhcmQgY29ubmVjdGlvbiBpbmZvIGZvciBzZXNzaW9uICV1XG4iLAor
CQkgICAgbGUzMnRvaChjaS0+c2Vzc2lvbmlkKSk7CisJCXJldHVybiAxOworCX0KKwlpZiAobWVt
Y21wKGNpLT5jb250ZXh0LCB1bWJfdXVpZF9jb250ZXh0X2ludGVybmV0LAorCSAgICBzaXplb2Yg
KGNpLT5jb250ZXh0KSkpIHsKKwkJRFBSSU5URigiZGlzY2FyZCBjb25uZWN0aW9uIGluZm8gZm9y
IG90aGVyIGNvbnRleHRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJYWN0ID0gbGUzMnRvaChjaS0+
YWN0aXZhdGlvbik7CisJaWYgKHNjLT5zY19pbmZvLmFjdGl2YXRpb24gIT0gYWN0KSB7CisJCWlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19JTkZPLCAiJXM6IGNvbm5l
Y3Rpb24gJXNcbiIsIERFVk5BTShzYyksCisJCQkgICAgdW1iX2FjdGl2YXRpb24oYWN0KSk7CisJ
CWlmICgoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykgJiYKKwkJICAgIGxlMzJ0b2goY2ktPmlw
dHlwZSkgIT0gTUJJTV9DT05URVhUX0lQVFlQRV9ERUZBVUxUICYmCisJCSAgICBsZTMydG9oKGNp
LT5pcHR5cGUpICE9IE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNCkKKwkJCWxvZyhMT0dfREVCVUcs
ICIlczogZ290IGlwdHlwZSAlZCBjb25uZWN0aW9uXG4iLAorCQkJICAgIERFVk5BTShzYyksIGxl
MzJ0b2goY2ktPmlwdHlwZSkpOworCisJCXNjLT5zY19pbmZvLmFjdGl2YXRpb24gPSBhY3Q7CisJ
CXNjLT5zY19pbmZvLm53ZXJyb3IgPSBsZTMydG9oKGNpLT5ud2Vycm9yKTsKKworCQlpZiAoc2Mt
PnNjX2luZm8uYWN0aXZhdGlvbiA9PSBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVEVEKQor
CQkJdW1iX25ld3N0YXRlKHNjLCBVTUJfU19DT05ORUNURUQsIFVNQl9OU19ET05UX0RST1ApOwor
CQllbHNlIGlmIChzYy0+c2NfaW5mby5hY3RpdmF0aW9uID09CisJCSAgICBNQklNX0FDVElWQVRJ
T05fU1RBVEVfREVBQ1RJVkFURUQpCisJCQl1bWJfbmV3c3RhdGUoc2MsIFVNQl9TX0FUVEFDSEVE
LCAwKTsKKwkJLyogZWxzZTogb3RoZXIgc3RhdGVzIGFyZSBwdXJlbHkgdHJhbnNpdGlvbmFsICov
CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bWJfYWRkX2luZXRfY29uZmlnKHN0
cnVjdCB1bWJfc29mdGMgKnNjLCBzdHJ1Y3QgaW5fYWRkciBpcCwgdV9pbnQgcHJlZml4bGVuLAor
ICAgIHN0cnVjdCBpbl9hZGRyIGd3KQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChz
Yyk7CisJc3RydWN0IGluX2FsaWFzcmVxIGlmcmE7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47
CisJaW50CSBydjsKKworCW1lbXNldCgmaWZyYSwgMCwgc2l6ZW9mIChpZnJhKSk7CisJc2luID0g
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZnJhLmlmcmFfYWRkcjsKKwlzaW4tPnNpbl9mYW1pbHkg
PSBBRl9JTkVUOworCXNpbi0+c2luX2xlbiA9IHNpemVvZiAoKnNpbik7CisJc2luLT5zaW5fYWRk
ciA9IGlwOworCisJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZnJhLmlmcmFfZHN0YWRk
cjsKKwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi0+c2luX2xlbiA9IHNpemVvZiAo
KnNpbik7CisJc2luLT5zaW5fYWRkciA9IGd3OworCisJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9p
biAqKSZpZnJhLmlmcmFfbWFzazsKKwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi0+
c2luX2xlbiA9IHNpemVvZiAoKnNpbik7CisJdW1iX2luX2xlbjJtYXNrKCZzaW4tPnNpbl9hZGRy
LCBwcmVmaXhsZW4pOworCisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKwlDVVJWTkVUX1NF
VF9RVUlFVCh2bmV0MCk7CisJcnYgPSBpbl9jb250cm9sKE5VTEwsIFNJT0NBSUZBRERSLCAoY2Fk
ZHJfdCkmaWZyYSwgaWZwLCBjdXJ0aHJlYWQpOworCUNVUlZORVRfUkVTVE9SRSgpOworCW10eF9s
b2NrKCZzYy0+c2NfbXV0ZXgpOworCWlmIChydiAhPSAwKSB7CisJCWRldmljZV9wcmludGYoc2Mt
PnNjX2RldiwgInVuYWJsZSB0byBzZXQgSVB2NCBhZGRyZXNzLCBlcnJvciAlZFxuIiwKKwkJICAg
IHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKworCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0RFQlVH
KQorCQlsb2coTE9HX0lORk8sICIlczogSVB2NCBhZGRyICVzLCBtYXNrICVzLCAiCisJCSAgICAi
Z2F0ZXdheSAlc1xuIiwgREVWTkFNKHNjKSwKKwkJICAgIHVtYl9udG9wKHNpbnRvc2EoJmlmcmEu
aWZyYV9hZGRyKSksCisJCSAgICB1bWJfbnRvcChzaW50b3NhKCZpZnJhLmlmcmFfbWFzaykpLAor
CQkgICAgdW1iX250b3Aoc2ludG9zYSgmaWZyYS5pZnJhX2RzdGFkZHIpKSk7CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludAordW1iX2RlY29kZV9pcF9jb25maWd1cmF0aW9uKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2NpZF9p
cF9jb25maWd1cmF0aW9uX2luZm8gKmljID0gZGF0YTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdF
VF9JRlAoc2MpOworCXVpbnQzMl90IGF2YWlsX3Y0OworCXVpbnQzMl90IHZhbDsKKwlpbnQJIG4s
IGk7CisJaW50CSBvZmY7CisJc3RydWN0IG1iaW1fY2lkX2lwdjRfZWxlbWVudCBpcHY0ZWxlbTsK
KwlzdHJ1Y3QgaW5fYWRkciBhZGRyLCBndzsKKwlpbnQJIHN0YXRlID0gLTE7CisJaW50CSBydjsK
KworCWlmIChsZW4gPCBzaXplb2YgKCppYykpCisJCXJldHVybiAwOworCWlmIChsZTMydG9oKGlj
LT5zZXNzaW9uaWQpICE9IHVtYl9zZXNzaW9uX2lkKSB7CisJCURQUklOVEYoImlnbm9yZSBJUCBj
b25maWd1cmF0aW9uIGZvciBzZXNzaW9uIGlkICVkXG4iLAorCQkgICAgbGUzMnRvaChpYy0+c2Vz
c2lvbmlkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSVB2NCBjb25maWd1cmF0aW9u
CisJICovCisJYXZhaWxfdjQgPSBsZTMydG9oKGljLT5pcHY0X2F2YWlsYWJsZSk7CisJaWYgKChh
dmFpbF92NCAmIChNQklNX0lQQ09ORl9IQVNfQUREUklORk8gfCBNQklNX0lQQ09ORl9IQVNfR1dJ
TkZPKSkgPT0KKwkgICAgKE1CSU1fSVBDT05GX0hBU19BRERSSU5GTyB8IE1CSU1fSVBDT05GX0hB
U19HV0lORk8pKSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25hZGRyKTsKKwkJb2ZmID0gbGUz
MnRvaChpYy0+aXB2NF9hZGRyb2Zmcyk7CisKKwkJaWYgKG4gPT0gMCB8fCBvZmYgKyBzaXplb2Yg
KGlwdjRlbGVtKSA+IGxlbikKKwkJCWdvdG8gdHJ5djY7CisJCWlmIChuICE9IDEgJiYgaWZwLT5p
Zl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfSU5GTywgIiVzOiBtb3JlIHRoYW4gb25l
IElQdjQgYWRkcjogJWRcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgbik7CisKKwkJLyogT25seSBw
aWNrIHRoZSBmaXJzdCBvbmUgKi8KKwkJbWVtY3B5KCZpcHY0ZWxlbSwgKGNoYXIgKilkYXRhICsg
b2ZmLCBzaXplb2YgKGlwdjRlbGVtKSk7CisJCWlwdjRlbGVtLnByZWZpeGxlbiA9IGxlMzJ0b2go
aXB2NGVsZW0ucHJlZml4bGVuKTsKKwkJYWRkci5zX2FkZHIgPSBpcHY0ZWxlbS5hZGRyOworCisJ
CW9mZiA9IGxlMzJ0b2goaWMtPmlwdjRfZ3dvZmZzKTsKKwkJaWYgKG9mZiArIHNpemVvZiAoZ3cp
ID4gbGVuKQorCQkJZ290byBkb25lOworCQltZW1jcHkoJmd3LCAoY2hhciAqKWRhdGEgKyBvZmYs
IHNpemVvZiAoZ3cpKTsKKworCQlydiA9IHVtYl9hZGRfaW5ldF9jb25maWcoc2MsIGFkZHIsIGlw
djRlbGVtLnByZWZpeGxlbiwgZ3cpOworCQlpZiAocnYgPT0gMCkKKwkJCXN0YXRlID0gVU1CX1Nf
VVA7CisJfQorCisJbWVtc2V0KHNjLT5zY19pbmZvLmlwdjRkbnMsIDAsIHNpemVvZiAoc2MtPnNj
X2luZm8uaXB2NGRucykpOworCWlmIChhdmFpbF92NCAmIE1CSU1fSVBDT05GX0hBU19ETlNJTkZP
KSB7CisJCW4gPSBsZTMydG9oKGljLT5pcHY0X25kbnNzcnYpOworCQlvZmYgPSBsZTMydG9oKGlj
LT5pcHY0X2Ruc3Nydm9mZnMpOworCQlpID0gMDsKKwkJd2hpbGUgKG4tLSA+IDApIHsKKwkJCWlm
IChvZmYgKyBzaXplb2YgKGFkZHIpID4gbGVuKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KCZhZGRy
LCAoY2hhciAqKWRhdGEgKyBvZmYsIHNpemVvZihhZGRyKSk7CisJCQlpZiAoaSA8IFVNQl9NQVhf
RE5TU1JWKQorCQkJCXNjLT5zY19pbmZvLmlwdjRkbnNbaSsrXSA9IGFkZHI7CisJCQlvZmYgKz0g
c2l6ZW9mKGFkZHIpOworCQl9CisJfQorCisJaWYgKChhdmFpbF92NCAmIE1CSU1fSVBDT05GX0hB
U19NVFVJTkZPKSkgeworCQl2YWwgPSBsZTMydG9oKGljLT5pcHY0X210dSk7CisJCWlmIChpZnAt
PmlmX210dSAhPSB2YWwgJiYgdmFsIDw9IHNjLT5zY19tYXhwa3RsZW4pIHsKKwkJCWlmcC0+aWZf
bXR1ID0gdmFsOworCQkJaWYgKGlmcC0+aWZfbXR1ID4gdmFsKQorCQkJCWlmcC0+aWZfbXR1ID0g
dmFsOworCQkJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCQkJbG9nKExPR19JTkZP
LCAiJXM6IE1UVSAlZFxuIiwgREVWTkFNKHNjKSwgdmFsKTsKKwkJfQorCX0KKworCWF2YWlsX3Y0
ID0gbGUzMnRvaChpYy0+aXB2Nl9hdmFpbGFibGUpOworCWlmICgoaWZwLT5pZl9mbGFncyAmIElG
Rl9ERUJVRykgJiYgYXZhaWxfdjQgJiBNQklNX0lQQ09ORl9IQVNfQUREUklORk8pIHsKKwkJLyog
WFhYIEZJWE1FOiBJUHY2IGNvbmZpZ3VyYXRpb24gbWlzc2luZyAqLworCQlsb2coTE9HX0lORk8s
ICIlczogaWdub3JpbmcgSVB2NiBjb25maWd1cmF0aW9uXG4iLCBERVZOQU0oc2MpKTsKKwl9CisJ
aWYgKHN0YXRlICE9IC0xKQorCQl1bWJfbmV3c3RhdGUoc2MsIHN0YXRlLCAwKTsKKwordHJ5djY6
Citkb25lOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW1iX3J4KHN0cnVjdCB1bWJf
c29mdGMgKnNjKQoreworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOworCisJ
dXNiZF90cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltVTUJfQlVMS19SWF0pOworfQorCitzdGF0
aWMgdm9pZAordW1iX3J4ZW9mKHN0cnVjdCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3Rh
dHVzKQoreworCXN0cnVjdCB1bWJfc29mdGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJaW50IGFjdGxlbjsKKwlpbnQgYWZy
YW1lczsKKwlpbnQgaTsKKworCURQUklOVEYoIiVzKCV1KTogc3RhdGU9JXVcbiIsIF9fZnVuY19f
LCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4X2Fzc2VydCgmc2MtPnNjX211
dGV4LCBNQV9PV05FRCk7CisKKwl1c2JkX3hmZXJfc3RhdHVzKHhmZXIsICZhY3RsZW4sIE5VTEws
ICZhZnJhbWVzLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNh
c2UgVVNCX1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJyZWNlaXZlZCAldSBieXRlcyBpbiAl
dSBmcmFtZXNcbiIsIGFjdGxlbiwgYWZyYW1lcyk7CisKKwkJaWYgKGFjdGxlbiA9PSAwKSB7CisJ
CQlpZiAoc2MtPnNjX3J4X25lcnIgPj0gNCkKKwkJCQkvKiB0aHJvdHRsZSB0cmFuc2ZlcnMgKi8K
KwkJCQl1c2JkX3hmZXJfc2V0X2ludGVydmFsKHhmZXIsIDUwMCk7CisJCQllbHNlCisJCQkJc2Mt
PnNjX3J4X25lcnIrKzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIGRpc2FibGUgdGhyb3R0bGluZyAq
LworCQkJdXNiZF94ZmVyX3NldF9pbnRlcnZhbCh4ZmVyLCAwKTsKKwkJCXNjLT5zY19yeF9uZXJy
ID0gMDsKKwkJfQorCisJCWZvcihpID0gMDsgaSA8IGFmcmFtZXM7IGkrKykgeworCQkJdW1iX2Rl
Y2FwKHNjLCB4ZmVyLCBpKTsKKwkJfQorCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVVNC
X1NUX1NFVFVQOgorCQl1c2JkX3hmZXJfc2V0X2ZyYW1lX2RhdGEoeGZlciwgMCwgc2MtPnNjX3J4
X2J1ZiwKKwkJCQlzYy0+c2NfcnhfYnVmc3opOworCQl1c2JkX3hmZXJfc2V0X2ZyYW1lcyh4ZmVy
LCAxKTsKKwkJdXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisKKwkJdW1iX3J4Zmx1c2goc2Mp
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCJyeCBlcnJvcjogJXNcbiIsIHVzYmRf
ZXJyc3RyKHN0YXR1cykpOworCisJCS8qIGRpc2FibGUgdGhyb3R0bGluZyAqLworCQl1c2JkX3hm
ZXJfc2V0X2ludGVydmFsKHhmZXIsIDApOworCisJCWlmIChzdGF0dXMgIT0gVVNCX0VSUl9DQU5D
RUxMRUQpIHsKKwkJCS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJzdCAqLworCQkJdXNiZF94ZmVy
X3NldF9zdGFsbCh4ZmVyKTsKKwkJCXVzYmRfeGZlcl9zZXRfZnJhbWVzKHhmZXIsIDApOworCQkJ
dXNiZF90cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09V
TlRFUl9JRVJST1JTLCAxKTsKKwkJfQorCQllbHNlIGlmICgrK3NjLT5zY19yeF9uZXJyID4gMTAw
KSB7CisJCQlsb2coTE9HX0VSUiwgIiVzOiB0b28gbWFueSByeCBlcnJvcnMsIGRpc2FibGluZ1xu
IiwKKwkJCSAgICBERVZOQU0oc2MpKTsKKwkJCXVtYl9kZWFjdGl2YXRlKHNjLT5zY19kZXYpOwor
CQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VtYl9yeGZsdXNoKHN0cnVjdCB1
bWJfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJc3Ry
dWN0IG1idWYgKm07CisKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKwor
CWZvciAoOzspIHsKKwkJX0lGX0RFUVVFVUUoJnNjLT5zY19yeF9xdWV1ZSwgbSk7CisJCWlmICht
ID09IE5VTEwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUgVVNCIHhmZXIgaGFzIGJlZW4g
cmVzdWJtaXR0ZWQgc28gaXRzIHNhZmUgdG8gdW5sb2NrIG5vdy4KKwkJICovCisJCW10eF91bmxv
Y2soJnNjLT5zY19tdXRleCk7CisJCUNVUlZORVRfU0VUX1FVSUVUKHZuZXQwKTsKKwkJaWYgKGlm
cC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKQorCQkJaWZwLT5pZl9pbnB1dChpZnAs
IG0pOworCQllbHNlCisJCQltX2ZyZWVtKG0pOworCQlDVVJWTkVUX1JFU1RPUkUoKTsKKwkJbXR4
X2xvY2soJnNjLT5zY19tdXRleCk7CisJfQorfQorCitzdGF0aWMgaW50Cit1bWJfZW5jYXAoc3Ry
dWN0IHVtYl9zb2Z0YyAqc2MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIp
Cit7CisJc3RydWN0IG5jbV9oZWFkZXIxNiAqaGRyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2ICpw
dHI7CisJaW50CSBsZW47CisKKwlLQVNTRVJUKHNjLT5zY190eF9tID09IE5VTEwsCisJCQkoIkFz
c2VydGlvbiBmYWlsZWQgaW4gdW1iX2VuY2FwKCkiKSk7CisKKwkvKiBBbGwgc2l6ZSBjb25zdHJh
aW50cyBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBjYWxsZXIhICovCisJaGRyID0gKHN0cnVj
dCBuY21faGVhZGVyMTYgKilzYy0+c2NfdHhfYnVmOworCXB0ciA9IChzdHJ1Y3QgbmNtX3BvaW50
ZXIxNiAqKShoZHIgKyAxKTsKKworCVVTRVREVyhoZHItPmR3U2lnbmF0dXJlLCBOQ01fSERSMTZf
U0lHKTsKKwlVU0VUVyhoZHItPndIZWFkZXJMZW5ndGgsIHNpemVvZiAoKmhkcikpOworCVVTRVRX
KGhkci0+d1NlcXVlbmNlLCBzYy0+c2NfdHhfc2VxKTsKKwlzYy0+c2NfdHhfc2VxKys7CisJVVNF
VFcoaGRyLT53TmRwSW5kZXgsIHNpemVvZiAoKmhkcikpOworCisJbGVuID0gbS0+bV9wa3RoZHIu
bGVuOworCVVTRVREVyhwdHItPmR3U2lnbmF0dXJlLCBNQklNX05DTV9OVEgxNl9TSUcodW1iX3Nl
c3Npb25faWQpKTsKKwlVU0VUVyhwdHItPndMZW5ndGgsIHNpemVvZiAoKnB0cikpOworCVVTRVRX
KHB0ci0+d05leHROZHBJbmRleCwgMCk7CisJVVNFVFcocHRyLT5kZ3JhbVswXS53RGF0YWdyYW1J
bmRleCwgTUJJTV9IRFIxNl9MRU4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMF0ud0RhdGFncmFtTGVu
LCBsZW4pOworCVVTRVRXKHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtSW5kZXgsIDApOworCVVTRVRX
KHB0ci0+ZGdyYW1bMV0ud0RhdGFncmFtTGVuLCAwKTsKKworCUtBU1NFUlQobGVuICsgTUJJTV9I
RFIxNl9MRU4gPD0gc2MtPnNjX3R4X2J1ZnN6LAorCQkJKCJBc3NlcnRpb24gZmFpbGVkIGluIHVt
Yl9lbmNhcCgpIikpOworCW1fY29weWRhdGEobSwgMCwgbGVuLCAoY2hhciAqKShwdHIgKyAxKSk7
CisJc2MtPnNjX3R4X20gPSBtOworCWxlbiArPSBNQklNX0hEUjE2X0xFTjsKKwlVU0VUVyhoZHIt
PndCbG9ja0xlbmd0aCwgbGVuKTsKKworCXVzYmRfeGZlcl9zZXRfZnJhbWVfZGF0YSh4ZmVyLCAw
LCBzYy0+c2NfdHhfYnVmLCBsZW4pOworCXVzYmRfeGZlcl9zZXRfaW50ZXJ2YWwoeGZlciwgMCk7
CisJdXNiZF94ZmVyX3NldF9mcmFtZXMoeGZlciwgMSk7CisKKwlEUFJJTlRGTigzLCAiJXM6IGVu
Y2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBsZW4pOworCUREVU1QTig1LCBzYy0+c2NfdHhf
YnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordW1iX3R4ZW9mKHN0cnVj
dCB1c2JfeGZlciAqeGZlciwgdXNiX2Vycm9yX3Qgc3RhdHVzKQoreworCXN0cnVjdCB1bWJfc29m
dGMgKnNjID0gdXNiZF94ZmVyX3NvZnRjKHhmZXIpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VU
X0lGUChzYyk7CisJc3RydWN0IG1idWYgKm07CisKKwlEUFJJTlRGKCIlcygldSkgc3RhdGU9JXVc
biIsIF9fZnVuY19fLCBzdGF0dXMsIFVTQl9HRVRfU1RBVEUoeGZlcikpOworCisJbXR4X2Fzc2Vy
dCgmc2MtPnNjX211dGV4LCBNQV9PV05FRCk7CisKKwlzd2l0Y2ggKFVTQl9HRVRfU1RBVEUoeGZl
cikpIHsKKwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoKKwkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0g
fklGRl9EUlZfT0FDVElWRTsKKwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfT1BBQ0tF
VFMsIDEpOworCisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlj
YXNlIFVTQl9TVF9TRVRVUDoKK3RyX3NldHVwOgorCQlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYg
SUZGX0RSVl9SVU5OSU5HKSA9PSAwKQorCQkJYnJlYWs7CisKKwkJSUZRX0RSVl9ERVFVRVVFKCZp
ZnAtPmlmX3NuZCwgbSk7CisJCWlmIChtID09IE5VTEwpCisJCQlicmVhazsKKworCQlpZiAodW1i
X2VuY2FwKHNjLCBtLCB4ZmVyKSkgeworCQkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJf
T0VSUk9SUywgMSk7CisJCQl1bWJfdHhmbHVzaChzYyk7CisJCQlicmVhazsKKwkJfQorCisJCUJQ
Rl9NVEFQKGlmcCwgbSk7CisKKwkJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZF
OworCQl1c2JkX3RyYW5zZmVyX3N1Ym1pdCh4ZmVyKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6
CisJCXVtYl90eGZsdXNoKHNjKTsKKworCQkvKiBjb3VudCBvdXRwdXQgZXJyb3JzICovCisJCWlm
X2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09FUlJPUlMsIDEpOworCQlEUFJJTlRGKCJ0eCBl
cnJvcjogJXNcbiIsCisJCQkJdXNiZF9lcnJzdHIoc3RhdHVzKSk7CisKKwkJaWYgKHN0YXR1cyAh
PSBVU0JfRVJSX0NBTkNFTExFRCkgeworCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxsIGZpcnN0ICov
CisJCQl1c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJZ290byB0cl9zZXR1cDsKKwkJfQor
CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfdHhmbHVzaChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYykKK3sKKwltdHhfYXNzZXJ0KCZzYy0+c2NfbXV0ZXgsIE1BX09XTkVEKTsKKworCWlm
IChzYy0+c2NfdHhfbSAhPSBOVUxMKSB7CisJCW1fZnJlZW0oc2MtPnNjX3R4X20pOworCQlzYy0+
c2NfdHhfbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAordW1iX2RlY2FwKHN0cnVjdCB1
bWJfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIGludCBmcmFtZSkKK3sKKwlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCWNo
YXIJKmRwOworCXN0cnVjdCBuY21faGVhZGVyMTYgKmhkcjE2OworCXN0cnVjdCBuY21faGVhZGVy
MzIgKmhkcjMyOworCXN0cnVjdCBuY21fcG9pbnRlcjE2ICpwdHIxNjsKKwlzdHJ1Y3QgbmNtX3Bv
aW50ZXIxNl9kZ3JhbSAqZGdyYW0xNjsKKwlzdHJ1Y3QgbmNtX3BvaW50ZXIzMl9kZ3JhbSAqZGdy
YW0zMjsKKwl1aW50MzJfdCBoc2lnLCBwc2lnOworCWludAkgaGxlbiwgYmxlbjsKKwlpbnQJIHB0
cmxlbiwgcHRyb2ZmLCBkZ2VudHJ5b2ZmOworCXVpbnQzMl90IGRvZmYsIGRsZW47CisJc3RydWN0
IG1idWYgKm07CisKKwl1c2JkX3hmZXJfZnJhbWVfZGF0YSh4ZmVyLCBmcmFtZSwgKHZvaWQgKiop
JmJ1ZiwgJmxlbik7CisJRFBSSU5URk4oNCwgInJlY3YgJWQgYnl0ZXNcbiIsIGxlbik7CisJRERV
TVBOKDUsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgc2l6ZW9mICgqaGRyMTYpKQorCQlnb3RvIHRv
b3NtYWxsOworCisJaGRyMTYgPSAoc3RydWN0IG5jbV9oZWFkZXIxNiAqKWJ1ZjsKKwloc2lnID0g
VUdFVERXKGhkcjE2LT5kd1NpZ25hdHVyZSk7CisJaGxlbiA9IFVHRVRXKGhkcjE2LT53SGVhZGVy
TGVuZ3RoKTsKKwlpZiAobGVuIDwgaGxlbikKKwkJZ290byB0b29zbWFsbDsKKwlpZiAobGVuID4g
c2MtPnNjX3J4X2J1ZnN6KSB7CisJCURQUklOVEYoInBhY2tldCB0b28gbGFyZ2UgKCVkKVxuIiwg
bGVuKTsKKwkJZ290byBmYWlsOworCX0KKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNlIE5DTV9IRFIx
Nl9TSUc6CisJCWJsZW4gPSBVR0VUVyhoZHIxNi0+d0Jsb2NrTGVuZ3RoKTsKKwkJcHRyb2ZmID0g
VUdFVFcoaGRyMTYtPndOZHBJbmRleCk7CisJCWlmIChobGVuICE9IHNpemVvZiAoKmhkcjE2KSkg
eworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVuICVkIGZvciBOVEgxNiAoZXhwICV6dSlc
biIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6ZW9mICgqaGRyMTYpKTsKKwkJCWdvdG8g
ZmFpbDsKKwkJfQorCQlicmVhazsKKwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWhkcjMyID0gKHN0
cnVjdCBuY21faGVhZGVyMzIgKiloZHIxNjsKKwkJYmxlbiA9IFVHRVREVyhoZHIzMi0+ZHdCbG9j
a0xlbmd0aCk7CisJCXB0cm9mZiA9IFVHRVREVyhoZHIzMi0+ZHdOZHBJbmRleCk7CisJCWlmICho
bGVuICE9IHNpemVvZiAoKmhkcjMyKSkgeworCQkJRFBSSU5URigiJXM6IGJhZCBoZWFkZXIgbGVu
ICVkIGZvciBOVEgzMiAoZXhwICV6dSlcbiIsCisJCQkgICAgREVWTkFNKHNjKSwgaGxlbiwgc2l6
ZW9mICgqaGRyMzIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0Ogor
CQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIGhlYWRlciBzaWduYXR1cmUgKDB4JTA4eClc
biIsCisJCSAgICBERVZOQU0oc2MpLCBoc2lnKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAobGVu
IDwgYmxlbikgeworCQlEUFJJTlRGKCIlczogYmFkIE5UQiBsZW4gKCVkKSBmb3IgJWQgYnl0ZXMg
b2YgZGF0YVxuIiwKKwkJICAgIERFVk5BTShzYyksIGJsZW4sIGxlbik7CisJCWdvdG8gZmFpbDsK
Kwl9CisKKwlwdHIxNiA9IChzdHJ1Y3QgbmNtX3BvaW50ZXIxNiAqKShidWYgKyBwdHJvZmYpOwor
CXBzaWcgPSBVR0VURFcocHRyMTYtPmR3U2lnbmF0dXJlKTsKKwlwdHJsZW4gPSBVR0VUVyhwdHIx
Ni0+d0xlbmd0aCk7CisJaWYgKGxlbiA8IHB0cmxlbiArIHB0cm9mZikKKwkJZ290byB0b29zbWFs
bDsKKwlpZiAoIU1CSU1fTkNNX05USDE2X0lTSVNHKHBzaWcpICYmICFNQklNX05DTV9OVEgzMl9J
U0lTRyhwc2lnKSkgeworCQlEUFJJTlRGKCIlczogdW5zdXBwb3J0ZWQgTkNNIHBvaW50ZXIgc2ln
bmF0dXJlICgweCUwOHgpXG4iLAorCQkgICAgREVWTkFNKHNjKSwgcHNpZyk7CisJCWdvdG8gZmFp
bDsKKwl9CisKKwlzd2l0Y2ggKGhzaWcpIHsKKwljYXNlIE5DTV9IRFIxNl9TSUc6CisJCWRnZW50
cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNtX3BvaW50ZXIxNiwgZGdyYW0pOworCQlicmVhazsK
KwljYXNlIE5DTV9IRFIzMl9TSUc6CisJCWRnZW50cnlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgbmNt
X3BvaW50ZXIzMiwgZGdyYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGZhaWw7CisJ
fQorCisJd2hpbGUgKGRnZW50cnlvZmYgPCBwdHJsZW4pIHsKKwkJc3dpdGNoIChoc2lnKSB7CisJ
CWNhc2UgTkNNX0hEUjE2X1NJRzoKKwkJCWlmIChwdHJvZmYgKyBkZ2VudHJ5b2ZmIDwgc2l6ZW9m
ICgqZGdyYW0xNikpCisJCQkJZ290byBkb25lOworCQkJZGdyYW0xNiA9IChzdHJ1Y3QgbmNtX3Bv
aW50ZXIxNl9kZ3JhbSAqKQorCQkJICAgIChidWYgKyBwdHJvZmYgKyBkZ2VudHJ5b2ZmKTsKKwkJ
CWRnZW50cnlvZmYgKz0gc2l6ZW9mICgqZGdyYW0xNik7CisJCQlkbGVuID0gVUdFVFcoZGdyYW0x
Ni0+d0RhdGFncmFtTGVuKTsKKwkJCWRvZmYgPSBVR0VUVyhkZ3JhbTE2LT53RGF0YWdyYW1JbmRl
eCk7CisJCQlicmVhazsKKwkJY2FzZSBOQ01fSERSMzJfU0lHOgorCQkJaWYgKHB0cm9mZiArIGRn
ZW50cnlvZmYgPCBzaXplb2YgKCpkZ3JhbTMyKSkKKwkJCQlnb3RvIGRvbmU7CisJCQlkZ3JhbTMy
ID0gKHN0cnVjdCBuY21fcG9pbnRlcjMyX2RncmFtICopCisJCQkgICAgKGJ1ZiArIHB0cm9mZiAr
IGRnZW50cnlvZmYpOworCQkJZGdlbnRyeW9mZiArPSBzaXplb2YgKCpkZ3JhbTMyKTsKKwkJCWRs
ZW4gPSBVR0VURFcoZGdyYW0zMi0+ZHdEYXRhZ3JhbUxlbik7CisJCQlkb2ZmID0gVUdFVERXKGRn
cmFtMzItPmR3RGF0YWdyYW1JbmRleCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmX2lu
Y19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX0lFUlJPUlMsIDEpOworCQkJZ290byBkb25lOworCQl9
CisKKwkJLyogVGVybWluYXRpbmcgemVybyBlbnRyeSAqLworCQlpZiAoZGxlbiA9PSAwIHx8IGRv
ZmYgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgZGxlbiArIGRvZmYpIHsKKwkJCS8qIFNr
aXAgZ2lhbnQgZGF0YWdyYW0gYnV0IGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KKwkJCURQUklOVEYo
IiVzOiBkYXRhZ3JhbSB0b28gbGFyZ2UgKCVkIEAgb2ZmICVkKVxuIiwKKwkJCSAgICBERVZOQU0o
c2MpLCBkbGVuLCBkb2ZmKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHAgPSBidWYgKyBkb2Zm
OworCQlEUFJJTlRGTigzLCAiJXM6IGRlY2FwICVkIGJ5dGVzXG4iLCBERVZOQU0oc2MpLCBkbGVu
KTsKKwkJbSA9IG1fZGV2Z2V0KGRwLCBkbGVuLCAwLCBpZnAsIE5VTEwpOworCQlpZiAobSA9PSBO
VUxMKSB7CisJCQlpZl9pbmNfY291bnRlcihpZnAsIElGQ09VTlRFUl9JUURST1BTLCAxKTsKKwkJ
CWNvbnRpbnVlOworCQl9CisKKwkJLyogZW5xdWV1ZSBmb3IgbGF0ZXIgd2hlbiB0aGUgbG9jayBj
YW4gYmUgcmVsZWFzZWQgKi8KKwkJX0lGX0VOUVVFVUUoJnNjLT5zY19yeF9xdWV1ZSwgbSk7CisK
KwkJaWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSVBBQ0tFVFMsIDEpOworCisJfQorZG9u
ZToKKwlzYy0+c2NfcnhfbmVyciA9IDA7CisJcmV0dXJuOwordG9vc21hbGw6CisJRFBSSU5URigi
JXM6IHBhY2tldCB0b28gc21hbGwgKCVkKVxuIiwgREVWTkFNKHNjKSwgbGVuKTsKK2ZhaWw6CisJ
aWZfaW5jX2NvdW50ZXIoaWZwLCBJRkNPVU5URVJfSUVSUk9SUywgMSk7Cit9CisKK3N0YXRpYyB1
c2JfZXJyb3JfdAordW1iX3NlbmRfZW5jYXBfY29tbWFuZChzdHJ1Y3QgdW1iX3NvZnRjICpzYywg
dm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1c2JfZGV2aWNlX3JlcXVlc3RfdCByZXE7CisKKwlp
ZiAobGVuID4gc2MtPnNjX2N0cmxfbGVuKQorCQlyZXR1cm4gVVNCX0VSUl9JTlZBTDsKKworCS8q
IFhYWCBGSVhNRTogaWYgKHRvdGFsIGxlbiA+IHNjLT5zY19jdHJsX2xlbikgPT4gbXVzdCBmcmFn
bWVudCAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVRfV1JJVEVfQ0xBU1NfSU5URVJGQUNFOwor
CXJlcS5iUmVxdWVzdCA9IFVDRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDsKKwlVU0VUVyhy
ZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9pZmFjZW5vKTsK
KwlVU0VUVyhyZXEud0xlbmd0aCwgbGVuKTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOwor
CURFTEFZKHVtYl9kZWxheSk7CisJbXR4X2xvY2soJnNjLT5zY19tdXRleCk7CisJcmV0dXJuIHVz
YmRfZG9fcmVxdWVzdF9mbGFncyhzYy0+c2NfdWRldiwgJnNjLT5zY19tdXRleCwgJnJlcSwgZGF0
YSwgMCwKKwkJCU5VTEwsIHVtYl94ZmVyX3RvdXQpOworfQorCitzdGF0aWMgaW50Cit1bWJfZ2V0
X2VuY2FwX3Jlc3BvbnNlKHN0cnVjdCB1bWJfc29mdGMgKnNjLCB2b2lkICpidWYsIGludCAqbGVu
KQoreworCXVzYl9kZXZpY2VfcmVxdWVzdF90IHJlcTsKKwl1c2JfZXJyb3JfdCBlcnI7CisJdWlu
dDE2X3QgbCA9ICpsZW47CisKKwlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVUX1JFQURfQ0xBU1NfSU5U
RVJGQUNFOworCXJlcS5iUmVxdWVzdCA9IFVDRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsK
KwlVU0VUVyhyZXEud1ZhbHVlLCAwKTsKKwlVU0VUVyhyZXEud0luZGV4LCBzYy0+c2NfY3RybF9p
ZmFjZW5vKTsKKwlVU0VUVyhyZXEud0xlbmd0aCwgbCk7CisJLyogWFhYIEZJWE1FOiByZS1hc3Nl
bWJsZSBmcmFnbWVudHMgKi8KKworCW10eF91bmxvY2soJnNjLT5zY19tdXRleCk7CisJREVMQVko
dW1iX2RlbGF5KTsKKwltdHhfbG9jaygmc2MtPnNjX211dGV4KTsKKwllcnIgPSB1c2JkX2RvX3Jl
cXVlc3RfZmxhZ3Moc2MtPnNjX3VkZXYsICZzYy0+c2NfbXV0ZXgsICZyZXEsIGJ1ZiwKKwkJCVVT
Ql9TSE9SVF9YRkVSX09LLCAmbCwgdW1iX3hmZXJfdG91dCk7CisJaWYgKGVyciA9PSBVU0JfRVJS
X05PUk1BTF9DT01QTEVUSU9OKSB7CisJCSpsZW4gPSBsOworCQlyZXR1cm4gMTsKKwl9CisJRFBS
SU5URigiY3RybCByZWN2OiAlc1xuIiwgdXNiZF9lcnJzdHIoZXJyKSk7CisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyB2b2lkCit1bWJfY3RybF9tc2coc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVpbnQz
Ml90IHJlcSwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdF
VF9JRlAoc2MpOworCXVpbnQzMl90IHRpZDsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIgKmhkciA9IGRh
dGE7CisJdXNiX2Vycm9yX3QgZXJyOworCisJaWYgKHNjLT5zY19keWluZykKKwkJcmV0dXJuOwor
CWlmIChsZW4gPCBzaXplb2YgKCpoZHIpKQorCQlyZXR1cm47CisJdGlkID0gKytzYy0+c2NfdGlk
OworCisJaGRyLT50eXBlID0gaHRvbGUzMihyZXEpOworCWhkci0+bGVuID0gaHRvbGUzMihsZW4p
OworCWhkci0+dGlkID0gaHRvbGUzMih0aWQpOworCisjaWZkZWYgVU1CX0RFQlVHCisJaWYgKHVt
Yl9kZWJ1ZykgeworCQljb25zdCBjaGFyICpvcCwgKnN0cjsKKwkJaWYgKHJlcSA9PSBNQklNX0NP
TU1BTkRfTVNHKSB7CisJCQlzdHJ1Y3QgbWJpbV9oMmZfY21kICpjID0gZGF0YTsKKwkJCWlmIChs
ZTMydG9oKGMtPm9wKSA9PSBNQklNX0NNRE9QX1NFVCkKKwkJCQlvcCA9ICJzZXQiOworCQkJZWxz
ZQorCQkJCW9wID0gInFyeSI7CisJCQlzdHIgPSB1bWJfY2lkMnN0cihsZTMydG9oKGMtPmNpZCkp
OworCQl9IGVsc2UgeworCQkJb3AgPSAic25kIjsKKwkJCXN0ciA9IHVtYl9yZXF1ZXN0MnN0cihy
ZXEpOworCQl9CisJCURQUklOVEYoIi0+ICVzICVzICh0aWQgJXUpXG4iLCBvcCwgc3RyLCB0aWQp
OworCX0KKyNlbmRpZgorCWVyciA9IHVtYl9zZW5kX2VuY2FwX2NvbW1hbmQoc2MsIGRhdGEsIGxl
bik7CisJaWYgKGVyciAhPSBVU0JfRVJSX05PUk1BTF9DT01QTEVUSU9OKSB7CisJCWlmIChpZnAt
PmlmX2ZsYWdzICYgSUZGX0RFQlVHKQorCQkJbG9nKExPR19FUlIsICIlczogc2VuZCAlcyBtc2cg
KHRpZCAldSkgZmFpbGVkOiAlc1xuIiwKKwkJCSAgICBERVZOQU0oc2MpLCB1bWJfcmVxdWVzdDJz
dHIocmVxKSwgdGlkLAorCQkJICAgIHVzYmRfZXJyc3RyKGVycikpOworCisJCS8qIHdpbGwgYWZm
ZWN0IG90aGVyIHRyYW5zYWN0aW9ucywgdG9vICovCisJCXVzYmRfdHJhbnNmZXJfc3RvcChzYy0+
c2NfeGZlcltVTUJfSU5UUl9SWF0pOworCX0gZWxzZSB7CisJCURQUklOVEZOKDIsICJzZW50ICVz
ICh0aWQgJXUpXG4iLAorCQkgICAgdW1iX3JlcXVlc3Qyc3RyKHJlcSksIHRpZCk7CisJCUREVU1Q
TigzLCBkYXRhLCBsZW4pOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfb3Bl
bihzdHJ1Y3QgdW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWJpbV9oMmZfb3Blbm1zZyBtc2c7
CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mIChtc2cpKTsKKwltc2cubWF4bGVuID0gaHRvbGUz
MihzYy0+c2NfY3RybF9sZW4pOworCXVtYl9jdHJsX21zZyhzYywgTUJJTV9PUEVOX01TRywgJm1z
Zywgc2l6ZW9mIChtc2cpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY2xvc2Uo
c3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1iaW1faDJmX2Nsb3NlbXNnIG1zZzsK
KworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKG1zZykpOworCXVtYl9jdHJsX21zZyhzYywgTUJJ
TV9DTE9TRV9NU0csICZtc2csIHNpemVvZiAobXNnKSk7Cit9CisKK3N0YXRpYyBpbnQKK3VtYl9z
ZXRwaW4oc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBvcCwgaW50IGlzX3B1aywgdm9pZCAqcGlu
LCBpbnQgcGlubGVuLAorICAgIHZvaWQgKm5ld3BpbiwgaW50IG5ld3BpbmxlbikKK3sKKwlzdHJ1
Y3QgbWJpbV9jaWRfcGluIGNwOworCWludAkgb2ZmOworCisJaWYgKHBpbmxlbiA9PSAwKQorCQly
ZXR1cm4gMDsKKwlpZiAocGlubGVuIDwgMCB8fCBwaW5sZW4gPiBNQklNX1BJTl9NQVhMRU4gfHwK
KwkgICAgbmV3cGlubGVuIDwgMCB8fCBuZXdwaW5sZW4gPiBNQklNX1BJTl9NQVhMRU4gfHwKKwkg
ICAgb3AgPCAwIHx8IG9wID4gTUJJTV9QSU5fT1BfQ0hBTkdFIHx8CisJICAgIChpc19wdWsgJiYg
b3AgIT0gTUJJTV9QSU5fT1BfRU5URVIpKQorCQlyZXR1cm4gRUlOVkFMOworCisJbWVtc2V0KCZj
cCwgMCwgc2l6ZW9mIChjcCkpOworCWNwLnR5cGUgPSBodG9sZTMyKGlzX3B1ayA/IE1CSU1fUElO
X1RZUEVfUFVLMSA6IE1CSU1fUElOX1RZUEVfUElOMSk7CisKKwlvZmYgPSBvZmZzZXRvZihzdHJ1
Y3QgbWJpbV9jaWRfcGluLCBkYXRhKTsKKwlpZiAoIXVtYl9hZGRzdHIoJmNwLCBzaXplb2YgKGNw
KSwgJm9mZiwgcGluLCBwaW5sZW4sCisJICAgICZjcC5waW5fb2ZmcywgJmNwLnBpbl9zaXplKSkK
KwkJcmV0dXJuIEVJTlZBTDsKKworCWNwLm9wICA9IGh0b2xlMzIob3ApOworCWlmIChuZXdwaW5s
ZW4pIHsKKwkJaWYgKCF1bWJfYWRkc3RyKCZjcCwgc2l6ZW9mIChjcCksICZvZmYsIG5ld3Bpbiwg
bmV3cGlubGVuLAorCQkgICAgJmNwLm5ld3Bpbl9vZmZzLCAmY3AubmV3cGluX3NpemUpKQorCQkJ
cmV0dXJuIEVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoKG9wID09IE1CSU1fUElOX09QX0NIQU5H
RSkgfHwgaXNfcHVrKQorCQkJcmV0dXJuIEVJTlZBTDsKKwkJaWYgKCF1bWJfYWRkc3RyKCZjcCwg
c2l6ZW9mIChjcCksICZvZmYsIE5VTEwsIDAsCisJCSAgICAmY3AubmV3cGluX29mZnMsICZjcC5u
ZXdwaW5fc2l6ZSkpCisJCQlyZXR1cm4gRUlOVkFMOworCX0KKwltdHhfbG9jaygmc2MtPnNjX211
dGV4KTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9QSU4sIE1CSU1fQ01ET1BfU0VULCAmY3AsIG9m
Zik7CisJbXR4X3VubG9jaygmc2MtPnNjX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IHZvaWQKK3VtYl9zZXRkYXRhY2xhc3Moc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7CisJc3RydWN0
IG1iaW1fY2lkX3JlZ2lzdHJhdGlvbl9zdGF0ZSByczsKKwl1aW50MzJfdAkgY2xhc3NlczsKKwor
CWlmIChzYy0+c2NfaW5mby5zdXBwb3J0ZWRjbGFzc2VzID09IE1CSU1fREFUQUNMQVNTX05PTkUp
CisJCXJldHVybjsKKworCW1lbXNldCgmcnMsIDAsIHNpemVvZiAocnMpKTsKKwlycy5yZWdhY3Rp
b24gPSBodG9sZTMyKE1CSU1fUkVHQUNUSU9OX0FVVE9NQVRJQyk7CisJY2xhc3NlcyA9IHNjLT5z
Y19pbmZvLnN1cHBvcnRlZGNsYXNzZXM7CisJaWYgKHNjLT5zY19pbmZvLnByZWZlcnJlZGNsYXNz
ZXMgIT0gTUJJTV9EQVRBQ0xBU1NfTk9ORSkKKwkJY2xhc3NlcyAmPSBzYy0+c2NfaW5mby5wcmVm
ZXJyZWRjbGFzc2VzOworCXJzLmRhdGFfY2xhc3MgPSBodG9sZTMyKGNsYXNzZXMpOworCW10eF9s
b2NrKCZzYy0+c2NfbXV0ZXgpOworCXVtYl9jbWQoc2MsIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRF
LCBNQklNX0NNRE9QX1NFVCwgJnJzLCBzaXplb2YgKHJzKSk7CisJbXR4X3VubG9jaygmc2MtPnNj
X211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9yYWRpbyhzdHJ1Y3QgdW1iX3NvZnRjICpz
YywgaW50IG9uKQoreworCXN0cnVjdCBtYmltX2NpZF9yYWRpb19zdGF0ZSBzOworCisJRFBSSU5U
Rigic2V0IHJhZGlvICVzXG4iLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJbWVtc2V0KCZzLCAwLCBz
aXplb2YgKHMpKTsKKwlzLnN0YXRlID0gaHRvbGUzMihvbiA/IE1CSU1fUkFESU9fU1RBVEVfT04g
OiBNQklNX1JBRElPX1NUQVRFX09GRik7CisJdW1iX2NtZChzYywgTUJJTV9DSURfUkFESU9fU1RB
VEUsIE1CSU1fQ01ET1BfU0VULCAmcywgc2l6ZW9mIChzKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfYWxsb2NhdGVfY2lkKHN0cnVjdCB1bWJfc29mdGMgKnNjKQoreworCXVtYl9jbWQxKHNjLCBN
QklNX0NJRF9ERVZJQ0VfQ0FQUywgTUJJTV9DTURPUF9TRVQsCisJICAgIHVtYl9xbWlfYWxsb2Nf
Y2lkLCBzaXplb2YgKHVtYl9xbWlfYWxsb2NfY2lkKSwgdW1iX3V1aWRfcW1pX21iaW0pOworfQor
CitzdGF0aWMgdm9pZAordW1iX3NlbmRfZmNjX2F1dGgoc3RydWN0IHVtYl9zb2Z0YyAqc2MpCit7
CisJdWludDhfdAkgZmNjYXV0aFtzaXplb2YgKHVtYl9xbWlfZmNjX2F1dGgpXTsKKworCWlmIChz
Yy0+c2NfY2lkID09IC0xKSB7CisJCURQUklOVEYoIm1pc3NpbmcgQ0lELCBjYW5ub3Qgc2VuZCBG
Q0MgYXV0aFxuIik7CisJCXVtYl9hbGxvY2F0ZV9jaWQoc2MpOworCQlyZXR1cm47CisJfQorCW1l
bWNweShmY2NhdXRoLCB1bWJfcW1pX2ZjY19hdXRoLCBzaXplb2YgKGZjY2F1dGgpKTsKKwlmY2Nh
dXRoW1VNQl9RTUlfQ0lEX09GRlNdID0gc2MtPnNjX2NpZDsKKwl1bWJfY21kMShzYywgTUJJTV9D
SURfREVWSUNFX0NBUFMsIE1CSU1fQ01ET1BfU0VULAorCSAgICBmY2NhdXRoLCBzaXplb2YgKGZj
Y2F1dGgpLCB1bWJfdXVpZF9xbWlfbWJpbSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfcGFja2V0
X3NlcnZpY2Uoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBhdHRhY2gpCit7CisJc3RydWN0IG1i
aW1fY2lkX3BhY2tldF9zZXJ2aWNlCXM7CisKKwlEUFJJTlRGKCIlcyBwYWNrZXQgc2VydmljZVxu
IiwKKwkgICAgYXR0YWNoID8gImF0dGFjaCIgOiAiZGV0YWNoIik7CisJbWVtc2V0KCZzLCAwLCBz
aXplb2YgKHMpKTsKKwlzLmFjdGlvbiA9IGh0b2xlMzIoYXR0YWNoID8KKwkgICAgTUJJTV9QS1RT
RVJWSUNFX0FDVElPTl9BVFRBQ0ggOiBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0RFVEFDSCk7CisJ
dW1iX2NtZChzYywgTUJJTV9DSURfUEFDS0VUX1NFUlZJQ0UsIE1CSU1fQ01ET1BfU0VULCAmcywg
c2l6ZW9mIChzKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY29ubmVjdChzdHJ1Y3QgdW1iX3Nv
ZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJaWYgKHNj
LT5zY19pbmZvLnJlZ3N0YXRlID09IE1CSU1fUkVHU1RBVEVfUk9BTUlORyAmJiAhc2MtPnNjX3Jv
YW1pbmcpIHsKKwkJbG9nKExPR19JTkZPLCAiJXM6IGNvbm5lY3Rpb24gZGlzYWJsZWQgaW4gcm9h
bWluZyBuZXR3b3JrXG4iLAorCQkgICAgREVWTkFNKHNjKSk7CisJCXJldHVybjsKKwl9CisJaWYg
KGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfREVCVUcsICIlczogY29ubmVj
dGluZyAuLi5cbiIsIERFVk5BTShzYykpOworCXVtYl9zZW5kX2Nvbm5lY3Qoc2MsIE1CSU1fQ09O
TkVDVF9BQ1RJVkFURSk7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZGlzY29ubmVjdChzdHJ1Y3Qg
dW1iX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IEdFVF9JRlAoc2MpOworCisJ
aWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfREVCVUcpCisJCWxvZyhMT0dfREVCVUcsICIlczogZGlz
Y29ubmVjdGluZyAuLi5cbiIsIERFVk5BTShzYykpOworCXVtYl9zZW5kX2Nvbm5lY3Qoc2MsIE1C
SU1fQ09OTkVDVF9ERUFDVElWQVRFKTsKK30KKworc3RhdGljIHZvaWQKK3VtYl9zZW5kX2Nvbm5l
Y3Qoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIGludCBjb21tYW5kKQoreworCXN0cnVjdCBtYmltX2Np
ZF9jb25uZWN0ICpjOworCWludAkgb2ZmOworCisJLyogVG9vIGxhcmdlIGZvciB0aGUgc3RhY2sg
Ki8KKwltdHhfdW5sb2NrKCZzYy0+c2NfbXV0ZXgpOworCWMgPSBtYWxsb2Moc2l6ZW9mICgqYyks
IE1fTUJJTV9DSURfQ09OTkVDVCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCW10eF9sb2NrKCZzYy0+
c2NfbXV0ZXgpOworCWMtPnNlc3Npb25pZCA9IGh0b2xlMzIodW1iX3Nlc3Npb25faWQpOworCWMt
PmNvbW1hbmQgPSBodG9sZTMyKGNvbW1hbmQpOworCW9mZiA9IG9mZnNldG9mKHN0cnVjdCBtYmlt
X2NpZF9jb25uZWN0LCBkYXRhKTsKKwlpZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9mICgqYyksICZv
ZmYsIHNjLT5zY19pbmZvLmFwbiwKKwkgICAgc2MtPnNjX2luZm8uYXBubGVuLCAmYy0+YWNjZXNz
X29mZnMsICZjLT5hY2Nlc3Nfc2l6ZSkpCisJCWdvdG8gZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIo
Yywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZvLnVzZXJuYW1lLAorCSAgICBzYy0+c2Nf
aW5mby51c2VybmFtZWxlbiwgJmMtPnVzZXJfb2ZmcywgJmMtPnVzZXJfc2l6ZSkpCisJCWdvdG8g
ZG9uZTsKKwlpZiAoIXVtYl9hZGRzdHIoYywgc2l6ZW9mICgqYyksICZvZmYsIHNjLT5zY19pbmZv
LnBhc3N3b3JkLAorCSAgICBzYy0+c2NfaW5mby5wYXNzd29yZGxlbiwgJmMtPnBhc3N3ZF9vZmZz
LCAmYy0+cGFzc3dkX3NpemUpKQorCQlnb3RvIGRvbmU7CisJYy0+YXV0aHByb3QgPSBodG9sZTMy
KE1CSU1fQVVUSFBST1RfTk9ORSk7CisJYy0+Y29tcHJlc3Npb24gPSBodG9sZTMyKE1CSU1fQ09N
UFJFU1NJT05fTk9ORSk7CisJYy0+aXB0eXBlID0gaHRvbGUzMihNQklNX0NPTlRFWFRfSVBUWVBF
X0lQVjQpOworCW1lbWNweShjLT5jb250ZXh0LCB1bWJfdXVpZF9jb250ZXh0X2ludGVybmV0LCBz
aXplb2YgKGMtPmNvbnRleHQpKTsKKwl1bWJfY21kKHNjLCBNQklNX0NJRF9DT05ORUNULCBNQklN
X0NNRE9QX1NFVCwgYywgb2ZmKTsKK2RvbmU6CisJZnJlZShjLCBNX01CSU1fQ0lEX0NPTk5FQ1Qp
OworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9xcnlfaXBjb25maWcoc3RydWN0IHVt
Yl9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1iaW1fY2lkX2lwX2NvbmZpZ3VyYXRpb25faW5mbyBp
cGM7CisKKwltZW1zZXQoJmlwYywgMCwgc2l6ZW9mIChpcGMpKTsKKwlpcGMuc2Vzc2lvbmlkID0g
aHRvbGUzMih1bWJfc2Vzc2lvbl9pZCk7CisJdW1iX2NtZChzYywgTUJJTV9DSURfSVBfQ09ORklH
VVJBVElPTiwgTUJJTV9DTURPUF9RUlksCisJICAgICZpcGMsIHNpemVvZiAoaXBjKSk7Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfY21kKHN0cnVjdCB1bWJfc29mdGMgKnNjLCBpbnQgY2lkLCBpbnQg
b3AsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJdW1iX2NtZDEoc2MsIGNpZCwgb3As
IGRhdGEsIGxlbiwgdW1iX3V1aWRfYmFzaWNfY29ubmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit1
bWJfY21kMShzdHJ1Y3QgdW1iX3NvZnRjICpzYywgaW50IGNpZCwgaW50IG9wLCBjb25zdCB2b2lk
ICpkYXRhLCBpbnQgbGVuLAorICAgIHVpbnQ4X3QgKnV1aWQpCit7CisJc3RydWN0IG1iaW1faDJm
X2NtZCAqY21kOworCWludAl0b3RsZW47CisKKwkvKiBYWFggRklYTUUgc3VwcG9ydCBzZW5kaW5n
IGZyYWdtZW50cyAqLworCWlmIChzaXplb2YgKCpjbWQpICsgbGVuID4gc2MtPnNjX2N0cmxfbGVu
KSB7CisJCURQUklOVEYoInNldCAlcyBtc2cgdG9vIGxvbmc6IGNhbm5vdCBzZW5kXG4iLAorCQkg
ICAgdW1iX2NpZDJzdHIoY2lkKSk7CisJCXJldHVybjsKKwl9CisJY21kID0gc2MtPnNjX2N0cmxf
bXNnOworCW1lbXNldChjbWQsIDAsIHNpemVvZiAoKmNtZCkpOworCWNtZC0+ZnJhZy5uZnJhZyA9
IGh0b2xlMzIoMSk7CisJbWVtY3B5KGNtZC0+ZGV2aWQsIHV1aWQsIHNpemVvZiAoY21kLT5kZXZp
ZCkpOworCWNtZC0+Y2lkID0gaHRvbGUzMihjaWQpOworCWNtZC0+b3AgPSBodG9sZTMyKG9wKTsK
KwljbWQtPmluZm9sZW4gPSBodG9sZTMyKGxlbik7CisJdG90bGVuID0gc2l6ZW9mICgqY21kKTsK
KwlpZiAobGVuID4gMCkgeworCQltZW1jcHkoY21kICsgMSwgZGF0YSwgbGVuKTsKKwkJdG90bGVu
ICs9IGxlbjsKKwl9CisJdW1iX2N0cmxfbXNnKHNjLCBNQklNX0NPTU1BTkRfTVNHLCBjbWQsIHRv
dGxlbik7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfY29tbWFuZF9kb25lKHN0cnVjdCB1bWJfc29m
dGMgKnNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYmltX2YyaF9jbWRkb25l
ICpjbWQgPSBkYXRhOworCXN0cnVjdCBpZm5ldCAqaWZwID0gR0VUX0lGUChzYyk7CisJdWludDMy
X3Qgc3RhdHVzOworCXVpbnQzMl90IGNpZDsKKwl1aW50MzJfdCBpbmZvbGVuOworCWludAkgcW1p
bXNnID0gMDsKKworCWlmIChsZW4gPCBzaXplb2YgKCpjbWQpKSB7CisJCURQUklOVEYoImRpc2Nh
cmQgc2hvcnQgJXMgbWVzc2FnZVxuIiwKKwkJICAgIHVtYl9yZXF1ZXN0MnN0cihsZTMydG9oKGNt
ZC0+aGRyLnR5cGUpKSk7CisJCXJldHVybjsKKwl9CisJY2lkID0gbGUzMnRvaChjbWQtPmNpZCk7
CisJaWYgKG1lbWNtcChjbWQtPmRldmlkLCB1bWJfdXVpZF9iYXNpY19jb25uZWN0LCBzaXplb2Yg
KGNtZC0+ZGV2aWQpKSkgeworCQlpZiAobWVtY21wKGNtZC0+ZGV2aWQsIHVtYl91dWlkX3FtaV9t
YmltLAorCQkgICAgc2l6ZW9mIChjbWQtPmRldmlkKSkpIHsKKwkJCURQUklOVEYoImRpc2NhcmQg
JXMgbWVzc2FnZSBmb3Igb3RoZXIgVVVJRCAnJXMnXG4iLAorCQkJICAgIHVtYl9yZXF1ZXN0MnN0
cihsZTMydG9oKGNtZC0+aGRyLnR5cGUpKSwKKwkJCSAgICB1bWJfdXVpZDJzdHIoY21kLT5kZXZp
ZCkpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXFtaW1zZyA9IDE7CisJfQorCisJc3RhdHVz
ID0gbGUzMnRvaChjbWQtPnN0YXR1cyk7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIE1CSU1f
U1RBVFVTX1NVQ0NFU1M6CisJCWJyZWFrOworCWNhc2UgTUJJTV9TVEFUVVNfTk9UX0lOSVRJQUxJ
WkVEOgorCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0dfRVJSLCAi
JXM6IFNJTSBub3QgaW5pdGlhbGl6ZWQgKFBJTiBtaXNzaW5nKVxuIiwKKwkJCSAgICBERVZOQU0o
c2MpKTsKKwkJcmV0dXJuOworCWNhc2UgTUJJTV9TVEFUVVNfUElOX1JFUVVJUkVEOgorCQlzYy0+
c2NfaW5mby5waW5fc3RhdGUgPSBVTUJfUElOX1JFUVVJUkVEOworCQkvKkZBTExUSFJPVUdIKi8K
KwlkZWZhdWx0OgorCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykKKwkJCWxvZyhMT0df
RVJSLCAiJXM6IHNldC9xcnkgJXMgZmFpbGVkOiAlc1xuIiwgREVWTkFNKHNjKSwKKwkJCSAgICB1
bWJfY2lkMnN0cihjaWQpLCB1bWJfc3RhdHVzMnN0cihzdGF0dXMpKTsKKwkJcmV0dXJuOworCX0K
KworCWluZm9sZW4gPSBsZTMydG9oKGNtZC0+aW5mb2xlbik7CisJaWYgKGxlbiA8IHNpemVvZiAo
KmNtZCkgKyBpbmZvbGVuKSB7CisJCURQUklOVEYoImRpc2NhcmQgdHJ1bmNhdGVkICVzIG1lc3Nh
Z2UgKHdhbnQgJWQsIGdvdCAlZClcbiIsCisJCSAgICB1bWJfY2lkMnN0cihjaWQpLAorCQkgICAg
KGludClzaXplb2YgKCpjbWQpICsgaW5mb2xlbiwgbGVuKTsKKwkJcmV0dXJuOworCX0KKwlpZiAo
cW1pbXNnKSB7CisJCWlmIChzYy0+c2NfZmxhZ3MgJiBVTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQp
CisJCQl1bWJfZGVjb2RlX3FtaShzYywgY21kLT5pbmZvLCBpbmZvbGVuKTsKKwl9IGVsc2Ugewor
CQlEUFJJTlRGTigyLCAic2V0L3FyeSAlcyBkb25lXG4iLAorCQkgICAgdW1iX2NpZDJzdHIoY2lk
KSk7CisJCXVtYl9kZWNvZGVfY2lkKHNjLCBjaWQsIGNtZC0+aW5mbywgaW5mb2xlbik7CisJfQor
fQorCitzdGF0aWMgdm9pZAordW1iX2RlY29kZV9jaWQoc3RydWN0IHVtYl9zb2Z0YyAqc2MsIHVp
bnQzMl90IGNpZCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQJIG9rID0gMTsKKworCXN3
aXRjaCAoY2lkKSB7CisJY2FzZSBNQklNX0NJRF9ERVZJQ0VfQ0FQUzoKKwkJb2sgPSB1bWJfZGVj
b2RlX2RldmljZXNfY2FwcyhzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJ
RF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUzoKKwkJb2sgPSB1bWJfZGVjb2RlX3N1YnNjcmliZXJf
c3RhdHVzKHNjLCBkYXRhLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX1JBRElPX1NU
QVRFOgorCQlvayA9IHVtYl9kZWNvZGVfcmFkaW9fc3RhdGUoc2MsIGRhdGEsIGxlbik7CisJCWJy
ZWFrOworCWNhc2UgTUJJTV9DSURfUElOOgorCQlvayA9IHVtYl9kZWNvZGVfcGluKHNjLCBkYXRh
LCBsZW4pOworCQlicmVhazsKKwljYXNlIE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFOgorCQlvayA9
IHVtYl9kZWNvZGVfcmVnaXN0ZXJfc3RhdGUoc2MsIGRhdGEsIGxlbik7CisJCWJyZWFrOworCWNh
c2UgTUJJTV9DSURfUEFDS0VUX1NFUlZJQ0U6CisJCW9rID0gdW1iX2RlY29kZV9wYWNrZXRfc2Vy
dmljZShzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9TSUdOQUxfU1RB
VEU6CisJCW9rID0gdW1iX2RlY29kZV9zaWduYWxfc3RhdGUoc2MsIGRhdGEsIGxlbik7CisJCWJy
ZWFrOworCWNhc2UgTUJJTV9DSURfQ09OTkVDVDoKKwkJb2sgPSB1bWJfZGVjb2RlX2Nvbm5lY3Rf
aW5mbyhzYywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNQklNX0NJRF9JUF9DT05GSUdV
UkFUSU9OOgorCQlvayA9IHVtYl9kZWNvZGVfaXBfY29uZmlndXJhdGlvbihzYywgZGF0YSwgbGVu
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogTm90ZTogdGhlIGFib3ZlIGxpc3Qg
aXMgaW5jb21wbGV0ZSBhbmQgb25seSBjb250YWlucworCQkgKgltYW5kYXRvcnkgQ0lEcyBmcm9t
IHRoZSBCQVNJQ19DT05ORUNUIHNldC4KKwkJICoJU28gYWx0ZXJuYXRlIHZhbHVlcyBhcmUgbm90
IHVudXN1YWwuCisJCSAqLworCQlEUFJJTlRGTig0LCAiaWdub3JlICVzXG4iLCB1bWJfY2lkMnN0
cihjaWQpKTsKKwkJYnJlYWs7CisJfQorCWlmICghb2spCisJCURQUklOVEYoImRpc2NhcmQgJXMg
d2l0aCBiYWQgaW5mbyBsZW5ndGggJWRcbiIsCisJCSAgICB1bWJfY2lkMnN0cihjaWQpLCBsZW4p
OworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3VtYl9kZWNvZGVfcW1pKHN0cnVjdCB1bWJf
c29mdGMgKnNjLCB1aW50OF90ICpkYXRhLCBpbnQgbGVuKQoreworCXVpbnQ4X3QJc3J2OworCXVp
bnQxNl90IG1zZywgdGx2bGVuOworCXVpbnQzMl90IHZhbDsKKworI2RlZmluZSBVTUJfUU1JX1FN
VVhMRU4JCTYKKwlpZiAobGVuIDwgVU1CX1FNSV9RTVVYTEVOKQorCQlnb3RvIHRvb3Nob3J0Owor
CisJc3J2ID0gZGF0YVs0XTsKKwlkYXRhICs9IFVNQl9RTUlfUU1VWExFTjsKKwlsZW4gLT0gVU1C
X1FNSV9RTVVYTEVOOworCisjZGVmaW5lIFVNQl9HRVQxNihwKQkoKHVpbnQxNl90KSpwIHwgKHVp
bnQxNl90KSoocCArIDEpIDw8IDgpCisjZGVmaW5lIFVNQl9HRVQzMihwKQkoKHVpbnQzMl90KSpw
IHwgKHVpbnQzMl90KSoocCArIDEpIDw8IDggfCBcCisJCQkgICAgKHVpbnQzMl90KSoocCArIDIp
IDw8IDE2IHwodWludDMyX3QpKihwICsgMykgPDwgMjQpCisJc3dpdGNoIChzcnYpIHsKKwljYXNl
IDA6CS8qIGN0bCAqLworI2RlZmluZSBVTUJfUU1JX0NUTExFTgkJNgorCQlpZiAobGVuIDwgVU1C
X1FNSV9DVExMRU4pCisJCQlnb3RvIHRvb3Nob3J0OworCQltc2cgPSBVTUJfR0VUMTYoJmRhdGFb
Ml0pOworCQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFbNF0pOworCQlkYXRhICs9IFVNQl9RTUlf
Q1RMTEVOOworCQlsZW4gLT0gVU1CX1FNSV9DVExMRU47CisJCWJyZWFrOworCWNhc2UgMjoJLyog
ZG1zICAqLworI2RlZmluZSBVTUJfUU1JX0RNU0xFTgkJNworCQlpZiAobGVuIDwgVU1CX1FNSV9E
TVNMRU4pCisJCQlnb3RvIHRvb3Nob3J0OworCQltc2cgPSBVTUJfR0VUMTYoJmRhdGFbM10pOwor
CQl0bHZsZW4gPSBVTUJfR0VUMTYoJmRhdGFbNV0pOworCQlkYXRhICs9IFVNQl9RTUlfRE1TTEVO
OworCQlsZW4gLT0gVU1CX1FNSV9ETVNMRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklO
VEYoImRpc2NhcmQgUU1JIG1lc3NhZ2UgZm9yIHVua25vd24gc2VydmljZSB0eXBlICVkXG4iLAor
CQkgICAgc3J2KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsZW4gPCB0bHZsZW4pCisJCWdvdG8g
dG9vc2hvcnQ7CisKKyNkZWZpbmUgVU1CX1FNSV9UTFZMRU4JCTMKKwl3aGlsZSAobGVuID4gMCkg
eworCQlpZiAobGVuIDwgVU1CX1FNSV9UTFZMRU4pCisJCQlnb3RvIHRvb3Nob3J0OworCQl0bHZs
ZW4gPSBVTUJfR0VUMTYoJmRhdGFbMV0pOworCQlpZiAobGVuIDwgVU1CX1FNSV9UTFZMRU4gKyB0
bHZsZW4pCisJCQlnb3RvIHRvb3Nob3J0OworCQlzd2l0Y2ggKGRhdGFbMF0pIHsKKwkJY2FzZSAx
OgkvKiBhbGxvY2F0aW9uIGluZm8gKi8KKwkJCWlmIChtc2cgPT0gMHgwMDIyKSB7CS8qIEFsbG9j
YXRlIENJRCAqLworCQkJCWlmICh0bHZsZW4gIT0gMiB8fCBkYXRhWzNdICE9IDIpIC8qIGRtcyAq
LworCQkJCQlicmVhazsKKwkJCQlzYy0+c2NfY2lkID0gZGF0YVs0XTsKKwkJCQlEUFJJTlRGKCJR
TUkgQ0lEICVkIGFsbG9jYXRlZFxuIiwKKwkJCQkgICAgc2MtPnNjX2NpZCk7CisJCQkJdW1iX25l
d3N0YXRlKHNjLCBVTUJfU19DSUQsIFVNQl9OU19ET05UX0RST1ApOworCQkJfQorCQkJYnJlYWs7
CisJCWNhc2UgMjoJLyogcmVzcG9uc2UgKi8KKwkJCWlmICh0bHZsZW4gIT0gc2l6ZW9mICh2YWwp
KQorCQkJCWJyZWFrOworCQkJdmFsID0gVU1CX0dFVDMyKCZkYXRhWzNdKTsKKwkJCXN3aXRjaCAo
bXNnKSB7CisJCQljYXNlIDB4MDAyMjoJLyogQWxsb2NhdGUgQ0lEICovCisJCQkJaWYgKHZhbCAh
PSAwKSB7CisJCQkJCWxvZyhMT0dfRVJSLCAiJXM6IGFsbG9jYXRpb24gb2YgUU1JIENJRCIKKwkJ
CQkJICAgICIgZmFpbGVkLCBlcnJvciAweCV4XG4iLCBERVZOQU0oc2MpLAorCQkJCQkgICAgdmFs
KTsKKwkJCQkJLyogWFhYIGhvdyB0byBwcm9jZWVkPyAqLworCQkJCQlyZXR1cm47CisJCQkJfQor
CQkJCWJyZWFrOworCQkJY2FzZSAweDU1NWY6CS8qIFNlbmQgRkNDIEF1dGhlbnRpY2F0aW9uICov
CisJCQkJaWYgKHZhbCA9PSAwKQorCQkJCQlEUFJJTlRGKCIlczogc2VuZCBGQ0MgIgorCQkJCQkg
ICAgIkF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZFxuIiwKKwkJCQkJICAgIERFVk5BTShzYykpOwor
CQkJCWVsc2UgaWYgKHZhbCA9PSAweDAwMWEwMDAxKQorCQkJCQlEUFJJTlRGKCIlczogRkNDIEF1
dGhlbnRpY2F0aW9uICIKKwkJCQkJICAgICJub3QgcmVxdWlyZWRcbiIsIERFVk5BTShzYykpOwor
CQkJCWVsc2UKKwkJCQkJbG9nKExPR19JTkZPLCAiJXM6IHNlbmQgRkNDICIKKwkJCQkJICAgICJB
dXRoZW50aWNhdGlvbiBmYWlsZWQsICIKKwkJCQkJICAgICJlcnJvciAweCV4XG4iLCBERVZOQU0o
c2MpLCB2YWwpOworCisJCQkJLyogRkNDIEF1dGggaXMgbmVlZGVkIG9ubHkgb25jZSBhZnRlciBw
b3dlci1vbiovCisJCQkJc2MtPnNjX2ZsYWdzICY9IH5VTUJGTEdfRkNDX0FVVEhfUkVRVUlSRUQ7
CisKKwkJCQkvKiBUcnkgdG8gcHJvY2VlZCBhbnl3YXkgKi8KKwkJCQlEUFJJTlRGKCJpbml0OiB0
dXJuaW5nIHJhZGlvIG9uIC4uLlxuIik7CisJCQkJdW1iX3JhZGlvKHNjLCAxKTsKKwkJCQlicmVh
azsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCWJyZWFrOworCQl9CisJCWRhdGEgKz0gVU1CX1FNSV9UTFZMRU4gKyB0bHZsZW47CisJCWxl
biAtPSBVTUJfUU1JX1RMVkxFTiArIHRsdmxlbjsKKwl9CisJcmV0dXJuOworCit0b29zaG9ydDoK
KwlEUFJJTlRGKCJkaXNjYXJkIHNob3J0IFFNSSBtZXNzYWdlXG4iKTsKKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCit1bWJfaW50cihzdHJ1Y3QgdXNiX3hmZXIgKnhmZXIsIHVzYl9lcnJvcl90
IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdW1iX3NvZnRjICpzYyA9IHVzYmRfeGZlcl9zb2Z0Yyh4ZmVy
KTsKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOworCXN0cnVjdCB1
c2JfcGFnZV9jYWNoZSAqcGM7CisJc3RydWN0IGlmbmV0ICppZnAgPSBHRVRfSUZQKHNjKTsKKwlp
bnQJIHRvdGFsX2xlbjsKKworCW10eF9hc3NlcnQoJnNjLT5zY19tdXRleCwgTUFfT1dORUQpOwor
CisJLyogRklYTUUgdXNlIGFjdGxlbiBvciB0b3RhbF9sZW4/ICovCisJdXNiZF94ZmVyX3N0YXR1
cyh4ZmVyLCAmdG90YWxfbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCXN3aXRjaCAoVVNCX0dF
VF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1RSQU5TRkVSUkVEOgorCQlEUFJJTlRGKCJS
ZWNlaXZlZCAlZCBieXRlc1xuIiwgdG90YWxfbGVuKTsKKworCQlpZiAodG90YWxfbGVuIDwgVUNE
Q19OT1RJRklDQVRJT05fTEVOR1RIKSB7CisJCQlEUFJJTlRGKCJzaG9ydCBub3RpZmljYXRpb24g
KCVkPCVkKVxuIiwKKwkJCQkJdG90YWxfbGVuLCBVQ0RDX05PVElGSUNBVElPTl9MRU5HVEgpOwor
CQkJcmV0dXJuOworCQl9CisKKwkJcGMgPSB1c2JkX3hmZXJfZ2V0X2ZyYW1lKHhmZXIsIDApOwor
CQl1c2JkX2NvcHlfb3V0KHBjLCAwLCAmbm90aWZpY2F0aW9uLCBzaXplb2YgKG5vdGlmaWNhdGlv
bikpOworCisJCWlmIChub3RpZmljYXRpb24uYm1SZXF1ZXN0VHlwZSAhPSBVQ0RDX05PVElGSUNB
VElPTikgeworCQkJRFBSSU5URigidW5leHBlY3RlZCBub3RpZmljYXRpb24gKHR5cGU9MHglMDJ4
KVxuIiwKKwkJCQkJbm90aWZpY2F0aW9uLmJtUmVxdWVzdFR5cGUpOworCQkJcmV0dXJuOworCQl9
CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uYk5vdGlmaWNhdGlvbikgeworCQljYXNlIFVDRENf
Tl9ORVRXT1JLX0NPTk5FQ1RJT046CisJCQlpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9ERUJVRykK
KwkJCQlsb2coTE9HX0RFQlVHLCAiJXM6IG5ldHdvcmsgJXNjb25uZWN0ZWRcbiIsCisJCQkJCQlE
RVZOQU0oc2MpLAorCQkJCQkJVUdFVFcobm90aWZpY2F0aW9uLndWYWx1ZSkKKwkJCQkJCT8gIiIg
OiAiZGlzIik7CisJCQlicmVhazsKKwkJY2FzZSBVQ0RDX05fUkVTUE9OU0VfQVZBSUxBQkxFOgor
CQkJRFBSSU5URk4oMiwgInVtYl9pbnRyOiByZXNwb25zZSBhdmFpbGFibGVcbiIpOworCQkJKytz
Yy0+c2NfbnJlc3A7CisJCQl1bWJfYWRkX3Rhc2soc2MsIHVtYl9nZXRfcmVzcG9uc2VfdGFzaywK
KwkJCQkJJnNjLT5zY19wcm9jX2dldF9yZXNwb25zZV90YXNrWzBdLmhkciwKKwkJCQkJJnNjLT5z
Y19wcm9jX2dldF9yZXNwb25zZV90YXNrWzFdLmhkciwKKwkJCQkJMCk7CisJCQlicmVhazsKKwkJ
Y2FzZSBVQ0RDX05fQ09OTkVDVElPTl9TUEVFRF9DSEFOR0U6CisJCQlEUFJJTlRGTigyLCAidW1i
X2ludHI6IGNvbm5lY3Rpb24gc3BlZWQgY2hhbmdlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVs
dDoKKwkJCURQUklOVEYoInVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uICgweCUwMngpXG4iLAorCQkJ
CQlub3RpZmljYXRpb24uYk5vdGlmaWNhdGlvbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxs
dGhyb3VnaCAqLworCWNhc2UgVVNCX1NUX1NFVFVQOgordHJfc2V0dXA6CisJCXVzYmRfeGZlcl9z
ZXRfZnJhbWVfbGVuKHhmZXIsIDAsIHVzYmRfeGZlcl9tYXhfbGVuKHhmZXIpKTsKKwkJdXNiZF90
cmFuc2Zlcl9zdWJtaXQoeGZlcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChzdGF0dXMg
IT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKKwkJCS8qIHN0YXJ0IGNsZWFyIHN0YWxsICovCisJCQl1
c2JkX3hmZXJfc2V0X3N0YWxsKHhmZXIpOworCQkJZ290byB0cl9zZXR1cDsKKwkJfQorCQlicmVh
azsKKwl9Cit9CisKKy8qCisgKiBEaWFnbm9zdGljIHJvdXRpbmVzCisgKi8KK3N0YXRpYyBjaGFy
ICoKK3VtYl9udG9wKHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisjZGVmaW5lIE5VTUJVRlMJCTQK
KwlzdGF0aWMgY2hhciBhc3RyW05VTUJVRlNdW0lORVRfQUREUlNUUkxFTl07CisJc3RhdGljIHVu
c2lnbmVkIG5idWYgPSAwOworCWNoYXIJKnM7CisKKwlzID0gYXN0cltuYnVmKytdOworCWlmIChu
YnVmID49IE5VTUJVRlMpCisJCW5idWYgPSAwOworCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7
CisJY2FzZSBBRl9JTkVUOgorCWRlZmF1bHQ6CisJCWluZXRfbnRvcChBRl9JTkVULCAmc2F0b3Np
bihzYSktPnNpbl9hZGRyLCBzLCBzaXplb2YgKGFzdHJbMF0pKTsKKwkJYnJlYWs7CisJY2FzZSBB
Rl9JTkVUNjoKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmc2F0b3NpbjYoc2EpLT5zaW42X2FkZHIs
IHMsCisJCSAgICBzaXplb2YgKGFzdHJbMF0pKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzOwor
fQorCisjaWZkZWYgVU1CX0RFQlVHCitzdGF0aWMgY2hhciAqCit1bWJfdXVpZDJzdHIodWludDhf
dCB1dWlkW01CSU1fVVVJRF9MRU5dKQoreworCXN0YXRpYyBjaGFyIHV1aWRzdHJbMiAqIE1CSU1f
VVVJRF9MRU4gKyA1XTsKKworI2RlZmluZSBVVUlEX0JGTVQJIiUwMlgiCisjZGVmaW5lIFVVSURf
U0VQCSItIgorCXNucHJpbnRmKHV1aWRzdHIsIHNpemVvZiAodXVpZHN0ciksCisJICAgIFVVSURf
QkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX1NFUAorCSAgICBVVUlEX0JG
TVQgVVVJRF9CRk1UIFVVSURfU0VQCisJICAgIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9TRVAK
KwkgICAgVVVJRF9CRk1UIFVVSURfQkZNVCBVVUlEX1NFUAorCSAgICBVVUlEX0JGTVQgVVVJRF9C
Rk1UIFVVSURfQkZNVCBVVUlEX0JGTVQgVVVJRF9CRk1UIFVVSURfQkZNVCwKKwkgICAgdXVpZFsw
XSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwKKwkgICAgdXVp
ZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwgdXVpZFsxMF0sIHV1aWRbMTFdLAorCSAg
ICB1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1dWlkWzE1XSk7CisJcmV0dXJuIHV1aWRz
dHI7Cit9CisKK3N0YXRpYyB2b2lkCit1bWJfZHVtcCh2b2lkICpidWYsIGludCBsZW4pCit7CisJ
aW50CSBpID0gMDsKKwl1aW50OF90CSpjID0gYnVmOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1
cm47CisJd2hpbGUgKGkgPCBsZW4pIHsKKwkJaWYgKChpICUgMTYpID09IDApIHsKKwkJCWlmIChp
ID4gMCkKKwkJCQlsb2coTE9HX0RFQlVHLCAiXG4iKTsKKwkJCWxvZyhMT0dfREVCVUcsICIlNGQ6
ICAiLCBpKTsKKwkJfQorCQlsb2coTE9HX0RFQlVHLCAiICUwMngiLCAqYyk7CisJCWMrKzsKKwkJ
aSsrOworCX0KKwlsb2coTE9HX0RFQlVHLCAiXG4iKTsKK30KKyNlbmRpZiAvKiBVTUJfREVCVUcg
Ki8KKworRFJJVkVSX01PRFVMRSh1bWIsIHVodWIsIHVtYl9kcml2ZXIsIE5VTEwsIE5VTEwpOwor
TU9EVUxFX0RFUEVORCh1bWIsIHVzYiwgMSwgMSwgMSk7CmRpZmYgLS1naXQgYS9zeXMvZGV2L3Vz
Yi9uZXQvaWZfdW1icmVnLmggYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMTM0YTMwNzM0NTUKLS0tIC9kZXYvbnVs
bAorKysgYi9zeXMvZGV2L3VzYi9uZXQvaWZfdW1icmVnLmgKQEAgLTAsMCArMSw0NDEgQEAKKy8q
CSRPcGVuQlNEOiBpZl91bWIuaCx2IDEuNCAyMDE3LzA0LzE4IDEzOjI3OjU1IGdlcmhhcmQgRXhw
ICQgKi8KKworLyoKKyAqIE9yaWdpbmFsIGNvcHlyaWdodCAoYykgMjAxNiBnZW51YSBtYkggKE9w
ZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBh
bmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3
aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFs
bCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRI
RSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElT
IFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM
T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9V
VCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg
VEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQURJU1RBIFNBUyAocmUt
d3JpdGUgZm9yIEZyZWVCU0QpCisgKgorICogUmUtd3JpdGUgZm9yIEZyZWVCU0QgYnkgUGllcnJl
IFByb25jaGVyeSA8cGllcnJlQGRlZm9yYS5uZXQ+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJm
YWNlIE1vZGVsCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL2RldmNsYXNz
X2RvY3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworCitzdHJ1Y3QgdW1iX3ZhbGRlc2Ny
IHsKKwlpbnQJCSB2YWw7CisJY2hhciBjb25zdAkqZGVzY3I7Cit9OworCitzdGF0aWMgY29uc3Qg
Y2hhciAqCit1bWJfdmFsMmRlc2NyKGNvbnN0IHN0cnVjdCB1bWJfdmFsZGVzY3IgKnZkcCwgaW50
IHZhbCkKK3sKKwlzdGF0aWMgY2hhciBzdmFsWzMyXTsKKworCXdoaWxlICh2ZHAtPmRlc2NyICE9
IE5VTEwpIHsKKwkJaWYgKHZkcC0+dmFsID09IHZhbCkKKwkJCXJldHVybiB2ZHAtPmRlc2NyOwor
CQl2ZHArKzsKKwl9CisJc25wcmludGYoc3ZhbCwgc2l6ZW9mIChzdmFsKSwgIiMlZCIsIHZhbCk7
CisJcmV0dXJuIHN2YWw7Cit9CisKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9ERVNDUklQVElPTlMg
ewkJCQlcCisJeyBNQklNX1JFR1NUQVRFX1VOS05PV04sCSJ1bmtub3duIiB9LAkJXAorCXsgTUJJ
TV9SRUdTVEFURV9ERVJFR0lTVEVSRUQsCSJub3QgcmVnaXN0ZXJlZCIgfSwJXAorCXsgTUJJTV9S
RUdTVEFURV9TRUFSQ0hJTkcsCSJzZWFyY2hpbmciIH0sCQlcCisJeyBNQklNX1JFR1NUQVRFX0hP
TUUsCQkiaG9tZSBuZXR3b3JrIiB9LAlcCisJeyBNQklNX1JFR1NUQVRFX1JPQU1JTkcsCSJyb2Ft
aW5nIG5ldHdvcmsiIH0sCVwKKwl7IE1CSU1fUkVHU1RBVEVfUEFSVE5FUiwJInBhcnRuZXIgbmV0
d29yayIgfSwJXAorCXsgTUJJTV9SRUdTVEFURV9ERU5JRUQsCQkiYWNjZXNzIGRlbmllZCIgfSwJ
XAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX0RBVEFDTEFTU19ERVNDUklQVElPTlMg
ewkJCQkJXAorCXsgTUJJTV9EQVRBQ0xBU1NfTk9ORSwJCQkJIm5vbmUiIH0sCVwKKwl7IE1CSU1f
REFUQUNMQVNTX0dQUlMsCQkJCSJHUFJTIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU19FREdFLAkJ
CQkiRURHRSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfVU1UUywJCQkJIlVNVFMiIH0sCVwKKwl7
IE1CSU1fREFUQUNMQVNTX0hTRFBBLAkJCQkiSFNEUEEiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNT
X0hTVVBBLAkJCQkiSFNVUEEiIH0sCVwKKwl7IE1CSU1fREFUQUNMQVNTX0hTRFBBfE1CSU1fREFU
QUNMQVNTX0hTVVBBLAkiSFNQQSIgfSwJXAorCXsgTUJJTV9EQVRBQ0xBU1NfTFRFLAkJCQkiTFRF
IiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWFJUVCwJCQkJIkNETUEyMDAwIiB9LAlcCisJeyBN
QklNX0RBVEFDTEFTU18xWEVWRE8sCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFT
U18xWEVWRE9fUkVWX0EsCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVW
RFYsCQkJIkNETUEyMDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18zWFJUVCwJCQkJIkNETUEy
MDAwIiB9LAlcCisJeyBNQklNX0RBVEFDTEFTU18xWEVWRE9fUkVWX0IsCQkJIkNETUEyMDAwIiB9
LAlcCisJeyBNQklNX0RBVEFDTEFTU19VTUIsCQkJCSJDRE1BMjAwMCIgfSwJXAorCXsgTUJJTV9E
QVRBQ0xBU1NfQ1VTVE9NLAkJCSJjdXN0b20iIH0sCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZp
bmUgTUJJTV8xVE8xX0RFU0NSSVBUSU9OKG0pCXsgKG0pLCAjbSB9CisjZGVmaW5lIE1CSU1fTUVT
U0FHRVNfREVTQ1JJUFRJT05TIHsJCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX09Q
RU5fTVNHKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0xPU0VfTVNHKSwJCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ09NTUFORF9NU0cpLAkJXAorCU1CSU1fMVRP
MV9ERVNDUklQVElPTihNQklNX0hPU1RfRVJST1JfTVNHKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9PUEVOX0RPTkUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9D
TE9TRV9ET05FKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ09NTUFORF9ET05F
KSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9GVU5DVElPTl9FUlJPUl9NU0cpLAkJ
XAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0lORElDQVRFX1NUQVRVU19NU0cpLAlcCisJ
eyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKG0pCXsgTUJJ
TV9TVEFUVVNfICMjIG0sICNtIH0KKyNkZWZpbmUgTUJJTV9TVEFUVVNfREVTQ1JJUFRJT05TIHsJ
CQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTVUNDRVNTKSwJCQkJXAorCU1CSU1fU1RB
VFVTX0RFU0NSSVBUSU9OKEJVU1kpLAkJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEZB
SUxVUkUpLAkJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU0lNX05PVF9JTlNFUlRFRCks
CQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEJBRF9TSU0pLAkJCQlcCisJTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04oUElOX1JFUVVJUkVEKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKFBJTl9ESVNBQkxFRCksCQkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT1RfUkVH
SVNURVJFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBST1ZJREVSU19OT1RfRk9V
TkQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihOT19ERVZJQ0VfU1VQUE9SVCksCQkJ
XAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFBST1ZJREVSX05PVF9WSVNJQkxFKSwJCQlcCisJ
TUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oREFUQV9DTEFTU19OT1RfQVZBSUxBQkxFKSwJCVwKKwlN
QklNX1NUQVRVU19ERVNDUklQVElPTihQQUNLRVRfU0VSVklDRV9ERVRBQ0hFRCksCQlcCisJTUJJ
TV9TVEFUVVNfREVTQ1JJUFRJT04oTUFYX0FDVElWQVRFRF9DT05URVhUUyksCQlcCisJTUJJTV9T
VEFUVVNfREVTQ1JJUFRJT04oTk9UX0lOSVRJQUxJWkVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVT
Q1JJUFRJT04oVk9JQ0VfQ0FMTF9JTl9QUk9HUkVTUyksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJ
UFRJT04oQ09OVEVYVF9OT1RfQUNUSVZBVEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJ
T04oU0VSVklDRV9OT1RfQUNUSVZBVEVEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04o
SU5WQUxJRF9BQ0NFU1NfU1RSSU5HKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5W
QUxJRF9VU0VSX05BTUVfUFdEKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUkFESU9f
UE9XRVJfT0ZGKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9QQVJBTUVU
RVJTKSwJCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oUkVBRF9GQUlMVVJFKSwJCQkJXAor
CU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFdSSVRFX0ZBSUxVUkUpLAkJCQlcCisJTUJJTV9TVEFU
VVNfREVTQ1JJUFRJT04oTk9fUEhPTkVCT09LKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBU
SU9OKFBBUkFNRVRFUl9UT09fTE9ORyksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNU
S19CVVNZKSwJCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE9QRVJBVElPTl9OT1RfQUxM
T1dFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKE1FTU9SWV9GQUlMVVJFKSwJCQlc
CisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oSU5WQUxJRF9NRU1PUllfSU5ERVgpLAkJCVwKKwlN
QklNX1NUQVRVU19ERVNDUklQVElPTihNRU1PUllfRlVMTCksCQkJCVwKKwlNQklNX1NUQVRVU19E
RVNDUklQVElPTihGSUxURVJfTk9UX1NVUFBPUlRFRCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKERTU19JTlNUQU5DRV9MSU1JVCksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9O
KElOVkFMSURfREVWSUNFX1NFUlZJQ0VfT1BFUkFUSU9OKSwJXAorCU1CSU1fU1RBVFVTX0RFU0NS
SVBUSU9OKEFVVEhfSU5DT1JSRUNUX0FVVE4pLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElP
TihBVVRIX1NZTkNfRkFJTFVSRSksCQkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKEFVVEhf
QU1GX05PVF9TRVQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihDT05URVhUX05PVF9T
VVBQT1JURUQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTTVNfVU5LTk9XTl9TTVND
X0FERFJFU1MpLAkJXAorCU1CSU1fU1RBVFVTX0RFU0NSSVBUSU9OKFNNU19ORVRXT1JLX1RJTUVP
VVQpLAkJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTTVNfTEFOR19OT1RfU1VQUE9SVEVE
KSwJCVwKKwlNQklNX1NUQVRVU19ERVNDUklQVElPTihTTVNfRU5DT0RJTkdfTk9UX1NVUFBPUlRF
RCksCQlcCisJTUJJTV9TVEFUVVNfREVTQ1JJUFRJT04oU01TX0ZPUk1BVF9OT1RfU1VQUE9SVEVE
KSwJCVwKKwl7IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9FUlJPUl9ERVNDUklQVElPTiht
KQl7IE1CSU1fRVJST1JfICMjIG0sICNtIH0KKyNkZWZpbmUgTUJJTV9FUlJPUl9ERVNDUklQVElP
TlMgewkJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oVElNRU9VVF9GUkFHTUVOVCksCQkJ
XAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oRlJBR01FTlRfT1VUX09GX1NFUVVFTkNFKSwJCVwK
KwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKExFTkdUSF9NSVNNQVRDSCksCQkJXAorCU1CSU1fRVJS
T1JfREVTQ1JJUFRJT04oRFVQTElDQVRFRF9USUQpLAkJCQlcCisJTUJJTV9FUlJPUl9ERVNDUklQ
VElPTihOT1RfT1BFTkVEKSwJCQkJXAorCU1CSU1fRVJST1JfREVTQ1JJUFRJT04oVU5LTk9XTiks
CQkJCVwKKwlNQklNX0VSUk9SX0RFU0NSSVBUSU9OKENBTkNFTCksCQkJCQlcCisJTUJJTV9FUlJP
Ul9ERVNDUklQVElPTihNQVhfVFJBTlNGRVIpLAkJCQlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVm
aW5lIE1CSU1fQ0lEX0RFU0NSSVBUSU9OUyB7CQkJCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElP
TihNQklNX0NJRF9ERVZJQ0VfQ0FQUyksCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklN
X0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRVUyksCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04o
TUJJTV9DSURfUkFESU9fU1RBVEUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJUFRJT04oTUJJTV9D
SURfUElOKSwJCQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9QSU5fTElTVCks
CQkJXAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9IT01FX1BST1ZJREVSKSwJCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BSRUZFUlJFRF9QUk9WSURFUlMpLAkJ
XAorCU1CSU1fMVRPMV9ERVNDUklQVElPTihNQklNX0NJRF9WSVNJQkxFX1BST1ZJREVSUyksCQlc
CisJTUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1JFR0lTVEVSX1NUQVRFKSwJCQlcCisJ
TUJJTV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1BBQ0tFVF9TRVJWSUNFKSwJCQlcCisJTUJJ
TV8xVE8xX0RFU0NSSVBUSU9OKE1CSU1fQ0lEX1NJR05BTF9TVEFURSksCQkJXAorCU1CSU1fMVRP
MV9ERVNDUklQVElPTihNQklNX0NJRF9DT05ORUNUKSwJCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fQ0lEX1BST1ZJU0lPTkVEX0NPTlRFWFRTKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DSURfU0VSVklDRV9BQ1RJVkFUSU9OKSwJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DSURfSVBfQ09ORklHVVJBVElPTiksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBU
SU9OKE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFUyksCQlcCisJTUJJTV8xVE8xX0RFU0NSSVBUSU9O
KE1CSU1fQ0lEX0RFVklDRV9TRVJWSUNFX1NVQlNDUklCRV9MSVNUKSwJXAorCU1CSU1fMVRPMV9E
RVNDUklQVElPTihNQklNX0NJRF9QQUNLRVRfU1RBVElTVElDUyksCQlcCisJTUJJTV8xVE8xX0RF
U0NSSVBUSU9OKE1CSU1fQ0lEX05FVFdPUktfSURMRV9ISU5UKSwJCVwKKwlNQklNXzFUTzFfREVT
Q1JJUFRJT04oTUJJTV9DSURfRU1FUkdFTkNZX01PREUpLAkJCVwKKwlNQklNXzFUTzFfREVTQ1JJ
UFRJT04oTUJJTV9DSURfSVBfUEFDS0VUX0ZJTFRFUlMpLAkJXAorCU1CSU1fMVRPMV9ERVNDUklQ
VElPTihNQklNX0NJRF9NVUxUSUNBUlJJRVJfUFJPVklERVJTKSwJCVwKKwl7IDAsIE5VTEwgfSB9
CisKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9ERVNDUklQVElPTlMgewkJCQkJXAorCXsgTUJJTV9T
SU1TVEFURV9OT1RJTklUSUFMSVpFRCwgIm5vdCBpbml0aWFsaXplZCIgfSwJCVwKKwl7IE1CSU1f
U0lNU1RBVEVfSU5JVElBTElaRUQsICJpbml0aWFsaXplZCIgfSwJCQlcCisJeyBNQklNX1NJTVNU
QVRFX05PVElOU0VSVEVELCAibm90IGluc2VydGVkIiB9LAkJCVwKKwl7IE1CSU1fU0lNU1RBVEVf
QkFEU0lNLCAiYmFkIHR5cGUiIH0sCQkJCVwKKwl7IE1CSU1fU0lNU1RBVEVfRkFJTFVSRSwgImZh
aWxlZCIgfSwJCQkJXAorCXsgTUJJTV9TSU1TVEFURV9OT1RBQ1RJVkFURUQsICJub3QgYWN0aXZh
dGVkIiB9LAkJXAorCXsgTUJJTV9TSU1TVEFURV9MT0NLRUQsICJsb2NrZWQiIH0sCQkJCVwKKwl7
IDAsIE5VTEwgfSB9CisKKyNkZWZpbmUgTUJJTV9QSU5UWVBFX0RFU0NSSVBUSU9OUyB7CQkJCQlc
CisJeyBNQklNX1BJTl9UWVBFX05PTkUsICJub25lIiB9LAkJCQkJXAorCXsgTUJJTV9QSU5fVFlQ
RV9DVVNUT00sICJjdXN0b20iIH0sCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUElOMSwgIlBJTjEi
IH0sCQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX1BJTjIsICJQSU4yIiB9LAkJCQkJXAorCXsgTUJJ
TV9QSU5fVFlQRV9ERVZfU0lNX1BJTiwgImRldmljZSBQSU4iIH0sCQkJXAorCXsgTUJJTV9QSU5f
VFlQRV9ERVZfRklSU1RfU0lNX1BJTiwgImRldmljZSAxc3QgUElOIiB9LAkJXAorCXsgTUJJTV9Q
SU5fVFlQRV9ORVRXT1JLX1BJTiwgIm5ldHdvcmsgUElOIiB9LAkJCVwKKwl7IE1CSU1fUElOX1RZ
UEVfTkVUV09SS19TVUJTRVRfUElOLCAibmV0d29yayBzdWJzZXQgUElOIiB9LAlcCisJeyBNQklN
X1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUElOLCAicHJvdmlkZXIgUElOIiB9LAkJXAorCXsg
TUJJTV9QSU5fVFlQRV9DT1JQT1JBVEVfUElOLCAiY29ycG9yYXRlIFBJTiIgfSwJCVwKKwl7IE1C
SU1fUElOX1RZUEVfU1VCU0lEWV9MT0NLLCAic3Vic2lkeSBsb2NrIiB9LAkJCVwKKwl7IE1CSU1f
UElOX1RZUEVfUFVLMSwgIlBVSyIgfSwJCQkJCVwKKwl7IE1CSU1fUElOX1RZUEVfUFVLMiwgIlBV
SzIiIH0sCQkJCQlcCisJeyBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUFVLLCAiZGV2aWNl
IDFzdCBQVUsiIH0sCQlcCisJeyBNQklNX1BJTl9UWVBFX05FVFdPUktfUFVLLCAibmV0d29yayBQ
VUsiIH0sCQkJXAorCXsgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1NVQlNFVF9QVUssICJuZXR3b3Jr
IHN1YnNldCBQVUsiIH0sCVwKKwl7IE1CSU1fUElOX1RZUEVfU0VSVklDRV9QUk9WSURFUl9QVUss
ICJwcm92aWRlciBQVUsiIH0sCQlcCisJeyBNQklNX1BJTl9UWVBFX0NPUlBPUkFURV9QVUssICJj
b3Jwb3JhdGUgUFVLIiB9LAkJXAorCXsgMCwgTlVMTCB9IH0KKworI2RlZmluZSBNQklNX1BLVFNS
Vl9TVEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfVU5L
Tk9XTiwgInVua25vd24iIH0sCQkJXAorCXsgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0FUVEFDSElO
RywgImF0dGFjaGluZyIgfSwJCVwKKwl7IE1CSU1fUEtUU0VSVklDRV9TVEFURV9BVFRBQ0hFRCwg
ImF0dGFjaGVkIiB9LAkJCVwKKwl7IE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hJTkcsICJk
ZXRhY2hpbmciIH0sCQlcCisJeyBNQklNX1BLVFNFUlZJQ0VfU1RBVEVfREVUQUNIRUQsICJkZXRh
Y2hlZCIgfSwJCQlcCisJeyAwLCBOVUxMIH0gfQorCisjZGVmaW5lIE1CSU1fQUNUSVZBVElPTl9T
VEFURV9ERVNDUklQVElPTlMgewkJCQlcCisJeyBNQklNX0FDVElWQVRJT05fU1RBVEVfVU5LTk9X
TiwgInVua25vd24iIH0sCQkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElWQVRFRCwg
ImFjdGl2YXRlZCIgfSwJCVwKKwl7IE1CSU1fQUNUSVZBVElPTl9TVEFURV9BQ1RJVkFUSU5HLCAi
YWN0aXZhdGluZyIgfSwJCVwKKwl7IE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRFRCwg
ImRlYWN0aXZhdGVkIiB9LAkJXAorCXsgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0RFQUNUSVZBVElO
RywgImRlYWN0aXZhdGluZyIgfSwJCVwKKwl7IDAsIE5VTEwgfSB9CisKKy8qCisgKiBEcml2ZXIg
aW50ZXJuYWwgc3RhdGUKKyAqLworZW51bSB1bWJfc3RhdGUgeworCVVNQl9TX0RPV04gPSAwLAkJ
LyogaW50ZXJmYWNlIGRvd24gKi8KKwlVTUJfU19PUEVOLAkJLyogTUJJTSBkZXZpY2UgaGFzIGJl
ZW4gb3BlbmVkICovCisJVU1CX1NfQ0lELAkJLyogUU1JIGNsaWVudCBpZCBhbGxvY2F0ZWQgKi8K
KwlVTUJfU19SQURJTywJCS8qIHJhZGlvIGlzIG9uICovCisJVU1CX1NfU0lNUkVBRFksCQkvKiBT
SU0gaXMgcmVhZHkgKi8KKwlVTUJfU19BVFRBQ0hFRCwJCS8qIHBhY2tldCBzZXJ2aWNlIGlzIGF0
dGFjaGVkICovCisJVU1CX1NfQ09OTkVDVEVELAkvKiBjb25uZWN0ZWQgdG8gcHJvdmlkZXIgKi8K
KwlVTUJfU19VUCwJCS8qIGhhdmUgSVAgY29uZmlndXJhdGlvbiAqLworfTsKKworI2RlZmluZSBV
TUJfSU5URVJOQUxfU1RBVEVfREVTQ1JJUFRJT05TIHsJXAorCXsgVU1CX1NfRE9XTiwgImRvd24i
IH0sCQkJXAorCXsgVU1CX1NfT1BFTiwgIm9wZW4iIH0sCQkJXAorCXsgVU1CX1NfQ0lELCAiQ0lE
IGFsbG9jYXRlZCIgfSwJCVwKKwl7IFVNQl9TX1JBRElPLCAicmFkaW8gb24iIH0sCQlcCisJeyBV
TUJfU19TSU1SRUFEWSwgIlNJTSBpcyByZWFkeSIgfSwJXAorCXsgVU1CX1NfQVRUQUNIRUQsICJh
dHRhY2hlZCIgfSwJCVwKKwl7IFVNQl9TX0NPTk5FQ1RFRCwgImNvbm5lY3RlZCIgfSwJXAorCXsg
VU1CX1NfVVAsICJ1cCIgfSwJCQlcCisJeyAwLCBOVUxMIH0gfQorCisvKgorICogVU1CIHBhcmFt
ZXRlcnMgKFNJT0NbR1NdVU1CUEFSQU0gaW9jdGxzKQorICovCitzdHJ1Y3QgdW1iX3BhcmFtZXRl
ciB7CisJaW50CQkJb3A7CisJaW50CQkJaXNfcHVrOworCXVpbnQxNl90CQlwaW5bTUJJTV9QSU5f
TUFYTEVOXTsKKwlpbnQJCQlwaW5sZW47CisKKwl1aW50MTZfdAkJbmV3cGluW01CSU1fUElOX01B
WExFTl07CisJaW50CQkJbmV3cGlubGVuOworCisjZGVmaW5lIFVNQl9BUE5fTUFYTEVOCQkxMDAK
Kwl1aW50MTZfdAkJYXBuW1VNQl9BUE5fTUFYTEVOXTsKKwlpbnQJCQlhcG5sZW47CisKKyNkZWZp
bmUgVU1CX1VTRVJOQU1FX01BWExFTgkyMDUKKwl1aW50MTZfdAkJdXNlcm5hbWVbVU1CX1VTRVJO
QU1FX01BWExFTl07CisJaW50CQkJdXNlcm5hbWVsZW47CisKKyNkZWZpbmUgVU1CX1BBU1NXT1JE
X01BWExFTgkyMDUKKwl1aW50MTZfdAkJcGFzc3dvcmRbVU1CX1BBU1NXT1JEX01BWExFTl07CisJ
aW50CQkJcGFzc3dvcmRsZW47CisKKwlpbnQJCQlyb2FtaW5nOworCXVpbnQzMl90CQlwcmVmZXJy
ZWRjbGFzc2VzOworfTsKKworLyoKKyAqIFVNQiBkZXZpY2Ugc3RhdHVzIGluZm8gKFNJT0NHVU1C
SU5GTyBpb2N0bCkKKyAqLworc3RydWN0IHVtYl9pbmZvIHsKKwllbnVtIHVtYl9zdGF0ZQkJc3Rh
dGU7CisJaW50CQkJZW5hYmxlX3JvYW1pbmc7CisjZGVmaW5lIFVNQl9QSU5fUkVRVUlSRUQJMAor
I2RlZmluZSBVTUJfUElOX1VOTE9DS0VECTEKKyNkZWZpbmUgVU1CX1BVS19SRVFVSVJFRAkyCisJ
aW50CQkJcGluX3N0YXRlOworCWludAkJCXBpbl9hdHRlbXB0c19sZWZ0OworCWludAkJCWFjdGl2
YXRpb247CisJaW50CQkJc2ltX3N0YXRlOworCWludAkJCXJlZ3N0YXRlOworCWludAkJCXJlZ21v
ZGU7CisJaW50CQkJbndlcnJvcjsKKwlpbnQJCQlwYWNrZXRzdGF0ZTsKKwl1aW50MzJfdAkJc3Vw
cG9ydGVkY2xhc3NlczsgLyogd2hhdCB0aGUgaHcgc3VwcG9ydHMgKi8KKwl1aW50MzJfdAkJcHJl
ZmVycmVkY2xhc3NlczsgLyogd2hhdCB0aGUgdXNlciBwcmVmZXJzICovCisJdWludDMyX3QJCWhp
Z2hlc3RjbGFzczsJLyogd2hhdCB0aGUgbmV0d29yayBvZmZlcnMgKi8KKwl1aW50MzJfdAkJY2Vs
bGNsYXNzOworI2RlZmluZSBVTUJfUFJPVklERVJOQU1FX01BWExFTgkJMjAKKwl1aW50MTZfdAkJ
cHJvdmlkZXJbVU1CX1BST1ZJREVSTkFNRV9NQVhMRU5dOworI2RlZmluZSBVTUJfUEhPTkVOUl9N
QVhMRU4JCTIyCisJdWludDE2X3QJCXBuW1VNQl9QSE9ORU5SX01BWExFTl07CisjZGVmaW5lIFVN
Ql9TVUJTQ1JJQkVSSURfTUFYTEVOCQkxNQorCXVpbnQxNl90CQlzaWRbVU1CX1NVQlNDUklCRVJJ
RF9NQVhMRU5dOworI2RlZmluZSBVTUJfSUNDSURfTUFYTEVOCQkyMAorCXVpbnQxNl90CQlpY2Np
ZFtVTUJfSUNDSURfTUFYTEVOXTsKKyNkZWZpbmUgVU1CX1JPQU1JTkdURVhUX01BWExFTgkJNjMK
Kwl1aW50MTZfdAkJcm9hbWluZ3R4dFtVTUJfUk9BTUlOR1RFWFRfTUFYTEVOXTsKKworI2RlZmlu
ZSBVTUJfREVWSURfTUFYTEVOCQkxOAorCXVpbnQxNl90CQlkZXZpZFtVTUJfREVWSURfTUFYTEVO
XTsKKyNkZWZpbmUgVU1CX0ZXSU5GT19NQVhMRU4JCTMwCisJdWludDE2X3QJCWZ3aW5mb1tVTUJf
RldJTkZPX01BWExFTl07CisjZGVmaW5lIFVNQl9IV0lORk9fTUFYTEVOCQkzMAorCXVpbnQxNl90
CQlod2luZm9bVU1CX0hXSU5GT19NQVhMRU5dOworCisJdWludDE2X3QJCWFwbltVTUJfQVBOX01B
WExFTl07CisJaW50CQkJYXBubGVuOworCisJdWludDE2X3QJCXVzZXJuYW1lW1VNQl9VU0VSTkFN
RV9NQVhMRU5dOworCWludAkJCXVzZXJuYW1lbGVuOworCisJdWludDE2X3QJCXBhc3N3b3JkW1VN
Ql9QQVNTV09SRF9NQVhMRU5dOworCWludAkJCXBhc3N3b3JkbGVuOworCisjZGVmaW5lIFVNQl9W
QUxVRV9VTktOT1dOCS05OTkKKwlpbnQJCQlyc3NpOworI2RlZmluZSBVTUJfQkVSX0VYQ0VMTEVO
VAkwCisjZGVmaW5lIFVNQl9CRVJfVkVSWUdPT0QJMQorI2RlZmluZSBVTUJfQkVSX0dPT0QJCTIK
KyNkZWZpbmUgVU1CX0JFUl9PSwkJMworI2RlZmluZSBVTUJfQkVSX01FRElVTQkJNAorI2RlZmlu
ZSBVTUJfQkVSX0JBRAkJNQorI2RlZmluZSBVTUJfQkVSX1ZFUllCQUQJCTYKKyNkZWZpbmUgVU1C
X0JFUl9FWFRSRU1FTFlCQUQJNworCWludAkJCWJlcjsKKworCWludAkJCWh3X3JhZGlvX29uOwor
CWludAkJCXN3X3JhZGlvX29uOworCisJdWludDY0X3QJCXVwbGlua19zcGVlZDsKKwl1aW50NjRf
dAkJZG93bmxpbmtfc3BlZWQ7CisKKyNkZWZpbmUgVU1CX01BWF9ETlNTUlYJCQkyCisJc3RydWN0
IGluX2FkZHIJCWlwdjRkbnNbVU1CX01BWF9ETlNTUlZdOworfTsKKworI2lmICFkZWZpbmVkKGlm
cl9tdHUpCisjZGVmaW5lIGlmcl9tdHUJaWZyX2lmcnUuaWZydV9tZXRyaWMKKyNlbmRpZgorCisj
aWZkZWYgX0tFUk5FTAorLyoKKyAqIFVNQiBkZXZpY2UKKyAqLworZW51bSB7CisJVU1CX0lOVFJf
UlgsCisJVU1CX0JVTEtfUlgsCisJVU1CX0JVTEtfVFgsCisJVU1CX05fVFJBTlNGRVIsCit9Owor
CitzdHJ1Y3QgdW1iX3Rhc2sgeworCXN0cnVjdCB1c2JfcHJvY19tc2cJIGhkcjsKKwlzdHJ1Y3Qg
dW1iX3NvZnRjCSpzYzsKK307CisKK3N0cnVjdCB1bWJfc29mdGMgeworCWRldmljZV90CQkgc2Nf
ZGV2OworCXN0cnVjdCBpZm5ldAkJKnNjX2lmOworI2RlZmluZSBHRVRfSUZQKHNjKQkoKHNjKS0+
c2NfaWYpCisJc3RydWN0IGlmbWVkaWEJCSBzY19pbTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqc2Nf
dWRldjsKKwlzdHJ1Y3QgdXNiX3hmZXIJCSpzY194ZmVyW1VNQl9OX1RSQU5TRkVSXTsKKwl1aW50
OF90CQkJIHNjX2lmYWNlc19pbmRleFsyXTsKKworCWludAkJCSBzY192ZXJfbWFqOworCWludAkJ
CSBzY192ZXJfbWluOworCWludAkJCSBzY19jdHJsX2xlbjsKKwlpbnQJCQkgc2NfbWF4cGt0bGVu
OworCWludAkJCSBzY19tYXhzZXNzaW9uczsKKworI2RlZmluZSBVTUJGTEdfRkNDX0FVVEhfUkVR
VUlSRUQJMHgwMDAxCisjZGVmaW5lIFVNQkZMR19OT19JTkVUNgkJCTB4MDAwMgorCXVpbnQzMl90
CQkgc2NfZmxhZ3M7CisJaW50CQkJIHNjX2NpZDsKKworCXN0cnVjdCB1c2JfcHJvY2Vzcwkgc2Nf
dGFza3F1ZXVlOworCXN0cnVjdCB1bWJfdGFzawkJIHNjX3Byb2NfYXR0YWNoX3Rhc2tbMl07CisJ
c3RydWN0IHVtYl90YXNrCQkgc2NfcHJvY19zdGFydF90YXNrWzJdOworCXN0cnVjdCB1bWJfdGFz
awkJIHNjX3Byb2Nfc3RhdGVfdGFza1syXTsKKwlzdHJ1Y3QgdW1iX3Rhc2sJCSBzY19wcm9jX2dl
dF9yZXNwb25zZV90YXNrWzJdOworCisJaW50CQkJIHNjX25yZXNwOworCXN0cnVjdCBtdHgJCSBz
Y19tdXRleDsKKwlzdHJ1Y3QgdXNiX2NhbGxvdXQJIHNjX3N0YXRlY2hnX3RpbWVyOworCWNoYXIJ
CQkgc2NfZHlpbmc7CisJY2hhcgkJCSBzY19hdHRhY2hlZDsKKworCXVpbnQ4X3QJCQkgc2NfY3Ry
bF9pZmFjZW5vOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSpzY19kYXRhX2lmYWNlOworCisJdm9p
ZAkJCSpzY19yZXNwX2J1ZjsKKwl2b2lkCQkJKnNjX2N0cmxfbXNnOworCisJdm9pZAkJCSpzY19y
eF9idWY7CisJdWludDMyX3QJCSBzY19yeF9idWZzejsKKwl1bnNpZ25lZAkJIHNjX3J4X25lcnI7
CisJc3RydWN0IGlmcXVldWUJCSBzY19yeF9xdWV1ZTsKKworCXZvaWQJCQkqc2NfdHhfYnVmOwor
CXN0cnVjdCBtYnVmCQkqc2NfdHhfbTsKKwl1aW50MzJfdAkJIHNjX3R4X2J1ZnN6OworCXVpbnQz
Ml90CQkgc2NfdHhfc2VxOworCisJdWludDMyX3QJCSBzY190aWQ7CisKKyNkZWZpbmUgc2Nfc3Rh
dGUJCXNjX2luZm8uc3RhdGUKKyNkZWZpbmUgc2Nfcm9hbWluZwkJc2NfaW5mby5lbmFibGVfcm9h
bWluZworCXN0cnVjdCB1bWJfaW5mbwkJIHNjX2luZm87Cit9OworI2VuZGlmIC8qIF9LRVJORUwg
Ki8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvdXNiL25ldC9tYmltLmggYi9zeXMvZGV2L3VzYi9uZXQv
bWJpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWQ3ZWNmZjEx
NGI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Rldi91c2IvbmV0L21iaW0uaApAQCAtMCwwICsx
LDcyNCBAQAorLyoJJE9wZW5CU0Q6IG1iaW0uaCx2IDEuNCAyMDE3LzA0LzE4IDEzOjI3OjU1IGdl
cmhhcmQgRXhwICQgKi8KKworLyoKKyAqIE9yaWdpbmFsIGNvcHlyaWdodCAoYykgMjAxNiBnZW51
YSBtYkggKE9wZW5CU0QgdmVyc2lvbikKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ug
d2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBw
ZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FS
RCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisg
KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBB
Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB
UklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S
TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQURJU1RB
IFNBUyAocmUtd3JpdGUgZm9yIEZyZWVCU0QpCisgKgorICogUmUtd3JpdGUgZm9yIEZyZWVCU0Qg
YnkgUGllcnJlIFByb25jaGVyeSA8cGllcnJlQGRlZm9yYS5uZXQ+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICog
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIE1vYmlsZSBCcm9hZGJh
bmQgSW50ZXJmYWNlIE1vZGVsCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2Nz
L2RldmNsYXNzX2RvY3MvTUJJTS1Db21wbGlhbmNlLTEuMC5wZGYKKyAqLworI2lmbmRlZiBfTUJJ
TV9IXworI2RlZmluZSBfTUJJTV9IXworCisjZGVmaW5lIFVERVNDU1VCX01CSU0JCQkyNworI2Rl
ZmluZSBNQklNX0lOVEVSRkFDRV9BTFRTRVRUSU5HCTEKKworI2RlZmluZSBNQklNX1JFU0VUX0ZV
TkNUSU9OCQkweDA1CisKKy8qCisgKiBSZWdpc3RyYXRpb24gc3RhdGUgKE1CSU1fUkVHSVNURVJf
U1RBVEUpCisgKi8KKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9VTktOT1dOCQkJMAorI2RlZmluZSBN
QklNX1JFR1NUQVRFX0RFUkVHSVNURVJFRAkJMQorI2RlZmluZSBNQklNX1JFR1NUQVRFX1NFQVJD
SElORwkJCTIKKyNkZWZpbmUgTUJJTV9SRUdTVEFURV9IT01FCQkJMworI2RlZmluZSBNQklNX1JF
R1NUQVRFX1JPQU1JTkcJCQk0CisjZGVmaW5lIE1CSU1fUkVHU1RBVEVfUEFSVE5FUgkJCTUKKyNk
ZWZpbmUgTUJJTV9SRUdTVEFURV9ERU5JRUQJCQk2CisKKy8qCisgKiBEYXRhIGNsYXNzZXMgbWFz
ayAoTUJJTV9EQVRBX0NMQVNTKQorICovCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX05PTkUJCQkw
eDAwMDAwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0dQUlMJCQkweDAwMDAwMDAxCisjZGVm
aW5lIE1CSU1fREFUQUNMQVNTX0VER0UJCQkweDAwMDAwMDAyCisjZGVmaW5lIE1CSU1fREFUQUNM
QVNTX1VNVFMJCQkweDAwMDAwMDA0CisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX0hTRFBBCQkJMHgw
MDAwMDAwOAorI2RlZmluZSBNQklNX0RBVEFDTEFTU19IU1VQQQkJCTB4MDAwMDAwMTAKKyNkZWZp
bmUgTUJJTV9EQVRBQ0xBU1NfTFRFCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNQklNX0RBVEFDTEFT
U18xWFJUVAkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRPCQkJMHgw
MDAyMDAwMAorI2RlZmluZSBNQklNX0RBVEFDTEFTU18xWEVWRE9fUkVWX0EJCTB4MDAwNDAwMDAK
KyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhFVkRWCQkJMHgwMDA4MDAwMAorI2RlZmluZSBNQklN
X0RBVEFDTEFTU18zWFJUVAkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfMVhF
VkRPX1JFVl9CCQkweDAwMjAwMDAwCisjZGVmaW5lIE1CSU1fREFUQUNMQVNTX1VNQgkJCTB4MDA0
MDAwMDAKKyNkZWZpbmUgTUJJTV9EQVRBQ0xBU1NfQ1VTVE9NCQkJMHg4MDAwMDAwMAorCisvKgor
ICogQ2VsbCBjbGFzc2VzIG1hc2sgKE1CSU1fQ0VMTFVMQVJfQ0xBU1MpCisgKi8KKyNkZWZpbmUg
TUJJTV9DRUxMQ0xBU1NfR1NNCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQklNX0NFTExDTEFTU19D
RE1BCQkJMHgwMDAwMDAwMgorCisvKgorICogVVVJRHMKKyAqLworI2RlZmluZSBNQklNX1VVSURf
TEVOCQkxNgorCisjZGVmaW5lIE1CSU1fVVVJRF9CQVNJQ19DT05ORUNUIHsJCQkJXAorCQkweGEy
LCAweDg5LCAweGNjLCAweDMzLCAweGJjLCAweGJiLCAweDhiLCAweDRmLAlcCisJCTB4YjYsIDB4
YjAsIDB4MTMsIDB4M2UsIDB4YzIsIDB4YWEsIDB4ZTYsIDB4ZGYJXAorCX0KKworI2RlZmluZSBN
QklNX1VVSURfQ09OVEVYVF9JTlRFUk5FVCB7CQkJCVwKKwkJMHg3ZSwgMHg1ZSwgMHgyYSwgMHg3
ZSwgMHg0ZSwgMHg2ZiwgMHg3MiwgMHg3MiwJXAorCQkweDczLCAweDZiLCAweDY1LCAweDZlLCAw
eDdlLCAweDVlLCAweDJhLCAweDdlCVwKKwl9CisKKyNkZWZpbmUgTUJJTV9VVUlEX0NPTlRFWFRf
VlBOIHsJCQkJXAorCQkweDliLCAweDlmLCAweDdiLCAweGJlLCAweDg5LCAweDUyLCAweDQ0LCAw
eGI3LAlcCisJCTB4ODMsIDB4YWMsIDB4Y2EsIDB4NDEsIDB4MzEsIDB4OGQsIDB4ZjcsIDB4YTAJ
XAorCX0KKworI2RlZmluZSBNQklNX1VVSURfUU1JX01CSU0gewkJCQlcCisJCTB4ZDEsIDB4YTMs
IDB4MGIsIDB4YzIsIDB4ZjksIDB4N2EsIDB4NmUsIDB4NDMsCVwKKwkJMHhiZiwgMHg2NSwgMHhj
NywgMHhlMiwgMHg0ZiwgMHhiMCwgMHhmMCwgMHhkMwlcCisJfQorCisjZGVmaW5lIE1CSU1fQ1RS
TE1TR19NSU5MRU4JCTY0CisjZGVmaW5lIE1CSU1fQ1RSTE1TR19NQVhMRU4JCSg0ICogMTIwNCkK
KworI2RlZmluZSBNQklNX01BWFNFR1NaX01JTlZBTAkJKDIgKiAxMDI0KQorCisvKgorICogQ29u
dHJvbCBtZXNzYWdlcyAoaG9zdCB0byBmdW5jdGlvbikKKyAqLworI2RlZmluZSBNQklNX09QRU5f
TVNHCQkJMVUKKyNkZWZpbmUgTUJJTV9DTE9TRV9NU0cJCQkyVQorI2RlZmluZSBNQklNX0NPTU1B
TkRfTVNHCQkzVQorI2RlZmluZSBNQklNX0hPU1RfRVJST1JfTVNHCQk0VQorCisvKgorICogQ29u
dHJvbCBtZXNzYWdlcyAoZnVuY3Rpb24gdG8gaG9zdCkKKyAqLworI2RlZmluZSBNQklNX09QRU5f
RE9ORQkJCTB4ODAwMDAwMDFVCisjZGVmaW5lIE1CSU1fQ0xPU0VfRE9ORQkJCTB4ODAwMDAwMDJV
CisjZGVmaW5lIE1CSU1fQ09NTUFORF9ET05FCQkweDgwMDAwMDAzVQorI2RlZmluZSBNQklNX0ZV
TkNUSU9OX0VSUk9SX01TRwkJMHg4MDAwMDAwNFUKKyNkZWZpbmUgTUJJTV9JTkRJQ0FURV9TVEFU
VVNfTVNHCTB4ODAwMDAwMDdVCisKKy8qCisgKiBHZW5lcmljIHN0YXR1cyBjb2RlcworICovCisj
ZGVmaW5lIE1CSU1fU1RBVFVTX1NVQ0NFU1MJCQkwCisjZGVmaW5lIE1CSU1fU1RBVFVTX0JVU1kJ
CQkxCisjZGVmaW5lIE1CSU1fU1RBVFVTX0ZBSUxVUkUJCQkyCisjZGVmaW5lIE1CSU1fU1RBVFVT
X1NJTV9OT1RfSU5TRVJURUQJCTMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfQkFEX1NJTQkJCTQKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfUElOX1JFUVVJUkVECQk1CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BJ
Tl9ESVNBQkxFRAkJNgorI2RlZmluZSBNQklNX1NUQVRVU19OT1RfUkVHSVNURVJFRAkJNworI2Rl
ZmluZSBNQklNX1NUQVRVU19QUk9WSURFUlNfTk9UX0ZPVU5ECQk4CisjZGVmaW5lIE1CSU1fU1RB
VFVTX05PX0RFVklDRV9TVVBQT1JUCQk5CisjZGVmaW5lIE1CSU1fU1RBVFVTX1BST1ZJREVSX05P
VF9WSVNJQkxFCTEwCisjZGVmaW5lIE1CSU1fU1RBVFVTX0RBVEFfQ0xBU1NfTk9UX0FWQUlMQUJM
RQkxMQorI2RlZmluZSBNQklNX1NUQVRVU19QQUNLRVRfU0VSVklDRV9ERVRBQ0hFRAkxMgorI2Rl
ZmluZSBNQklNX1NUQVRVU19NQVhfQUNUSVZBVEVEX0NPTlRFWFRTCTEzCisjZGVmaW5lIE1CSU1f
U1RBVFVTX05PVF9JTklUSUFMSVpFRAkJMTQKKyNkZWZpbmUgTUJJTV9TVEFUVVNfVk9JQ0VfQ0FM
TF9JTl9QUk9HUkVTUwkxNQorI2RlZmluZSBNQklNX1NUQVRVU19DT05URVhUX05PVF9BQ1RJVkFU
RUQJMTYKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU0VSVklDRV9OT1RfQUNUSVZBVEVECTE3CisjZGVm
aW5lIE1CSU1fU1RBVFVTX0lOVkFMSURfQUNDRVNTX1NUUklORwkxOAorI2RlZmluZSBNQklNX1NU
QVRVU19JTlZBTElEX1VTRVJfTkFNRV9QV0QJMTkKKyNkZWZpbmUgTUJJTV9TVEFUVVNfUkFESU9f
UE9XRVJfT0ZGCQkyMAorI2RlZmluZSBNQklNX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUlMJCTIx
CisjZGVmaW5lIE1CSU1fU1RBVFVTX1JFQURfRkFJTFVSRQkJMjIKKyNkZWZpbmUgTUJJTV9TVEFU
VVNfV1JJVEVfRkFJTFVSRQkJMjMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfTk9fUEhPTkVCT09LCQky
NQorI2RlZmluZSBNQklNX1NUQVRVU19QQVJBTUVURVJfVE9PX0xPTkcJCTI2CisjZGVmaW5lIE1C
SU1fU1RBVFVTX1NUS19CVVNZCQkJMjcKKyNkZWZpbmUgTUJJTV9TVEFUVVNfT1BFUkFUSU9OX05P
VF9BTExPV0VECTI4CisjZGVmaW5lIE1CSU1fU1RBVFVTX01FTU9SWV9GQUlMVVJFCQkyOQorI2Rl
ZmluZSBNQklNX1NUQVRVU19JTlZBTElEX01FTU9SWV9JTkRFWAkzMAorI2RlZmluZSBNQklNX1NU
QVRVU19NRU1PUllfRlVMTAkJCTMxCisjZGVmaW5lIE1CSU1fU1RBVFVTX0ZJTFRFUl9OT1RfU1VQ
UE9SVEVECTMyCisjZGVmaW5lIE1CSU1fU1RBVFVTX0RTU19JTlNUQU5DRV9MSU1JVAkJMzMKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfSU5WQUxJRF9ERVZJQ0VfU0VSVklDRV9PUEVSQVRJT04JMzQKKyNk
ZWZpbmUgTUJJTV9TVEFUVVNfQVVUSF9JTkNPUlJFQ1RfQVVUTgkJMzUKKyNkZWZpbmUgTUJJTV9T
VEFUVVNfQVVUSF9TWU5DX0ZBSUxVUkUJCTM2CisjZGVmaW5lIE1CSU1fU1RBVFVTX0FVVEhfQU1G
X05PVF9TRVQJCTM3CisjZGVmaW5lIE1CSU1fU1RBVFVTX0NPTlRFWFRfTk9UX1NVUFBPUlRFRAkz
OAorI2RlZmluZSBNQklNX1NUQVRVU19TTVNfVU5LTk9XTl9TTVNDX0FERFJFU1MJMTAwCisjZGVm
aW5lIE1CSU1fU1RBVFVTX1NNU19ORVRXT1JLX1RJTUVPVVQJCTEwMQorI2RlZmluZSBNQklNX1NU
QVRVU19TTVNfTEFOR19OT1RfU1VQUE9SVEVECTEwMgorI2RlZmluZSBNQklNX1NUQVRVU19TTVNf
RU5DT0RJTkdfTk9UX1NVUFBPUlRFRAkxMDMKKyNkZWZpbmUgTUJJTV9TVEFUVVNfU01TX0ZPUk1B
VF9OT1RfU1VQUE9SVEVECTEwNAorCisvKgorICogTWVzc2FnZSBmb3JtYXRzCisgKi8KK3N0cnVj
dCBtYmltX21zZ2hkciB7CisJLyogTXNnIGhlYWRlciAqLworCXVpbnQzMl90CXR5cGU7CQkvKiBt
ZXNzYWdlIHR5cGUgKi8KKwl1aW50MzJfdAlsZW47CQkvKiBtZXNzYWdlIGxlbmd0aCAqLworCXVp
bnQzMl90CXRpZDsJCS8qIHRyYW5zYWN0aW9uIGlkICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9mcmFnaGRyIHsKKwl1aW50MzJfdAluZnJhZzsJCS8qIHRvdGFsICMgb2YgZnJhZ21lbnRz
ICovCisJdWludDMyX3QJY3VycmZyYWc7CS8qIGN1cnJlbnQgZnJhZ21lbnQgKi8KK30gX19wYWNr
ZWQ7CisKK3N0cnVjdCBtYmltX2ZyYWdtZW50ZWRfbXNnX2hkciB7CisJc3RydWN0IG1iaW1fbXNn
aGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9mcmFnaGRyCWZyYWc7Cit9IF9fcGFja2VkOworCitzdHJ1
Y3QgbWJpbV9oMmZfb3Blbm1zZyB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwl1aW50MzJf
dAkJbWF4bGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1faDJmX2Nsb3NlbXNnIHsKKwlz
dHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1faDJmX2Nt
ZCB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsKKwlzdHJ1Y3QgbWJpbV9mcmFnaGRyCWZyYWc7
CisJdWludDhfdAkJCWRldmlkW01CSU1fVVVJRF9MRU5dOworCXVpbnQzMl90CQljaWQ7CQkvKiBj
b21tYW5kIGlkICovCisjZGVmaW5lIE1CSU1fQ01ET1BfUVJZCQkwCisjZGVmaW5lIE1CSU1fQ01E
T1BfU0VUCQkxCisJdWludDMyX3QJCW9wOworCXVpbnQzMl90CQlpbmZvbGVuOworCXVpbnQ4X3QJ
CQlpbmZvW107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9mMmhfaW5kaWNhdGVfc3RhdHVz
IHsKKwlzdHJ1Y3QgbWJpbV9tc2doZHIJaGRyOworCXN0cnVjdCBtYmltX2ZyYWdoZHIJZnJhZzsK
Kwl1aW50OF90CQkJZGV2aWRbTUJJTV9VVUlEX0xFTl07CisJdWludDMyX3QJCWNpZDsJCS8qIGNv
bW1hbmQgaWQgKi8KKwl1aW50MzJfdAkJaW5mb2xlbjsKKwl1aW50OF90CQkJaW5mb1tdOworfSBf
X3BhY2tlZDsKKworc3RydWN0IG1iaW1fZjJoX2hvc3RlcnIgeworCXN0cnVjdCBtYmltX21zZ2hk
cgloZHI7CisKKyNkZWZpbmUgTUJJTV9FUlJPUl9USU1FT1VUX0ZSQUdNRU5UCQkxCisjZGVmaW5l
IE1CSU1fRVJST1JfRlJBR01FTlRfT1VUX09GX1NFUVVFTkNFCTIKKyNkZWZpbmUgTUJJTV9FUlJP
Ul9MRU5HVEhfTUlTTUFUQ0gJCTMKKyNkZWZpbmUgTUJJTV9FUlJPUl9EVVBMSUNBVEVEX1RJRAkJ
NAorI2RlZmluZSBNQklNX0VSUk9SX05PVF9PUEVORUQJCQk1CisjZGVmaW5lIE1CSU1fRVJST1Jf
VU5LTk9XTgkJCTYKKyNkZWZpbmUgTUJJTV9FUlJPUl9DQU5DRUwJCQk3CisjZGVmaW5lIE1CSU1f
RVJST1JfTUFYX1RSQU5TRkVSCQkJOAorCXVpbnQzMl90CQllcnI7Cit9IF9fcGFja2VkOworCitz
dHJ1Y3QgbWJpbV9mMmhfb3BlbmNsb3NlZG9uZSB7CisJc3RydWN0IG1iaW1fbXNnaGRyCWhkcjsK
KwlpbnQzMl90CQkJc3RhdHVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fZjJoX2NtZGRv
bmUgeworCXN0cnVjdCBtYmltX21zZ2hkcgloZHI7CisJc3RydWN0IG1iaW1fZnJhZ2hkcglmcmFn
OworCXVpbnQ4X3QJCQlkZXZpZFtNQklNX1VVSURfTEVOXTsKKwl1aW50MzJfdAkJY2lkOwkJLyog
Y29tbWFuZCBpZCAqLworCWludDMyX3QJCQlzdGF0dXM7CisJdWludDMyX3QJCWluZm9sZW47CisJ
dWludDhfdAkJCWluZm9bXTsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBNZXNzYWdlcyBhbmQgY29t
bWFuZHMgZm9yIE1CSU1fVVVJRF9CQVNJQ19DT05ORUNUCisgKi8KKyNkZWZpbmUgTUJJTV9DSURf
REVWSUNFX0NBUFMJCQkJMQorI2RlZmluZSBNQklNX0NJRF9TVUJTQ1JJQkVSX1JFQURZX1NUQVRV
UwkJMgorI2RlZmluZSBNQklNX0NJRF9SQURJT19TVEFURQkJCQkzCisjZGVmaW5lIE1CSU1fQ0lE
X1BJTgkJCQkJNAorI2RlZmluZSBNQklNX0NJRF9QSU5fTElTVAkJCQk1CisjZGVmaW5lIE1CSU1f
Q0lEX0hPTUVfUFJPVklERVIJCQkJNgorI2RlZmluZSBNQklNX0NJRF9QUkVGRVJSRURfUFJPVklE
RVJTCQkJNworI2RlZmluZSBNQklNX0NJRF9WSVNJQkxFX1BST1ZJREVSUwkJCTgKKyNkZWZpbmUg
TUJJTV9DSURfUkVHSVNURVJfU1RBVEUJCQkJOQorI2RlZmluZSBNQklNX0NJRF9QQUNLRVRfU0VS
VklDRQkJCQkxMAorI2RlZmluZSBNQklNX0NJRF9TSUdOQUxfU1RBVEUJCQkJMTEKKyNkZWZpbmUg
TUJJTV9DSURfQ09OTkVDVAkJCQkxMgorI2RlZmluZSBNQklNX0NJRF9QUk9WSVNJT05FRF9DT05U
RVhUUwkJCTEzCisjZGVmaW5lIE1CSU1fQ0lEX1NFUlZJQ0VfQUNUSVZBVElPTgkJCTE0CisjZGVm
aW5lIE1CSU1fQ0lEX0lQX0NPTkZJR1VSQVRJT04JCQkxNQorI2RlZmluZSBNQklNX0NJRF9ERVZJ
Q0VfU0VSVklDRVMJCQkxNgorI2RlZmluZSBNQklNX0NJRF9ERVZJQ0VfU0VSVklDRV9TVUJTQ1JJ
QkVfTElTVAkJMTkKKyNkZWZpbmUgTUJJTV9DSURfUEFDS0VUX1NUQVRJU1RJQ1MJCQkyMAorI2Rl
ZmluZSBNQklNX0NJRF9ORVRXT1JLX0lETEVfSElOVAkJCTIxCisjZGVmaW5lIE1CSU1fQ0lEX0VN
RVJHRU5DWV9NT0RFCQkJCTIyCisjZGVmaW5lIE1CSU1fQ0lEX0lQX1BBQ0tFVF9GSUxURVJTCQkJ
MjMKKyNkZWZpbmUgTUJJTV9DSURfTVVMVElDQVJSSUVSX1BST1ZJREVSUwkJCTI0CisKK3N0cnVj
dCBtYmltX2NpZF9zdWJzY3JpYmVyX3JlYWR5X2luZm8geworI2RlZmluZSBNQklNX1NJTVNUQVRF
X05PVElOSVRJQUxJWkVECQkwCisjZGVmaW5lIE1CSU1fU0lNU1RBVEVfSU5JVElBTElaRUQJCTEK
KyNkZWZpbmUgTUJJTV9TSU1TVEFURV9OT1RJTlNFUlRFRAkJMgorI2RlZmluZSBNQklNX1NJTVNU
QVRFX0JBRFNJTQkJCTMKKyNkZWZpbmUgTUJJTV9TSU1TVEFURV9GQUlMVVJFCQkJNAorI2RlZmlu
ZSBNQklNX1NJTVNUQVRFX05PVEFDVElWQVRFRAkJNQorI2RlZmluZSBNQklNX1NJTVNUQVRFX0xP
Q0tFRAkJCTYKKwl1aW50MzJfdAlyZWFkeTsKKworCXVpbnQzMl90CXNpZF9vZmZzOworCXVpbnQz
Ml90CXNpZF9zaXplOworCisJdWludDMyX3QJaWNjX29mZnM7CisJdWludDMyX3QJaWNjX3NpemU7
CisKKyNkZWZpbmUgTUJJTV9TSU1VTklRRUlEX05PTkUJCQkwCisjZGVmaW5lIE1CSU1fU0lNVU5J
UUVJRF9QUk9URUNUCQkJMQorCXVpbnQzMl90CWluZm87CisKKwl1aW50MzJfdAlub19wbjsKKwlz
dHJ1Y3QgeworCQl1aW50MzJfdAlvZmZzOworCQl1aW50MzJfdAlzaXplOworCX0KKwkJCXBuW107
Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfcmFkaW9fc3RhdGUgeworI2RlZmluZSBN
QklNX1JBRElPX1NUQVRFX09GRgkJCTAKKyNkZWZpbmUgTUJJTV9SQURJT19TVEFURV9PTgkJCTEK
Kwl1aW50MzJfdAlzdGF0ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9yYWRpb19z
dGF0ZV9pbmZvIHsKKwl1aW50MzJfdAlod19zdGF0ZTsKKwl1aW50MzJfdAlzd19zdGF0ZTsKK30g
X19wYWNrZWQ7CisKK3N0cnVjdCBtYmltX2NpZF9waW4geworI2RlZmluZSBNQklNX1BJTl9UWVBF
X05PTkUJCQkwCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfQ1VTVE9NCQkJMQorI2RlZmluZSBNQklN
X1BJTl9UWVBFX1BJTjEJCQkyCisjZGVmaW5lIE1CSU1fUElOX1RZUEVfUElOMgkJCTMKKyNkZWZp
bmUgTUJJTV9QSU5fVFlQRV9ERVZfU0lNX1BJTgkJNAorI2RlZmluZSBNQklNX1BJTl9UWVBFX0RF
Vl9GSVJTVF9TSU1fUElOCQk1CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfTkVUV09SS19QSU4JCTYK
KyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9ORVRXT1JLX1NVQlNFVF9QSU4JNworI2RlZmluZSBNQklN
X1BJTl9UWVBFX1NFUlZJQ0VfUFJPVklERVJfUElOCTgKKyNkZWZpbmUgTUJJTV9QSU5fVFlQRV9D
T1JQT1JBVEVfUElOCQk5CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfU1VCU0lEWV9MT0NLCQkxMAor
I2RlZmluZSBNQklNX1BJTl9UWVBFX1BVSzEJCQkxMQorI2RlZmluZSBNQklNX1BJTl9UWVBFX1BV
SzIJCQkxMgorI2RlZmluZSBNQklNX1BJTl9UWVBFX0RFVl9GSVJTVF9TSU1fUFVLCQkxMworI2Rl
ZmluZSBNQklNX1BJTl9UWVBFX05FVFdPUktfUFVLCQkxNAorI2RlZmluZSBNQklNX1BJTl9UWVBF
X05FVFdPUktfU1VCU0VUX1BVSwkxNQorI2RlZmluZSBNQklNX1BJTl9UWVBFX1NFUlZJQ0VfUFJP
VklERVJfUFVLCTE2CisjZGVmaW5lIE1CSU1fUElOX1RZUEVfQ09SUE9SQVRFX1BVSwkJMTcKKwl1
aW50MzJfdAl0eXBlOworCisjZGVmaW5lIE1CSU1fUElOX09QX0VOVEVSCQkJMAorI2RlZmluZSBN
QklNX1BJTl9PUF9FTkFCTEUJCQkxCisjZGVmaW5lIE1CSU1fUElOX09QX0RJU0FCTEUJCQkyCisj
ZGVmaW5lIE1CSU1fUElOX09QX0NIQU5HRQkJCTMKKwl1aW50MzJfdAlvcDsKKwl1aW50MzJfdAlw
aW5fb2ZmczsKKwl1aW50MzJfdAlwaW5fc2l6ZTsKKwl1aW50MzJfdAluZXdwaW5fb2ZmczsKKwl1
aW50MzJfdAluZXdwaW5fc2l6ZTsKKyNkZWZpbmUgTUJJTV9QSU5fTUFYTEVOCTMyCisJdWludDhf
dAkJZGF0YVsyICogTUJJTV9QSU5fTUFYTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmlt
X2NpZF9waW5faW5mbyB7CisJdWludDMyX3QJdHlwZTsKKworI2RlZmluZSBNQklNX1BJTl9TVEFU
RV9VTkxPQ0tFRAkJCTAKKyNkZWZpbmUgTUJJTV9QSU5fU1RBVEVfTE9DS0VECQkJMQorCXVpbnQz
Ml90CXN0YXRlOworCXVpbnQzMl90CXJlbWFpbmluZ19hdHRlbXB0czsKK30gX19wYWNrZWQ7CisK
K3N0cnVjdCBtYmltX2NpZF9waW5fbGlzdF9pbmZvIHsKKwlzdHJ1Y3QgbWJpbV9waW5fZGVzYyB7
CisKKyNkZWZpbmUgTUJJTV9QSU5NT0RFX05PVFNVUFBPUlRFRAkJMAorI2RlZmluZSBNQklNX1BJ
Tk1PREVfRU5BQkxFRAkJCTEKKyNkZWZpbmUgTUJJTV9QSU5NT0RFX0RJU0FCTEVECQkJMgorCQl1
aW50MzJfdAltb2RlOworCisjZGVmaW5lIE1CSU1fUElORk9STUFUX1VOS05PV04JCQkwCisjZGVm
aW5lIE1CSU1fUElORk9STUFUX05VTUVSSUMJCQkxCisjZGVmaW5lIE1CSU1fUElORk9STUFUX0FM
UEhBTlVNRVJJQwkJMgorCQl1aW50MzJfdAlmb3JtYXQ7CisKKwkJdWludDMyX3QJbWlubGVuOwor
CQl1aW50MzJfdAltYXhsZW47CisJfQorCQlwaW4xLAorCQlwaW4yLAorCQlkZXZfc2ltX3BpbiwK
KwkJZmlyc3RfZGV2X3NpbV9waW4sCisJCW5ldF9waW4sCisJCW5ldF9zdWJfcGluLAorCQlzdnBf
cGluLAorCQljb3JwX3BpbiwKKwkJc3Vic2lkeV9sb2NrLAorCQljdXN0b207Cit9IF9fcGFja2Vk
OworCitzdHJ1Y3QgbWJpbV9jaWRfZGV2aWNlX2NhcHMgeworI2RlZmluZSBNQklNX0RFVlRZUEVf
VU5LTk9XTgkJCTAKKyNkZWZpbmUgTUJJTV9ERVZUWVBFX0VNQkVEREVECQkJMQorI2RlZmluZSBN
QklNX0RFVlRZUEVfUkVNT1ZBQkxFCQkJMgorI2RlZmluZSBNQklNX0RFVlRZUEVfUkVNT1RFCQkJ
MworCXVpbnQzMl90CWRldnR5cGU7CisKKwl1aW50MzJfdAljZWxsY2xhc3M7CS8qIHZhbHVlczog
TUJJTV9DRUxMVUxBUl9DTEFTUyAqLworCXVpbnQzMl90CXZvaWNlY2xhc3M7CisJdWludDMyX3QJ
c2ltY2xhc3M7CisJdWludDMyX3QJZGF0YWNsYXNzOwkvKiB2YWx1ZXM6IE1CSU1fREFUQV9DTEFT
UyAqLworCXVpbnQzMl90CXNtc2NhcHM7CisJdWludDMyX3QJY250cmxjYXBzOworCXVpbnQzMl90
CW1heF9zZXNzaW9uczsKKworCXVpbnQzMl90CWN1c3RkYXRhY2xhc3Nfb2ZmczsKKwl1aW50MzJf
dAljdXN0ZGF0YWNsYXNzX3NpemU7CisKKwl1aW50MzJfdAlkZXZpZF9vZmZzOworCXVpbnQzMl90
CWRldmlkX3NpemU7CisKKwl1aW50MzJfdAlmd2luZm9fb2ZmczsKKwl1aW50MzJfdAlmd2luZm9f
c2l6ZTsKKworCXVpbnQzMl90CWh3aW5mb19vZmZzOworCXVpbnQzMl90CWh3aW5mb19zaXplOwor
CisJdWludDMyX3QJZGF0YVtdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1iaW1fY2lkX3JlZ2lz
dHJhdGlvbl9zdGF0ZSB7CisJdWludDMyX3QJcHJvdmlkX29mZnM7CisJdWludDMyX3QJcHJvdmlk
X3NpemU7CisKKyNkZWZpbmUgTUJJTV9SRUdBQ1RJT05fQVVUT01BVElDCQkwCisjZGVmaW5lIE1C
SU1fUkVHQUNUSU9OX01BTlVBTAkJCTEKKwl1aW50MzJfdAlyZWdhY3Rpb247CisJdWludDMyX3QJ
ZGF0YV9jbGFzczsKKworCXVpbnQzMl90CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBt
YmltX2NpZF9yZWdpc3RyYXRpb25fc3RhdGVfaW5mbyB7CisJdWludDMyX3QJbndlcnJvcjsKKwor
CXVpbnQzMl90CXJlZ3N0YXRlOwkvKiB2YWx1ZXM6IE1CSU1fUkVHSVNURVJfU1RBVEUgKi8KKwor
I2RlZmluZSBNQklNX1JFR01PREVfVU5LTk9XTgkJCTAKKyNkZWZpbmUgTUJJTV9SRUdNT0RFX0FV
VE9NQVRJQwkJCTEKKyNkZWZpbmUgTUJJTV9SRUdNT0RFX01BTlVBTAkJCTIKKwl1aW50MzJfdAly
ZWdtb2RlOworCisJdWludDMyX3QJYXZhaWxjbGFzc2VzOwkvKiB2YWx1ZXM6IE1CSU1fREFUQV9D
TEFTUyAqLworCXVpbnQzMl90CWN1cmNlbGxjbGFzczsJLyogdmFsdWVzOiBNQklNX0NFTExVTEFS
X0NMQVNTICovCisKKwl1aW50MzJfdAlwcm92aWRfb2ZmczsKKwl1aW50MzJfdAlwcm92aWRfc2l6
ZTsKKworCXVpbnQzMl90CXByb3ZuYW1lX29mZnM7CisJdWludDMyX3QJcHJvdm5hbWVfc2l6ZTsK
KworCXVpbnQzMl90CXJvYW1pbmd0eHRfb2ZmczsKKwl1aW50MzJfdAlyb2FtaW5ndHh0X3NpemU7
CisKKyNkZWZpbmUgTUJJTV9SRUdGTEFHU19OT05FCQkJMAorI2RlZmluZSBNQklNX1JFR0ZMQUdT
X01BTlVBTF9OT1RfQVZBSUxBQkxFCTEKKyNkZWZpbmUgTUJJTV9SRUdGTEFHU19QQUNLRVRTRVJW
SUNFX0FVVE9BVFRBQ0gJMgorCXVpbnQzMl90CXJlZ2ZsYWc7CisKKwl1aW50MzJfdAlkYXRhW107
Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfcGFja2V0X3NlcnZpY2UgeworI2RlZmlu
ZSBNQklNX1BLVFNFUlZJQ0VfQUNUSU9OX0FUVEFDSAkJMAorI2RlZmluZSBNQklNX1BLVFNFUlZJ
Q0VfQUNUSU9OX0RFVEFDSAkJMQorCXVpbnQzMl90CWFjdGlvbjsKK30gX19wYWNrZWQ7CisKK3N0
cnVjdCBtYmltX2NpZF9wYWNrZXRfc2VydmljZV9pbmZvIHsKKwl1aW50MzJfdAlud2Vycm9yOwor
CisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9TVEFURV9VTktOT1dOCQkwCisjZGVmaW5lIE1CSU1f
UEtUU0VSVklDRV9TVEFURV9BVFRBQ0hJTkcJCTEKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NU
QVRFX0FUVEFDSEVECQkyCisjZGVmaW5lIE1CSU1fUEtUU0VSVklDRV9TVEFURV9ERVRBQ0hJTkcJ
CTMKKyNkZWZpbmUgTUJJTV9QS1RTRVJWSUNFX1NUQVRFX0RFVEFDSEVECQk0CisJdWludDMyX3QJ
c3RhdGU7CisKKwl1aW50MzJfdAloaWdoZXN0X2RhdGFjbGFzczsKKwl1aW50NjRfdAl1cGxpbmtf
c3BlZWQ7CisJdWludDY0X3QJZG93bmxpbmtfc3BlZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
bWJpbV9jaWRfc2lnbmFsX3N0YXRlIHsKKwl1aW50MzJfdAlyc3NpOworCXVpbnQzMl90CWVycl9y
YXRlOworCXVpbnQzMl90CXNzX2ludHZsOworCXVpbnQzMl90CXJzc2lfdGhyOworCXVpbnQzMl90
CWVycl90aHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfY29ubmVjdCB7CisJdWlu
dDMyX3QJc2Vzc2lvbmlkOworCisjZGVmaW5lIE1CSU1fQ09OTkVDVF9ERUFDVElWQVRFCQkwCisj
ZGVmaW5lIE1CSU1fQ09OTkVDVF9BQ1RJVkFURQkJMQorCXVpbnQzMl90CWNvbW1hbmQ7CisKKyNk
ZWZpbmUgTUJJTV9BQ0NFU1NfTUFYTEVOCQkyMDAKKwl1aW50MzJfdAlhY2Nlc3Nfb2ZmczsKKwl1
aW50MzJfdAlhY2Nlc3Nfc2l6ZTsKKworI2RlZmluZSBNQklNX1VTRVJfTUFYTEVOCQk1MTAKKwl1
aW50MzJfdAl1c2VyX29mZnM7CisJdWludDMyX3QJdXNlcl9zaXplOworCisjZGVmaW5lIE1CSU1f
UEFTU1dEX01BWExFTgkJNTEwCisJdWludDMyX3QJcGFzc3dkX29mZnM7CisJdWludDMyX3QJcGFz
c3dkX3NpemU7CisKKyNkZWZpbmUgTUJJTV9DT01QUkVTU0lPTl9OT05FCQkwCisjZGVmaW5lIE1C
SU1fQ09NUFJFU1NJT05fRU5BQkxFCQkxCisJdWludDMyX3QJY29tcHJlc3Npb247CisKKyNkZWZp
bmUgTUJJTV9BVVRIUFJPVF9OT05FCQkwCisjZGVmaW5lIE1CSU1fQVVUSFBST1RfUEFQCQkxCisj
ZGVmaW5lIE1CSU1fQVVUSFBST1RfQ0hBUAkJMgorI2RlZmluZSBNQklNX0FVVEhQUk9UX01TQ0hB
UAkJMworCXVpbnQzMl90CWF1dGhwcm90OworCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVf
REVGQVVMVAkwCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBWNAkxCisjZGVmaW5lIE1C
SU1fQ09OVEVYVF9JUFRZUEVfSVBWNgkyCisjZGVmaW5lIE1CSU1fQ09OVEVYVF9JUFRZUEVfSVBW
NFY2CTMKKyNkZWZpbmUgTUJJTV9DT05URVhUX0lQVFlQRV9JUFY0QU5EVjYJNAorCXVpbnQzMl90
CWlwdHlwZTsKKworCXVpbnQ4X3QJCWNvbnRleHRbTUJJTV9VVUlEX0xFTl07CisKKwl1aW50OF90
CQlkYXRhW01CSU1fQUNDRVNTX01BWExFTiArIE1CSU1fVVNFUl9NQVhMRU4gKworCQkJICAgICBN
QklNX1BBU1NXRF9NQVhMRU5dOworCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfY29u
bmVjdF9pbmZvIHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7CisKKyNkZWZpbmUgTUJJTV9BQ1RJVkFU
SU9OX1NUQVRFX1VOS05PV04JCTAKKyNkZWZpbmUgTUJJTV9BQ1RJVkFUSU9OX1NUQVRFX0FDVElW
QVRFRAkJMQorI2RlZmluZSBNQklNX0FDVElWQVRJT05fU1RBVEVfQUNUSVZBVElORwkyCisjZGVm
aW5lIE1CSU1fQUNUSVZBVElPTl9TVEFURV9ERUFDVElWQVRFRAkzCisjZGVmaW5lIE1CSU1fQUNU
SVZBVElPTl9TVEFURV9ERUFDVElWQVRJTkcJNAorCXVpbnQzMl90CWFjdGl2YXRpb247CisKKwl1
aW50MzJfdAl2b2ljZTsKKwl1aW50MzJfdAlpcHR5cGU7CisJdWludDhfdAkJY29udGV4dFtNQklN
X1VVSURfTEVOXTsKKwl1aW50MzJfdAlud2Vycm9yOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1i
aW1fY2lkX2lwdjRfZWxlbWVudCB7CisJdWludDMyX3QJcHJlZml4bGVuOworCXVpbnQzMl90CWFk
ZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWJpbV9jaWRfaXB2Nl9lbGVtZW50IHsKKwl1aW50
MzJfdAlwcmVmaXhsZW47CisJdWludDhfdAkJYWRkclsxNl07Cit9IF9fcGFja2VkOworCitzdHJ1
Y3QgbWJpbV9jaWRfaXBfY29uZmlndXJhdGlvbl9pbmZvIHsKKwl1aW50MzJfdAlzZXNzaW9uaWQ7
CisKKyNkZWZpbmUgTUJJTV9JUENPTkZfSEFTX0FERFJJTkZPCTB4MDAwMQorI2RlZmluZSBNQklN
X0lQQ09ORl9IQVNfR1dJTkZPCQkweDAwMDIKKyNkZWZpbmUgTUJJTV9JUENPTkZfSEFTX0ROU0lO
Rk8JCTB4MDAwNAorI2RlZmluZSBNQklNX0lQQ09ORl9IQVNfTVRVSU5GTwkJMHgwMDA4CisJdWlu
dDMyX3QJaXB2NF9hdmFpbGFibGU7CisJdWludDMyX3QJaXB2Nl9hdmFpbGFibGU7CisKKwl1aW50
MzJfdAlpcHY0X25hZGRyOworCXVpbnQzMl90CWlwdjRfYWRkcm9mZnM7CisJdWludDMyX3QJaXB2
Nl9uYWRkcjsKKwl1aW50MzJfdAlpcHY2X2FkZHJvZmZzOworCisJdWludDMyX3QJaXB2NF9nd29m
ZnM7CisJdWludDMyX3QJaXB2Nl9nd29mZnM7CisKKwl1aW50MzJfdAlpcHY0X25kbnNzcnY7CisJ
dWludDMyX3QJaXB2NF9kbnNzcnZvZmZzOworCXVpbnQzMl90CWlwdjZfbmRuc3NydjsKKwl1aW50
MzJfdAlpcHY2X2Ruc3Nydm9mZnM7CisKKwl1aW50MzJfdAlpcHY0X210dTsKKwl1aW50MzJfdAlp
cHY2X210dTsKKworCXVpbnQzMl90CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYmlt
X2NpZF9wYWNrZXRfc3RhdGlzdGljc19pbmZvIHsKKwl1aW50MzJfdAlpbl9kaXNjYXJkczsKKwl1
aW50MzJfdAlpbl9lcnJvcnM7CisJdWludDY0X3QJaW5fb2N0ZXRzOworCXVpbnQ2NF90CWluX3Bh
Y2tldHM7CisJdWludDY0X3QJb3V0X29jdGV0czsKKwl1aW50NjRfdAlvdXRfcGFja2V0czsKKwl1
aW50MzJfdAlvdXRfZXJyb3JzOworCXVpbnQzMl90CW91dF9kaXNjYXJkczsKK30gX19wYWNrZWQ7
CisKKworI2lmZGVmIF9LRVJORUwKKworc3RydWN0IG1iaW1fZGVzY3JpcHRvciB7CisJdUJ5dGUJ
Ykxlbmd0aDsKKwl1Qnl0ZQliRGVzY3JpcHRvclR5cGU7CisJdUJ5dGUJYkRlc2NyaXB0b3JTdWJ0
eXBlOworI2RlZmluZSBNQklNX1ZFUl9NQUpPUih2KQkoKCh2KSA+PiA4KSAmIDB4MGYpCisjZGVm
aW5lIE1CSU1fVkVSX01JTk9SKHYpCSgodikgJiAweDBmKQorCXVXb3JkCWJjZE1CSU1WZXJzaW9u
OworCXVXb3JkCXdNYXhDb250cm9sTWVzc2FnZTsKKwl1Qnl0ZQliTnVtYmVyRmlsdGVyczsKKwl1
Qnl0ZQliTWF4RmlsdGVyU2l6ZTsKKwl1V29yZAl3TWF4U2VnbWVudFNpemU7CisJdUJ5dGUJYm1O
ZXR3b3JrQ2FwYWJpbGl0aWVzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIE5DTSBQYXJhbWV0ZXJz
CisgKi8KKyNkZWZpbmUgTkNNX0dFVF9OVEJfUEFSQU1FVEVSUwkweDgwCisKK3N0cnVjdCBuY21f
bnRiX3BhcmFtZXRlcnMgeworCXVXb3JkCXdMZW5ndGg7CisJdVdvcmQJYm1OdGJGb3JtYXRzU3Vw
cG9ydGVkOworI2RlZmluZSBOQ01fRk9STUFUX05UQjE2CTB4MDAwMQorI2RlZmluZSBOQ01fRk9S
TUFUX05UQjMyCTB4MDAwMgorCXVEV29yZAlkd050YkluTWF4U2l6ZTsKKwl1V29yZAl3TmRwSW5E
aXZpc29yOworCXVXb3JkCXdOZHBJblBheWxvYWRSZW1haW5kZXI7CisJdVdvcmQJd05kcEluQWxp
Z25tZW50OworCXVXb3JkCXdSZXNlcnZlZDE7CisJdURXb3JkCWR3TnRiT3V0TWF4U2l6ZTsKKwl1
V29yZAl3TmRwT3V0RGl2aXNvcjsKKwl1V29yZAl3TmRwT3V0UGF5bG9hZFJlbWFpbmRlcjsKKwl1
V29yZAl3TmRwT3V0QWxpZ25tZW50OworCXVXb3JkCXdOdGJPdXRNYXhEYXRhZ3JhbXM7Cit9IF9f
cGFja2VkOworCisvKgorICogTkNNIEVuY29kaW5nCisgKi8KKyNkZWZpbmUgTUJJTV9IRFIxNl9M
RU4JXAorCShzaXplb2Yoc3RydWN0IG5jbV9oZWFkZXIxNikgKyBzaXplb2Yoc3RydWN0IG5jbV9w
b2ludGVyMTYpKQorI2RlZmluZSBNQklNX0hEUjMyX0xFTglcCisJKHNpemVvZihzdHJ1Y3QgbmNt
X2hlYWRlcjMyKSArIHNpemVvZihzdHJ1Y3QgbmNtX3BvaW50ZXIzMikpCisKK3N0cnVjdCBuY21f
aGVhZGVyMTYgeworI2RlZmluZSBOQ01fSERSMTZfU0lHCQkweDQ4NGQ0MzRlCisJdURXb3JkCWR3
U2lnbmF0dXJlOworCXVXb3JkCXdIZWFkZXJMZW5ndGg7CisJdVdvcmQJd1NlcXVlbmNlOworCXVX
b3JkCXdCbG9ja0xlbmd0aDsKKwl1V29yZAl3TmRwSW5kZXg7Cit9IF9fcGFja2VkOworCitzdHJ1
Y3QgbmNtX2hlYWRlcjMyIHsKKyNkZWZpbmUgTkNNX0hEUjMyX1NJRwkJMHg2ODZkNjM2ZQorCXVE
V29yZAlkd1NpZ25hdHVyZTsKKwl1V29yZAl3SGVhZGVyTGVuZ3RoOworCXVXb3JkCXdTZXF1ZW5j
ZTsKKwl1RFdvcmQJZHdCbG9ja0xlbmd0aDsKKwl1RFdvcmQJZHdOZHBJbmRleDsKK30gX19wYWNr
ZWQ7CisKKworI2RlZmluZSBNQklNX05DTV9OVEhfU0lEU0hJRlQJMjQKKyNkZWZpbmUgTUJJTV9O
Q01fTlRIX0dFVFNJRChzKQkoKChzKSA+IE1CSU1fTkNNX05USF9TSURTSElGVCkgJiAweGZmKQor
CitzdHJ1Y3QgbmNtX3BvaW50ZXIxNl9kZ3JhbSB7CisJdVdvcmQJd0RhdGFncmFtSW5kZXg7CisJ
dVdvcmQJd0RhdGFncmFtTGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jbV9wb2ludGVyMTYg
eworI2RlZmluZSBNQklNX05DTV9OVEgxNl9JUFMJIDB4MDA1MzUwNDkKKyNkZWZpbmUgTUJJTV9O
Q01fTlRIMTZfSVNJU0cocykgKCgocykgJiAweDAwZmZmZmZmKSA9PSBNQklNX05DTV9OVEgxNl9J
UFMpCisjZGVmaW5lIE1CSU1fTkNNX05USDE2X1NJRyhzKQlcCisJCSgoKChzKSAmIDB4ZmYpIDw8
IE1CSU1fTkNNX05USF9TSURTSElGVCkgfCBNQklNX05DTV9OVEgxNl9JUFMpCisJdURXb3JkCWR3
U2lnbmF0dXJlOworCXVXb3JkCXdMZW5ndGg7CisJdVdvcmQJd05leHROZHBJbmRleDsKKworCS8q
IE1pbmltdW0gaXMgdHdvIGRhdGFncmFtcywgYnV0IGNhbiBiZSBtb3JlICovCisJc3RydWN0IG5j
bV9wb2ludGVyMTZfZGdyYW0gZGdyYW1bMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNtX3Bv
aW50ZXIzMl9kZ3JhbSB7CisJdURXb3JkCWR3RGF0YWdyYW1JbmRleDsKKwl1RFdvcmQJZHdEYXRh
Z3JhbUxlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY21fcG9pbnRlcjMyIHsKKyNkZWZpbmUg
TUJJTV9OQ01fTlRIMzJfSVBTCTB4MDA3MzcwNjkKKyNkZWZpbmUgTUJJTV9OQ01fTlRIMzJfSVNJ
U0cocykJXAorCQkoKChzKSAmIDB4MDBmZmZmZmYpID09IE1CSU1fTkNNX05USDMyX0lQUykKKyNk
ZWZpbmUgTUJJTV9OQ01fTlRIMzJfU0lHKHMpCQlcCisJCSgoKChzKSAmIDB4ZmYpIDw8IE1CSU1f
TkNNX05USF9TSURTSElGVCkgfCBNQklNX05DTV9OVEgzMl9JUFMpCisJdURXb3JkCWR3U2lnbmF0
dXJlOworCXVXb3JkCXdMZW5ndGg7CisJdVdvcmQJd1Jlc2VydmVkNjsKKwl1RFdvcmQJZHdOZXh0
TmRwSW5kZXg7CisJdURXb3JkCWR3UmVzZXJ2ZWQxMjsKKworCS8qIE1pbmltdW0gaXMgdHdvIGRh
dGFncmFtcywgYnV0IGNhbiBiZSBtb3JlICovCisJc3RydWN0IG5jbV9wb2ludGVyMzJfZGdyYW0g
ZGdyYW1bMl07Cit9IF9fcGFja2VkOworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYg
LyogX01CSU1fSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9tb2R1bGVzL3VzYi9NYWtlZmlsZSBiL3N5
cy9tb2R1bGVzL3VzYi9NYWtlZmlsZQppbmRleCAyZDE2NmE5NWRjMDMuLmFjNDgzNDU4ZWEyYSAx
MDA2NDQKLS0tIGEvc3lzL21vZHVsZXMvdXNiL01ha2VmaWxlCisrKyBiL3N5cy9tb2R1bGVzL3Vz
Yi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQCBTVUJESVIgKz0gJHtfcnVtfSAke19ydW59ICR7
X3J1bmZ3fSAke191YXRofSB1cGd0IHVzaWUgdXJhbCAke196eWR9ICR7X3VydHd9CiBTVUJESVIg
Kz0gYXRwIGNmdW1hc3MgdWhpZCB1aGlkX3NuZXMgdWtiZCB1bXMgdWRicCB1ZXAgd210IHdzcCB1
Z29sZCB1bGVkIFwKIAkgIHVzYmhpZAogU1VCRElSICs9IHVjb20gdTNnIHVhcmsgdWJzYSB1YnNl
ciB1Y2hjb20gdWN5Y29tIHVmb21hIHVmdGRpIHVnZW5zYSB1aXBhcSB1bHB0IFwKLQkgIHVtY3Qg
dW1jcyB1bW9kZW0gdW1vc2NvbSB1cGxjb20gdXNsY29tIHV2aXNvciB1dnNjb20KKwkgIHVtYiB1
bWN0IHVtY3MgdW1vZGVtIHVtb3Njb20gdXBsY29tIHVzbGNvbSB1dmlzb3IgdXZzY29tCiBTVUJE
SVIgKz0gaTJjdGlueXVzYgogU1VCRElSICs9IGNwMjExMgogU1VCRElSICs9IHVkbApkaWZmIC0t
Z2l0IGEvc3lzL21vZHVsZXMvdXNiL3VtYi9NYWtlZmlsZSBiL3N5cy9tb2R1bGVzL3VzYi91bWIv
TWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMTc1OTJk
OTRkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvbW9kdWxlcy91c2IvdW1iL01ha2VmaWxlCkBA
IC0wLDAgKzEsMzUgQEAKKyMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEhhbnMgUGV0dGVyIFNl
bGFza3kuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1B
R0UuCisjCisKK1M9ICAgICAke1NSQ1RPUH0vc3lzCisKKy5QQVRIOiAkUy9kZXYvdXNiL25ldAor
CitLTU9EPQl1bWIKK1NSQ1M9CW9wdF9idXMuaCBvcHRfdXNiLmggZGV2aWNlX2lmLmggYnVzX2lm
LmggdXNiX2lmLmggdXNiZGV2cy5oIFwKKwlpZl91bWIuYworCisuaW5jbHVkZSA8YnNkLmttb2Qu
bWs+CmRpZmYgLS1naXQgYS9zeXMvbmV0L2lmX21lZGlhLmMgYi9zeXMvbmV0L2lmX21lZGlhLmMK
aW5kZXggMGNjODhhMDkyOWU5Li44OTg4ZDhhMmJjZjEgMTAwNjQ0Ci0tLSBhL3N5cy9uZXQvaWZf
bWVkaWEuYworKysgYi9zeXMvbmV0L2lmX21lZGlhLmMKQEAgLTM5OCw2ICszOTgsMTIgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBpZm1lZGlhX2Rlc2NyaXB0aW9uIGlmbV9zdWJ0eXBlX2F0bV9kZXNj
cmlwdGlvbnNbXSA9CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlmbWVkaWFfZGVzY3JpcHRpb24gaWZt
X3N1YnR5cGVfYXRtX29wdGlvbl9kZXNjcmlwdGlvbnNbXSA9CiAgICAgSUZNX1NVQlRZUEVfQVRN
X09QVElPTl9ERVNDUklQVElPTlM7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWZtZWRpYV9kZXNj
cmlwdGlvbiBpZm1fc3VidHlwZV9tYmltX2Rlc2NyaXB0aW9uc1tdID0KKyAgICBJRk1fU1VCVFlQ
RV9NQklNX0RFU0NSSVBUSU9OUzsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZm1lZGlhX2Rlc2Ny
aXB0aW9uIGlmbV9zdWJ0eXBlX21iaW1fb3B0aW9uX2Rlc2NyaXB0aW9uc1tdID0KKyAgICBJRk1f
U1VCVFlQRV9NQklNX09QVElPTl9ERVNDUklQVElPTlM7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
aWZtZWRpYV9kZXNjcmlwdGlvbiBpZm1fc3VidHlwZV9zaGFyZWRfZGVzY3JpcHRpb25zW10gPQog
ICAgIElGTV9TVUJUWVBFX1NIQVJFRF9ERVNDUklQVElPTlM7CiAKQEAgLTQyNyw2ICs0MzMsMTEg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpZm1lZGlhX3R5cGVfdG9fc3VidHlwZSBpZm1lZGlhX3R5
cGVzX3RvX3N1YnR5cGVzW10gPSB7CiAJICAmaWZtX3N1YnR5cGVfYXRtX29wdGlvbl9kZXNjcmlw
dGlvbnNbMF0sCiAJICBOVUxMLAogCX0sCisJeworCSAgJmlmbV9zdWJ0eXBlX21iaW1fZGVzY3Jp
cHRpb25zWzBdLAorCSAgJmlmbV9zdWJ0eXBlX21iaW1fb3B0aW9uX2Rlc2NyaXB0aW9uc1swXSwK
KwkgIE5VTEwsCisJfSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9zeXMvbmV0L2lmX21lZGlhLmgg
Yi9zeXMvbmV0L2lmX21lZGlhLmgKaW5kZXggYzAzYTRjODdiMzU1Li4yODEyY2EyZjRhZGEgMTAw
NjQ0Ci0tLSBhL3N5cy9uZXQvaWZfbWVkaWEuaAorKysgYi9zeXMvbmV0L2lmX21lZGlhLmgKQEAg
LTMzOCw2ICszMzgsMTggQEAgdWludDY0X3QJaWZtZWRpYV9iYXVkcmF0ZShpbnQpOwogI2RlZmlu
ZQlJRk1fQVRNX05PU0NSQU1CCTB4MDAwMDAyMDAJLyogbm8gc2NyYW1ibGluZyAqLwogI2RlZmlu
ZQlJRk1fQVRNX1VOQVNTSUdORUQJMHgwMDAwMDQwMAkvKiB1bmFzc2lnbmVkIGNlbGxzICovCiAK
Ky8qCisgKiBNQklNCisgKi8KKyNkZWZpbmUJSUZNX01CSU0JMHgwMDAwMDEwMAorI2RlZmluZQlJ
Rk1fTUJJTV9VTktOT1dOCTMKKyNkZWZpbmUJSUZNX01CSU1fR1BSUwkJNAorI2RlZmluZQlJRk1f
TUJJTV9FREdFCQk1CisjZGVmaW5lCUlGTV9NQklNX1VNVFMJCTYKKyNkZWZpbmUJSUZNX01CSU1f
SFNEUEEJCTcKKyNkZWZpbmUJSUZNX01CSU1fSFNVUEEJCTgKKyNkZWZpbmUJSUZNX01CSU1fTFRF
CQk5CisKIC8qCiAgKiBTaGFyZWQgbWVkaWEgc3ViLXR5cGVzCiAgKi8KQEAgLTQyNSw2ICs0Mzcs
NyBAQCBzdHJ1Y3QgaWZtZWRpYV9kZXNjcmlwdGlvbiB7CiAJeyBJRk1fRVRIRVIsCQkiRXRoZXJu
ZXQiIH0sCQkJCVwKIAl7IElGTV9JRUVFODAyMTEsCSJJRUVFIDgwMi4xMSBXaXJlbGVzcyBFdGhl
cm5ldCIgfSwJXAogCXsgSUZNX0FUTSwJCSJBVE0iIH0sCQkJCVwKKwl7IElGTV9NQklNLAkJIk1C
SU0iIH0sCQkJCVwKIAl7IDAsIE5VTEwgfSwJCQkJCQkJXAogfQogCkBAIC03MjgsNiArNzQxLDMx
IEBAIHN0cnVjdCBpZm1lZGlhX2Rlc2NyaXB0aW9uIHsKIAl7IDAsIE5VTEwgfSwJCQkJCQkJXAog
fQogCisjZGVmaW5lCUlGTV9TVUJUWVBFX01CSU1fREVTQ1JJUFRJT05TIHsJCQkJCVwKKwl7IElG
TV9NQklNX1VOS05PV04sCSJVbmtub3duIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9HUFJTLAkiR1BS
UyIgfSwJCQkJXAorCXsgSUZNX01CSU1fRURHRSwJIkVER0UiIH0sCQkJCVwKKwl7IElGTV9NQklN
X1VNVFMsCSJVTVRTIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9IU0RQQSwJIkhTRFBBIiB9LAkJCQlc
CisJeyBJRk1fTUJJTV9IU1VQQSwJIkhTVVBBIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9MVEUsCQki
TFRFIiB9LAkJCQlcCit9CisKKyNkZWZpbmUJSUZNX1NVQlRZUEVfTUJJTV9BTElBU0VTIHsJCQkJ
CVwKKwl7IElGTV9NQklNX1VOS05PV04sCSJVTktOT1dOIiB9LAkJCQlcCisJeyBJRk1fTUJJTV9H
UFJTLAkiMkciIH0sCQkJCQlcCisJeyBJRk1fTUJJTV9FREdFLAkiMi41RyIgfSwJCQkJXAorCXsg
SUZNX01CSU1fVU1UUywJIjNHIiB9LAkJCQkJXAorCXsgSUZNX01CSU1fSFNEUEEsCSIzRyIgfSwJ
CQkJCVwKKwl7IElGTV9NQklNX0hTVVBBLAkiM0ciIH0sCQkJCQlcCisJeyBJRk1fTUJJTV9MVEUs
CQkiNEciIH0sCQkJCQlcCisJeyAwLCBOVUxMIH0sCQkJCQkJCVwKK30KKworI2RlZmluZQlJRk1f
U1VCVFlQRV9NQklNX09QVElPTl9ERVNDUklQVElPTlMgewkJCQlcCisJeyAwLCBOVUxMIH0sCQkJ
CQkJCVwKK30KKwogI2RlZmluZQlJRk1fU1VCVFlQRV9TSEFSRURfREVTQ1JJUFRJT05TIHsJCQkJ
XAogCXsgSUZNX0FVVE8sCSJhdXRvc2VsZWN0IiB9LAkJCQkJXAogCXsgSUZNX01BTlVBTCwJIm1h
bnVhbCIgfSwJCQkJCVwKQEAgLTkzMiw2ICs5NzAsOCBAQCBzdHJ1Y3QgaWZtZWRpYV9zdGF0dXNf
ZGVzY3JpcHRpb24gewogCSAgICB7ICJubyBuZXR3b3JrIiwgImFjdGl2ZSIgfSB9LAkJCQlcCiAJ
eyBJRk1fQVRNLAkJSUZNX0FWQUxJRCwJSUZNX0FDVElWRSwJCVwKIAkgICAgeyAibm8gbmV0d29y
ayIsICJhY3RpdmUiIH0gfSwJCQkJXAorCXsgSUZNX01CSU0sCQlJRk1fQVZBTElELAlJRk1fQUNU
SVZFLAkJXAorCSAgICB7ICJubyBuZXR3b3JrIiwgImFjdGl2ZSIgfSB9LAkJCQlcCiAJeyAwLAkJ
CTAsCQkwLAkJCVwKIAkgICAgeyBOVUxMLCBOVUxMIH0gfQkJCQkJCVwKIH0KZGlmZiAtLWdpdCBh
L3N5cy9uZXQvaWZfdHlwZXMuaCBiL3N5cy9uZXQvaWZfdHlwZXMuaAppbmRleCBiMDY5MmFmNjkz
MDguLjRjYjI5ZmQ1MWViZCAxMDA2NDQKLS0tIGEvc3lzL25ldC9pZl90eXBlcy5oCisrKyBiL3N5
cy9uZXQvaWZfdHlwZXMuaApAQCAtMjU0LDYgKzI1NCw3IEBAIHR5cGVkZWYgZW51bSB7CiAJSUZU
X1BGTE9HCT0gMHhmNiwJCS8qIFBGIHBhY2tldCBmaWx0ZXIgbG9nZ2luZyAqLwogCUlGVF9QRlNZ
TkMJPSAweGY3LAkJLyogUEYgcGFja2V0IGZpbHRlciBzeW5jaHJvbml6YXRpb24gKi8KIAlJRlRf
V0lSRUdVQVJECT0gMHhmOCwJCS8qIFdpcmVHdWFyZCB0dW5uZWwgKi8KKwlJRlRfTUJJTQk9IDB4
ZjkJCS8qIE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsICovCiB9IGlmVHlwZTsKIAog
LyoKZGlmZiAtLWdpdCBhL3N5cy9zeXMvc29ja2lvLmggYi9zeXMvc3lzL3NvY2tpby5oCmluZGV4
IDgyNGI3N2U1N2ExNy4uY2Y2MTIwNzljMmYzIDEwMDY0NAotLS0gYS9zeXMvc3lzL3NvY2tpby5o
CisrKyBiL3N5cy9zeXMvc29ja2lvLmgKQEAgLTE0Nyw0ICsxNDcsOCBAQAogI2RlZmluZQlTSU9D
U0lGQ0FQTlYJX0lPVygnaScsIDE1NSwgc3RydWN0IGlmcmVxKQkvKiBzZXQgSUYgZmVhdHVyZXMg
Ki8KICNkZWZpbmUJU0lPQ0dJRkNBUE5WCV9JT1dSKCdpJywgMTU2LCBzdHJ1Y3QgaWZyZXEpCS8q
IGdldCBJRiBmZWF0dXJlcyAqLwogCisjZGVmaW5lCVNJT0NHVU1CSU5GTwlfSU9XUignaScsIDE1
Nywgc3RydWN0IGlmcmVxKQkvKiBnZXQgTUJJTSBpbmZvICovCisjZGVmaW5lCVNJT0NTVU1CUEFS
QU0JIF9JT1coJ2knLCAxNTgsIHN0cnVjdCBpZnJlcSkJLyogc2V0IE1CSU0gcGFyYW0gKi8KKyNk
ZWZpbmUJU0lPQ0dVTUJQQVJBTQlfSU9XUignaScsIDE1OSwgc3RydWN0IGlmcmVxKQkvKiBnZXQg
TUJJTSBwYXJhbSAqLworCiAjZW5kaWYgLyogIV9TWVNfU09DS0lPX0hfICovCi0tIAoyLjQ2LjIK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263112</attachid>
            <date>2025-08-21 14:55:55 +0000</date>
            <delta_ts>2025-08-21 14:55:55 +0000</delta_ts>
            <desc>umb_no_netmap</desc>
            <filename>if_umb.c.diff</filename>
            <type>text/plain</type>
            <size>937</size>
            <attacher name="Zhenlei Huang">zlei</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3N5cy9kZXYvdXNiL25ldC9pZl91bWIuYyBiL3N5cy9kZXYvdXNiL25ldC9p
Zl91bWIuYwppbmRleCA1NzAzYmMwM2RkMzkuLjQ2MTdmM2JjMjliYyAxMDA2NDQKLS0tIGEvc3lz
L2Rldi91c2IvbmV0L2lmX3VtYi5jCisrKyBiL3N5cy9kZXYvdXNiL25ldC9pZl91bWIuYwpAQCAt
MTc3LDkgKzE3Nyw3IEBAIHN0YXRpYyB2b2lkCSB1bWJfbmNtX3NldHVwKHN0cnVjdCB1bWJfc29m
dGMgKiwgc3RydWN0IHVzYl9jb25maWcgKik7CiBzdGF0aWMgdm9pZAkgdW1iX2Nsb3NlX2J1bGtw
aXBlcyhzdHJ1Y3QgdW1iX3NvZnRjICopOwogc3RhdGljIGludAkgdW1iX2lvY3RsKGlmX3QgLCB1
X2xvbmcsIGNhZGRyX3QpOwogc3RhdGljIHZvaWQJIHVtYl9pbml0KHZvaWQgKik7Ci0jaWZkZWYg
REVWX05FVE1BUAogc3RhdGljIHZvaWQJIHVtYl9pbnB1dChpZl90ICwgc3RydWN0IG1idWYgKik7
Ci0jZW5kaWYKIHN0YXRpYyBpbnQJIHVtYl9vdXRwdXQoaWZfdCAsIHN0cnVjdCBtYnVmICosCiAJ
CSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICopOwogc3RhdGljIHZv
aWQJIHVtYl9zdGFydChpZl90ICk7CkBAIC01ODUsOSArNTgzLDcgQEAgdW1iX2F0dGFjaF90YXNr
KHN0cnVjdCB1c2JfcHJvY19tc2cgKm1zZykKIAlpZl9zZXRzb2Z0YyhpZnAsIHNjKTsKIAlpZl9z
ZXRmbGFncyhpZnAsIElGRl9TSU1QTEVYIHwgSUZGX01VTFRJQ0FTVCB8IElGRl9QT0lOVE9QT0lO
VCk7CiAJaWZfc2V0aW9jdGxmbihpZnAsIHVtYl9pb2N0bCk7Ci0jaWZkZWYgREVWX05FVE1BUAog
CWlmX3NldGlucHV0Zm4oaWZwLCB1bWJfaW5wdXQpOwotI2VuZGlmCiAJaWZfc2V0b3V0cHV0Zm4o
aWZwLCB1bWJfb3V0cHV0KTsKIAlpZl9zZXRzdGFydGZuKGlmcCwgdW1iX3N0YXJ0KTsKIAlpZl9z
ZXRpbml0Zm4oaWZwLCB1bWJfaW5pdCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>